@provoly/dashboard 1.1.3 → 1.1.5

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.
@@ -629,6 +629,9 @@ export class WidgetMapComponent extends DataWidgetComponent {
629
629
  }
630
630
  }
631
631
  }
632
+ else {
633
+ layer.title = geoLayer.paramLayer;
634
+ }
632
635
  }
633
636
  else {
634
637
  layer.title = this.translateService.instant(`@pry.widget.map.layerType.${layer.type}`, { ...layer });
@@ -1168,4 +1171,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImpor
1168
1171
  type: ViewChild,
1169
1172
  args: ['sliderElement']
1170
1173
  }] } });
1171
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LW1hcC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcm92b2x5L2Rhc2hib2FyZC93aWRnZXRzL3dpZGdldC1tYXAvY29tcG9uZW50L3dpZGdldC1tYXAuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvd2lkZ2V0cy93aWRnZXQtbWFwL2NvbXBvbmVudC93aWRnZXQtbWFwLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxTQUFTLEVBRVQsTUFBTSxFQUdOLFFBQVEsRUFDUixXQUFXLEVBQ1gsU0FBUyxFQUNULGdCQUFnQixFQUNqQixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBTUwsY0FBYyxFQUNkLGVBQWUsRUFDZixnQkFBZ0IsRUFDaEIsa0JBQWtCLEVBRWxCLG1CQUFtQixFQUNuQixlQUFlLEVBQ2YsbUJBQW1CLEVBRW5CLGNBQWMsRUFFZCxXQUFXLEVBQ1gsbUJBQW1CLEVBRW5CLFNBQVMsRUFjVCxlQUFlLEVBQ2YsU0FBUyxFQUNULGlCQUFpQixFQUlqQixjQUFjLEVBR2QsV0FBVyxFQUNYLG9CQUFvQixFQUNwQixlQUFlLEVBQ2hCLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxLQUFLLE1BQU0scUJBQXFCLENBQUM7QUFDeEMsT0FBTyxFQUFXLEdBQUcsRUFBRSxJQUFJLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFFeEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFeEQsT0FBTyxFQUFrQixJQUFJLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFaEQsT0FBTyxXQUFXLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUNyQyxPQUFPLEVBQUUs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QUUsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7Z0JBQzFFLEtBQUssQ0FBQyxJQUFJLEtBQUssbUJBQW1CLEVBQ2xDLENBQUM7Z0JBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQ2pCLGdCQUFnQixDQUFDLGdCQUFnQixDQUFDO29CQUNoQyxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUk7aUJBQ2pCLENBQUMsQ0FDSCxDQUFDO1lBQ0osQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs4R0FobURVLGtCQUFrQixtUUE0R1AsaUJBQWlCO2tHQTVHNUIsa0JBQWtCLG1UQU1NLGdCQUFnQixtSEFDVixXQUFXLHFKQy9IdEQsd3ovQkFrckJBOzsyRkQxakJhLGtCQUFrQjtrQkFKOUIsU0FBUzsrQkFDRSxnQkFBZ0I7OzBCQStHdkIsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxpQkFBaUI7eUNBeEdsQixNQUFNO3NCQUExQixTQUFTO3VCQUFDLFFBQVE7Z0JBQ0MsS0FBSztzQkFBeEIsU0FBUzt1QkFBQyxPQUFPO2dCQUNxQyxZQUFZO3NCQUFsRSxTQUFTO3VCQUFDLGNBQWMsRUFBRSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtnQkFDRyxrQkFBa0I7c0JBQXpFLFNBQVM7dUJBQUMsb0JBQW9CLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFO2dCQUMxQixhQUFhO3NCQUF4QyxTQUFTO3VCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEluamVjdCxcbiAgSW5qZWN0b3IsXG4gIE9uRGVzdHJveSxcbiAgT3B0aW9uYWwsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdDb250YWluZXJSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdG9yZSB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCB7XG4gIEFnZ3JlZ2F0aW9uUmVzdWx0LFxuICBBdHRyaWJ1dGUsXG4gIEJhc2VXaWRnZXRNYXBMYXllck9wdGlvbnMsXG4gIENoYXJ0QWdncmVnYXRlZFdpZGdldE9wdGlvbnMsXG4gIENsYXNzLFxuICBDbGFzc1NlbGVjdG9ycyxcbiAgQ29uZmlnU2VsZWN0b3JzLFxuICBEYXNoYm9hcmRBY3Rpb25zLFxuICBEYXNoYm9hcmRTZWxlY3RvcnMsXG4gIERhdGFzZXQsXG4gIERhdGFTb3VyY2VTZWxlY3RvcnMsXG4gIERhdGFzb3VyY2VVdGlscyxcbiAgRGF0YVdpZGdldENvbXBvbmVudCxcbiAgRmllbGQsXG4gIEZpZWxkU2VsZWN0b3JzLFxuICBGaWx0ZXJDb250ZXh0LFxuICBHZW9NZXRhZGF0YSxcbiAgR2VvbWV0cmljRmllbGRUeXBlcyxcbiAgR2V0Q2FwYWJpbGl0aWVzUmVzcG9uc2UsXG4gIEl0ZW1VdGlscyxcbiAgTGF5ZXJHcm91cCxcbiAgTWFwQXV0b0xheWVyT3B0aW9ucyxcbiAgTWFwRmVhdHVyZUxheWVyT3B0aW9ucyxcbiAgTWFwR2VvU2VydmVyTGF5ZXJPcHRpb25zLFxuICBNYXBSYXN0ZXJUaWxlTGF5ZXJPcHRpb25zLFxuICBNYXBWZWN0b3JUaWxlTGF5ZXJPcHRpb25zLFxuICBNYXBXaWRnZXRCdWJibGVMYXllck9wdGlvbnMsXG4gIE1hcFdpZGdldEhlYXRNYXBMYXllck9wdGlvbnMsXG4gIE1hcFdpZGdldExheWVyT3B0aW9ucyxcbiAgTWFwV2lkZ2V0TWFya2VyTGF5ZXJPcHRpb25zLFxuICBNYXBXaWRnZXRPcHRpb25zLFxuICBNYXBXTVNMYXllckxheWVyT3B0aW9ucyxcbiAgTWFwV01UU0xheWVyTGF5ZXJPcHRpb25zLFxuICBOYW1lZFF1ZXJ5VHlwZXMsXG4gIE9wZXJhdGlvbixcbiAgUFJZX0dFT0FVVEhfVE9LRU4sXG4gIFByeUFnZ3JlZ2F0aW9uU2VydmljZSxcbiAgUHJ5R2VvQXV0aFNlcnZpY2UsXG4gIFByeUkxOG5TZXJ2aWNlLFxuICBSZXN1bHRzZXRVdGlscyxcbiAgU3ltYm9sU2VydmljZSxcbiAgVG9vbHRpcEZhY3RvcnlTZXJ2aWNlLFxuICBUb29sdGlwTW9kZSxcbiAgV0lER0VUX0hFQURFUl9IRUlHSFQsXG4gIHdpZGdldE1hcENvbmZpZ1xufSBmcm9tICdAcHJvdm9seS9kYXNoYm9hcmQnO1xuaW1wb3J0IGVxdWFsIGZyb20gJ2Zhc3QtZGVlcC1lcXVhbC9lczYnO1xuaW1wb3J0IHsgRmVhdHVyZSwgTWFwLCBWaWV3IH0gZnJvbSAnb2wnO1xuaW1wb3J0IHsgQ29vcmRpbmF0ZSB9IGZyb20gJ29sL2Nvb3JkaW5hdGUnO1xuaW1wb3J0IHsgYm91bmRpbmdFeHRlbnQsIGNyZWF0ZUVtcHR5IH0gZnJvbSAnb2wvZXh0ZW50JztcbmltcG9ydCB7IENpcmNsZSwgR2VvbWV0cnksIFBvaW50IH0gZnJvbSAnb2wvZ2VvbSc7XG5pbXBvcnQgeyBIZWF0bWFwLCBMYXllciwgVGlsZSB9IGZyb20gJ29sL2xheWVyJztcbmltcG9ydCBCYXNlTGF5ZXIgZnJvbSAnb2wvbGF5ZXIvQmFzZSc7XG5pbXBvcnQgVmVjdG9yTGF5ZXIgZnJvbSAnb2wvbGF5ZXIvVmVjdG9yJztcbmltcG9ydCB7IGZyb21Mb25MYXQgfSBmcm9tICdvbC9wcm9qJztcbmltcG9ydCB7IHJlZ2lzdGVyIH0gZnJvbSAnb2wvcHJvai9wcm9qNCc7XG5pbXBvcnQgeyBEYXRhVGlsZSwgSW1hZ2VXTVMsIFRpbGVXTVMgfSBmcm9tICdvbC9zb3VyY2UnO1xuaW1wb3J0IFZlY3RvclNvdXJjZSBmcm9tICdvbC9zb3VyY2UvVmVjdG9yJztcbmltcG9ydCB7IFN0eWxlIH0gZnJvbSAnb2wvc3R5bGUnO1xuaW1wb3J0IHByb2o0IGZyb20gJ3Byb2o0JztcbmltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgY2F0Y2hFcnJvcixcbiAgY29tYmluZUxhdGVzdCxcbiAgZGVib3VuY2VUaW1lLFxuICBkZWxheSxcbiAgZGlzdGluY3RVbnRpbENoYW5nZWQsXG4gIGZpbHRlcixcbiAgZnJvbSxcbiAgbWFwLFxuICBtZXJnZU1hcCxcbiAgT2JzZXJ2YWJsZSxcbiAgb2YsXG4gIHN0YXJ0V2l0aCxcbiAgc3dpdGNoTWFwLFxuICB3aXRoTGF0ZXN0RnJvbVxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEludGVyYWN0aW9uTWFuYWdlciB9IGZyb20gJy4uL2ludGVyYWN0aW9uL2ludGVyYWN0aW9uLW1hbmFnZXIuY2xhc3MnO1xuaW1wb3J0IHsgQ3FsVXRpbHMgfSBmcm9tICcuLi91dGlscy9jcWwtdXRpbHMuY2xhc3MnO1xuaW1wb3J0IHsgWE1MVXRpbHMgfSBmcm9tICcuLi91dGlscy94bWwtdXRpbHMuY2xhc3MnO1xuaW1wb3J0IHsgV2lkZ2V0TWFwTGF5ZXJTZXJ2aWNlIH0gZnJvbSAnLi93aWRnZXQtbWFwLWxheWVyLnNlcnZpY2UnO1xuaW1wb3J0IE1hcGJveFZlY3RvckxheWVyIGZyb20gJ29sL2xheWVyL01hcGJveFZlY3Rvcic7XG5pbXBvcnQgeyBXaWRnZXRNYXBVdGlscyB9IGZyb20gJy4uL3V0aWxzL3dpZGdldC1tYXAudXRpbHMnO1xuaW1wb3J0IHsgTGF5ZXJTbGlkZXIgfSBmcm9tICcuLi9pbnRlcmFjdGlvbi9sYXllci1zbGlkZXIuY2xhc3MnO1xuaW1wb3J0IFRpbGVMYXllciBmcm9tICdvbC9sYXllci9UaWxlJztcbmltcG9ydCBXZWJHTFRpbGVMYXllciBmcm9tICdvbC9sYXllci9XZWJHTFRpbGUnO1xuaW1wb3J0IHsgQXR0cmlidXRpb24sIGRlZmF1bHRzIH0gZnJvbSAnb2wvY29udHJvbCc7XG5pbXBvcnQgVmVjdG9yVGlsZUxheWVyIGZyb20gJ29sL2xheWVyL1ZlY3RvclRpbGUnO1xuaW1wb3J0IHsgQ2RrRHJhZ0Ryb3AgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcbmltcG9ydCB7IFRvb2x0aXBNYW5hZ2VyIH0gZnJvbSAnLi4vaW50ZXJhY3Rpb24vdG9vbHRpcC1tYW5hZ2VyLmNsYXNzJztcblxuZXhwb3J0IGNvbnN0IFRPT0xUSVBfUEFERElORyA9IDE1O1xuZXhwb3J0IGNvbnN0IE5PTl9NQU5EQVRPUllfRklUX0xBWUVSX1RZUEVTID0gWyd3bXMnLCAnZ2Vvc2VydmVyJ107XG5leHBvcnQgY29uc3QgREVGQVVMVF9MQVlFUl9HUk9VUCA9ICdERUZBVUxUJztcblxuLy8gRGVmaW5lIExhbWJlcnQgUHJvamVjdGlvblxucHJvajQuZGVmcyhcbiAgJ0VQU0c6MjE1NCcsXG4gICcrcHJvaj1sY2MgK2xhdF8wPTQ2LjUgK2xvbl8wPTMgK2xhdF8xPTQ5ICtsYXRfMj00NCAreF8wPTcwMDAwMCAreV8wPTY2MDAwMDAgK2VsbHBzPUdSUzgwICt0b3dnczg0PTAsMCwwLDAsMCwwLDAgK3VuaXRzPW0gK25vX2RlZnMgK3R5cGU9Y3JzJ1xuKTtcbnJlZ2lzdGVyKHByb2o0KTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncHJ5LXdpZGdldC1tYXAnLFxuICB0ZW1wbGF0ZVVybDogJy4vd2lkZ2V0LW1hcC5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgV2lkZ2V0TWFwQ29tcG9uZW50IGV4dGVuZHMgRGF0YVdpZGdldENvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gIHN0YXRpYyBpZENvdW50ZXIgPSAwO1xuICBpZCA9IGAke1dpZGdldE1hcENvbXBvbmVudC5pZENvdW50ZXIrK31gO1xuICBtYXBVcmwkOiBPYnNlcnZhYmxlPHN0cmluZz47XG4gIEBWaWV3Q2hpbGQoJ21hcFJlZicpIG1hcFJlZiE6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ3BvcHVwJykgcG9wdXAhOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdwb3B1cENvbnRlbnQnLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSkgcG9wdXBDb250ZW50ITogVmlld0NvbnRhaW5lclJlZjtcbiAgQFZpZXdDaGlsZCgnZXhwb3J0VHlwZVRlbXBsYXRlJywgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KSBleHBvcnRUeXBlVGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBAVmlld0NoaWxkKCdzbGlkZXJFbGVtZW50Jykgc2xpZGVyRWxlbWVudCE6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XG4gIG9wdGlvbnMkOiBPYnNlcnZhYmxlPE1hcFdpZGdldE9wdGlvbnM+O1xuICBsYXllclR5cGVzID0gdGhpcy53aWRnZXRNYXBMYXllclNlcnZpY2UuaW1wbGVtZW50YXRpb25MaXN0XG4gICAgLmZpbHRlcigodHlwZSkgPT4gdHlwZSAhPT0gJ2F1dG8nKVxuICAgIC5zb3J0KChhLCBiKSA9PlxuICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlXG4gICAgICAgIC5pbnN0YW50KCdAcHJ5LndpZGdldC5tYXAubGF5ZXJUeXBlLicgKyBhKVxuICAgICAgICAubG9jYWxlQ29tcGFyZSh0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnQHByeS53aWRnZXQubWFwLmxheWVyVHlwZS4nICsgYikpXG4gICAgKTtcbiAgb3B0aW9uc0NvcHk6IE1hcFdpZGdldE9wdGlvbnMgPSB7fSBhcyBNYXBXaWRnZXRPcHRpb25zO1xuICBjbGFzc2VzJDogT2JzZXJ2YWJsZTxDbGFzc1tdPjtcbiAgZmllbGRzJDogT2JzZXJ2YWJsZTxGaWVsZFtdPjtcbiAgc2VsZWN0ZWRJZHMkOiBPYnNlcnZhYmxlPHN0cmluZ1tdPjtcbiAgYm90dG9tTGVmdCQ6IE9ic2VydmFibGU8c3RyaW5nPjtcbiAgbGF5ZXJzJCE6IE9ic2VydmFibGU8QmFzZUxheWVyW10+O1xuICBtYXAhOiBNYXA7XG4gIGFkZGl0aW9uYWxMYXllcnMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxWZWN0b3JMYXllcjxWZWN0b3JTb3VyY2U8R2VvbWV0cnk+PltdPihbXSk7XG4gIHN0eWxlcyQ6IE9ic2VydmFibGU8XG4gICAge1xuICAgICAgaWRlbnRpZmllcjogc3RyaW5nO1xuICAgICAgbGFiZWw6IHN0cmluZztcbiAgICB9W11cbiAgPjtcbiAgV0lER0VUX0hFQURFUl9IRUlHSFQgPSBXSURHRVRfSEVBREVSX0hFSUdIVDtcbiAgaSA9IDA7XG4gIGl0ZW1TdHlsZXMkITogT2JzZXJ2YWJsZTx7XG4gICAgW2lkOiBzdHJpbmddOiB7XG4gICAgICBjbGFzc2ljOiBTdHlsZTtcbiAgICAgIGJvcmRlcmVkOiBTdHlsZTtcbiAgICB9O1xuICB9PjtcbiAgaGVpZ2h0JDogT2JzZXJ2YWJsZTxudW1iZXI+O1xuICBhY3Rpb25zJCA9IHdpZGdldE1hcENvbmZpZy5hY3Rpb25zJDtcbiAgZ2VvU2VydmVyTGF5ZXJEZXNjcmlwdGlvbnMkOiBPYnNlcnZhYmxlPE1hcEdlb1NlcnZlckxheWVyT3B0aW9uc1tdPjtcbiAgbGVnZW5kVGFiT3BlbiA9IGZhbHNlO1xuICBsYXllcnNUYWJPcGVuID0gZmFsc2U7XG4gIGxlZ2VuZFRhYiA9IDA7XG4gIGxlZ2VuZExheWVycyQhOiBPYnNlcnZhYmxlPChNYXBHZW9TZXJ2ZXJMYXllck9wdGlvbnMgfCBNYXBXTVNMYXllckxheWVyT3B0aW9ucylbXT47XG4gIGxlZ2VuZFRvcCQ6IE9ic2VydmFibGU8bnVtYmVyPjtcbiAgbGF5ZXJzVG9wJCE6IE9ic2VydmFibGU8bnVtYmVyPjtcbiAgbGVnZW5kSGVpZ2h0JDogT2JzZXJ2YWJsZTxudW1iZXI+O1xuICBpbWFnZU5vdFByb3ZpZGVkOiBib29sZWFuW10gPSBbXTtcbiAgYmFzaWNBY3Rpb25zJDogT2JzZXJ2YWJsZTwoJ2NsaWNrJyB8ICdsYXNzbycgfCAncmVjdGFuZ2xlJyB8ICd6b29tJyB8ICdtb3ZlJyB8ICdleHBvcnQnIHwgJ3VwbG9hZCcpW10+O1xuICB6b29tQW5kQ2VudGVyJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8e1xuICAgIHpvb20/OiB7XG4gICAgICBzdGFydDogbnVtYmVyO1xuICAgICAgbWluOiBudW1iZXI7XG4gICAgICBtYXg6IG51bWJlcjtcbiAgICB9O1xuICAgIGNlbnRlcj86IG51bWJlcltdO1xuICB9Pih7fSk7XG4gIG1hcFN0eWxlVXJsJCE6IE9ic2VydmFibGU8c3RyaW5nIHwgbnVsbD47XG4gIGludGVyYWN0aW9uTWFuYWdlcjogSW50ZXJhY3Rpb25NYW5hZ2VyID0gbmV3IEludGVyYWN0aW9uTWFuYWdlcigpO1xuICB0b29sdGlwTWFuYWdlcjogVG9vbHRpcE1hbmFnZXIgPSBuZXcgVG9vbHRpcE1hbmFnZXIoKTtcbiAgbWFwU3R5bGVMYXllciQhOiBPYnNlcnZhYmxlPChWZWN0b3JUaWxlTGF5ZXIgfCBUaWxlTGF5ZXI8YW55PilbXT47XG4gIFNUWUxFX0ZST01fVVJMID0gJ191cmwnO1xuICBOT19TVFlMRSA9ICdub25lJztcbiAgd21zQ2FwYWJpbGl0aWVzJDogT2JzZXJ2YWJsZTxcbiAgICB8IHtcbiAgICAgICAgW3A6IHN0cmluZ106IEdldENhcGFiaWxpdGllc1Jlc3BvbnNlIHwgbnVsbDtcbiAgICAgIH1cbiAgICB8IHVuZGVmaW5lZFxuICA+O1xuICBhdXRvRGF0YXNldExheWVycyQ6IE9ic2VydmFibGU8TWFwQXV0b0xheWVyT3B0aW9uc1tdPjtcbiAgZml0RXh0ZW50cyQhOiBPYnNlcnZhYmxlPFxuICAgIHtcbiAgICAgIGRhdGFzb3VyY2U6IHN0cmluZztcbiAgICAgIGV4dGVudDogQ29vcmRpbmF0ZVtdO1xuICAgICAgZXJyb3I6IGJvb2xlYW47XG4gICAgfVtdXG4gID47XG4gIGRhdGFzb3VyY2VGaWx0ZXJzJDogT2JzZXJ2YWJsZTxhbnk+O1xuICB1c2VkQ2xhc3NlcyQ6IE9ic2VydmFibGU8YW55PjtcbiAgbGF5ZXJTbGlkZXIgPSBuZXcgTGF5ZXJTbGlkZXIoKTtcbiAgaGFzU2xpZGVMYXllciQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIHNsaWRlczogeyBpZDogdW5kZWZpbmVkIHwgc3RyaW5nOyBsYWJlbDogc3RyaW5nIH1bXTtcbiAgcG9zc2libGVTdHlsZXM6IHtcbiAgICBbcDogc3RyaW5nXToge1xuICAgICAgbGF5ZXJzOiB7IFtwOiBzdHJpbmddOiB7IHBhcmFtOiBzdHJpbmc7IHN0eWxlczogeyBpZDogc3RyaW5nOyBsYWJlbDogc3RyaW5nIH1bXSB9IH0gfCBudWxsO1xuICAgICAgdXJsOiBzdHJpbmc7XG4gICAgfTtcbiAgfSA9IHt9O1xuICBhdHRyaWJ1dGlvbnMgPSBuZXcgQXR0cmlidXRpb24oKTtcbiAgYWN0aW9uTWVudU9wZW4kID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG4gIGF0dHJpYnV0aW9ucyQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIG9sWm9vbUVsZW1lbnQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxIVE1MRGl2RWxlbWVudCB8IG51bGw+KG51bGwpO1xuICBwcmV2aW91c0xheWVyczogQmFzZUxheWVyW10gPSBbXTtcbiAgbGF5ZXJHcm91cHMkOiBPYnNlcnZhYmxlPExheWVyR3JvdXBbXT47XG4gIGxheWVyR3JvdXBzOiBMYXllckdyb3VwW10gPSBbXTtcbiAgbGF5ZXJTZXR0aW5nc0V4cGFuZGVkU3RhdGU6IHsgW2tleTogc3RyaW5nXTogYm9vbGVhbiB9ID0ge307XG5cbiAgY29uc3RydWN0b3IoXG4gICAgc3RvcmU6IFN0b3JlPGFueT4sXG4gICAgcHVibGljIHRyYW5zbGF0ZVNlcnZpY2U6IFByeUkxOG5TZXJ2aWNlLFxuICAgIHByaXZhdGUgdG9vbHRpcEZhY3RvcnlTZXJ2aWNlOiBUb29sdGlwRmFjdG9yeVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzeW1ib2xTZXJ2aWNlOiBTeW1ib2xTZXJ2aWNlLFxuICAgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIHByaXZhdGUgd2lkZ2V0TWFwTGF5ZXJTZXJ2aWNlOiBXaWRnZXRNYXBMYXllclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBwcnlBZ2dyZWdhdGlvblNlcnZpY2U6IFByeUFnZ3JlZ2F0aW9uU2VydmljZSxcbiAgICBlbDogRWxlbWVudFJlZixcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KFBSWV9HRU9BVVRIX1RPS0VOKSBwcml2YXRlIGdlb0F1dGhTZXJ2aWNlOiBQcnlHZW9BdXRoU2VydmljZVxuICApIHtcbiAgICBzdXBlcihzdG9yZSwgZWwpO1xuXG4gICAgdGhpcy5nZXRPbFpvb21FbGVtZW50KCk7XG5cbiAgICB0aGlzLnNsaWRlcyA9IFtcbiAgICAgIHsgaWQ6ICdhbGwnLCBsYWJlbDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ0Bwcnkud2lkZ2V0Lm1hcC5zbGlkZS5hbGwnKSB9LFxuICAgICAgeyBpZDogJ2xlZnQnLCBsYWJlbDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ0Bwcnkud2lkZ2V0Lm1hcC5zbGlkZS5sZWZ0JykgfSxcbiAgICAgIHsgaWQ6ICdyaWdodCcsIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnQHByeS53aWRnZXQubWFwLnNsaWRlLnJpZ2h0JykgfVxuICAgIF07XG5cbiAgICB0aGlzLndpZGdldE1hcExheWVyU2VydmljZS53aXRoR2VvQXV0aCh0aGlzLmdlb0F1dGhTZXJ2aWNlKTtcblxuICAgIHRoaXMuYmFzaWNBY3Rpb25zJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5hY3Rpb25zJCxcbiAgICAgIHRoaXMuYWN0aW9uTWVudU9wZW4kLFxuICAgICAgdGhpcy5pbnRlcmFjdGlvbk1hbmFnZXIuc2VsZWN0aW9uSW50ZXJhY3Rpb24uc2VsZWN0aW9uVHlwZSRcbiAgICBdKS5waXBlKFxuICAgICAgbWFwKChbYWN0aW9ucywgbWVudU9wZW4sIHNlbGVjdGlvblR5cGVdKSA9PlxuICAgICAgICBtZW51T3BlblxuICAgICAgICAgID8gYWN0aW9ucy5maWx0ZXIoKGFjdGlvbikgPT4gYWN0aW9uICE9PSAnZXhwb3J0JyAmJiBhY3Rpb24gIT09ICd1cGxvYWQnKVxuICAgICAgICAgIDogYWN0aW9uc1xuICAgICAgICAgICAgICAuZmlsdGVyKChhY3Rpb24pID0+IGFjdGlvbiAhPT0gJ2V4cG9ydCcgJiYgYWN0aW9uICE9PSAndXBsb2FkJylcbiAgICAgICAgICAgICAgLmZpbHRlcigoYWN0aW9uKSA9PiBzZWxlY3Rpb25UeXBlID09PSBhY3Rpb24pXG4gICAgICApXG4gICAgKTtcblxuICAgIHRoaXMuY2xhc3NlcyQgPSB0aGlzLnN0b3JlXG4gICAgICAuc2VsZWN0KENsYXNzU2VsZWN0b3JzLmNsYXNzZXMpXG4gICAgICAucGlwZShtYXAoKGNsYXNzZXMpID0+IGNsYXNzZXMuc29ydCgoYSwgYikgPT4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKSkpKTtcbiAgICB0aGlzLnVzZWRDbGFzc2VzJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuY2xhc3NlcyQsIHRoaXMudXNlZERhdGFzb3VyY2VzJF0pLnBpcGUoXG4gICAgICBtYXAoKFtjbGFzc2VzLCBkYXRhc291cmNlc10pID0+IHtcbiAgICAgICAgcmV0dXJuIGNsYXNzZXMuZmlsdGVyKChjbGFzc0l0ZW0pID0+XG4gICAgICAgICAgZGF0YXNvdXJjZXMuc29tZSgoZGF0YVNvdXJjZSkgPT4ge1xuICAgICAgICAgICAgaWYgKGRhdGFTb3VyY2Uuc291cmNlVHlwZSA9PT0gJ25hbWVkUXVlcnknICYmICd0eXBlJyBpbiBkYXRhU291cmNlLnJlcXVlc3QpIHtcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGRhdGFTb3VyY2UucmVxdWVzdC50eXBlID09PSBOYW1lZFF1ZXJ5VHlwZXMuTVVMVElfQ0xBU1MgfHxcbiAgICAgICAgICAgICAgICBkYXRhU291cmNlLnJlcXVlc3QudHlwZSA9PT0gTmFtZWRRdWVyeVR5cGVzLkZVTExfVEVYVFxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGRhdGFTb3VyY2Uuc291cmNlVHlwZSA9PT0gJ2RhdGFzZXQnXG4gICAgICAgICAgICAgID8gZGF0YVNvdXJjZS5vQ2xhc3MgPT09IGNsYXNzSXRlbS5pZFxuICAgICAgICAgICAgICA6IGRhdGFTb3VyY2Uuc291cmNlVHlwZSA9PT0gJ25hbWVkUXVlcnknICYmICdvQ2xhc3MnIGluIGRhdGFTb3VyY2UucmVxdWVzdFxuICAgICAgICAgICAgICAgID8gZGF0YVNvdXJjZS5yZXF1ZXN0Lm9DbGFzcyA9PT0gY2xhc3NJdGVtLmlkXG4gICAgICAgICAgICAgICAgOiBkYXRhU291cmNlLnNvdXJjZVR5cGUgPT09ICduYW1lZFF1ZXJ5JyAmJiAndHlwZScgaW4gZGF0YVNvdXJjZS5yZXF1ZXN0XG4gICAgICAgICAgICAgICAgICA/IGRhdGFTb3VyY2UucmVxdWVzdC50eXBlID09PSBOYW1lZFF1ZXJ5VHlwZXMuTU9OT19DTEFTU1xuICAgICAgICAgICAgICAgICAgOiBmYWxzZTtcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSlcbiAgICApO1xuICAgIHRoaXMuZmllbGRzJCA9IHRoaXMuc3RvcmUuc2VsZWN0KEZpZWxkU2VsZWN0b3JzLmZpZWxkcyk7XG5cbiAgICB0aGlzLmRhdGFzb3VyY2VGaWx0ZXJzJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5zdG9yZS5zZWxlY3QoRGFzaGJvYXJkU2VsZWN0b3JzLmRhdGFzb3VyY2VGaWx0ZXJzKSxcbiAgICAgIHRoaXMuZGF0YXNvdXJjZUlkcyRcbiAgICBdKS5waXBlKFxuICAgICAgbWFwKFxuICAgICAgICAoW2ZpbHRlcnMsIGlkc10pID0+XG4gICAgICAgICAgT2JqZWN0LmtleXMoZmlsdGVycylcbiAgICAgICAgICAgIC5maWx0ZXIoKGZpbHRlckRzS2V5KSA9PiBpZHMuaW5jbHVkZXMoZmlsdGVyRHNLZXkpKVxuICAgICAgICAgICAgLnJlZHVjZSgocCwgYykgPT4gKHsgLi4ucCwgW2NdOiBmaWx0ZXJzW2NdIH0pLCB7fSkgYXMge1xuICAgICAgICAgICAgW3A6IHN0cmluZ106IEZpbHRlckNvbnRleHRbXTtcbiAgICAgICAgICB9XG4gICAgICApLFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKHAsIGMpID0+IGVxdWFsKHAsIGMpKVxuICAgICk7XG5cbiAgICB0aGlzLnN0eWxlcyQgPSB0aGlzLnN0b3JlLnNlbGVjdChDb25maWdTZWxlY3RvcnMubWFwU3R5bGVzKS5waXBlKFxuICAgICAgbWFwKChzdHlsZXMpID0+XG4gICAgICAgIHN0eWxlcy5jb25jYXQoXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWRlbnRpZmllcjogdGhpcy5OT19TVFlMRSxcbiAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnQHByeS53aWRnZXQubWFwLm5vU3R5bGUnKVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWRlbnRpZmllcjogdGhpcy5TVFlMRV9GUk9NX1VSTCxcbiAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnQHByeS53aWRnZXQubWFwLnN0eWxlRnJvbVVybCcpXG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICApXG4gICAgKTtcbiAgICB0aGlzLnNlbGVjdGVkSWRzJCA9IHRoaXMuc3RvcmUuc2VsZWN0KERhc2hib2FyZFNlbGVjdG9ycy5zZWxlY3RlZEl0ZW1JZHMpO1xuXG4gICAgdGhpcy5nZW9TZXJ2ZXJMYXllckRlc2NyaXB0aW9ucyQgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMudXNlZERhdGFzb3VyY2VzJC5waXBlKFxuICAgICAgICBzdGFydFdpdGgoW10pLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgocCwgYykgPT4gZXF1YWwocCwgYykpXG4gICAgICApLFxuICAgICAgdGhpcy5zdG9yZS5zZWxlY3QoQ29uZmlnU2VsZWN0b3JzLmdlb1NlcnZlclVybCkucGlwZShzdGFydFdpdGgodW5kZWZpbmVkKSlcbiAgICBdKS5waXBlKFxuICAgICAgZGVib3VuY2VUaW1lKDEwMCksXG4gICAgICBtYXAoKFtkYXRhU291cmNlcywgZ2VvU2VydmVyVXJsXSkgPT4ge1xuICAgICAgICBpZiAoIWdlb1NlcnZlclVybCkgcmV0dXJuIFtdO1xuICAgICAgICByZXR1cm4gZGF0YVNvdXJjZXNcbiAgICAgICAgICAuZmlsdGVyKChkcykgPT4gRGF0YXNvdXJjZVV0aWxzLmlzR2VvKGRzKSlcbiAgICAgICAgICAubWFwKChkcykgPT4ge1xuICAgICAgICAgICAgZHMgPSBkcyBhcyB1bmtub3duIGFzIERhdGFzZXQ7XG4gICAgICAgICAgICBjb25zdCBtZXRhZGF0YXM6IHtcbiAgICAgICAgICAgICAgW2tleTogc3RyaW5nXTogc3RyaW5nO1xuICAgICAgICAgICAgfSA9IHt9O1xuICAgICAgICAgICAgZHMubWV0YWRhdGE/LmZvckVhY2goKG0pID0+IChtZXRhZGF0YXNbbS5tZXRhZGF0YURlZi5uYW1lXSA9IG0udmFsdWUpKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHR5cGU6ICdnZW9zZXJ2ZXInLFxuICAgICAgICAgICAgICB1cmw6IGAke2dlb1NlcnZlclVybH0vJHtcbiAgICAgICAgICAgICAgICBtZXRhZGF0YXNbR2VvTWV0YWRhdGEuTkFNRVNQQUNFXS5sZW5ndGggPiAwID8gbWV0YWRhdGFzW0dlb01ldGFkYXRhLk5BTUVTUEFDRV0gKyAnLycgOiAnJ1xuICAgICAgICAgICAgICB9d21zP1NFUlZJQ0U9V01TJlZFUlNJT049MS4zLjBgLFxuICAgICAgICAgICAgICBwYXJhbVRpbGVkOiB0cnVlLFxuICAgICAgICAgICAgICBvcGFjaXR5OiBwYXJzZUludChtZXRhZGF0YXNbR2VvTWV0YWRhdGEuT1BBQ0lUWV0gPz8gMTAwLCAxMCksXG4gICAgICAgICAgICAgIG9DbGFzczogZHMub0NsYXNzLFxuICAgICAgICAgICAgICBrZXk6IG1ldGFkYXRhc1tHZW9NZXRhZGF0YS5OQU1FU1BBQ0VdICsgJzonICsgbWV0YWRhdGFzW0dlb01ldGFkYXRhLktFWV0sXG4gICAgICAgICAgICAgIG5hbWVzcGFjZTogbWV0YWRhdGFzW0dlb01ldGFkYXRhLk5BTUVTUEFDRV0sXG4gICAgICAgICAgICAgIHBhcmFtTGF5ZXI6IG1ldGFkYXRhc1tHZW9NZXRhZGF0YS5LRVldLFxuICAgICAgICAgICAgICBuYW1lOiBkcy5uYW1lLFxuICAgICAgICAgICAgICBkYXRhc291cmNlSWQ6IGRzLmlkXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLm1hcCgobGF5ZXIpID0+IGxheWVyIGFzIE1hcEdlb1NlcnZlckxheWVyT3B0aW9ucyk7XG4gICAgICB9KSxcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChwLCBjKSA9PiBlcXVhbChwLCBjKSksXG4gICAgICBzdGFydFdpdGgoW10pXG4gICAgKTtcblxuICAgIHRoaXMuYXV0b0RhdGFzZXRMYXllcnMkID0gY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLmNsYXNzZXMkLFxuICAgICAgdGhpcy5maWVsZHMkLFxuICAgICAgdGhpcy51c2VkRGF0YXNvdXJjZXMkLnBpcGUoXG4gICAgICAgIHN0YXJ0V2l0aChbXSksXG4gICAgICAgIG1hcChcbiAgICAgICAgICAoZGF0YXNvdXJjZXMpID0+XG4gICAgICAgICAgICBkYXRhc291cmNlcy5maWx0ZXIoKGRzKSA9PiBkcy5zb3VyY2VUeXBlID09PSAnZGF0YXNldCcgJiYgIURhdGFzb3VyY2VVdGlscy5pc0dlbyhkcykpIGFzIERhdGFzZXRbXVxuICAgICAgICApXG4gICAgICApXG4gICAgXSkucGlwZShcbiAgICAgIG1hcChcbiAgICAgICAgKFtjbGFzc2VzLCBmaWVsZHMsIGRhdGFTZXRzXSkgPT5cbiAgICAgICAgICBkYXRhU2V0c1xuICAgICAgICAgICAgLm1hcCgoZHMpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgbW9kZWwgPSBjbGFzc2VzLmZpbmQoKGNsYXp6KSA9PiBjbGF6ei5pZCA9PT0gZHMub0NsYXNzKTtcbiAgICAgICAgICAgICAgY29uc3QgZ2VvQXR0cmlidXRlcyA9IChcbiAgICAgICAgICAgICAgICBtb2RlbD8uYXR0cmlidXRlcy5tYXAoKGF0dHIpID0+ICh7IGF0dHIsIGZpZWxkOiBmaWVsZHMuZmluZCgoZikgPT4gYXR0ci5maWVsZCA9PT0gZi5pZCkgfSkpID8/IFtdXG4gICAgICAgICAgICAgICkuZmlsdGVyKCh7IGF0dHIsIGZpZWxkIH0pID0+ICEhZmllbGQgJiYgR2VvbWV0cmljRmllbGRUeXBlcy5pbmNsdWRlcyhmaWVsZC50eXBlKSk7XG4gICAgICAgICAgICAgIHJldHVybiBnZW9BdHRyaWJ1dGVzLm1hcChcbiAgICAgICAgICAgICAgICAoZ2VvKSA9PlxuICAgICAgICAgICAgICAgICAgKHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2F1dG8nLFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogYCR7ZHMubmFtZX0ke2dlb0F0dHJpYnV0ZXMubGVuZ3RoID4gMSA/ICcgLSAnICsgZ2VvLmF0dHIubmFtZSA6ICcnfWAsXG4gICAgICAgICAgICAgICAgICAgIG9DbGFzczogZHMub0NsYXNzLFxuICAgICAgICAgICAgICAgICAgICBrZXk6IGRzLmlkLFxuICAgICAgICAgICAgICAgICAgICBzdWJUeXBlOiBnZW8uZmllbGQhLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzZXM6IFtkcy5vQ2xhc3NdLFxuICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGU6IGdlby5hdHRyLnRlY2huaWNhbE5hbWVcbiAgICAgICAgICAgICAgICAgIH0pIGFzIE1hcEF1dG9MYXllck9wdGlvbnNcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuZmxhdCgpIGFzIE1hcEF1dG9MYXllck9wdGlvbnNbXVxuICAgICAgKVxuICAgICk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgdGhpcy5tYW5pZmVzdCRcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgbWFwKChtYW5pZmVzdCkgPT5cbiAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgKCgobWFuaWZlc3Qub3B0aW9ucyA/PyB7IGxheWVyczogW10gfSkgYXMgTWFwV2lkZ2V0T3B0aW9ucykubGF5ZXJzID8/IFtdKS5maWx0ZXIoKGxheWVyKSA9PlxuICAgICAgICAgICAgICAgIFsnd21zJ10uaW5jbHVkZXMobGF5ZXIudHlwZSlcbiAgICAgICAgICAgICAgKSBhcyBNYXBXTVNMYXllckxheWVyT3B0aW9uc1tdXG4gICAgICAgICAgICApLm1hcCgobGF5ZXIpID0+IGxheWVyLnVybClcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgodXJscykgPT4gdXJscy5mb3JFYWNoKCh1cmwpID0+IHRoaXMuc3RvcmUuZGlzcGF0Y2goRGFzaGJvYXJkQWN0aW9ucy5nZXRDYXBhYmlsaXR5KHsgdXJsIH0pKSkpXG4gICAgKTtcblxuICAgIHRoaXMud21zQ2FwYWJpbGl0aWVzJCA9IHRoaXMuc3RvcmUuc2VsZWN0KERhc2hib2FyZFNlbGVjdG9ycy5jYXBhYmlsaXRpZXMpO1xuXG4gICAgdGhpcy5vcHRpb25zJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5tYW5pZmVzdCQsXG4gICAgICB0aGlzLnJlc3VsdFNldCQsXG4gICAgICB0aGlzLmNsYXNzZXMkLFxuICAgICAgdGhpcy5maWVsZHMkLFxuICAgICAgdGhpcy5zdHlsZXMkLFxuICAgICAgdGhpcy5nZW9TZXJ2ZXJMYXllckRlc2NyaXB0aW9ucyQsXG4gICAgICB0aGlzLndtc0NhcGFiaWxpdGllcyQsXG4gICAgICB0aGlzLmF1dG9EYXRhc2V0TGF5ZXJzJFxuICAgIF0pLnBpcGUoXG4gICAgICBtYXAoKFttYW5pZmVzdCwgcmVzdWx0U2V0LCBjbGFzc2VzLCBmaWVsZHMsIG1hcFN0eWxlcywgZ2VvTGF5ZXJzLCBjYXBhYmlsaXRpZXMsIGF1dG9EYXRhc2V0TGF5ZXJzXSkgPT4ge1xuICAgICAgICAvLyBhdXRvIGRldGVybWluZSBsYXllcnMgcGFyYW1ldGVycyB0byBwcm92aWRlIGEgd29ya2luZyB2aWV3XG4gICAgICAgIGNvbnN0IGF1dG9PcHRpb25zID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShtYW5pZmVzdC5vcHRpb25zID8/IHt9KSkgYXMgTWFwV2lkZ2V0T3B0aW9ucztcbiAgICAgICAgaWYgKCFhdXRvT3B0aW9ucy50b29sdGlwTW9kZSkge1xuICAgICAgICAgIGF1dG9PcHRpb25zLnRvb2x0aXBNb2RlID0gVG9vbHRpcE1vZGUuQ0xJQ0s7XG4gICAgICAgIH1cblxuICAgICAgICBhdXRvT3B0aW9ucy5sYXllcnMgPSBbXG4gICAgICAgICAgLi4uKGF1dG9PcHRpb25zLmxheWVycyA/PyBbXSkuZmlsdGVyKChsYXllcikgPT4gbGF5ZXIudHlwZSAhPT0gJ2F1dG8nKSxcbiAgICAgICAgICAuLi4oYXV0b09wdGlvbnMuYXV0b21hdGljTGF5ZXJzXG4gICAgICAgICAgICA/IGF1dG9EYXRhc2V0TGF5ZXJzXG4gICAgICAgICAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgIChsYXllcikgPT5cbiAgICAgICAgICAgICAgICAgICAgIWF1dG9PcHRpb25zLmlnbm9yZUF1dG9MYXllciB8fFxuICAgICAgICAgICAgICAgICAgICAhYXV0b09wdGlvbnMuaWdub3JlQXV0b0xheWVyLmluY2x1ZGVzKGxheWVyLmtleSArICctJyArIGxheWVyLnN1YlR5cGUpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5tYXAoKGxheWVyKSA9PiAoe1xuICAgICAgICAgICAgICAgICAgLi4ubGF5ZXIsXG4gICAgICAgICAgICAgICAgICAuLi4oKGF1dG9PcHRpb25zLmxheWVycyA/PyBbXSkuZmluZChcbiAgICAgICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICAgICAgICAocHJldkxheWVyKSA9PiBwcmV2TGF5ZXIua2V5ID09PSBsYXllci5rZXkgJiYgcHJldkxheWVyLmF0dHJpYnV0ZSA9PT0gbGF5ZXIuYXR0cmlidXRlXG4gICAgICAgICAgICAgICAgICApID8/IHt9KVxuICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgOiBbXSlcbiAgICAgICAgXTtcblxuICAgICAgICBhdXRvT3B0aW9ucy5sYXllcnM/LmZvckVhY2goKGxheWVyLCBpKSA9PiB7XG4gICAgICAgICAgV2lkZ2V0TWFwVXRpbHMucG9wdWxhdGVMb2NhdGlvbkF0dHJpYnV0ZShsYXllciwgcmVzdWx0U2V0LCBjbGFzc2VzLCBmaWVsZHMpO1xuICAgICAgICAgIFdpZGdldE1hcFV0aWxzLnBvcHVsYXRlSW50ZW5zaXR5QXR0cmlidXRlKGxheWVyLCByZXN1bHRTZXQsIGNsYXNzZXMsIGZpZWxkcyk7XG4gICAgICAgICAgaWYgKGF1dG9PcHRpb25zLmF0dHJpYnV0aW9ucykge1xuICAgICAgICAgICAgbGF5ZXIuYXR0cmlidXRpb24gPSBsYXllci5hdHRyaWJ1dGlvbiA/PyAnJztcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGFjdHVhbExheWVyS2V5cyA9IChhdXRvT3B0aW9ucy5sYXllcnMgPz8gW10pXG4gICAgICAgICAgLm1hcCgobGF5ZXIpID0+IChsYXllciBhcyBNYXBHZW9TZXJ2ZXJMYXllck9wdGlvbnMpLmtleSA/PyBudWxsKVxuICAgICAgICAgIC5maWx0ZXIoKGtleSkgPT4gISFrZXkpO1xuXG4gICAgICAgIC8vIEdldCBhbGwgcHJldmlvdXMgbGF5ZXJzLCB3aXRob3V0IGdlb3NlcnZlciBsYXllcnMgdGhhdCBhcmUgbm90IHJlcXVlc3RlZCBhbnltb3JlLCB0aGVuIGFkZCBuZXcgZ2Vvc2VydmVyIGxheWVycyAocG90ZW50aWFsbHkgd2l0aCBhIHByZWNvbmZpZyBmcm9tIG1hbmlmZXN0KS5cbiAgICAgICAgYXV0b09wdGlvbnMubGF5ZXJzID0gW1xuICAgICAgICAgIC4uLihhdXRvT3B0aW9ucy5sYXllcnMgPz8gW10pLm1hcCgobGF5ZXIpID0+IHtcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIGNvbnN0IGdlb0xheWVyID0gZ2VvTGF5ZXJzLmZpbmQoKGdlb0xheWVyKSA9PiBsYXllci5rZXkgPT09IGdlb0xheWVyLmtleSkgPz8gbnVsbDtcbiAgICAgICAgICAgIHJldHVybiBsYXllci50eXBlID09PSAnZ2Vvc2VydmVyJ1xuICAgICAgICAgICAgICA/IGdlb0xheWVyXG4gICAgICAgICAgICAgICAgPyB7IC4uLmdlb0xheWVyLCAuLi5sYXllciwgdXJsOiBnZW9MYXllci51cmwgfVxuICAgICAgICAgICAgICAgIDogKG51bGwgYXMgdW5rbm93biBhcyBNYXBXaWRnZXRMYXllck9wdGlvbnMpXG4gICAgICAgICAgICAgIDogeyAuLi5sYXllciB9O1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIC4uLmdlb0xheWVycy5maWx0ZXIoKGxheWVyKSA9PiAhYWN0dWFsTGF5ZXJLZXlzLmluY2x1ZGVzKGxheWVyLmtleSkpXG4gICAgICAgIF0uZmlsdGVyKChsYXllcikgPT4gISFsYXllcik7XG5cbiAgICAgICAgYXV0b09wdGlvbnMubGF5ZXJzLmZvckVhY2goKGxheWVyLCBpbmRleCkgPT4ge1xuICAgICAgICAgIHRoaXMuc2V0RGVmYXVsdExheWVyVGl0bGUobGF5ZXIsIGluZGV4LCBjYXBhYmlsaXRpZXMpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgISFtYXBTdHlsZXMgJiZcbiAgICAgICAgICBtYXBTdHlsZXMubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICghYXV0b09wdGlvbnMuc3R5bGUgfHwgIW1hcFN0eWxlcy5tYXAoKHN0eWxlKSA9PiBzdHlsZS5pZGVudGlmaWVyKS5pbmNsdWRlcyhhdXRvT3B0aW9ucy5zdHlsZSkpXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnN0IGxpZ2h0U3R5bGVzID0gbWFwU3R5bGVzLmZpbHRlcigoc3R5bGUpID0+ICEoc3R5bGUuaWRlbnRpZmllciA/PyAnLScpLmluY2x1ZGVzKCdkYXJrJykpO1xuICAgICAgICAgIGF1dG9PcHRpb25zLnN0eWxlID0gbGlnaHRTdHlsZXMubGVuZ3RoID4gMCA/IGxpZ2h0U3R5bGVzWzBdLmlkZW50aWZpZXIgOiBtYXBTdHlsZXNbMF0uaWRlbnRpZmllcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhdXRvT3B0aW9ucy5pZ25vcmVBdXRvTGF5ZXIpIHtcbiAgICAgICAgICBjb25zdCBiYXNlID0gYXV0b09wdGlvbnMuaWdub3JlQXV0b0xheWVyO1xuXG4gICAgICAgICAgLy8gUmVtb3ZlIGZyb20gaWdub3JlQXV0b0xheWVycywgdmFsdWVzIHRoYXQgYXJlIG5vdCBuZWNlc3NhcnlcbiAgICAgICAgICBjb25zdCBwb3NzaWJsZUlnbm9yZUF1dG9MYXllcktleXMgPSBhdXRvRGF0YXNldExheWVycy5tYXAoKGxheWVyKSA9PiBsYXllci5rZXkgKyAnLScgKyBsYXllci5zdWJUeXBlKTtcbiAgICAgICAgICBhdXRvT3B0aW9ucy5pZ25vcmVBdXRvTGF5ZXIgPSAoYXV0b09wdGlvbnMuaWdub3JlQXV0b0xheWVyID8/IFtdKS5maWx0ZXIoKGtleSkgPT5cbiAgICAgICAgICAgIHBvc3NpYmxlSWdub3JlQXV0b0xheWVyS2V5cy5pbmNsdWRlcyhrZXkpXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoYXV0b09wdGlvbnMuaWdub3JlQXV0b0xheWVyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgZGVsZXRlIGF1dG9PcHRpb25zLmlnbm9yZUF1dG9MYXllcjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIWF1dG9PcHRpb25zLmlnbm9yZUF1dG9MYXllciB8fCBiYXNlLmxlbmd0aCAhPT0gYXV0b09wdGlvbnMuaWdub3JlQXV0b0xheWVyLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5lbWl0TWFuaWZlc3QoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBhdXRvT3B0aW9ucy5sYXllcnMgPSBXaWRnZXRNYXBVdGlscy5hc3NpZ25MYXllcnNPcmRlcihhdXRvT3B0aW9ucy5sYXllcnMpO1xuXG4gICAgICAgIGlmIChhdXRvT3B0aW9ucy5maXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGF1dG9PcHRpb25zLmxheWVycy5mb3JFYWNoKFxuICAgICAgICAgICAgKGxheWVyKSA9PiAobGF5ZXIuZml0ID0gIU5PTl9NQU5EQVRPUllfRklUX0xBWUVSX1RZUEVTLmluY2x1ZGVzKGxheWVyLnR5cGUpIHx8IGF1dG9PcHRpb25zLmZpdClcbiAgICAgICAgICApO1xuICAgICAgICAgIGRlbGV0ZSBhdXRvT3B0aW9ucy5maXQ7XG4gICAgICAgIH1cblxuICAgICAgICBbXG4gICAgICAgICAgLi4ubmV3IFNldChcbiAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgYXV0b09wdGlvbnMubGF5ZXJzLmZpbHRlcigobGF5ZXIpID0+IFsnd21zJywgJ2dlb3NlcnZlciddLmluY2x1ZGVzKGxheWVyLnR5cGUpKSBhcyAoXG4gICAgICAgICAgICAgICAgfCBNYXBXTVNMYXllckxheWVyT3B0aW9uc1xuICAgICAgICAgICAgICAgIHwgTWFwR2VvU2VydmVyTGF5ZXJPcHRpb25zXG4gICAgICAgICAgICAgIClbXVxuICAgICAgICAgICAgKS5tYXAoKGxheWVyKSA9PiBsYXllci51cmwpXG4gICAgICAgICAgKVxuICAgICAgICBdLmZvckVhY2goKHVybCkgPT4ge1xuICAgICAgICAgIGlmIChjYXBhYmlsaXRpZXMgJiYgY2FwYWJpbGl0aWVzW3VybF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChEYXNoYm9hcmRBY3Rpb25zLmdldENhcGFiaWxpdHkoeyB1cmw6IHVybCB9KSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gYXV0b09wdGlvbnM7XG4gICAgICB9KSxcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChwLCBjKSA9PiBlcXVhbChwLCBjKSlcbiAgICApO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMub3B0aW9ucyQucGlwZShmaWx0ZXIoKG9wdCkgPT4gISFvcHQpKS5zdWJzY3JpYmUoKG9wdGlvbnMpID0+IHtcbiAgICAgICAgdGhpcy5vcHRpb25zQ29weSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkob3B0aW9ucykpO1xuICAgICAgICB0aGlzLm9wdGlvbnNDb3B5LmxheWVycz8uZm9yRWFjaChcbiAgICAgICAgICAobGF5ZXIpID0+ICh0aGlzLmxheWVyU2V0dGluZ3NFeHBhbmRlZFN0YXRlW2xheWVyLnRpdGxlID8/ICdNSVNTSU5HIFRJVExFJ10gPSBmYWxzZSlcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9uc0NvcHkubGF5ZXJzICYmIHRoaXMub3B0aW9uc0NvcHkubGF5ZXJzLnNvbWUoKGxheWVyKSA9PiAhbGF5ZXIuZ3JvdXApKVxuICAgICAgICAgIHRoaXMub3B0aW9uc0NvcHkubGF5ZXJzXG4gICAgICAgICAgICA/LmZpbHRlcigobCkgPT4gIWwuZ3JvdXApXG4gICAgICAgICAgICAuZm9yRWFjaCgobGF5ZXIpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChcbiAgICAgICAgICAgICAgICBEYXNoYm9hcmRBY3Rpb25zLnVwZGF0ZUxheWVyR3JvdXAoe1xuICAgICAgICAgICAgICAgICAgbmFtZTogREVGQVVMVF9MQVlFUl9HUk9VUCxcbiAgICAgICAgICAgICAgICAgIHZpc2libGVMYXllcnM6IGxheWVyLnRpdGxlID8/ICdNSVNTSU5HIFRJVExFJ1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5vcHRpb25zQ29weS5sYXllcnMgPSB0aGlzLm9wdGlvbnNDb3B5LmxheWVycz8ubWFwKChsYXllcikgPT4gKHtcbiAgICAgICAgICAuLi5sYXllcixcbiAgICAgICAgICBncm91cDogbGF5ZXIuZ3JvdXAgPz8gREVGQVVMVF9MQVlFUl9HUk9VUFxuICAgICAgICB9KSk7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLm1hcFVybCQgPSB0aGlzLnN0b3JlLnNlbGVjdChDb25maWdTZWxlY3RvcnMubWFwVXJsKTtcblxuICAgIHRoaXMuYm90dG9tTGVmdCQgPSB0aGlzLndpZGdldFNpemUkLnBpcGUoXG4gICAgICBtYXAoKHNpemUpID0+IGB0cmFuc2xhdGUoMTBweCAsY2FsYygke3NpemUuaGVpZ2h0fXB4IC0gMTAwJSAtIDEwcHgpKWApLFxuICAgICAgZGVsYXkoMTApXG4gICAgKTtcblxuICAgIHRoaXMuaXRlbVN0eWxlcyQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLnJlc3VsdFNldCQsIHRoaXMubWFuaWZlc3QkLCB0aGlzLnN0YXRpY1Jlc3VsdFNldCRdKS5waXBlKFxuICAgICAgbWVyZ2VNYXAoKFtycywgbWFuaWZlc3QsIHNyc10pID0+IHtcbiAgICAgICAgaWYgKChtYW5pZmVzdC5kYXRhc291cmNlID09PSB1bmRlZmluZWQgfHwgbWFuaWZlc3QuZGF0YXNvdXJjZS5sZW5ndGggPT09IDApICYmICFzcnMpIHtcbiAgICAgICAgICByZXR1cm4gb2Yoe30pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBmcm9tKFxuICAgICAgICAgICAgbmV3IFByb21pc2U8e1xuICAgICAgICAgICAgICBbaWQ6IHN0cmluZ106IHtcbiAgICAgICAgICAgICAgICBjbGFzc2ljOiBTdHlsZTtcbiAgICAgICAgICAgICAgICBib3JkZXJlZDogU3R5bGU7XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHRvdGFsID0gT2JqZWN0LnZhbHVlcyhycy5pdGVtcykucmVkdWNlKChwLCBjKSA9PiBjLmxlbmd0aCArIHAsIDApO1xuICAgICAgICAgICAgICBpZiAodG90YWwgPT09IDApIHJlc29sdmUoe30pO1xuICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSB7fSBhcyB7XG4gICAgICAgICAgICAgICAgW2lkOiBzdHJpbmddOiB7XG4gICAgICAgICAgICAgICAgICBjbGFzc2ljOiBTdHlsZTtcbiAgICAgICAgICAgICAgICAgIGJvcmRlcmVkOiBTdHlsZTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICBPYmplY3QudmFsdWVzKHJzLml0ZW1zKS5mb3JFYWNoKChpdGVtcykgPT4ge1xuICAgICAgICAgICAgICAgIGl0ZW1zLmZvckVhY2goKGl0ZW0pID0+XG4gICAgICAgICAgICAgICAgICBQcm9taXNlLmFsbChbXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3ltYm9sU2VydmljZS5nZXRTeW1ib2xBc0ljb25TdHlsZShpdGVtKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zeW1ib2xTZXJ2aWNlLmdldFN5bWJvbEFzSWNvblN0eWxlKGl0ZW0sIHRydWUpXG4gICAgICAgICAgICAgICAgICBdKS50aGVuKChbc3R5bGUsIGJTdHlsZV0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2l0ZW0uaWRdID0geyBjbGFzc2ljOiBzdHlsZSwgYm9yZGVyZWQ6IGJTdHlsZSB9O1xuICAgICAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMocmVzdWx0KS5sZW5ndGggPj0gdG90YWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMuaGVpZ2h0JCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMud2lkZ2V0U2l6ZSQucGlwZShkZWJvdW5jZVRpbWUoMTAwKSksIHRoaXMuZGlzcGxheUhlYWRlciRdKS5waXBlKFxuICAgICAgbWFwKChbc2l6ZSwgZGlzcGxheV0pID0+IChzaXplLmhlaWdodCA/PyAxMDApIC0gKGRpc3BsYXkgPyBXSURHRVRfSEVBREVSX0hFSUdIVC52YWx1ZSA6IDApKSxcbiAgICAgIGRlbGF5KDEwKVxuICAgICk7XG5cbiAgICB0aGlzLmF0dHJpYnV0aW9ucyQgPSB0aGlzLm9wdGlvbnMkLnBpcGUobWFwKChvcHRpb25zKSA9PiAhIW9wdGlvbnMuYXR0cmlidXRpb25zKSk7XG5cbiAgICB0aGlzLmxlZ2VuZFRvcCQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLmRpc3BsYXlIZWFkZXIkLCB0aGlzLmF0dHJpYnV0aW9ucyRdKS5waXBlKFxuICAgICAgbWFwKChbaGVhZGVyLCBhdHRyXSkgPT4gNSArIChoZWFkZXIgPyBXSURHRVRfSEVBREVSX0hFSUdIVC52YWx1ZSA6IDApICsgKGF0dHIgPyA2MSA6IDApKVxuICAgICk7XG5cbiAgICB0aGlzLmxlZ2VuZEhlaWdodCQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLndpZGdldFNpemUkLnBpcGUoZGVib3VuY2VUaW1lKDEwMCkpLCB0aGlzLmxlZ2VuZFRvcCRdKS5waXBlKFxuICAgICAgbWFwKChbc2l6ZSwgdG9wXSkgPT4ge1xuICAgICAgICByZXR1cm4gKHNpemUuaGVpZ2h0ID8/IDEwMCkgLSBXSURHRVRfSEVBREVSX0hFSUdIVC52YWx1ZSAtIHRvcCAtIDU2OyAvLyA1NnB4IGlzIHRoZSB0b29sdGlwIGhlaWdodCArIG1hcmdpblxuICAgICAgfSksXG4gICAgICBkZWxheSgxMClcbiAgICApO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMud21zQ2FwYWJpbGl0aWVzJFxuICAgICAgICAucGlwZShcbiAgICAgICAgICBtYXAoKHdtc0NhcGFiaWxpdGllcykgPT5cbiAgICAgICAgICAgIHdtc0NhcGFiaWxpdGllc1xuICAgICAgICAgICAgICA/IE9iamVjdC5rZXlzKHdtc0NhcGFiaWxpdGllcylcbiAgICAgICAgICAgICAgICAgIC5tYXAoKHVybCkgPT4gKHsgdXJsLCBsYXllcnM6IFhNTFV0aWxzLmdldFBvc3NpYmxlTGF5ZXJTdHlsZXMod21zQ2FwYWJpbGl0aWVzW3VybF0/LmRvYykgfSkpXG4gICAgICAgICAgICAgICAgICAucmVkdWNlKChwLCBjKSA9PiAoeyAuLi5wLCBbYy51cmxdOiBjIH0pLCB7fSlcbiAgICAgICAgICAgICAgOiB7fVxuICAgICAgICAgICksXG4gICAgICAgICAgc3RhcnRXaXRoKHt9KVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKHBvc3NpYmxlU3R5bGVzKSA9PiAodGhpcy5wb3NzaWJsZVN0eWxlcyA9IHBvc3NpYmxlU3R5bGVzKSlcbiAgICApO1xuXG4gICAgdGhpcy5oYXNTbGlkZUxheWVyJCA9IHRoaXMub3B0aW9ucyQucGlwZShcbiAgICAgIG1hcCgob3B0aW9ucykgPT5cbiAgICAgICAgKG9wdGlvbnMubGF5ZXJzID8/IFtdKS5tYXAoKGxheWVyKSA9PiAhIWxheWVyLnNsaWRlICYmIGxheWVyLnNsaWRlICE9PSAnYWxsJykucmVkdWNlKChhLCBiKSA9PiBhIHx8IGIsIGZhbHNlKVxuICAgICAgKVxuICAgICk7XG5cbiAgICB0aGlzLmxheWVyR3JvdXBzJCA9IHRoaXMuc3RvcmUuc2VsZWN0KERhc2hib2FyZFNlbGVjdG9ycy5sYXllckdyb3Vwcyk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMubGF5ZXJHcm91cHMkLnN1YnNjcmliZSgobGF5ZXJHcm91cHMpID0+IHtcbiAgICAgICAgdGhpcy5sYXllckdyb3VwcyA9IGxheWVyR3JvdXBzO1xuICAgICAgfSlcbiAgICApO1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goXG4gICAgICBEYXNoYm9hcmRBY3Rpb25zLmluaXREZWZhdWx0TGF5ZXJHcm91cCh7XG4gICAgICAgIGxheWVyczogdGhpcy5vcHRpb25zQ29weS5sYXllcnNcbiAgICAgICAgICA/LmZpbHRlcigobGF5ZXIpID0+IGxheWVyLmdyb3VwID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgLm1hcChcbiAgICAgICAgICAgIChsYXllcikgPT5cbiAgICAgICAgICAgICAgbGF5ZXIudGl0bGUgPz8gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoYEBwcnkud2lkZ2V0Lm1hcC5sYXllclR5cGUuJHtsYXllci50eXBlfWAsIHsgLi4ubGF5ZXIgfSlcbiAgICAgICAgICApXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBpbml0SW50ZXJhY3Rpb25NYW5hZ2VyKCkge1xuICAgIHJldHVybiB0aGlzLmludGVyYWN0aW9uTWFuYWdlci5pbml0KHRoaXMpO1xuICB9XG5cbiAgaW5pdFRvb2x0aXBNYW5hZ2VyKCkge1xuICAgIHJldHVybiB0aGlzLnRvb2x0aXBNYW5hZ2VyLmluaXQoXG4gICAgICB0aGlzLnRvb2x0aXBGYWN0b3J5U2VydmljZSxcbiAgICAgIHRoaXMuaW5qZWN0b3IsXG4gICAgICB0aGlzLnN0b3JlLFxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLFxuICAgICAgdGhpcy53aWRnZXRTaXplJCxcbiAgICAgIHRoaXMuZGlzcGxheUhlYWRlciQsXG4gICAgICB0aGlzLm1hcCxcbiAgICAgIHRoaXMucG9wdXAsXG4gICAgICB0aGlzLnBvcHVwQ29udGVudCxcbiAgICAgIHRoaXMuaW50ZXJhY3Rpb25NYW5hZ2VyLFxuICAgICAgdGhpc1xuICAgICk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5tYXAgPSBuZXcgTWFwKHsgdGFyZ2V0OiB0aGlzLm1hcFJlZi5uYXRpdmVFbGVtZW50LCBjb250cm9sczogZGVmYXVsdHMoeyBhdHRyaWJ1dGlvbjogZmFsc2UgfSkgfSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbk1hbmFnZXIgPSB0aGlzLmluaXRJbnRlcmFjdGlvbk1hbmFnZXIoKTtcbiAgICB0aGlzLmxheWVyU2xpZGVyLmluaXQodGhpcy5tYXAsIHRoaXMuc2xpZGVyRWxlbWVudC5uYXRpdmVFbGVtZW50KTtcbiAgICB0aGlzLnRvb2x0aXBNYW5hZ2VyID0gdGhpcy5pbml0VG9vbHRpcE1hbmFnZXIoKTtcbiAgICB0aGlzLm1hcFN0eWxlVXJsJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMub3B0aW9ucyQsIHRoaXMubWFwVXJsJF0pLnBpcGUoXG4gICAgICBtYXAoKFtvcHRpb25zLCB1cmxdKSA9PiB7XG4gICAgICAgIHN3aXRjaCAob3B0aW9ucy5zdHlsZSkge1xuICAgICAgICAgIGNhc2UgdGhpcy5OT19TVFlMRTpcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIGNhc2UgdGhpcy5TVFlMRV9GUk9NX1VSTDpcbiAgICAgICAgICAgIHJldHVybiBvcHRpb25zLnN0eWxlVVJMID8/ICcnO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gYCR7dXJsfS9zdHlsZXMvJHtvcHRpb25zLnN0eWxlfS9zdHlsZS5qc29uYDtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXG4gICAgKTtcblxuICAgIHRoaXMubWFwU3R5bGVMYXllciQgPSB0aGlzLm1hcFN0eWxlVXJsJC5waXBlKFxuICAgICAgbWFwKChzdHlsZVVybCkgPT4ge1xuICAgICAgICBpZiAoIXN0eWxlVXJsKSB7XG4gICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgbmV3IE1hcGJveFZlY3RvckxheWVyKHtcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHsgdGl0bGU6ICdiYWNrZ3JvdW5kJyB9LFxuICAgICAgICAgICAgc3R5bGVVcmxcbiAgICAgICAgICB9KSAvKiAsXG4gICAgICAgICAgbmV3IFRpbGVMYXllcih7XG4gICAgICAgICAgICBzb3VyY2U6IG5ldyBUaWxlRGVidWcoKVxuICAgICAgICAgIH0pICovXG4gICAgICAgIF07XG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgdGhpcy5vcHRpb25zJFxuICAgICAgICAucGlwZShcbiAgICAgICAgICBtYXAoKG9wdGlvbnMpID0+ICh7XG4gICAgICAgICAgICBjZW50ZXI6IGZyb21Mb25MYXQob3B0aW9ucy5jZW50ZXIgPz8gV2lkZ2V0TWFwVXRpbHMuREVGQVVMVF9NQVBfQ0VOVEVSKSxcbiAgICAgICAgICAgIG1heFpvb206IG9wdGlvbnMuem9vbT8ubWF4ID8/IFdpZGdldE1hcFV0aWxzLkRFRkFVTFRfWk9PTV9NQVgsXG4gICAgICAgICAgICBtaW5ab29tOiBvcHRpb25zLnpvb20/Lm1pbiA/PyBXaWRnZXRNYXBVdGlscy5ERUZBVUxUX1pPT01fTUlOLFxuICAgICAgICAgICAgem9vbTogb3B0aW9ucy56b29tPy5zdGFydCA/PyBXaWRnZXRNYXBVdGlscy5ERUZBVUxUX1pPT01fU1RBUlRcbiAgICAgICAgICB9KSksXG4gICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKHZpZXcpID0+IHRoaXMubWFwLnNldFZpZXcobmV3IFZpZXcodmlldykpKVxuICAgICk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgdGhpcy5vcHRpb25zJFxuICAgICAgICAucGlwZShcbiAgICAgICAgICBtYXAoKG9wdGlvbnMpID0+IG9wdGlvbnMuYXR0cmlidXRpb25zKSxcbiAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgoYXR0cmlidXRpb25zKSA9PiB7XG4gICAgICAgICAgaWYgKCFhdHRyaWJ1dGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMubWFwLnJlbW92ZUNvbnRyb2wodGhpcy5hdHRyaWJ1dGlvbnMpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm1hcC5hZGRDb250cm9sKHRoaXMuYXR0cmlidXRpb25zKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMubGF5ZXJzJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5yZXN1bHRTZXQkLFxuICAgICAgdGhpcy5vcHRpb25zJCxcbiAgICAgIHRoaXMuY2xhc3NlcyQsXG4gICAgICB0aGlzLmFkZGl0aW9uYWxMYXllcnMkLFxuICAgICAgdGhpcy5pdGVtU3R5bGVzJCxcbiAgICAgIHRoaXMuZGF0YXNvdXJjZUZpbHRlcnMkLFxuICAgICAgdGhpcy5maWVsZHMkXG4gICAgXSkucGlwZShcbiAgICAgIGZpbHRlcihcbiAgICAgICAgKFtyZXN1bHRTZXQsIG9wdGlvbnMsIGNsYXNzZXMsIGFkZGl0aW9uYWxMYXllcnMsIGl0ZW1TdHlsZXMsIGZpbHRlcnMsIGZpZWxkc10pID0+XG4gICAgICAgICAgISFyZXN1bHRTZXQgJiYgISFvcHRpb25zICYmICEhY2xhc3NlcyAmJiAhIWZpZWxkc1xuICAgICAgKSxcbiAgICAgIHdpdGhMYXRlc3RGcm9tKHRoaXMubGF5ZXJHcm91cHMkKSxcbiAgICAgIG1hcCgoW1tyZXN1bHRTZXQsIG9wdGlvbnMsIGNsYXNzZXMsIGFkZGl0aW9uYWxMYXllcnMsIGl0ZW1TdHlsZXMsIGZpbHRlcnMsIGZpZWxkc10sIGxheWVyR3JvdXBzXSkgPT4ge1xuICAgICAgICBsZXQgaGFzUmVsYXRpb25MYXllciA9IG51bGwgYXMgdW5rbm93biBhcyBWZWN0b3JMYXllcjxWZWN0b3JTb3VyY2U8YW55Pj47XG5cbiAgICAgICAgY29uc3QgbGF5ZXJzID0gKG9wdGlvbnM/LmxheWVycyB8fCBbXSlcbiAgICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgKGxheWVyKSA9PiB0aGlzLndpZGdldE1hcExheWVyU2VydmljZS5kb250TmVlZExvY2F0aW9uLmluY2x1ZGVzKGxheWVyLnR5cGUpIHx8ICEhbGF5ZXIuYXR0cmlidXRlXG4gICAgICAgICAgKVxuICAgICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAobGF5ZXIpID0+IHRoaXMud2lkZ2V0TWFwTGF5ZXJTZXJ2aWNlLmRvbnROZWVkSW50ZW5zaXR5LmluY2x1ZGVzKGxheWVyLnR5cGUpIHx8ICEhbGF5ZXIuaW50ZW5zaXR5QXR0cmlidXRlXG4gICAgICAgICAgKVxuICAgICAgICAgIC5tYXAoKGxheWVyOiBNYXBXaWRnZXRMYXllck9wdGlvbnMsIGlkeCwgYXJyYXkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGF0dHJpYnV0ZXNGb3JDbGFzcyA9IE9iamVjdC5rZXlzKHJlc3VsdFNldC5pdGVtcylcbiAgICAgICAgICAgICAgLm1hcCgoY2xhc3NJZCkgPT4gKHtcbiAgICAgICAgICAgICAgICBjbGFzc0lkLFxuICAgICAgICAgICAgICAgIC4uLnRoaXMuZ2V0QXR0cmlidXRlc0ZvckRyYXdpbmcoY2xhc3NlcywgY2xhc3NJZCwgbGF5ZXIpXG4gICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAucmVkdWNlKFxuICAgICAgICAgICAgICAgIChwLCBjKSA9PiAoe1xuICAgICAgICAgICAgICAgICAgLi4ucCxcbiAgICAgICAgICAgICAgICAgIFtjLmNsYXNzSWRdOiBjXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAge30gYXMge1xuICAgICAgICAgICAgICAgICAgW2tleTogc3RyaW5nXToge1xuICAgICAgICAgICAgICAgICAgICBpbnRlbnNpdHlBdHRyaWJ1dGU6IEF0dHJpYnV0ZTtcbiAgICAgICAgICAgICAgICAgICAgbG9jYXRpb25BdHRyaWJ1dGU6IEF0dHJpYnV0ZTtcbiAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBsZXQgbGF5ZXJDbGFzc2VzSWQgPSBjbGFzc2VzLm1hcCgoY2xhenopID0+IGNsYXp6LmlkKTtcbiAgICAgICAgICAgIGlmICgnY2xhc3NlcycgaW4gbGF5ZXIgJiYgISFsYXllci5jbGFzc2VzICYmIGxheWVyLmNsYXNzZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICBsYXllckNsYXNzZXNJZCA9IGxheWVyLmNsYXNzZXM7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCByYW5nZSA9IHsgbWluOiAwLCBtYXg6IDAgfTtcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIGlmICghIWxheWVyLmludGVuc2l0eUF0dHJpYnV0ZSkge1xuICAgICAgICAgICAgICBjb25zdCB2YWx1ZXMgPSBPYmplY3Qua2V5cyhyZXN1bHRTZXQuaXRlbXMpXG4gICAgICAgICAgICAgICAgLm1hcCgoY2xhc3NJZCkgPT5cbiAgICAgICAgICAgICAgICAgIHJlc3VsdFNldC5pdGVtc1tjbGFzc0lkXS5tYXAoKGl0ZW0pID0+XG4gICAgICAgICAgICAgICAgICAgIEl0ZW1VdGlscy5nZXRBdHRyaWJ1dGVDYWxjdWxhdGVkVmFsdWUoaXRlbSwgYXR0cmlidXRlc0ZvckNsYXNzW2l0ZW0ub0NsYXNzXS5pbnRlbnNpdHlBdHRyaWJ1dGUpXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5yZWR1Y2UoKHAsIGMpID0+IFsuLi5wLCAuLi5jXSwgW10pXG4gICAgICAgICAgICAgICAgLmZpbHRlcigodmFsdWUpID0+ICEhdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykgYXMgbnVtYmVyW107XG5cbiAgICAgICAgICAgICAgcmFuZ2UgPSB2YWx1ZXMucmVkdWNlKChwLCBjKSA9PiAoeyBtaW46IE1hdGgubWluKHAubWluLCBjKSwgbWF4OiBNYXRoLm1heChwLm1heCwgYykgfSksIHtcbiAgICAgICAgICAgICAgICBtaW46IE51bWJlci5NQVhfVkFMVUUsXG4gICAgICAgICAgICAgICAgbWF4OiAtTnVtYmVyLk1BWF9WQUxVRVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgaW1wbCA9IHRoaXMud2lkZ2V0TWFwTGF5ZXJTZXJ2aWNlLmxheWVyc0ltcGxlbWVudGF0aW9uW2xheWVyLnR5cGVdO1xuICAgICAgICAgICAgaWYgKCEhaW1wbCkge1xuICAgICAgICAgICAgICBjb25zdCByZXN1bHRMYXllciA9IGltcGwoXG4gICAgICAgICAgICAgICAgbGF5ZXIgYXMgYW55LFxuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXNGb3JDbGFzcyxcbiAgICAgICAgICAgICAgICBsYXllckNsYXNzZXNJZCxcbiAgICAgICAgICAgICAgICByZXN1bHRTZXQsXG4gICAgICAgICAgICAgICAgcmFuZ2UsXG4gICAgICAgICAgICAgICAgaXRlbVN0eWxlcyxcbiAgICAgICAgICAgICAgICB0aGlzLm1hcFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICByZXN1bHRMYXllci5zZXQoJ2ZpdCcsIGxheWVyLmZpdCk7XG4gICAgICAgICAgICAgIHJlc3VsdExheWVyLnNldCgndHlwZScsIGxheWVyLnR5cGUpO1xuICAgICAgICAgICAgICByZXN1bHRMYXllci5zZXQoJ3NsaWRlJywgbGF5ZXIuc2xpZGUpO1xuICAgICAgICAgICAgICByZXN1bHRMYXllci5zZXQoJ29yZGVyJywgbGF5ZXIub3JkZXIpO1xuICAgICAgICAgICAgICBjb25zdCBtYXhMYXllck9yZGVyID0gTWF0aC5tYXgoLi4uYXJyYXkubWFwKChsKSA9PiBsLm9yZGVyID8/IDApKTtcbiAgICAgICAgICAgICAgcmVzdWx0TGF5ZXIuc2V0WkluZGV4KG1heExheWVyT3JkZXIgKyAxIC0gKGxheWVyLm9yZGVyID8/IGlkeCkpO1xuICAgICAgICAgICAgICBpZiAobGF5ZXIudHlwZSA9PT0gJ3JlbGF0aW9uJykge1xuICAgICAgICAgICAgICAgIGhhc1JlbGF0aW9uTGF5ZXIgPSByZXN1bHRMYXllciBhcyB1bmtub3duIGFzIFZlY3RvckxheWVyPFZlY3RvclNvdXJjZT47XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmVzdWx0TGF5ZXIuc2V0KCd0aXRsZScsIGxheWVyLnRpdGxlKTtcblxuICAgICAgICAgICAgICBpZiAobGF5ZXIudHlwZSA9PT0gJ2dlb3NlcnZlcicpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjcWxfZmlsdGVyID0gQ3FsVXRpbHMuZ2V0Q1FMUGFyYW1zRm9yKGxheWVyLmRhdGFzb3VyY2VJZCwgZmlsdGVycywgY2xhc3NlcywgZmllbGRzKTtcblxuICAgICAgICAgICAgICAgIGlmIChjcWxfZmlsdGVyKSB7XG4gICAgICAgICAgICAgICAgICAvLyBBZGRpbmcgQ1FMIHF1ZXJ5IHRvIGdlb3NlcnZlciBsYXllcnNcbiAgICAgICAgICAgICAgICAgIChyZXN1bHRMYXllciBhcyBUaWxlPFRpbGVXTVM+KS5nZXRTb3VyY2UoKSEudXBkYXRlUGFyYW1zKHsgY3FsX2ZpbHRlciB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAobGF5ZXIuc2xpZGUgJiYgbGF5ZXIuc2xpZGUgIT09ICdhbGwnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sYXllclNsaWRlci5hcHBseVNsaWRlKFxuICAgICAgICAgICAgICAgICAgbGF5ZXIuc2xpZGUsXG4gICAgICAgICAgICAgICAgICByZXN1bHRMYXllciBhcyB1bmtub3duIGFzIFRpbGVMYXllcjxhbnk+IHwgVmVjdG9yTGF5ZXI8YW55PiB8IEhlYXRtYXBcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdExheWVyO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgTGF5ZXIgdHlwZSAke2xheWVyLnR5cGV9IGlzIHVua25vd25gKTtcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGwgYXMgdW5rbm93biBhcyBCYXNlTGF5ZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuZmlsdGVyKChsYXllcikgPT4gISFsYXllcik7XG5cbiAgICAgICAgaWYgKCEhaGFzUmVsYXRpb25MYXllcikge1xuICAgICAgICAgIGNvbnN0IGZlYXR1cmVzID0gbGF5ZXJzXG4gICAgICAgICAgICAuZmlsdGVyKChsYXllcikgPT4gIShsYXllciBpbnN0YW5jZW9mIFRpbGUpKVxuICAgICAgICAgICAgLm1hcCgobGF5ZXIpID0+XG4gICAgICAgICAgICAgIGxheWVyXG4gICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICAgIC5nZXRTb3VyY2UoKVxuICAgICAgICAgICAgICAgIC5nZXRGZWF0dXJlcygpXG4gICAgICAgICAgICAgICAgLmZpbHRlcigoZmVhdHVyZXM6IEZlYXR1cmU8YW55PikgPT4gISFmZWF0dXJlcy5nZXQoJ2lkJykgfHwgISFmZWF0dXJlcy5nZXQoJ2ZlYXR1cmVzJykpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAucmVkdWNlKChwLCBjKSA9PiBbLi4ucCwgLi4uY10sIFtdKTtcblxuICAgICAgICAgIHJlc3VsdFNldC5yZWxhdGlvbnMuZm9yRWFjaCgocmVsYXRpb24pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZSA9IGZlYXR1cmVzLmZpbmQoKGY6IEZlYXR1cmU8UG9pbnQgfCBDaXJjbGU+KSA9PiBmLmdldCgnaWQnKSA9PT0gcmVsYXRpb24uc291cmNlKTtcbiAgICAgICAgICAgIGNvbnN0IGRlc3QgPSBmZWF0dXJlcy5maW5kKChmOiBGZWF0dXJlPFBvaW50IHwgQ2lyY2xlPikgPT4gZi5nZXQoJ2lkJykgPT09IHJlbGF0aW9uLmRlc3RpbmF0aW9uKTtcbiAgICAgICAgICAgIGlmICghIXNvdXJjZSAmJiAhIWRlc3QpIHtcbiAgICAgICAgICAgICAgaGFzUmVsYXRpb25MYXllci5nZXRTb3VyY2UoKT8uYWRkRmVhdHVyZShXaWRnZXRNYXBVdGlscy5nZXRMaW5rRmVhdHVyZShyZWxhdGlvbiwgc291cmNlLCBkZXN0KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgbGF5ZXJzLnB1c2goLi4uYWRkaXRpb25hbExheWVycyk7XG5cbiAgICAgICAgY29uc3QgdmlzaWJsZUxheWVycyA9IGxheWVyR3JvdXBzLm1hcCgoZ3JvdXApID0+IGdyb3VwLnZpc2libGVMYXllcnMpLmZsYXQoKTtcbiAgICAgICAgbGF5ZXJzLmZvckVhY2goKGxheWVyLCBpZHgpID0+IHtcbiAgICAgICAgICBpZiAoIXZpc2libGVMYXllcnMuaW5jbHVkZXMobGF5ZXIuZ2V0KCd0aXRsZScpKSkge1xuICAgICAgICAgICAgbGF5ZXIuc2V0VmlzaWJsZShmYWxzZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICAvKiBSZXNvbHZlIGJ1ZyBkcmF3aW5nIHdlYmdsbGF5ZXIgd2l0aG91dCBub3RoaW5nIHVuZGVybmVhdGg6IGFkZCBlbXB0eSBsYXllciBiZWxvdyAqL1xuICAgICAgICBjb25zdCBfbGF5ZXJzID0gdGhpcy5hZGRFbXB0eVdlYkdsTGF5ZXJCZWxvd1NsaWRlSGVhdG1hcHMobGF5ZXJzKTtcbiAgICAgICAgdGhpcy5wcmV2aW91c0xheWVycy5wdXNoKC4uLl9sYXllcnMpO1xuICAgICAgICByZXR1cm4gX2xheWVycztcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMuZml0RXh0ZW50cyQgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMub3B0aW9ucyQsXG4gICAgICB0aGlzLmNsYXNzZXMkLFxuICAgICAgdGhpcy5maWVsZHMkLFxuICAgICAgdGhpcy5kYXRhc291cmNlRmlsdGVycyQsXG4gICAgICB0aGlzLndtc0NhcGFiaWxpdGllcyRcbiAgICBdKS5waXBlKFxuICAgICAgZGVib3VuY2VUaW1lKDEwMCksXG4gICAgICBzd2l0Y2hNYXAoKFtvcHRpb25zLCBjbGFzc2VzLCBmaWVsZHMsIGZpbHRlcnMsIHdtc0NhcGFiaWxpdGllc10pID0+XG4gICAgICAgIChvcHRpb25zLmxheWVycyA/PyBbXSkuZmluZCgobGF5ZXIpID0+IFsnZ2Vvc2VydmVyJywgJ3dtcyddLmluY2x1ZGVzKGxheWVyLnR5cGUpICYmIGxheWVyLmZpdClcbiAgICAgICAgICA/IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICAgICAgICAuLi4oKG9wdGlvbnMubGF5ZXJzPy5maWx0ZXIoKGxheWVyKSA9PiBsYXllci50eXBlID09PSAnZ2Vvc2VydmVyJykgPz8gW10pIGFzIE1hcEdlb1NlcnZlckxheWVyT3B0aW9uc1tdKVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoKGxheWVyKSA9PiBsYXllci5maXQpXG4gICAgICAgICAgICAgICAgLm1hcCgobGF5ZXI6IE1hcEdlb1NlcnZlckxheWVyT3B0aW9ucykgPT5cbiAgICAgICAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICAgICAgY2xhc3Nlcy5maW5kKChjbGF6eikgPT4gY2xhenouaWQgPT09IGxheWVyLm9DbGFzcykgPz8gKHsgYXR0cmlidXRlczogW10gfSBhcyB1bmtub3duIGFzIENsYXNzKVxuICAgICAgICAgICAgICAgICAgKS5hdHRyaWJ1dGVzXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoKGF0dHIpID0+ICh7IGF0dHIsIGZpZWxkOiBmaWVsZHMuZmluZCgoZmllbGQpID0+IGZpZWxkLmlkID09PSBhdHRyLmZpZWxkKSB9KSlcbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcigoeyBhdHRyLCBmaWVsZCB9KSA9PiBHZW9tZXRyaWNGaWVsZFR5cGVzLmluY2x1ZGVzKGZpZWxkPy50eXBlID8/ICctLS0tJykpXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoKHsgYXR0ciwgZmllbGQgfSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByeUFnZ3JlZ2F0aW9uU2VydmljZVxuICAgICAgICAgICAgICAgICAgICAgICAgLmFnZ3JlZ2F0ZShbbGF5ZXIuZGF0YXNvdXJjZUlkXSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBvcmRpbmF0ZTogeyBvcGVyYXRpb246IE9wZXJhdGlvbi5FWFRFTlQsIGF0dHJpYnV0ZTogYXR0ci5pZCwgbGFiZWw6IGF0dHIubmFtZSwga2VlcDA6IGZhbHNlIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gYXMgQ2hhcnRBZ2dyZWdhdGVkV2lkZ2V0T3B0aW9ucylcbiAgICAgICAgICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXAoKGV4dGVudFJlc3BvbnNlOiBBZ2dyZWdhdGlvblJlc3VsdCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWRnZXRNYXBVdGlscy5wcm9qZWN0RXh0ZW50QWdncmVnYXRpb25SZXNwb25zZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkISxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVudFJlc3BvbnNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3bXNDYXBhYmlsaXRpZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1hcFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoKSA9PiBvZih7IGRhdGFzb3VyY2U6IGxheWVyLmRhdGFzb3VyY2VJZCwgZXh0ZW50OiBbXSwgZXJyb3I6IHRydWUgfSkpXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgLmZsYXQoKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuZmxhdCgpLFxuICAgICAgICAgICAgICAuLi4oKG9wdGlvbnMubGF5ZXJzPy5maWx0ZXIoKGxheWVyKSA9PiBsYXllci50eXBlID09PSAnd21zJykgPz8gW10pIGFzIE1hcFdNU0xheWVyTGF5ZXJPcHRpb25zW10pXG4gICAgICAgICAgICAgICAgLmZpbHRlcigobGF5ZXIpID0+IGxheWVyLmZpdClcbiAgICAgICAgICAgICAgICAubWFwKChsYXllcjogTWFwV01TTGF5ZXJMYXllck9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGV4dGVudCA9IFhNTFV0aWxzLmdldExheWVyRXh0ZW50KGxheWVyLnBhcmFtTGF5ZXIsIHRoaXMubWFwLCB3bXNDYXBhYmlsaXRpZXMhW2xheWVyLnVybF0/LmRvYyk7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gb2Yoe1xuICAgICAgICAgICAgICAgICAgICBkYXRhc291cmNlOiBgd21zLSR7bGF5ZXIucGFyYW1MYXllcn1gLFxuICAgICAgICAgICAgICAgICAgICBleHRlbnQ6IGV4dGVudCA/PyBbXSxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6ICFleHRlbnRcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBdKVxuICAgICAgICAgIDogb2YoW10pXG4gICAgICApLFxuICAgICAgc3RhcnRXaXRoKFxuICAgICAgICBbXSBhcyB7XG4gICAgICAgICAgZGF0YXNvdXJjZTogc3RyaW5nO1xuICAgICAgICAgIGV4dGVudDogQ29vcmRpbmF0ZVtdO1xuICAgICAgICAgIGVycm9yOiBib29sZWFuO1xuICAgICAgICB9W11cbiAgICAgIClcbiAgICApO1xuXG4gICAgdGhpcy5sZWdlbmRMYXllcnMkID0gdGhpcy5vcHRpb25zJC5waXBlKFxuICAgICAgbWFwKFxuICAgICAgICAob3B0aW9ucykgPT5cbiAgICAgICAgICAob3B0aW9ucy5sYXllcnMgPz8gW10pLmZpbHRlcigobGF5ZXIpID0+IFsnZ2Vvc2VydmVyJywgJ3dtcyddLmluY2x1ZGVzKGxheWVyLnR5cGUpKSBhcyAoXG4gICAgICAgICAgICB8IE1hcEdlb1NlcnZlckxheWVyT3B0aW9uc1xuICAgICAgICAgICAgfCBNYXBXTVNMYXllckxheWVyT3B0aW9uc1xuICAgICAgICAgIClbXVxuICAgICAgKSxcbiAgICAgIGRlbGF5KDEwKVxuICAgICk7XG5cbiAgICB0aGlzLmxheWVyc1RvcCQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLmxlZ2VuZFRvcCQsIHRoaXMubGVnZW5kTGF5ZXJzJF0pLnBpcGUoXG4gICAgICBtYXAoKFtsZWdlbmRUb3AsIGxheWVyc10pID0+IGxlZ2VuZFRvcCArICgobGF5ZXJzLmxlbmd0aCA/PyAwKSA+IDAgPyA1MCA6IDApKVxuICAgICk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMubGF5ZXJzVG9wJCwgdGhpcy5sZWdlbmRMYXllcnMkLCB0aGlzLm9sWm9vbUVsZW1lbnQkLCB0aGlzLmRpc3BsYXlIZWFkZXIkXSlcbiAgICAgICAgLnBpcGUod2l0aExhdGVzdEZyb20odGhpcy5sYXllcnMkKSlcbiAgICAgICAgLnN1YnNjcmliZSgoW1tsYXllcnNUb3AsIGxlZ2VuZCwgem9vbUVsZW1lbnQsIGRpc3BsYXlIZWFkZXJdLCBsYXllcnNdKSA9PiB7XG4gICAgICAgICAgaWYgKHpvb21FbGVtZW50KSB7XG4gICAgICAgICAgICB6b29tRWxlbWVudC5zdHlsZS50b3AgPSBgJHtcbiAgICAgICAgICAgICAgbGF5ZXJzVG9wICtcbiAgICAgICAgICAgICAgKChsZWdlbmQubGVuZ3RoID8/IDApID4gMCB8fCBsYXllcnMubGVuZ3RoID4gMCA/IDIwIDogMCkgK1xuICAgICAgICAgICAgICAoIWRpc3BsYXlIZWFkZXIgPyBXSURHRVRfSEVBREVSX0hFSUdIVC52YWx1ZSA6IDApXG4gICAgICAgICAgICB9cHhgO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICB0aGlzLm1hcFN0eWxlTGF5ZXIkLFxuICAgICAgICB0aGlzLmxheWVycyQsXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJZHMkLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKHAsIGMpID0+IGVxdWFsKHAsIGMpKSksXG4gICAgICAgIHRoaXMuZml0RXh0ZW50cyQsXG4gICAgICAgIHRoaXMuZGF0YXNvdXJjZUZpbHRlcnMkXG4gICAgICBdKS5zdWJzY3JpYmUoKFttYXBTdHlsZUxheWVyLCBsYXllcnMsIHNlbGVjdGVkSWRzLCBleHRlbnRzLCBmaWx0ZXJzXSkgPT4ge1xuICAgICAgICBjb25zdCBuZWVkZWRDYWxjdWxhdGVkRXh0ZW50cyA9IGxheWVycy5maWx0ZXIoXG4gICAgICAgICAgKGxheWVyKSA9PiBbJ2dlb3NlcnZlcicsICd3bXMnXS5pbmNsdWRlcyhsYXllci5nZXQoJ3R5cGUnKSkgJiYgbGF5ZXIuZ2V0KCdmaXQnKVxuICAgICAgICApLmxlbmd0aDtcbiAgICAgICAgY29uc3QgbmJDYWxjdWxhdGVkRXh0ZW50cyA9IGV4dGVudHMuZmlsdGVyKChleHRlbnQpID0+ICFleHRlbnQuZXJyb3IpLmxlbmd0aDtcblxuICAgICAgICBpZiAobmJDYWxjdWxhdGVkRXh0ZW50cyA+PSBuZWVkZWRDYWxjdWxhdGVkRXh0ZW50cykge1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdG9BcHBseUxheWVycyA9IFsuLi5sYXllcnMsIC4uLm1hcFN0eWxlTGF5ZXJdO1xuICAgICAgICAgICAgdGhpcy5tYXAuc2V0TGF5ZXJzKHRvQXBwbHlMYXllcnMpO1xuXG4gICAgICAgICAgICB0aGlzLmZpdE1hcEZvck9iamVjdHMoc2VsZWN0ZWRJZHMsIGV4dGVudHMpO1xuICAgICAgICAgICAgdGhpcy5tYXAudXBkYXRlU2l6ZSgpO1xuXG4gICAgICAgICAgICB0aGlzLm1hcFxuICAgICAgICAgICAgICAuZ2V0QWxsTGF5ZXJzKClcbiAgICAgICAgICAgICAgLmZpbHRlcigobGF5ZXIpID0+ICEobGF5ZXIgaW5zdGFuY2VvZiBUaWxlKSlcbiAgICAgICAgICAgICAgLmZvckVhY2goKGxheWVyKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZ2V0RmVhdHVyZXMgPSAobGF5ZXIuZ2V0U291cmNlKCkgYXMgVmVjdG9yU291cmNlKT8uZ2V0RmVhdHVyZXM7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBnZXRGZWF0dXJlcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgKGxheWVyLmdldFNvdXJjZSgpIGFzIFZlY3RvclNvdXJjZSk/LmdldEZlYXR1cmVzKCkuZm9yRWFjaCgoZmVhdHVyZTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHR5cGUgPSBmZWF0dXJlLmdldCgndHlwZScpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgWydidWJibGUnLCAnbWFya2VyJywgJ3BvaW50JywgJ2xpbmUnLCAncG9seWdvbicsICdtdWx0aS1saW5lJywgJ211bHRpLXBvbHlnb24nXS5pbmNsdWRlcyh0eXBlKVxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlLnNldFN0eWxlKFxuICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZS5nZXQoc2VsZWN0ZWRJZHMuaW5jbHVkZXMoZmVhdHVyZS5nZXQoJ2lkJykpID8gJ3NlbGVjdGVkU3R5bGUnIDogJ2NsYXNzaWNTdHlsZScpXG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9LCAxMDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMubWFwLnNldExheWVycyhbLi4ubWFwU3R5bGVMYXllcl0pO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGFkZEVtcHR5V2ViR2xMYXllckJlbG93U2xpZGVIZWF0bWFwcyhsYXllcnM6IEJhc2VMYXllcltdKSB7XG4gICAgY29uc3QgX2xheWVycyA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGF5ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBsYXllciA9IGxheWVyc1tpXTtcbiAgICAgIF9sYXllcnMucHVzaChsYXllcik7XG4gICAgICBpZiAobGF5ZXIuZ2V0KCd0eXBlJykgPT09ICdoZWF0bWFwJyAmJiBsYXllci5nZXQoJ3NsaWRlJykpIHtcbiAgICAgICAgY29uc3QgZW1wdHlEYXRhID0gbmV3IFVpbnQ4QXJyYXkoMjU2ICogMjU2ICogNCk7XG4gICAgICAgIGNvbnN0IGVtcHR5TGF5ZXIgPSBuZXcgV2ViR0xUaWxlTGF5ZXIoe1xuICAgICAgICAgIHNvdXJjZTogbmV3IERhdGFUaWxlKHtcbiAgICAgICAgICAgIGxvYWRlcigpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGVtcHR5RGF0YTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtYXhab29tOiAwLFxuICAgICAgICAgICAgd3JhcFg6IHRydWVcbiAgICAgICAgICB9KVxuICAgICAgICB9KTtcbiAgICAgICAgX2xheWVycy5wdXNoKGVtcHR5TGF5ZXIpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gX2xheWVycztcbiAgfVxuXG4gIG92ZXJyaWRlIGluaXRSZXN1bHRTZXQkKCkge1xuICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMuc3RvcmUuc2VsZWN0KERhc2hib2FyZFNlbGVjdG9ycy5yZXN1bHRTZXRzKSxcbiAgICAgIHRoaXMuZGF0YXNvdXJjZUlkcyQsXG4gICAgICB0aGlzLnN0YXRpY1Jlc3VsdFNldCQsXG4gICAgICB0aGlzLnN0b3JlLnNlbGVjdChEYXRhU291cmNlU2VsZWN0b3JzLmRhdGFzZXRzKVxuICAgIF0pLnBpcGUoXG4gICAgICBtYXAoKFtyZXN1bHRTZXRzLCByZXN1bHRTZXROYW1lc0FycmF5LCBzdGF0aWNSZXN1bHRTZXQsIGRlZmluaXRpb25zXSkgPT4ge1xuICAgICAgICBpZiAoISFzdGF0aWNSZXN1bHRTZXQpIHtcbiAgICAgICAgICByZXR1cm4gc3RhdGljUmVzdWx0U2V0O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlc3VsdFNldEFycmF5ID0gcmVzdWx0U2V0TmFtZXNBcnJheVxuICAgICAgICAgIC5maWx0ZXIoKHJzTmFtZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGVmaW5pdGlvbiA9IGRlZmluaXRpb25zLmZpbmQoKGRzZCkgPT4gZHNkLmlkID09PSByc05hbWUpIGFzIERhdGFzZXQgfCB1bmRlZmluZWQ7XG4gICAgICAgICAgICByZXR1cm4gIWRlZmluaXRpb24gfHwgIShkZWZpbml0aW9uLm1ldGFkYXRhID8/IFtdKS5maW5kKChtZXRhKSA9PiBtZXRhLm1ldGFkYXRhRGVmLm5hbWUgPT09ICdfZ2VvS2V5Jyk7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAubWFwKChyc05hbWUpID0+IHJlc3VsdFNldHNbcnNOYW1lID8/ICcnXSlcbiAgICAgICAgICAuZmlsdGVyKChyc05hbWUpID0+ICEhcnNOYW1lKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdFNldEFycmF5LnJlZHVjZSgocnMxLCByczIpID0+IFJlc3VsdHNldFV0aWxzLm1lcmdlUmVzdWx0U2V0cyhyczEsIHJzMiksIHtcbiAgICAgICAgICBpdGVtczoge30sXG4gICAgICAgICAgcmVsYXRpb25zOiBbXSxcbiAgICAgICAgICBtZXJnZWQ6IHJlc3VsdFNldEFycmF5Lmxlbmd0aFxuICAgICAgICB9KTtcbiAgICAgIH0pLFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKHAsIHYpID0+IGVxdWFsKHAsIHYpKVxuICAgICk7XG4gIH1cblxuICBzZXREZWZhdWx0TGF5ZXJUaXRsZShcbiAgICBsYXllcjogTWFwV2lkZ2V0TGF5ZXJPcHRpb25zLFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgY2FwYWJpbGl0aWVzOlxuICAgICAgfCB7XG4gICAgICAgICAgW3A6IHN0cmluZ106IEdldENhcGFiaWxpdGllc1Jlc3BvbnNlIHwgbnVsbDtcbiAgICAgICAgfVxuICAgICAgfCB1bmRlZmluZWRcbiAgKSB7XG4gICAgaWYgKCFsYXllci50aXRsZSkge1xuICAgICAgaWYgKFsnZ2Vvc2VydmVyJywgJ3dtcyddLmluY2x1ZGVzKGxheWVyLnR5cGUpKSB7XG4gICAgICAgIGNvbnN0IGdlb0xheWVyID0gbGF5ZXIgYXMgTWFwR2VvU2VydmVyTGF5ZXJPcHRpb25zIHwgTWFwV01TTGF5ZXJMYXllck9wdGlvbnM7XG4gICAgICAgIGNvbnN0IGxheWVyQ2FwYWJpbGl0aWVzID0gY2FwYWJpbGl0aWVzID8gY2FwYWJpbGl0aWVzW2dlb0xheWVyLnVybF0gOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgaWYgKGxheWVyQ2FwYWJpbGl0aWVzKSB7XG4gICAgICAgICAgY29uc3QgbWF0Y2hpbmdMYXllciA9IFhNTFV0aWxzLmdldE1hdGNoaW5nTGF5ZXIoZ2VvTGF5ZXIucGFyYW1MYXllciwgbGF5ZXJDYXBhYmlsaXRpZXMuZG9jKTtcbiAgICAgICAgICBpZiAobWF0Y2hpbmdMYXllcikge1xuICAgICAgICAgICAgY29uc3QgbWF0Y2hpbmdUaXRsZSA9IFhNTFV0aWxzLmZpbmQobWF0Y2hpbmdMYXllci5jaGlsZE5vZGVzLCAnVGl0bGUnKTtcbiAgICAgICAgICAgIGlmIChtYXRjaGluZ1RpdGxlKSB7XG4gICAgICAgICAgICAgIGxheWVyLnRpdGxlID1cbiAgICAgICAgICAgICAgICAhIW1hdGNoaW5nVGl0bGUudGV4dENvbnRlbnQgJiYgbWF0Y2hpbmdUaXRsZS50ZXh0Q29udGVudC5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgICA/IG1hdGNoaW5nVGl0bGUudGV4dENvbnRlbnRcbiAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGF5ZXIudGl0bGUgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChgQHByeS53aWRnZXQubWFwLmxheWVyVHlwZS4ke2xheWVyLnR5cGV9YCwgeyAuLi5sYXllciB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmaXRNYXBGb3JPYmplY3RzKFxuICAgIHNlbGVjdGVkSWRzPzogc3RyaW5nW10sXG4gICAgZXh0ZW50czoge1xuICAgICAgZGF0YXNvdXJjZTogc3RyaW5nO1xuICAgICAgZXh0ZW50OiBDb29yZGluYXRlW107XG4gICAgfVtdID0gW11cbiAgKSB7XG4gICAgbGV0IGV4dGVudCA9IGNyZWF0ZUVtcHR5KCk7XG4gICAgY29uc3QgbGlzdE9mTWFya2VycyA9IFtdIGFzIGFueVtdO1xuXG4gICAgLyogTWFuZGF0b3J5IGZpdCAqL1xuICAgIHRoaXMubWFwXG4gICAgICAuZ2V0QWxsTGF5ZXJzKClcbiAgICAgIC5maWx0ZXIoKGxheWVyKSA9PiBsYXllci5nZXRQcm9wZXJ0aWVzKClbJ2ZpdCddKVxuICAgICAgLmZpbHRlcigobGF5ZXIpID0+ICEhbGF5ZXIuZ2V0U291cmNlICYmICEhbGF5ZXIuZ2V0U291cmNlKCkgJiYgISEobGF5ZXIuZ2V0U291cmNlKCkgYXMgVmVjdG9yU291cmNlKS5nZXRGZWF0dXJlcylcbiAgICAgIC5mb3JFYWNoKChsYXllcikgPT4ge1xuICAgICAgICAobGF5ZXIuZ2V0U291cmNlKCkgYXMgVmVjdG9yU291cmNlKS5nZXRGZWF0dXJlcygpLmZvckVhY2goKGZlYXR1cmU6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGlkID0gZmVhdHVyZS5nZXQoJ2lkJyk7XG4gICAgICAgICAgaWYgKCFzZWxlY3RlZElkcyB8fCBzZWxlY3RlZElkcy5sZW5ndGggPD0gMCB8fCAoc2VsZWN0ZWRJZHMubGVuZ3RoID4gMCAmJiBzZWxlY3RlZElkcy5pbmNsdWRlcyhpZCkpKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKGZlYXR1cmUuZ2V0KCd0eXBlJykpIHtcbiAgICAgICAgICAgICAgY2FzZSAnaGVhdHBvaW50JzpcbiAgICAgICAgICAgICAgY2FzZSAncG9pbnQnOlxuICAgICAgICAgICAgICBjYXNlICdtYXJrZXInOlxuICAgICAgICAgICAgICAgIGxpc3RPZk1hcmtlcnMucHVzaChmZWF0dXJlLmdldEdlb21ldHJ5KCkuZ2V0Q29vcmRpbmF0ZXMoKSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgJ2xpbmUnOlxuICAgICAgICAgICAgICBjYXNlICdsaW5rJzpcbiAgICAgICAgICAgICAgICBsaXN0T2ZNYXJrZXJzLnB1c2goLi4uZmVhdHVyZS5nZXRHZW9tZXRyeSgpLmdldENvb3JkaW5hdGVzKCkpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlICdwb2x5Z29uJzpcbiAgICAgICAgICAgICAgY2FzZSAnbXVsdGktbGluZSc6XG4gICAgICAgICAgICAgICAgbGlzdE9mTWFya2Vycy5wdXNoKC4uLmZlYXR1cmUuZ2V0R2VvbWV0cnkoKS5nZXRDb29yZGluYXRlcygpLmZsYXQoKSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgJ211bHRpLXBvbHlnb24nOlxuICAgICAgICAgICAgICAgIGxpc3RPZk1hcmtlcnMucHVzaCguLi5mZWF0dXJlLmdldEdlb21ldHJ5KCkuZ2V0Q29vcmRpbmF0ZXMoKS5mbGF0KCkuZmxhdCgpKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBsaXN0T2ZNYXJrZXJzLnB1c2goZmVhdHVyZS5nZXRHZW9tZXRyeSgpLmdldENlbnRlcigpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICBjb25zdCBzZWxlY3RlZEV4dGVudCA9IGJvdW5kaW5nRXh0ZW50KFxuICAgICAgbGlzdE9mTWFya2Vycy5maWx0ZXIoKGNvb3JkKSA9PiAhIWNvb3JkKS5jb25jYXQoLi4uZXh0ZW50cy5tYXAoKGV4dGVudCkgPT4gZXh0ZW50LmV4dGVudCkpXG4gICAgKTtcblxuICAgIGlmIChcbiAgICAgIHNlbGVjdGVkRXh0ZW50WzBdICE9PSBJbmZpbml0eSAmJlxuICAgICAgc2VsZWN0ZWRFeHRlbnRbMV0gIT09IEluZmluaXR5ICYmXG4gICAgICBzZWxlY3RlZEV4dGVudFsyXSAhPT0gLUluZmluaXR5ICYmXG4gICAgICBzZWxlY3RlZEV4dGVudFszXSAhPT0gLUluZmluaXR5XG4gICAgKSB7XG4gICAgICBleHRlbnQgPSBzZWxlY3RlZEV4dGVudDtcbiAgICB9XG5cbiAgICBpZiAoZXh0ZW50WzBdICE9PSBJbmZpbml0eSAmJiBleHRlbnRbMV0gIT09IEluZmluaXR5ICYmIGV4dGVudFsyXSAhPT0gLUluZmluaXR5ICYmIGV4dGVudFszXSAhPT0gLUluZmluaXR5KSB7XG4gICAgICB0aGlzLm1hcC5nZXRWaWV3KCkuZml0KGV4dGVudCwgeyBwYWRkaW5nOiBbMjAsIDIwLCA3MCwgNzBdLCBkdXJhdGlvbjogMjAwIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0QXR0cmlidXRlc0ZvckRyYXdpbmcoY2xhc3NlczogQ2xhc3NbXSwgY2xhc3NJZDogc3RyaW5nLCBsYXllcjogTWFwV2lkZ2V0TGF5ZXJPcHRpb25zKSB7XG4gICAgY29uc3QgY2xhc3NPYmogPSBjbGFzc2VzLmZpbmQoKGNsKSA9PiBjbC5pZCA9PT0gY2xhc3NJZCkgPz8gKHsgYXR0cmlidXRlczogW10gYXMgQXR0cmlidXRlW10gfSBhcyBDbGFzcyk7XG4gICAgY29uc3QgbG9jYXRpb25BdHRyaWJ1dGUgPSB0aGlzLmdldExvY2F0aW9uQXR0cmlidXRlKGNsYXNzT2JqLCBsYXllcik7XG4gICAgY29uc3QgaW50ZW5zaXR5QXR0cmlidXRlID0gdGhpcy5nZXRJbnRlbnNpdHlBdHRyaWJ1dGUoXG4gICAgICBjbGFzc09iaixcbiAgICAgIGxheWVyIGFzIE1hcFdpZGdldEhlYXRNYXBMYXllck9wdGlvbnMgfCBNYXBXaWRnZXRCdWJibGVMYXllck9wdGlvbnNcbiAgICApO1xuICAgIHJldHVybiB7IGxvY2F0aW9uQXR0cmlidXRlLCBpbnRlbnNpdHlBdHRyaWJ1dGUgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0SW50ZW5zaXR5QXR0cmlidXRlKFxuICAgIGNsYXNzT2JqOiBDbGFzcyB8IHVuZGVmaW5lZCxcbiAgICBsYXllcjogTWFwV2lkZ2V0SGVhdE1hcExheWVyT3B0aW9ucyB8IE1hcFdpZGdldEJ1YmJsZUxheWVyT3B0aW9uc1xuICApIHtcbiAgICByZXR1cm4gKFxuICAgICAgKGNsYXNzT2JqIHx8IHsgYXR0cmlidXRlczogW10gfSkuYXR0cmlidXRlcy5maW5kKFxuICAgICAgICAoYXR0cikgPT4gYXR0ci50ZWNobmljYWxOYW1lID09PSBsYXllcj8uaW50ZW5zaXR5QXR0cmlidXRlID8/ICcnXG4gICAgICApID8/ICh1bmRlZmluZWQgYXMgdW5rbm93biBhcyBBdHRyaWJ1dGUpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TG9jYXRpb25BdHRyaWJ1dGUoY2xhc3NPYmo6IENsYXNzLCBsYXllcjogTWFwV2lkZ2V0TGF5ZXJPcHRpb25zKTogQXR0cmlidXRlIHtcbiAgICB0eXBlIGxheWVycyA9IE1hcFdpZGdldEhlYXRNYXBMYXllck9wdGlvbnMgfCBNYXBXaWRnZXRNYXJrZXJMYXllck9wdGlvbnMgfCBNYXBXaWRnZXRCdWJibGVMYXllck9wdGlvbnM7XG4gICAgY29uc3Qgc3BlY2lmaWNMYXllciA9IGxheWVyIGFzIGxheWVycztcbiAgICByZXR1cm4gKFxuICAgICAgY2xhc3NPYmouYXR0cmlidXRlcy5maW5kKChhdHRyKSA9PiBhdHRyLnRlY2huaWNhbE5hbWUgPT09IChzcGVjaWZpY0xheWVyPy5hdHRyaWJ1dGUgPz8gW10pID8/ICcnKSA/P1xuICAgICAgKHVuZGVmaW5lZCBhcyB1bmtub3duIGFzIEF0dHJpYnV0ZSlcbiAgICApO1xuICB9XG5cbiAgY2hhbmdlU3R5bGUoJGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLm9wdGlvbnNDb3B5LnN0eWxlID0gJGV2ZW50O1xuICAgIGlmICh0aGlzLm9wdGlvbnNDb3B5LnN0eWxlICE9PSB0aGlzLlNUWUxFX0ZST01fVVJMKSB7XG4gICAgICBkZWxldGUgdGhpcy5vcHRpb25zQ29weS5zdHlsZVVSTDtcbiAgICB9XG4gIH1cblxuICBjaGFuZ2VTdHlsZVVSTCgkZXZlbnQ6IEV2ZW50KSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHRoaXMub3B0aW9uc0NvcHkuc3R5bGVVUkwgPSAkZXZlbnQuY3VycmVudFRhcmdldD8udmFsdWU7XG4gIH1cblxuICBjaGFuZ2VGaXQoJGV2ZW50OiBib29sZWFuLCBsYXllcjogTWFwV2lkZ2V0TGF5ZXJPcHRpb25zKSB7XG4gICAgbGF5ZXIuZml0ID0gJGV2ZW50O1xuICB9XG5cbiAgY2hhbmdlU2xpZGUoJGV2ZW50OiB1bmRlZmluZWQgfCAnbGVmdCcgfCAncmlnaHQnLCBsYXllcjogTWFwV2lkZ2V0TGF5ZXJPcHRpb25zKSB7XG4gICAgbGF5ZXIuc2xpZGUgPSAkZXZlbnQ7XG4gIH1cblxuICBjaGFuZ2VBdHRyaWJ1dGlvbnMoJGV2ZW50OiBib29sZWFuKSB7XG4gICAgdGhpcy5vcHRpb25zQ29weS5hdHRyaWJ1dGlvbnMgPSAkZXZlbnQ7XG4gICAgaWYgKHRoaXMub3B0aW9uc0NvcHkuYXR0cmlidXRpb25zKSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5LmxheWVycz8uZm9yRWFjaCgobGF5ZXIpID0+IChsYXllci5hdHRyaWJ1dGlvbiA9ICcnKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkubGF5ZXJzPy5mb3JFYWNoKChsYXllcikgPT4gZGVsZXRlIGxheWVyLmF0dHJpYnV0aW9uKTtcbiAgICB9XG4gIH1cblxuICBhZGRMYXllcihncm91cDogTGF5ZXJHcm91cCkge1xuICAgIGlmICghdGhpcy5vcHRpb25zQ29weS5sYXllcnMpIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkubGF5ZXJzID0gW107XG4gICAgfVxuICAgIGNvbnN0IHRpdGxlID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoYEBwcnkud2lkZ2V0Lm1hcC5sYXllcmAsIHsgaW5kZXg6IHRoaXMub3B0aW9uc0NvcHkubGF5ZXJzLmxlbmd0aCArIDEgfSk7XG5cbiAgICB0aGlzLm9wdGlvbnNDb3B5LmxheWVycy5wdXNoKHtcbiAgICAgIGF0dHJpYnV0ZTogJycsXG4gICAgICBncm91cDogZ3JvdXAubmFtZSxcbiAgICAgIHRpdGxlLFxuICAgICAgdHlwZTogJ21hcmtlcidcbiAgICB9KTtcbiAgICB0aGlzLmxheWVyU2V0dGluZ3NFeHBhbmRlZFN0YXRlW3RpdGxlXSA9IGZhbHNlO1xuXG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChcbiAgICAgIERhc2hib2FyZEFjdGlvbnMudXBkYXRlTGF5ZXJHcm91cCh7IG5hbWU6IGdyb3VwLm5hbWUsIHZpc2libGVMYXllcnM6IFsuLi5ncm91cC52aXNpYmxlTGF5ZXJzLCB0aXRsZV0gfSlcbiAgICApO1xuICAgIHRoaXMudXBkYXRlTGF5ZXJPcmRlcigpO1xuICB9XG5cbiAgY2hhbmdlTGF5ZXJUeXBlKCRldmVudDogYW55LCBpOiBudW1iZXIpIHtcbiAgICBpZiAoIXRoaXMub3B0aW9uc0NvcHkubGF5ZXJzKSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5LmxheWVycyA9IHRoaXMub3B0aW9uc0NvcHkubGF5ZXJzID8/IFtdO1xuICAgIH1cbiAgICB0aGlzLm9wdGlvbnNDb3B5LmxheWVyc1tpXS50eXBlID0gJGV2ZW50O1xuICAgIGlmICh0aGlzLm9wdGlvbnNDb3B5LmxheWVyc1tpXS50eXBlID09PSAnd21zJykge1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9uc0NvcHkubGF5ZXJzW2ldIGFzIE1hcFdNU0xheWVyTGF5ZXJPcHRpb25zO1xuICAgICAgb3B0aW9ucy5wYXJhbUxheWVyID0gb3B0aW9ucy5wYXJhbUxheWVyID8/ICcnO1xuICAgICAgb3B0aW9ucy51cmwgPSBvcHRpb25zLnVybCA/PyAnJztcbiAgICB9XG4gICAgaWYgKHRoaXMub3B0aW9uc0NvcHkubGF5ZXJzW2ldLnR5cGUgPT09ICd3bXRzJykge1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9uc0NvcHkubGF5ZXJzW2ldIGFzIE1hcFdNVFNMYXllckxheWVyT3B0aW9ucztcbiAgICAgIG9wdGlvbnMucGFyYW1MYXllciA9IG9wdGlvbnMucGFyYW1MYXllciA/PyAnJztcbiAgICAgIG9wdGlvbnMuc3R5bGUgPSBvcHRpb25zLnN0eWxlID8/ICcnO1xuICAgICAgb3B0aW9ucy5tYXRyaXhTZXQgPSBvcHRpb25zLm1hdHJpeFNldCA/PyAnJztcbiAgICAgIG9wdGlvbnMudXJsID0gb3B0aW9ucy51cmwgPz8gJyc7XG4gICAgfVxuICAgIGlmIChbJ2ZlYXR1cmVsYXllcicsICd2ZWN0b3J0aWxlJywgJ3Jhc3RlcnRpbGUnXS5pbmNsdWRlcyh0aGlzLm9wdGlvbnNDb3B5LmxheWVyc1tpXS50eXBlKSkge1xuICAgICAgbGV0IG9wdGlvbnM6IE1hcEZlYXR1cmVMYXllck9wdGlvbnM7XG4gICAgICBvcHRpb25zID0gdGhpcy5vcHRpb25zQ29weS5sYXllcnNbaV0gYXMgTWFwRmVhdHVyZUxheWVyT3B0aW9ucztcbiAgICAgIG9wdGlvbnMudXJsID0gb3B0aW9ucy51cmwgPz8gJyc7XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlVGl0bGUoJGV2ZW50OiBhbnksIGxheWVyOiBNYXBXaWRnZXRMYXllck9wdGlvbnMsIGdyb3VwOiBMYXllckdyb3VwKSB7XG4gICAgY29uc3QgdmlzaWJsZUxheWVycyA9IGdyb3VwLnZpc2libGVMYXllcnMubWFwKChsYXllclRpdGxlKSA9PiAobGF5ZXJUaXRsZSA9PT0gbGF5ZXIudGl0bGUgPyAkZXZlbnQgOiBsYXllclRpdGxlKSk7XG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChEYXNoYm9hcmRBY3Rpb25zLnVwZGF0ZUxheWVyR3JvdXAoeyBuYW1lOiBncm91cC5uYW1lLCB2aXNpYmxlTGF5ZXJzIH0pKTtcbiAgICBkZWxldGUgdGhpcy5sYXllclNldHRpbmdzRXhwYW5kZWRTdGF0ZVtsYXllci50aXRsZSFdO1xuICAgIGxheWVyLnRpdGxlID0gJGV2ZW50O1xuICAgIHRoaXMubGF5ZXJTZXR0aW5nc0V4cGFuZGVkU3RhdGVbJGV2ZW50XSA9IHRydWU7XG4gIH1cblxuICBlbWl0TWFuaWZlc3QoKSB7XG4gICAgdGhpcy5yZW1vdmVFbXB0eUxheWVyR3JvdXBzKCk7XG4gICAgdGhpcy5tYW5pZmVzdE1vZGlmaWVkLmVtaXQoe1xuICAgICAgd2lkZ2V0SW5kZXg6IHRoaXMud2lkZ2V0SW5kZXgsXG4gICAgICBtYW5pZmVzdDoge1xuICAgICAgICAuLi50aGlzLm1hbmlmZXN0LFxuICAgICAgICBvcHRpb25zOiB7IC4uLnRoaXMub3B0aW9uc0NvcHksIGxheWVyczogKHRoaXMub3B0aW9uc0NvcHkubGF5ZXJzID8/IFtdKS5maWx0ZXIoKGxheWVyKSA9PiAhIWxheWVyLnR5cGUpIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGNoYW5nZUxvY2F0aW9uQXR0cmlidXRlcygkZXZlbnQ6IGFueSwgbGF5ZXI6IE1hcFdpZGdldExheWVyT3B0aW9ucykge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBsYXllci5hdHRyaWJ1dGUgPSAkZXZlbnQ7XG4gIH1cblxuICBsYXllckhhc0ludGVuc2l0eShsYXllcjogTWFwV2lkZ2V0TGF5ZXJPcHRpb25zKTogTWFwV2lkZ2V0SGVhdE1hcExheWVyT3B0aW9ucyB8IE1hcFdpZGdldEJ1YmJsZUxheWVyT3B0aW9ucyB7XG4gICAgcmV0dXJuIDxNYXBXaWRnZXRIZWF0TWFwTGF5ZXJPcHRpb25zIHwgTWFwV2lkZ2V0QnViYmxlTGF5ZXJPcHRpb25zPmxheWVyO1xuICB9XG5cbiAgY2hhbmdlSW50ZW5zaXR5QXR0cmlidXRlcygkZXZlbnQ6IGFueSwgbGF5ZXI6IE1hcFdpZGdldExheWVyT3B0aW9ucykge1xuICAgIGNvbnN0IGxheWVyXyA9IDxNYXBXaWRnZXRIZWF0TWFwTGF5ZXJPcHRpb25zIHwgTWFwV2lkZ2V0QnViYmxlTGF5ZXJPcHRpb25zPmxheWVyO1xuICAgIGxheWVyXy5pbnRlbnNpdHlBdHRyaWJ1dGUgPSAkZXZlbnQ7XG4gIH1cblxuICBjaGFuZ2VDbGFzc2VzKCRldmVudDogc3RyaW5nW10sIGxheWVyOiBNYXBXaWRnZXRMYXllck9wdGlvbnMpIHtcbiAgICBjb25zdCBzcGVjaWZpY0xheWVyID0gbGF5ZXIgYXNcbiAgICAgIHwgTWFwV2lkZ2V0SGVhdE1hcExheWVyT3B0aW9uc1xuICAgICAgfCBNYXBXaWRnZXRNYXJrZXJMYXllck9wdGlvbnNcbiAgICAgIHwgTWFwV2lkZ2V0QnViYmxlTGF5ZXJPcHRpb25zO1xuICAgIHNwZWNpZmljTGF5ZXIuY2xhc3NlcyA9ICRldmVudDtcbiAgfVxuXG4gIGRlbGV0ZUxheWVyKGk6IG51bWJlciwgbGF5ZXI6IE1hcFdpZGdldExheWVyT3B0aW9ucywgZ3JvdXA6IExheWVyR3JvdXApIHtcbiAgICB0aGlzLm9wdGlvbnNDb3B5Py5sYXllcnM/LnNwbGljZShpLCAxKTtcbiAgICB0aGlzLnVwZGF0ZUxheWVyR3JvdXAoXG4gICAgICBncm91cC5uYW1lLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgZ3JvdXAudmlzaWJsZUxheWVycy5maWx0ZXIoKGwpID0+IGwgIT09IGxheWVyLnRpdGxlKVxuICAgICk7XG4gICAgdGhpcy5yZW1vdmVFbXB0eUxheWVyR3JvdXBzKCk7XG4gICAgaWYgKGxheWVyLnR5cGUgPT09ICdhdXRvJykge1xuICAgICAgdGhpcy5vcHRpb25zQ29weS5pZ25vcmVBdXRvTGF5ZXIgPSBbLi4uKHRoaXMub3B0aW9uc0NvcHkuaWdub3JlQXV0b0xheWVyID8/IFtdKSwgbGF5ZXIua2V5ICsgJy0nICsgbGF5ZXIuc3ViVHlwZV07XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlVXJsKFxuICAgICRldmVudDogRXZlbnQsXG4gICAgbGF5ZXI6XG4gICAgICB8IE1hcFdNU0xheWVyTGF5ZXJPcHRpb25zXG4gICAgICB8IE1hcEZlYXR1cmVMYXllck9wdGlvbnNcbiAgICAgIHwgTWFwVmVjdG9yVGlsZUxheWVyT3B0aW9uc1xuICAgICAgfCBNYXBSYXN0ZXJUaWxlTGF5ZXJPcHRpb25zXG4gICAgICB8IE1hcFdNVFNMYXllckxheWVyT3B0aW9uc1xuICAgICAgfCBNYXBHZW9TZXJ2ZXJMYXllck9wdGlvbnNcbiAgKSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGxheWVyLnVybCA9ICRldmVudC5jdXJyZW50VGFyZ2V0Py52YWx1ZTtcbiAgfVxuXG4gIGNoYW5nZUF0dHJpYnV0aW9uKCRldmVudDogRXZlbnQsIGxheWVyOiBCYXNlV2lkZ2V0TWFwTGF5ZXJPcHRpb25zKSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGxheWVyLmF0dHJpYnV0aW9uID0gJGV2ZW50LmN1cnJlbnRUYXJnZXQ/LnZhbHVlO1xuICB9XG5cbiAgY2hhbmdlUGFyYW1MYXllcigkZXZlbnQ6IEV2ZW50LCBsYXllcjogTWFwV01TTGF5ZXJMYXllck9wdGlvbnMgfCBNYXBXTVRTTGF5ZXJMYXllck9wdGlvbnMpIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgbGF5ZXIucGFyYW1MYXllciA9ICRldmVudC5jdXJyZW50VGFyZ2V0Py52YWx1ZTtcbiAgfVxuXG4gIGNoYW5nZVBhcmFtVGlsZWQoJGV2ZW50OiBib29sZWFuLCBsYXllcjogTWFwV01TTGF5ZXJMYXllck9wdGlvbnMgfCBNYXBHZW9TZXJ2ZXJMYXllck9wdGlvbnMpIHtcbiAgICBsYXllci5wYXJhbVRpbGVkID0gJGV2ZW50O1xuICAgIHRoaXMudG9vbHRpcE1hbmFnZXIuY2xlYXJUb29sdGlwKCk7XG4gIH1cblxuICBjaGFuZ2VNYXRyaXhTZXQoJGV2ZW50OiBFdmVudCwgbGF5ZXI6IE1hcFdNVFNMYXllckxheWVyT3B0aW9ucykge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBsYXllci5tYXRyaXhTZXQgPSAkZXZlbnQuY3VycmVudFRhcmdldD8udmFsdWU7XG4gIH1cblxuICBjaGFuZ2VQYXJhbVN0eWxlKCRldmVudDogRXZlbnQsIGxheWVyOiBNYXBXTVRTTGF5ZXJMYXllck9wdGlvbnMpIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgbGF5ZXIuc3R5bGUgPSAkZXZlbnQuY3VycmVudFRhcmdldD8udmFsdWU7XG4gIH1cblxuICBleHBvcnQoKSB7XG4gICAgV2lkZ2V0TWFwVXRpbHMuZXhwb3J0TWFwQXNJbWFnZSh0aGlzLm1hcCwgJ21hcC5wbmcnKTtcbiAgfVxuXG4gIG92ZXJyaWRlIHRvSW1hZ2UoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gV2lkZ2V0TWFwVXRpbHMuZ2V0TWFwQXNQbmcodGhpcy5tYXApO1xuICB9XG5cbiAgY2hhbmdlQ2x1c3RlcmVkKGxheWVyOiBNYXBXaWRnZXRNYXJrZXJMYXllck9wdGlvbnMsICRldmVudDogYm9vbGVhbikge1xuICAgIGxheWVyLmNsdXN0ZXJlZCA9ICRldmVudDtcbiAgICBpZiAobGF5ZXIuY2x1c3RlcmVkKSB7XG4gICAgICBsYXllci5jbHVzdGVyRGlzdGFuY2UgPSAxMDtcbiAgICB9XG4gIH1cblxuICBjaGFuZ2VDbHVzdGVyRGlzdGFuY2UobGF5ZXI6IE1hcFdpZGdldE1hcmtlckxheWVyT3B0aW9ucywgJGV2ZW50OiBFdmVudCkge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBsYXllci5jbHVzdGVyRGlzdGFuY2UgPSAkZXZlbnQuY3VycmVudFRhcmdldD8udmFsdWU7XG4gIH1cblxuICBjaGFuZ2VPcGFjaXR5KGxheWVyOiBNYXBXaWRnZXRMYXllck9wdGlvbnMsICRldmVudDogc3RyaW5nKSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGxheWVyLm9wYWNpdHkgPSBwYXJzZUludCgkZXZlbnQsIDEwKTtcbiAgfVxuXG4gIGdldFdNU0xheWVycygpOiBMYXllcjxhbnk+W10ge1xuICAgIHJldHVybiAhdGhpcy5tYXBcbiAgICAgID8gW11cbiAgICAgIDogdGhpcy5tYXBcbiAgICAgICAgICAuZ2V0QWxsTGF5ZXJzKClcbiAgICAgICAgICAuZmlsdGVyKChsYXllcikgPT4gbGF5ZXIuZ2V0U291cmNlKCkgaW5zdGFuY2VvZiBUaWxlV01TIHx8IGxheWVyLmdldFNvdXJjZSgpIGluc3RhbmNlb2YgSW1hZ2VXTVMpXG4gICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgIC5maWx0ZXIoKGxheWVyKSA9PiBsYXllci5yZW5kZXJlZCA9PT0gdHJ1ZSk7XG4gIH1cblxuICBpc0xheWVyUmVuZGVyZWQobGF5ZXI6IGFueSkge1xuICAgIHJldHVybiAhIXRoaXMuZ2V0V01TTGF5ZXJzKCkuZmluZCgod21zTGF5ZXIpID0+IHdtc0xheWVyLmdldCgndGl0bGUnKSA9PT0gbGF5ZXIudGl0bGUpO1xuICB9XG5cbiAgY2hhbmdlV21zQ2xhc3MoJGV2ZW50OiBhbnksIGxheWVyOiBNYXBXTVNMYXllckxheWVyT3B0aW9ucykge1xuICAgIGxheWVyLm9DbGFzcyA9ICRldmVudDtcbiAgfVxuXG4gIHRvZ2dsZUxlZ2VuZChpbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy5sZWdlbmRUYWIgPSB0aGlzLmxlZ2VuZFRhYiA9PT0gaW5kZXggPyAtMSA6IGluZGV4O1xuICB9XG5cbiAgdG9nZ2xlTGVnZW5kV2luZG93KCkge1xuICAgIHRoaXMubGVnZW5kVGFiT3BlbiA9ICF0aGlzLmxlZ2VuZFRhYk9wZW47XG4gICAgdGhpcy5sYXllcnNUYWJPcGVuID0gZmFsc2U7XG4gIH1cblxuICB0b2dnbGVMYXllcnNXaW5kb3coKSB7XG4gICAgdGhpcy5sYXllcnNUYWJPcGVuID0gIXRoaXMubGF5ZXJzVGFiT3BlbjtcbiAgICB0aGlzLmxlZ2VuZFRhYk9wZW4gPSBmYWxzZTtcbiAgfVxuXG4gIGdldCBtYXBMYXllcnMoKSB7XG4gICAgcmV0dXJuICh0aGlzLm1hcCA/PyB7IGdldExheWVyczogKCkgPT4gKHsgZ2V0QXJyYXk6ICgpID0+IFtdIH0pIH0pXG4gICAgICAuZ2V0TGF5ZXJzKClcbiAgICAgIC5nZXRBcnJheSgpXG4gICAgICAuZmlsdGVyKChsYXllcikgPT4gbGF5ZXIuZ2V0KCd0aXRsZScpICE9PSAnYmFja2dyb3VuZCcpO1xuICB9XG5cbiAgZ2V0IHJpZ2h0U2xpZGVMYXllcnMoKSB7XG4gICAgcmV0dXJuIHRoaXMubWFwTGF5ZXJzLmZpbHRlcigobGF5ZXIpID0+IGxheWVyLmdldCgnc2xpZGUnKSA9PT0gJ3JpZ2h0Jyk7XG4gIH1cblxuICBnZXQgbGVmdFNsaWRlTGF5ZXJzKCkge1xuICAgIHJldHVybiB0aGlzLm1hcExheWVycy5maWx0ZXIoKGxheWVyKSA9PiBsYXllci5nZXQoJ3NsaWRlJykgPT09ICdsZWZ0Jyk7XG4gIH1cblxuICBjaGFuZ2VWaXNpYmlsaXR5KGdyb3VwOiBMYXllckdyb3VwLCBfbGF5ZXI/OiBNYXBXaWRnZXRMYXllck9wdGlvbnMpIHtcbiAgICBjb25zdCBvbExheWVyID0gdGhpcy5tYXBMYXllcnMuZmluZCgobGF5ZXIpID0+IGxheWVyLmdldFByb3BlcnRpZXMoKVsndGl0bGUnXSA9PT0gX2xheWVyPy50aXRsZSk7XG4gICAgaWYgKGdyb3VwLnNpbmdsZUxheWVyKSB7XG4gICAgICBjb25zdCBncm91cExheWVycyA9XG4gICAgICAgIHRoaXMub3B0aW9uc0NvcHkubGF5ZXJzPy5maWx0ZXIoKGwpID0+IGwuZ3JvdXAgPT09IGdyb3VwLm5hbWUpLm1hcCgobGF5ZXIpID0+IGxheWVyLnRpdGxlKSA/PyBbXTtcblxuICAgICAgdGhpcy5tYXBMYXllcnMuZm9yRWFjaCgobGF5ZXIpID0+IHtcbiAgICAgICAgaWYgKGdyb3VwTGF5ZXJzLmluY2x1ZGVzKGxheWVyLmdldFByb3BlcnRpZXMoKVsndGl0bGUnXSkpIHtcbiAgICAgICAgICBsYXllci5zZXRWaXNpYmxlKGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBvbExheWVyPy5zZXRWaXNpYmxlKHRydWUpO1xuXG4gICAgICBfbGF5ZXJcbiAgICAgICAgPyB0aGlzLnN0b3JlLmRpc3BhdGNoKERhc2hib2FyZEFjdGlvbnMudXBkYXRlTGF5ZXJHcm91cCh7IG5hbWU6IGdyb3VwLm5hbWUsIHZpc2libGVMYXllcnM6IFtfbGF5ZXIudGl0bGUhXSB9KSlcbiAgICAgICAgOiB0aGlzLnN0b3JlLmRpc3BhdGNoKERhc2hib2FyZEFjdGlvbnMudXBkYXRlTGF5ZXJHcm91cCh7IG5hbWU6IGdyb3VwLm5hbWUsIHZpc2libGVMYXllcnM6IFtdIH0pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2xMYXllcj8uc2V0VmlzaWJsZSghb2xMYXllcj8uZ2V0VmlzaWJsZSgpKTtcblxuICAgICAgY29uc3QgdmlzaWJsZUxheWVycyA9IGdyb3VwLnZpc2libGVMYXllcnMuaW5jbHVkZXMoX2xheWVyPy50aXRsZSEpXG4gICAgICAgID8gZ3JvdXAudmlzaWJsZUxheWVycy5maWx0ZXIoKGxheWVyKSA9PiBsYXllciAhPT0gX2xheWVyPy50aXRsZSlcbiAgICAgICAgOiBbLi4uZ3JvdXAudmlzaWJsZUxheWVycywgX2xheWVyPy50aXRsZSFdO1xuICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChEYXNoYm9hcmRBY3Rpb25zLnVwZGF0ZUxheWVyR3JvdXAoeyBuYW1lOiBncm91cC5uYW1lLCB2aXNpYmxlTGF5ZXJzIH0pKTtcbiAgICB9XG4gICAgdGhpcy5tYXAudXBkYXRlU2l6ZSgpO1xuICB9XG5cbiAgaXNMYXllclZpc2libGUobGF5ZXI6IE1hcFdpZGdldExheWVyT3B0aW9ucywgZ3JvdXA6IExheWVyR3JvdXApIHtcbiAgICBpZiAoZ3JvdXAudmlzaWJsZUxheWVycykge1xuICAgICAgcmV0dXJuIGdyb3VwLnZpc2libGVMYXllcnMuaW5jbHVkZXMobGF5ZXIudGl0bGUgPz8gJycpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjaGFuZ2VBdXRvTGF5ZXIoJGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLm9wdGlvbnNDb3B5LmF1dG9tYXRpY0xheWVycyA9ICRldmVudDtcbiAgICBpZiAoIXRoaXMub3B0aW9uc0NvcHkuYXV0b21hdGljTGF5ZXJzKSB7XG4gICAgICBkZWxldGUgdGhpcy5vcHRpb25zQ29weS5pZ25vcmVBdXRvTGF5ZXI7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGxheWVyVmlzaWJsZUlkeCgpIHtcbiAgICByZXR1cm4gdGhpcy5tYXBMYXllcnMubWFwKChsYXllciwgaWR4KSA9PiAobGF5ZXIuZ2V0VmlzaWJsZSgpID8gaWR4IDogMCkpLnJlZHVjZSgoYSwgYikgPT4gYSArIGIpIHx8IC0xO1xuICB9XG5cbiAgb3ZlcnJpZGUgbmdPbkRlc3Ryb3koKSB7XG4gICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcblxuICAgIC8vIFRyeWluZyB0byByZWxlYXNlIG9iamVjdHNcbiAgICB0aGlzLmNsZWFyTGF5ZXJzKHRoaXMubWFwLmdldExheWVycygpLmdldEFycmF5KCkpO1xuICAgIHRoaXMuY2xlYXJMYXllcnModGhpcy5wcmV2aW91c0xheWVycyk7XG4gICAgdGhpcy5tYXAuZ2V0UmVuZGVyZXIoKSEuZGlzcG9zZSgpO1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBkZWxldGUgdGhpcy5tYXA7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHRoaXMubWFwID0gbnVsbDtcbiAgICB0aGlzLnRvb2x0aXBNYW5hZ2VyLmRlc3Ryb3koKTtcbiAgfVxuXG4gIGdldFN0eWxlKF9sYXllcjogTWFwV2lkZ2V0TGF5ZXJPcHRpb25zKSB7XG4gICAgY29uc3QgbGF5ZXIgPSBfbGF5ZXIgYXMgTWFwV01TTGF5ZXJMYXllck9wdGlvbnMgfCBNYXBHZW9TZXJ2ZXJMYXllck9wdGlvbnM7XG4gICAgaWYgKGxheWVyLmFkZGl0aW9uYWxQYXJhbWV0ZXJzPy5TVFlMRVMpIHtcbiAgICAgIHJldHVybiBsYXllci5hZGRpdGlvbmFsUGFyYW1ldGVycz8uU1RZTEVTO1xuICAgIH1cbiAgICAvKiBOb3QgbWFuaWZlc3QtZGVmaW5lZCBzdHlsZTogdXNlIGZpcnN0IGluIGxpbmUgYmVjYXVzZSBpdCdzIHRoZSBkZWZhdWx0IG9uZSBzZW50IGJ5IGdlb3NlcnZlciAqL1xuICAgIGNvbnN0IHBvc3NpYmxlU3R5bGVzRm9yVXJsID0gdGhpcy5wb3NzaWJsZVN0eWxlc1tsYXllci51cmxdID8/IHsgbGF5ZXJzOiB7fSB9O1xuICAgIGxldCBwb3NzaWJsZXNTdHlsZXNGb3JMYXllciA9IHBvc3NpYmxlU3R5bGVzRm9yVXJsLmxheWVycyFbbGF5ZXIucGFyYW1MYXllcl07XG4gICAgaWYgKCFwb3NzaWJsZXNTdHlsZXNGb3JMYXllcikge1xuICAgICAgcG9zc2libGVzU3R5bGVzRm9yTGF5ZXIgPSBwb3NzaWJsZVN0eWxlc0ZvclVybC5sYXllcnMhWyhsYXllci5wYXJhbUxheWVyID8/ICc6Jykuc3BsaXQoJzonKVsxXV0gPz8geyBzdHlsZXM6IFtdIH07XG4gICAgfVxuICAgIHJldHVybiBwb3NzaWJsZXNTdHlsZXNGb3JMYXllci5zdHlsZXNbMF0/LmlkO1xuICB9XG5cbiAgY2hhbmdlTGF5ZXJTdHlsZSgkZXZlbnQ6IGFueSwgX2xheWVyOiBNYXBXaWRnZXRMYXllck9wdGlvbnMpIHtcbiAgICBjb25zdCBsYXllciA9IF9sYXllciBhcyBNYXBXTVNMYXllckxheWVyT3B0aW9ucyB8IE1hcEdlb1NlcnZlckxheWVyT3B0aW9ucztcbiAgICBpZiAoIWxheWVyLmFkZGl0aW9uYWxQYXJhbWV0ZXJzKSB7XG4gICAgICBsYXllci5hZGRpdGlvbmFsUGFyYW1ldGVycyA9IHt9O1xuICAgIH1cbiAgICBsYXllci5hZGRpdGlvbmFsUGFyYW1ldGVycy5TVFlMRVMgPSAkZXZlbnQ7XG4gIH1cblxuICBnZXRBc1dtc1R5cGUoX2xheWVyOiBNYXBXaWRnZXRMYXllck9wdGlvbnMpIHtcbiAgICByZXR1cm4gX2xheWVyIGFzIE1hcFdNU0xheWVyTGF5ZXJPcHRpb25zIHwgTWFwR2VvU2VydmVyTGF5ZXJPcHRpb25zO1xuICB9XG5cbiAgbGF5ZXJTdHlsZU9wdGlvbnMoX2xheWVyOiBNYXBXaWRnZXRMYXllck9wdGlvbnMpIHtcbiAgICBjb25zdCBsYXllciA9IF9sYXllciBhcyBNYXBXTVNMYXllckxheWVyT3B0aW9ucyB8IE1hcEdlb1NlcnZlckxheWVyT3B0aW9ucztcbiAgICBjb25zdCBwb3NzaWJsZVN0eWxlc0ZvclVybCA9IHRoaXMucG9zc2libGVTdHlsZXNbbGF5ZXIudXJsXSA/PyB7IGxheWVyczoge30gfTtcbiAgICBsZXQgcG9zc2libGVzU3R5bGVzRm9yTGF5ZXIgPSBwb3NzaWJsZVN0eWxlc0ZvclVybC5sYXllcnMhW2xheWVyLnBhcmFtTGF5ZXJdO1xuICAgIGlmICghcG9zc2libGVzU3R5bGVzRm9yTGF5ZXIpIHtcbiAgICAgIHBvc3NpYmxlc1N0eWxlc0ZvckxheWVyID0gcG9zc2libGVTdHlsZXNGb3JVcmwubGF5ZXJzIVsobGF5ZXIucGFyYW1MYXllciA/PyAnOicpLnNwbGl0KCc6JylbMV1dID8/IHsgc3R5bGVzOiBbXSB9O1xuICAgIH1cbiAgICByZXR1cm4gcG9zc2libGVzU3R5bGVzRm9yTGF5ZXIuc3R5bGVzO1xuICB9XG5cbiAgdHJpZ2dlckxheWVyUmVuZGVyKCkge1xuICAgIHRoaXMubWFwLnJlbmRlcigpO1xuICB9XG5cbiAgY2hhbmdlU2xpZGVPcHRpb24oJGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLm9wdGlvbnNDb3B5LnNsaWRlID0gJGV2ZW50O1xuICAgIGlmICgkZXZlbnQgPT09IGZhbHNlKSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5LmxheWVycz8uZm9yRWFjaCgobGF5ZXIpID0+IChsYXllci5zbGlkZSA9ICdhbGwnKSk7XG4gICAgfVxuICB9XG5cbiAgdG9nZ2xlTWVudSgpIHtcbiAgICB0aGlzLmFjdGlvbk1lbnVPcGVuJC5uZXh0KCF0aGlzLmFjdGlvbk1lbnVPcGVuJC5nZXRWYWx1ZSgpKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0T2xab29tRWxlbWVudCgpIHtcbiAgICB0aGlzLm9sWm9vbUVsZW1lbnQkLm5leHQoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLm9sLXpvb20nKSk7XG4gICAgaWYgKCF0aGlzLm9sWm9vbUVsZW1lbnQkLmdldFZhbHVlKCkpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5nZXRPbFpvb21FbGVtZW50KCksIDUwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgem9vbUluID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLm9sLXpvb20taW4nKTtcbiAgICAgIGlmICh6b29tSW4pIHtcbiAgICAgICAgem9vbUluLnNldEF0dHJpYnV0ZSgnZGF0YS10b29sdGlwJywgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ0Bwcnkud2lkZ2V0Lm1hcC56b29tSW4nKSk7XG4gICAgICAgIHpvb21Jbi5zZXRBdHRyaWJ1dGUoJ2RhdGEtdG9vbHRpcC1wb3NpdGlvbicsICdsZWZ0Jyk7XG4gICAgICAgIHpvb21Jbi5jbGFzc0xpc3QuYWRkKCdhLXRvb2x0aXAnLCAnLS1ub3BvcycpO1xuICAgICAgICB6b29tSW4ucmVtb3ZlQXR0cmlidXRlKCd0aXRsZScpO1xuICAgICAgfVxuICAgICAgY29uc3Qgem9vbU91dCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5vbC16b29tLW91dCcpO1xuICAgICAgaWYgKHpvb21PdXQpIHtcbiAgICAgICAgem9vbU91dC5zZXRBdHRyaWJ1dGUoJ2RhdGEtdG9vbHRpcCcsIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdAcHJ5LndpZGdldC5tYXAuem9vbU91dCcpKTtcbiAgICAgICAgem9vbU91dC5zZXRBdHRyaWJ1dGUoJ2RhdGEtdG9vbHRpcC1wb3NpdGlvbicsICdsZWZ0Jyk7XG4gICAgICAgIHpvb21PdXQuY2xhc3NMaXN0LmFkZCgnYS10b29sdGlwJywgJy0tbm9wb3MnKTtcbiAgICAgICAgem9vbU91dC5yZW1vdmVBdHRyaWJ1dGUoJ3RpdGxlJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlU2VsZWN0aW9uKGFjdGlvbjogJ2NsaWNrJyB8ICdsYXNzbycgfCAncmVjdGFuZ2xlJyB8ICd6b29tJyB8ICdtb3ZlJyB8ICdleHBvcnQnIHwgJ3VwbG9hZCcpIHtcbiAgICB0aGlzLmludGVyYWN0aW9uTWFuYWdlci5zZWxlY3Rpb25JbnRlcmFjdGlvbi5jaGFuZ2VTZWxlY3Rpb24oYWN0aW9uKTtcbiAgICB0aGlzLnRvZ2dsZU1lbnUoKTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJMYXllcnMobGF5ZXJzOiBCYXNlTGF5ZXJbXSkge1xuICAgIGxheWVycy5mb3JFYWNoKChsYXllcikgPT4ge1xuICAgICAgdGhpcy5tYXAucmVtb3ZlTGF5ZXIobGF5ZXIpO1xuICAgICAgaWYgKGxheWVyIGluc3RhbmNlb2YgVmVjdG9yTGF5ZXIgJiYgKGxheWVyIGFzIFZlY3RvckxheWVyPFZlY3RvclNvdXJjZT4pLmdldFNvdXJjZSgpKSB7XG4gICAgICAgIChsYXllciBhcyBWZWN0b3JMYXllcjxWZWN0b3JTb3VyY2U+KS5nZXRTb3VyY2UoKSEuY2xlYXIoKTtcbiAgICAgICAgbGF5ZXIuc2V0U291cmNlKHVuZGVmaW5lZCk7XG4gICAgICB9XG4gICAgICBpZiAobGF5ZXIgaW5zdGFuY2VvZiBUaWxlTGF5ZXIgJiYgKGxheWVyIGFzIFRpbGVMYXllcjxhbnk+KS5nZXRTb3VyY2UoKSkge1xuICAgICAgICAobGF5ZXIgYXMgVGlsZUxheWVyPGFueT4pLmdldFNvdXJjZSgpLmNsZWFyKCk7XG4gICAgICAgIGxheWVyLnNldFNvdXJjZSh1bmRlZmluZWQpO1xuICAgICAgfVxuICAgICAgbGF5ZXIuZGlzcG9zZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgYWRkTGF5ZXJHcm91cCgpIHtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFxuICAgICAgRGFzaGJvYXJkQWN0aW9ucy5hZGRMYXllckdyb3VwKHtcbiAgICAgICAgbmFtZTpcbiAgICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnQHByeS53aWRnZXQubWFwLmxheWVyU2V0dGluZ3MuZ3JvdXAnKSArXG4gICAgICAgICAgJyAnICtcbiAgICAgICAgICAodGhpcy5sYXllckdyb3Vwcy5sZW5ndGggKyAxKS50b1N0cmluZygpXG4gICAgICB9KVxuICAgICk7XG5cbiAgICBjb25zdCBncm91cCA9IHRoaXMubGF5ZXJHcm91cHNbdGhpcy5sYXllckdyb3Vwcy5sZW5ndGggLSAxXTtcbiAgICB0aGlzLmFkZExheWVyKGdyb3VwKTtcbiAgfVxuXG4gIHVwZGF0ZUxheWVyR3JvdXAobmFtZTogc3RyaW5nLCBuZXdOYW1lPzogc3RyaW5nLCBzaW5nbGVMYXllcj86IGJvb2xlYW4sIHZpc2libGVMYXllcnM/OiBzdHJpbmdbXSkge1xuICAgIGlmIChuZXdOYW1lID09PSB1bmRlZmluZWQgJiYgc2luZ2xlTGF5ZXIgIT09IHVuZGVmaW5lZCAmJiB2aXNpYmxlTGF5ZXJzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goXG4gICAgICAgIERhc2hib2FyZEFjdGlvbnMudXBkYXRlTGF5ZXJHcm91cCh7XG4gICAgICAgICAgbmFtZSxcbiAgICAgICAgICBuZXdOYW1lLFxuICAgICAgICAgIHNpbmdsZUxheWVyLFxuICAgICAgICAgIHZpc2libGVMYXllcnM6IHNpbmdsZUxheWVyID8gW3Zpc2libGVMYXllcnNbMF1dIDogdmlzaWJsZUxheWVyc1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKG5hbWUgIT09IG5ld05hbWUpIHtcbiAgICAgIGlmIChuYW1lID09PSBERUZBVUxUX0xBWUVSX0dST1VQKSB7XG4gICAgICAgIGNvbnN0IGxheWVyc1RvVHJhbnNmZXIgPVxuICAgICAgICAgIHRoaXMub3B0aW9uc0NvcHkubGF5ZXJzPy5maWx0ZXIoKGxheWVyKSA9PiBsYXllci5ncm91cCA9PT0gREVGQVVMVF9MQVlFUl9HUk9VUCkubWFwKChsKSA9PiBsLnRpdGxlKSA/PyBbXTtcbiAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChcbiAgICAgICAgICBEYXNoYm9hcmRBY3Rpb25zLmFkZExheWVyR3JvdXAoe1xuICAgICAgICAgICAgbmFtZTogbmV3TmFtZSxcbiAgICAgICAgICAgIHNpbmdsZUxheWVyLFxuICAgICAgICAgICAgdmlzaWJsZUxheWVyczogdmlzaWJsZUxheWVycyEuZmlsdGVyKChsKSA9PiBsYXllcnNUb1RyYW5zZmVyLmluY2x1ZGVzKGwpKVxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goXG4gICAgICAgICAgRGFzaGJvYXJkQWN0aW9ucy51cGRhdGVMYXllckdyb3VwKHtcbiAgICAgICAgICAgIG5hbWU6IERFRkFVTFRfTEFZRVJfR1JPVVAsXG4gICAgICAgICAgICBuZXdOYW1lOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBzaW5nbGVMYXllcjogdW5kZWZpbmVkLFxuICAgICAgICAgICAgdmlzaWJsZUxheWVyczogdmlzaWJsZUxheWVycyEuZmlsdGVyKChsKSA9PiAhbGF5ZXJzVG9UcmFuc2Zlci5pbmNsdWRlcyhsKSlcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChEYXNoYm9hcmRBY3Rpb25zLnVwZGF0ZUxheWVyR3JvdXAoeyBuYW1lLCBuZXdOYW1lLCBzaW5nbGVMYXllciwgdmlzaWJsZUxheWVycyB9KSk7XG4gICAgICB9XG4gICAgICAvLyB1cGRhdGUgZ3JvdXBzIG9uIGxheWVyc1xuICAgICAgaWYgKG5ld05hbWUgIT09IHVuZGVmaW5lZCAmJiB0aGlzLm9wdGlvbnNDb3B5LmxheWVycykge1xuICAgICAgICB0aGlzLm9wdGlvbnNDb3B5LmxheWVycyA9IHRoaXMub3B0aW9uc0NvcHkubGF5ZXJzLm1hcCgobGF5ZXIpID0+XG4gICAgICAgICAgbGF5ZXIuZ3JvdXAgPT09IG5hbWVcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIC4uLmxheWVyLFxuICAgICAgICAgICAgICAgIGdyb3VwOiBuZXdOYW1lXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogbGF5ZXJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB1cGRhdGVMYXllckdyb3VwVGl0bGUoJGV2ZW50OiBFdmVudCwgbmFtZTogc3RyaW5nKSB7XG4gICAgdGhpcy51cGRhdGVMYXllckdyb3VwKG5hbWUsICgkZXZlbnQuY3VycmVudFRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KT8udmFsdWUpO1xuICB9XG5cbiAgZGVsZXRlTGF5ZXJHcm91cChuYW1lOiBzdHJpbmcpIHtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKERhc2hib2FyZEFjdGlvbnMuY29uZmlybUxheWVyR3JvdXBEZWxldGlvbih7IG5hbWUgfSkpO1xuICAgIHRoaXMub3B0aW9uc0NvcHkubGF5ZXJzID0gdGhpcy5vcHRpb25zQ29weS5sYXllcnM/LmZpbHRlcigobGF5ZXIpID0+IGxheWVyLmdyb3VwICE9PSBuYW1lKTtcbiAgfVxuXG4gIGRyb3AoZXZlbnQ6IENka0RyYWdEcm9wPE1hcFdpZGdldExheWVyT3B0aW9uc1tdPiwgZ3JvdXA6IExheWVyR3JvdXApOiB2b2lkIHtcbiAgICBjb25zdCBtb3ZlZExheWVyID0gZXZlbnQuaXRlbS5kYXRhIGFzIE1hcFdpZGdldExheWVyT3B0aW9ucztcbiAgICBpZiAoZXZlbnQucHJldmlvdXNDb250YWluZXIuaWQgIT09IGV2ZW50LmNvbnRhaW5lci5pZCkge1xuICAgICAgdGhpcy5tb3ZlTGF5ZXJCZXR3ZWVuR3JvdXBzKFxuICAgICAgICBtb3ZlZExheWVyLFxuICAgICAgICBldmVudC5jb250YWluZXIuZWxlbWVudC5uYXRpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1sYXllci1ncm91cCcpID8/IERFRkFVTFRfTEFZRVJfR1JPVVBcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMubW92ZUxheWVySW5PcHRpb25zKGV2ZW50LmN1cnJlbnRJbmRleCwgZXZlbnQuaXRlbS5kYXRhIGFzIE1hcFdpZGdldExheWVyT3B0aW9ucywgZ3JvdXApO1xuICB9XG5cbiAgbW92ZUxheWVyQmV0d2Vlbkdyb3Vwcyhtb3ZlZExheWVyOiBNYXBXaWRnZXRMYXllck9wdGlvbnMsIG5ld0dyb3VwOiBzdHJpbmcpIHtcbiAgICAvLyByZW1vdmUgaXQgZnJvbSBvbGQgZ3JvdXBcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFxuICAgICAgRGFzaGJvYXJkQWN0aW9ucy51cGRhdGVMYXllckdyb3VwKHtcbiAgICAgICAgbmFtZTogbW92ZWRMYXllci5ncm91cCEsXG4gICAgICAgIHZpc2libGVMYXllcnM6IHRoaXMubGF5ZXJHcm91cHNcbiAgICAgICAgICA/LmZpbmQoKGdyb3VwKSA9PiBncm91cC5uYW1lID09PSBtb3ZlZExheWVyLmdyb3VwISlcbiAgICAgICAgICA/LnZpc2libGVMYXllcnMuZmlsdGVyKChsYXllcikgPT4gbGF5ZXIgIT09IG1vdmVkTGF5ZXIudGl0bGUpXG4gICAgICB9KVxuICAgICk7XG5cbiAgICAvLyBhZGQgaXQgdG8gbmV3IGdyb3VwXG4gICAgbW92ZWRMYXllci5ncm91cCA9IG5ld0dyb3VwO1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goXG4gICAgICBEYXNoYm9hcmRBY3Rpb25zLnVwZGF0ZUxheWVyR3JvdXAoe1xuICAgICAgICBuYW1lOiBuZXdHcm91cCA/PyBERUZBVUxUX0xBWUVSX0dST1VQLFxuICAgICAgICB2aXNpYmxlTGF5ZXJzOiBtb3ZlZExheWVyLnRpdGxlIVxuICAgICAgfSlcbiAgICApO1xuICAgIHRoaXMucmVtb3ZlRW1wdHlMYXllckdyb3VwcygpO1xuICB9XG5cbiAgbW92ZUxheWVySW5PcHRpb25zKHRhcmdldElkeEluR3JvdXA6IG51bWJlciwgbW92ZWRMYXllcjogTWFwV2lkZ2V0TGF5ZXJPcHRpb25zLCBncm91cDogTGF5ZXJHcm91cCkge1xuICAgIGlmICh0aGlzLm9wdGlvbnNDb3B5LmxheWVycykge1xuICAgICAgY29uc3QgZ3JvdXBMYXllcnMgPSB0aGlzLm9wdGlvbnNDb3B5LmxheWVycy5maWx0ZXIoKGxheWVyKSA9PiBsYXllci5ncm91cCA9PT0gZ3JvdXAubmFtZSk7XG4gICAgICAvLyBpbmRleGVzIGluIG9wdGlvbnNDb3B5XG4gICAgICBjb25zdCBmcm9tSW5kZXggPSB0aGlzLm9wdGlvbnNDb3B5LmxheWVycy5maW5kSW5kZXgoKGxheWVyKSA9PiBsYXllci50aXRsZSA9PT0gbW92ZWRMYXllci50aXRsZSk7XG4gICAgICBjb25zdCB0b0luZGV4ID0gdGhpcy5vcHRpb25zQ29weS5sYXllcnMuZmluZEluZGV4KChsYXllcikgPT4gbGF5ZXIudGl0bGUgPT09IGdyb3VwTGF5ZXJzW3RhcmdldElkeEluR3JvdXBdLnRpdGxlKTtcblxuICAgICAgbGV0IG5ld09yZGVyID0gdG9JbmRleDtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkubGF5ZXJzLnNwbGljZShmcm9tSW5kZXgsIDEpO1xuICAgICAgdGhpcy5vcHRpb25zQ29weS5sYXllcnMuc3BsaWNlKHRvSW5kZXgsIDAsIHsgLi4ubW92ZWRMYXllciwgb3JkZXI6IG5ld09yZGVyIH0pO1xuICAgICAgdGhpcy51cGRhdGVMYXllck9yZGVyKCk7XG4gICAgfVxuICB9XG5cbiAgdG9nZ2xlRXhwYW5kQWxsKGdyb3VwOiBMYXllckdyb3VwKSB7XG4gICAgdGhpcy5sYXllclNldHRpbmdzRXhwYW5kZWRTdGF0ZVtncm91cC5uYW1lXSA9ICF0aGlzLmxheWVyU2V0dGluZ3NFeHBhbmRlZFN0YXRlW2dyb3VwLm5hbWVdO1xuICAgIGNvbnN0IGxheWVyc1RvRXhwYW5kID1cbiAgICAgIHRoaXMub3B0aW9uc0NvcHkubGF5ZXJzPy5maWx0ZXIoKGxheWVyKSA9PiBsYXllci5ncm91cCA9PT0gZ3JvdXAubmFtZSkubWFwKChsYXllcikgPT4gbGF5ZXIudGl0bGUpID8/IFtdO1xuXG4gICAgT2JqZWN0LmtleXModGhpcy5sYXllclNldHRpbmdzRXhwYW5kZWRTdGF0ZSkuZm9yRWFjaCgobGF5ZXIpID0+IHtcbiAgICAgIGlmIChsYXllcnNUb0V4cGFuZC5pbmNsdWRlcyhsYXllcikpXG4gICAgICAgIHRoaXMubGF5ZXJTZXR0aW5nc0V4cGFuZGVkU3RhdGVbbGF5ZXJdID0gdGhpcy5sYXllclNldHRpbmdzRXhwYW5kZWRTdGF0ZVtncm91cC5uYW1lXTtcbiAgICB9KTtcbiAgfVxuXG4gIHRvZ2dsZUxheWVyRXhwYW5kKGxheWVyOiBNYXBXaWRnZXRMYXllck9wdGlvbnMsIGdyb3VwOiBMYXllckdyb3VwKSB7XG4gICAgdGhpcy5sYXllclNldHRpbmdzRXhwYW5kZWRTdGF0ZVtsYXllci50aXRsZSFdID0gIXRoaXMubGF5ZXJTZXR0aW5nc0V4cGFuZGVkU3RhdGVbbGF5ZXIudGl0bGUhXTtcbiAgICBpZiAodGhpcy5sYXllclNldHRpbmdzRXhwYW5kZWRTdGF0ZVtsYXllci50aXRsZSFdKSB0aGlzLmxheWVyU2V0dGluZ3NFeHBhbmRlZFN0YXRlW2dyb3VwLm5hbWVdID0gdHJ1ZTtcbiAgICBpZiAoZ3JvdXAudmlzaWJsZUxheWVycy5ldmVyeSgobGF5ZXJUaXRsZSkgPT4gIXRoaXMubGF5ZXJTZXR0aW5nc0V4cGFuZGVkU3RhdGVbbGF5ZXJUaXRsZV0pKSB7XG4gICAgICB0aGlzLmxheWVyU2V0dGluZ3NFeHBhbmRlZFN0YXRlW2dyb3VwLm5hbWVdID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlTGF5ZXJPcmRlcigpIHtcbiAgICBsZXQgb3JkZXIgPSAxO1xuICAgIHRoaXMubGF5ZXJHcm91cHM/LmZvckVhY2goKGdyb3VwKSA9PiB7XG4gICAgICBjb25zdCBncm91cExheWVycyA9IHRoaXMub3B0aW9uc0NvcHkubGF5ZXJzPy5maWx0ZXIoKGxheWVyKSA9PiBsYXllci5ncm91cCA9PT0gZ3JvdXAubmFtZSk7XG4gICAgICBpZiAoZ3JvdXBMYXllcnMpIHtcbiAgICAgICAgZ3JvdXBMYXllcnMuZm9yRWFjaCgobGF5ZXIpID0+IChsYXllci5vcmRlciA9IG9yZGVyKyspKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGlzR3JvdXBVc2VkQnlXaWRnZXRMYXllcnMoZ3JvdXA6IExheWVyR3JvdXApIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zQ29weS5sYXllcnM/LnNvbWUoKGxheWVyKSA9PiBsYXllci5ncm91cCA9PT0gZ3JvdXAubmFtZSk7XG4gIH1cblxuICByZW1vdmVFbXB0eUxheWVyR3JvdXBzKCkge1xuICAgIHRoaXMubGF5ZXJHcm91cHMuZm9yRWFjaCgoZ3JvdXApID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgIXRoaXMub3B0aW9uc0NvcHkubGF5ZXJzPy5tYXAoKGxheWVyKSA9PiBsYXllci5ncm91cCkuaW5jbHVkZXMoZ3JvdXAubmFtZSkgJiZcbiAgICAgICAgZ3JvdXAubmFtZSAhPT0gREVGQVVMVF9MQVlFUl9HUk9VUFxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goXG4gICAgICAgICAgRGFzaGJvYXJkQWN0aW9ucy5kZWxldGVMYXllckdyb3VwKHtcbiAgICAgICAgICAgIG5hbWU6IGdyb3VwLm5hbWVcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IERFRkFVTFRfTEFZRVJfR1JPVVAgPSBERUZBVUxUX0xBWUVSX0dST1VQO1xufVxuIiwiPHByeS13aWRnZXQtbWFwLWNzcz48L3ByeS13aWRnZXQtbWFwLWNzcz5cbjxkaXYgY2xhc3M9XCJvLXdpZGdldCBvLXdpZGdldC0tbWFwXCI+XG4gIDxwcnktd2lkZ2V0LWhlYWRlclxuICAgIFtkYXRhc291cmNlSWRzXT1cIihkYXRhc291cmNlSWRzJCB8IGFzeW5jKSA/PyBbXVwiXG4gICAgKm5nSWY9XCJkaXNwbGF5SGVhZGVyJCB8IGFzeW5jXCJcbiAgICBbd2lkZ2V0SW5kZXhdPVwid2lkZ2V0SW5kZXhcIlxuICAgIFttYW5pZmVzdF09XCJtYW5pZmVzdFwiXG4gICAgKG1hbmlmZXN0TW9kaWZpZWQpPVwibWFuaWZlc3RNb2RpZmllZC5lbWl0KCRldmVudClcIlxuICAgIFtoZWFkZXJPcHRpb25zXT1cIihkaXNwbGF5SGVhZGVyJCB8IGFzeW5jKSA/PyB7fVwiXG4gICAgI2hlYWRlclxuICA+XG4gICAgPHByeS1zZXR0aW5nc1xuICAgICAgKHNhdmVUcmlnZ2VyZWQpPVwiZW1pdE1hbmlmZXN0KClcIlxuICAgICAgKGNoYW5nZVRpdGxlKT1cImNoYW5nZVdpZGdldFRpdGxlKCRldmVudClcIlxuICAgICAgW2hlYWRlclByZXNlbnRdPVwiZGlzcGxheUhlYWRlciQgfCBhc3luY1wiXG4gICAgICBbd2lkZ2V0SW5kZXhdPVwid2lkZ2V0SW5kZXhcIlxuICAgICAgW2hlYWRlcl09XCJoZWFkZXJcIlxuICAgICAgW29wZW4kXT1cIm9wZW4kXCJcbiAgICAgIGNsYXNzPVwiby1zZXR0aW5nc1wiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwibWFwX3N0eWxlXCI+e3sgJ0Bwcnkud2lkZ2V0Lm1hcC5zdHlsZScgfCBpMThuIH19IDo8L2xhYmVsPlxuICAgICAgICA8cHJ5LXNlbGVjdFxuICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZVN0eWxlKCRldmVudClcIlxuICAgICAgICAgIFtpdGVtc109XCJzdHlsZXMkIHwgYXN5bmNcIlxuICAgICAgICAgIFtuZ01vZGVsXT1cIm9wdGlvbnNDb3B5LnN0eWxlXCJcbiAgICAgICAgICBiaW5kTGFiZWw9XCJsYWJlbFwiXG4gICAgICAgICAgYmluZFZhbHVlPVwiaWRlbnRpZmllclwiXG4gICAgICAgICAgaWQ9XCJtYXBfc3R5bGVcIlxuICAgICAgICA+PC9wcnktc2VsZWN0PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIiAqbmdJZj1cIm9wdGlvbnNDb3B5LnN0eWxlID09PSBTVFlMRV9GUk9NX1VSTFwiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwic3R5bGVfVVJMXCI+e3sgJ0Bwcnkud2lkZ2V0Lm1hcC5zdHlsZVVybCcgfCBpMThuIH19PC9sYWJlbD5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgaWQ9XCJzdHlsZV9VUkxcIlxuICAgICAgICAgIGNsYXNzPVwiYS1mb3JtLWZpZWxkXCJcbiAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgKGlucHV0KT1cImNoYW5nZVN0eWxlVVJMKCRldmVudClcIlxuICAgICAgICAgIFt2YWx1ZV09XCJvcHRpb25zQ29weS5zdHlsZVVSTCA/PyAnJ1wiXG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPHByeS1jaGVja2JveCAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VBdXRvTGF5ZXIoJGV2ZW50KVwiIFtuZ01vZGVsXT1cIm9wdGlvbnNDb3B5LmF1dG9tYXRpY0xheWVycyA/PyBmYWxzZVwiPlxuICAgICAgICB7eyAnQHByeS53aWRnZXQubWFwLmF1dG9MYXllcicgfCBpMThuIH19XG4gICAgICA8L3ByeS1jaGVja2JveD5cblxuICAgICAgPHByeS1jaGVja2JveCAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VBdHRyaWJ1dGlvbnMoJGV2ZW50KVwiIFtuZ01vZGVsXT1cIm9wdGlvbnNDb3B5LmF0dHJpYnV0aW9ucyA/PyBmYWxzZVwiPlxuICAgICAgICB7eyAnQHByeS53aWRnZXQubWFwLmF0dHJpYnV0aW9ucycgfCBpMThuIH19XG4gICAgICA8L3ByeS1jaGVja2JveD5cblxuICAgICAgPHByeS1jaGVja2JveCAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VTbGlkZU9wdGlvbigkZXZlbnQpXCIgW25nTW9kZWxdPVwiaGFzU2xpZGVMYXllciQgfCBhc3luY1wiPlxuICAgICAgICB7eyAnQHByeS53aWRnZXQubWFwLnNsaWRlLmdsb2JhbCcgfCBpMThuIH19XG4gICAgICA8L3ByeS1jaGVja2JveD5cblxuICAgICAgPGRpdiBjbGFzcz1cIm8tbGF5ZXItc2V0dGluZ3NcIiBjZGtEcm9wTGlzdEdyb3VwIGNka0RyYWdCb3VuZGFyeT5cbiAgICAgICAgPGg0IGNsYXNzPVwiYS1sYWJlbFwiPnt7ICdAcHJ5LndpZGdldC5tYXAubGF5ZXJTZXR0aW5ncy50aXRsZScgfCBpMThuIH19PC9oND5cbiAgICAgICAgPGRpdiBjbGFzcz1cInUtZGlzcGxheS1mbGV4IC1qdXN0aWZ5LWNlbnRlclwiPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJhLWJ0biBhLWJ0bi0tcHJpbWFyeVwiIChjbGljayk9XCJhZGRMYXllckdyb3VwKClcIiB0eXBlPVwiYnV0dG9uXCI+XG4gICAgICAgICAgICB7eyAnQHByeS53aWRnZXQubWFwLmxheWVyU2V0dGluZ3MuYWRkTGF5ZXJHcm91cCcgfCBpMThuIH19XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBncm91cCBvZiBsYXllckdyb3VwcyQgfCBhc3luYzsgbGV0IGdyb3VwSWR4ID0gaW5kZXhcIj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNHcm91cFVzZWRCeVdpZGdldExheWVycyhncm91cClcIiBjbGFzcz1cIm8tbGF5ZXItc2V0dGluZ3NfX2dyb3VwXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkIG8tbGF5ZXItc2V0dGluZ3NfX2dyb3VwLXRpdGxlXCI+XG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJtYXBfbGF5ZXJHcm91cFRpdGxlLXt7IGdyb3VwSWR4IH19XCI+XG4gICAgICAgICAgICAgICAge3sgJ0Bwcnkud2lkZ2V0Lm1hcC5sYXllclNldHRpbmdzLmxheWVyR3JvdXBOYW1lJyB8IGkxOG4gfX08c3BhbiBjbGFzcz1cIi1vYmxpZ2F0b3J5LXJlZFwiPio8L3NwYW5cbiAgICAgICAgICAgICAgICA+e3sgJ0Bwcnkud2lkZ2V0Lm1hcC5sYXllclNldHRpbmdzLm9wdGlvbmFsQ29sb24nIHwgaTE4biB9fVxuICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidS1kaXNwbGF5LWZsZXhcIj5cbiAgICAgICAgICAgICAgICA8cHJ5LWVkaXQtaW5wdXRcbiAgICAgICAgICAgICAgICAgIGVkaXRCdXR0b25Ub29sdGlwPVwiQHByeS53aWRnZXQubWFwLmxheWVyU2V0dGluZ3MuZWRpdEdyb3VwTmFtZVwiXG4gICAgICAgICAgICAgICAgICAodmFsaWRhdGVkKT1cInVwZGF0ZUxheWVyR3JvdXAoZ3JvdXAubmFtZSwgJGV2ZW50LCBncm91cC5zaW5nbGVMYXllciwgZ3JvdXAudmlzaWJsZUxheWVycylcIlxuICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiZ3JvdXAubmFtZSA9PT0gREVGQVVMVF9MQVlFUl9HUk9VUCA/ICgnQHByeS53aWRnZXQubWFwLm5vR3JvdXAnIHwgaTE4bikgOiBncm91cC5uYW1lXCJcbiAgICAgICAgICAgICAgICA+PC9wcnktZWRpdC1pbnB1dD5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cImdyb3VwLm5hbWUgIT09IERFRkFVTFRfTEFZRVJfR1JPVVBcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhLWJ0bi0taWNvbi1vbmx5IGEtdG9vbHRpcCBvLWxheWVyLXNldHRpbmdzX19kZWxldGUtZ3JvdXBcIlxuICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS10b29sdGlwXT1cIidAcHJ5LndpZGdldC5tYXAubGF5ZXJTZXR0aW5ncy5kZWxldGVHcm91cCcgfCBpMThuXCJcbiAgICAgICAgICAgICAgICAgIGRhdGEtdG9vbHRpcC1wb3NpdGlvbj1cImxlZnRcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZUxheWVyR3JvdXAoZ3JvdXAubmFtZSlcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxwcnktaWNvbiBbaGVpZ2h0XT1cIjE2XCIgW3dpZHRoXT1cIjE2XCIgaWNvblN2Zz1cImJpbl9ub3JtYWxcIj48L3ByeS1pY29uPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1yYWRpby1ncm91cFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLXJhZGlvLWdyb3VwX19pdGVtXCI+XG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgICAgICAgaWQ9XCJtdWx0aXNlbGVjdGlvbi17eyBncm91cElkeCB9fVwiXG4gICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJncm91cC5zaW5nbGVMYXllclwiXG4gICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJ1cGRhdGVMYXllckdyb3VwKGdyb3VwLm5hbWUsIHVuZGVmaW5lZCwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgW25hbWVdPVwiZ3JvdXAubmFtZVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwibXVsdGlzZWxlY3Rpb24te3sgZ3JvdXBJZHggfX1cIj57e1xuICAgICAgICAgICAgICAgICAgJ0Bwcnkud2lkZ2V0Lm1hcC5sYXllclNldHRpbmdzLm11bHRpcGxlTGF5ZXInIHwgaTE4blxuICAgICAgICAgICAgICAgIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tcmFkaW8tZ3JvdXBfX2l0ZW1cIj5cbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICAgICAgICBpZD1cIm1vbm9zZWxlY3Rpb24te3sgZ3JvdXBJZHggfX1cIlxuICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiZ3JvdXAuc2luZ2xlTGF5ZXJcIlxuICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidXBkYXRlTGF5ZXJHcm91cChncm91cC5uYW1lLCB1bmRlZmluZWQsICRldmVudCwgZ3JvdXAudmlzaWJsZUxheWVycylcIlxuICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgW25hbWVdPVwiZ3JvdXAubmFtZVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwibW9ub3NlbGVjdGlvbi17eyBncm91cElkeCB9fVwiPnt7XG4gICAgICAgICAgICAgICAgICAnQHByeS53aWRnZXQubWFwLmxheWVyU2V0dGluZ3Muc2luZ2xlTGF5ZXInIHwgaTE4blxuICAgICAgICAgICAgICAgIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWJ0bi1ncm91cFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidS1kaXNwbGF5LWZsZXggLWFsaWduLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImFkZExheWVyKGdyb3VwKVwiIGNsYXNzPVwiYS1idG4gLWxpbmstbGlrZVwiIHR5cGU9XCJidXR0b25cIj5cbiAgICAgICAgICAgICAgICAgICsge3sgJ0Bwcnkud2lkZ2V0Lm1hcC5hZGRMYXllcicgfCBpMThuIH19XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJ0b2dnbGVFeHBhbmRBbGwoZ3JvdXApXCIgY2xhc3M9XCJhLWJ0biAtbGluay1saWtlXCIgdHlwZT1cImJ1dHRvblwiPlxuICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICBsYXllclNldHRpbmdzRXhwYW5kZWRTdGF0ZVtncm91cC5uYW1lXVxuICAgICAgICAgICAgICAgICAgICA/ICgnQHByeS53aWRnZXQubWFwLmxheWVyU2V0dGluZ3MuZm9sZEFsbCcgfCBpMThuKVxuICAgICAgICAgICAgICAgICAgICA6ICgnQHByeS53aWRnZXQubWFwLmxheWVyU2V0dGluZ3MudW5mb2xkQWxsJyB8IGkxOG4pXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2RrRHJvcExpc3RcbiAgICAgICAgICAgICAgY2xhc3M9XCJvLWxheWVyLXNldHRpbmdzX19sYXllcnNcIlxuICAgICAgICAgICAgICAoY2RrRHJvcExpc3REcm9wcGVkKT1cImRyb3AoJGV2ZW50LCBncm91cClcIlxuICAgICAgICAgICAgICBbYXR0ci5kYXRhLWxheWVyLWdyb3VwXT1cImdyb3VwLm5hbWVcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBsYXllciBvZiBvcHRpb25zQ29weT8ubGF5ZXJzOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJsYXllci5ncm91cCA9PT0gZ3JvdXAubmFtZVwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cIm8tbGF5ZXItc2V0dGluZ3NfX2xheWVyLXdyYXBwZXJcIlxuICAgICAgICAgICAgICAgICAgY2RrRHJhZ1xuICAgICAgICAgICAgICAgICAgW2Nka0RyYWdEYXRhXT1cImxheWVyXCJcbiAgICAgICAgICAgICAgICAgIFtjZGtEcmFnRGlzYWJsZWRdPVwibGF5ZXJTZXR0aW5nc0V4cGFuZGVkU3RhdGVbbGF5ZXIudGl0bGUhXVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyYWctcGxhY2Vob2xkZXJcIiAqY2RrRHJhZ1BsYWNlaG9sZGVyPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm8tbGF5ZXItc2V0dGluZ3NfX2xheWVyLWhlYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidS1kaXNwbGF5LWZsZXggLWFsaWduLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxwcnktaWNvblxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLi1kaXNhYmxlZF09XCJsYXllclNldHRpbmdzRXhwYW5kZWRTdGF0ZVtsYXllci50aXRsZSFdXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHJhZy1oYW5kbGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2hlaWdodF09XCIxNlwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbd2lkdGhdPVwiMTZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgaWNvblN2Zz1cImRyYWdfaW5kaWNhdG9yXCJcbiAgICAgICAgICAgICAgICAgICAgICA+PC9wcnktaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImEtYnRuLS1pY29uLW9ubHkgdW5mb2xkLWxheWVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVMYXllckV4cGFuZChsYXllciwgZ3JvdXApXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwcnktaWNvblxuICAgICAgICAgICAgICAgICAgICAgICAgICBbaGVpZ2h0XT1cIjVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbd2lkdGhdPVwiOVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtpY29uU3ZnXT1cImxheWVyU2V0dGluZ3NFeHBhbmRlZFN0YXRlW2xheWVyLnRpdGxlIV0gPyAnY2hldnJvbl90b3AnIDogJ2NoZXZyb25fYm90dG9tJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9wcnktaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJhLWg1XCI+e3sgbGF5ZXIudGl0bGUgPz8gKCdAcHJ5LndpZGdldC5tYXAubGF5ZXInIHwgaTE4bjogeyBpbmRleDogaSArIDEgfSkgfX08L2g1PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiby1sYXllci1zZXR0aW5nc19fZGVsZXRlLWxheWVyIGEtYnRuLS1pY29uLW9ubHkgYS10b29sdGlwXCJcbiAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLXRvb2x0aXBdPVwiJ0Bwcnkud2lkZ2V0Lm1hcC5sYXllclNldHRpbmdzLmRlbGV0ZUxheWVyJyB8IGkxOG5cIlxuICAgICAgICAgICAgICAgICAgICAgIGRhdGEtdG9vbHRpcC1wb3NpdGlvbj1cImxlZnRcIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJkZWxldGVMYXllcihpLCBsYXllciwgZ3JvdXApXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxwcnktaWNvbiBbaGVpZ2h0XT1cIjE2XCIgW3dpZHRoXT1cIjE2XCIgaWNvblN2Zz1cImJpbl9ub3JtYWxcIj48L3ByeS1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImxheWVyU2V0dGluZ3NFeHBhbmRlZFN0YXRlW2xheWVyLnRpdGxlIV1cIiBjbGFzcz1cIm8tbGF5ZXItc2V0dGluZ3NfX2xheWVyLWNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm8tc2V0dGluZ3NfX3BvcHVwX19jb250ZW50X19maWVsZHNfX2NvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8cHJ5LXJhbmdlXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCIobGF5ZXI/Lm9wYWNpdHkgPz8gMTAwKSArICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZU9wYWNpdHkobGF5ZXIsICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxUcmFuc2xhdGU9XCJAcHJ5LndpZGdldC5tYXAub3BhY2l0eVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW49XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1heD1cIjEwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgPjwvcHJ5LXJhbmdlPlxuXG4gICAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxlZ2VuZCBjbGFzcz1cInUtdmlzdWFsbHktaGlkZGVuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdAcHJ5LndpZGdldC5tYXAubGF5ZXJPcHRpb25zJyB8IGkxOG46IHsgaW5kZXg6IGkgKyAxIH0gfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGVnZW5kPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJ5LWVkaXQtaW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbD1cIkBwcnkud2lkZ2V0Lm1hcC5sYXllclRpdGxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0QnV0dG9uVG9vbHRpcD1cIkBwcnkud2lkZ2V0Lm1hcC5sYXllclNldHRpbmdzLmVkaXRMYXllclRpdGxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmFsaWRhdGVkKT1cImNoYW5nZVRpdGxlKCRldmVudCwgbGF5ZXIsIGdyb3VwKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwibGF5ZXIudGl0bGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9wcnktZWRpdC1pbnB1dD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiICpuZ0lmPVwiIVsnZ2Vvc2VydmVyJywgJ2F1dG8nXS5pbmNsdWRlcyhsYXllci50eXBlKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwibWFwX2xheWVyVHlwZVwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0Bwcnkud2lkZ2V0Lm1hcC5sYXllclR5cGUudGl0bGUnIHwgaTE4blxuICAgICAgICAgICAgICAgICAgICAgICAgICB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxwcnktc2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlTGF5ZXJUeXBlKCRldmVudCwgaSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpdGVtc109XCJsYXllclR5cGVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJsYXllci50eXBlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpMThuUHJlZml4PVwiQHByeS53aWRnZXQubWFwLmxheWVyVHlwZS5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwibWFwX2xheWVyVHlwZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID48L3ByeS1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiICpuZ0lmPVwiWydnZW9zZXJ2ZXInLCAnd21zJ10uaW5jbHVkZXMobGF5ZXIudHlwZSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdldEFzV21zVHlwZShsYXllcikgYXMgd21zbGF5ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwibWFwX2xheWVyU3R5bGVcIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0Bwcnkud2lkZ2V0Lm1hcC5sYXllclN0eWxlJyB8IGkxOG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByeS1zZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZUxheWVyU3R5bGUoJGV2ZW50LCBsYXllcilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2l0ZW1zXT1cImxheWVyU3R5bGVPcHRpb25zKGxheWVyKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJnZXRTdHlsZShsYXllcilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmluZExhYmVsPVwibGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmluZFZhbHVlPVwiaWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJtYXBfbGF5ZXJTdHlsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvcHJ5LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJ5LWNoZWNrYm94IChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZUZpdCgkZXZlbnQsIGxheWVyKVwiIFtuZ01vZGVsXT1cImxheWVyLmZpdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdAcHJ5LndpZGdldC5tYXAuZml0JyB8IGkxOG4gfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcnktY2hlY2tib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyLnR5cGUgIT09ICdyZWxhdGlvbicgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllci50eXBlICE9PSAnd21zJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyLnR5cGUgIT09ICd3bXRzJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyLnR5cGUgIT09ICdnZW9zZXJ2ZXInICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIudHlwZSAhPT0gJ2ZlYXR1cmVsYXllcicgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllci50eXBlICE9PSAndmVjdG9ydGlsZScgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllci50eXBlICE9PSAncmFzdGVydGlsZScgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllci50eXBlICE9PSAnYXV0bydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwibWFwX2NsYXNzZXNcIj57eyAnQHByeS53aWRnZXQubWFwLmNsYXNzZXMnIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxwcnktc2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlQ2xhc3NlcygkZXZlbnQsIGxheWVyKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2l0ZW1zXT1cInVzZWRDbGFzc2VzJCB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbXVsdGlwbGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwibGF5ZXIuY2xhc3Nlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmluZExhYmVsPVwibmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmluZFZhbHVlPVwiaWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwibWFwX2NsYXNzZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9wcnktc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0XG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyLnR5cGUgIT09ICdyZWxhdGlvbicgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyLnR5cGUgIT09ICd3bXMnICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBsYXllci50eXBlICE9PSAnd210cycgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyLnR5cGUgIT09ICdnZW9zZXJ2ZXInICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBsYXllci50eXBlICE9PSAnZmVhdHVyZWxheWVyJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIudHlwZSAhPT0gJ3ZlY3RvcnRpbGUnICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBsYXllci50eXBlICE9PSAncmFzdGVydGlsZSdcbiAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPGxlZ2VuZCBjbGFzcz1cInUtdmlzdWFsbHktaGlkZGVuXCI+e3sgJ0Bwcnkud2lkZ2V0Lm1hcC5sb2NhdGlvbkF0dHInIHwgaTE4biB9fTwvbGVnZW5kPlxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBnZW9tZXRyeUZpZWxkc0ZvcjogeyByZXN1bHRTZXQ6IHJlc3VsdFNldCQsIGNsYXNzZXM6IGxheWVyLmNsYXNzZXMsIHR5cGU6IGxheWVyLnR5cGUgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYXN5bmMgYXMgZmllbGRzXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaGVhdG1hcCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYnViYmxlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtYXJrZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BvaW50JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdsaW5lJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwb2x5Z29uJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtdWx0aS1saW5lJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtdWx0aS1wb2x5Z29uJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0uaW5kZXhPZihsYXllci50eXBlKSA+PSAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwibWFwX2xvY2F0aW9uQXR0cmlidXRlX2JvdGhcIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0Bwcnkud2lkZ2V0Lm1hcC5sb2NhdGlvbkF0dHJpYnV0ZS5ib3RoJyB8IGkxOG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByeS1zZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZUxvY2F0aW9uQXR0cmlidXRlcygkZXZlbnQsIGxheWVyKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXRlbXNdPVwiZmllbGRzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImxheWVyLmF0dHJpYnV0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5kTGFiZWw9XCJuYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpbmRWYWx1ZT1cIm5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJtYXBfbG9jYXRpb25BdHRyaWJ1dGVfYm90aFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvcHJ5LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIlsnaGVhdG1hcCcsICdidWJibGUnXS5pbmRleE9mKGxheWVyLnR5cGUpID49IDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJtYXBfaW50ZW5zaXR5QXR0cmlidXRlXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdAcHJ5LndpZGdldC5tYXAuaW50ZW5zaXR5QXR0cmlidXRlJyB8IGkxOG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByeS1zZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZUludGVuc2l0eUF0dHJpYnV0ZXMoJGV2ZW50LCBsYXllcilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2l0ZW1zXT1cImZpZWxkc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJsYXllckhhc0ludGVuc2l0eShsYXllcikuaW50ZW5zaXR5QXR0cmlidXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpbmRMYWJlbD1cIm5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmluZFZhbHVlPVwibmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cIm1hcF9pbnRlbnNpdHlBdHRyaWJ1dGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3ByeS1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+XG5cbiAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0XG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyLnR5cGUgPT09ICd3bXMnIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBsYXllci50eXBlID09PSAnZ2Vvc2VydmVyJyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIudHlwZSA9PT0gJ3dtdHMnIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBsYXllci50eXBlID09PSAnZmVhdHVyZWxheWVyJyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIudHlwZSA9PT0gJ3ZlY3RvcnRpbGUnIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBsYXllci50eXBlID09PSAncmFzdGVydGlsZSdcbiAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxheWVyLnR5cGUgIT09ICdnZW9zZXJ2ZXInXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJtYXBfd21zX3VybFwiPnt7ICdAcHJ5LndpZGdldC5tYXAud21zLnVybCcgfCBpMThuIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJtYXBfd21zX3VybFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhLWZvcm0tZmllbGRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5wdXQpPVwiY2hhbmdlVXJsKCRldmVudCwgbGF5ZXIpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwibGF5ZXIudXJsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiICpuZ0lmPVwibGF5ZXIudHlwZSA9PT0gJ3dtcycgfHwgbGF5ZXIudHlwZSA9PT0gJ3dtdHMnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwibWFwX3dtc19wYXJhbUxheWVyXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ0Bwcnkud2lkZ2V0Lm1hcC53bXMucGFyYW1MYXllcicgfCBpMThuXG4gICAgICAgICAgICAgICAgICAgICAgICB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJtYXBfd21zX3BhcmFtTGF5ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImEtZm9ybS1maWVsZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cImNoYW5nZVBhcmFtTGF5ZXIoJGV2ZW50LCBsYXllcilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwibGF5ZXIucGFyYW1MYXllclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiICpuZ0lmPVwibGF5ZXIudHlwZSA9PT0gJ3dtdHMnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwibWFwX3dtc19tYXRyaXhTZXRcIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAnQHByeS53aWRnZXQubWFwLndtcy5tYXRyaXhTZXQnIHwgaTE4blxuICAgICAgICAgICAgICAgICAgICAgICAgfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwibWFwX3dtc19tYXRyaXhTZXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImEtZm9ybS1maWVsZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cImNoYW5nZU1hdHJpeFNldCgkZXZlbnQsIGxheWVyKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJsYXllci5tYXRyaXhTZXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIiAqbmdJZj1cImxheWVyLnR5cGUgPT09ICd3bXRzJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cIm1hcF93bXNfc3R5bGVcIj57eyAnQHByeS53aWRnZXQubWFwLndtcy5zdHlsZScgfCBpMThuIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cIm1hcF93bXNfc3R5bGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImEtZm9ybS1maWVsZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cImNoYW5nZVBhcmFtU3R5bGUoJGV2ZW50LCBsYXllcilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwibGF5ZXIuc3R5bGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIiAqbmdJZj1cImxheWVyLnR5cGUgPT09ICd3bXMnIHx8IGxheWVyLnR5cGUgPT09ICdnZW9zZXJ2ZXInXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGVnZW5kIGNsYXNzPVwidS12aXN1YWxseS1oaWRkZW5cIj57eyAnQHByeS53aWRnZXQubWFwLnRpbGUnIHwgaTE4biB9fTwvbGVnZW5kPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHByeS1jaGVja2JveFxuICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VQYXJhbVRpbGVkKCRldmVudCwgbGF5ZXIpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwibGF5ZXI/LnBhcmFtVGlsZWQgPz8gZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAnQHByeS53aWRnZXQubWFwLndtcy5wYXJhbVRpbGVkJyB8IGkxOG4gfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJ5LWNoZWNrYm94PlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PlxuXG4gICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldCAqbmdJZj1cImxheWVyLnR5cGUgPT09ICdtYXJrZXInXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGxlZ2VuZCBjbGFzcz1cInUtdmlzdWFsbHktaGlkZGVuXCI+e3sgJ0Bwcnkud2lkZ2V0Lm1hcC5jbHVzdGVyaW5nJyB8IGkxOG4gfX08L2xlZ2VuZD5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cHJ5LWNoZWNrYm94IChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZUNsdXN0ZXJlZChsYXllciwgJGV2ZW50KVwiIFtuZ01vZGVsXT1cImxheWVyLmNsdXN0ZXJlZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAnQHByeS53aWRnZXQubWFwLmNsdXN0ZXJlZCcgfCBpMThuIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3ByeS1jaGVja2JveD5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwibGF5ZXIuY2x1c3RlcmVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cHJ5LXJhbmdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImxheWVyLmNsdXN0ZXJlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZUNsdXN0ZXJEaXN0YW5jZShsYXllciwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsVHJhbnNsYXRlPVwiQHByeS53aWRnZXQubWFwLmNsdXN0ZXJEaXN0YW5jZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1pbj1cIjFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXg9XCI1MDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvcHJ5LXJhbmdlPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PlxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIiAqbmdJZj1cIm9wdGlvbnNDb3B5LnNsaWRlID8/IGZhbHNlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cInNsaWRlX3NlbGVjdFwiPnt7ICdAcHJ5LndpZGdldC5tYXAuc2xpZGUudGl0bGUnIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPHByeS1zZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZVNsaWRlKCRldmVudCwgbGF5ZXIpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpdGVtc109XCJzbGlkZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwibGF5ZXIuc2xpZGUgPz8gJ2FsbCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgYmluZExhYmVsPVwibGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgYmluZFZhbHVlPVwiaWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJzbGlkZV9zZWxlY3RcIlxuICAgICAgICAgICAgICAgICAgICAgID48L3ByeS1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIiAqbmdJZj1cIm9wdGlvbnNDb3B5LmF0dHJpYnV0aW9uc1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJhdHRyaWJ1dGlvblwiPnt7ICdAcHJ5LndpZGdldC5tYXAuYXR0cmlidXRpb24nIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICBpZD1cImF0dHJpYnV0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYS1mb3JtLWZpZWxkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJjaGFuZ2VBdHRyaWJ1dGlvbigkZXZlbnQsIGxheWVyKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwibGF5ZXIuYXR0cmlidXRpb24gPyBsYXllci5hdHRyaWJ1dGlvbiA6ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvcHJ5LXNldHRpbmdzPlxuICA8L3ByeS13aWRnZXQtaGVhZGVyPlxuXG4gIDxkaXZcbiAgICBjbGFzcz1cIm0tYnRuLWdyb3VwIC1tYXAtc2VsZWN0aW9uLWNob2ljZSAtdmVydGljYWxcIlxuICAgIFtjbGFzcy4td2l0aC1oZWFkZXJdPVwiZGlzcGxheUhlYWRlciQgfCBhc3luY1wiXG4gICAgW2NsYXNzLi1jbG9zZWRdPVwiIShhY3Rpb25NZW51T3BlbiQgfCBhc3luYylcIlxuICA+XG4gICAgPGRpdiBjbGFzcz1cIi12ZXJ0aWNhbFwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIGJhc2ljQWN0aW9ucyQgfCBhc3luY1wiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgY2xhc3M9XCJhLWJ0biBhLWJ0bi0taWNvbi1vbmx5IGEtdG9vbHRpcCBhLXRvb2x0aXAtLXt7IGFjdGlvbiB9fVwiXG4gICAgICAgICAgKGNsaWNrKT1cImNoYW5nZVNlbGVjdGlvbihhY3Rpb24pXCJcbiAgICAgICAgICBbYXR0ci5kYXRhLXRvb2x0aXBdPVwiJ0Bwcnkud2lkZ2V0Lm1hcC4nICsgYWN0aW9uIHwgaTE4blwiXG4gICAgICAgICAgZGF0YS10b29sdGlwLXBvc2l0aW9uPVwicmlnaHRcIlxuICAgICAgICA+XG4gICAgICAgICAgPHByeS1pY29uIFtpY29uU3ZnXT1cImFjdGlvblwiPjwvcHJ5LWljb24+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1LXZpc3VhbGx5LWhpZGRlblwiPnt7ICdAcHJ5LndpZGdldC5tYXAuJyArIGFjdGlvbiB8IGkxOG4gfX08L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG5cbiAgICA8YnV0dG9uXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIGNsYXNzPVwiYS1idG4gYS1idG4tLWljb24tb25seSBhLXRvb2x0aXAgLW1hcC10b2dnbGVcIlxuICAgICAgaWQ9XCJvcGVuX21lbnVcIlxuICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJhY3Rpb25NZW51T3BlbiQgfCBhc3luY1wiXG4gICAgICBhcmlhLWNvbnRyb2xzPVwiZXhwb3J0X3R5cGVcIlxuICAgICAgYXJpYS1oYXNwb3B1cD1cIm1lbnVcIlxuICAgICAgKGNsaWNrKT1cInRvZ2dsZU1lbnUoKVwiXG4gICAgPlxuICAgICAgPHByeS1pY29uXG4gICAgICAgIFtpY29uU3ZnXT1cIihhY3Rpb25NZW51T3BlbiQgfCBhc3luYykgPyAnY2hldnJvbl90b3AnIDogJ2NoZXZyb25fYm90dG9tJ1wiXG4gICAgICAgIFt3aWR0aF09XCIxMlwiXG4gICAgICAgIFtoZWlnaHRdPVwiMjRcIlxuICAgICAgPjwvcHJ5LWljb24+XG4gICAgICA8c3BhbiBjbGFzcz1cInUtdmlzdWFsbHktaGlkZGVuXCI+e3sgJ0Bwcnkud2lkZ2V0Lm1hcC5vcGVuJyB8IGkxOG4gfX08L3NwYW4+XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJtLWJ0bi1ncm91cCAtbWFwLXNlbGVjdGlvbi1jaG9pY2UgLW1hcC1leHBvcnRcIiBbY2xhc3MuLXdpdGgtaGVhZGVyXT1cImRpc3BsYXlIZWFkZXIkIHwgYXN5bmNcIj5cbiAgICA8YnV0dG9uXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIGNsYXNzPVwiYS1idG4gYS1idG4tLWljb24tb25seSBhLXRvb2x0aXBcIlxuICAgICAgaWQ9XCJleHBvcnRfY2FyZFwiXG4gICAgICBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIlxuICAgICAgYXJpYS1jb250cm9scz1cImV4cG9ydF90eXBlXCJcbiAgICAgIGFyaWEtaGFzcG9wdXA9XCJtZW51XCJcbiAgICAgIFthdHRyLmRhdGEtdG9vbHRpcF09XCInQHByeS53aWRnZXQubWFwLmV4cG9ydCcgfCBpMThuXCJcbiAgICAgIGRhdGEtdG9vbHRpcC1wb3NpdGlvbj1cInJpZ2h0XCJcbiAgICAgIChjbGljayk9XCJleHBvcnQoKVwiXG4gICAgPlxuICAgICAgPHByeS1pY29uIGljb25Tdmc9XCJmaWxlX2Rvd25sb2FkXCI+PC9wcnktaWNvbj5cbiAgICAgIDxzcGFuIGNsYXNzPVwidS12aXN1YWxseS1oaWRkZW5cIj57eyAnQHByeS53aWRnZXQubWFwLmV4cG9ydCcgfCBpMThuIH19PC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cblxuICA8ZGl2XG4gICAgY2xhc3M9XCJvbC1jb250cm9sIG0tbGF5ZXItc3dpdGNoZXIgbS1tYXAtbGF5ZXItYWN0aW9uXCJcbiAgICAqbmdJZj1cIigobGF5ZXJzJCB8IGFzeW5jKT8ubGVuZ3RoID8/IDApID4gMFwiXG4gICAgW3N0eWxlLnRvcC5weF09XCJsYXllcnNUb3AkIHwgYXN5bmNcIlxuICA+XG4gICAgPGJ1dHRvblxuICAgICAgY2xhc3M9XCJtLW1hcC1sYXllci1hY3Rpb25fX3RvZ2dsZVwiXG4gICAgICBbY2xhc3MuYS10b29sdGlwXT1cIiF0aGlzLmxheWVyc1RhYk9wZW5cIlxuICAgICAgW2NsYXNzLi10b29sdGlwLW5vLXdyYXBdPVwiIXRoaXMubGF5ZXJzVGFiT3BlblwiXG4gICAgICAoY2xpY2spPVwidG9nZ2xlTGF5ZXJzV2luZG93KClcIlxuICAgICAgW2F0dHIuZGF0YS10b29sdGlwXT1cIidAcHJ5LndpZGdldC5tYXAuc2VsZWN0TGF5ZXJzJyB8IGkxOG5cIlxuICAgICAgZGF0YS10b29sdGlwLXBvc2l0aW9uPVwibGVmdFwiXG4gICAgPlxuICAgICAgPHByeS1pY29uIGljb25Tdmc9XCJsYXllcnNcIiBbd2lkdGhdPVwiMThcIiBbaGVpZ2h0XT1cIjE4XCI+PC9wcnktaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgICA8ZGl2IGNsYXNzPVwibS1tYXAtbGF5ZXItYWN0aW9uX19jb250YWluZXIgbS1tYXAtbGF5ZXItYWN0aW9uX19jb250YWluZXItLWxheWVyc1wiIFtjbGFzcy4taGlkZGVuXT1cIiFsYXllcnNUYWJPcGVuXCI+XG4gICAgICA8aDQgY2xhc3M9XCJhLWg0XCI+e3sgJ0Bwcnkud2lkZ2V0Lm1hcC5sYXllclNldHRpbmdzLnNlbGVjdExheWVycycgfCBpMThuIH19PC9oND5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGdyb3VwIG9mIGxheWVyR3JvdXBzJCB8IGFzeW5jXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0dyb3VwVXNlZEJ5V2lkZ2V0TGF5ZXJzKGdyb3VwKVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLW1hcC1sYXllci1hY3Rpb25fX3RpdGxlIG0tbGF5ZXItc3dpdGNoZXJfX2dyb3VwLXRpdGxlXCI+XG4gICAgICAgICAgICA8aDUgY2xhc3M9XCJhLWg1XCI+XG4gICAgICAgICAgICAgIHt7IGdyb3VwLm5hbWUgPT09IERFRkFVTFRfTEFZRVJfR1JPVVAgPyAoJ0Bwcnkud2lkZ2V0Lm1hcC5ub0dyb3VwJyB8IGkxOG4pIDogZ3JvdXAubmFtZSB9fVxuICAgICAgICAgICAgPC9oNT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWdyb3VwLnNpbmdsZUxheWVyOyBlbHNlIHNpbmdsZUxheWVyXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBsYXllciBvZiBvcHRpb25zQ29weS5sYXllcnM7IGxldCBpbmRleCA9IGluZGV4XCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJsYXllci5ncm91cCA9PT0gZ3JvdXAubmFtZVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLW1hcC1sYXllci1hY3Rpb25fX3RpdGxlIG0tbGF5ZXItc3dpdGNoZXJfX3RpdGxlXCIgW2NsYXNzLi1oaWRkZW5dPVwiIWxheWVyc1RhYk9wZW5cIj5cbiAgICAgICAgICAgICAgICAgIDxwcnktY2hlY2tib3hcbiAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiaXNMYXllclZpc2libGUobGF5ZXIsIGdyb3VwKVwiXG4gICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwiY2hhbmdlVmlzaWJpbGl0eShncm91cCwgbGF5ZXIpXCJcbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJjaGVja2JveC1sYXllci17eyBpbmRleCB9fVwiXG4gICAgICAgICAgICAgICAgICA+PC9wcnktY2hlY2tib3g+XG4gICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwiY2hlY2tib3gtbGF5ZXIte3sgaW5kZXggfX1cIj5cbiAgICAgICAgICAgICAgICAgICAge3sgbGF5ZXIudGl0bGUgPz8gKCdAcHJ5LndpZGdldC5tYXAubWlzc2luZ1RpdGxlJyB8IGkxOG4pIH19XG4gICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjc2luZ2xlTGF5ZXI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1sYXllci1zd2l0Y2hlci0tcmFkaW9zXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLW1hcC1sYXllci1hY3Rpb25fX3RpdGxlIG0tbGF5ZXItc3dpdGNoZXJfX3RpdGxlXCIgW2NsYXNzLi1oaWRkZW5dPVwiIWxheWVyc1RhYk9wZW5cIj5cbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICAgICAgICBbbmFtZV09XCJncm91cC5uYW1lXCJcbiAgICAgICAgICAgICAgICAgIGlkPVwicmFkaW8tbm8tbGF5ZXJcIlxuICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiZ3JvdXAudmlzaWJsZUxheWVycy5sZW5ndGhcIlxuICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cIjBcIlxuICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJjaGFuZ2VWaXNpYmlsaXR5KGdyb3VwKVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwicmFkaW8tbm8tbGF5ZXJcIj57eyAnQHByeS53aWRnZXQubWFwLmxheWVyU2V0dGluZ3Mubm9MYXllcicgfCBpMThuIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGxheWVyIG9mIG9wdGlvbnNDb3B5LmxheWVyczsgbGV0IGluZGV4ID0gaW5kZXhcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibGF5ZXIuZ3JvdXAgPT09IGdyb3VwLm5hbWVcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLW1hcC1sYXllci1hY3Rpb25fX3RpdGxlIG0tbGF5ZXItc3dpdGNoZXJfX3RpdGxlXCIgW2NsYXNzLi1oaWRkZW5dPVwiIWxheWVyc1RhYk9wZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCJncm91cC5uYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiJ3JhZGlvLWxheWVyLScgKyBpbmRleFwiXG4gICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiZ3JvdXAudmlzaWJsZUxheWVyc1swXVwiXG4gICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImxheWVyLnRpdGxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cImNoYW5nZVZpc2liaWxpdHkoZ3JvdXAsIGxheWVyKVwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJyYWRpby1sYXllci17eyBpbmRleCB9fVwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgbGF5ZXIudGl0bGUgPz8gKCdAcHJ5LndpZGdldC5tYXAubWlzc2luZ1RpdGxlJyB8IGkxOG4pXG4gICAgICAgICAgICAgICAgICAgIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXZcbiAgICBjbGFzcz1cIm9sLWNvbnRyb2wgbS1tYXAtbGF5ZXItYWN0aW9uIG0tbGF5ZXItbGVnZW5kXCJcbiAgICAqbmdJZj1cIigobGVnZW5kTGF5ZXJzJCB8IGFzeW5jKT8ubGVuZ3RoID8/IDApID4gMFwiXG4gICAgW3N0eWxlLnRvcC5weF09XCJsZWdlbmRUb3AkIHwgYXN5bmNcIlxuICA+XG4gICAgPGJ1dHRvblxuICAgICAgY2xhc3M9XCJtLW1hcC1sYXllci1hY3Rpb25fX3RvZ2dsZVwiXG4gICAgICBbY2xhc3MuYS10b29sdGlwXT1cIiF0aGlzLmxlZ2VuZFRhYk9wZW5cIlxuICAgICAgW2NsYXNzLi10b29sdGlwLW5vLXdyYXBdPVwiIXRoaXMubGVnZW5kVGFiT3BlblwiXG4gICAgICAoY2xpY2spPVwidG9nZ2xlTGVnZW5kV2luZG93KClcIlxuICAgICAgW2F0dHIuZGF0YS10b29sdGlwXT1cIidAcHJ5LndpZGdldC5tYXAubGVnZW5kcycgfCBpMThuXCJcbiAgICAgIGRhdGEtdG9vbHRpcC1wb3NpdGlvbj1cImxlZnRcIlxuICAgID5cbiAgICAgIDxwcnktaWNvbiBpY29uU3ZnPVwibGVnZW5kXCIgW3dpZHRoXT1cIjE4XCIgW2hlaWdodF09XCIxNVwiPjwvcHJ5LWljb24+XG4gICAgPC9idXR0b24+XG4gICAgPGRpdiBjbGFzcz1cIm0tbWFwLWxheWVyLWFjdGlvbl9fY29udGFpbmVyXCIgW2NsYXNzLi1oaWRkZW5dPVwiIWxlZ2VuZFRhYk9wZW5cIj5cbiAgICAgIDxoNCBjbGFzcz1cImEtaDRcIj57eyAnQHByeS53aWRnZXQubWFwLmxlZ2VuZHNUaXRsZScgfCBpMThuIH19PC9oND5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGdlb0xheWVyIG9mIGxlZ2VuZExheWVycyQgfCBhc3luYzsgbGV0IGluZGV4ID0gaW5kZXhcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm0tbWFwLWxheWVyLWFjdGlvbl9fdGl0bGUgbS1sYXllci1sZWdlbmRfX3RpdGxlXCIgKGNsaWNrKT1cInRvZ2dsZUxlZ2VuZChpbmRleClcIj5cbiAgICAgICAgICA8cHJ5LWljb25cbiAgICAgICAgICAgICpuZ0lmPVwiaXNMYXllclJlbmRlcmVkKGdlb0xheWVyKSAmJiAhIWdlb0xheWVyLnRpdGxlXCJcbiAgICAgICAgICAgIGNsYXNzPVwibS1sYXllci1sZWdlbmRfX2Ryb3Bkb3duLWljb25cIlxuICAgICAgICAgICAgW2ljb25TdmddPVwibGVnZW5kVGFiID09PSBpbmRleCA/ICdjaGV2cm9uX3RvcCcgOiAnY2hldnJvbl9ib3R0b20nXCJcbiAgICAgICAgICAgIFt3aWR0aF09XCIxMlwiXG4gICAgICAgICAgICBbaGVpZ2h0XT1cIjEyXCJcbiAgICAgICAgICA+PC9wcnktaWNvbj5cbiAgICAgICAgICA8aDUgY2xhc3M9XCJhLWg1XCI+e3sgZ2VvTGF5ZXIudGl0bGUgfX08L2g1PlxuICAgICAgICAgIDxwcnktaWNvblxuICAgICAgICAgICAgKm5nSWY9XCIhaXNMYXllclJlbmRlcmVkKGdlb0xheWVyKVwiXG4gICAgICAgICAgICBjbGFzcz1cImEtdG9vbHRpcFwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLXRvb2x0aXBdPVwiJ0Bwcnkud2lkZ2V0Lm1hcC5sYXllckxvYWRFcnJvcicgfCBpMThuXCJcbiAgICAgICAgICAgIFtpY29uU3ZnXT1cIidjbG9zZSdcIlxuICAgICAgICAgICAgW3dpZHRoXT1cIjIyXCJcbiAgICAgICAgICAgIFtoZWlnaHRdPVwiMjJcIlxuICAgICAgICAgID48L3ByeS1pY29uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwibS1tYXAtbGF5ZXItYWN0aW9uX19pbWFnZVwiXG4gICAgICAgICAgW2NsYXNzLi1oaWRkZW5dPVwiIWxlZ2VuZFRhYk9wZW4gfHwgbGVnZW5kVGFiICE9PSBpbmRleCB8fCAhaXNMYXllclJlbmRlcmVkKGdlb0xheWVyKVwiXG4gICAgICAgICAgW3N0eWxlLm1heC1oZWlnaHQucHhdPVwibGVnZW5kSGVpZ2h0JCB8IGFzeW5jXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJnZW9MYXllciB8IGxlZ2VuZFVybDogeyBjYXBhYmlsaXRpZXM6ICh3bXNDYXBhYmlsaXRpZXMkIHwgYXN5bmMpIH0gYXMgdXJsXCI+XG4gICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgIFtzcmNdPVwidXJsIHwgZ2V0U2VjdXJlZEltYWdlIHwgYXN5bmNcIlxuICAgICAgICAgICAgICBbYWx0XT1cIidAcHJ5LndpZGdldC5tYXAubGVnZW5kJyB8IGkxOG46IHsgbGF5ZXI6IGdlb0xheWVyLnRpdGxlIH1cIlxuICAgICAgICAgICAgICAoZXJyb3IpPVwiaW1hZ2VOb3RQcm92aWRlZFtpbmRleF0gPSB0cnVlXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiEoZ2VvTGF5ZXIgfCBsZWdlbmRVcmw6IHsgY2FwYWJpbGl0aWVzOiAod21zQ2FwYWJpbGl0aWVzJCB8IGFzeW5jKSB9KVwiPlxuICAgICAgICAgICAgPHAgY2xhc3M9XCJtLW1hcC1sYXllci1hY3Rpb25fX2Vycm9yXCI+e3sgJ0Bwcnkud2lkZ2V0Lm1hcC5sZWdlbmROb3RQcm92aWRlZCcgfCBpMThuIH19PC9wPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwibS1tYXAtc2xpZGUtbGVnZW5kIC1sZWZ0XCIgKm5nSWY9XCJsZWZ0U2xpZGVMYXllcnMubGVuZ3RoID4gMFwiIFtzdHlsZS50b3AucHhdPVwibGVnZW5kVG9wJCB8IGFzeW5jXCI+XG4gICAgPHNwYW4gY2xhc3M9XCJtLW1hcC1zbGlkZS1sZWdlbmRfX3RpdGxlXCI+e3sgJ0Bwcnkud2lkZ2V0Lm1hcC5zbGlkZVRpdGxlJyB8IGkxOG4gfX06PC9zcGFuPlxuICAgIDxkaXYgKm5nRm9yPVwibGV0IGxheWVyIG9mIGxlZnRTbGlkZUxheWVyc1wiPlxuICAgICAge3sgbGF5ZXIuZ2V0KCd0aXRsZScpIH19XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJtLW1hcC1zbGlkZS1sZWdlbmQgLXJpZ2h0XCIgKm5nSWY9XCJyaWdodFNsaWRlTGF5ZXJzLmxlbmd0aCA+IDBcIiBbc3R5bGUudG9wLnB4XT1cImxlZ2VuZFRvcCQgfCBhc3luY1wiPlxuICAgIDxzcGFuIGNsYXNzPVwibS1tYXAtc2xpZGUtbGVnZW5kX190aXRsZVwiPnt7ICdAcHJ5LndpZGdldC5tYXAuc2xpZGVUaXRsZScgfCBpMThuIH19Ojwvc3Bhbj5cbiAgICA8ZGl2ICpuZ0Zvcj1cImxldCBsYXllciBvZiByaWdodFNsaWRlTGF5ZXJzXCI+XG4gICAgICB7eyBsYXllci5nZXQoJ3RpdGxlJykgfX1cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBbc3R5bGUuaGVpZ2h0LnB4XT1cImhlaWdodCQgfCBhc3luY1wiIGNsYXNzPVwiby1tYXAtd3JhcHBlclwiPlxuICAgIDxkaXYgY2xhc3M9XCJvLW1hcFwiPlxuICAgICAgPGRpdiAjbWFwUmVmIGlkPVwibWFwXCI+PC9kaXY+XG4gICAgICA8aW5wdXRcbiAgICAgICAgdHlwZT1cInJhbmdlXCJcbiAgICAgICAgbWluPVwiMFwiXG4gICAgICAgIG1heD1cIjEwMFwiXG4gICAgICAgIHN0ZXA9XCIwLjAxXCJcbiAgICAgICAgdmFsdWU9XCI1MFwiXG4gICAgICAgICNzbGlkZXJFbGVtZW50XG4gICAgICAgIGNsYXNzPVwiby1tYXAtc2xpZGVyXCJcbiAgICAgICAgW2NsYXNzLi1oaWRkZW5dPVwiIShoYXNTbGlkZUxheWVyJCB8IGFzeW5jKVwiXG4gICAgICAgIChpbnB1dCk9XCJ0cmlnZ2VyTGF5ZXJSZW5kZXIoKVwiXG4gICAgICAvPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8ZGl2ICNwb3B1cCBjbGFzcz1cIm0tdG9vbHRpcCBtLXRvb2x0aXAtLXBvcHVwXCIgW2hpZGRlbl09XCJ0cnVlXCIgcm9sZT1cInRvb2x0aXBcIj5cbiAgICA8ZGl2IGNsYXNzPVwibS10b29sdGlwLS1wb3B1cF9faGVhZGVyXCI+XG4gICAgICA8cD57eyB0b29sdGlwTWFuYWdlci50b29sdGlwSW5kZXggKyAxIH19IC8ge3sgdG9vbHRpcE1hbmFnZXIudG9vbHRpcE51bWJlciB9fTwvcD5cbiAgICAgIDxidXR0b25cbiAgICAgICAgY2xhc3M9XCJhLWJ0biBhLWJ0bi0tcHJpbWFyeSBhLWJ0bi0taWNvbi1vbmx5XCJcbiAgICAgICAgKGNsaWNrKT1cInRvb2x0aXBNYW5hZ2VyLnRvb2x0aXBNb3ZlKC0xKVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCIhdG9vbHRpcE1hbmFnZXIudG9vbHRpcENhbk1vdmUoLTEpXCJcbiAgICAgID5cbiAgICAgICAgPHByeS1pY29uIGljb25Tdmc9XCJhcnJvd19iYWNrXCI+PC9wcnktaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBjbGFzcz1cImEtYnRuIGEtYnRuLS1wcmltYXJ5IGEtYnRuLS1pY29uLW9ubHlcIlxuICAgICAgICAoY2xpY2spPVwidG9vbHRpcE1hbmFnZXIudG9vbHRpcE1vdmUoMSlcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiIXRvb2x0aXBNYW5hZ2VyLnRvb2x0aXBDYW5Nb3ZlKDEpXCJcbiAgICAgID5cbiAgICAgICAgPHByeS1pY29uIGljb25Tdmc9XCJhcnJvd19yaWdodFwiPjwvcHJ5LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJhLWJ0biBhLWJ0bi0tcHJpbWFyeSBhLWJ0bi0taWNvbi1vbmx5XCIgKGNsaWNrKT1cInRvb2x0aXBNYW5hZ2VyLmNsZWFyVG9vbHRpcCh0cnVlKVwiPlxuICAgICAgICA8cHJ5LWljb24gaWNvblN2Zz1cImNsb3NlXCI+PC9wcnktaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJtLXRvb2x0aXAtLXBvcHVwX19jb250YWluZXJcIj5cbiAgICAgIDxuZy1jb250YWluZXIgI3BvcHVwQ29udGVudD48L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
1174
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LW1hcC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcm92b2x5L2Rhc2hib2FyZC93aWRnZXRzL3dpZGdldC1tYXAvY29tcG9uZW50L3dpZGdldC1tYXAuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvd2lkZ2V0cy93aWRnZXQtbWFwL2NvbXBvbmVudC93aWRnZXQtbWFwLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxTQUFTLEVBRVQsTUFBTSxFQUdOLFFBQVEsRUFDUixXQUFXLEVBQ1gsU0FBUyxFQUNULGdCQUFnQixFQUNqQixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBTUwsY0FBYyxFQUNkLGVBQWUsRUFDZixnQkFBZ0IsRUFDaEIsa0JBQWtCLEVBRWxCLG1CQUFtQixFQUNuQixlQUFlLEVBQ2YsbUJBQW1CLEVBRW5CLGNBQWMsRUFFZCxXQUFXLEVBQ1gsbUJBQW1CLEVBRW5CLFNBQVMsRUFjVCxlQUFlLEVBQ2YsU0FBUyxFQUNULGlCQUFpQixFQUlqQixjQUFjLEVBR2QsV0FBVyxFQUNYLG9CQUFvQixFQUNwQixlQUFlLEVBQ2hCLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxLQUFLLE1BQU0scUJBQXFCLENBQUM7QUFDeEMsT0FBTyxFQUFXLEdBQUcsRUFBRSxJQUFJLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFFeEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFeEQsT0FBTyxFQUFrQixJQUFJLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFaEQsT0FBTyxXQUFXLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUNyQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUd4RCxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDMUIsT0FBTyxFQUNMLGVBQWUsRUFDZixVQUFVLEVBQ1YsYUFBYSxFQUNiLFlBQVksRUFDWixLQUFLLEVBQ0wsb0JBQW9CLEVBQ3BCLE1BQU0sRUFDTixJQUFJLEVBQ0osR0FBRyxFQUNILFFBQVEsRUFFUixFQUFFLEVBQ0YsU0FBUyxFQUNULFNBQVMsRUFDVCxjQUFjLEVBQ2YsTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXBELE9BQU8saUJBQWlCLE1BQU0sdUJBQXVCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzNELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNoRSxPQUFPLFNBQVMsTUFBTSxlQUFlLENBQUM7QUFDdEMsT0FBTyxjQUFjLE1BQU0sb0JBQW9CLENBQUM7QUFDaEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFHbkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNDQUFzQyxDQUFDOzs7Ozs7Ozs7Ozs7QUFFdEUsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLEVBQUUsQ0FBQztBQUNsQyxNQUFNLENBQUMsTUFBTSw2QkFBNkIsR0FBRyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztBQUNsRSxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxTQUFTLENBQUM7QUFFN0MsNEJBQTRCO0FBQzVCLEtBQUssQ0FBQyxJQUFJLENBQ1IsV0FBVyxFQUNYLDZJQUE2SSxDQUM5SSxDQUFDO0FBQ0YsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBTWhCLE1BQU0sT0FBTyxrQkFBbUIsU0FBUSxtQkFBbUI7YUFDbEQsY0FBUyxHQUFHLENBQUMsQUFBSixDQUFLO0lBa0dyQixZQUNFLEtBQWlCLEVBQ1YsZ0JBQWdDLEVBQy9CLHFCQUE0QyxFQUM1QyxhQUE0QixFQUM1QixRQUFrQixFQUNsQixxQkFBNEMsRUFDNUMscUJBQTRDLEVBQ3BELEVBQWMsRUFDaUMsY0FBaUM7UUFFaEYsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQVRWLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBZ0I7UUFDL0IsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUF1QjtRQUM1QyxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBdUI7UUFDNUMsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUF1QjtRQUVMLG1CQUFjLEdBQWQsY0FBYyxDQUFtQjtRQTFHbEYsT0FBRSxHQUFHLEdBQUcsa0JBQWtCLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQztRQVF6QyxlQUFVLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLGtCQUFrQjthQUN2RCxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksS0FBSyxNQUFNLENBQUM7YUFDakMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQ2IsSUFBSSxDQUFDLGdCQUFnQjthQUNsQixPQUFPLENBQUMsNEJBQTRCLEdBQUcsQ0FBQyxDQUFDO2FBQ3pDLGFBQWEsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLDRCQUE0QixHQUFHLENBQUMsQ0FBQyxDQUFDLENBQ2xGLENBQUM7UUFDSixnQkFBVyxHQUFxQixFQUFzQixDQUFDO1FBT3ZELHNCQUFpQixHQUFHLElBQUksZUFBZSxDQUF3QyxFQUFFLENBQUMsQ0FBQztRQU9uRix5QkFBb0IsR0FBRyxvQkFBb0IsQ0FBQztRQUM1QyxNQUFDLEdBQUcsQ0FBQyxDQUFDO1FBUU4sYUFBUSxHQUFHLGVBQWUsQ0FBQyxRQUFRLENBQUM7UUFFcEMsa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFDdEIsa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFDdEIsY0FBUyxHQUFHLENBQUMsQ0FBQztRQUtkLHFCQUFnQixHQUFjLEVBQUUsQ0FBQztRQUVqQyxtQkFBYyxHQUFHLElBQUksZUFBZSxDQU9qQyxFQUFFLENBQUMsQ0FBQztRQUVQLHVCQUFrQixHQUF1QixJQUFJLGtCQUFrQixFQUFFLENBQUM7UUFDbEUsbUJBQWMsR0FBbUIsSUFBSSxjQUFjLEVBQUUsQ0FBQztRQUV0RCxtQkFBYyxHQUFHLE1BQU0sQ0FBQztRQUN4QixhQUFRLEdBQUcsTUFBTSxDQUFDO1FBaUJsQixnQkFBVyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7UUFHaEMsbUJBQWMsR0FLVixFQUFFLENBQUM7UUFDUCxpQkFBWSxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7UUFDakMsb0JBQWUsR0FBRyxJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUU3QyxtQkFBYyxHQUFHLElBQUksZUFBZSxDQUF3QixJQUFJLENBQUMsQ0FBQztRQUNsRSxtQkFBYyxHQUFnQixFQUFFLENBQUM7UUFFakMsZ0JBQVcsR0FBaUIsRUFBRSxDQUFDO1FBQy9CLCtCQUEwQixHQUErQixFQUFFLENBQUM7UUFtZ0R6Qyx3QkFBbUIsR0FBRyxtQkFBbUIsQ0FBQztRQXAvQzNELElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBRXhCLElBQUksQ0FBQyxNQUFNLEdBQUc7WUFDWixFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsMkJBQTJCLENBQUMsRUFBRTtZQUNoRixFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsNEJBQTRCLENBQUMsRUFBRTtZQUNsRixFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsNkJBQTZCLENBQUMsRUFBRTtTQUNyRixDQUFDO1FBRUYsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFFNUQsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7WUFDakMsSUFBSSxDQUFDLFFBQVE7WUFDYixJQUFJLENBQUMsZUFBZTtZQUNwQixJQUFJLENBQUMsa0JBQWtCLENBQUMsb0JBQW9CLENBQUMsY0FBYztTQUM1RCxDQUFDLENBQUMsSUFBSSxDQUNMLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxhQUFhLENBQUMsRUFBRSxFQUFFLENBQ3pDLFFBQVE7WUFDTixDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxLQUFLLFFBQVEsSUFBSSxNQUFNLEtBQUssUUFBUSxDQUFDO1lBQ3hFLENBQUMsQ0FBQyxPQUFPO2lCQUNKLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxLQUFLLFFBQVEsSUFBSSxNQUFNLEtBQUssUUFBUSxDQUFDO2lCQUM5RCxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLGFBQWEsS0FBSyxNQUFNLENBQUMsQ0FDcEQsQ0FDRixDQUFDO1FBRUYsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSzthQUN2QixNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQzthQUM5QixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hGLElBQUksQ0FBQyxZQUFZLEdBQUcsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDNUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsV0FBVyxDQUFDLEVBQUUsRUFBRTtZQUM3QixPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUNsQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUU7Z0JBQzlCLElBQUksVUFBVSxDQUFDLFVBQVUsS0FBSyxZQUFZLElBQUksTUFBTSxJQUFJLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztvQkFDM0UsSUFDRSxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxlQUFlLENBQUMsV0FBVzt3QkFDdkQsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssZUFBZSxDQUFDLFNBQVMsRUFDckQsQ0FBQzt3QkFDRCxPQUFPLElBQUksQ0FBQztvQkFDZCxDQUFDO2dCQUNILENBQUM7Z0JBQ0QsT0FBTyxVQUFVLENBQUMsVUFBVSxLQUFLLFNBQVM7b0JBQ3hDLENBQUMsQ0FBQyxVQUFVLENBQUMsTUFBTSxLQUFLLFNBQVMsQ0FBQyxFQUFFO29CQUNwQyxDQUFDLENBQUMsVUFBVSxDQUFDLFVBQVUsS0FBSyxZQUFZLElBQUksUUFBUSxJQUFJLFVBQVUsQ0FBQyxPQUFPO3dCQUN4RSxDQUFDLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEtBQUssU0FBUyxDQUFDLEVBQUU7d0JBQzVDLENBQUMsQ0FBQyxVQUFVLENBQUMsVUFBVSxLQUFLLFlBQVksSUFBSSxNQUFNLElBQUksVUFBVSxDQUFDLE9BQU87NEJBQ3RFLENBQUMsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxlQUFlLENBQUMsVUFBVTs0QkFDeEQsQ0FBQyxDQUFDLEtBQUssQ0FBQztZQUNoQixDQUFDLENBQUMsQ0FDSCxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQ0gsQ0FBQztRQUNGLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRXhELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxhQUFhLENBQUM7WUFDdEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsaUJBQWlCLENBQUM7WUFDdkQsSUFBSSxDQUFDLGNBQWM7U0FDcEIsQ0FBQyxDQUFDLElBQUksQ0FDTCxHQUFHLENBQ0QsQ0FBQyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLENBQ2pCLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO2FBQ2pCLE1BQU0sQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQzthQUNsRCxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FFbEQsQ0FDSixFQUNELG9CQUFvQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUM1QyxDQUFDO1FBRUYsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUM5RCxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUNiLE1BQU0sQ0FBQyxNQUFNLENBQ1g7WUFDRSxVQUFVLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDekIsS0FBSyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMseUJBQXlCLENBQUM7U0FDaEUsRUFDRDtZQUNFLFVBQVUsRUFBRSxJQUFJLENBQUMsY0FBYztZQUMvQixLQUFLLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyw4QkFBOEIsQ0FBQztTQUNyRSxDQUNGLENBQ0YsQ0FDRixDQUFDO1FBQ0YsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUUxRSxJQUFJLENBQUMsMkJBQTJCLEdBQUcsYUFBYSxDQUFDO1lBQy9DLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQ3hCLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFDYixvQkFBb0IsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FDNUM7WUFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUMzRSxDQUFDLENBQUMsSUFBSSxDQUNMLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFDakIsR0FBRyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsWUFBWSxDQUFDLEVBQUUsRUFBRTtZQUNsQyxJQUFJLENBQUMsWUFBWTtnQkFBRSxPQUFPLEVBQUUsQ0FBQztZQUM3QixPQUFPLFdBQVc7aUJBQ2YsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2lCQUN6QyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRTtnQkFDVixFQUFFLEdBQUcsRUFBd0IsQ0FBQztnQkFDOUIsTUFBTSxTQUFTLEdBRVgsRUFBRSxDQUFDO2dCQUNQLEVBQUUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUN2RSxPQUFPO29CQUNMLElBQUksRUFBRSxXQUFXO29CQUNqQixHQUFHLEVBQUUsR0FBRyxZQUFZLElBQ2xCLFNBQVMsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQ3pGLCtCQUErQjtvQkFDL0IsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLE9BQU8sRUFBRSxRQUFRLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxHQUFHLEVBQUUsRUFBRSxDQUFDO29CQUM1RCxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU07b0JBQ2pCLEdBQUcsRUFBRSxTQUFTLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxTQUFTLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQztvQkFDeEUsU0FBUyxFQUFFLFNBQVMsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDO29CQUMzQyxVQUFVLEVBQUUsU0FBUyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUM7b0JBQ3RDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSTtvQkFDYixZQUFZLEVBQUUsRUFBRSxDQUFDLEVBQUU7aUJBQ3BCLENBQUM7WUFDSixDQUFDLENBQUM7aUJBQ0QsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFpQyxDQUFDLENBQUM7UUFDdkQsQ0FBQyxDQUFDLEVBQ0Ysb0JBQW9CLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQzNDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FDZCxDQUFDO1FBRUYsSUFBSSxDQUFDLGtCQUFrQixHQUFHLGFBQWEsQ0FBQztZQUN0QyxJQUFJLENBQUMsUUFBUTtZQUNiLElBQUksQ0FBQyxPQUFPO1lBQ1osSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FDeEIsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUNiLEdBQUcsQ0FDRCxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQ2QsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLFVBQVUsS0FBSyxTQUFTLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFjLENBQ3JHLENBQ0Y7U0FDRixDQUFDLENBQUMsSUFBSSxDQUNMLEdBQUcsQ0FDRCxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsRUFBRSxFQUFFLENBQzlCLFFBQVE7YUFDTCxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRTtZQUNWLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzlELE1BQU0sYUFBYSxHQUFHLENBQ3BCLEtBQUssRUFBRSxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQ2xHLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksbUJBQW1CLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ25GLE9BQU8sYUFBYSxDQUFDLEdBQUcsQ0FDdEIsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUNOLENBQUM7Z0JBQ0MsSUFBSSxFQUFFLE1BQU07Z0JBQ1osS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksR0FBRyxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7Z0JBQzNFLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTTtnQkFDakIsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFO2dCQUNWLE9BQU8sRUFBRSxHQUFHLENBQUMsS0FBTSxDQUFDLElBQUk7Z0JBQ3hCLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUM7Z0JBQ3BCLFNBQVMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWE7YUFDbEMsQ0FBd0IsQ0FDNUIsQ0FBQztRQUNKLENBQUMsQ0FBQzthQUNELElBQUksRUFBMkIsQ0FDckMsQ0FDRixDQUFDO1FBRUYsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQ3BCLElBQUksQ0FBQyxTQUFTO2FBQ1gsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBRWIsQ0FBRSxDQUFDLFFBQVEsQ0FBQyxPQUFPLElBQUksRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQXNCLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQ3pGLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FFL0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FDNUIsQ0FDRjthQUNBLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDNUcsQ0FBQztRQUVGLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUUzRSxJQUFJLENBQUMsUUFBUSxHQUFHLGFBQWEsQ0FBQztZQUM1QixJQUFJLENBQUMsU0FBUztZQUNkLElBQUksQ0FBQyxVQUFVO1lBQ2YsSUFBSSxDQUFDLFFBQVE7WUFDYixJQUFJLENBQUMsT0FBTztZQUNaLElBQUksQ0FBQyxPQUFPO1lBQ1osSUFBSSxDQUFDLDJCQUEyQjtZQUNoQyxJQUFJLENBQUMsZ0JBQWdCO1lBQ3JCLElBQUksQ0FBQyxrQkFBa0I7U0FDeEIsQ0FBQyxDQUFDLElBQUksQ0FDTCxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxpQkFBaUIsQ0FBQyxFQUFFLEVBQUU7WUFDcEcsNkRBQTZEO1lBQzdELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxDQUFxQixDQUFDO1lBQzNGLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQzdCLFdBQVcsQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQztZQUM5QyxDQUFDO1lBRUQsV0FBVyxDQUFDLE1BQU0sR0FBRztnQkFDbkIsR0FBRyxDQUFDLFdBQVcsQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLE1BQU0sQ0FBQztnQkFDdEUsR0FBRyxDQUFDLFdBQVcsQ0FBQyxlQUFlO29CQUM3QixDQUFDLENBQUMsaUJBQWlCO3lCQUNkLE1BQU0sQ0FDTCxDQUFDLEtBQUssRUFBRSxFQUFFLENBQ1IsQ0FBQyxXQUFXLENBQUMsZUFBZTt3QkFDNUIsQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQ3pFO3lCQUNBLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQzt3QkFDZixHQUFHLEtBQUs7d0JBQ1IsR0FBRyxDQUFDLENBQUMsV0FBVyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJO3dCQUNqQyxhQUFhO3dCQUNiLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxLQUFLLEtBQUssQ0FBQyxHQUFHLElBQUksU0FBUyxDQUFDLFNBQVMsS0FBSyxLQUFLLENBQUMsU0FBUyxDQUN0RixJQUFJLEVBQUUsQ0FBQztxQkFDVCxDQUFDLENBQUM7b0JBQ1AsQ0FBQyxDQUFDLEVBQUUsQ0FBQzthQUNSLENBQUM7WUFFRixXQUFXLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDdkMsY0FBYyxDQUFDLHlCQUF5QixDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUM1RSxjQUFjLENBQUMsMEJBQTBCLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBQzdFLElBQUksV0FBVyxDQUFDLFlBQVksRUFBRSxDQUFDO29CQUM3QixLQUFLLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFDO2dCQUM5QyxDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7WUFFSCxNQUFNLGVBQWUsR0FBRyxDQUFDLFdBQVcsQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDO2lCQUMvQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFFLEtBQWtDLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQztpQkFDL0QsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7WUFFMUIsZ0tBQWdLO1lBQ2hLLFdBQVcsQ0FBQyxNQUFNLEdBQUc7Z0JBQ25CLEdBQUcsQ0FBQyxXQUFXLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO29CQUMxQyxhQUFhO29CQUNiLE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQztvQkFDbEYsT0FBTyxLQUFLLENBQUMsSUFBSSxLQUFLLFdBQVc7d0JBQy9CLENBQUMsQ0FBQyxRQUFROzRCQUNSLENBQUMsQ0FBQyxFQUFFLEdBQUcsUUFBUSxFQUFFLEdBQUcsS0FBSyxFQUFFLEdBQUcsRUFBRSxRQUFRLENBQUMsR0FBRyxFQUFFOzRCQUM5QyxDQUFDLENBQUUsSUFBeUM7d0JBQzlDLENBQUMsQ0FBQyxFQUFFLEdBQUcsS0FBSyxFQUFFLENBQUM7Z0JBQ25CLENBQUMsQ0FBQztnQkFDRixHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDckUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUU3QixXQUFXLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRTtnQkFDMUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFDeEQsQ0FBQyxDQUFDLENBQUM7WUFFSCxJQUNFLENBQUMsQ0FBQyxTQUFTO2dCQUNYLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQztnQkFDcEIsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUMvRixDQUFDO2dCQUNELE1BQU0sV0FBVyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxJQUFJLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO2dCQUM3RixXQUFXLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDO1lBQ25HLENBQUM7WUFFRCxJQUFJLFdBQVcsQ0FBQyxlQUFlLEVBQUUsQ0FBQztnQkFDaEMsTUFBTSxJQUFJLEdBQUcsV0FBVyxDQUFDLGVBQWUsQ0FBQztnQkFFekMsOERBQThEO2dCQUM5RCxNQUFNLDJCQUEyQixHQUFHLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUN0RyxXQUFXLENBQUMsZUFBZSxHQUFHLENBQUMsV0FBVyxDQUFDLGVBQWUsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUMvRSwyQkFBMkIsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQzFDLENBQUM7Z0JBQ0YsSUFBSSxXQUFXLENBQUMsZUFBZSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztvQkFDN0MsT0FBTyxXQUFXLENBQUMsZUFBZSxDQUFDO2dCQUNyQyxDQUFDO2dCQUVELElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssV0FBVyxDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQkFDdkYsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUN0QixDQUFDO1lBQ0gsQ0FBQztZQUVELFdBQVcsQ0FBQyxNQUFNLEdBQUcsY0FBYyxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUUxRSxJQUFJLFdBQVcsQ0FBQyxHQUFHLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQ2xDLFdBQVcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUN4QixDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsNkJBQTZCLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxXQUFXLENBQUMsR0FBRyxDQUFDLENBQ2hHLENBQUM7Z0JBQ0YsT0FBTyxXQUFXLENBQUMsR0FBRyxDQUFDO1lBQ3pCLENBQUM7WUFFRDtnQkFDRSxHQUFHLElBQUksR0FBRyxDQUVOLFdBQVcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUkvRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUM1QjthQUNGLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQ2hCLElBQUksWUFBWSxJQUFJLFlBQVksQ0FBQyxHQUFHLENBQUMsS0FBSyxTQUFTLEVBQUUsQ0FBQztvQkFDcEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDcEUsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1lBRUgsT0FBTyxXQUFXLENBQUM7UUFDckIsQ0FBQyxDQUFDLEVBQ0Ysb0JBQW9CLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQzVDLENBQUM7UUFFRixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FDcEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUMvRCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQ3ZELElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FDOUIsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLDBCQUEwQixDQUFDLEtBQUssQ0FBQyxLQUFLLElBQUksZUFBZSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQ3JGLENBQUM7WUFDRixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDO2dCQUNsRixJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU07b0JBQ3JCLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7cUJBQ3hCLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO29CQUNqQixJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FDakIsZ0JBQWdCLENBQUMsZ0JBQWdCLENBQUM7d0JBQ2hDLElBQUksRUFBRSxtQkFBbUI7d0JBQ3pCLGFBQWEsRUFBRSxLQUFLLENBQUMsS0FBSyxJQUFJLGVBQWU7cUJBQzlDLENBQUMsQ0FDSCxDQUFDO2dCQUNKLENBQUMsQ0FBQyxDQUFDO1lBQ1AsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUNqRSxHQUFHLEtBQUs7Z0JBQ1IsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLElBQUksbUJBQW1CO2FBQzFDLENBQUMsQ0FBQyxDQUFDO1FBQ04sQ0FBQyxDQUFDLENBQ0gsQ0FBQztRQUVGLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRXpELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQ3RDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsd0JBQXdCLElBQUksQ0FBQyxNQUFNLG9CQUFvQixDQUFDLEVBQ3RFLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FDVixDQUFDO1FBRUYsSUFBSSxDQUFDLFdBQVcsR0FBRyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQzdGLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLFFBQVEsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFO1lBQy9CLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxLQUFLLFNBQVMsSUFBSSxRQUFRLENBQUMsVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUNwRixPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNoQixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sT0FBTyxJQUFJLENBQ1QsSUFBSSxPQUFPLENBS1IsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7b0JBQ3JCLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUN4RSxJQUFJLEtBQUssS0FBSyxDQUFDO3dCQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDN0IsTUFBTSxNQUFNLEdBQUcsRUFLZCxDQUFDO29CQUNGLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO3dCQUN4QyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FDckIsT0FBTyxDQUFDLEdBQUcsQ0FBQzs0QkFDVixJQUFJLENBQUMsYUFBYSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQzs0QkFDN0MsSUFBSSxDQUFDLGFBQWEsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDO3lCQUNwRCxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRTs0QkFDMUIsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDOzRCQUN2RCxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxJQUFJLEtBQUssRUFBRSxDQUFDO2dDQUN4QyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7NEJBQ2xCLENBQUM7d0JBQ0gsQ0FBQyxDQUFDLENBQ0gsQ0FBQztvQkFDSixDQUFDLENBQUMsQ0FBQztnQkFDTCxDQUFDLENBQUMsQ0FDSCxDQUFDO1lBQ0osQ0FBQztRQUNILENBQUMsQ0FBQyxDQUNILENBQUM7UUFFRixJQUFJLENBQUMsT0FBTyxHQUFHLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDaEcsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUMzRixLQUFLLENBQUMsRUFBRSxDQUFDLENBQ1YsQ0FBQztRQUVGLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7UUFFbEYsSUFBSSxDQUFDLFVBQVUsR0FBRyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDN0UsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUN6RixDQUFDO1FBRUYsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQ2xHLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUU7WUFDbEIsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksR0FBRyxDQUFDLEdBQUcsb0JBQW9CLENBQUMsS0FBSyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxzQ0FBc0M7UUFDN0csQ0FBQyxDQUFDLEVBQ0YsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUNWLENBQUM7UUFFRixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FDcEIsSUFBSSxDQUFDLGdCQUFnQjthQUNsQixJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FDdEIsZUFBZTtZQUNiLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQztpQkFDekIsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsc0JBQXNCLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztpQkFDM0YsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ2pELENBQUMsQ0FBQyxFQUFFLENBQ1AsRUFDRCxTQUFTLENBQUMsRUFBRSxDQUFDLENBQ2Q7YUFDQSxTQUFTLENBQUMsQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUN6RSxDQUFDO1FBRUYsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FDdEMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FDZCxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsS0FBSyxLQUFLLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQzlHLENBQ0YsQ0FBQztRQUVGLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDdEUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQ3BCLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUU7WUFDMUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7UUFDakMsQ0FBQyxDQUFDLENBQ0gsQ0FBQztRQUNGLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUNqQixnQkFBZ0IsQ0FBQyxxQkFBcUIsQ0FBQztZQUNyQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNO2dCQUM3QixFQUFFLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssS0FBSyxTQUFTLENBQUM7aUJBQzdDLEdBQUcsQ0FDRixDQUFDLEtBQUssRUFBRSxFQUFFLENBQ1IsS0FBSyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLDZCQUE2QixLQUFLLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxHQUFHLEtBQUssRUFBRSxDQUFDLENBQ3hHO1NBQ0osQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRUQsc0JBQXNCO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQsa0JBQWtCO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQzdCLElBQUksQ0FBQyxxQkFBcUIsRUFDMUIsSUFBSSxDQUFDLFFBQVEsRUFDYixJQUFJLENBQUMsS0FBSyxFQUNWLElBQUksQ0FBQyxhQUFhLEVBQ2xCLElBQUksQ0FBQyxXQUFXLEVBQ2hCLElBQUksQ0FBQyxjQUFjLEVBQ25CLElBQUksQ0FBQyxHQUFHLEVBQ1IsSUFBSSxDQUFDLEtBQUssRUFDVixJQUFJLENBQUMsWUFBWSxFQUNqQixJQUFJLENBQUMsa0JBQWtCLEVBQ3ZCLElBQUksQ0FDTCxDQUFDO0lBQ0osQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdEcsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBQ3hELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNsRSxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQ2hELElBQUksQ0FBQyxZQUFZLEdBQUcsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQ25FLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUU7WUFDckIsUUFBUSxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ3RCLEtBQUssSUFBSSxDQUFDLFFBQVE7b0JBQ2hCLE9BQU8sSUFBSSxDQUFDO2dCQUNkLEtBQUssSUFBSSxDQUFDLGNBQWM7b0JBQ3RCLE9BQU8sT0FBTyxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUM7Z0JBQ2hDO29CQUNFLE9BQU8sR0FBRyxHQUFHLFdBQVcsT0FBTyxDQUFDLEtBQUssYUFBYSxDQUFDO1lBQ3ZELENBQUM7UUFDSCxDQUFDLENBQUMsRUFDRixvQkFBb0IsRUFBRSxDQUN2QixDQUFDO1FBRUYsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FDMUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDZixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ2QsT0FBTyxFQUFFLENBQUM7WUFDWixDQUFDO1lBQ0QsT0FBTztnQkFDTCxJQUFJLGlCQUFpQixDQUFDO29CQUNwQixVQUFVLEVBQUUsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFO29CQUNuQyxRQUFRO2lCQUNULENBQUMsQ0FBQzs7O3FCQUdFO2FBQ04sQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUNILENBQUM7UUFFRixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FDcEIsSUFBSSxDQUFDLFFBQVE7YUFDVixJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ2hCLE1BQU0sRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDLE1BQU0sSUFBSSxjQUFjLENBQUMsa0JBQWtCLENBQUM7WUFDdkUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLGNBQWMsQ0FBQyxnQkFBZ0I7WUFDN0QsT0FBTyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLGNBQWMsQ0FBQyxnQkFBZ0I7WUFDN0QsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxJQUFJLGNBQWMsQ0FBQyxrQkFBa0I7U0FDL0QsQ0FBQyxDQUFDLEVBQ0gsb0JBQW9CLEVBQUUsQ0FDdkI7YUFDQSxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FDekQsQ0FBQztRQUVGLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUNwQixJQUFJLENBQUMsUUFBUTthQUNWLElBQUksQ0FDSCxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsRUFDdEMsb0JBQW9CLEVBQUUsQ0FDdkI7YUFDQSxTQUFTLENBQUMsQ0FBQyxZQUFZLEVBQUUsRUFBRTtZQUMxQixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ2xCLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUM1QyxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ3pDLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FDTCxDQUFDO1FBRUYsSUFBSSxDQUFDLE9BQU8sR0FBRyxhQUFhLENBQUM7WUFDM0IsSUFBSSxDQUFDLFVBQVU7WUFDZixJQUFJLENBQUMsUUFBUTtZQUNiLElBQUksQ0FBQyxRQUFRO1lBQ2IsSUFBSSxDQUFDLGlCQUFpQjtZQUN0QixJQUFJLENBQUMsV0FBVztZQUNoQixJQUFJLENBQUMsa0JBQWtCO1lBQ3ZCLElBQUksQ0FBQyxPQUFPO1NBQ2IsQ0FBQyxDQUFDLElBQUksQ0FDTCxNQUFNLENBQ0osQ0FBQyxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUMvRSxDQUFDLENBQUMsU0FBUyxJQUFJLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUMsTUFBTSxDQUNwRCxFQUNELGNBQWMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQ2pDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLEVBQUU7WUFDbEcsSUFBSSxnQkFBZ0IsR0FBRyxJQUFpRCxDQUFDO1lBRXpFLE1BQU0sTUFBTSxHQUFHLENBQUMsT0FBTyxFQUFFLE1BQU0sSUFBSSxFQUFFLENBQUM7aUJBQ25DLE1BQU07WUFDTCxhQUFhO1lBQ2IsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUNqRztpQkFDQSxNQUFNO1lBQ0wsYUFBYTtZQUNiLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUMzRztpQkFDQSxHQUFHLENBQUMsQ0FBQyxLQUE0QixFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRTtnQkFDaEQsTUFBTSxrQkFBa0IsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUM7cUJBQ3BELEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztvQkFDakIsT0FBTztvQkFDUCxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQztpQkFDekQsQ0FBQyxDQUFDO3FCQUNGLE1BQU0sQ0FDTCxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7b0JBQ1QsR0FBRyxDQUFDO29CQUNKLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7aUJBQ2YsQ0FBQyxFQUNGLEVBS0MsQ0FDRixDQUFDO2dCQUVKLElBQUksY0FBYyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDdEQsSUFBSSxTQUFTLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUN0RSxjQUFjLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQztnQkFDakMsQ0FBQztnQkFFRCxJQUFJLEtBQUssR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDO2dCQUMvQixhQUFhO2dCQUNiLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO29CQUMvQixNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUM7eUJBQ3hDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQ2YsU0FBUyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUNwQyxTQUFTLENBQUMsMkJBQTJCLENBQUMsSUFBSSxFQUFFLGtCQUFrQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUNoRyxDQUNGO3lCQUNBLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7eUJBQ2xDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLENBQWEsQ0FBQztvQkFFdkUsS0FBSyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTt3QkFDdEYsR0FBRyxFQUFFLE1BQU0sQ0FBQyxTQUFTO3dCQUNyQixHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsU0FBUztxQkFDdkIsQ0FBQyxDQUFDO2dCQUNMLENBQUM7Z0JBRUQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDekUsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7b0JBQ1gsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUN0QixLQUFZLEVBQ1osa0JBQWtCLEVBQ2xCLGNBQWMsRUFDZCxTQUFTLEVBQ1QsS0FBSyxFQUNMLFVBQVUsRUFDVixJQUFJLENBQUMsR0FBRyxDQUNULENBQUM7b0JBQ0YsV0FBVyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUNsQyxXQUFXLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ3BDLFdBQVcsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDdEMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUN0QyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNsRSxXQUFXLENBQUMsU0FBUyxDQUFDLGFBQWEsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUM7b0JBQ2hFLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxVQUFVLEVBQUUsQ0FBQzt3QkFDOUIsZ0JBQWdCLEdBQUcsV0FBbUQsQ0FBQztvQkFDekUsQ0FBQztvQkFDRCxXQUFXLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBRXRDLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUUsQ0FBQzt3QkFDL0IsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7d0JBRTFGLElBQUksVUFBVSxFQUFFLENBQUM7NEJBQ2YsdUNBQXVDOzRCQUN0QyxXQUE2QixDQUFDLFNBQVMsRUFBRyxDQUFDLFlBQVksQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7d0JBQzNFLENBQUM7b0JBQ0gsQ0FBQztvQkFFRCxJQUFJLEtBQUssQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLEtBQUssS0FBSyxLQUFLLEVBQUUsQ0FBQzt3QkFDekMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQ3pCLEtBQUssQ0FBQyxLQUFLLEVBQ1gsV0FBcUUsQ0FDdEUsQ0FBQztvQkFDSixDQUFDO29CQUVELE9BQU8sV0FBVyxDQUFDO2dCQUNyQixDQUFDO3FCQUFNLENBQUM7b0JBQ04sT0FBTyxDQUFDLEtBQUssQ0FBQyxjQUFjLEtBQUssQ0FBQyxJQUFJLGFBQWEsQ0FBQyxDQUFDO29CQUNyRCxPQUFPLElBQTRCLENBQUM7Z0JBQ3RDLENBQUM7WUFDSCxDQUFDLENBQUM7aUJBQ0QsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFOUIsSUFBSSxDQUFDLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztnQkFDdkIsTUFBTSxRQUFRLEdBQUcsTUFBTTtxQkFDcEIsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxZQUFZLElBQUksQ0FBQyxDQUFDO3FCQUMzQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUNiLEtBQUs7b0JBQ0gsYUFBYTtxQkFDWixTQUFTLEVBQUU7cUJBQ1gsV0FBVyxFQUFFO3FCQUNiLE1BQU0sQ0FBQyxDQUFDLFFBQXNCLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQzFGO3FCQUNBLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFFdEMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtvQkFDdkMsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQTBCLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUM5RixNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBMEIsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7b0JBQ2pHLElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7d0JBQ3ZCLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztvQkFDbEcsQ0FBQztnQkFDSCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUM7WUFDRCxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQztZQUVqQyxNQUFNLGFBQWEsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDN0UsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRTtnQkFDNUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQ2hELEtBQUssQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzFCLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztZQUVILHNGQUFzRjtZQUN0RixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsb0NBQW9DLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDbEUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQztZQUNyQyxPQUFPLE9BQU8sQ0FBQztRQUNqQixDQUFDLENBQUMsQ0FDSCxDQUFDO1FBRUYsSUFBSSxDQUFDLFdBQVcsR0FBRyxhQUFhLENBQUM7WUFDL0IsSUFBSSxDQUFDLFFBQVE7WUFDYixJQUFJLENBQUMsUUFBUTtZQUNiLElBQUksQ0FBQyxPQUFPO1lBQ1osSUFBSSxDQUFDLGtCQUFrQjtZQUN2QixJQUFJLENBQUMsZ0JBQWdCO1NBQ3RCLENBQUMsQ0FBQyxJQUFJLENBQ0wsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUNqQixTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxlQUFlLENBQUMsRUFBRSxFQUFFLENBQ2pFLENBQUMsT0FBTyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQztZQUM1RixDQUFDLENBQUMsYUFBYSxDQUFDO2dCQUNaLEdBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQWdDO3FCQUNyRyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUM7cUJBQzVCLEdBQUcsQ0FBQyxDQUFDLEtBQStCLEVBQUUsRUFBRSxDQUN2QyxDQUNFLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFLLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBdUIsQ0FDL0YsQ0FBQyxVQUFVO3FCQUNULEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO3FCQUNqRixNQUFNLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUMsbUJBQW1CLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxJQUFJLElBQUksTUFBTSxDQUFDLENBQUM7cUJBQ2hGLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FDdkIsSUFBSSxDQUFDLHFCQUFxQjtxQkFDdkIsU0FBUyxDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxFQUFFO29CQUMvQixRQUFRLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFO2lCQUM5RCxDQUFDO3FCQUNqQyxJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsY0FBaUMsRUFBRSxFQUFFLENBQ3hDLGNBQWMsQ0FBQyxnQ0FBZ0MsQ0FDN0MsS0FBTSxFQUNOLGNBQWMsRUFDZCxLQUFLLEVBQ0wsZUFBZSxFQUNmLElBQUksQ0FBQyxHQUFHLENBQ1QsQ0FDRixFQUNELFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsS0FBSyxDQUFDLFlBQVksRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQ2xGLENBQ0o7cUJBQ0EsSUFBSSxFQUFFLENBQ1Y7cUJBQ0EsSUFBSSxFQUFFO2dCQUNULEdBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQStCO3FCQUM5RixNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUM7cUJBQzVCLEdBQUcsQ0FBQyxDQUFDLEtBQThCLEVBQUUsRUFBRTtvQkFDdEMsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsZUFBZ0IsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7b0JBQ3JHLE9BQU8sRUFBRSxDQUFDO3dCQUNSLFVBQVUsRUFBRSxPQUFPLEtBQUssQ0FBQyxVQUFVLEVBQUU7d0JBQ3JDLE1BQU0sRUFBRSxNQUFNLElBQUksRUFBRTt3QkFDcEIsS0FBSyxFQUFFLENBQUMsTUFBTTtxQkFDZixDQUFDLENBQUM7Z0JBQ0wsQ0FBQyxDQUFDO2FBQ0wsQ0FBQztZQUNKLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQ1gsRUFDRCxTQUFTLENBQ1AsRUFJRyxDQUNKLENBQ0YsQ0FBQztRQUVGLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQ3JDLEdBQUcsQ0FDRCxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQ1YsQ0FBQyxPQUFPLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FHL0UsQ0FDTixFQUNELEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FDVixDQUFDO1FBRUYsSUFBSSxDQUFDLFVBQVUsR0FBRyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDekUsR0FBRyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDOUUsQ0FBQztRQUNGLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUNwQixhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7YUFDM0YsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDbEMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLGFBQWEsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUU7WUFDdkUsSUFBSSxXQUFXLEVBQUUsQ0FBQztnQkFDaEIsV0FBVyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsR0FDdEIsU0FBUztvQkFDVCxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUN4RCxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDbEQsSUFBSSxDQUFDO1lBQ1AsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUNMLENBQUM7UUFFRixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FDcEIsYUFBYSxDQUFDO1lBQ1osSUFBSSxDQUFDLGNBQWM7WUFDbkIsSUFBSSxDQUFDLE9BQU87WUFDWixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNuRSxJQUFJLENBQUMsV0FBVztZQUNoQixJQUFJLENBQUMsa0JBQWtCO1NBQ3hCLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLGFBQWEsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsRUFBRSxFQUFFO1lBQ3RFLE1BQU0sdUJBQXVCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FDM0MsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FDaEYsQ0FBQyxNQUFNLENBQUM7WUFDVCxNQUFNLG1CQUFtQixHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQztZQUU3RSxJQUFJLG1CQUFtQixJQUFJLHVCQUF1QixFQUFFLENBQUM7Z0JBQ25ELFVBQVUsQ0FBQyxHQUFHLEVBQUU7b0JBQ2QsTUFBTSxhQUFhLEdBQUcsQ0FBQyxHQUFHLE1BQU0sRUFBRSxHQUFHLGFBQWEsQ0FBQyxDQUFDO29CQUNwRCxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQztvQkFFbEMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQztvQkFDNUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQztvQkFFdEIsSUFBSSxDQUFDLEdBQUc7eUJBQ0wsWUFBWSxFQUFFO3lCQUNkLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssWUFBWSxJQUFJLENBQUMsQ0FBQzt5QkFDM0MsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7d0JBQ2pCLE1BQU0sV0FBVyxHQUFJLEtBQUssQ0FBQyxTQUFTLEVBQW1CLEVBQUUsV0FBVyxDQUFDO3dCQUNyRSxJQUFJLE9BQU8sV0FBVyxLQUFLLFVBQVUsRUFBRSxDQUFDOzRCQUNyQyxLQUFLLENBQUMsU0FBUyxFQUFtQixFQUFFLFdBQVcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQVksRUFBRSxFQUFFO2dDQUMxRSxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dDQUNqQyxJQUNFLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsZUFBZSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUM5RixDQUFDO29DQUNELE9BQU8sQ0FBQyxRQUFRLENBQ2QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FDeEYsQ0FBQztnQ0FDSixDQUFDOzRCQUNILENBQUMsQ0FBQyxDQUFDO3dCQUNMLENBQUM7b0JBQ0gsQ0FBQyxDQUFDLENBQUM7Z0JBQ1AsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ1YsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDO1lBQ3pDLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVPLG9DQUFvQyxDQUFDLE1BQW1CO1FBQzlELE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNuQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ3ZDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN4QixPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3BCLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxTQUFTLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO2dCQUMxRCxNQUFNLFNBQVMsR0FBRyxJQUFJLFVBQVUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUNoRCxNQUFNLFVBQVUsR0FBRyxJQUFJLGNBQWMsQ0FBQztvQkFDcEMsTUFBTSxFQUFFLElBQUksUUFBUSxDQUFDO3dCQUNuQixNQUFNOzRCQUNKLE9BQU8sU0FBUyxDQUFDO3dCQUNuQixDQUFDO3dCQUNELE9BQU8sRUFBRSxDQUFDO3dCQUNWLEtBQUssRUFBRSxJQUFJO3FCQUNaLENBQUM7aUJBQ0gsQ0FBQyxDQUFDO2dCQUNILE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDM0IsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRVEsY0FBYztRQUNyQixPQUFPLGFBQWEsQ0FBQztZQUNuQixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLENBQUM7WUFDaEQsSUFBSSxDQUFDLGNBQWM7WUFDbkIsSUFBSSxDQUFDLGdCQUFnQjtZQUNyQixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUM7U0FDaEQsQ0FBQyxDQUFDLElBQUksQ0FDTCxHQUFHLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxtQkFBbUIsRUFBRSxlQUFlLEVBQUUsV0FBVyxDQUFDLEVBQUUsRUFBRTtZQUN0RSxJQUFJLENBQUMsQ0FBQyxlQUFlLEVBQUUsQ0FBQztnQkFDdEIsT0FBTyxlQUFlLENBQUM7WUFDekIsQ0FBQztZQUNELE1BQU0sY0FBYyxHQUFHLG1CQUFtQjtpQkFDdkMsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7Z0JBQ2pCLE1BQU0sVUFBVSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssTUFBTSxDQUF3QixDQUFDO2dCQUN2RixPQUFPLENBQUMsVUFBVSxJQUFJLENBQUMsQ0FBQyxVQUFVLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFDLENBQUM7WUFDekcsQ0FBQyxDQUFDO2lCQUNELEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUMsQ0FBQztpQkFDekMsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDaEMsT0FBTyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUU7Z0JBQ25GLEtBQUssRUFBRSxFQUFFO2dCQUNULFNBQVMsRUFBRSxFQUFFO2dCQUNiLE1BQU0sRUFBRSxjQUFjLENBQUMsTUFBTTthQUM5QixDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsRUFDRixvQkFBb0IsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FDNUMsQ0FBQztJQUNKLENBQUM7SUFFRCxvQkFBb0IsQ0FDbEIsS0FBNEIsRUFDNUIsS0FBYSxFQUNiLFlBSWE7UUFFYixJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUM5QyxNQUFNLFFBQVEsR0FBRyxLQUEyRCxDQUFDO2dCQUM3RSxNQUFNLGlCQUFpQixHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO2dCQUVoRixJQUFJLGlCQUFpQixFQUFFLENBQUM7b0JBQ3RCLE1BQU0sYUFBYSxHQUFHLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUM1RixJQUFJLGFBQWEsRUFBRSxDQUFDO3dCQUNsQixNQUFNLGFBQWEsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7d0JBQ3ZFLElBQUksYUFBYSxFQUFFLENBQUM7NEJBQ2xCLEtBQUssQ0FBQyxLQUFLO2dDQUNULENBQUMsQ0FBQyxhQUFhLENBQUMsV0FBVyxJQUFJLGFBQWEsQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUM7b0NBQ2pFLENBQUMsQ0FBQyxhQUFhLENBQUMsV0FBVztvQ0FDM0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQzt3QkFDbEIsQ0FBQztvQkFDSCxDQUFDO2dCQUNILENBQUM7cUJBQU0sQ0FBQztvQkFDTixLQUFLLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUM7Z0JBQ3BDLENBQUM7WUFDSCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLDZCQUE2QixLQUFLLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxHQUFHLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDdkcsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsZ0JBQWdCLENBQ2QsV0FBc0IsRUFDdEIsVUFHTSxFQUFFO1FBRVIsSUFBSSxNQUFNLEdBQUcsV0FBVyxFQUFFLENBQUM7UUFDM0IsTUFBTSxhQUFhLEdBQUcsRUFBVyxDQUFDO1FBRWxDLG1CQUFtQjtRQUNuQixJQUFJLENBQUMsR0FBRzthQUNMLFlBQVksRUFBRTthQUNkLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQy9DLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUUsS0FBSyxDQUFDLFNBQVMsRUFBbUIsQ0FBQyxXQUFXLENBQUM7YUFDaEgsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDaEIsS0FBSyxDQUFDLFNBQVMsRUFBbUIsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFZLEVBQUUsRUFBRTtnQkFDekUsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDN0IsSUFBSSxDQUFDLFdBQVcsSUFBSSxXQUFXLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO29CQUNwRyxRQUFRLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQzt3QkFDNUIsS0FBSyxXQUFXLENBQUM7d0JBQ2pCLEtBQUssT0FBTyxDQUFDO3dCQUNiLEtBQUssUUFBUTs0QkFDWCxhQUFhLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDOzRCQUMzRCxNQUFNO3dCQUNSLEtBQUssTUFBTSxDQUFDO3dCQUNaLEtBQUssTUFBTTs0QkFDVCxhQUFhLENBQUMsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUM7NEJBQzlELE1BQU07d0JBQ1IsS0FBSyxTQUFTLENBQUM7d0JBQ2YsS0FBSyxZQUFZOzRCQUNmLGFBQWEsQ0FBQyxJQUFJLENBQUMsR0FBRyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUMsY0FBYyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQzs0QkFDckUsTUFBTTt3QkFDUixLQUFLLGVBQWU7NEJBQ2xCLGFBQWEsQ0FBQyxJQUFJLENBQUMsR0FBRyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUMsY0FBYyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQzs0QkFDNUUsTUFBTTt3QkFDUjs0QkFDRSxhQUFhLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO29CQUMxRCxDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUwsTUFBTSxjQUFjLEdBQUcsY0FBYyxDQUNuQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQzNGLENBQUM7UUFFRixJQUNFLGNBQWMsQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRO1lBQzlCLGNBQWMsQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRO1lBQzlCLGNBQWMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVE7WUFDL0IsY0FBYyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUMvQixDQUFDO1lBQ0QsTUFBTSxHQUFHLGNBQWMsQ0FBQztRQUMxQixDQUFDO1FBRUQsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzNHLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQy9FLENBQUM7SUFDSCxDQUFDO0lBRU8sdUJBQXVCLENBQUMsT0FBZ0IsRUFBRSxPQUFlLEVBQUUsS0FBNEI7UUFDN0YsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxPQUFPLENBQUMsSUFBSyxFQUFFLFVBQVUsRUFBRSxFQUFpQixFQUFZLENBQUM7UUFDekcsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3JFLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUNuRCxRQUFRLEVBQ1IsS0FBbUUsQ0FDcEUsQ0FBQztRQUNGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxrQkFBa0IsRUFBRSxDQUFDO0lBQ25ELENBQUM7SUFFTyxxQkFBcUIsQ0FDM0IsUUFBMkIsRUFDM0IsS0FBaUU7UUFFakUsT0FBTyxDQUNMLENBQUMsUUFBUSxJQUFJLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksQ0FDOUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLEtBQUssS0FBSyxFQUFFLGtCQUFrQixJQUFJLEVBQUUsQ0FDakUsSUFBSyxTQUFrQyxDQUN6QyxDQUFDO0lBQ0osQ0FBQztJQUVPLG9CQUFvQixDQUFDLFFBQWUsRUFBRSxLQUE0QjtRQUV4RSxNQUFNLGFBQWEsR0FBRyxLQUFlLENBQUM7UUFDdEMsT0FBTyxDQUNMLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxLQUFLLENBQUMsYUFBYSxFQUFFLFNBQVMsSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDaEcsU0FBa0MsQ0FDcEMsQ0FBQztJQUNKLENBQUM7SUFFRCxXQUFXLENBQUMsTUFBVztRQUNyQixJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7UUFDaEMsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDbkQsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQztRQUNuQyxDQUFDO0lBQ0gsQ0FBQztJQUVELGNBQWMsQ0FBQyxNQUFhO1FBQzFCLGFBQWE7UUFDYixJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQztJQUMxRCxDQUFDO0lBRUQsU0FBUyxDQUFDLE1BQWUsRUFBRSxLQUE0QjtRQUNyRCxLQUFLLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQztJQUNyQixDQUFDO0lBRUQsV0FBVyxDQUFDLE1BQW9DLEVBQUUsS0FBNEI7UUFDNUUsS0FBSyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7SUFDdkIsQ0FBQztJQUVELGtCQUFrQixDQUFDLE1BQWU7UUFDaEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEdBQUcsTUFBTSxDQUFDO1FBQ3ZDLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNsQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3hFLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxPQUFPLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN4RSxDQUFDO0lBQ0gsQ0FBQztJQUVELFFBQVEsQ0FBQyxLQUFpQjtRQUN4QixJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUM3QixJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDL0IsQ0FBQztRQUNELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsdUJBQXVCLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFcEgsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO1lBQzNCLFNBQVMsRUFBRSxFQUFFO1lBQ2IsS0FBSyxFQUFFLEtBQUssQ0FBQyxJQUFJO1lBQ2pCLEtBQUs7WUFDTCxJQUFJLEVBQUUsUUFBUTtTQUNmLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQywwQkFBMEIsQ0FBQyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUM7UUFFL0MsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQ2pCLGdCQUFnQixDQUFDLGdCQUFnQixDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsYUFBYSxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FDeEcsQ0FBQztRQUNGLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxlQUFlLENBQUMsTUFBVyxFQUFFLENBQVM7UUFDcEMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDN0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDO1FBQzFELENBQUM7UUFDRCxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO1FBQ3pDLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQzlDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBNEIsQ0FBQztZQUN0RSxPQUFPLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDO1lBQzlDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUM7UUFDbEMsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRSxDQUFDO1lBQy9DLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBNkIsQ0FBQztZQUN2RSxPQUFPLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDO1lBQzlDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDcEMsT0FBTyxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUMsU0FBUyxJQUFJLEVBQUUsQ0FBQztZQUM1QyxPQUFPLENBQUMsR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDO1FBQ2xDLENBQUM7UUFDRCxJQUFJLENBQUMsY0FBYyxFQUFFLFlBQVksRUFBRSxZQUFZLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUMzRixJQUFJLE9BQStCLENBQUM7WUFDcEMsT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBMkIsQ0FBQztZQUMvRCxPQUFPLENBQUMsR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDO1FBQ2xDLENBQUM7SUFDSCxDQUFDO0lBRUQsV0FBVyxDQUFDLE1BQVcsRUFBRSxLQUE0QixFQUFFLEtBQWlCO1FBQ3RFLE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDLFVBQVUsS0FBSyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDbEgsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDNUYsT0FBTyxJQUFJLENBQUMsMEJBQTBCLENBQUMsS0FBSyxDQUFDLEtBQU0sQ0FBQyxDQUFDO1FBQ3JELEtBQUssQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUM7SUFDakQsQ0FBQztJQUVELFlBQVk7UUFDVixJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUM5QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDO1lBQ3pCLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztZQUM3QixRQUFRLEVBQUU7Z0JBQ1IsR0FBRyxJQUFJLENBQUMsUUFBUTtnQkFDaEIsT0FBTyxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRTthQUMxRztTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCx3QkFBd0IsQ0FBQyxNQUFXLEVBQUUsS0FBNEI7UUFDaEUsYUFBYTtRQUNiLEtBQUssQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0lBQzNCLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxLQUE0QjtRQUM1QyxPQUFtRSxLQUFLLENBQUM7SUFDM0UsQ0FBQztJQUVELHlCQUF5QixDQUFDLE1BQVcsRUFBRSxLQUE0QjtRQUNqRSxNQUFNLE1BQU0sR0FBK0QsS0FBSyxDQUFDO1FBQ2pGLE1BQU0sQ0FBQyxrQkFBa0IsR0FBRyxNQUFNLENBQUM7SUFDckMsQ0FBQztJQUVELGFBQWEsQ0FBQyxNQUFnQixFQUFFLEtBQTRCO1FBQzFELE1BQU0sYUFBYSxHQUFHLEtBR1MsQ0FBQztRQUNoQyxhQUFhLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztJQUNqQyxDQUFDO0lBRUQsV0FBVyxDQUFDLENBQVMsRUFBRSxLQUE0QixFQUFFLEtBQWlCO1FBQ3BFLElBQUksQ0FBQyxXQUFXLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLGdCQUFnQixDQUNuQixLQUFLLENBQUMsSUFBSSxFQUNWLFNBQVMsRUFDVCxTQUFTLEVBQ1QsS0FBSyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQ3JELENBQUM7UUFDRixJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUM5QixJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssTUFBTSxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLElBQUksRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3BILENBQUM7SUFDSCxDQUFDO0lBRUQsU0FBUyxDQUNQLE1BQWEsRUFDYixLQU00QjtRQUU1QixhQUFhO1FBQ2IsS0FBSyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQztJQUMxQyxDQUFDO0lBRUQsaUJBQWlCLENBQUMsTUFBYSxFQUFFLEtBQWdDO1FBQy9ELGFBQWE7UUFDYixLQUFLLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDO0lBQ2xELENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxNQUFhLEVBQUUsS0FBeUQ7UUFDdkYsYUFBYTtRQUNiLEtBQUssQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUM7SUFDakQsQ0FBQztJQUVELGdCQUFnQixDQUFDLE1BQWUsRUFBRSxLQUF5RDtRQUN6RixLQUFLLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQztRQUMxQixJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3JDLENBQUM7SUFFRCxlQUFlLENBQUMsTUFBYSxFQUFFLEtBQStCO1FBQzVELGFBQWE7UUFDYixLQUFLLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDO0lBQ2hELENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxNQUFhLEVBQUUsS0FBK0I7UUFDN0QsYUFBYTtRQUNiLEtBQUssQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUM7SUFDNUMsQ0FBQztJQUVELE1BQU07UUFDSixjQUFjLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRVEsT0FBTztRQUNkLE9BQU8sY0FBYyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVELGVBQWUsQ0FBQyxLQUFrQyxFQUFFLE1BQWU7UUFDakUsS0FBSyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7UUFDekIsSUFBSSxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDcEIsS0FBSyxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7UUFDN0IsQ0FBQztJQUNILENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxLQUFrQyxFQUFFLE1BQWE7UUFDckUsYUFBYTtRQUNiLEtBQUssQ0FBQyxlQUFlLEdBQUcsTUFBTSxDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUM7SUFDdEQsQ0FBQztJQUVELGFBQWEsQ0FBQyxLQUE0QixFQUFFLE1BQWM7UUFDeEQsYUFBYTtRQUNiLEtBQUssQ0FBQyxPQUFPLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsWUFBWTtRQUNWLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRztZQUNkLENBQUMsQ0FBQyxFQUFFO1lBQ0osQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHO2lCQUNMLFlBQVksRUFBRTtpQkFDZCxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsWUFBWSxPQUFPLElBQUksS0FBSyxDQUFDLFNBQVMsRUFBRSxZQUFZLFFBQVEsQ0FBQztnQkFDakcsYUFBYTtpQkFDWixNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxRQUFRLEtBQUssSUFBSSxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVELGVBQWUsQ0FBQyxLQUFVO1FBQ3hCLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3pGLENBQUM7SUFFRCxjQUFjLENBQUMsTUFBVyxFQUFFLEtBQThCO1FBQ3hELEtBQUssQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxZQUFZLENBQUMsS0FBYTtRQUN4QixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQ3pELENBQUM7SUFFRCxrQkFBa0I7UUFDaEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUM7UUFDekMsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7SUFDN0IsQ0FBQztJQUVELGtCQUFrQjtRQUNoQixJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQztRQUN6QyxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztJQUM3QixDQUFDO0lBRUQsSUFBSSxTQUFTO1FBQ1gsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7YUFDL0QsU0FBUyxFQUFFO2FBQ1gsUUFBUSxFQUFFO2FBQ1YsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLFlBQVksQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFRCxJQUFJLGdCQUFnQjtRQUNsQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLE9BQU8sQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUFFRCxJQUFJLGVBQWU7UUFDakIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsS0FBSyxNQUFNLENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsS0FBaUIsRUFBRSxNQUE4QjtRQUNoRSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNqRyxJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN0QixNQUFNLFdBQVcsR0FDZixJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUVuRyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUMvQixJQUFJLFdBQVcsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDekQsS0FBSyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDMUIsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUUxQixNQUFNO2dCQUNKLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLGFBQWEsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQzlHLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLGFBQWEsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDdEcsQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7WUFFNUMsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLEtBQU0sQ0FBQztnQkFDaEUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEtBQUssTUFBTSxFQUFFLEtBQUssQ0FBQztnQkFDaEUsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsYUFBYSxFQUFFLE1BQU0sRUFBRSxLQUFNLENBQUMsQ0FBQztZQUM3QyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM5RixDQUFDO1FBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQsY0FBYyxDQUFDLEtBQTRCLEVBQUUsS0FBaUI7UUFDNUQsSUFBSSxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDeEIsT0FBTyxLQUFLLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3pELENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxlQUFlLENBQUMsTUFBVztRQUN6QixJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsR0FBRyxNQUFNLENBQUM7UUFDMUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDdEMsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQztRQUMxQyxDQUFDO0lBQ0gsQ0FBQztJQUVELElBQUksZUFBZTtRQUNqQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDMUcsQ0FBQztJQUVRLFdBQVc7UUFDbEIsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBRXBCLDRCQUE0QjtRQUM1QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUNsRCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2xDLGFBQWE7UUFDYixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUM7UUFDaEIsYUFBYTtRQUNiLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDO1FBQ2hCLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUVELFFBQVEsQ0FBQyxNQUE2QjtRQUNwQyxNQUFNLEtBQUssR0FBRyxNQUE0RCxDQUFDO1FBQzNFLElBQUksS0FBSyxDQUFDLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxDQUFDO1lBQ3ZDLE9BQU8sS0FBSyxDQUFDLG9CQUFvQixFQUFFLE1BQU0sQ0FBQztRQUM1QyxDQUFDO1FBQ0Qsa0dBQWtHO1FBQ2xHLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUM7UUFDOUUsSUFBSSx1QkFBdUIsR0FBRyxvQkFBb0IsQ0FBQyxNQUFPLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzdFLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1lBQzdCLHVCQUF1QixHQUFHLG9CQUFvQixDQUFDLE1BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLElBQUksR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUM7UUFDcEgsQ0FBQztRQUNELE9BQU8sdUJBQXVCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztJQUMvQyxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsTUFBVyxFQUFFLE1BQTZCO1FBQ3pELE1BQU0sS0FBSyxHQUFHLE1BQTRELENBQUM7UUFDM0UsSUFBSSxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1lBQ2hDLEtBQUssQ0FBQyxvQkFBb0IsR0FBRyxFQUFFLENBQUM7UUFDbEMsQ0FBQztRQUNELEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0lBQzdDLENBQUM7SUFFRCxZQUFZLENBQUMsTUFBNkI7UUFDeEMsT0FBTyxNQUE0RCxDQUFDO0lBQ3RFLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxNQUE2QjtRQUM3QyxNQUFNLEtBQUssR0FBRyxNQUE0RCxDQUFDO1FBQzNFLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUM7UUFDOUUsSUFBSSx1QkFBdUIsR0FBRyxvQkFBb0IsQ0FBQyxNQUFPLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzdFLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1lBQzdCLHVCQUF1QixHQUFHLG9CQUFvQixDQUFDLE1BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLElBQUksR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUM7UUFDcEgsQ0FBQztRQUNELE9BQU8sdUJBQXVCLENBQUMsTUFBTSxDQUFDO0lBQ3hDLENBQUM7SUFFRCxrQkFBa0I7UUFDaEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBRUQsaUJBQWlCLENBQUMsTUFBVztRQUMzQixJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7UUFDaEMsSUFBSSxNQUFNLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNyRSxDQUFDO0lBQ0gsQ0FBQztJQUVELFVBQVU7UUFDUixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRU8sZ0JBQWdCO1FBQ3RCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUM3RCxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDO1lBQ3BDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNoRCxDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDckQsSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDWCxNQUFNLENBQUMsWUFBWSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLHdCQUF3QixDQUFDLENBQUMsQ0FBQztnQkFDN0YsTUFBTSxDQUFDLFlBQVksQ0FBQyx1QkFBdUIsRUFBRSxNQUFNLENBQUMsQ0FBQztnQkFDckQsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLFNBQVMsQ0FBQyxDQUFDO2dCQUM3QyxNQUFNLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2xDLENBQUM7WUFDRCxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQ3ZELElBQUksT0FBTyxFQUFFLENBQUM7Z0JBQ1osT0FBTyxDQUFDLFlBQVksQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLENBQUM7Z0JBQy9GLE9BQU8sQ0FBQyxZQUFZLENBQUMsdUJBQXVCLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBQ3RELE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsQ0FBQztnQkFDOUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNuQyxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxlQUFlLENBQUMsTUFBK0U7UUFDN0YsSUFBSSxDQUFDLGtCQUFrQixDQUFDLG9CQUFvQixDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNyRSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUVPLFdBQVcsQ0FBQyxNQUFtQjtRQUNyQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDdkIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDNUIsSUFBSSxLQUFLLFlBQVksV0FBVyxJQUFLLEtBQW1DLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQztnQkFDcEYsS0FBbUMsQ0FBQyxTQUFTLEVBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDMUQsS0FBSyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUM3QixDQUFDO1lBQ0QsSUFBSSxLQUFLLFlBQVksU0FBUyxJQUFLLEtBQXdCLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQztnQkFDdkUsS0FBd0IsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDOUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUM3QixDQUFDO1lBQ0QsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2xCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGFBQWE7UUFDWCxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FDakIsZ0JBQWdCLENBQUMsYUFBYSxDQUFDO1lBQzdCLElBQUksRUFDRixJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLHFDQUFxQyxDQUFDO2dCQUNwRSxHQUFHO2dCQUNILENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFO1NBQzNDLENBQUMsQ0FDSCxDQUFDO1FBRUYsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUM1RCxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxJQUFZLEVBQUUsT0FBZ0IsRUFBRSxXQUFxQixFQUFFLGFBQXdCO1FBQzlGLElBQUksT0FBTyxLQUFLLFNBQVMsSUFBSSxXQUFXLEtBQUssU0FBUyxJQUFJLGFBQWEsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUN0RixJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FDakIsZ0JBQWdCLENBQUMsZ0JBQWdCLENBQUM7Z0JBQ2hDLElBQUk7Z0JBQ0osT0FBTztnQkFDUCxXQUFXO2dCQUNYLGFBQWEsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWE7YUFDaEUsQ0FBQyxDQUNILENBQUM7UUFDSixDQUFDO2FBQU0sSUFBSSxJQUFJLEtBQUssT0FBTyxFQUFFLENBQUM7WUFDNUIsSUFBSSxJQUFJLEtBQUssbUJBQW1CLEVBQUUsQ0FBQztnQkFDakMsTUFBTSxnQkFBZ0IsR0FDcEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxLQUFLLG1CQUFtQixDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUM1RyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FDakIsZ0JBQWdCLENBQUMsYUFBYSxDQUFDO29CQUM3QixJQUFJLEVBQUUsT0FBTztvQkFDYixXQUFXO29CQUNYLGFBQWEsRUFBRSxhQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQzFFLENBQUMsQ0FDSCxDQUFDO2dCQUNGLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUNqQixnQkFBZ0IsQ0FBQyxnQkFBZ0IsQ0FBQztvQkFDaEMsSUFBSSxFQUFFLG1CQUFtQjtvQkFDekIsT0FBTyxFQUFFLFNBQVM7b0JBQ2xCLFdBQVcsRUFBRSxTQUFTO29CQUN0QixhQUFhLEVBQUUsYUFBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQzNFLENBQUMsQ0FDSCxDQUFDO1lBQ0osQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLGdCQUFnQixDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3hHLENBQUM7WUFDRCwwQkFBMEI7WUFDMUIsSUFBSSxPQUFPLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ3JELElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQzlELEtBQUssQ0FBQyxLQUFLLEtBQUssSUFBSTtvQkFDbEIsQ0FBQyxDQUFDO3dCQUNFLEdBQUcsS0FBSzt3QkFDUixLQUFLLEVBQUUsT0FBTztxQkFDZjtvQkFDSCxDQUFDLENBQUMsS0FBSyxDQUNWLENBQUM7WUFDSixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxNQUFhLEVBQUUsSUFBWTtRQUMvQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFHLE1BQU0sQ0FBQyxhQUFrQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2pGLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxJQUFZO1FBQzNCLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLHlCQUF5QixDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzFFLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMsQ0FBQztJQUM3RixDQUFDO0lBRUQsSUFBSSxDQUFDLEtBQTJDLEVBQUUsS0FBaUI7UUFDakUsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUE2QixDQUFDO1FBQzVELElBQUksS0FBSyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsS0FBSyxLQUFLLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ3RELElBQUksQ0FBQyxzQkFBc0IsQ0FDekIsVUFBVSxFQUNWLEtBQUssQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsa0JBQWtCLENBQUMsSUFBSSxtQkFBbUIsQ0FDOUYsQ0FBQztRQUNKLENBQUM7UUFDRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQTZCLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDL0YsQ0FBQztJQUVELHNCQUFzQixDQUFDLFVBQWlDLEVBQUUsUUFBZ0I7UUFDeEUsMkJBQTJCO1FBQzNCLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUNqQixnQkFBZ0IsQ0FBQyxnQkFBZ0IsQ0FBQztZQUNoQyxJQUFJLEVBQUUsVUFBVSxDQUFDLEtBQU07WUFDdkIsYUFBYSxFQUFFLElBQUksQ0FBQyxXQUFXO2dCQUM3QixFQUFFLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxVQUFVLENBQUMsS0FBTSxDQUFDO2dCQUNuRCxFQUFFLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssS0FBSyxVQUFVLENBQUMsS0FBSyxDQUFDO1NBQ2hFLENBQUMsQ0FDSCxDQUFDO1FBRUYsc0JBQXNCO1FBQ3RCLFVBQVUsQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDO1FBQzVCLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUNqQixnQkFBZ0IsQ0FBQyxnQkFBZ0IsQ0FBQztZQUNoQyxJQUFJLEVBQUUsUUFBUSxJQUFJLG1CQUFtQjtZQUNyQyxhQUFhLEVBQUUsVUFBVSxDQUFDLEtBQU07U0FDakMsQ0FBQyxDQUNILENBQUM7UUFDRixJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBRUQsa0JBQWtCLENBQUMsZ0JBQXdCLEVBQUUsVUFBaUMsRUFBRSxLQUFpQjtRQUMvRixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDNUIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxLQUFLLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMxRix5QkFBeUI7WUFDekIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxLQUFLLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNqRyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLEtBQUssV0FBVyxDQUFDLGdCQUFnQixDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFbEgsSUFBSSxRQUFRLEdBQUcsT0FBTyxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDN0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLFVBQVUsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUMvRSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUMxQixDQUFDO0lBQ0gsQ0FBQztJQUVELGVBQWUsQ0FBQyxLQUFpQjtRQUMvQixJQUFJLENBQUMsMEJBQTBCLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLDBCQUEwQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzRixNQUFNLGNBQWMsR0FDbEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxLQUFLLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFM0csTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUM3RCxJQUFJLGNBQWMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO2dCQUNoQyxJQUFJLENBQUMsMEJBQTBCLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLDBCQUEwQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6RixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxLQUE0QixFQUFFLEtBQWlCO1FBQy9ELElBQUksQ0FBQywwQkFBMEIsQ0FBQyxLQUFLLENBQUMsS0FBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsMEJBQTBCLENBQUMsS0FBSyxDQUFDLEtBQU0sQ0FBQyxDQUFDO1FBQy9GLElBQUksSUFBSSxDQUFDLDBCQUEwQixDQUFDLEtBQUssQ0FBQyxLQUFNLENBQUM7WUFBRSxJQUFJLENBQUMsMEJBQTBCLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztRQUN0RyxJQUFJLEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDNUYsSUFBSSxDQUFDLDBCQUEwQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDdEQsQ0FBQztJQUNILENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDZCxJQUFJLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ2xDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssS0FBSyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDM0YsSUFBSSxXQUFXLEVBQUUsQ0FBQztnQkFDaEIsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztZQUMxRCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQseUJBQXlCLENBQUMsS0FBaUI7UUFDekMsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLEtBQUssS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlFLENBQUM7SUFFRCxzQkFBc0I7UUFDcEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNqQyxJQUNFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7Z0JBQzFFLEtBQUssQ0FBQyxJQUFJLEtBQUssbUJBQW1CLEVBQ2xDLENBQUM7Z0JBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQ2pCLGdCQUFnQixDQUFDLGdCQUFnQixDQUFDO29CQUNoQyxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUk7aUJBQ2pCLENBQUMsQ0FDSCxDQUFDO1lBQ0osQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs4R0FsbURVLGtCQUFrQixtUUE0R1AsaUJBQWlCO2tHQTVHNUIsa0JBQWtCLG1UQU1NLGdCQUFnQixtSEFDVixXQUFXLHFKQy9IdEQsd3ovQkFrckJBOzsyRkQxakJhLGtCQUFrQjtrQkFKOUIsU0FBUzsrQkFDRSxnQkFBZ0I7OzBCQStHdkIsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxpQkFBaUI7eUNBeEdsQixNQUFNO3NCQUExQixTQUFTO3VCQUFDLFFBQVE7Z0JBQ0MsS0FBSztzQkFBeEIsU0FBUzt1QkFBQyxPQUFPO2dCQUNxQyxZQUFZO3NCQUFsRSxTQUFTO3VCQUFDLGNBQWMsRUFBRSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtnQkFDRyxrQkFBa0I7c0JBQXpFLFNBQVM7dUJBQUMsb0JBQW9CLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFO2dCQUMxQixhQUFhO3NCQUF4QyxTQUFTO3VCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEluamVjdCxcbiAgSW5qZWN0b3IsXG4gIE9uRGVzdHJveSxcbiAgT3B0aW9uYWwsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdDb250YWluZXJSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdG9yZSB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCB7XG4gIEFnZ3JlZ2F0aW9uUmVzdWx0LFxuICBBdHRyaWJ1dGUsXG4gIEJhc2VXaWRnZXRNYXBMYXllck9wdGlvbnMsXG4gIENoYXJ0QWdncmVnYXRlZFdpZGdldE9wdGlvbnMsXG4gIENsYXNzLFxuICBDbGFzc1NlbGVjdG9ycyxcbiAgQ29uZmlnU2VsZWN0b3JzLFxuICBEYXNoYm9hcmRBY3Rpb25zLFxuICBEYXNoYm9hcmRTZWxlY3RvcnMsXG4gIERhdGFzZXQsXG4gIERhdGFTb3VyY2VTZWxlY3RvcnMsXG4gIERhdGFzb3VyY2VVdGlscyxcbiAgRGF0YVdpZGdldENvbXBvbmVudCxcbiAgRmllbGQsXG4gIEZpZWxkU2VsZWN0b3JzLFxuICBGaWx0ZXJDb250ZXh0LFxuICBHZW9NZXRhZGF0YSxcbiAgR2VvbWV0cmljRmllbGRUeXBlcyxcbiAgR2V0Q2FwYWJpbGl0aWVzUmVzcG9uc2UsXG4gIEl0ZW1VdGlscyxcbiAgTGF5ZXJHcm91cCxcbiAgTWFwQXV0b0xheWVyT3B0aW9ucyxcbiAgTWFwRmVhdHVyZUxheWVyT3B0aW9ucyxcbiAgTWFwR2VvU2VydmVyTGF5ZXJPcHRpb25zLFxuICBNYXBSYXN0ZXJUaWxlTGF5ZXJPcHRpb25zLFxuICBNYXBWZWN0b3JUaWxlTGF5ZXJPcHRpb25zLFxuICBNYXBXaWRnZXRCdWJibGVMYXllck9wdGlvbnMsXG4gIE1hcFdpZGdldEhlYXRNYXBMYXllck9wdGlvbnMsXG4gIE1hcFdpZGdldExheWVyT3B0aW9ucyxcbiAgTWFwV2lkZ2V0TWFya2VyTGF5ZXJPcHRpb25zLFxuICBNYXBXaWRnZXRPcHRpb25zLFxuICBNYXBXTVNMYXllckxheWVyT3B0aW9ucyxcbiAgTWFwV01UU0xheWVyTGF5ZXJPcHRpb25zLFxuICBOYW1lZFF1ZXJ5VHlwZXMsXG4gIE9wZXJhdGlvbixcbiAgUFJZX0dFT0FVVEhfVE9LRU4sXG4gIFByeUFnZ3JlZ2F0aW9uU2VydmljZSxcbiAgUHJ5R2VvQXV0aFNlcnZpY2UsXG4gIFByeUkxOG5TZXJ2aWNlLFxuICBSZXN1bHRzZXRVdGlscyxcbiAgU3ltYm9sU2VydmljZSxcbiAgVG9vbHRpcEZhY3RvcnlTZXJ2aWNlLFxuICBUb29sdGlwTW9kZSxcbiAgV0lER0VUX0hFQURFUl9IRUlHSFQsXG4gIHdpZGdldE1hcENvbmZpZ1xufSBmcm9tICdAcHJvdm9seS9kYXNoYm9hcmQnO1xuaW1wb3J0IGVxdWFsIGZyb20gJ2Zhc3QtZGVlcC1lcXVhbC9lczYnO1xuaW1wb3J0IHsgRmVhdHVyZSwgTWFwLCBWaWV3IH0gZnJvbSAnb2wnO1xuaW1wb3J0IHsgQ29vcmRpbmF0ZSB9IGZyb20gJ29sL2Nvb3JkaW5hdGUnO1xuaW1wb3J0IHsgYm91bmRpbmdFeHRlbnQsIGNyZWF0ZUVtcHR5IH0gZnJvbSAnb2wvZXh0ZW50JztcbmltcG9ydCB7IENpcmNsZSwgR2VvbWV0cnksIFBvaW50IH0gZnJvbSAnb2wvZ2VvbSc7XG5pbXBvcnQgeyBIZWF0bWFwLCBMYXllciwgVGlsZSB9IGZyb20gJ29sL2xheWVyJztcbmltcG9ydCBCYXNlTGF5ZXIgZnJvbSAnb2wvbGF5ZXIvQmFzZSc7XG5pbXBvcnQgVmVjdG9yTGF5ZXIgZnJvbSAnb2wvbGF5ZXIvVmVjdG9yJztcbmltcG9ydCB7IGZyb21Mb25MYXQgfSBmcm9tICdvbC9wcm9qJztcbmltcG9ydCB7IHJlZ2lzdGVyIH0gZnJvbSAnb2wvcHJvai9wcm9qNCc7XG5pbXBvcnQgeyBEYXRhVGlsZSwgSW1hZ2VXTVMsIFRpbGVXTVMgfSBmcm9tICdvbC9zb3VyY2UnO1xuaW1wb3J0IFZlY3RvclNvdXJjZSBmcm9tICdvbC9zb3VyY2UvVmVjdG9yJztcbmltcG9ydCB7IFN0eWxlIH0gZnJvbSAnb2wvc3R5bGUnO1xuaW1wb3J0IHByb2o0IGZyb20gJ3Byb2o0JztcbmltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgY2F0Y2hFcnJvcixcbiAgY29tYmluZUxhdGVzdCxcbiAgZGVib3VuY2VUaW1lLFxuICBkZWxheSxcbiAgZGlzdGluY3RVbnRpbENoYW5nZWQsXG4gIGZpbHRlcixcbiAgZnJvbSxcbiAgbWFwLFxuICBtZXJnZU1hcCxcbiAgT2JzZXJ2YWJsZSxcbiAgb2YsXG4gIHN0YXJ0V2l0aCxcbiAgc3dpdGNoTWFwLFxuICB3aXRoTGF0ZXN0RnJvbVxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEludGVyYWN0aW9uTWFuYWdlciB9IGZyb20gJy4uL2ludGVyYWN0aW9uL2ludGVyYWN0aW9uLW1hbmFnZXIuY2xhc3MnO1xuaW1wb3J0IHsgQ3FsVXRpbHMgfSBmcm9tICcuLi91dGlscy9jcWwtdXRpbHMuY2xhc3MnO1xuaW1wb3J0IHsgWE1MVXRpbHMgfSBmcm9tICcuLi91dGlscy94bWwtdXRpbHMuY2xhc3MnO1xuaW1wb3J0IHsgV2lkZ2V0TWFwTGF5ZXJTZXJ2aWNlIH0gZnJvbSAnLi93aWRnZXQtbWFwLWxheWVyLnNlcnZpY2UnO1xuaW1wb3J0IE1hcGJveFZlY3RvckxheWVyIGZyb20gJ29sL2xheWVyL01hcGJveFZlY3Rvcic7XG5pbXBvcnQgeyBXaWRnZXRNYXBVdGlscyB9IGZyb20gJy4uL3V0aWxzL3dpZGdldC1tYXAudXRpbHMnO1xuaW1wb3J0IHsgTGF5ZXJTbGlkZXIgfSBmcm9tICcuLi9pbnRlcmFjdGlvbi9sYXllci1zbGlkZXIuY2xhc3MnO1xuaW1wb3J0IFRpbGVMYXllciBmcm9tICdvbC9sYXllci9UaWxlJztcbmltcG9ydCBXZWJHTFRpbGVMYXllciBmcm9tICdvbC9sYXllci9XZWJHTFRpbGUnO1xuaW1wb3J0IHsgQXR0cmlidXRpb24sIGRlZmF1bHRzIH0gZnJvbSAnb2wvY29udHJvbCc7XG5pbXBvcnQgVmVjdG9yVGlsZUxheWVyIGZyb20gJ29sL2xheWVyL1ZlY3RvclRpbGUnO1xuaW1wb3J0IHsgQ2RrRHJhZ0Ryb3AgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcbmltcG9ydCB7IFRvb2x0aXBNYW5hZ2VyIH0gZnJvbSAnLi4vaW50ZXJhY3Rpb24vdG9vbHRpcC1tYW5hZ2VyLmNsYXNzJztcblxuZXhwb3J0IGNvbnN0IFRPT0xUSVBfUEFERElORyA9IDE1O1xuZXhwb3J0IGNvbnN0IE5PTl9NQU5EQVRPUllfRklUX0xBWUVSX1RZUEVTID0gWyd3bXMnLCAnZ2Vvc2VydmVyJ107XG5leHBvcnQgY29uc3QgREVGQVVMVF9MQVlFUl9HUk9VUCA9ICdERUZBVUxUJztcblxuLy8gRGVmaW5lIExhbWJlcnQgUHJvamVjdGlvblxucHJvajQuZGVmcyhcbiAgJ0VQU0c6MjE1NCcsXG4gICcrcHJvaj1sY2MgK2xhdF8wPTQ2LjUgK2xvbl8wPTMgK2xhdF8xPTQ5ICtsYXRfMj00NCAreF8wPTcwMDAwMCAreV8wPTY2MDAwMDAgK2VsbHBzPUdSUzgwICt0b3dnczg0PTAsMCwwLDAsMCwwLDAgK3VuaXRzPW0gK25vX2RlZnMgK3R5cGU9Y3JzJ1xuKTtcbnJlZ2lzdGVyKHByb2o0KTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncHJ5LXdpZGdldC1tYXAnLFxuICB0ZW1wbGF0ZVVybDogJy4vd2lkZ2V0LW1hcC5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgV2lkZ2V0TWFwQ29tcG9uZW50IGV4dGVuZHMgRGF0YVdpZGdldENvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gIHN0YXRpYyBpZENvdW50ZXIgPSAwO1xuICBpZCA9IGAke1dpZGdldE1hcENvbXBvbmVudC5pZENvdW50ZXIrK31gO1xuICBtYXBVcmwkOiBPYnNlcnZhYmxlPHN0cmluZz47XG4gIEBWaWV3Q2hpbGQoJ21hcFJlZicpIG1hcFJlZiE6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ3BvcHVwJykgcG9wdXAhOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdwb3B1cENvbnRlbnQnLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSkgcG9wdXBDb250ZW50ITogVmlld0NvbnRhaW5lclJlZjtcbiAgQFZpZXdDaGlsZCgnZXhwb3J0VHlwZVRlbXBsYXRlJywgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KSBleHBvcnRUeXBlVGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBAVmlld0NoaWxkKCdzbGlkZXJFbGVtZW50Jykgc2xpZGVyRWxlbWVudCE6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XG4gIG9wdGlvbnMkOiBPYnNlcnZhYmxlPE1hcFdpZGdldE9wdGlvbnM+O1xuICBsYXllclR5cGVzID0gdGhpcy53aWRnZXRNYXBMYXllclNlcnZpY2UuaW1wbGVtZW50YXRpb25MaXN0XG4gICAgLmZpbHRlcigodHlwZSkgPT4gdHlwZSAhPT0gJ2F1dG8nKVxuICAgIC5zb3J0KChhLCBiKSA9PlxuICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlXG4gICAgICAgIC5pbnN0YW50KCdAcHJ5LndpZGdldC5tYXAubGF5ZXJUeXBlLicgKyBhKVxuICAgICAgICAubG9jYWxlQ29tcGFyZSh0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnQHByeS53aWRnZXQubWFwLmxheWVyVHlwZS4nICsgYikpXG4gICAgKTtcbiAgb3B0aW9uc0NvcHk6IE1hcFdpZGdldE9wdGlvbnMgPSB7fSBhcyBNYXBXaWRnZXRPcHRpb25zO1xuICBjbGFzc2VzJDogT2JzZXJ2YWJsZTxDbGFzc1tdPjtcbiAgZmllbGRzJDogT2JzZXJ2YWJsZTxGaWVsZFtdPjtcbiAgc2VsZWN0ZWRJZHMkOiBPYnNlcnZhYmxlPHN0cmluZ1tdPjtcbiAgYm90dG9tTGVmdCQ6IE9ic2VydmFibGU8c3RyaW5nPjtcbiAgbGF5ZXJzJCE6IE9ic2VydmFibGU8QmFzZUxheWVyW10+O1xuICBtYXAhOiBNYXA7XG4gIGFkZGl0aW9uYWxMYXllcnMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxWZWN0b3JMYXllcjxWZWN0b3JTb3VyY2U8R2VvbWV0cnk+PltdPihbXSk7XG4gIHN0eWxlcyQ6IE9ic2VydmFibGU8XG4gICAge1xuICAgICAgaWRlbnRpZmllcjogc3RyaW5nO1xuICAgICAgbGFiZWw6IHN0cmluZztcbiAgICB9W11cbiAgPjtcbiAgV0lER0VUX0hFQURFUl9IRUlHSFQgPSBXSURHRVRfSEVBREVSX0hFSUdIVDtcbiAgaSA9IDA7XG4gIGl0ZW1TdHlsZXMkITogT2JzZXJ2YWJsZTx7XG4gICAgW2lkOiBzdHJpbmddOiB7XG4gICAgICBjbGFzc2ljOiBTdHlsZTtcbiAgICAgIGJvcmRlcmVkOiBTdHlsZTtcbiAgICB9O1xuICB9PjtcbiAgaGVpZ2h0JDogT2JzZXJ2YWJsZTxudW1iZXI+O1xuICBhY3Rpb25zJCA9IHdpZGdldE1hcENvbmZpZy5hY3Rpb25zJDtcbiAgZ2VvU2VydmVyTGF5ZXJEZXNjcmlwdGlvbnMkOiBPYnNlcnZhYmxlPE1hcEdlb1NlcnZlckxheWVyT3B0aW9uc1tdPjtcbiAgbGVnZW5kVGFiT3BlbiA9IGZhbHNlO1xuICBsYXllcnNUYWJPcGVuID0gZmFsc2U7XG4gIGxlZ2VuZFRhYiA9IDA7XG4gIGxlZ2VuZExheWVycyQhOiBPYnNlcnZhYmxlPChNYXBHZW9TZXJ2ZXJMYXllck9wdGlvbnMgfCBNYXBXTVNMYXllckxheWVyT3B0aW9ucylbXT47XG4gIGxlZ2VuZFRvcCQ6IE9ic2VydmFibGU8bnVtYmVyPjtcbiAgbGF5ZXJzVG9wJCE6IE9ic2VydmFibGU8bnVtYmVyPjtcbiAgbGVnZW5kSGVpZ2h0JDogT2JzZXJ2YWJsZTxudW1iZXI+O1xuICBpbWFnZU5vdFByb3ZpZGVkOiBib29sZWFuW10gPSBbXTtcbiAgYmFzaWNBY3Rpb25zJDogT2JzZXJ2YWJsZTwoJ2NsaWNrJyB8ICdsYXNzbycgfCAncmVjdGFuZ2xlJyB8ICd6b29tJyB8ICdtb3ZlJyB8ICdleHBvcnQnIHwgJ3VwbG9hZCcpW10+O1xuICB6b29tQW5kQ2VudGVyJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8e1xuICAgIHpvb20/OiB7XG4gICAgICBzdGFydDogbnVtYmVyO1xuICAgICAgbWluOiBudW1iZXI7XG4gICAgICBtYXg6IG51bWJlcjtcbiAgICB9O1xuICAgIGNlbnRlcj86IG51bWJlcltdO1xuICB9Pih7fSk7XG4gIG1hcFN0eWxlVXJsJCE6IE9ic2VydmFibGU8c3RyaW5nIHwgbnVsbD47XG4gIGludGVyYWN0aW9uTWFuYWdlcjogSW50ZXJhY3Rpb25NYW5hZ2VyID0gbmV3IEludGVyYWN0aW9uTWFuYWdlcigpO1xuICB0b29sdGlwTWFuYWdlcjogVG9vbHRpcE1hbmFnZXIgPSBuZXcgVG9vbHRpcE1hbmFnZXIoKTtcbiAgbWFwU3R5bGVMYXllciQhOiBPYnNlcnZhYmxlPChWZWN0b3JUaWxlTGF5ZXIgfCBUaWxlTGF5ZXI8YW55PilbXT47XG4gIFNUWUxFX0ZST01fVVJMID0gJ191cmwnO1xuICBOT19TVFlMRSA9ICdub25lJztcbiAgd21zQ2FwYWJpbGl0aWVzJDogT2JzZXJ2YWJsZTxcbiAgICB8IHtcbiAgICAgICAgW3A6IHN0cmluZ106IEdldENhcGFiaWxpdGllc1Jlc3BvbnNlIHwgbnVsbDtcbiAgICAgIH1cbiAgICB8IHVuZGVmaW5lZFxuICA+O1xuICBhdXRvRGF0YXNldExheWVycyQ6IE9ic2VydmFibGU8TWFwQXV0b0xheWVyT3B0aW9uc1tdPjtcbiAgZml0RXh0ZW50cyQhOiBPYnNlcnZhYmxlPFxuICAgIHtcbiAgICAgIGRhdGFzb3VyY2U6IHN0cmluZztcbiAgICAgIGV4dGVudDogQ29vcmRpbmF0ZVtdO1xuICAgICAgZXJyb3I6IGJvb2xlYW47XG4gICAgfVtdXG4gID47XG4gIGRhdGFzb3VyY2VGaWx0ZXJzJDogT2JzZXJ2YWJsZTxhbnk+O1xuICB1c2VkQ2xhc3NlcyQ6IE9ic2VydmFibGU8YW55PjtcbiAgbGF5ZXJTbGlkZXIgPSBuZXcgTGF5ZXJTbGlkZXIoKTtcbiAgaGFzU2xpZGVMYXllciQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIHNsaWRlczogeyBpZDogdW5kZWZpbmVkIHwgc3RyaW5nOyBsYWJlbDogc3RyaW5nIH1bXTtcbiAgcG9zc2libGVTdHlsZXM6IHtcbiAgICBbcDogc3RyaW5nXToge1xuICAgICAgbGF5ZXJzOiB7IFtwOiBzdHJpbmddOiB7IHBhcmFtOiBzdHJpbmc7IHN0eWxlczogeyBpZDogc3RyaW5nOyBsYWJlbDogc3RyaW5nIH1bXSB9IH0gfCBudWxsO1xuICAgICAgdXJsOiBzdHJpbmc7XG4gICAgfTtcbiAgfSA9IHt9O1xuICBhdHRyaWJ1dGlvbnMgPSBuZXcgQXR0cmlidXRpb24oKTtcbiAgYWN0aW9uTWVudU9wZW4kID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG4gIGF0dHJpYnV0aW9ucyQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIG9sWm9vbUVsZW1lbnQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxIVE1MRGl2RWxlbWVudCB8IG51bGw+KG51bGwpO1xuICBwcmV2aW91c0xheWVyczogQmFzZUxheWVyW10gPSBbXTtcbiAgbGF5ZXJHcm91cHMkOiBPYnNlcnZhYmxlPExheWVyR3JvdXBbXT47XG4gIGxheWVyR3JvdXBzOiBMYXllckdyb3VwW10gPSBbXTtcbiAgbGF5ZXJTZXR0aW5nc0V4cGFuZGVkU3RhdGU6IHsgW2tleTogc3RyaW5nXTogYm9vbGVhbiB9ID0ge307XG5cbiAgY29uc3RydWN0b3IoXG4gICAgc3RvcmU6IFN0b3JlPGFueT4sXG4gICAgcHVibGljIHRyYW5zbGF0ZVNlcnZpY2U6IFByeUkxOG5TZXJ2aWNlLFxuICAgIHByaXZhdGUgdG9vbHRpcEZhY3RvcnlTZXJ2aWNlOiBUb29sdGlwRmFjdG9yeVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzeW1ib2xTZXJ2aWNlOiBTeW1ib2xTZXJ2aWNlLFxuICAgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIHByaXZhdGUgd2lkZ2V0TWFwTGF5ZXJTZXJ2aWNlOiBXaWRnZXRNYXBMYXllclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBwcnlBZ2dyZWdhdGlvblNlcnZpY2U6IFByeUFnZ3JlZ2F0aW9uU2VydmljZSxcbiAgICBlbDogRWxlbWVudFJlZixcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KFBSWV9HRU9BVVRIX1RPS0VOKSBwcml2YXRlIGdlb0F1dGhTZXJ2aWNlOiBQcnlHZW9BdXRoU2VydmljZVxuICApIHtcbiAgICBzdXBlcihzdG9yZSwgZWwpO1xuXG4gICAgdGhpcy5nZXRPbFpvb21FbGVtZW50KCk7XG5cbiAgICB0aGlzLnNsaWRlcyA9IFtcbiAgICAgIHsgaWQ6ICdhbGwnLCBsYWJlbDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ0Bwcnkud2lkZ2V0Lm1hcC5zbGlkZS5hbGwnKSB9LFxuICAgICAgeyBpZDogJ2xlZnQnLCBsYWJlbDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ0Bwcnkud2lkZ2V0Lm1hcC5zbGlkZS5sZWZ0JykgfSxcbiAgICAgIHsgaWQ6ICdyaWdodCcsIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnQHByeS53aWRnZXQubWFwLnNsaWRlLnJpZ2h0JykgfVxuICAgIF07XG5cbiAgICB0aGlzLndpZGdldE1hcExheWVyU2VydmljZS53aXRoR2VvQXV0aCh0aGlzLmdlb0F1dGhTZXJ2aWNlKTtcblxuICAgIHRoaXMuYmFzaWNBY3Rpb25zJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5hY3Rpb25zJCxcbiAgICAgIHRoaXMuYWN0aW9uTWVudU9wZW4kLFxuICAgICAgdGhpcy5pbnRlcmFjdGlvbk1hbmFnZXIuc2VsZWN0aW9uSW50ZXJhY3Rpb24uc2VsZWN0aW9uVHlwZSRcbiAgICBdKS5waXBlKFxuICAgICAgbWFwKChbYWN0aW9ucywgbWVudU9wZW4sIHNlbGVjdGlvblR5cGVdKSA9PlxuICAgICAgICBtZW51T3BlblxuICAgICAgICAgID8gYWN0aW9ucy5maWx0ZXIoKGFjdGlvbikgPT4gYWN0aW9uICE9PSAnZXhwb3J0JyAmJiBhY3Rpb24gIT09ICd1cGxvYWQnKVxuICAgICAgICAgIDogYWN0aW9uc1xuICAgICAgICAgICAgICAuZmlsdGVyKChhY3Rpb24pID0+IGFjdGlvbiAhPT0gJ2V4cG9ydCcgJiYgYWN0aW9uICE9PSAndXBsb2FkJylcbiAgICAgICAgICAgICAgLmZpbHRlcigoYWN0aW9uKSA9PiBzZWxlY3Rpb25UeXBlID09PSBhY3Rpb24pXG4gICAgICApXG4gICAgKTtcblxuICAgIHRoaXMuY2xhc3NlcyQgPSB0aGlzLnN0b3JlXG4gICAgICAuc2VsZWN0KENsYXNzU2VsZWN0b3JzLmNsYXNzZXMpXG4gICAgICAucGlwZShtYXAoKGNsYXNzZXMpID0+IGNsYXNzZXMuc29ydCgoYSwgYikgPT4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKSkpKTtcbiAgICB0aGlzLnVzZWRDbGFzc2VzJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuY2xhc3NlcyQsIHRoaXMudXNlZERhdGFzb3VyY2VzJF0pLnBpcGUoXG4gICAgICBtYXAoKFtjbGFzc2VzLCBkYXRhc291cmNlc10pID0+IHtcbiAgICAgICAgcmV0dXJuIGNsYXNzZXMuZmlsdGVyKChjbGFzc0l0ZW0pID0+XG4gICAgICAgICAgZGF0YXNvdXJjZXMuc29tZSgoZGF0YVNvdXJjZSkgPT4ge1xuICAgICAgICAgICAgaWYgKGRhdGFTb3VyY2Uuc291cmNlVHlwZSA9PT0gJ25hbWVkUXVlcnknICYmICd0eXBlJyBpbiBkYXRhU291cmNlLnJlcXVlc3QpIHtcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGRhdGFTb3VyY2UucmVxdWVzdC50eXBlID09PSBOYW1lZFF1ZXJ5VHlwZXMuTVVMVElfQ0xBU1MgfHxcbiAgICAgICAgICAgICAgICBkYXRhU291cmNlLnJlcXVlc3QudHlwZSA9PT0gTmFtZWRRdWVyeVR5cGVzLkZVTExfVEVYVFxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGRhdGFTb3VyY2Uuc291cmNlVHlwZSA9PT0gJ2RhdGFzZXQnXG4gICAgICAgICAgICAgID8gZGF0YVNvdXJjZS5vQ2xhc3MgPT09IGNsYXNzSXRlbS5pZFxuICAgICAgICAgICAgICA6IGRhdGFTb3VyY2Uuc291cmNlVHlwZSA9PT0gJ25hbWVkUXVlcnknICYmICdvQ2xhc3MnIGluIGRhdGFTb3VyY2UucmVxdWVzdFxuICAgICAgICAgICAgICAgID8gZGF0YVNvdXJjZS5yZXF1ZXN0Lm9DbGFzcyA9PT0gY2xhc3NJdGVtLmlkXG4gICAgICAgICAgICAgICAgOiBkYXRhU291cmNlLnNvdXJjZVR5cGUgPT09ICduYW1lZFF1ZXJ5JyAmJiAndHlwZScgaW4gZGF0YVNvdXJjZS5yZXF1ZXN0XG4gICAgICAgICAgICAgICAgICA/IGRhdGFTb3VyY2UucmVxdWVzdC50eXBlID09PSBOYW1lZFF1ZXJ5VHlwZXMuTU9OT19DTEFTU1xuICAgICAgICAgICAgICAgICAgOiBmYWxzZTtcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSlcbiAgICApO1xuICAgIHRoaXMuZmllbGRzJCA9IHRoaXMuc3RvcmUuc2VsZWN0KEZpZWxkU2VsZWN0b3JzLmZpZWxkcyk7XG5cbiAgICB0aGlzLmRhdGFzb3VyY2VGaWx0ZXJzJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5zdG9yZS5zZWxlY3QoRGFzaGJvYXJkU2VsZWN0b3JzLmRhdGFzb3VyY2VGaWx0ZXJzKSxcbiAgICAgIHRoaXMuZGF0YXNvdXJjZUlkcyRcbiAgICBdKS5waXBlKFxuICAgICAgbWFwKFxuICAgICAgICAoW2ZpbHRlcnMsIGlkc10pID0+XG4gICAgICAgICAgT2JqZWN0LmtleXMoZmlsdGVycylcbiAgICAgICAgICAgIC5maWx0ZXIoKGZpbHRlckRzS2V5KSA9PiBpZHMuaW5jbHVkZXMoZmlsdGVyRHNLZXkpKVxuICAgICAgICAgICAgLnJlZHVjZSgocCwgYykgPT4gKHsgLi4ucCwgW2NdOiBmaWx0ZXJzW2NdIH0pLCB7fSkgYXMge1xuICAgICAgICAgICAgW3A6IHN0cmluZ106IEZpbHRlckNvbnRleHRbXTtcbiAgICAgICAgICB9XG4gICAgICApLFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKHAsIGMpID0+IGVxdWFsKHAsIGMpKVxuICAgICk7XG5cbiAgICB0aGlzLnN0eWxlcyQgPSB0aGlzLnN0b3JlLnNlbGVjdChDb25maWdTZWxlY3RvcnMubWFwU3R5bGVzKS5waXBlKFxuICAgICAgbWFwKChzdHlsZXMpID0+XG4gICAgICAgIHN0eWxlcy5jb25jYXQoXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWRlbnRpZmllcjogdGhpcy5OT19TVFlMRSxcbiAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnQHByeS53aWRnZXQubWFwLm5vU3R5bGUnKVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWRlbnRpZmllcjogdGhpcy5TVFlMRV9GUk9NX1VSTCxcbiAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnQHByeS53aWRnZXQubWFwLnN0eWxlRnJvbVVybCcpXG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICApXG4gICAgKTtcbiAgICB0aGlzLnNlbGVjdGVkSWRzJCA9IHRoaXMuc3RvcmUuc2VsZWN0KERhc2hib2FyZFNlbGVjdG9ycy5zZWxlY3RlZEl0ZW1JZHMpO1xuXG4gICAgdGhpcy5nZW9TZXJ2ZXJMYXllckRlc2NyaXB0aW9ucyQgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMudXNlZERhdGFzb3VyY2VzJC5waXBlKFxuICAgICAgICBzdGFydFdpdGgoW10pLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgocCwgYykgPT4gZXF1YWwocCwgYykpXG4gICAgICApLFxuICAgICAgdGhpcy5zdG9yZS5zZWxlY3QoQ29uZmlnU2VsZWN0b3JzLmdlb1NlcnZlclVybCkucGlwZShzdGFydFdpdGgodW5kZWZpbmVkKSlcbiAgICBdKS5waXBlKFxuICAgICAgZGVib3VuY2VUaW1lKDEwMCksXG4gICAgICBtYXAoKFtkYXRhU291cmNlcywgZ2VvU2VydmVyVXJsXSkgPT4ge1xuICAgICAgICBpZiAoIWdlb1NlcnZlclVybCkgcmV0dXJuIFtdO1xuICAgICAgICByZXR1cm4gZGF0YVNvdXJjZXNcbiAgICAgICAgICAuZmlsdGVyKChkcykgPT4gRGF0YXNvdXJjZVV0aWxzLmlzR2VvKGRzKSlcbiAgICAgICAgICAubWFwKChkcykgPT4ge1xuICAgICAgICAgICAgZHMgPSBkcyBhcyB1bmtub3duIGFzIERhdGFzZXQ7XG4gICAgICAgICAgICBjb25zdCBtZXRhZGF0YXM6IHtcbiAgICAgICAgICAgICAgW2tleTogc3RyaW5nXTogc3RyaW5nO1xuICAgICAgICAgICAgfSA9IHt9O1xuICAgICAgICAgICAgZHMubWV0YWRhdGE/LmZvckVhY2goKG0pID0+IChtZXRhZGF0YXNbbS5tZXRhZGF0YURlZi5uYW1lXSA9IG0udmFsdWUpKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHR5cGU6ICdnZW9zZXJ2ZXInLFxuICAgICAgICAgICAgICB1cmw6IGAke2dlb1NlcnZlclVybH0vJHtcbiAgICAgICAgICAgICAgICBtZXRhZGF0YXNbR2VvTWV0YWRhdGEuTkFNRVNQQUNFXS5sZW5ndGggPiAwID8gbWV0YWRhdGFzW0dlb01ldGFkYXRhLk5BTUVTUEFDRV0gKyAnLycgOiAnJ1xuICAgICAgICAgICAgICB9d21zP1NFUlZJQ0U9V01TJlZFUlNJT049MS4zLjBgLFxuICAgICAgICAgICAgICBwYXJhbVRpbGVkOiB0cnVlLFxuICAgICAgICAgICAgICBvcGFjaXR5OiBwYXJzZUludChtZXRhZGF0YXNbR2VvTWV0YWRhdGEuT1BBQ0lUWV0gPz8gMTAwLCAxMCksXG4gICAgICAgICAgICAgIG9DbGFzczogZHMub0NsYXNzLFxuICAgICAgICAgICAgICBrZXk6IG1ldGFkYXRhc1tHZW9NZXRhZGF0YS5OQU1FU1BBQ0VdICsgJzonICsgbWV0YWRhdGFzW0dlb01ldGFkYXRhLktFWV0sXG4gICAgICAgICAgICAgIG5hbWVzcGFjZTogbWV0YWRhdGFzW0dlb01ldGFkYXRhLk5BTUVTUEFDRV0sXG4gICAgICAgICAgICAgIHBhcmFtTGF5ZXI6IG1ldGFkYXRhc1tHZW9NZXRhZGF0YS5LRVldLFxuICAgICAgICAgICAgICBuYW1lOiBkcy5uYW1lLFxuICAgICAgICAgICAgICBkYXRhc291cmNlSWQ6IGRzLmlkXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLm1hcCgobGF5ZXIpID0+IGxheWVyIGFzIE1hcEdlb1NlcnZlckxheWVyT3B0aW9ucyk7XG4gICAgICB9KSxcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChwLCBjKSA9PiBlcXVhbChwLCBjKSksXG4gICAgICBzdGFydFdpdGgoW10pXG4gICAgKTtcblxuICAgIHRoaXMuYXV0b0RhdGFzZXRMYXllcnMkID0gY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLmNsYXNzZXMkLFxuICAgICAgdGhpcy5maWVsZHMkLFxuICAgICAgdGhpcy51c2VkRGF0YXNvdXJjZXMkLnBpcGUoXG4gICAgICAgIHN0YXJ0V2l0aChbXSksXG4gICAgICAgIG1hcChcbiAgICAgICAgICAoZGF0YXNvdXJjZXMpID0+XG4gICAgICAgICAgICBkYXRhc291cmNlcy5maWx0ZXIoKGRzKSA9PiBkcy5zb3VyY2VUeXBlID09PSAnZGF0YXNldCcgJiYgIURhdGFzb3VyY2VVdGlscy5pc0dlbyhkcykpIGFzIERhdGFzZXRbXVxuICAgICAgICApXG4gICAgICApXG4gICAgXSkucGlwZShcbiAgICAgIG1hcChcbiAgICAgICAgKFtjbGFzc2VzLCBmaWVsZHMsIGRhdGFTZXRzXSkgPT5cbiAgICAgICAgICBkYXRhU2V0c1xuICAgICAgICAgICAgLm1hcCgoZHMpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgbW9kZWwgPSBjbGFzc2VzLmZpbmQoKGNsYXp6KSA9PiBjbGF6ei5pZCA9PT0gZHMub0NsYXNzKTtcbiAgICAgICAgICAgICAgY29uc3QgZ2VvQXR0cmlidXRlcyA9IChcbiAgICAgICAgICAgICAgICBtb2RlbD8uYXR0cmlidXRlcy5tYXAoKGF0dHIpID0+ICh7IGF0dHIsIGZpZWxkOiBmaWVsZHMuZmluZCgoZikgPT4gYXR0ci5maWVsZCA9PT0gZi5pZCkgfSkpID8/IFtdXG4gICAgICAgICAgICAgICkuZmlsdGVyKCh7IGF0dHIsIGZpZWxkIH0pID0+ICEhZmllbGQgJiYgR2VvbWV0cmljRmllbGRUeXBlcy5pbmNsdWRlcyhmaWVsZC50eXBlKSk7XG4gICAgICAgICAgICAgIHJldHVybiBnZW9BdHRyaWJ1dGVzLm1hcChcbiAgICAgICAgICAgICAgICAoZ2VvKSA9PlxuICAgICAgICAgICAgICAgICAgKHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2F1dG8nLFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogYCR7ZHMubmFtZX0ke2dlb0F0dHJpYnV0ZXMubGVuZ3RoID4gMSA/ICcgLSAnICsgZ2VvLmF0dHIubmFtZSA6ICcnfWAsXG4gICAgICAgICAgICAgICAgICAgIG9DbGFzczogZHMub0NsYXNzLFxuICAgICAgICAgICAgICAgICAgICBrZXk6IGRzLmlkLFxuICAgICAgICAgICAgICAgICAgICBzdWJUeXBlOiBnZW8uZmllbGQhLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzZXM6IFtkcy5vQ2xhc3NdLFxuICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGU6IGdlby5hdHRyLnRlY2huaWNhbE5hbWVcbiAgICAgICAgICAgICAgICAgIH0pIGFzIE1hcEF1dG9MYXllck9wdGlvbnNcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuZmxhdCgpIGFzIE1hcEF1dG9MYXllck9wdGlvbnNbXVxuICAgICAgKVxuICAgICk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgdGhpcy5tYW5pZmVzdCRcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgbWFwKChtYW5pZmVzdCkgPT5cbiAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgKCgobWFuaWZlc3Qub3B0aW9ucyA/PyB7IGxheWVyczogW10gfSkgYXMgTWFwV2lkZ2V0T3B0aW9ucykubGF5ZXJzID8/IFtdKS5maWx0ZXIoKGxheWVyKSA9PlxuICAgICAgICAgICAgICAgIFsnd21zJ10uaW5jbHVkZXMobGF5ZXIudHlwZSlcbiAgICAgICAgICAgICAgKSBhcyBNYXBXTVNMYXllckxheWVyT3B0aW9uc1tdXG4gICAgICAgICAgICApLm1hcCgobGF5ZXIpID0+IGxheWVyLnVybClcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgodXJscykgPT4gdXJscy5mb3JFYWNoKCh1cmwpID0+IHRoaXMuc3RvcmUuZGlzcGF0Y2goRGFzaGJvYXJkQWN0aW9ucy5nZXRDYXBhYmlsaXR5KHsgdXJsIH0pKSkpXG4gICAgKTtcblxuICAgIHRoaXMud21zQ2FwYWJpbGl0aWVzJCA9IHRoaXMuc3RvcmUuc2VsZWN0KERhc2hib2FyZFNlbGVjdG9ycy5jYXBhYmlsaXRpZXMpO1xuXG4gICAgdGhpcy5vcHRpb25zJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5tYW5pZmVzdCQsXG4gICAgICB0aGlzLnJlc3VsdFNldCQsXG4gICAgICB0aGlzLmNsYXNzZXMkLFxuICAgICAgdGhpcy5maWVsZHMkLFxuICAgICAgdGhpcy5zdHlsZXMkLFxuICAgICAgdGhpcy5nZW9TZXJ2ZXJMYXllckRlc2NyaXB0aW9ucyQsXG4gICAgICB0aGlzLndtc0NhcGFiaWxpdGllcyQsXG4gICAgICB0aGlzLmF1dG9EYXRhc2V0TGF5ZXJzJFxuICAgIF0pLnBpcGUoXG4gICAgICBtYXAoKFttYW5pZmVzdCwgcmVzdWx0U2V0LCBjbGFzc2VzLCBmaWVsZHMsIG1hcFN0eWxlcywgZ2VvTGF5ZXJzLCBjYXBhYmlsaXRpZXMsIGF1dG9EYXRhc2V0TGF5ZXJzXSkgPT4ge1xuICAgICAgICAvLyBhdXRvIGRldGVybWluZSBsYXllcnMgcGFyYW1ldGVycyB0byBwcm92aWRlIGEgd29ya2luZyB2aWV3XG4gICAgICAgIGNvbnN0IGF1dG9PcHRpb25zID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShtYW5pZmVzdC5vcHRpb25zID8/IHt9KSkgYXMgTWFwV2lkZ2V0T3B0aW9ucztcbiAgICAgICAgaWYgKCFhdXRvT3B0aW9ucy50b29sdGlwTW9kZSkge1xuICAgICAgICAgIGF1dG9PcHRpb25zLnRvb2x0aXBNb2RlID0gVG9vbHRpcE1vZGUuQ0xJQ0s7XG4gICAgICAgIH1cblxuICAgICAgICBhdXRvT3B0aW9ucy5sYXllcnMgPSBbXG4gICAgICAgICAgLi4uKGF1dG9PcHRpb25zLmxheWVycyA/PyBbXSkuZmlsdGVyKChsYXllcikgPT4gbGF5ZXIudHlwZSAhPT0gJ2F1dG8nKSxcbiAgICAgICAgICAuLi4oYXV0b09wdGlvbnMuYXV0b21hdGljTGF5ZXJzXG4gICAgICAgICAgICA/IGF1dG9EYXRhc2V0TGF5ZXJzXG4gICAgICAgICAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgIChsYXllcikgPT5cbiAgICAgICAgICAgICAgICAgICAgIWF1dG9PcHRpb25zLmlnbm9yZUF1dG9MYXllciB8fFxuICAgICAgICAgICAgICAgICAgICAhYXV0b09wdGlvbnMuaWdub3JlQXV0b0xheWVyLmluY2x1ZGVzKGxheWVyLmtleSArICctJyArIGxheWVyLnN1YlR5cGUpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5tYXAoKGxheWVyKSA9PiAoe1xuICAgICAgICAgICAgICAgICAgLi4ubGF5ZXIsXG4gICAgICAgICAgICAgICAgICAuLi4oKGF1dG9PcHRpb25zLmxheWVycyA/PyBbXSkuZmluZChcbiAgICAgICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICAgICAgICAocHJldkxheWVyKSA9PiBwcmV2TGF5ZXIua2V5ID09PSBsYXllci5rZXkgJiYgcHJldkxheWVyLmF0dHJpYnV0ZSA9PT0gbGF5ZXIuYXR0cmlidXRlXG4gICAgICAgICAgICAgICAgICApID8/IHt9KVxuICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgOiBbXSlcbiAgICAgICAgXTtcblxuICAgICAgICBhdXRvT3B0aW9ucy5sYXllcnM/LmZvckVhY2goKGxheWVyLCBpKSA9PiB7XG4gICAgICAgICAgV2lkZ2V0TWFwVXRpbHMucG9wdWxhdGVMb2NhdGlvbkF0dHJpYnV0ZShsYXllciwgcmVzdWx0U2V0LCBjbGFzc2VzLCBmaWVsZHMpO1xuICAgICAgICAgIFdpZGdldE1hcFV0aWxzLnBvcHVsYXRlSW50ZW5zaXR5QXR0cmlidXRlKGxheWVyLCByZXN1bHRTZXQsIGNsYXNzZXMsIGZpZWxkcyk7XG4gICAgICAgICAgaWYgKGF1dG9PcHRpb25zLmF0dHJpYnV0aW9ucykge1xuICAgICAgICAgICAgbGF5ZXIuYXR0cmlidXRpb24gPSBsYXllci5hdHRyaWJ1dGlvbiA/PyAnJztcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGFjdHVhbExheWVyS2V5cyA9IChhdXRvT3B0aW9ucy5sYXllcnMgPz8gW10pXG4gICAgICAgICAgLm1hcCgobGF5ZXIpID0+IChsYXllciBhcyBNYXBHZW9TZXJ2ZXJMYXllck9wdGlvbnMpLmtleSA/PyBudWxsKVxuICAgICAgICAgIC5maWx0ZXIoKGtleSkgPT4gISFrZXkpO1xuXG4gICAgICAgIC8vIEdldCBhbGwgcHJldmlvdXMgbGF5ZXJzLCB3aXRob3V0IGdlb3NlcnZlciBsYXllcnMgdGhhdCBhcmUgbm90IHJlcXVlc3RlZCBhbnltb3JlLCB0aGVuIGFkZCBuZXcgZ2Vvc2VydmVyIGxheWVycyAocG90ZW50aWFsbHkgd2l0aCBhIHByZWNvbmZpZyBmcm9tIG1hbmlmZXN0KS5cbiAgICAgICAgYXV0b09wdGlvbnMubGF5ZXJzID0gW1xuICAgICAgICAgIC4uLihhdXRvT3B0aW9ucy5sYXllcnMgPz8gW10pLm1hcCgobGF5ZXIpID0+IHtcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIGNvbnN0IGdlb0xheWVyID0gZ2VvTGF5ZXJzLmZpbmQoKGdlb0xheWVyKSA9PiBsYXllci5rZXkgPT09IGdlb0xheWVyLmtleSkgPz8gbnVsbDtcbiAgICAgICAgICAgIHJldHVybiBsYXllci50eXBlID09PSAnZ2Vvc2VydmVyJ1xuICAgICAgICAgICAgICA/IGdlb0xheWVyXG4gICAgICAgICAgICAgICAgPyB7IC4uLmdlb0xheWVyLCAuLi5sYXllciwgdXJsOiBnZW9MYXllci51cmwgfVxuICAgICAgICAgICAgICAgIDogKG51bGwgYXMgdW5rbm93biBhcyBNYXBXaWRnZXRMYXllck9wdGlvbnMpXG4gICAgICAgICAgICAgIDogeyAuLi5sYXllciB9O1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIC4uLmdlb0xheWVycy5maWx0ZXIoKGxheWVyKSA9PiAhYWN0dWFsTGF5ZXJLZXlzLmluY2x1ZGVzKGxheWVyLmtleSkpXG4gICAgICAgIF0uZmlsdGVyKChsYXllcikgPT4gISFsYXllcik7XG5cbiAgICAgICAgYXV0b09wdGlvbnMubGF5ZXJzLmZvckVhY2goKGxheWVyLCBpbmRleCkgPT4ge1xuICAgICAgICAgIHRoaXMuc2V0RGVmYXVsdExheWVyVGl0bGUobGF5ZXIsIGluZGV4LCBjYXBhYmlsaXRpZXMpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgISFtYXBTdHlsZXMgJiZcbiAgICAgICAgICBtYXBTdHlsZXMubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICghYXV0b09wdGlvbnMuc3R5bGUgfHwgIW1hcFN0eWxlcy5tYXAoKHN0eWxlKSA9PiBzdHlsZS5pZGVudGlmaWVyKS5pbmNsdWRlcyhhdXRvT3B0aW9ucy5zdHlsZSkpXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnN0IGxpZ2h0U3R5bGVzID0gbWFwU3R5bGVzLmZpbHRlcigoc3R5bGUpID0+ICEoc3R5bGUuaWRlbnRpZmllciA/PyAnLScpLmluY2x1ZGVzKCdkYXJrJykpO1xuICAgICAgICAgIGF1dG9PcHRpb25zLnN0eWxlID0gbGlnaHRTdHlsZXMubGVuZ3RoID4gMCA/IGxpZ2h0U3R5bGVzWzBdLmlkZW50aWZpZXIgOiBtYXBTdHlsZXNbMF0uaWRlbnRpZmllcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhdXRvT3B0aW9ucy5pZ25vcmVBdXRvTGF5ZXIpIHtcbiAgICAgICAgICBjb25zdCBiYXNlID0gYXV0b09wdGlvbnMuaWdub3JlQXV0b0xheWVyO1xuXG4gICAgICAgICAgLy8gUmVtb3ZlIGZyb20gaWdub3JlQXV0b0xheWVycywgdmFsdWVzIHRoYXQgYXJlIG5vdCBuZWNlc3NhcnlcbiAgICAgICAgICBjb25zdCBwb3NzaWJsZUlnbm9yZUF1dG9MYXllcktleXMgPSBhdXRvRGF0YXNldExheWVycy5tYXAoKGxheWVyKSA9PiBsYXllci5rZXkgKyAnLScgKyBsYXllci5zdWJUeXBlKTtcbiAgICAgICAgICBhdXRvT3B0aW9ucy5pZ25vcmVBdXRvTGF5ZXIgPSAoYXV0b09wdGlvbnMuaWdub3JlQXV0b0xheWVyID8/IFtdKS5maWx0ZXIoKGtleSkgPT5cbiAgICAgICAgICAgIHBvc3NpYmxlSWdub3JlQXV0b0xheWVyS2V5cy5pbmNsdWRlcyhrZXkpXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoYXV0b09wdGlvbnMuaWdub3JlQXV0b0xheWVyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgZGVsZXRlIGF1dG9PcHRpb25zLmlnbm9yZUF1dG9MYXllcjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIWF1dG9PcHRpb25zLmlnbm9yZUF1dG9MYXllciB8fCBiYXNlLmxlbmd0aCAhPT0gYXV0b09wdGlvbnMuaWdub3JlQXV0b0xheWVyLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5lbWl0TWFuaWZlc3QoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBhdXRvT3B0aW9ucy5sYXllcnMgPSBXaWRnZXRNYXBVdGlscy5hc3NpZ25MYXllcnNPcmRlcihhdXRvT3B0aW9ucy5sYXllcnMpO1xuXG4gICAgICAgIGlmIChhdXRvT3B0aW9ucy5maXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGF1dG9PcHRpb25zLmxheWVycy5mb3JFYWNoKFxuICAgICAgICAgICAgKGxheWVyKSA9PiAobGF5ZXIuZml0ID0gIU5PTl9NQU5EQVRPUllfRklUX0xBWUVSX1RZUEVTLmluY2x1ZGVzKGxheWVyLnR5cGUpIHx8IGF1dG9PcHRpb25zLmZpdClcbiAgICAgICAgICApO1xuICAgICAgICAgIGRlbGV0ZSBhdXRvT3B0aW9ucy5maXQ7XG4gICAgICAgIH1cblxuICAgICAgICBbXG4gICAgICAgICAgLi4ubmV3IFNldChcbiAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgYXV0b09wdGlvbnMubGF5ZXJzLmZpbHRlcigobGF5ZXIpID0+IFsnd21zJywgJ2dlb3NlcnZlciddLmluY2x1ZGVzKGxheWVyLnR5cGUpKSBhcyAoXG4gICAgICAgICAgICAgICAgfCBNYXBXTVNMYXllckxheWVyT3B0aW9uc1xuICAgICAgICAgICAgICAgIHwgTWFwR2VvU2VydmVyTGF5ZXJPcHRpb25zXG4gICAgICAgICAgICAgIClbXVxuICAgICAgICAgICAgKS5tYXAoKGxheWVyKSA9PiBsYXllci51cmwpXG4gICAgICAgICAgKVxuICAgICAgICBdLmZvckVhY2goKHVybCkgPT4ge1xuICAgICAgICAgIGlmIChjYXBhYmlsaXRpZXMgJiYgY2FwYWJpbGl0aWVzW3VybF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChEYXNoYm9hcmRBY3Rpb25zLmdldENhcGFiaWxpdHkoeyB1cmw6IHVybCB9KSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gYXV0b09wdGlvbnM7XG4gICAgICB9KSxcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChwLCBjKSA9PiBlcXVhbChwLCBjKSlcbiAgICApO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMub3B0aW9ucyQucGlwZShmaWx0ZXIoKG9wdCkgPT4gISFvcHQpKS5zdWJzY3JpYmUoKG9wdGlvbnMpID0+IHtcbiAgICAgICAgdGhpcy5vcHRpb25zQ29weSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkob3B0aW9ucykpO1xuICAgICAgICB0aGlzLm9wdGlvbnNDb3B5LmxheWVycz8uZm9yRWFjaChcbiAgICAgICAgICAobGF5ZXIpID0+ICh0aGlzLmxheWVyU2V0dGluZ3NFeHBhbmRlZFN0YXRlW2xheWVyLnRpdGxlID8/ICdNSVNTSU5HIFRJVExFJ10gPSBmYWxzZSlcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9uc0NvcHkubGF5ZXJzICYmIHRoaXMub3B0aW9uc0NvcHkubGF5ZXJzLnNvbWUoKGxheWVyKSA9PiAhbGF5ZXIuZ3JvdXApKVxuICAgICAgICAgIHRoaXMub3B0aW9uc0NvcHkubGF5ZXJzXG4gICAgICAgICAgICA/LmZpbHRlcigobCkgPT4gIWwuZ3JvdXApXG4gICAgICAgICAgICAuZm9yRWFjaCgobGF5ZXIpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChcbiAgICAgICAgICAgICAgICBEYXNoYm9hcmRBY3Rpb25zLnVwZGF0ZUxheWVyR3JvdXAoe1xuICAgICAgICAgICAgICAgICAgbmFtZTogREVGQVVMVF9MQVlFUl9HUk9VUCxcbiAgICAgICAgICAgICAgICAgIHZpc2libGVMYXllcnM6IGxheWVyLnRpdGxlID8/ICdNSVNTSU5HIFRJVExFJ1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5vcHRpb25zQ29weS5sYXllcnMgPSB0aGlzLm9wdGlvbnNDb3B5LmxheWVycz8ubWFwKChsYXllcikgPT4gKHtcbiAgICAgICAgICAuLi5sYXllcixcbiAgICAgICAgICBncm91cDogbGF5ZXIuZ3JvdXAgPz8gREVGQVVMVF9MQVlFUl9HUk9VUFxuICAgICAgICB9KSk7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLm1hcFVybCQgPSB0aGlzLnN0b3JlLnNlbGVjdChDb25maWdTZWxlY3RvcnMubWFwVXJsKTtcblxuICAgIHRoaXMuYm90dG9tTGVmdCQgPSB0aGlzLndpZGdldFNpemUkLnBpcGUoXG4gICAgICBtYXAoKHNpemUpID0+IGB0cmFuc2xhdGUoMTBweCAsY2FsYygke3NpemUuaGVpZ2h0fXB4IC0gMTAwJSAtIDEwcHgpKWApLFxuICAgICAgZGVsYXkoMTApXG4gICAgKTtcblxuICAgIHRoaXMuaXRlbVN0eWxlcyQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLnJlc3VsdFNldCQsIHRoaXMubWFuaWZlc3QkLCB0aGlzLnN0YXRpY1Jlc3VsdFNldCRdKS5waXBlKFxuICAgICAgbWVyZ2VNYXAoKFtycywgbWFuaWZlc3QsIHNyc10pID0+IHtcbiAgICAgICAgaWYgKChtYW5pZmVzdC5kYXRhc291cmNlID09PSB1bmRlZmluZWQgfHwgbWFuaWZlc3QuZGF0YXNvdXJjZS5sZW5ndGggPT09IDApICYmICFzcnMpIHtcbiAgICAgICAgICByZXR1cm4gb2Yoe30pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBmcm9tKFxuICAgICAgICAgICAgbmV3IFByb21pc2U8e1xuICAgICAgICAgICAgICBbaWQ6IHN0cmluZ106IHtcbiAgICAgICAgICAgICAgICBjbGFzc2ljOiBTdHlsZTtcbiAgICAgICAgICAgICAgICBib3JkZXJlZDogU3R5bGU7XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHRvdGFsID0gT2JqZWN0LnZhbHVlcyhycy5pdGVtcykucmVkdWNlKChwLCBjKSA9PiBjLmxlbmd0aCArIHAsIDApO1xuICAgICAgICAgICAgICBpZiAodG90YWwgPT09IDApIHJlc29sdmUoe30pO1xuICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSB7fSBhcyB7XG4gICAgICAgICAgICAgICAgW2lkOiBzdHJpbmddOiB7XG4gICAgICAgICAgICAgICAgICBjbGFzc2ljOiBTdHlsZTtcbiAgICAgICAgICAgICAgICAgIGJvcmRlcmVkOiBTdHlsZTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICBPYmplY3QudmFsdWVzKHJzLml0ZW1zKS5mb3JFYWNoKChpdGVtcykgPT4ge1xuICAgICAgICAgICAgICAgIGl0ZW1zLmZvckVhY2goKGl0ZW0pID0+XG4gICAgICAgICAgICAgICAgICBQcm9taXNlLmFsbChbXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3ltYm9sU2VydmljZS5nZXRTeW1ib2xBc0ljb25TdHlsZShpdGVtKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zeW1ib2xTZXJ2aWNlLmdldFN5bWJvbEFzSWNvblN0eWxlKGl0ZW0sIHRydWUpXG4gICAgICAgICAgICAgICAgICBdKS50aGVuKChbc3R5bGUsIGJTdHlsZV0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2l0ZW0uaWRdID0geyBjbGFzc2ljOiBzdHlsZSwgYm9yZGVyZWQ6IGJTdHlsZSB9O1xuICAgICAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMocmVzdWx0KS5sZW5ndGggPj0gdG90YWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMuaGVpZ2h0JCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMud2lkZ2V0U2l6ZSQucGlwZShkZWJvdW5jZVRpbWUoMTAwKSksIHRoaXMuZGlzcGxheUhlYWRlciRdKS5waXBlKFxuICAgICAgbWFwKChbc2l6ZSwgZGlzcGxheV0pID0+IChzaXplLmhlaWdodCA/PyAxMDApIC0gKGRpc3BsYXkgPyBXSURHRVRfSEVBREVSX0hFSUdIVC52YWx1ZSA6IDApKSxcbiAgICAgIGRlbGF5KDEwKVxuICAgICk7XG5cbiAgICB0aGlzLmF0dHJpYnV0aW9ucyQgPSB0aGlzLm9wdGlvbnMkLnBpcGUobWFwKChvcHRpb25zKSA9PiAhIW9wdGlvbnMuYXR0cmlidXRpb25zKSk7XG5cbiAgICB0aGlzLmxlZ2VuZFRvcCQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLmRpc3BsYXlIZWFkZXIkLCB0aGlzLmF0dHJpYnV0aW9ucyRdKS5waXBlKFxuICAgICAgbWFwKChbaGVhZGVyLCBhdHRyXSkgPT4gNSArIChoZWFkZXIgPyBXSURHRVRfSEVBREVSX0hFSUdIVC52YWx1ZSA6IDApICsgKGF0dHIgPyA2MSA6IDApKVxuICAgICk7XG5cbiAgICB0aGlzLmxlZ2VuZEhlaWdodCQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLndpZGdldFNpemUkLnBpcGUoZGVib3VuY2VUaW1lKDEwMCkpLCB0aGlzLmxlZ2VuZFRvcCRdKS5waXBlKFxuICAgICAgbWFwKChbc2l6ZSwgdG9wXSkgPT4ge1xuICAgICAgICByZXR1cm4gKHNpemUuaGVpZ2h0ID8/IDEwMCkgLSBXSURHRVRfSEVBREVSX0hFSUdIVC52YWx1ZSAtIHRvcCAtIDU2OyAvLyA1NnB4IGlzIHRoZSB0b29sdGlwIGhlaWdodCArIG1hcmdpblxuICAgICAgfSksXG4gICAgICBkZWxheSgxMClcbiAgICApO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMud21zQ2FwYWJpbGl0aWVzJFxuICAgICAgICAucGlwZShcbiAgICAgICAgICBtYXAoKHdtc0NhcGFiaWxpdGllcykgPT5cbiAgICAgICAgICAgIHdtc0NhcGFiaWxpdGllc1xuICAgICAgICAgICAgICA/IE9iamVjdC5rZXlzKHdtc0NhcGFiaWxpdGllcylcbiAgICAgICAgICAgICAgICAgIC5tYXAoKHVybCkgPT4gKHsgdXJsLCBsYXllcnM6IFhNTFV0aWxzLmdldFBvc3NpYmxlTGF5ZXJTdHlsZXMod21zQ2FwYWJpbGl0aWVzW3VybF0/LmRvYykgfSkpXG4gICAgICAgICAgICAgICAgICAucmVkdWNlKChwLCBjKSA9PiAoeyAuLi5wLCBbYy51cmxdOiBjIH0pLCB7fSlcbiAgICAgICAgICAgICAgOiB7fVxuICAgICAgICAgICksXG4gICAgICAgICAgc3RhcnRXaXRoKHt9KVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKHBvc3NpYmxlU3R5bGVzKSA9PiAodGhpcy5wb3NzaWJsZVN0eWxlcyA9IHBvc3NpYmxlU3R5bGVzKSlcbiAgICApO1xuXG4gICAgdGhpcy5oYXNTbGlkZUxheWVyJCA9IHRoaXMub3B0aW9ucyQucGlwZShcbiAgICAgIG1hcCgob3B0aW9ucykgPT5cbiAgICAgICAgKG9wdGlvbnMubGF5ZXJzID8/IFtdKS5tYXAoKGxheWVyKSA9PiAhIWxheWVyLnNsaWRlICYmIGxheWVyLnNsaWRlICE9PSAnYWxsJykucmVkdWNlKChhLCBiKSA9PiBhIHx8IGIsIGZhbHNlKVxuICAgICAgKVxuICAgICk7XG5cbiAgICB0aGlzLmxheWVyR3JvdXBzJCA9IHRoaXMuc3RvcmUuc2VsZWN0KERhc2hib2FyZFNlbGVjdG9ycy5sYXllckdyb3Vwcyk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMubGF5ZXJHcm91cHMkLnN1YnNjcmliZSgobGF5ZXJHcm91cHMpID0+IHtcbiAgICAgICAgdGhpcy5sYXllckdyb3VwcyA9IGxheWVyR3JvdXBzO1xuICAgICAgfSlcbiAgICApO1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goXG4gICAgICBEYXNoYm9hcmRBY3Rpb25zLmluaXREZWZhdWx0TGF5ZXJHcm91cCh7XG4gICAgICAgIGxheWVyczogdGhpcy5vcHRpb25zQ29weS5sYXllcnNcbiAgICAgICAgICA/LmZpbHRlcigobGF5ZXIpID0+IGxheWVyLmdyb3VwID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgLm1hcChcbiAgICAgICAgICAgIChsYXllcikgPT5cbiAgICAgICAgICAgICAgbGF5ZXIudGl0bGUgPz8gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoYEBwcnkud2lkZ2V0Lm1hcC5sYXllclR5cGUuJHtsYXllci50eXBlfWAsIHsgLi4ubGF5ZXIgfSlcbiAgICAgICAgICApXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBpbml0SW50ZXJhY3Rpb25NYW5hZ2VyKCkge1xuICAgIHJldHVybiB0aGlzLmludGVyYWN0aW9uTWFuYWdlci5pbml0KHRoaXMpO1xuICB9XG5cbiAgaW5pdFRvb2x0aXBNYW5hZ2VyKCkge1xuICAgIHJldHVybiB0aGlzLnRvb2x0aXBNYW5hZ2VyLmluaXQoXG4gICAgICB0aGlzLnRvb2x0aXBGYWN0b3J5U2VydmljZSxcbiAgICAgIHRoaXMuaW5qZWN0b3IsXG4gICAgICB0aGlzLnN0b3JlLFxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLFxuICAgICAgdGhpcy53aWRnZXRTaXplJCxcbiAgICAgIHRoaXMuZGlzcGxheUhlYWRlciQsXG4gICAgICB0aGlzLm1hcCxcbiAgICAgIHRoaXMucG9wdXAsXG4gICAgICB0aGlzLnBvcHVwQ29udGVudCxcbiAgICAgIHRoaXMuaW50ZXJhY3Rpb25NYW5hZ2VyLFxuICAgICAgdGhpc1xuICAgICk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5tYXAgPSBuZXcgTWFwKHsgdGFyZ2V0OiB0aGlzLm1hcFJlZi5uYXRpdmVFbGVtZW50LCBjb250cm9sczogZGVmYXVsdHMoeyBhdHRyaWJ1dGlvbjogZmFsc2UgfSkgfSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbk1hbmFnZXIgPSB0aGlzLmluaXRJbnRlcmFjdGlvbk1hbmFnZXIoKTtcbiAgICB0aGlzLmxheWVyU2xpZGVyLmluaXQodGhpcy5tYXAsIHRoaXMuc2xpZGVyRWxlbWVudC5uYXRpdmVFbGVtZW50KTtcbiAgICB0aGlzLnRvb2x0aXBNYW5hZ2VyID0gdGhpcy5pbml0VG9vbHRpcE1hbmFnZXIoKTtcbiAgICB0aGlzLm1hcFN0eWxlVXJsJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMub3B0aW9ucyQsIHRoaXMubWFwVXJsJF0pLnBpcGUoXG4gICAgICBtYXAoKFtvcHRpb25zLCB1cmxdKSA9PiB7XG4gICAgICAgIHN3aXRjaCAob3B0aW9ucy5zdHlsZSkge1xuICAgICAgICAgIGNhc2UgdGhpcy5OT19TVFlMRTpcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIGNhc2UgdGhpcy5TVFlMRV9GUk9NX1VSTDpcbiAgICAgICAgICAgIHJldHVybiBvcHRpb25zLnN0eWxlVVJMID8/ICcnO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gYCR7dXJsfS9zdHlsZXMvJHtvcHRpb25zLnN0eWxlfS9zdHlsZS5qc29uYDtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXG4gICAgKTtcblxuICAgIHRoaXMubWFwU3R5bGVMYXllciQgPSB0aGlzLm1hcFN0eWxlVXJsJC5waXBlKFxuICAgICAgbWFwKChzdHlsZVVybCkgPT4ge1xuICAgICAgICBpZiAoIXN0eWxlVXJsKSB7XG4gICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgbmV3IE1hcGJveFZlY3RvckxheWVyKHtcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHsgdGl0bGU6ICdiYWNrZ3JvdW5kJyB9LFxuICAgICAgICAgICAgc3R5bGVVcmxcbiAgICAgICAgICB9KSAvKiAsXG4gICAgICAgICAgbmV3IFRpbGVMYXllcih7XG4gICAgICAgICAgICBzb3VyY2U6IG5ldyBUaWxlRGVidWcoKVxuICAgICAgICAgIH0pICovXG4gICAgICAgIF07XG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgdGhpcy5vcHRpb25zJFxuICAgICAgICAucGlwZShcbiAgICAgICAgICBtYXAoKG9wdGlvbnMpID0+ICh7XG4gICAgICAgICAgICBjZW50ZXI6IGZyb21Mb25MYXQob3B0aW9ucy5jZW50ZXIgPz8gV2lkZ2V0TWFwVXRpbHMuREVGQVVMVF9NQVBfQ0VOVEVSKSxcbiAgICAgICAgICAgIG1heFpvb206IG9wdGlvbnMuem9vbT8ubWF4ID8/IFdpZGdldE1hcFV0aWxzLkRFRkFVTFRfWk9PTV9NQVgsXG4gICAgICAgICAgICBtaW5ab29tOiBvcHRpb25zLnpvb20/Lm1pbiA/PyBXaWRnZXRNYXBVdGlscy5ERUZBVUxUX1pPT01fTUlOLFxuICAgICAgICAgICAgem9vbTogb3B0aW9ucy56b29tPy5zdGFydCA/PyBXaWRnZXRNYXBVdGlscy5ERUZBVUxUX1pPT01fU1RBUlRcbiAgICAgICAgICB9KSksXG4gICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKHZpZXcpID0+IHRoaXMubWFwLnNldFZpZXcobmV3IFZpZXcodmlldykpKVxuICAgICk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgdGhpcy5vcHRpb25zJFxuICAgICAgICAucGlwZShcbiAgICAgICAgICBtYXAoKG9wdGlvbnMpID0+IG9wdGlvbnMuYXR0cmlidXRpb25zKSxcbiAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgoYXR0cmlidXRpb25zKSA9PiB7XG4gICAgICAgICAgaWYgKCFhdHRyaWJ1dGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMubWFwLnJlbW92ZUNvbnRyb2wodGhpcy5hdHRyaWJ1dGlvbnMpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm1hcC5hZGRDb250cm9sKHRoaXMuYXR0cmlidXRpb25zKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMubGF5ZXJzJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5yZXN1bHRTZXQkLFxuICAgICAgdGhpcy5vcHRpb25zJCxcbiAgICAgIHRoaXMuY2xhc3NlcyQsXG4gICAgICB0aGlzLmFkZGl0aW9uYWxMYXllcnMkLFxuICAgICAgdGhpcy5pdGVtU3R5bGVzJCxcbiAgICAgIHRoaXMuZGF0YXNvdXJjZUZpbHRlcnMkLFxuICAgICAgdGhpcy5maWVsZHMkXG4gICAgXSkucGlwZShcbiAgICAgIGZpbHRlcihcbiAgICAgICAgKFtyZXN1bHRTZXQsIG9wdGlvbnMsIGNsYXNzZXMsIGFkZGl0aW9uYWxMYXllcnMsIGl0ZW1TdHlsZXMsIGZpbHRlcnMsIGZpZWxkc10pID0+XG4gICAgICAgICAgISFyZXN1bHRTZXQgJiYgISFvcHRpb25zICYmICEhY2xhc3NlcyAmJiAhIWZpZWxkc1xuICAgICAgKSxcbiAgICAgIHdpdGhMYXRlc3RGcm9tKHRoaXMubGF5ZXJHcm91cHMkKSxcbiAgICAgIG1hcCgoW1tyZXN1bHRTZXQsIG9wdGlvbnMsIGNsYXNzZXMsIGFkZGl0aW9uYWxMYXllcnMsIGl0ZW1TdHlsZXMsIGZpbHRlcnMsIGZpZWxkc10sIGxheWVyR3JvdXBzXSkgPT4ge1xuICAgICAgICBsZXQgaGFzUmVsYXRpb25MYXllciA9IG51bGwgYXMgdW5rbm93biBhcyBWZWN0b3JMYXllcjxWZWN0b3JTb3VyY2U8YW55Pj47XG5cbiAgICAgICAgY29uc3QgbGF5ZXJzID0gKG9wdGlvbnM/LmxheWVycyB8fCBbXSlcbiAgICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgKGxheWVyKSA9PiB0aGlzLndpZGdldE1hcExheWVyU2VydmljZS5kb250TmVlZExvY2F0aW9uLmluY2x1ZGVzKGxheWVyLnR5cGUpIHx8ICEhbGF5ZXIuYXR0cmlidXRlXG4gICAgICAgICAgKVxuICAgICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAobGF5ZXIpID0+IHRoaXMud2lkZ2V0TWFwTGF5ZXJTZXJ2aWNlLmRvbnROZWVkSW50ZW5zaXR5LmluY2x1ZGVzKGxheWVyLnR5cGUpIHx8ICEhbGF5ZXIuaW50ZW5zaXR5QXR0cmlidXRlXG4gICAgICAgICAgKVxuICAgICAgICAgIC5tYXAoKGxheWVyOiBNYXBXaWRnZXRMYXllck9wdGlvbnMsIGlkeCwgYXJyYXkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGF0dHJpYnV0ZXNGb3JDbGFzcyA9IE9iamVjdC5rZXlzKHJlc3VsdFNldC5pdGVtcylcbiAgICAgICAgICAgICAgLm1hcCgoY2xhc3NJZCkgPT4gKHtcbiAgICAgICAgICAgICAgICBjbGFzc0lkLFxuICAgICAgICAgICAgICAgIC4uLnRoaXMuZ2V0QXR0cmlidXRlc0ZvckRyYXdpbmcoY2xhc3NlcywgY2xhc3NJZCwgbGF5ZXIpXG4gICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAucmVkdWNlKFxuICAgICAgICAgICAgICAgIChwLCBjKSA9PiAoe1xuICAgICAgICAgICAgICAgICAgLi4ucCxcbiAgICAgICAgICAgICAgICAgIFtjLmNsYXNzSWRdOiBjXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAge30gYXMge1xuICAgICAgICAgICAgICAgICAgW2tleTogc3RyaW5nXToge1xuICAgICAgICAgICAgICAgICAgICBpbnRlbnNpdHlBdHRyaWJ1dGU6IEF0dHJpYnV0ZTtcbiAgICAgICAgICAgICAgICAgICAgbG9jYXRpb25BdHRyaWJ1dGU6IEF0dHJpYnV0ZTtcbiAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBsZXQgbGF5ZXJDbGFzc2VzSWQgPSBjbGFzc2VzLm1hcCgoY2xhenopID0+IGNsYXp6LmlkKTtcbiAgICAgICAgICAgIGlmICgnY2xhc3NlcycgaW4gbGF5ZXIgJiYgISFsYXllci5jbGFzc2VzICYmIGxheWVyLmNsYXNzZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICBsYXllckNsYXNzZXNJZCA9IGxheWVyLmNsYXNzZXM7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCByYW5nZSA9IHsgbWluOiAwLCBtYXg6IDAgfTtcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIGlmICghIWxheWVyLmludGVuc2l0eUF0dHJpYnV0ZSkge1xuICAgICAgICAgICAgICBjb25zdCB2YWx1ZXMgPSBPYmplY3Qua2V5cyhyZXN1bHRTZXQuaXRlbXMpXG4gICAgICAgICAgICAgICAgLm1hcCgoY2xhc3NJZCkgPT5cbiAgICAgICAgICAgICAgICAgIHJlc3VsdFNldC5pdGVtc1tjbGFzc0lkXS5tYXAoKGl0ZW0pID0+XG4gICAgICAgICAgICAgICAgICAgIEl0ZW1VdGlscy5nZXRBdHRyaWJ1dGVDYWxjdWxhdGVkVmFsdWUoaXRlbSwgYXR0cmlidXRlc0ZvckNsYXNzW2l0ZW0ub0NsYXNzXS5pbnRlbnNpdHlBdHRyaWJ1dGUpXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5yZWR1Y2UoKHAsIGMpID0+IFsuLi5wLCAuLi5jXSwgW10pXG4gICAgICAgICAgICAgICAgLmZpbHRlcigodmFsdWUpID0+ICEhdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykgYXMgbnVtYmVyW107XG5cbiAgICAgICAgICAgICAgcmFuZ2UgPSB2YWx1ZXMucmVkdWNlKChwLCBjKSA9PiAoeyBtaW46IE1hdGgubWluKHAubWluLCBjKSwgbWF4OiBNYXRoLm1heChwLm1heCwgYykgfSksIHtcbiAgICAgICAgICAgICAgICBtaW46IE51bWJlci5NQVhfVkFMVUUsXG4gICAgICAgICAgICAgICAgbWF4OiAtTnVtYmVyLk1BWF9WQUxVRVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgaW1wbCA9IHRoaXMud2lkZ2V0TWFwTGF5ZXJTZXJ2aWNlLmxheWVyc0ltcGxlbWVudGF0aW9uW2xheWVyLnR5cGVdO1xuICAgICAgICAgICAgaWYgKCEhaW1wbCkge1xuICAgICAgICAgICAgICBjb25zdCByZXN1bHRMYXllciA9IGltcGwoXG4gICAgICAgICAgICAgICAgbGF5ZXIgYXMgYW55LFxuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXNGb3JDbGFzcyxcbiAgICAgICAgICAgICAgICBsYXllckNsYXNzZXNJZCxcbiAgICAgICAgICAgICAgICByZXN1bHRTZXQsXG4gICAgICAgICAgICAgICAgcmFuZ2UsXG4gICAgICAgICAgICAgICAgaXRlbVN0eWxlcyxcbiAgICAgICAgICAgICAgICB0aGlzLm1hcFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICByZXN1bHRMYXllci5zZXQoJ2ZpdCcsIGxheWVyLmZpdCk7XG4gICAgICAgICAgICAgIHJlc3VsdExheWVyLnNldCgndHlwZScsIGxheWVyLnR5cGUpO1xuICAgICAgICAgICAgICByZXN1bHRMYXllci5zZXQoJ3NsaWRlJywgbGF5ZXIuc2xpZGUpO1xuICAgICAgICAgICAgICByZXN1bHRMYXllci5zZXQoJ29yZGVyJywgbGF5ZXIub3JkZXIpO1xuICAgICAgICAgICAgICBjb25zdCBtYXhMYXllck9yZGVyID0gTWF0aC5tYXgoLi4uYXJyYXkubWFwKChsKSA9PiBsLm9yZGVyID8/IDApKTtcbiAgICAgICAgICAgICAgcmVzdWx0TGF5ZXIuc2V0WkluZGV4KG1heExheWVyT3JkZXIgKyAxIC0gKGxheWVyLm9yZGVyID8/IGlkeCkpO1xuICAgICAgICAgICAgICBpZiAobGF5ZXIudHlwZSA9PT0gJ3JlbGF0aW9uJykge1xuICAgICAgICAgICAgICAgIGhhc1JlbGF0aW9uTGF5ZXIgPSByZXN1bHRMYXllciBhcyB1bmtub3duIGFzIFZlY3RvckxheWVyPFZlY3RvclNvdXJjZT47XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmVzdWx0TGF5ZXIuc2V0KCd0aXRsZScsIGxheWVyLnRpdGxlKTtcblxuICAgICAgICAgICAgICBpZiAobGF5ZXIudHlwZSA9PT0gJ2dlb3NlcnZlcicpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjcWxfZmlsdGVyID0gQ3FsVXRpbHMuZ2V0Q1FMUGFyYW1zRm9yKGxheWVyLmRhdGFzb3VyY2VJZCwgZmlsdGVycywgY2xhc3NlcywgZmllbGRzKTtcblxuICAgICAgICAgICAgICAgIGlmIChjcWxfZmlsdGVyKSB7XG4gICAgICAgICAgICAgICAgICAvLyBBZGRpbmcgQ1FMIHF1ZXJ5IHRvIGdlb3NlcnZlciBsYXllcnNcbiAgICAgICAgICAgICAgICAgIChyZXN1bHRMYXllciBhcyBUaWxlPFRpbGVXTVM+KS5nZXRTb3VyY2UoKSEudXBkYXRlUGFyYW1zKHsgY3FsX2ZpbHRlciB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAobGF5ZXIuc2xpZGUgJiYgbGF5ZXIuc2xpZGUgIT09ICdhbGwnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sYXllclNsaWRlci5hcHBseVNsaWRlKFxuICAgICAgICAgICAgICAgICAgbGF5ZXIuc2xpZGUsXG4gICAgICAgICAgICAgICAgICByZXN1bHRMYXllciBhcyB1bmtub3duIGFzIFRpbGVMYXllcjxhbnk+IHwgVmVjdG9yTGF5ZXI8YW55PiB8IEhlYXRtYXBcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdExheWVyO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgTGF5ZXIgdHlwZSAke2xheWVyLnR5cGV9IGlzIHVua25vd25gKTtcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGwgYXMgdW5rbm93biBhcyBCYXNlTGF5ZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuZmlsdGVyKChsYXllcikgPT4gISFsYXllcik7XG5cbiAgICAgICAgaWYgKCEhaGFzUmVsYXRpb25MYXllcikge1xuICAgICAgICAgIGNvbnN0IGZlYXR1cmVzID0gbGF5ZXJzXG4gICAgICAgICAgICAuZmlsdGVyKChsYXllcikgPT4gIShsYXllciBpbnN0YW5jZW9mIFRpbGUpKVxuICAgICAgICAgICAgLm1hcCgobGF5ZXIpID0+XG4gICAgICAgICAgICAgIGxheWVyXG4gICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICAgIC5nZXRTb3VyY2UoKVxuICAgICAgICAgICAgICAgIC5nZXRGZWF0dXJlcygpXG4gICAgICAgICAgICAgICAgLmZpbHRlcigoZmVhdHVyZXM6IEZlYXR1cmU8YW55PikgPT4gISFmZWF0dXJlcy5nZXQoJ2lkJykgfHwgISFmZWF0dXJlcy5nZXQoJ2ZlYXR1cmVzJykpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAucmVkdWNlKChwLCBjKSA9PiBbLi4ucCwgLi4uY10sIFtdKTtcblxuICAgICAgICAgIHJlc3VsdFNldC5yZWxhdGlvbnMuZm9yRWFjaCgocmVsYXRpb24pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZSA9IGZlYXR1cmVzLmZpbmQoKGY6IEZlYXR1cmU8UG9pbnQgfCBDaXJjbGU+KSA9PiBmLmdldCgnaWQnKSA9PT0gcmVsYXRpb24uc291cmNlKTtcbiAgICAgICAgICAgIGNvbnN0IGRlc3QgPSBmZWF0dXJlcy5maW5kKChmOiBGZWF0dXJlPFBvaW50IHwgQ2lyY2xlPikgPT4gZi5nZXQoJ2lkJykgPT09IHJlbGF0aW9uLmRlc3RpbmF0aW9uKTtcbiAgICAgICAgICAgIGlmICghIXNvdXJjZSAmJiAhIWRlc3QpIHtcbiAgICAgICAgICAgICAgaGFzUmVsYXRpb25MYXllci5nZXRTb3VyY2UoKT8uYWRkRmVhdHVyZShXaWRnZXRNYXBVdGlscy5nZXRMaW5rRmVhdHVyZShyZWxhdGlvbiwgc291cmNlLCBkZXN0KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgbGF5ZXJzLnB1c2goLi4uYWRkaXRpb25hbExheWVycyk7XG5cbiAgICAgICAgY29uc3QgdmlzaWJsZUxheWVycyA9IGxheWVyR3JvdXBzLm1hcCgoZ3JvdXApID0+IGdyb3VwLnZpc2libGVMYXllcnMpLmZsYXQoKTtcbiAgICAgICAgbGF5ZXJzLmZvckVhY2goKGxheWVyLCBpZHgpID0+IHtcbiAgICAgICAgICBpZiAoIXZpc2libGVMYXllcnMuaW5jbHVkZXMobGF5ZXIuZ2V0KCd0aXRsZScpKSkge1xuICAgICAgICAgICAgbGF5ZXIuc2V0VmlzaWJsZShmYWxzZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICAvKiBSZXNvbHZlIGJ1ZyBkcmF3aW5nIHdlYmdsbGF5ZXIgd2l0aG91dCBub3RoaW5nIHVuZGVybmVhdGg6IGFkZCBlbXB0eSBsYXllciBiZWxvdyAqL1xuICAgICAgICBjb25zdCBfbGF5ZXJzID0gdGhpcy5hZGRFbXB0eVdlYkdsTGF5ZXJCZWxvd1NsaWRlSGVhdG1hcHMobGF5ZXJzKTtcbiAgICAgICAgdGhpcy5wcmV2aW91c0xheWVycy5wdXNoKC4uLl9sYXllcnMpO1xuICAgICAgICByZXR1cm4gX2xheWVycztcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMuZml0RXh0ZW50cyQgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMub3B0aW9ucyQsXG4gICAgICB0aGlzLmNsYXNzZXMkLFxuICAgICAgdGhpcy5maWVsZHMkLFxuICAgICAgdGhpcy5kYXRhc291cmNlRmlsdGVycyQsXG4gICAgICB0aGlzLndtc0NhcGFiaWxpdGllcyRcbiAgICBdKS5waXBlKFxuICAgICAgZGVib3VuY2VUaW1lKDEwMCksXG4gICAgICBzd2l0Y2hNYXAoKFtvcHRpb25zLCBjbGFzc2VzLCBmaWVsZHMsIGZpbHRlcnMsIHdtc0NhcGFiaWxpdGllc10pID0+XG4gICAgICAgIChvcHRpb25zLmxheWVycyA/PyBbXSkuZmluZCgobGF5ZXIpID0+IFsnZ2Vvc2VydmVyJywgJ3dtcyddLmluY2x1ZGVzKGxheWVyLnR5cGUpICYmIGxheWVyLmZpdClcbiAgICAgICAgICA/IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICAgICAgICAuLi4oKG9wdGlvbnMubGF5ZXJzPy5maWx0ZXIoKGxheWVyKSA9PiBsYXllci50eXBlID09PSAnZ2Vvc2VydmVyJykgPz8gW10pIGFzIE1hcEdlb1NlcnZlckxheWVyT3B0aW9uc1tdKVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoKGxheWVyKSA9PiBsYXllci5maXQpXG4gICAgICAgICAgICAgICAgLm1hcCgobGF5ZXI6IE1hcEdlb1NlcnZlckxheWVyT3B0aW9ucykgPT5cbiAgICAgICAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICAgICAgY2xhc3Nlcy5maW5kKChjbGF6eikgPT4gY2xhenouaWQgPT09IGxheWVyLm9DbGFzcykgPz8gKHsgYXR0cmlidXRlczogW10gfSBhcyB1bmtub3duIGFzIENsYXNzKVxuICAgICAgICAgICAgICAgICAgKS5hdHRyaWJ1dGVzXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoKGF0dHIpID0+ICh7IGF0dHIsIGZpZWxkOiBmaWVsZHMuZmluZCgoZmllbGQpID0+IGZpZWxkLmlkID09PSBhdHRyLmZpZWxkKSB9KSlcbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcigoeyBhdHRyLCBmaWVsZCB9KSA9PiBHZW9tZXRyaWNGaWVsZFR5cGVzLmluY2x1ZGVzKGZpZWxkPy50eXBlID8/ICctLS0tJykpXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoKHsgYXR0ciwgZmllbGQgfSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByeUFnZ3JlZ2F0aW9uU2VydmljZVxuICAgICAgICAgICAgICAgICAgICAgICAgLmFnZ3JlZ2F0ZShbbGF5ZXIuZGF0YXNvdXJjZUlkXSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBvcmRpbmF0ZTogeyBvcGVyYXRpb246IE9wZXJhdGlvbi5FWFRFTlQsIGF0dHJpYnV0ZTogYXR0ci5pZCwgbGFiZWw6IGF0dHIubmFtZSwga2VlcDA6IGZhbHNlIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gYXMgQ2hhcnRBZ2dyZWdhdGVkV2lkZ2V0T3B0aW9ucylcbiAgICAgICAgICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXAoKGV4dGVudFJlc3BvbnNlOiBBZ2dyZWdhdGlvblJlc3VsdCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWRnZXRNYXBVdGlscy5wcm9qZWN0RXh0ZW50QWdncmVnYXRpb25SZXNwb25zZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkISxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVudFJlc3BvbnNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3bXNDYXBhYmlsaXRpZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1hcFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoKSA9PiBvZih7IGRhdGFzb3VyY2U6IGxheWVyLmRhdGFzb3VyY2VJZCwgZXh0ZW50OiBbXSwgZXJyb3I6IHRydWUgfSkpXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgLmZsYXQoKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuZmxhdCgpLFxuICAgICAgICAgICAgICAuLi4oKG9wdGlvbnMubGF5ZXJzPy5maWx0ZXIoKGxheWVyKSA9PiBsYXllci50eXBlID09PSAnd21zJykgPz8gW10pIGFzIE1hcFdNU0xheWVyTGF5ZXJPcHRpb25zW10pXG4gICAgICAgICAgICAgICAgLmZpbHRlcigobGF5ZXIpID0+IGxheWVyLmZpdClcbiAgICAgICAgICAgICAgICAubWFwKChsYXllcjogTWFwV01TTGF5ZXJMYXllck9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGV4dGVudCA9IFhNTFV0aWxzLmdldExheWVyRXh0ZW50KGxheWVyLnBhcmFtTGF5ZXIsIHRoaXMubWFwLCB3bXNDYXBhYmlsaXRpZXMhW2xheWVyLnVybF0/LmRvYyk7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gb2Yoe1xuICAgICAgICAgICAgICAgICAgICBkYXRhc291cmNlOiBgd21zLSR7bGF5ZXIucGFyYW1MYXllcn1gLFxuICAgICAgICAgICAgICAgICAgICBleHRlbnQ6IGV4dGVudCA/PyBbXSxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6ICFleHRlbnRcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBdKVxuICAgICAgICAgIDogb2YoW10pXG4gICAgICApLFxuICAgICAgc3RhcnRXaXRoKFxuICAgICAgICBbXSBhcyB7XG4gICAgICAgICAgZGF0YXNvdXJjZTogc3RyaW5nO1xuICAgICAgICAgIGV4dGVudDogQ29vcmRpbmF0ZVtdO1xuICAgICAgICAgIGVycm9yOiBib29sZWFuO1xuICAgICAgICB9W11cbiAgICAgIClcbiAgICApO1xuXG4gICAgdGhpcy5sZWdlbmRMYXllcnMkID0gdGhpcy5vcHRpb25zJC5waXBlKFxuICAgICAgbWFwKFxuICAgICAgICAob3B0aW9ucykgPT5cbiAgICAgICAgICAob3B0aW9ucy5sYXllcnMgPz8gW10pLmZpbHRlcigobGF5ZXIpID0+IFsnZ2Vvc2VydmVyJywgJ3dtcyddLmluY2x1ZGVzKGxheWVyLnR5cGUpKSBhcyAoXG4gICAgICAgICAgICB8IE1hcEdlb1NlcnZlckxheWVyT3B0aW9uc1xuICAgICAgICAgICAgfCBNYXBXTVNMYXllckxheWVyT3B0aW9uc1xuICAgICAgICAgIClbXVxuICAgICAgKSxcbiAgICAgIGRlbGF5KDEwKVxuICAgICk7XG5cbiAgICB0aGlzLmxheWVyc1RvcCQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLmxlZ2VuZFRvcCQsIHRoaXMubGVnZW5kTGF5ZXJzJF0pLnBpcGUoXG4gICAgICBtYXAoKFtsZWdlbmRUb3AsIGxheWVyc10pID0+IGxlZ2VuZFRvcCArICgobGF5ZXJzLmxlbmd0aCA/PyAwKSA+IDAgPyA1MCA6IDApKVxuICAgICk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMubGF5ZXJzVG9wJCwgdGhpcy5sZWdlbmRMYXllcnMkLCB0aGlzLm9sWm9vbUVsZW1lbnQkLCB0aGlzLmRpc3BsYXlIZWFkZXIkXSlcbiAgICAgICAgLnBpcGUod2l0aExhdGVzdEZyb20odGhpcy5sYXllcnMkKSlcbiAgICAgICAgLnN1YnNjcmliZSgoW1tsYXllcnNUb3AsIGxlZ2VuZCwgem9vbUVsZW1lbnQsIGRpc3BsYXlIZWFkZXJdLCBsYXllcnNdKSA9PiB7XG4gICAgICAgICAgaWYgKHpvb21FbGVtZW50KSB7XG4gICAgICAgICAgICB6b29tRWxlbWVudC5zdHlsZS50b3AgPSBgJHtcbiAgICAgICAgICAgICAgbGF5ZXJzVG9wICtcbiAgICAgICAgICAgICAgKChsZWdlbmQubGVuZ3RoID8/IDApID4gMCB8fCBsYXllcnMubGVuZ3RoID4gMCA/IDIwIDogMCkgK1xuICAgICAgICAgICAgICAoIWRpc3BsYXlIZWFkZXIgPyBXSURHRVRfSEVBREVSX0hFSUdIVC52YWx1ZSA6IDApXG4gICAgICAgICAgICB9cHhgO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICB0aGlzLm1hcFN0eWxlTGF5ZXIkLFxuICAgICAgICB0aGlzLmxheWVycyQsXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJZHMkLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKHAsIGMpID0+IGVxdWFsKHAsIGMpKSksXG4gICAgICAgIHRoaXMuZml0RXh0ZW50cyQsXG4gICAgICAgIHRoaXMuZGF0YXNvdXJjZUZpbHRlcnMkXG4gICAgICBdKS5zdWJzY3JpYmUoKFttYXBTdHlsZUxheWVyLCBsYXllcnMsIHNlbGVjdGVkSWRzLCBleHRlbnRzLCBmaWx0ZXJzXSkgPT4ge1xuICAgICAgICBjb25zdCBuZWVkZWRDYWxjdWxhdGVkRXh0ZW50cyA9IGxheWVycy5maWx0ZXIoXG4gICAgICAgICAgKGxheWVyKSA9PiBbJ2dlb3NlcnZlcicsICd3bXMnXS5pbmNsdWRlcyhsYXllci5nZXQoJ3R5cGUnKSkgJiYgbGF5ZXIuZ2V0KCdmaXQnKVxuICAgICAgICApLmxlbmd0aDtcbiAgICAgICAgY29uc3QgbmJDYWxjdWxhdGVkRXh0ZW50cyA9IGV4dGVudHMuZmlsdGVyKChleHRlbnQpID0+ICFleHRlbnQuZXJyb3IpLmxlbmd0aDtcblxuICAgICAgICBpZiAobmJDYWxjdWxhdGVkRXh0ZW50cyA+PSBuZWVkZWRDYWxjdWxhdGVkRXh0ZW50cykge1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdG9BcHBseUxheWVycyA9IFsuLi5sYXllcnMsIC4uLm1hcFN0eWxlTGF5ZXJdO1xuICAgICAgICAgICAgdGhpcy5tYXAuc2V0TGF5ZXJzKHRvQXBwbHlMYXllcnMpO1xuXG4gICAgICAgICAgICB0aGlzLmZpdE1hcEZvck9iamVjdHMoc2VsZWN0ZWRJZHMsIGV4dGVudHMpO1xuICAgICAgICAgICAgdGhpcy5tYXAudXBkYXRlU2l6ZSgpO1xuXG4gICAgICAgICAgICB0aGlzLm1hcFxuICAgICAgICAgICAgICAuZ2V0QWxsTGF5ZXJzKClcbiAgICAgICAgICAgICAgLmZpbHRlcigobGF5ZXIpID0+ICEobGF5ZXIgaW5zdGFuY2VvZiBUaWxlKSlcbiAgICAgICAgICAgICAgLmZvckVhY2goKGxheWVyKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZ2V0RmVhdHVyZXMgPSAobGF5ZXIuZ2V0U291cmNlKCkgYXMgVmVjdG9yU291cmNlKT8uZ2V0RmVhdHVyZXM7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBnZXRGZWF0dXJlcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgKGxheWVyLmdldFNvdXJjZSgpIGFzIFZlY3RvclNvdXJjZSk/LmdldEZlYXR1cmVzKCkuZm9yRWFjaCgoZmVhdHVyZTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHR5cGUgPSBmZWF0dXJlLmdldCgndHlwZScpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgWydidWJibGUnLCAnbWFya2VyJywgJ3BvaW50JywgJ2xpbmUnLCAncG9seWdvbicsICdtdWx0aS1saW5lJywgJ211bHRpLXBvbHlnb24nXS5pbmNsdWRlcyh0eXBlKVxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlLnNldFN0eWxlKFxuICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZS5nZXQoc2VsZWN0ZWRJZHMuaW5jbHVkZXMoZmVhdHVyZS5nZXQoJ2lkJykpID8gJ3NlbGVjdGVkU3R5bGUnIDogJ2NsYXNzaWNTdHlsZScpXG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9LCAxMDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMubWFwLnNldExheWVycyhbLi4ubWFwU3R5bGVMYXllcl0pO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGFkZEVtcHR5V2ViR2xMYXllckJlbG93U2xpZGVIZWF0bWFwcyhsYXllcnM6IEJhc2VMYXllcltdKSB7XG4gICAgY29uc3QgX2xheWVycyA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGF5ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBsYXllciA9IGxheWVyc1tpXTtcbiAgICAgIF9sYXllcnMucHVzaChsYXllcik7XG4gICAgICBpZiAobGF5ZXIuZ2V0KCd0eXBlJykgPT09ICdoZWF0bWFwJyAmJiBsYXllci5nZXQoJ3NsaWRlJykpIHtcbiAgICAgICAgY29uc3QgZW1wdHlEYXRhID0gbmV3IFVpbnQ4QXJyYXkoMjU2ICogMjU2ICogNCk7XG4gICAgICAgIGNvbnN0IGVtcHR5TGF5ZXIgPSBuZXcgV2ViR0xUaWxlTGF5ZXIoe1xuICAgICAgICAgIHNvdXJjZTogbmV3IERhdGFUaWxlKHtcbiAgICAgICAgICAgIGxvYWRlcigpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGVtcHR5RGF0YTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtYXhab29tOiAwLFxuICAgICAgICAgICAgd3JhcFg6IHRydWVcbiAgICAgICAgICB9KVxuICAgICAgICB9KTtcbiAgICAgICAgX2xheWVycy5wdXNoKGVtcHR5TGF5ZXIpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gX2xheWVycztcbiAgfVxuXG4gIG92ZXJyaWRlIGluaXRSZXN1bHRTZXQkKCkge1xuICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMuc3RvcmUuc2VsZWN0KERhc2hib2FyZFNlbGVjdG9ycy5yZXN1bHRTZXRzKSxcbiAgICAgIHRoaXMuZGF0YXNvdXJjZUlkcyQsXG4gICAgICB0aGlzLnN0YXRpY1Jlc3VsdFNldCQsXG4gICAgICB0aGlzLnN0b3JlLnNlbGVjdChEYXRhU291cmNlU2VsZWN0b3JzLmRhdGFzZXRzKVxuICAgIF0pLnBpcGUoXG4gICAgICBtYXAoKFtyZXN1bHRTZXRzLCByZXN1bHRTZXROYW1lc0FycmF5LCBzdGF0aWNSZXN1bHRTZXQsIGRlZmluaXRpb25zXSkgPT4ge1xuICAgICAgICBpZiAoISFzdGF0aWNSZXN1bHRTZXQpIHtcbiAgICAgICAgICByZXR1cm4gc3RhdGljUmVzdWx0U2V0O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlc3VsdFNldEFycmF5ID0gcmVzdWx0U2V0TmFtZXNBcnJheVxuICAgICAgICAgIC5maWx0ZXIoKHJzTmFtZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGVmaW5pdGlvbiA9IGRlZmluaXRpb25zLmZpbmQoKGRzZCkgPT4gZHNkLmlkID09PSByc05hbWUpIGFzIERhdGFzZXQgfCB1bmRlZmluZWQ7XG4gICAgICAgICAgICByZXR1cm4gIWRlZmluaXRpb24gfHwgIShkZWZpbml0aW9uLm1ldGFkYXRhID8/IFtdKS5maW5kKChtZXRhKSA9PiBtZXRhLm1ldGFkYXRhRGVmLm5hbWUgPT09ICdfZ2VvS2V5Jyk7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAubWFwKChyc05hbWUpID0+IHJlc3VsdFNldHNbcnNOYW1lID8/ICcnXSlcbiAgICAgICAgICAuZmlsdGVyKChyc05hbWUpID0+ICEhcnNOYW1lKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdFNldEFycmF5LnJlZHVjZSgocnMxLCByczIpID0+IFJlc3VsdHNldFV0aWxzLm1lcmdlUmVzdWx0U2V0cyhyczEsIHJzMiksIHtcbiAgICAgICAgICBpdGVtczoge30sXG4gICAgICAgICAgcmVsYXRpb25zOiBbXSxcbiAgICAgICAgICBtZXJnZWQ6IHJlc3VsdFNldEFycmF5Lmxlbmd0aFxuICAgICAgICB9KTtcbiAgICAgIH0pLFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKHAsIHYpID0+IGVxdWFsKHAsIHYpKVxuICAgICk7XG4gIH1cblxuICBzZXREZWZhdWx0TGF5ZXJUaXRsZShcbiAgICBsYXllcjogTWFwV2lkZ2V0TGF5ZXJPcHRpb25zLFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgY2FwYWJpbGl0aWVzOlxuICAgICAgfCB7XG4gICAgICAgICAgW3A6IHN0cmluZ106IEdldENhcGFiaWxpdGllc1Jlc3BvbnNlIHwgbnVsbDtcbiAgICAgICAgfVxuICAgICAgfCB1bmRlZmluZWRcbiAgKSB7XG4gICAgaWYgKCFsYXllci50aXRsZSkge1xuICAgICAgaWYgKFsnZ2Vvc2VydmVyJywgJ3dtcyddLmluY2x1ZGVzKGxheWVyLnR5cGUpKSB7XG4gICAgICAgIGNvbnN0IGdlb0xheWVyID0gbGF5ZXIgYXMgTWFwR2VvU2VydmVyTGF5ZXJPcHRpb25zIHwgTWFwV01TTGF5ZXJMYXllck9wdGlvbnM7XG4gICAgICAgIGNvbnN0IGxheWVyQ2FwYWJpbGl0aWVzID0gY2FwYWJpbGl0aWVzID8gY2FwYWJpbGl0aWVzW2dlb0xheWVyLnVybF0gOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgaWYgKGxheWVyQ2FwYWJpbGl0aWVzKSB7XG4gICAgICAgICAgY29uc3QgbWF0Y2hpbmdMYXllciA9IFhNTFV0aWxzLmdldE1hdGNoaW5nTGF5ZXIoZ2VvTGF5ZXIucGFyYW1MYXllciwgbGF5ZXJDYXBhYmlsaXRpZXMuZG9jKTtcbiAgICAgICAgICBpZiAobWF0Y2hpbmdMYXllcikge1xuICAgICAgICAgICAgY29uc3QgbWF0Y2hpbmdUaXRsZSA9IFhNTFV0aWxzLmZpbmQobWF0Y2hpbmdMYXllci5jaGlsZE5vZGVzLCAnVGl0bGUnKTtcbiAgICAgICAgICAgIGlmIChtYXRjaGluZ1RpdGxlKSB7XG4gICAgICAgICAgICAgIGxheWVyLnRpdGxlID1cbiAgICAgICAgICAgICAgICAhIW1hdGNoaW5nVGl0bGUudGV4dENvbnRlbnQgJiYgbWF0Y2hpbmdUaXRsZS50ZXh0Q29udGVudC5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgICA/IG1hdGNoaW5nVGl0bGUudGV4dENvbnRlbnRcbiAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsYXllci50aXRsZSA9IGdlb0xheWVyLnBhcmFtTGF5ZXI7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxheWVyLnRpdGxlID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoYEBwcnkud2lkZ2V0Lm1hcC5sYXllclR5cGUuJHtsYXllci50eXBlfWAsIHsgLi4ubGF5ZXIgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZml0TWFwRm9yT2JqZWN0cyhcbiAgICBzZWxlY3RlZElkcz86IHN0cmluZ1tdLFxuICAgIGV4dGVudHM6IHtcbiAgICAgIGRhdGFzb3VyY2U6IHN0cmluZztcbiAgICAgIGV4dGVudDogQ29vcmRpbmF0ZVtdO1xuICAgIH1bXSA9IFtdXG4gICkge1xuICAgIGxldCBleHRlbnQgPSBjcmVhdGVFbXB0eSgpO1xuICAgIGNvbnN0IGxpc3RPZk1hcmtlcnMgPSBbXSBhcyBhbnlbXTtcblxuICAgIC8qIE1hbmRhdG9yeSBmaXQgKi9cbiAgICB0aGlzLm1hcFxuICAgICAgLmdldEFsbExheWVycygpXG4gICAgICAuZmlsdGVyKChsYXllcikgPT4gbGF5ZXIuZ2V0UHJvcGVydGllcygpWydmaXQnXSlcbiAgICAgIC5maWx0ZXIoKGxheWVyKSA9PiAhIWxheWVyLmdldFNvdXJjZSAmJiAhIWxheWVyLmdldFNvdXJjZSgpICYmICEhKGxheWVyLmdldFNvdXJjZSgpIGFzIFZlY3RvclNvdXJjZSkuZ2V0RmVhdHVyZXMpXG4gICAgICAuZm9yRWFjaCgobGF5ZXIpID0+IHtcbiAgICAgICAgKGxheWVyLmdldFNvdXJjZSgpIGFzIFZlY3RvclNvdXJjZSkuZ2V0RmVhdHVyZXMoKS5mb3JFYWNoKChmZWF0dXJlOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCBpZCA9IGZlYXR1cmUuZ2V0KCdpZCcpO1xuICAgICAgICAgIGlmICghc2VsZWN0ZWRJZHMgfHwgc2VsZWN0ZWRJZHMubGVuZ3RoIDw9IDAgfHwgKHNlbGVjdGVkSWRzLmxlbmd0aCA+IDAgJiYgc2VsZWN0ZWRJZHMuaW5jbHVkZXMoaWQpKSkge1xuICAgICAgICAgICAgc3dpdGNoIChmZWF0dXJlLmdldCgndHlwZScpKSB7XG4gICAgICAgICAgICAgIGNhc2UgJ2hlYXRwb2ludCc6XG4gICAgICAgICAgICAgIGNhc2UgJ3BvaW50JzpcbiAgICAgICAgICAgICAgY2FzZSAnbWFya2VyJzpcbiAgICAgICAgICAgICAgICBsaXN0T2ZNYXJrZXJzLnB1c2goZmVhdHVyZS5nZXRHZW9tZXRyeSgpLmdldENvb3JkaW5hdGVzKCkpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlICdsaW5lJzpcbiAgICAgICAgICAgICAgY2FzZSAnbGluayc6XG4gICAgICAgICAgICAgICAgbGlzdE9mTWFya2Vycy5wdXNoKC4uLmZlYXR1cmUuZ2V0R2VvbWV0cnkoKS5nZXRDb29yZGluYXRlcygpKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSAncG9seWdvbic6XG4gICAgICAgICAgICAgIGNhc2UgJ211bHRpLWxpbmUnOlxuICAgICAgICAgICAgICAgIGxpc3RPZk1hcmtlcnMucHVzaCguLi5mZWF0dXJlLmdldEdlb21ldHJ5KCkuZ2V0Q29vcmRpbmF0ZXMoKS5mbGF0KCkpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlICdtdWx0aS1wb2x5Z29uJzpcbiAgICAgICAgICAgICAgICBsaXN0T2ZNYXJrZXJzLnB1c2goLi4uZmVhdHVyZS5nZXRHZW9tZXRyeSgpLmdldENvb3JkaW5hdGVzKCkuZmxhdCgpLmZsYXQoKSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgbGlzdE9mTWFya2Vycy5wdXNoKGZlYXR1cmUuZ2V0R2VvbWV0cnkoKS5nZXRDZW50ZXIoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgY29uc3Qgc2VsZWN0ZWRFeHRlbnQgPSBib3VuZGluZ0V4dGVudChcbiAgICAgIGxpc3RPZk1hcmtlcnMuZmlsdGVyKChjb29yZCkgPT4gISFjb29yZCkuY29uY2F0KC4uLmV4dGVudHMubWFwKChleHRlbnQpID0+IGV4dGVudC5leHRlbnQpKVxuICAgICk7XG5cbiAgICBpZiAoXG4gICAgICBzZWxlY3RlZEV4dGVudFswXSAhPT0gSW5maW5pdHkgJiZcbiAgICAgIHNlbGVjdGVkRXh0ZW50WzFdICE9PSBJbmZpbml0eSAmJlxuICAgICAgc2VsZWN0ZWRFeHRlbnRbMl0gIT09IC1JbmZpbml0eSAmJlxuICAgICAgc2VsZWN0ZWRFeHRlbnRbM10gIT09IC1JbmZpbml0eVxuICAgICkge1xuICAgICAgZXh0ZW50ID0gc2VsZWN0ZWRFeHRlbnQ7XG4gICAgfVxuXG4gICAgaWYgKGV4dGVudFswXSAhPT0gSW5maW5pdHkgJiYgZXh0ZW50WzFdICE9PSBJbmZpbml0eSAmJiBleHRlbnRbMl0gIT09IC1JbmZpbml0eSAmJiBleHRlbnRbM10gIT09IC1JbmZpbml0eSkge1xuICAgICAgdGhpcy5tYXAuZ2V0VmlldygpLmZpdChleHRlbnQsIHsgcGFkZGluZzogWzIwLCAyMCwgNzAsIDcwXSwgZHVyYXRpb246IDIwMCB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldEF0dHJpYnV0ZXNGb3JEcmF3aW5nKGNsYXNzZXM6IENsYXNzW10sIGNsYXNzSWQ6IHN0cmluZywgbGF5ZXI6IE1hcFdpZGdldExheWVyT3B0aW9ucykge1xuICAgIGNvbnN0IGNsYXNzT2JqID0gY2xhc3Nlcy5maW5kKChjbCkgPT4gY2wuaWQgPT09IGNsYXNzSWQpID8/ICh7IGF0dHJpYnV0ZXM6IFtdIGFzIEF0dHJpYnV0ZVtdIH0gYXMgQ2xhc3MpO1xuICAgIGNvbnN0IGxvY2F0aW9uQXR0cmlidXRlID0gdGhpcy5nZXRMb2NhdGlvbkF0dHJpYnV0ZShjbGFzc09iaiwgbGF5ZXIpO1xuICAgIGNvbnN0IGludGVuc2l0eUF0dHJpYnV0ZSA9IHRoaXMuZ2V0SW50ZW5zaXR5QXR0cmlidXRlKFxuICAgICAgY2xhc3NPYmosXG4gICAgICBsYXllciBhcyBNYXBXaWRnZXRIZWF0TWFwTGF5ZXJPcHRpb25zIHwgTWFwV2lkZ2V0QnViYmxlTGF5ZXJPcHRpb25zXG4gICAgKTtcbiAgICByZXR1cm4geyBsb2NhdGlvbkF0dHJpYnV0ZSwgaW50ZW5zaXR5QXR0cmlidXRlIH07XG4gIH1cblxuICBwcml2YXRlIGdldEludGVuc2l0eUF0dHJpYnV0ZShcbiAgICBjbGFzc09iajogQ2xhc3MgfCB1bmRlZmluZWQsXG4gICAgbGF5ZXI6IE1hcFdpZGdldEhlYXRNYXBMYXllck9wdGlvbnMgfCBNYXBXaWRnZXRCdWJibGVMYXllck9wdGlvbnNcbiAgKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIChjbGFzc09iaiB8fCB7IGF0dHJpYnV0ZXM6IFtdIH0pLmF0dHJpYnV0ZXMuZmluZChcbiAgICAgICAgKGF0dHIpID0+IGF0dHIudGVjaG5pY2FsTmFtZSA9PT0gbGF5ZXI/LmludGVuc2l0eUF0dHJpYnV0ZSA/PyAnJ1xuICAgICAgKSA/PyAodW5kZWZpbmVkIGFzIHVua25vd24gYXMgQXR0cmlidXRlKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldExvY2F0aW9uQXR0cmlidXRlKGNsYXNzT2JqOiBDbGFzcywgbGF5ZXI6IE1hcFdpZGdldExheWVyT3B0aW9ucyk6IEF0dHJpYnV0ZSB7XG4gICAgdHlwZSBsYXllcnMgPSBNYXBXaWRnZXRIZWF0TWFwTGF5ZXJPcHRpb25zIHwgTWFwV2lkZ2V0TWFya2VyTGF5ZXJPcHRpb25zIHwgTWFwV2lkZ2V0QnViYmxlTGF5ZXJPcHRpb25zO1xuICAgIGNvbnN0IHNwZWNpZmljTGF5ZXIgPSBsYXllciBhcyBsYXllcnM7XG4gICAgcmV0dXJuIChcbiAgICAgIGNsYXNzT2JqLmF0dHJpYnV0ZXMuZmluZCgoYXR0cikgPT4gYXR0ci50ZWNobmljYWxOYW1lID09PSAoc3BlY2lmaWNMYXllcj8uYXR0cmlidXRlID8/IFtdKSA/PyAnJykgPz9cbiAgICAgICh1bmRlZmluZWQgYXMgdW5rbm93biBhcyBBdHRyaWJ1dGUpXG4gICAgKTtcbiAgfVxuXG4gIGNoYW5nZVN0eWxlKCRldmVudDogYW55KSB7XG4gICAgdGhpcy5vcHRpb25zQ29weS5zdHlsZSA9ICRldmVudDtcbiAgICBpZiAodGhpcy5vcHRpb25zQ29weS5zdHlsZSAhPT0gdGhpcy5TVFlMRV9GUk9NX1VSTCkge1xuICAgICAgZGVsZXRlIHRoaXMub3B0aW9uc0NvcHkuc3R5bGVVUkw7XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlU3R5bGVVUkwoJGV2ZW50OiBFdmVudCkge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICB0aGlzLm9wdGlvbnNDb3B5LnN0eWxlVVJMID0gJGV2ZW50LmN1cnJlbnRUYXJnZXQ/LnZhbHVlO1xuICB9XG5cbiAgY2hhbmdlRml0KCRldmVudDogYm9vbGVhbiwgbGF5ZXI6IE1hcFdpZGdldExheWVyT3B0aW9ucykge1xuICAgIGxheWVyLmZpdCA9ICRldmVudDtcbiAgfVxuXG4gIGNoYW5nZVNsaWRlKCRldmVudDogdW5kZWZpbmVkIHwgJ2xlZnQnIHwgJ3JpZ2h0JywgbGF5ZXI6IE1hcFdpZGdldExheWVyT3B0aW9ucykge1xuICAgIGxheWVyLnNsaWRlID0gJGV2ZW50O1xuICB9XG5cbiAgY2hhbmdlQXR0cmlidXRpb25zKCRldmVudDogYm9vbGVhbikge1xuICAgIHRoaXMub3B0aW9uc0NvcHkuYXR0cmlidXRpb25zID0gJGV2ZW50O1xuICAgIGlmICh0aGlzLm9wdGlvbnNDb3B5LmF0dHJpYnV0aW9ucykge1xuICAgICAgdGhpcy5vcHRpb25zQ29weS5sYXllcnM/LmZvckVhY2goKGxheWVyKSA9PiAobGF5ZXIuYXR0cmlidXRpb24gPSAnJykpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5LmxheWVycz8uZm9yRWFjaCgobGF5ZXIpID0+IGRlbGV0ZSBsYXllci5hdHRyaWJ1dGlvbik7XG4gICAgfVxuICB9XG5cbiAgYWRkTGF5ZXIoZ3JvdXA6IExheWVyR3JvdXApIHtcbiAgICBpZiAoIXRoaXMub3B0aW9uc0NvcHkubGF5ZXJzKSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5LmxheWVycyA9IFtdO1xuICAgIH1cbiAgICBjb25zdCB0aXRsZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGBAcHJ5LndpZGdldC5tYXAubGF5ZXJgLCB7IGluZGV4OiB0aGlzLm9wdGlvbnNDb3B5LmxheWVycy5sZW5ndGggKyAxIH0pO1xuXG4gICAgdGhpcy5vcHRpb25zQ29weS5sYXllcnMucHVzaCh7XG4gICAgICBhdHRyaWJ1dGU6ICcnLFxuICAgICAgZ3JvdXA6IGdyb3VwLm5hbWUsXG4gICAgICB0aXRsZSxcbiAgICAgIHR5cGU6ICdtYXJrZXInXG4gICAgfSk7XG4gICAgdGhpcy5sYXllclNldHRpbmdzRXhwYW5kZWRTdGF0ZVt0aXRsZV0gPSBmYWxzZTtcblxuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goXG4gICAgICBEYXNoYm9hcmRBY3Rpb25zLnVwZGF0ZUxheWVyR3JvdXAoeyBuYW1lOiBncm91cC5uYW1lLCB2aXNpYmxlTGF5ZXJzOiBbLi4uZ3JvdXAudmlzaWJsZUxheWVycywgdGl0bGVdIH0pXG4gICAgKTtcbiAgICB0aGlzLnVwZGF0ZUxheWVyT3JkZXIoKTtcbiAgfVxuXG4gIGNoYW5nZUxheWVyVHlwZSgkZXZlbnQ6IGFueSwgaTogbnVtYmVyKSB7XG4gICAgaWYgKCF0aGlzLm9wdGlvbnNDb3B5LmxheWVycykge1xuICAgICAgdGhpcy5vcHRpb25zQ29weS5sYXllcnMgPSB0aGlzLm9wdGlvbnNDb3B5LmxheWVycyA/PyBbXTtcbiAgICB9XG4gICAgdGhpcy5vcHRpb25zQ29weS5sYXllcnNbaV0udHlwZSA9ICRldmVudDtcbiAgICBpZiAodGhpcy5vcHRpb25zQ29weS5sYXllcnNbaV0udHlwZSA9PT0gJ3dtcycpIHtcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnNDb3B5LmxheWVyc1tpXSBhcyBNYXBXTVNMYXllckxheWVyT3B0aW9ucztcbiAgICAgIG9wdGlvbnMucGFyYW1MYXllciA9IG9wdGlvbnMucGFyYW1MYXllciA/PyAnJztcbiAgICAgIG9wdGlvbnMudXJsID0gb3B0aW9ucy51cmwgPz8gJyc7XG4gICAgfVxuICAgIGlmICh0aGlzLm9wdGlvbnNDb3B5LmxheWVyc1tpXS50eXBlID09PSAnd210cycpIHtcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnNDb3B5LmxheWVyc1tpXSBhcyBNYXBXTVRTTGF5ZXJMYXllck9wdGlvbnM7XG4gICAgICBvcHRpb25zLnBhcmFtTGF5ZXIgPSBvcHRpb25zLnBhcmFtTGF5ZXIgPz8gJyc7XG4gICAgICBvcHRpb25zLnN0eWxlID0gb3B0aW9ucy5zdHlsZSA/PyAnJztcbiAgICAgIG9wdGlvbnMubWF0cml4U2V0ID0gb3B0aW9ucy5tYXRyaXhTZXQgPz8gJyc7XG4gICAgICBvcHRpb25zLnVybCA9IG9wdGlvbnMudXJsID8/ICcnO1xuICAgIH1cbiAgICBpZiAoWydmZWF0dXJlbGF5ZXInLCAndmVjdG9ydGlsZScsICdyYXN0ZXJ0aWxlJ10uaW5jbHVkZXModGhpcy5vcHRpb25zQ29weS5sYXllcnNbaV0udHlwZSkpIHtcbiAgICAgIGxldCBvcHRpb25zOiBNYXBGZWF0dXJlTGF5ZXJPcHRpb25zO1xuICAgICAgb3B0aW9ucyA9IHRoaXMub3B0aW9uc0NvcHkubGF5ZXJzW2ldIGFzIE1hcEZlYXR1cmVMYXllck9wdGlvbnM7XG4gICAgICBvcHRpb25zLnVybCA9IG9wdGlvbnMudXJsID8/ICcnO1xuICAgIH1cbiAgfVxuXG4gIGNoYW5nZVRpdGxlKCRldmVudDogYW55LCBsYXllcjogTWFwV2lkZ2V0TGF5ZXJPcHRpb25zLCBncm91cDogTGF5ZXJHcm91cCkge1xuICAgIGNvbnN0IHZpc2libGVMYXllcnMgPSBncm91cC52aXNpYmxlTGF5ZXJzLm1hcCgobGF5ZXJUaXRsZSkgPT4gKGxheWVyVGl0bGUgPT09IGxheWVyLnRpdGxlID8gJGV2ZW50IDogbGF5ZXJUaXRsZSkpO1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goRGFzaGJvYXJkQWN0aW9ucy51cGRhdGVMYXllckdyb3VwKHsgbmFtZTogZ3JvdXAubmFtZSwgdmlzaWJsZUxheWVycyB9KSk7XG4gICAgZGVsZXRlIHRoaXMubGF5ZXJTZXR0aW5nc0V4cGFuZGVkU3RhdGVbbGF5ZXIudGl0bGUhXTtcbiAgICBsYXllci50aXRsZSA9ICRldmVudDtcbiAgICB0aGlzLmxheWVyU2V0dGluZ3NFeHBhbmRlZFN0YXRlWyRldmVudF0gPSB0cnVlO1xuICB9XG5cbiAgZW1pdE1hbmlmZXN0KCkge1xuICAgIHRoaXMucmVtb3ZlRW1wdHlMYXllckdyb3VwcygpO1xuICAgIHRoaXMubWFuaWZlc3RNb2RpZmllZC5lbWl0KHtcbiAgICAgIHdpZGdldEluZGV4OiB0aGlzLndpZGdldEluZGV4LFxuICAgICAgbWFuaWZlc3Q6IHtcbiAgICAgICAgLi4udGhpcy5tYW5pZmVzdCxcbiAgICAgICAgb3B0aW9uczogeyAuLi50aGlzLm9wdGlvbnNDb3B5LCBsYXllcnM6ICh0aGlzLm9wdGlvbnNDb3B5LmxheWVycyA/PyBbXSkuZmlsdGVyKChsYXllcikgPT4gISFsYXllci50eXBlKSB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBjaGFuZ2VMb2NhdGlvbkF0dHJpYnV0ZXMoJGV2ZW50OiBhbnksIGxheWVyOiBNYXBXaWRnZXRMYXllck9wdGlvbnMpIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgbGF5ZXIuYXR0cmlidXRlID0gJGV2ZW50O1xuICB9XG5cbiAgbGF5ZXJIYXNJbnRlbnNpdHkobGF5ZXI6IE1hcFdpZGdldExheWVyT3B0aW9ucyk6IE1hcFdpZGdldEhlYXRNYXBMYXllck9wdGlvbnMgfCBNYXBXaWRnZXRCdWJibGVMYXllck9wdGlvbnMge1xuICAgIHJldHVybiA8TWFwV2lkZ2V0SGVhdE1hcExheWVyT3B0aW9ucyB8IE1hcFdpZGdldEJ1YmJsZUxheWVyT3B0aW9ucz5sYXllcjtcbiAgfVxuXG4gIGNoYW5nZUludGVuc2l0eUF0dHJpYnV0ZXMoJGV2ZW50OiBhbnksIGxheWVyOiBNYXBXaWRnZXRMYXllck9wdGlvbnMpIHtcbiAgICBjb25zdCBsYXllcl8gPSA8TWFwV2lkZ2V0SGVhdE1hcExheWVyT3B0aW9ucyB8IE1hcFdpZGdldEJ1YmJsZUxheWVyT3B0aW9ucz5sYXllcjtcbiAgICBsYXllcl8uaW50ZW5zaXR5QXR0cmlidXRlID0gJGV2ZW50O1xuICB9XG5cbiAgY2hhbmdlQ2xhc3NlcygkZXZlbnQ6IHN0cmluZ1tdLCBsYXllcjogTWFwV2lkZ2V0TGF5ZXJPcHRpb25zKSB7XG4gICAgY29uc3Qgc3BlY2lmaWNMYXllciA9IGxheWVyIGFzXG4gICAgICB8IE1hcFdpZGdldEhlYXRNYXBMYXllck9wdGlvbnNcbiAgICAgIHwgTWFwV2lkZ2V0TWFya2VyTGF5ZXJPcHRpb25zXG4gICAgICB8IE1hcFdpZGdldEJ1YmJsZUxheWVyT3B0aW9ucztcbiAgICBzcGVjaWZpY0xheWVyLmNsYXNzZXMgPSAkZXZlbnQ7XG4gIH1cblxuICBkZWxldGVMYXllcihpOiBudW1iZXIsIGxheWVyOiBNYXBXaWRnZXRMYXllck9wdGlvbnMsIGdyb3VwOiBMYXllckdyb3VwKSB7XG4gICAgdGhpcy5vcHRpb25zQ29weT8ubGF5ZXJzPy5zcGxpY2UoaSwgMSk7XG4gICAgdGhpcy51cGRhdGVMYXllckdyb3VwKFxuICAgICAgZ3JvdXAubmFtZSxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIGdyb3VwLnZpc2libGVMYXllcnMuZmlsdGVyKChsKSA9PiBsICE9PSBsYXllci50aXRsZSlcbiAgICApO1xuICAgIHRoaXMucmVtb3ZlRW1wdHlMYXllckdyb3VwcygpO1xuICAgIGlmIChsYXllci50eXBlID09PSAnYXV0bycpIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkuaWdub3JlQXV0b0xheWVyID0gWy4uLih0aGlzLm9wdGlvbnNDb3B5Lmlnbm9yZUF1dG9MYXllciA/PyBbXSksIGxheWVyLmtleSArICctJyArIGxheWVyLnN1YlR5cGVdO1xuICAgIH1cbiAgfVxuXG4gIGNoYW5nZVVybChcbiAgICAkZXZlbnQ6IEV2ZW50LFxuICAgIGxheWVyOlxuICAgICAgfCBNYXBXTVNMYXllckxheWVyT3B0aW9uc1xuICAgICAgfCBNYXBGZWF0dXJlTGF5ZXJPcHRpb25zXG4gICAgICB8IE1hcFZlY3RvclRpbGVMYXllck9wdGlvbnNcbiAgICAgIHwgTWFwUmFzdGVyVGlsZUxheWVyT3B0aW9uc1xuICAgICAgfCBNYXBXTVRTTGF5ZXJMYXllck9wdGlvbnNcbiAgICAgIHwgTWFwR2VvU2VydmVyTGF5ZXJPcHRpb25zXG4gICkge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBsYXllci51cmwgPSAkZXZlbnQuY3VycmVudFRhcmdldD8udmFsdWU7XG4gIH1cblxuICBjaGFuZ2VBdHRyaWJ1dGlvbigkZXZlbnQ6IEV2ZW50LCBsYXllcjogQmFzZVdpZGdldE1hcExheWVyT3B0aW9ucykge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBsYXllci5hdHRyaWJ1dGlvbiA9ICRldmVudC5jdXJyZW50VGFyZ2V0Py52YWx1ZTtcbiAgfVxuXG4gIGNoYW5nZVBhcmFtTGF5ZXIoJGV2ZW50OiBFdmVudCwgbGF5ZXI6IE1hcFdNU0xheWVyTGF5ZXJPcHRpb25zIHwgTWFwV01UU0xheWVyTGF5ZXJPcHRpb25zKSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGxheWVyLnBhcmFtTGF5ZXIgPSAkZXZlbnQuY3VycmVudFRhcmdldD8udmFsdWU7XG4gIH1cblxuICBjaGFuZ2VQYXJhbVRpbGVkKCRldmVudDogYm9vbGVhbiwgbGF5ZXI6IE1hcFdNU0xheWVyTGF5ZXJPcHRpb25zIHwgTWFwR2VvU2VydmVyTGF5ZXJPcHRpb25zKSB7XG4gICAgbGF5ZXIucGFyYW1UaWxlZCA9ICRldmVudDtcbiAgICB0aGlzLnRvb2x0aXBNYW5hZ2VyLmNsZWFyVG9vbHRpcCgpO1xuICB9XG5cbiAgY2hhbmdlTWF0cml4U2V0KCRldmVudDogRXZlbnQsIGxheWVyOiBNYXBXTVRTTGF5ZXJMYXllck9wdGlvbnMpIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgbGF5ZXIubWF0cml4U2V0ID0gJGV2ZW50LmN1cnJlbnRUYXJnZXQ/LnZhbHVlO1xuICB9XG5cbiAgY2hhbmdlUGFyYW1TdHlsZSgkZXZlbnQ6IEV2ZW50LCBsYXllcjogTWFwV01UU0xheWVyTGF5ZXJPcHRpb25zKSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGxheWVyLnN0eWxlID0gJGV2ZW50LmN1cnJlbnRUYXJnZXQ/LnZhbHVlO1xuICB9XG5cbiAgZXhwb3J0KCkge1xuICAgIFdpZGdldE1hcFV0aWxzLmV4cG9ydE1hcEFzSW1hZ2UodGhpcy5tYXAsICdtYXAucG5nJyk7XG4gIH1cblxuICBvdmVycmlkZSB0b0ltYWdlKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIFdpZGdldE1hcFV0aWxzLmdldE1hcEFzUG5nKHRoaXMubWFwKTtcbiAgfVxuXG4gIGNoYW5nZUNsdXN0ZXJlZChsYXllcjogTWFwV2lkZ2V0TWFya2VyTGF5ZXJPcHRpb25zLCAkZXZlbnQ6IGJvb2xlYW4pIHtcbiAgICBsYXllci5jbHVzdGVyZWQgPSAkZXZlbnQ7XG4gICAgaWYgKGxheWVyLmNsdXN0ZXJlZCkge1xuICAgICAgbGF5ZXIuY2x1c3RlckRpc3RhbmNlID0gMTA7XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlQ2x1c3RlckRpc3RhbmNlKGxheWVyOiBNYXBXaWRnZXRNYXJrZXJMYXllck9wdGlvbnMsICRldmVudDogRXZlbnQpIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgbGF5ZXIuY2x1c3RlckRpc3RhbmNlID0gJGV2ZW50LmN1cnJlbnRUYXJnZXQ/LnZhbHVlO1xuICB9XG5cbiAgY2hhbmdlT3BhY2l0eShsYXllcjogTWFwV2lkZ2V0TGF5ZXJPcHRpb25zLCAkZXZlbnQ6IHN0cmluZykge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBsYXllci5vcGFjaXR5ID0gcGFyc2VJbnQoJGV2ZW50LCAxMCk7XG4gIH1cblxuICBnZXRXTVNMYXllcnMoKTogTGF5ZXI8YW55PltdIHtcbiAgICByZXR1cm4gIXRoaXMubWFwXG4gICAgICA/IFtdXG4gICAgICA6IHRoaXMubWFwXG4gICAgICAgICAgLmdldEFsbExheWVycygpXG4gICAgICAgICAgLmZpbHRlcigobGF5ZXIpID0+IGxheWVyLmdldFNvdXJjZSgpIGluc3RhbmNlb2YgVGlsZVdNUyB8fCBsYXllci5nZXRTb3VyY2UoKSBpbnN0YW5jZW9mIEltYWdlV01TKVxuICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAuZmlsdGVyKChsYXllcikgPT4gbGF5ZXIucmVuZGVyZWQgPT09IHRydWUpO1xuICB9XG5cbiAgaXNMYXllclJlbmRlcmVkKGxheWVyOiBhbnkpIHtcbiAgICByZXR1cm4gISF0aGlzLmdldFdNU0xheWVycygpLmZpbmQoKHdtc0xheWVyKSA9PiB3bXNMYXllci5nZXQoJ3RpdGxlJykgPT09IGxheWVyLnRpdGxlKTtcbiAgfVxuXG4gIGNoYW5nZVdtc0NsYXNzKCRldmVudDogYW55LCBsYXllcjogTWFwV01TTGF5ZXJMYXllck9wdGlvbnMpIHtcbiAgICBsYXllci5vQ2xhc3MgPSAkZXZlbnQ7XG4gIH1cblxuICB0b2dnbGVMZWdlbmQoaW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMubGVnZW5kVGFiID0gdGhpcy5sZWdlbmRUYWIgPT09IGluZGV4ID8gLTEgOiBpbmRleDtcbiAgfVxuXG4gIHRvZ2dsZUxlZ2VuZFdpbmRvdygpIHtcbiAgICB0aGlzLmxlZ2VuZFRhYk9wZW4gPSAhdGhpcy5sZWdlbmRUYWJPcGVuO1xuICAgIHRoaXMubGF5ZXJzVGFiT3BlbiA9IGZhbHNlO1xuICB9XG5cbiAgdG9nZ2xlTGF5ZXJzV2luZG93KCkge1xuICAgIHRoaXMubGF5ZXJzVGFiT3BlbiA9ICF0aGlzLmxheWVyc1RhYk9wZW47XG4gICAgdGhpcy5sZWdlbmRUYWJPcGVuID0gZmFsc2U7XG4gIH1cblxuICBnZXQgbWFwTGF5ZXJzKCkge1xuICAgIHJldHVybiAodGhpcy5tYXAgPz8geyBnZXRMYXllcnM6ICgpID0+ICh7IGdldEFycmF5OiAoKSA9PiBbXSB9KSB9KVxuICAgICAgLmdldExheWVycygpXG4gICAgICAuZ2V0QXJyYXkoKVxuICAgICAgLmZpbHRlcigobGF5ZXIpID0+IGxheWVyLmdldCgndGl0bGUnKSAhPT0gJ2JhY2tncm91bmQnKTtcbiAgfVxuXG4gIGdldCByaWdodFNsaWRlTGF5ZXJzKCkge1xuICAgIHJldHVybiB0aGlzLm1hcExheWVycy5maWx0ZXIoKGxheWVyKSA9PiBsYXllci5nZXQoJ3NsaWRlJykgPT09ICdyaWdodCcpO1xuICB9XG5cbiAgZ2V0IGxlZnRTbGlkZUxheWVycygpIHtcbiAgICByZXR1cm4gdGhpcy5tYXBMYXllcnMuZmlsdGVyKChsYXllcikgPT4gbGF5ZXIuZ2V0KCdzbGlkZScpID09PSAnbGVmdCcpO1xuICB9XG5cbiAgY2hhbmdlVmlzaWJpbGl0eShncm91cDogTGF5ZXJHcm91cCwgX2xheWVyPzogTWFwV2lkZ2V0TGF5ZXJPcHRpb25zKSB7XG4gICAgY29uc3Qgb2xMYXllciA9IHRoaXMubWFwTGF5ZXJzLmZpbmQoKGxheWVyKSA9PiBsYXllci5nZXRQcm9wZXJ0aWVzKClbJ3RpdGxlJ10gPT09IF9sYXllcj8udGl0bGUpO1xuICAgIGlmIChncm91cC5zaW5nbGVMYXllcikge1xuICAgICAgY29uc3QgZ3JvdXBMYXllcnMgPVxuICAgICAgICB0aGlzLm9wdGlvbnNDb3B5LmxheWVycz8uZmlsdGVyKChsKSA9PiBsLmdyb3VwID09PSBncm91cC5uYW1lKS5tYXAoKGxheWVyKSA9PiBsYXllci50aXRsZSkgPz8gW107XG5cbiAgICAgIHRoaXMubWFwTGF5ZXJzLmZvckVhY2goKGxheWVyKSA9PiB7XG4gICAgICAgIGlmIChncm91cExheWVycy5pbmNsdWRlcyhsYXllci5nZXRQcm9wZXJ0aWVzKClbJ3RpdGxlJ10pKSB7XG4gICAgICAgICAgbGF5ZXIuc2V0VmlzaWJsZShmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgb2xMYXllcj8uc2V0VmlzaWJsZSh0cnVlKTtcblxuICAgICAgX2xheWVyXG4gICAgICAgID8gdGhpcy5zdG9yZS5kaXNwYXRjaChEYXNoYm9hcmRBY3Rpb25zLnVwZGF0ZUxheWVyR3JvdXAoeyBuYW1lOiBncm91cC5uYW1lLCB2aXNpYmxlTGF5ZXJzOiBbX2xheWVyLnRpdGxlIV0gfSkpXG4gICAgICAgIDogdGhpcy5zdG9yZS5kaXNwYXRjaChEYXNoYm9hcmRBY3Rpb25zLnVwZGF0ZUxheWVyR3JvdXAoeyBuYW1lOiBncm91cC5uYW1lLCB2aXNpYmxlTGF5ZXJzOiBbXSB9KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9sTGF5ZXI/LnNldFZpc2libGUoIW9sTGF5ZXI/LmdldFZpc2libGUoKSk7XG5cbiAgICAgIGNvbnN0IHZpc2libGVMYXllcnMgPSBncm91cC52aXNpYmxlTGF5ZXJzLmluY2x1ZGVzKF9sYXllcj8udGl0bGUhKVxuICAgICAgICA/IGdyb3VwLnZpc2libGVMYXllcnMuZmlsdGVyKChsYXllcikgPT4gbGF5ZXIgIT09IF9sYXllcj8udGl0bGUpXG4gICAgICAgIDogWy4uLmdyb3VwLnZpc2libGVMYXllcnMsIF9sYXllcj8udGl0bGUhXTtcbiAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goRGFzaGJvYXJkQWN0aW9ucy51cGRhdGVMYXllckdyb3VwKHsgbmFtZTogZ3JvdXAubmFtZSwgdmlzaWJsZUxheWVycyB9KSk7XG4gICAgfVxuICAgIHRoaXMubWFwLnVwZGF0ZVNpemUoKTtcbiAgfVxuXG4gIGlzTGF5ZXJWaXNpYmxlKGxheWVyOiBNYXBXaWRnZXRMYXllck9wdGlvbnMsIGdyb3VwOiBMYXllckdyb3VwKSB7XG4gICAgaWYgKGdyb3VwLnZpc2libGVMYXllcnMpIHtcbiAgICAgIHJldHVybiBncm91cC52aXNpYmxlTGF5ZXJzLmluY2x1ZGVzKGxheWVyLnRpdGxlID8/ICcnKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY2hhbmdlQXV0b0xheWVyKCRldmVudDogYW55KSB7XG4gICAgdGhpcy5vcHRpb25zQ29weS5hdXRvbWF0aWNMYXllcnMgPSAkZXZlbnQ7XG4gICAgaWYgKCF0aGlzLm9wdGlvbnNDb3B5LmF1dG9tYXRpY0xheWVycykge1xuICAgICAgZGVsZXRlIHRoaXMub3B0aW9uc0NvcHkuaWdub3JlQXV0b0xheWVyO1xuICAgIH1cbiAgfVxuXG4gIGdldCBsYXllclZpc2libGVJZHgoKSB7XG4gICAgcmV0dXJuIHRoaXMubWFwTGF5ZXJzLm1hcCgobGF5ZXIsIGlkeCkgPT4gKGxheWVyLmdldFZpc2libGUoKSA/IGlkeCA6IDApKS5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiKSB8fCAtMTtcbiAgfVxuXG4gIG92ZXJyaWRlIG5nT25EZXN0cm95KCkge1xuICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG5cbiAgICAvLyBUcnlpbmcgdG8gcmVsZWFzZSBvYmplY3RzXG4gICAgdGhpcy5jbGVhckxheWVycyh0aGlzLm1hcC5nZXRMYXllcnMoKS5nZXRBcnJheSgpKTtcbiAgICB0aGlzLmNsZWFyTGF5ZXJzKHRoaXMucHJldmlvdXNMYXllcnMpO1xuICAgIHRoaXMubWFwLmdldFJlbmRlcmVyKCkhLmRpc3Bvc2UoKTtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgZGVsZXRlIHRoaXMubWFwO1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICB0aGlzLm1hcCA9IG51bGw7XG4gICAgdGhpcy50b29sdGlwTWFuYWdlci5kZXN0cm95KCk7XG4gIH1cblxuICBnZXRTdHlsZShfbGF5ZXI6IE1hcFdpZGdldExheWVyT3B0aW9ucykge1xuICAgIGNvbnN0IGxheWVyID0gX2xheWVyIGFzIE1hcFdNU0xheWVyTGF5ZXJPcHRpb25zIHwgTWFwR2VvU2VydmVyTGF5ZXJPcHRpb25zO1xuICAgIGlmIChsYXllci5hZGRpdGlvbmFsUGFyYW1ldGVycz8uU1RZTEVTKSB7XG4gICAgICByZXR1cm4gbGF5ZXIuYWRkaXRpb25hbFBhcmFtZXRlcnM/LlNUWUxFUztcbiAgICB9XG4gICAgLyogTm90IG1hbmlmZXN0LWRlZmluZWQgc3R5bGU6IHVzZSBmaXJzdCBpbiBsaW5lIGJlY2F1c2UgaXQncyB0aGUgZGVmYXVsdCBvbmUgc2VudCBieSBnZW9zZXJ2ZXIgKi9cbiAgICBjb25zdCBwb3NzaWJsZVN0eWxlc0ZvclVybCA9IHRoaXMucG9zc2libGVTdHlsZXNbbGF5ZXIudXJsXSA/PyB7IGxheWVyczoge30gfTtcbiAgICBsZXQgcG9zc2libGVzU3R5bGVzRm9yTGF5ZXIgPSBwb3NzaWJsZVN0eWxlc0ZvclVybC5sYXllcnMhW2xheWVyLnBhcmFtTGF5ZXJdO1xuICAgIGlmICghcG9zc2libGVzU3R5bGVzRm9yTGF5ZXIpIHtcbiAgICAgIHBvc3NpYmxlc1N0eWxlc0ZvckxheWVyID0gcG9zc2libGVTdHlsZXNGb3JVcmwubGF5ZXJzIVsobGF5ZXIucGFyYW1MYXllciA/PyAnOicpLnNwbGl0KCc6JylbMV1dID8/IHsgc3R5bGVzOiBbXSB9O1xuICAgIH1cbiAgICByZXR1cm4gcG9zc2libGVzU3R5bGVzRm9yTGF5ZXIuc3R5bGVzWzBdPy5pZDtcbiAgfVxuXG4gIGNoYW5nZUxheWVyU3R5bGUoJGV2ZW50OiBhbnksIF9sYXllcjogTWFwV2lkZ2V0TGF5ZXJPcHRpb25zKSB7XG4gICAgY29uc3QgbGF5ZXIgPSBfbGF5ZXIgYXMgTWFwV01TTGF5ZXJMYXllck9wdGlvbnMgfCBNYXBHZW9TZXJ2ZXJMYXllck9wdGlvbnM7XG4gICAgaWYgKCFsYXllci5hZGRpdGlvbmFsUGFyYW1ldGVycykge1xuICAgICAgbGF5ZXIuYWRkaXRpb25hbFBhcmFtZXRlcnMgPSB7fTtcbiAgICB9XG4gICAgbGF5ZXIuYWRkaXRpb25hbFBhcmFtZXRlcnMuU1RZTEVTID0gJGV2ZW50O1xuICB9XG5cbiAgZ2V0QXNXbXNUeXBlKF9sYXllcjogTWFwV2lkZ2V0TGF5ZXJPcHRpb25zKSB7XG4gICAgcmV0dXJuIF9sYXllciBhcyBNYXBXTVNMYXllckxheWVyT3B0aW9ucyB8IE1hcEdlb1NlcnZlckxheWVyT3B0aW9ucztcbiAgfVxuXG4gIGxheWVyU3R5bGVPcHRpb25zKF9sYXllcjogTWFwV2lkZ2V0TGF5ZXJPcHRpb25zKSB7XG4gICAgY29uc3QgbGF5ZXIgPSBfbGF5ZXIgYXMgTWFwV01TTGF5ZXJMYXllck9wdGlvbnMgfCBNYXBHZW9TZXJ2ZXJMYXllck9wdGlvbnM7XG4gICAgY29uc3QgcG9zc2libGVTdHlsZXNGb3JVcmwgPSB0aGlzLnBvc3NpYmxlU3R5bGVzW2xheWVyLnVybF0gPz8geyBsYXllcnM6IHt9IH07XG4gICAgbGV0IHBvc3NpYmxlc1N0eWxlc0ZvckxheWVyID0gcG9zc2libGVTdHlsZXNGb3JVcmwubGF5ZXJzIVtsYXllci5wYXJhbUxheWVyXTtcbiAgICBpZiAoIXBvc3NpYmxlc1N0eWxlc0ZvckxheWVyKSB7XG4gICAgICBwb3NzaWJsZXNTdHlsZXNGb3JMYXllciA9IHBvc3NpYmxlU3R5bGVzRm9yVXJsLmxheWVycyFbKGxheWVyLnBhcmFtTGF5ZXIgPz8gJzonKS5zcGxpdCgnOicpWzFdXSA/PyB7IHN0eWxlczogW10gfTtcbiAgICB9XG4gICAgcmV0dXJuIHBvc3NpYmxlc1N0eWxlc0ZvckxheWVyLnN0eWxlcztcbiAgfVxuXG4gIHRyaWdnZXJMYXllclJlbmRlcigpIHtcbiAgICB0aGlzLm1hcC5yZW5kZXIoKTtcbiAgfVxuXG4gIGNoYW5nZVNsaWRlT3B0aW9uKCRldmVudDogYW55KSB7XG4gICAgdGhpcy5vcHRpb25zQ29weS5zbGlkZSA9ICRldmVudDtcbiAgICBpZiAoJGV2ZW50ID09PSBmYWxzZSkge1xuICAgICAgdGhpcy5vcHRpb25zQ29weS5sYXllcnM/LmZvckVhY2goKGxheWVyKSA9PiAobGF5ZXIuc2xpZGUgPSAnYWxsJykpO1xuICAgIH1cbiAgfVxuXG4gIHRvZ2dsZU1lbnUoKSB7XG4gICAgdGhpcy5hY3Rpb25NZW51T3BlbiQubmV4dCghdGhpcy5hY3Rpb25NZW51T3BlbiQuZ2V0VmFsdWUoKSk7XG4gIH1cblxuICBwcml2YXRlIGdldE9sWm9vbUVsZW1lbnQoKSB7XG4gICAgdGhpcy5vbFpvb21FbGVtZW50JC5uZXh0KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5vbC16b29tJykpO1xuICAgIGlmICghdGhpcy5vbFpvb21FbGVtZW50JC5nZXRWYWx1ZSgpKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuZ2V0T2xab29tRWxlbWVudCgpLCA1MCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHpvb21JbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5vbC16b29tLWluJyk7XG4gICAgICBpZiAoem9vbUluKSB7XG4gICAgICAgIHpvb21Jbi5zZXRBdHRyaWJ1dGUoJ2RhdGEtdG9vbHRpcCcsIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdAcHJ5LndpZGdldC5tYXAuem9vbUluJykpO1xuICAgICAgICB6b29tSW4uc2V0QXR0cmlidXRlKCdkYXRhLXRvb2x0aXAtcG9zaXRpb24nLCAnbGVmdCcpO1xuICAgICAgICB6b29tSW4uY2xhc3NMaXN0LmFkZCgnYS10b29sdGlwJywgJy0tbm9wb3MnKTtcbiAgICAgICAgem9vbUluLnJlbW92ZUF0dHJpYnV0ZSgndGl0bGUnKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHpvb21PdXQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcub2wtem9vbS1vdXQnKTtcbiAgICAgIGlmICh6b29tT3V0KSB7XG4gICAgICAgIHpvb21PdXQuc2V0QXR0cmlidXRlKCdkYXRhLXRvb2x0aXAnLCB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnQHByeS53aWRnZXQubWFwLnpvb21PdXQnKSk7XG4gICAgICAgIHpvb21PdXQuc2V0QXR0cmlidXRlKCdkYXRhLXRvb2x0aXAtcG9zaXRpb24nLCAnbGVmdCcpO1xuICAgICAgICB6b29tT3V0LmNsYXNzTGlzdC5hZGQoJ2EtdG9vbHRpcCcsICctLW5vcG9zJyk7XG4gICAgICAgIHpvb21PdXQucmVtb3ZlQXR0cmlidXRlKCd0aXRsZScpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNoYW5nZVNlbGVjdGlvbihhY3Rpb246ICdjbGljaycgfCAnbGFzc28nIHwgJ3JlY3RhbmdsZScgfCAnem9vbScgfCAnbW92ZScgfCAnZXhwb3J0JyB8ICd1cGxvYWQnKSB7XG4gICAgdGhpcy5pbnRlcmFjdGlvbk1hbmFnZXIuc2VsZWN0aW9uSW50ZXJhY3Rpb24uY2hhbmdlU2VsZWN0aW9uKGFjdGlvbik7XG4gICAgdGhpcy50b2dnbGVNZW51KCk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFyTGF5ZXJzKGxheWVyczogQmFzZUxheWVyW10pIHtcbiAgICBsYXllcnMuZm9yRWFjaCgobGF5ZXIpID0+IHtcbiAgICAgIHRoaXMubWFwLnJlbW92ZUxheWVyKGxheWVyKTtcbiAgICAgIGlmIChsYXllciBpbnN0YW5jZW9mIFZlY3RvckxheWVyICYmIChsYXllciBhcyBWZWN0b3JMYXllcjxWZWN0b3JTb3VyY2U+KS5nZXRTb3VyY2UoKSkge1xuICAgICAgICAobGF5ZXIgYXMgVmVjdG9yTGF5ZXI8VmVjdG9yU291cmNlPikuZ2V0U291cmNlKCkhLmNsZWFyKCk7XG4gICAgICAgIGxheWVyLnNldFNvdXJjZSh1bmRlZmluZWQpO1xuICAgICAgfVxuICAgICAgaWYgKGxheWVyIGluc3RhbmNlb2YgVGlsZUxheWVyICYmIChsYXllciBhcyBUaWxlTGF5ZXI8YW55PikuZ2V0U291cmNlKCkpIHtcbiAgICAgICAgKGxheWVyIGFzIFRpbGVMYXllcjxhbnk+KS5nZXRTb3VyY2UoKS5jbGVhcigpO1xuICAgICAgICBsYXllci5zZXRTb3VyY2UodW5kZWZpbmVkKTtcbiAgICAgIH1cbiAgICAgIGxheWVyLmRpc3Bvc2UoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFkZExheWVyR3JvdXAoKSB7XG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChcbiAgICAgIERhc2hib2FyZEFjdGlvbnMuYWRkTGF5ZXJHcm91cCh7XG4gICAgICAgIG5hbWU6XG4gICAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ0Bwcnkud2lkZ2V0Lm1hcC5sYXllclNldHRpbmdzLmdyb3VwJykgK1xuICAgICAgICAgICcgJyArXG4gICAgICAgICAgKHRoaXMubGF5ZXJHcm91cHMubGVuZ3RoICsgMSkudG9TdHJpbmcoKVxuICAgICAgfSlcbiAgICApO1xuXG4gICAgY29uc3QgZ3JvdXAgPSB0aGlzLmxheWVyR3JvdXBzW3RoaXMubGF5ZXJHcm91cHMubGVuZ3RoIC0gMV07XG4gICAgdGhpcy5hZGRMYXllcihncm91cCk7XG4gIH1cblxuICB1cGRhdGVMYXllckdyb3VwKG5hbWU6IHN0cmluZywgbmV3TmFtZT86IHN0cmluZywgc2luZ2xlTGF5ZXI/OiBib29sZWFuLCB2aXNpYmxlTGF5ZXJzPzogc3RyaW5nW10pIHtcbiAgICBpZiAobmV3TmFtZSA9PT0gdW5kZWZpbmVkICYmIHNpbmdsZUxheWVyICE9PSB1bmRlZmluZWQgJiYgdmlzaWJsZUxheWVycyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFxuICAgICAgICBEYXNoYm9hcmRBY3Rpb25zLnVwZGF0ZUxheWVyR3JvdXAoe1xuICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgbmV3TmFtZSxcbiAgICAgICAgICBzaW5nbGVMYXllcixcbiAgICAgICAgICB2aXNpYmxlTGF5ZXJzOiBzaW5nbGVMYXllciA/IFt2aXNpYmxlTGF5ZXJzWzBdXSA6IHZpc2libGVMYXllcnNcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChuYW1lICE9PSBuZXdOYW1lKSB7XG4gICAgICBpZiAobmFtZSA9PT0gREVGQVVMVF9MQVlFUl9HUk9VUCkge1xuICAgICAgICBjb25zdCBsYXllcnNUb1RyYW5zZmVyID1cbiAgICAgICAgICB0aGlzLm9wdGlvbnNDb3B5LmxheWVycz8uZmlsdGVyKChsYXllcikgPT4gbGF5ZXIuZ3JvdXAgPT09IERFRkFVTFRfTEFZRVJfR1JPVVApLm1hcCgobCkgPT4gbC50aXRsZSkgPz8gW107XG4gICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goXG4gICAgICAgICAgRGFzaGJvYXJkQWN0aW9ucy5hZGRMYXllckdyb3VwKHtcbiAgICAgICAgICAgIG5hbWU6IG5ld05hbWUsXG4gICAgICAgICAgICBzaW5nbGVMYXllcixcbiAgICAgICAgICAgIHZpc2libGVMYXllcnM6IHZpc2libGVMYXllcnMhLmZpbHRlcigobCkgPT4gbGF5ZXJzVG9UcmFuc2Zlci5pbmNsdWRlcyhsKSlcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFxuICAgICAgICAgIERhc2hib2FyZEFjdGlvbnMudXBkYXRlTGF5ZXJHcm91cCh7XG4gICAgICAgICAgICBuYW1lOiBERUZBVUxUX0xBWUVSX0dST1VQLFxuICAgICAgICAgICAgbmV3TmFtZTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgc2luZ2xlTGF5ZXI6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHZpc2libGVMYXllcnM6IHZpc2libGVMYXllcnMhLmZpbHRlcigobCkgPT4gIWxheWVyc1RvVHJhbnNmZXIuaW5jbHVkZXMobCkpXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goRGFzaGJvYXJkQWN0aW9ucy51cGRhdGVMYXllckdyb3VwKHsgbmFtZSwgbmV3TmFtZSwgc2luZ2xlTGF5ZXIsIHZpc2libGVMYXllcnMgfSkpO1xuICAgICAgfVxuICAgICAgLy8gdXBkYXRlIGdyb3VwcyBvbiBsYXllcnNcbiAgICAgIGlmIChuZXdOYW1lICE9PSB1bmRlZmluZWQgJiYgdGhpcy5vcHRpb25zQ29weS5sYXllcnMpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zQ29weS5sYXllcnMgPSB0aGlzLm9wdGlvbnNDb3B5LmxheWVycy5tYXAoKGxheWVyKSA9PlxuICAgICAgICAgIGxheWVyLmdyb3VwID09PSBuYW1lXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAuLi5sYXllcixcbiAgICAgICAgICAgICAgICBncm91cDogbmV3TmFtZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IGxheWVyXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlTGF5ZXJHcm91cFRpdGxlKCRldmVudDogRXZlbnQsIG5hbWU6IHN0cmluZykge1xuICAgIHRoaXMudXBkYXRlTGF5ZXJHcm91cChuYW1lLCAoJGV2ZW50LmN1cnJlbnRUYXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCk/LnZhbHVlKTtcbiAgfVxuXG4gIGRlbGV0ZUxheWVyR3JvdXAobmFtZTogc3RyaW5nKSB7XG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChEYXNoYm9hcmRBY3Rpb25zLmNvbmZpcm1MYXllckdyb3VwRGVsZXRpb24oeyBuYW1lIH0pKTtcbiAgICB0aGlzLm9wdGlvbnNDb3B5LmxheWVycyA9IHRoaXMub3B0aW9uc0NvcHkubGF5ZXJzPy5maWx0ZXIoKGxheWVyKSA9PiBsYXllci5ncm91cCAhPT0gbmFtZSk7XG4gIH1cblxuICBkcm9wKGV2ZW50OiBDZGtEcmFnRHJvcDxNYXBXaWRnZXRMYXllck9wdGlvbnNbXT4sIGdyb3VwOiBMYXllckdyb3VwKTogdm9pZCB7XG4gICAgY29uc3QgbW92ZWRMYXllciA9IGV2ZW50Lml0ZW0uZGF0YSBhcyBNYXBXaWRnZXRMYXllck9wdGlvbnM7XG4gICAgaWYgKGV2ZW50LnByZXZpb3VzQ29udGFpbmVyLmlkICE9PSBldmVudC5jb250YWluZXIuaWQpIHtcbiAgICAgIHRoaXMubW92ZUxheWVyQmV0d2Vlbkdyb3VwcyhcbiAgICAgICAgbW92ZWRMYXllcixcbiAgICAgICAgZXZlbnQuY29udGFpbmVyLmVsZW1lbnQubmF0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtbGF5ZXItZ3JvdXAnKSA/PyBERUZBVUxUX0xBWUVSX0dST1VQXG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLm1vdmVMYXllckluT3B0aW9ucyhldmVudC5jdXJyZW50SW5kZXgsIGV2ZW50Lml0ZW0uZGF0YSBhcyBNYXBXaWRnZXRMYXllck9wdGlvbnMsIGdyb3VwKTtcbiAgfVxuXG4gIG1vdmVMYXllckJldHdlZW5Hcm91cHMobW92ZWRMYXllcjogTWFwV2lkZ2V0TGF5ZXJPcHRpb25zLCBuZXdHcm91cDogc3RyaW5nKSB7XG4gICAgLy8gcmVtb3ZlIGl0IGZyb20gb2xkIGdyb3VwXG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChcbiAgICAgIERhc2hib2FyZEFjdGlvbnMudXBkYXRlTGF5ZXJHcm91cCh7XG4gICAgICAgIG5hbWU6IG1vdmVkTGF5ZXIuZ3JvdXAhLFxuICAgICAgICB2aXNpYmxlTGF5ZXJzOiB0aGlzLmxheWVyR3JvdXBzXG4gICAgICAgICAgPy5maW5kKChncm91cCkgPT4gZ3JvdXAubmFtZSA9PT0gbW92ZWRMYXllci5ncm91cCEpXG4gICAgICAgICAgPy52aXNpYmxlTGF5ZXJzLmZpbHRlcigobGF5ZXIpID0+IGxheWVyICE9PSBtb3ZlZExheWVyLnRpdGxlKVxuICAgICAgfSlcbiAgICApO1xuXG4gICAgLy8gYWRkIGl0IHRvIG5ldyBncm91cFxuICAgIG1vdmVkTGF5ZXIuZ3JvdXAgPSBuZXdHcm91cDtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFxuICAgICAgRGFzaGJvYXJkQWN0aW9ucy51cGRhdGVMYXllckdyb3VwKHtcbiAgICAgICAgbmFtZTogbmV3R3JvdXAgPz8gREVGQVVMVF9MQVlFUl9HUk9VUCxcbiAgICAgICAgdmlzaWJsZUxheWVyczogbW92ZWRMYXllci50aXRsZSFcbiAgICAgIH0pXG4gICAgKTtcbiAgICB0aGlzLnJlbW92ZUVtcHR5TGF5ZXJHcm91cHMoKTtcbiAgfVxuXG4gIG1vdmVMYXllckluT3B0aW9ucyh0YXJnZXRJZHhJbkdyb3VwOiBudW1iZXIsIG1vdmVkTGF5ZXI6IE1hcFdpZGdldExheWVyT3B0aW9ucywgZ3JvdXA6IExheWVyR3JvdXApIHtcbiAgICBpZiAodGhpcy5vcHRpb25zQ29weS5sYXllcnMpIHtcbiAgICAgIGNvbnN0IGdyb3VwTGF5ZXJzID0gdGhpcy5vcHRpb25zQ29weS5sYXllcnMuZmlsdGVyKChsYXllcikgPT4gbGF5ZXIuZ3JvdXAgPT09IGdyb3VwLm5hbWUpO1xuICAgICAgLy8gaW5kZXhlcyBpbiBvcHRpb25zQ29weVxuICAgICAgY29uc3QgZnJvbUluZGV4ID0gdGhpcy5vcHRpb25zQ29weS5sYXllcnMuZmluZEluZGV4KChsYXllcikgPT4gbGF5ZXIudGl0bGUgPT09IG1vdmVkTGF5ZXIudGl0bGUpO1xuICAgICAgY29uc3QgdG9JbmRleCA9IHRoaXMub3B0aW9uc0NvcHkubGF5ZXJzLmZpbmRJbmRleCgobGF5ZXIpID0+IGxheWVyLnRpdGxlID09PSBncm91cExheWVyc1t0YXJnZXRJZHhJbkdyb3VwXS50aXRsZSk7XG5cbiAgICAgIGxldCBuZXdPcmRlciA9IHRvSW5kZXg7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5LmxheWVycy5zcGxpY2UoZnJvbUluZGV4LCAxKTtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkubGF5ZXJzLnNwbGljZSh0b0luZGV4LCAwLCB7IC4uLm1vdmVkTGF5ZXIsIG9yZGVyOiBuZXdPcmRlciB9KTtcbiAgICAgIHRoaXMudXBkYXRlTGF5ZXJPcmRlcigpO1xuICAgIH1cbiAgfVxuXG4gIHRvZ2dsZUV4cGFuZEFsbChncm91cDogTGF5ZXJHcm91cCkge1xuICAgIHRoaXMubGF5ZXJTZXR0aW5nc0V4cGFuZGVkU3RhdGVbZ3JvdXAubmFtZV0gPSAhdGhpcy5sYXllclNldHRpbmdzRXhwYW5kZWRTdGF0ZVtncm91cC5uYW1lXTtcbiAgICBjb25zdCBsYXllcnNUb0V4cGFuZCA9XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5LmxheWVycz8uZmlsdGVyKChsYXllcikgPT4gbGF5ZXIuZ3JvdXAgPT09IGdyb3VwLm5hbWUpLm1hcCgobGF5ZXIpID0+IGxheWVyLnRpdGxlKSA/PyBbXTtcblxuICAgIE9iamVjdC5rZXlzKHRoaXMubGF5ZXJTZXR0aW5nc0V4cGFuZGVkU3RhdGUpLmZvckVhY2goKGxheWVyKSA9PiB7XG4gICAgICBpZiAobGF5ZXJzVG9FeHBhbmQuaW5jbHVkZXMobGF5ZXIpKVxuICAgICAgICB0aGlzLmxheWVyU2V0dGluZ3NFeHBhbmRlZFN0YXRlW2xheWVyXSA9IHRoaXMubGF5ZXJTZXR0aW5nc0V4cGFuZGVkU3RhdGVbZ3JvdXAubmFtZV07XG4gICAgfSk7XG4gIH1cblxuICB0b2dnbGVMYXllckV4cGFuZChsYXllcjogTWFwV2lkZ2V0TGF5ZXJPcHRpb25zLCBncm91cDogTGF5ZXJHcm91cCkge1xuICAgIHRoaXMubGF5ZXJTZXR0aW5nc0V4cGFuZGVkU3RhdGVbbGF5ZXIudGl0bGUhXSA9ICF0aGlzLmxheWVyU2V0dGluZ3NFeHBhbmRlZFN0YXRlW2xheWVyLnRpdGxlIV07XG4gICAgaWYgKHRoaXMubGF5ZXJTZXR0aW5nc0V4cGFuZGVkU3RhdGVbbGF5ZXIudGl0bGUhXSkgdGhpcy5sYXllclNldHRpbmdzRXhwYW5kZWRTdGF0ZVtncm91cC5uYW1lXSA9IHRydWU7XG4gICAgaWYgKGdyb3VwLnZpc2libGVMYXllcnMuZXZlcnkoKGxheWVyVGl0bGUpID0+ICF0aGlzLmxheWVyU2V0dGluZ3NFeHBhbmRlZFN0YXRlW2xheWVyVGl0bGVdKSkge1xuICAgICAgdGhpcy5sYXllclNldHRpbmdzRXhwYW5kZWRTdGF0ZVtncm91cC5uYW1lXSA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZUxheWVyT3JkZXIoKSB7XG4gICAgbGV0IG9yZGVyID0gMTtcbiAgICB0aGlzLmxheWVyR3JvdXBzPy5mb3JFYWNoKChncm91cCkgPT4ge1xuICAgICAgY29uc3QgZ3JvdXBMYXllcnMgPSB0aGlzLm9wdGlvbnNDb3B5LmxheWVycz8uZmlsdGVyKChsYXllcikgPT4gbGF5ZXIuZ3JvdXAgPT09IGdyb3VwLm5hbWUpO1xuICAgICAgaWYgKGdyb3VwTGF5ZXJzKSB7XG4gICAgICAgIGdyb3VwTGF5ZXJzLmZvckVhY2goKGxheWVyKSA9PiAobGF5ZXIub3JkZXIgPSBvcmRlcisrKSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBpc0dyb3VwVXNlZEJ5V2lkZ2V0TGF5ZXJzKGdyb3VwOiBMYXllckdyb3VwKSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9uc0NvcHkubGF5ZXJzPy5zb21lKChsYXllcikgPT4gbGF5ZXIuZ3JvdXAgPT09IGdyb3VwLm5hbWUpO1xuICB9XG5cbiAgcmVtb3ZlRW1wdHlMYXllckdyb3VwcygpIHtcbiAgICB0aGlzLmxheWVyR3JvdXBzLmZvckVhY2goKGdyb3VwKSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgICF0aGlzLm9wdGlvbnNDb3B5LmxheWVycz8ubWFwKChsYXllcikgPT4gbGF5ZXIuZ3JvdXApLmluY2x1ZGVzKGdyb3VwLm5hbWUpICYmXG4gICAgICAgIGdyb3VwLm5hbWUgIT09IERFRkFVTFRfTEFZRVJfR1JPVVBcbiAgICAgICkge1xuICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFxuICAgICAgICAgIERhc2hib2FyZEFjdGlvbnMuZGVsZXRlTGF5ZXJHcm91cCh7XG4gICAgICAgICAgICBuYW1lOiBncm91cC5uYW1lXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZWFkb25seSBERUZBVUxUX0xBWUVSX0dST1VQID0gREVGQVVMVF9MQVlFUl9HUk9VUDtcbn1cbiIsIjxwcnktd2lkZ2V0LW1hcC1jc3M+PC9wcnktd2lkZ2V0LW1hcC1jc3M+XG48ZGl2IGNsYXNzPVwiby13aWRnZXQgby13aWRnZXQtLW1hcFwiPlxuICA8cHJ5LXdpZGdldC1oZWFkZXJcbiAgICBbZGF0YXNvdXJjZUlkc109XCIoZGF0YXNvdXJjZUlkcyQgfCBhc3luYykgPz8gW11cIlxuICAgICpuZ0lmPVwiZGlzcGxheUhlYWRlciQgfCBhc3luY1wiXG4gICAgW3dpZGdldEluZGV4XT1cIndpZGdldEluZGV4XCJcbiAgICBbbWFuaWZlc3RdPVwibWFuaWZlc3RcIlxuICAgIChtYW5pZmVzdE1vZGlmaWVkKT1cIm1hbmlmZXN0TW9kaWZpZWQuZW1pdCgkZXZlbnQpXCJcbiAgICBbaGVhZGVyT3B0aW9uc109XCIoZGlzcGxheUhlYWRlciQgfCBhc3luYykgPz8ge31cIlxuICAgICNoZWFkZXJcbiAgPlxuICAgIDxwcnktc2V0dGluZ3NcbiAgICAgIChzYXZlVHJpZ2dlcmVkKT1cImVtaXRNYW5pZmVzdCgpXCJcbiAgICAgIChjaGFuZ2VUaXRsZSk9XCJjaGFuZ2VXaWRnZXRUaXRsZSgkZXZlbnQpXCJcbiAgICAgIFtoZWFkZXJQcmVzZW50XT1cImRpc3BsYXlIZWFkZXIkIHwgYXN5bmNcIlxuICAgICAgW3dpZGdldEluZGV4XT1cIndpZGdldEluZGV4XCJcbiAgICAgIFtoZWFkZXJdPVwiaGVhZGVyXCJcbiAgICAgIFtvcGVuJF09XCJvcGVuJFwiXG4gICAgICBjbGFzcz1cIm8tc2V0dGluZ3NcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cIm1hcF9zdHlsZVwiPnt7ICdAcHJ5LndpZGdldC5tYXAuc3R5bGUnIHwgaTE4biB9fSA6PC9sYWJlbD5cbiAgICAgICAgPHByeS1zZWxlY3RcbiAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VTdHlsZSgkZXZlbnQpXCJcbiAgICAgICAgICBbaXRlbXNdPVwic3R5bGVzJCB8IGFzeW5jXCJcbiAgICAgICAgICBbbmdNb2RlbF09XCJvcHRpb25zQ29weS5zdHlsZVwiXG4gICAgICAgICAgYmluZExhYmVsPVwibGFiZWxcIlxuICAgICAgICAgIGJpbmRWYWx1ZT1cImlkZW50aWZpZXJcIlxuICAgICAgICAgIGlkPVwibWFwX3N0eWxlXCJcbiAgICAgICAgPjwvcHJ5LXNlbGVjdD5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCIgKm5nSWY9XCJvcHRpb25zQ29weS5zdHlsZSA9PT0gU1RZTEVfRlJPTV9VUkxcIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cInN0eWxlX1VSTFwiPnt7ICdAcHJ5LndpZGdldC5tYXAuc3R5bGVVcmwnIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIGlkPVwic3R5bGVfVVJMXCJcbiAgICAgICAgICBjbGFzcz1cImEtZm9ybS1maWVsZFwiXG4gICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgIChpbnB1dCk9XCJjaGFuZ2VTdHlsZVVSTCgkZXZlbnQpXCJcbiAgICAgICAgICBbdmFsdWVdPVwib3B0aW9uc0NvcHkuc3R5bGVVUkwgPz8gJydcIlxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxwcnktY2hlY2tib3ggKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlQXV0b0xheWVyKCRldmVudClcIiBbbmdNb2RlbF09XCJvcHRpb25zQ29weS5hdXRvbWF0aWNMYXllcnMgPz8gZmFsc2VcIj5cbiAgICAgICAge3sgJ0Bwcnkud2lkZ2V0Lm1hcC5hdXRvTGF5ZXInIHwgaTE4biB9fVxuICAgICAgPC9wcnktY2hlY2tib3g+XG5cbiAgICAgIDxwcnktY2hlY2tib3ggKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlQXR0cmlidXRpb25zKCRldmVudClcIiBbbmdNb2RlbF09XCJvcHRpb25zQ29weS5hdHRyaWJ1dGlvbnMgPz8gZmFsc2VcIj5cbiAgICAgICAge3sgJ0Bwcnkud2lkZ2V0Lm1hcC5hdHRyaWJ1dGlvbnMnIHwgaTE4biB9fVxuICAgICAgPC9wcnktY2hlY2tib3g+XG5cbiAgICAgIDxwcnktY2hlY2tib3ggKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlU2xpZGVPcHRpb24oJGV2ZW50KVwiIFtuZ01vZGVsXT1cImhhc1NsaWRlTGF5ZXIkIHwgYXN5bmNcIj5cbiAgICAgICAge3sgJ0Bwcnkud2lkZ2V0Lm1hcC5zbGlkZS5nbG9iYWwnIHwgaTE4biB9fVxuICAgICAgPC9wcnktY2hlY2tib3g+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJvLWxheWVyLXNldHRpbmdzXCIgY2RrRHJvcExpc3RHcm91cCBjZGtEcmFnQm91bmRhcnk+XG4gICAgICAgIDxoNCBjbGFzcz1cImEtbGFiZWxcIj57eyAnQHByeS53aWRnZXQubWFwLmxheWVyU2V0dGluZ3MudGl0bGUnIHwgaTE4biB9fTwvaDQ+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ1LWRpc3BsYXktZmxleCAtanVzdGlmeS1jZW50ZXJcIj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYS1idG4gYS1idG4tLXByaW1hcnlcIiAoY2xpY2spPVwiYWRkTGF5ZXJHcm91cCgpXCIgdHlwZT1cImJ1dHRvblwiPlxuICAgICAgICAgICAge3sgJ0Bwcnkud2lkZ2V0Lm1hcC5sYXllclNldHRpbmdzLmFkZExheWVyR3JvdXAnIHwgaTE4biB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZ3JvdXAgb2YgbGF5ZXJHcm91cHMkIHwgYXN5bmM7IGxldCBncm91cElkeCA9IGluZGV4XCI+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cImlzR3JvdXBVc2VkQnlXaWRnZXRMYXllcnMoZ3JvdXApXCIgY2xhc3M9XCJvLWxheWVyLXNldHRpbmdzX19ncm91cFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZCBvLWxheWVyLXNldHRpbmdzX19ncm91cC10aXRsZVwiPlxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwibWFwX2xheWVyR3JvdXBUaXRsZS17eyBncm91cElkeCB9fVwiPlxuICAgICAgICAgICAgICAgIHt7ICdAcHJ5LndpZGdldC5tYXAubGF5ZXJTZXR0aW5ncy5sYXllckdyb3VwTmFtZScgfCBpMThuIH19PHNwYW4gY2xhc3M9XCItb2JsaWdhdG9yeS1yZWRcIj4qPC9zcGFuXG4gICAgICAgICAgICAgICAgPnt7ICdAcHJ5LndpZGdldC5tYXAubGF5ZXJTZXR0aW5ncy5vcHRpb25hbENvbG9uJyB8IGkxOG4gfX1cbiAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInUtZGlzcGxheS1mbGV4XCI+XG4gICAgICAgICAgICAgICAgPHByeS1lZGl0LWlucHV0XG4gICAgICAgICAgICAgICAgICBlZGl0QnV0dG9uVG9vbHRpcD1cIkBwcnkud2lkZ2V0Lm1hcC5sYXllclNldHRpbmdzLmVkaXRHcm91cE5hbWVcIlxuICAgICAgICAgICAgICAgICAgKHZhbGlkYXRlZCk9XCJ1cGRhdGVMYXllckdyb3VwKGdyb3VwLm5hbWUsICRldmVudCwgZ3JvdXAuc2luZ2xlTGF5ZXIsIGdyb3VwLnZpc2libGVMYXllcnMpXCJcbiAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImdyb3VwLm5hbWUgPT09IERFRkFVTFRfTEFZRVJfR1JPVVAgPyAoJ0Bwcnkud2lkZ2V0Lm1hcC5ub0dyb3VwJyB8IGkxOG4pIDogZ3JvdXAubmFtZVwiXG4gICAgICAgICAgICAgICAgPjwvcHJ5LWVkaXQtaW5wdXQ+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJncm91cC5uYW1lICE9PSBERUZBVUxUX0xBWUVSX0dST1VQXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYS1idG4tLWljb24tb25seSBhLXRvb2x0aXAgby1sYXllci1zZXR0aW5nc19fZGVsZXRlLWdyb3VwXCJcbiAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtdG9vbHRpcF09XCInQHByeS53aWRnZXQubWFwLmxheWVyU2V0dGluZ3MuZGVsZXRlR3JvdXAnIHwgaTE4blwiXG4gICAgICAgICAgICAgICAgICBkYXRhLXRvb2x0aXAtcG9zaXRpb249XCJsZWZ0XCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJkZWxldGVMYXllckdyb3VwKGdyb3VwLm5hbWUpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8cHJ5LWljb24gW2hlaWdodF09XCIxNlwiIFt3aWR0aF09XCIxNlwiIGljb25Tdmc9XCJiaW5fbm9ybWFsXCI+PC9wcnktaWNvbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tcmFkaW8tZ3JvdXBcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1yYWRpby1ncm91cF9faXRlbVwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgICAgICAgICAgIGlkPVwibXVsdGlzZWxlY3Rpb24te3sgZ3JvdXBJZHggfX1cIlxuICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiZ3JvdXAuc2luZ2xlTGF5ZXJcIlxuICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidXBkYXRlTGF5ZXJHcm91cChncm91cC5uYW1lLCB1bmRlZmluZWQsICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgIFtuYW1lXT1cImdyb3VwLm5hbWVcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cIm11bHRpc2VsZWN0aW9uLXt7IGdyb3VwSWR4IH19XCI+e3tcbiAgICAgICAgICAgICAgICAgICdAcHJ5LndpZGdldC5tYXAubGF5ZXJTZXR0aW5ncy5tdWx0aXBsZUxheWVyJyB8IGkxOG5cbiAgICAgICAgICAgICAgICB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLXJhZGlvLWdyb3VwX19pdGVtXCI+XG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgICAgICAgaWQ9XCJtb25vc2VsZWN0aW9uLXt7IGdyb3VwSWR4IH19XCJcbiAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImdyb3VwLnNpbmdsZUxheWVyXCJcbiAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInVwZGF0ZUxheWVyR3JvdXAoZ3JvdXAubmFtZSwgdW5kZWZpbmVkLCAkZXZlbnQsIGdyb3VwLnZpc2libGVMYXllcnMpXCJcbiAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgIFtuYW1lXT1cImdyb3VwLm5hbWVcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cIm1vbm9zZWxlY3Rpb24te3sgZ3JvdXBJZHggfX1cIj57e1xuICAgICAgICAgICAgICAgICAgJ0Bwcnkud2lkZ2V0Lm1hcC5sYXllclNldHRpbmdzLnNpbmdsZUxheWVyJyB8IGkxOG5cbiAgICAgICAgICAgICAgICB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1idG4tZ3JvdXBcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInUtZGlzcGxheS1mbGV4IC1hbGlnbi1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJhZGRMYXllcihncm91cClcIiBjbGFzcz1cImEtYnRuIC1saW5rLWxpa2VcIiB0eXBlPVwiYnV0dG9uXCI+XG4gICAgICAgICAgICAgICAgICArIHt7ICdAcHJ5LndpZGdldC5tYXAuYWRkTGF5ZXInIHwgaTE4biB9fVxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwidG9nZ2xlRXhwYW5kQWxsKGdyb3VwKVwiIGNsYXNzPVwiYS1idG4gLWxpbmstbGlrZVwiIHR5cGU9XCJidXR0b25cIj5cbiAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgbGF5ZXJTZXR0aW5nc0V4cGFuZGVkU3RhdGVbZ3JvdXAubmFtZV1cbiAgICAgICAgICAgICAgICAgICAgPyAoJ0Bwcnkud2lkZ2V0Lm1hcC5sYXllclNldHRpbmdzLmZvbGRBbGwnIHwgaTE4bilcbiAgICAgICAgICAgICAgICAgICAgOiAoJ0Bwcnkud2lkZ2V0Lm1hcC5sYXllclNldHRpbmdzLnVuZm9sZEFsbCcgfCBpMThuKVxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNka0Ryb3BMaXN0XG4gICAgICAgICAgICAgIGNsYXNzPVwiby1sYXllci1zZXR0aW5nc19fbGF5ZXJzXCJcbiAgICAgICAgICAgICAgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJkcm9wKCRldmVudCwgZ3JvdXApXCJcbiAgICAgICAgICAgICAgW2F0dHIuZGF0YS1sYXllci1ncm91cF09XCJncm91cC5uYW1lXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgbGF5ZXIgb2Ygb3B0aW9uc0NvcHk/LmxheWVyczsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwibGF5ZXIuZ3JvdXAgPT09IGdyb3VwLm5hbWVcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJvLWxheWVyLXNldHRpbmdzX19sYXllci13cmFwcGVyXCJcbiAgICAgICAgICAgICAgICAgIGNka0RyYWdcbiAgICAgICAgICAgICAgICAgIFtjZGtEcmFnRGF0YV09XCJsYXllclwiXG4gICAgICAgICAgICAgICAgICBbY2RrRHJhZ0Rpc2FibGVkXT1cImxheWVyU2V0dGluZ3NFeHBhbmRlZFN0YXRlW2xheWVyLnRpdGxlIV1cIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcmFnLXBsYWNlaG9sZGVyXCIgKmNka0RyYWdQbGFjZWhvbGRlcj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvLWxheWVyLXNldHRpbmdzX19sYXllci1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInUtZGlzcGxheS1mbGV4IC1hbGlnbi1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8cHJ5LWljb25cbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy4tZGlzYWJsZWRdPVwibGF5ZXJTZXR0aW5nc0V4cGFuZGVkU3RhdGVbbGF5ZXIudGl0bGUhXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRyYWctaGFuZGxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtoZWlnaHRdPVwiMTZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3dpZHRoXT1cIjE2XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb25Tdmc9XCJkcmFnX2luZGljYXRvclwiXG4gICAgICAgICAgICAgICAgICAgICAgPjwvcHJ5LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhLWJ0bi0taWNvbi1vbmx5IHVuZm9sZC1sYXllclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlTGF5ZXJFeHBhbmQobGF5ZXIsIGdyb3VwKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cHJ5LWljb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2hlaWdodF09XCI1XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3dpZHRoXT1cIjlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbaWNvblN2Z109XCJsYXllclNldHRpbmdzRXhwYW5kZWRTdGF0ZVtsYXllci50aXRsZSFdID8gJ2NoZXZyb25fdG9wJyA6ICdjaGV2cm9uX2JvdHRvbSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvcHJ5LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwiYS1oNVwiPnt7IGxheWVyLnRpdGxlID8/ICgnQHByeS53aWRnZXQubWFwLmxheWVyJyB8IGkxOG46IHsgaW5kZXg6IGkgKyAxIH0pIH19PC9oNT5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm8tbGF5ZXItc2V0dGluZ3NfX2RlbGV0ZS1sYXllciBhLWJ0bi0taWNvbi1vbmx5IGEtdG9vbHRpcFwiXG4gICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS10b29sdGlwXT1cIidAcHJ5LndpZGdldC5tYXAubGF5ZXJTZXR0aW5ncy5kZWxldGVMYXllcicgfCBpMThuXCJcbiAgICAgICAgICAgICAgICAgICAgICBkYXRhLXRvb2x0aXAtcG9zaXRpb249XCJsZWZ0XCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlTGF5ZXIoaSwgbGF5ZXIsIGdyb3VwKVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8cHJ5LWljb24gW2hlaWdodF09XCIxNlwiIFt3aWR0aF09XCIxNlwiIGljb25Tdmc9XCJiaW5fbm9ybWFsXCI+PC9wcnktaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJsYXllclNldHRpbmdzRXhwYW5kZWRTdGF0ZVtsYXllci50aXRsZSFdXCIgY2xhc3M9XCJvLWxheWVyLXNldHRpbmdzX19sYXllci1jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvLXNldHRpbmdzX19wb3B1cF9fY29udGVudF9fZmllbGRzX19jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHByeS1yYW5nZVxuICAgICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiKGxheWVyPy5vcGFjaXR5ID8/IDEwMCkgKyAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VPcGFjaXR5KGxheWVyLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsVHJhbnNsYXRlPVwiQHByeS53aWRnZXQubWFwLm9wYWNpdHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgbWluPVwiMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXg9XCIxMDBcIlxuICAgICAgICAgICAgICAgICAgICAgID48L3ByeS1yYW5nZT5cblxuICAgICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsZWdlbmQgY2xhc3M9XCJ1LXZpc3VhbGx5LWhpZGRlblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAnQHByeS53aWRnZXQubWFwLmxheWVyT3B0aW9ucycgfCBpMThuOiB7IGluZGV4OiBpICsgMSB9IH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xlZ2VuZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHByeS1lZGl0LWlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw9XCJAcHJ5LndpZGdldC5tYXAubGF5ZXJUaXRsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRpdEJ1dHRvblRvb2x0aXA9XCJAcHJ5LndpZGdldC5tYXAubGF5ZXJTZXR0aW5ncy5lZGl0TGF5ZXJUaXRsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZhbGlkYXRlZCk9XCJjaGFuZ2VUaXRsZSgkZXZlbnQsIGxheWVyLCBncm91cClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImxheWVyLnRpdGxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvcHJ5LWVkaXQtaW5wdXQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIiAqbmdJZj1cIiFbJ2dlb3NlcnZlcicsICdhdXRvJ10uaW5jbHVkZXMobGF5ZXIudHlwZSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cIm1hcF9sYXllclR5cGVcIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdAcHJ5LndpZGdldC5tYXAubGF5ZXJUeXBlLnRpdGxlJyB8IGkxOG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJ5LXNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZUxheWVyVHlwZSgkZXZlbnQsIGkpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXRlbXNdPVwibGF5ZXJUeXBlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwibGF5ZXIudHlwZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaTE4blByZWZpeD1cIkBwcnkud2lkZ2V0Lm1hcC5sYXllclR5cGUuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cIm1hcF9sYXllclR5cGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9wcnktc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIiAqbmdJZj1cIlsnZ2Vvc2VydmVyJywgJ3dtcyddLmluY2x1ZGVzKGxheWVyLnR5cGUpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJnZXRBc1dtc1R5cGUobGF5ZXIpIGFzIHdtc2xheWVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cIm1hcF9sYXllclN0eWxlXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdAcHJ5LndpZGdldC5tYXAubGF5ZXJTdHlsZScgfCBpMThuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcnktc2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VMYXllclN0eWxlKCRldmVudCwgbGF5ZXIpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpdGVtc109XCJsYXllclN0eWxlT3B0aW9ucyhsYXllcilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiZ2V0U3R5bGUobGF5ZXIpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpbmRMYWJlbD1cImxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpbmRWYWx1ZT1cImlkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwibWFwX2xheWVyU3R5bGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3ByeS1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHByeS1jaGVja2JveCAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VGaXQoJGV2ZW50LCBsYXllcilcIiBbbmdNb2RlbF09XCJsYXllci5maXRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAnQHByeS53aWRnZXQubWFwLmZpdCcgfCBpMThuIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJ5LWNoZWNrYm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllci50eXBlICE9PSAncmVsYXRpb24nICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIudHlwZSAhPT0gJ3dtcycgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllci50eXBlICE9PSAnd210cycgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllci50eXBlICE9PSAnZ2Vvc2VydmVyJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyLnR5cGUgIT09ICdmZWF0dXJlbGF5ZXInICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIudHlwZSAhPT0gJ3ZlY3RvcnRpbGUnICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIudHlwZSAhPT0gJ3Jhc3RlcnRpbGUnICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIudHlwZSAhPT0gJ2F1dG8nXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cIm1hcF9jbGFzc2VzXCI+e3sgJ0Bwcnkud2lkZ2V0Lm1hcC5jbGFzc2VzJyB8IGkxOG4gfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJ5LXNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZUNsYXNzZXMoJGV2ZW50LCBsYXllcilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpdGVtc109XCJ1c2VkQ2xhc3NlcyQgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW211bHRpcGxlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImxheWVyLmNsYXNzZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpbmRMYWJlbD1cIm5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpbmRWYWx1ZT1cImlkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cIm1hcF9jbGFzc2VzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvcHJ5LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldFxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBsYXllci50eXBlICE9PSAncmVsYXRpb24nICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBsYXllci50eXBlICE9PSAnd21zJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIudHlwZSAhPT0gJ3dtdHMnICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBsYXllci50eXBlICE9PSAnZ2Vvc2VydmVyJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIudHlwZSAhPT0gJ2ZlYXR1cmVsYXllcicgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyLnR5cGUgIT09ICd2ZWN0b3J0aWxlJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIudHlwZSAhPT0gJ3Jhc3RlcnRpbGUnXG4gICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxsZWdlbmQgY2xhc3M9XCJ1LXZpc3VhbGx5LWhpZGRlblwiPnt7ICdAcHJ5LndpZGdldC5tYXAubG9jYXRpb25BdHRyJyB8IGkxOG4gfX08L2xlZ2VuZD5cbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZ2VvbWV0cnlGaWVsZHNGb3I6IHsgcmVzdWx0U2V0OiByZXN1bHRTZXQkLCBjbGFzc2VzOiBsYXllci5jbGFzc2VzLCB0eXBlOiBsYXllci50eXBlIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFzeW5jIGFzIGZpZWxkc1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2hlYXRtYXAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2J1YmJsZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWFya2VyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwb2ludCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbGluZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncG9seWdvbicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbXVsdGktbGluZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbXVsdGktcG9seWdvbidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLmluZGV4T2YobGF5ZXIudHlwZSkgPj0gMFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cIm1hcF9sb2NhdGlvbkF0dHJpYnV0ZV9ib3RoXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdAcHJ5LndpZGdldC5tYXAubG9jYXRpb25BdHRyaWJ1dGUuYm90aCcgfCBpMThuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcnktc2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VMb2NhdGlvbkF0dHJpYnV0ZXMoJGV2ZW50LCBsYXllcilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2l0ZW1zXT1cImZpZWxkc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJsYXllci5hdHRyaWJ1dGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmluZExhYmVsPVwibmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5kVmFsdWU9XCJuYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwibWFwX2xvY2F0aW9uQXR0cmlidXRlX2JvdGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3ByeS1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJbJ2hlYXRtYXAnLCAnYnViYmxlJ10uaW5kZXhPZihsYXllci50eXBlKSA+PSAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwibWFwX2ludGVuc2l0eUF0dHJpYnV0ZVwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQHByeS53aWRnZXQubWFwLmludGVuc2l0eUF0dHJpYnV0ZScgfCBpMThuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcnktc2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VJbnRlbnNpdHlBdHRyaWJ1dGVzKCRldmVudCwgbGF5ZXIpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpdGVtc109XCJmaWVsZHNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwibGF5ZXJIYXNJbnRlbnNpdHkobGF5ZXIpLmludGVuc2l0eUF0dHJpYnV0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5kTGFiZWw9XCJuYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpbmRWYWx1ZT1cIm5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJtYXBfaW50ZW5zaXR5QXR0cmlidXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9wcnktc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PlxuXG4gICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldFxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBsYXllci50eXBlID09PSAnd21zJyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIudHlwZSA9PT0gJ2dlb3NlcnZlcicgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyLnR5cGUgPT09ICd3bXRzJyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIudHlwZSA9PT0gJ2ZlYXR1cmVsYXllcicgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyLnR5cGUgPT09ICd2ZWN0b3J0aWxlJyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIudHlwZSA9PT0gJ3Jhc3RlcnRpbGUnXG4gICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJsYXllci50eXBlICE9PSAnZ2Vvc2VydmVyJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwibWFwX3dtc191cmxcIj57eyAnQHByeS53aWRnZXQubWFwLndtcy51cmwnIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwibWFwX3dtc191cmxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYS1mb3JtLWZpZWxkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cImNoYW5nZVVybCgkZXZlbnQsIGxheWVyKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImxheWVyLnVybFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIiAqbmdJZj1cImxheWVyLnR5cGUgPT09ICd3bXMnIHx8IGxheWVyLnR5cGUgPT09ICd3bXRzJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cIm1hcF93bXNfcGFyYW1MYXllclwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICdAcHJ5LndpZGdldC5tYXAud21zLnBhcmFtTGF5ZXInIHwgaTE4blxuICAgICAgICAgICAgICAgICAgICAgICAgfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwibWFwX3dtc19wYXJhbUxheWVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhLWZvcm0tZmllbGRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJjaGFuZ2VQYXJhbUxheWVyKCRldmVudCwgbGF5ZXIpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImxheWVyLnBhcmFtTGF5ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIiAqbmdJZj1cImxheWVyLnR5cGUgPT09ICd3bXRzJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cIm1hcF93bXNfbWF0cml4U2V0XCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ0Bwcnkud2lkZ2V0Lm1hcC53bXMubWF0cml4U2V0JyB8IGkxOG5cbiAgICAgICAgICAgICAgICAgICAgICAgIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cIm1hcF93bXNfbWF0cml4U2V0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhLWZvcm0tZmllbGRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJjaGFuZ2VNYXRyaXhTZXQoJGV2ZW50LCBsYXllcilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwibGF5ZXIubWF0cml4U2V0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCIgKm5nSWY9XCJsYXllci50eXBlID09PSAnd210cydcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJtYXBfd21zX3N0eWxlXCI+e3sgJ0Bwcnkud2lkZ2V0Lm1hcC53bXMuc3R5bGUnIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJtYXBfd21zX3N0eWxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhLWZvcm0tZmllbGRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJjaGFuZ2VQYXJhbVN0eWxlKCRldmVudCwgbGF5ZXIpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImxheWVyLnN0eWxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCIgKm5nSWY9XCJsYXllci50eXBlID09PSAnd21zJyB8fCBsYXllci50eXBlID09PSAnZ2Vvc2VydmVyJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxlZ2VuZCBjbGFzcz1cInUtdmlzdWFsbHktaGlkZGVuXCI+e3sgJ0Bwcnkud2lkZ2V0Lm1hcC50aWxlJyB8IGkxOG4gfX08L2xlZ2VuZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwcnktY2hlY2tib3hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlUGFyYW1UaWxlZCgkZXZlbnQsIGxheWVyKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImxheWVyPy5wYXJhbVRpbGVkID8/IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ0Bwcnkud2lkZ2V0Lm1hcC53bXMucGFyYW1UaWxlZCcgfCBpMThuIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3ByeS1jaGVja2JveD5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD5cblxuICAgICAgICAgICAgICAgICAgICA8ZmllbGRzZXQgKm5nSWY9XCJsYXllci50eXBlID09PSAnbWFya2VyJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxsZWdlbmQgY2xhc3M9XCJ1LXZpc3VhbGx5LWhpZGRlblwiPnt7ICdAcHJ5LndpZGdldC5tYXAuY2x1c3RlcmluZycgfCBpMThuIH19PC9sZWdlbmQ+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHByeS1jaGVja2JveCAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VDbHVzdGVyZWQobGF5ZXIsICRldmVudClcIiBbbmdNb2RlbF09XCJsYXllci5jbHVzdGVyZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ0Bwcnkud2lkZ2V0Lm1hcC5jbHVzdGVyZWQnIHwgaTE4biB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9wcnktY2hlY2tib3g+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImxheWVyLmNsdXN0ZXJlZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHByeS1yYW5nZVxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJsYXllci5jbHVzdGVyZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VDbHVzdGVyRGlzdGFuY2UobGF5ZXIsICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbFRyYW5zbGF0ZT1cIkBwcnkud2lkZ2V0Lm1hcC5jbHVzdGVyRGlzdGFuY2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtaW49XCIxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4PVwiNTAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3ByeS1yYW5nZT5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCIgKm5nSWY9XCJvcHRpb25zQ29weS5zbGlkZSA/PyBmYWxzZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJzbGlkZV9zZWxlY3RcIj57eyAnQHByeS53aWRnZXQubWFwLnNsaWRlLnRpdGxlJyB8IGkxOG4gfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgIDxwcnktc2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VTbGlkZSgkZXZlbnQsIGxheWVyKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaXRlbXNdPVwic2xpZGVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImxheWVyLnNsaWRlID8/ICdhbGwnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJpbmRMYWJlbD1cImxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJpbmRWYWx1ZT1cImlkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwic2xpZGVfc2VsZWN0XCJcbiAgICAgICAgICAgICAgICAgICAgICA+PC9wcnktc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCIgKm5nSWY9XCJvcHRpb25zQ29weS5hdHRyaWJ1dGlvbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwiYXR0cmlidXRpb25cIj57eyAnQHByeS53aWRnZXQubWFwLmF0dHJpYnV0aW9uJyB8IGkxOG4gfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJhdHRyaWJ1dGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImEtZm9ybS1maWVsZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoaW5wdXQpPVwiY2hhbmdlQXR0cmlidXRpb24oJGV2ZW50LCBsYXllcilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImxheWVyLmF0dHJpYnV0aW9uID8gbGF5ZXIuYXR0cmlidXRpb24gOiAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L3ByeS1zZXR0aW5ncz5cbiAgPC9wcnktd2lkZ2V0LWhlYWRlcj5cblxuICA8ZGl2XG4gICAgY2xhc3M9XCJtLWJ0bi1ncm91cCAtbWFwLXNlbGVjdGlvbi1jaG9pY2UgLXZlcnRpY2FsXCJcbiAgICBbY2xhc3MuLXdpdGgtaGVhZGVyXT1cImRpc3BsYXlIZWFkZXIkIHwgYXN5bmNcIlxuICAgIFtjbGFzcy4tY2xvc2VkXT1cIiEoYWN0aW9uTWVudU9wZW4kIHwgYXN5bmMpXCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCItdmVydGljYWxcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiBiYXNpY0FjdGlvbnMkIHwgYXN5bmNcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIGNsYXNzPVwiYS1idG4gYS1idG4tLWljb24tb25seSBhLXRvb2x0aXAgYS10b29sdGlwLS17eyBhY3Rpb24gfX1cIlxuICAgICAgICAgIChjbGljayk9XCJjaGFuZ2VTZWxlY3Rpb24oYWN0aW9uKVwiXG4gICAgICAgICAgW2F0dHIuZGF0YS10b29sdGlwXT1cIidAcHJ5LndpZGdldC5tYXAuJyArIGFjdGlvbiB8IGkxOG5cIlxuICAgICAgICAgIGRhdGEtdG9vbHRpcC1wb3NpdGlvbj1cInJpZ2h0XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxwcnktaWNvbiBbaWNvblN2Z109XCJhY3Rpb25cIj48L3ByeS1pY29uPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidS12aXN1YWxseS1oaWRkZW5cIj57eyAnQHByeS53aWRnZXQubWFwLicgKyBhY3Rpb24gfCBpMThuIH19PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuXG4gICAgPGJ1dHRvblxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBjbGFzcz1cImEtYnRuIGEtYnRuLS1pY29uLW9ubHkgYS10b29sdGlwIC1tYXAtdG9nZ2xlXCJcbiAgICAgIGlkPVwib3Blbl9tZW51XCJcbiAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiYWN0aW9uTWVudU9wZW4kIHwgYXN5bmNcIlxuICAgICAgYXJpYS1jb250cm9scz1cImV4cG9ydF90eXBlXCJcbiAgICAgIGFyaWEtaGFzcG9wdXA9XCJtZW51XCJcbiAgICAgIChjbGljayk9XCJ0b2dnbGVNZW51KClcIlxuICAgID5cbiAgICAgIDxwcnktaWNvblxuICAgICAgICBbaWNvblN2Z109XCIoYWN0aW9uTWVudU9wZW4kIHwgYXN5bmMpID8gJ2NoZXZyb25fdG9wJyA6ICdjaGV2cm9uX2JvdHRvbSdcIlxuICAgICAgICBbd2lkdGhdPVwiMTJcIlxuICAgICAgICBbaGVpZ2h0XT1cIjI0XCJcbiAgICAgID48L3ByeS1pY29uPlxuICAgICAgPHNwYW4gY2xhc3M9XCJ1LXZpc3VhbGx5LWhpZGRlblwiPnt7ICdAcHJ5LndpZGdldC5tYXAub3BlbicgfCBpMThuIH19PC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwibS1idG4tZ3JvdXAgLW1hcC1zZWxlY3Rpb24tY2hvaWNlIC1tYXAtZXhwb3J0XCIgW2NsYXNzLi13aXRoLWhlYWRlcl09XCJkaXNwbGF5SGVhZGVyJCB8IGFzeW5jXCI+XG4gICAgPGJ1dHRvblxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBjbGFzcz1cImEtYnRuIGEtYnRuLS1pY29uLW9ubHkgYS10b29sdGlwXCJcbiAgICAgIGlkPVwiZXhwb3J0X2NhcmRcIlxuICAgICAgYXJpYS1leHBhbmRlZD1cImZhbHNlXCJcbiAgICAgIGFyaWEtY29udHJvbHM9XCJleHBvcnRfdHlwZVwiXG4gICAgICBhcmlhLWhhc3BvcHVwPVwibWVudVwiXG4gICAgICBbYXR0ci5kYXRhLXRvb2x0aXBdPVwiJ0Bwcnkud2lkZ2V0Lm1hcC5leHBvcnQnIHwgaTE4blwiXG4gICAgICBkYXRhLXRvb2x0aXAtcG9zaXRpb249XCJyaWdodFwiXG4gICAgICAoY2xpY2spPVwiZXhwb3J0KClcIlxuICAgID5cbiAgICAgIDxwcnktaWNvbiBpY29uU3ZnPVwiZmlsZV9kb3dubG9hZFwiPjwvcHJ5LWljb24+XG4gICAgICA8c3BhbiBjbGFzcz1cInUtdmlzdWFsbHktaGlkZGVuXCI+e3sgJ0Bwcnkud2lkZ2V0Lm1hcC5leHBvcnQnIHwgaTE4biB9fTwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG5cbiAgPGRpdlxuICAgIGNsYXNzPVwib2wtY29udHJvbCBtLWxheWVyLXN3aXRjaGVyIG0tbWFwLWxheWVyLWFjdGlvblwiXG4gICAgKm5nSWY9XCIoKGxheWVycyQgfCBhc3luYyk/Lmxlbmd0aCA/PyAwKSA+IDBcIlxuICAgIFtzdHlsZS50b3AucHhdPVwibGF5ZXJzVG9wJCB8IGFzeW5jXCJcbiAgPlxuICAgIDxidXR0b25cbiAgICAgIGNsYXNzPVwibS1tYXAtbGF5ZXItYWN0aW9uX190b2dnbGVcIlxuICAgICAgW2NsYXNzLmEtdG9vbHRpcF09XCIhdGhpcy5sYXllcnNUYWJPcGVuXCJcbiAgICAgIFtjbGFzcy4tdG9vbHRpcC1uby13cmFwXT1cIiF0aGlzLmxheWVyc1RhYk9wZW5cIlxuICAgICAgKGNsaWNrKT1cInRvZ2dsZUxheWVyc1dpbmRvdygpXCJcbiAgICAgIFthdHRyLmRhdGEtdG9vbHRpcF09XCInQHByeS53aWRnZXQubWFwLnNlbGVjdExheWVycycgfCBpMThuXCJcbiAgICAgIGRhdGEtdG9vbHRpcC1wb3NpdGlvbj1cImxlZnRcIlxuICAgID5cbiAgICAgIDxwcnktaWNvbiBpY29uU3ZnPVwibGF5ZXJzXCIgW3dpZHRoXT1cIjE4XCIgW2hlaWdodF09XCIxOFwiPjwvcHJ5LWljb24+XG4gICAgPC9idXR0b24+XG4gICAgPGRpdiBjbGFzcz1cIm0tbWFwLWxheWVyLWFjdGlvbl9fY29udGFpbmVyIG0tbWFwLWxheWVyLWFjdGlvbl9fY29udGFpbmVyLS1sYXllcnNcIiBbY2xhc3MuLWhpZGRlbl09XCIhbGF5ZXJzVGFiT3BlblwiPlxuICAgICAgPGg0IGNsYXNzPVwiYS1oNFwiPnt7ICdAcHJ5LndpZGdldC5tYXAubGF5ZXJTZXR0aW5ncy5zZWxlY3RMYXllcnMnIHwgaTE4biB9fTwvaDQ+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBncm91cCBvZiBsYXllckdyb3VwcyQgfCBhc3luY1wiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNHcm91cFVzZWRCeVdpZGdldExheWVycyhncm91cClcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1tYXAtbGF5ZXItYWN0aW9uX190aXRsZSBtLWxheWVyLXN3aXRjaGVyX19ncm91cC10aXRsZVwiPlxuICAgICAgICAgICAgPGg1IGNsYXNzPVwiYS1oNVwiPlxuICAgICAgICAgICAgICB7eyBncm91cC5uYW1lID09PSBERUZBVUxUX0xBWUVSX0dST1VQID8gKCdAcHJ5LndpZGdldC5tYXAubm9Hcm91cCcgfCBpMThuKSA6IGdyb3VwLm5hbWUgfX1cbiAgICAgICAgICAgIDwvaDU+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFncm91cC5zaW5nbGVMYXllcjsgZWxzZSBzaW5nbGVMYXllclwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgbGF5ZXIgb2Ygb3B0aW9uc0NvcHkubGF5ZXJzOyBsZXQgaW5kZXggPSBpbmRleFwiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibGF5ZXIuZ3JvdXAgPT09IGdyb3VwLm5hbWVcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1tYXAtbGF5ZXItYWN0aW9uX190aXRsZSBtLWxheWVyLXN3aXRjaGVyX190aXRsZVwiIFtjbGFzcy4taGlkZGVuXT1cIiFsYXllcnNUYWJPcGVuXCI+XG4gICAgICAgICAgICAgICAgICA8cHJ5LWNoZWNrYm94XG4gICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImlzTGF5ZXJWaXNpYmxlKGxheWVyLCBncm91cClcIlxuICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cImNoYW5nZVZpc2liaWxpdHkoZ3JvdXAsIGxheWVyKVwiXG4gICAgICAgICAgICAgICAgICAgIGlkPVwiY2hlY2tib3gtbGF5ZXIte3sgaW5kZXggfX1cIlxuICAgICAgICAgICAgICAgICAgPjwvcHJ5LWNoZWNrYm94PlxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cImNoZWNrYm94LWxheWVyLXt7IGluZGV4IH19XCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IGxheWVyLnRpdGxlID8/ICgnQHByeS53aWRnZXQubWFwLm1pc3NpbmdUaXRsZScgfCBpMThuKSB9fVxuICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI3NpbmdsZUxheWVyPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tbGF5ZXItc3dpdGNoZXItLXJhZGlvc1wiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1tYXAtbGF5ZXItYWN0aW9uX190aXRsZSBtLWxheWVyLXN3aXRjaGVyX190aXRsZVwiIFtjbGFzcy4taGlkZGVuXT1cIiFsYXllcnNUYWJPcGVuXCI+XG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgICAgICAgW25hbWVdPVwiZ3JvdXAubmFtZVwiXG4gICAgICAgICAgICAgICAgICBpZD1cInJhZGlvLW5vLWxheWVyXCJcbiAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImdyb3VwLnZpc2libGVMYXllcnMubGVuZ3RoXCJcbiAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCIwXCJcbiAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwiY2hhbmdlVmlzaWJpbGl0eShncm91cClcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cInJhZGlvLW5vLWxheWVyXCI+e3sgJ0Bwcnkud2lkZ2V0Lm1hcC5sYXllclNldHRpbmdzLm5vTGF5ZXInIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBsYXllciBvZiBvcHRpb25zQ29weS5sYXllcnM7IGxldCBpbmRleCA9IGluZGV4XCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxheWVyLmdyb3VwID09PSBncm91cC5uYW1lXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1tYXAtbGF5ZXItYWN0aW9uX190aXRsZSBtLWxheWVyLXN3aXRjaGVyX190aXRsZVwiIFtjbGFzcy4taGlkZGVuXT1cIiFsYXllcnNUYWJPcGVuXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwiZ3JvdXAubmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2lkXT1cIidyYWRpby1sYXllci0nICsgaW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImdyb3VwLnZpc2libGVMYXllcnNbMF1cIlxuICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJsYXllci50aXRsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJjaGFuZ2VWaXNpYmlsaXR5KGdyb3VwLCBsYXllcilcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwicmFkaW8tbGF5ZXIte3sgaW5kZXggfX1cIj57e1xuICAgICAgICAgICAgICAgICAgICAgIGxheWVyLnRpdGxlID8/ICgnQHByeS53aWRnZXQubWFwLm1pc3NpbmdUaXRsZScgfCBpMThuKVxuICAgICAgICAgICAgICAgICAgICB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8ZGl2XG4gICAgY2xhc3M9XCJvbC1jb250cm9sIG0tbWFwLWxheWVyLWFjdGlvbiBtLWxheWVyLWxlZ2VuZFwiXG4gICAgKm5nSWY9XCIoKGxlZ2VuZExheWVycyQgfCBhc3luYyk/Lmxlbmd0aCA/PyAwKSA+IDBcIlxuICAgIFtzdHlsZS50b3AucHhdPVwibGVnZW5kVG9wJCB8IGFzeW5jXCJcbiAgPlxuICAgIDxidXR0b25cbiAgICAgIGNsYXNzPVwibS1tYXAtbGF5ZXItYWN0aW9uX190b2dnbGVcIlxuICAgICAgW2NsYXNzLmEtdG9vbHRpcF09XCIhdGhpcy5sZWdlbmRUYWJPcGVuXCJcbiAgICAgIFtjbGFzcy4tdG9vbHRpcC1uby13cmFwXT1cIiF0aGlzLmxlZ2VuZFRhYk9wZW5cIlxuICAgICAgKGNsaWNrKT1cInRvZ2dsZUxlZ2VuZFdpbmRvdygpXCJcbiAgICAgIFthdHRyLmRhdGEtdG9vbHRpcF09XCInQHByeS53aWRnZXQubWFwLmxlZ2VuZHMnIHwgaTE4blwiXG4gICAgICBkYXRhLXRvb2x0aXAtcG9zaXRpb249XCJsZWZ0XCJcbiAgICA+XG4gICAgICA8cHJ5LWljb24gaWNvblN2Zz1cImxlZ2VuZFwiIFt3aWR0aF09XCIxOFwiIFtoZWlnaHRdPVwiMTVcIj48L3ByeS1pY29uPlxuICAgIDwvYnV0dG9uPlxuICAgIDxkaXYgY2xhc3M9XCJtLW1hcC1sYXllci1hY3Rpb25fX2NvbnRhaW5lclwiIFtjbGFzcy4taGlkZGVuXT1cIiFsZWdlbmRUYWJPcGVuXCI+XG4gICAgICA8aDQgY2xhc3M9XCJhLWg0XCI+e3sgJ0Bwcnkud2lkZ2V0Lm1hcC5sZWdlbmRzVGl0bGUnIHwgaTE4biB9fTwvaDQ+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBnZW9MYXllciBvZiBsZWdlbmRMYXllcnMkIHwgYXN5bmM7IGxldCBpbmRleCA9IGluZGV4XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtLW1hcC1sYXllci1hY3Rpb25fX3RpdGxlIG0tbGF5ZXItbGVnZW5kX190aXRsZVwiIChjbGljayk9XCJ0b2dnbGVMZWdlbmQoaW5kZXgpXCI+XG4gICAgICAgICAgPHByeS1pY29uXG4gICAgICAgICAgICAqbmdJZj1cImlzTGF5ZXJSZW5kZXJlZChnZW9MYXllcikgJiYgISFnZW9MYXllci50aXRsZVwiXG4gICAgICAgICAgICBjbGFzcz1cIm0tbGF5ZXItbGVnZW5kX19kcm9wZG93bi1pY29uXCJcbiAgICAgICAgICAgIFtpY29uU3ZnXT1cImxlZ2VuZFRhYiA9PT0gaW5kZXggPyAnY2hldnJvbl90b3AnIDogJ2NoZXZyb25fYm90dG9tJ1wiXG4gICAgICAgICAgICBbd2lkdGhdPVwiMTJcIlxuICAgICAgICAgICAgW2hlaWdodF09XCIxMlwiXG4gICAgICAgICAgPjwvcHJ5LWljb24+XG4gICAgICAgICAgPGg1IGNsYXNzPVwiYS1oNVwiPnt7IGdlb0xheWVyLnRpdGxlIH19PC9oNT5cbiAgICAgICAgICA8cHJ5LWljb25cbiAgICAgICAgICAgICpuZ0lmPVwiIWlzTGF5ZXJSZW5kZXJlZChnZW9MYXllcilcIlxuICAgICAgICAgICAgY2xhc3M9XCJhLXRvb2x0aXBcIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS10b29sdGlwXT1cIidAcHJ5LndpZGdldC5tYXAubGF5ZXJMb2FkRXJyb3InIHwgaTE4blwiXG4gICAgICAgICAgICBbaWNvblN2Z109XCInY2xvc2UnXCJcbiAgICAgICAgICAgIFt3aWR0aF09XCIyMlwiXG4gICAgICAgICAgICBbaGVpZ2h0XT1cIjIyXCJcbiAgICAgICAgICA+PC9wcnktaWNvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cIm0tbWFwLWxheWVyLWFjdGlvbl9faW1hZ2VcIlxuICAgICAgICAgIFtjbGFzcy4taGlkZGVuXT1cIiFsZWdlbmRUYWJPcGVuIHx8IGxlZ2VuZFRhYiAhPT0gaW5kZXggfHwgIWlzTGF5ZXJSZW5kZXJlZChnZW9MYXllcilcIlxuICAgICAgICAgIFtzdHlsZS5tYXgtaGVpZ2h0LnB4XT1cImxlZ2VuZEhlaWdodCQgfCBhc3luY1wiXG4gICAgICAgID5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ2VvTGF5ZXIgfCBsZWdlbmRVcmw6IHsgY2FwYWJpbGl0aWVzOiAod21zQ2FwYWJpbGl0aWVzJCB8IGFzeW5jKSB9IGFzIHVybFwiPlxuICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICBbc3JjXT1cInVybCB8IGdldFNlY3VyZWRJbWFnZSB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgW2FsdF09XCInQHByeS53aWRnZXQubWFwLmxlZ2VuZCcgfCBpMThuOiB7IGxheWVyOiBnZW9MYXllci50aXRsZSB9XCJcbiAgICAgICAgICAgICAgKGVycm9yKT1cImltYWdlTm90UHJvdmlkZWRbaW5kZXhdID0gdHJ1ZVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhKGdlb0xheWVyIHwgbGVnZW5kVXJsOiB7IGNhcGFiaWxpdGllczogKHdtc0NhcGFiaWxpdGllcyQgfCBhc3luYykgfSlcIj5cbiAgICAgICAgICAgIDxwIGNsYXNzPVwibS1tYXAtbGF5ZXItYWN0aW9uX19lcnJvclwiPnt7ICdAcHJ5LndpZGdldC5tYXAubGVnZW5kTm90UHJvdmlkZWQnIHwgaTE4biB9fTwvcD5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cIm0tbWFwLXNsaWRlLWxlZ2VuZCAtbGVmdFwiICpuZ0lmPVwibGVmdFNsaWRlTGF5ZXJzLmxlbmd0aCA+IDBcIiBbc3R5bGUudG9wLnB4XT1cImxlZ2VuZFRvcCQgfCBhc3luY1wiPlxuICAgIDxzcGFuIGNsYXNzPVwibS1tYXAtc2xpZGUtbGVnZW5kX190aXRsZVwiPnt7ICdAcHJ5LndpZGdldC5tYXAuc2xpZGVUaXRsZScgfCBpMThuIH19Ojwvc3Bhbj5cbiAgICA8ZGl2ICpuZ0Zvcj1cImxldCBsYXllciBvZiBsZWZ0U2xpZGVMYXllcnNcIj5cbiAgICAgIHt7IGxheWVyLmdldCgndGl0bGUnKSB9fVxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwibS1tYXAtc2xpZGUtbGVnZW5kIC1yaWdodFwiICpuZ0lmPVwicmlnaHRTbGlkZUxheWVycy5sZW5ndGggPiAwXCIgW3N0eWxlLnRvcC5weF09XCJsZWdlbmRUb3AkIHwgYXN5bmNcIj5cbiAgICA8c3BhbiBjbGFzcz1cIm0tbWFwLXNsaWRlLWxlZ2VuZF9fdGl0bGVcIj57eyAnQHByeS53aWRnZXQubWFwLnNsaWRlVGl0bGUnIHwgaTE4biB9fTo8L3NwYW4+XG4gICAgPGRpdiAqbmdGb3I9XCJsZXQgbGF5ZXIgb2YgcmlnaHRTbGlkZUxheWVyc1wiPlxuICAgICAge3sgbGF5ZXIuZ2V0KCd0aXRsZScpIH19XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgW3N0eWxlLmhlaWdodC5weF09XCJoZWlnaHQkIHwgYXN5bmNcIiBjbGFzcz1cIm8tbWFwLXdyYXBwZXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwiby1tYXBcIj5cbiAgICAgIDxkaXYgI21hcFJlZiBpZD1cIm1hcFwiPjwvZGl2PlxuICAgICAgPGlucHV0XG4gICAgICAgIHR5cGU9XCJyYW5nZVwiXG4gICAgICAgIG1pbj1cIjBcIlxuICAgICAgICBtYXg9XCIxMDBcIlxuICAgICAgICBzdGVwPVwiMC4wMVwiXG4gICAgICAgIHZhbHVlPVwiNTBcIlxuICAgICAgICAjc2xpZGVyRWxlbWVudFxuICAgICAgICBjbGFzcz1cIm8tbWFwLXNsaWRlclwiXG4gICAgICAgIFtjbGFzcy4taGlkZGVuXT1cIiEoaGFzU2xpZGVMYXllciQgfCBhc3luYylcIlxuICAgICAgICAoaW5wdXQpPVwidHJpZ2dlckxheWVyUmVuZGVyKClcIlxuICAgICAgLz5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiAjcG9wdXAgY2xhc3M9XCJtLXRvb2x0aXAgbS10b29sdGlwLS1wb3B1cFwiIFtoaWRkZW5dPVwidHJ1ZVwiIHJvbGU9XCJ0b29sdGlwXCI+XG4gICAgPGRpdiBjbGFzcz1cIm0tdG9vbHRpcC0tcG9wdXBfX2hlYWRlclwiPlxuICAgICAgPHA+e3sgdG9vbHRpcE1hbmFnZXIudG9vbHRpcEluZGV4ICsgMSB9fSAvIHt7IHRvb2x0aXBNYW5hZ2VyLnRvb2x0aXBOdW1iZXIgfX08L3A+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGNsYXNzPVwiYS1idG4gYS1idG4tLXByaW1hcnkgYS1idG4tLWljb24tb25seVwiXG4gICAgICAgIChjbGljayk9XCJ0b29sdGlwTWFuYWdlci50b29sdGlwTW92ZSgtMSlcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiIXRvb2x0aXBNYW5hZ2VyLnRvb2x0aXBDYW5Nb3ZlKC0xKVwiXG4gICAgICA+XG4gICAgICAgIDxwcnktaWNvbiBpY29uU3ZnPVwiYXJyb3dfYmFja1wiPjwvcHJ5LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgY2xhc3M9XCJhLWJ0biBhLWJ0bi0tcHJpbWFyeSBhLWJ0bi0taWNvbi1vbmx5XCJcbiAgICAgICAgKGNsaWNrKT1cInRvb2x0aXBNYW5hZ2VyLnRvb2x0aXBNb3ZlKDEpXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cIiF0b29sdGlwTWFuYWdlci50b29sdGlwQ2FuTW92ZSgxKVwiXG4gICAgICA+XG4gICAgICAgIDxwcnktaWNvbiBpY29uU3ZnPVwiYXJyb3dfcmlnaHRcIj48L3ByeS1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYS1idG4gYS1idG4tLXByaW1hcnkgYS1idG4tLWljb24tb25seVwiIChjbGljayk9XCJ0b29sdGlwTWFuYWdlci5jbGVhclRvb2x0aXAodHJ1ZSlcIj5cbiAgICAgICAgPHByeS1pY29uIGljb25Tdmc9XCJjbG9zZVwiPjwvcHJ5LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwibS10b29sdGlwLS1wb3B1cF9fY29udGFpbmVyXCI+XG4gICAgICA8bmctY29udGFpbmVyICNwb3B1cENvbnRlbnQ+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=