mmhglobal-dynamicform 2.0.0-beta.0 → 2.0.0-beta.1

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.
@@ -317,7 +317,10 @@ export class ZgridComponent extends DataListingFieldBase {
317
317
  this.mainService.loadContainerView(this.elementContainer, pageElement, this.group);
318
318
  }
319
319
  else {
320
- this.router.navigateByUrl(this.group.editModelURL, { skipLocationChange: false });
320
+ this.router.navigate([this.group.editModelURL], {
321
+ relativeTo: this.activatedRoute,
322
+ //skipLocationChange: false
323
+ });
321
324
  }
322
325
  //// When clicked route to page
323
326
  //this.router.navigate([this.group.editModelURL, dataItem.Id, 'edit'], {
@@ -995,4 +998,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
995
998
  type: ViewChild,
996
999
  args: [ElementContainerDirective, { static: true }]
997
1000
  }] } });
998
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemdyaWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvemdyaWQvemdyaWQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvemdyaWQvemdyaWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQXFCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4RSxPQUFPLEVBQUUsU0FBUyxFQUFlLFVBQVUsRUFBRSxXQUFXLEVBQWUsTUFBTSxnQkFBZ0IsQ0FBQztBQUc5Riw2QkFBNkI7QUFFN0IsOEJBQThCO0FBQzlCLE9BQU8sRUFBYyxFQUFFLEVBQUUsT0FBTyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUM3RCxPQUFPLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHaEUsT0FBTyxFQUF5QixPQUFPLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM1RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQWVuRSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNyRixPQUFPLEVBRUcsTUFBTSxFQUFjLGdCQUFnQixFQUU3QyxNQUFNLGlCQUFpQixDQUFDO0FBRXpCLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBMkJsRixNQUFNLE9BQU8sY0FBZSxTQUFRLG9CQUFvQjtJQXFEdEQsWUFDRSxXQUE4QixFQUN0QixjQUE4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ZSxFQUFFO1lBQ3pCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1NBQzNDO0lBQ0gsQ0FBQztJQUVPLDRCQUE0QixDQUFDLEtBQWE7UUFDaEQsUUFBUSxLQUFLLENBQUMsSUFBSSxFQUFFO1lBQ2xCLEtBQUssUUFBUSxDQUFDO1lBQ2QsS0FBSyxTQUFTLENBQUM7WUFDZixLQUFLLE1BQU0sQ0FBQztZQUNaLEtBQUssT0FBTyxDQUFDO1lBQ2IsS0FBSyxVQUFVLENBQUM7WUFDaEIsS0FBSyxLQUFLLENBQUM7WUFDWCxLQUFLLE1BQU0sQ0FBQztZQUNaLEtBQUssS0FBSyxDQUFDO1lBQ1gsS0FBSyxVQUFVLENBQUM7WUFDaEIsS0FBSyxVQUFVO2dCQUNiLElBQUksQ0FBQyxLQUFLLENBQUMsMEJBQTBCLENBQUMsRUFBRTtvQkFDdEMsT0FBTyxVQUFVLENBQUM7aUJBQ25CO2dCQUNELE9BQU8sSUFBSSxDQUFDO1lBQ2Q7Z0JBQ0UsT0FBTyxHQUFHLENBQUM7U0FDZDtJQUNILENBQUM7OzRHQXJvQ1UsY0FBYztnR0FBZCxjQUFjLDZGQUNkLGdCQUFnQixtRkFDaEIseUJBQXlCLHFGQ2pFdEMsazR3QkFzWEEsdzhrQkQzVGM7UUFDViw0QkFBNEI7S0FDN0I7NEZBRVUsY0FBYztrQkFSMUIsU0FBUzsrQkFDRSxXQUFXLGNBR1Q7d0JBQ1YsNEJBQTRCO3FCQUM3Qjt3WUFHbUMsVUFBVTtzQkFBN0MsU0FBUzt1QkFBQyxnQkFBZ0I7Z0JBQzZCLGdCQUFnQjtzQkFBdkUsU0FBUzt1QkFBQyx5QkFBeUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyIvKioqKioqKioqKiBBbmd1bGFyICoqKioqKioqKiovXHJcbmltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBPbkRlc3Ryb3ksIFZpZXdDaGlsZCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCwgRm9ybUJ1aWxkZXIsIFZhbGlkYXRvcnMsIEZvcm1Db250cm9sLCBWYWxpZGF0b3JGbiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcclxuXHJcbi8qKioqKioqKioqIElvbmljICoqKioqKioqKiovXHJcblxyXG4vKioqKioqKioqKiBQbHVnaW4gKioqKioqKioqKi9cclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IHRhcCwgbWFwLCBzd2l0Y2hNYXAsIGNvbmNhdE1hcCB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xyXG5pbXBvcnQgeyBFeGNlbEV4cG9ydERhdGEgfSBmcm9tICdAcHJvZ3Jlc3Mva2VuZG8tYW5ndWxhci1leGNlbC1leHBvcnQnO1xyXG5pbXBvcnQgeyBHcmlkSXRlbSwgU2VsZWN0YWJsZVNldHRpbmdzIH0gZnJvbSAnQHByb2dyZXNzL2tlbmRvLWFuZ3VsYXItZ3JpZCc7XHJcbmltcG9ydCB7IFNvcnREZXNjcmlwdG9yLCBTdGF0ZSwgcHJvY2VzcyB9IGZyb20gXCJAcHJvZ3Jlc3Mva2VuZG8tZGF0YS1xdWVyeVwiO1xyXG5pbXBvcnQgeyBUb29sdGlwRGlyZWN0aXZlIH0gZnJvbSAnQHByb2dyZXNzL2tlbmRvLWFuZ3VsYXItdG9vbHRpcCc7XHJcbmltcG9ydCB7XHJcbiAgR3JpZERhdGFSZXN1bHQsXHJcbiAgRGF0YVN0YXRlQ2hhbmdlRXZlbnQsXHJcbiAgUGFnZUNoYW5nZUV2ZW50LFxyXG4gIENlbGxDbGlja0V2ZW50LFxyXG4gIEdyaWRDb21wb25lbnQsXHJcbiAgUm93QXJncyxcclxuICBDb2x1bW5SZW9yZGVyRXZlbnRcclxufSBmcm9tIFwiQHByb2dyZXNzL2tlbmRvLWFuZ3VsYXItZ3JpZFwiO1xyXG5cclxuLyoqKioqKioqKiogQ29tcG9uZW50ICYgU2VydmljZSAqKioqKioqKioqL1xyXG4vLyBpbXBvcnQgeyBlbnZpcm9ubWVudCB9IGZyb20gXCJzcmMvZW52aXJvbm1lbnRzL2Vudmlyb25tZW50XCI7XHJcbmltcG9ydCB7IE1haW5TZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL21haW4uc2VydmljZVwiO1xyXG5pbXBvcnQgeyBaR3JpZEJpbmRpbmdEaXJlY3RpdmUgfSBmcm9tIFwiLi96Z3JpZC5iaW5kaW5nLmRpcmVjdGl2ZVwiO1xyXG5pbXBvcnQgeyBFbGVtZW50Q29udGFpbmVyRGlyZWN0aXZlIH0gZnJvbSBcIi4uL2RpcmVjdGl2ZXMvZWxlbWVudGNvbnRhaW5lci5kaXJlY3RpdmVcIjtcclxuaW1wb3J0IHtcclxuICBBdXRoU2VydmljZSwgV2ViQXBpU2VydmljZSwgVG9hc3RTZXJ2aWNlLCBHcmlkQ2FjaGluZyxcclxuICBaRmllbGQsIFpHcm91cCwgWkNvbXBvbmVudCwgWkNvbXBvbmVudEhlbHBlciwgWkNvbXBvbmVudE91dHB1dEV2ZW50LCBaQ29yZVNlcnZpY2UsXHJcbiAgWkdyaWRTdGF0ZVBlcnNpc3RpbmdTZXJ2aWNlLCBaR3JpZFBvc3RBcGlQYXJhbXMsIFpHcmlkU2V0dGluZ3MsIFpHcmlkQ29sdW1uU2V0dGluZ3MsIFpHcmlkQ3VzdG9tQ29sdW1uLCBTdG9yYWdlU2Vzc2lvblNlcnZpY2VcclxufSBmcm9tICdtbWhnbG9iYWwtemNvcmUnO1xyXG5pbXBvcnQgeyBaQ29tcG9uZW50U2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy96Y29tcG9uZW50LnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgRGF0YUxpc3RpbmdGaWVsZEJhc2UgfSBmcm9tIFwiLi4vY29tcG9uZW50cy9kYXRhbGlzdGluZ2ZpZWxkYmFzZS5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgaGlkZUFuZFNob3dWZXJ0aWNhbEFuaW1hdGlvbiB9IGZyb20gXCIuLi9hbmltYXRpb25zL2NvbXBvbmVudC1hbmltYXRpb25zXCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFpHcmlkIHtcclxuICBwYXJhbXM6IFpHcmlkUG9zdEFwaVBhcmFtcztcclxuICBzdGF0ZTogU3RhdGU7XHJcbiAgY29sdW1uczogYW55W107XHJcbiAgcGFnaW5hdGlvbkFwaVBvc3RVcmw6IHN0cmluZztcclxuICBkYXRhOiBaRmllbGQ7XHJcbiAgZ3JvdXA6IFpHcm91cDtcclxuICB6Z3JpZDogWkdyaWRCaW5kaW5nRGlyZWN0aXZlO1xyXG4gIGlubGluZUVkaXRlZEZvcm1Hcm91cHM6IEZvcm1Hcm91cDtcclxuICBnZXRHcmlkRGF0YTogKCkgPT4gYW55W107XHJcbiAgZ2V0RGF0YTogKCkgPT4gdm9pZDtcclxuICBjbGVhckRhdGE6ICgpID0+IHZvaWQ7XHJcbiAgc2V0RGF0YTogKGRhdGE6IGFueSkgPT4gdm9pZDtcclxuICBzZXRDb2x1bW5zOiAoY29sdW1uRmllbGRzTmFtZTogc3RyaW5nLCBjb2x1bW5zOiBBcnJheTxaR3JpZEN1c3RvbUNvbHVtbj4pID0+IHZvaWQ7XHJcbn1cclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJhcHAtemdyaWRcIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL3pncmlkLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmxzOiBbXCIuL3pncmlkLmNvbXBvbmVudC5zY3NzXCJdLFxyXG4gIGFuaW1hdGlvbnM6IFtcclxuICAgIGhpZGVBbmRTaG93VmVydGljYWxBbmltYXRpb25cclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBaZ3JpZENvbXBvbmVudCBleHRlbmRzIERhdGFMaXN0aW5nRmllbGRCYXNlIGltcGxlbWVudHMgWkNvbXBvbmVudCwgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIEBWaWV3Q2hpbGQoVG9vbHRpcERpcmVjdGl2ZSkgcHVibGljIHRvb2x0aXBEaXI6IFRvb2x0aXBEaXJlY3RpdmU7XHJcbiAgQFZpZXdDaGlsZChFbGVtZW50Q29udGFpbmVyRGlyZWN0aXZlLCB7IHN0YXRpYzogdHJ1ZSB9KSBlbGVtZW50Q29udGFpbmVyITogRWxlbWVudENvbnRhaW5lckRpcmVjdGl2ZTtcclxuICAvLyBAVmlld0NoaWxkKFpHcmlkQmluZGluZ0RpcmVjdGl2ZSwgeyBzdGF0aWM6IGZhbHNlIH0pIHpncmlkOiBaR3JpZEJpbmRpbmdEaXJlY3RpdmU7XHJcbiAgemdyaWQ6IGFueSA9IG51bGw7XHJcbiAgb2F1dGhVcmw6IHN0cmluZyA9IG51bGw7XHJcbiAgZ3JpZERhdGE6IEdyaWREYXRhUmVzdWx0O1xyXG4gIHNlbGVjdGFibGVTZXR0aW5nczogU2VsZWN0YWJsZVNldHRpbmdzO1xyXG4gIG15U2VsZWN0aW9uOiBhbnlbXSA9IFtdO1xyXG4gIC8vIGlubGluZUVkaXRlZEZvcm1Hcm91cHM6IEZvcm1Hcm91cDtcclxuICBpbmxpbmVFZGl0ZWRGb3JtR3JvdXBzOiB7fTtcclxuICBwdWJsaWMgZm9ybUdyb3VwOiBGb3JtR3JvdXA7IC8vIGZvciBrZW5kbyBncmlkIGJ1aWx0LWluXHJcbiAgcHVibGljIHByZXZpb3VzTmV4dDogYm9vbGVhbjtcclxuXHJcbiAgcHVibGljIGdyaWRCdG47XHJcbiAgcHVibGljIHBhZ2VhYmxlOiBhbnkgPSBmYWxzZTtcclxuICBwdWJsaWMgZmlsdGVyR3JvdXAgPSBuZXcgWkdyb3VwKCk7XHJcbiAgcHVibGljIGFkdmZpbHRlckdyb3VwID0gbmV3IFpHcm91cCgpO1xyXG4gIHB1YmxpYyBpc1Nob3dBZHZGaWx0ZXIgPSBmYWxzZTtcclxuXHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvbiwgbm8tdW5kZXJzY29yZS1kYW5nbGUsIGlkLWJsYWNrbGlzdCwgaWQtbWF0Y2hcclxuICBfc3RhdGU6IFN0YXRlID0ge1xyXG4gICAgc2tpcDogMCxcclxuICAgIHRha2U6IDEwXHJcbiAgfTtcclxuXHJcbiAgcGFyYW1zOiBaR3JpZFBvc3RBcGlQYXJhbXMgPSB7XHJcbiAgICByZWZlcklkOiBudWxsLFxyXG4gICAgcGFnZU5vOiAwLFxyXG4gICAgcGFnZVNpemU6IDIwLFxyXG4gICAgc29ydENvbHVtbk5hbWU6IFwiXCIsXHJcbiAgICBzb3J0T3JkZXI6IFwiXCIsXHJcbiAgICBzb3J0Q29sdW1uTmFtZXM6IFtdLFxyXG4gICAgc29ydE9yZGVyczogW10sXHJcbiAgICBmaWx0ZXJQYXJhbXM6IFtdLFxyXG4gICAgcGFyYW1ldGVyczogXCJcIixcclxuICAgIGZpbHRlcnM6IFwiXCIsXHJcbiAgICBjb2x1bW5zOiBcIlwiLFxyXG4gICAgZ3JhbnRUeXBlOiA0XHJcbiAgfTtcclxuXHJcbiAgZ3JpZFN1YmplY3Q6IFN1YmplY3Q8YW55PiA9IG5ldyBTdWJqZWN0PGFueT4oKTtcclxuICBwcml2YXRlIGdEYXRhOiBhbnk7XHJcblxyXG4gIGNvbHVtbnM6IGFueVtdO1xyXG4gIGVkaXRhYmxlQ29sdW1uczogYW55W107XHJcbiAgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcbiAgcGFnZVNpemVzOiBib29sZWFuIHwgYW55W107XHJcbiAgZ3JpZFN0b3JhZ2VLZXk6IHN0cmluZztcclxuICBncmlkRGVmYXVsdFN0YXRlRXhpc3Q6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpc05ldzogYm9vbGVhbiA9IHRydWU7XHJcbiAgcHJpdmF0ZSBlZGl0ZWRSb3dJbmRleDogbnVtYmVyO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIGNvbXBTZXJ2aWNlOiBaQ29tcG9uZW50U2VydmljZSxcclxuICAgIHByaXZhdGUgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxyXG4gICAgcHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHdlYkFwaVNlcnZpY2U6IFdlYkFwaVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHpHcmlkU3RhdGVQZXJzaXN0aW5nU2VydmljZTogWkdyaWRTdGF0ZVBlcnNpc3RpbmdTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB0b2FzdFNlcnZpY2U6IFRvYXN0U2VydmljZSxcclxuICAgIHByaXZhdGUgemNvcmVTZXJ2aWNlOiBaQ29yZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHN0b3JhZ2VTZXJ2aWNlOiBTdG9yYWdlU2Vzc2lvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG1haW5TZXJ2aWNlOiBNYWluU2VydmljZSxcclxuICApIHtcclxuICAgIHN1cGVyKGNvbXBTZXJ2aWNlKTtcclxuICAgIHRoaXMub2F1dGhVcmwgPSB0aGlzLnpjb3JlU2VydmljZS5nZXRFbnZpcm9ubWVudCgpLmUxT2F1dGhVcmwgKyBcIi9cIjtcclxuICAgIHRoaXMuYWxsUmVzdWx0cyA9IHRoaXMuYWxsUmVzdWx0cy5iaW5kKHRoaXMpO1xyXG4gICAgdGhpcy5yZWZyZXNoRGF0YSA9IHRoaXMucmVmcmVzaERhdGEuYmluZCh0aGlzKTtcclxuICAgIHRoaXMuY2xlYXJEYXRhID0gdGhpcy5jbGVhckRhdGEuYmluZCh0aGlzKTtcclxuICAgIHRoaXMuc2F2ZUdyaWRTZXR0aW5ncyA9IHRoaXMuc2F2ZUdyaWRTZXR0aW5ncy5iaW5kKHRoaXMpO1xyXG4gICAgdGhpcy5yZXN0b3JlR3JpZFNldHRpbmdzID0gdGhpcy5yZXN0b3JlR3JpZFNldHRpbmdzLmJpbmQodGhpcyk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIC8vIEdyaWQgc2F2ZWQgc2V0dGluZyBrZXkoVXNlZCBpbiBDb29raWVTdG9yZSAmIExvY2FsU3RvcmFnZSlcclxuICAgIC8vIHRoaXMuYXV0aFNlcnZpY2UudXNlcklzQXV0aGVudGljYXRlZC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgLy8gICB0aGlzLmdyaWRTdG9yYWdlS2V5ID0gJ2lvbmljLWZpZWxkOjonICsgdGhpcy5hdXRoU2VydmljZS5lMVRva2VuLnVzZXJOYW1lICsgJzo6JyArIHRoaXMuZGF0YS5OYW1lICsgJzo6JyArIHRoaXMucm91dGVyLnVybDtcclxuICAgIC8vIH0pO1xyXG4gICAgc3VwZXIuaW5pdENvbXBvbmVudCgpXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIC8vIGNvbmNhdE1hcCgoKSA9PiB7XHJcbiAgICAgICAgLy8gICAvLyB0cnkgZ2V0IGdyaWRzZXR0aW5nIGZyb20gY29va2llc3RvcmVcclxuICAgICAgICAvLyAgIHJldHVybiB0aGlzLm1haW5TZXJ2aWNlLmNvb2tpZVN0b3JlR2V0KHRoaXMuZ3JpZFN0b3JhZ2VLZXksIHRoaXMuYXV0aFNlcnZpY2UuZTFUb2tlbi5hY2Nlc3NfdG9rZW4pO1xyXG4gICAgICAgIC8vIH0pLFxyXG4gICAgICAgIC8vIHN3aXRjaE1hcChzYXZlZEdyaWRDYWNoZSA9PiB7XHJcbiAgICAgICAgLy8gICBpZiAoc2F2ZWRHcmlkQ2FjaGUpIHtcclxuICAgICAgICAvLyAgICAgLy8gS2VlcCB0aGUgZ3JpZFNldHRpbmcgZnJvbSBjb29raWVzdG9yZSB0byBsb2NhbFN0b3JhZ2VcclxuICAgICAgICAvLyAgICAgdGhpcy56R3JpZFN0YXRlUGVyc2lzdGluZ1NlcnZpY2Uuc2V0KHRoaXMuZ3JpZFN0b3JhZ2VLZXksIHNhdmVkR3JpZENhY2hlKTtcclxuICAgICAgICAvLyAgICAgcmV0dXJuIG9mKHRydWUpO1xyXG4gICAgICAgIC8vICAgfVxyXG4gICAgICAgIC8vICAgcmV0dXJuIG9mKGZhbHNlKTtcclxuICAgICAgICAvLyB9KSxcclxuICAgICAgICB0YXAoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zZXR1cEZpbHRlckZlYXR1cmUoKTtcclxuICAgICAgICAgIHRoaXMuc2V0dXBHcmlkQnV0dG9ucygpO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XHJcbiAgICAgICAgICAvLyBHcmlkIGRlZmF1bHQgc2V0dGluZ1xyXG4gICAgICAgICAgdGhpcy5jb2x1bW5zID0gW107XHJcbiAgICAgICAgICB0aGlzLl9zdGF0ZS50YWtlID0gdGhpcy5kYXRhLlBhZ2VTaXplIHx8IDIwO1xyXG4gICAgICAgICAgdGhpcy5wYWdlU2l6ZXMgPSBbNSwgMTAsIDIwLCA1MCwgMTAwLCAyMDAsIDUwMF07IC8vIHRvIGJlIGVuaGFuY2VkOiBjdXN0b20gcGFnZSBzaXplc1xyXG4gICAgICAgICAgdGhpcy5wcmV2aW91c05leHQgPSB0aGlzLmRhdGFbJ0VuYWJsZVByZXZpb3VzTmV4dEJ1dHRvbiddIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICAgIC8vIFtNb2JpbGVdIERpc2FibGUgUGFnZVNpemVcclxuICAgICAgICAgIGlmICh0aGlzLmRhdGEuUGFnZVNpemVzID09PSBmYWxzZSB8fCBaQ29tcG9uZW50SGVscGVyLmlzTW9iaWxlU2NyZWVuKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5wYWdlU2l6ZXMgPSBmYWxzZTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB0aGlzLnBhZ2VhYmxlID0gdGhpcy5kYXRhLnBhZ2VBYmxlICE9IHVuZGVmaW5lZCA/IHRoaXMuZGF0YS5wYWdlQWJsZSA6IHsgcmVzcG9uc2l2ZTogdHJ1ZSwgYnV0dG9uQ291bnQ6IDMsIHBhZ2VTaXplczogdGhpcy5wYWdlU2l6ZXMsIHByZXZpb3VzTmV4dDogdGhpcy5wcmV2aW91c05leHQgfTtcclxuXHJcbiAgICAgICAgICAvLyBHcmlkIFNlbGVjdGlvbiBjb2x1bW5cclxuICAgICAgICAgIGlmICh0aGlzLmRhdGEuU2VsZWN0T3B0aW9ucykge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGFibGVTZXR0aW5ncyA9IHtcclxuICAgICAgICAgICAgICAvLyBjaGVja2JveE9ubHk6IHRoaXMuY2hlY2tib3hPbmx5LFxyXG4gICAgICAgICAgICAgIG1vZGU6IHRoaXMuZGF0YS5TZWxlY3RPcHRpb25zID09PSAnc2luZ2xlJyA/ICdzaW5nbGUnIDogJ211bHRpcGxlJ1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIGJpbmQgdGhpcyB0byBncm91cCB1c2luZyBHcmlkIHZhbHVlXHJcbiAgICAgICAgICBpZiAodGhpcy5kYXRhLlZhbHVlLnN0YXJ0c1dpdGgoJ2dyb3VwLicpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGdyaWRWYWx1ZSA9IHRoaXMuZGF0YS5WYWx1ZS5zbGljZSg2KTtcclxuICAgICAgICAgICAgdGhpcy5ncm91cFtncmlkVmFsdWVdID0gdGhpcztcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBjbGVhciBhbnkgU3Vic2NyaXB0aW9uXHJcbiAgICAgICAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24pIHtcclxuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBpZiBubyBSZXNvdXJjZVVSTCwgc3RpbGwgZ2VuZXJhdGUgQ29sdW1uIGZpcnN0LCB0aGVuIGluc2VydCBncmlkIGRhdGEgdXNpbmcgRGF0YVNvdXJjZVxyXG4gICAgICAgICAgaWYgKCF0aGlzLmRhdGEuUmVzb3VyY2VVUkwpIHtcclxuICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZUdyaWRDb2x1bW5zKCkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgICBpZiAodGhpcy5kYXRhLkRhdGFTb3VyY2UgJiYgdGhpcy5kYXRhLlNraXBEaXJlY3RpdmUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRzID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cFZhbHVlKFxyXG4gICAgICAgICAgICAgICAgICB0aGlzLmRhdGEuRGF0YVNvdXJjZSxcclxuICAgICAgICAgICAgICAgICAgdGhpcy5ncm91cFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0RGF0YShkcyk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHRoaXMuc2V0dXBQb3BvdmVyRmVhdHVyZSh0aGlzLmNvbHVtbnMsIHRoaXMuZ3JpZERhdGE/LmRhdGEpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBzdWJzY3JpYmUgdG8gc2V0IGdyaWQgc2V0dGluZyBmcm9tIGRpcmVjdGl2ZSB0byBjb21wb25lbnRcclxuICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gdGhpcy5ncmlkU3ViamVjdC5waXBlKFxyXG4gICAgICAgICAgICB0YXAoZ3JpZCA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy56Z3JpZCA9IGdyaWQ7XHJcbiAgICAgICAgICAgICAgdGhpcy5fc3RhdGUgPSB0aGlzLnpncmlkLnN0YXRlO1xyXG4gICAgICAgICAgICAgIHRoaXMuY29sdW1ucyA9IHRoaXMuemdyaWQuZ3JpZENvbHVtbnM7XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMuemdyaWQpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnpncmlkLmdyaWQuZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuemdyaWQuZ3JpZC5kYXRhLnRvdGFsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy56Z3JpZC5ncmlkLmRhdGEudG90YWwgPSAwO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuZ3JpZERhdGEgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLnpncmlkLmdyaWQuZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlRm9ybUNvbnRyb2xzKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLnpncmlkLmdyaWRbJ3BhZ2VTaXplJ10pIHtcclxuICAgICAgICAgICAgICAgICAgLy8gZGVmYXVsdCB0byAwIGluc3RlYWQgb2YgdW5kZWZpbmVkLlxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnpncmlkLmdyaWRbJ3BhZ2VTaXplJ10gPSAyMDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgdGhpcy5zZXR1cFBvcG92ZXJGZWF0dXJlKHRoaXMuY29sdW1ucywgdGhpcy5ncmlkRGF0YT8uZGF0YSk7XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xyXG4gICAgICAgICAgICAgIHJldHVybiBzdXBlci50cmFuc2xhdGVDb2x1bW5IZWFkZXIodGhpcy5jb2x1bW5zKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgICAgICAgLy8gQ2hlY2sgR3JpZCBzZXR0aW5nIGV4aXN0IGluIGxvY2Fsc3RvcmFnZVxyXG4gICAgICAgICAgdGhpcy5zdGF0ZUV4aXN0KCk7XHJcblxyXG4gICAgICAgICAgLy8gU2V0IEZpbHRlciBTZXNzaW9uS2V5XHJcbiAgICAgICAgICBpZiAodGhpcy5kYXRhWydTYXZlRmlsdGVyJ10pIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRHcmlkU2Vzc2lvbktleSh0aGlzLmdyb3VwKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiBvZih0cnVlKTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHN1cGVyLnRyYW5zbGF0ZVRvb2xCYXJJdGVtcygpO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIHRhcCgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmdyaWRDYWxsYmFjayh0aGlzLmdyb3VwKTtcclxuICAgICAgICAgIC8vIHJldHVybiBvZih0cnVlKTtcclxuICAgICAgICB9KSxcclxuICAgICAgKS5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiBTdGFydCBHcmlkIFN0YXRlIChwYWdpbmF0aW9uLCBzb3J0YWJsZSwgZmlsdGVyLCBvcmRlcmluZykgKi9cclxuICBnZXQgc3RhdGUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc3RhdGU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRlRXhpc3QoKSB7XHJcbiAgICBjb25zdCB1c2VyR3JpZFN0YXRlID0gdGhpcy56R3JpZFN0YXRlUGVyc2lzdGluZ1NlcnZpY2UuZ2V0KHRoaXMuZ3JpZFN0b3JhZ2VLZXkpO1xyXG5cclxuICAgIGlmICh1c2VyR3JpZFN0YXRlKSB7XHJcbiAgICAgIHRoaXMuZ3JpZERlZmF1bHRTdGF0ZUV4aXN0ID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLmdyaWREZWZhdWx0U3RhdGVFeGlzdCA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGRhdGFTdGF0ZUNoYW5nZShzdGF0ZTogRGF0YVN0YXRlQ2hhbmdlRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnpncmlkKSB7XHJcbiAgICAgIHRoaXMuemdyaWQuZGF0YVN0YXRlQ2hhbmdlKHN0YXRlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZ3JpZERhdGEgPSBwcm9jZXNzKHRoaXMuZ0RhdGEsIHN0YXRlKTtcclxuICAgICAgdGhpcy5jcmVhdGVGb3JtQ29udHJvbHMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBmaWx0ZXJhYmxlKHZhbHVlOiBhbnkpIHtcclxuICAgIGlmICh2YWx1ZSA9PT0gZmFsc2UpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc29ydGFibGUodmFsdWU6IGFueSkge1xyXG4gICAgaWYgKHZhbHVlID09PSBmYWxzZSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBsb2NrZWQoY29sU2V0dGluZzogYW55KSB7XHJcbiAgICBpZiAoY29sU2V0dGluZ1sncGlubmVkTGVmdCddID09IHRydWUpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIC8qIEVuZCBHcmlkIFN0YXRlIChwYWdpbmF0aW9uLCBzb3J0YWJsZSwgZmlsdGVyLCBvcmRlcmluZykgKi9cclxuXHJcbiAgLyogU3RhcnQgR3JpZCBDb2x1bW5zICovXHJcbiAgcHVibGljIGlzU2VsZWN0T3B0aW9uKCkge1xyXG4gICAgbGV0IHNlbGVjdE9wdGlvbkV4aXN0ID0gZmFsc2U7XHJcbiAgICBpZiAodGhpcy5kYXRhLlNlbGVjdE9wdGlvbnMpIHtcclxuICAgICAgdGhpcy5zZWxlY3RhYmxlU2V0dGluZ3MgPSB7XHJcbiAgICAgICAgY2hlY2tib3hPbmx5OiBmYWxzZSxcclxuICAgICAgICBtb2RlOiAodGhpcy5kYXRhLlNlbGVjdE9wdGlvbnMgPT0gXCJtdWx0aXBsZVwiKSA/IFwibXVsdGlwbGVcIiA6IFwic2luZ2xlXCJcclxuICAgICAgfTtcclxuICAgICAgc2VsZWN0T3B0aW9uRXhpc3QgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHNlbGVjdE9wdGlvbkV4aXN0O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldENvbHVtbnMoY29sdW1uTmFtZTogc3RyaW5nLCBjb2x1bW5zOiBBcnJheTxaR3JpZEN1c3RvbUNvbHVtbj4pIHtcclxuICAgIHRoaXMuZ3JvdXBbY29sdW1uTmFtZV0gPSB0aGlzLndyYXBDb2x1bW5OYW1lc0luRmllbGRFbGVtZW50KGNvbHVtbnMpO1xyXG4gICAgdGhpcy5nZW5lcmF0ZUdyaWRDb2x1bW5zKCkuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHdyYXBDb2x1bW5OYW1lc0luRmllbGRFbGVtZW50KGNvbHVtbkxpc3Q6IEFycmF5PFpHcmlkQ3VzdG9tQ29sdW1uPikge1xyXG4gICAgcmV0dXJuIG9mKGNvbHVtbkxpc3QubWFwKGMgPT4ge1xyXG4gICAgICBjb25zdCBpc0hpZGRlbjogYm9vbGVhbiA9IGMuSGlkZGVuO1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIE5hbWU6IGMuTmFtZSxcclxuICAgICAgICBWYWx1ZTogYy5Db2RlLFxyXG4gICAgICAgIFR5cGU6IGMuVHlwZSxcclxuICAgICAgICBncmlkQ29sVmlzaWJsZTogIWlzSGlkZGVuLFxyXG4gICAgICAgIHdpZHRoOiAxMDAgKyBjLk5hbWUubGVuZ3RoICogNCxcclxuICAgICAgICBlbmFibGVGaWx0ZXJpbmc6IGZhbHNlLFxyXG4gICAgICAgIGVuYWJsZVNvcnRpbmc6IHRydWUsXHJcbiAgICAgICAgZW5hYmxlUGlubmluZzogdHJ1ZSxcclxuICAgICAgICBEaXZDbGFzczogXCJjb2wteHMtMTIgY29sLXNtLTZcIixcclxuICAgICAgICBJc0VkaXRhYmxlSW5HcmlkOiBjLkVkaXRhYmxlXHJcbiAgICAgIH07XHJcbiAgICB9KSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdlbmVyYXRlR3JpZENvbHVtbnMoKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIGNvbnN0IGdyaWRTZXR0aW5nID0gdGhpcy5nZXRHcmlkU2V0dGluZ3MoKTtcclxuXHJcbiAgICBjb25zdCBjb2x1bW5GaWVsZHMkOiBPYnNlcnZhYmxlPGFueT4gPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwVmFsdWUoXHJcbiAgICAgIHRoaXMuZGF0YS5Db2x1bW5GaWVsZHMsXHJcbiAgICAgIHRoaXMuZ3JvdXBcclxuICAgICkgfHwgb2YoW10pO1xyXG4gICAgaWYgKCF0aGlzLmRhdGEuQ29sdW1uRmllbGRzKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybignSW52YWxpZC9FbXB0eSBncmlkKCcgKyB0aGlzLmRhdGEuTmFtZSArICcpIGNvbHVtbkZpZWxkJyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY29sdW1uRmllbGRzJC5waXBlKFxyXG4gICAgICB0YXAoZGF0YSA9PiB7XHJcbiAgICAgICAgaWYgKCFkYXRhKSB7XHJcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ0ludmFsaWQvRW1wdHkgZ3JpZCgnICsgdGhpcy5kYXRhLk5hbWUgKyAnKSBkYXRhIHRvIGdlbmVyYXRlIGNvbHVtbicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IGZpZWxkTmFtZSA9IHRoaXMuZGF0YVsnRmllbGRFbGVtZW50TmFtZSddO1xyXG4gICAgICAgICAgdGhpcy5jb2x1bW5zID0gW107XHJcbiAgICAgICAgICBaQ29tcG9uZW50SGVscGVyLmdldEdyaWRDb2x1bW5zKGRhdGEsXHJcbiAgICAgICAgICAgIHRoaXMuY29sdW1ucyxcclxuICAgICAgICAgICAgdGhpcy5ncm91cCxcclxuICAgICAgICAgICAgZ3JpZFNldHRpbmcsXHJcbiAgICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAgIHRoaXMuZGF0YSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICAgc3dpdGNoTWFwKCgpID0+IHtcclxuICAgICAgICByZXR1cm4gc3VwZXIudHJhbnNsYXRlQ29sdW1uSGVhZGVyKHRoaXMuY29sdW1ucyk7XHJcbiAgICAgIH0pLFxyXG4gICAgICAvL3N3aXRjaE1hcCgoKSA9PiB7XHJcbiAgICAgIC8vICAvL0dldCBTZXNzaW9uXHJcbiAgICAgIC8vICByZXR1cm4gdGhpcy5nZXRHcmlkU2Vzc2lvbkZpbHRlcih0aGlzLmdycCwgdGhpcyk7XHJcbiAgICAgIC8vfSksXHJcbiAgICAgIC8vc3dpdGNoTWFwKCgpID0+IHtcclxuICAgICAgLy8gIC8vQmVmb3JlIGdldCBncmlkIGRhdGFcclxuICAgICAgLy8gIHJldHVybiB0aGlzLmJlZm9yZUdyaWRHZXREYXRhKHRoaXMuZ3JwLCB0aGlzKTtcclxuICAgICAgLy99KSxcclxuICAgICAgLy9zd2l0Y2hNYXAoKCkgPT4ge1xyXG4gICAgICAvLyAgLy9TZXQgZ3JpZCBkYXRhXHJcbiAgICAgIC8vICByZXR1cm4gdGhpcy5zZXRHcmlkU2Vzc2lvbkZpbHRlcih0aGlzLmdycCwgdGhpcyk7XHJcbiAgICAgIC8vfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKiBFbmQgR3JpZCBDb2x1bW5zICovXHJcblxyXG4gIHByaXZhdGUgZWRpdE1vZGVsKGRhdGFJdGVtOiBhbnkpIHtcclxuICAgIGlmICh0aGlzLmRhdGEuRWRpdENsaWNrVVJMKSB7XHJcbiAgICAgIC8vIEVkaXQgaW5jZWxsIGZpZWxkXHJcbiAgICAgIGNvbnN0IGNvbEZpZWxkcyA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBWYWx1ZSh0aGlzLmRhdGEuQ29sdW1uRmllbGRzLCB0aGlzLmdyb3VwKTtcclxuICAgICAgdGhpcy5ncm91cC5zdWJqZWN0Lm5leHQoe1xyXG4gICAgICAgIHR5cGU6IFwiemdyaWQtY2VsbENsaWNrXCIsXHJcbiAgICAgICAgdGFyZ2V0OiB0aGlzLmRhdGEuRWRpdENsaWNrVVJMLFxyXG4gICAgICAgIGRhdGE6IGRhdGFJdGVtLFxyXG4gICAgICAgIGNvbHVtbkZpZWxkcyQ6IGNvbEZpZWxkc1xyXG4gICAgICB9IGFzIFpDb21wb25lbnRPdXRwdXRFdmVudCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHsgXHJcbiAgICAgIGlmICh0aGlzLmRhdGFbJ0NvbnRhaW5lckZvcm0nXSkge1xyXG4gICAgICAgIC8vIFdoZW4gY2xpY2tlZCBkaXNwbGF5IGluIENvbnRhaW5lclZpZXdcclxuICAgICAgICBjb25zdCBwYWdlRWxlbWVudCA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBWYWx1ZSh0aGlzLmRhdGFbJ0NvbnRhaW5lckZvcm0nXSwgdGhpcy5ncm91cCk7XHJcbiAgICAgICAgdGhpcy5tYWluU2VydmljZS5sb2FkQ29udGFpbmVyVmlldyh0aGlzLmVsZW1lbnRDb250YWluZXIsIHBhZ2VFbGVtZW50LCB0aGlzLmdyb3VwKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHsgXHJcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh0aGlzLmdyb3VwLmVkaXRNb2RlbFVSTCwgeyBza2lwTG9jYXRpb25DaGFuZ2U6IGZhbHNlIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIC8vLy8gV2hlbiBjbGlja2VkIHJvdXRlIHRvIHBhZ2VcclxuICAgICAgLy90aGlzLnJvdXRlci5uYXZpZ2F0ZShbdGhpcy5ncm91cC5lZGl0TW9kZWxVUkwsIGRhdGFJdGVtLklkLCAnZWRpdCddLCB7XHJcbiAgICAgIC8vICByZWxhdGl2ZVRvOiB0aGlzLmFjdGl2YXRlZFJvdXRlXHJcbiAgICAgIC8vfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ3JpZENhbGxiYWNrKGdyb3VwOiBaR3JvdXApIHtcclxuICAgIGlmICh0aGlzLmRhdGFbJ0FmdGVybG9hZENhbGxiYWNrJ10pIHtcclxuICAgICAgY29uc3QgbWUgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzKTtcclxuXHJcbiAgICAgIHRoaXMuZ3JvdXAuc3ViamVjdC5uZXh0KHtcclxuICAgICAgICB0eXBlOiBcInpncmlkLUFmdGVybG9hZENhbGxiYWNrXCIsXHJcbiAgICAgICAgdGFyZ2V0OiB0aGlzLmRhdGFbJ0FmdGVybG9hZENhbGxiYWNrJ10sXHJcbiAgICAgICAgZGF0YTogbWVcclxuICAgICAgfSBhcyBaQ29tcG9uZW50T3V0cHV0RXZlbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldERhdGEgPSAoZ0RhdGE6IGFueSkgPT4ge1xyXG4gICAgdGhpcy5ncmlkRGF0YSA9IHtcclxuICAgICAgZGF0YTogZ0RhdGEsXHJcbiAgICAgIHRvdGFsOiAoZ0RhdGEgPyBnRGF0YS5sZW5ndGggOiAwKVxyXG4gICAgfTtcclxuICAgIHRoaXMuZ0RhdGEgPSBnRGF0YTtcclxuXHJcbiAgICBpZiAodGhpcy56Z3JpZCkge1xyXG4gICAgICB0aGlzLnpncmlkLmdyaWRbJ3BhZ2VTaXplJ10gPSBnRGF0YS5sZW5ndGg7IC8vIHNldCBncmlkIHNpemVcclxuICAgIH1cclxuXHJcbiAgICBpZiAoISF0aGlzLmRhdGEuU2hvd1JlY29yZE51bWJlcikge1xyXG4gICAgICBpZiAodGhpcy5ncmlkRGF0YS5kYXRhKSB7XHJcbiAgICAgICAgdGhpcy5ncmlkRGF0YS5kYXRhLmZvckVhY2goKGQsIGkpID0+IHtcclxuICAgICAgICAgIGQuR3JpZE5vID0gaSArIDE7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5nRGF0YSkge1xyXG4gICAgICB0aGlzLmNyZWF0ZUZvcm1Db250cm9scygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldERhdGEoKSB7XHJcbiAgICBpZiAodGhpcy56Z3JpZCkge1xyXG4gICAgICB0aGlzLnpncmlkLmdldERhdGFCaW5kaW5nKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuZGF0YS5Ta2lwRGlyZWN0aXZlKSB7XHJcbiAgICAgIHRoaXMuZ3JpZERhdGEgPSBwcm9jZXNzKHRoaXMuZ0RhdGEsIHRoaXMuc3RhdGUpO1xyXG4gICAgICB0aGlzLmNyZWF0ZUZvcm1Db250cm9scygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEdyaWREYXRhKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZ0RhdGE7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY3JlYXRlRm9ybUdyb3VwKGRhdGFJdGVtOiBhbnksIGZpZWxkTmFtZTogYW55KTogRm9ybUdyb3VwIHtcclxuICAgIHJldHVybiB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcclxuICAgICAgW2ZpZWxkTmFtZV06IGRhdGFJdGVtW2ZpZWxkTmFtZV1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEdyb3VwVmFsdWUodmFsdWU6IHN0cmluZywgZ3JvdXA6IFpHcm91cCkge1xyXG4gICAgcmV0dXJuIFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBWYWx1ZSh0aGlzLmRhdGEuVmFsdWUsIHRoaXMuZ3JvdXApO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uQnRuQ2xpY2soZXZlbnQ6IGFueSwgY29sU2V0dGluZzogYW55LCByb3dEYXRhOiBhbnksIGNlbGxEYXRhOiBzdHJpbmcpIHtcclxuICAgIHRoaXMub25OYXZpZ2F0ZVRvKGV2ZW50LCBjb2xTZXR0aW5nLCByb3dEYXRhLCBjZWxsRGF0YSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2VsbENsaWNrSGFuZGxlcihldmVudDogQ2VsbENsaWNrRXZlbnQpIHtcclxuICAgIGNvbnN0IGRpc2FibGVBbGxDb2x1bW5DZWxsQ2xpY2tIYW5kbGVyID0gdGhpcy5kYXRhLkRpc2FibGVDZWxsQ2xpY2tIYW5kbGVyID8gdGhpcy5kYXRhLkRpc2FibGVDZWxsQ2xpY2tIYW5kbGVyIDogZmFsc2U7XHJcbiAgICBjb25zdCBpc0NvbW1hbmRDb2x1bW4gPSBldmVudC5jb2x1bW4uY29uc3RydWN0b3IubmFtZSA9PSAnQ29tbWFuZENvbHVtbkNvbXBvbmVudCcgPyB0cnVlIDogZmFsc2U7XHJcblxyXG4gICAgaWYgKHRoaXMudG9vbHRpcERpcikge1xyXG4gICAgICB0aGlzLnRvb2x0aXBEaXIuaGlkZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghZGlzYWJsZUFsbENvbHVtbkNlbGxDbGlja0hhbmRsZXIgJiYgIWlzQ29tbWFuZENvbHVtbikge1xyXG4gICAgICBjb25zdCBpbkNlbGxFZGl0YWJsZSA9IHRoaXMuZGF0YS5JbkNlbGxFZGl0YWJsZSA/IHRoaXMuZGF0YS5JbkNlbGxFZGl0YWJsZSA6IGZhbHNlO1xyXG4gICAgICBpZiAoaW5DZWxsRWRpdGFibGUpIHtcclxuICAgICAgICB0aGlzLmVkaXRhYmxlQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5maWx0ZXIocyA9PiBzLmlzRWRpdGFibGVJbkRhdGFJdGVtID09PSB0cnVlKTtcclxuICAgICAgICBpZiAoISF0aGlzLmVkaXRhYmxlQ29sdW1ucykge1xyXG4gICAgICAgICAgdGhpcy5lZGl0YWJsZUNvbHVtbnMubWFwKHMgPT4gZXZlbnQuc2VuZGVyLmVkaXRDZWxsKGV2ZW50LnJvd0luZGV4LCBldmVudC5jb2x1bW5JbmRleCwgdGhpcy5jcmVhdGVGb3JtR3JvdXAoZXZlbnQuZGF0YUl0ZW0sIHMuZmllbGQpKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiY2VsbENsaWNrIGV2ZW50OiBcIiwgZXZlbnQpO1xyXG5cclxuICAgICAgICAvLyBzdG9yZSBjbGlja2VkIGlkIGFuZCBhY3Rpb24gYXMgZWRpdCB0byB0aGUgc2Vzc2lvbiBzdG9yYWdlXHJcbiAgICAgICAgdGhpcy5tYWluU2VydmljZS5zZXROYXZpZ2F0aW9uUGFyYW1zKFtldmVudC5kYXRhSXRlbS5JZCwgJ2VkaXQnXSk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmRhdGEuT25JdGVtQ2xpY2spIHtcclxuICAgICAgICAgIGNvbnN0IGZ1bmMgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwRXZhbFZhbHVlLmNhbGwodGhpcywgdGhpcy5kYXRhLk9uSXRlbUNsaWNrKTtcclxuICAgICAgICAgIGlmICh0eXBlb2YgZnVuYyA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICBjb25zdCBjYWxsRnVuYyA9IGZ1bmMuYmluZCh0aGlzLmdyb3VwLmN0cmxTY29wZSk7XHJcbiAgICAgICAgICAgIGNhbGxGdW5jKGV2ZW50KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZWRpdE1vZGVsKGV2ZW50LmRhdGFJdGVtKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGVkaXRDZWxsQ2xvc2VIYW5kbGVyKGFyZ3M6IGFueSkge1xyXG4gICAgY29uc3QgeyBmb3JtR3JvdXAsIGRhdGFJdGVtIH0gPSBhcmdzO1xyXG4gICAgaWYgKCFmb3JtR3JvdXAudmFsaWQpIHtcclxuICAgICAgYXJncy5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgfSBlbHNlIGlmIChmb3JtR3JvdXAuZGlydHkpIHtcclxuICAgICAgdGhpcy5lZGl0YWJsZUNvbHVtbnMgPSB0aGlzLmNvbHVtbnMuZmlsdGVyKHMgPT4gcy5pc0VkaXRhYmxlSW5EYXRhSXRlbSA9PT0gdHJ1ZSk7XHJcbiAgICAgIHRoaXMuZWRpdGFibGVDb2x1bW5zLm1hcChzID0+XHJcbiAgICAgICAgT2JqZWN0LmFzc2lnbihkYXRhSXRlbSwgeyBbcy5maWVsZF06IGZvcm1Hcm91cC52YWx1ZVtzLmZpZWxkXSB9KSk7XHJcbiAgICAgIHRoaXMubXlTZWxlY3Rpb24ubWFwKHMgPT4gKHMuSWQgPT09IGRhdGFJdGVtLklkKSA/IE9iamVjdC5hc3NpZ24ocywgZGF0YUl0ZW0pIDogbnVsbCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgcHVibGljIG9uTmF2aWdhdGVUbyhldmVudDogYW55LCBjbGlja0FjdGlvbjogYW55LCByb3dEYXRhOiBhbnksIGNlbGxEYXRhOiBzdHJpbmcpIHtcclxuICAgIC8vIGNvbnN0IG4gPSBjb2xTZXR0aW5nLm5hdmlnYXRlVG8ucmVwbGFjZSgnLzppZCcsIGNlbGxEYXRhKTtcclxuICAgIGNvbnN0IG4gPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwRXZhbFZhbHVlLmNhbGwodGhpcywgY2xpY2tBY3Rpb24uQ2xpY2spO1xyXG4gICAgaWYgKG4pIHtcclxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgIHRoaXMuZ3JvdXAuc3ViamVjdC5uZXh0KHtcclxuICAgICAgICB0eXBlOiAnemdyaWQtb25OYXZpZ2F0ZVRvJyxcclxuICAgICAgICB0YXJnZXQ6IGNsaWNrQWN0aW9uLkNsaWNrLFxyXG4gICAgICAgIHJvd0RhdGE6IHJvd0RhdGEsXHJcbiAgICAgICAgZGF0YTogY2VsbERhdGFcclxuICAgICAgfSBhcyBaQ29tcG9uZW50T3V0cHV0RXZlbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHNob3dUb29sdGlwKGU6IE1vdXNlRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmRhdGEuSXNTaG93VG9vbFRpcCA9PT0gZmFsc2UpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZWxlbWVudCA9IGUudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xyXG5cclxuICAgIGxldCBpc0NvbW1hbmRDb2x1bW4gPSBmYWxzZTtcclxuICAgIGVsZW1lbnQuY2xhc3NMaXN0LmZvckVhY2goZGF0YSA9PiB7XHJcbiAgICAgIGlmIChkYXRhID09ICdrLWNvbW1hbmQtY2VsbCcpIHtcclxuICAgICAgICBpc0NvbW1hbmRDb2x1bW4gPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAoKChlbGVtZW50Lm5vZGVOYW1lID09PSAnVEQnIHx8IGVsZW1lbnQubm9kZU5hbWUgPT09ICdUSCcpICYmIGVsZW1lbnQub2Zmc2V0V2lkdGggPCBlbGVtZW50LnNjcm9sbFdpZHRoKSAmJiAhaXNDb21tYW5kQ29sdW1uKSB7XHJcbiAgICAgIHRoaXMudG9vbHRpcERpci50b2dnbGUoZWxlbWVudCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy50b29sdGlwRGlyLmhpZGUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyByb3dTZWxlY3Rpb25LZXkoY29udGV4dDogUm93QXJncyk6IGFueSB7XHJcbiAgICByZXR1cm4gY29udGV4dC5kYXRhSXRlbTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRTZWxlY3RlZFZhbHVlcygpOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMubXlTZWxlY3Rpb247XHJcbiAgfVxyXG5cclxuXHJcbiAgcHVibGljIHJlZnJlc2hHcmlkKGV2ZW50OiBaQ29tcG9uZW50T3V0cHV0RXZlbnQsIGdyb3VwOiBaR3JvdXAsIG1lOiBhbnkpIHtcclxuICAgIGNvbnN0IF9ncmlkT3B0aW9uU2VnbWVudCA9IGV2ZW50LnRhcmdldC50cmltKCkuc3BsaXQoJy4nKTtcclxuICAgIGNvbnN0IF9ncmlkT3B0aW9uID0gX2dyaWRPcHRpb25TZWdtZW50WzFdO1xyXG4gICAgaWYgKF9ncmlkT3B0aW9uKSB7XHJcbiAgICAgIGNvbnN0IHpncmlkQ29udHJvbCA9IGdyb3VwW19ncmlkT3B0aW9uXSBhcyBaR3JpZDtcclxuICAgICAgaWYgKHpncmlkQ29udHJvbCkge1xyXG4gICAgICAgIHpncmlkQ29udHJvbC5nZXREYXRhKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ1VuYWJsZSB0byBmaW5kIGdyaWQgdmFsdWU6ICcgKyBfZ3JpZE9wdGlvbik7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdJbnZhbGlkIHJlZnJlc2hHcmlkIGV2ZW50OiAnLCBldmVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVmcmVzaERhdGEoKSB7XHJcbiAgICB0aGlzLmdldERhdGEoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjbGVhckRhdGEoKSB7XHJcbiAgICB0aGlzLnpncmlkLmNsZWFyRGF0YSgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNlbGxTdHlsZUNvbmRpdGlvbihjb2wsIGNvbFZhbHVlOiBhbnkpIHtcclxuICAgIGlmIChjb2xbJ0NlbGxTdHlsZUNvbmRpdGlvbiddKSB7XHJcbiAgICAgIGNvbnN0IGNvbmRpdGlvbkhpZ2hsaWdodGNvbDogW10gPSBjb2xbJ0NlbGxTdHlsZUNvbmRpdGlvbiddO1xyXG4gICAgICBsZXQgY29uZGl0aW9uUmVzdWx0ID0gZmFsc2U7XHJcblxyXG4gICAgICBjb25kaXRpb25IaWdobGlnaHRjb2wuZm9yRWFjaChkYXRhID0+IHtcclxuICAgICAgICBpZiAoIWNvbmRpdGlvblJlc3VsdCkge1xyXG4gICAgICAgICAgaWYgKGRhdGFbJ1ZhbHVlJ10gPT0gY29sVmFsdWUpIHtcclxuICAgICAgICAgICAgY29uZGl0aW9uUmVzdWx0ID0gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgcmV0dXJuIGNvbmRpdGlvblJlc3VsdDtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRDZWxsU3R5bGVDb25kaXRpb24oY29sLCBjb2xWYWx1ZTogYW55KSB7XHJcbiAgICBpZiAoY29sWydDZWxsU3R5bGVDb25kaXRpb24nXSkge1xyXG4gICAgICBjb25zdCBjb25kaXRpb25IaWdobGlnaHRjb2w6IFtdID0gY29sWydDZWxsU3R5bGVDb25kaXRpb24nXTtcclxuICAgICAgbGV0IGNvbmRpdGlvblJlc3VsdCA9ICcnO1xyXG5cclxuICAgICAgY29uZGl0aW9uSGlnaGxpZ2h0Y29sLmZvckVhY2goZGF0YSA9PiB7XHJcbiAgICAgICAgaWYgKGRhdGFbJ1ZhbHVlJ10gPT0gY29sVmFsdWUpIHtcclxuICAgICAgICAgIGlmIChkYXRhWydCYWNrZ3JvdW5kQ29sb3InXSkge1xyXG4gICAgICAgICAgICBjb25kaXRpb25SZXN1bHQgPSAnYmFja2dyb3VuZC1jb2xvcjonICsgZGF0YVsnQmFja2dyb3VuZENvbG9yJ10gKyAnOyc7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKGRhdGFbJ0NvbG9yJ10pIHtcclxuICAgICAgICAgICAgY29uZGl0aW9uUmVzdWx0ICs9ICdjb2xvcjonICsgZGF0YVsnQ29sb3InXSArICc7JztcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAoZGF0YVsnU3R5bGVFeHByZXNzaW9uJ10pIHtcclxuICAgICAgICAgICAgY29uZGl0aW9uUmVzdWx0ICs9IGRhdGFbJ1N0eWxlRXhwcmVzc2lvbiddO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICByZXR1cm4gY29uZGl0aW9uUmVzdWx0O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcblxyXG4gIHB1YmxpYyBhbGxSZXN1bHRzKCk6IE9ic2VydmFibGU8RXhjZWxFeHBvcnREYXRhPiB7XHJcbiAgICBjb25zdCBfemdyaWRDb250cm9sID0gdGhpcy56Z3JpZCBhcyBaR3JpZDtcclxuICAgIGNvbnN0IF96Z3JpZENvbXBvbmVudCA9IHRoaXMuemdyaWQuZ3JpZCBhcyBHcmlkQ29tcG9uZW50O1xyXG4gICAgY29uc3QgX2RhdGEgPSBfemdyaWRDb21wb25lbnQuZGF0YSBhcyBHcmlkRGF0YVJlc3VsdDtcclxuXHJcbiAgICBjb25zdCBwYWdpbmF0aW9uQXBpUG9zdFVybCA9IF96Z3JpZENvbnRyb2wucGFnaW5hdGlvbkFwaVBvc3RVcmw7XHJcblxyXG4gICAgLy8gTmVlZCB0byBjbG9uZSwgaWYgbm90IHdpbGwgYWZmZWN0IHRoZSBncmlkIHBhcmFtcy5cclxuICAgIGNvbnN0IHBhcmFtcyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMucGFyYW1zKTtcclxuICAgIHBhcmFtcy5wYWdlTm8gPSAwO1xyXG4gICAgcGFyYW1zLnBhZ2VTaXplID0gX2RhdGEudG90YWw7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMud2ViQXBpU2VydmljZS5odHRwUG9zdCQocGFnaW5hdGlvbkFwaVBvc3RVcmwsIHBhcmFtcykucGlwZShcclxuICAgICAgbWFwKChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zdCByZXN1bHQ6IEV4Y2VsRXhwb3J0RGF0YSA9IHtcclxuICAgICAgICAgIGRhdGE6IHByb2Nlc3MoZGF0YS5kYXRhU2V0LCB7fSkuZGF0YVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldENsYXNzKGRhdGFJdGVtOiBhbnksIGNvbDogYW55KSB7XHJcbiAgICBsZXQgbmdDbGFzcyA9IFwiZ3JpZENlbGwgXCI7XHJcbiAgICBpZiAoY29sLmZpZWxkVHlwZSA9PT0gJ251bWJlcicgfHwgY29sLmZpZWxkVHlwZSA9PT0gJ2N1cnJlbmN5JyB8fCBjb2wuZmllbGRUeXBlID09PSAnem51bWVyaWMnKSB7XHJcbiAgICAgIG5nQ2xhc3MgKz0gXCJyaWdodEFsaWduZWQgXCI7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGRhdGFJdGVtW2NvbC5maWVsZCArICdfQ2xhc3MnXSkge1xyXG4gICAgICBuZ0NsYXNzICs9IGRhdGFJdGVtW2NvbC5maWVsZCArICdfQ2xhc3MnXSArIFwiIFwiO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjb2wuQ2xhc3MpIHtcclxuICAgICAgbmdDbGFzcyArPSBjb2wuQ2xhc3MgKyBcIiBcIjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY29sLlBvcE92ZXJDb250ZW50KSB7XHJcbiAgICAgIG5nQ2xhc3MgKz0gXCIgd2l0aFBvcG92ZXJJbkdyaWRcIjtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbmdDbGFzcztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRGb3JtYXQoY29sOiBhbnksIGRlZmF1bHRGb3JtYXQ/OiBhbnkpIHtcclxuICAgIGxldCBmb3JtYXQgPSBcIlwiO1xyXG4gICAgaWYgKGNvbC5Gb3JtYXRPcHRpb25zID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgZm9ybWF0ID0gZGVmYXVsdEZvcm1hdCA/IGRlZmF1bHRGb3JtYXQgOiBcIlwiO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgZm9ybWF0QXJyID0gY29sLkZvcm1hdE9wdGlvbnMuc3BsaXQoXCIuXCIpXHJcbiAgICAgIGxldCBkcCA9IDA7XHJcblxyXG4gICAgICBpZiAoZm9ybWF0QXJyLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICBkcCA9IGZvcm1hdEFyclsxXS5sZW5ndGg7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChkcCAhPT0gMCkge1xyXG4gICAgICAgIGZvcm1hdCA9IFwiMS5cIiArIGRwICsgXCItXCIgKyBkcDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZvcm1hdDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRIZWFkZXJUZXh0KGNvbHVtbk5hbWU6IHN0cmluZywgbmV3SGVhZGVyVGl0bGU6IHN0cmluZykge1xyXG4gICAgY29uc3QgZ3JpZENvbHVtbnMgPSB0aGlzLmNvbHVtbnM7XHJcbiAgICBncmlkQ29sdW1ucy5mb3JFYWNoKChjb2w6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoY29sLk5hbWUgPT09IGNvbHVtbk5hbWUpIHtcclxuICAgICAgICBjb2wudGl0bGUgPSBuZXdIZWFkZXJUaXRsZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0R3JpZFNlc3Npb25LZXkoZ3JvdXA6IFpHcm91cCkge1xyXG4gICAgaWYgKGdyb3VwW1wiR3JpZFN0b3JhZ2VLZXlcIl0pIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGdyb3VwW1wiR3JpZFN0b3JhZ2VLZXlcIl0gPSAnemdyaWRfJyArIGdyb3VwLnJlc291cmNlVVJMICsgJ18nICsgdGhpcy5kYXRhLlZhbHVlICsgJzo6JyArIHRoaXMuYXV0aFNlcnZpY2UuZTFUb2tlbi51c2VyTmFtZTtcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdHJhY2tCeShpbmRleDogbnVtYmVyLCBpdGVtOiBHcmlkSXRlbSk6IGFueSB7XHJcbiAgICAvL2NvbnNvbGUubG9nKGl0ZW0uZGF0YVsnSWQnXSB8fCBpbmRleCk7XHJcbiAgICByZXR1cm4gaW5kZXg7XHJcbiAgfVxyXG5cclxuICAvKiBHcmlkIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb24gKi9cclxuICBwdWJsaWMgc2F2ZUdyaWRTZXR0aW5ncygpOiB2b2lkIHtcclxuICAgIGNvbnN0IF96Z3JpZENvbXBvbmVudCA9IHRoaXMuemdyaWQuZ3JpZCBhcyBHcmlkQ29tcG9uZW50O1xyXG4gICAgY29uc3QgX2NvbHVtbnMgPSBfemdyaWRDb21wb25lbnQuY29sdW1ucztcclxuXHJcbiAgICBvZih0aGlzLmNvbHVtbnMpXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBjb25maWdWYWx1ZTogWkdyaWRDb2x1bW5TZXR0aW5nc1tdID0gX2NvbHVtbnMudG9BcnJheSgpLm1hcChpdGVtID0+IHtcclxuICAgICAgICAgICAgY29uc3QgX3pHcmlkQ29sdW1uU2V0dGluZ3M6IFpHcmlkQ29sdW1uU2V0dGluZ3MgPSBPYmplY3Qua2V5cyhpdGVtKVxyXG4gICAgICAgICAgICAgIC5maWx0ZXIocHJvcE5hbWUgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICFwcm9wTmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCd0ZW1wbGF0ZScpXHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAucmVkdWNlKChhY2MsIGN1cnIpID0+IChcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgLi4uYWNjLFxyXG4gICAgICAgICAgICAgICAgICAuLi57IFtjdXJyXTogaXRlbVtjdXJyXSB9XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgLCB7fSBhcyBaR3JpZENvbHVtblNldHRpbmdzKTtcclxuICAgICAgICAgICAgcmV0dXJuIF96R3JpZENvbHVtblNldHRpbmdzO1xyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgLy8gcmVtb3ZlIGV4dHJhIGVsZW1lbnQgZm9ybSBhcnJheVxyXG4gICAgICAgICAgY29uZmlnVmFsdWUuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAgICAgZGVsZXRlIGl0ZW1bJ2hlYWRlclN0eWxlJ107XHJcbiAgICAgICAgICAgIGRlbGV0ZSBpdGVtWydfX25nQ29udGV4dF9fJ107XHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICBjb25zdCBncmlkU2V0dGluZzogWkdyaWRTZXR0aW5ncyA9IHtcclxuICAgICAgICAgICAgLy8gc3RhdGU6IHRoaXMuc3RhdGUsXHJcbiAgICAgICAgICAgIGNvbHVtbnNDb25maWc6IGNvbmZpZ1ZhbHVlXHJcbiAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgIC8vIEZpbmQgYW55IHNldHRpbmcgZnJvbSBsb2NhbHN0b3JhZ2UgYW5kIHVwZGF0ZSwgaWYgbm90IGp1c3QgYWRkIGluLlxyXG4gICAgICAgICAgbGV0IF9hcnJHcmlkQ2FjaGluZzogR3JpZENhY2hpbmdbXSA9IHRoaXMuekdyaWRTdGF0ZVBlcnNpc3RpbmdTZXJ2aWNlLmdldCh0aGlzLmdyaWRTdG9yYWdlS2V5KTtcclxuICAgICAgICAgIGxldCBfZ3JpZENvbmZpZzogR3JpZENhY2hpbmcgPSBudWxsO1xyXG4gICAgICAgICAgaWYgKF9hcnJHcmlkQ2FjaGluZyAmJiBfYXJyR3JpZENhY2hpbmdbMF0pIHtcclxuICAgICAgICAgICAgX2dyaWRDb25maWcgPSBfYXJyR3JpZENhY2hpbmcuZmluZCh4ID0+IHhbJ2RhdGFGb3JtRmllbGRzJ10gPT09IHRoaXMuZ3JpZFN0b3JhZ2VLZXkpO1xyXG5cclxuICAgICAgICAgICAgaWYgKF9ncmlkQ29uZmlnKSB7XHJcbiAgICAgICAgICAgICAgX2dyaWRDb25maWcuZ3JpZFNldHRpbmdzID0gZ3JpZFNldHRpbmc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBfYXJyR3JpZENhY2hpbmcgPSBbXTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAoIV9ncmlkQ29uZmlnKSB7XHJcbiAgICAgICAgICAgIF9ncmlkQ29uZmlnID0ge1xyXG4gICAgICAgICAgICAgIGRhdGFGb3JtRmllbGRzOiB0aGlzLmdyaWRTdG9yYWdlS2V5LFxyXG4gICAgICAgICAgICAgIGdyaWRTZXR0aW5nczogZ3JpZFNldHRpbmdcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIF9hcnJHcmlkQ2FjaGluZy5wdXNoKF9ncmlkQ29uZmlnKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiBfYXJyR3JpZENhY2hpbmc7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY29uY2F0TWFwKGdyaWRDYWNoZSA9PiB7XHJcbiAgICAgICAgICAvLyBTYXZlIGdyaWQgY2FjaGluZyB0byBsb2NhbHN0b3JhZ2VcclxuICAgICAgICAgIHRoaXMuekdyaWRTdGF0ZVBlcnNpc3RpbmdTZXJ2aWNlLnNldCh0aGlzLmdyaWRTdG9yYWdlS2V5LCBncmlkQ2FjaGUpO1xyXG4gICAgICAgICAgLy8gU2F2ZSB0byBDb29raWVTdG9yZVxyXG4gICAgICAgICAgcmV0dXJuIHRoaXMubWFpblNlcnZpY2UuY29va2llU3RvcmVQb3N0KHRoaXMuZ3JpZFN0b3JhZ2VLZXksIGdyaWRDYWNoZSk7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgdGFwKHNhdmVkR3JpZENhY2hlID0+IHtcclxuICAgICAgICAgIC8vIGNoZWNrIGlzIHNhdmVkIHN0YXRlIGV4aXN0IHRvIGVuYWJsZS9oaWRlIHJlc3RvcmUgYnV0dG9uXHJcbiAgICAgICAgICB0aGlzLnN0YXRlRXhpc3QoKTtcclxuICAgICAgICB9KSxcclxuICAgICAgICB0YXAoKCkgPT4ge1xyXG4gICAgICAgICAgLy8gQWxlcnRcclxuICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLnNob3coJ0dyaWQgU2V0dGluZyBTYXZlZCcsIFwidG9wXCIsIHRydWUsIDIwMDAsICdzdWNjZXNzJyk7XHJcbiAgICAgICAgfSlcclxuICAgICAgKS5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZXN0b3JlR3JpZFNldHRpbmdzKCkge1xyXG4gICAgb2YodHJ1ZSlcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHtcclxuICAgICAgICAgIC8vIENsZWFyIGxvY2Fsc3RvcmFnZSBncmlkIHNldHRpbmdcclxuICAgICAgICAgIHRoaXMuekdyaWRTdGF0ZVBlcnNpc3RpbmdTZXJ2aWNlLnJlbW92ZSh0aGlzLmdyaWRTdG9yYWdlS2V5KTtcclxuICAgICAgICAgIHJldHVybiBvZih0cnVlKVxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XHJcbiAgICAgICAgICAvLyBkZWxldGUgY29va2llc3RvcmUgZ3JpZFNldHRpbmcgYnkgc3RvcmFnZWtleSBhcyBuYW1lXHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5tYWluU2VydmljZS5jb29raWVTdG9yZURlbGV0ZU11bHRpcGxlKHRoaXMuZ3JpZFN0b3JhZ2VLZXkpO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNvbmNhdE1hcCgoKSA9PiB7XHJcbiAgICAgICAgICAvLyBVc2Ugb3JpZ2luYWwgY29sdW1uIHNldHRpbmdcclxuICAgICAgICAgIHJldHVybiB0aGlzLmdlbmVyYXRlR3JpZENvbHVtbnMoKTtcclxuICAgICAgICB9KSxcclxuICAgICAgICB0YXAoKCkgPT4ge1xyXG4gICAgICAgICAgLy8gY2hlY2sgaXMgc2F2ZWQgc3RhdGUgZXhpc3RcclxuICAgICAgICAgIHRoaXMuc3RhdGVFeGlzdCgpO1xyXG4gICAgICAgICAgLy8gQWxlcnRcclxuICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLnNob3coJ0dyaWQgU2V0dGluZyBSZXN0b3JlZCcsIFwidG9wXCIsIHRydWUsIDIwMDAsICdzdWNjZXNzJyk7XHJcbiAgICAgICAgfSlcclxuICAgICAgKS5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0R3JpZFNldHRpbmdzKCk6IFpHcmlkQ29sdW1uU2V0dGluZ3NbXSB7XHJcbiAgICBpZiAodGhpcy5kYXRhLkFsbG93U2F2ZVN0YXRlKSB7XHJcbiAgICAgIGNvbnN0IF9zdG9yYWdlS2V5ID0gJ2lvbmljLWZpZWxkOjonICsgdGhpcy5hdXRoU2VydmljZS5lMVRva2VuLnVzZXJOYW1lICsgJzo6JyArIHRoaXMuZGF0YS5OYW1lICsgJzo6JyArIHRoaXMucm91dGVyLnVybDtcclxuXHJcbiAgICAgIC8vIEZpbmQgYW55IHNldHRpbmcgZnJvbSBsb2NhbHN0b3JhZ2UuLlxyXG4gICAgICBsZXQgX2FyckdyaWRDYWNoaW5nOiBHcmlkQ2FjaGluZ1tdID0gdGhpcy56R3JpZFN0YXRlUGVyc2lzdGluZ1NlcnZpY2UuZ2V0KF9zdG9yYWdlS2V5KTtcclxuICAgICAgaWYgKF9hcnJHcmlkQ2FjaGluZykge1xyXG4gICAgICAgIGNvbnN0IF9ncmlkQ2FjaGluZzogR3JpZENhY2hpbmcgPSBKU09OLnBhcnNlKF9hcnJHcmlkQ2FjaGluZ1snVmFsdWUnXSk7XHJcbiAgICAgICAgaWYgKF9ncmlkQ2FjaGluZykge1xyXG4gICAgICAgICAgcmV0dXJuIF9ncmlkQ2FjaGluZy5ncmlkU2V0dGluZ3MuY29sdW1uc0NvbmZpZy5zb3J0KChhLCBiKSA9PiBhLm9yZGVySW5kZXggLSBiLm9yZGVySW5kZXgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8jcmVnaW9uIElubGluZSBFZGl0XHJcbiAgcHJpdmF0ZSBjcmVhdGVGb3JtQ29udHJvbHMoKSB7XHJcbiAgICBsZXQgY291bnRlckluZGV4ID0gMDtcclxuICAgIGlmICh0aGlzLmNvbHVtbnMpIHtcclxuICAgICAgLy8gb25seSBjcmVhdGUgaWYgdGhlcmUgaXMgYXQgbGVhc3QgMSBlZGl0YWJsZSBjb2x1bW5cclxuICAgICAgaWYgKHRoaXMuY29sdW1ucy5maW5kKGMgPT4gYy5pc0VkaXRhYmxlSW5HcmlkKSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmlubGluZUVkaXRlZEZvcm1Hcm91cHMgPSB0aGlzLmlubGluZUVkaXRlZEZvcm1Hcm91cHMgfHwge307XHJcblxyXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmdyaWREYXRhLmRhdGEpKSB7XHJcbiAgICAgICAgdGhpcy5ncmlkRGF0YS5kYXRhLmZvckVhY2goZCA9PiB7XHJcbiAgICAgICAgICBjb25zdCBpdGVtcyA9IHt9O1xyXG4gICAgICAgICAgdGhpcy5jb2x1bW5zLmZvckVhY2goYyA9PiB7XHJcbiAgICAgICAgICAgIGl0ZW1zW2MuZmllbGRdID0gbmV3IEZvcm1Db250cm9sKGRbYy5maWVsZF0pO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBjb25zdCBmb3JtR3JvdXAgPSBuZXcgRm9ybUdyb3VwKGl0ZW1zKTtcclxuXHJcbiAgICAgICAgICBpZiAoZFtcIklkXCJdKSB7XHJcbiAgICAgICAgICAgIGl0ZW1zW1wiSWRcIl0gPSBuZXcgRm9ybUNvbnRyb2woeyB2YWx1ZTogZFtcIklkXCJdLCBkaXNhYmxlZDogZmFsc2UgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgZFtcIklkXCJdID0gY291bnRlckluZGV4Kys7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmlubGluZUVkaXRlZEZvcm1Hcm91cHNbZFtcIklkXCJdXSA9IGZvcm1Hcm91cDtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldElubGluZUZpZWxkKHZhbHVlOiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLmNvbHVtbnMuZmluZCh4ID0+IHguVmFsdWUgPT09IHZhbHVlKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRJbmxpbmVGb3JtKGRhdGE6IGFueSwgcm93SW5kZXg6IG51bWJlcikge1xyXG4gICAgcmV0dXJuIHRoaXMuaW5saW5lRWRpdGVkRm9ybUdyb3Vwc1tkYXRhW1wiSWRcIl0gfHwgcm93SW5kZXhdO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEZvcm1Db250cm9sRGF0YSh2YWx1ZTogYW55KSB7XHJcbiAgICBjb25zdCBkYXRhID0gW107XHJcbiAgICBmb3IgKGNvbnN0IGsgb2YgT2JqZWN0LmtleXModGhpcy5pbmxpbmVFZGl0ZWRGb3JtR3JvdXBzKSkge1xyXG4gICAgICBkYXRhLnB1c2godGhpcy5pbmxpbmVFZGl0ZWRGb3JtR3JvdXBzW2tdPy52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZGF0YTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8qIEV2ZW50ICovXHJcbiAgcHVibGljIGJlZm9yZUdyaWRHZXREYXRhKGdyb3VwOiBaR3JvdXAsIG1lOiBhbnkpIHtcclxuICAgIGNvbnNvbGUud2FybihcImJlZm9yZURhdGFCaW5kaW5nIHRyaWdnZXJlZFwiKTtcclxuICAgIGlmICghZ3JvdXAuYmVmb3JlR3JpZEdldERhdGEpIHtcclxuICAgICAgY29uc29sZS53YXJuKFwiZ3JvdXAuYmVmb3JlRGF0YUJpbmRpbmcgaXMgdW5kZWZpbmVkXCIpO1xyXG4gICAgICByZXR1cm4gb2YodHJ1ZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZ3JvdXAuYmVmb3JlR3JpZEdldERhdGEoZ3JvdXAsIG1lKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRHcmlkU2Vzc2lvbkZpbHRlcihncm91cDogWkdyb3VwLCBtZTogYW55KSB7XHJcbiAgICBpZiAoIWdyb3VwW1wiR3JpZFN0b3JhZ2VLZXlcIl0pIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBjb25zdCBTdG9yYWdlS2V5ID0gZ3JvdXBbXCJHcmlkU3RvcmFnZUtleVwiXTtcclxuXHJcbiAgICBpZiAodGhpcy5zdG9yYWdlU2VydmljZSkge1xyXG4gICAgICBhd2FpdCB0aGlzLnN0b3JhZ2VTZXJ2aWNlLmdldChTdG9yYWdlS2V5KVxyXG4gICAgICAgIC50aGVuKGRhdGEgPT4ge1xyXG4gICAgICAgICAgaWYgKCFkYXRhIHx8ICFkYXRhLnZhbHVlIHx8IGRhdGEudmFsdWUgPT09IFwibnVsbFwiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IEpTT04ucGFyc2UoZGF0YS52YWx1ZSk7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhdGUuZmlsdGVyID0gSlNPTi5wYXJzZShyZXN1bHRbXCJTdGF0ZUZpbHRlclwiXSk7XHJcbiAgICAgICAgICAgIHRoaXMucGFyYW1zLmZpbHRlclBhcmFtcyA9IEpTT04ucGFyc2UocmVzdWx0W1wiRmlsdGVyUGFyYW1zXCJdKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdGUuZmlsdGVyLmZpbHRlcnMuZm9yRWFjaCgoc3RhdGVGaWx0ZXI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChzdGF0ZUZpbHRlci5maWVsZC5pbmNsdWRlcygnVVRDJykpIHtcclxuICAgICAgICAgICAgICAgIHN0YXRlRmlsdGVyLnZhbHVlID0gbmV3IERhdGUoc3RhdGVGaWx0ZXIudmFsdWUpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gZGF0YTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRHcmlkU2Vzc2lvbkZpbHRlcihncm91cDogWkdyb3VwLCBtZTogYW55KSB7XHJcbiAgICBpZiAoIWdyb3VwW1wiR3JpZFN0b3JhZ2VLZXlcIl0pIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBjb25zdCBTdG9yYWdlS2V5ID0gZ3JvdXBbXCJHcmlkU3RvcmFnZUtleVwiXTtcclxuXHJcbiAgICBsZXQgbHN0R3JpZEZpbHRlcjogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xyXG5cclxuICAgIGlmIChtZS5zdGF0ZS5maWx0ZXIgJiYgdGhpcy5zdG9yYWdlU2VydmljZSAmJiB0aGlzLmRhdGFbJ1NhdmVGaWx0ZXInXSkge1xyXG4gICAgICAvL2xpc3Qgb2YgZGF0YSBmb3IgU3RhdGVGaWx0ZXIgYW5kIEZpbHRlclBhcmFtc1xyXG4gICAgICBsc3RHcmlkRmlsdGVyID0geyBcIlN0YXRlRmlsdGVyXCI6IEpTT04uc3RyaW5naWZ5KG1lLnN0YXRlLmZpbHRlciksIFwiRmlsdGVyUGFyYW1zXCI6IEpTT04uc3RyaW5naWZ5KG1lLnBhcmFtcy5maWx0ZXJQYXJhbXMpIH1cclxuICAgICAgLy9jcmVhdGUgc2Vzc2lvbiBzdG9yYWdlXHJcbiAgICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0KFN0b3JhZ2VLZXksIEpTT04uc3RyaW5naWZ5KGxzdEdyaWRGaWx0ZXIpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIFNvdXJjZTogaHR0cHM6Ly93d3cudGVsZXJpay5jb20vZm9ydW1zL2tlbmRvLWFuZ3VsYXItZ3JpZC1ibGFuay1zcGFjZS1pbi10aGUtZW5kLXdoZW4teW91LXJlc2l6ZShyZWR1Y2UpLWFueS1jb2x1bW5cclxuICBwdWJsaWMgYWRqdXN0V2lkdGhVcG9uUmVzaXplKCkge1xyXG4gICAgY29uc3QgdGFibGVXaWR0aCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuay1ncmlkLXRhYmxlXCIpW2BvZmZzZXRXaWR0aGBdO1xyXG4gICAgY29uc3QgY29udGVudFdpZHRoID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5rLWdyaWQtY29udGVudFwiKVtgb2Zmc2V0V2lkdGhgXTtcclxuICAgIGlmICh0YWJsZVdpZHRoIDwgY29udGVudFdpZHRoKSB7XHJcbiAgICAgIGNvbnN0IGN1cnJlbnRMYXN0Q29sV2lkdGggPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmstZ3JpZC1jb250ZW50IC5rLWdyaWQtdGFibGUgdHIgdGQ6bGFzdC1vZi10eXBlXCIpW2BvZmZzZXRXaWR0aGBdO1xyXG5cclxuICAgICAgdGhpcy5jb2x1bW5zW3RoaXMuY29sdW1ucy5sZW5ndGggLSAxXS53aWR0aCA9IGN1cnJlbnRMYXN0Q29sV2lkdGggKyAoY29udGVudFdpZHRoIC0gdGFibGVXaWR0aCkgLSAxMDsgLy8gYWNjb3VudCBmb3IgdGhlIHZlcnRpY2FsIHNjcm9sbGJhcjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qIG9uY2hhbmdlIEV2ZW50cyAqL1xyXG4gIHB1YmxpYyBmaWx0ZXJDaGFuZ2UoZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuemdyaWQpIHtcclxuICAgICAgdGhpcy56Z3JpZC5maWx0ZXJDaGFuZ2UoZXZlbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHBhZ2VDaGFuZ2UoZXZlbnQ6IFBhZ2VDaGFuZ2VFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuemdyaWQpIHtcclxuICAgICAgdGhpcy56Z3JpZC5wYWdlQ2hhbmdlKGV2ZW50KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBzb3J0Q2hhbmdlKHNvcnQ6IFNvcnREZXNjcmlwdG9yW10pOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnpncmlkKSB7XHJcbiAgICAgIHRoaXMuemdyaWQuc29ydENoYW5nZShzb3J0KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBpbkNlbGxDaGVja0JveE9uQ2hhbmdlKGV2ZW50OiBhbnksIHJvd0luZGV4OiBhbnksIGNvbHVtbjogYW55KSB7XHJcbiAgICBjb25zdCBpc0NoZWNrZWQgPSBldmVudC5kZXRhaWwuY2hlY2tlZDtcclxuICAgIHRoaXMuZ0RhdGFbcm93SW5kZXhdW2NvbHVtbi5WYWx1ZV0gPSBpc0NoZWNrZWQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY29sdW1uc09yZGVyQ2hhbmdlZChldmVudDogQ29sdW1uUmVvcmRlckV2ZW50KTogdm9pZCB7XHJcbiAgICBjb25zdCBfemdyaWRDb250cm9sID0gdGhpcy56Z3JpZCBhcyBaR3JpZDtcclxuICAgIGNvbnN0IF96Z3JpZENvbXBvbmVudCA9IHRoaXMuemdyaWQuZ3JpZCBhcyBHcmlkQ29tcG9uZW50O1xyXG4gICAgY29uc3QgX2RhdGEgPSBfemdyaWRDb21wb25lbnQuZGF0YSBhcyBHcmlkRGF0YVJlc3VsdDtcclxuXHJcbiAgICBpZiAodGhpcy56Z3JpZCkge1xyXG4gICAgICBjb25zdCBfemdyaWQgPSB0aGlzLnpncmlkO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXR1cEdyaWRCdXR0b25zKCkge1xyXG4gICAgaWYgKHRoaXMuZGF0YS5HcmlkQnV0dG9uRmllbGROYW1lX1dGIHx8IHRoaXMuZGF0YS5HcmlkQnV0dG9uRmllbGROYW1lKSB7XHJcbiAgICAgIHRoaXMuZ3JpZEJ0biA9IHtcclxuICAgICAgICBSZWFkT25seTogZmFsc2UsXHJcbiAgICAgICAgVmlzaWJsZTogdHJ1ZSxcclxuICAgICAgICBJc1JlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgICBXb3JrZmxvd0NvZGU6IHRoaXMuZGF0YS5HcmlkQnV0dG9uRmllbGROYW1lX1dGLFxyXG4gICAgICAgIFZhbHVlOiB0aGlzLmRhdGEuR3JpZEJ1dHRvbkZpZWxkTmFtZSxcclxuICAgICAgICBUeXBlOiB0aGlzLmRhdGEuR3JpZEJ1dHRvbkZpZWxkTmFtZV9XRiA/IFwiendvcmtmbG93YnV0dG9uc1wiIDogXCJ6YnV0dG9uc1wiXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qIGdyaWQgY29tbWFuZCBoYW5kbGVyICovXHJcbiAgcHVibGljIGFkZEhhbmRsZXIoeyBzZW5kZXIgfSkge1xyXG4gICAgdGhpcy5pc05ldyA9IHRydWU7XHJcblxyXG4gICAgLy8gY2xvc2UgYW55IGV4aXN0aW5nIGVkaXRvclxyXG4gICAgdGhpcy5jbG9zZUVkaXRvcihzZW5kZXIpO1xyXG5cclxuICAgIC8vIGxvb3AgYWxsIGNvbHVtbiB0byBnZXQgdmFsaWRhdGlvbiBhbmQgY3JlYXRlIGZvcm0gY29udHJvbFxyXG4gICAgY29uc3QgY29sRm9ybUNvbnRyb2wgPSB7fTtcclxuICAgIHRoaXMuemdyaWQuZ3JpZENvbHVtbnMuZm9yRWFjaChjb2wgPT4ge1xyXG4gICAgICBjb25zdCB2YWxpZGF0b3JzOiBWYWxpZGF0b3JGbltdID0gW107XHJcbiAgICAgIGlmIChjb2wuSXNSZXF1aXJlZCkge1xyXG4gICAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29sLlZhbGlkYXRvclBhdHRlcm4pIHtcclxuICAgICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5wYXR0ZXJuKGNvbC5WYWxpZGF0b3JQYXR0ZXJuKSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbEZvcm1Db250cm9sW2NvbC5WYWx1ZV0gPSBuZXcgRm9ybUNvbnRyb2wobnVsbCwgdmFsaWRhdG9ycyk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBzZXQgZm9ybSBjb250cm9sIG9iamVjdCB0byBmb3JtIGdyb3VwXHJcbiAgICB0aGlzLmZvcm1Hcm91cCA9IG5ldyBGb3JtR3JvdXAoY29sRm9ybUNvbnRyb2wpO1xyXG5cclxuICAgIC8vIGFkZCB0byBncmlkIHJvd1xyXG4gICAgc2VuZGVyLmFkZFJvdyh0aGlzLmZvcm1Hcm91cCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2F2ZUhhbmRsZXIoeyBzZW5kZXIsIHJvd0luZGV4LCBmb3JtR3JvdXAsIGlzTmV3IH0pOiB2b2lkIHtcclxuICAgIC8vIGdldCBncmlkIGRhdGEuXHJcbiAgICBjb25zdCBncmlkRXhpc3RpbmdEYXRhID0gdGhpcy5nRGF0YSA/IHRoaXMuZ0RhdGEgOiB0aGlzLmdyaWREYXRhID8gdGhpcy5ncmlkRGF0YS5kYXRhIDogW107XHJcblxyXG4gICAgLy8gaWYgdmFsaWRcclxuICAgIGlmIChmb3JtR3JvdXAudmFsaWQpIHtcclxuICAgICAgLy8gY2hlY2sgZm9yIGR1cGxpY2F0ZSBVbmlxdWVLZXlcclxuICAgICAgbGV0IHVuaXF1ZUtleUV4aXN0OiBib29sZWFuO1xyXG4gICAgICBjb25zdCB1bmlxdWVLZXkgPSB0aGlzLmRhdGFbJ1VuaXF1ZUtleSddO1xyXG4gICAgICBpZiAodW5pcXVlS2V5KSB7XHJcbiAgICAgICAgY29uc3QgZm9ybVVuaXF1ZUtleVZhbHVlID0gZm9ybUdyb3VwLnZhbHVlW3VuaXF1ZUtleV07XHJcblxyXG4gICAgICAgIGlmIChpc05ldyB8fCAoIWlzTmV3ICYmIChncmlkRXhpc3RpbmdEYXRhW3Jvd0luZGV4XVt1bmlxdWVLZXldICE9IGZvcm1VbmlxdWVLZXlWYWx1ZSkpKSB7XHJcbiAgICAgICAgICAvLyBpZiBuZXcuLi5cclxuICAgICAgICAgIC8vIGlmIGVkaXQuLi4gaWYgY3VycmVudCBmaWVsZCwgdW5pcXVla2V5IHZhbHVlIGNoYW5nZWQuIG5lZWQgdG8gY2hlY2suXHJcbiAgICAgICAgICBncmlkRXhpc3RpbmdEYXRhLmZvckVhY2goZGF0YSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChkYXRhW3VuaXF1ZUtleV0gPT09IGZvcm1VbmlxdWVLZXlWYWx1ZSkge1xyXG4gICAgICAgICAgICAgIHVuaXF1ZUtleUV4aXN0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCF1bmlxdWVLZXlFeGlzdCkge1xyXG4gICAgICAgIGlmIChpc05ldykge1xyXG4gICAgICAgICAgLy8gaWYgbmV3LCBwdXNoIHRvIGRhdGFcclxuICAgICAgICAgIGdyaWRFeGlzdGluZ0RhdGEucHVzaChmb3JtR3JvdXAudmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIC8vIGlmIGVkaXQsIHVwZGF0ZSBkYXRhXHJcbiAgICAgICAgICBncmlkRXhpc3RpbmdEYXRhW3Jvd0luZGV4XSA9IGZvcm1Hcm91cC52YWx1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2V0RGF0YShncmlkRXhpc3RpbmdEYXRhKTtcclxuXHJcbiAgICAgICAgc2VuZGVyLmNsb3NlUm93KHJvd0luZGV4KTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5zaG93KCdFcnJvciBvY2N1cjogRHVwbGljYXRlZCB1bmlxdWUgZmllbGQgZW50cnkuJywgJ3RvcCcsIHRydWUsIDMwMDAsICdkYW5nZXInKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGNhbmNlbEhhbmRsZXIoeyBzZW5kZXIsIHJvd0luZGV4IH0pIHtcclxuICAgIC8vIGNhbmNlbCBhbnkgZXhpc3RpbmcgZWRpdG9yXHJcbiAgICBzZW5kZXIuY2xvc2VSb3cocm93SW5kZXgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGVkaXRIYW5kbGVyKHsgc2VuZGVyLCByb3dJbmRleCwgZGF0YUl0ZW0gfSkge1xyXG4gICAgdGhpcy5pc05ldyA9IGZhbHNlO1xyXG5cclxuICAgIC8vIGNsb3NlIGFueSBleGlzdGluZyBlZGl0b3JcclxuICAgIHRoaXMuY2xvc2VFZGl0b3Ioc2VuZGVyKTtcclxuXHJcbiAgICAvLyBsb29wIGFsbCBjb2x1bW4gdG8gZ2V0IHZhbGlkYXRpb24gYW5kIGNyZWF0ZSBmb3JtIGNvbnRyb2wsIGFwcGVuZCBjdXJyZW50IHJvdyB2YWx1ZVxyXG4gICAgY29uc3QgY29sRm9ybUNvbnRyb2wgPSB7fTtcclxuICAgIHRoaXMuemdyaWQuZ3JpZENvbHVtbnMuZm9yRWFjaChjb2wgPT4ge1xyXG4gICAgICBjb25zdCB2YWxpZGF0b3JzOiBWYWxpZGF0b3JGbltdID0gW107XHJcbiAgICAgIGlmIChjb2wuSXNSZXF1aXJlZCkge1xyXG4gICAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29sLlZhbGlkYXRvclBhdHRlcm4pIHtcclxuICAgICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5wYXR0ZXJuKGNvbC5WYWxpZGF0b3JQYXR0ZXJuKSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbEZvcm1Db250cm9sW2NvbC5WYWx1ZV0gPSBuZXcgRm9ybUNvbnRyb2woZGF0YUl0ZW1bY29sLlZhbHVlXSwgdmFsaWRhdG9ycyk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBzZXQgZm9ybSBjb250cm9sIG9iamVjdCB0byBmb3JtIGdyb3VwXHJcbiAgICB0aGlzLmZvcm1Hcm91cCA9IG5ldyBGb3JtR3JvdXAoY29sRm9ybUNvbnRyb2wpO1xyXG5cclxuICAgIC8vIHNldCBncmlkIHJvdyB0byBlZGl0XHJcbiAgICB0aGlzLmVkaXRlZFJvd0luZGV4ID0gcm93SW5kZXg7XHJcbiAgICBzZW5kZXIuZWRpdFJvdyhyb3dJbmRleCwgdGhpcy5mb3JtR3JvdXApO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlbW92ZUhhbmRsZXIoeyBzZW5kZXIsIGRhdGFJdGVtIH0pIHtcclxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5nZXRJdGVtSW5kZXgoZGF0YUl0ZW0sIHRoaXMuZ0RhdGEsIHRoaXMuZGF0YVsnVW5pcXVlS2V5J10pO1xyXG4gICAgdGhpcy5nRGF0YS5zcGxpY2UoaW5kZXgsIDEpO1xyXG5cclxuICAgIHNlbmRlci5jYW5jZWxDZWxsKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNsb3NlRWRpdG9yKGdyaWQsIHJvd0luZGV4ID0gdGhpcy5lZGl0ZWRSb3dJbmRleCkge1xyXG4gICAgZ3JpZC5jbG9zZVJvdyhyb3dJbmRleCk7XHJcbiAgICB0aGlzLmVkaXRlZFJvd0luZGV4ID0gdW5kZWZpbmVkO1xyXG4gICAgdGhpcy5mb3JtR3JvdXAgPSB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEl0ZW1JbmRleChpdGVtOiBhbnksIGRhdGE6IGFueVtdLCBrZXk6IHN0cmluZyk6IG51bWJlciB7XHJcbiAgICBmb3IgKGxldCBpZHggPSAwOyBpZHggPCBkYXRhLmxlbmd0aDsgaWR4KyspIHtcclxuICAgICAgaWYgKGRhdGFbaWR4XVtrZXldID09PSBpdGVtW2tleV0pIHtcclxuICAgICAgICByZXR1cm4gaWR4O1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIC0xO1xyXG4gIH1cclxuXHJcbiAgLy8jcmVnaW9uIEdyaWYgRmlsdGVyXHJcbiAgcHJpdmF0ZSBzZXR1cEZpbHRlckZlYXR1cmUoKSB7XHJcbiAgICBpZiAodGhpcy5kYXRhLkdyaWRGaWx0ZXJCYXJGaWVsZCkge1xyXG4gICAgICB0aGlzLmZpbHRlckdyb3VwID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5ncm91cCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5kYXRhLkdyaWRBZHZGaWx0ZXJCYXJGaWVsZCkge1xyXG4gICAgICB0aGlzLmFkdmZpbHRlckdyb3VwID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5ncm91cCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2VhcmNoKCkge1xyXG4gICAgY29uc3QgZm9ybSA9IHRoaXMuZmlsdGVyR3JvdXAuZm9ybTtcclxuICAgIGNvbnN0IGNvbnRyb2xzID0gZm9ybS5jb250cm9scztcclxuXHJcbiAgICBpZiAodGhpcy5pc1Nob3dBZHZGaWx0ZXIpIHtcclxuICAgICAgY29uc3QgYWR2Zm9ybSA9IHRoaXMuYWR2ZmlsdGVyR3JvdXAuZm9ybTtcclxuICAgICAgY29uc3QgYWR2Y29udHJvbHMgPSBhZHZmb3JtLmNvbnRyb2xzO1xyXG4gICAgICBmb3IgKGNvbnN0IGMgb2YgT2JqZWN0LmtleXMoYWR2Y29udHJvbHMpKSB7XHJcbiAgICAgICAgY29udHJvbHNbY10gPSBhZHZjb250cm9sc1tjXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmRhdGEuRmlsdGVyU2VhcmNoKSB7XHJcbiAgICAgIHRoaXMuZ3JvdXAuc3ViamVjdC5uZXh0KHtcclxuICAgICAgICB0eXBlOiBcInpncmlkLWZpbHRlcnNlYXJjaFwiLFxyXG4gICAgICAgIHRhcmdldDogdGhpcy5kYXRhLkZpbHRlclNlYXJjaCxcclxuICAgICAgICBkYXRhOiB7IGZvcm1jb250cm9sczogY29udHJvbHMgfSxcclxuICAgICAgfSBhcyBaQ29tcG9uZW50T3V0cHV0RXZlbnQpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMucGFyYW1zLmZpbHRlclBhcmFtcyA9IFtdO1xyXG4gICAgICBPYmplY3Qua2V5cyhjb250cm9scykuZm9yRWFjaChjb250cm9sTmFtZSA9PiB7XHJcbiAgICAgICAgaWYgKGNvbnRyb2xzW2NvbnRyb2xOYW1lXS52YWx1ZSkge1xyXG4gICAgICAgICAgY29uc3QgZmllbGQgPSBaQ29tcG9uZW50SGVscGVyLmdldEZpZWxkRnJvbUZpZWxkc0J5VmFsdWUodGhpcy5maWx0ZXJHcm91cC5maWVsZHMsIGNvbnRyb2xOYW1lKSB8fCBaQ29tcG9uZW50SGVscGVyLmdldEZpZWxkRnJvbUZpZWxkc0J5VmFsdWUodGhpcy5hZHZmaWx0ZXJHcm91cC5maWVsZHMsIGNvbnRyb2xOYW1lKTtcclxuICAgICAgICAgIHRoaXMucGFyYW1zLmZpbHRlclBhcmFtcy5wdXNoKHtcclxuICAgICAgICAgICAga2V5OiBmaWVsZC5WYWx1ZUV4cHIgfHwgZmllbGQuVmFsdWUsXHJcbiAgICAgICAgICAgIG9wczogdGhpcy5tYXBGaWx0ZXJPcGVyYXRvckJ5RmllbGRUeXBlKGZpZWxkKSxcclxuICAgICAgICAgICAgdmFsdWU6IGNvbnRyb2xzW2NvbnRyb2xOYW1lXS52YWx1ZVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLmdldERhdGEoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBjYW5jZWxFZGl0KCkge1xyXG4gICAgdGhpcy5jbGVhckZpbHRlckRhdGEodGhpcy5maWx0ZXJHcm91cCk7XHJcbiAgICBpZiAodGhpcy5kYXRhLkdyaWRBZHZGaWx0ZXJCYXJGaWVsZCkge1xyXG4gICAgICB0aGlzLmNsZWFyRmlsdGVyRGF0YSh0aGlzLmFkdmZpbHRlckdyb3VwKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2xlYXJGaWx0ZXJEYXRhKGdyb3VwOiBaR3JvdXApIHtcclxuICAgIGNvbnN0IGZvcm0gPSBncm91cC5mb3JtIGFzIEZvcm1Hcm91cDtcclxuICAgIGNvbnN0IGNvbnRyb2xzID0gZm9ybS5jb250cm9scztcclxuICAgIE9iamVjdC5rZXlzKGNvbnRyb2xzKS5mb3JFYWNoKGNvbnRyb2xOYW1lID0+IHtcclxuICAgICAgWkNvbXBvbmVudEhlbHBlci5zZXRNb2RlbFZhbHVlKGNvbnRyb2xOYW1lLCBudWxsLCBncm91cCwgdHJ1ZSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhZHZhbmNlZFNlYXJjaCgpIHtcclxuICAgIHRoaXMuaXNTaG93QWR2RmlsdGVyID0gIXRoaXMuaXNTaG93QWR2RmlsdGVyO1xyXG4gICAgaWYgKCF0aGlzLmlzU2hvd0FkdkZpbHRlcikge1xyXG4gICAgICB0aGlzLmNsZWFyRmlsdGVyRGF0YSh0aGlzLmFkdmZpbHRlckdyb3VwKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgbWFwRmlsdGVyT3BlcmF0b3JCeUZpZWxkVHlwZShmaWVsZDogWkZpZWxkKSB7XHJcbiAgICBzd2l0Y2ggKGZpZWxkLlR5cGUpIHtcclxuICAgICAgY2FzZSBcIm51bWJlclwiOlxyXG4gICAgICBjYXNlIFwibnVtZXJpY1wiOlxyXG4gICAgICBjYXNlIFwiZGF0ZVwiOlxyXG4gICAgICBjYXNlIFwiZW1haWxcIjpcclxuICAgICAgY2FzZSBcInBhc3N3b3JkXCI6XHJcbiAgICAgIGNhc2UgXCJ0ZWxcIjpcclxuICAgICAgY2FzZSBcInRleHRcIjpcclxuICAgICAgY2FzZSBcInVybFwiOlxyXG4gICAgICBjYXNlIFwiY3VycmVuY3lcIjpcclxuICAgICAgY2FzZSBcInRleHRhcmVhXCI6XHJcbiAgICAgICAgaWYgKCFmaWVsZFsnRmlsdGVyQ29udGFpbnNVc2luZ0VxdWFsJ10pIHtcclxuICAgICAgICAgIHJldHVybiBcImNvbnRhaW5zXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBcIj09XCI7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIFwiPVwiO1xyXG4gICAgfVxyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxufVxyXG4iLCI8IS0tXHJcbjxkaXYgc3R5bGU9XCJtYXJnaW46IDEwcHhcIj5cclxuICA8ZGl2IGNsYXNzPVwiY2FyZFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ibG9jayBrLWZvcm1cIj5cclxuICAgICAgICAgIDxmaWVsZHNldD5cclxuICAgICAgICAgICAgPGxlZ2VuZD5CaW5kaW5nIHR5cGVzPC9sZWdlbmQ+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJrLWZvcm0tZmllbGRcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuPkJpbmQgdGhlIGRhdGEgdG86PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IFsobmdNb2RlbCldPVwiYmluZGluZ1R5cGVcIiB0eXBlPVwicmFkaW9cIiBuYW1lPVwibW9kZVwiIGlkPVwiYXJyYXlcIiB2YWx1ZT1cImFycmF5XCIgY2xhc3M9XCJrLXJhZGlvXCJcclxuICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwiY2hhbmdlQmluZGluZ1R5cGUoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiay1yYWRpby1sYWJlbFwiIGZvcj1cImFycmF5XCI+QXJyYXkgb2JqZWN0PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBbKG5nTW9kZWwpXT1cImJpbmRpbmdUeXBlXCIgdHlwZT1cInJhZGlvXCIgbmFtZT1cIm1vZGVcIiBpZD1cImdyaWREYXRhUmVzdWx0XCIgdmFsdWU9XCJncmlkRGF0YVJlc3VsdFwiIGNsYXNzPVwiay1yYWRpb1wiXHJcbiAgICAgICAgICAgICAgICAoY2hhbmdlKT1cImNoYW5nZUJpbmRpbmdUeXBlKCRldmVudClcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImstcmFkaW8tbGFiZWxcIiBmb3I9XCJncmlkRGF0YVJlc3VsdFwiPkdyaWREYXRhUmVzdWx0IG9iamVjdDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgWyhuZ01vZGVsKV09XCJiaW5kaW5nVHlwZVwiIHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJtb2RlXCIgaWQ9XCJhc3luY1wiIHZhbHVlPVwiYXN5bmNcIiBjbGFzcz1cImstcmFkaW9cIlxyXG4gICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJjaGFuZ2VCaW5kaW5nVHlwZSgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJrLXJhZGlvLWxhYmVsXCIgZm9yPVwiYXN5bmNcIj5Bc3luY2hyb25vdXMgc291cmNlPC9sYWJlbD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2ZpZWxkc2V0PlxyXG4gICAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+IC0tPlxyXG48ZGl2IGNsYXNzPVwiZ3JpZC1jb250YWluZXIgZTF0YWctc3R5bGVcIiBbbmdDbGFzc109XCJkYXRhLkNsYXNzXCIgW2NsYXNzXT1cImRhdGEuQ29tcG9uZW50U3R5bGVUeXBlXCIgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGVcIj5cclxuICA8bmctY29udGFpbmVyIGVsZW1lbnRjb250YWluZXI+PC9uZy1jb250YWluZXI+XHJcblxyXG4gIDwhLS0gPGRpdiAqbmdJZj1cImRhdGEuVGl0bGVcIiBjbGFzcz1cImdyaWRUaXRsZVwiPnt7ZGF0YS5UaXRsZX19PC9kaXY+IC0tPlxyXG4gIDxuZy10ZW1wbGF0ZSAjdGVtcGxhdGUgbGV0LWFuY2hvcj5cclxuICAgIC1hXHJcbiAgICA8c3Bhbj57eyBhbmNob3IubmF0aXZlRWxlbWVudC5pbm5lclRleHQgfX08L3NwYW4+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuICA8a2VuZG8tcG9wb3ZlciAjZ3JpZFBvcE92ZXIgW3Bvc2l0aW9uXT1cImRhdGEuUG9wT3ZlclBvc2l0aW9uIHx8ICdib3R0b20nXCIgW3RlbXBsYXRlRGF0YV09XCJnZXRDb250ZXh0RGF0YS5iaW5kKHRoaXMpXCI+XHJcbiAgICA8IS0tIDxuZy10ZW1wbGF0ZSBrZW5kb1BvcG92ZXJUaXRsZVRlbXBsYXRlIGxldC1kYXRhPVwiZGF0YVwiID5cclxuICAgICAgPGRpdiBbc3R5bGVdPVwiZGF0YS5UaXRsZVN0eWxlXCIgKm5nSWY9XCJkYXRhICYmIGRhdGEuVGl0bGVcIiBbaW5uZXJIVE1MXT1cImRhdGEuVGl0bGVcIj48L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+IC0tPlxyXG4gICAgPG5nLXRlbXBsYXRlIGtlbmRvUG9wb3ZlckJvZHlUZW1wbGF0ZSBsZXQtZGF0YT1cImRhdGFcIj5cclxuICAgICAgPGRpdiBbc3R5bGVdPVwiZGF0YS5Cb2R5U3R5bGVcIiBjbGFzcz1cInBvcG92ZXJib2R5XCIgKm5nSWY9XCJkYXRhICYmIGRhdGEuQm9keVwiIFtpbm5lckhUTUxdPVwiZGF0YS5Cb2R5IHwgaHRtbFNhbml0aXplXCIgW25nQ2xhc3NdPVwiZGF0YS5Cb2R5Q2xhc3NcIiAobW91c2VsZWF2ZSk9XCJjbG9zZVBvcE92ZXIuY2FsbCh0aGlzLCAkZXZlbnQpXCI+PC9kaXY+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gIDwva2VuZG8tcG9wb3Zlcj5cclxuXHJcbiAgPGRpdiBrZW5kb1Rvb2x0aXAgc2hvd09uPVwibm9uZVwiIFt0b29sdGlwVGVtcGxhdGVdPVwidGVtcGxhdGVcIiBmaWx0ZXI9XCIuay1ncmlkIHRkXCIgKG1vdXNlb3Zlcik9XCJzaG93VG9vbHRpcCgkZXZlbnQpXCIgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGUxXCIgY2xhc3M9XCJlMXRhZy1zdHlsZTFcIj5cclxuICAgIDxkaXYga2VuZG9Qb3BvdmVyQ29udGFpbmVyIFtwb3BvdmVyXT1cImdyaWRQb3BPdmVyXCIgZmlsdGVyPVwiZGl2LmdyaWRDZWxsLndpdGhQb3BvdmVySW5HcmlkXCIgc2hvd09uPVwibm9uZVwiIGtlbmRvUG9wb3ZlckNvbnRhaW5lciAjcG9wb3ZlcmNvbnRhaW5lcj1cImtlbmRvUG9wb3ZlckNvbnRhaW5lclwiPlxyXG4gICAgICA8a2VuZG8tZ3JpZCBbemdyaWRiaW5kaW5nXT1cIntkYXRhOiBkYXRhLCBncm91cDogZ3JvdXAsIHBhcmFtczogcGFyYW1zLCBncmlkU3ViamVjdDogZ3JpZFN1YmplY3R9XCIgW25nQ2xhc3NdPVwiZGF0YS5DbGFzc1wiIFtjbGFzc109XCJkYXRhLkNvbXBvbmVudFN0eWxlVHlwZVwiIGNsYXNzPVwiZGVza3RvcC1ncmlkIGUxdGFnLXN0eWxlMlwiXHJcbiAgICAgICAgICAgICAgICAgIFtkYXRhXT1cImdyaWREYXRhXCJcclxuICAgICAgICAgICAgICAgICAgW3Njcm9sbGFibGVdPVwiZGF0YS5zY3JvbGxBYmxlID09PSBmYWxzZSA/ICdub25lJyA6ICdzY3JvbGxhYmxlJ1wiXHJcbiAgICAgICAgICAgICAgICAgIFtwYWdlU2l6ZV09XCJzdGF0ZS50YWtlXCJcclxuICAgICAgICAgICAgICAgICAgW3BhZ2VhYmxlXT1cInBhZ2VhYmxlXCJcclxuICAgICAgICAgICAgICAgICAgW2NsYXNzLmhpZGVuLXBhZ2VyXT1cIiFwYWdlYWJsZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtza2lwXT1cInN0YXRlLnNraXBcIlxyXG4gICAgICAgICAgICAgICAgICBbc29ydF09XCJzdGF0ZS5zb3J0XCJcclxuICAgICAgICAgICAgICAgICAgW3NvcnRhYmxlXT1cInthbGxvd1Vuc29ydDogdHJ1ZSxtb2RlOiAnbXVsdGlwbGUnfVwiXHJcbiAgICAgICAgICAgICAgICAgIFtmaWx0ZXJdPVwic3RhdGUuZmlsdGVyXCJcclxuICAgICAgICAgICAgICAgICAgW2ZpbHRlcmFibGVdPVwiZGF0YS5lbmFibGVGaWx0ZXJpbmcgIT09IGZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgW3Jlc2l6YWJsZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgW3Jlb3JkZXJhYmxlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICBbY29sdW1uTWVudV09XCJkYXRhLkRpc2FibGVHcmlkQ29sdW1uTWVudSA/IGZhbHNlIDogeyBmaWx0ZXI6IHRydWUgfVwiXHJcbiAgICAgICAgICAgICAgICAgIFtoaWRkZW5dPVwiISghIWNvbXBvbmVudFByb3BlcnRpZXMuaXNWaXNpYmxlRmllbGQgPyBncm91cFtjb21wb25lbnRQcm9wZXJ0aWVzLmlzVmlzaWJsZUZpZWxkXSA6IGNvbXBvbmVudFByb3BlcnRpZXMuaXNWaXNpYmxlKVwiXHJcbiAgICAgICAgICAgICAgICAgIChjZWxsQ2xpY2spPVwiY2VsbENsaWNrSGFuZGxlcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgKGNlbGxDbG9zZSk9XCJlZGl0Q2VsbENsb3NlSGFuZGxlcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgKGRhdGFTdGF0ZUNoYW5nZSk9XCJkYXRhU3RhdGVDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIChwYWdlQ2hhbmdlKT1cInBhZ2VDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIChzb3J0Q2hhbmdlKT1cInNvcnRDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIChmaWx0ZXJDaGFuZ2UpPVwiZmlsdGVyQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAoY29sdW1uUmVvcmRlcik9XCJjb2x1bW5zT3JkZXJDaGFuZ2VkKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICBba2VuZG9HcmlkU2VsZWN0QnldPVwicm93U2VsZWN0aW9uS2V5XCJcclxuICAgICAgICAgICAgICAgICAgW3NlbGVjdGFibGVdPVwic2VsZWN0YWJsZVNldHRpbmdzXCJcclxuICAgICAgICAgICAgICAgICAgWyhzZWxlY3RlZEtleXMpXT1cIm15U2VsZWN0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGUyXCJcclxuICAgICAgICAgICAgICAgICAgW3RyYWNrQnldPVwidHJhY2tCeVwiXHJcbiAgICAgICAgICAgICAgICAgIChjYW5jZWwpPVwiY2FuY2VsSGFuZGxlcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgKHNhdmUpPVwic2F2ZUhhbmRsZXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIChyZW1vdmUpPVwicmVtb3ZlSGFuZGxlcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgKGVkaXQpPVwiZWRpdEhhbmRsZXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIChhZGQpPVwiYWRkSGFuZGxlcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgKGNvbHVtblJlc2l6ZSk9XCJhZGp1c3RXaWR0aFVwb25SZXNpemUoKVwiPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0dyaWRUb29sYmFyVGVtcGxhdGVcclxuICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJkYXRhLkFsbG93UmVmcmVzaEJ1dHRvbiB8fCBkYXRhLkFsbG93RXhwb3J0IHx8IGRhdGEuQWxsb3dTYXZlU3RhdGUgfHwgZGF0YS5UaXRsZSB8fCBkYXRhLkdyaWRCdXR0b25GaWVsZE5hbWVfV0YgfHwgZGF0YS5HcmlkQnV0dG9uRmllbGROYW1lIHx8IGRhdGEuRW5hYmxlR3JpZENvbW1hbmRcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0b29sYmFyLWxlZnQtaXRlbVwiICpuZ0lmPVwiZGF0YS5UaXRsZSB8fCBkYXRhLkFsbG93UmVmcmVzaEJ1dHRvblwiPlxyXG4gICAgICAgICAgICA8IS0tIDxmYS1pY29uICpuZ0lmPVwiZGF0YS5JY29uXCIgY2xhc3M9XCJncmlkVGl0bGVJY29uXCIgW2ljb25dPVwiZGF0YS5JY29uXCI+PC9mYS1pY29uPiAtLT5cclxuICAgICAgICAgICAgPGtlbmRvLWxhYmVsIGNsYXNzPVwiZ3JpZFRpdGxlXCI+e3tkYXRhLlRpdGxlfX08L2tlbmRvLWxhYmVsPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImxlZnQtYnV0dG9uc1wiIGtlbmRvQnV0dG9uIChjbGljayk9XCJyZWZyZXNoRGF0YSgpXCJcclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImRhdGEuQWxsb3dSZWZyZXNoQnV0dG9uXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJrLWljb24gay1ncmlkLWJ1dHRvbiBrLWktcmVmcmVzaC1zbVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0b29sYmFyLXJpZ2h0LWl0ZW1cIiAqbmdJZj1cImdyaWRCdG4gfHwgZGF0YS5BbGxvd1NhdmVTdGF0ZSB8fCBncmlkRGVmYXVsdFN0YXRlRXhpc3QgfHwgZGF0YS5FbmFibGVHcmlkQ29tbWFuZFwiPlxyXG4gICAgICAgICAgICA8YXBwLXp3b3JrZmxvd2J1dHRvbnMgKm5nSWY9XCJncmlkQnRuICYmIGdyaWRCdG4uVHlwZSA9PT0gJ3p3b3JrZmxvd2J1dHRvbnMnXCIgW2RhdGFdPVwiZ3JpZEJ0blwiIFtncm91cF09XCJncm91cFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybV09XCJmb3JtXCI+PC9hcHAtendvcmtmbG93YnV0dG9ucz5cclxuICAgICAgICAgICAgPGFwcC16YnV0dG9ucyAqbmdJZj1cImdyaWRCdG4gJiYgZ3JpZEJ0bi5UeXBlID09PSAnemJ1dHRvbnMnXCIgW2RhdGFdPVwiZ3JpZEJ0blwiIFtncm91cF09XCJncm91cFwiIFtmb3JtXT1cImZvcm1cIj5cclxuICAgICAgICAgICAgPC9hcHAtemJ1dHRvbnM+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGtlbmRvR3JpZEV4Y2VsQ29tbWFuZCAqbmdJZj1cImRhdGEuQWxsb3dFeHBvcnRcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImstaWNvbiBrLWktZmlsZS1leGNlbFwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICB7eyBnZXRUb29sQmFySXRlbUxhYmVsTmFtZSgnRXhwb3J0IERhdGEgdG8gRXhjZWwnKSB9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIga2VuZG9CdXR0b24gKGNsaWNrKT1cInNhdmVHcmlkU2V0dGluZ3MoKVwiICpuZ0lmPVwiZGF0YS5BbGxvd1NhdmVTdGF0ZVwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiay1pY29uIGstaWNvbi13aXRoLXRleHQgay1pLXN0YXJcIj48L3NwYW4+e3sgZ2V0VG9vbEJhckl0ZW1MYWJlbE5hbWUoJ1NhdmUgU2V0dGluZ3MnKSB9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIga2VuZG9CdXR0b24gKGNsaWNrKT1cInJlc3RvcmVHcmlkU2V0dGluZ3MoKVwiICpuZ0lmPVwiZ3JpZERlZmF1bHRTdGF0ZUV4aXN0XCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJrLWljb24gay1pY29uLXdpdGgtdGV4dCBrLWktc3Rhci1vdXRsaW5lXCI+PC9zcGFuPnt7IGdldFRvb2xCYXJJdGVtTGFiZWxOYW1lKCdSZXN0b3JlIFNldHRpbmdzJykgfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGtlbmRvR3JpZEFkZENvbW1hbmQgKm5nSWY9XCJkYXRhLkVuYWJsZUdyaWRDb21tYW5kXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJrLWljb24gay1pY29uLXdpdGgtdGV4dCBrLWktYWRkXCI+PC9zcGFuPnt7IGdldFRvb2xCYXJJdGVtTGFiZWxOYW1lKCdBZGQgTmV3JykgfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXItY29udGFpbmVyXCIgKm5nSWY9XCJkYXRhLkdyaWRGaWx0ZXJCYXJGaWVsZFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibm9ybWFsLWZpbHRlci1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgICA8YXBwLXpmb3JtIGNsYXNzPVwiZmlsdGVyLWZpZWxkc1wiIFtncm91cF09XCJmaWx0ZXJHcm91cFwiIFtmaWVsZE5hbWVdPVwiZGF0YS5HcmlkRmlsdGVyQmFyRmllbGRcIj48L2FwcC16Zm9ybT5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyLWJ1dHRvbnNcIiBbbmdDbGFzc109XCJkYXRhLkNsYXNzXCI+XHJcbiAgICAgICAgICAgICAgICA8aW9uLWJ1dHRvbiBmaWxsPVwic29saWRcIiBzaXplPVwiZGVmYXVsdFwiIHN0cm9uZz1cInRydWVcIiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwic2VhcmNoKClcIj5cclxuICAgICAgICAgICAgICAgICAgPGZhLWljb24gaWNvbj1cInNlYXJjaFwiPjwvZmEtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJidG4tbGFiZWwgaW9uLXRleHQtY2FwaXRhbGl6ZVwiPnt7IGdldFRvb2xCYXJJdGVtTGFiZWxOYW1lKCdTZWFyY2gnKSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxpb24tYnV0dG9uIGZpbGw9XCJvdXRsaW5lXCIgc2l6ZT1cImRlZmF1bHRcIiBzdHJvbmc9XCJ0cnVlXCIgY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cImNhbmNlbEVkaXQoKVwiICpuZ0lmPVwiZGF0YS5Jc1Nob3dHcmlkQ2FuY2VsRmlsdGVyQnV0dG9uXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxmYS1pY29uIGljb249XCJ0aW1lc1wiPjwvZmEtaWNvbj5cclxuICAgICAgICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxpb24tYnV0dG9uIGZpbGw9XCJzb2xpZFwiIHNpemU9XCJkZWZhdWx0XCIgc3Ryb25nPVwidHJ1ZVwiIFtuZ0NsYXNzXT1cImlzU2hvd0FkdkZpbHRlciA/ICd0b2dnbGVPbicgOiAndG9nZ2xlT2ZmJ1wiIChjbGljayk9XCJhZHZhbmNlZFNlYXJjaCgpXCIgKm5nSWY9XCJkYXRhLkdyaWRBZHZGaWx0ZXJCYXJGaWVsZFwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZmEtaWNvbiBpY29uPVwic2xpZGVycy1oXCI+PC9mYS1pY29uPlxyXG4gICAgICAgICAgICAgICAgPC9pb24tYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGFwcC16Zm9ybSAqbmdJZj1cImRhdGEuR3JpZEFkdkZpbHRlckJhckZpZWxkXCIgY2xhc3M9XCJ0by1wcmVsb2FkLXRoZS1maWVsZHNcIiBbZ3JvdXBdPVwiYWR2ZmlsdGVyR3JvdXBcIiBbZmllbGROYW1lXT1cImRhdGEuR3JpZEFkdkZpbHRlckJhckZpZWxkXCIgc3R5bGU9XCJkaXNwbGF5Om5vbmU7XCI+PC9hcHAtemZvcm0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZHYtZmlsdGVyLWNvbnRhaW5lclwiICpuZ0lmPVwiaXNTaG93QWR2RmlsdGVyXCIgW0BoaWRlQW5kU2hvd0FuaW1hdGlvbl0+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkdi1maWx0ZXItc2VwZXJhdG9yXCI+XHJcbiAgICAgICAgICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgICAgICAgICAge3sgZ2V0VG9vbEJhckl0ZW1MYWJlbE5hbWUoJ0FkdmFuY2VkIFNlYXJjaCcpIH19XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGFwcC16Zm9ybSBjbGFzcz1cImFkdmZpbHRlci1maWVsZHNcIiBbZ3JvdXBdPVwiYWR2ZmlsdGVyR3JvdXBcIiBbZmllbGROYW1lXT1cImRhdGEuR3JpZEFkdkZpbHRlckJhckZpZWxkXCI+PC9hcHAtemZvcm0+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8a2VuZG8tZ3JpZC1jaGVja2JveC1jb2x1bW4gKm5nSWY9XCIhIWRhdGEuU2VsZWN0T3B0aW9uc1wiIFt3aWR0aF09XCI2MFwiIHNob3dTZWxlY3RBbGw9XCJ0cnVlXCIgW2NvbHVtbk1lbnVdPVwidHJ1ZVwiPlxyXG4gICAgICAgIDwva2VuZG8tZ3JpZC1jaGVja2JveC1jb2x1bW4+XHJcbiAgICAgICAgPGtlbmRvLWdyaWQtY29sdW1uIFtzdHlsZV09XCJnZXRHcmlkQ29sdW1uU3R5bGUoKVwiIGNsYXNzPVwiZTF0YWctc3R5bGUzXCIgKm5nRm9yPVwibGV0IGNvbCBvZiBjb2x1bW5zO1wiIFtmaWVsZF09XCJjb2wuZmllbGRcIiBbdGl0bGVdPVwiY29sLnRpdGxlXCIgW3dpZHRoXT1cImNvbC53aWR0aFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFttaW5SZXNpemFibGVXaWR0aF09XCJjb2wubWluUmVzaXphYmxlV2lkdGhcIiBbZmlsdGVyXT1cImNvbC5maWx0ZXJcIiBbZmlsdGVyYWJsZV09XCJmaWx0ZXJhYmxlKGNvbC5lbmFibGVGaWx0ZXJpbmcpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NvcnRhYmxlXT1cInNvcnRhYmxlKGNvbC5lbmFibGVTb3J0aW5nKVwiIFtoZWFkZXJTdHlsZV09XCJnZXRHcmlkSGVhZGVyU3R5bGUoKVwiIGhlYWRlckNsYXNzPVwiZTF0YWctc3R5bGU0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvb3RlclN0eWxlXT1cImdldEdyaWRGb290ZXJTdHlsZSgpXCIgZm9vdGVyQ2xhc3M9XCJlMXRhZy1zdHlsZTlcIiBbaGlkZGVuXT1cImNvbC5oaWRkZW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybWF0XT1cImNvbC5mb3JtYXRcIiBbY2xhc3NdPVwiY29sLkNsYXNzXCIgW2xvY2tlZF09XCJsb2NrZWQoY29sKVwiIGVkaXRvcj1cIm51bWVyaWNcIiBbY29sdW1uTWVudV09XCIhY29sLmRpc2FibGVDb2x1bW5NZW51XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW2VkaXRvcl09XCJjb2wuZWRpdG9yVHlwZVwiPlxyXG4gICAgICAgICAgPGRpdiBbbmdTd2l0Y2hdPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCJjb2wuZmllbGRUeXBlID09PSAnbnVtYmVyJ1xyXG4gICAgICAgICAgICAgICB8fCBjb2wuZmllbGRUeXBlID09PSAnY3VycmVuY3knXHJcbiAgICAgICAgICAgICAgIHx8IGNvbC5maWVsZFR5cGUgPT09ICd6bnVtZXJpYydcIj5cclxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUga2VuZG9HcmlkRmlsdGVyQ2VsbFRlbXBsYXRlIGxldC1maWx0ZXIgbGV0LWNvbHVtbj1cImNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgPGtlbmRvLWdyaWQtbnVtZXJpYy1maWx0ZXItY2VsbCBbc2hvd09wZXJhdG9yc109XCJkYXRhLklzU2hvd0dyaWRGaWx0ZXJPcGVyYXRvclwiIFtjb2x1bW5dPVwiY29sdW1uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZpbHRlcl09XCJmaWx0ZXJcIiBvcGVyYXRvcj1cImVxXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItZXEtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItZXEtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItbmVxLW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLW5lcS1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1sdC1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1sdC1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1sdGUtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItbHRlLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWd0LW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWd0LW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWd0ZS1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1ndGUtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItaXNudWxsLW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWlzbnVsbC1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1pc25vdG51bGwtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItaXNub3RudWxsLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgPC9rZW5kby1ncmlkLW51bWVyaWMtZmlsdGVyLWNlbGw+XHJcbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cImNvbC5maWVsZFR5cGUgPT0gJ3pkYXRlJ1xyXG4gICAgICAgICAgICAgICB8fCBjb2wuZmllbGRUeXBlID09PSAnenRpbWUnXHJcbiAgICAgICAgICAgICAgIHx8IGNvbC5maWVsZFR5cGUgPT09ICd6ZGF0ZXRpbWUnXHJcbiAgICAgICAgICAgICAgIHx8IGNvbC5maWVsZFR5cGUgPT09ICd6dWlkYXRldGltZSdcIj5cclxuICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY29sLmZpbHRlckJ5RGF0ZVJhbmdlID09PSB0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUga2VuZG9HcmlkRmlsdGVyQ2VsbFRlbXBsYXRlIGxldC1maWx0ZXIgbGV0LWNvbHVtbj1cImNvbHVtblwiIG9wZXJhdG9yPVwibHRlXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkYXRlLXJhbmdlLWZpbHRlci1jZWxsIFtzaG93T3BlcmF0b3JzXT1cImRhdGEuSXNTaG93R3JpZEZpbHRlck9wZXJhdG9yXCIgY2xhc3M9XCJkYXRlLXJhbmdlLWZpbHRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmaWx0ZXJdPVwiZmlsdGVyXCIgW2ZpZWxkXT1cImNvbC5maWVsZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItbHQtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItbHQtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1sdGUtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItbHRlLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItZ3Qtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItZ3Qtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1ndGUtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItZ3RlLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItaXNudWxsLW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWlzbnVsbC1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWlzbm90bnVsbC1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1pc25vdG51bGwtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGF0ZS1yYW5nZS1maWx0ZXItY2VsbD5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImNvbC5maWx0ZXJCeURhdGVSYW5nZSA9PT0gZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0dyaWRGaWx0ZXJDZWxsVGVtcGxhdGUgbGV0LWZpbHRlciBsZXQtY29sdW1uPVwiY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxrZW5kby1ncmlkLWRhdGUtZmlsdGVyLWNlbGwgW3Nob3dPcGVyYXRvcnNdPVwiZGF0YS5Jc1Nob3dHcmlkRmlsdGVyT3BlcmF0b3JcIiBbY29sdW1uXT1cImNvbHVtblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZpbHRlcl09XCJmaWx0ZXJcIiBvcGVyYXRvcj1cImx0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItbHQtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItbHQtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1sdGUtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItbHRlLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItZ3Qtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItZ3Qtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1ndGUtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItZ3RlLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItaXNudWxsLW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWlzbnVsbC1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWlzbm90bnVsbC1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1pc25vdG51bGwtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgIDwva2VuZG8tZ3JpZC1kYXRlLWZpbHRlci1jZWxsPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoRGVmYXVsdD5cclxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUga2VuZG9HcmlkRmlsdGVyQ2VsbFRlbXBsYXRlIGxldC1maWx0ZXIgbGV0LWNvbHVtbj1cImNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgPGtlbmRvLWdyaWQtc3RyaW5nLWZpbHRlci1jZWxsIFtzaG93T3BlcmF0b3JzXT1cImRhdGEuSXNTaG93R3JpZEZpbHRlck9wZXJhdG9yXCIgW2NvbHVtbl09XCJjb2x1bW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmaWx0ZXJdPVwiZmlsdGVyXCIgb3BlcmF0b3I9XCJjb250YWluc1wiPlxyXG4gICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWNvbnRhaW5zLW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWNvbnRhaW5zLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWVxLW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWVxLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLW5lcS1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1uZXEtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItc3RhcnRzd2l0aC1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1zdGFydHN3aXRoLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWVuZHN3aXRoLW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWVuZHN3aXRoLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWlzbnVsbC1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1pc251bGwtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItaXNub3RudWxsLW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWlzbm90bnVsbC1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgIDwva2VuZG8tZ3JpZC1zdHJpbmctZmlsdGVyLWNlbGw+XHJcbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwhLS0gR3JpZCBFZGl0IFRlbXBsYXRlIC0tPlxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlIGtlbmRvR3JpZEVkaXRUZW1wbGF0ZSAqbmdJZj1cImRhdGEuRW5hYmxlR3JpZENvbW1hbmQgXCIgbGV0LWRhdGFJdGVtPVwiZGF0YUl0ZW1cIiBsZXQtY29sdW1uPVwiY29sXCJcclxuICAgICAgICAgICAgICAgICAgICAgICBsZXQtZm9ybUdyb3VwPVwiZm9ybUdyb3VwXCIgbGV0LWlzTmV3PVwiaXNOZXdcIj5cclxuICAgICAgICAgICAgPGRpdiBbbmdTd2l0Y2hdPVwiY29sLmZpZWxkVHlwZVwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cIidudW1iZXInXCI+XHJcbiAgICAgICAgICAgICAgICA8a2VuZG8tbnVtZXJpY3RleHRib3ggI2NlbGxBbmNob3IgW2Zvcm1Db250cm9sXT1cImZvcm1Hcm91cC5nZXQoY29sLmZpZWxkKVwiPjwva2VuZG8tbnVtZXJpY3RleHRib3g+XHJcbiAgICAgICAgICAgICAgICA8a2VuZG8tcG9wdXAgW2FuY2hvcl09XCJjZWxsQW5jaG9yLm51bWVyaWNJbnB1dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmb3JtR3JvdXAuZ2V0KGNvbC5maWVsZCkuaW52YWxpZCAmJiAhKGlzTmV3ICYmIGZvcm1Hcm91cC5nZXQoY29sLmZpZWxkKS51bnRvdWNoZWQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3B1cENsYXNzPVwiay13aWRnZXQgay10b29sdGlwIGstdG9vbHRpcC12YWxpZGF0aW9uIGstaW52YWxpZC1tc2dcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwicGFkZGluZy1sZWZ0OiAycHg7IG9wYWNpdHk6IDAuNTtcIj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJrLWljb24gay1pLXdhcm5pbmdcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDxpb24tbGFiZWwgc3R5bGU9XCJwYWRkaW5nLXRvcDogMXB4OyBwYWRkaW5nLWxlZnQ6IDNweDtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZm9ybUdyb3VwLmdldChjb2wuZmllbGQpLmludmFsaWQgJiYgIWZvcm1Hcm91cC5nZXQoY29sLmZpZWxkKS51bnRvdWNoZWQgJiYgZm9ybUdyb3VwLmdldChjb2wuZmllbGQpLmVycm9ycz8ucmVxdWlyZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyBjb2wuTmFtZSB9fSByZXF1aXJlZC5cclxuICAgICAgICAgICAgICAgICAgPC9pb24tbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgIDxpb24tbGFiZWwgc3R5bGU9XCJwYWRkaW5nLXRvcDogMXB4OyBwYWRkaW5nLWxlZnQ6IDNweDtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZm9ybUdyb3VwLmdldChjb2wuZmllbGQpLmludmFsaWQgJiYgIWZvcm1Hcm91cC5nZXQoY29sLmZpZWxkKS51bnRvdWNoZWQgJiYgZm9ybUdyb3VwLmdldChjb2wuZmllbGQpLmVycm9ycz8ucGF0dGVyblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IGNvbC5WYWxpZGF0b3JNZXNzYWdlID8gY29sLlZhbGlkYXRvck1lc3NhZ2UgOiBcIlBsZWFzZSBjaGVjayB0aGUgaW5wdXQgdmFsdWUuXCIgfX1cclxuICAgICAgICAgICAgICAgICAgPC9pb24tbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8L2tlbmRvLXBvcHVwPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoRGVmYXVsdD5cclxuICAgICAgICAgICAgICAgIDxrZW5kby10ZXh0Ym94ICNjZWxsQW5jaG9yIFtmb3JtQ29udHJvbF09XCJmb3JtR3JvdXAuZ2V0KGNvbC5maWVsZClcIj48L2tlbmRvLXRleHRib3g+XHJcbiAgICAgICAgICAgICAgICA8a2VuZG8tcG9wdXAgW2FuY2hvcl09XCJjZWxsQW5jaG9yLmlucHV0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImZvcm1Hcm91cC5nZXQoY29sLmZpZWxkKS5pbnZhbGlkICYmICEoaXNOZXcgJiYgZm9ybUdyb3VwLmdldChjb2wuZmllbGQpLnVudG91Y2hlZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcHVwQ2xhc3M9XCJrLXdpZGdldCBrLXRvb2x0aXAgay10b29sdGlwLXZhbGlkYXRpb24gay1pbnZhbGlkLW1zZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJwYWRkaW5nLWxlZnQ6IDJweDsgb3BhY2l0eTogMC41O1wiPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImstaWNvbiBrLWktd2FybmluZ1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPCEtLTxpb24tbGFiZWwgc3R5bGU9XCJwYWRkaW5nLXRvcDogMXB4OyBwYWRkaW5nLWxlZnQ6IDNweDtcIj57eyBjb2wuTmFtZSB9fSBpcyByZXF1aXJlZC48L2lvbi1sYWJlbD4tLT5cclxuICAgICAgICAgICAgICAgICAgLWxcclxuXHJcbiAgICAgICAgICAgICAgICAgIDxpb24tbGFiZWwgc3R5bGU9XCJwYWRkaW5nLXRvcDogMXB4OyBwYWRkaW5nLWxlZnQ6IDNweDtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZm9ybUdyb3VwLmdldChjb2wuZmllbGQpLmludmFsaWQgJiYgIWZvcm1Hcm91cC5nZXQoY29sLmZpZWxkKS51bnRvdWNoZWQgJiYgZm9ybUdyb3VwLmdldChjb2wuZmllbGQpLmVycm9ycz8ucmVxdWlyZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyBjb2wuTmFtZSB9fSByZXF1aXJlZC5cclxuICAgICAgICAgICAgICAgICAgPC9pb24tbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgIDxpb24tbGFiZWwgc3R5bGU9XCJwYWRkaW5nLXRvcDogMXB4OyBwYWRkaW5nLWxlZnQ6IDNweDtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZm9ybUdyb3VwLmdldChjb2wuZmllbGQpLmludmFsaWQgJiYgIWZvcm1Hcm91cC5nZXQoY29sLmZpZWxkKS51bnRvdWNoZWQgJiYgZm9ybUdyb3VwLmdldChjb2wuZmllbGQpLmVycm9ycz8ucGF0dGVyblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IGNvbC5WYWxpZGF0b3JNZXNzYWdlID8gY29sLlZhbGlkYXRvck1lc3NhZ2UgOiBcIlBsZWFzZSBjaGVjayB0aGUgaW5wdXQgdmFsdWUuXCIgfX1cclxuICAgICAgICAgICAgICAgICAgPC9pb24tbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8L2tlbmRvLXBvcHVwPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICA8bmctdGVtcGxhdGUga2VuZG9HcmlkQ2VsbFRlbXBsYXRlIGxldC1kYXRhSXRlbSBsZXQtcm93SW5kZXg9XCJyb3dJbmRleFwiPlxyXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luOiAxcHggMDtcIiAqbmdJZj1cIiFjb2wuY2xpY2thYmxlSWNvbnMgJiYgY29sLmlzRWRpdGFibGVJbkdyaWQgIT09IHRydWVcIlxyXG4gICAgICAgICAgICAgICAgIFtuZ1N3aXRjaF09XCJjb2wuZmllbGRUeXBlXCIgW25nQ2xhc3NdPVwiZ2V0Q2xhc3MoZGF0YUl0ZW0sIGNvbClcIiBbc3R5bGVdPVwiZ2V0Q2VsbFN0eWxlKGNvbCwgZGF0YUl0ZW0pXCIgW2F0dHIuZGF0YS1pZF09XCJkYXRhSXRlbS5JZFwiIFthdHRyLmNvbHVtbi1uYW1lXT1cImNvbC5maWVsZFwiXHJcbiAgICAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwic2hvd1BvcE92ZXIoY29sLCAkZXZlbnQpXCIgKG1vdXNlbGVhdmUpPVwiY2xvc2VQb3BPdmVyKCRldmVudClcIj5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3pkYXRlJ1wiPlxyXG4gICAgICAgICAgICAgICAge3sgZGF0YUl0ZW1bY29sLmZpZWxkXSB8IGRhdGU6ICdkZC9NTS95eXl5JyB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3p0aW1lJ1wiPlxyXG4gICAgICAgICAgICAgICAge3sgZGF0YUl0ZW1bY29sLmZpZWxkXSB8IGRhdGU6ICdISDptbScgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIid6c2hvcnRkYXRlJ1wiPlxyXG4gICAgICAgICAgICAgICAge3sgZGF0YUl0ZW1bY29sLmZpZWxkXSB8IGRhdGU6ICdNTU0geXl5eScgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIid6ZGF0ZXRpbWUnXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBkYXRhSXRlbVtjb2wuZmllbGRdIHwgZGF0ZTogJ2RkL01NL3l5eXkgaGg6bW06c3MgYWEnIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInenVpZGF0ZXRpbWUnXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBkYXRhSXRlbVtjb2wuZmllbGRdIHwgZGF0ZTogJ2RkL01NL3l5eXkgaGg6bW06c3MgYWEnIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInbnVtYmVyJ1wiPlxyXG4gICAgICAgICAgICAgICAge3sgZGF0YUl0ZW1bY29sLmZpZWxkXSB8IG51bWJlciB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ2N1cnJlbmN5J1wiPlxyXG4gICAgICAgICAgICAgICAge3sgZGF0YUl0ZW1bY29sLmZpZWxkXSB8IG51bWJlcjogZ2V0Rm9ybWF0KGNvbCwgJzEuMi0yJykgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIid6bnVtZXJpYydcIj5cclxuICAgICAgICAgICAgICAgIHt7IGRhdGFJdGVtW2NvbC5maWVsZF0gfCBudW1iZXI6IGdldEZvcm1hdChjb2wpIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCIndXJsJ1wiIHN0eWxlPVwiY29sb3I6IGJsdWU7IGN1cnNvcjogcG9pbnRlcjsgdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTtcIj5cclxuICAgICAgICAgICAgICAgIHt7IGRhdGFJdGVtW2NvbC5maWVsZF0gfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoRGVmYXVsdD5cclxuICAgICAgICAgICAgICAgIDxkaXYgW25nU3dpdGNoXT1cImNlbGxTdHlsZUNvbmRpdGlvbihjb2wsIGRhdGFJdGVtW2NvbC5maWVsZF0pXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9dHJ1ZT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2VsbFN0eWxlQ29uZGl0aW9uRGVmYXVsdFwiIFtzdHlsZV09XCJzZXRDZWxsU3R5bGVDb25kaXRpb24oY29sLCBkYXRhSXRlbVtjb2wuZmllbGRdKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3sgZGF0YUl0ZW1bY29sLmZpZWxkXSB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaERlZmF1bHQ+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgZGF0YUl0ZW1bY29sLmZpZWxkXSB9fVxyXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8IS0tIDxzcGFuICpuZ0lmPVwiISFjb2wubmF2aWdhdGVUb1wiIChjbGljayk9XCJvbk5hdmlnYXRlVG8oJGV2ZW50LCBjb2wsIGRhdGFJdGVtLCBkYXRhSXRlbVtjb2wuZmllbGRdKVwiPlxyXG4gICAgICAgICAgICA8aW9uLWJ1dHRvbiBjb2xvcj1cImxpZ2h0XCIgc2l6ZT1cInNtYWxsXCI+XHJcbiAgICAgICAgICAgIHt7IGNvbC5DbGlja2FibGVJY29ucyB9fVxyXG4gICAgICAgICAgICA8aW9uLWljb24gc2xvdD0gXCJlbmRcIiBuYW1lPVwiYXJyb3ctZm9yd2FyZFwiPjwvaW9uLWljb24+XHJcbiAgICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cclxuICAgICAgICAgICAgPC9zcGFuPiAtLT5cclxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbjogNXB4IDA7XCIgKm5nSWY9XCJjb2wuaXNFZGl0YWJsZUluR3JpZCA9PT0gdHJ1ZSAmJiBpbmxpbmVFZGl0ZWRGb3JtR3JvdXBzXCIgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGU1XCJcclxuICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJnZXRDbGFzcyhkYXRhSXRlbSwgY29sKVwiIGNsYXNzPVwiZTF0YWctc3R5bGU1XCI+XHJcbiAgICAgICAgICAgICAgPGFwcC16aW5wdXQtY29udGFpbmVyIFtkYXRhXT1cImdldElubGluZUZpZWxkKGNvbC5maWVsZClcIiBbZ3JvdXBdPVwiZ3JvdXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybV09XCJnZXRJbmxpbmVGb3JtKGRhdGFJdGVtLCByb3dJbmRleClcIiBbY29udGFpbmVyRmllbGRdPVwiY29udGFpbmVyRmllbGRcIiBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZTZcIiBjbGFzcz1cImUxdGFnLXN0eWxlNlwiPlxyXG4gICAgICAgICAgICAgIDwvYXBwLXppbnB1dC1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8c3BhbiBzdHlsZT1cIm1hcmdpbi10b3A6IDEwcHg7XCIgKm5nRm9yPVwibGV0IGljb24gb2YgY29sLmNsaWNrYWJsZUljb25zXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gW25nQ2xhc3NdPVwiaWNvbi5DbGFzcyA/IGljb24uQ2xhc3MgOiAnJ1wiICpuZ0lmPVwiISFpY29uICYmICghIWRhdGFJdGVtLldGU19TdGF0dXNDb2RlICYmICEhaWNvbilcclxuICAgICAgICAgICAgICA/IGRhdGFJdGVtLldGU19TdGF0dXNDb2RlICE9PSBpY29uLldGU19TdGF0dXNDb2RlXHJcbiAgICAgICAgICAgICAgOiB0cnVlO1xyXG4gICAgICAgICAgICBlbHNlIGRpc2FibGVkQnV0dG9uXCIgKGNsaWNrKT1cIm9uQnRuQ2xpY2soJGV2ZW50LCBpY29uLCBkYXRhSXRlbSwgZGF0YUl0ZW1bY29sLmZpZWxkXSlcIj5cclxuICAgICAgICAgICAgICAgIHt7aWNvbi5OYW1lIHx8IGRhdGFJdGVtW2NvbC5maWVsZF19fSA8ZmEtaWNvbiBbaWNvbl09XCJpY29uLkljb25cIiBzdHlsZT1cInBhZGRpbmc6IDRweCA2cHg7XCI+XHJcbiAgICAgICAgICAgICAgICA8L2ZhLWljb24+XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGlzYWJsZWRCdXR0b24+XHJcbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8IS0tIDxzdHJvbmc+e3sgZGF0YUl0ZW1bY29sLmZpZWxkXSB9fTwvc3Ryb25nPiAtLT5cclxuICAgICAgICAgICAgPCEtLSA8c3BhbiBjbGFzcz1cInt7ZGF0YUl0ZW0uRGlzY29udGludWVkID8gJ2Rpc2NvbnRpbnVlZCcgOiAnYWN0aXZlJ319XCI+XHJcbiAgICAgICAgICAgICAge3tkYXRhSXRlbS5EaXNjb250aW51ZWQgPyBcImRpc2NvbnRpbnVlZFwiIDogXCJhY3RpdmVcIn19XHJcbiAgICAgICAgICAgIDwvc3Bhbj4gLS0+XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlIGtlbmRvR3JpZEZvb3RlclRlbXBsYXRlIGxldC1jb2x1bW4gbGV0LWNvbHVtbkluZGV4PVwiY29sdW1uSW5kZXhcIiAqbmdJZj1cImRhdGEuRW5hYmxlQWdncmVnYXRlXCI+XHJcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW46IDVweCAwO1wiIFtuZ1N3aXRjaF09XCJjb2wuZmllbGRUeXBlXCIgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGU3XCIgY2xhc3M9XCJlMXRhZy1zdHlsZTdcIj5cclxuICAgICAgICAgICAgICB7e2NvbC5hZ2dyZWdhdGVUeXBlfX1cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3pkYXRlJ1wiPlxyXG4gICAgICAgICAgICAgICAge3sgY29sLmFnZ3JlZ2F0ZVZhbHVlIHwgZGF0ZTogJ2RkL01NL3l5eXknIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInenRpbWUnXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBjb2wuYWdncmVnYXRlVmFsdWUgfCBkYXRlOiAnSEg6bW0nIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInenNob3J0ZGF0ZSdcIj5cclxuICAgICAgICAgICAgICAgIHt7IGNvbC5hZ2dyZWdhdGVWYWx1ZSB8IGRhdGU6ICdNTU0geXl5eScgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIid6ZGF0ZXRpbWUnXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBjb2wuYWdncmVnYXRlVmFsdWUgfCBkYXRlOiAnZGQvTU0veXl5eSBoaDptbTpzcyBhYScgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIid6dWlkYXRldGltZSdcIj5cclxuICAgICAgICAgICAgICAgIHt7IGNvbC5hZ2dyZWdhdGVWYWx1ZSB8IGRhdGU6ICdkZC9NTS95eXl5IGhoOm1tOnNzIGFhJyB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ251bWJlcidcIj5cclxuICAgICAgICAgICAgICAgIHt7IGNvbC5hZ2dyZWdhdGVWYWx1ZSB8IG51bWJlciB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ2N1cnJlbmN5J1wiPlxyXG4gICAgICAgICAgICAgICAge3sgY29sLmFnZ3JlZ2F0ZVZhbHVlIHwgbnVtYmVyOiBnZXRGb3JtYXQoY29sLCAnMS4yLjInKSB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3pudW1lcmljJ1wiPlxyXG4gICAgICAgICAgICAgICAge3sgY29sLmFnZ3JlZ2F0ZVZhbHVlIHwgbnVtYmVyOiBnZXRGb3JtYXQoY29sKSB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3VybCdcIiBzdHlsZT1cImNvbG9yOiBibHVlOyBjdXJzb3I6IHBvaW50ZXI7IHRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7XCI+XHJcbiAgICAgICAgICAgICAgICB7eyBjb2wuYWdncmVnYXRlVmFsdWUgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoRGVmYXVsdD5cclxuICAgICAgICAgICAgICAgIHt7IGNvbC5hZ2dyZWdhdGVWYWx1ZSB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwva2VuZG8tZ3JpZC1jb2x1bW4+XHJcbiAgICAgICAgPGtlbmRvLWdyaWQtY29tbWFuZC1jb2x1bW4gKm5nSWY9XCJkYXRhLkVuYWJsZUdyaWRDb21tYW5kXCIgd2lkdGg9XCIxODBcIiBbY29sdW1uTWVudV09XCJmYWxzZVwiIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlOFwiIGNsYXNzPVwiZTF0YWctc3R5bGU4XCI+XHJcbiAgICAgICAgICA8bmctdGVtcGxhdGUga2VuZG9HcmlkQ2VsbFRlbXBsYXRlIGxldC1pc05ldz1cImlzTmV3XCI+XHJcbiAgICAgICAgICAgIDxidXR0b24ga2VuZG9HcmlkU2F2ZUNvbW1hbmQ+XHJcbiAgICAgICAgICAgICAge3sgaXNOZXcgPyAnU2F2ZScgOiAnVXBkYXRlJyB9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBrZW5kb0dyaWRDYW5jZWxDb21tYW5kIFtwcmltYXJ5XT1cInRydWVcIj5cclxuICAgICAgICAgICAgICB7eyBpc05ldyA/ICdEaXNjYXJkIGNoYW5nZXMnIDogJ0NhbmNlbCcgfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24ga2VuZG9HcmlkRWRpdENvbW1hbmQ+XHJcbiAgICAgICAgICAgICAge3sgXCJFZGl0XCIgfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24ga2VuZG9HcmlkUmVtb3ZlQ29tbWFuZD5cclxuICAgICAgICAgICAgICB7eyBcIlJlbW92ZVwiIH19XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8L2tlbmRvLWdyaWQtY29tbWFuZC1jb2x1bW4+XHJcbiAgICAgICAgPGtlbmRvLWdyaWQtZXhjZWwgZmlsZU5hbWU9XCJFeHBvcnQueGxzeFwiIFtmZXRjaERhdGFdPVwiYWxsUmVzdWx0c1wiPjwva2VuZG8tZ3JpZC1leGNlbD5cclxuICAgICAgPC9rZW5kby1ncmlkPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
1001
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemdyaWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvemdyaWQvemdyaWQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvemdyaWQvemdyaWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQXFCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4RSxPQUFPLEVBQUUsU0FBUyxFQUFlLFVBQVUsRUFBRSxXQUFXLEVBQWUsTUFBTSxnQkFBZ0IsQ0FBQztBQUc5Riw2QkFBNkI7QUFFN0IsOEJBQThCO0FBQzlCLE9BQU8sRUFBYyxFQUFFLEVBQUUsT0FBTyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUM3RCxPQUFPLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHaEUsT0FBTyxFQUF5QixPQUFPLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM1RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQWVuRSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNyRixPQUFPLEVBRUcsTUFBTSxFQUFjLGdCQUFnQixFQUU3QyxNQUFNLGlCQUFpQixDQUFDO0FBRXpCLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBMkJsRixNQUFNLE9BQU8sY0FBZSxTQUFRLG9CQUFvQjtJQXFEdEQsWUFDRSxXQUE4QixFQUN0QixjQUE4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LENBQUM7UUFDN0MsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDekIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7U0FDM0M7SUFDSCxDQUFDO0lBRU8sNEJBQTRCLENBQUMsS0FBYTtRQUNoRCxRQUFRLEtBQUssQ0FBQyxJQUFJLEVBQUU7WUFDbEIsS0FBSyxRQUFRLENBQUM7WUFDZCxLQUFLLFNBQVMsQ0FBQztZQUNmLEtBQUssTUFBTSxDQUFDO1lBQ1osS0FBSyxPQUFPLENBQUM7WUFDYixLQUFLLFVBQVUsQ0FBQztZQUNoQixLQUFLLEtBQUssQ0FBQztZQUNYLEtBQUssTUFBTSxDQUFDO1lBQ1osS0FBSyxLQUFLLENBQUM7WUFDWCxLQUFLLFVBQVUsQ0FBQztZQUNoQixLQUFLLFVBQVU7Z0JBQ2IsSUFBSSxDQUFDLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxFQUFFO29CQUN0QyxPQUFPLFVBQVUsQ0FBQztpQkFDbkI7Z0JBQ0QsT0FBTyxJQUFJLENBQUM7WUFDZDtnQkFDRSxPQUFPLEdBQUcsQ0FBQztTQUNkO0lBQ0gsQ0FBQzs7NEdBeG9DVSxjQUFjO2dHQUFkLGNBQWMsNkZBQ2QsZ0JBQWdCLG1GQUNoQix5QkFBeUIscUZDakV0QyxrNHdCQXNYQSx3OGtCRDNUYztRQUNWLDRCQUE0QjtLQUM3Qjs0RkFFVSxjQUFjO2tCQVIxQixTQUFTOytCQUNFLFdBQVcsY0FHVDt3QkFDViw0QkFBNEI7cUJBQzdCO3dZQUdtQyxVQUFVO3NCQUE3QyxTQUFTO3VCQUFDLGdCQUFnQjtnQkFDNkIsZ0JBQWdCO3NCQUF2RSxTQUFTO3VCQUFDLHlCQUF5QixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbIi8qKioqKioqKioqIEFuZ3VsYXIgKioqKioqKioqKi9cclxuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIE9uRGVzdHJveSwgVmlld0NoaWxkIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgRm9ybUdyb3VwLCBGb3JtQnVpbGRlciwgVmFsaWRhdG9ycywgRm9ybUNvbnRyb2wsIFZhbGlkYXRvckZuIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xyXG5cclxuLyoqKioqKioqKiogSW9uaWMgKioqKioqKioqKi9cclxuXHJcbi8qKioqKioqKioqIFBsdWdpbiAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgdGFwLCBtYXAsIHN3aXRjaE1hcCwgY29uY2F0TWFwIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XHJcbmltcG9ydCB7IEV4Y2VsRXhwb3J0RGF0YSB9IGZyb20gJ0Bwcm9ncmVzcy9rZW5kby1hbmd1bGFyLWV4Y2VsLWV4cG9ydCc7XHJcbmltcG9ydCB7IEdyaWRJdGVtLCBTZWxlY3RhYmxlU2V0dGluZ3MgfSBmcm9tICdAcHJvZ3Jlc3Mva2VuZG8tYW5ndWxhci1ncmlkJztcclxuaW1wb3J0IHsgU29ydERlc2NyaXB0b3IsIFN0YXRlLCBwcm9jZXNzIH0gZnJvbSBcIkBwcm9ncmVzcy9rZW5kby1kYXRhLXF1ZXJ5XCI7XHJcbmltcG9ydCB7IFRvb2x0aXBEaXJlY3RpdmUgfSBmcm9tICdAcHJvZ3Jlc3Mva2VuZG8tYW5ndWxhci10b29sdGlwJztcclxuaW1wb3J0IHtcclxuICBHcmlkRGF0YVJlc3VsdCxcclxuICBEYXRhU3RhdGVDaGFuZ2VFdmVudCxcclxuICBQYWdlQ2hhbmdlRXZlbnQsXHJcbiAgQ2VsbENsaWNrRXZlbnQsXHJcbiAgR3JpZENvbXBvbmVudCxcclxuICBSb3dBcmdzLFxyXG4gIENvbHVtblJlb3JkZXJFdmVudFxyXG59IGZyb20gXCJAcHJvZ3Jlc3Mva2VuZG8tYW5ndWxhci1ncmlkXCI7XHJcblxyXG4vKioqKioqKioqKiBDb21wb25lbnQgJiBTZXJ2aWNlICoqKioqKioqKiovXHJcbi8vIGltcG9ydCB7IGVudmlyb25tZW50IH0gZnJvbSBcInNyYy9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnRcIjtcclxuaW1wb3J0IHsgTWFpblNlcnZpY2UgfSBmcm9tIFwiLi4vc2VydmljZXMvbWFpbi5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFpHcmlkQmluZGluZ0RpcmVjdGl2ZSB9IGZyb20gXCIuL3pncmlkLmJpbmRpbmcuZGlyZWN0aXZlXCI7XHJcbmltcG9ydCB7IEVsZW1lbnRDb250YWluZXJEaXJlY3RpdmUgfSBmcm9tIFwiLi4vZGlyZWN0aXZlcy9lbGVtZW50Y29udGFpbmVyLmRpcmVjdGl2ZVwiO1xyXG5pbXBvcnQge1xyXG4gIEF1dGhTZXJ2aWNlLCBXZWJBcGlTZXJ2aWNlLCBUb2FzdFNlcnZpY2UsIEdyaWRDYWNoaW5nLFxyXG4gIFpGaWVsZCwgWkdyb3VwLCBaQ29tcG9uZW50LCBaQ29tcG9uZW50SGVscGVyLCBaQ29tcG9uZW50T3V0cHV0RXZlbnQsIFpDb3JlU2VydmljZSxcclxuICBaR3JpZFN0YXRlUGVyc2lzdGluZ1NlcnZpY2UsIFpHcmlkUG9zdEFwaVBhcmFtcywgWkdyaWRTZXR0aW5ncywgWkdyaWRDb2x1bW5TZXR0aW5ncywgWkdyaWRDdXN0b21Db2x1bW4sIFN0b3JhZ2VTZXNzaW9uU2VydmljZVxyXG59IGZyb20gJ21taGdsb2JhbC16Y29yZSc7XHJcbmltcG9ydCB7IFpDb21wb25lbnRTZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL3pjb21wb25lbnQuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBEYXRhTGlzdGluZ0ZpZWxkQmFzZSB9IGZyb20gXCIuLi9jb21wb25lbnRzL2RhdGFsaXN0aW5nZmllbGRiYXNlLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBoaWRlQW5kU2hvd1ZlcnRpY2FsQW5pbWF0aW9uIH0gZnJvbSBcIi4uL2FuaW1hdGlvbnMvY29tcG9uZW50LWFuaW1hdGlvbnNcIjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgWkdyaWQge1xyXG4gIHBhcmFtczogWkdyaWRQb3N0QXBpUGFyYW1zO1xyXG4gIHN0YXRlOiBTdGF0ZTtcclxuICBjb2x1bW5zOiBhbnlbXTtcclxuICBwYWdpbmF0aW9uQXBpUG9zdFVybDogc3RyaW5nO1xyXG4gIGRhdGE6IFpGaWVsZDtcclxuICBncm91cDogWkdyb3VwO1xyXG4gIHpncmlkOiBaR3JpZEJpbmRpbmdEaXJlY3RpdmU7XHJcbiAgaW5saW5lRWRpdGVkRm9ybUdyb3VwczogRm9ybUdyb3VwO1xyXG4gIGdldEdyaWREYXRhOiAoKSA9PiBhbnlbXTtcclxuICBnZXREYXRhOiAoKSA9PiB2b2lkO1xyXG4gIGNsZWFyRGF0YTogKCkgPT4gdm9pZDtcclxuICBzZXREYXRhOiAoZGF0YTogYW55KSA9PiB2b2lkO1xyXG4gIHNldENvbHVtbnM6IChjb2x1bW5GaWVsZHNOYW1lOiBzdHJpbmcsIGNvbHVtbnM6IEFycmF5PFpHcmlkQ3VzdG9tQ29sdW1uPikgPT4gdm9pZDtcclxufVxyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBcImFwcC16Z3JpZFwiLFxyXG4gIHRlbXBsYXRlVXJsOiBcIi4vemdyaWQuY29tcG9uZW50Lmh0bWxcIixcclxuICBzdHlsZVVybHM6IFtcIi4vemdyaWQuY29tcG9uZW50LnNjc3NcIl0sXHJcbiAgYW5pbWF0aW9uczogW1xyXG4gICAgaGlkZUFuZFNob3dWZXJ0aWNhbEFuaW1hdGlvblxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIFpncmlkQ29tcG9uZW50IGV4dGVuZHMgRGF0YUxpc3RpbmdGaWVsZEJhc2UgaW1wbGVtZW50cyBaQ29tcG9uZW50LCBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgQFZpZXdDaGlsZChUb29sdGlwRGlyZWN0aXZlKSBwdWJsaWMgdG9vbHRpcERpcjogVG9vbHRpcERpcmVjdGl2ZTtcclxuICBAVmlld0NoaWxkKEVsZW1lbnRDb250YWluZXJEaXJlY3RpdmUsIHsgc3RhdGljOiB0cnVlIH0pIGVsZW1lbnRDb250YWluZXIhOiBFbGVtZW50Q29udGFpbmVyRGlyZWN0aXZlO1xyXG4gIC8vIEBWaWV3Q2hpbGQoWkdyaWRCaW5kaW5nRGlyZWN0aXZlLCB7IHN0YXRpYzogZmFsc2UgfSkgemdyaWQ6IFpHcmlkQmluZGluZ0RpcmVjdGl2ZTtcclxuICB6Z3JpZDogYW55ID0gbnVsbDtcclxuICBvYXV0aFVybDogc3RyaW5nID0gbnVsbDtcclxuICBncmlkRGF0YTogR3JpZERhdGFSZXN1bHQ7XHJcbiAgc2VsZWN0YWJsZVNldHRpbmdzOiBTZWxlY3RhYmxlU2V0dGluZ3M7XHJcbiAgbXlTZWxlY3Rpb246IGFueVtdID0gW107XHJcbiAgLy8gaW5saW5lRWRpdGVkRm9ybUdyb3VwczogRm9ybUdyb3VwO1xyXG4gIGlubGluZUVkaXRlZEZvcm1Hcm91cHM6IHt9O1xyXG4gIHB1YmxpYyBmb3JtR3JvdXA6IEZvcm1Hcm91cDsgLy8gZm9yIGtlbmRvIGdyaWQgYnVpbHQtaW5cclxuICBwdWJsaWMgcHJldmlvdXNOZXh0OiBib29sZWFuO1xyXG5cclxuICBwdWJsaWMgZ3JpZEJ0bjtcclxuICBwdWJsaWMgcGFnZWFibGU6IGFueSA9IGZhbHNlO1xyXG4gIHB1YmxpYyBmaWx0ZXJHcm91cCA9IG5ldyBaR3JvdXAoKTtcclxuICBwdWJsaWMgYWR2ZmlsdGVyR3JvdXAgPSBuZXcgWkdyb3VwKCk7XHJcbiAgcHVibGljIGlzU2hvd0FkdkZpbHRlciA9IGZhbHNlO1xyXG5cclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uLCBuby11bmRlcnNjb3JlLWRhbmdsZSwgaWQtYmxhY2tsaXN0LCBpZC1tYXRjaFxyXG4gIF9zdGF0ZTogU3RhdGUgPSB7XHJcbiAgICBza2lwOiAwLFxyXG4gICAgdGFrZTogMTBcclxuICB9O1xyXG5cclxuICBwYXJhbXM6IFpHcmlkUG9zdEFwaVBhcmFtcyA9IHtcclxuICAgIHJlZmVySWQ6IG51bGwsXHJcbiAgICBwYWdlTm86IDAsXHJcbiAgICBwYWdlU2l6ZTogMjAsXHJcbiAgICBzb3J0Q29sdW1uTmFtZTogXCJcIixcclxuICAgIHNvcnRPcmRlcjogXCJcIixcclxuICAgIHNvcnRDb2x1bW5OYW1lczogW10sXHJcbiAgICBzb3J0T3JkZXJzOiBbXSxcclxuICAgIGZpbHRlclBhcmFtczogW10sXHJcbiAgICBwYXJhbWV0ZXJzOiBcIlwiLFxyXG4gICAgZmlsdGVyczogXCJcIixcclxuICAgIGNvbHVtbnM6IFwiXCIsXHJcbiAgICBncmFudFR5cGU6IDRcclxuICB9O1xyXG5cclxuICBncmlkU3ViamVjdDogU3ViamVjdDxhbnk+ID0gbmV3IFN1YmplY3Q8YW55PigpO1xyXG4gIHByaXZhdGUgZ0RhdGE6IGFueTtcclxuXHJcbiAgY29sdW1uczogYW55W107XHJcbiAgZWRpdGFibGVDb2x1bW5zOiBhbnlbXTtcclxuICBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcclxuICBwYWdlU2l6ZXM6IGJvb2xlYW4gfCBhbnlbXTtcclxuICBncmlkU3RvcmFnZUtleTogc3RyaW5nO1xyXG4gIGdyaWREZWZhdWx0U3RhdGVFeGlzdDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGlzTmV3OiBib29sZWFuID0gdHJ1ZTtcclxuICBwcml2YXRlIGVkaXRlZFJvd0luZGV4OiBudW1iZXI7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgY29tcFNlcnZpY2U6IFpDb21wb25lbnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsXHJcbiAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSxcclxuICAgIHByaXZhdGUgd2ViQXBpU2VydmljZTogV2ViQXBpU2VydmljZSxcclxuICAgIHByaXZhdGUgekdyaWRTdGF0ZVBlcnNpc3RpbmdTZXJ2aWNlOiBaR3JpZFN0YXRlUGVyc2lzdGluZ1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHRvYXN0U2VydmljZTogVG9hc3RTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB6Y29yZVNlcnZpY2U6IFpDb3JlU2VydmljZSxcclxuICAgIHByaXZhdGUgc3RvcmFnZVNlcnZpY2U6IFN0b3JhZ2VTZXNzaW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgbWFpblNlcnZpY2U6IE1haW5TZXJ2aWNlLFxyXG4gICkge1xyXG4gICAgc3VwZXIoY29tcFNlcnZpY2UpO1xyXG4gICAgdGhpcy5vYXV0aFVybCA9IHRoaXMuemNvcmVTZXJ2aWNlLmdldEVudmlyb25tZW50KCkuZTFPYXV0aFVybCArIFwiL1wiO1xyXG4gICAgdGhpcy5hbGxSZXN1bHRzID0gdGhpcy5hbGxSZXN1bHRzLmJpbmQodGhpcyk7XHJcbiAgICB0aGlzLnJlZnJlc2hEYXRhID0gdGhpcy5yZWZyZXNoRGF0YS5iaW5kKHRoaXMpO1xyXG4gICAgdGhpcy5jbGVhckRhdGEgPSB0aGlzLmNsZWFyRGF0YS5iaW5kKHRoaXMpO1xyXG4gICAgdGhpcy5zYXZlR3JpZFNldHRpbmdzID0gdGhpcy5zYXZlR3JpZFNldHRpbmdzLmJpbmQodGhpcyk7XHJcbiAgICB0aGlzLnJlc3RvcmVHcmlkU2V0dGluZ3MgPSB0aGlzLnJlc3RvcmVHcmlkU2V0dGluZ3MuYmluZCh0aGlzKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgLy8gR3JpZCBzYXZlZCBzZXR0aW5nIGtleShVc2VkIGluIENvb2tpZVN0b3JlICYgTG9jYWxTdG9yYWdlKVxyXG4gICAgLy8gdGhpcy5hdXRoU2VydmljZS51c2VySXNBdXRoZW50aWNhdGVkLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAvLyAgIHRoaXMuZ3JpZFN0b3JhZ2VLZXkgPSAnaW9uaWMtZmllbGQ6OicgKyB0aGlzLmF1dGhTZXJ2aWNlLmUxVG9rZW4udXNlck5hbWUgKyAnOjonICsgdGhpcy5kYXRhLk5hbWUgKyAnOjonICsgdGhpcy5yb3V0ZXIudXJsO1xyXG4gICAgLy8gfSk7XHJcbiAgICBzdXBlci5pbml0Q29tcG9uZW50KClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgLy8gY29uY2F0TWFwKCgpID0+IHtcclxuICAgICAgICAvLyAgIC8vIHRyeSBnZXQgZ3JpZHNldHRpbmcgZnJvbSBjb29raWVzdG9yZVxyXG4gICAgICAgIC8vICAgcmV0dXJuIHRoaXMubWFpblNlcnZpY2UuY29va2llU3RvcmVHZXQodGhpcy5ncmlkU3RvcmFnZUtleSwgdGhpcy5hdXRoU2VydmljZS5lMVRva2VuLmFjY2Vzc190b2tlbik7XHJcbiAgICAgICAgLy8gfSksXHJcbiAgICAgICAgLy8gc3dpdGNoTWFwKHNhdmVkR3JpZENhY2hlID0+IHtcclxuICAgICAgICAvLyAgIGlmIChzYXZlZEdyaWRDYWNoZSkge1xyXG4gICAgICAgIC8vICAgICAvLyBLZWVwIHRoZSBncmlkU2V0dGluZyBmcm9tIGNvb2tpZXN0b3JlIHRvIGxvY2FsU3RvcmFnZVxyXG4gICAgICAgIC8vICAgICB0aGlzLnpHcmlkU3RhdGVQZXJzaXN0aW5nU2VydmljZS5zZXQodGhpcy5ncmlkU3RvcmFnZUtleSwgc2F2ZWRHcmlkQ2FjaGUpO1xyXG4gICAgICAgIC8vICAgICByZXR1cm4gb2YodHJ1ZSk7XHJcbiAgICAgICAgLy8gICB9XHJcbiAgICAgICAgLy8gICByZXR1cm4gb2YoZmFsc2UpO1xyXG4gICAgICAgIC8vIH0pLFxyXG4gICAgICAgIHRhcCgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNldHVwRmlsdGVyRmVhdHVyZSgpO1xyXG4gICAgICAgICAgdGhpcy5zZXR1cEdyaWRCdXR0b25zKCk7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHtcclxuICAgICAgICAgIC8vIEdyaWQgZGVmYXVsdCBzZXR0aW5nXHJcbiAgICAgICAgICB0aGlzLmNvbHVtbnMgPSBbXTtcclxuICAgICAgICAgIHRoaXMuX3N0YXRlLnRha2UgPSB0aGlzLmRhdGEuUGFnZVNpemUgfHwgMjA7XHJcbiAgICAgICAgICB0aGlzLnBhZ2VTaXplcyA9IFs1LCAxMCwgMjAsIDUwLCAxMDAsIDIwMCwgNTAwXTsgLy8gdG8gYmUgZW5oYW5jZWQ6IGN1c3RvbSBwYWdlIHNpemVzXHJcbiAgICAgICAgICB0aGlzLnByZXZpb3VzTmV4dCA9IHRoaXMuZGF0YVsnRW5hYmxlUHJldmlvdXNOZXh0QnV0dG9uJ10gfHwgZmFsc2U7XHJcblxyXG4gICAgICAgICAgLy8gW01vYmlsZV0gRGlzYWJsZSBQYWdlU2l6ZVxyXG4gICAgICAgICAgaWYgKHRoaXMuZGF0YS5QYWdlU2l6ZXMgPT09IGZhbHNlIHx8IFpDb21wb25lbnRIZWxwZXIuaXNNb2JpbGVTY3JlZW4oKSkge1xyXG4gICAgICAgICAgICB0aGlzLnBhZ2VTaXplcyA9IGZhbHNlO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHRoaXMucGFnZWFibGUgPSB0aGlzLmRhdGEucGFnZUFibGUgIT0gdW5kZWZpbmVkID8gdGhpcy5kYXRhLnBhZ2VBYmxlIDogeyByZXNwb25zaXZlOiB0cnVlLCBidXR0b25Db3VudDogMywgcGFnZVNpemVzOiB0aGlzLnBhZ2VTaXplcywgcHJldmlvdXNOZXh0OiB0aGlzLnByZXZpb3VzTmV4dCB9O1xyXG5cclxuICAgICAgICAgIC8vIEdyaWQgU2VsZWN0aW9uIGNvbHVtblxyXG4gICAgICAgICAgaWYgKHRoaXMuZGF0YS5TZWxlY3RPcHRpb25zKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0YWJsZVNldHRpbmdzID0ge1xyXG4gICAgICAgICAgICAgIC8vIGNoZWNrYm94T25seTogdGhpcy5jaGVja2JveE9ubHksXHJcbiAgICAgICAgICAgICAgbW9kZTogdGhpcy5kYXRhLlNlbGVjdE9wdGlvbnMgPT09ICdzaW5nbGUnID8gJ3NpbmdsZScgOiAnbXVsdGlwbGUnXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gYmluZCB0aGlzIHRvIGdyb3VwIHVzaW5nIEdyaWQgdmFsdWVcclxuICAgICAgICAgIGlmICh0aGlzLmRhdGEuVmFsdWUuc3RhcnRzV2l0aCgnZ3JvdXAuJykpIHtcclxuICAgICAgICAgICAgY29uc3QgZ3JpZFZhbHVlID0gdGhpcy5kYXRhLlZhbHVlLnNsaWNlKDYpO1xyXG4gICAgICAgICAgICB0aGlzLmdyb3VwW2dyaWRWYWx1ZV0gPSB0aGlzO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIGNsZWFyIGFueSBTdWJzY3JpcHRpb25cclxuICAgICAgICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbikge1xyXG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIGlmIG5vIFJlc291cmNlVVJMLCBzdGlsbCBnZW5lcmF0ZSBDb2x1bW4gZmlyc3QsIHRoZW4gaW5zZXJ0IGdyaWQgZGF0YSB1c2luZyBEYXRhU291cmNlXHJcbiAgICAgICAgICBpZiAoIXRoaXMuZGF0YS5SZXNvdXJjZVVSTCkge1xyXG4gICAgICAgICAgICB0aGlzLmdlbmVyYXRlR3JpZENvbHVtbnMoKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmICh0aGlzLmRhdGEuRGF0YVNvdXJjZSAmJiB0aGlzLmRhdGEuU2tpcERpcmVjdGl2ZSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZHMgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwVmFsdWUoXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YS5EYXRhU291cmNlLFxyXG4gICAgICAgICAgICAgICAgICB0aGlzLmdyb3VwXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXREYXRhKGRzKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgdGhpcy5zZXR1cFBvcG92ZXJGZWF0dXJlKHRoaXMuY29sdW1ucywgdGhpcy5ncmlkRGF0YT8uZGF0YSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIHN1YnNjcmliZSB0byBzZXQgZ3JpZCBzZXR0aW5nIGZyb20gZGlyZWN0aXZlIHRvIGNvbXBvbmVudFxyXG4gICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLmdyaWRTdWJqZWN0LnBpcGUoXHJcbiAgICAgICAgICAgIHRhcChncmlkID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLnpncmlkID0gZ3JpZDtcclxuICAgICAgICAgICAgICB0aGlzLl9zdGF0ZSA9IHRoaXMuemdyaWQuc3RhdGU7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb2x1bW5zID0gdGhpcy56Z3JpZC5ncmlkQ29sdW1ucztcclxuICAgICAgICAgICAgICBpZiAodGhpcy56Z3JpZCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuemdyaWQuZ3JpZC5kYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmICghdGhpcy56Z3JpZC5ncmlkLmRhdGEudG90YWwpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnpncmlkLmdyaWQuZGF0YS50b3RhbCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgdGhpcy5ncmlkRGF0YSA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuemdyaWQuZ3JpZC5kYXRhKTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVGb3JtQ29udHJvbHMoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuemdyaWQuZ3JpZFsncGFnZVNpemUnXSkge1xyXG4gICAgICAgICAgICAgICAgICAvLyBkZWZhdWx0IHRvIDAgaW5zdGVhZCBvZiB1bmRlZmluZWQuXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuemdyaWQuZ3JpZFsncGFnZVNpemUnXSA9IDIwO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB0aGlzLnNldHVwUG9wb3ZlckZlYXR1cmUodGhpcy5jb2x1bW5zLCB0aGlzLmdyaWREYXRhPy5kYXRhKTtcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHN1cGVyLnRyYW5zbGF0ZUNvbHVtbkhlYWRlcih0aGlzLmNvbHVtbnMpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAgICAgICAvLyBDaGVjayBHcmlkIHNldHRpbmcgZXhpc3QgaW4gbG9jYWxzdG9yYWdlXHJcbiAgICAgICAgICB0aGlzLnN0YXRlRXhpc3QoKTtcclxuXHJcbiAgICAgICAgICAvLyBTZXQgRmlsdGVyIFNlc3Npb25LZXlcclxuICAgICAgICAgIGlmICh0aGlzLmRhdGFbJ1NhdmVGaWx0ZXInXSkge1xyXG4gICAgICAgICAgICB0aGlzLnNldEdyaWRTZXNzaW9uS2V5KHRoaXMuZ3JvdXApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIG9mKHRydWUpO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gc3VwZXIudHJhbnNsYXRlVG9vbEJhckl0ZW1zKCk7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgdGFwKCgpID0+IHtcclxuICAgICAgICAgIHRoaXMuZ3JpZENhbGxiYWNrKHRoaXMuZ3JvdXApO1xyXG4gICAgICAgICAgLy8gcmV0dXJuIG9mKHRydWUpO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICApLnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24pIHtcclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qIFN0YXJ0IEdyaWQgU3RhdGUgKHBhZ2luYXRpb24sIHNvcnRhYmxlLCBmaWx0ZXIsIG9yZGVyaW5nKSAqL1xyXG4gIGdldCBzdGF0ZSgpIHtcclxuICAgIHJldHVybiB0aGlzLl9zdGF0ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGVFeGlzdCgpIHtcclxuICAgIGNvbnN0IHVzZXJHcmlkU3RhdGUgPSB0aGlzLnpHcmlkU3RhdGVQZXJzaXN0aW5nU2VydmljZS5nZXQodGhpcy5ncmlkU3RvcmFnZUtleSk7XHJcblxyXG4gICAgaWYgKHVzZXJHcmlkU3RhdGUpIHtcclxuICAgICAgdGhpcy5ncmlkRGVmYXVsdFN0YXRlRXhpc3QgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuZ3JpZERlZmF1bHRTdGF0ZUV4aXN0ID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZGF0YVN0YXRlQ2hhbmdlKHN0YXRlOiBEYXRhU3RhdGVDaGFuZ2VFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuemdyaWQpIHtcclxuICAgICAgdGhpcy56Z3JpZC5kYXRhU3RhdGVDaGFuZ2Uoc3RhdGUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5ncmlkRGF0YSA9IHByb2Nlc3ModGhpcy5nRGF0YSwgc3RhdGUpO1xyXG4gICAgICB0aGlzLmNyZWF0ZUZvcm1Db250cm9scygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGZpbHRlcmFibGUodmFsdWU6IGFueSkge1xyXG4gICAgaWYgKHZhbHVlID09PSBmYWxzZSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzb3J0YWJsZSh2YWx1ZTogYW55KSB7XHJcbiAgICBpZiAodmFsdWUgPT09IGZhbHNlKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGxvY2tlZChjb2xTZXR0aW5nOiBhbnkpIHtcclxuICAgIGlmIChjb2xTZXR0aW5nWydwaW5uZWRMZWZ0J10gPT0gdHJ1ZSkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgLyogRW5kIEdyaWQgU3RhdGUgKHBhZ2luYXRpb24sIHNvcnRhYmxlLCBmaWx0ZXIsIG9yZGVyaW5nKSAqL1xyXG5cclxuICAvKiBTdGFydCBHcmlkIENvbHVtbnMgKi9cclxuICBwdWJsaWMgaXNTZWxlY3RPcHRpb24oKSB7XHJcbiAgICBsZXQgc2VsZWN0T3B0aW9uRXhpc3QgPSBmYWxzZTtcclxuICAgIGlmICh0aGlzLmRhdGEuU2VsZWN0T3B0aW9ucykge1xyXG4gICAgICB0aGlzLnNlbGVjdGFibGVTZXR0aW5ncyA9IHtcclxuICAgICAgICBjaGVja2JveE9ubHk6IGZhbHNlLFxyXG4gICAgICAgIG1vZGU6ICh0aGlzLmRhdGEuU2VsZWN0T3B0aW9ucyA9PSBcIm11bHRpcGxlXCIpID8gXCJtdWx0aXBsZVwiIDogXCJzaW5nbGVcIlxyXG4gICAgICB9O1xyXG4gICAgICBzZWxlY3RPcHRpb25FeGlzdCA9IHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc2VsZWN0T3B0aW9uRXhpc3Q7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0Q29sdW1ucyhjb2x1bW5OYW1lOiBzdHJpbmcsIGNvbHVtbnM6IEFycmF5PFpHcmlkQ3VzdG9tQ29sdW1uPikge1xyXG4gICAgdGhpcy5ncm91cFtjb2x1bW5OYW1lXSA9IHRoaXMud3JhcENvbHVtbk5hbWVzSW5GaWVsZEVsZW1lbnQoY29sdW1ucyk7XHJcbiAgICB0aGlzLmdlbmVyYXRlR3JpZENvbHVtbnMoKS5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgd3JhcENvbHVtbk5hbWVzSW5GaWVsZEVsZW1lbnQoY29sdW1uTGlzdDogQXJyYXk8WkdyaWRDdXN0b21Db2x1bW4+KSB7XHJcbiAgICByZXR1cm4gb2YoY29sdW1uTGlzdC5tYXAoYyA9PiB7XHJcbiAgICAgIGNvbnN0IGlzSGlkZGVuOiBib29sZWFuID0gYy5IaWRkZW47XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgTmFtZTogYy5OYW1lLFxyXG4gICAgICAgIFZhbHVlOiBjLkNvZGUsXHJcbiAgICAgICAgVHlwZTogYy5UeXBlLFxyXG4gICAgICAgIGdyaWRDb2xWaXNpYmxlOiAhaXNIaWRkZW4sXHJcbiAgICAgICAgd2lkdGg6IDEwMCArIGMuTmFtZS5sZW5ndGggKiA0LFxyXG4gICAgICAgIGVuYWJsZUZpbHRlcmluZzogZmFsc2UsXHJcbiAgICAgICAgZW5hYmxlU29ydGluZzogdHJ1ZSxcclxuICAgICAgICBlbmFibGVQaW5uaW5nOiB0cnVlLFxyXG4gICAgICAgIERpdkNsYXNzOiBcImNvbC14cy0xMiBjb2wtc20tNlwiLFxyXG4gICAgICAgIElzRWRpdGFibGVJbkdyaWQ6IGMuRWRpdGFibGVcclxuICAgICAgfTtcclxuICAgIH0pKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2VuZXJhdGVHcmlkQ29sdW1ucygpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgY29uc3QgZ3JpZFNldHRpbmcgPSB0aGlzLmdldEdyaWRTZXR0aW5ncygpO1xyXG5cclxuICAgIGNvbnN0IGNvbHVtbkZpZWxkcyQ6IE9ic2VydmFibGU8YW55PiA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBWYWx1ZShcclxuICAgICAgdGhpcy5kYXRhLkNvbHVtbkZpZWxkcyxcclxuICAgICAgdGhpcy5ncm91cFxyXG4gICAgKSB8fCBvZihbXSk7XHJcbiAgICBpZiAoIXRoaXMuZGF0YS5Db2x1bW5GaWVsZHMpIHtcclxuICAgICAgY29uc29sZS53YXJuKCdJbnZhbGlkL0VtcHR5IGdyaWQoJyArIHRoaXMuZGF0YS5OYW1lICsgJykgY29sdW1uRmllbGQnKTtcclxuICAgIH1cclxuICAgIHJldHVybiBjb2x1bW5GaWVsZHMkLnBpcGUoXHJcbiAgICAgIHRhcChkYXRhID0+IHtcclxuICAgICAgICBpZiAoIWRhdGEpIHtcclxuICAgICAgICAgIGNvbnNvbGUud2FybignSW52YWxpZC9FbXB0eSBncmlkKCcgKyB0aGlzLmRhdGEuTmFtZSArICcpIGRhdGEgdG8gZ2VuZXJhdGUgY29sdW1uJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgY29uc3QgZmllbGROYW1lID0gdGhpcy5kYXRhWydGaWVsZEVsZW1lbnROYW1lJ107XHJcbiAgICAgICAgICB0aGlzLmNvbHVtbnMgPSBbXTtcclxuICAgICAgICAgIFpDb21wb25lbnRIZWxwZXIuZ2V0R3JpZENvbHVtbnMoZGF0YSxcclxuICAgICAgICAgICAgdGhpcy5jb2x1bW5zLFxyXG4gICAgICAgICAgICB0aGlzLmdyb3VwLFxyXG4gICAgICAgICAgICBncmlkU2V0dGluZyxcclxuICAgICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICAgdGhpcy5kYXRhKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pLFxyXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiBzdXBlci50cmFuc2xhdGVDb2x1bW5IZWFkZXIodGhpcy5jb2x1bW5zKTtcclxuICAgICAgfSksXHJcbiAgICAgIC8vc3dpdGNoTWFwKCgpID0+IHtcclxuICAgICAgLy8gIC8vR2V0IFNlc3Npb25cclxuICAgICAgLy8gIHJldHVybiB0aGlzLmdldEdyaWRTZXNzaW9uRmlsdGVyKHRoaXMuZ3JwLCB0aGlzKTtcclxuICAgICAgLy99KSxcclxuICAgICAgLy9zd2l0Y2hNYXAoKCkgPT4ge1xyXG4gICAgICAvLyAgLy9CZWZvcmUgZ2V0IGdyaWQgZGF0YVxyXG4gICAgICAvLyAgcmV0dXJuIHRoaXMuYmVmb3JlR3JpZEdldERhdGEodGhpcy5ncnAsIHRoaXMpO1xyXG4gICAgICAvL30pLFxyXG4gICAgICAvL3N3aXRjaE1hcCgoKSA9PiB7XHJcbiAgICAgIC8vICAvL1NldCBncmlkIGRhdGFcclxuICAgICAgLy8gIHJldHVybiB0aGlzLnNldEdyaWRTZXNzaW9uRmlsdGVyKHRoaXMuZ3JwLCB0aGlzKTtcclxuICAgICAgLy99KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qIEVuZCBHcmlkIENvbHVtbnMgKi9cclxuXHJcbiAgcHJpdmF0ZSBlZGl0TW9kZWwoZGF0YUl0ZW06IGFueSkge1xyXG4gICAgaWYgKHRoaXMuZGF0YS5FZGl0Q2xpY2tVUkwpIHtcclxuICAgICAgLy8gRWRpdCBpbmNlbGwgZmllbGRcclxuICAgICAgY29uc3QgY29sRmllbGRzID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cFZhbHVlKHRoaXMuZGF0YS5Db2x1bW5GaWVsZHMsIHRoaXMuZ3JvdXApO1xyXG4gICAgICB0aGlzLmdyb3VwLnN1YmplY3QubmV4dCh7XHJcbiAgICAgICAgdHlwZTogXCJ6Z3JpZC1jZWxsQ2xpY2tcIixcclxuICAgICAgICB0YXJnZXQ6IHRoaXMuZGF0YS5FZGl0Q2xpY2tVUkwsXHJcbiAgICAgICAgZGF0YTogZGF0YUl0ZW0sXHJcbiAgICAgICAgY29sdW1uRmllbGRzJDogY29sRmllbGRzXHJcbiAgICAgIH0gYXMgWkNvbXBvbmVudE91dHB1dEV2ZW50KTtcclxuICAgIH1cclxuICAgIGVsc2UgeyBcclxuICAgICAgaWYgKHRoaXMuZGF0YVsnQ29udGFpbmVyRm9ybSddKSB7XHJcbiAgICAgICAgLy8gV2hlbiBjbGlja2VkIGRpc3BsYXkgaW4gQ29udGFpbmVyVmlld1xyXG4gICAgICAgIGNvbnN0IHBhZ2VFbGVtZW50ID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cFZhbHVlKHRoaXMuZGF0YVsnQ29udGFpbmVyRm9ybSddLCB0aGlzLmdyb3VwKTtcclxuICAgICAgICB0aGlzLm1haW5TZXJ2aWNlLmxvYWRDb250YWluZXJWaWV3KHRoaXMuZWxlbWVudENvbnRhaW5lciwgcGFnZUVsZW1lbnQsIHRoaXMuZ3JvdXApO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgeyBcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbdGhpcy5ncm91cC5lZGl0TW9kZWxVUkxdLCB7XHJcbiAgICAgICAgICByZWxhdGl2ZVRvOiB0aGlzLmFjdGl2YXRlZFJvdXRlLFxyXG4gICAgICAgICAgLy9za2lwTG9jYXRpb25DaGFuZ2U6IGZhbHNlXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgLy8vLyBXaGVuIGNsaWNrZWQgcm91dGUgdG8gcGFnZVxyXG4gICAgICAvL3RoaXMucm91dGVyLm5hdmlnYXRlKFt0aGlzLmdyb3VwLmVkaXRNb2RlbFVSTCwgZGF0YUl0ZW0uSWQsICdlZGl0J10sIHtcclxuICAgICAgLy8gIHJlbGF0aXZlVG86IHRoaXMuYWN0aXZhdGVkUm91dGVcclxuICAgICAgLy99KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBncmlkQ2FsbGJhY2soZ3JvdXA6IFpHcm91cCkge1xyXG4gICAgaWYgKHRoaXMuZGF0YVsnQWZ0ZXJsb2FkQ2FsbGJhY2snXSkge1xyXG4gICAgICBjb25zdCBtZSA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMpO1xyXG5cclxuICAgICAgdGhpcy5ncm91cC5zdWJqZWN0Lm5leHQoe1xyXG4gICAgICAgIHR5cGU6IFwiemdyaWQtQWZ0ZXJsb2FkQ2FsbGJhY2tcIixcclxuICAgICAgICB0YXJnZXQ6IHRoaXMuZGF0YVsnQWZ0ZXJsb2FkQ2FsbGJhY2snXSxcclxuICAgICAgICBkYXRhOiBtZVxyXG4gICAgICB9IGFzIFpDb21wb25lbnRPdXRwdXRFdmVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0RGF0YSA9IChnRGF0YTogYW55KSA9PiB7XHJcbiAgICB0aGlzLmdyaWREYXRhID0ge1xyXG4gICAgICBkYXRhOiBnRGF0YSxcclxuICAgICAgdG90YWw6IChnRGF0YSA/IGdEYXRhLmxlbmd0aCA6IDApXHJcbiAgICB9O1xyXG4gICAgdGhpcy5nRGF0YSA9IGdEYXRhO1xyXG5cclxuICAgIGlmICh0aGlzLnpncmlkKSB7XHJcbiAgICAgIHRoaXMuemdyaWQuZ3JpZFsncGFnZVNpemUnXSA9IGdEYXRhLmxlbmd0aDsgLy8gc2V0IGdyaWQgc2l6ZVxyXG4gICAgfVxyXG5cclxuICAgIGlmICghIXRoaXMuZGF0YS5TaG93UmVjb3JkTnVtYmVyKSB7XHJcbiAgICAgIGlmICh0aGlzLmdyaWREYXRhLmRhdGEpIHtcclxuICAgICAgICB0aGlzLmdyaWREYXRhLmRhdGEuZm9yRWFjaCgoZCwgaSkgPT4ge1xyXG4gICAgICAgICAgZC5HcmlkTm8gPSBpICsgMTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmdEYXRhKSB7XHJcbiAgICAgIHRoaXMuY3JlYXRlRm9ybUNvbnRyb2xzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0RGF0YSgpIHtcclxuICAgIGlmICh0aGlzLnpncmlkKSB7XHJcbiAgICAgIHRoaXMuemdyaWQuZ2V0RGF0YUJpbmRpbmcoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5kYXRhLlNraXBEaXJlY3RpdmUpIHtcclxuICAgICAgdGhpcy5ncmlkRGF0YSA9IHByb2Nlc3ModGhpcy5nRGF0YSwgdGhpcy5zdGF0ZSk7XHJcbiAgICAgIHRoaXMuY3JlYXRlRm9ybUNvbnRyb2xzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0R3JpZERhdGEoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5nRGF0YTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjcmVhdGVGb3JtR3JvdXAoZGF0YUl0ZW06IGFueSwgZmllbGROYW1lOiBhbnkpOiBGb3JtR3JvdXAge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG4gICAgICBbZmllbGROYW1lXTogZGF0YUl0ZW1bZmllbGROYW1lXVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0R3JvdXBWYWx1ZSh2YWx1ZTogc3RyaW5nLCBncm91cDogWkdyb3VwKSB7XHJcbiAgICByZXR1cm4gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cFZhbHVlKHRoaXMuZGF0YS5WYWx1ZSwgdGhpcy5ncm91cCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25CdG5DbGljayhldmVudDogYW55LCBjb2xTZXR0aW5nOiBhbnksIHJvd0RhdGE6IGFueSwgY2VsbERhdGE6IHN0cmluZykge1xyXG4gICAgdGhpcy5vbk5hdmlnYXRlVG8oZXZlbnQsIGNvbFNldHRpbmcsIHJvd0RhdGEsIGNlbGxEYXRhKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjZWxsQ2xpY2tIYW5kbGVyKGV2ZW50OiBDZWxsQ2xpY2tFdmVudCkge1xyXG4gICAgY29uc3QgZGlzYWJsZUFsbENvbHVtbkNlbGxDbGlja0hhbmRsZXIgPSB0aGlzLmRhdGEuRGlzYWJsZUNlbGxDbGlja0hhbmRsZXIgPyB0aGlzLmRhdGEuRGlzYWJsZUNlbGxDbGlja0hhbmRsZXIgOiBmYWxzZTtcclxuICAgIGNvbnN0IGlzQ29tbWFuZENvbHVtbiA9IGV2ZW50LmNvbHVtbi5jb25zdHJ1Y3Rvci5uYW1lID09ICdDb21tYW5kQ29sdW1uQ29tcG9uZW50JyA/IHRydWUgOiBmYWxzZTtcclxuXHJcbiAgICBpZiAodGhpcy50b29sdGlwRGlyKSB7XHJcbiAgICAgIHRoaXMudG9vbHRpcERpci5oaWRlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFkaXNhYmxlQWxsQ29sdW1uQ2VsbENsaWNrSGFuZGxlciAmJiAhaXNDb21tYW5kQ29sdW1uKSB7XHJcbiAgICAgIGNvbnN0IGluQ2VsbEVkaXRhYmxlID0gdGhpcy5kYXRhLkluQ2VsbEVkaXRhYmxlID8gdGhpcy5kYXRhLkluQ2VsbEVkaXRhYmxlIDogZmFsc2U7XHJcbiAgICAgIGlmIChpbkNlbGxFZGl0YWJsZSkge1xyXG4gICAgICAgIHRoaXMuZWRpdGFibGVDb2x1bW5zID0gdGhpcy5jb2x1bW5zLmZpbHRlcihzID0+IHMuaXNFZGl0YWJsZUluRGF0YUl0ZW0gPT09IHRydWUpO1xyXG4gICAgICAgIGlmICghIXRoaXMuZWRpdGFibGVDb2x1bW5zKSB7XHJcbiAgICAgICAgICB0aGlzLmVkaXRhYmxlQ29sdW1ucy5tYXAocyA9PiBldmVudC5zZW5kZXIuZWRpdENlbGwoZXZlbnQucm93SW5kZXgsIGV2ZW50LmNvbHVtbkluZGV4LCB0aGlzLmNyZWF0ZUZvcm1Hcm91cChldmVudC5kYXRhSXRlbSwgcy5maWVsZCkpKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJjZWxsQ2xpY2sgZXZlbnQ6IFwiLCBldmVudCk7XHJcblxyXG4gICAgICAgIC8vIHN0b3JlIGNsaWNrZWQgaWQgYW5kIGFjdGlvbiBhcyBlZGl0IHRvIHRoZSBzZXNzaW9uIHN0b3JhZ2VcclxuICAgICAgICB0aGlzLm1haW5TZXJ2aWNlLnNldE5hdmlnYXRpb25QYXJhbXMoW2V2ZW50LmRhdGFJdGVtLklkLCAnZWRpdCddKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZGF0YS5Pbkl0ZW1DbGljaykge1xyXG4gICAgICAgICAgY29uc3QgZnVuYyA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBFdmFsVmFsdWUuY2FsbCh0aGlzLCB0aGlzLmRhdGEuT25JdGVtQ2xpY2spO1xyXG4gICAgICAgICAgaWYgKHR5cGVvZiBmdW5jID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNhbGxGdW5jID0gZnVuYy5iaW5kKHRoaXMuZ3JvdXAuY3RybFNjb3BlKTtcclxuICAgICAgICAgICAgY2FsbEZ1bmMoZXZlbnQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5lZGl0TW9kZWwoZXZlbnQuZGF0YUl0ZW0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZWRpdENlbGxDbG9zZUhhbmRsZXIoYXJnczogYW55KSB7XHJcbiAgICBjb25zdCB7IGZvcm1Hcm91cCwgZGF0YUl0ZW0gfSA9IGFyZ3M7XHJcbiAgICBpZiAoIWZvcm1Hcm91cC52YWxpZCkge1xyXG4gICAgICBhcmdzLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB9IGVsc2UgaWYgKGZvcm1Hcm91cC5kaXJ0eSkge1xyXG4gICAgICB0aGlzLmVkaXRhYmxlQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5maWx0ZXIocyA9PiBzLmlzRWRpdGFibGVJbkRhdGFJdGVtID09PSB0cnVlKTtcclxuICAgICAgdGhpcy5lZGl0YWJsZUNvbHVtbnMubWFwKHMgPT5cclxuICAgICAgICBPYmplY3QuYXNzaWduKGRhdGFJdGVtLCB7IFtzLmZpZWxkXTogZm9ybUdyb3VwLnZhbHVlW3MuZmllbGRdIH0pKTtcclxuICAgICAgdGhpcy5teVNlbGVjdGlvbi5tYXAocyA9PiAocy5JZCA9PT0gZGF0YUl0ZW0uSWQpID8gT2JqZWN0LmFzc2lnbihzLCBkYXRhSXRlbSkgOiBudWxsKTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICBwdWJsaWMgb25OYXZpZ2F0ZVRvKGV2ZW50OiBhbnksIGNsaWNrQWN0aW9uOiBhbnksIHJvd0RhdGE6IGFueSwgY2VsbERhdGE6IHN0cmluZykge1xyXG4gICAgLy8gY29uc3QgbiA9IGNvbFNldHRpbmcubmF2aWdhdGVUby5yZXBsYWNlKCcvOmlkJywgY2VsbERhdGEpO1xyXG4gICAgY29uc3QgbiA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBFdmFsVmFsdWUuY2FsbCh0aGlzLCBjbGlja0FjdGlvbi5DbGljayk7XHJcbiAgICBpZiAobikge1xyXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgdGhpcy5ncm91cC5zdWJqZWN0Lm5leHQoe1xyXG4gICAgICAgIHR5cGU6ICd6Z3JpZC1vbk5hdmlnYXRlVG8nLFxyXG4gICAgICAgIHRhcmdldDogY2xpY2tBY3Rpb24uQ2xpY2ssXHJcbiAgICAgICAgcm93RGF0YTogcm93RGF0YSxcclxuICAgICAgICBkYXRhOiBjZWxsRGF0YVxyXG4gICAgICB9IGFzIFpDb21wb25lbnRPdXRwdXRFdmVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2hvd1Rvb2x0aXAoZTogTW91c2VFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZGF0YS5Jc1Nob3dUb29sVGlwID09PSBmYWxzZSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBlbGVtZW50ID0gZS50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XHJcblxyXG4gICAgbGV0IGlzQ29tbWFuZENvbHVtbiA9IGZhbHNlO1xyXG4gICAgZWxlbWVudC5jbGFzc0xpc3QuZm9yRWFjaChkYXRhID0+IHtcclxuICAgICAgaWYgKGRhdGEgPT0gJ2stY29tbWFuZC1jZWxsJykge1xyXG4gICAgICAgIGlzQ29tbWFuZENvbHVtbiA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGlmICgoKGVsZW1lbnQubm9kZU5hbWUgPT09ICdURCcgfHwgZWxlbWVudC5ub2RlTmFtZSA9PT0gJ1RIJykgJiYgZWxlbWVudC5vZmZzZXRXaWR0aCA8IGVsZW1lbnQuc2Nyb2xsV2lkdGgpICYmICFpc0NvbW1hbmRDb2x1bW4pIHtcclxuICAgICAgdGhpcy50b29sdGlwRGlyLnRvZ2dsZShlbGVtZW50KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLnRvb2x0aXBEaXIuaGlkZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHJvd1NlbGVjdGlvbktleShjb250ZXh0OiBSb3dBcmdzKTogYW55IHtcclxuICAgIHJldHVybiBjb250ZXh0LmRhdGFJdGVtO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldFNlbGVjdGVkVmFsdWVzKCk6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy5teVNlbGVjdGlvbjtcclxuICB9XHJcblxyXG5cclxuICBwdWJsaWMgcmVmcmVzaEdyaWQoZXZlbnQ6IFpDb21wb25lbnRPdXRwdXRFdmVudCwgZ3JvdXA6IFpHcm91cCwgbWU6IGFueSkge1xyXG4gICAgY29uc3QgX2dyaWRPcHRpb25TZWdtZW50ID0gZXZlbnQudGFyZ2V0LnRyaW0oKS5zcGxpdCgnLicpO1xyXG4gICAgY29uc3QgX2dyaWRPcHRpb24gPSBfZ3JpZE9wdGlvblNlZ21lbnRbMV07XHJcbiAgICBpZiAoX2dyaWRPcHRpb24pIHtcclxuICAgICAgY29uc3QgemdyaWRDb250cm9sID0gZ3JvdXBbX2dyaWRPcHRpb25dIGFzIFpHcmlkO1xyXG4gICAgICBpZiAoemdyaWRDb250cm9sKSB7XHJcbiAgICAgICAgemdyaWRDb250cm9sLmdldERhdGEoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zb2xlLmxvZygnVW5hYmxlIHRvIGZpbmQgZ3JpZCB2YWx1ZTogJyArIF9ncmlkT3B0aW9uKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS5sb2coJ0ludmFsaWQgcmVmcmVzaEdyaWQgZXZlbnQ6ICcsIGV2ZW50KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyByZWZyZXNoRGF0YSgpIHtcclxuICAgIHRoaXMuZ2V0RGF0YSgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNsZWFyRGF0YSgpIHtcclxuICAgIHRoaXMuemdyaWQuY2xlYXJEYXRhKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2VsbFN0eWxlQ29uZGl0aW9uKGNvbCwgY29sVmFsdWU6IGFueSkge1xyXG4gICAgaWYgKGNvbFsnQ2VsbFN0eWxlQ29uZGl0aW9uJ10pIHtcclxuICAgICAgY29uc3QgY29uZGl0aW9uSGlnaGxpZ2h0Y29sOiBbXSA9IGNvbFsnQ2VsbFN0eWxlQ29uZGl0aW9uJ107XHJcbiAgICAgIGxldCBjb25kaXRpb25SZXN1bHQgPSBmYWxzZTtcclxuXHJcbiAgICAgIGNvbmRpdGlvbkhpZ2hsaWdodGNvbC5mb3JFYWNoKGRhdGEgPT4ge1xyXG4gICAgICAgIGlmICghY29uZGl0aW9uUmVzdWx0KSB7XHJcbiAgICAgICAgICBpZiAoZGF0YVsnVmFsdWUnXSA9PSBjb2xWYWx1ZSkge1xyXG4gICAgICAgICAgICBjb25kaXRpb25SZXN1bHQgPSB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICByZXR1cm4gY29uZGl0aW9uUmVzdWx0O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldENlbGxTdHlsZUNvbmRpdGlvbihjb2wsIGNvbFZhbHVlOiBhbnkpIHtcclxuICAgIGlmIChjb2xbJ0NlbGxTdHlsZUNvbmRpdGlvbiddKSB7XHJcbiAgICAgIGNvbnN0IGNvbmRpdGlvbkhpZ2hsaWdodGNvbDogW10gPSBjb2xbJ0NlbGxTdHlsZUNvbmRpdGlvbiddO1xyXG4gICAgICBsZXQgY29uZGl0aW9uUmVzdWx0ID0gJyc7XHJcblxyXG4gICAgICBjb25kaXRpb25IaWdobGlnaHRjb2wuZm9yRWFjaChkYXRhID0+IHtcclxuICAgICAgICBpZiAoZGF0YVsnVmFsdWUnXSA9PSBjb2xWYWx1ZSkge1xyXG4gICAgICAgICAgaWYgKGRhdGFbJ0JhY2tncm91bmRDb2xvciddKSB7XHJcbiAgICAgICAgICAgIGNvbmRpdGlvblJlc3VsdCA9ICdiYWNrZ3JvdW5kLWNvbG9yOicgKyBkYXRhWydCYWNrZ3JvdW5kQ29sb3InXSArICc7JztcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAoZGF0YVsnQ29sb3InXSkge1xyXG4gICAgICAgICAgICBjb25kaXRpb25SZXN1bHQgKz0gJ2NvbG9yOicgKyBkYXRhWydDb2xvciddICsgJzsnO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmIChkYXRhWydTdHlsZUV4cHJlc3Npb24nXSkge1xyXG4gICAgICAgICAgICBjb25kaXRpb25SZXN1bHQgKz0gZGF0YVsnU3R5bGVFeHByZXNzaW9uJ107XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHJldHVybiBjb25kaXRpb25SZXN1bHQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuXHJcbiAgcHVibGljIGFsbFJlc3VsdHMoKTogT2JzZXJ2YWJsZTxFeGNlbEV4cG9ydERhdGE+IHtcclxuICAgIGNvbnN0IF96Z3JpZENvbnRyb2wgPSB0aGlzLnpncmlkIGFzIFpHcmlkO1xyXG4gICAgY29uc3QgX3pncmlkQ29tcG9uZW50ID0gdGhpcy56Z3JpZC5ncmlkIGFzIEdyaWRDb21wb25lbnQ7XHJcbiAgICBjb25zdCBfZGF0YSA9IF96Z3JpZENvbXBvbmVudC5kYXRhIGFzIEdyaWREYXRhUmVzdWx0O1xyXG5cclxuICAgIGNvbnN0IHBhZ2luYXRpb25BcGlQb3N0VXJsID0gX3pncmlkQ29udHJvbC5wYWdpbmF0aW9uQXBpUG9zdFVybDtcclxuXHJcbiAgICAvLyBOZWVkIHRvIGNsb25lLCBpZiBub3Qgd2lsbCBhZmZlY3QgdGhlIGdyaWQgcGFyYW1zLlxyXG4gICAgY29uc3QgcGFyYW1zID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5wYXJhbXMpO1xyXG4gICAgcGFyYW1zLnBhZ2VObyA9IDA7XHJcbiAgICBwYXJhbXMucGFnZVNpemUgPSBfZGF0YS50b3RhbDtcclxuXHJcbiAgICByZXR1cm4gdGhpcy53ZWJBcGlTZXJ2aWNlLmh0dHBQb3N0JChwYWdpbmF0aW9uQXBpUG9zdFVybCwgcGFyYW1zKS5waXBlKFxyXG4gICAgICBtYXAoKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdDogRXhjZWxFeHBvcnREYXRhID0ge1xyXG4gICAgICAgICAgZGF0YTogcHJvY2VzcyhkYXRhLmRhdGFTZXQsIHt9KS5kYXRhXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0Q2xhc3MoZGF0YUl0ZW06IGFueSwgY29sOiBhbnkpIHtcclxuICAgIGxldCBuZ0NsYXNzID0gXCJncmlkQ2VsbCBcIjtcclxuICAgIGlmIChjb2wuZmllbGRUeXBlID09PSAnbnVtYmVyJyB8fCBjb2wuZmllbGRUeXBlID09PSAnY3VycmVuY3knIHx8IGNvbC5maWVsZFR5cGUgPT09ICd6bnVtZXJpYycpIHtcclxuICAgICAgbmdDbGFzcyArPSBcInJpZ2h0QWxpZ25lZCBcIjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZGF0YUl0ZW1bY29sLmZpZWxkICsgJ19DbGFzcyddKSB7XHJcbiAgICAgIG5nQ2xhc3MgKz0gZGF0YUl0ZW1bY29sLmZpZWxkICsgJ19DbGFzcyddICsgXCIgXCI7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvbC5DbGFzcykge1xyXG4gICAgICBuZ0NsYXNzICs9IGNvbC5DbGFzcyArIFwiIFwiO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjb2wuUG9wT3ZlckNvbnRlbnQpIHtcclxuICAgICAgbmdDbGFzcyArPSBcIiB3aXRoUG9wb3ZlckluR3JpZFwiO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBuZ0NsYXNzO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEZvcm1hdChjb2w6IGFueSwgZGVmYXVsdEZvcm1hdD86IGFueSkge1xyXG4gICAgbGV0IGZvcm1hdCA9IFwiXCI7XHJcbiAgICBpZiAoY29sLkZvcm1hdE9wdGlvbnMgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBmb3JtYXQgPSBkZWZhdWx0Rm9ybWF0ID8gZGVmYXVsdEZvcm1hdCA6IFwiXCI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBmb3JtYXRBcnIgPSBjb2wuRm9ybWF0T3B0aW9ucy5zcGxpdChcIi5cIilcclxuICAgICAgbGV0IGRwID0gMDtcclxuXHJcbiAgICAgIGlmIChmb3JtYXRBcnIubGVuZ3RoID4gMSkge1xyXG4gICAgICAgIGRwID0gZm9ybWF0QXJyWzFdLmxlbmd0aDtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGRwICE9PSAwKSB7XHJcbiAgICAgICAgZm9ybWF0ID0gXCIxLlwiICsgZHAgKyBcIi1cIiArIGRwO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZm9ybWF0O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldEhlYWRlclRleHQoY29sdW1uTmFtZTogc3RyaW5nLCBuZXdIZWFkZXJUaXRsZTogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBncmlkQ29sdW1ucyA9IHRoaXMuY29sdW1ucztcclxuICAgIGdyaWRDb2x1bW5zLmZvckVhY2goKGNvbDogYW55KSA9PiB7XHJcbiAgICAgIGlmIChjb2wuTmFtZSA9PT0gY29sdW1uTmFtZSkge1xyXG4gICAgICAgIGNvbC50aXRsZSA9IG5ld0hlYWRlclRpdGxlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRHcmlkU2Vzc2lvbktleShncm91cDogWkdyb3VwKSB7XHJcbiAgICBpZiAoZ3JvdXBbXCJHcmlkU3RvcmFnZUtleVwiXSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgZ3JvdXBbXCJHcmlkU3RvcmFnZUtleVwiXSA9ICd6Z3JpZF8nICsgZ3JvdXAucmVzb3VyY2VVUkwgKyAnXycgKyB0aGlzLmRhdGEuVmFsdWUgKyAnOjonICsgdGhpcy5hdXRoU2VydmljZS5lMVRva2VuLnVzZXJOYW1lO1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIHB1YmxpYyB0cmFja0J5KGluZGV4OiBudW1iZXIsIGl0ZW06IEdyaWRJdGVtKTogYW55IHtcclxuICAgIC8vY29uc29sZS5sb2coaXRlbS5kYXRhWydJZCddIHx8IGluZGV4KTtcclxuICAgIHJldHVybiBpbmRleDtcclxuICB9XHJcblxyXG4gIC8qIEdyaWQgY29uZmlndXJhdGlvbiBmdW5jdGlvbiAqL1xyXG4gIHB1YmxpYyBzYXZlR3JpZFNldHRpbmdzKCk6IHZvaWQge1xyXG4gICAgY29uc3QgX3pncmlkQ29tcG9uZW50ID0gdGhpcy56Z3JpZC5ncmlkIGFzIEdyaWRDb21wb25lbnQ7XHJcbiAgICBjb25zdCBfY29sdW1ucyA9IF96Z3JpZENvbXBvbmVudC5jb2x1bW5zO1xyXG5cclxuICAgIG9mKHRoaXMuY29sdW1ucylcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGNvbmZpZ1ZhbHVlOiBaR3JpZENvbHVtblNldHRpbmdzW10gPSBfY29sdW1ucy50b0FycmF5KCkubWFwKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBfekdyaWRDb2x1bW5TZXR0aW5nczogWkdyaWRDb2x1bW5TZXR0aW5ncyA9IE9iamVjdC5rZXlzKGl0ZW0pXHJcbiAgICAgICAgICAgICAgLmZpbHRlcihwcm9wTmFtZSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gIXByb3BOYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ3RlbXBsYXRlJylcclxuICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgIC5yZWR1Y2UoKGFjYywgY3VycikgPT4gKFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAuLi5hY2MsXHJcbiAgICAgICAgICAgICAgICAgIC4uLnsgW2N1cnJdOiBpdGVtW2N1cnJdIH1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAsIHt9IGFzIFpHcmlkQ29sdW1uU2V0dGluZ3MpO1xyXG4gICAgICAgICAgICByZXR1cm4gX3pHcmlkQ29sdW1uU2V0dGluZ3M7XHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAvLyByZW1vdmUgZXh0cmEgZWxlbWVudCBmb3JtIGFycmF5XHJcbiAgICAgICAgICBjb25maWdWYWx1ZS5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICBkZWxldGUgaXRlbVsnaGVhZGVyU3R5bGUnXTtcclxuICAgICAgICAgICAgZGVsZXRlIGl0ZW1bJ19fbmdDb250ZXh0X18nXTtcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIGNvbnN0IGdyaWRTZXR0aW5nOiBaR3JpZFNldHRpbmdzID0ge1xyXG4gICAgICAgICAgICAvLyBzdGF0ZTogdGhpcy5zdGF0ZSxcclxuICAgICAgICAgICAgY29sdW1uc0NvbmZpZzogY29uZmlnVmFsdWVcclxuICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgLy8gRmluZCBhbnkgc2V0dGluZyBmcm9tIGxvY2Fsc3RvcmFnZSBhbmQgdXBkYXRlLCBpZiBub3QganVzdCBhZGQgaW4uXHJcbiAgICAgICAgICBsZXQgX2FyckdyaWRDYWNoaW5nOiBHcmlkQ2FjaGluZ1tdID0gdGhpcy56R3JpZFN0YXRlUGVyc2lzdGluZ1NlcnZpY2UuZ2V0KHRoaXMuZ3JpZFN0b3JhZ2VLZXkpO1xyXG4gICAgICAgICAgbGV0IF9ncmlkQ29uZmlnOiBHcmlkQ2FjaGluZyA9IG51bGw7XHJcbiAgICAgICAgICBpZiAoX2FyckdyaWRDYWNoaW5nICYmIF9hcnJHcmlkQ2FjaGluZ1swXSkge1xyXG4gICAgICAgICAgICBfZ3JpZENvbmZpZyA9IF9hcnJHcmlkQ2FjaGluZy5maW5kKHggPT4geFsnZGF0YUZvcm1GaWVsZHMnXSA9PT0gdGhpcy5ncmlkU3RvcmFnZUtleSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoX2dyaWRDb25maWcpIHtcclxuICAgICAgICAgICAgICBfZ3JpZENvbmZpZy5ncmlkU2V0dGluZ3MgPSBncmlkU2V0dGluZztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIF9hcnJHcmlkQ2FjaGluZyA9IFtdO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmICghX2dyaWRDb25maWcpIHtcclxuICAgICAgICAgICAgX2dyaWRDb25maWcgPSB7XHJcbiAgICAgICAgICAgICAgZGF0YUZvcm1GaWVsZHM6IHRoaXMuZ3JpZFN0b3JhZ2VLZXksXHJcbiAgICAgICAgICAgICAgZ3JpZFNldHRpbmdzOiBncmlkU2V0dGluZ1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgX2FyckdyaWRDYWNoaW5nLnB1c2goX2dyaWRDb25maWcpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIF9hcnJHcmlkQ2FjaGluZztcclxuICAgICAgICB9KSxcclxuICAgICAgICBjb25jYXRNYXAoZ3JpZENhY2hlID0+IHtcclxuICAgICAgICAgIC8vIFNhdmUgZ3JpZCBjYWNoaW5nIHRvIGxvY2Fsc3RvcmFnZVxyXG4gICAgICAgICAgdGhpcy56R3JpZFN0YXRlUGVyc2lzdGluZ1NlcnZpY2Uuc2V0KHRoaXMuZ3JpZFN0b3JhZ2VLZXksIGdyaWRDYWNoZSk7XHJcbiAgICAgICAgICAvLyBTYXZlIHRvIENvb2tpZVN0b3JlXHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5tYWluU2VydmljZS5jb29raWVTdG9yZVBvc3QodGhpcy5ncmlkU3RvcmFnZUtleSwgZ3JpZENhY2hlKTtcclxuICAgICAgICB9KSxcclxuICAgICAgICB0YXAoc2F2ZWRHcmlkQ2FjaGUgPT4ge1xyXG4gICAgICAgICAgLy8gY2hlY2sgaXMgc2F2ZWQgc3RhdGUgZXhpc3QgdG8gZW5hYmxlL2hpZGUgcmVzdG9yZSBidXR0b25cclxuICAgICAgICAgIHRoaXMuc3RhdGVFeGlzdCgpO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIHRhcCgoKSA9PiB7XHJcbiAgICAgICAgICAvLyBBbGVydFxyXG4gICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2Uuc2hvdygnR3JpZCBTZXR0aW5nIFNhdmVkJywgXCJ0b3BcIiwgdHJ1ZSwgMjAwMCwgJ3N1Y2Nlc3MnKTtcclxuICAgICAgICB9KVxyXG4gICAgICApLnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlc3RvcmVHcmlkU2V0dGluZ3MoKSB7XHJcbiAgICBvZih0cnVlKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xyXG4gICAgICAgICAgLy8gQ2xlYXIgbG9jYWxzdG9yYWdlIGdyaWQgc2V0dGluZ1xyXG4gICAgICAgICAgdGhpcy56R3JpZFN0YXRlUGVyc2lzdGluZ1NlcnZpY2UucmVtb3ZlKHRoaXMuZ3JpZFN0b3JhZ2VLZXkpO1xyXG4gICAgICAgICAgcmV0dXJuIG9mKHRydWUpXHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHtcclxuICAgICAgICAgIC8vIGRlbGV0ZSBjb29raWVzdG9yZSBncmlkU2V0dGluZyBieSBzdG9yYWdla2V5IGFzIG5hbWVcclxuICAgICAgICAgIHJldHVybiB0aGlzLm1haW5TZXJ2aWNlLmNvb2tpZVN0b3JlRGVsZXRlTXVsdGlwbGUodGhpcy5ncmlkU3RvcmFnZUtleSk7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY29uY2F0TWFwKCgpID0+IHtcclxuICAgICAgICAgIC8vIFVzZSBvcmlnaW5hbCBjb2x1bW4gc2V0dGluZ1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuZ2VuZXJhdGVHcmlkQ29sdW1ucygpO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIHRhcCgoKSA9PiB7XHJcbiAgICAgICAgICAvLyBjaGVjayBpcyBzYXZlZCBzdGF0ZSBleGlzdFxyXG4gICAgICAgICAgdGhpcy5zdGF0ZUV4aXN0KCk7XHJcbiAgICAgICAgICAvLyBBbGVydFxyXG4gICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2Uuc2hvdygnR3JpZCBTZXR0aW5nIFJlc3RvcmVkJywgXCJ0b3BcIiwgdHJ1ZSwgMjAwMCwgJ3N1Y2Nlc3MnKTtcclxuICAgICAgICB9KVxyXG4gICAgICApLnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRHcmlkU2V0dGluZ3MoKTogWkdyaWRDb2x1bW5TZXR0aW5nc1tdIHtcclxuICAgIGlmICh0aGlzLmRhdGEuQWxsb3dTYXZlU3RhdGUpIHtcclxuICAgICAgY29uc3QgX3N0b3JhZ2VLZXkgPSAnaW9uaWMtZmllbGQ6OicgKyB0aGlzLmF1dGhTZXJ2aWNlLmUxVG9rZW4udXNlck5hbWUgKyAnOjonICsgdGhpcy5kYXRhLk5hbWUgKyAnOjonICsgdGhpcy5yb3V0ZXIudXJsO1xyXG5cclxuICAgICAgLy8gRmluZCBhbnkgc2V0dGluZyBmcm9tIGxvY2Fsc3RvcmFnZS4uXHJcbiAgICAgIGxldCBfYXJyR3JpZENhY2hpbmc6IEdyaWRDYWNoaW5nW10gPSB0aGlzLnpHcmlkU3RhdGVQZXJzaXN0aW5nU2VydmljZS5nZXQoX3N0b3JhZ2VLZXkpO1xyXG4gICAgICBpZiAoX2FyckdyaWRDYWNoaW5nKSB7XHJcbiAgICAgICAgY29uc3QgX2dyaWRDYWNoaW5nOiBHcmlkQ2FjaGluZyA9IEpTT04ucGFyc2UoX2FyckdyaWRDYWNoaW5nWydWYWx1ZSddKTtcclxuICAgICAgICBpZiAoX2dyaWRDYWNoaW5nKSB7XHJcbiAgICAgICAgICByZXR1cm4gX2dyaWRDYWNoaW5nLmdyaWRTZXR0aW5ncy5jb2x1bW5zQ29uZmlnLnNvcnQoKGEsIGIpID0+IGEub3JkZXJJbmRleCAtIGIub3JkZXJJbmRleCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyNyZWdpb24gSW5saW5lIEVkaXRcclxuICBwcml2YXRlIGNyZWF0ZUZvcm1Db250cm9scygpIHtcclxuICAgIGxldCBjb3VudGVySW5kZXggPSAwO1xyXG4gICAgaWYgKHRoaXMuY29sdW1ucykge1xyXG4gICAgICAvLyBvbmx5IGNyZWF0ZSBpZiB0aGVyZSBpcyBhdCBsZWFzdCAxIGVkaXRhYmxlIGNvbHVtblxyXG4gICAgICBpZiAodGhpcy5jb2x1bW5zLmZpbmQoYyA9PiBjLmlzRWRpdGFibGVJbkdyaWQpID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuaW5saW5lRWRpdGVkRm9ybUdyb3VwcyA9IHRoaXMuaW5saW5lRWRpdGVkRm9ybUdyb3VwcyB8fCB7fTtcclxuXHJcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuZ3JpZERhdGEuZGF0YSkpIHtcclxuICAgICAgICB0aGlzLmdyaWREYXRhLmRhdGEuZm9yRWFjaChkID0+IHtcclxuICAgICAgICAgIGNvbnN0IGl0ZW1zID0ge307XHJcbiAgICAgICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaChjID0+IHtcclxuICAgICAgICAgICAgaXRlbXNbYy5maWVsZF0gPSBuZXcgRm9ybUNvbnRyb2woZFtjLmZpZWxkXSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIGNvbnN0IGZvcm1Hcm91cCA9IG5ldyBGb3JtR3JvdXAoaXRlbXMpO1xyXG5cclxuICAgICAgICAgIGlmIChkW1wiSWRcIl0pIHtcclxuICAgICAgICAgICAgaXRlbXNbXCJJZFwiXSA9IG5ldyBGb3JtQ29udHJvbCh7IHZhbHVlOiBkW1wiSWRcIl0sIGRpc2FibGVkOiBmYWxzZSB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBkW1wiSWRcIl0gPSBjb3VudGVySW5kZXgrKztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuaW5saW5lRWRpdGVkRm9ybUdyb3Vwc1tkW1wiSWRcIl1dID0gZm9ybUdyb3VwO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0SW5saW5lRmllbGQodmFsdWU6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuY29sdW1ucy5maW5kKHggPT4geC5WYWx1ZSA9PT0gdmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldElubGluZUZvcm0oZGF0YTogYW55LCByb3dJbmRleDogbnVtYmVyKSB7XHJcbiAgICByZXR1cm4gdGhpcy5pbmxpbmVFZGl0ZWRGb3JtR3JvdXBzW2RhdGFbXCJJZFwiXSB8fCByb3dJbmRleF07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0Rm9ybUNvbnRyb2xEYXRhKHZhbHVlOiBhbnkpIHtcclxuICAgIGNvbnN0IGRhdGEgPSBbXTtcclxuICAgIGZvciAoY29uc3QgayBvZiBPYmplY3Qua2V5cyh0aGlzLmlubGluZUVkaXRlZEZvcm1Hcm91cHMpKSB7XHJcbiAgICAgIGRhdGEucHVzaCh0aGlzLmlubGluZUVkaXRlZEZvcm1Hcm91cHNba10/LnZhbHVlKTtcclxuICAgIH1cclxuICAgIHJldHVybiBkYXRhO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLyogRXZlbnQgKi9cclxuICBwdWJsaWMgYmVmb3JlR3JpZEdldERhdGEoZ3JvdXA6IFpHcm91cCwgbWU6IGFueSkge1xyXG4gICAgY29uc29sZS53YXJuKFwiYmVmb3JlRGF0YUJpbmRpbmcgdHJpZ2dlcmVkXCIpO1xyXG4gICAgaWYgKCFncm91cC5iZWZvcmVHcmlkR2V0RGF0YSkge1xyXG4gICAgICBjb25zb2xlLndhcm4oXCJncm91cC5iZWZvcmVEYXRhQmluZGluZyBpcyB1bmRlZmluZWRcIik7XHJcbiAgICAgIHJldHVybiBvZih0cnVlKTtcclxuICAgIH1cclxuICAgIHJldHVybiBncm91cC5iZWZvcmVHcmlkR2V0RGF0YShncm91cCwgbWUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldEdyaWRTZXNzaW9uRmlsdGVyKGdyb3VwOiBaR3JvdXAsIG1lOiBhbnkpIHtcclxuICAgIGlmICghZ3JvdXBbXCJHcmlkU3RvcmFnZUtleVwiXSkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGNvbnN0IFN0b3JhZ2VLZXkgPSBncm91cFtcIkdyaWRTdG9yYWdlS2V5XCJdO1xyXG5cclxuICAgIGlmICh0aGlzLnN0b3JhZ2VTZXJ2aWNlKSB7XHJcbiAgICAgIGF3YWl0IHRoaXMuc3RvcmFnZVNlcnZpY2UuZ2V0KFN0b3JhZ2VLZXkpXHJcbiAgICAgICAgLnRoZW4oZGF0YSA9PiB7XHJcbiAgICAgICAgICBpZiAoIWRhdGEgfHwgIWRhdGEudmFsdWUgfHwgZGF0YS52YWx1ZSA9PT0gXCJudWxsXCIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gSlNPTi5wYXJzZShkYXRhLnZhbHVlKTtcclxuICAgICAgICAgICAgdGhpcy5zdGF0ZS5maWx0ZXIgPSBKU09OLnBhcnNlKHJlc3VsdFtcIlN0YXRlRmlsdGVyXCJdKTtcclxuICAgICAgICAgICAgdGhpcy5wYXJhbXMuZmlsdGVyUGFyYW1zID0gSlNPTi5wYXJzZShyZXN1bHRbXCJGaWx0ZXJQYXJhbXNcIl0pO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGF0ZS5maWx0ZXIuZmlsdGVycy5mb3JFYWNoKChzdGF0ZUZpbHRlcjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKHN0YXRlRmlsdGVyLmZpZWxkLmluY2x1ZGVzKCdVVEMnKSkge1xyXG4gICAgICAgICAgICAgICAgc3RhdGVGaWx0ZXIudmFsdWUgPSBuZXcgRGF0ZShzdGF0ZUZpbHRlci52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldEdyaWRTZXNzaW9uRmlsdGVyKGdyb3VwOiBaR3JvdXAsIG1lOiBhbnkpIHtcclxuICAgIGlmICghZ3JvdXBbXCJHcmlkU3RvcmFnZUtleVwiXSkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGNvbnN0IFN0b3JhZ2VLZXkgPSBncm91cFtcIkdyaWRTdG9yYWdlS2V5XCJdO1xyXG5cclxuICAgIGxldCBsc3RHcmlkRmlsdGVyOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge307XHJcblxyXG4gICAgaWYgKG1lLnN0YXRlLmZpbHRlciAmJiB0aGlzLnN0b3JhZ2VTZXJ2aWNlICYmIHRoaXMuZGF0YVsnU2F2ZUZpbHRlciddKSB7XHJcbiAgICAgIC8vbGlzdCBvZiBkYXRhIGZvciBTdGF0ZUZpbHRlciBhbmQgRmlsdGVyUGFyYW1zXHJcbiAgICAgIGxzdEdyaWRGaWx0ZXIgPSB7IFwiU3RhdGVGaWx0ZXJcIjogSlNPTi5zdHJpbmdpZnkobWUuc3RhdGUuZmlsdGVyKSwgXCJGaWx0ZXJQYXJhbXNcIjogSlNPTi5zdHJpbmdpZnkobWUucGFyYW1zLmZpbHRlclBhcmFtcykgfVxyXG4gICAgICAvL2NyZWF0ZSBzZXNzaW9uIHN0b3JhZ2VcclxuICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXQoU3RvcmFnZUtleSwgSlNPTi5zdHJpbmdpZnkobHN0R3JpZEZpbHRlcikpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gU291cmNlOiBodHRwczovL3d3dy50ZWxlcmlrLmNvbS9mb3J1bXMva2VuZG8tYW5ndWxhci1ncmlkLWJsYW5rLXNwYWNlLWluLXRoZS1lbmQtd2hlbi15b3UtcmVzaXplKHJlZHVjZSktYW55LWNvbHVtblxyXG4gIHB1YmxpYyBhZGp1c3RXaWR0aFVwb25SZXNpemUoKSB7XHJcbiAgICBjb25zdCB0YWJsZVdpZHRoID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5rLWdyaWQtdGFibGVcIilbYG9mZnNldFdpZHRoYF07XHJcbiAgICBjb25zdCBjb250ZW50V2lkdGggPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmstZ3JpZC1jb250ZW50XCIpW2BvZmZzZXRXaWR0aGBdO1xyXG4gICAgaWYgKHRhYmxlV2lkdGggPCBjb250ZW50V2lkdGgpIHtcclxuICAgICAgY29uc3QgY3VycmVudExhc3RDb2xXaWR0aCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuay1ncmlkLWNvbnRlbnQgLmstZ3JpZC10YWJsZSB0ciB0ZDpsYXN0LW9mLXR5cGVcIilbYG9mZnNldFdpZHRoYF07XHJcblxyXG4gICAgICB0aGlzLmNvbHVtbnNbdGhpcy5jb2x1bW5zLmxlbmd0aCAtIDFdLndpZHRoID0gY3VycmVudExhc3RDb2xXaWR0aCArIChjb250ZW50V2lkdGggLSB0YWJsZVdpZHRoKSAtIDEwOyAvLyBhY2NvdW50IGZvciB0aGUgdmVydGljYWwgc2Nyb2xsYmFyO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyogb25jaGFuZ2UgRXZlbnRzICovXHJcbiAgcHVibGljIGZpbHRlckNoYW5nZShldmVudDogYW55KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy56Z3JpZCkge1xyXG4gICAgICB0aGlzLnpncmlkLmZpbHRlckNoYW5nZShldmVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcGFnZUNoYW5nZShldmVudDogUGFnZUNoYW5nZUV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy56Z3JpZCkge1xyXG4gICAgICB0aGlzLnpncmlkLnBhZ2VDaGFuZ2UoZXZlbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHNvcnRDaGFuZ2Uoc29ydDogU29ydERlc2NyaXB0b3JbXSk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuemdyaWQpIHtcclxuICAgICAgdGhpcy56Z3JpZC5zb3J0Q2hhbmdlKHNvcnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGluQ2VsbENoZWNrQm94T25DaGFuZ2UoZXZlbnQ6IGFueSwgcm93SW5kZXg6IGFueSwgY29sdW1uOiBhbnkpIHtcclxuICAgIGNvbnN0IGlzQ2hlY2tlZCA9IGV2ZW50LmRldGFpbC5jaGVja2VkO1xyXG4gICAgdGhpcy5nRGF0YVtyb3dJbmRleF1bY29sdW1uLlZhbHVlXSA9IGlzQ2hlY2tlZDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjb2x1bW5zT3JkZXJDaGFuZ2VkKGV2ZW50OiBDb2x1bW5SZW9yZGVyRXZlbnQpOiB2b2lkIHtcclxuICAgIGNvbnN0IF96Z3JpZENvbnRyb2wgPSB0aGlzLnpncmlkIGFzIFpHcmlkO1xyXG4gICAgY29uc3QgX3pncmlkQ29tcG9uZW50ID0gdGhpcy56Z3JpZC5ncmlkIGFzIEdyaWRDb21wb25lbnQ7XHJcbiAgICBjb25zdCBfZGF0YSA9IF96Z3JpZENvbXBvbmVudC5kYXRhIGFzIEdyaWREYXRhUmVzdWx0O1xyXG5cclxuICAgIGlmICh0aGlzLnpncmlkKSB7XHJcbiAgICAgIGNvbnN0IF96Z3JpZCA9IHRoaXMuemdyaWQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldHVwR3JpZEJ1dHRvbnMoKSB7XHJcbiAgICBpZiAodGhpcy5kYXRhLkdyaWRCdXR0b25GaWVsZE5hbWVfV0YgfHwgdGhpcy5kYXRhLkdyaWRCdXR0b25GaWVsZE5hbWUpIHtcclxuICAgICAgdGhpcy5ncmlkQnRuID0ge1xyXG4gICAgICAgIFJlYWRPbmx5OiBmYWxzZSxcclxuICAgICAgICBWaXNpYmxlOiB0cnVlLFxyXG4gICAgICAgIElzUmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICAgIFdvcmtmbG93Q29kZTogdGhpcy5kYXRhLkdyaWRCdXR0b25GaWVsZE5hbWVfV0YsXHJcbiAgICAgICAgVmFsdWU6IHRoaXMuZGF0YS5HcmlkQnV0dG9uRmllbGROYW1lLFxyXG4gICAgICAgIFR5cGU6IHRoaXMuZGF0YS5HcmlkQnV0dG9uRmllbGROYW1lX1dGID8gXCJ6d29ya2Zsb3didXR0b25zXCIgOiBcInpidXR0b25zXCJcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyogZ3JpZCBjb21tYW5kIGhhbmRsZXIgKi9cclxuICBwdWJsaWMgYWRkSGFuZGxlcih7IHNlbmRlciB9KSB7XHJcbiAgICB0aGlzLmlzTmV3ID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBjbG9zZSBhbnkgZXhpc3RpbmcgZWRpdG9yXHJcbiAgICB0aGlzLmNsb3NlRWRpdG9yKHNlbmRlcik7XHJcblxyXG4gICAgLy8gbG9vcCBhbGwgY29sdW1uIHRvIGdldCB2YWxpZGF0aW9uIGFuZCBjcmVhdGUgZm9ybSBjb250cm9sXHJcbiAgICBjb25zdCBjb2xGb3JtQ29udHJvbCA9IHt9O1xyXG4gICAgdGhpcy56Z3JpZC5ncmlkQ29sdW1ucy5mb3JFYWNoKGNvbCA9PiB7XHJcbiAgICAgIGNvbnN0IHZhbGlkYXRvcnM6IFZhbGlkYXRvckZuW10gPSBbXTtcclxuICAgICAgaWYgKGNvbC5Jc1JlcXVpcmVkKSB7XHJcbiAgICAgICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb2wuVmFsaWRhdG9yUGF0dGVybikge1xyXG4gICAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLnBhdHRlcm4oY29sLlZhbGlkYXRvclBhdHRlcm4pKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29sRm9ybUNvbnRyb2xbY29sLlZhbHVlXSA9IG5ldyBGb3JtQ29udHJvbChudWxsLCB2YWxpZGF0b3JzKTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIHNldCBmb3JtIGNvbnRyb2wgb2JqZWN0IHRvIGZvcm0gZ3JvdXBcclxuICAgIHRoaXMuZm9ybUdyb3VwID0gbmV3IEZvcm1Hcm91cChjb2xGb3JtQ29udHJvbCk7XHJcblxyXG4gICAgLy8gYWRkIHRvIGdyaWQgcm93XHJcbiAgICBzZW5kZXIuYWRkUm93KHRoaXMuZm9ybUdyb3VwKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzYXZlSGFuZGxlcih7IHNlbmRlciwgcm93SW5kZXgsIGZvcm1Hcm91cCwgaXNOZXcgfSk6IHZvaWQge1xyXG4gICAgLy8gZ2V0IGdyaWQgZGF0YS5cclxuICAgIGNvbnN0IGdyaWRFeGlzdGluZ0RhdGEgPSB0aGlzLmdEYXRhID8gdGhpcy5nRGF0YSA6IHRoaXMuZ3JpZERhdGEgPyB0aGlzLmdyaWREYXRhLmRhdGEgOiBbXTtcclxuXHJcbiAgICAvLyBpZiB2YWxpZFxyXG4gICAgaWYgKGZvcm1Hcm91cC52YWxpZCkge1xyXG4gICAgICAvLyBjaGVjayBmb3IgZHVwbGljYXRlIFVuaXF1ZUtleVxyXG4gICAgICBsZXQgdW5pcXVlS2V5RXhpc3Q6IGJvb2xlYW47XHJcbiAgICAgIGNvbnN0IHVuaXF1ZUtleSA9IHRoaXMuZGF0YVsnVW5pcXVlS2V5J107XHJcbiAgICAgIGlmICh1bmlxdWVLZXkpIHtcclxuICAgICAgICBjb25zdCBmb3JtVW5pcXVlS2V5VmFsdWUgPSBmb3JtR3JvdXAudmFsdWVbdW5pcXVlS2V5XTtcclxuXHJcbiAgICAgICAgaWYgKGlzTmV3IHx8ICghaXNOZXcgJiYgKGdyaWRFeGlzdGluZ0RhdGFbcm93SW5kZXhdW3VuaXF1ZUtleV0gIT0gZm9ybVVuaXF1ZUtleVZhbHVlKSkpIHtcclxuICAgICAgICAgIC8vIGlmIG5ldy4uLlxyXG4gICAgICAgICAgLy8gaWYgZWRpdC4uLiBpZiBjdXJyZW50IGZpZWxkLCB1bmlxdWVrZXkgdmFsdWUgY2hhbmdlZC4gbmVlZCB0byBjaGVjay5cclxuICAgICAgICAgIGdyaWRFeGlzdGluZ0RhdGEuZm9yRWFjaChkYXRhID0+IHtcclxuICAgICAgICAgICAgaWYgKGRhdGFbdW5pcXVlS2V5XSA9PT0gZm9ybVVuaXF1ZUtleVZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgdW5pcXVlS2V5RXhpc3QgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoIXVuaXF1ZUtleUV4aXN0KSB7XHJcbiAgICAgICAgaWYgKGlzTmV3KSB7XHJcbiAgICAgICAgICAvLyBpZiBuZXcsIHB1c2ggdG8gZGF0YVxyXG4gICAgICAgICAgZ3JpZEV4aXN0aW5nRGF0YS5wdXNoKGZvcm1Hcm91cC52YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgLy8gaWYgZWRpdCwgdXBkYXRlIGRhdGFcclxuICAgICAgICAgIGdyaWRFeGlzdGluZ0RhdGFbcm93SW5kZXhdID0gZm9ybUdyb3VwLnZhbHVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zZXREYXRhKGdyaWRFeGlzdGluZ0RhdGEpO1xyXG5cclxuICAgICAgICBzZW5kZXIuY2xvc2VSb3cocm93SW5kZXgpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLnNob3coJ0Vycm9yIG9jY3VyOiBEdXBsaWNhdGVkIHVuaXF1ZSBmaWVsZCBlbnRyeS4nLCAndG9wJywgdHJ1ZSwgMzAwMCwgJ2RhbmdlcicpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2FuY2VsSGFuZGxlcih7IHNlbmRlciwgcm93SW5kZXggfSkge1xyXG4gICAgLy8gY2FuY2VsIGFueSBleGlzdGluZyBlZGl0b3JcclxuICAgIHNlbmRlci5jbG9zZVJvdyhyb3dJbmRleCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZWRpdEhhbmRsZXIoeyBzZW5kZXIsIHJvd0luZGV4LCBkYXRhSXRlbSB9KSB7XHJcbiAgICB0aGlzLmlzTmV3ID0gZmFsc2U7XHJcblxyXG4gICAgLy8gY2xvc2UgYW55IGV4aXN0aW5nIGVkaXRvclxyXG4gICAgdGhpcy5jbG9zZUVkaXRvcihzZW5kZXIpO1xyXG5cclxuICAgIC8vIGxvb3AgYWxsIGNvbHVtbiB0byBnZXQgdmFsaWRhdGlvbiBhbmQgY3JlYXRlIGZvcm0gY29udHJvbCwgYXBwZW5kIGN1cnJlbnQgcm93IHZhbHVlXHJcbiAgICBjb25zdCBjb2xGb3JtQ29udHJvbCA9IHt9O1xyXG4gICAgdGhpcy56Z3JpZC5ncmlkQ29sdW1ucy5mb3JFYWNoKGNvbCA9PiB7XHJcbiAgICAgIGNvbnN0IHZhbGlkYXRvcnM6IFZhbGlkYXRvckZuW10gPSBbXTtcclxuICAgICAgaWYgKGNvbC5Jc1JlcXVpcmVkKSB7XHJcbiAgICAgICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb2wuVmFsaWRhdG9yUGF0dGVybikge1xyXG4gICAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLnBhdHRlcm4oY29sLlZhbGlkYXRvclBhdHRlcm4pKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29sRm9ybUNvbnRyb2xbY29sLlZhbHVlXSA9IG5ldyBGb3JtQ29udHJvbChkYXRhSXRlbVtjb2wuVmFsdWVdLCB2YWxpZGF0b3JzKTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIHNldCBmb3JtIGNvbnRyb2wgb2JqZWN0IHRvIGZvcm0gZ3JvdXBcclxuICAgIHRoaXMuZm9ybUdyb3VwID0gbmV3IEZvcm1Hcm91cChjb2xGb3JtQ29udHJvbCk7XHJcblxyXG4gICAgLy8gc2V0IGdyaWQgcm93IHRvIGVkaXRcclxuICAgIHRoaXMuZWRpdGVkUm93SW5kZXggPSByb3dJbmRleDtcclxuICAgIHNlbmRlci5lZGl0Um93KHJvd0luZGV4LCB0aGlzLmZvcm1Hcm91cCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVtb3ZlSGFuZGxlcih7IHNlbmRlciwgZGF0YUl0ZW0gfSkge1xyXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmdldEl0ZW1JbmRleChkYXRhSXRlbSwgdGhpcy5nRGF0YSwgdGhpcy5kYXRhWydVbmlxdWVLZXknXSk7XHJcbiAgICB0aGlzLmdEYXRhLnNwbGljZShpbmRleCwgMSk7XHJcblxyXG4gICAgc2VuZGVyLmNhbmNlbENlbGwoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2xvc2VFZGl0b3IoZ3JpZCwgcm93SW5kZXggPSB0aGlzLmVkaXRlZFJvd0luZGV4KSB7XHJcbiAgICBncmlkLmNsb3NlUm93KHJvd0luZGV4KTtcclxuICAgIHRoaXMuZWRpdGVkUm93SW5kZXggPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLmZvcm1Hcm91cCA9IHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0SXRlbUluZGV4KGl0ZW06IGFueSwgZGF0YTogYW55W10sIGtleTogc3RyaW5nKTogbnVtYmVyIHtcclxuICAgIGZvciAobGV0IGlkeCA9IDA7IGlkeCA8IGRhdGEubGVuZ3RoOyBpZHgrKykge1xyXG4gICAgICBpZiAoZGF0YVtpZHhdW2tleV0gPT09IGl0ZW1ba2V5XSkge1xyXG4gICAgICAgIHJldHVybiBpZHg7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gLTE7XHJcbiAgfVxyXG5cclxuICAvLyNyZWdpb24gR3JpZiBGaWx0ZXJcclxuICBwcml2YXRlIHNldHVwRmlsdGVyRmVhdHVyZSgpIHtcclxuICAgIGlmICh0aGlzLmRhdGEuR3JpZEZpbHRlckJhckZpZWxkKSB7XHJcbiAgICAgIHRoaXMuZmlsdGVyR3JvdXAgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmdyb3VwKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmRhdGEuR3JpZEFkdkZpbHRlckJhckZpZWxkKSB7XHJcbiAgICAgIHRoaXMuYWR2ZmlsdGVyR3JvdXAgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmdyb3VwKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZWFyY2goKSB7XHJcbiAgICBjb25zdCBmb3JtID0gdGhpcy5maWx0ZXJHcm91cC5mb3JtO1xyXG4gICAgY29uc3QgY29udHJvbHMgPSBmb3JtLmNvbnRyb2xzO1xyXG5cclxuICAgIGlmICh0aGlzLmlzU2hvd0FkdkZpbHRlcikge1xyXG4gICAgICBjb25zdCBhZHZmb3JtID0gdGhpcy5hZHZmaWx0ZXJHcm91cC5mb3JtO1xyXG4gICAgICBjb25zdCBhZHZjb250cm9scyA9IGFkdmZvcm0uY29udHJvbHM7XHJcbiAgICAgIGZvciAoY29uc3QgYyBvZiBPYmplY3Qua2V5cyhhZHZjb250cm9scykpIHtcclxuICAgICAgICBjb250cm9sc1tjXSA9IGFkdmNvbnRyb2xzW2NdO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuZGF0YS5GaWx0ZXJTZWFyY2gpIHtcclxuICAgICAgdGhpcy5ncm91cC5zdWJqZWN0Lm5leHQoe1xyXG4gICAgICAgIHR5cGU6IFwiemdyaWQtZmlsdGVyc2VhcmNoXCIsXHJcbiAgICAgICAgdGFyZ2V0OiB0aGlzLmRhdGEuRmlsdGVyU2VhcmNoLFxyXG4gICAgICAgIGRhdGE6IHsgZm9ybWNvbnRyb2xzOiBjb250cm9scyB9LFxyXG4gICAgICB9IGFzIFpDb21wb25lbnRPdXRwdXRFdmVudCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5wYXJhbXMuZmlsdGVyUGFyYW1zID0gW107XHJcbiAgICAgIE9iamVjdC5rZXlzKGNvbnRyb2xzKS5mb3JFYWNoKGNvbnRyb2xOYW1lID0+IHtcclxuICAgICAgICBpZiAoY29udHJvbHNbY29udHJvbE5hbWVdLnZhbHVlKSB7XHJcbiAgICAgICAgICBjb25zdCBmaWVsZCA9IFpDb21wb25lbnRIZWxwZXIuZ2V0RmllbGRGcm9tRmllbGRzQnlWYWx1ZSh0aGlzLmZpbHRlckdyb3VwLmZpZWxkcywgY29udHJvbE5hbWUpIHx8IFpDb21wb25lbnRIZWxwZXIuZ2V0RmllbGRGcm9tRmllbGRzQnlWYWx1ZSh0aGlzLmFkdmZpbHRlckdyb3VwLmZpZWxkcywgY29udHJvbE5hbWUpO1xyXG4gICAgICAgICAgdGhpcy5wYXJhbXMuZmlsdGVyUGFyYW1zLnB1c2goe1xyXG4gICAgICAgICAgICBrZXk6IGZpZWxkLlZhbHVlRXhwciB8fCBmaWVsZC5WYWx1ZSxcclxuICAgICAgICAgICAgb3BzOiB0aGlzLm1hcEZpbHRlck9wZXJhdG9yQnlGaWVsZFR5cGUoZmllbGQpLFxyXG4gICAgICAgICAgICB2YWx1ZTogY29udHJvbHNbY29udHJvbE5hbWVdLnZhbHVlXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuZ2V0RGF0YSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGNhbmNlbEVkaXQoKSB7XHJcbiAgICB0aGlzLmNsZWFyRmlsdGVyRGF0YSh0aGlzLmZpbHRlckdyb3VwKTtcclxuICAgIGlmICh0aGlzLmRhdGEuR3JpZEFkdkZpbHRlckJhckZpZWxkKSB7XHJcbiAgICAgIHRoaXMuY2xlYXJGaWx0ZXJEYXRhKHRoaXMuYWR2ZmlsdGVyR3JvdXApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjbGVhckZpbHRlckRhdGEoZ3JvdXA6IFpHcm91cCkge1xyXG4gICAgY29uc3QgZm9ybSA9IGdyb3VwLmZvcm0gYXMgRm9ybUdyb3VwO1xyXG4gICAgY29uc3QgY29udHJvbHMgPSBmb3JtLmNvbnRyb2xzO1xyXG4gICAgT2JqZWN0LmtleXMoY29udHJvbHMpLmZvckVhY2goY29udHJvbE5hbWUgPT4ge1xyXG4gICAgICBaQ29tcG9uZW50SGVscGVyLnNldE1vZGVsVmFsdWUoY29udHJvbE5hbWUsIG51bGwsIGdyb3VwLCB0cnVlKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFkdmFuY2VkU2VhcmNoKCkge1xyXG4gICAgdGhpcy5pc1Nob3dBZHZGaWx0ZXIgPSAhdGhpcy5pc1Nob3dBZHZGaWx0ZXI7XHJcbiAgICBpZiAoIXRoaXMuaXNTaG93QWR2RmlsdGVyKSB7XHJcbiAgICAgIHRoaXMuY2xlYXJGaWx0ZXJEYXRhKHRoaXMuYWR2ZmlsdGVyR3JvdXApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBtYXBGaWx0ZXJPcGVyYXRvckJ5RmllbGRUeXBlKGZpZWxkOiBaRmllbGQpIHtcclxuICAgIHN3aXRjaCAoZmllbGQuVHlwZSkge1xyXG4gICAgICBjYXNlIFwibnVtYmVyXCI6XHJcbiAgICAgIGNhc2UgXCJudW1lcmljXCI6XHJcbiAgICAgIGNhc2UgXCJkYXRlXCI6XHJcbiAgICAgIGNhc2UgXCJlbWFpbFwiOlxyXG4gICAgICBjYXNlIFwicGFzc3dvcmRcIjpcclxuICAgICAgY2FzZSBcInRlbFwiOlxyXG4gICAgICBjYXNlIFwidGV4dFwiOlxyXG4gICAgICBjYXNlIFwidXJsXCI6XHJcbiAgICAgIGNhc2UgXCJjdXJyZW5jeVwiOlxyXG4gICAgICBjYXNlIFwidGV4dGFyZWFcIjpcclxuICAgICAgICBpZiAoIWZpZWxkWydGaWx0ZXJDb250YWluc1VzaW5nRXF1YWwnXSkge1xyXG4gICAgICAgICAgcmV0dXJuIFwiY29udGFpbnNcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIFwiPT1cIjtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gXCI9XCI7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG59XHJcbiIsIjwhLS1cclxuPGRpdiBzdHlsZT1cIm1hcmdpbjogMTBweFwiPlxyXG4gIDxkaXYgY2xhc3M9XCJjYXJkXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJsb2NrIGstZm9ybVwiPlxyXG4gICAgICAgICAgPGZpZWxkc2V0PlxyXG4gICAgICAgICAgICA8bGVnZW5kPkJpbmRpbmcgdHlwZXM8L2xlZ2VuZD5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImstZm9ybS1maWVsZFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4+QmluZCB0aGUgZGF0YSB0bzo8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgWyhuZ01vZGVsKV09XCJiaW5kaW5nVHlwZVwiIHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJtb2RlXCIgaWQ9XCJhcnJheVwiIHZhbHVlPVwiYXJyYXlcIiBjbGFzcz1cImstcmFkaW9cIlxyXG4gICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJjaGFuZ2VCaW5kaW5nVHlwZSgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJrLXJhZGlvLWxhYmVsXCIgZm9yPVwiYXJyYXlcIj5BcnJheSBvYmplY3Q8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IFsobmdNb2RlbCldPVwiYmluZGluZ1R5cGVcIiB0eXBlPVwicmFkaW9cIiBuYW1lPVwibW9kZVwiIGlkPVwiZ3JpZERhdGFSZXN1bHRcIiB2YWx1ZT1cImdyaWREYXRhUmVzdWx0XCIgY2xhc3M9XCJrLXJhZGlvXCJcclxuICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwiY2hhbmdlQmluZGluZ1R5cGUoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiay1yYWRpby1sYWJlbFwiIGZvcj1cImdyaWREYXRhUmVzdWx0XCI+R3JpZERhdGFSZXN1bHQgb2JqZWN0PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBbKG5nTW9kZWwpXT1cImJpbmRpbmdUeXBlXCIgdHlwZT1cInJhZGlvXCIgbmFtZT1cIm1vZGVcIiBpZD1cImFzeW5jXCIgdmFsdWU9XCJhc3luY1wiIGNsYXNzPVwiay1yYWRpb1wiXHJcbiAgICAgICAgICAgICAgICAoY2hhbmdlKT1cImNoYW5nZUJpbmRpbmdUeXBlKCRldmVudClcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImstcmFkaW8tbGFiZWxcIiBmb3I9XCJhc3luY1wiPkFzeW5jaHJvbm91cyBzb3VyY2U8L2xhYmVsPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZmllbGRzZXQ+XHJcbiAgICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj4gLS0+XHJcbjxkaXYgY2xhc3M9XCJncmlkLWNvbnRhaW5lciBlMXRhZy1zdHlsZVwiIFtuZ0NsYXNzXT1cImRhdGEuQ2xhc3NcIiBbY2xhc3NdPVwiZGF0YS5Db21wb25lbnRTdHlsZVR5cGVcIiBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZVwiPlxyXG4gIDxuZy1jb250YWluZXIgZWxlbWVudGNvbnRhaW5lcj48L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgPCEtLSA8ZGl2ICpuZ0lmPVwiZGF0YS5UaXRsZVwiIGNsYXNzPVwiZ3JpZFRpdGxlXCI+e3tkYXRhLlRpdGxlfX08L2Rpdj4gLS0+XHJcbiAgPG5nLXRlbXBsYXRlICN0ZW1wbGF0ZSBsZXQtYW5jaG9yPlxyXG4gICAgLWFcclxuICAgIDxzcGFuPnt7IGFuY2hvci5uYXRpdmVFbGVtZW50LmlubmVyVGV4dCB9fTwvc3Bhbj5cclxuICA8L25nLXRlbXBsYXRlPlxyXG4gIDxrZW5kby1wb3BvdmVyICNncmlkUG9wT3ZlciBbcG9zaXRpb25dPVwiZGF0YS5Qb3BPdmVyUG9zaXRpb24gfHwgJ2JvdHRvbSdcIiBbdGVtcGxhdGVEYXRhXT1cImdldENvbnRleHREYXRhLmJpbmQodGhpcylcIj5cclxuICAgIDwhLS0gPG5nLXRlbXBsYXRlIGtlbmRvUG9wb3ZlclRpdGxlVGVtcGxhdGUgbGV0LWRhdGE9XCJkYXRhXCIgPlxyXG4gICAgICA8ZGl2IFtzdHlsZV09XCJkYXRhLlRpdGxlU3R5bGVcIiAqbmdJZj1cImRhdGEgJiYgZGF0YS5UaXRsZVwiIFtpbm5lckhUTUxdPVwiZGF0YS5UaXRsZVwiPjwvZGl2PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT4gLS0+XHJcbiAgICA8bmctdGVtcGxhdGUga2VuZG9Qb3BvdmVyQm9keVRlbXBsYXRlIGxldC1kYXRhPVwiZGF0YVwiPlxyXG4gICAgICA8ZGl2IFtzdHlsZV09XCJkYXRhLkJvZHlTdHlsZVwiIGNsYXNzPVwicG9wb3ZlcmJvZHlcIiAqbmdJZj1cImRhdGEgJiYgZGF0YS5Cb2R5XCIgW2lubmVySFRNTF09XCJkYXRhLkJvZHkgfCBodG1sU2FuaXRpemVcIiBbbmdDbGFzc109XCJkYXRhLkJvZHlDbGFzc1wiIChtb3VzZWxlYXZlKT1cImNsb3NlUG9wT3Zlci5jYWxsKHRoaXMsICRldmVudClcIj48L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgPC9rZW5kby1wb3BvdmVyPlxyXG5cclxuICA8ZGl2IGtlbmRvVG9vbHRpcCBzaG93T249XCJub25lXCIgW3Rvb2x0aXBUZW1wbGF0ZV09XCJ0ZW1wbGF0ZVwiIGZpbHRlcj1cIi5rLWdyaWQgdGRcIiAobW91c2VvdmVyKT1cInNob3dUb29sdGlwKCRldmVudClcIiBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZTFcIiBjbGFzcz1cImUxdGFnLXN0eWxlMVwiPlxyXG4gICAgPGRpdiBrZW5kb1BvcG92ZXJDb250YWluZXIgW3BvcG92ZXJdPVwiZ3JpZFBvcE92ZXJcIiBmaWx0ZXI9XCJkaXYuZ3JpZENlbGwud2l0aFBvcG92ZXJJbkdyaWRcIiBzaG93T249XCJub25lXCIga2VuZG9Qb3BvdmVyQ29udGFpbmVyICNwb3BvdmVyY29udGFpbmVyPVwia2VuZG9Qb3BvdmVyQ29udGFpbmVyXCI+XHJcbiAgICAgIDxrZW5kby1ncmlkIFt6Z3JpZGJpbmRpbmddPVwie2RhdGE6IGRhdGEsIGdyb3VwOiBncm91cCwgcGFyYW1zOiBwYXJhbXMsIGdyaWRTdWJqZWN0OiBncmlkU3ViamVjdH1cIiBbbmdDbGFzc109XCJkYXRhLkNsYXNzXCIgW2NsYXNzXT1cImRhdGEuQ29tcG9uZW50U3R5bGVUeXBlXCIgY2xhc3M9XCJkZXNrdG9wLWdyaWQgZTF0YWctc3R5bGUyXCJcclxuICAgICAgICAgICAgICAgICAgW2RhdGFdPVwiZ3JpZERhdGFcIlxyXG4gICAgICAgICAgICAgICAgICBbc2Nyb2xsYWJsZV09XCJkYXRhLnNjcm9sbEFibGUgPT09IGZhbHNlID8gJ25vbmUnIDogJ3Njcm9sbGFibGUnXCJcclxuICAgICAgICAgICAgICAgICAgW3BhZ2VTaXplXT1cInN0YXRlLnRha2VcIlxyXG4gICAgICAgICAgICAgICAgICBbcGFnZWFibGVdPVwicGFnZWFibGVcIlxyXG4gICAgICAgICAgICAgICAgICBbY2xhc3MuaGlkZW4tcGFnZXJdPVwiIXBhZ2VhYmxlXCJcclxuICAgICAgICAgICAgICAgICAgW3NraXBdPVwic3RhdGUuc2tpcFwiXHJcbiAgICAgICAgICAgICAgICAgIFtzb3J0XT1cInN0YXRlLnNvcnRcIlxyXG4gICAgICAgICAgICAgICAgICBbc29ydGFibGVdPVwie2FsbG93VW5zb3J0OiB0cnVlLG1vZGU6ICdtdWx0aXBsZSd9XCJcclxuICAgICAgICAgICAgICAgICAgW2ZpbHRlcl09XCJzdGF0ZS5maWx0ZXJcIlxyXG4gICAgICAgICAgICAgICAgICBbZmlsdGVyYWJsZV09XCJkYXRhLmVuYWJsZUZpbHRlcmluZyAhPT0gZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICBbcmVzaXphYmxlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICBbcmVvcmRlcmFibGVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtjb2x1bW5NZW51XT1cImRhdGEuRGlzYWJsZUdyaWRDb2x1bW5NZW51ID8gZmFsc2UgOiB7IGZpbHRlcjogdHJ1ZSB9XCJcclxuICAgICAgICAgICAgICAgICAgW2hpZGRlbl09XCIhKCEhY29tcG9uZW50UHJvcGVydGllcy5pc1Zpc2libGVGaWVsZCA/IGdyb3VwW2NvbXBvbmVudFByb3BlcnRpZXMuaXNWaXNpYmxlRmllbGRdIDogY29tcG9uZW50UHJvcGVydGllcy5pc1Zpc2libGUpXCJcclxuICAgICAgICAgICAgICAgICAgKGNlbGxDbGljayk9XCJjZWxsQ2xpY2tIYW5kbGVyKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAoY2VsbENsb3NlKT1cImVkaXRDZWxsQ2xvc2VIYW5kbGVyKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAoZGF0YVN0YXRlQ2hhbmdlKT1cImRhdGFTdGF0ZUNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgKHBhZ2VDaGFuZ2UpPVwicGFnZUNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgKHNvcnRDaGFuZ2UpPVwic29ydENoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgKGZpbHRlckNoYW5nZSk9XCJmaWx0ZXJDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIChjb2x1bW5SZW9yZGVyKT1cImNvbHVtbnNPcmRlckNoYW5nZWQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIFtrZW5kb0dyaWRTZWxlY3RCeV09XCJyb3dTZWxlY3Rpb25LZXlcIlxyXG4gICAgICAgICAgICAgICAgICBbc2VsZWN0YWJsZV09XCJzZWxlY3RhYmxlU2V0dGluZ3NcIlxyXG4gICAgICAgICAgICAgICAgICBbKHNlbGVjdGVkS2V5cyldPVwibXlTZWxlY3Rpb25cIlxyXG4gICAgICAgICAgICAgICAgICBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZTJcIlxyXG4gICAgICAgICAgICAgICAgICBbdHJhY2tCeV09XCJ0cmFja0J5XCJcclxuICAgICAgICAgICAgICAgICAgKGNhbmNlbCk9XCJjYW5jZWxIYW5kbGVyKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAoc2F2ZSk9XCJzYXZlSGFuZGxlcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgKHJlbW92ZSk9XCJyZW1vdmVIYW5kbGVyKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAoZWRpdCk9XCJlZGl0SGFuZGxlcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgKGFkZCk9XCJhZGRIYW5kbGVyKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAoY29sdW1uUmVzaXplKT1cImFkanVzdFdpZHRoVXBvblJlc2l6ZSgpXCI+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlIGtlbmRvR3JpZFRvb2xiYXJUZW1wbGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImRhdGEuQWxsb3dSZWZyZXNoQnV0dG9uIHx8IGRhdGEuQWxsb3dFeHBvcnQgfHwgZGF0YS5BbGxvd1NhdmVTdGF0ZSB8fCBkYXRhLlRpdGxlIHx8IGRhdGEuR3JpZEJ1dHRvbkZpZWxkTmFtZV9XRiB8fCBkYXRhLkdyaWRCdXR0b25GaWVsZE5hbWUgfHwgZGF0YS5FbmFibGVHcmlkQ29tbWFuZFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRvb2xiYXItbGVmdC1pdGVtXCIgKm5nSWY9XCJkYXRhLlRpdGxlIHx8IGRhdGEuQWxsb3dSZWZyZXNoQnV0dG9uXCI+XHJcbiAgICAgICAgICAgIDwhLS0gPGZhLWljb24gKm5nSWY9XCJkYXRhLkljb25cIiBjbGFzcz1cImdyaWRUaXRsZUljb25cIiBbaWNvbl09XCJkYXRhLkljb25cIj48L2ZhLWljb24+IC0tPlxyXG4gICAgICAgICAgICA8a2VuZG8tbGFiZWwgY2xhc3M9XCJncmlkVGl0bGVcIj57e2RhdGEuVGl0bGV9fTwva2VuZG8tbGFiZWw+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwibGVmdC1idXR0b25zXCIga2VuZG9CdXR0b24gKGNsaWNrKT1cInJlZnJlc2hEYXRhKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZGF0YS5BbGxvd1JlZnJlc2hCdXR0b25cIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImstaWNvbiBrLWdyaWQtYnV0dG9uIGstaS1yZWZyZXNoLXNtXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRvb2xiYXItcmlnaHQtaXRlbVwiICpuZ0lmPVwiZ3JpZEJ0biB8fCBkYXRhLkFsbG93U2F2ZVN0YXRlIHx8IGdyaWREZWZhdWx0U3RhdGVFeGlzdCB8fCBkYXRhLkVuYWJsZUdyaWRDb21tYW5kXCI+XHJcbiAgICAgICAgICAgIDxhcHAtendvcmtmbG93YnV0dG9ucyAqbmdJZj1cImdyaWRCdG4gJiYgZ3JpZEJ0bi5UeXBlID09PSAnendvcmtmbG93YnV0dG9ucydcIiBbZGF0YV09XCJncmlkQnRuXCIgW2dyb3VwXT1cImdyb3VwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtXT1cImZvcm1cIj48L2FwcC16d29ya2Zsb3didXR0b25zPlxyXG4gICAgICAgICAgICA8YXBwLXpidXR0b25zICpuZ0lmPVwiZ3JpZEJ0biAmJiBncmlkQnRuLlR5cGUgPT09ICd6YnV0dG9ucydcIiBbZGF0YV09XCJncmlkQnRuXCIgW2dyb3VwXT1cImdyb3VwXCIgW2Zvcm1dPVwiZm9ybVwiPlxyXG4gICAgICAgICAgICA8L2FwcC16YnV0dG9ucz5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIga2VuZG9HcmlkRXhjZWxDb21tYW5kICpuZ0lmPVwiZGF0YS5BbGxvd0V4cG9ydFwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiay1pY29uIGstaS1maWxlLWV4Y2VsXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgIHt7IGdldFRvb2xCYXJJdGVtTGFiZWxOYW1lKCdFeHBvcnQgRGF0YSB0byBFeGNlbCcpIH19XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBrZW5kb0J1dHRvbiAoY2xpY2spPVwic2F2ZUdyaWRTZXR0aW5ncygpXCIgKm5nSWY9XCJkYXRhLkFsbG93U2F2ZVN0YXRlXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJrLWljb24gay1pY29uLXdpdGgtdGV4dCBrLWktc3RhclwiPjwvc3Bhbj57eyBnZXRUb29sQmFySXRlbUxhYmVsTmFtZSgnU2F2ZSBTZXR0aW5ncycpIH19XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBrZW5kb0J1dHRvbiAoY2xpY2spPVwicmVzdG9yZUdyaWRTZXR0aW5ncygpXCIgKm5nSWY9XCJncmlkRGVmYXVsdFN0YXRlRXhpc3RcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImstaWNvbiBrLWljb24td2l0aC10ZXh0IGstaS1zdGFyLW91dGxpbmVcIj48L3NwYW4+e3sgZ2V0VG9vbEJhckl0ZW1MYWJlbE5hbWUoJ1Jlc3RvcmUgU2V0dGluZ3MnKSB9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIga2VuZG9HcmlkQWRkQ29tbWFuZCAqbmdJZj1cImRhdGEuRW5hYmxlR3JpZENvbW1hbmRcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImstaWNvbiBrLWljb24td2l0aC10ZXh0IGstaS1hZGRcIj48L3NwYW4+e3sgZ2V0VG9vbEJhckl0ZW1MYWJlbE5hbWUoJ0FkZCBOZXcnKSB9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZpbHRlci1jb250YWluZXJcIiAqbmdJZj1cImRhdGEuR3JpZEZpbHRlckJhckZpZWxkXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJub3JtYWwtZmlsdGVyLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgIDxhcHAtemZvcm0gY2xhc3M9XCJmaWx0ZXItZmllbGRzXCIgW2dyb3VwXT1cImZpbHRlckdyb3VwXCIgW2ZpZWxkTmFtZV09XCJkYXRhLkdyaWRGaWx0ZXJCYXJGaWVsZFwiPjwvYXBwLXpmb3JtPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXItYnV0dG9uc1wiIFtuZ0NsYXNzXT1cImRhdGEuQ2xhc3NcIj5cclxuICAgICAgICAgICAgICAgIDxpb24tYnV0dG9uIGZpbGw9XCJzb2xpZFwiIHNpemU9XCJkZWZhdWx0XCIgc3Ryb25nPVwidHJ1ZVwiIGNvbG9yPVwicHJpbWFyeVwiIChjbGljayk9XCJzZWFyY2goKVwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZmEtaWNvbiBpY29uPVwic2VhcmNoXCI+PC9mYS1pY29uPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJ0bi1sYWJlbCBpb24tdGV4dC1jYXBpdGFsaXplXCI+e3sgZ2V0VG9vbEJhckl0ZW1MYWJlbE5hbWUoJ1NlYXJjaCcpIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9pb24tYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGlvbi1idXR0b24gZmlsbD1cIm91dGxpbmVcIiBzaXplPVwiZGVmYXVsdFwiIHN0cm9uZz1cInRydWVcIiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwiY2FuY2VsRWRpdCgpXCIgKm5nSWY9XCJkYXRhLklzU2hvd0dyaWRDYW5jZWxGaWx0ZXJCdXR0b25cIj5cclxuICAgICAgICAgICAgICAgICAgPGZhLWljb24gaWNvbj1cInRpbWVzXCI+PC9mYS1pY29uPlxyXG4gICAgICAgICAgICAgICAgPC9pb24tYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGlvbi1idXR0b24gZmlsbD1cInNvbGlkXCIgc2l6ZT1cImRlZmF1bHRcIiBzdHJvbmc9XCJ0cnVlXCIgW25nQ2xhc3NdPVwiaXNTaG93QWR2RmlsdGVyID8gJ3RvZ2dsZU9uJyA6ICd0b2dnbGVPZmYnXCIgKGNsaWNrKT1cImFkdmFuY2VkU2VhcmNoKClcIiAqbmdJZj1cImRhdGEuR3JpZEFkdkZpbHRlckJhckZpZWxkXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxmYS1pY29uIGljb249XCJzbGlkZXJzLWhcIj48L2ZhLWljb24+XHJcbiAgICAgICAgICAgICAgICA8L2lvbi1idXR0b24+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8YXBwLXpmb3JtICpuZ0lmPVwiZGF0YS5HcmlkQWR2RmlsdGVyQmFyRmllbGRcIiBjbGFzcz1cInRvLXByZWxvYWQtdGhlLWZpZWxkc1wiIFtncm91cF09XCJhZHZmaWx0ZXJHcm91cFwiIFtmaWVsZE5hbWVdPVwiZGF0YS5HcmlkQWR2RmlsdGVyQmFyRmllbGRcIiBzdHlsZT1cImRpc3BsYXk6bm9uZTtcIj48L2FwcC16Zm9ybT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkdi1maWx0ZXItY29udGFpbmVyXCIgKm5nSWY9XCJpc1Nob3dBZHZGaWx0ZXJcIiBbQGhpZGVBbmRTaG93QW5pbWF0aW9uXT5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWR2LWZpbHRlci1zZXBlcmF0b3JcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuPlxyXG4gICAgICAgICAgICAgICAgICB7eyBnZXRUb29sQmFySXRlbUxhYmVsTmFtZSgnQWR2YW5jZWQgU2VhcmNoJykgfX1cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8YXBwLXpmb3JtIGNsYXNzPVwiYWR2ZmlsdGVyLWZpZWxkc1wiIFtncm91cF09XCJhZHZmaWx0ZXJHcm91cFwiIFtmaWVsZE5hbWVdPVwiZGF0YS5HcmlkQWR2RmlsdGVyQmFyRmllbGRcIj48L2FwcC16Zm9ybT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDxrZW5kby1ncmlkLWNoZWNrYm94LWNvbHVtbiAqbmdJZj1cIiEhZGF0YS5TZWxlY3RPcHRpb25zXCIgW3dpZHRoXT1cIjYwXCIgc2hvd1NlbGVjdEFsbD1cInRydWVcIiBbY29sdW1uTWVudV09XCJ0cnVlXCI+XHJcbiAgICAgICAgPC9rZW5kby1ncmlkLWNoZWNrYm94LWNvbHVtbj5cclxuICAgICAgICA8a2VuZG8tZ3JpZC1jb2x1bW4gW3N0eWxlXT1cImdldEdyaWRDb2x1bW5TdHlsZSgpXCIgY2xhc3M9XCJlMXRhZy1zdHlsZTNcIiAqbmdGb3I9XCJsZXQgY29sIG9mIGNvbHVtbnM7XCIgW2ZpZWxkXT1cImNvbC5maWVsZFwiIFt0aXRsZV09XCJjb2wudGl0bGVcIiBbd2lkdGhdPVwiY29sLndpZHRoXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW21pblJlc2l6YWJsZVdpZHRoXT1cImNvbC5taW5SZXNpemFibGVXaWR0aFwiIFtmaWx0ZXJdPVwiY29sLmZpbHRlclwiIFtmaWx0ZXJhYmxlXT1cImZpbHRlcmFibGUoY29sLmVuYWJsZUZpbHRlcmluZylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbc29ydGFibGVdPVwic29ydGFibGUoY29sLmVuYWJsZVNvcnRpbmcpXCIgW2hlYWRlclN0eWxlXT1cImdldEdyaWRIZWFkZXJTdHlsZSgpXCIgaGVhZGVyQ2xhc3M9XCJlMXRhZy1zdHlsZTRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9vdGVyU3R5bGVdPVwiZ2V0R3JpZEZvb3RlclN0eWxlKClcIiBmb290ZXJDbGFzcz1cImUxdGFnLXN0eWxlOVwiIFtoaWRkZW5dPVwiY29sLmhpZGRlblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtYXRdPVwiY29sLmZvcm1hdFwiIFtjbGFzc109XCJjb2wuQ2xhc3NcIiBbbG9ja2VkXT1cImxvY2tlZChjb2wpXCIgZWRpdG9yPVwibnVtZXJpY1wiIFtjb2x1bW5NZW51XT1cIiFjb2wuZGlzYWJsZUNvbHVtbk1lbnVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbZWRpdG9yXT1cImNvbC5lZGl0b3JUeXBlXCI+XHJcbiAgICAgICAgICA8ZGl2IFtuZ1N3aXRjaF09XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cImNvbC5maWVsZFR5cGUgPT09ICdudW1iZXInXHJcbiAgICAgICAgICAgICAgIHx8IGNvbC5maWVsZFR5cGUgPT09ICdjdXJyZW5jeSdcclxuICAgICAgICAgICAgICAgfHwgY29sLmZpZWxkVHlwZSA9PT0gJ3pudW1lcmljJ1wiPlxyXG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0dyaWRGaWx0ZXJDZWxsVGVtcGxhdGUgbGV0LWZpbHRlciBsZXQtY29sdW1uPVwiY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICA8a2VuZG8tZ3JpZC1udW1lcmljLWZpbHRlci1jZWxsIFtzaG93T3BlcmF0b3JzXT1cImRhdGEuSXNTaG93R3JpZEZpbHRlck9wZXJhdG9yXCIgW2NvbHVtbl09XCJjb2x1bW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZmlsdGVyXT1cImZpbHRlclwiIG9wZXJhdG9yPVwiZXFcIj5cclxuICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1lcS1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1lcS1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1uZXEtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItbmVxLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWx0LW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWx0LW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWx0ZS1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1sdGUtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItZ3Qtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItZ3Qtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItZ3RlLW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWd0ZS1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1pc251bGwtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItaXNudWxsLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWlzbm90bnVsbC1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1pc25vdG51bGwtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICA8L2tlbmRvLWdyaWQtbnVtZXJpYy1maWx0ZXItY2VsbD5cclxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiY29sLmZpZWxkVHlwZSA9PSAnemRhdGUnXHJcbiAgICAgICAgICAgICAgIHx8IGNvbC5maWVsZFR5cGUgPT09ICd6dGltZSdcclxuICAgICAgICAgICAgICAgfHwgY29sLmZpZWxkVHlwZSA9PT0gJ3pkYXRldGltZSdcclxuICAgICAgICAgICAgICAgfHwgY29sLmZpZWxkVHlwZSA9PT0gJ3p1aWRhdGV0aW1lJ1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjb2wuZmlsdGVyQnlEYXRlUmFuZ2UgPT09IHRydWVcIj5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0dyaWRGaWx0ZXJDZWxsVGVtcGxhdGUgbGV0LWZpbHRlciBsZXQtY29sdW1uPVwiY29sdW1uXCIgb3BlcmF0b3I9XCJsdGVcIj5cclxuICAgICAgICAgICAgICAgICAgPGRhdGUtcmFuZ2UtZmlsdGVyLWNlbGwgW3Nob3dPcGVyYXRvcnNdPVwiZGF0YS5Jc1Nob3dHcmlkRmlsdGVyT3BlcmF0b3JcIiBjbGFzcz1cImRhdGUtcmFuZ2UtZmlsdGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZpbHRlcl09XCJmaWx0ZXJcIiBbZmllbGRdPVwiY29sLmZpZWxkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1sdC1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1sdC1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWx0ZS1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1sdGUtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1ndC1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1ndC1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWd0ZS1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1ndGUtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1pc251bGwtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItaXNudWxsLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItaXNub3RudWxsLW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWlzbm90bnVsbC1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgPC9kYXRlLXJhbmdlLWZpbHRlci1jZWxsPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY29sLmZpbHRlckJ5RGF0ZVJhbmdlID09PSBmYWxzZVwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGtlbmRvR3JpZEZpbHRlckNlbGxUZW1wbGF0ZSBsZXQtZmlsdGVyIGxldC1jb2x1bW49XCJjb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgICAgPGtlbmRvLWdyaWQtZGF0ZS1maWx0ZXItY2VsbCBbc2hvd09wZXJhdG9yc109XCJkYXRhLklzU2hvd0dyaWRGaWx0ZXJPcGVyYXRvclwiIFtjb2x1bW5dPVwiY29sdW1uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZmlsdGVyXT1cImZpbHRlclwiIG9wZXJhdG9yPVwibHRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1sdC1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1sdC1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWx0ZS1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1sdGUtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1ndC1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1ndC1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWd0ZS1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1ndGUtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1pc251bGwtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItaXNudWxsLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItaXNub3RudWxsLW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWlzbm90bnVsbC1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgPC9rZW5kby1ncmlkLWRhdGUtZmlsdGVyLWNlbGw+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hEZWZhdWx0PlxyXG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0dyaWRGaWx0ZXJDZWxsVGVtcGxhdGUgbGV0LWZpbHRlciBsZXQtY29sdW1uPVwiY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICA8a2VuZG8tZ3JpZC1zdHJpbmctZmlsdGVyLWNlbGwgW3Nob3dPcGVyYXRvcnNdPVwiZGF0YS5Jc1Nob3dHcmlkRmlsdGVyT3BlcmF0b3JcIiBbY29sdW1uXT1cImNvbHVtblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZpbHRlcl09XCJmaWx0ZXJcIiBvcGVyYXRvcj1cImNvbnRhaW5zXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItY29udGFpbnMtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItY29udGFpbnMtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItZXEtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItZXEtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItbmVxLW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLW5lcS1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1zdGFydHN3aXRoLW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLXN0YXJ0c3dpdGgtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItZW5kc3dpdGgtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItZW5kc3dpdGgtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItaXNudWxsLW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWlzbnVsbC1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1pc25vdG51bGwtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItaXNub3RudWxsLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgPC9rZW5kby1ncmlkLXN0cmluZy1maWx0ZXItY2VsbD5cclxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPCEtLSBHcmlkIEVkaXQgVGVtcGxhdGUgLS0+XHJcbiAgICAgICAgICA8bmctdGVtcGxhdGUga2VuZG9HcmlkRWRpdFRlbXBsYXRlICpuZ0lmPVwiZGF0YS5FbmFibGVHcmlkQ29tbWFuZCBcIiBsZXQtZGF0YUl0ZW09XCJkYXRhSXRlbVwiIGxldC1jb2x1bW49XCJjb2xcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIGxldC1mb3JtR3JvdXA9XCJmb3JtR3JvdXBcIiBsZXQtaXNOZXc9XCJpc05ld1wiPlxyXG4gICAgICAgICAgICA8ZGl2IFtuZ1N3aXRjaF09XCJjb2wuZmllbGRUeXBlXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiJ251bWJlcidcIj5cclxuICAgICAgICAgICAgICAgIDxrZW5kby1udW1lcmljdGV4dGJveCAjY2VsbEFuY2hvciBbZm9ybUNvbnRyb2xdPVwiZm9ybUdyb3VwLmdldChjb2wuZmllbGQpXCI+PC9rZW5kby1udW1lcmljdGV4dGJveD5cclxuICAgICAgICAgICAgICAgIDxrZW5kby1wb3B1cCBbYW5jaG9yXT1cImNlbGxBbmNob3IubnVtZXJpY0lucHV0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImZvcm1Hcm91cC5nZXQoY29sLmZpZWxkKS5pbnZhbGlkICYmICEoaXNOZXcgJiYgZm9ybUdyb3VwLmdldChjb2wuZmllbGQpLnVudG91Y2hlZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcHVwQ2xhc3M9XCJrLXdpZGdldCBrLXRvb2x0aXAgay10b29sdGlwLXZhbGlkYXRpb24gay1pbnZhbGlkLW1zZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJwYWRkaW5nLWxlZnQ6IDJweDsgb3BhY2l0eTogMC41O1wiPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImstaWNvbiBrLWktd2FybmluZ1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPGlvbi1sYWJlbCBzdHlsZT1cInBhZGRpbmctdG9wOiAxcHg7IHBhZGRpbmctbGVmdDogM3B4O1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmb3JtR3JvdXAuZ2V0KGNvbC5maWVsZCkuaW52YWxpZCAmJiAhZm9ybUdyb3VwLmdldChjb2wuZmllbGQpLnVudG91Y2hlZCAmJiBmb3JtR3JvdXAuZ2V0KGNvbC5maWVsZCkuZXJyb3JzPy5yZXF1aXJlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IGNvbC5OYW1lIH19IHJlcXVpcmVkLlxyXG4gICAgICAgICAgICAgICAgICA8L2lvbi1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPGlvbi1sYWJlbCBzdHlsZT1cInBhZGRpbmctdG9wOiAxcHg7IHBhZGRpbmctbGVmdDogM3B4O1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmb3JtR3JvdXAuZ2V0KGNvbC5maWVsZCkuaW52YWxpZCAmJiAhZm9ybUdyb3VwLmdldChjb2wuZmllbGQpLnVudG91Y2hlZCAmJiBmb3JtR3JvdXAuZ2V0KGNvbC5maWVsZCkuZXJyb3JzPy5wYXR0ZXJuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgY29sLlZhbGlkYXRvck1lc3NhZ2UgPyBjb2wuVmFsaWRhdG9yTWVzc2FnZSA6IFwiUGxlYXNlIGNoZWNrIHRoZSBpbnB1dCB2YWx1ZS5cIiB9fVxyXG4gICAgICAgICAgICAgICAgICA8L2lvbi1sYWJlbD5cclxuICAgICAgICAgICAgICAgIDwva2VuZG8tcG9wdXA+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hEZWZhdWx0PlxyXG4gICAgICAgICAgICAgICAgPGtlbmRvLXRleHRib3ggI2NlbGxBbmNob3IgW2Zvcm1Db250cm9sXT1cImZvcm1Hcm91cC5nZXQoY29sLmZpZWxkKVwiPjwva2VuZG8tdGV4dGJveD5cclxuICAgICAgICAgICAgICAgIDxrZW5kby1wb3B1cCBbYW5jaG9yXT1cImNlbGxBbmNob3IuaW5wdXRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZm9ybUdyb3VwLmdldChjb2wuZmllbGQpLmludmFsaWQgJiYgIShpc05ldyAmJiBmb3JtR3JvdXAuZ2V0KGNvbC5maWVsZCkudW50b3VjaGVkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9wdXBDbGFzcz1cImstd2lkZ2V0IGstdG9vbHRpcCBrLXRvb2x0aXAtdmFsaWRhdGlvbiBrLWludmFsaWQtbXNnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cInBhZGRpbmctbGVmdDogMnB4OyBvcGFjaXR5OiAwLjU7XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiay1pY29uIGstaS13YXJuaW5nXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8IS0tPGlvbi1sYWJlbCBzdHlsZT1cInBhZGRpbmctdG9wOiAxcHg7IHBhZGRpbmctbGVmdDogM3B4O1wiPnt7IGNvbC5OYW1lIH19IGlzIHJlcXVpcmVkLjwvaW9uLWxhYmVsPi0tPlxyXG4gICAgICAgICAgICAgICAgICAtbFxyXG5cclxuICAgICAgICAgICAgICAgICAgPGlvbi1sYWJlbCBzdHlsZT1cInBhZGRpbmctdG9wOiAxcHg7IHBhZGRpbmctbGVmdDogM3B4O1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmb3JtR3JvdXAuZ2V0KGNvbC5maWVsZCkuaW52YWxpZCAmJiAhZm9ybUdyb3VwLmdldChjb2wuZmllbGQpLnVudG91Y2hlZCAmJiBmb3JtR3JvdXAuZ2V0KGNvbC5maWVsZCkuZXJyb3JzPy5yZXF1aXJlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IGNvbC5OYW1lIH19IHJlcXVpcmVkLlxyXG4gICAgICAgICAgICAgICAgICA8L2lvbi1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPGlvbi1sYWJlbCBzdHlsZT1cInBhZGRpbmctdG9wOiAxcHg7IHBhZGRpbmctbGVmdDogM3B4O1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmb3JtR3JvdXAuZ2V0KGNvbC5maWVsZCkuaW52YWxpZCAmJiAhZm9ybUdyb3VwLmdldChjb2wuZmllbGQpLnVudG91Y2hlZCAmJiBmb3JtR3JvdXAuZ2V0KGNvbC5maWVsZCkuZXJyb3JzPy5wYXR0ZXJuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgY29sLlZhbGlkYXRvck1lc3NhZ2UgPyBjb2wuVmFsaWRhdG9yTWVzc2FnZSA6IFwiUGxlYXNlIGNoZWNrIHRoZSBpbnB1dCB2YWx1ZS5cIiB9fVxyXG4gICAgICAgICAgICAgICAgICA8L2lvbi1sYWJlbD5cclxuICAgICAgICAgICAgICAgIDwva2VuZG8tcG9wdXA+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0dyaWRDZWxsVGVtcGxhdGUgbGV0LWRhdGFJdGVtIGxldC1yb3dJbmRleD1cInJvd0luZGV4XCI+XHJcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW46IDFweCAwO1wiICpuZ0lmPVwiIWNvbC5jbGlja2FibGVJY29ucyAmJiBjb2wuaXNFZGl0YWJsZUluR3JpZCAhPT0gdHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgW25nU3dpdGNoXT1cImNvbC5maWVsZFR5cGVcIiBbbmdDbGFzc109XCJnZXRDbGFzcyhkYXRhSXRlbSwgY29sKVwiIFtzdHlsZV09XCJnZXRDZWxsU3R5bGUoY29sLCBkYXRhSXRlbSlcIiBbYXR0ci5kYXRhLWlkXT1cImRhdGFJdGVtLklkXCIgW2F0dHIuY29sdW1uLW5hbWVdPVwiY29sLmZpZWxkXCJcclxuICAgICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCJzaG93UG9wT3Zlcihjb2wsICRldmVudClcIiAobW91c2VsZWF2ZSk9XCJjbG9zZVBvcE92ZXIoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInemRhdGUnXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBkYXRhSXRlbVtjb2wuZmllbGRdIHwgZGF0ZTogJ2RkL01NL3l5eXknIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInenRpbWUnXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBkYXRhSXRlbVtjb2wuZmllbGRdIHwgZGF0ZTogJ0hIOm1tJyB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3pzaG9ydGRhdGUnXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBkYXRhSXRlbVtjb2wuZmllbGRdIHwgZGF0ZTogJ01NTSB5eXl5JyB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3pkYXRldGltZSdcIj5cclxuICAgICAgICAgICAgICAgIHt7IGRhdGFJdGVtW2NvbC5maWVsZF0gfCBkYXRlOiAnZGQvTU0veXl5eSBoaDptbTpzcyBhYScgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIid6dWlkYXRldGltZSdcIj5cclxuICAgICAgICAgICAgICAgIHt7IGRhdGFJdGVtW2NvbC5maWVsZF0gfCBkYXRlOiAnZGQvTU0veXl5eSBoaDptbTpzcyBhYScgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidudW1iZXInXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBkYXRhSXRlbVtjb2wuZmllbGRdIHwgbnVtYmVyIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInY3VycmVuY3knXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBkYXRhSXRlbVtjb2wuZmllbGRdIHwgbnVtYmVyOiBnZXRGb3JtYXQoY29sLCAnMS4yLTInKSB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3pudW1lcmljJ1wiPlxyXG4gICAgICAgICAgICAgICAge3sgZGF0YUl0ZW1bY29sLmZpZWxkXSB8IG51bWJlcjogZ2V0Rm9ybWF0KGNvbCkgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIid1cmwnXCIgc3R5bGU9XCJjb2xvcjogYmx1ZTsgY3Vyc29yOiBwb2ludGVyOyB0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO1wiPlxyXG4gICAgICAgICAgICAgICAge3sgZGF0YUl0ZW1bY29sLmZpZWxkXSB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hEZWZhdWx0PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBbbmdTd2l0Y2hdPVwiY2VsbFN0eWxlQ29uZGl0aW9uKGNvbCwgZGF0YUl0ZW1bY29sLmZpZWxkXSlcIj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT10cnVlPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjZWxsU3R5bGVDb25kaXRpb25EZWZhdWx0XCIgW3N0eWxlXT1cInNldENlbGxTdHlsZUNvbmRpdGlvbihjb2wsIGRhdGFJdGVtW2NvbC5maWVsZF0pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7eyBkYXRhSXRlbVtjb2wuZmllbGRdIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoRGVmYXVsdD5cclxuICAgICAgICAgICAgICAgICAgICB7eyBkYXRhSXRlbVtjb2wuZmllbGRdIH19XHJcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwhLS0gPHNwYW4gKm5nSWY9XCIhIWNvbC5uYXZpZ2F0ZVRvXCIgKGNsaWNrKT1cIm9uTmF2aWdhdGVUbygkZXZlbnQsIGNvbCwgZGF0YUl0ZW0sIGRhdGFJdGVtW2NvbC5maWVsZF0pXCI+XHJcbiAgICAgICAgICAgIDxpb24tYnV0dG9uIGNvbG9yPVwibGlnaHRcIiBzaXplPVwic21hbGxcIj5cclxuICAgICAgICAgICAge3sgY29sLkNsaWNrYWJsZUljb25zIH19XHJcbiAgICAgICAgICAgIDxpb24taWNvbiBzbG90PSBcImVuZFwiIG5hbWU9XCJhcnJvdy1mb3J3YXJkXCI+PC9pb24taWNvbj5cclxuICAgICAgICAgICAgPC9pb24tYnV0dG9uPlxyXG4gICAgICAgICAgICA8L3NwYW4+IC0tPlxyXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luOiA1cHggMDtcIiAqbmdJZj1cImNvbC5pc0VkaXRhYmxlSW5HcmlkID09PSB0cnVlICYmIGlubGluZUVkaXRlZEZvcm1Hcm91cHNcIiBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZTVcIlxyXG4gICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImdldENsYXNzKGRhdGFJdGVtLCBjb2wpXCIgY2xhc3M9XCJlMXRhZy1zdHlsZTVcIj5cclxuICAgICAgICAgICAgICA8YXBwLXppbnB1dC1jb250YWluZXIgW2RhdGFdPVwiZ2V0SW5saW5lRmllbGQoY29sLmZpZWxkKVwiIFtncm91cF09XCJncm91cFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtXT1cImdldElubGluZUZvcm0oZGF0YUl0ZW0sIHJvd0luZGV4KVwiIFtjb250YWluZXJGaWVsZF09XCJjb250YWluZXJGaWVsZFwiIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlNlwiIGNsYXNzPVwiZTF0YWctc3R5bGU2XCI+XHJcbiAgICAgICAgICAgICAgPC9hcHAtemlucHV0LWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxzcGFuIHN0eWxlPVwibWFyZ2luLXRvcDogMTBweDtcIiAqbmdGb3I9XCJsZXQgaWNvbiBvZiBjb2wuY2xpY2thYmxlSWNvbnNcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBbbmdDbGFzc109XCJpY29uLkNsYXNzID8gaWNvbi5DbGFzcyA6ICcnXCIgKm5nSWY9XCIhIWljb24gJiYgKCEhZGF0YUl0ZW0uV0ZTX1N0YXR1c0NvZGUgJiYgISFpY29uKVxyXG4gICAgICAgICAgICAgID8gZGF0YUl0ZW0uV0ZTX1N0YXR1c0NvZGUgIT09IGljb24uV0ZTX1N0YXR1c0NvZGVcclxuICAgICAgICAgICAgICA6IHRydWU7XHJcbiAgICAgICAgICAgIGVsc2UgZGlzYWJsZWRCdXR0b25cIiAoY2xpY2spPVwib25CdG5DbGljaygkZXZlbnQsIGljb24sIGRhdGFJdGVtLCBkYXRhSXRlbVtjb2wuZmllbGRdKVwiPlxyXG4gICAgICAgICAgICAgICAge3tpY29uLk5hbWUgfHwgZGF0YUl0ZW1bY29sLmZpZWxkXX19IDxmYS1pY29uIFtpY29uXT1cImljb24uSWNvblwiIHN0eWxlPVwicGFkZGluZzogNHB4IDZweDtcIj5cclxuICAgICAgICAgICAgICAgIDwvZmEtaWNvbj5cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkaXNhYmxlZEJ1dHRvbj5cclxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwhLS0gPHN0cm9uZz57eyBkYXRhSXRlbVtjb2wuZmllbGRdIH19PC9zdHJvbmc+IC0tPlxyXG4gICAgICAgICAgICA8IS0tIDxzcGFuIGNsYXNzPVwie3tkYXRhSXRlbS5EaXNjb250aW51ZWQgPyAnZGlzY29udGludWVkJyA6ICdhY3RpdmUnfX1cIj5cclxuICAgICAgICAgICAgICB7e2RhdGFJdGVtLkRpc2NvbnRpbnVlZCA/IFwiZGlzY29udGludWVkXCIgOiBcImFjdGl2ZVwifX1cclxuICAgICAgICAgICAgPC9zcGFuPiAtLT5cclxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICA8bmctdGVtcGxhdGUga2VuZG9HcmlkRm9vdGVyVGVtcGxhdGUgbGV0LWNvbHVtbiBsZXQtY29sdW1uSW5kZXg9XCJjb2x1bW5JbmRleFwiICpuZ0lmPVwiZGF0YS5FbmFibGVBZ2dyZWdhdGVcIj5cclxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbjogNXB4IDA7XCIgW25nU3dpdGNoXT1cImNvbC5maWVsZFR5cGVcIiBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZTdcIiBjbGFzcz1cImUxdGFnLXN0eWxlN1wiPlxyXG4gICAgICAgICAgICAgIHt7Y29sLmFnZ3JlZ2F0ZVR5cGV9fVxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInemRhdGUnXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBjb2wuYWdncmVnYXRlVmFsdWUgfCBkYXRlOiAnZGQvTU0veXl5eScgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIid6dGltZSdcIj5cclxuICAgICAgICAgICAgICAgIHt7IGNvbC5hZ2dyZWdhdGVWYWx1ZSB8IGRhdGU6ICdISDptbScgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIid6c2hvcnRkYXRlJ1wiPlxyXG4gICAgICAgICAgICAgICAge3sgY29sLmFnZ3JlZ2F0ZVZhbHVlIHwgZGF0ZTogJ01NTSB5eXl5JyB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3pkYXRldGltZSdcIj5cclxuICAgICAgICAgICAgICAgIHt7IGNvbC5hZ2dyZWdhdGVWYWx1ZSB8IGRhdGU6ICdkZC9NTS95eXl5IGhoOm1tOnNzIGFhJyB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3p1aWRhdGV0aW1lJ1wiPlxyXG4gICAgICAgICAgICAgICAge3sgY29sLmFnZ3JlZ2F0ZVZhbHVlIHwgZGF0ZTogJ2RkL01NL3l5eXkgaGg6bW06c3MgYWEnIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInbnVtYmVyJ1wiPlxyXG4gICAgICAgICAgICAgICAge3sgY29sLmFnZ3JlZ2F0ZVZhbHVlIHwgbnVtYmVyIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInY3VycmVuY3knXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBjb2wuYWdncmVnYXRlVmFsdWUgfCBudW1iZXI6IGdldEZvcm1hdChjb2wsICcxLjIuMicpIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInem51bWVyaWMnXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBjb2wuYWdncmVnYXRlVmFsdWUgfCBudW1iZXI6IGdldEZvcm1hdChjb2wpIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCIndXJsJ1wiIHN0eWxlPVwiY29sb3I6IGJsdWU7IGN1cnNvcjogcG9pbnRlcjsgdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTtcIj5cclxuICAgICAgICAgICAgICAgIHt7IGNvbC5hZ2dyZWdhdGVWYWx1ZSB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hEZWZhdWx0PlxyXG4gICAgICAgICAgICAgICAge3sgY29sLmFnZ3JlZ2F0ZVZhbHVlIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPC9rZW5kby1ncmlkLWNvbHVtbj5cclxuICAgICAgICA8a2VuZG8tZ3JpZC1jb21tYW5kLWNvbHVtbiAqbmdJZj1cImRhdGEuRW5hYmxlR3JpZENvbW1hbmRcIiB3aWR0aD1cIjE4MFwiIFtjb2x1bW5NZW51XT1cImZhbHNlXCIgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGU4XCIgY2xhc3M9XCJlMXRhZy1zdHlsZThcIj5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0dyaWRDZWxsVGVtcGxhdGUgbGV0LWlzTmV3PVwiaXNOZXdcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBrZW5kb0dyaWRTYXZlQ29tbWFuZD5cclxuICAgICAgICAgICAgICB7eyBpc05ldyA/ICdTYXZlJyA6ICdVcGRhdGUnIH19XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIGtlbmRvR3JpZENhbmNlbENvbW1hbmQgW3ByaW1hcnldPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgIHt7IGlzTmV3ID8gJ0Rpc2NhcmQgY2hhbmdlcycgOiAnQ2FuY2VsJyB9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBrZW5kb0dyaWRFZGl0Q29tbWFuZD5cclxuICAgICAgICAgICAgICB7eyBcIkVkaXRcIiB9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBrZW5kb0dyaWRSZW1vdmVDb21tYW5kPlxyXG4gICAgICAgICAgICAgIHt7IFwiUmVtb3ZlXCIgfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwva2VuZG8tZ3JpZC1jb21tYW5kLWNvbHVtbj5cclxuICAgICAgICA8a2VuZG8tZ3JpZC1leGNlbCBmaWxlTmFtZT1cIkV4cG9ydC54bHN4XCIgW2ZldGNoRGF0YV09XCJhbGxSZXN1bHRzXCI+PC9rZW5kby1ncmlkLWV4Y2VsPlxyXG4gICAgICA8L2tlbmRvLWdyaWQ+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==