@wavemaker/app-ng-runtime 11.7.2-next.26368 → 11.7.2-next.26370

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.
@@ -1230,7 +1230,9 @@ export class FormComponent extends StylableComponent {
1230
1230
  if (controls) {
1231
1231
  // when current form is inside the list (i.e. incase of formArray).
1232
1232
  if (_.get(this.parentList, 'name') && controls.hasOwnProperty(this.parentList.name)) {
1233
- this.parentForm.ngform.removeControl(this.parentList.name);
1233
+ //get the index of current form in the list and remove the FormControl from FormArray
1234
+ const index = _.findIndex(this.parentList.getWidgets(this.name), { widgetId: this.widgetId });
1235
+ this.parentForm.ngform.controls[this.parentList.name].removeAt(index);
1234
1236
  }
1235
1237
  // when we have formGroupName set i.e. multiple formInstance with counter appended to formName
1236
1238
  if (this.formGroupName && controls.hasOwnProperty(this.formGroupName)) {
@@ -1348,4 +1350,4 @@ export class FormComponent extends StylableComponent {
1348
1350
  type: HostListener,
1349
1351
  args: ['keydown', ['$event']]
1350
1352
  }] }); })();
1351
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3dpZGdldHMvZGF0YS9mb3JtL3NyYy9mb3JtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvd2lkZ2V0cy9kYXRhL2Zvcm0vc3JjL2Zvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdILFNBQVMsRUFDVCxTQUFTLEVBQ1QsZUFBZSxFQUNmLFdBQVcsRUFDWCxZQUFZLEVBQ1osUUFBUSxFQUNSLE1BQU0sRUFFTixRQUFRLEVBQ1IsUUFBUSxFQUNSLFNBQVMsRUFDVCxnQkFBZ0IsRUFDbkIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLFNBQVMsRUFBRSxXQUFXLEVBQVksTUFBTSxnQkFBZ0IsQ0FBQztBQUVqRSxPQUFPLEVBQ0gsVUFBVSxFQUNWLGVBQWUsRUFDZixXQUFXLEVBQ1gscUJBQXFCLEVBQ3JCLEdBQUcsRUFDSCxVQUFVLEVBQ1YsUUFBUSxFQUNSLFFBQVEsRUFDUiwyQkFBMkIsRUFDM0IsV0FBVyxFQUNYLGVBQWUsRUFDZixRQUFRLEVBQ1IsWUFBWSxFQUNaLFNBQVMsRUFDVCxtQkFBbUIsRUFDbkIsVUFBVSxFQUNWLFdBQVcsRUFDWCxlQUFlLEdBQ2xCLE1BQU0sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sRUFDSCxvQkFBb0IsRUFDcEIsZUFBZSxFQUNmLGdCQUFnQixFQUNoQixnQkFBZ0IsRUFDaEIsZ0JBQWdCLEVBQ2hCLG9CQUFvQixFQUNwQixrQkFBa0IsRUFDbEIsaUJBQWlCLEVBQ2pCLE1BQU0sRUFDTixTQUFTLEVBQ1osTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDdEQsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBRXZELE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLGNBQWMsQ0FBQzs7Ozs7Ozs7Ozs7OztJQ3JEekIsa0JBQXlCOzs7SUFFL0Msd0JBQ2U7OztJQU1DLHdCQUE4Rjs7O0lBQTVDLDJDQUFxQjs7OztJQU92RSw0QkFFZTs7Ozs7O0lBREQsOEVBQXdFLGdFQUFBOzs7O0lBRXRGLGtDQUNzRjtJQUFqQyxxTEFBUyxlQUFBLDZCQUFxQixDQUFBLElBQUU7SUFBQyxpQkFBUzs7O0lBQXZGLG1FQUE0Qzs7O0lBZGhFLCtCQUFrSCxhQUFBLGNBQUE7SUFHdEcsK0VBQThGO0lBQ2xHLGlCQUFNO0lBQ04sK0JBQXVCO0lBQ25CLDBCQUErQyxjQUFBO0lBRW5ELGlCQUFNO0lBQ04sK0JBQXFEO0lBQ2pELHFHQUVlOztJQUNmLDJGQUMrRjtJQUNuRyxpQkFBTSxFQUFBLEVBQUE7OztJQVp1RSxlQUFlO0lBQWYsd0NBQWU7SUFHbkUsZUFBbUI7SUFBbkIsNERBQW1CO0lBQ2YsZUFBd0I7SUFBeEIsaUVBQXdCO0lBR25CLGVBQStDO0lBQS9DLHlGQUErQztJQUdyQixlQUFpQjtJQUFqQiwwQ0FBaUI7OztJQU1qRix3QkFBMk07OztJQUE5Siw2REFBMkMsNkNBQUE7OztJQUVwRix3QkFBeUQ7OztJQUd6RCw0QkFFZTs7Ozs7O0lBREQsOEVBQXdFLGdFQUFBOzs7Ozs7SUF6QjlGLDZFQWlCTTtJQUNOLDhCQUErSDtJQUMzSCx3RUFBMk07SUFDM00sK0JBQW9GO0lBQ2hGLCtGQUF5RDtJQUM3RCxpQkFBTTtJQUNOLCtCQUErSjtJQUMzSiwrRkFFZTs7SUFDbkIsaUJBQU0sRUFBQTs7OztJQTNCa0Isd0lBQW9GO0lBa0JaLGVBQTBCO0lBQTFCLDBDQUEwQjtJQUF0RyxvR0FBMkU7SUFDakYsZUFBNkI7SUFBN0IscURBQTZCO0lBQ3RDLGVBQThFO0lBQTlFLG9HQUE4RTtJQUNoRSxlQUF5QjtJQUF6QixzQ0FBeUI7SUFFOEQsZUFBb0Q7SUFBcEQsMkVBQW9EO0lBQWpHLDRFQUE0QztJQUN2RSxlQUErQztJQUEvQyx5RkFBK0M7OztJQVFyRix3QkFBeUQ7OztJQUF6RCwrRkFBeUQ7Ozs7SUFBMUMsc0NBQXlCOzs7O0lBSXhDLGtDQUV5STtJQURoSSwrTkFBUyxlQUFBLGlEQUFxQyxDQUFBLElBQUM7SUFDaUYsaUJBQVM7Ozs7SUFBeEUseUZBQThEO0lBRnRILDZDQUFrQjtJQUVFLGlEQUFtQzs7OztJQUl6RSw2QkFHcUc7SUFGNUYsME5BQVMsZUFBQSxpREFBcUMsQ0FBQSxJQUFDO0lBRTZDLGlCQUFJOzs7O0lBQW5FLDJGQUE4RDtJQUh4Riw2Q0FBa0I7OztBRFNsQyxNQUFNLGFBQWEsR0FBRyxFQUFDLFVBQVUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLDBCQUEwQixFQUFDLENBQUM7QUFDckYsTUFBTSxpQkFBaUIsR0FBRyxFQUFDLFVBQVUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLHlCQUF5QixFQUFDLENBQUM7QUFDeEYsTUFBTSxnQkFBZ0IsR0FBRyxFQUFDLFVBQVUsRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLDhDQUE4QyxFQUFDLENBQUM7QUFDaEgsTUFBTSxrQkFBa0IsR0FBRyxFQUFDLFVBQVUsRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFFLHlEQUF5RCxFQUFDLENBQUM7QUFFL0gsTUFBTSxlQUFlLEdBQUcsQ0FBQyxVQUFVLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxFQUFFO0lBQ3ZELElBQUksTUFBTSxHQUFHLGFBQWEsQ0FBQztJQUMzQixJQUFJLFVBQVUsS0FBSyxJQUFJLEVBQUU7UUFDckIsTUFBTSxHQUFHLGdCQUFnQixDQUFDO0tBQzdCO1NBQU0sSUFBSSxZQUFZLEtBQUssSUFBSSxFQUFFO1FBQzlCLE1BQU0sR0FBRyxrQkFBa0IsQ0FBQztLQUMvQjtTQUFNLElBQUksSUFBSSxLQUFLLFdBQVcsRUFBRTtRQUM3QixNQUFNLEdBQUcsaUJBQWlCLENBQUM7S0FDOUI7SUFDRCxPQUFPLE1BQU0sQ0FBQztBQUNsQixDQUFDLENBQUM7QUFFRix3R0FBd0c7QUFDeEcsTUFBTSxxQkFBcUIsR0FBRyxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsRUFBRTtJQUNqRCxJQUFJLFNBQVMsR0FBRyxFQUFFLENBQUM7SUFDbkIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUU7UUFDNUIsU0FBUyxHQUFHLEdBQUcsU0FBUyxJQUFJLEdBQUcsS0FBSyxLQUFLLEdBQUcsQ0FBQztJQUNqRCxDQUFDLENBQUMsQ0FBQztJQUNILE9BQU8sK0JBQStCLFdBQVc7bUNBQ2xCLFNBQVM7NkJBQ2YsQ0FBQztBQUM5QixDQUFDLENBQUM7QUFFRix5REFBeUQ7QUFDekQsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsRUFBRTtJQUM1QyxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLCtEQUErRCxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDcEcsSUFBSSxPQUFPLEdBQUcsTUFBTSxDQUFDO0lBQ3JCLHNFQUFzRTtJQUN0RSxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUU7UUFDakIsT0FBTyxHQUFHLE1BQU0sSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDdkYsSUFBSSxPQUFPLEVBQUU7WUFDVCxPQUFPLGtCQUFrQixDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztTQUM1QztLQUNKO0lBQ0QsT0FBTztRQUNILE1BQU0sRUFBRSxPQUFPO1FBQ2YsSUFBSSxFQUFFLElBQUk7S0FDYixDQUFDO0FBQ04sQ0FBQyxDQUFDO0FBRUYsaUVBQWlFO0FBQ2pFLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxPQUFPLEVBQUUsRUFBRTtJQUNqQyxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3RELFFBQVEsVUFBVSxFQUFFO1FBQ2hCLEtBQUssUUFBUTtZQUNULE9BQU8sT0FBTyxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN2QyxNQUFNO1FBQ1YsS0FBSyxVQUFVO1lBQ1gsT0FBTyxPQUFPLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3pDLE1BQU07UUFDVjtZQUNJLE9BQU8sT0FBTyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztLQUM3QztBQUNMLENBQUMsQ0FBQTtBQUNELE1BQU0sZUFBZSxHQUFHLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsRUFBRTtJQUNoRCxJQUFJLE1BQU0sQ0FBQyxLQUFLLEVBQUU7UUFDZCxPQUFPO0tBQ1Y7SUFDRCxJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUU7UUFDakIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxFQUFFO1lBQzNDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQzNDLENBQUMsQ0FBQyxDQUFDO0tBQ047U0FBTTtRQUNILElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLHNCQUFzQixTQUFTLElBQUksQ0FBQyxDQUFDO1FBQ3RFLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFO1lBQ2pCLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsU0FBUyxJQUFJLENBQUMsQ0FBQztTQUN0RTtRQUNELE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO1FBQ2pGLElBQUksYUFBYSxHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pELGFBQWEsRUFBRSxZQUFZLENBQUMsY0FBYyxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM1RCxhQUFhLEVBQUUsWUFBWSxDQUFDLGtCQUFrQixFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO1FBQzNGLE1BQU0sQ0FBQyxhQUFhLEVBQUUsQ0FBQztLQUMxQjtBQUNMLENBQUMsQ0FBQztBQVNGLE1BQU0sT0FBTyxhQUFjLFNBQVEsaUJBQWlCO2FBQ3hDLG9CQUFlLEdBQUcsaUJBQWlCLEVBQUUsQ0FBQztJQXlGOUMsSUFBSSxjQUFjLENBQUMsRUFBRTtRQUNqQixJQUFJLEVBQUUsRUFBRTtZQUNKLFdBQVcsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLGlDQUFpQyxDQUFDLENBQUM7U0FDdEU7UUFDRCxJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRUQsSUFBSSxjQUFjO1FBQ2QsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDO0lBQ2hDLENBQUM7SUFHRCxJQUFJLFlBQVksQ0FBQyxFQUFFO1FBQ2YsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDNUIsS0FBSyxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQy9CLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELElBQUksWUFBWTtRQUNaLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM5QixDQUFDO0lBSW1DLE1BQU0sQ0FBQyxNQUFNO1FBQzdDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRXNCLE9BQU87UUFDMUIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2pCLENBQUM7SUFFb0MsZ0JBQWdCLENBQUMsS0FBb0I7UUFDdEUsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztJQUNqQyxDQUFDO0lBQ0QsbURBQW1EO0lBQ25ELElBQUksZUFBZTtRQUNmLE9BQU8sSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBYyxDQUFDO0lBQ2pILENBQUM7SUFFRCwrRUFBK0U7SUFDL0UscUVBQXFFO0lBQ3JFLDhFQUE4RTtJQUM5RSxJQUFJLFlBQVk7UUFDWixJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUU7WUFDdEUsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUM5QixNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDO1lBQ3RGLElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRTtnQkFDaEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQzthQUNyRztTQUNKO1FBQ0QsT0FBTyxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ2hGLENBQUM7SUFFRCxZQUNJLEdBQWEsRUFDTCxFQUFlLEVBQ2YsR0FBUSxFQUNSLGFBQW9DLEVBQ3BDLHdCQUFxRCxFQUNyRCxNQUFjLEVBQ0gsVUFBeUIsRUFDYixVQUF5QixFQUN6QixZQUE2QixFQUM3QixhQUErQixFQUN0QixpQkFBaUIsRUFDdkIsV0FBVyxFQUNMLGlCQUFpQixFQUN2QixXQUFXLEVBQ1QsWUFBWSxFQUN2QixVQUFVLEVBQ1IsWUFBWSxFQUNmLElBQUksRUFDVixHQUFHLEVBQ0YsSUFBSTtRQUV2QixLQUFLLENBQUMsR0FBRyxFQUFFLGVBQWUsQ0FBQyxVQUFVLEVBQUUsWUFBWSxFQUFFLElBQUksQ0FBQyxDQUFFLENBQUM7UUFwQnJELE9BQUUsR0FBRixFQUFFLENBQWE7UUFDZixRQUFHLEdBQUgsR0FBRyxDQUFLO1FBQ1Isa0JBQWEsR0FBYixhQUFhLENBQXVCO1FBQ3BDLDZCQUF3QixHQUF4Qix3QkFBd0IsQ0FBNkI7UUFDckQsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNILGVBQVUsR0FBVixVQUFVLENBQWU7UUFDYixlQUFVLEdBQVYsVUFBVSxDQUFlO1FBQ3pCLGlCQUFZLEdBQVosWUFBWSxDQUFpQjtRQUM3QixrQkFBYSxHQUFiLGFBQWEsQ0FBa0I7UUFDdEIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFBO1FBQ3ZCLGdCQUFXLEdBQVgsV0FBVyxDQUFBO1FBQ0wsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFBO1FBQ3ZCLGdCQUFXLEdBQVgsV0FBVyxDQUFBO1FBQ1QsaUJBQVksR0FBWixZQUFZLENBQUE7UUE5SXBELGlCQUFZLEdBQUcsRUFBRSxDQUFDO1FBRWxCLGtCQUFhLEdBQUcsRUFBRSxDQUFDO1FBRW5CLGVBQVUsR0FBRyxFQUFFLENBQUM7UUFDaEIsZUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNoQixnQkFBVyxHQUFHLEVBQUUsQ0FBQztRQUNqQixrQkFBYSxHQUFHLEVBQUUsQ0FBQztRQUNuQixnQkFBVyxHQUFHLEVBQUUsQ0FBQztRQUNqQixlQUFVLEdBQUcsRUFBRSxDQUFDO1FBR2hCLGFBQVEsR0FBRyxFQUFFLENBQUM7UUFLZCxrQkFBYSxHQUFHO1lBQ1osT0FBTyxFQUFFLEVBQUU7WUFDWCxJQUFJLEVBQUUsRUFBRTtTQUNYLENBQUM7UUFNRixlQUFVLEdBQUcsRUFBRSxDQUFDO1FBMEJSLGdDQUEyQixHQUFhLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBS2hGLHVCQUFrQixHQUFHLEVBQUUsQ0FBQztRQVF4Qix5QkFBb0IsR0FBRyxRQUFRLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUMvQywySUFBMkk7WUFDM0ksSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFO2dCQUNqQixJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzVCLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBaUZKLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRWpDLDBFQUEwRTtRQUMxRSxVQUFVLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztRQUN6QixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzVELElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMzQixJQUFJLENBQUMsWUFBWSxHQUFHLEdBQUcsSUFBSSxJQUFJLENBQUM7UUFFaEMsaURBQWlEO1FBQ2pELE1BQU0seUJBQXlCLEdBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZO2FBQ3RELFNBQVMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEdBQUcsRUFBRSxDQUFDLHlCQUF5QixDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDNUUsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFFcEIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQsa0JBQWtCO1FBQ2YsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNYLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxFQUFFO2dCQUN0QyxJQUFJLFlBQVksQ0FBQyxJQUFJLEVBQUU7b0JBQ25CLGdEQUFnRDtvQkFDaEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsWUFBWSxDQUFDO2lCQUN0RDtZQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ1osQ0FBQztJQUVELGVBQWU7UUFDWCxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNoRSx1Q0FBdUM7WUFDdkMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQy9ELElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2FBQzlFO1lBQ0QsbUNBQW1DO1lBQ25DLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN2QyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztTQUN6RDtRQUNELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVELGlCQUFpQixLQUFJLENBQUM7SUFFZCxvQkFBb0IsQ0FBQyxPQUFPO1FBQ2hDLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRTtZQUMzQyxtR0FBbUc7WUFDbkcsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO2dCQUNuQixPQUFPO2FBQ1Y7WUFDRCxpRkFBaUY7WUFDakYsbUVBQW1FO1lBQ25FLHlFQUF5RTtZQUN6RSxtSEFBbUg7WUFDbkgsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDO1lBQ2hFLElBQUksZUFBZSxFQUFFO2dCQUNqQixJQUFJLGVBQWUsQ0FBQztnQkFDcEIsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO29CQUNuQixlQUFlLEdBQUcsZUFBZSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQztpQkFDMUU7cUJBQU07b0JBQ0gsZUFBZSxHQUFHLGVBQWUsQ0FBQyxRQUFRLENBQUM7aUJBQzlDO2dCQUNEOzs7Ozs7O21CQU9HO2dCQUNILE1BQU0sZUFBZSxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQzdELElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLEVBQUUsaUJBQWlCLENBQUMsS0FBSyxJQUFJLENBQUMsUUFBUSxFQUFFO29CQUNoRSxrR0FBa0c7b0JBQ2xHLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUU7d0JBQzNFLE9BQU8sR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxNQUFNLENBQUMsQ0FBQztxQkFDNUM7aUJBQ0o7YUFDSjtZQUNELElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQztZQUNoQixJQUFJLFlBQVksR0FBRyxPQUFPLENBQUM7WUFDM0IscUZBQXFGO1lBQ3JGLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsRUFBRTtnQkFDakUsWUFBWSxHQUFHLEdBQUcsT0FBTyxJQUFJLE9BQU8sRUFBRSxDQUFDO2dCQUN2QyxPQUFPLEVBQUUsQ0FBQzthQUNiO1lBQ0QsSUFBSSxDQUFDLGFBQWEsR0FBRyxZQUFZLENBQUM7WUFDbEMsa0ZBQWtGO1lBQ2xGLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ2hFO0lBQ0wsQ0FBQztJQUVELDRFQUE0RTtJQUNwRSxrQkFBa0IsQ0FBQyxPQUFPO1FBQzlCLE9BQU8sQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3JDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ25DLE9BQU8sQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3JDLE9BQU8sQ0FBQyxVQUFVLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQzdDLE9BQU8sQ0FBQyxXQUFXLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQy9DLE9BQU8sQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3JDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQy9CLE9BQU8sQ0FBQyxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2pDLE9BQU8sQ0FBQyxzQkFBc0IsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUNyRSxPQUFPLENBQUMsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNyQyxPQUFPLENBQUMsV0FBVyxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUMvQyxPQUFPLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQsZ0VBQWdFO0lBQ3hELHlCQUF5QixDQUFDLGFBQWE7UUFDM0MsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDeEMsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3ZELE1BQU0sY0FBYyxHQUFHLEVBQUUsQ0FBQztRQUMxQixDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsRUFBRTtZQUNwQixNQUFNLFlBQVksR0FBSSxDQUFTLENBQUMsTUFBTSxDQUFDO1lBQ3ZDLDJFQUEyRTtZQUMzRSxvREFBb0Q7WUFDcEQsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsZUFBZSxDQUFDLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQztZQUN6RSxJQUFJLFNBQVMsQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLEVBQUU7Z0JBQ3hDLFFBQVEsR0FBRyxRQUFRLEdBQUcsR0FBRyxHQUFHLFlBQVksQ0FBQyxjQUFjLEdBQUcsR0FBRyxDQUFDO2FBQ2pFO1lBQ0QsSUFBSSxPQUFPLEdBQUcsWUFBWSxDQUFDO1lBQzNCLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsWUFBWSxDQUFDLEVBQUU7Z0JBQ2pDLElBQUksVUFBVSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsYUFBYSxJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO2dCQUM3RSxJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsZUFBZSxFQUFFO29CQUNwQyxVQUFVLEdBQUcsVUFBVSxHQUFHLEdBQUcsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLGNBQWMsR0FBRyxHQUFHLENBQUM7aUJBQzNFO2dCQUNELFFBQVEsR0FBRyxVQUFVLEdBQUcsR0FBRyxHQUFHLFFBQVEsQ0FBQztnQkFDdkMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUM7YUFDaEM7WUFDRCxJQUFJLENBQUMscUJBQXFCLENBQUMsWUFBWSxFQUFFLFFBQVEsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUN0RSxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNLLHFCQUFxQixDQUFDLElBQW1CLEVBQUUsTUFBYyxFQUFFLGFBQXVCO1FBQ3RGLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO1FBQ3RDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDbkMsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNiLE9BQU87U0FDVjtRQUNELENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3pCLE1BQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ2hELElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxhQUFhLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ3pDLE9BQU87YUFDVjtZQUNELEtBQUssQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxFQUFFLFlBQVksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3BGLHVFQUF1RTtZQUN2RSxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDL0MsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDOUQsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsd0VBQXdFO0lBQ2hFLG9CQUFvQixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU07UUFDNUMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLHNCQUFzQixLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDN0csSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFO1lBQ1gsSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLEVBQUU7Z0JBQ2Q7Ozs7Ozs7bUJBT0c7Z0JBQ0gsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQztvQkFDekIsS0FBSyxFQUFFLENBQUM7b0JBQ1IsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLO29CQUNsQixTQUFTLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO29CQUMzQixPQUFPLEVBQUUsS0FBSyxDQUFDLGlCQUFpQixJQUFJLEVBQUU7b0JBQ3RDLFVBQVUsRUFBRSxHQUFHLEVBQUU7d0JBQ2IsT0FBTyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO29CQUNqRCxDQUFDO29CQUNELFFBQVEsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ25DLHNCQUFzQixFQUFFLE1BQU07aUJBQ2pDLENBQUMsQ0FBQzthQUNOO2lCQUFNO2dCQUNILElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztnQkFDbkQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUMvRDtTQUNKO2FBQU0sSUFBSSxDQUFDLENBQUMsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBRTtZQUM5QixJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztTQUM1QztJQUNMLENBQUM7SUFFRCxzR0FBc0c7SUFDOUYsaUJBQWlCLENBQUMsYUFBdUI7UUFDN0MsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUM1RCxPQUFPO1NBQ1Y7UUFDRCxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDM0QsSUFBSSxDQUFDLHlCQUF5QixDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRCxxREFBcUQ7SUFDM0MsV0FBVyxDQUFDLElBQWlCLEVBQUUsU0FBaUIsRUFBRSxRQUFrQixFQUFFLE1BQVc7UUFDdkYsSUFBSSxTQUFTLEtBQUssUUFBUSxFQUFFO1lBQ3hCLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQ3RFO0lBQ0wsQ0FBQztJQUVPLGlCQUFpQjtRQUNyQixJQUFJLElBQUksQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsRUFBRTtZQUN2RixPQUFPO1NBQ1Y7YUFBTSxJQUFJLElBQUksQ0FBQyxjQUFjLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsRUFBRTtZQUNsRSxPQUFPO1NBQ1Y7UUFDRCxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUNoQyxTQUFTLENBQUMsYUFBYSxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUNoRSxTQUFTLENBQUMsYUFBYSxDQUFDLGVBQWUsRUFBRSxHQUFHLElBQUksQ0FBQyxZQUFZLElBQUksU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDdEYsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsMEdBQTBHO0lBQzFHLHNCQUFzQjtRQUNsQixlQUFlLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVELHNIQUFzSDtJQUN0SCxzQkFBc0I7UUFDbEIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDekIsMEdBQTBHO1FBQzFHLElBQUksSUFBSSxDQUFDLGFBQWEsS0FBSyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxLQUFLLE1BQU0sSUFBSSxJQUFJLENBQUMsY0FBYyxLQUFLLFNBQVMsQ0FBQztlQUNqRyxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFO1lBRTNDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUU7Z0JBQ3JCLElBQUksSUFBSSxDQUFDLGNBQWMsS0FBSyxTQUFTLEVBQUU7b0JBQ25DLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO2lCQUNqQztnQkFDRCxpRUFBaUU7Z0JBQ2pFLGtGQUFrRjtnQkFDbEYsTUFBTSxPQUFPLEdBQUcsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQy9ELE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUM7Z0JBQ3BDLElBQUksV0FBVyxHQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUM7Z0JBQ2hDLFdBQVcsR0FBRyxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7Z0JBQzFELElBQUksV0FBVyxDQUFDLE1BQU0sRUFBRTtvQkFDcEIsZ0dBQWdHO29CQUNoRyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFO3dCQUMzQyxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUM7cUJBQ3ZCO29CQUNELE1BQU0sS0FBSyxHQUFHLFlBQVksSUFBSSxZQUFZLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7b0JBQ3JILElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxhQUFhLEVBQUU7d0JBQzlCLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztxQkFDekI7b0JBQ0QsVUFBVSxFQUFFLENBQUM7b0JBQ2IsT0FBTyxJQUFJLENBQUM7aUJBQ2Y7Z0JBQ0QsT0FBTyxJQUFJLENBQUM7YUFDZjtZQUNELE9BQU8sS0FBSyxDQUFDO1NBQ2hCO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUVELGdCQUFnQixDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRztRQUN6QixRQUFRLEdBQUcsRUFBRTtZQUNULEtBQUssY0FBYztnQkFDZixJQUFJLENBQUMsaUJBQWlCLEdBQUcsUUFBUSxHQUFHLEVBQUUsQ0FBQztnQkFDdkMsTUFBTTtZQUNWLEtBQUssaUJBQWlCO2dCQUNsQixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7Z0JBQ3ZCLE1BQU07WUFDVixLQUFLLGNBQWM7Z0JBQ2YsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO2dCQUN2QixNQUFNO1lBQ1YsS0FBSyxhQUFhO2dCQUNkLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO2dCQUN0QixNQUFNO1lBQ1YsS0FBSyxZQUFZO2dCQUNiLHdEQUF3RDtnQkFDeEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLEdBQUcsQ0FBQyxFQUFFLEtBQUssSUFBSSxJQUFJLEVBQUUsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7Z0JBQ2pGLE1BQU07WUFDVixLQUFLLFVBQVU7Z0JBQ1gsa0lBQWtJO2dCQUNsSSxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFO29CQUNuQixNQUFNO2lCQUNUO2dCQUNELENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNwRSxzSEFBc0g7Z0JBQ3RILElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtvQkFDOUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7aUJBQzdCO2dCQUNELE1BQU07WUFDVixLQUFLLGFBQWE7Z0JBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUU7b0JBQ3RCLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxNQUFNLEVBQUU7d0JBQ3JCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO3FCQUMxQjt5QkFBTTt3QkFDSCxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztxQkFDM0I7b0JBQ0QsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO2lCQUN2QztnQkFDRCxNQUFNO1lBQ1YsS0FBSyxZQUFZO2dCQUNiLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO2dCQUMxQixNQUFNO1lBQ1YsS0FBSyxnQkFBZ0I7Z0JBQ2pCLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO2dCQUM5QixNQUFNO1lBQ1YsS0FBSyxVQUFVO2dCQUNYLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO2dCQUMxQixNQUFNO1lBQ1YsS0FBSyxTQUFTO2dCQUNWLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDeEMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtvQkFDdkIseURBQXlEO29CQUN6RCxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUU7d0JBQzlELEtBQUssQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO3FCQUNwQztnQkFDTCxDQUFDLENBQUMsQ0FBQztnQkFDSCxNQUFNO1lBQ1Y7Z0JBQ0ksS0FBSyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7U0FDM0M7SUFDTCxDQUFDO0lBRUQsbUNBQW1DO0lBQ25DLFVBQVUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQU07UUFDM0IsTUFBTSxNQUFNLEdBQUcsRUFBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUMsQ0FBQztRQUM1RSwyREFBMkQ7UUFDM0QsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUMzQyxJQUFJLE1BQU0sRUFBRTtZQUNSLDhDQUE4QztZQUM5QyxJQUFJLENBQUMsbUJBQW1CLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQy9DO2FBQU07WUFDSCx5Q0FBeUM7WUFDekMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztTQUM3QztJQUNMLENBQUM7SUFFRCw4Q0FBOEM7SUFDOUMsYUFBYSxDQUFDLElBQWEsRUFBRSxHQUFZLEVBQUUsSUFBYSxFQUFFLE1BQWU7UUFDckUsSUFBSSxRQUFRLENBQUM7UUFDYixJQUFJLElBQUksSUFBSSxHQUFHLEVBQUU7WUFDYixRQUFRLEdBQUcsQ0FBQyxJQUFJLEtBQUssT0FBTyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO1lBQzdFLElBQUksSUFBSSxDQUFDLGFBQWEsS0FBSyxRQUFRLEVBQUU7Z0JBQ2pDLFFBQVEsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLElBQUksUUFBUSxDQUFDO2dCQUMxRCxJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUMsU0FBUyxFQUFFLFFBQVEsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBQyxDQUFDO2dCQUM3RCxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7b0JBQ2pCLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7aUJBQ3BGO2dCQUNELCtHQUErRztnQkFDL0csSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtvQkFDeEMsZUFBZSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDckM7YUFDSjtpQkFBTTtnQkFDSCxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO2FBQzlDO1NBQ0o7YUFBTTtZQUNILElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztTQUNuQztJQUNMLENBQUM7SUFFRCw4SEFBOEg7SUFDOUgsdUJBQXVCLENBQUMsSUFBSTtRQUN4QixNQUFNLGtCQUFrQixHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSx5QkFBeUIsQ0FBQyxDQUFDO1FBQ3RFLElBQUksa0JBQWtCLElBQUksSUFBSSxLQUFLLE9BQU8sRUFBRTtZQUN4QyxPQUFPLGtCQUFrQixDQUFDLFVBQVUsRUFBRSxDQUFDO1NBQzFDO1FBQ0QsT0FBTztJQUNYLENBQUM7SUFFRCxtQ0FBbUM7SUFDbkMsWUFBWTtRQUNSLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVELHVGQUF1RjtJQUMvRSxlQUFlO1FBQ25CLElBQUksWUFBWSxDQUFDO1FBQ2pCLFlBQVksR0FBRyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDckgsSUFBSSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDO1FBQzNDLElBQUksQ0FBQyxhQUFhLEdBQUcsWUFBWSxDQUFDLFVBQVUsQ0FBQztRQUU3QyxVQUFVLEVBQUUsQ0FBQztJQUNqQixDQUFDO0lBRUQsa0JBQWtCLENBQUMsTUFBTTtRQUNyQixNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUM7UUFDdkMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUM7SUFDcEMsQ0FBQztJQUVELGtCQUFrQixDQUFDLFNBQVM7UUFDeEIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsU0FBUyxDQUFDO1FBQzNDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNuQyxJQUFJLENBQUMsMkJBQTJCLEVBQUUsQ0FBQztRQUNuQyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDakIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzNDLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxTQUFTLENBQUM7WUFDdEQsZ0lBQWdJO1lBQ2hJLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUMsQ0FBQztTQUMvRjtRQUNELDJEQUEyRDtRQUMzRCxJQUFJLFVBQVUsS0FBSyxJQUFJLENBQUMsY0FBYyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDakUsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDMUIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDeEc7SUFDTCxDQUFDO0lBRUQsZUFBZSxDQUFDLFVBQVU7UUFDdEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVELCtFQUErRTtJQUMvRSxvQkFBb0IsQ0FBQyxVQUFVO1FBQzNCLDJGQUEyRjtRQUMzRixDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFO1lBQ3RDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBQyxHQUFHLEVBQUMsQ0FBQyxFQUFFO2dCQUNqQyxVQUFVLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO2FBQ3pCO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztJQUNqQyxDQUFDO0lBRUQsNEVBQTRFO0lBQzVFLG1CQUFtQjtRQUNmLE1BQU0sUUFBUSxHQUFPLEVBQUUsQ0FBQztRQUN4QixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDeEMsK0RBQStEO1FBQy9ELFVBQVUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDdkIsSUFBSSxTQUFTLEVBQ1QsVUFBVSxDQUFDO1lBQ2YsVUFBVSxHQUFHLEtBQUssQ0FBQyxTQUFTLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7WUFDckQsVUFBVSxHQUFHLENBQUMsVUFBVSxLQUFLLElBQUksSUFBSSxVQUFVLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDO1lBRWpGLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUU7Z0JBQ3ZCLFVBQVUsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsR0FBRyxHQUFHLGFBQWEsRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDL0U7WUFFRCxTQUFTLEdBQUcsS0FBSyxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUM7WUFFcEQsd0hBQXdIO1lBQ3hILHdFQUF3RTtZQUN4RSx5RUFBeUU7WUFDekUsc0VBQXNFO1lBQ3RFLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRTtnQkFDbkUsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ3pELEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxVQUFVLENBQUM7Z0JBQzNCLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2FBQ2pEO2lCQUFNLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFLHlFQUF5RTtnQkFDeEosMkNBQTJDO2dCQUMzQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQzNELEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDcEUsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsVUFBVSxDQUFDO2dCQUN0RCxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7YUFDbkQ7aUJBQU07Z0JBQ0gsbUVBQW1FO2dCQUNuRSxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUM7YUFDMUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNwQyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDM0IsQ0FBQztJQUVELGdCQUFnQjtRQUNaLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQzNCLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUU7WUFDckIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ2hDO0lBQ0wsQ0FBQztJQUVELHdFQUF3RTtJQUN4RSxrRUFBa0U7SUFDbEUsYUFBYTtRQUNULE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxFQUFFO1lBQ3pDLE9BQU8sU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQztRQUM3QyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxhQUFhLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxhQUFjO1FBQ3JDLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQztRQUNwQyxtRkFBbUY7UUFDbkYsK0VBQStFO1FBQy9FLE1BQU0sRUFBRSxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDaEQsSUFBSSxFQUFFLEVBQUU7WUFDSixJQUFJLEVBQUUsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ3hCLEtBQUssQ0FBQyxLQUFLLEdBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7YUFDakM7aUJBQU0sSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRTtnQkFDN0IsK0dBQStHO2dCQUMvRyxJQUFJLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtvQkFDekMsS0FBSyxDQUFDLEtBQUssR0FBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztpQkFDakM7YUFDSjtZQUNELCtEQUErRDtZQUMvRCxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7Z0JBQ3RDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQzthQUN6QjtTQUNKO1FBQ0QsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUM7UUFDL0M7OztXQUdHO1FBQ0gsSUFBSSxhQUFhLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsYUFBYSxDQUFDLEVBQUU7WUFDN0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztTQUMxRDtRQUNELCtHQUErRztRQUMvRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxpQkFBaUIsQ0FBQyxFQUFFO1lBQ3RDLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztTQUM3RDtJQUNMLENBQUM7SUFFRCxXQUFXLENBQUMsSUFBSSxFQUFFLGVBQWdCLEVBQUUsYUFBYztRQUM5QywwRUFBMEU7UUFDMUUsTUFBTSxVQUFVLEdBQUcsZUFBZSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDdEQsVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUN2QixJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsYUFBYSxDQUFDLENBQUM7WUFDL0MsSUFBSSxLQUFLLENBQUMsZ0JBQWdCLEVBQUU7Z0JBQ3hCLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQywwQkFBMEIsRUFBRSxDQUFDO2FBQ3ZEO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQsY0FBYztRQUNWLDRDQUE0QztRQUM1QyxJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUU7WUFDaEMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEVBQUUsQ0FBQztTQUNoQztRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2QsT0FBTztTQUNWO1FBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUM5QixJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFFRCxLQUFLO1FBQ0QsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzVCLEtBQUssQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQ2pCLElBQUksS0FBSyxDQUFDLFVBQVUsS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsSUFBSSxFQUFFO2dCQUMvRCxJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO2FBQzNDO1lBQ0QsS0FBSyxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLEVBQUUsZUFBZSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ2hGLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxrQkFBa0I7UUFDZCxJQUFJLENBQUMsY0FBYyxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUM5RCxPQUFPO2dCQUNILEtBQUssRUFBRSxLQUFLLENBQUMsR0FBRztnQkFDaEIsTUFBTSxFQUFFLEtBQUssQ0FBQyxJQUFJO2dCQUNsQixZQUFZLEVBQUUsS0FBSyxDQUFDLFVBQVU7Z0JBQzlCLGNBQWMsRUFBRSxLQUFLLENBQUMsWUFBWTtnQkFDbEMsT0FBTyxFQUFFLEtBQUssQ0FBQyxLQUFLO2FBQ3ZCLENBQUM7UUFDTixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ1IsQ0FBQztJQUVELGtCQUFrQjtRQUNkLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUM5QyxPQUFPLEVBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLEdBQUcsQ0FBQyxLQUFLLEVBQUMsQ0FBQztRQUNoRCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxpQkFBaUI7UUFDYixJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUM1QixLQUFLLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUM3QixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxLQUFLLEVBQUUsWUFBYTtRQUN0QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQy9CLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxHQUFHLEdBQUcsZUFBZSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQy9ELEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNmLEtBQUssQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ2hCLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1NBQ3RCO0lBQ0wsQ0FBQztJQUVELGNBQWM7UUFDVixJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUM1QixJQUFJLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDbEIsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQyxJQUFJLEVBQUU7b0JBQzlCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztpQkFDckM7cUJBQU07b0JBQ0gsS0FBSyxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7aUJBQ3hCO2FBQ0o7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxnQkFBZ0I7UUFDWixJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUM1QixJQUFJLENBQUMseUJBQXlCLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUM5RCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxJQUFJO1FBQ2pCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxJQUFJLFFBQVEsQ0FBQztJQUMxQyxDQUFDO0lBRUQsR0FBRztRQUNDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsYUFBYSxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUM7UUFDNUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3BCLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNqQixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztTQUM3QjtRQUNELElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN0QixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ1osSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDL0IsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztJQUM3QixDQUFDO0lBRUQsSUFBSTtRQUNBLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFcEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxlQUFlLENBQUMsTUFBTSxDQUFDO1FBRTVDLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNqQixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztTQUM3QjtRQUNELElBQUksQ0FBQyxjQUFjLEdBQUcsZUFBZSxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDLENBQUM7UUFFM0QsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7UUFFekIsVUFBVSxFQUFFLENBQUM7SUFDakIsQ0FBQztJQUVPLGNBQWMsQ0FBQyxTQUFTO1FBQzVCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDbEUsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNWLE9BQU87U0FDVjtRQUNELGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QixJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsRUFBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBQyxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVELFVBQVUsQ0FBQyxNQUFNO1FBQ2IsSUFBSSxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQztRQUMvQixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQ25DLHVEQUF1RDtRQUN2RCxJQUFJLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxFQUFFO1lBQy9CLE9BQU87U0FDVjtRQUVELFFBQVEsR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUMsQ0FBQztRQUV2RCxNQUFNLFNBQVMsR0FBRyxHQUFHLEVBQUU7WUFDbkIsT0FBTyxFQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUMsQ0FBQztRQUMxRCxDQUFDLENBQUM7UUFHRixJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtZQUN4QixJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLEVBQUUsU0FBUyxFQUFFLENBQUMsS0FBSyxLQUFLLEVBQUU7Z0JBQ2pFLE9BQU87YUFDVjtpQkFBTTtnQkFDSCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7YUFDekI7U0FDSjthQUFNO1lBQ0gsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1NBQ3pCO1FBRUQsSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLFVBQVUsRUFBRTtZQUNoQyxpR0FBaUc7WUFDakcsc0ZBQXNGO1lBQ3RGLElBQUksVUFBVSxFQUFFO2dCQUNaLE1BQU0sY0FBYyxHQUFHLFVBQVUsQ0FBQyxVQUFVLElBQUksVUFBVSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO2dCQUNqRixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7Z0JBQ3pFLG9CQUFvQixDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsRUFBQyxhQUFhLEVBQUUsYUFBYSxFQUFDLENBQUM7cUJBQ3JFLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO29CQUNYLElBQUksVUFBVSxDQUFDLFFBQVEsS0FBSyxpQkFBaUIsRUFBRTt3QkFDM0MsSUFBSSxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUMsQ0FBQzt3QkFDckMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUU7NEJBQ3ZELGlCQUFpQixFQUFFLElBQUk7NEJBQ3ZCLFdBQVcsRUFBRSxNQUFNOzRCQUNuQixNQUFNLEVBQUUsY0FBYzs0QkFDdEIscUJBQXFCLEVBQUUsSUFBSTt5QkFDOUIsQ0FBQyxDQUFDO3dCQUNILElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTs0QkFDZixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7eUJBQ3RCO3FCQUNKO29CQUNELElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTt3QkFDdEIsTUFBTSxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7d0JBQ2pDLE1BQU0sR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztxQkFDbkQ7eUJBQU07d0JBQ0gsTUFBTSxHQUFHLElBQUksQ0FBQztxQkFDakI7b0JBQ0QsT0FBTzt3QkFDSCxRQUFRLEVBQUUsTUFBTTt3QkFDaEIsUUFBUSxFQUFFLElBQUk7d0JBQ2QsU0FBUyxFQUFFLElBQUksQ0FBQyxXQUFXO3dCQUMzQixNQUFNLEVBQUUsU0FBUztxQkFDcEIsQ0FBQztnQkFDTixDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtvQkFDVCxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksSUFBSSxLQUFLLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQztvQkFDckQsVUFBVSxFQUFFLENBQUM7b0JBQ2IsT0FBTzt3QkFDSCxRQUFRLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLElBQUksS0FBSzt3QkFDeEMsUUFBUSxFQUFFLEtBQUs7d0JBQ2YsU0FBUyxFQUFFLFFBQVE7d0JBQ25CLE1BQU0sRUFBRSxPQUFPO3FCQUNsQixDQUFDO2dCQUNOLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRTtvQkFDbkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxTQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUU7d0JBQ2xHLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO3FCQUM3RDtvQkFDRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7b0JBQ2hELElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUM5RCxDQUFDLENBQUMsQ0FBQzthQUNOO2lCQUFNO2dCQUNILElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztnQkFDaEQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO2FBQ3JDO1NBQ0o7YUFBTTtZQUNILElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztTQUNyQztJQUNMLENBQUM7SUFFRCxXQUFXO1FBQ1AsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRCxzRUFBc0U7SUFDdEUsV0FBVyxDQUFDLFFBQVE7UUFDaEIsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLEVBQUU7WUFDbEMsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLElBQUksR0FBRyxDQUFDLFVBQVUsS0FBSyxJQUFJLENBQUMsWUFBWSxDQUFDO1FBQ3RGLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELCtCQUErQjtJQUMvQixtQkFBbUI7UUFDZixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDbEIsdUJBQXVCO1lBQ3ZCLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1NBQ2xDO0lBQ0wsQ0FBQztJQUVELGtCQUFrQixDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsVUFBVTtRQUM1QyxJQUFJLE9BQU8sRUFBRTtZQUNULElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztTQUNkO2FBQU07WUFDSCxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzNCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUN0QjtRQUNELElBQUksQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNsRSxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILHdCQUF3QixDQUFDLElBQUk7UUFDekIsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDbEIsT0FBTyxFQUFFLENBQUM7U0FDYjtRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNsRyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDO1NBQ25DO1FBQ0QsT0FBTyxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFRCw2QkFBNkIsQ0FBQyxRQUFhO1FBQ3ZDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxRQUFRLEVBQUU7WUFDekQ7Ozs7Ozs7O2VBUUc7WUFDSCxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUU7Z0JBQ3RCLElBQUksa0JBQWtCLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDL0QsSUFBSSxrQkFBa0IsRUFBRTtvQkFDcEIsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsRUFBRTt3QkFDaEMsa0JBQWtCLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO3FCQUM3QztvQkFDRCxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO29CQUNwRCxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRTt3QkFDcEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7cUJBQzNEO29CQUNELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2lCQUNuQztxQkFBTSxJQUFJLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUU7b0JBQzNELE1BQU0sY0FBYyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUM7b0JBQ3RFLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxjQUFjLENBQUMsQ0FBQztpQkFDdEQ7YUFDSjtpQkFBTTtnQkFDSCxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQzlCO1NBQ0o7SUFDTCxDQUFDO0lBRUQscUZBQXFGO0lBQ3JGLGtCQUFrQjtRQUNkLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRTtZQUN4RCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDO1lBQ2hDOzs7OztlQUtHO1lBQ0gsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3JELElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUNoRDtJQUNMLENBQUM7SUFFRCxxRkFBcUY7SUFDckYsc0JBQXNCO1FBQ2xCLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRCw2RkFBNkY7SUFDN0YseUJBQXlCLENBQUMsS0FBSyxFQUFFLEVBQUU7UUFDL0IsS0FBSyxDQUFDLEtBQUssR0FBRyxnQkFBZ0IsQ0FBQyxFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUssQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3BGLDZGQUE2RjtRQUM3RixJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDdEMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1NBQ3pCO0lBQ0wsQ0FBQztJQUVELHFGQUFxRjtJQUNyRixrQkFBa0I7SUFDbEIsQ0FBQztJQUVELHFFQUFxRTtJQUNyRSxLQUFLLENBQUMsa0JBQWtCO1FBQ3BCLElBQUksV0FBVyxDQUFDO1FBQ2hCLElBQUksV0FBVyxDQUFDO1FBQ2hCLHdEQUF3RDtRQUN4RCxJQUFJLENBQUMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEVBQUU7WUFDMUMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLDRCQUE0QixDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztTQUMzRjtRQUNELElBQUksSUFBSSxDQUFDLG9CQUFvQixFQUFFO1lBQzNCLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzFFLFdBQVcsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUMxRDthQUFNO1lBQ0gsV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLHdDQUF3QyxDQUFDLENBQUM7WUFDM0UsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUU7Z0JBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsT0FBTyxDQUFDLDRDQUE0QyxDQUFDLENBQUM7Z0JBQzNGLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFDO2FBQzlFO1lBQ0QsV0FBVyxHQUFHLENBQUMsQ0FBQztTQUNuQjtRQUNELE1BQU0sV0FBVyxHQUFHLEVBQUUsR0FBRyxXQUFXLENBQUM7UUFDckMsSUFBSSxhQUFhLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQztRQUNqQixJQUFJLEtBQUssQ0FBQztRQUNWLElBQUksVUFBVSxDQUFDO1FBQ2YsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBRXRFLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLENBQUMsd0JBQXdCO1FBRTlDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNuQixPQUFPO1NBQ1Y7UUFFRCxJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtZQUN4QixVQUFVLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGNBQWMsRUFBRSxFQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUMsQ0FBQyxDQUFDO1lBQzNFLElBQUksVUFBVSxFQUFFO2dCQUNaLE1BQU0sR0FBRyxVQUFVLENBQUM7YUFDdkI7U0FDSjtRQUVELElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ3BCLE9BQU87U0FDVjtRQUVELE9BQU8sTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ3JCLElBQUksT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNqQixLQUFLLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLFdBQVcsRUFBRSxLQUFLLEVBQUUsRUFBRTtnQkFDMUMsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUU7b0JBQ2xCLE9BQU8sSUFBSSxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUM7aUJBQ25FO2dCQUNELFFBQVEsRUFBRSxDQUFDO2FBQ2Q7WUFDRCxhQUFhLElBQUksZUFBZSxPQUFPLGVBQWUsQ0FBQztTQUMxRDtRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUU7WUFDNUIsYUFBYSxHQUFHLGtCQUFrQixhQUFhLGtCQUFrQixDQUFDO1NBQ3JFO1FBRUQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUU1QixJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUN2QixJQUFJLENBQUMsZUFBZSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3RELElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztTQUNwQztRQUNELE1BQU0sbUJBQW1CLEdBQUcsTUFBTSxJQUFJLENBQUMsd0JBQXdCLENBQUMsc0JBQXNCLENBQ2xGLG1CQUFtQixHQUFHLElBQUksQ0FBQyxRQUFRLEVBQ25DLGFBQWEsRUFDYjtZQUNJLE9BQU8sRUFBRSxJQUFJO1lBQ2IsU0FBUyxFQUFFLElBQUk7U0FDbEIsQ0FBQyxDQUFDO1FBQ1AsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN4RixXQUFXLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDdEQsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzdELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRCxJQUFJLElBQUk7UUFDSixPQUFPLElBQUksQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFDMUQsQ0FBQztJQUVELElBQUksS0FBSztRQUNMLE9BQU8sSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztJQUM1QyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILGNBQWMsQ0FBQyxRQUFpQixLQUFLO1FBQ2pDLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxXQUFXLENBQUMsUUFBaUIsS0FBSztRQUM5QixJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFRCxJQUFJLE9BQU87UUFDUCxPQUFPLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUM7SUFDOUMsQ0FBQztJQUVELElBQUksT0FBTztRQUNQLE9BQU8sSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQztJQUM5QyxDQUFDO0lBRUQsSUFBSSxLQUFLO1FBQ0wsT0FBTyxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO0lBQzVDLENBQUM7SUFFRCxJQUFJLFFBQVE7UUFDUixPQUFPLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUM7SUFDL0MsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxhQUFhLENBQUMsUUFBaUIsS0FBSztRQUNoQyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsZUFBZSxDQUFDLFFBQWlCLEtBQUs7UUFDbEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRUQsaUJBQWlCLENBQUMsTUFBTSxFQUFFLFVBQWtCO1FBQ3hDLE1BQU0sRUFBRSxHQUFHLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNuQyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBQyxNQUFNLEVBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVELFdBQVc7UUFDUCwrREFBK0Q7UUFDL0QsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztRQUM5RSxJQUFJLFFBQVEsRUFBRTtZQUNWLG1FQUFtRTtZQUNuRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsSUFBSSxRQUFRLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ2pGLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQzlEO1lBQ0QsOEZBQThGO1lBQzlGLElBQUksSUFBSSxDQUFDLGFBQWEsSUFBSSxRQUFRLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRTtnQkFDbkUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQzthQUM1RDtpQkFBTTtnQkFDSCxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ25EO1NBQ0o7UUFDRCxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDeEIsQ0FBQzs4RUExb0NRLGFBQWEsc2JBNEpQLG9CQUFvQix3QkFDcEIsY0FBYyx3QkFDZCxvQkFBb0Isd0JBQ3BCLGNBQWMsd0JBQ2QsZUFBZSx3QkFDZixZQUFZLHdCQUNaLGNBQWMsd0JBQ2QsV0FBVyx3QkFDWCxLQUFLLHdCQUNMLE1BQU07b0VBcktaLGFBQWE7d0NBS0wsU0FBUzs7Ozs7bUNBSHNCLGdCQUFnQjsyQkFDckQsZ0JBQWdCOzs7Ozs7c0dBSGxCLGtCQUFjLHlFQUFkLGFBQVMsbUZBQVQsNEJBQXdCOzs7OENBSnRCO2dCQUNQLGtCQUFrQixDQUFDLGFBQWEsQ0FBQzthQUNwQzs7WUM5SUwsK0dBQTZEO1lBRTdELGdGQUNlO1lBRWYsZ0hBOEJjO1lBRWQsK0dBRWM7WUFFZCwrR0FJYztZQUVkLCtHQUtjO1lBRWQsa0NBQTBDOzs7O1lBcEQzQixlQUE2QjtZQUE3QixnREFBNkIsaUJBQUEsaUJBQUE7Ozt1RkQ4SS9CLGFBQWE7Y0FQekIsU0FBUzsyQkFDSSxjQUFjLGFBRWI7b0JBQ1Asa0JBQWtCLGVBQWU7aUJBQ3BDOztzQkEwSkksUUFBUTs7c0JBQ1IsUUFBUTs7c0JBQUksUUFBUTs7c0JBQ3BCLFFBQVE7O3NCQUFJLFFBQVE7O3NCQUNwQixRQUFROztzQkFBSSxRQUFROztzQkFDcEIsU0FBUzt1QkFBQyxvQkFBb0I7O3NCQUM5QixTQUFTO3VCQUFDLGNBQWM7O3NCQUN4QixTQUFTO3VCQUFDLG9CQUFvQjs7c0JBQzlCLFNBQVM7dUJBQUMsY0FBYzs7c0JBQ3hCLFNBQVM7dUJBQUMsZUFBZTs7c0JBQ3pCLFNBQVM7dUJBQUMsWUFBWTs7c0JBQ3RCLFNBQVM7dUJBQUMsY0FBYzs7c0JBQ3hCLFNBQVM7dUJBQUMsV0FBVzs7c0JBQ3JCLFNBQVM7dUJBQUMsS0FBSzs7c0JBQ2YsU0FBUzt1QkFBQyxNQUFNO3dCQW5LK0MsY0FBYztrQkFBakYsU0FBUzttQkFBQyxhQUFhLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtZQUNyQyxVQUFVO2tCQUF0QyxTQUFTO21CQUFDLGdCQUFnQjtZQUVzQixhQUFhO2tCQUE3RCxlQUFlO21CQUFDLFNBQVMsRUFBRSxFQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUM7WUE0R3hCLE1BQU07a0JBQTVCLFdBQVc7bUJBQUMsUUFBUTtZQUVlLE1BQU07a0JBQXpDLFlBQVk7bUJBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDO1lBSVgsT0FBTztrQkFBN0IsWUFBWTttQkFBQyxPQUFPO1lBSWdCLGdCQUFnQjtrQkFBcEQsWUFBWTttQkFBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBBdHRyaWJ1dGUsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBIb3N0QmluZGluZyxcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgSW5qZWN0b3IsXG4gICAgTmdab25lLFxuICAgIE9uRGVzdHJveSxcbiAgICBPcHRpb25hbCxcbiAgICBTa2lwU2VsZixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0NvbnRhaW5lclJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Rm9ybUFycmF5LCBGb3JtQnVpbGRlciwgRm9ybUdyb3VwfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7XG4gICAgJGFwcERpZ2VzdCxcbiAgICAkaW52b2tlV2F0Y2hlcnMsXG4gICAgJHBhcnNlRXZlbnQsXG4gICAgQWJzdHJhY3REaWFsb2dTZXJ2aWNlLFxuICAgIEFwcCxcbiAgICBEYXRhU291cmNlLFxuICAgIERhdGFUeXBlLFxuICAgIGRlYm91bmNlLFxuICAgIER5bmFtaWNDb21wb25lbnRSZWZQcm92aWRlcixcbiAgICBleHRlbmRQcm90byxcbiAgICBnZXRDbG9uZWRPYmplY3QsXG4gICAgZ2V0RmlsZXMsXG4gICAgZ2V0VmFsaWRKU09OLFxuICAgIGlzRGVmaW5lZCxcbiAgICBpc0VsZW1lbnRJblZpZXdwb3J0LFxuICAgIHJlbW92ZUF0dHIsXG4gICAgcmVtb3ZlQ2xhc3MsXG4gICAgc2Nyb2xsVG9FbGVtZW50LFxufSBmcm9tICdAd20vY29yZSc7XG5pbXBvcnQge1xuICAgIGdldEZpZWxkTGF5b3V0Q29uZmlnLFxuICAgIExpdmVfT3BlcmF0aW9ucyxcbiAgICBNZXNzYWdlQ29tcG9uZW50LFxuICAgIHBhcnNlVmFsdWVCeVR5cGUsXG4gICAgUGFydGlhbERpcmVjdGl2ZSxcbiAgICBwZXJmb3JtRGF0YU9wZXJhdGlvbixcbiAgICBwcm92aWRlQXNXaWRnZXRSZWYsXG4gICAgU3R5bGFibGVDb21wb25lbnQsXG4gICAgc3R5bGVyLFxuICAgIFdpZGdldFJlZlxufSBmcm9tICdAd20vY29tcG9uZW50cy9iYXNlJztcbmltcG9ydCB7UHJlZmFiRGlyZWN0aXZlfSBmcm9tICdAd20vY29tcG9uZW50cy9wcmVmYWInO1xuaW1wb3J0IHtMaXN0Q29tcG9uZW50fSBmcm9tICdAd20vY29tcG9uZW50cy9kYXRhL2xpc3QnO1xuXG5pbXBvcnQge3JlZ2lzdGVyRm9ybVByb3BzfSBmcm9tICcuL2Zvcm0ucHJvcHMnO1xuXG5kZWNsYXJlIGNvbnN0IF87XG5cbmNvbnN0IFdJREdFVF9DT05GSUcgPSB7d2lkZ2V0VHlwZTogJ3dtLWZvcm0nLCBob3N0Q2xhc3M6ICdwYW5lbCBhcHAtcGFuZWwgYXBwLWZvcm0nfTtcbmNvbnN0IExPR0lOX0ZPUk1fQ09ORklHID0ge3dpZGdldFR5cGU6ICd3bS1mb3JtJywgaG9zdENsYXNzOiAnYXBwLWZvcm0gYXBwLWxvZ2luLWZvcm0nfTtcbmNvbnN0IExJVkVfRk9STV9DT05GSUcgPSB7d2lkZ2V0VHlwZTogJ3dtLWxpdmVmb3JtJywgaG9zdENsYXNzOiAncGFuZWwgYXBwLXBhbmVsIGFwcC1saXZlZm9ybSBsaXZlZm9ybS1pbmxpbmUnfTtcbmNvbnN0IExJVkVfRklMVEVSX0NPTkZJRyA9IHt3aWRnZXRUeXBlOiAnd20tbGl2ZWZpbHRlcicsIGhvc3RDbGFzczogJ3BhbmVsIGFwcC1wYW5lbCBhcHAtbGl2ZWZpbHRlciBjbGVhcmZpeCBsaXZlZm9ybS1pbmxpbmUnfTtcblxuY29uc3QgZ2V0V2lkZ2V0Q29uZmlnID0gKGlzTGl2ZUZvcm0sIGlzTGl2ZUZpbHRlciwgcm9sZSkgPT4ge1xuICAgIGxldCBjb25maWcgPSBXSURHRVRfQ09ORklHO1xuICAgIGlmIChpc0xpdmVGb3JtICE9PSBudWxsKSB7XG4gICAgICAgIGNvbmZpZyA9IExJVkVfRk9STV9DT05GSUc7XG4gICAgfSBlbHNlIGlmIChpc0xpdmVGaWx0ZXIgIT09IG51bGwpIHtcbiAgICAgICAgY29uZmlnID0gTElWRV9GSUxURVJfQ09ORklHO1xuICAgIH0gZWxzZSBpZiAocm9sZSA9PT0gJ2FwcC1sb2dpbicpIHtcbiAgICAgICAgY29uZmlnID0gTE9HSU5fRk9STV9DT05GSUc7XG4gICAgfVxuICAgIHJldHVybiBjb25maWc7XG59O1xuXG4vLyBHZW5lcmF0ZSB0aGUgZm9ybSBmaWVsZCB3aXRoIGdpdmVuIGZpZWxkIGRlZmluaXRpb24uIEFkZCBhIGdyaWQgY29sdW1uIHdyYXBwZXIgYXJvdW5kIHRoZSBmb3JtIGZpZWxkLlxuY29uc3Qgc2V0TWFya3VwRm9yRm9ybUZpZWxkID0gKGZpZWxkLCBjb2x1bW5XaWR0aCkgPT4gIHtcbiAgICBsZXQgcHJvcHNUbXBsID0gJyc7XG4gICAgXy5mb3JFYWNoKGZpZWxkLCAodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICBwcm9wc1RtcGwgPSBgJHtwcm9wc1RtcGx9ICR7a2V5fT1cIiR7dmFsdWV9XCJgO1xuICAgIH0pO1xuICAgIHJldHVybiBgPHdtLWdyaWRjb2x1bW4gY29sdW1ud2lkdGg9XCIke2NvbHVtbldpZHRofVwiPlxuICAgICAgICAgICAgICAgICAgPHdtLWZvcm0tZmllbGQgJHtwcm9wc1RtcGx9Pjwvd20tZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvd20tZ3JpZGNvbHVtbj5gO1xufTtcblxuLy8gRnVuY3Rpb24gdG8gZmluZCBvdXQgdGhlIGZpcnN0IGludmFsaWQgZWxlbWVudCBpbiBmb3JtXG5jb25zdCBmaW5kSW52YWxpZEVsZW1lbnQgPSAoJGZvcm1FbGUsIG5nRm9ybSkgPT4ge1xuICAgIGNvbnN0ICRlbGUgPSAkZm9ybUVsZS5maW5kKCdmb3JtLm5nLWludmFsaWQ6dmlzaWJsZSwgW2Zvcm1Db250cm9sTmFtZV0ubmctaW52YWxpZDp2aXNpYmxlJykuZmlyc3QoKTtcbiAgICBsZXQgZm9ybU9iaiA9IG5nRm9ybTtcbiAgICAvLyBJZiBlbGVtZW50IGlzIGZvcm0sIGZpbmQgb3V0IHRoZSBmaXJzdCBpbnZhbGlkIGVsZW1lbnQgaW4gdGhpcyBmb3JtXG4gICAgaWYgKCRlbGUuaXMoJ2Zvcm0nKSkge1xuICAgICAgICBmb3JtT2JqID0gbmdGb3JtICYmIG5nRm9ybS5jb250cm9sc1skZWxlLmF0dHIoJ2Zvcm1Db250cm9sTmFtZScpIHx8ICRlbGUuYXR0cignbmFtZScpXTtcbiAgICAgICAgaWYgKGZvcm1PYmopIHtcbiAgICAgICAgICAgIHJldHVybiBmaW5kSW52YWxpZEVsZW1lbnQoJGVsZSwgZm9ybU9iaik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmdGb3JtOiBmb3JtT2JqLFxuICAgICAgICAkZWxlOiAkZWxlXG4gICAgfTtcbn07XG5cbi8vIEZ1bmN0aW9uIHRvIGdldCB0aGUgYWN0aXZlIGVsZW1lbnQgbWFya3VwIGJhc2VkIG9uIHdpZGdldCB0eXBlXG5jb25zdCBnZXRBY3RpdmVFbGVtZW50ID0gKGVsZW1lbnQpID0+IHtcbiAgICBjb25zdCB3aWRnZXRUeXBlID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3dpZGdldHR5cGUnKTtcbiAgICBzd2l0Y2ggKHdpZGdldFR5cGUpIHtcbiAgICAgICAgY2FzZSAnc2VsZWN0JzpcbiAgICAgICAgICAgIHJldHVybiBlbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ3NlbGVjdCcpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3RleHRhcmVhJzpcbiAgICAgICAgICAgIHJldHVybiBlbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ3RleHRhcmVhJyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBlbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0Jyk7XG4gICAgfVxufVxuY29uc3Qgc2V0VG91Y2hlZFN0YXRlID0gKHNlbGYsIG5nRm9ybSwgZmllbGROYW1lKSA9PiB7XG4gICAgaWYgKG5nRm9ybS52YWxpZCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChuZ0Zvcm0uY29udHJvbHMpIHtcbiAgICAgICAgXy5mb3JFYWNoKG5nRm9ybS5jb250cm9scywgKGN0cmwsIGZpZWxkTmFtZSkgPT4ge1xuICAgICAgICAgICAgc2V0VG91Y2hlZFN0YXRlKHNlbGYsIGN0cmwsIGZpZWxkTmFtZSk7XG4gICAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBlbGVtZW50ID0gc2VsZi4kZWxlbWVudC5maW5kKGBbd21mb3JtZmllbGRdW2tleT1cIiR7ZmllbGROYW1lfVwiXWApO1xuICAgICAgICBpZiAoIWVsZW1lbnQubGVuZ3RoKSB7XG4gICAgICAgICAgICBlbGVtZW50ID0gc2VsZi4kZWxlbWVudC5maW5kKGBbd21mb3JtZmllbGRdW25hbWU9XCIke2ZpZWxkTmFtZX1cIl1gKTtcbiAgICAgICAgfVxuICAgICAgICBlbGVtZW50WzBdLnNldEF0dHJpYnV0ZSgnX19lcnJvcm1zZycsIGVsZW1lbnRbMF0uZ2V0QXR0cmlidXRlKCdfX3ZhbGlkYXRpb25JZCcpKTtcbiAgICAgICAgbGV0IGFjdGl2ZUVsZW1lbnQgPSBnZXRBY3RpdmVFbGVtZW50KGVsZW1lbnRbMF0pO1xuICAgICAgICBhY3RpdmVFbGVtZW50Py5zZXRBdHRyaWJ1dGUoJ2FyaWEtaW52YWxpZCcsIG5nRm9ybS5pbnZhbGlkKTtcbiAgICAgICAgYWN0aXZlRWxlbWVudD8uc2V0QXR0cmlidXRlKCdhcmlhLWRlc2NyaWJlZGJ5JywgZWxlbWVudFswXS5nZXRBdHRyaWJ1dGUoJ19fdmFsaWRhdGlvbklkJykpO1xuICAgICAgICBuZ0Zvcm0ubWFya0FzVG91Y2hlZCgpO1xuICAgIH1cbn07XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZm9ybVt3bUZvcm1dJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZm9ybS5jb21wb25lbnQuaHRtbCcsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHByb3ZpZGVBc1dpZGdldFJlZihGb3JtQ29tcG9uZW50KVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgRm9ybUNvbXBvbmVudCBleHRlbmRzIFN0eWxhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95LCBBZnRlckNvbnRlbnRJbml0LCBBZnRlclZpZXdJbml0IHtcbiAgICBzdGF0aWMgIGluaXRpYWxpemVQcm9wcyA9IHJlZ2lzdGVyRm9ybVByb3BzKCk7XG4gICAgQFZpZXdDaGlsZCgnZHluYW1pY0Zvcm0nLCB7IHN0YXRpYzogdHJ1ZSwgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KSBkeW5hbWljRm9ybVJlZjogVmlld0NvbnRhaW5lclJlZjtcbiAgICBAVmlld0NoaWxkKE1lc3NhZ2VDb21wb25lbnQpIG1lc3NhZ2VSZWY7XG4gICAgLy8gdGhpcyBpcyB0aGUgcmVmZXJlbmNlIHRvIHRoZSBjb21wb25lbnQgcmVmcyBpbnNpZGUgdGhlIGZvcm0tZ3JvdXBcbiAgICBAQ29udGVudENoaWxkcmVuKFdpZGdldFJlZiwge2Rlc2NlbmRhbnRzOiB0cnVlfSkgY29tcG9uZW50UmVmcztcblxuICAgIGF1dG91cGRhdGU7XG4gICAgcHVibGljIGZvcm1sYXlvdXQ6IGFueTtcbiAgICBwdWJsaWMgaXNEYXRhU291cmNlVXBkYXRlZDogYm9vbGVhbjtcbiAgICBjYXB0aW9uQWxpZ25DbGFzczogc3RyaW5nO1xuICAgIHZhbGlkYXRpb250eXBlOiBzdHJpbmc7XG4gICAgY2FwdGlvbmFsaWduOiBzdHJpbmc7XG4gICAgY2FwdGlvbnBvc2l0aW9uOiBzdHJpbmc7XG4gICAgY2FwdGlvbnNpemU7XG4gICAgY29sbGFwc2libGU6IGJvb2xlYW47XG4gICAgZXhwYW5kZWQ6IGJvb2xlYW47XG4gICAgZWxTY29wZTtcbiAgICBfd2lkZ2V0Q2xhc3MgPSAnJztcbiAgICBjYXB0aW9ud2lkdGg6IHN0cmluZztcbiAgICBfY2FwdGlvbkNsYXNzID0gJyc7XG4gICAgbmdmb3JtOiBGb3JtR3JvdXA7XG4gICAgZm9ybUZpZWxkcyA9IFtdO1xuICAgIGZvcm1maWVsZHMgPSB7fTtcbiAgICBmb3JtV2lkZ2V0cyA9IHt9O1xuICAgIGZpbHRlcldpZGdldHMgPSB7fTtcbiAgICBidXR0b25BcnJheSA9IFtdO1xuICAgIGRhdGFvdXRwdXQgPSB7fTtcbiAgICBkYXRhc291cmNlO1xuICAgIGZvcm1kYXRhc291cmNlO1xuICAgIGZvcm1kYXRhID0ge307XG4gICAgaXNTZWxlY3RlZDtcbiAgICBwcmV2RGF0YVZhbHVlcztcbiAgICBwcmV2RGF0YU9iamVjdDtcbiAgICBwcmV2Zm9ybUZpZWxkcztcbiAgICBzdGF0dXNNZXNzYWdlID0ge1xuICAgICAgICBjYXB0aW9uOiAnJyxcbiAgICAgICAgdHlwZTogJydcbiAgICB9O1xuICAgIG1lc3NhZ2VsYXlvdXQ7XG4gICAgbWV0YWRhdGE7XG4gICAgZXJyb3JtZXNzYWdlO1xuICAgIG9uRXJyb3I7XG4gICAgb25TdWNjZXNzO1xuICAgIHByaW1hcnlLZXkgPSBbXTtcbiAgICBwb3N0bWVzc2FnZTtcbiAgICBfbGl2ZVRhYmxlUGFyZW50O1xuICAgIHVwZGF0ZU1vZGU7XG4gICAgbmFtZTtcbiAgICAvLyBMaXZlIEZvcm0gTWV0aG9kc1xuICAgIGNsZWFyRGF0YTogRnVuY3Rpb247XG4gICAgY2FuY2VsOiBGdW5jdGlvbjtcbiAgICBkZWxldGU6IEZ1bmN0aW9uO1xuICAgIHNhdmU6IEZ1bmN0aW9uO1xuICAgIHNhdmVBbmROZXc6IEZ1bmN0aW9uO1xuICAgIHNhdmVBbmRWaWV3OiBGdW5jdGlvbjtcbiAgICBzZXRQcmltYXJ5S2V5OiAoKSA9PiB7fTtcbiAgICBkaWFsb2dJZDogc3RyaW5nO1xuICAgIC8vIExpdmUgRmlsdGVyXG4gICAgZW5hYmxlZW1wdHlmaWx0ZXI7XG4gICAgcGFnZXNpemU7XG4gICAgcmVzdWx0O1xuICAgIHBhZ2luYXRpb247XG4gICAgY2xlYXJGaWx0ZXI6IEZ1bmN0aW9uO1xuICAgIGFwcGx5RmlsdGVyOiBGdW5jdGlvbjtcbiAgICBmaWx0ZXI6IEZ1bmN0aW9uO1xuICAgIGZpbHRlck9uRGVmYXVsdDogRnVuY3Rpb247XG4gICAgb25NYXhEZWZhdWx0VmFsdWVDaGFuZ2U6IEZ1bmN0aW9uO1xuICAgIG51bWJlck9mRmllbGRzOiBudW1iZXI7XG5cbiAgICBwcml2YXRlIF9kZWJvdW5jZWRVcGRhdGVGaWVsZFNvdXJjZTogRnVuY3Rpb24gPSBfLmRlYm91bmNlKHRoaXMudXBkYXRlRmllbGRTb3VyY2UsIDM1MCk7XG4gICAgcHJpdmF0ZSBvcGVyYXRpb25UeXBlO1xuICAgIHByaXZhdGUgX2lzTGF5b3V0RGlhbG9nO1xuICAgIHByaXZhdGUgX2R5bmFtaWNDb250ZXh0O1xuICAgIHByaXZhdGUgX2lzR3JpZExheW91dFByZXNlbnQ7XG4gICAgcHJpdmF0ZSB2YWxpZGF0aW9uTWVzc2FnZXMgPSBbXTtcbiAgICBwcml2YXRlIGZvcm1Hcm91cE5hbWU7XG4gICAgcHJpdmF0ZSBmb3JtQXJyYXlJbmRleDtcbiAgICBwcml2YXRlIGJpbmRpbmdWYWx1ZTtcbiAgICBwcml2YXRlIF9mb3JtSXNJbkxpc3Q7XG4gICAgcHJpdmF0ZSBfdHJpZ2dlcmVkQnlVc2VyOiBib29sZWFuO1xuXG5cbiAgICBwcml2YXRlIF9kZWJvdW5jZWRTdWJtaXRGb3JtID0gZGVib3VuY2UoKCRldmVudCkgPT4ge1xuICAgICAgICAvLyBjYWxsaW5nIHN1Ym1pdCBldmVudCBpbiBuZ1pvbmUgYXMgY2hhbmdlIGRldGVjdGlvbiBpcyBub3QgdHJpZ2dlcmVkIHBvc3QgdGhlIHN1Ym1pdCBjYWxsYmFjayBhbmQgYWN0aW9ucyBsaWtlIG5vdGlmaWNhdGlvbiBhcmUgbm90IHNob3duXG4gICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnN1Ym1pdEZvcm0oJGV2ZW50KTtcbiAgICAgICAgfSk7XG4gICAgfSwgMjUwKTtcblxuICAgIHNldCBpc0xheW91dERpYWxvZyhudikge1xuICAgICAgICBpZiAobnYpIHtcbiAgICAgICAgICAgIHJlbW92ZUNsYXNzKHRoaXMubmF0aXZlRWxlbWVudCwgJ3BhbmVsIGFwcC1wYW5lbCBsaXZlZm9ybS1pbmxpbmUnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9pc0xheW91dERpYWxvZyA9IG52O1xuICAgIH1cblxuICAgIGdldCBpc0xheW91dERpYWxvZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzTGF5b3V0RGlhbG9nO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2lzVXBkYXRlTW9kZTtcbiAgICBzZXQgaXNVcGRhdGVNb2RlKG52KSB7XG4gICAgICAgIHRoaXMuX2lzVXBkYXRlTW9kZSA9IG52O1xuICAgICAgICB0aGlzLmZvcm1GaWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICAgICAgICBmaWVsZC5zZXRSZWFkT25seVN0YXRlKG52KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0IGlzVXBkYXRlTW9kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzVXBkYXRlTW9kZTtcbiAgICB9XG5cbiAgICBASG9zdEJpbmRpbmcoJ2FjdGlvbicpIGFjdGlvbjogc3RyaW5nO1xuXG4gICAgQEhvc3RMaXN0ZW5lcignc3VibWl0JywgWyckZXZlbnQnXSkgc3VibWl0KCRldmVudCkge1xuICAgICAgICB0aGlzLl9kZWJvdW5jZWRTdWJtaXRGb3JtKCRldmVudCk7XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcigncmVzZXQnKSBvblJlc2V0KCkge1xuICAgICAgICB0aGlzLnJlc2V0KCk7XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bicsIFsnJGV2ZW50J10pIG9uS2V5ZG93bkhhbmRsZXIoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgdGhpcy5fdHJpZ2dlcmVkQnlVc2VyID0gdHJ1ZTtcbiAgICB9XG4gICAgLy8gcmV0dXJucyB0aGUgZm9ybUFycmF5IGNvbnRyb2wgb24gdGhlIHBhcmVudEZvcm0uXG4gICAgZ2V0IHBhcmVudEZvcm1BcnJheSgpOiBGb3JtQXJyYXkge1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnRGb3JtICYmIHRoaXMuaXNQYXJlbnRMaXN0ICYmIHRoaXMucGFyZW50Rm9ybS5uZ2Zvcm0uZ2V0KHRoaXMucGFyZW50TGlzdC5uYW1lKSBhcyBGb3JtQXJyYXk7XG4gICAgfVxuXG4gICAgLy8gcmV0dXJucyB0cnVlIG9ubHkgd2hlbiBjbG9zZXN0IGxpdmVsaXN0IGlzIHRoZSBpbW1lZGlhdGUgcGFyZW50IG9mIHRoZSBmb3JtLlxuICAgIC8vIGNoZWNrcyBmb3IgbGl2ZWxpc3QgaGF2aW5nIGFueSBmb3JtIGVsZW1lbnRzIHdpdGggcGFyZW50Rm9ybSBuYW1lLlxuICAgIC8vIElmIGxpdmVsaXN0IGlzIG5vdCBjb250YWluaW5nIGFueSBwYXJlbnRGb3JtIGVsZW1lbnRzIHRoZW4gaXQgcmV0dXJucyB0cnVlLlxuICAgIGdldCBpc1BhcmVudExpc3QoKSB7XG4gICAgICAgIGlmICh0aGlzLnBhcmVudExpc3QgJiYgdGhpcy5wYXJlbnRGb3JtICYmICFpc0RlZmluZWQodGhpcy5fZm9ybUlzSW5MaXN0KSkge1xuICAgICAgICAgICAgY29uc3QgZm9ybUVsZSA9IHRoaXMuJGVsZW1lbnQ7XG4gICAgICAgICAgICBjb25zdCBsaXN0RWxlID0gZm9ybUVsZS5jbG9zZXN0KCcuYXBwLWxpdmVsaXN0W25hbWU9XCInICsgdGhpcy5wYXJlbnRMaXN0Lm5hbWUgKyAnXCJdJyk7XG4gICAgICAgICAgICBpZiAobGlzdEVsZS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9mb3JtSXNJbkxpc3QgPSAhKGxpc3RFbGUuZmluZCgnZm9ybVt3aWRnZXQtaWQ9XCInICsgdGhpcy5wYXJlbnRGb3JtLndpZGdldElkICsgJ1wiXScpKS5sZW5ndGg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzRGVmaW5lZCh0aGlzLl9mb3JtSXNJbkxpc3QpID8gdGhpcy5fZm9ybUlzSW5MaXN0IDogdGhpcy5wYXJlbnRMaXN0O1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBpbmo6IEluamVjdG9yLFxuICAgICAgICBwcml2YXRlIGZiOiBGb3JtQnVpbGRlcixcbiAgICAgICAgcHJpdmF0ZSBhcHA6IEFwcCxcbiAgICAgICAgcHJpdmF0ZSBkaWFsb2dTZXJ2aWNlOiBBYnN0cmFjdERpYWxvZ1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZHluYW1pY0NvbXBvbmVudFByb3ZpZGVyOiBEeW5hbWljQ29tcG9uZW50UmVmUHJvdmlkZXIsXG4gICAgICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmUsXG4gICAgICAgIEBPcHRpb25hbCgpIHB1YmxpYyBwYXJlbnRMaXN0OiBMaXN0Q29tcG9uZW50LFxuICAgICAgICBAU2tpcFNlbGYoKSBAT3B0aW9uYWwoKSBwdWJsaWMgcGFyZW50Rm9ybTogRm9ybUNvbXBvbmVudCxcbiAgICAgICAgQFNraXBTZWxmKCkgQE9wdGlvbmFsKCkgcHVibGljIHBhcmVudFByZWZhYjogUHJlZmFiRGlyZWN0aXZlLFxuICAgICAgICBAU2tpcFNlbGYoKSBAT3B0aW9uYWwoKSBwdWJsaWMgcGFyZW50UGFydGlhbDogUGFydGlhbERpcmVjdGl2ZSxcbiAgICAgICAgQEF0dHJpYnV0ZSgnYmVmb3Jlc3VibWl0LmV2ZW50JykgcHVibGljIG9uQmVmb3JlU3VibWl0RXZ0LFxuICAgICAgICBAQXR0cmlidXRlKCdzdWJtaXQuZXZlbnQnKSBwdWJsaWMgb25TdWJtaXRFdnQsXG4gICAgICAgIEBBdHRyaWJ1dGUoJ2JlZm9yZXJlbmRlci5ldmVudCcpIHB1YmxpYyBvbkJlZm9yZVJlbmRlckV2dCxcbiAgICAgICAgQEF0dHJpYnV0ZSgnZGF0YXNldC5iaW5kJykgcHVibGljIGJpbmRkYXRhc2V0LFxuICAgICAgICBAQXR0cmlidXRlKCdmb3JtZGF0YS5iaW5kJykgcHJpdmF0ZSBiaW5kZm9ybWRhdGEsXG4gICAgICAgIEBBdHRyaWJ1dGUoJ3dtTGl2ZUZvcm0nKSBpc0xpdmVGb3JtLFxuICAgICAgICBAQXR0cmlidXRlKCd3bUxpdmVGaWx0ZXInKSBpc0xpdmVGaWx0ZXIsXG4gICAgICAgIEBBdHRyaWJ1dGUoJ2RhdGEtcm9sZScpIHJvbGUsXG4gICAgICAgIEBBdHRyaWJ1dGUoJ2tleScpIGtleSxcbiAgICAgICAgQEF0dHJpYnV0ZSgnbmFtZScpIG5hbWVcbiAgICApIHtcbiAgICAgICAgc3VwZXIoaW5qLCBnZXRXaWRnZXRDb25maWcoaXNMaXZlRm9ybSwgaXNMaXZlRmlsdGVyLCByb2xlKSwpO1xuXG4gICAgICAgIHN0eWxlcih0aGlzLm5hdGl2ZUVsZW1lbnQsIHRoaXMpO1xuXG4gICAgICAgIC8vIHJlbW92ZSB0aXRsZSBwcm9wZXJ0eSBhcyBhdHRyaWJ1dGUgYXMgaXQgaXMgY2F1c2luZyB1bm5lY2Vzc2FyeSB0b29sdGlwXG4gICAgICAgIHJlbW92ZUF0dHIodGhpcy5uYXRpdmVFbGVtZW50LCAndGl0bGUnKTtcbiAgICAgICAgdGhpcy5pc1VwZGF0ZU1vZGUgPSB0cnVlO1xuICAgICAgICB0aGlzLmRpYWxvZ0lkID0gdGhpcy5uYXRpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgnZGlhbG9nSWQnKTtcbiAgICAgICAgdGhpcy5uZ2Zvcm0gPSBmYi5ncm91cCh7fSk7XG4gICAgICAgIHRoaXMuYmluZGluZ1ZhbHVlID0ga2V5IHx8IG5hbWU7XG5cbiAgICAgICAgLy8gT24gdmFsdWUgY2hhbmdlIGluIGZvcm0sIHVwZGF0ZSB0aGUgZGF0YW91dHB1dFxuICAgICAgICBjb25zdCBvblZhbHVlQ2hhbmdlU3Vic2NyaXB0aW9uID0gIHRoaXMubmdmb3JtLnZhbHVlQ2hhbmdlc1xuICAgICAgICAgICAgLnN1YnNjcmliZSh0aGlzLnVwZGF0ZURhdGFPdXRwdXQuYmluZCh0aGlzKSk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJEZXN0cm95TGlzdGVuZXIoKCkgPT4gb25WYWx1ZUNoYW5nZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpKTtcbiAgICAgICAgdGhpcy5lbFNjb3BlID0gdGhpcztcblxuICAgICAgICB0aGlzLmFkZEV2ZW50c1RvQ29udGV4dCh0aGlzLmNvbnRleHQpO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY29tcG9uZW50UmVmcy5mb3JFYWNoKGNvbXBvbmVudFJlZiA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbXBvbmVudFJlZi5uYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFJlZ2lzdGVyIHdpZGdldHMgaW5zaWRlIGZvcm0gd2l0aCBmb3JtV2lkZ2V0c1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1XaWRnZXRzW2NvbXBvbmVudFJlZi5uYW1lXSA9IGNvbXBvbmVudFJlZjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgMjUwKTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIGlmICh0aGlzLnBhcmVudEZvcm0gJiYgdGhpcy5wYXJlbnRGb3JtLm5nZm9ybSAmJiB0aGlzLmlzUGFyZW50TGlzdCkge1xuICAgICAgICAgICAgLy8gc2V0dGluZyBmb3JtQXJyYXkgY29udHJvbCBvbiBuZ2Zvcm0uXG4gICAgICAgICAgICBpZiAoIV8uZ2V0KHRoaXMucGFyZW50Rm9ybS5uZ2Zvcm0uY29udHJvbHMsIHRoaXMucGFyZW50TGlzdC5uYW1lKSkge1xuICAgICAgICAgICAgICAgIHRoaXMucGFyZW50Rm9ybS5uZ2Zvcm0uc2V0Q29udHJvbCh0aGlzLnBhcmVudExpc3QubmFtZSwgbmV3IEZvcm1BcnJheShbXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gcHVzaGluZyB0aGUgbmdmb3JtIHRvIGZvcm1BcnJheS5cbiAgICAgICAgICAgIHRoaXMucGFyZW50Rm9ybUFycmF5LnB1c2godGhpcy5uZ2Zvcm0pO1xuICAgICAgICAgICAgdGhpcy5mb3JtQXJyYXlJbmRleCA9IHRoaXMucGFyZW50Rm9ybUFycmF5Lmxlbmd0aCAtIDE7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hZGRJbm5lck5nRm9ybVRvRm9ybSh0aGlzLmJpbmRpbmdWYWx1ZSk7XG4gICAgfVxuXG4gICAgZmluZE9wZXJhdGlvblR5cGUoKSB7fVxuXG4gICAgcHJpdmF0ZSBhZGRJbm5lck5nRm9ybVRvRm9ybShiaW5kaW5nKSB7XG4gICAgICAgIGlmICh0aGlzLnBhcmVudEZvcm0gJiYgdGhpcy5wYXJlbnRGb3JtLm5nZm9ybSkge1xuICAgICAgICAgICAgLy8gaGFuZGxpbmcgYXMgZm9ybUFycmF5IHdoZW4gcGFyZW50IGlzIGxpc3QuIEhlbmNlIHJldHVybmluZyBoZXJlIGZyb20gYWRkaW5nIHRvIHBhcmVudEZvcm0gYWdhaW4uXG4gICAgICAgICAgICBpZiAodGhpcy5pc1BhcmVudExpc3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBhc3NpZ25pbmcgdGhlIGNvbnRyb2wgbmFtZSBvZiB0aGUgZm9ybSBpbnNpZGUgdGhlIHByZWZhYiB3aXRoIHRoZSBwcmVmYWIgbmFtZS5cbiAgICAgICAgICAgIC8vIFRoaXMgd2lsbCBoYXBwZW4gb25seSB3aGVuIHRoZXJlIGlzIG9ubHkgb25lIGZvcm0gaW5zaWRlIHByZWZhYi5cbiAgICAgICAgICAgIC8vIFdlIGRvIG5vdCBzdXBwb3J0IGNoYW5naW5nIHRoaXMgd2hlbiBtdWx0aXBsZSBmb3JtcyBhcmUgaW5zaWRlIHByZWZhYi5cbiAgICAgICAgICAgIC8vIFRoaXMgc2NlbmFyaW8gaGFzIHRvIGJlIGhhbmRsZWQgYnkgZW5kIHVzZXIgYnkgY2hhbmdpbmcgZm9ybSBuYW1lcyBpbiBwcmVmYWIgYWNjb3JkaW5nIHRvIHRoZSBkYXRhbW9kZWwgYmluZGluZy5cbiAgICAgICAgICAgIGNvbnN0IHBhcmVudENvbnRhaW5lciA9IHRoaXMucGFyZW50UHJlZmFiIHx8IHRoaXMucGFyZW50UGFydGlhbDtcbiAgICAgICAgICAgIGlmIChwYXJlbnRDb250YWluZXIpIHtcbiAgICAgICAgICAgICAgICBsZXQgcGFyZW50Q29udGVudEVsO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnBhcmVudFByZWZhYikge1xuICAgICAgICAgICAgICAgICAgICBwYXJlbnRDb250ZW50RWwgPSBwYXJlbnRDb250YWluZXIuJGVsZW1lbnQuZmluZCgnW3dtcHJlZmFiY29udGFpbmVyXScpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmVudENvbnRlbnRFbCA9IHBhcmVudENvbnRhaW5lci4kZWxlbWVudDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICogYXNzaWduaW5nIHRoZSBmb3JtIG5hbWUgdG8gdGhlIHBhcmVudENvbnRhaW5lciBuYW1lIGkuZS4gcGFydGlhbCBuYW1lIG9yIHBlcmZhYiBuYW1lIGJ5IGZvbGxvd2luZ1xuICAgICAgICAgICAgICAgICAqIDEuIHJldHJpZXZpbmcgYWxsIHRoZSBmb3JtcyBpbiB0aGUgcGFyZW50Q29udGFpbmVyXG4gICAgICAgICAgICAgICAgICogMi4gY29uc2lkZXIgdGhlIGZpcnN0IGZvcm1cbiAgICAgICAgICAgICAgICAgKiAzLiBpZiB0aGlzIGZvcm0gaXMgaW5zaWRlIGxpc3QgaS5lLiBhbHNvIGZpbmQgaWYgdGhpcyBsaXN0IGlzIGFsc28gaW5zaWRlIHRoZSBwYXJlbnRDb250YWluZXIgKHByZWZhYiAvIHBhcnRpYWwpXG4gICAgICAgICAgICAgICAgICogNC4gdGhlbiBkbyBub3QgY2hhbmdlIHRoZSBmb3JtIG5hbWUgd2hlbiBmb3JtIGlzIGluc2lkZSBsaXN0IGFuZCBhbHNvIHdoZW4gdGhlcmUgYXJlIHNpYmxpbmdzIHRvIHRoZSBmb3JtXG4gICAgICAgICAgICAgICAgICogNS4gdGhpcyBtZWFucyBmb3JtIG5hbWUgY2hhbmdlIGFwcGxpZXMgb25seSB3aGVuIHRoZXJlIGlzIHNpbmdsZSBmb3JtIChpbW1lZGlhdGUgY2hpbGQpIGluc2lkZSB0aGUgcGFyZW50Q29udGFpbmVyLlxuICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgIGNvbnN0IHByZWZhYklubmVyRm9ybSA9IHBhcmVudENvbnRlbnRFbC5maW5kKCdmb3JtJykuZmlyc3QoKTtcbiAgICAgICAgICAgICAgICBpZiAoXy5nZXQocHJlZmFiSW5uZXJGb3JtWzBdLCAnd2lkZ2V0LndpZGdldElkJykgPT09IHRoaXMud2lkZ2V0SWQpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gY2hlY2sgd2hldGhlciBmb3JtIGluc2lkZSBwcmVmYWIgY29udGFpbmVyIGlzIGluc2lkZSB0aGUgbGlzdC4gSWYgdHJ1ZSwgZG8gbm90IGNoYW5nZSB0aGUgbmFtZS5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFwcmVmYWJJbm5lckZvcm0uaXNQYXJlbnRMaXN0ICYmICFwcmVmYWJJbm5lckZvcm0uc2libGluZ3MoJ2Zvcm0nKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJpbmRpbmcgPSBfLmdldChwYXJlbnRDb250YWluZXIsICduYW1lJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgY291bnRlciA9IDE7XG4gICAgICAgICAgICBsZXQgaW5uZXJCaW5kaW5nID0gYmluZGluZztcbiAgICAgICAgICAgIC8vIElubmVyIGZvcm1zIG1heSBoYXZlIHNhbWUgbmFtZXMuIElmIHNhbWUgbmFtZSBpcyBwcmVzZW50LCBhcHBlbmQgdW5xaXVlIGlkZW50aWZpZXJcbiAgICAgICAgICAgIHdoaWxlICh0aGlzLnBhcmVudEZvcm0ubmdmb3JtLmNvbnRyb2xzLmhhc093blByb3BlcnR5KGlubmVyQmluZGluZykpIHtcbiAgICAgICAgICAgICAgICBpbm5lckJpbmRpbmcgPSBgJHtiaW5kaW5nfV8ke2NvdW50ZXJ9YDtcbiAgICAgICAgICAgICAgICBjb3VudGVyKys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmZvcm1Hcm91cE5hbWUgPSBpbm5lckJpbmRpbmc7XG4gICAgICAgICAgICAvLyBJZiBwYXJlbnQgZm9ybSBpcyBwcmVzZW50LCBhZGQgdGhlIGN1cnJlbnQgZm9ybSBhcyBhcyBmb3JtR3JvdXAgZm9yIHBhcmVudCBmb3JtXG4gICAgICAgICAgICB0aGlzLnBhcmVudEZvcm0ubmdmb3JtLmFkZENvbnRyb2woaW5uZXJCaW5kaW5nLCB0aGlzLm5nZm9ybSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBFeHBvc2UgdGhlIGV2ZW50cyBvbiBjb250ZXh0IHNvIHRoYXQgdGhleSBjYW4gYmUgYWNjZXNzZWQgYnkgZm9ybSBhY3Rpb25zXG4gICAgcHJpdmF0ZSBhZGRFdmVudHNUb0NvbnRleHQoY29udGV4dCkge1xuICAgICAgICBjb250ZXh0LmNhbmNlbCA9ICgpID0+IHRoaXMuY2FuY2VsKCk7XG4gICAgICAgIGNvbnRleHQucmVzZXQgPSAoKSA9PiB0aGlzLnJlc2V0KCk7XG4gICAgICAgIGNvbnRleHQuc2F2ZSA9IGV2dCA9PiB0aGlzLnNhdmUoZXZ0KTtcbiAgICAgICAgY29udGV4dC5zYXZlQW5kTmV3ID0gKCkgPT4gdGhpcy5zYXZlQW5kTmV3KCk7XG4gICAgICAgIGNvbnRleHQuc2F2ZUFuZFZpZXcgPSAoKSA9PiB0aGlzLnNhdmVBbmRWaWV3KCk7XG4gICAgICAgIGNvbnRleHQuZGVsZXRlID0gKCkgPT4gdGhpcy5kZWxldGUoKTtcbiAgICAgICAgY29udGV4dC5uZXcgPSAoKSA9PiB0aGlzLm5ldygpO1xuICAgICAgICBjb250ZXh0LmVkaXQgPSAoKSA9PiB0aGlzLmVkaXQoKTtcbiAgICAgICAgY29udGV4dC5oaWdobGlnaHRJbnZhbGlkRmllbGRzID0gKCkgPT4gdGhpcy5oaWdobGlnaHRJbnZhbGlkRmllbGRzKCk7XG4gICAgICAgIGNvbnRleHQuZmlsdGVyID0gKCkgPT4gdGhpcy5maWx0ZXIoKTtcbiAgICAgICAgY29udGV4dC5jbGVhckZpbHRlciA9ICgpID0+IHRoaXMuY2xlYXJGaWx0ZXIoKTtcbiAgICAgICAgY29udGV4dC5zdWJtaXQgPSBldnQgPT4gdGhpcy5zdWJtaXQoZXZ0KTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIG1ldGhvZCBnZXRzIGFsbCB0aGUgaW5uZXIgZm9ybXMgYW5kIHZhbGlkYXRlcyBlYWNoIGZvcm0uXG4gICAgcHJpdmF0ZSBzZXRWYWxpZGF0aW9uT25Jbm5lckZvcm1zKHZhbGlkYXRlVG91Y2gpIHtcbiAgICAgICAgY29uc3QgZm9ybUVsZSA9IHRoaXMuZ2V0TmF0aXZlRWxlbWVudCgpO1xuICAgICAgICBjb25zdCBmb3JtT2JqcyA9IGZvcm1FbGUucXVlcnlTZWxlY3RvckFsbCgnLmFwcC1mb3JtJyk7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRpb25Nc2dzID0gW107XG4gICAgICAgIF8uZm9yRWFjaChmb3JtT2JqcywgZSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmb3JtSW5zdGFuY2UgPSAoZSBhcyBhbnkpLndpZGdldDtcbiAgICAgICAgICAgIC8vIGRpZmZlcmVudGlhdGluZyB0aGUgdmFsaWRhdGlvbk1lc3NhZ2VzIHByZWZpeCBiYXNlZCBvbiB0aGUgZm9ybUdyb3VwTmFtZVxuICAgICAgICAgICAgLy8gYXMgdGhlIGZvcm1OYW1lJ3MgYXJlIHNhbWUgd2hlbiBmb3JtcyBhcmUgaW4gbGlzdFxuICAgICAgICAgICAgbGV0IGZvcm1OYW1lID0gXy5nZXQoZm9ybUluc3RhbmNlLCAnZm9ybUdyb3VwTmFtZScpIHx8IGZvcm1JbnN0YW5jZS5uYW1lO1xuICAgICAgICAgICAgaWYgKGlzRGVmaW5lZChmb3JtSW5zdGFuY2UuZm9ybUFycmF5SW5kZXgpKSB7XG4gICAgICAgICAgICAgICAgZm9ybU5hbWUgPSBmb3JtTmFtZSArICdbJyArIGZvcm1JbnN0YW5jZS5mb3JtQXJyYXlJbmRleCArICddJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBjdXJyZW50ID0gZm9ybUluc3RhbmNlO1xuICAgICAgICAgICAgd2hpbGUgKF8uZ2V0KGN1cnJlbnQsICdwYXJlbnRGb3JtJykpIHtcbiAgICAgICAgICAgICAgICBsZXQgcGFyZW50TmFtZSA9IGN1cnJlbnQucGFyZW50Rm9ybS5mb3JtR3JvdXBOYW1lIHx8IGN1cnJlbnQucGFyZW50Rm9ybS5uYW1lO1xuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50LnBhcmVudEZvcm0ucGFyZW50Rm9ybUFycmF5KSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmVudE5hbWUgPSBwYXJlbnROYW1lICsgJ1snICsgY3VycmVudC5wYXJlbnRGb3JtLmZvcm1BcnJheUluZGV4ICsgJ10nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmb3JtTmFtZSA9IHBhcmVudE5hbWUgKyAnLicgKyBmb3JtTmFtZTtcbiAgICAgICAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC5wYXJlbnRGb3JtO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zZXRWYWxpZGF0aW9uT25GaWVsZHMoZm9ybUluc3RhbmNlLCBmb3JtTmFtZSwgdmFsaWRhdGVUb3VjaCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdmFsaWRhdGlvbiBvbiBmb3JtRmllbGRzLlxuICAgICAqIEFwcGxpZXMgdG8gaW5uZXJmb3JtIGFuZCBhbHNvIHNldHMgaW5uZXJmb3JtIHZhbGlkYXRpb24gb24gcGFyZW50IGZvcm0uXG4gICAgICogQHBhcmFtIHByZWZpeCBjb250YWlucyB0aGUgZm9ybSBuYW1lLCB3aGljaCBhbHNvIGluY2x1ZGVzIGl0cyBwYXJlbnRzIGZvcm0gbmFtZVxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gdmFsaWRhdGVUb3VjaFxuICAgICAqL1xuICAgIHByaXZhdGUgc2V0VmFsaWRhdGlvbk9uRmllbGRzKGZvcm06IEZvcm1Db21wb25lbnQsIHByZWZpeDogc3RyaW5nLCB2YWxpZGF0ZVRvdWNoPzogYm9vbGVhbikge1xuICAgICAgICBjb25zdCBjb250cm9scyA9IGZvcm0ubmdmb3JtLmNvbnRyb2xzO1xuICAgICAgICBjb25zdCBmb3JtRmllbGRzID0gZm9ybS5mb3JtRmllbGRzO1xuICAgICAgICBpZiAoIWZvcm1GaWVsZHMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBfLmZvckVhY2goY29udHJvbHMsICh2LCBrKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmaWVsZCA9IGZvcm1GaWVsZHMuZmluZChlID0+IGUua2V5ID09PSBrKTtcbiAgICAgICAgICAgIGlmICghZmllbGQgfHwgKHZhbGlkYXRlVG91Y2ggJiYgIXYudG91Y2hlZCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaWVsZC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0Jyk/LnNldEF0dHJpYnV0ZSgnYXJpYS1pbnZhbGlkJywgdi5pbnZhbGlkKTtcbiAgICAgICAgICAgIC8vIGludm9raW5nIHRoZSBwcmVwYXJlVmFsaWRhdGlvbiBvbiBib3RoIHBhcmVudCBmb3JtIGFuZCBjdXJyZW50IGZvcm0uXG4gICAgICAgICAgICB0aGlzLnByZXBhcmVWYWxpZGF0aW9uT2JqKHYsIGssIGZpZWxkLCBwcmVmaXgpO1xuICAgICAgICAgICAgdGhpcy5wcmVwYXJlVmFsaWRhdGlvbk9iai5jYWxsKGZvcm0sIHYsIGssIGZpZWxkLCBwcmVmaXgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBBc3NpZ25zIC8gdXBkYXRlcyB2YWxpZGF0aW9uTWVzc2FnZXMgYmFzZWQgb24gYW5ndWxhciBlcnJvcnMgb24gZmllbGRcbiAgICBwcml2YXRlIHByZXBhcmVWYWxpZGF0aW9uT2JqKHYsIGssIGZpZWxkLCBwcmVmaXgpIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5maW5kSW5kZXgoZSA9PiAoZS5maWVsZCA9PT0gayAmJiBlLmZ1bGx5UXVhbGlmaWVkRm9ybU5hbWUgPT09IHByZWZpeCkpO1xuICAgICAgICBpZiAodi5pbnZhbGlkKSB7XG4gICAgICAgICAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICogZmllbGQgY29udGFpbnMgdGhlIGZpZWxkTmFtZVxuICAgICAgICAgICAgICAgICAqIHZhbHVlIGNvbnRhaW5zIHRoZSBmaWVsZCB2YWx1ZVxuICAgICAgICAgICAgICAgICAqIGVycm9yVHlwZSBjb250YWlucyB0aGUgbGlzdCBvZiBlcnJvcnNcbiAgICAgICAgICAgICAgICAgKiBtZXNzYWdlIGNvbnRhaW5zIHRoZSB2YWxpZGF0aW9uIG1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgKiBnZXRFbGVtZW50IHJldHVybnMgdGhlIGVsZW1lbnQgaGF2aW5nIGZvY3VzLXRhcmdldFxuICAgICAgICAgICAgICAgICAqIGZvcm1OYW1lIHJldHVybnMgdGhlIG5hbWUgb2YgdGhlIGZvcm1cbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGssXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmaWVsZC52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JUeXBlOiBfLmtleXModi5lcnJvcnMpLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBmaWVsZC52YWxpZGF0aW9ubWVzc2FnZSB8fCAnJyxcbiAgICAgICAgICAgICAgICAgICAgZ2V0RWxlbWVudDogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpZWxkLiRlbGVtZW50LmZpbmQoJ1tmb2N1cy10YXJnZXRdJyk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGZvcm1OYW1lOiBfLmxhc3QocHJlZml4LnNwbGl0KCcuJykpLFxuICAgICAgICAgICAgICAgICAgICBmdWxseVF1YWxpZmllZEZvcm1OYW1lOiBwcmVmaXhcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXNbaW5kZXhdLnZhbHVlID0gZmllbGQudmFsdWU7XG4gICAgICAgICAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXNbaW5kZXhdLmVycm9yVHlwZSA9IF8ua2V5cyh2LmVycm9ycyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodi52YWxpZCAmJiBpbmRleCA+IC0xKSB7XG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gVGhpcyB3aWxsIHJldHVybiBhIG9iamVjdCBjb250YWluaW5nIHRoZSBlcnJvciBkZXRhaWxzIGZyb20gdGhlIGxpc3Qgb2YgZm9ybUZpZWxkcyB0aGF0IGFyZSBpbnZhbGlkXG4gICAgcHJpdmF0ZSBzZXRWYWxpZGF0aW9uTXNncyh2YWxpZGF0ZVRvdWNoPzogYm9vbGVhbikge1xuICAgICAgICBpZiAoIXRoaXMuZm9ybUZpZWxkcy5sZW5ndGggJiYgXy5pc0VtcHR5KHRoaXMubmdmb3JtLmNvbnRyb2xzKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0VmFsaWRhdGlvbk9uRmllbGRzKHRoaXMsIHRoaXMubmFtZSwgdmFsaWRhdGVUb3VjaCk7XG4gICAgICAgIHRoaXMuc2V0VmFsaWRhdGlvbk9uSW5uZXJGb3Jtcyh2YWxpZGF0ZVRvdWNoKTtcbiAgICB9XG5cbiAgICAvLyBjaGFuZ2UgYW5kIGJsdXIgZXZlbnRzIGFyZSBhZGRlZCBmcm9tIHRoZSB0ZW1wbGF0ZVxuICAgIHByb3RlY3RlZCBoYW5kbGVFdmVudChub2RlOiBIVE1MRWxlbWVudCwgZXZlbnROYW1lOiBzdHJpbmcsIGNhbGxiYWNrOiBGdW5jdGlvbiwgbG9jYWxzOiBhbnkpIHtcbiAgICAgICAgaWYgKGV2ZW50TmFtZSAhPT0gJ3N1Ym1pdCcpIHtcbiAgICAgICAgICAgIHN1cGVyLmhhbmRsZUV2ZW50KHRoaXMubmF0aXZlRWxlbWVudCwgZXZlbnROYW1lLCBjYWxsYmFjaywgbG9jYWxzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlRmllbGRTb3VyY2UoKSB7XG4gICAgICAgIGlmICh0aGlzLmZvcm1kYXRhc291cmNlICYmIHRoaXMuZm9ybWRhdGFzb3VyY2UuZXhlY3V0ZShEYXRhU291cmNlLk9wZXJhdGlvbi5JU19BUElfQVdBUkUpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5mb3JtZGF0YXNvdXJjZSAmJiAhdGhpcy5mb3JtZGF0YXNvdXJjZS50d29XYXlCaW5kaW5nKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5mb3JtRmllbGRzLmZvckVhY2goZm9ybUZpZWxkID0+IHtcbiAgICAgICAgICAgIGZvcm1GaWVsZC5zZXRGb3JtV2lkZ2V0KCdkYXRhdmFsdWVzb3VyY2UnLCB0aGlzLmZvcm1kYXRhc291cmNlKTtcbiAgICAgICAgICAgIGZvcm1GaWVsZC5zZXRGb3JtV2lkZ2V0KCdiaW5kZGF0YXZhbHVlJywgYCR7dGhpcy5iaW5kZm9ybWRhdGF9LiR7Zm9ybUZpZWxkLmtleX1gKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBtZXRob2QgbG9vcHMgdGhyb3VnaCB0aGUgZm9ybSBmaWVsZHMgYW5kIGhpZ2hsaWdodHMgdGhlIGludmFsaWQgZmllbGRzIGJ5IHNldHRpbmcgc3RhdGUgdG8gdG91Y2hlZFxuICAgIGhpZ2hsaWdodEludmFsaWRGaWVsZHMoKSB7XG4gICAgICAgIHNldFRvdWNoZWRTdGF0ZSh0aGlzLCB0aGlzLm5nZm9ybSwgJycpO1xuICAgIH1cblxuICAgIC8vIERpc2FibGUgdGhlIGZvcm0gc3VibWl0IGlmIGZvcm0gaXMgaW4gaW52YWxpZCBzdGF0ZS4gSGlnaGxpZ2h0IGFsbCB0aGUgaW52YWxpZCBmaWVsZHMgaWYgdmFsaWRhdGlvbiB0eXBlIGlzIGRlZmF1bHRcbiAgICB2YWxpZGF0ZUZpZWxkc09uU3VibWl0KCkge1xuICAgICAgICB0aGlzLnNldFZhbGlkYXRpb25Nc2dzKCk7XG4gICAgICAgIC8vIERpc2FibGUgdGhlIGZvcm0gc3VibWl0IGlmIGZvcm0gaXMgaW4gaW52YWxpZCBzdGF0ZS4gRm9yIGRlbGV0ZSBvcGVyYXRpb24sIGRvIG5vdCBjaGVjayB0aGUgdmFsaWRhdGlvbi5cbiAgICAgICAgaWYgKHRoaXMub3BlcmF0aW9uVHlwZSAhPT0gJ2RlbGV0ZScgJiYgKHRoaXMudmFsaWRhdGlvbnR5cGUgPT09ICdodG1sJyB8fCB0aGlzLnZhbGlkYXRpb250eXBlID09PSAnZGVmYXVsdCcpXG4gICAgICAgICAgICAgICAgJiYgdGhpcy5uZ2Zvcm0gJiYgdGhpcy5uZ2Zvcm0uaW52YWxpZCkge1xuXG4gICAgICAgICAgICBpZiAodGhpcy5uZ2Zvcm0uaW52YWxpZCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnZhbGlkYXRpb250eXBlID09PSAnZGVmYXVsdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oaWdobGlnaHRJbnZhbGlkRmllbGRzKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIEZpbmQgdGhlIGZpcnN0IGludmFsaWQgdW50b2NoZWQgZWxlbWVudCBhbmQgc2V0IGl0IHRvIHRvdWNoZWQuXG4gICAgICAgICAgICAgICAgLy8gU2FmYXJpIGRvZXMgbm90IGZvcm0gdmFsaWRhdGlvbnMuIHRoaXMgd2lsbCBlbnN1cmUgdGhhdCBlcnJvciBpcyBzaG93biBmb3IgdXNlclxuICAgICAgICAgICAgICAgIGNvbnN0IGVsZUZvcm0gPSBmaW5kSW52YWxpZEVsZW1lbnQodGhpcy4kZWxlbWVudCwgdGhpcy5uZ2Zvcm0pO1xuICAgICAgICAgICAgICAgIGNvbnN0ICRpbnZhbGlkRm9ybSA9IGVsZUZvcm0ubmdGb3JtO1xuICAgICAgICAgICAgICAgIGxldCAkaW52YWxpZEVsZSAgPSBlbGVGb3JtLiRlbGU7XG4gICAgICAgICAgICAgICAgJGludmFsaWRFbGUgPSAkaW52YWxpZEVsZS5wYXJlbnQoKS5maW5kKCdbZm9jdXMtdGFyZ2V0XScpO1xuICAgICAgICAgICAgICAgIGlmICgkaW52YWxpZEVsZS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gb24gc2F2ZSBjbGljayBpbiBwYWdlIGxheW91dCBsaXZlZm9ybSwgZm9jdXMgb2YgYXV0b2NvbXBsZXRlIHdpZGdldCBvcGVucyBmdWxsLXNjcmVlbiBzZWFyY2guXG4gICAgICAgICAgICAgICAgICAgIGlmICghJGludmFsaWRFbGUuaGFzQ2xhc3MoJ2FwcC1zZWFyY2gtaW5wdXQnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgJGludmFsaWRFbGUuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZ0VsZSA9ICRpbnZhbGlkRm9ybSAmJiAkaW52YWxpZEZvcm0uY29udHJvbHNbJGludmFsaWRFbGUuYXR0cignZm9ybUNvbnRyb2xOYW1lJykgfHwgJGludmFsaWRFbGUuYXR0cignbmFtZScpXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5nRWxlICYmIG5nRWxlLm1hcmtBc1RvdWNoZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5nRWxlLm1hcmtBc1RvdWNoZWQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAkYXBwRGlnZXN0KCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgb25Qcm9wZXJ0eUNoYW5nZShrZXksIG52LCBvdj8pIHtcbiAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgICAgIGNhc2UgJ2NhcHRpb25hbGlnbic6XG4gICAgICAgICAgICAgICAgdGhpcy5jYXB0aW9uQWxpZ25DbGFzcyA9ICdhbGlnbi0nICsgbnY7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdjYXB0aW9ucG9zaXRpb24nOlxuICAgICAgICAgICAgICAgIHRoaXMuc2V0TGF5b3V0Q29uZmlnKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdjYXB0aW9ud2lkdGgnOlxuICAgICAgICAgICAgICAgIHRoaXMuc2V0TGF5b3V0Q29uZmlnKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdjYXB0aW9uc2l6ZSc6XG4gICAgICAgICAgICAgICAgdGhpcy5jYXB0aW9uc2l6ZSA9IG52O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbm92YWxpZGF0ZSc6XG4gICAgICAgICAgICAgICAgLy8gIFNldCB2YWxpZGF0aW9uIHR5cGUgYmFzZWQgb24gdGhlIG5vdmFsaWRhdGUgcHJvcGVydHlcbiAgICAgICAgICAgICAgICB0aGlzLndpZGdldC52YWxpZGF0aW9udHlwZSA9IChudiA9PT0gdHJ1ZSB8fCBudiA9PT0gJ3RydWUnKSA/ICdub25lJyA6ICdkZWZhdWx0JztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2Zvcm1kYXRhJzpcbiAgICAgICAgICAgICAgICAvLyBGb3IgbGl2ZWxpc3Qgd2hlbiBtdWx0aXNlbGVjdCBpcyBlbmFibGVkLCBmb3JtZGF0YSB3aWxsIGJlIGFycmF5IG9mIG9iamVjdHMuIEluIHRoaXMgY2FzZSBjb25zaWRlciB0aGUgbGFzdCBvYmplY3QgYXMgZm9ybWRhdGEuXG4gICAgICAgICAgICAgICAgaWYgKF8uaXNFcXVhbChudiwgb3YpKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBfLmlzQXJyYXkobnYpID8gdGhpcy5zZXRGb3JtRGF0YShfLmxhc3QobnYpKSA6IHRoaXMuc2V0Rm9ybURhdGEobnYpO1xuICAgICAgICAgICAgICAgIC8vIGlmIGRhdGFzZXQgb24gdGhlIGZvcm1GaWVsZHMgYXJlIG5vdCBzZXQgYXMgdGhlIGRhdGFzb3VyY2VDaGFuZ2UgaXMgdHJpZ2dlcmVkIGJlZm9yZSB0aGUgZm9ybUZpZWxkcyBhcmUgcmVnaXN0ZXJlZC5cbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNEYXRhU291cmNlVXBkYXRlZCAmJiB0aGlzLmRhdGFzb3VyY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkRhdGFTb3VyY2VDaGFuZ2UoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdkZWZhdWx0bW9kZSc6XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzTGF5b3V0RGlhbG9nKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChudiAmJiBudiA9PT0gJ0VkaXQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZU1vZGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVNb2RlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc1VwZGF0ZU1vZGUgPSB0aGlzLnVwZGF0ZU1vZGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZGF0YXNvdXJjZSc6XG4gICAgICAgICAgICAgICAgdGhpcy5vbkRhdGFTb3VyY2VDaGFuZ2UoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2Zvcm1kYXRhc291cmNlJzpcbiAgICAgICAgICAgICAgICB0aGlzLm9uRm9ybURhdGFTb3VyY2VDaGFuZ2UoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ21ldGFkYXRhJzpcbiAgICAgICAgICAgICAgICB0aGlzLmdlbmVyYXRlRm9ybUZpZWxkcygpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZGF0YXNldCc6XG4gICAgICAgICAgICAgICAgY29uc3QgZm9ybUZpZWxkcyA9IHRoaXMuZ2V0Rm9ybUZpZWxkcygpO1xuICAgICAgICAgICAgICAgIGZvcm1GaWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIC8vIG5vdGlmeWluZyB0aGUgZGF0YXNldCBjaGFuZ2UgdG8gdGhlIGZvcm0tZmllbGQgd2lkZ2V0LlxuICAgICAgICAgICAgICAgICAgICBpZiAoIWZpZWxkLmlzRGF0YVNldEJvdW5kICYmIF8uZ2V0KGZpZWxkLmZvcm1XaWRnZXQsICdkYXRhc2V0JCcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5mb3JtV2lkZ2V0LmRhdGFzZXQkLm5leHQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBzdXBlci5vblByb3BlcnR5Q2hhbmdlKGtleSwgbnYsIG92KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIEV2ZW50IGNhbGxiYWNrcyBvbiBzdWNjZXNzL2Vycm9yXG4gICAgb25SZXN1bHRDYihkYXRhLCBzdGF0dXMsIGV2ZW50Pykge1xuICAgICAgICBjb25zdCBwYXJhbXMgPSB7JGV2ZW50OiBldmVudCwgJGRhdGE6IGRhdGEsICRvcGVyYXRpb246IHRoaXMub3BlcmF0aW9uVHlwZX07XG4gICAgICAgIC8vIHdoZXRoZXIgc2VydmljZSBjYWxsIHN1Y2Nlc3Mgb3IgZmFpbHVyZSBjYWxsIHRoaXMgbWV0aG9kXG4gICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygncmVzdWx0JywgcGFyYW1zKTtcbiAgICAgICAgaWYgKHN0YXR1cykge1xuICAgICAgICAgICAgLy8gaWYgc2VydmljZSBjYWxsIGlzIHN1Y2Nlc3MgY2FsbCB0aGlzIG1ldGhvZFxuICAgICAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdzdWNjZXNzJywgcGFyYW1zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGlmIHNlcnZpY2UgY2FsbCBmYWlscyBjYWxsIHRoaXMgbWV0aG9kXG4gICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2Vycm9yJywgcGFyYW1zKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIERpc3BsYXkgb3IgaGlkZSB0aGUgaW5saW5lIG1lc3NhZ2UvIHRvYXN0ZXJcbiAgICB0b2dnbGVNZXNzYWdlKHNob3c6IGJvb2xlYW4sIG1zZz86IHN0cmluZywgdHlwZT86IHN0cmluZywgaGVhZGVyPzogc3RyaW5nKSB7XG4gICAgICAgIGxldCB0ZW1wbGF0ZTtcbiAgICAgICAgaWYgKHNob3cgJiYgbXNnKSB7XG4gICAgICAgICAgICB0ZW1wbGF0ZSA9ICh0eXBlID09PSAnZXJyb3InICYmIHRoaXMuZXJyb3JtZXNzYWdlKSA/IHRoaXMuZXJyb3JtZXNzYWdlIDogbXNnO1xuICAgICAgICAgICAgaWYgKHRoaXMubWVzc2FnZWxheW91dCA9PT0gJ0lubGluZScpIHtcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZSA9IHRoaXMuY2hlY2tBcHBTZXJ2aWNlRXJyb3JNc2codHlwZSkgfHwgdGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0dXNNZXNzYWdlID0geydjYXB0aW9uJzogdGVtcGxhdGUgfHwgJycsIHR5cGU6IHR5cGV9O1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLm1lc3NhZ2VSZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlUmVmLnNob3dNZXNzYWdlKHRoaXMuc3RhdHVzTWVzc2FnZS5jYXB0aW9uLCB0aGlzLnN0YXR1c01lc3NhZ2UudHlwZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIHdoZW4gbWVzc2FnZSBsYXlvdXQgaXMgaW5saW5lIG9uIHNhdmUsIHNjcm9sbCB0aGUgdmlldyB0byB0b3Agb2YgdGhlIGZvcm0gdG8gc2VlIHRoZSBzdGF0dXMgb2YgdGhlIG9wZXJhdGlvblxuICAgICAgICAgICAgICAgIGlmICghaXNFbGVtZW50SW5WaWV3cG9ydCh0aGlzLiRlbGVtZW50WzBdKSkge1xuICAgICAgICAgICAgICAgICAgICBzY3JvbGxUb0VsZW1lbnQodGhpcy4kZWxlbWVudFswXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFwcC5ub3RpZnlBcHAodGVtcGxhdGUsIHR5cGUsIGhlYWRlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnN0YXR1c01lc3NhZ2UuY2FwdGlvbiA9ICcnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gaWYgdGhlcmUgaXMgYW4gQXBwLm9uU2VydmljZUVycm9yIGhhbmRsZXIgZm9yIHRoZSBhcHAsIHRoYXQgbWVzc2FnZSBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkIG9mIHNlcnZlciByZXR1cm5lZCBlcnJvciBtZXNzYWdlXG4gICAgY2hlY2tBcHBTZXJ2aWNlRXJyb3JNc2codHlwZSkge1xuICAgICAgICBjb25zdCBub3RpZmljYXRpb25BY3Rpb24gPSBfLmdldCh0aGlzLmFwcCwgJ0FjdGlvbnMuYXBwTm90aWZpY2F0aW9uJyk7XG4gICAgICAgIGlmIChub3RpZmljYXRpb25BY3Rpb24gJiYgdHlwZSA9PT0gJ2Vycm9yJykge1xuICAgICAgICAgICAgcmV0dXJuIG5vdGlmaWNhdGlvbkFjdGlvbi5nZXRNZXNzYWdlKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEhpZGUgdGhlIGlubGluZSBtZXNzYWdlLyB0b2FzdGVyXG4gICAgY2xlYXJNZXNzYWdlKCkge1xuICAgICAgICB0aGlzLnRvZ2dsZU1lc3NhZ2UoZmFsc2UpO1xuICAgIH1cblxuICAgIC8vIFNldCB0aGUgY2xhc3NlcyBvbiB0aGUgZm9ybSBiYXNlZCBvbiB0aGUgY2FwdGlvbnBvc2l0aW9uIGFuZCBjYXB0aW9ud2lkdGggcHJvcGVydGllc1xuICAgIHByaXZhdGUgc2V0TGF5b3V0Q29uZmlnKCkge1xuICAgICAgICBsZXQgbGF5b3V0Q29uZmlnO1xuICAgICAgICBsYXlvdXRDb25maWcgPSBnZXRGaWVsZExheW91dENvbmZpZyh0aGlzLmNhcHRpb253aWR0aCwgdGhpcy5jYXB0aW9ucG9zaXRpb24sIF8uZ2V0KHRoaXMuYXBwLnNlbGVjdGVkVmlld1BvcnQsICdvcycpKTtcbiAgICAgICAgdGhpcy5fd2lkZ2V0Q2xhc3MgPSBsYXlvdXRDb25maWcud2lkZ2V0Q2xzO1xuICAgICAgICB0aGlzLl9jYXB0aW9uQ2xhc3MgPSBsYXlvdXRDb25maWcuY2FwdGlvbkNscztcblxuICAgICAgICAkYXBwRGlnZXN0KCk7XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJGb3JtV2lkZ2V0KHdpZGdldCkge1xuICAgICAgICBjb25zdCBuYW1lID0gd2lkZ2V0Lm5hbWUgfHwgd2lkZ2V0LmtleTtcbiAgICAgICAgdGhpcy5mb3JtV2lkZ2V0c1tuYW1lXSA9IHdpZGdldDtcbiAgICB9XG5cbiAgICByZWdpc3RlckZvcm1GaWVsZHMoZm9ybUZpZWxkKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkQ291bnQgPSB0aGlzLmZvcm1GaWVsZHMucHVzaChmb3JtRmllbGQpO1xuICAgICAgICB0aGlzLmZvcm1maWVsZHNbZm9ybUZpZWxkLmtleV0gPSBmb3JtRmllbGQ7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJGb3JtV2lkZ2V0KGZvcm1GaWVsZCk7XG4gICAgICAgIHRoaXMuX2RlYm91bmNlZFVwZGF0ZUZpZWxkU291cmNlKCk7XG4gICAgICAgIGlmICh0aGlzLnBhcmVudEZvcm0pIHtcbiAgICAgICAgICAgIHRoaXMucGFyZW50Rm9ybS5mb3JtRmllbGRzLnB1c2goZm9ybUZpZWxkKTtcbiAgICAgICAgICAgIHRoaXMucGFyZW50Rm9ybS5mb3JtZmllbGRzW2Zvcm1GaWVsZC5rZXldID0gZm9ybUZpZWxkO1xuICAgICAgICAgICAgLy8gaW5uZXIgZm9ybWZpZWxkcyBhcmUgcHVzaGVkIHRvIHBhcmVudEZvcm0sIHBhc3NpbmcgY3VycmVudCBpbm5lckZvcm0ncyBmb3JtZGF0YSB0byBzZXQgaW5uZXJGb3JtZGF0YSB0byB0aGVzZSBpbm5lckZvcm1GaWVsZHNcbiAgICAgICAgICAgIHRoaXMucGFyZW50Rm9ybS5zZXRGb3JtRGF0YSh0aGlzLnBhcmVudEZvcm0uZm9ybWRhdGEsIHRoaXMuZm9ybUZpZWxkcywgdGhpcy5mb3JtZGF0YSB8fCB7fSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gV01TLTE4OTY3OiBBcHBseWluZyBmb3JtYWRhdGEgYWZ0ZXIgZm9ybWZpZWxkcyBhcmUgcmVhZHlcbiAgICAgICAgaWYgKGZpZWxkQ291bnQgPT09IHRoaXMubnVtYmVyT2ZGaWVsZHMgJiYgIV8uaXNFbXB0eSh0aGlzLmZvcm1kYXRhKSkge1xuICAgICAgICAgICAgdGhpcy5vbkRhdGFTb3VyY2VDaGFuZ2UoKTtcbiAgICAgICAgICAgIF8uaXNBcnJheSh0aGlzLmZvcm1kYXRhKSA/IHRoaXMuc2V0Rm9ybURhdGEoXy5sYXN0KHRoaXMuZm9ybWRhdGEpKSA6IHRoaXMuc2V0Rm9ybURhdGEodGhpcy5mb3JtZGF0YSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZWdpc3RlckFjdGlvbnMoZm9ybUFjdGlvbikge1xuICAgICAgICB0aGlzLmJ1dHRvbkFycmF5LnB1c2goZm9ybUFjdGlvbik7XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIHRoZSBkYXRhb3V0cHV0IHdoZW5ldmVyIHRoZXJlIGlzIGEgY2hhbmdlIGluIGluc2lkZSBmb3JtIHdpZGdldCB2YWx1ZVxuICAgIHVwZGF0ZUZvcm1EYXRhT3V0cHV0KGRhdGFPYmplY3QpIHtcbiAgICAgICAgLy8gU2V0IHRoZSB2YWx1ZXMgb2YgdGhlIHdpZGdldHMgaW5zaWRlIHRoZSBsaXZlIGZvcm0gKG90aGVyIHRoYW4gZm9ybSBmaWVsZHMpIGluIGZvcm0gZGF0YVxuICAgICAgICBfLmZvckVhY2godGhpcy5uZ2Zvcm0udmFsdWUsICh2YWwsIGtleSkgPT4ge1xuICAgICAgICAgICAgaWYgKCFfLmZpbmQodGhpcy5mb3JtRmllbGRzLCB7a2V5fSkpIHtcbiAgICAgICAgICAgICAgICBkYXRhT2JqZWN0W2tleV0gPSB2YWw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmRhdGFvdXRwdXQgPSBkYXRhT2JqZWN0O1xuICAgIH1cblxuICAgIC8vIENvbnN0cnVjdCB0aGUgZGF0YSBvYmplY3QgbWVyZ2luZyB0aGUgZm9ybSBmaWVsZHMgYW5kIGN1c3RvbSB3aWRnZXRzIGRhdGFcbiAgICBjb25zdHJ1Y3REYXRhT2JqZWN0KCkge1xuICAgICAgICBjb25zdCBmb3JtRGF0YSAgICAgPSB7fTtcbiAgICAgICAgY29uc3QgZm9ybUZpZWxkcyA9IHRoaXMuZ2V0Rm9ybUZpZWxkcygpO1xuICAgICAgICAvLyBHZXQgYWxsIGZvcm0gZmllbGRzIGFuZCBwcmVwYXJlIGZvcm0gZGF0YSBhcyBrZXkgdmFsdWUgcGFpcnNcbiAgICAgICAgZm9ybUZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgICAgICAgIGxldCBmaWVsZE5hbWUsXG4gICAgICAgICAgICAgICAgZmllbGRWYWx1ZTtcbiAgICAgICAgICAgIGZpZWxkVmFsdWUgPSBmaWVsZC5kYXRhdmFsdWUgfHwgZmllbGQuX2NvbnRyb2wudmFsdWU7XG4gICAgICAgICAgICBmaWVsZFZhbHVlID0gKGZpZWxkVmFsdWUgPT09IG51bGwgfHwgZmllbGRWYWx1ZSA9PT0gJycpID8gdW5kZWZpbmVkIDogZmllbGRWYWx1ZTtcblxuICAgICAgICAgICAgaWYgKGZpZWxkLnR5cGUgPT09ICdmaWxlJykge1xuICAgICAgICAgICAgICAgIGZpZWxkVmFsdWUgPSBnZXRGaWxlcyh0aGlzLm5hbWUsIGZpZWxkLmtleSArICdfZm9ybVdpZGdldCcsIGZpZWxkLm11bHRpcGxlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZmllbGROYW1lID0gZmllbGQua2V5IHx8IGZpZWxkLnRhcmdldCB8fCBmaWVsZC5uYW1lO1xuXG4gICAgICAgICAgICAvLyBvbiBjdXJyZW50IEZvcm0sIHdoZW4gZmllbGQgaXMgaW5uZXJGb3JtIGZpZWxkIHRoZW4gd2UgZ3JvdXAgdGhlc2UgZmllbGRzIHVuZGVyIG5ldyBvYmplY3QgdXNpbmcgZm9ybUdyb3VwTmFtZSBhcyBrZXlcbiAgICAgICAgICAgIC8vIEZvciBzdXBwb3NlLCBhcHBsaWNhbnROYW1lLCBhcHBsaWNhbnRJRCBhcmUgZm9ybWZpZWxkcyBpbiBjdXJyZW50Rm9ybVxuICAgICAgICAgICAgLy8gVGhpcyBmb3JtIGlzIGhhdmluZyBpbm5lcmZvcm0gaS5lLiBhZGRyZXNzLCB0aGVzZSBmaWVsZHMgYXJlIGxpc3RlZCBhc1xuICAgICAgICAgICAgLy8ge1wiYXBwbGljYW50TmFtZVwiOiBcIlwiLCBcImFwcGxpY2FudElEXCI6IFwiXCIsIFwiYWRkcmVzc1wiOiB7XCJzdHJlZXRcIjogXCJcIn19XG4gICAgICAgICAgICBpZiAoZmllbGQuZm9ybS53aWRnZXRJZCAhPT0gdGhpcy53aWRnZXRJZCAmJiBmaWVsZC5mb3JtLmZvcm1Hcm91cE5hbWUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmZCA9IF8uZ2V0KGZvcm1EYXRhLCBmaWVsZC5mb3JtLmZvcm1Hcm91cE5hbWUsIHt9KTtcbiAgICAgICAgICAgICAgICBmZFtmaWVsZE5hbWVdID0gZmllbGRWYWx1ZTtcbiAgICAgICAgICAgICAgICBfLnNldChmb3JtRGF0YSwgZmllbGQuZm9ybS5mb3JtR3JvdXBOYW1lLCBmZCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucGFyZW50Rm9ybSAmJiB0aGlzLnBhcmVudEZvcm0ubmdmb3JtICYmIGZpZWxkLmZvcm0uaXNQYXJlbnRMaXN0KSB7IC8vIEZpeCBmb3IgW1dNUy0yNTgwNl06IHVzZSBmb3JtQXJyYXlJbmRleCBvbmx5IGlmIGZvcm0gaGFzIGEgcGFyZW50IGZvcm1cbiAgICAgICAgICAgICAgICAvLyBzZXR0aW5nIGZvcm1kYXRhIGJhc2VkIG9uIGZvcm1BcnJheUluZGV4XG4gICAgICAgICAgICAgICAgY29uc3QgZmQgPSBfLmdldChmb3JtRGF0YSwgZmllbGQuZm9ybS5wYXJlbnRMaXN0Lm5hbWUsIFtdKTtcbiAgICAgICAgICAgICAgICBmZFtmaWVsZC5mb3JtLmZvcm1BcnJheUluZGV4XSA9IGZkW2ZpZWxkLmZvcm0uZm9ybUFycmF5SW5kZXhdIHx8IHt9O1xuICAgICAgICAgICAgICAgIGZkW2ZpZWxkLmZvcm0uZm9ybUFycmF5SW5kZXhdW2ZpZWxkTmFtZV0gPSBmaWVsZFZhbHVlO1xuICAgICAgICAgICAgICAgIF8uc2V0KGZvcm1EYXRhLCBmaWVsZC5mb3JtLnBhcmVudExpc3QubmFtZSwgZmQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBJbiBjYXNlIG9mIHVwZGF0ZSB0aGUgZmllbGQgd2lsbCBiZSBhbHJlYWR5IHByZXNlbnQgaW4gZm9ybSBkYXRhXG4gICAgICAgICAgICAgICAgXy5zZXQoZm9ybURhdGEsIGZpZWxkTmFtZSwgZmllbGRWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnVwZGF0ZUZvcm1EYXRhT3V0cHV0KGZvcm1EYXRhKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YW91dHB1dDtcbiAgICB9XG5cbiAgICB1cGRhdGVEYXRhT3V0cHV0KCkge1xuICAgICAgICB0aGlzLmNvbnN0cnVjdERhdGFPYmplY3QoKTtcbiAgICAgICAgaWYgKHRoaXMubmdmb3JtLnRvdWNoZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0VmFsaWRhdGlvbk1zZ3ModHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBGb3JtRmllbGRzIHdpbGwgY29udGFpbiBhbGwgdGhlIGZpZWxkcyBpbiBwYXJlbnQgYW5kIGlubmVyIGZvcm0gYWxzby5cbiAgICAvLyBUaGlzIHJldHVybnMgdGhlIGZvcm1GaWVsZHMgaW4gdGhlIGZvcm0gYmFzZWQgb24gdGhlIGZvcm0gbmFtZS5cbiAgICBnZXRGb3JtRmllbGRzKCkge1xuICAgICAgICByZXR1cm4gXy5maWx0ZXIodGhpcy5mb3JtRmllbGRzLCBmb3JtRmllbGQgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGZvcm1GaWVsZC5mb3JtLm5hbWUgPT09IHRoaXMubmFtZTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc2V0RmllbGRWYWx1ZShmaWVsZCwgZGF0YSwgaW5uZXJGb3JtZGF0YT8pIHtcbiAgICAgICAgY29uc3Qga2V5ID0gZmllbGQua2V5IHx8IGZpZWxkLm5hbWU7XG4gICAgICAgIC8vIGlmIGN1c3RvbWZpZWxkIHBhcmFtIHZhbHVlIGlzIG5vdCBpbiB0aGUgZm9ybWRhdGEgdGhlbiBkbyBub3QgYXNzaWduIGZpZWxkIHZhbHVlXG4gICAgICAgIC8vIGFzIGl0IGNhbiBjb250YWluIGRlZmF1bHQgdmFsdWUgd2hpY2ggd2lsbCBhZ2FpbiBiZSBvdmVycmlkZGVuIGJ5IHVuZGVmaW5lZC5cbiAgICAgICAgY29uc3QgZmQgPSBpbm5lckZvcm1kYXRhID8gaW5uZXJGb3JtZGF0YSA6IGRhdGE7XG4gICAgICAgIGlmIChmZCkge1xuICAgICAgICAgICAgaWYgKGZkLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICAgICAgICBmaWVsZC52YWx1ZSA9ICBfLmdldChmZCwga2V5KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXy5pbmNsdWRlcyhrZXksICcuJykpIHtcbiAgICAgICAgICAgICAgICAvLyBrZXkgY29udGFpbnMgJy4nIHdoZW4gbWFwcGluZyB0aGUgZmllbGRzIHRvIGNoaWxkIHJlZmVyZW5jZSBpLmUuIGNoaWxkQ29sIGlzIGhhdmluZyBrZXkgYXMgXCJwYXJlbnQuY2hpbGRDb2xcIlxuICAgICAgICAgICAgICAgIGlmIChmZC5oYXNPd25Qcm9wZXJ0eShfLnNwbGl0KGtleSwgJy4nKVswXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZmllbGQudmFsdWUgPSAgXy5nZXQoZmQsIGtleSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gV01TLTE4OTA2OiBGb3IgZGVmYXVsdCB2YWx1ZSwgZG8gbm90IG1hcmsgdGhlIGZvcm0gYXMgZGlydHkuXG4gICAgICAgICAgICBpZiAodGhpcy5kaXJ0eSAmJiAhdGhpcy5fdHJpZ2dlcmVkQnlVc2VyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tYXJrQXNQcmlzdGluZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZvcm1Hcm91cE5hbWUgPSBmaWVsZC5mb3JtLmZvcm1Hcm91cE5hbWU7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBpZiBmb3JtR3JvdXBOYW1lIGlzIGRlZmluZWQgd2hpY2ggbWVhbnMgZmllbGQgaXMgaW5zaWRlIHRoZSBpbm5lciBmb3JtXG4gICAgICAgICAqIHRoZW4gc2V0IHRoZSBmb3JtZGF0YSBvbiB0aGUgZmllbGQncyBmb3JtIHVzaW5nIGZvcm1Hcm91cE5hbWVcbiAgICAgICAgICovXG4gICAgICAgIGlmIChmb3JtR3JvdXBOYW1lICYmIF8uZ2V0KGRhdGEsIGZvcm1Hcm91cE5hbWUpKSB7XG4gICAgICAgICAgICB0aGlzLnNldEZvcm1EYXRhLmNhbGwoZmllbGQuZm9ybSwgZGF0YVtmb3JtR3JvdXBOYW1lXSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgZm9ybWRhdGEgaXMgYXNzaWduZWQgbGF0ZXIgdGhlbiBvbiBwcm9wZXJ0eUNoYW5nZUhhbmRsZXIsIGV2ZW4gaW5uZXIgZm9ybXMgZGF0YSBhbHNvIG5lZWRzIHRvIGJlIHVwZGF0ZWQuXG4gICAgICAgIGlmIChfLmdldChmaWVsZC5mb3JtLCAncGFyZW50Rm9ybUFycmF5JykpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0Rm9ybURhdGFGcm9tUGFyZW50Rm9ybURhdGEuY2FsbChmaWVsZC5mb3JtLCBkYXRhKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNldEZvcm1EYXRhKGRhdGEsIGlubmVyRm9ybUZpZWxkcz8sIGlubmVyRm9ybWRhdGE/KSB7XG4gICAgICAgIC8vIHdoZXJlYXMgZm9ybUZpZWxkcyBleHBsaWNpdGx5IHBhc3NlZCBjYW4gY29udGFpbiBpbm5lcmZvcm0gZmllbGRzIGFsc28uXG4gICAgICAgIGNvbnN0IGZvcm1GaWVsZHMgPSBpbm5lckZvcm1GaWVsZHMgfHwgdGhpcy5mb3JtRmllbGRzO1xuICAgICAgICBmb3JtRmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXRGaWVsZFZhbHVlKGZpZWxkLCBkYXRhLCBpbm5lckZvcm1kYXRhKTtcbiAgICAgICAgICAgIGlmIChmaWVsZC5maWVsZFZhbGlkYXRpb25zKSB7XG4gICAgICAgICAgICAgICAgZmllbGQuZmllbGRWYWxpZGF0aW9ucy5zZXRDdXN0b21WYWxpZGF0aW9uTWVzc2FnZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jb25zdHJ1Y3REYXRhT2JqZWN0KCk7XG4gICAgfVxuXG4gICAgcmVzZXRGb3JtU3RhdGUoKSB7XG4gICAgICAgIC8vIGNsZWFyaW5nIHRoZSB2YWxpZGF0aW9uTWVzc2FnZXMgb24gcmVzZXQuXG4gICAgICAgIGlmICh0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzID0gW107XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLm5nZm9ybSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubmdmb3JtLm1hcmtBc1VudG91Y2hlZCgpO1xuICAgICAgICB0aGlzLm5nZm9ybS5tYXJrQXNQcmlzdGluZSgpO1xuICAgIH1cblxuICAgIHJlc2V0KCkge1xuICAgICAgICB0aGlzLnJlc2V0Rm9ybVN0YXRlKCk7XG4gICAgICAgIHRoaXMuZm9ybUZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgICAgICAgIGZpZWxkLnZhbHVlID0gJyc7XG4gICAgICAgICAgICBpZiAoZmllbGQud2lkZ2V0dHlwZSA9PT0gJ3VwbG9hZCcgfHwgZmllbGQudHlwZSA9PT0gRGF0YVR5cGUuQkxPQikge1xuICAgICAgICAgICAgICAgIHRoaXMucmVzZXRGaWxlVXBsb2FkV2lkZ2V0KGZpZWxkLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpZWxkLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignaW5wdXQnKT8ucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWludmFsaWQnKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuY29uc3RydWN0RGF0YU9iamVjdCgpO1xuICAgICAgICB0aGlzLmNsZWFyTWVzc2FnZSgpO1xuICAgIH1cblxuICAgIHNhdmVQcmV2Zm9ybUZpZWxkcygpIHtcbiAgICAgICAgdGhpcy5wcmV2Zm9ybUZpZWxkcyA9IGdldENsb25lZE9iamVjdCh0aGlzLmZvcm1GaWVsZHMubWFwKGZpZWxkID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgJ2tleSc6IGZpZWxkLmtleSxcbiAgICAgICAgICAgICAgICAndHlwZSc6IGZpZWxkLnR5cGUsXG4gICAgICAgICAgICAgICAgJ3dpZGdldHR5cGUnOiBmaWVsZC53aWRnZXR0eXBlLFxuICAgICAgICAgICAgICAgICdvdXRwdXRmb3JtYXQnOiBmaWVsZC5vdXRwdXRmb3JtYXQsXG4gICAgICAgICAgICAgICAgJ3ZhbHVlJzogZmllbGQudmFsdWVcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBzYXZlUHJldkRhdGFWYWx1ZXMoKSB7XG4gICAgICAgIHRoaXMucHJldkRhdGFWYWx1ZXMgPSB0aGlzLmZvcm1GaWVsZHMubWFwKChvYmopID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7J2tleSc6IG9iai5rZXksICd2YWx1ZSc6IG9iai52YWx1ZX07XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHNldFJlYWRvbmx5RmllbGRzKCkge1xuICAgICAgICB0aGlzLmZvcm1GaWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICAgICAgICBmaWVsZC5zZXRSZWFkT25seVN0YXRlKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJlc2V0RmlsZVVwbG9hZFdpZGdldChmaWVsZCwgc2tpcFZhbHVlU2V0Pykge1xuICAgICAgICBjb25zdCAkZm9ybUVsZSA9IHRoaXMuJGVsZW1lbnQ7XG4gICAgICAgICRmb3JtRWxlLmZpbmQoJ1tuYW1lPVwiJyArIGZpZWxkLmtleSArICdfZm9ybVdpZGdldFwiXScpLnZhbCgnJyk7XG4gICAgICAgIGZpZWxkLl9jb250cm9sLnJlc2V0KCk7XG4gICAgICAgIGlmICghc2tpcFZhbHVlU2V0KSB7XG4gICAgICAgICAgICBmaWVsZC5ocmVmID0gJyc7XG4gICAgICAgICAgICBmaWVsZC52YWx1ZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBlbXB0eURhdGFNb2RlbCgpIHtcbiAgICAgICAgdGhpcy5mb3JtRmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgICAgICAgaWYgKGlzRGVmaW5lZChmaWVsZCkpIHtcbiAgICAgICAgICAgICAgICBpZiAoZmllbGQudHlwZSA9PT0gRGF0YVR5cGUuQkxPQikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc2V0RmlsZVVwbG9hZFdpZGdldChmaWVsZCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZmllbGQuZGF0YXZhbHVlID0gJyc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzZXREZWZhdWx0VmFsdWVzKCkge1xuICAgICAgICB0aGlzLmZvcm1GaWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICAgICAgICB0aGlzLm9uRmllbGREZWZhdWx0VmFsdWVDaGFuZ2UoZmllbGQsIGZpZWxkLmRlZmF1bHR2YWx1ZSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHNldE9wZXJhdGlvblR5cGUobW9kZSkge1xuICAgICAgICB0aGlzLm9wZXJhdGlvblR5cGUgPSBtb2RlIHx8ICdpbnNlcnQnO1xuICAgIH1cblxuICAgIG5ldygpIHtcbiAgICAgICAgdGhpcy5yZXNldEZvcm1TdGF0ZSgpO1xuICAgICAgICB0aGlzLm9wZXJhdGlvblR5cGUgPSBMaXZlX09wZXJhdGlvbnMuSU5TRVJUO1xuICAgICAgICB0aGlzLmNsZWFyTWVzc2FnZSgpO1xuICAgICAgICBpZiAodGhpcy5pc1NlbGVjdGVkKSB7XG4gICAgICAgICAgICB0aGlzLnNhdmVQcmV2Zm9ybUZpZWxkcygpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZW1wdHlEYXRhTW9kZWwoKTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldERlZmF1bHRWYWx1ZXMoKTtcbiAgICAgICAgICAgIHRoaXMuc2F2ZVByZXZEYXRhVmFsdWVzKCk7XG4gICAgICAgICAgICB0aGlzLmNvbnN0cnVjdERhdGFPYmplY3QoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuaXNVcGRhdGVNb2RlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBlZGl0KCkge1xuICAgICAgICB0aGlzLnJlc2V0Rm9ybVN0YXRlKCk7XG4gICAgICAgIHRoaXMuY2xlYXJNZXNzYWdlKCk7XG5cbiAgICAgICAgdGhpcy5vcGVyYXRpb25UeXBlID0gTGl2ZV9PcGVyYXRpb25zLlVQREFURTtcblxuICAgICAgICBpZiAodGhpcy5pc1NlbGVjdGVkKSB7XG4gICAgICAgICAgICB0aGlzLnNhdmVQcmV2Zm9ybUZpZWxkcygpO1xuICAgICAgICAgICAgdGhpcy5zYXZlUHJldkRhdGFWYWx1ZXMoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnByZXZEYXRhT2JqZWN0ID0gZ2V0Q2xvbmVkT2JqZWN0KHRoaXMuZm9ybWRhdGEgfHwge30pO1xuXG4gICAgICAgIHRoaXMuc2V0UmVhZG9ubHlGaWVsZHMoKTtcbiAgICAgICAgdGhpcy5pc1VwZGF0ZU1vZGUgPSB0cnVlO1xuXG4gICAgICAgICRhcHBEaWdlc3QoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHRyaWdnZXJXTUV2ZW50KGV2ZW50TmFtZSkge1xuICAgICAgICBjb25zdCB0YWJsZUlkID0gdGhpcy5uYXRpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgnZGVwZW5kc29udGFibGUnKTtcbiAgICAgICAgaWYgKCF0YWJsZUlkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgJGludm9rZVdhdGNoZXJzKHRydWUpO1xuICAgICAgICB0aGlzLmFwcC5ub3RpZnkoJ3dtLWV2ZW50Jywge2V2ZW50TmFtZSwgd2lkZ2V0TmFtZTogdGFibGVJZH0pO1xuICAgIH1cblxuICAgIHN1Ym1pdEZvcm0oJGV2ZW50KSB7XG4gICAgICAgIGxldCB0ZW1wbGF0ZSwgZm9ybURhdGEsIHJlc3VsdDtcbiAgICAgICAgY29uc3QgZGF0YVNvdXJjZSA9IHRoaXMuZGF0YXNvdXJjZTtcbiAgICAgICAgLy8gRGlzYWJsZSB0aGUgZm9ybSBzdWJtaXQgaWYgZm9ybSBpcyBpbiBpbnZhbGlkIHN0YXRlLlxuICAgICAgICBpZiAodGhpcy52YWxpZGF0ZUZpZWxkc09uU3VibWl0KCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvcm1EYXRhID0gZ2V0Q2xvbmVkT2JqZWN0KHRoaXMuY29uc3RydWN0RGF0YU9iamVjdCgpKTtcblxuICAgICAgICBjb25zdCBnZXRQYXJhbXMgPSAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4geyRldmVudCwgJGZvcm1EYXRhOiBmb3JtRGF0YSwgJGRhdGE6IGZvcm1EYXRhfTtcbiAgICAgICAgfTtcblxuXG4gICAgICAgIGlmICh0aGlzLm9uQmVmb3JlU3VibWl0RXZ0KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdiZWZvcmVzdWJtaXQnLCBnZXRQYXJhbXMoKSkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc2V0Rm9ybVN0YXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlc2V0Rm9ybVN0YXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5vblN1Ym1pdEV2dCB8fCBkYXRhU291cmNlKSB7XG4gICAgICAgICAgICAvLyBJZiBvbiBzdWJtaXQgaXMgdGhlcmUgZXhlY3V0ZSBpdCBhbmQgaWYgaXQgcmV0dXJucyB0cnVlIGRvIHNlcnZpY2UgdmFyaWFibGUgaW52b2tlIGVsc2UgcmV0dXJuXG4gICAgICAgICAgICAvLyBJZiBpdHMgYSBzZXJ2aWNlIHZhcmlhYmxlIGNhbGwgc2V0SW5wdXQgYW5kIGFzc2lnbiBmb3JtIGRhdGEgYW5kIGludm9rZSB0aGUgc2VydmljZVxuICAgICAgICAgICAgaWYgKGRhdGFTb3VyY2UpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50UGFnZU51bSA9IGRhdGFTb3VyY2UucGFnaW5hdGlvbiAmJiBkYXRhU291cmNlLnBhZ2luYXRpb24ubnVtYmVyICsgMTtcbiAgICAgICAgICAgICAgICBjb25zdCBvcGVyYXRpb25UeXBlID0gdGhpcy5vcGVyYXRpb25UeXBlID8gdGhpcy5vcGVyYXRpb25UeXBlIDogJ2luc2VydCc7XG4gICAgICAgICAgICAgICAgcGVyZm9ybURhdGFPcGVyYXRpb24oZGF0YVNvdXJjZSwgZm9ybURhdGEsIHtvcGVyYXRpb25UeXBlOiBvcGVyYXRpb25UeXBlfSlcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhU291cmNlLmNhdGVnb3J5ID09PSAnd20uQ3J1ZFZhcmlhYmxlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlcldNRXZlbnQoJ3Jlc2V0RWRpdE1vZGUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFzb3VyY2UuZXhlY3V0ZShEYXRhU291cmNlLk9wZXJhdGlvbi5MSVNUX1JFQ09SRFMsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NraXBUb2dnbGVTdGF0ZSc6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvcGVyYXRpb24nOiAnbGlzdCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYWdlJzogY3VycmVudFBhZ2VOdW0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwcmV2ZW50TWlzc2luZ09wTXNnJzogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmRpYWxvZ0lkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VEaWFsb2coKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNEZWZpbmVkKGRhdGEuYm9keSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBnZXRWYWxpZEpTT04oZGF0YS5ib2R5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBpc0RlZmluZWQocmVzdWx0KSA/IHJlc3VsdCA6IGRhdGEuYm9keTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Jlc3VsdCc6IHJlc3VsdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3RhdHVzJzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWVzc2FnZSc6IHRoaXMucG9zdG1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3R5cGUnOiAnc3VjY2VzcydcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH0sIChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGUgPSB0aGlzLmVycm9ybWVzc2FnZSB8fCBlcnJvci5lcnJvciB8fCBlcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICRhcHBEaWdlc3QoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Jlc3VsdCc6IF8uZ2V0KGVycm9yLCAnZXJyb3InKSB8fCBlcnJvcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3RhdHVzJzogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21lc3NhZ2UnOiB0ZW1wbGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAndHlwZSc6ICdlcnJvcidcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH0pLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoKHJlc3BvbnNlLnR5cGUgPT09ICdlcnJvcicgJiYgIXRoaXMub25FcnJvcikgfHwgKHJlc3BvbnNlLnR5cGUgPT09ICdzdWNjZXNzJyAmJiAhdGhpcy5vblN1Y2Nlc3MpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvZ2dsZU1lc3NhZ2UodHJ1ZSwgcmVzcG9uc2UubWVzc2FnZSwgcmVzcG9uc2UudHlwZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdzdWJtaXQnLCBnZXRQYXJhbXMoKSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25SZXN1bHRDYihyZXNwb25zZS5yZXN1bHQsIHJlc3BvbnNlLnN0YXR1cywgJGV2ZW50KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdzdWJtaXQnLCBnZXRQYXJhbXMoKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5vblJlc3VsdENiKHt9LCB0cnVlLCAkZXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5vblJlc3VsdENiKHt9LCB0cnVlLCAkZXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xvc2VEaWFsb2coKSB7XG4gICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5jbG9zZSh0aGlzLmRpYWxvZ0lkKTtcbiAgICB9XG5cbiAgICAvLyBNZXRob2QgdG8gc2hvdy9oaWRlIHRoZSBwYW5lbCBoZWFkZXIgb3IgZm9vdGVyIGJhc2VkIG9uIHRoZSBidXR0b25zXG4gICAgc2hvd0J1dHRvbnMocG9zaXRpb24pIHtcbiAgICAgICAgcmV0dXJuIF8uc29tZSh0aGlzLmJ1dHRvbkFycmF5LCBidG4gPT4ge1xuICAgICAgICAgICAgcmV0dXJuIF8uaW5jbHVkZXMoYnRuLnBvc2l0aW9uLCBwb3NpdGlvbikgJiYgYnRuLnVwZGF0ZU1vZGUgPT09IHRoaXMuaXNVcGRhdGVNb2RlO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBFeHBhbmQgb3IgY29sbGFwc2UgdGhlIHBhbmVsXG4gICAgZXhwYW5kQ29sbGFwc2VQYW5lbCgpIHtcbiAgICAgICAgaWYgKHRoaXMuY29sbGFwc2libGUpIHtcbiAgICAgICAgICAgIC8vIGZsaXAgdGhlIGFjdGl2ZSBmbGFnXG4gICAgICAgICAgICB0aGlzLmV4cGFuZGVkID0gIXRoaXMuZXhwYW5kZWQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkRhdGFTb3VyY2VVcGRhdGUocmVzcG9uc2UsIG5ld0Zvcm0sIHVwZGF0ZU1vZGUpIHtcbiAgICAgICAgaWYgKG5ld0Zvcm0pIHtcbiAgICAgICAgICAgIHRoaXMubmV3KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNldEZvcm1EYXRhKHJlc3BvbnNlKTtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VEaWFsb2coKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlzVXBkYXRlTW9kZSA9IGlzRGVmaW5lZCh1cGRhdGVNb2RlKSA/IHVwZGF0ZU1vZGUgOiB0cnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIHRyYW52ZXJzZXMgdGhyb3VnaCB0aGUgcGFyZW50IGNvbnRhaW5pbmcgZm9ybWRhdGEgYW5kIHJldHVybnMgdGhlIHBhcmVudCBmb3JtZGF0YS5cbiAgICAgKiBAcGFyYW0gZm9ybSwgcmVwcmVzZW50cyB0aGUgY3VycmVudCBmb3JtIGluc3RhbmNlXG4gICAgICogQHJldHVybnMge2FueX1cbiAgICAgKi9cbiAgICBnZXROZWFyZXN0UGFyZW50Rm9ybURhdGEoZm9ybSkge1xuICAgICAgICBpZiAoIWZvcm0ucGFyZW50Rm9ybSkge1xuICAgICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICB9XG4gICAgICAgIGlmICghZm9ybS5iaW5kZm9ybWRhdGEgJiYgXy5nZXQoZm9ybS5wYXJlbnRGb3JtLCAnZm9ybWRhdGEnKSAmJiAhXy5pc0VtcHR5KGZvcm0ucGFyZW50Rm9ybS5mb3JtZGF0YSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmb3JtLnBhcmVudEZvcm0uZm9ybWRhdGE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TmVhcmVzdFBhcmVudEZvcm1EYXRhKGZvcm0ucGFyZW50Rm9ybSk7XG4gICAgfVxuXG4gICAgc2V0Rm9ybURhdGFGcm9tUGFyZW50Rm9ybURhdGEoZm9ybWRhdGE6IGFueSkge1xuICAgICAgICBpZiAoXy5pc0VtcHR5KHRoaXMuZm9ybWRhdGEpICYmIHRoaXMucGFyZW50Rm9ybSAmJiBmb3JtZGF0YSkge1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBJZiBmb3JtIGlzIGluc2lkZSBsaXN0LFxuICAgICAgICAgICAgICogMS4gZGlyZWN0bHkgYXBwbHlpbmcgdGhlIGZvcm1kYXRhIHRvIHRoZSBmb3JtQXJyYXkgdG8gdXBkYXRlIHRoZSBmb3JtZGF0YSBvbiBsaXN0IG9mIGZvcm1zIHVzaW5nIHBhdGNoVmFsdWUuXG4gICAgICAgICAgICAgKiAyLiBhbmQgYWxzbyBzZXR0aW5nIGluZGl2aWR1YWwgZm9ybWRhdGEgdG8gdGhlIGZvcm0gaW5zaWRlIGVhY2ggaXRlbSBiYXNlZCBvbiBmb3JtQXJyYXlJbmRleCwgd2hlbiBmb3JtIGlzIG5vdCBib3VuZCB0byBmb3JtZGF0YS5cbiAgICAgICAgICAgICAqIDMuIGV4cGxpY2l0bHkgaW52b2tpbmcgZm9ybWRhdGEgYXMgZm9ybUZpZWxkcyB3aWxsIGNvbnRhaW4gYWxsIHRoZSBmb3JtZmllbGRzIGluY2x1ZGluZyBpbm5lckZvcm0ncyBmaWVsZHNcbiAgICAgICAgICAgICAqIChpZiB3ZSBkbyBub3QgaW52b2tlIGV4cGxpY2l0bHkgdGhlbiBmb3JtRmllbGRzIHdpbGwganVzdCBjb250YWluIHRoZSBmaWVsZHMgaW5zaWRlIGN1cnJlbnQgZm9ybSBhbmQgbm90IGlubmVyIGZvcm0gZmllbGRzKVxuICAgICAgICAgICAgICogNC4gaWYgY2hpbGRGb3JtQXJyYXlEYXRhIGlzIG5vdCBhdmFpbGFibGUgd2Ugd2lsbCBjaGVjayBmb3IgaW5uZXIgZm9ybSBkYXRhIHVzaW5nIFwiZm9ybUdyb3VwTmFtZVwiIGFuZCB3aWxsIHNldCB0aGUgaW5uZXJmb3JtIGRhdGFcbiAgICAgICAgICAgICAqIElmIG5vdCBpbnNpZGUgbGlzdCwganVzdCBzZXQgdGhlIGZvcm1kYXRhIG9uIGFsbCB0aGUgZm9ybWZpZWxkcyBpbmNsdWRpbmcgaW5uZXJGb3JtIGZpZWxkc1xuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBpZiAodGhpcy5wYXJlbnRGb3JtQXJyYXkpIHtcbiAgICAgICAgICAgICAgICBsZXQgY2hpbGRGb3JtQXJyYXlEYXRhID0gXy5nZXQoZm9ybWRhdGEsIHRoaXMucGFyZW50TGlzdC5uYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAoY2hpbGRGb3JtQXJyYXlEYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghXy5pc0FycmF5KGNoaWxkRm9ybUFycmF5RGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkRm9ybUFycmF5RGF0YSA9IFtjaGlsZEZvcm1BcnJheURhdGFdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGFyZW50Rm9ybUFycmF5LnBhdGNoVmFsdWUoY2hpbGRGb3JtQXJyYXlEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmJpbmRmb3JtZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtZGF0YSA9IGNoaWxkRm9ybUFycmF5RGF0YVt0aGlzLmZvcm1BcnJheUluZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEZvcm1EYXRhKHRoaXMuZm9ybWRhdGEpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc1BhcmVudExpc3QgJiYgdGhpcy5wYXJlbnRGb3JtLmZvcm1Hcm91cE5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyZW50Rm9ybURhdGEgPSBfLmdldChmb3JtZGF0YSwgdGhpcy5wYXJlbnRGb3JtLmZvcm1Hcm91cE5hbWUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEZvcm1EYXRhRnJvbVBhcmVudEZvcm1EYXRhKHBhcmVudEZvcm1EYXRhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0Rm9ybURhdGEoZm9ybWRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gT24gZm9ybSBkYXRhIHNvdXJjZSBjaGFuZ2UuIFRoaXMgbWV0aG9kIGlzIG92ZXJyaWRkZW4gYnkgbGl2ZSBmb3JtIGFuZCBsaXZlIGZpbHRlclxuICAgIG9uRGF0YVNvdXJjZUNoYW5nZSgpIHtcbiAgICAgICAgaWYgKF8uZ2V0KHRoaXMuZm9ybUZpZWxkcywgJ2xlbmd0aCcpICYmICF0aGlzLmJpbmRmb3JtZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5pc0RhdGFTb3VyY2VVcGRhdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogZm9ybWRhdGEgb24gdGhlIHBhcmVudCBmb3JtIHdpbGwgYmUgc2V0IGJlZm9yZSB0aGUgaW5uZXIgZm9ybXMgYXJlIHJlbmRlcmVkLlxuICAgICAgICAgICAgICogSGVuY2UgaGFuZGxpbmcgZm9ybWRhdGEgb24gdGhlIGlubmVyRm9ybXMsIHdoaWNoIG1pZ2h0IGJlIHJlbmRlcmVkIHNsb3dseSAoc3VwcG9zZSBwcmVmYWIgd2l0aCBmb3JtKVxuICAgICAgICAgICAgICogc2V0dGluZyBpbm5lciBmb3JtJ3MgZm9ybWRhdGEgb2J0YWluZWQgZnJvbSBwYXJlbnQgZm9ybWRhdGFcbiAgICAgICAgICAgICAqIHRoaXMgYXBwbGllcyBvbmx5IHdoZW4gZm9ybWRhdGEgaXMgbm90IGdpdmVuIG9uIHRoZSBpbm5lciBmb3JtLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBjb25zdCBmb3JtZGF0YSA9IHRoaXMuZ2V0TmVhcmVzdFBhcmVudEZvcm1EYXRhKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5zZXRGb3JtRGF0YUZyb21QYXJlbnRGb3JtRGF0YShmb3JtZGF0YSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBPbiBmb3JtIGRhdGEgc291cmNlIGNoYW5nZS4gVGhpcyBtZXRob2QgaXMgb3ZlcnJpZGRlbiBieSBsaXZlIGZvcm0gYW5kIGxpdmUgZmlsdGVyXG4gICAgb25Gb3JtRGF0YVNvdXJjZUNoYW5nZSgpIHtcbiAgICAgICAgdGhpcy51cGRhdGVGaWVsZFNvdXJjZSgpO1xuICAgIH1cblxuICAgIC8vIE9uIGZvcm0gZmllbGQgZGVmYXVsdCB2YWx1ZSBjaGFuZ2UuIFRoaXMgbWV0aG9kIGlzIG92ZXJyaWRkZW4gYnkgbGl2ZSBmb3JtIGFuZCBsaXZlIGZpbHRlclxuICAgIG9uRmllbGREZWZhdWx0VmFsdWVDaGFuZ2UoZmllbGQsIG52KSB7XG4gICAgICAgIGZpZWxkLnZhbHVlID0gcGFyc2VWYWx1ZUJ5VHlwZShudiwgdW5kZWZpbmVkLCBmaWVsZC53aWRnZXR0eXBlLCBmaWVsZC50cmFpbGluZ3plcm8pO1xuICAgICAgICAvLyBXTVMtMjI0MzQ6IEZvciBkZWZhdWx0IHZhbHVlIHNldCBvbiBpbmRpdmlkdWFsIGZvcm0gZmllbGRzLCBkbyBub3QgbWFyayB0aGUgZm9ybSBhcyBkaXJ0eS5cbiAgICAgICAgaWYgKHRoaXMuZGlydHkgJiYgIXRoaXMuX3RyaWdnZXJlZEJ5VXNlcikge1xuICAgICAgICAgICAgdGhpcy5tYXJrQXNQcmlzdGluZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gT24gZm9ybSBmaWVsZCB2YWx1ZSBjaGFuZ2UuIFRoaXMgbWV0aG9kIGlzIG92ZXJyaWRkZW4gYnkgbGl2ZSBmb3JtIGFuZCBsaXZlIGZpbHRlclxuICAgIG9uRmllbGRWYWx1ZUNoYW5nZSgpIHtcbiAgICB9XG5cbiAgICAvLyBGdW5jdGlvbiB0byBnZW5lcmF0ZSBhbmQgY29tcGlsZSB0aGUgZm9ybSBmaWVsZHMgZnJvbSB0aGUgbWV0YWRhdGFcbiAgICBhc3luYyBnZW5lcmF0ZUZvcm1GaWVsZHMoKSB7XG4gICAgICAgIGxldCBub09mQ29sdW1ucztcbiAgICAgICAgbGV0ICRncmlkTGF5b3V0O1xuICAgICAgICAvLyBDaGVjayBpZiBncmlkIGxheW91dCBpcyBwcmVzZW50IG9yIG5vdCBmb3IgZmlyc3QgdGltZVxuICAgICAgICBpZiAoXy5pc1VuZGVmaW5lZCh0aGlzLl9pc0dyaWRMYXlvdXRQcmVzZW50KSkge1xuICAgICAgICAgICAgdGhpcy5faXNHcmlkTGF5b3V0UHJlc2VudCA9IHRoaXMuJGVsZW1lbnQuZmluZCgnLnBhbmVsLWJvZHkgW3dtbGF5b3V0Z3JpZF0nKS5sZW5ndGggPiAwO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9pc0dyaWRMYXlvdXRQcmVzZW50KSB7XG4gICAgICAgICAgICAkZ3JpZExheW91dCA9IHRoaXMuJGVsZW1lbnQuZmluZCgnLmZvcm0tZWxlbWVudHMgW3dtbGF5b3V0Z3JpZF0nKS5maXJzdCgpO1xuICAgICAgICAgICAgbm9PZkNvbHVtbnMgPSBOdW1iZXIoJGdyaWRMYXlvdXQuYXR0cignY29sdW1ucycpKSB8fCAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgJGdyaWRMYXlvdXQgPSB0aGlzLiRlbGVtZW50LmZpbmQoJy5mb3JtLWVsZW1lbnRzIC5keW5hbWljLWZvcm0tY29udGFpbmVyJyk7XG4gICAgICAgICAgICBpZiAoISRncmlkTGF5b3V0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRoaXMuJGVsZW1lbnQuZmluZCgnLmZvcm0tZWxlbWVudHMnKS5wcmVwZW5kKCc8ZGl2IGNsYXNzPVwiZHluYW1pYy1mb3JtLWNvbnRhaW5lclwiPjwvZGl2PicpO1xuICAgICAgICAgICAgICAgICRncmlkTGF5b3V0ID0gdGhpcy4kZWxlbWVudC5maW5kKCcuZm9ybS1lbGVtZW50cyAuZHluYW1pYy1mb3JtLWNvbnRhaW5lcicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbm9PZkNvbHVtbnMgPSAxO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbHVtbldpZHRoID0gMTIgLyBub09mQ29sdW1ucztcbiAgICAgICAgbGV0IGZpZWxkVGVtcGxhdGUgPSAnJztcbiAgICAgICAgbGV0IGNvbENvdW50ID0gMDtcbiAgICAgICAgbGV0IGluZGV4O1xuICAgICAgICBsZXQgdXNlckZpZWxkcztcbiAgICAgICAgbGV0IGZpZWxkcyA9IHRoaXMubWV0YWRhdGEgPyB0aGlzLm1ldGFkYXRhLmRhdGEgfHwgdGhpcy5tZXRhZGF0YSA6IFtdO1xuXG4gICAgICAgIHRoaXMuZm9ybUZpZWxkcyA9IFtdOyAvLyBlbXB0eSB0aGUgZm9ybSBmaWVsZHNcblxuICAgICAgICBpZiAoXy5pc0VtcHR5KGZpZWxkcykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm9uQmVmb3JlUmVuZGVyRXZ0KSB7XG4gICAgICAgICAgICB1c2VyRmllbGRzID0gdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdiZWZvcmVyZW5kZXInLCB7JG1ldGFkYXRhOiBmaWVsZHN9KTtcbiAgICAgICAgICAgIGlmICh1c2VyRmllbGRzKSB7XG4gICAgICAgICAgICAgICAgZmllbGRzID0gdXNlckZpZWxkcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghXy5pc0FycmF5KGZpZWxkcykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHdoaWxlIChmaWVsZHNbY29sQ291bnRdKSB7XG4gICAgICAgICAgICBsZXQgY29sVG1wbCA9ICcnO1xuICAgICAgICAgICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgbm9PZkNvbHVtbnM7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICBpZiAoZmllbGRzW2NvbENvdW50XSkge1xuICAgICAgICAgICAgICAgICAgICBjb2xUbXBsICs9IHNldE1hcmt1cEZvckZvcm1GaWVsZChmaWVsZHNbY29sQ291bnRdLCBjb2x1bW5XaWR0aCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbENvdW50Kys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaWVsZFRlbXBsYXRlICs9IGA8d20tZ3JpZHJvdz4ke2NvbFRtcGx9PC93bS1ncmlkcm93PmA7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuX2lzR3JpZExheW91dFByZXNlbnQpIHtcbiAgICAgICAgICAgIGZpZWxkVGVtcGxhdGUgPSBgPHdtLWxheW91dGdyaWQ+JHtmaWVsZFRlbXBsYXRlfTwvd20tbGF5b3V0Z3JpZD5gO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5keW5hbWljRm9ybVJlZi5jbGVhcigpO1xuXG4gICAgICAgIGlmICghdGhpcy5fZHluYW1pY0NvbnRleHQpIHtcbiAgICAgICAgICAgIHRoaXMuX2R5bmFtaWNDb250ZXh0ID0gT2JqZWN0LmNyZWF0ZSh0aGlzLnZpZXdQYXJlbnQpO1xuICAgICAgICAgICAgdGhpcy5fZHluYW1pY0NvbnRleHQuZm9ybSA9IHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29tcG9uZW50RmFjdG9yeVJlZiA9IGF3YWl0IHRoaXMuZHluYW1pY0NvbXBvbmVudFByb3ZpZGVyLmdldENvbXBvbmVudEZhY3RvcnlSZWYoXG4gICAgICAgICAgICAnYXBwLWZvcm0tZHluYW1pYy0nICsgdGhpcy53aWRnZXRJZCxcbiAgICAgICAgICAgIGZpZWxkVGVtcGxhdGUsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbm9DYWNoZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB0cmFuc3BpbGU6IHRydWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICBjb25zdCBjb21wb25lbnQgPSB0aGlzLmR5bmFtaWNGb3JtUmVmLmNyZWF0ZUNvbXBvbmVudChjb21wb25lbnRGYWN0b3J5UmVmLCAwLCB0aGlzLmluaik7XG4gICAgICAgIGV4dGVuZFByb3RvKGNvbXBvbmVudC5pbnN0YW5jZSwgdGhpcy5fZHluYW1pY0NvbnRleHQpO1xuICAgICAgICAkZ3JpZExheW91dFswXS5hcHBlbmRDaGlsZChjb21wb25lbnQubG9jYXRpb24ubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIHRoaXMuc2V0Rm9ybURhdGEodGhpcy5mb3JtZGF0YSk7XG4gICAgfVxuXG4gICAgZ2V0IG1vZGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wZXJhdGlvblR5cGUgfHwgdGhpcy5maW5kT3BlcmF0aW9uVHlwZSgpO1xuICAgIH1cblxuICAgIGdldCBkaXJ0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmdmb3JtICYmIHRoaXMubmdmb3JtLmRpcnR5O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIGZvcm0gc3RhdGUgdG8gcHJpc3RpbmUgYnkgaW50ZXJuYWxseSBjYWxsaW5nIGFuZ3VsYXIgbWFya0FzUHJpc3RpbmUgbWV0aG9kIG9uIHRoZSBmb3JtXG4gICAgICogQHBhcmFtIHZhbHVlLCBXaGVuIHRydWUsIG1hcmsgb25seSB0aGlzIGNvbnRyb2wuIFdoZW4gZmFsc2Ugb3Igbm90IHN1cHBsaWVkLCBtYXJrcyBhbGwgZGlyZWN0IGFuY2VzdG9ycy4gRGVmYXVsdCBpcyBmYWxzZVxuICAgICAqIEByZXR1cm5zIHt2b2lkfVxuICAgICAqL1xuICAgIG1hcmtBc1ByaXN0aW5lKHZhbHVlOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5uZ2Zvcm0ubWFya0FzUHJpc3RpbmUoeyBvbmx5U2VsZjogdmFsdWUgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgZm9ybSBzdGF0ZSB0byBkaXJ0eSBieSBpbnRlcm5hbGx5IGNhbGxpbmcgYW5ndWxhciBtYXJrQXNEaXJ0eSBtZXRob2Qgb24gdGhlIGZvcm1cbiAgICAgKiBAcGFyYW0gdmFsdWUsIFdoZW4gdHJ1ZSwgbWFyayBvbmx5IHRoaXMgY29udHJvbC4gV2hlbiBmYWxzZSBvciBub3Qgc3VwcGxpZWQsIG1hcmtzIGFsbCBkaXJlY3QgYW5jZXN0b3JzLiBEZWZhdWx0IGlzIGZhbHNlXG4gICAgICogQHJldHVybnMge3ZvaWR9XG4gICAgICovXG4gICAgbWFya0FzRGlydHkodmFsdWU6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgICAgICB0aGlzLm5nZm9ybS5tYXJrQXNEaXJ0eSh7IG9ubHlTZWxmOiB2YWx1ZSB9KTtcbiAgICB9XG5cbiAgICBnZXQgaW52YWxpZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmdmb3JtICYmIHRoaXMubmdmb3JtLmludmFsaWQ7XG4gICAgfVxuXG4gICAgZ2V0IHRvdWNoZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5nZm9ybSAmJiB0aGlzLm5nZm9ybS50b3VjaGVkO1xuICAgIH1cblxuICAgIGdldCB2YWxpZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmdmb3JtICYmIHRoaXMubmdmb3JtLnZhbGlkO1xuICAgIH1cblxuICAgIGdldCBwcmlzdGluZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmdmb3JtICYmIHRoaXMubmdmb3JtLnByaXN0aW5lO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIGZvcm0gc3RhdGUgdG8gdG91Y2hlZCBieSBpbnRlcm5hbGx5IGNhbGxpbmcgYW5ndWxhciBtYXJrQXNUb3VjaGVkIG1ldGhvZCBvbiB0aGUgZm9ybVxuICAgICAqIEBwYXJhbSB2YWx1ZSwgV2hlbiB0cnVlLCBtYXJrIG9ubHkgdGhpcyBjb250cm9sLiBXaGVuIGZhbHNlIG9yIG5vdCBzdXBwbGllZCwgbWFya3MgYWxsIGRpcmVjdCBhbmNlc3RvcnMuIERlZmF1bHQgaXMgZmFsc2VcbiAgICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICAgKi9cbiAgICBtYXJrQXNUb3VjaGVkKHZhbHVlOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5uZ2Zvcm0ubWFya0FzVG91Y2hlZCh7IG9ubHlTZWxmOiB2YWx1ZSB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBmb3JtIHN0YXRlIHRvIHVudG91Y2hlZCBieSBpbnRlcm5hbGx5IGNhbGxpbmcgYW5ndWxhciBtYXJrQXNVbnRvdWNoZWQgbWV0aG9kIG9uIHRoZSBmb3JtXG4gICAgICogQHBhcmFtIHZhbHVlLCBXaGVuIHRydWUsIG1hcmsgb25seSB0aGlzIGNvbnRyb2wuIFdoZW4gZmFsc2Ugb3Igbm90IHN1cHBsaWVkLCBtYXJrcyBhbGwgZGlyZWN0IGFuY2VzdG9ycy4gRGVmYXVsdCBpcyBmYWxzZVxuICAgICAqIEByZXR1cm5zIHt2b2lkfVxuICAgICAqL1xuICAgIG1hcmtBc1VudG91Y2hlZCh2YWx1ZTogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgICAgIHRoaXMubmdmb3JtLm1hcmtBc1VudG91Y2hlZCh7IG9ubHlTZWxmOiB2YWx1ZSB9KTtcbiAgICB9XG5cbiAgICBpbnZva2VBY3Rpb25FdmVudCgkZXZlbnQsIGV4cHJlc3Npb246IHN0cmluZykge1xuICAgICAgICBjb25zdCBmbiA9ICRwYXJzZUV2ZW50KGV4cHJlc3Npb24pO1xuICAgICAgICBmbih0aGlzLnZpZXdQYXJlbnQsIE9iamVjdC5hc3NpZ24odGhpcy5jb250ZXh0LCB7JGV2ZW50fSkpO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICAvLyBvbiBmb3JtIGRlc3Ryb3ksIHJlbW92aW5nIHRoaXMgZm9ybSBmcm9tIHRoZSBwYXJlbnRGb3JtIHRvby5cbiAgICAgICAgY29uc3QgY29udHJvbHMgPSB0aGlzLnBhcmVudEZvcm0gJiYgXy5nZXQodGhpcy5wYXJlbnRGb3JtLCAnbmdmb3JtLmNvbnRyb2xzJyk7XG4gICAgICAgIGlmIChjb250cm9scykge1xuICAgICAgICAgICAgLy8gd2hlbiBjdXJyZW50IGZvcm0gaXMgaW5zaWRlIHRoZSBsaXN0IChpLmUuIGluY2FzZSBvZiBmb3JtQXJyYXkpLlxuICAgICAgICAgICAgaWYgKF8uZ2V0KHRoaXMucGFyZW50TGlzdCwgJ25hbWUnKSAmJiBjb250cm9scy5oYXNPd25Qcm9wZXJ0eSh0aGlzLnBhcmVudExpc3QubmFtZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBhcmVudEZvcm0ubmdmb3JtLnJlbW92ZUNvbnRyb2wodGhpcy5wYXJlbnRMaXN0Lm5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gd2hlbiB3ZSBoYXZlIGZvcm1Hcm91cE5hbWUgc2V0IGkuZS4gbXVsdGlwbGUgZm9ybUluc3RhbmNlIHdpdGggY291bnRlciBhcHBlbmRlZCB0byBmb3JtTmFtZVxuICAgICAgICAgICAgaWYgKHRoaXMuZm9ybUdyb3VwTmFtZSAmJiBjb250cm9scy5oYXNPd25Qcm9wZXJ0eSh0aGlzLmZvcm1Hcm91cE5hbWUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wYXJlbnRGb3JtLm5nZm9ybS5yZW1vdmVDb250cm9sKHRoaXMuZm9ybUdyb3VwTmFtZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMucGFyZW50Rm9ybS5uZ2Zvcm0ucmVtb3ZlQ29udHJvbCh0aGlzLm5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgfVxufVxuIiwiPG5nLXRlbXBsYXRlICNjb250ZW50PjxuZy1jb250ZW50PjwvbmctY29udGVudD48L25nLXRlbXBsYXRlPlxuXG48bmctY29udGFpbmVyICpuZ0lmPVwiZm9ybWxheW91dCA9PT0gJ3BhZ2UnOyB0aGVuIHBhZ2VMYXlvdXRUZW1wbGF0ZSBlbHNlIGRlZmF1bHRUZW1wbGF0ZVwiPlxuPC9uZy1jb250YWluZXI+XG5cbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdFRlbXBsYXRlPlxuICAgIDxkaXYgY2xhc3M9XCJwYW5lbC1oZWFkaW5nXCIgKm5nSWY9XCIhaXNMYXlvdXREaWFsb2cgJiYgKHRpdGxlIHx8IHN1YmhlYWRpbmcgfHwgaWNvbmNsYXNzIHx8IHNob3dCdXR0b25zKCdoZWFkZXInKSlcIj5cbiAgICAgICAgPGgzIGNsYXNzPVwicGFuZWwtdGl0bGVcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwdWxsLWxlZnRcIj5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImFwcC1pY29uIHBhbmVsLWljb25cIiBhcmlhLWhpZGRlbj1cInRydWVcIiBbbmdDbGFzc109XCJpY29uY2xhc3NcIiAqbmdJZj1cImljb25jbGFzc1wiPjwvaT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB1bGwtbGVmdFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkaW5nXCIgW2lubmVySFRNTF09XCJ0aXRsZVwiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZXNjcmlwdGlvblwiIFtpbm5lckhUTUxdPVwic3ViaGVhZGluZ1wiPjwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1hY3Rpb24gcGFuZWwtYWN0aW9ucyBiYXNpYy1idG4tZ3JwXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYnRuIG9mIGJ1dHRvbkFycmF5IHwgZmlsdGVyIDogJ3Bvc2l0aW9uJyA6ICdoZWFkZXInXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImJ0bi53aWRnZXRUeXBlID09PSAnYnV0dG9uJyA/IGJ1dHRvblJlZiA6IGFuY2hvclJlZlwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7YnRuOmJ0bn1cIj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImFwcC1pY29uIHdpIHBhbmVsLWFjdGlvblwiICpuZ0lmPVwiY29sbGFwc2libGVcIiB0aXRsZT1cIkNvbGxhcHNlL0V4cGFuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJleHBhbmRlZCA/ICd3aS1taW51cyc6ICd3aS1wbHVzJ1wiIChjbGljayk9XCJleHBhbmRDb2xsYXBzZVBhbmVsKCk7XCI+PC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9oMz5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwicGFuZWwtYm9keVwiIFtuZ0NsYXNzXT1cInsnZm9ybS1lbGVtZW50cyc6IGlzTGF5b3V0RGlhbG9nLCAnZm9ybS1ib2R5JzogIWlzTGF5b3V0RGlhbG9nfVwiIFtjbGFzcy5oaWRkZW5dPVwiIWV4cGFuZGVkXCI+XG4gICAgICAgIDxwIHdtTWVzc2FnZSAqbmdJZj1cIiEhc3RhdHVzTWVzc2FnZS5jYXB0aW9uXCIgW2F0dHIuYXJpYS1oaWRkZW5dPVwiIXN0YXR1c01lc3NhZ2UuY2FwdGlvblwiIFthdHRyLmFyaWEtbGFiZWxdPVwic3RhdHVzTWVzc2FnZS5jYXB0aW9uXCIgY2FwdGlvbi5iaW5kPVwic3RhdHVzTWVzc2FnZS5jYXB0aW9uXCIgdHlwZS5iaW5kPVwic3RhdHVzTWVzc2FnZS50eXBlXCI+PC9wPlxuICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsnZm9ybS1lbGVtZW50cyc6ICFpc0xheW91dERpYWxvZywgJ2Zvcm0tY29udGVudCc6IGlzTGF5b3V0RGlhbG9nfVwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNvbnRlbnRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJiYXNpYy1idG4tZ3JwIGZvcm0tYWN0aW9uIHBhbmVsLWZvb3RlciBjbGVhcmZpeFwiIFtuZ0NsYXNzXT1cInsnbW9kYWwtZm9vdGVyJzogaXNMYXlvdXREaWFsb2d9XCIgW2NsYXNzLmhpZGRlbl09XCIhZXhwYW5kZWQgfHwgIXNob3dCdXR0b25zKCdmb290ZXInKVwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYnRuIG9mIGJ1dHRvbkFycmF5IHwgZmlsdGVyIDogJ3Bvc2l0aW9uJyA6ICdmb290ZXInXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiYnRuLndpZGdldFR5cGUgPT09ICdidXR0b24nID8gYnV0dG9uUmVmIDogYW5jaG9yUmVmXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntidG46YnRufVwiPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNwYWdlTGF5b3V0VGVtcGxhdGU+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNvbnRlbnRcIj48L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjYnV0dG9uUmVmIGxldC1idG49XCJidG5cIj5cbiAgICA8YnV0dG9uICB3bUJ1dHRvbiBuYW1lPVwie3tidG4ua2V5fX1cIiBjYXB0aW9uLmJpbmQ9XCJidG4uZGlzcGxheU5hbWVcIiBjbGFzcy5iaW5kPVwiYnRuLmNsYXNzXCIgaWNvbmNsYXNzLmJpbmQ9XCJidG4uaWNvbmNsYXNzXCIgc2hvdy5iaW5kPVwiYnRuLnNob3dcIlxuICAgICAgICAgICAgIChjbGljayk9XCJpbnZva2VBY3Rpb25FdmVudCgkZXZlbnQsIGJ0bi5hY3Rpb24pXCIgdHlwZS5iaW5kPVwiYnRuLnR5cGVcIiBoaW50LmJpbmQ9XCJidG4udGl0bGVcIiBzaG9ydGN1dGtleS5iaW5kPVwiYnRuLnNob3J0Y3V0a2V5XCIgZGlzYWJsZWQuYmluZD1cIm5nZm9ybS5zdGF0dXMgPT09ICdQRU5ESU5HJyB8fCBidG4uZGlzYWJsZWRcIlxuICAgICAgICAgICAgIHRhYmluZGV4LmJpbmQ9XCJidG4udGFiaW5kZXhcIiBbYXR0ci5hcmlhLWxhYmVsXT1cImJ0bi5kaXNwbGF5TmFtZVwiIFtjbGFzcy5oaWRkZW5dPVwiYnRuLnVwZGF0ZU1vZGUgPyAhaXNVcGRhdGVNb2RlIDogaXNVcGRhdGVNb2RlXCI+PC9idXR0b24+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2FuY2hvclJlZiBsZXQtYnRuPVwiYnRuXCI+XG4gICAgPGEgd21BbmNob3IgbmFtZT1cInt7YnRuLmtleX19XCIgY2FwdGlvbi5iaW5kPVwiYnRuLmRpc3BsYXlOYW1lXCIgY2xhc3MuYmluZD1cImJ0bi5jbGFzc1wiIGljb25jbGFzcy5iaW5kPVwiYnRuLmljb25jbGFzc1wiIHNob3cuYmluZD1cImJ0bi5zaG93XCJcbiAgICAgICAgICAgICAoY2xpY2spPVwiaW52b2tlQWN0aW9uRXZlbnQoJGV2ZW50LCBidG4uYWN0aW9uKVwiIGhpbnQuYmluZD1cImJ0bi50aXRsZVwiIHNob3J0Y3V0a2V5LmJpbmQ9XCJidG4uc2hvcnRjdXRrZXlcIlxuICAgICAgICAgICAgIGh5cGVybGluay5iaW5kPVwiYnRuLmh5cGVybGlua1wiIHRhcmdldC5iaW5kPVwiYnRuLnRhcmdldFwiXG4gICAgICAgICAgICAgdGFiaW5kZXguYmluZD1cImJ0bi50YWJpbmRleFwiIFtjbGFzcy5oaWRkZW5dPVwiYnRuLnVwZGF0ZU1vZGUgPyAhaXNVcGRhdGVNb2RlIDogaXNVcGRhdGVNb2RlXCI+PC9hPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLWNvbnRhaW5lciAjZHluYW1pY0Zvcm0+PC9uZy1jb250YWluZXI+XG4iXX0=
1353
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3dpZGdldHMvZGF0YS9mb3JtL3NyYy9mb3JtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvd2lkZ2V0cy9kYXRhL2Zvcm0vc3JjL2Zvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdILFNBQVMsRUFDVCxTQUFTLEVBQ1QsZUFBZSxFQUNmLFdBQVcsRUFDWCxZQUFZLEVBQ1osUUFBUSxFQUNSLE1BQU0sRUFFTixRQUFRLEVBQ1IsUUFBUSxFQUNSLFNBQVMsRUFDVCxnQkFBZ0IsRUFDbkIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLFNBQVMsRUFBRSxXQUFXLEVBQVksTUFBTSxnQkFBZ0IsQ0FBQztBQUVqRSxPQUFPLEVBQ0gsVUFBVSxFQUNWLGVBQWUsRUFDZixXQUFXLEVBQ1gscUJBQXFCLEVBQ3JCLEdBQUcsRUFDSCxVQUFVLEVBQ1YsUUFBUSxFQUNSLFFBQVEsRUFDUiwyQkFBMkIsRUFDM0IsV0FBVyxFQUNYLGVBQWUsRUFDZixRQUFRLEVBQ1IsWUFBWSxFQUNaLFNBQVMsRUFDVCxtQkFBbUIsRUFDbkIsVUFBVSxFQUNWLFdBQVcsRUFDWCxlQUFlLEdBQ2xCLE1BQU0sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sRUFDSCxvQkFBb0IsRUFDcEIsZUFBZSxFQUNmLGdCQUFnQixFQUNoQixnQkFBZ0IsRUFDaEIsZ0JBQWdCLEVBQ2hCLG9CQUFvQixFQUNwQixrQkFBa0IsRUFDbEIsaUJBQWlCLEVBQ2pCLE1BQU0sRUFDTixTQUFTLEVBQ1osTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDdEQsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLDBCQUEwQixD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QUs7O3NCQUNmLFNBQVM7dUJBQUMsTUFBTTt3QkFuSytDLGNBQWM7a0JBQWpGLFNBQVM7bUJBQUMsYUFBYSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUU7WUFDckMsVUFBVTtrQkFBdEMsU0FBUzttQkFBQyxnQkFBZ0I7WUFFc0IsYUFBYTtrQkFBN0QsZUFBZTttQkFBQyxTQUFTLEVBQUUsRUFBQyxXQUFXLEVBQUUsSUFBSSxFQUFDO1lBNEd4QixNQUFNO2tCQUE1QixXQUFXO21CQUFDLFFBQVE7WUFFZSxNQUFNO2tCQUF6QyxZQUFZO21CQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQztZQUlYLE9BQU87a0JBQTdCLFlBQVk7bUJBQUMsT0FBTztZQUlnQixnQkFBZ0I7a0JBQXBELFlBQVk7bUJBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlckNvbnRlbnRJbml0LFxuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQXR0cmlidXRlLFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIEluamVjdG9yLFxuICAgIE5nWm9uZSxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT3B0aW9uYWwsXG4gICAgU2tpcFNlbGYsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdDb250YWluZXJSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0Zvcm1BcnJheSwgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQge1xuICAgICRhcHBEaWdlc3QsXG4gICAgJGludm9rZVdhdGNoZXJzLFxuICAgICRwYXJzZUV2ZW50LFxuICAgIEFic3RyYWN0RGlhbG9nU2VydmljZSxcbiAgICBBcHAsXG4gICAgRGF0YVNvdXJjZSxcbiAgICBEYXRhVHlwZSxcbiAgICBkZWJvdW5jZSxcbiAgICBEeW5hbWljQ29tcG9uZW50UmVmUHJvdmlkZXIsXG4gICAgZXh0ZW5kUHJvdG8sXG4gICAgZ2V0Q2xvbmVkT2JqZWN0LFxuICAgIGdldEZpbGVzLFxuICAgIGdldFZhbGlkSlNPTixcbiAgICBpc0RlZmluZWQsXG4gICAgaXNFbGVtZW50SW5WaWV3cG9ydCxcbiAgICByZW1vdmVBdHRyLFxuICAgIHJlbW92ZUNsYXNzLFxuICAgIHNjcm9sbFRvRWxlbWVudCxcbn0gZnJvbSAnQHdtL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBnZXRGaWVsZExheW91dENvbmZpZyxcbiAgICBMaXZlX09wZXJhdGlvbnMsXG4gICAgTWVzc2FnZUNvbXBvbmVudCxcbiAgICBwYXJzZVZhbHVlQnlUeXBlLFxuICAgIFBhcnRpYWxEaXJlY3RpdmUsXG4gICAgcGVyZm9ybURhdGFPcGVyYXRpb24sXG4gICAgcHJvdmlkZUFzV2lkZ2V0UmVmLFxuICAgIFN0eWxhYmxlQ29tcG9uZW50LFxuICAgIHN0eWxlcixcbiAgICBXaWRnZXRSZWZcbn0gZnJvbSAnQHdtL2NvbXBvbmVudHMvYmFzZSc7XG5pbXBvcnQge1ByZWZhYkRpcmVjdGl2ZX0gZnJvbSAnQHdtL2NvbXBvbmVudHMvcHJlZmFiJztcbmltcG9ydCB7TGlzdENvbXBvbmVudH0gZnJvbSAnQHdtL2NvbXBvbmVudHMvZGF0YS9saXN0JztcblxuaW1wb3J0IHtyZWdpc3RlckZvcm1Qcm9wc30gZnJvbSAnLi9mb3JtLnByb3BzJztcblxuZGVjbGFyZSBjb25zdCBfO1xuXG5jb25zdCBXSURHRVRfQ09ORklHID0ge3dpZGdldFR5cGU6ICd3bS1mb3JtJywgaG9zdENsYXNzOiAncGFuZWwgYXBwLXBhbmVsIGFwcC1mb3JtJ307XG5jb25zdCBMT0dJTl9GT1JNX0NPTkZJRyA9IHt3aWRnZXRUeXBlOiAnd20tZm9ybScsIGhvc3RDbGFzczogJ2FwcC1mb3JtIGFwcC1sb2dpbi1mb3JtJ307XG5jb25zdCBMSVZFX0ZPUk1fQ09ORklHID0ge3dpZGdldFR5cGU6ICd3bS1saXZlZm9ybScsIGhvc3RDbGFzczogJ3BhbmVsIGFwcC1wYW5lbCBhcHAtbGl2ZWZvcm0gbGl2ZWZvcm0taW5saW5lJ307XG5jb25zdCBMSVZFX0ZJTFRFUl9DT05GSUcgPSB7d2lkZ2V0VHlwZTogJ3dtLWxpdmVmaWx0ZXInLCBob3N0Q2xhc3M6ICdwYW5lbCBhcHAtcGFuZWwgYXBwLWxpdmVmaWx0ZXIgY2xlYXJmaXggbGl2ZWZvcm0taW5saW5lJ307XG5cbmNvbnN0IGdldFdpZGdldENvbmZpZyA9IChpc0xpdmVGb3JtLCBpc0xpdmVGaWx0ZXIsIHJvbGUpID0+IHtcbiAgICBsZXQgY29uZmlnID0gV0lER0VUX0NPTkZJRztcbiAgICBpZiAoaXNMaXZlRm9ybSAhPT0gbnVsbCkge1xuICAgICAgICBjb25maWcgPSBMSVZFX0ZPUk1fQ09ORklHO1xuICAgIH0gZWxzZSBpZiAoaXNMaXZlRmlsdGVyICE9PSBudWxsKSB7XG4gICAgICAgIGNvbmZpZyA9IExJVkVfRklMVEVSX0NPTkZJRztcbiAgICB9IGVsc2UgaWYgKHJvbGUgPT09ICdhcHAtbG9naW4nKSB7XG4gICAgICAgIGNvbmZpZyA9IExPR0lOX0ZPUk1fQ09ORklHO1xuICAgIH1cbiAgICByZXR1cm4gY29uZmlnO1xufTtcblxuLy8gR2VuZXJhdGUgdGhlIGZvcm0gZmllbGQgd2l0aCBnaXZlbiBmaWVsZCBkZWZpbml0aW9uLiBBZGQgYSBncmlkIGNvbHVtbiB3cmFwcGVyIGFyb3VuZCB0aGUgZm9ybSBmaWVsZC5cbmNvbnN0IHNldE1hcmt1cEZvckZvcm1GaWVsZCA9IChmaWVsZCwgY29sdW1uV2lkdGgpID0+ICB7XG4gICAgbGV0IHByb3BzVG1wbCA9ICcnO1xuICAgIF8uZm9yRWFjaChmaWVsZCwgKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgcHJvcHNUbXBsID0gYCR7cHJvcHNUbXBsfSAke2tleX09XCIke3ZhbHVlfVwiYDtcbiAgICB9KTtcbiAgICByZXR1cm4gYDx3bS1ncmlkY29sdW1uIGNvbHVtbndpZHRoPVwiJHtjb2x1bW5XaWR0aH1cIj5cbiAgICAgICAgICAgICAgICAgIDx3bS1mb3JtLWZpZWxkICR7cHJvcHNUbXBsfT48L3dtLWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L3dtLWdyaWRjb2x1bW4+YDtcbn07XG5cbi8vIEZ1bmN0aW9uIHRvIGZpbmQgb3V0IHRoZSBmaXJzdCBpbnZhbGlkIGVsZW1lbnQgaW4gZm9ybVxuY29uc3QgZmluZEludmFsaWRFbGVtZW50ID0gKCRmb3JtRWxlLCBuZ0Zvcm0pID0+IHtcbiAgICBjb25zdCAkZWxlID0gJGZvcm1FbGUuZmluZCgnZm9ybS5uZy1pbnZhbGlkOnZpc2libGUsIFtmb3JtQ29udHJvbE5hbWVdLm5nLWludmFsaWQ6dmlzaWJsZScpLmZpcnN0KCk7XG4gICAgbGV0IGZvcm1PYmogPSBuZ0Zvcm07XG4gICAgLy8gSWYgZWxlbWVudCBpcyBmb3JtLCBmaW5kIG91dCB0aGUgZmlyc3QgaW52YWxpZCBlbGVtZW50IGluIHRoaXMgZm9ybVxuICAgIGlmICgkZWxlLmlzKCdmb3JtJykpIHtcbiAgICAgICAgZm9ybU9iaiA9IG5nRm9ybSAmJiBuZ0Zvcm0uY29udHJvbHNbJGVsZS5hdHRyKCdmb3JtQ29udHJvbE5hbWUnKSB8fCAkZWxlLmF0dHIoJ25hbWUnKV07XG4gICAgICAgIGlmIChmb3JtT2JqKSB7XG4gICAgICAgICAgICByZXR1cm4gZmluZEludmFsaWRFbGVtZW50KCRlbGUsIGZvcm1PYmopO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIG5nRm9ybTogZm9ybU9iaixcbiAgICAgICAgJGVsZTogJGVsZVxuICAgIH07XG59O1xuXG4vLyBGdW5jdGlvbiB0byBnZXQgdGhlIGFjdGl2ZSBlbGVtZW50IG1hcmt1cCBiYXNlZCBvbiB3aWRnZXQgdHlwZVxuY29uc3QgZ2V0QWN0aXZlRWxlbWVudCA9IChlbGVtZW50KSA9PiB7XG4gICAgY29uc3Qgd2lkZ2V0VHlwZSA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCd3aWRnZXR0eXBlJyk7XG4gICAgc3dpdGNoICh3aWRnZXRUeXBlKSB7XG4gICAgICAgIGNhc2UgJ3NlbGVjdCc6XG4gICAgICAgICAgICByZXR1cm4gZWxlbWVudC5xdWVyeVNlbGVjdG9yKCdzZWxlY3QnKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICd0ZXh0YXJlYSc6XG4gICAgICAgICAgICByZXR1cm4gZWxlbWVudC5xdWVyeVNlbGVjdG9yKCd0ZXh0YXJlYScpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gZWxlbWVudC5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpO1xuICAgIH1cbn1cbmNvbnN0IHNldFRvdWNoZWRTdGF0ZSA9IChzZWxmLCBuZ0Zvcm0sIGZpZWxkTmFtZSkgPT4ge1xuICAgIGlmIChuZ0Zvcm0udmFsaWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAobmdGb3JtLmNvbnRyb2xzKSB7XG4gICAgICAgIF8uZm9yRWFjaChuZ0Zvcm0uY29udHJvbHMsIChjdHJsLCBmaWVsZE5hbWUpID0+IHtcbiAgICAgICAgICAgIHNldFRvdWNoZWRTdGF0ZShzZWxmLCBjdHJsLCBmaWVsZE5hbWUpO1xuICAgICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgZWxlbWVudCA9IHNlbGYuJGVsZW1lbnQuZmluZChgW3dtZm9ybWZpZWxkXVtrZXk9XCIke2ZpZWxkTmFtZX1cIl1gKTtcbiAgICAgICAgaWYgKCFlbGVtZW50Lmxlbmd0aCkge1xuICAgICAgICAgICAgZWxlbWVudCA9IHNlbGYuJGVsZW1lbnQuZmluZChgW3dtZm9ybWZpZWxkXVtuYW1lPVwiJHtmaWVsZE5hbWV9XCJdYCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxlbWVudFswXS5zZXRBdHRyaWJ1dGUoJ19fZXJyb3Jtc2cnLCBlbGVtZW50WzBdLmdldEF0dHJpYnV0ZSgnX192YWxpZGF0aW9uSWQnKSk7XG4gICAgICAgIGxldCBhY3RpdmVFbGVtZW50ID0gZ2V0QWN0aXZlRWxlbWVudChlbGVtZW50WzBdKTtcbiAgICAgICAgYWN0aXZlRWxlbWVudD8uc2V0QXR0cmlidXRlKCdhcmlhLWludmFsaWQnLCBuZ0Zvcm0uaW52YWxpZCk7XG4gICAgICAgIGFjdGl2ZUVsZW1lbnQ/LnNldEF0dHJpYnV0ZSgnYXJpYS1kZXNjcmliZWRieScsIGVsZW1lbnRbMF0uZ2V0QXR0cmlidXRlKCdfX3ZhbGlkYXRpb25JZCcpKTtcbiAgICAgICAgbmdGb3JtLm1hcmtBc1RvdWNoZWQoKTtcbiAgICB9XG59O1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2Zvcm1bd21Gb3JtXScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2Zvcm0uY29tcG9uZW50Lmh0bWwnLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICBwcm92aWRlQXNXaWRnZXRSZWYoRm9ybUNvbXBvbmVudClcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIEZvcm1Db21wb25lbnQgZXh0ZW5kcyBTdHlsYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSwgQWZ0ZXJDb250ZW50SW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XG4gICAgc3RhdGljICBpbml0aWFsaXplUHJvcHMgPSByZWdpc3RlckZvcm1Qcm9wcygpO1xuICAgIEBWaWV3Q2hpbGQoJ2R5bmFtaWNGb3JtJywgeyBzdGF0aWM6IHRydWUsIHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSkgZHluYW1pY0Zvcm1SZWY6IFZpZXdDb250YWluZXJSZWY7XG4gICAgQFZpZXdDaGlsZChNZXNzYWdlQ29tcG9uZW50KSBtZXNzYWdlUmVmO1xuICAgIC8vIHRoaXMgaXMgdGhlIHJlZmVyZW5jZSB0byB0aGUgY29tcG9uZW50IHJlZnMgaW5zaWRlIHRoZSBmb3JtLWdyb3VwXG4gICAgQENvbnRlbnRDaGlsZHJlbihXaWRnZXRSZWYsIHtkZXNjZW5kYW50czogdHJ1ZX0pIGNvbXBvbmVudFJlZnM7XG5cbiAgICBhdXRvdXBkYXRlO1xuICAgIHB1YmxpYyBmb3JtbGF5b3V0OiBhbnk7XG4gICAgcHVibGljIGlzRGF0YVNvdXJjZVVwZGF0ZWQ6IGJvb2xlYW47XG4gICAgY2FwdGlvbkFsaWduQ2xhc3M6IHN0cmluZztcbiAgICB2YWxpZGF0aW9udHlwZTogc3RyaW5nO1xuICAgIGNhcHRpb25hbGlnbjogc3RyaW5nO1xuICAgIGNhcHRpb25wb3NpdGlvbjogc3RyaW5nO1xuICAgIGNhcHRpb25zaXplO1xuICAgIGNvbGxhcHNpYmxlOiBib29sZWFuO1xuICAgIGV4cGFuZGVkOiBib29sZWFuO1xuICAgIGVsU2NvcGU7XG4gICAgX3dpZGdldENsYXNzID0gJyc7XG4gICAgY2FwdGlvbndpZHRoOiBzdHJpbmc7XG4gICAgX2NhcHRpb25DbGFzcyA9ICcnO1xuICAgIG5nZm9ybTogRm9ybUdyb3VwO1xuICAgIGZvcm1GaWVsZHMgPSBbXTtcbiAgICBmb3JtZmllbGRzID0ge307XG4gICAgZm9ybVdpZGdldHMgPSB7fTtcbiAgICBmaWx0ZXJXaWRnZXRzID0ge307XG4gICAgYnV0dG9uQXJyYXkgPSBbXTtcbiAgICBkYXRhb3V0cHV0ID0ge307XG4gICAgZGF0YXNvdXJjZTtcbiAgICBmb3JtZGF0YXNvdXJjZTtcbiAgICBmb3JtZGF0YSA9IHt9O1xuICAgIGlzU2VsZWN0ZWQ7XG4gICAgcHJldkRhdGFWYWx1ZXM7XG4gICAgcHJldkRhdGFPYmplY3Q7XG4gICAgcHJldmZvcm1GaWVsZHM7XG4gICAgc3RhdHVzTWVzc2FnZSA9IHtcbiAgICAgICAgY2FwdGlvbjogJycsXG4gICAgICAgIHR5cGU6ICcnXG4gICAgfTtcbiAgICBtZXNzYWdlbGF5b3V0O1xuICAgIG1ldGFkYXRhO1xuICAgIGVycm9ybWVzc2FnZTtcbiAgICBvbkVycm9yO1xuICAgIG9uU3VjY2VzcztcbiAgICBwcmltYXJ5S2V5ID0gW107XG4gICAgcG9zdG1lc3NhZ2U7XG4gICAgX2xpdmVUYWJsZVBhcmVudDtcbiAgICB1cGRhdGVNb2RlO1xuICAgIG5hbWU7XG4gICAgLy8gTGl2ZSBGb3JtIE1ldGhvZHNcbiAgICBjbGVhckRhdGE6IEZ1bmN0aW9uO1xuICAgIGNhbmNlbDogRnVuY3Rpb247XG4gICAgZGVsZXRlOiBGdW5jdGlvbjtcbiAgICBzYXZlOiBGdW5jdGlvbjtcbiAgICBzYXZlQW5kTmV3OiBGdW5jdGlvbjtcbiAgICBzYXZlQW5kVmlldzogRnVuY3Rpb247XG4gICAgc2V0UHJpbWFyeUtleTogKCkgPT4ge307XG4gICAgZGlhbG9nSWQ6IHN0cmluZztcbiAgICAvLyBMaXZlIEZpbHRlclxuICAgIGVuYWJsZWVtcHR5ZmlsdGVyO1xuICAgIHBhZ2VzaXplO1xuICAgIHJlc3VsdDtcbiAgICBwYWdpbmF0aW9uO1xuICAgIGNsZWFyRmlsdGVyOiBGdW5jdGlvbjtcbiAgICBhcHBseUZpbHRlcjogRnVuY3Rpb247XG4gICAgZmlsdGVyOiBGdW5jdGlvbjtcbiAgICBmaWx0ZXJPbkRlZmF1bHQ6IEZ1bmN0aW9uO1xuICAgIG9uTWF4RGVmYXVsdFZhbHVlQ2hhbmdlOiBGdW5jdGlvbjtcbiAgICBudW1iZXJPZkZpZWxkczogbnVtYmVyO1xuXG4gICAgcHJpdmF0ZSBfZGVib3VuY2VkVXBkYXRlRmllbGRTb3VyY2U6IEZ1bmN0aW9uID0gXy5kZWJvdW5jZSh0aGlzLnVwZGF0ZUZpZWxkU291cmNlLCAzNTApO1xuICAgIHByaXZhdGUgb3BlcmF0aW9uVHlwZTtcbiAgICBwcml2YXRlIF9pc0xheW91dERpYWxvZztcbiAgICBwcml2YXRlIF9keW5hbWljQ29udGV4dDtcbiAgICBwcml2YXRlIF9pc0dyaWRMYXlvdXRQcmVzZW50O1xuICAgIHByaXZhdGUgdmFsaWRhdGlvbk1lc3NhZ2VzID0gW107XG4gICAgcHJpdmF0ZSBmb3JtR3JvdXBOYW1lO1xuICAgIHByaXZhdGUgZm9ybUFycmF5SW5kZXg7XG4gICAgcHJpdmF0ZSBiaW5kaW5nVmFsdWU7XG4gICAgcHJpdmF0ZSBfZm9ybUlzSW5MaXN0O1xuICAgIHByaXZhdGUgX3RyaWdnZXJlZEJ5VXNlcjogYm9vbGVhbjtcblxuXG4gICAgcHJpdmF0ZSBfZGVib3VuY2VkU3VibWl0Rm9ybSA9IGRlYm91bmNlKCgkZXZlbnQpID0+IHtcbiAgICAgICAgLy8gY2FsbGluZyBzdWJtaXQgZXZlbnQgaW4gbmdab25lIGFzIGNoYW5nZSBkZXRlY3Rpb24gaXMgbm90IHRyaWdnZXJlZCBwb3N0IHRoZSBzdWJtaXQgY2FsbGJhY2sgYW5kIGFjdGlvbnMgbGlrZSBub3RpZmljYXRpb24gYXJlIG5vdCBzaG93blxuICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zdWJtaXRGb3JtKCRldmVudCk7XG4gICAgICAgIH0pO1xuICAgIH0sIDI1MCk7XG5cbiAgICBzZXQgaXNMYXlvdXREaWFsb2cobnYpIHtcbiAgICAgICAgaWYgKG52KSB7XG4gICAgICAgICAgICByZW1vdmVDbGFzcyh0aGlzLm5hdGl2ZUVsZW1lbnQsICdwYW5lbCBhcHAtcGFuZWwgbGl2ZWZvcm0taW5saW5lJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5faXNMYXlvdXREaWFsb2cgPSBudjtcbiAgICB9XG5cbiAgICBnZXQgaXNMYXlvdXREaWFsb2coKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc0xheW91dERpYWxvZztcbiAgICB9XG5cbiAgICBwcml2YXRlIF9pc1VwZGF0ZU1vZGU7XG4gICAgc2V0IGlzVXBkYXRlTW9kZShudikge1xuICAgICAgICB0aGlzLl9pc1VwZGF0ZU1vZGUgPSBudjtcbiAgICAgICAgdGhpcy5mb3JtRmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgICAgICAgZmllbGQuc2V0UmVhZE9ubHlTdGF0ZShudik7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldCBpc1VwZGF0ZU1vZGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc1VwZGF0ZU1vZGU7XG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdhY3Rpb24nKSBhY3Rpb246IHN0cmluZztcblxuICAgIEBIb3N0TGlzdGVuZXIoJ3N1Ym1pdCcsIFsnJGV2ZW50J10pIHN1Ym1pdCgkZXZlbnQpIHtcbiAgICAgICAgdGhpcy5fZGVib3VuY2VkU3VibWl0Rm9ybSgkZXZlbnQpO1xuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ3Jlc2V0Jykgb25SZXNldCgpIHtcbiAgICAgICAgdGhpcy5yZXNldCgpO1xuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24nLCBbJyRldmVudCddKSBvbktleWRvd25IYW5kbGVyKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIHRoaXMuX3RyaWdnZXJlZEJ5VXNlciA9IHRydWU7XG4gICAgfVxuICAgIC8vIHJldHVybnMgdGhlIGZvcm1BcnJheSBjb250cm9sIG9uIHRoZSBwYXJlbnRGb3JtLlxuICAgIGdldCBwYXJlbnRGb3JtQXJyYXkoKTogRm9ybUFycmF5IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50Rm9ybSAmJiB0aGlzLmlzUGFyZW50TGlzdCAmJiB0aGlzLnBhcmVudEZvcm0ubmdmb3JtLmdldCh0aGlzLnBhcmVudExpc3QubmFtZSkgYXMgRm9ybUFycmF5O1xuICAgIH1cblxuICAgIC8vIHJldHVybnMgdHJ1ZSBvbmx5IHdoZW4gY2xvc2VzdCBsaXZlbGlzdCBpcyB0aGUgaW1tZWRpYXRlIHBhcmVudCBvZiB0aGUgZm9ybS5cbiAgICAvLyBjaGVja3MgZm9yIGxpdmVsaXN0IGhhdmluZyBhbnkgZm9ybSBlbGVtZW50cyB3aXRoIHBhcmVudEZvcm0gbmFtZS5cbiAgICAvLyBJZiBsaXZlbGlzdCBpcyBub3QgY29udGFpbmluZyBhbnkgcGFyZW50Rm9ybSBlbGVtZW50cyB0aGVuIGl0IHJldHVybnMgdHJ1ZS5cbiAgICBnZXQgaXNQYXJlbnRMaXN0KCkge1xuICAgICAgICBpZiAodGhpcy5wYXJlbnRMaXN0ICYmIHRoaXMucGFyZW50Rm9ybSAmJiAhaXNEZWZpbmVkKHRoaXMuX2Zvcm1Jc0luTGlzdCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1FbGUgPSB0aGlzLiRlbGVtZW50O1xuICAgICAgICAgICAgY29uc3QgbGlzdEVsZSA9IGZvcm1FbGUuY2xvc2VzdCgnLmFwcC1saXZlbGlzdFtuYW1lPVwiJyArIHRoaXMucGFyZW50TGlzdC5uYW1lICsgJ1wiXScpO1xuICAgICAgICAgICAgaWYgKGxpc3RFbGUubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZm9ybUlzSW5MaXN0ID0gIShsaXN0RWxlLmZpbmQoJ2Zvcm1bd2lkZ2V0LWlkPVwiJyArIHRoaXMucGFyZW50Rm9ybS53aWRnZXRJZCArICdcIl0nKSkubGVuZ3RoO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc0RlZmluZWQodGhpcy5fZm9ybUlzSW5MaXN0KSA/IHRoaXMuX2Zvcm1Jc0luTGlzdCA6IHRoaXMucGFyZW50TGlzdDtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgaW5qOiBJbmplY3RvcixcbiAgICAgICAgcHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIsXG4gICAgICAgIHByaXZhdGUgYXBwOiBBcHAsXG4gICAgICAgIHByaXZhdGUgZGlhbG9nU2VydmljZTogQWJzdHJhY3REaWFsb2dTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGR5bmFtaWNDb21wb25lbnRQcm92aWRlcjogRHluYW1pY0NvbXBvbmVudFJlZlByb3ZpZGVyLFxuICAgICAgICBwcml2YXRlIG5nWm9uZTogTmdab25lLFxuICAgICAgICBAT3B0aW9uYWwoKSBwdWJsaWMgcGFyZW50TGlzdDogTGlzdENvbXBvbmVudCxcbiAgICAgICAgQFNraXBTZWxmKCkgQE9wdGlvbmFsKCkgcHVibGljIHBhcmVudEZvcm06IEZvcm1Db21wb25lbnQsXG4gICAgICAgIEBTa2lwU2VsZigpIEBPcHRpb25hbCgpIHB1YmxpYyBwYXJlbnRQcmVmYWI6IFByZWZhYkRpcmVjdGl2ZSxcbiAgICAgICAgQFNraXBTZWxmKCkgQE9wdGlvbmFsKCkgcHVibGljIHBhcmVudFBhcnRpYWw6IFBhcnRpYWxEaXJlY3RpdmUsXG4gICAgICAgIEBBdHRyaWJ1dGUoJ2JlZm9yZXN1Ym1pdC5ldmVudCcpIHB1YmxpYyBvbkJlZm9yZVN1Ym1pdEV2dCxcbiAgICAgICAgQEF0dHJpYnV0ZSgnc3VibWl0LmV2ZW50JykgcHVibGljIG9uU3VibWl0RXZ0LFxuICAgICAgICBAQXR0cmlidXRlKCdiZWZvcmVyZW5kZXIuZXZlbnQnKSBwdWJsaWMgb25CZWZvcmVSZW5kZXJFdnQsXG4gICAgICAgIEBBdHRyaWJ1dGUoJ2RhdGFzZXQuYmluZCcpIHB1YmxpYyBiaW5kZGF0YXNldCxcbiAgICAgICAgQEF0dHJpYnV0ZSgnZm9ybWRhdGEuYmluZCcpIHByaXZhdGUgYmluZGZvcm1kYXRhLFxuICAgICAgICBAQXR0cmlidXRlKCd3bUxpdmVGb3JtJykgaXNMaXZlRm9ybSxcbiAgICAgICAgQEF0dHJpYnV0ZSgnd21MaXZlRmlsdGVyJykgaXNMaXZlRmlsdGVyLFxuICAgICAgICBAQXR0cmlidXRlKCdkYXRhLXJvbGUnKSByb2xlLFxuICAgICAgICBAQXR0cmlidXRlKCdrZXknKSBrZXksXG4gICAgICAgIEBBdHRyaWJ1dGUoJ25hbWUnKSBuYW1lXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGluaiwgZ2V0V2lkZ2V0Q29uZmlnKGlzTGl2ZUZvcm0sIGlzTGl2ZUZpbHRlciwgcm9sZSksKTtcblxuICAgICAgICBzdHlsZXIodGhpcy5uYXRpdmVFbGVtZW50LCB0aGlzKTtcblxuICAgICAgICAvLyByZW1vdmUgdGl0bGUgcHJvcGVydHkgYXMgYXR0cmlidXRlIGFzIGl0IGlzIGNhdXNpbmcgdW5uZWNlc3NhcnkgdG9vbHRpcFxuICAgICAgICByZW1vdmVBdHRyKHRoaXMubmF0aXZlRWxlbWVudCwgJ3RpdGxlJyk7XG4gICAgICAgIHRoaXMuaXNVcGRhdGVNb2RlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kaWFsb2dJZCA9IHRoaXMubmF0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RpYWxvZ0lkJyk7XG4gICAgICAgIHRoaXMubmdmb3JtID0gZmIuZ3JvdXAoe30pO1xuICAgICAgICB0aGlzLmJpbmRpbmdWYWx1ZSA9IGtleSB8fCBuYW1lO1xuXG4gICAgICAgIC8vIE9uIHZhbHVlIGNoYW5nZSBpbiBmb3JtLCB1cGRhdGUgdGhlIGRhdGFvdXRwdXRcbiAgICAgICAgY29uc3Qgb25WYWx1ZUNoYW5nZVN1YnNjcmlwdGlvbiA9ICB0aGlzLm5nZm9ybS52YWx1ZUNoYW5nZXNcbiAgICAgICAgICAgIC5zdWJzY3JpYmUodGhpcy51cGRhdGVEYXRhT3V0cHV0LmJpbmQodGhpcykpO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyRGVzdHJveUxpc3RlbmVyKCgpID0+IG9uVmFsdWVDaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSk7XG4gICAgICAgIHRoaXMuZWxTY29wZSA9IHRoaXM7XG5cbiAgICAgICAgdGhpcy5hZGRFdmVudHNUb0NvbnRleHQodGhpcy5jb250ZXh0KTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNvbXBvbmVudFJlZnMuZm9yRWFjaChjb21wb25lbnRSZWYgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChjb21wb25lbnRSZWYubmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBSZWdpc3RlciB3aWRnZXRzIGluc2lkZSBmb3JtIHdpdGggZm9ybVdpZGdldHNcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtV2lkZ2V0c1tjb21wb25lbnRSZWYubmFtZV0gPSBjb21wb25lbnRSZWY7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIDI1MCk7XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICBpZiAodGhpcy5wYXJlbnRGb3JtICYmIHRoaXMucGFyZW50Rm9ybS5uZ2Zvcm0gJiYgdGhpcy5pc1BhcmVudExpc3QpIHtcbiAgICAgICAgICAgIC8vIHNldHRpbmcgZm9ybUFycmF5IGNvbnRyb2wgb24gbmdmb3JtLlxuICAgICAgICAgICAgaWYgKCFfLmdldCh0aGlzLnBhcmVudEZvcm0ubmdmb3JtLmNvbnRyb2xzLCB0aGlzLnBhcmVudExpc3QubmFtZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBhcmVudEZvcm0ubmdmb3JtLnNldENvbnRyb2wodGhpcy5wYXJlbnRMaXN0Lm5hbWUsIG5ldyBGb3JtQXJyYXkoW10pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHB1c2hpbmcgdGhlIG5nZm9ybSB0byBmb3JtQXJyYXkuXG4gICAgICAgICAgICB0aGlzLnBhcmVudEZvcm1BcnJheS5wdXNoKHRoaXMubmdmb3JtKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybUFycmF5SW5kZXggPSB0aGlzLnBhcmVudEZvcm1BcnJheS5sZW5ndGggLSAxO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYWRkSW5uZXJOZ0Zvcm1Ub0Zvcm0odGhpcy5iaW5kaW5nVmFsdWUpO1xuICAgIH1cblxuICAgIGZpbmRPcGVyYXRpb25UeXBlKCkge31cblxuICAgIHByaXZhdGUgYWRkSW5uZXJOZ0Zvcm1Ub0Zvcm0oYmluZGluZykge1xuICAgICAgICBpZiAodGhpcy5wYXJlbnRGb3JtICYmIHRoaXMucGFyZW50Rm9ybS5uZ2Zvcm0pIHtcbiAgICAgICAgICAgIC8vIGhhbmRsaW5nIGFzIGZvcm1BcnJheSB3aGVuIHBhcmVudCBpcyBsaXN0LiBIZW5jZSByZXR1cm5pbmcgaGVyZSBmcm9tIGFkZGluZyB0byBwYXJlbnRGb3JtIGFnYWluLlxuICAgICAgICAgICAgaWYgKHRoaXMuaXNQYXJlbnRMaXN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gYXNzaWduaW5nIHRoZSBjb250cm9sIG5hbWUgb2YgdGhlIGZvcm0gaW5zaWRlIHRoZSBwcmVmYWIgd2l0aCB0aGUgcHJlZmFiIG5hbWUuXG4gICAgICAgICAgICAvLyBUaGlzIHdpbGwgaGFwcGVuIG9ubHkgd2hlbiB0aGVyZSBpcyBvbmx5IG9uZSBmb3JtIGluc2lkZSBwcmVmYWIuXG4gICAgICAgICAgICAvLyBXZSBkbyBub3Qgc3VwcG9ydCBjaGFuZ2luZyB0aGlzIHdoZW4gbXVsdGlwbGUgZm9ybXMgYXJlIGluc2lkZSBwcmVmYWIuXG4gICAgICAgICAgICAvLyBUaGlzIHNjZW5hcmlvIGhhcyB0byBiZSBoYW5kbGVkIGJ5IGVuZCB1c2VyIGJ5IGNoYW5naW5nIGZvcm0gbmFtZXMgaW4gcHJlZmFiIGFjY29yZGluZyB0byB0aGUgZGF0YW1vZGVsIGJpbmRpbmcuXG4gICAgICAgICAgICBjb25zdCBwYXJlbnRDb250YWluZXIgPSB0aGlzLnBhcmVudFByZWZhYiB8fCB0aGlzLnBhcmVudFBhcnRpYWw7XG4gICAgICAgICAgICBpZiAocGFyZW50Q29udGFpbmVyKSB7XG4gICAgICAgICAgICAgICAgbGV0IHBhcmVudENvbnRlbnRFbDtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5wYXJlbnRQcmVmYWIpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50Q29udGVudEVsID0gcGFyZW50Q29udGFpbmVyLiRlbGVtZW50LmZpbmQoJ1t3bXByZWZhYmNvbnRhaW5lcl0nKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBwYXJlbnRDb250ZW50RWwgPSBwYXJlbnRDb250YWluZXIuJGVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAqIGFzc2lnbmluZyB0aGUgZm9ybSBuYW1lIHRvIHRoZSBwYXJlbnRDb250YWluZXIgbmFtZSBpLmUuIHBhcnRpYWwgbmFtZSBvciBwZXJmYWIgbmFtZSBieSBmb2xsb3dpbmdcbiAgICAgICAgICAgICAgICAgKiAxLiByZXRyaWV2aW5nIGFsbCB0aGUgZm9ybXMgaW4gdGhlIHBhcmVudENvbnRhaW5lclxuICAgICAgICAgICAgICAgICAqIDIuIGNvbnNpZGVyIHRoZSBmaXJzdCBmb3JtXG4gICAgICAgICAgICAgICAgICogMy4gaWYgdGhpcyBmb3JtIGlzIGluc2lkZSBsaXN0IGkuZS4gYWxzbyBmaW5kIGlmIHRoaXMgbGlzdCBpcyBhbHNvIGluc2lkZSB0aGUgcGFyZW50Q29udGFpbmVyIChwcmVmYWIgLyBwYXJ0aWFsKVxuICAgICAgICAgICAgICAgICAqIDQuIHRoZW4gZG8gbm90IGNoYW5nZSB0aGUgZm9ybSBuYW1lIHdoZW4gZm9ybSBpcyBpbnNpZGUgbGlzdCBhbmQgYWxzbyB3aGVuIHRoZXJlIGFyZSBzaWJsaW5ncyB0byB0aGUgZm9ybVxuICAgICAgICAgICAgICAgICAqIDUuIHRoaXMgbWVhbnMgZm9ybSBuYW1lIGNoYW5nZSBhcHBsaWVzIG9ubHkgd2hlbiB0aGVyZSBpcyBzaW5nbGUgZm9ybSAoaW1tZWRpYXRlIGNoaWxkKSBpbnNpZGUgdGhlIHBhcmVudENvbnRhaW5lci5cbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICBjb25zdCBwcmVmYWJJbm5lckZvcm0gPSBwYXJlbnRDb250ZW50RWwuZmluZCgnZm9ybScpLmZpcnN0KCk7XG4gICAgICAgICAgICAgICAgaWYgKF8uZ2V0KHByZWZhYklubmVyRm9ybVswXSwgJ3dpZGdldC53aWRnZXRJZCcpID09PSB0aGlzLndpZGdldElkKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGNoZWNrIHdoZXRoZXIgZm9ybSBpbnNpZGUgcHJlZmFiIGNvbnRhaW5lciBpcyBpbnNpZGUgdGhlIGxpc3QuIElmIHRydWUsIGRvIG5vdCBjaGFuZ2UgdGhlIG5hbWUuXG4gICAgICAgICAgICAgICAgICAgIGlmICghcHJlZmFiSW5uZXJGb3JtLmlzUGFyZW50TGlzdCAmJiAhcHJlZmFiSW5uZXJGb3JtLnNpYmxpbmdzKCdmb3JtJykubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBiaW5kaW5nID0gXy5nZXQocGFyZW50Q29udGFpbmVyLCAnbmFtZScpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IGNvdW50ZXIgPSAxO1xuICAgICAgICAgICAgbGV0IGlubmVyQmluZGluZyA9IGJpbmRpbmc7XG4gICAgICAgICAgICAvLyBJbm5lciBmb3JtcyBtYXkgaGF2ZSBzYW1lIG5hbWVzLiBJZiBzYW1lIG5hbWUgaXMgcHJlc2VudCwgYXBwZW5kIHVucWl1ZSBpZGVudGlmaWVyXG4gICAgICAgICAgICB3aGlsZSAodGhpcy5wYXJlbnRGb3JtLm5nZm9ybS5jb250cm9scy5oYXNPd25Qcm9wZXJ0eShpbm5lckJpbmRpbmcpKSB7XG4gICAgICAgICAgICAgICAgaW5uZXJCaW5kaW5nID0gYCR7YmluZGluZ31fJHtjb3VudGVyfWA7XG4gICAgICAgICAgICAgICAgY291bnRlcisrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXBOYW1lID0gaW5uZXJCaW5kaW5nO1xuICAgICAgICAgICAgLy8gSWYgcGFyZW50IGZvcm0gaXMgcHJlc2VudCwgYWRkIHRoZSBjdXJyZW50IGZvcm0gYXMgYXMgZm9ybUdyb3VwIGZvciBwYXJlbnQgZm9ybVxuICAgICAgICAgICAgdGhpcy5wYXJlbnRGb3JtLm5nZm9ybS5hZGRDb250cm9sKGlubmVyQmluZGluZywgdGhpcy5uZ2Zvcm0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gRXhwb3NlIHRoZSBldmVudHMgb24gY29udGV4dCBzbyB0aGF0IHRoZXkgY2FuIGJlIGFjY2Vzc2VkIGJ5IGZvcm0gYWN0aW9uc1xuICAgIHByaXZhdGUgYWRkRXZlbnRzVG9Db250ZXh0KGNvbnRleHQpIHtcbiAgICAgICAgY29udGV4dC5jYW5jZWwgPSAoKSA9PiB0aGlzLmNhbmNlbCgpO1xuICAgICAgICBjb250ZXh0LnJlc2V0ID0gKCkgPT4gdGhpcy5yZXNldCgpO1xuICAgICAgICBjb250ZXh0LnNhdmUgPSBldnQgPT4gdGhpcy5zYXZlKGV2dCk7XG4gICAgICAgIGNvbnRleHQuc2F2ZUFuZE5ldyA9ICgpID0+IHRoaXMuc2F2ZUFuZE5ldygpO1xuICAgICAgICBjb250ZXh0LnNhdmVBbmRWaWV3ID0gKCkgPT4gdGhpcy5zYXZlQW5kVmlldygpO1xuICAgICAgICBjb250ZXh0LmRlbGV0ZSA9ICgpID0+IHRoaXMuZGVsZXRlKCk7XG4gICAgICAgIGNvbnRleHQubmV3ID0gKCkgPT4gdGhpcy5uZXcoKTtcbiAgICAgICAgY29udGV4dC5lZGl0ID0gKCkgPT4gdGhpcy5lZGl0KCk7XG4gICAgICAgIGNvbnRleHQuaGlnaGxpZ2h0SW52YWxpZEZpZWxkcyA9ICgpID0+IHRoaXMuaGlnaGxpZ2h0SW52YWxpZEZpZWxkcygpO1xuICAgICAgICBjb250ZXh0LmZpbHRlciA9ICgpID0+IHRoaXMuZmlsdGVyKCk7XG4gICAgICAgIGNvbnRleHQuY2xlYXJGaWx0ZXIgPSAoKSA9PiB0aGlzLmNsZWFyRmlsdGVyKCk7XG4gICAgICAgIGNvbnRleHQuc3VibWl0ID0gZXZ0ID0+IHRoaXMuc3VibWl0KGV2dCk7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBtZXRob2QgZ2V0cyBhbGwgdGhlIGlubmVyIGZvcm1zIGFuZCB2YWxpZGF0ZXMgZWFjaCBmb3JtLlxuICAgIHByaXZhdGUgc2V0VmFsaWRhdGlvbk9uSW5uZXJGb3Jtcyh2YWxpZGF0ZVRvdWNoKSB7XG4gICAgICAgIGNvbnN0IGZvcm1FbGUgPSB0aGlzLmdldE5hdGl2ZUVsZW1lbnQoKTtcbiAgICAgICAgY29uc3QgZm9ybU9ianMgPSBmb3JtRWxlLnF1ZXJ5U2VsZWN0b3JBbGwoJy5hcHAtZm9ybScpO1xuICAgICAgICBjb25zdCB2YWxpZGF0aW9uTXNncyA9IFtdO1xuICAgICAgICBfLmZvckVhY2goZm9ybU9ianMsIGUgPT4ge1xuICAgICAgICAgICAgY29uc3QgZm9ybUluc3RhbmNlID0gKGUgYXMgYW55KS53aWRnZXQ7XG4gICAgICAgICAgICAvLyBkaWZmZXJlbnRpYXRpbmcgdGhlIHZhbGlkYXRpb25NZXNzYWdlcyBwcmVmaXggYmFzZWQgb24gdGhlIGZvcm1Hcm91cE5hbWVcbiAgICAgICAgICAgIC8vIGFzIHRoZSBmb3JtTmFtZSdzIGFyZSBzYW1lIHdoZW4gZm9ybXMgYXJlIGluIGxpc3RcbiAgICAgICAgICAgIGxldCBmb3JtTmFtZSA9IF8uZ2V0KGZvcm1JbnN0YW5jZSwgJ2Zvcm1Hcm91cE5hbWUnKSB8fCBmb3JtSW5zdGFuY2UubmFtZTtcbiAgICAgICAgICAgIGlmIChpc0RlZmluZWQoZm9ybUluc3RhbmNlLmZvcm1BcnJheUluZGV4KSkge1xuICAgICAgICAgICAgICAgIGZvcm1OYW1lID0gZm9ybU5hbWUgKyAnWycgKyBmb3JtSW5zdGFuY2UuZm9ybUFycmF5SW5kZXggKyAnXSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgY3VycmVudCA9IGZvcm1JbnN0YW5jZTtcbiAgICAgICAgICAgIHdoaWxlIChfLmdldChjdXJyZW50LCAncGFyZW50Rm9ybScpKSB7XG4gICAgICAgICAgICAgICAgbGV0IHBhcmVudE5hbWUgPSBjdXJyZW50LnBhcmVudEZvcm0uZm9ybUdyb3VwTmFtZSB8fCBjdXJyZW50LnBhcmVudEZvcm0ubmFtZTtcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudC5wYXJlbnRGb3JtLnBhcmVudEZvcm1BcnJheSkge1xuICAgICAgICAgICAgICAgICAgICBwYXJlbnROYW1lID0gcGFyZW50TmFtZSArICdbJyArIGN1cnJlbnQucGFyZW50Rm9ybS5mb3JtQXJyYXlJbmRleCArICddJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZm9ybU5hbWUgPSBwYXJlbnROYW1lICsgJy4nICsgZm9ybU5hbWU7XG4gICAgICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQucGFyZW50Rm9ybTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2V0VmFsaWRhdGlvbk9uRmllbGRzKGZvcm1JbnN0YW5jZSwgZm9ybU5hbWUsIHZhbGlkYXRlVG91Y2gpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHZhbGlkYXRpb24gb24gZm9ybUZpZWxkcy5cbiAgICAgKiBBcHBsaWVzIHRvIGlubmVyZm9ybSBhbmQgYWxzbyBzZXRzIGlubmVyZm9ybSB2YWxpZGF0aW9uIG9uIHBhcmVudCBmb3JtLlxuICAgICAqIEBwYXJhbSBwcmVmaXggY29udGFpbnMgdGhlIGZvcm0gbmFtZSwgd2hpY2ggYWxzbyBpbmNsdWRlcyBpdHMgcGFyZW50cyBmb3JtIG5hbWVcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IHZhbGlkYXRlVG91Y2hcbiAgICAgKi9cbiAgICBwcml2YXRlIHNldFZhbGlkYXRpb25PbkZpZWxkcyhmb3JtOiBGb3JtQ29tcG9uZW50LCBwcmVmaXg6IHN0cmluZywgdmFsaWRhdGVUb3VjaD86IGJvb2xlYW4pIHtcbiAgICAgICAgY29uc3QgY29udHJvbHMgPSBmb3JtLm5nZm9ybS5jb250cm9scztcbiAgICAgICAgY29uc3QgZm9ybUZpZWxkcyA9IGZvcm0uZm9ybUZpZWxkcztcbiAgICAgICAgaWYgKCFmb3JtRmllbGRzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgXy5mb3JFYWNoKGNvbnRyb2xzLCAodiwgaykgPT4ge1xuICAgICAgICAgICAgY29uc3QgZmllbGQgPSBmb3JtRmllbGRzLmZpbmQoZSA9PiBlLmtleSA9PT0gayk7XG4gICAgICAgICAgICBpZiAoIWZpZWxkIHx8ICh2YWxpZGF0ZVRvdWNoICYmICF2LnRvdWNoZWQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmllbGQubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpPy5zZXRBdHRyaWJ1dGUoJ2FyaWEtaW52YWxpZCcsIHYuaW52YWxpZCk7XG4gICAgICAgICAgICAvLyBpbnZva2luZyB0aGUgcHJlcGFyZVZhbGlkYXRpb24gb24gYm90aCBwYXJlbnQgZm9ybSBhbmQgY3VycmVudCBmb3JtLlxuICAgICAgICAgICAgdGhpcy5wcmVwYXJlVmFsaWRhdGlvbk9iaih2LCBrLCBmaWVsZCwgcHJlZml4KTtcbiAgICAgICAgICAgIHRoaXMucHJlcGFyZVZhbGlkYXRpb25PYmouY2FsbChmb3JtLCB2LCBrLCBmaWVsZCwgcHJlZml4KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQXNzaWducyAvIHVwZGF0ZXMgdmFsaWRhdGlvbk1lc3NhZ2VzIGJhc2VkIG9uIGFuZ3VsYXIgZXJyb3JzIG9uIGZpZWxkXG4gICAgcHJpdmF0ZSBwcmVwYXJlVmFsaWRhdGlvbk9iaih2LCBrLCBmaWVsZCwgcHJlZml4KSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMuZmluZEluZGV4KGUgPT4gKGUuZmllbGQgPT09IGsgJiYgZS5mdWxseVF1YWxpZmllZEZvcm1OYW1lID09PSBwcmVmaXgpKTtcbiAgICAgICAgaWYgKHYuaW52YWxpZCkge1xuICAgICAgICAgICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAqIGZpZWxkIGNvbnRhaW5zIHRoZSBmaWVsZE5hbWVcbiAgICAgICAgICAgICAgICAgKiB2YWx1ZSBjb250YWlucyB0aGUgZmllbGQgdmFsdWVcbiAgICAgICAgICAgICAgICAgKiBlcnJvclR5cGUgY29udGFpbnMgdGhlIGxpc3Qgb2YgZXJyb3JzXG4gICAgICAgICAgICAgICAgICogbWVzc2FnZSBjb250YWlucyB0aGUgdmFsaWRhdGlvbiBtZXNzYWdlXG4gICAgICAgICAgICAgICAgICogZ2V0RWxlbWVudCByZXR1cm5zIHRoZSBlbGVtZW50IGhhdmluZyBmb2N1cy10YXJnZXRcbiAgICAgICAgICAgICAgICAgKiBmb3JtTmFtZSByZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBmb3JtXG4gICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkOiBrLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZmllbGQudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yVHlwZTogXy5rZXlzKHYuZXJyb3JzKSxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogZmllbGQudmFsaWRhdGlvbm1lc3NhZ2UgfHwgJycsXG4gICAgICAgICAgICAgICAgICAgIGdldEVsZW1lbnQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmaWVsZC4kZWxlbWVudC5maW5kKCdbZm9jdXMtdGFyZ2V0XScpO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBmb3JtTmFtZTogXy5sYXN0KHByZWZpeC5zcGxpdCgnLicpKSxcbiAgICAgICAgICAgICAgICAgICAgZnVsbHlRdWFsaWZpZWRGb3JtTmFtZTogcHJlZml4XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzW2luZGV4XS52YWx1ZSA9IGZpZWxkLnZhbHVlO1xuICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzW2luZGV4XS5lcnJvclR5cGUgPSBfLmtleXModi5lcnJvcnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHYudmFsaWQgJiYgaW5kZXggPiAtMSkge1xuICAgICAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRoaXMgd2lsbCByZXR1cm4gYSBvYmplY3QgY29udGFpbmluZyB0aGUgZXJyb3IgZGV0YWlscyBmcm9tIHRoZSBsaXN0IG9mIGZvcm1GaWVsZHMgdGhhdCBhcmUgaW52YWxpZFxuICAgIHByaXZhdGUgc2V0VmFsaWRhdGlvbk1zZ3ModmFsaWRhdGVUb3VjaD86IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKCF0aGlzLmZvcm1GaWVsZHMubGVuZ3RoICYmIF8uaXNFbXB0eSh0aGlzLm5nZm9ybS5jb250cm9scykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldFZhbGlkYXRpb25PbkZpZWxkcyh0aGlzLCB0aGlzLm5hbWUsIHZhbGlkYXRlVG91Y2gpO1xuICAgICAgICB0aGlzLnNldFZhbGlkYXRpb25PbklubmVyRm9ybXModmFsaWRhdGVUb3VjaCk7XG4gICAgfVxuXG4gICAgLy8gY2hhbmdlIGFuZCBibHVyIGV2ZW50cyBhcmUgYWRkZWQgZnJvbSB0aGUgdGVtcGxhdGVcbiAgICBwcm90ZWN0ZWQgaGFuZGxlRXZlbnQobm9kZTogSFRNTEVsZW1lbnQsIGV2ZW50TmFtZTogc3RyaW5nLCBjYWxsYmFjazogRnVuY3Rpb24sIGxvY2FsczogYW55KSB7XG4gICAgICAgIGlmIChldmVudE5hbWUgIT09ICdzdWJtaXQnKSB7XG4gICAgICAgICAgICBzdXBlci5oYW5kbGVFdmVudCh0aGlzLm5hdGl2ZUVsZW1lbnQsIGV2ZW50TmFtZSwgY2FsbGJhY2ssIGxvY2Fscyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZUZpZWxkU291cmNlKCkge1xuICAgICAgICBpZiAodGhpcy5mb3JtZGF0YXNvdXJjZSAmJiB0aGlzLmZvcm1kYXRhc291cmNlLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uSVNfQVBJX0FXQVJFKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZm9ybWRhdGFzb3VyY2UgJiYgIXRoaXMuZm9ybWRhdGFzb3VyY2UudHdvV2F5QmluZGluZykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZm9ybUZpZWxkcy5mb3JFYWNoKGZvcm1GaWVsZCA9PiB7XG4gICAgICAgICAgICBmb3JtRmllbGQuc2V0Rm9ybVdpZGdldCgnZGF0YXZhbHVlc291cmNlJywgdGhpcy5mb3JtZGF0YXNvdXJjZSk7XG4gICAgICAgICAgICBmb3JtRmllbGQuc2V0Rm9ybVdpZGdldCgnYmluZGRhdGF2YWx1ZScsIGAke3RoaXMuYmluZGZvcm1kYXRhfS4ke2Zvcm1GaWVsZC5rZXl9YCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFRoaXMgbWV0aG9kIGxvb3BzIHRocm91Z2ggdGhlIGZvcm0gZmllbGRzIGFuZCBoaWdobGlnaHRzIHRoZSBpbnZhbGlkIGZpZWxkcyBieSBzZXR0aW5nIHN0YXRlIHRvIHRvdWNoZWRcbiAgICBoaWdobGlnaHRJbnZhbGlkRmllbGRzKCkge1xuICAgICAgICBzZXRUb3VjaGVkU3RhdGUodGhpcywgdGhpcy5uZ2Zvcm0sICcnKTtcbiAgICB9XG5cbiAgICAvLyBEaXNhYmxlIHRoZSBmb3JtIHN1Ym1pdCBpZiBmb3JtIGlzIGluIGludmFsaWQgc3RhdGUuIEhpZ2hsaWdodCBhbGwgdGhlIGludmFsaWQgZmllbGRzIGlmIHZhbGlkYXRpb24gdHlwZSBpcyBkZWZhdWx0XG4gICAgdmFsaWRhdGVGaWVsZHNPblN1Ym1pdCgpIHtcbiAgICAgICAgdGhpcy5zZXRWYWxpZGF0aW9uTXNncygpO1xuICAgICAgICAvLyBEaXNhYmxlIHRoZSBmb3JtIHN1Ym1pdCBpZiBmb3JtIGlzIGluIGludmFsaWQgc3RhdGUuIEZvciBkZWxldGUgb3BlcmF0aW9uLCBkbyBub3QgY2hlY2sgdGhlIHZhbGlkYXRpb24uXG4gICAgICAgIGlmICh0aGlzLm9wZXJhdGlvblR5cGUgIT09ICdkZWxldGUnICYmICh0aGlzLnZhbGlkYXRpb250eXBlID09PSAnaHRtbCcgfHwgdGhpcy52YWxpZGF0aW9udHlwZSA9PT0gJ2RlZmF1bHQnKVxuICAgICAgICAgICAgICAgICYmIHRoaXMubmdmb3JtICYmIHRoaXMubmdmb3JtLmludmFsaWQpIHtcblxuICAgICAgICAgICAgaWYgKHRoaXMubmdmb3JtLmludmFsaWQpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy52YWxpZGF0aW9udHlwZSA9PT0gJ2RlZmF1bHQnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGlnaGxpZ2h0SW52YWxpZEZpZWxkcygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBGaW5kIHRoZSBmaXJzdCBpbnZhbGlkIHVudG9jaGVkIGVsZW1lbnQgYW5kIHNldCBpdCB0byB0b3VjaGVkLlxuICAgICAgICAgICAgICAgIC8vIFNhZmFyaSBkb2VzIG5vdCBmb3JtIHZhbGlkYXRpb25zLiB0aGlzIHdpbGwgZW5zdXJlIHRoYXQgZXJyb3IgaXMgc2hvd24gZm9yIHVzZXJcbiAgICAgICAgICAgICAgICBjb25zdCBlbGVGb3JtID0gZmluZEludmFsaWRFbGVtZW50KHRoaXMuJGVsZW1lbnQsIHRoaXMubmdmb3JtKTtcbiAgICAgICAgICAgICAgICBjb25zdCAkaW52YWxpZEZvcm0gPSBlbGVGb3JtLm5nRm9ybTtcbiAgICAgICAgICAgICAgICBsZXQgJGludmFsaWRFbGUgID0gZWxlRm9ybS4kZWxlO1xuICAgICAgICAgICAgICAgICRpbnZhbGlkRWxlID0gJGludmFsaWRFbGUucGFyZW50KCkuZmluZCgnW2ZvY3VzLXRhcmdldF0nKTtcbiAgICAgICAgICAgICAgICBpZiAoJGludmFsaWRFbGUubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIG9uIHNhdmUgY2xpY2sgaW4gcGFnZSBsYXlvdXQgbGl2ZWZvcm0sIGZvY3VzIG9mIGF1dG9jb21wbGV0ZSB3aWRnZXQgb3BlbnMgZnVsbC1zY3JlZW4gc2VhcmNoLlxuICAgICAgICAgICAgICAgICAgICBpZiAoISRpbnZhbGlkRWxlLmhhc0NsYXNzKCdhcHAtc2VhcmNoLWlucHV0JykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRpbnZhbGlkRWxlLmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmdFbGUgPSAkaW52YWxpZEZvcm0gJiYgJGludmFsaWRGb3JtLmNvbnRyb2xzWyRpbnZhbGlkRWxlLmF0dHIoJ2Zvcm1Db250cm9sTmFtZScpIHx8ICRpbnZhbGlkRWxlLmF0dHIoJ25hbWUnKV07XG4gICAgICAgICAgICAgICAgICAgIGlmIChuZ0VsZSAmJiBuZ0VsZS5tYXJrQXNUb3VjaGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZ0VsZS5tYXJrQXNUb3VjaGVkKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgJGFwcERpZ2VzdCgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIG9uUHJvcGVydHlDaGFuZ2Uoa2V5LCBudiwgb3Y/KSB7XG4gICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICBjYXNlICdjYXB0aW9uYWxpZ24nOlxuICAgICAgICAgICAgICAgIHRoaXMuY2FwdGlvbkFsaWduQ2xhc3MgPSAnYWxpZ24tJyArIG52O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnY2FwdGlvbnBvc2l0aW9uJzpcbiAgICAgICAgICAgICAgICB0aGlzLnNldExheW91dENvbmZpZygpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnY2FwdGlvbndpZHRoJzpcbiAgICAgICAgICAgICAgICB0aGlzLnNldExheW91dENvbmZpZygpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnY2FwdGlvbnNpemUnOlxuICAgICAgICAgICAgICAgIHRoaXMuY2FwdGlvbnNpemUgPSBudjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ25vdmFsaWRhdGUnOlxuICAgICAgICAgICAgICAgIC8vICBTZXQgdmFsaWRhdGlvbiB0eXBlIGJhc2VkIG9uIHRoZSBub3ZhbGlkYXRlIHByb3BlcnR5XG4gICAgICAgICAgICAgICAgdGhpcy53aWRnZXQudmFsaWRhdGlvbnR5cGUgPSAobnYgPT09IHRydWUgfHwgbnYgPT09ICd0cnVlJykgPyAnbm9uZScgOiAnZGVmYXVsdCc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdmb3JtZGF0YSc6XG4gICAgICAgICAgICAgICAgLy8gRm9yIGxpdmVsaXN0IHdoZW4gbXVsdGlzZWxlY3QgaXMgZW5hYmxlZCwgZm9ybWRhdGEgd2lsbCBiZSBhcnJheSBvZiBvYmplY3RzLiBJbiB0aGlzIGNhc2UgY29uc2lkZXIgdGhlIGxhc3Qgb2JqZWN0IGFzIGZvcm1kYXRhLlxuICAgICAgICAgICAgICAgIGlmIChfLmlzRXF1YWwobnYsIG92KSkge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXy5pc0FycmF5KG52KSA/IHRoaXMuc2V0Rm9ybURhdGEoXy5sYXN0KG52KSkgOiB0aGlzLnNldEZvcm1EYXRhKG52KTtcbiAgICAgICAgICAgICAgICAvLyBpZiBkYXRhc2V0IG9uIHRoZSBmb3JtRmllbGRzIGFyZSBub3Qgc2V0IGFzIHRoZSBkYXRhc291cmNlQ2hhbmdlIGlzIHRyaWdnZXJlZCBiZWZvcmUgdGhlIGZvcm1GaWVsZHMgYXJlIHJlZ2lzdGVyZWQuXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzRGF0YVNvdXJjZVVwZGF0ZWQgJiYgdGhpcy5kYXRhc291cmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25EYXRhU291cmNlQ2hhbmdlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZGVmYXVsdG1vZGUnOlxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5pc0xheW91dERpYWxvZykge1xuICAgICAgICAgICAgICAgICAgICBpZiAobnYgJiYgbnYgPT09ICdFZGl0Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVNb2RlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlTW9kZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNVcGRhdGVNb2RlID0gdGhpcy51cGRhdGVNb2RlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2RhdGFzb3VyY2UnOlxuICAgICAgICAgICAgICAgIHRoaXMub25EYXRhU291cmNlQ2hhbmdlKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdmb3JtZGF0YXNvdXJjZSc6XG4gICAgICAgICAgICAgICAgdGhpcy5vbkZvcm1EYXRhU291cmNlQ2hhbmdlKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtZXRhZGF0YSc6XG4gICAgICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZUZvcm1GaWVsZHMoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2RhdGFzZXQnOlxuICAgICAgICAgICAgICAgIGNvbnN0IGZvcm1GaWVsZHMgPSB0aGlzLmdldEZvcm1GaWVsZHMoKTtcbiAgICAgICAgICAgICAgICBmb3JtRmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAvLyBub3RpZnlpbmcgdGhlIGRhdGFzZXQgY2hhbmdlIHRvIHRoZSBmb3JtLWZpZWxkIHdpZGdldC5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFmaWVsZC5pc0RhdGFTZXRCb3VuZCAmJiBfLmdldChmaWVsZC5mb3JtV2lkZ2V0LCAnZGF0YXNldCQnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQuZm9ybVdpZGdldC5kYXRhc2V0JC5uZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgc3VwZXIub25Qcm9wZXJ0eUNoYW5nZShrZXksIG52LCBvdik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBFdmVudCBjYWxsYmFja3Mgb24gc3VjY2Vzcy9lcnJvclxuICAgIG9uUmVzdWx0Q2IoZGF0YSwgc3RhdHVzLCBldmVudD8pIHtcbiAgICAgICAgY29uc3QgcGFyYW1zID0geyRldmVudDogZXZlbnQsICRkYXRhOiBkYXRhLCAkb3BlcmF0aW9uOiB0aGlzLm9wZXJhdGlvblR5cGV9O1xuICAgICAgICAvLyB3aGV0aGVyIHNlcnZpY2UgY2FsbCBzdWNjZXNzIG9yIGZhaWx1cmUgY2FsbCB0aGlzIG1ldGhvZFxuICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ3Jlc3VsdCcsIHBhcmFtcyk7XG4gICAgICAgIGlmIChzdGF0dXMpIHtcbiAgICAgICAgICAgIC8vIGlmIHNlcnZpY2UgY2FsbCBpcyBzdWNjZXNzIGNhbGwgdGhpcyBtZXRob2RcbiAgICAgICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnc3VjY2VzcycsIHBhcmFtcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBpZiBzZXJ2aWNlIGNhbGwgZmFpbHMgY2FsbCB0aGlzIG1ldGhvZFxuICAgICAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdlcnJvcicsIHBhcmFtcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBEaXNwbGF5IG9yIGhpZGUgdGhlIGlubGluZSBtZXNzYWdlLyB0b2FzdGVyXG4gICAgdG9nZ2xlTWVzc2FnZShzaG93OiBib29sZWFuLCBtc2c/OiBzdHJpbmcsIHR5cGU/OiBzdHJpbmcsIGhlYWRlcj86IHN0cmluZykge1xuICAgICAgICBsZXQgdGVtcGxhdGU7XG4gICAgICAgIGlmIChzaG93ICYmIG1zZykge1xuICAgICAgICAgICAgdGVtcGxhdGUgPSAodHlwZSA9PT0gJ2Vycm9yJyAmJiB0aGlzLmVycm9ybWVzc2FnZSkgPyB0aGlzLmVycm9ybWVzc2FnZSA6IG1zZztcbiAgICAgICAgICAgIGlmICh0aGlzLm1lc3NhZ2VsYXlvdXQgPT09ICdJbmxpbmUnKSB7XG4gICAgICAgICAgICAgICAgdGVtcGxhdGUgPSB0aGlzLmNoZWNrQXBwU2VydmljZUVycm9yTXNnKHR5cGUpIHx8IHRlbXBsYXRlO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdHVzTWVzc2FnZSA9IHsnY2FwdGlvbic6IHRlbXBsYXRlIHx8ICcnLCB0eXBlOiB0eXBlfTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5tZXNzYWdlUmVmKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZVJlZi5zaG93TWVzc2FnZSh0aGlzLnN0YXR1c01lc3NhZ2UuY2FwdGlvbiwgdGhpcy5zdGF0dXNNZXNzYWdlLnR5cGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyB3aGVuIG1lc3NhZ2UgbGF5b3V0IGlzIGlubGluZSBvbiBzYXZlLCBzY3JvbGwgdGhlIHZpZXcgdG8gdG9wIG9mIHRoZSBmb3JtIHRvIHNlZSB0aGUgc3RhdHVzIG9mIHRoZSBvcGVyYXRpb25cbiAgICAgICAgICAgICAgICBpZiAoIWlzRWxlbWVudEluVmlld3BvcnQodGhpcy4kZWxlbWVudFswXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgc2Nyb2xsVG9FbGVtZW50KHRoaXMuJGVsZW1lbnRbMF0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hcHAubm90aWZ5QXBwKHRlbXBsYXRlLCB0eXBlLCBoZWFkZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zdGF0dXNNZXNzYWdlLmNhcHRpb24gPSAnJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGlmIHRoZXJlIGlzIGFuIEFwcC5vblNlcnZpY2VFcnJvciBoYW5kbGVyIGZvciB0aGUgYXBwLCB0aGF0IG1lc3NhZ2Ugc2hvdWxkIGJlIHVzZWQgaW5zdGVhZCBvZiBzZXJ2ZXIgcmV0dXJuZWQgZXJyb3IgbWVzc2FnZVxuICAgIGNoZWNrQXBwU2VydmljZUVycm9yTXNnKHR5cGUpIHtcbiAgICAgICAgY29uc3Qgbm90aWZpY2F0aW9uQWN0aW9uID0gXy5nZXQodGhpcy5hcHAsICdBY3Rpb25zLmFwcE5vdGlmaWNhdGlvbicpO1xuICAgICAgICBpZiAobm90aWZpY2F0aW9uQWN0aW9uICYmIHR5cGUgPT09ICdlcnJvcicpIHtcbiAgICAgICAgICAgIHJldHVybiBub3RpZmljYXRpb25BY3Rpb24uZ2V0TWVzc2FnZSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBIaWRlIHRoZSBpbmxpbmUgbWVzc2FnZS8gdG9hc3RlclxuICAgIGNsZWFyTWVzc2FnZSgpIHtcbiAgICAgICAgdGhpcy50b2dnbGVNZXNzYWdlKGZhbHNlKTtcbiAgICB9XG5cbiAgICAvLyBTZXQgdGhlIGNsYXNzZXMgb24gdGhlIGZvcm0gYmFzZWQgb24gdGhlIGNhcHRpb25wb3NpdGlvbiBhbmQgY2FwdGlvbndpZHRoIHByb3BlcnRpZXNcbiAgICBwcml2YXRlIHNldExheW91dENvbmZpZygpIHtcbiAgICAgICAgbGV0IGxheW91dENvbmZpZztcbiAgICAgICAgbGF5b3V0Q29uZmlnID0gZ2V0RmllbGRMYXlvdXRDb25maWcodGhpcy5jYXB0aW9ud2lkdGgsIHRoaXMuY2FwdGlvbnBvc2l0aW9uLCBfLmdldCh0aGlzLmFwcC5zZWxlY3RlZFZpZXdQb3J0LCAnb3MnKSk7XG4gICAgICAgIHRoaXMuX3dpZGdldENsYXNzID0gbGF5b3V0Q29uZmlnLndpZGdldENscztcbiAgICAgICAgdGhpcy5fY2FwdGlvbkNsYXNzID0gbGF5b3V0Q29uZmlnLmNhcHRpb25DbHM7XG5cbiAgICAgICAgJGFwcERpZ2VzdCgpO1xuICAgIH1cblxuICAgIHJlZ2lzdGVyRm9ybVdpZGdldCh3aWRnZXQpIHtcbiAgICAgICAgY29uc3QgbmFtZSA9IHdpZGdldC5uYW1lIHx8IHdpZGdldC5rZXk7XG4gICAgICAgIHRoaXMuZm9ybVdpZGdldHNbbmFtZV0gPSB3aWRnZXQ7XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJGb3JtRmllbGRzKGZvcm1GaWVsZCkge1xuICAgICAgICBjb25zdCBmaWVsZENvdW50ID0gdGhpcy5mb3JtRmllbGRzLnB1c2goZm9ybUZpZWxkKTtcbiAgICAgICAgdGhpcy5mb3JtZmllbGRzW2Zvcm1GaWVsZC5rZXldID0gZm9ybUZpZWxkO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyRm9ybVdpZGdldChmb3JtRmllbGQpO1xuICAgICAgICB0aGlzLl9kZWJvdW5jZWRVcGRhdGVGaWVsZFNvdXJjZSgpO1xuICAgICAgICBpZiAodGhpcy5wYXJlbnRGb3JtKSB7XG4gICAgICAgICAgICB0aGlzLnBhcmVudEZvcm0uZm9ybUZpZWxkcy5wdXNoKGZvcm1GaWVsZCk7XG4gICAgICAgICAgICB0aGlzLnBhcmVudEZvcm0uZm9ybWZpZWxkc1tmb3JtRmllbGQua2V5XSA9IGZvcm1GaWVsZDtcbiAgICAgICAgICAgIC8vIGlubmVyIGZvcm1maWVsZHMgYXJlIHB1c2hlZCB0byBwYXJlbnRGb3JtLCBwYXNzaW5nIGN1cnJlbnQgaW5uZXJGb3JtJ3MgZm9ybWRhdGEgdG8gc2V0IGlubmVyRm9ybWRhdGEgdG8gdGhlc2UgaW5uZXJGb3JtRmllbGRzXG4gICAgICAgICAgICB0aGlzLnBhcmVudEZvcm0uc2V0Rm9ybURhdGEodGhpcy5wYXJlbnRGb3JtLmZvcm1kYXRhLCB0aGlzLmZvcm1GaWVsZHMsIHRoaXMuZm9ybWRhdGEgfHwge30pO1xuICAgICAgICB9XG4gICAgICAgIC8vIFdNUy0xODk2NzogQXBwbHlpbmcgZm9ybWFkYXRhIGFmdGVyIGZvcm1maWVsZHMgYXJlIHJlYWR5XG4gICAgICAgIGlmIChmaWVsZENvdW50ID09PSB0aGlzLm51bWJlck9mRmllbGRzICYmICFfLmlzRW1wdHkodGhpcy5mb3JtZGF0YSkpIHtcbiAgICAgICAgICAgIHRoaXMub25EYXRhU291cmNlQ2hhbmdlKCk7XG4gICAgICAgICAgICBfLmlzQXJyYXkodGhpcy5mb3JtZGF0YSkgPyB0aGlzLnNldEZvcm1EYXRhKF8ubGFzdCh0aGlzLmZvcm1kYXRhKSkgOiB0aGlzLnNldEZvcm1EYXRhKHRoaXMuZm9ybWRhdGEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJBY3Rpb25zKGZvcm1BY3Rpb24pIHtcbiAgICAgICAgdGhpcy5idXR0b25BcnJheS5wdXNoKGZvcm1BY3Rpb24pO1xuICAgIH1cblxuICAgIC8vIFVwZGF0ZSB0aGUgZGF0YW91dHB1dCB3aGVuZXZlciB0aGVyZSBpcyBhIGNoYW5nZSBpbiBpbnNpZGUgZm9ybSB3aWRnZXQgdmFsdWVcbiAgICB1cGRhdGVGb3JtRGF0YU91dHB1dChkYXRhT2JqZWN0KSB7XG4gICAgICAgIC8vIFNldCB0aGUgdmFsdWVzIG9mIHRoZSB3aWRnZXRzIGluc2lkZSB0aGUgbGl2ZSBmb3JtIChvdGhlciB0aGFuIGZvcm0gZmllbGRzKSBpbiBmb3JtIGRhdGFcbiAgICAgICAgXy5mb3JFYWNoKHRoaXMubmdmb3JtLnZhbHVlLCAodmFsLCBrZXkpID0+IHtcbiAgICAgICAgICAgIGlmICghXy5maW5kKHRoaXMuZm9ybUZpZWxkcywge2tleX0pKSB7XG4gICAgICAgICAgICAgICAgZGF0YU9iamVjdFtrZXldID0gdmFsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5kYXRhb3V0cHV0ID0gZGF0YU9iamVjdDtcbiAgICB9XG5cbiAgICAvLyBDb25zdHJ1Y3QgdGhlIGRhdGEgb2JqZWN0IG1lcmdpbmcgdGhlIGZvcm0gZmllbGRzIGFuZCBjdXN0b20gd2lkZ2V0cyBkYXRhXG4gICAgY29uc3RydWN0RGF0YU9iamVjdCgpIHtcbiAgICAgICAgY29uc3QgZm9ybURhdGEgICAgID0ge307XG4gICAgICAgIGNvbnN0IGZvcm1GaWVsZHMgPSB0aGlzLmdldEZvcm1GaWVsZHMoKTtcbiAgICAgICAgLy8gR2V0IGFsbCBmb3JtIGZpZWxkcyBhbmQgcHJlcGFyZSBmb3JtIGRhdGEgYXMga2V5IHZhbHVlIHBhaXJzXG4gICAgICAgIGZvcm1GaWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICAgICAgICBsZXQgZmllbGROYW1lLFxuICAgICAgICAgICAgICAgIGZpZWxkVmFsdWU7XG4gICAgICAgICAgICBmaWVsZFZhbHVlID0gZmllbGQuZGF0YXZhbHVlIHx8IGZpZWxkLl9jb250cm9sLnZhbHVlO1xuICAgICAgICAgICAgZmllbGRWYWx1ZSA9IChmaWVsZFZhbHVlID09PSBudWxsIHx8IGZpZWxkVmFsdWUgPT09ICcnKSA/IHVuZGVmaW5lZCA6IGZpZWxkVmFsdWU7XG5cbiAgICAgICAgICAgIGlmIChmaWVsZC50eXBlID09PSAnZmlsZScpIHtcbiAgICAgICAgICAgICAgICBmaWVsZFZhbHVlID0gZ2V0RmlsZXModGhpcy5uYW1lLCBmaWVsZC5rZXkgKyAnX2Zvcm1XaWRnZXQnLCBmaWVsZC5tdWx0aXBsZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZpZWxkTmFtZSA9IGZpZWxkLmtleSB8fCBmaWVsZC50YXJnZXQgfHwgZmllbGQubmFtZTtcblxuICAgICAgICAgICAgLy8gb24gY3VycmVudCBGb3JtLCB3aGVuIGZpZWxkIGlzIGlubmVyRm9ybSBmaWVsZCB0aGVuIHdlIGdyb3VwIHRoZXNlIGZpZWxkcyB1bmRlciBuZXcgb2JqZWN0IHVzaW5nIGZvcm1Hcm91cE5hbWUgYXMga2V5XG4gICAgICAgICAgICAvLyBGb3Igc3VwcG9zZSwgYXBwbGljYW50TmFtZSwgYXBwbGljYW50SUQgYXJlIGZvcm1maWVsZHMgaW4gY3VycmVudEZvcm1cbiAgICAgICAgICAgIC8vIFRoaXMgZm9ybSBpcyBoYXZpbmcgaW5uZXJmb3JtIGkuZS4gYWRkcmVzcywgdGhlc2UgZmllbGRzIGFyZSBsaXN0ZWQgYXNcbiAgICAgICAgICAgIC8vIHtcImFwcGxpY2FudE5hbWVcIjogXCJcIiwgXCJhcHBsaWNhbnRJRFwiOiBcIlwiLCBcImFkZHJlc3NcIjoge1wic3RyZWV0XCI6IFwiXCJ9fVxuICAgICAgICAgICAgaWYgKGZpZWxkLmZvcm0ud2lkZ2V0SWQgIT09IHRoaXMud2lkZ2V0SWQgJiYgZmllbGQuZm9ybS5mb3JtR3JvdXBOYW1lKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmQgPSBfLmdldChmb3JtRGF0YSwgZmllbGQuZm9ybS5mb3JtR3JvdXBOYW1lLCB7fSk7XG4gICAgICAgICAgICAgICAgZmRbZmllbGROYW1lXSA9IGZpZWxkVmFsdWU7XG4gICAgICAgICAgICAgICAgXy5zZXQoZm9ybURhdGEsIGZpZWxkLmZvcm0uZm9ybUdyb3VwTmFtZSwgZmQpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnBhcmVudEZvcm0gJiYgdGhpcy5wYXJlbnRGb3JtLm5nZm9ybSAmJiBmaWVsZC5mb3JtLmlzUGFyZW50TGlzdCkgeyAvLyBGaXggZm9yIFtXTVMtMjU4MDZdOiB1c2UgZm9ybUFycmF5SW5kZXggb25seSBpZiBmb3JtIGhhcyBhIHBhcmVudCBmb3JtXG4gICAgICAgICAgICAgICAgLy8gc2V0dGluZyBmb3JtZGF0YSBiYXNlZCBvbiBmb3JtQXJyYXlJbmRleFxuICAgICAgICAgICAgICAgIGNvbnN0IGZkID0gXy5nZXQoZm9ybURhdGEsIGZpZWxkLmZvcm0ucGFyZW50TGlzdC5uYW1lLCBbXSk7XG4gICAgICAgICAgICAgICAgZmRbZmllbGQuZm9ybS5mb3JtQXJyYXlJbmRleF0gPSBmZFtmaWVsZC5mb3JtLmZvcm1BcnJheUluZGV4XSB8fCB7fTtcbiAgICAgICAgICAgICAgICBmZFtmaWVsZC5mb3JtLmZvcm1BcnJheUluZGV4XVtmaWVsZE5hbWVdID0gZmllbGRWYWx1ZTtcbiAgICAgICAgICAgICAgICBfLnNldChmb3JtRGF0YSwgZmllbGQuZm9ybS5wYXJlbnRMaXN0Lm5hbWUsIGZkKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gSW4gY2FzZSBvZiB1cGRhdGUgdGhlIGZpZWxkIHdpbGwgYmUgYWxyZWFkeSBwcmVzZW50IGluIGZvcm0gZGF0YVxuICAgICAgICAgICAgICAgIF8uc2V0KGZvcm1EYXRhLCBmaWVsZE5hbWUsIGZpZWxkVmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy51cGRhdGVGb3JtRGF0YU91dHB1dChmb3JtRGF0YSk7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGFvdXRwdXQ7XG4gICAgfVxuXG4gICAgdXBkYXRlRGF0YU91dHB1dCgpIHtcbiAgICAgICAgdGhpcy5jb25zdHJ1Y3REYXRhT2JqZWN0KCk7XG4gICAgICAgIGlmICh0aGlzLm5nZm9ybS50b3VjaGVkKSB7XG4gICAgICAgICAgICB0aGlzLnNldFZhbGlkYXRpb25Nc2dzKHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gRm9ybUZpZWxkcyB3aWxsIGNvbnRhaW4gYWxsIHRoZSBmaWVsZHMgaW4gcGFyZW50IGFuZCBpbm5lciBmb3JtIGFsc28uXG4gICAgLy8gVGhpcyByZXR1cm5zIHRoZSBmb3JtRmllbGRzIGluIHRoZSBmb3JtIGJhc2VkIG9uIHRoZSBmb3JtIG5hbWUuXG4gICAgZ2V0Rm9ybUZpZWxkcygpIHtcbiAgICAgICAgcmV0dXJuIF8uZmlsdGVyKHRoaXMuZm9ybUZpZWxkcywgZm9ybUZpZWxkID0+IHtcbiAgICAgICAgICAgIHJldHVybiBmb3JtRmllbGQuZm9ybS5uYW1lID09PSB0aGlzLm5hbWU7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHNldEZpZWxkVmFsdWUoZmllbGQsIGRhdGEsIGlubmVyRm9ybWRhdGE/KSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGZpZWxkLmtleSB8fCBmaWVsZC5uYW1lO1xuICAgICAgICAvLyBpZiBjdXN0b21maWVsZCBwYXJhbSB2YWx1ZSBpcyBub3QgaW4gdGhlIGZvcm1kYXRhIHRoZW4gZG8gbm90IGFzc2lnbiBmaWVsZCB2YWx1ZVxuICAgICAgICAvLyBhcyBpdCBjYW4gY29udGFpbiBkZWZhdWx0IHZhbHVlIHdoaWNoIHdpbGwgYWdhaW4gYmUgb3ZlcnJpZGRlbiBieSB1bmRlZmluZWQuXG4gICAgICAgIGNvbnN0IGZkID0gaW5uZXJGb3JtZGF0YSA/IGlubmVyRm9ybWRhdGEgOiBkYXRhO1xuICAgICAgICBpZiAoZmQpIHtcbiAgICAgICAgICAgIGlmIChmZC5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgICAgICAgZmllbGQudmFsdWUgPSAgXy5nZXQoZmQsIGtleSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKF8uaW5jbHVkZXMoa2V5LCAnLicpKSB7XG4gICAgICAgICAgICAgICAgLy8ga2V5IGNvbnRhaW5zICcuJyB3aGVuIG1hcHBpbmcgdGhlIGZpZWxkcyB0byBjaGlsZCByZWZlcmVuY2UgaS5lLiBjaGlsZENvbCBpcyBoYXZpbmcga2V5IGFzIFwicGFyZW50LmNoaWxkQ29sXCJcbiAgICAgICAgICAgICAgICBpZiAoZmQuaGFzT3duUHJvcGVydHkoXy5zcGxpdChrZXksICcuJylbMF0pKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnZhbHVlID0gIF8uZ2V0KGZkLCBrZXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFdNUy0xODkwNjogRm9yIGRlZmF1bHQgdmFsdWUsIGRvIG5vdCBtYXJrIHRoZSBmb3JtIGFzIGRpcnR5LlxuICAgICAgICAgICAgaWYgKHRoaXMuZGlydHkgJiYgIXRoaXMuX3RyaWdnZXJlZEJ5VXNlcikge1xuICAgICAgICAgICAgICAgIHRoaXMubWFya0FzUHJpc3RpbmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmb3JtR3JvdXBOYW1lID0gZmllbGQuZm9ybS5mb3JtR3JvdXBOYW1lO1xuICAgICAgICAvKipcbiAgICAgICAgICogaWYgZm9ybUdyb3VwTmFtZSBpcyBkZWZpbmVkIHdoaWNoIG1lYW5zIGZpZWxkIGlzIGluc2lkZSB0aGUgaW5uZXIgZm9ybVxuICAgICAgICAgKiB0aGVuIHNldCB0aGUgZm9ybWRhdGEgb24gdGhlIGZpZWxkJ3MgZm9ybSB1c2luZyBmb3JtR3JvdXBOYW1lXG4gICAgICAgICAqL1xuICAgICAgICBpZiAoZm9ybUdyb3VwTmFtZSAmJiBfLmdldChkYXRhLCBmb3JtR3JvdXBOYW1lKSkge1xuICAgICAgICAgICAgdGhpcy5zZXRGb3JtRGF0YS5jYWxsKGZpZWxkLmZvcm0sIGRhdGFbZm9ybUdyb3VwTmFtZV0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIGlmIGZvcm1kYXRhIGlzIGFzc2lnbmVkIGxhdGVyIHRoZW4gb24gcHJvcGVydHlDaGFuZ2VIYW5kbGVyLCBldmVuIGlubmVyIGZvcm1zIGRhdGEgYWxzbyBuZWVkcyB0byBiZSB1cGRhdGVkLlxuICAgICAgICBpZiAoXy5nZXQoZmllbGQuZm9ybSwgJ3BhcmVudEZvcm1BcnJheScpKSB7XG4gICAgICAgICAgICB0aGlzLnNldEZvcm1EYXRhRnJvbVBhcmVudEZvcm1EYXRhLmNhbGwoZmllbGQuZm9ybSwgZGF0YSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXRGb3JtRGF0YShkYXRhLCBpbm5lckZvcm1GaWVsZHM/LCBpbm5lckZvcm1kYXRhPykge1xuICAgICAgICAvLyB3aGVyZWFzIGZvcm1GaWVsZHMgZXhwbGljaXRseSBwYXNzZWQgY2FuIGNvbnRhaW4gaW5uZXJmb3JtIGZpZWxkcyBhbHNvLlxuICAgICAgICBjb25zdCBmb3JtRmllbGRzID0gaW5uZXJGb3JtRmllbGRzIHx8IHRoaXMuZm9ybUZpZWxkcztcbiAgICAgICAgZm9ybUZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0RmllbGRWYWx1ZShmaWVsZCwgZGF0YSwgaW5uZXJGb3JtZGF0YSk7XG4gICAgICAgICAgICBpZiAoZmllbGQuZmllbGRWYWxpZGF0aW9ucykge1xuICAgICAgICAgICAgICAgIGZpZWxkLmZpZWxkVmFsaWRhdGlvbnMuc2V0Q3VzdG9tVmFsaWRhdGlvbk1lc3NhZ2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuY29uc3RydWN0RGF0YU9iamVjdCgpO1xuICAgIH1cblxuICAgIHJlc2V0Rm9ybVN0YXRlKCkge1xuICAgICAgICAvLyBjbGVhcmluZyB0aGUgdmFsaWRhdGlvbk1lc3NhZ2VzIG9uIHJlc2V0LlxuICAgICAgICBpZiAodGhpcy52YWxpZGF0aW9uTWVzc2FnZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcyA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5uZ2Zvcm0pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm5nZm9ybS5tYXJrQXNVbnRvdWNoZWQoKTtcbiAgICAgICAgdGhpcy5uZ2Zvcm0ubWFya0FzUHJpc3RpbmUoKTtcbiAgICB9XG5cbiAgICByZXNldCgpIHtcbiAgICAgICAgdGhpcy5yZXNldEZvcm1TdGF0ZSgpO1xuICAgICAgICB0aGlzLmZvcm1GaWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICAgICAgICBmaWVsZC52YWx1ZSA9ICcnO1xuICAgICAgICAgICAgaWYgKGZpZWxkLndpZGdldHR5cGUgPT09ICd1cGxvYWQnIHx8IGZpZWxkLnR5cGUgPT09IERhdGFUeXBlLkJMT0IpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc2V0RmlsZVVwbG9hZFdpZGdldChmaWVsZCwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaWVsZC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0Jyk/LnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1pbnZhbGlkJyk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmNvbnN0cnVjdERhdGFPYmplY3QoKTtcbiAgICAgICAgdGhpcy5jbGVhck1lc3NhZ2UoKTtcbiAgICB9XG5cbiAgICBzYXZlUHJldmZvcm1GaWVsZHMoKSB7XG4gICAgICAgIHRoaXMucHJldmZvcm1GaWVsZHMgPSBnZXRDbG9uZWRPYmplY3QodGhpcy5mb3JtRmllbGRzLm1hcChmaWVsZCA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICdrZXknOiBmaWVsZC5rZXksXG4gICAgICAgICAgICAgICAgJ3R5cGUnOiBmaWVsZC50eXBlLFxuICAgICAgICAgICAgICAgICd3aWRnZXR0eXBlJzogZmllbGQud2lkZ2V0dHlwZSxcbiAgICAgICAgICAgICAgICAnb3V0cHV0Zm9ybWF0JzogZmllbGQub3V0cHV0Zm9ybWF0LFxuICAgICAgICAgICAgICAgICd2YWx1ZSc6IGZpZWxkLnZhbHVlXG4gICAgICAgICAgICB9O1xuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgc2F2ZVByZXZEYXRhVmFsdWVzKCkge1xuICAgICAgICB0aGlzLnByZXZEYXRhVmFsdWVzID0gdGhpcy5mb3JtRmllbGRzLm1hcCgob2JqKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4geydrZXknOiBvYmoua2V5LCAndmFsdWUnOiBvYmoudmFsdWV9O1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzZXRSZWFkb25seUZpZWxkcygpIHtcbiAgICAgICAgdGhpcy5mb3JtRmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgICAgICAgZmllbGQuc2V0UmVhZE9ubHlTdGF0ZSgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZXNldEZpbGVVcGxvYWRXaWRnZXQoZmllbGQsIHNraXBWYWx1ZVNldD8pIHtcbiAgICAgICAgY29uc3QgJGZvcm1FbGUgPSB0aGlzLiRlbGVtZW50O1xuICAgICAgICAkZm9ybUVsZS5maW5kKCdbbmFtZT1cIicgKyBmaWVsZC5rZXkgKyAnX2Zvcm1XaWRnZXRcIl0nKS52YWwoJycpO1xuICAgICAgICBmaWVsZC5fY29udHJvbC5yZXNldCgpO1xuICAgICAgICBpZiAoIXNraXBWYWx1ZVNldCkge1xuICAgICAgICAgICAgZmllbGQuaHJlZiA9ICcnO1xuICAgICAgICAgICAgZmllbGQudmFsdWUgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZW1wdHlEYXRhTW9kZWwoKSB7XG4gICAgICAgIHRoaXMuZm9ybUZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgICAgICAgIGlmIChpc0RlZmluZWQoZmllbGQpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGZpZWxkLnR5cGUgPT09IERhdGFUeXBlLkJMT0IpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNldEZpbGVVcGxvYWRXaWRnZXQoZmllbGQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLmRhdGF2YWx1ZSA9ICcnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc2V0RGVmYXVsdFZhbHVlcygpIHtcbiAgICAgICAgdGhpcy5mb3JtRmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgICAgICAgdGhpcy5vbkZpZWxkRGVmYXVsdFZhbHVlQ2hhbmdlKGZpZWxkLCBmaWVsZC5kZWZhdWx0dmFsdWUpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzZXRPcGVyYXRpb25UeXBlKG1vZGUpIHtcbiAgICAgICAgdGhpcy5vcGVyYXRpb25UeXBlID0gbW9kZSB8fCAnaW5zZXJ0JztcbiAgICB9XG5cbiAgICBuZXcoKSB7XG4gICAgICAgIHRoaXMucmVzZXRGb3JtU3RhdGUoKTtcbiAgICAgICAgdGhpcy5vcGVyYXRpb25UeXBlID0gTGl2ZV9PcGVyYXRpb25zLklOU0VSVDtcbiAgICAgICAgdGhpcy5jbGVhck1lc3NhZ2UoKTtcbiAgICAgICAgaWYgKHRoaXMuaXNTZWxlY3RlZCkge1xuICAgICAgICAgICAgdGhpcy5zYXZlUHJldmZvcm1GaWVsZHMoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVtcHR5RGF0YU1vZGVsKCk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXREZWZhdWx0VmFsdWVzKCk7XG4gICAgICAgICAgICB0aGlzLnNhdmVQcmV2RGF0YVZhbHVlcygpO1xuICAgICAgICAgICAgdGhpcy5jb25zdHJ1Y3REYXRhT2JqZWN0KCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmlzVXBkYXRlTW9kZSA9IHRydWU7XG4gICAgfVxuXG4gICAgZWRpdCgpIHtcbiAgICAgICAgdGhpcy5yZXNldEZvcm1TdGF0ZSgpO1xuICAgICAgICB0aGlzLmNsZWFyTWVzc2FnZSgpO1xuXG4gICAgICAgIHRoaXMub3BlcmF0aW9uVHlwZSA9IExpdmVfT3BlcmF0aW9ucy5VUERBVEU7XG5cbiAgICAgICAgaWYgKHRoaXMuaXNTZWxlY3RlZCkge1xuICAgICAgICAgICAgdGhpcy5zYXZlUHJldmZvcm1GaWVsZHMoKTtcbiAgICAgICAgICAgIHRoaXMuc2F2ZVByZXZEYXRhVmFsdWVzKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcmV2RGF0YU9iamVjdCA9IGdldENsb25lZE9iamVjdCh0aGlzLmZvcm1kYXRhIHx8IHt9KTtcblxuICAgICAgICB0aGlzLnNldFJlYWRvbmx5RmllbGRzKCk7XG4gICAgICAgIHRoaXMuaXNVcGRhdGVNb2RlID0gdHJ1ZTtcblxuICAgICAgICAkYXBwRGlnZXN0KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB0cmlnZ2VyV01FdmVudChldmVudE5hbWUpIHtcbiAgICAgICAgY29uc3QgdGFibGVJZCA9IHRoaXMubmF0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RlcGVuZHNvbnRhYmxlJyk7XG4gICAgICAgIGlmICghdGFibGVJZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgICRpbnZva2VXYXRjaGVycyh0cnVlKTtcbiAgICAgICAgdGhpcy5hcHAubm90aWZ5KCd3bS1ldmVudCcsIHtldmVudE5hbWUsIHdpZGdldE5hbWU6IHRhYmxlSWR9KTtcbiAgICB9XG5cbiAgICBzdWJtaXRGb3JtKCRldmVudCkge1xuICAgICAgICBsZXQgdGVtcGxhdGUsIGZvcm1EYXRhLCByZXN1bHQ7XG4gICAgICAgIGNvbnN0IGRhdGFTb3VyY2UgPSB0aGlzLmRhdGFzb3VyY2U7XG4gICAgICAgIC8vIERpc2FibGUgdGhlIGZvcm0gc3VibWl0IGlmIGZvcm0gaXMgaW4gaW52YWxpZCBzdGF0ZS5cbiAgICAgICAgaWYgKHRoaXMudmFsaWRhdGVGaWVsZHNPblN1Ym1pdCgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBmb3JtRGF0YSA9IGdldENsb25lZE9iamVjdCh0aGlzLmNvbnN0cnVjdERhdGFPYmplY3QoKSk7XG5cbiAgICAgICAgY29uc3QgZ2V0UGFyYW1zID0gKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHskZXZlbnQsICRmb3JtRGF0YTogZm9ybURhdGEsICRkYXRhOiBmb3JtRGF0YX07XG4gICAgICAgIH07XG5cblxuICAgICAgICBpZiAodGhpcy5vbkJlZm9yZVN1Ym1pdEV2dCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnYmVmb3Jlc3VibWl0JywgZ2V0UGFyYW1zKCkpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNldEZvcm1TdGF0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZXNldEZvcm1TdGF0ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMub25TdWJtaXRFdnQgfHwgZGF0YVNvdXJjZSkge1xuICAgICAgICAgICAgLy8gSWYgb24gc3VibWl0IGlzIHRoZXJlIGV4ZWN1dGUgaXQgYW5kIGlmIGl0IHJldHVybnMgdHJ1ZSBkbyBzZXJ2aWNlIHZhcmlhYmxlIGludm9rZSBlbHNlIHJldHVyblxuICAgICAgICAgICAgLy8gSWYgaXRzIGEgc2VydmljZSB2YXJpYWJsZSBjYWxsIHNldElucHV0IGFuZCBhc3NpZ24gZm9ybSBkYXRhIGFuZCBpbnZva2UgdGhlIHNlcnZpY2VcbiAgICAgICAgICAgIGlmIChkYXRhU291cmNlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFBhZ2VOdW0gPSBkYXRhU291cmNlLnBhZ2luYXRpb24gJiYgZGF0YVNvdXJjZS5wYWdpbmF0aW9uLm51bWJlciArIDE7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3BlcmF0aW9uVHlwZSA9IHRoaXMub3BlcmF0aW9uVHlwZSA/IHRoaXMub3BlcmF0aW9uVHlwZSA6ICdpbnNlcnQnO1xuICAgICAgICAgICAgICAgIHBlcmZvcm1EYXRhT3BlcmF0aW9uKGRhdGFTb3VyY2UsIGZvcm1EYXRhLCB7b3BlcmF0aW9uVHlwZTogb3BlcmF0aW9uVHlwZX0pXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YVNvdXJjZS5jYXRlZ29yeSA9PT0gJ3dtLkNydWRWYXJpYWJsZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXJXTUV2ZW50KCdyZXNldEVkaXRNb2RlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhc291cmNlLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uTElTVF9SRUNPUkRTLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdza2lwVG9nZ2xlU3RhdGUnOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3BlcmF0aW9uJzogJ2xpc3QnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFnZSc6IGN1cnJlbnRQYWdlTnVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncHJldmVudE1pc3NpbmdPcE1zZyc6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5kaWFsb2dJZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlRGlhbG9nKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzRGVmaW5lZChkYXRhLmJvZHkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gZ2V0VmFsaWRKU09OKGRhdGEuYm9keSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gaXNEZWZpbmVkKHJlc3VsdCkgPyByZXN1bHQgOiBkYXRhLmJvZHk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZXN1bHQnOiByZXN1bHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N0YXR1cyc6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21lc3NhZ2UnOiB0aGlzLnBvc3RtZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0eXBlJzogJ3N1Y2Nlc3MnXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9LCAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlID0gdGhpcy5lcnJvcm1lc3NhZ2UgfHwgZXJyb3IuZXJyb3IgfHwgZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICAkYXBwRGlnZXN0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZXN1bHQnOiBfLmdldChlcnJvciwgJ2Vycm9yJykgfHwgZXJyb3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N0YXR1cyc6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtZXNzYWdlJzogdGVtcGxhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3R5cGUnOiAnZXJyb3InXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9KS50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKChyZXNwb25zZS50eXBlID09PSAnZXJyb3InICYmICF0aGlzLm9uRXJyb3IpIHx8IChyZXNwb25zZS50eXBlID09PSAnc3VjY2VzcycgJiYgIXRoaXMub25TdWNjZXNzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2dnbGVNZXNzYWdlKHRydWUsIHJlc3BvbnNlLm1lc3NhZ2UsIHJlc3BvbnNlLnR5cGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnc3VibWl0JywgZ2V0UGFyYW1zKCkpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uUmVzdWx0Q2IocmVzcG9uc2UucmVzdWx0LCByZXNwb25zZS5zdGF0dXMsICRldmVudCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnc3VibWl0JywgZ2V0UGFyYW1zKCkpO1xuICAgICAgICAgICAgICAgIHRoaXMub25SZXN1bHRDYih7fSwgdHJ1ZSwgJGV2ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub25SZXN1bHRDYih7fSwgdHJ1ZSwgJGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsb3NlRGlhbG9nKCkge1xuICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuY2xvc2UodGhpcy5kaWFsb2dJZCk7XG4gICAgfVxuXG4gICAgLy8gTWV0aG9kIHRvIHNob3cvaGlkZSB0aGUgcGFuZWwgaGVhZGVyIG9yIGZvb3RlciBiYXNlZCBvbiB0aGUgYnV0dG9uc1xuICAgIHNob3dCdXR0b25zKHBvc2l0aW9uKSB7XG4gICAgICAgIHJldHVybiBfLnNvbWUodGhpcy5idXR0b25BcnJheSwgYnRuID0+IHtcbiAgICAgICAgICAgIHJldHVybiBfLmluY2x1ZGVzKGJ0bi5wb3NpdGlvbiwgcG9zaXRpb24pICYmIGJ0bi51cGRhdGVNb2RlID09PSB0aGlzLmlzVXBkYXRlTW9kZTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gRXhwYW5kIG9yIGNvbGxhcHNlIHRoZSBwYW5lbFxuICAgIGV4cGFuZENvbGxhcHNlUGFuZWwoKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbGxhcHNpYmxlKSB7XG4gICAgICAgICAgICAvLyBmbGlwIHRoZSBhY3RpdmUgZmxhZ1xuICAgICAgICAgICAgdGhpcy5leHBhbmRlZCA9ICF0aGlzLmV4cGFuZGVkO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25EYXRhU291cmNlVXBkYXRlKHJlc3BvbnNlLCBuZXdGb3JtLCB1cGRhdGVNb2RlKSB7XG4gICAgICAgIGlmIChuZXdGb3JtKSB7XG4gICAgICAgICAgICB0aGlzLm5ldygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZXRGb3JtRGF0YShyZXNwb25zZSk7XG4gICAgICAgICAgICB0aGlzLmNsb3NlRGlhbG9nKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc1VwZGF0ZU1vZGUgPSBpc0RlZmluZWQodXBkYXRlTW9kZSkgPyB1cGRhdGVNb2RlIDogdHJ1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCB0cmFudmVyc2VzIHRocm91Z2ggdGhlIHBhcmVudCBjb250YWluaW5nIGZvcm1kYXRhIGFuZCByZXR1cm5zIHRoZSBwYXJlbnQgZm9ybWRhdGEuXG4gICAgICogQHBhcmFtIGZvcm0sIHJlcHJlc2VudHMgdGhlIGN1cnJlbnQgZm9ybSBpbnN0YW5jZVxuICAgICAqIEByZXR1cm5zIHthbnl9XG4gICAgICovXG4gICAgZ2V0TmVhcmVzdFBhcmVudEZvcm1EYXRhKGZvcm0pIHtcbiAgICAgICAgaWYgKCFmb3JtLnBhcmVudEZvcm0pIHtcbiAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWZvcm0uYmluZGZvcm1kYXRhICYmIF8uZ2V0KGZvcm0ucGFyZW50Rm9ybSwgJ2Zvcm1kYXRhJykgJiYgIV8uaXNFbXB0eShmb3JtLnBhcmVudEZvcm0uZm9ybWRhdGEpKSB7XG4gICAgICAgICAgICByZXR1cm4gZm9ybS5wYXJlbnRGb3JtLmZvcm1kYXRhO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmdldE5lYXJlc3RQYXJlbnRGb3JtRGF0YShmb3JtLnBhcmVudEZvcm0pO1xuICAgIH1cblxuICAgIHNldEZvcm1EYXRhRnJvbVBhcmVudEZvcm1EYXRhKGZvcm1kYXRhOiBhbnkpIHtcbiAgICAgICAgaWYgKF8uaXNFbXB0eSh0aGlzLmZvcm1kYXRhKSAmJiB0aGlzLnBhcmVudEZvcm0gJiYgZm9ybWRhdGEpIHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogSWYgZm9ybSBpcyBpbnNpZGUgbGlzdCxcbiAgICAgICAgICAgICAqIDEuIGRpcmVjdGx5IGFwcGx5aW5nIHRoZSBmb3JtZGF0YSB0byB0aGUgZm9ybUFycmF5IHRvIHVwZGF0ZSB0aGUgZm9ybWRhdGEgb24gbGlzdCBvZiBmb3JtcyB1c2luZyBwYXRjaFZhbHVlLlxuICAgICAgICAgICAgICogMi4gYW5kIGFsc28gc2V0dGluZyBpbmRpdmlkdWFsIGZvcm1kYXRhIHRvIHRoZSBmb3JtIGluc2lkZSBlYWNoIGl0ZW0gYmFzZWQgb24gZm9ybUFycmF5SW5kZXgsIHdoZW4gZm9ybSBpcyBub3QgYm91bmQgdG8gZm9ybWRhdGEuXG4gICAgICAgICAgICAgKiAzLiBleHBsaWNpdGx5IGludm9raW5nIGZvcm1kYXRhIGFzIGZvcm1GaWVsZHMgd2lsbCBjb250YWluIGFsbCB0aGUgZm9ybWZpZWxkcyBpbmNsdWRpbmcgaW5uZXJGb3JtJ3MgZmllbGRzXG4gICAgICAgICAgICAgKiAoaWYgd2UgZG8gbm90IGludm9rZSBleHBsaWNpdGx5IHRoZW4gZm9ybUZpZWxkcyB3aWxsIGp1c3QgY29udGFpbiB0aGUgZmllbGRzIGluc2lkZSBjdXJyZW50IGZvcm0gYW5kIG5vdCBpbm5lciBmb3JtIGZpZWxkcylcbiAgICAgICAgICAgICAqIDQuIGlmIGNoaWxkRm9ybUFycmF5RGF0YSBpcyBub3QgYXZhaWxhYmxlIHdlIHdpbGwgY2hlY2sgZm9yIGlubmVyIGZvcm0gZGF0YSB1c2luZyBcImZvcm1Hcm91cE5hbWVcIiBhbmQgd2lsbCBzZXQgdGhlIGlubmVyZm9ybSBkYXRhXG4gICAgICAgICAgICAgKiBJZiBub3QgaW5zaWRlIGxpc3QsIGp1c3Qgc2V0IHRoZSBmb3JtZGF0YSBvbiBhbGwgdGhlIGZvcm1maWVsZHMgaW5jbHVkaW5nIGlubmVyRm9ybSBmaWVsZHNcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgaWYgKHRoaXMucGFyZW50Rm9ybUFycmF5KSB7XG4gICAgICAgICAgICAgICAgbGV0IGNoaWxkRm9ybUFycmF5RGF0YSA9IF8uZ2V0KGZvcm1kYXRhLCB0aGlzLnBhcmVudExpc3QubmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkRm9ybUFycmF5RGF0YSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIV8uaXNBcnJheShjaGlsZEZvcm1BcnJheURhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZEZvcm1BcnJheURhdGEgPSBbY2hpbGRGb3JtQXJyYXlEYXRhXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcmVudEZvcm1BcnJheS5wYXRjaFZhbHVlKGNoaWxkRm9ybUFycmF5RGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5iaW5kZm9ybWRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybWRhdGEgPSBjaGlsZEZvcm1BcnJheURhdGFbdGhpcy5mb3JtQXJyYXlJbmRleF07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRGb3JtRGF0YSh0aGlzLmZvcm1kYXRhKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNQYXJlbnRMaXN0ICYmIHRoaXMucGFyZW50Rm9ybS5mb3JtR3JvdXBOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudEZvcm1EYXRhID0gXy5nZXQoZm9ybWRhdGEsIHRoaXMucGFyZW50Rm9ybS5mb3JtR3JvdXBOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRGb3JtRGF0YUZyb21QYXJlbnRGb3JtRGF0YShwYXJlbnRGb3JtRGF0YSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEZvcm1EYXRhKGZvcm1kYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIE9uIGZvcm0gZGF0YSBzb3VyY2UgY2hhbmdlLiBUaGlzIG1ldGhvZCBpcyBvdmVycmlkZGVuIGJ5IGxpdmUgZm9ybSBhbmQgbGl2ZSBmaWx0ZXJcbiAgICBvbkRhdGFTb3VyY2VDaGFuZ2UoKSB7XG4gICAgICAgIGlmIChfLmdldCh0aGlzLmZvcm1GaWVsZHMsICdsZW5ndGgnKSAmJiAhdGhpcy5iaW5kZm9ybWRhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuaXNEYXRhU291cmNlVXBkYXRlZCA9IHRydWU7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIGZvcm1kYXRhIG9uIHRoZSBwYXJlbnQgZm9ybSB3aWxsIGJlIHNldCBiZWZvcmUgdGhlIGlubmVyIGZvcm1zIGFyZSByZW5kZXJlZC5cbiAgICAgICAgICAgICAqIEhlbmNlIGhhbmRsaW5nIGZvcm1kYXRhIG9uIHRoZSBpbm5lckZvcm1zLCB3aGljaCBtaWdodCBiZSByZW5kZXJlZCBzbG93bHkgKHN1cHBvc2UgcHJlZmFiIHdpdGggZm9ybSlcbiAgICAgICAgICAgICAqIHNldHRpbmcgaW5uZXIgZm9ybSdzIGZvcm1kYXRhIG9idGFpbmVkIGZyb20gcGFyZW50IGZvcm1kYXRhXG4gICAgICAgICAgICAgKiB0aGlzIGFwcGxpZXMgb25seSB3aGVuIGZvcm1kYXRhIGlzIG5vdCBnaXZlbiBvbiB0aGUgaW5uZXIgZm9ybS5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgY29uc3QgZm9ybWRhdGEgPSB0aGlzLmdldE5lYXJlc3RQYXJlbnRGb3JtRGF0YSh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuc2V0Rm9ybURhdGFGcm9tUGFyZW50Rm9ybURhdGEoZm9ybWRhdGEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gT24gZm9ybSBkYXRhIHNvdXJjZSBjaGFuZ2UuIFRoaXMgbWV0aG9kIGlzIG92ZXJyaWRkZW4gYnkgbGl2ZSBmb3JtIGFuZCBsaXZlIGZpbHRlclxuICAgIG9uRm9ybURhdGFTb3VyY2VDaGFuZ2UoKSB7XG4gICAgICAgIHRoaXMudXBkYXRlRmllbGRTb3VyY2UoKTtcbiAgICB9XG5cbiAgICAvLyBPbiBmb3JtIGZpZWxkIGRlZmF1bHQgdmFsdWUgY2hhbmdlLiBUaGlzIG1ldGhvZCBpcyBvdmVycmlkZGVuIGJ5IGxpdmUgZm9ybSBhbmQgbGl2ZSBmaWx0ZXJcbiAgICBvbkZpZWxkRGVmYXVsdFZhbHVlQ2hhbmdlKGZpZWxkLCBudikge1xuICAgICAgICBmaWVsZC52YWx1ZSA9IHBhcnNlVmFsdWVCeVR5cGUobnYsIHVuZGVmaW5lZCwgZmllbGQud2lkZ2V0dHlwZSwgZmllbGQudHJhaWxpbmd6ZXJvKTtcbiAgICAgICAgLy8gV01TLTIyNDM0OiBGb3IgZGVmYXVsdCB2YWx1ZSBzZXQgb24gaW5kaXZpZHVhbCBmb3JtIGZpZWxkcywgZG8gbm90IG1hcmsgdGhlIGZvcm0gYXMgZGlydHkuXG4gICAgICAgIGlmICh0aGlzLmRpcnR5ICYmICF0aGlzLl90cmlnZ2VyZWRCeVVzZXIpIHtcbiAgICAgICAgICAgIHRoaXMubWFya0FzUHJpc3RpbmUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIE9uIGZvcm0gZmllbGQgdmFsdWUgY2hhbmdlLiBUaGlzIG1ldGhvZCBpcyBvdmVycmlkZGVuIGJ5IGxpdmUgZm9ybSBhbmQgbGl2ZSBmaWx0ZXJcbiAgICBvbkZpZWxkVmFsdWVDaGFuZ2UoKSB7XG4gICAgfVxuXG4gICAgLy8gRnVuY3Rpb24gdG8gZ2VuZXJhdGUgYW5kIGNvbXBpbGUgdGhlIGZvcm0gZmllbGRzIGZyb20gdGhlIG1ldGFkYXRhXG4gICAgYXN5bmMgZ2VuZXJhdGVGb3JtRmllbGRzKCkge1xuICAgICAgICBsZXQgbm9PZkNvbHVtbnM7XG4gICAgICAgIGxldCAkZ3JpZExheW91dDtcbiAgICAgICAgLy8gQ2hlY2sgaWYgZ3JpZCBsYXlvdXQgaXMgcHJlc2VudCBvciBub3QgZm9yIGZpcnN0IHRpbWVcbiAgICAgICAgaWYgKF8uaXNVbmRlZmluZWQodGhpcy5faXNHcmlkTGF5b3V0UHJlc2VudCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2lzR3JpZExheW91dFByZXNlbnQgPSB0aGlzLiRlbGVtZW50LmZpbmQoJy5wYW5lbC1ib2R5IFt3bWxheW91dGdyaWRdJykubGVuZ3RoID4gMDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5faXNHcmlkTGF5b3V0UHJlc2VudCkge1xuICAgICAgICAgICAgJGdyaWRMYXlvdXQgPSB0aGlzLiRlbGVtZW50LmZpbmQoJy5mb3JtLWVsZW1lbnRzIFt3bWxheW91dGdyaWRdJykuZmlyc3QoKTtcbiAgICAgICAgICAgIG5vT2ZDb2x1bW5zID0gTnVtYmVyKCRncmlkTGF5b3V0LmF0dHIoJ2NvbHVtbnMnKSkgfHwgMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICRncmlkTGF5b3V0ID0gdGhpcy4kZWxlbWVudC5maW5kKCcuZm9ybS1lbGVtZW50cyAuZHluYW1pYy1mb3JtLWNvbnRhaW5lcicpO1xuICAgICAgICAgICAgaWYgKCEkZ3JpZExheW91dC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiRlbGVtZW50LmZpbmQoJy5mb3JtLWVsZW1lbnRzJykucHJlcGVuZCgnPGRpdiBjbGFzcz1cImR5bmFtaWMtZm9ybS1jb250YWluZXJcIj48L2Rpdj4nKTtcbiAgICAgICAgICAgICAgICAkZ3JpZExheW91dCA9IHRoaXMuJGVsZW1lbnQuZmluZCgnLmZvcm0tZWxlbWVudHMgLmR5bmFtaWMtZm9ybS1jb250YWluZXInKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5vT2ZDb2x1bW5zID0gMTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb2x1bW5XaWR0aCA9IDEyIC8gbm9PZkNvbHVtbnM7XG4gICAgICAgIGxldCBmaWVsZFRlbXBsYXRlID0gJyc7XG4gICAgICAgIGxldCBjb2xDb3VudCA9IDA7XG4gICAgICAgIGxldCBpbmRleDtcbiAgICAgICAgbGV0IHVzZXJGaWVsZHM7XG4gICAgICAgIGxldCBmaWVsZHMgPSB0aGlzLm1ldGFkYXRhID8gdGhpcy5tZXRhZGF0YS5kYXRhIHx8IHRoaXMubWV0YWRhdGEgOiBbXTtcblxuICAgICAgICB0aGlzLmZvcm1GaWVsZHMgPSBbXTsgLy8gZW1wdHkgdGhlIGZvcm0gZmllbGRzXG5cbiAgICAgICAgaWYgKF8uaXNFbXB0eShmaWVsZHMpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5vbkJlZm9yZVJlbmRlckV2dCkge1xuICAgICAgICAgICAgdXNlckZpZWxkcyA9IHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnYmVmb3JlcmVuZGVyJywgeyRtZXRhZGF0YTogZmllbGRzfSk7XG4gICAgICAgICAgICBpZiAodXNlckZpZWxkcykge1xuICAgICAgICAgICAgICAgIGZpZWxkcyA9IHVzZXJGaWVsZHM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIV8uaXNBcnJheShmaWVsZHMpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB3aGlsZSAoZmllbGRzW2NvbENvdW50XSkge1xuICAgICAgICAgICAgbGV0IGNvbFRtcGwgPSAnJztcbiAgICAgICAgICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IG5vT2ZDb2x1bW5zOyBpbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGZpZWxkc1tjb2xDb3VudF0pIHtcbiAgICAgICAgICAgICAgICAgICAgY29sVG1wbCArPSBzZXRNYXJrdXBGb3JGb3JtRmllbGQoZmllbGRzW2NvbENvdW50XSwgY29sdW1uV2lkdGgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb2xDb3VudCsrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmllbGRUZW1wbGF0ZSArPSBgPHdtLWdyaWRyb3c+JHtjb2xUbXBsfTwvd20tZ3JpZHJvdz5gO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLl9pc0dyaWRMYXlvdXRQcmVzZW50KSB7XG4gICAgICAgICAgICBmaWVsZFRlbXBsYXRlID0gYDx3bS1sYXlvdXRncmlkPiR7ZmllbGRUZW1wbGF0ZX08L3dtLWxheW91dGdyaWQ+YDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZHluYW1pY0Zvcm1SZWYuY2xlYXIoKTtcblxuICAgICAgICBpZiAoIXRoaXMuX2R5bmFtaWNDb250ZXh0KSB7XG4gICAgICAgICAgICB0aGlzLl9keW5hbWljQ29udGV4dCA9IE9iamVjdC5jcmVhdGUodGhpcy52aWV3UGFyZW50KTtcbiAgICAgICAgICAgIHRoaXMuX2R5bmFtaWNDb250ZXh0LmZvcm0gPSB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudEZhY3RvcnlSZWYgPSBhd2FpdCB0aGlzLmR5bmFtaWNDb21wb25lbnRQcm92aWRlci5nZXRDb21wb25lbnRGYWN0b3J5UmVmKFxuICAgICAgICAgICAgJ2FwcC1mb3JtLWR5bmFtaWMtJyArIHRoaXMud2lkZ2V0SWQsXG4gICAgICAgICAgICBmaWVsZFRlbXBsYXRlLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5vQ2FjaGU6IHRydWUsXG4gICAgICAgICAgICAgICAgdHJhbnNwaWxlOiB0cnVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgY29tcG9uZW50ID0gdGhpcy5keW5hbWljRm9ybVJlZi5jcmVhdGVDb21wb25lbnQoY29tcG9uZW50RmFjdG9yeVJlZiwgMCwgdGhpcy5pbmopO1xuICAgICAgICBleHRlbmRQcm90byhjb21wb25lbnQuaW5zdGFuY2UsIHRoaXMuX2R5bmFtaWNDb250ZXh0KTtcbiAgICAgICAgJGdyaWRMYXlvdXRbMF0uYXBwZW5kQ2hpbGQoY29tcG9uZW50LmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICB0aGlzLnNldEZvcm1EYXRhKHRoaXMuZm9ybWRhdGEpO1xuICAgIH1cblxuICAgIGdldCBtb2RlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcGVyYXRpb25UeXBlIHx8IHRoaXMuZmluZE9wZXJhdGlvblR5cGUoKTtcbiAgICB9XG5cbiAgICBnZXQgZGlydHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5nZm9ybSAmJiB0aGlzLm5nZm9ybS5kaXJ0eTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBmb3JtIHN0YXRlIHRvIHByaXN0aW5lIGJ5IGludGVybmFsbHkgY2FsbGluZyBhbmd1bGFyIG1hcmtBc1ByaXN0aW5lIG1ldGhvZCBvbiB0aGUgZm9ybVxuICAgICAqIEBwYXJhbSB2YWx1ZSwgV2hlbiB0cnVlLCBtYXJrIG9ubHkgdGhpcyBjb250cm9sLiBXaGVuIGZhbHNlIG9yIG5vdCBzdXBwbGllZCwgbWFya3MgYWxsIGRpcmVjdCBhbmNlc3RvcnMuIERlZmF1bHQgaXMgZmFsc2VcbiAgICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICAgKi9cbiAgICBtYXJrQXNQcmlzdGluZSh2YWx1ZTogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgICAgIHRoaXMubmdmb3JtLm1hcmtBc1ByaXN0aW5lKHsgb25seVNlbGY6IHZhbHVlIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIGZvcm0gc3RhdGUgdG8gZGlydHkgYnkgaW50ZXJuYWxseSBjYWxsaW5nIGFuZ3VsYXIgbWFya0FzRGlydHkgbWV0aG9kIG9uIHRoZSBmb3JtXG4gICAgICogQHBhcmFtIHZhbHVlLCBXaGVuIHRydWUsIG1hcmsgb25seSB0aGlzIGNvbnRyb2wuIFdoZW4gZmFsc2Ugb3Igbm90IHN1cHBsaWVkLCBtYXJrcyBhbGwgZGlyZWN0IGFuY2VzdG9ycy4gRGVmYXVsdCBpcyBmYWxzZVxuICAgICAqIEByZXR1cm5zIHt2b2lkfVxuICAgICAqL1xuICAgIG1hcmtBc0RpcnR5KHZhbHVlOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5uZ2Zvcm0ubWFya0FzRGlydHkoeyBvbmx5U2VsZjogdmFsdWUgfSk7XG4gICAgfVxuXG4gICAgZ2V0IGludmFsaWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5nZm9ybSAmJiB0aGlzLm5nZm9ybS5pbnZhbGlkO1xuICAgIH1cblxuICAgIGdldCB0b3VjaGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5uZ2Zvcm0gJiYgdGhpcy5uZ2Zvcm0udG91Y2hlZDtcbiAgICB9XG5cbiAgICBnZXQgdmFsaWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5nZm9ybSAmJiB0aGlzLm5nZm9ybS52YWxpZDtcbiAgICB9XG5cbiAgICBnZXQgcHJpc3RpbmUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5nZm9ybSAmJiB0aGlzLm5nZm9ybS5wcmlzdGluZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBmb3JtIHN0YXRlIHRvIHRvdWNoZWQgYnkgaW50ZXJuYWxseSBjYWxsaW5nIGFuZ3VsYXIgbWFya0FzVG91Y2hlZCBtZXRob2Qgb24gdGhlIGZvcm1cbiAgICAgKiBAcGFyYW0gdmFsdWUsIFdoZW4gdHJ1ZSwgbWFyayBvbmx5IHRoaXMgY29udHJvbC4gV2hlbiBmYWxzZSBvciBub3Qgc3VwcGxpZWQsIG1hcmtzIGFsbCBkaXJlY3QgYW5jZXN0b3JzLiBEZWZhdWx0IGlzIGZhbHNlXG4gICAgICogQHJldHVybnMge3ZvaWR9XG4gICAgICovXG4gICAgbWFya0FzVG91Y2hlZCh2YWx1ZTogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgICAgIHRoaXMubmdmb3JtLm1hcmtBc1RvdWNoZWQoeyBvbmx5U2VsZjogdmFsdWUgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgZm9ybSBzdGF0ZSB0byB1bnRvdWNoZWQgYnkgaW50ZXJuYWxseSBjYWxsaW5nIGFuZ3VsYXIgbWFya0FzVW50b3VjaGVkIG1ldGhvZCBvbiB0aGUgZm9ybVxuICAgICAqIEBwYXJhbSB2YWx1ZSwgV2hlbiB0cnVlLCBtYXJrIG9ubHkgdGhpcyBjb250cm9sLiBXaGVuIGZhbHNlIG9yIG5vdCBzdXBwbGllZCwgbWFya3MgYWxsIGRpcmVjdCBhbmNlc3RvcnMuIERlZmF1bHQgaXMgZmFsc2VcbiAgICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICAgKi9cbiAgICBtYXJrQXNVbnRvdWNoZWQodmFsdWU6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgICAgICB0aGlzLm5nZm9ybS5tYXJrQXNVbnRvdWNoZWQoeyBvbmx5U2VsZjogdmFsdWUgfSk7XG4gICAgfVxuXG4gICAgaW52b2tlQWN0aW9uRXZlbnQoJGV2ZW50LCBleHByZXNzaW9uOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgZm4gPSAkcGFyc2VFdmVudChleHByZXNzaW9uKTtcbiAgICAgICAgZm4odGhpcy52aWV3UGFyZW50LCBPYmplY3QuYXNzaWduKHRoaXMuY29udGV4dCwgeyRldmVudH0pKTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgLy8gb24gZm9ybSBkZXN0cm95LCByZW1vdmluZyB0aGlzIGZvcm0gZnJvbSB0aGUgcGFyZW50Rm9ybSB0b28uXG4gICAgICAgIGNvbnN0IGNvbnRyb2xzID0gdGhpcy5wYXJlbnRGb3JtICYmIF8uZ2V0KHRoaXMucGFyZW50Rm9ybSwgJ25nZm9ybS5jb250cm9scycpO1xuICAgICAgICBpZiAoY29udHJvbHMpIHtcbiAgICAgICAgICAgIC8vIHdoZW4gY3VycmVudCBmb3JtIGlzIGluc2lkZSB0aGUgbGlzdCAoaS5lLiBpbmNhc2Ugb2YgZm9ybUFycmF5KS5cbiAgICAgICAgICAgIGlmIChfLmdldCh0aGlzLnBhcmVudExpc3QsICduYW1lJykgJiYgY29udHJvbHMuaGFzT3duUHJvcGVydHkodGhpcy5wYXJlbnRMaXN0Lm5hbWUpKSB7XG4gICAgICAgICAgICAgICAgLy9nZXQgdGhlIGluZGV4IG9mIGN1cnJlbnQgZm9ybSBpbiB0aGUgbGlzdCBhbmQgcmVtb3ZlIHRoZSBGb3JtQ29udHJvbCBmcm9tIEZvcm1BcnJheVxuICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gXy5maW5kSW5kZXgodGhpcy5wYXJlbnRMaXN0LmdldFdpZGdldHModGhpcy5uYW1lKSwge3dpZGdldElkOiB0aGlzLndpZGdldElkfSk7XG4gICAgICAgICAgICAgICAgKDxGb3JtQXJyYXk+dGhpcy5wYXJlbnRGb3JtLm5nZm9ybS5jb250cm9sc1t0aGlzLnBhcmVudExpc3QubmFtZV0pLnJlbW92ZUF0KGluZGV4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHdoZW4gd2UgaGF2ZSBmb3JtR3JvdXBOYW1lIHNldCBpLmUuIG11bHRpcGxlIGZvcm1JbnN0YW5jZSB3aXRoIGNvdW50ZXIgYXBwZW5kZWQgdG8gZm9ybU5hbWVcbiAgICAgICAgICAgIGlmICh0aGlzLmZvcm1Hcm91cE5hbWUgJiYgY29udHJvbHMuaGFzT3duUHJvcGVydHkodGhpcy5mb3JtR3JvdXBOYW1lKSkge1xuICAgICAgICAgICAgICAgIHRoaXMucGFyZW50Rm9ybS5uZ2Zvcm0ucmVtb3ZlQ29udHJvbCh0aGlzLmZvcm1Hcm91cE5hbWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBhcmVudEZvcm0ubmdmb3JtLnJlbW92ZUNvbnRyb2wodGhpcy5uYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgIH1cbn1cbiIsIjxuZy10ZW1wbGF0ZSAjY29udGVudD48bmctY29udGVudD48L25nLWNvbnRlbnQ+PC9uZy10ZW1wbGF0ZT5cblxuPG5nLWNvbnRhaW5lciAqbmdJZj1cImZvcm1sYXlvdXQgPT09ICdwYWdlJzsgdGhlbiBwYWdlTGF5b3V0VGVtcGxhdGUgZWxzZSBkZWZhdWx0VGVtcGxhdGVcIj5cbjwvbmctY29udGFpbmVyPlxuXG48bmctdGVtcGxhdGUgI2RlZmF1bHRUZW1wbGF0ZT5cbiAgICA8ZGl2IGNsYXNzPVwicGFuZWwtaGVhZGluZ1wiICpuZ0lmPVwiIWlzTGF5b3V0RGlhbG9nICYmICh0aXRsZSB8fCBzdWJoZWFkaW5nIHx8IGljb25jbGFzcyB8fCBzaG93QnV0dG9ucygnaGVhZGVyJykpXCI+XG4gICAgICAgIDxoMyBjbGFzcz1cInBhbmVsLXRpdGxlXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHVsbC1sZWZ0XCI+XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJhcHAtaWNvbiBwYW5lbC1pY29uXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgW25nQ2xhc3NdPVwiaWNvbmNsYXNzXCIgKm5nSWY9XCJpY29uY2xhc3NcIj48L2k+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwdWxsLWxlZnRcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGluZ1wiIFtpbm5lckhUTUxdPVwidGl0bGVcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGVzY3JpcHRpb25cIiBbaW5uZXJIVE1MXT1cInN1YmhlYWRpbmdcIj48L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tYWN0aW9uIHBhbmVsLWFjdGlvbnMgYmFzaWMtYnRuLWdycFwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGJ0biBvZiBidXR0b25BcnJheSB8IGZpbHRlciA6ICdwb3NpdGlvbicgOiAnaGVhZGVyJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJidG4ud2lkZ2V0VHlwZSA9PT0gJ2J1dHRvbicgPyBidXR0b25SZWYgOiBhbmNob3JSZWZcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie2J0bjpidG59XCI+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJhcHAtaWNvbiB3aSBwYW5lbC1hY3Rpb25cIiAqbmdJZj1cImNvbGxhcHNpYmxlXCIgdGl0bGU9XCJDb2xsYXBzZS9FeHBhbmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiZXhwYW5kZWQgPyAnd2ktbWludXMnOiAnd2ktcGx1cydcIiAoY2xpY2spPVwiZXhwYW5kQ29sbGFwc2VQYW5lbCgpO1wiPjwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvaDM+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInBhbmVsLWJvZHlcIiBbbmdDbGFzc109XCJ7J2Zvcm0tZWxlbWVudHMnOiBpc0xheW91dERpYWxvZywgJ2Zvcm0tYm9keSc6ICFpc0xheW91dERpYWxvZ31cIiBbY2xhc3MuaGlkZGVuXT1cIiFleHBhbmRlZFwiPlxuICAgICAgICA8cCB3bU1lc3NhZ2UgKm5nSWY9XCIhIXN0YXR1c01lc3NhZ2UuY2FwdGlvblwiIFthdHRyLmFyaWEtaGlkZGVuXT1cIiFzdGF0dXNNZXNzYWdlLmNhcHRpb25cIiBbYXR0ci5hcmlhLWxhYmVsXT1cInN0YXR1c01lc3NhZ2UuY2FwdGlvblwiIGNhcHRpb24uYmluZD1cInN0YXR1c01lc3NhZ2UuY2FwdGlvblwiIHR5cGUuYmluZD1cInN0YXR1c01lc3NhZ2UudHlwZVwiPjwvcD5cbiAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7J2Zvcm0tZWxlbWVudHMnOiAhaXNMYXlvdXREaWFsb2csICdmb3JtLWNvbnRlbnQnOiBpc0xheW91dERpYWxvZ31cIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb250ZW50XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYmFzaWMtYnRuLWdycCBmb3JtLWFjdGlvbiBwYW5lbC1mb290ZXIgY2xlYXJmaXhcIiBbbmdDbGFzc109XCJ7J21vZGFsLWZvb3Rlcic6IGlzTGF5b3V0RGlhbG9nfVwiIFtjbGFzcy5oaWRkZW5dPVwiIWV4cGFuZGVkIHx8ICFzaG93QnV0dG9ucygnZm9vdGVyJylcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGJ0biBvZiBidXR0b25BcnJheSB8IGZpbHRlciA6ICdwb3NpdGlvbicgOiAnZm9vdGVyJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImJ0bi53aWRnZXRUeXBlID09PSAnYnV0dG9uJyA/IGJ1dHRvblJlZiA6IGFuY2hvclJlZlwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7YnRuOmJ0bn1cIj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjcGFnZUxheW91dFRlbXBsYXRlPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb250ZW50XCI+PC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2J1dHRvblJlZiBsZXQtYnRuPVwiYnRuXCI+XG4gICAgPGJ1dHRvbiAgd21CdXR0b24gbmFtZT1cInt7YnRuLmtleX19XCIgY2FwdGlvbi5iaW5kPVwiYnRuLmRpc3BsYXlOYW1lXCIgY2xhc3MuYmluZD1cImJ0bi5jbGFzc1wiIGljb25jbGFzcy5iaW5kPVwiYnRuLmljb25jbGFzc1wiIHNob3cuYmluZD1cImJ0bi5zaG93XCJcbiAgICAgICAgICAgICAoY2xpY2spPVwiaW52b2tlQWN0aW9uRXZlbnQoJGV2ZW50LCBidG4uYWN0aW9uKVwiIHR5cGUuYmluZD1cImJ0bi50eXBlXCIgaGludC5iaW5kPVwiYnRuLnRpdGxlXCIgc2hvcnRjdXRrZXkuYmluZD1cImJ0bi5zaG9ydGN1dGtleVwiIGRpc2FibGVkLmJpbmQ9XCJuZ2Zvcm0uc3RhdHVzID09PSAnUEVORElORycgfHwgYnRuLmRpc2FibGVkXCJcbiAgICAgICAgICAgICB0YWJpbmRleC5iaW5kPVwiYnRuLnRhYmluZGV4XCIgW2F0dHIuYXJpYS1sYWJlbF09XCJidG4uZGlzcGxheU5hbWVcIiBbY2xhc3MuaGlkZGVuXT1cImJ0bi51cGRhdGVNb2RlID8gIWlzVXBkYXRlTW9kZSA6IGlzVXBkYXRlTW9kZVwiPjwvYnV0dG9uPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNhbmNob3JSZWYgbGV0LWJ0bj1cImJ0blwiPlxuICAgIDxhIHdtQW5jaG9yIG5hbWU9XCJ7e2J0bi5rZXl9fVwiIGNhcHRpb24uYmluZD1cImJ0bi5kaXNwbGF5TmFtZVwiIGNsYXNzLmJpbmQ9XCJidG4uY2xhc3NcIiBpY29uY2xhc3MuYmluZD1cImJ0bi5pY29uY2xhc3NcIiBzaG93LmJpbmQ9XCJidG4uc2hvd1wiXG4gICAgICAgICAgICAgKGNsaWNrKT1cImludm9rZUFjdGlvbkV2ZW50KCRldmVudCwgYnRuLmFjdGlvbilcIiBoaW50LmJpbmQ9XCJidG4udGl0bGVcIiBzaG9ydGN1dGtleS5iaW5kPVwiYnRuLnNob3J0Y3V0a2V5XCJcbiAgICAgICAgICAgICBoeXBlcmxpbmsuYmluZD1cImJ0bi5oeXBlcmxpbmtcIiB0YXJnZXQuYmluZD1cImJ0bi50YXJnZXRcIlxuICAgICAgICAgICAgIHRhYmluZGV4LmJpbmQ9XCJidG4udGFiaW5kZXhcIiBbY2xhc3MuaGlkZGVuXT1cImJ0bi51cGRhdGVNb2RlID8gIWlzVXBkYXRlTW9kZSA6IGlzVXBkYXRlTW9kZVwiPjwvYT5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy1jb250YWluZXIgI2R5bmFtaWNGb3JtPjwvbmctY29udGFpbmVyPlxuIl19