@doolehealth/service-lib 0.0.9 → 0.0.11

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.
@@ -921,8 +921,10 @@ export class DooleService {
921
921
  }
922
922
  getAPIdetailRecipe(id) {
923
923
  let path = `diet/receipt/${id}`;
924
+ let httpParams = new HttpParams()
925
+ .set('interactions', 1);
924
926
  const endpoint = this.api.getEndpoint(path);
925
- return this.http.get(endpoint).pipe(map((res) => {
927
+ return this.http.get(endpoint, httpParams).pipe(map((res) => {
926
928
  //////console.log(`[DooleService] getAPIdetailRecipe(${path}) res: `, res);
927
929
  return res;
928
930
  }));
@@ -1732,6 +1734,14 @@ export class DooleService {
1732
1734
  return res;
1733
1735
  }));
1734
1736
  }
1737
+ getAPIAnsweredForm() {
1738
+ let path = `user/forms/answered`;
1739
+ const endpoint = this.api.getEndpoint(path);
1740
+ return this.http.get(endpoint).pipe(map((res) => {
1741
+ ////console.log(`[DooleService] postAPIContentStatus(${path}) res: `, res);
1742
+ return res;
1743
+ }));
1744
+ }
1735
1745
  getAPIDayPhrase() {
1736
1746
  let path = `user/dayPhrase`;
1737
1747
  const endpoint = this.api.getEndpoint(path);
@@ -1749,4 +1759,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
1749
1759
  providedIn: 'root'
1750
1760
  }]
1751
1761
  }], ctorParameters: () => [{ type: i1.AuthenticationService }, { type: i2.FileTransfer }, { type: i3.File }, { type: i4.HttpService }, { type: i5.ApiEndpointsService }, { type: i6.Events }, { type: i7.Platform }, { type: i8.Router }, { type: i7.AlertController }, { type: i9.TranslateService }] });
1752
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9vbGUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NlcnZpY2UtbGliL3NyYy9saWIvc2VydmljZXMvZG9vbGUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBSzNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHaEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzVDLE9BQU8sRUFBNkIsR0FBRyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRzFFLE9BQU8sRUFBZSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7Ozs7Ozs7Ozs7QUFTL0QsTUFBTSxPQUFPLFlBQVk7SUFFdkIsWUFDVSxXQUFrQyxFQUNsQyxRQUFzQixFQUN0QixJQUFVLEVBQ1YsSUFBaUIsRUFDakIsR0FBd0IsRUFDekIsTUFBYyxFQUNiLFFBQWtCLEVBQ25CLE1BQWMsRUFDZCxlQUFnQyxFQUNoQyxTQUEyQjtRQVQxQixnQkFBVyxHQUFYLFdBQVcsQ0FBdUI7UUFDbEMsYUFBUSxHQUFSLFFBQVEsQ0FBYztRQUN0QixTQUFJLEdBQUosSUFBSSxDQUFNO1FBQ1YsU0FBSSxHQUFKLElBQUksQ0FBYTtRQUNqQixRQUFHLEdBQUgsR0FBRyxDQUFxQjtRQUN6QixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2IsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNuQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2Qsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ2hDLGNBQVMsR0FBVCxTQUFTLENBQWtCO0lBQUksQ0FBQztJQUl6QyxVQUFVLENBQUMsS0FBYSxFQUFFLEVBQVc7UUFFbkMscUNBQXFDO1FBQ3JDLE1BQU0sS0FBSyxHQUFH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Q0FBQztRQUNiLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDOytHQTF2RVUsWUFBWTttSEFBWixZQUFZLGNBRlgsTUFBTTs7NEZBRVAsWUFBWTtrQkFIeEIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGaWxlVHJhbnNmZXIsIEZpbGVVcGxvYWRPcHRpb25zLCBGaWxlVHJhbnNmZXJPYmplY3QgfSBmcm9tICdAYXdlc29tZS1jb3Jkb3ZhLXBsdWdpbnMvZmlsZS10cmFuc2Zlci9uZ3gnO1xuaW1wb3J0IHsgQXBpRW5kcG9pbnRzU2VydmljZSB9IGZyb20gJy4vYXBpLWVuZHBvaW50cy5zZXJ2aWNlJztcbmltcG9ydCB7IEV2ZW50cyB9IGZyb20gJy4vZXZlbnRzLnNlcnZpY2UnO1xuaW1wb3J0IHsgSHR0cFNlcnZpY2UgfSBmcm9tICcuL2h0dHAuc2VydmljZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiwgdGhyb3dFcnJvciwgVGltZW91dEVycm9yIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBbGVydENvbnRyb2xsZXIsIFBsYXRmb3JtIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuaW1wb3J0IHsgRmlsZSB9IGZyb20gJ0Bhd2Vzb21lLWNvcmRvdmEtcGx1Z2lucy9maWxlL25neCc7XG5pbXBvcnQgeyBDYXBhY2l0b3IgfSBmcm9tICdAY2FwYWNpdG9yL2NvcmUnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgZGVsYXksIGZpbHRlciwgbWFwLCBtZXJnZU1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEhlYWx0aENhcmQgfSBmcm9tICcuLi9tb2RlbHMvdXNlcic7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgSHR0cEhlYWRlcnMsIEh0dHBQYXJhbXMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBRdWVyeVN0cmluZ1BhcmFtZXRlcnMgfSBmcm9tICcuLi91dGlscy9xdWVyeS1zdHJpbmctcGFyYW1ldGVycyc7XG5pbXBvcnQgeyBTaGVsbENoYXRNb2RlbCwgU2hlbGxNZXNzYWdlTW9kZWwsIFNoZWxsUmVjaXBpZW50TW9kZWwgfSBmcm9tICcuLi91dGlscy9jaGF0UGFyYW1ldGVycyc7XG5pbXBvcnQgeyBBdXRoZW50aWNhdGlvblNlcnZpY2UgfSBmcm9tICcuL2F1dGhlbnRpY2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBEb29sZVNlcnZpY2Uge1xuICBwdXNoTm90aWZpY2F0aW9uOiBhbnk7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhlbnRpY2F0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIHRyYW5zZmVyOiBGaWxlVHJhbnNmZXIsXG4gICAgcHJpdmF0ZSBmaWxlOiBGaWxlLFxuICAgIHByaXZhdGUgaHR0cDogSHR0cFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhcGk6IEFwaUVuZHBvaW50c1NlcnZpY2UsXG4gICAgcHVibGljIGV2ZW50czogRXZlbnRzLFxuICAgIHByaXZhdGUgcGxhdGZvcm06IFBsYXRmb3JtLFxuICAgIHB1YmxpYyByb3V0ZXI6IFJvdXRlcixcbiAgICBwdWJsaWMgYWxlcnRDb250cm9sbGVyOiBBbGVydENvbnRyb2xsZXIsXG4gICAgcHVibGljIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSkgeyB9XG5cbiAgcHVibGljIHNlbGVjdGVkRGF0ZTogRGF0ZTtcblxuICB1cGxvYWRGaWxlKGltYWdlOiBzdHJpbmcsIGlkPzogc3RyaW5nKSB7XG5cbiAgICAvLy8vY29uc29sZS5sb2coXCJ1cGxvYWRpbmcgXCIsIGltYWdlKTtcbiAgICBjb25zdCB0b2tlbiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd0b2tlbicpO1xuICAgIGxldCBvcHRpb25zOiBGaWxlVXBsb2FkT3B0aW9ucyA9IHtcbiAgICAgIGZpbGVLZXk6ICdmaWxlJyxcbiAgICAgIGZpbGVOYW1lOiAnbmFtZS5qcGcnLFxuXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdBdXRob3JpemF0aW9uJzogJ0JlYXJlciAnICsgdG9rZW4sXG4gICAgICAgICdBY2NlcHQnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICB9LFxuICAgICAgcGFyYW1zOiB7XG4gICAgICAgIGlkOiBpZFxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGZpbGVUcmFuc2ZlcjogRmlsZVRyYW5zZmVyT2JqZWN0ID0gdGhpcy50cmFuc2Zlci5jcmVhdGUoKTtcbiAgICAvLyBBZGQgZmlsZXMgZm9yIG5ldyBvciBzYXZlZCBkaWFnbm9zdGljcy4gXG4gICAgLy8gdXNlcyBkaWFnbm9zdGljL21lZGlhIHdoZW4gZGlhZ25vc3RpYyBpcyBuZXcgXG4gICAgLy9jb25zdCBlbmRwb2ludCA9IGlkID8gdGhpcy5hcGkuZ2V0RW5kcG9pbnQoJ2RpYWdub3N0aWMvbWVkaWEnKTp0aGlzLmFwaS5nZXRFbmRwb2ludCgnbWVkaWEvdXBsb2FkL3RlbXAnKSA7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludCgnbWVkaWEvdXBsb2FkL3RlbXAnKTtcbiAgICAvLy8vLy9jb25zb2xlLmxvZyhcIiogdXBsb2FkRmlsZSBlbmRwb2ludFwiLCBlbmRwb2ludCk7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgZmlsZVRyYW5zZmVyLnVwbG9hZChpbWFnZSwgZW5kcG9pbnQsIG9wdGlvbnMpLnRoZW4oZGF0YSA9PiB7XG4gICAgICAgIC8vLy9jb25zb2xlLmxvZyhkYXRhKTtcbiAgICAgICAgcmVzb2x2ZShKU09OLnBhcnNlKGRhdGEucmVzcG9uc2UpKTtcbiAgICAgIH0sIChlcnIpID0+IHtcbiAgICAgICAgLy8vL2NvbnNvbGUubG9nKGVycik7XG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgfSlcbiAgICB9KVxuXG4gIH1cblxuICBcblxuICBwb3N0QVBJQWRkTWVkaWEocGFyYW1zOiBPYmplY3Qpe1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQoJ21lZGlhL2FkZCcpO1xuICAgXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0Rm9ybShlbmRwb2ludCwgcGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIHBvc3RBUElBZGRNZWRpYSgke2VuZHBvaW50fSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG4gIFxuICB1cGxvYWRGaWxlVG9Nb2RlbChpbWFnZTogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIHBhcmFtczogYW55KSB7XG4gICAgLy8vLy8vY29uc29sZS5sb2coXCJ1cGxvYWRpbmcgXCIsIGltYWdlKTtcbiAgICBjb25zdCB0b2tlbiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd0b2tlbicpO1xuICAgIGxldCBvcHRpb25zOiBGaWxlVXBsb2FkT3B0aW9ucyA9IHtcbiAgICAgIGZpbGVLZXk6ICdmaWxlJyxcbiAgICAgIGZpbGVOYW1lOiBuYW1lLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICAnQXV0aG9yaXphdGlvbic6ICdCZWFyZXIgJyArIHRva2VuLFxuICAgICAgICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgfSxcbiAgICAgIHBhcmFtc1xuICAgIH1cblxuICAgIGNvbnN0IGZpbGVUcmFuc2ZlcjogRmlsZVRyYW5zZmVyT2JqZWN0ID0gdGhpcy50cmFuc2Zlci5jcmVhdGUoKTtcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KCdtZWRpYS9hZGQnKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgZmlsZVRyYW5zZmVyLnVwbG9hZChpbWFnZSwgZW5kcG9pbnQsIG9wdGlvbnMpLnRoZW4oZGF0YSA9PiB7XG4gICAgICAgIC8vLy9jb25zb2xlLmxvZyhKU09OLnBhcnNlKGRhdGEucmVzcG9uc2UpKTtcbiAgICAgICAgcmVzb2x2ZShKU09OLnBhcnNlKGRhdGEucmVzcG9uc2UpKTtcbiAgICAgIH0sIChlcnIpID0+IHtcbiAgICAgICAgLy8vL2NvbnNvbGUubG9nKGVycik7XG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgfSlcbiAgICB9KVxuXG4gIH1cblxuICB1cGxvYWRNZXNzYWdlSW1hZ2UoaWRNZXNzYWdlSGVhZGVyLCBpZFVzZXJUbywgbWVzc2FnZSwgZmlsZVVybCwgaWRfdXN1YXJpX2FtaXEpIHtcblxuICAgIGNvbnN0IHRva2VuID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3Rva2VuJyk7XG5cbiAgICBsZXQgb3B0aW9uczogRmlsZVVwbG9hZE9wdGlvbnMgPSB7XG4gICAgICBmaWxlS2V5OiAnZmlsZScsXG4gICAgICBmaWxlTmFtZTogJ25hbWUucGRmJywgLy9UT0RPOiAnbmFtZS5qcGcnXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdBdXRob3JpemF0aW9uJzogJ0JlYXJlciAnICsgdG9rZW4sXG4gICAgICAgICdBY2NlcHQnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICB9LFxuICAgICAgcGFyYW1zOiB7XG4gICAgICAgIGlkVXNlcjogaWRfdXN1YXJpX2FtaXEsXG4gICAgICAgIHNlY3JldDogdG9rZW4sXG4gICAgICAgIHZhbHVlOiBcIlwiLFxuICAgICAgICBpZDogaWRNZXNzYWdlSGVhZGVyXG4gICAgICB9XG4gICAgfVxuICAgIC8vLy8vL2NvbnNvbGUubG9nKFwib3B0aW9uczogXCIsIG9wdGlvbnMpO1xuXG4gICAgY29uc3QgZmlsZVRyYW5zZmVyOiBGaWxlVHJhbnNmZXJPYmplY3QgPSB0aGlzLnRyYW5zZmVyLmNyZWF0ZSgpO1xuXG4gICAgZmlsZVRyYW5zZmVyLm9uUHJvZ3Jlc3MoKHByb2dyZXNzRXZlbnQpID0+IHtcbiAgICAgIGlmIChwcm9ncmVzc0V2ZW50Lmxlbmd0aENvbXB1dGFibGUpIHtcbiAgICAgICAgdmFyIHBlcmMgPSBNYXRoLmZsb29yKHByb2dyZXNzRXZlbnQubG9hZGVkIC8gcHJvZ3Jlc3NFdmVudC50b3RhbCAqIDEwMCk7XG4gICAgICAgIHRoaXMuZXZlbnRzLnB1Ymxpc2goXCJ1cGxvYWRNZXNzYWdlSW1hZ2VcIiwgeyBmaWxlVXJsLCBwZXJjIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coXCJwcm9ncmVzc0V2ZW50IC0gXCIsIHByb2dyZXNzRXZlbnQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludCgnbWVzc2FnZScpO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIGZpbGVUcmFuc2Zlci51cGxvYWQoZmlsZVVybCwgZW5kcG9pbnQsIG9wdGlvbnMpXG4gICAgICAgIC50aGVuKGRhdGEgPT4ge1xuICAgICAgICAgIC8vLy8vL2NvbnNvbGUubG9nKFwic3VjY2VzcyBmaWxlVHJhbnNmZXIudXBsb2FkXCIsIEpTT04ucGFyc2UoZGF0YS5yZXNwb25zZSkpO1xuICAgICAgICAgIHJlc29sdmUoSlNPTi5wYXJzZShkYXRhLnJlc3BvbnNlKSk7XG4gICAgICAgIH0sIChlcnIpID0+IHtcbiAgICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhcIioqIGVycm9yICoqIGZpbGVUcmFuc2Zlci51cGxvYWQ6IFwiLCBlcnIpO1xuICAgICAgICAgIHJlamVjdChmaWxlVHJhbnNmZXIudXBsb2FkKTtcbiAgICAgICAgfSlcbiAgICB9KVxuXG4gIH1cblxuICBiNjR0b0Jsb2IoYjY0RGF0YSwgY29udGVudFR5cGUgPSAnJywgc2xpY2VTaXplID0gNTEyKSB7XG4gICAgY29uc3QgYnl0ZUNoYXJhY3RlcnMgPSBhdG9iKGI2NERhdGEpO1xuICAgIGNvbnN0IGJ5dGVBcnJheXMgPSBbXTtcblxuICAgIGZvciAobGV0IG9mZnNldCA9IDA7IG9mZnNldCA8IGJ5dGVDaGFyYWN0ZXJzLmxlbmd0aDsgb2Zmc2V0ICs9IHNsaWNlU2l6ZSkge1xuICAgICAgY29uc3Qgc2xpY2UgPSBieXRlQ2hhcmFjdGVycy5zbGljZShvZmZzZXQsIG9mZnNldCArIHNsaWNlU2l6ZSk7XG5cbiAgICAgIGNvbnN0IGJ5dGVOdW1iZXJzID0gbmV3IEFycmF5KHNsaWNlLmxlbmd0aCk7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNsaWNlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGJ5dGVOdW1iZXJzW2ldID0gc2xpY2UuY2hhckNvZGVBdChpKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYnl0ZUFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYnl0ZU51bWJlcnMpO1xuICAgICAgYnl0ZUFycmF5cy5wdXNoKGJ5dGVBcnJheSk7XG4gICAgfVxuXG4gICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKGJ5dGVBcnJheXMsIHsgdHlwZTogY29udGVudFR5cGUgfSk7XG4gICAgcmV0dXJuIGJsb2I7XG4gIH1cblxuICBkb3dubG9hZCh1cmwpIHtcbiAgICBjb25zdCBmaWxlVHJhbnNmZXI6IEZpbGVUcmFuc2Zlck9iamVjdCA9IHRoaXMudHJhbnNmZXIuY3JlYXRlKCk7XG4gICAgdmFyIHBhdGggPSBudWxsO1xuICAgIGlmICh0aGlzLnBsYXRmb3JtLmlzKCdpb3MnKSkge1xuICAgICAgcGF0aCA9IHRoaXMuZmlsZS5kb2N1bWVudHNEaXJlY3Rvcnk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhdGggPSB0aGlzLmZpbGUuZGF0YURpcmVjdG9yeTtcbiAgICB9XG4gICAgZmlsZVRyYW5zZmVyLmRvd25sb2FkKHVybCwgcGF0aCArICdmaWxlLnBkZicpLnRoZW4oKGVudHJ5KSA9PiB7XG4gICAgICAvLy8vY29uc29sZS5sb2coJ2Rvd25sb2FkIGNvbXBsZXRlOiAnICsgZW50cnkudG9VUkwoKSk7XG4gICAgfSwgKGVycm9yKSA9PiB7XG4gICAgICAvLyBoYW5kbGUgZXJyb3JcbiAgICB9KTtcbiAgfVxuXG4gIGRvd25sb2FkRmlsZSh1cmwsIGRlc3RpbmF0aW9uKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICB2YXIgcmVzdWx0OiBhbnkgPSBbXTtcbiAgICBjb25zdCBmaWxlVHJhbnNmZXI6IEZpbGVUcmFuc2Zlck9iamVjdCA9IHRoaXMudHJhbnNmZXIuY3JlYXRlKCk7XG4gICAgdmFyIHBhdGggPSBudWxsO1xuXG4gICAgaWYgKHRoaXMucGxhdGZvcm0uaXMoJ2lvcycpKSB7XG4gICAgICBwYXRoID0gdGhpcy5maWxlLmRvY3VtZW50c0RpcmVjdG9yeTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGF0aCA9IHRoaXMuZmlsZS5kYXRhRGlyZWN0b3J5O1xuICAgIH1cblxuICAgIC8vLy8vL2NvbnNvbGUubG9nKFwiZG93bmxvYWRGaWxlXCIsIHVybCwgZGVzdGluYXRpb24sICdwYXRoLGRlc3RpbmF0aW9uJywgcGF0aCwgZGVzdGluYXRpb24pO1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZSgob2JzZXJ2ZXIpID0+IHtcbiAgICAgIC8vLy8vL2NvbnNvbGUubG9nKFwiYmVmb3JlIENoZWNrRmlsZVwiLCB0aGlzLmZpbGUpO1xuICAgICAgdGhpcy5maWxlLmNoZWNrRmlsZShwYXRoLCBkZXN0aW5hdGlvbikudGhlbihyZXMgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhcIipyZXMqXCIsIHJlcyk7XG4gICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhcImV4aXN0c1wiLCByZXMpO1xuICAgICAgICAgIHJlc3VsdFtcInN1Y2Nlc3NcIl0gPSB0cnVlO1xuICAgICAgICAgIHJlc3VsdFtcImRvd25sb2FkZWRcIl0gPSB0cnVlO1xuICAgICAgICAgIHJlc3VsdFtcImZpbGVcIl0gPSBwYXRoICsgZGVzdGluYXRpb247Ly9ub3JtYWxpemVVUkwodGhpcy5maWxlLmNhY2hlRGlyZWN0b3J5ICsgZGVzdGluYXRpb24pO1xuICAgICAgICAgIHJlc3VsdFtcImZpbGVOb3JtYWxpemVkXCJdID0gQ2FwYWNpdG9yLmNvbnZlcnRGaWxlU3JjKHBhdGggKyBkZXN0aW5hdGlvbik7XG4gICAgICAgICAgcmV0dXJuIG9ic2VydmVyLm5leHQocmVzdWx0KTtcbiAgICAgICAgfVxuICAgICAgfSwgZXJyb3IgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhcIm5vdCBleGlzdHNcIik7XG4gICAgICAgIGZpbGVUcmFuc2Zlci5vblByb2dyZXNzKGV2ZW50ID0+IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vZGVzY2FycmVndWVtXG4gICAgICAgICAgaWYgKGV2ZW50Lmxlbmd0aENvbXB1dGFibGUpIHtcbiAgICAgICAgICAgIC8vLy8vL2NvbnNvbGUubG9nKGV2ZW50LmxvYWRlZCAvIGV2ZW50LnRvdGFsKTtcbiAgICAgICAgICAgIHJlc3VsdFtcInN0YXR1c1wiXSA9IFwiZG93bmxvYWRpbmdcIjtcbiAgICAgICAgICAgIHJlc3VsdFtcImRvd25sb2FkZWRcIl0gPSBmYWxzZTtcbiAgICAgICAgICAgIHJlc3VsdFtcInBlcmNlbnRcIl0gPSBNYXRoLnJvdW5kKChldmVudC5sb2FkZWQgLyBldmVudC50b3RhbCkgKiAxMDApO1xuICAgICAgICAgICAgcmV0dXJuIG9ic2VydmVyLm5leHQocmVzdWx0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBmaWxlVHJhbnNmZXIuZG93bmxvYWQodXJsLCBwYXRoICsgZGVzdGluYXRpb24pLnRoZW4oKGVudHJ5KSA9PiB7XG4gICAgICAgICAgLy8vLy8vY29uc29sZS5sb2coJypkb3dubG9hZDoqICcgKyB1cmwgKyBcIiBcIiArIGVudHJ5LnRvVVJMKCkpO1xuICAgICAgICAgIHJlc3VsdFtcInN1Y2Nlc3NcIl0gPSB0cnVlO1xuICAgICAgICAgIHJlc3VsdFtcImRvd25sb2FkZWRcIl0gPSB0cnVlO1xuICAgICAgICAgIHJlc3VsdFtcImZpbGVcIl0gPSBlbnRyeS50b1VSTCgpOy8vbm9ybWFsaXplVVJMKHRoaXMuZmlsZS5jYWNoZURpcmVjdG9yeSArIGRlc3RpbmF0aW9uKTtcbiAgICAgICAgICByZXN1bHRbXCJmaWxlTm9ybWFsaXplZFwiXSA9IENhcGFjaXRvci5jb252ZXJ0RmlsZVNyYyhwYXRoICsgZGVzdGluYXRpb24pO1xuICAgICAgICAgIHJldHVybiBvYnNlcnZlci5uZXh0KHJlc3VsdCk7XG4gICAgICAgIH0sIChlcnJvcikgPT4ge1xuICAgICAgICAgIC8vLy8vL2NvbnNvbGUubG9nKGVycm9yKTtcbiAgICAgICAgICByZXN1bHRbXCJzdWNjZXNzXCJdID0gZmFsc2U7XG4gICAgICAgICAgcmVzdWx0W1wiZG93bmxvYWRlZFwiXSA9IGZhbHNlO1xuICAgICAgICAgIC8vLy8vL2NvbnNvbGUubG9nKFwiZXJyb3IgZG93bmxvYWQgXCIgKyB1cmwpO1xuICAgICAgICAgIC8vLy8vL2NvbnNvbGUubG9nKHJlc3VsdCk7XG4gICAgICAgICAgcmV0dXJuIG9ic2VydmVyLm5leHQocmVzdWx0KTtcbiAgICAgICAgfSlcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgZGVsZXRlRmlsZShpZCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSBgbWVkaWEvJHtpZH1gO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGUoZW5kcG9pbnQpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZGVsZXRlRmlsZSgke3BhdGh9KSByZXM6ICR7cmVzfWAsIEpTT04uc3RyaW5naWZ5KHJlcykpO1xuICAgICAgICByZXR1cm4gcmVzO1xuXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBzaG93QWxlcnQobWVzc2FnZTogc3RyaW5nKSB7XG5cbiAgICByZXR1cm4gdGhpcy5hbGVydENvbnRyb2xsZXIuY3JlYXRlKHtcbiAgICAgIGNzc0NsYXNzOiAnbXktYWxlcnQtY2xhc3MnLFxuICAgICAgLy9tb2RlOiAnaW9zJyxcbiAgICAgIGhlYWRlcjogJ0luZm8nLFxuICAgICAgbWVzc2FnZTogbWVzc2FnZSxcbiAgICAgIGJhY2tkcm9wRGlzbWlzczogZmFsc2UsXG4gICAgICBidXR0b25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0ZXh0OiAnQWNlcHRhcicsXG4gICAgICAgICAgcm9sZTogJ2NvbmZpcm0nLFxuICAgICAgICAgIGNzc0NsYXNzOiAnb25seUJ1dHRvbicsXG4gICAgICAgICAgaGFuZGxlcjogKGJsYWgpID0+IHtcbiAgICAgICAgICAgIC8vLy9jb25zb2xlLmxvZygnW0xhbmRpbmdQYWdlXSBBbGVydENvbmZpcm0gQ2FuY2VsJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgfVxuXG4gIGFzeW5jIHNob3dBbGVydEFuZFJldHVybihoZWFkZXI6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nLCBpc0Rpc21pc3M/OiBib29sZWFuLCByb3V0ZT86IHN0cmluZykge1xuICAgIC8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIHNob3dBbGVydEFuZFJldHVybigpYCk7XG4gICAgbGV0IGRpc21pc3MgPSAoaXNEaXNtaXNzICE9PSB1bmRlZmluZWQpID8gaXNEaXNtaXNzIDogZmFsc2VcbiAgICBjb25zdCBhbGVydCA9IGF3YWl0IHRoaXMuYWxlcnRDb250cm9sbGVyLmNyZWF0ZSh7XG4gICAgICBjc3NDbGFzczogJ215LWFsZXJ0LWNsYXNzJyxcbiAgICAgIC8vbW9kZTogJ2lvcycsXG4gICAgICBoZWFkZXI6IGhlYWRlcixcbiAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UsXG4gICAgICBiYWNrZHJvcERpc21pc3M6IGRpc21pc3MsXG4gICAgICBidXR0b25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0ZXh0OiAnQWNlcHRhcicsXG4gICAgICAgICAgaGFuZGxlcjogKGJsYWgpID0+IHtcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ0NvbmZpcm0gT0s6IGJsYWgnKTtcbiAgICAgICAgICAgIGlmIChyb3V0ZSAhPT0gdW5kZWZpbmVkICYmIHJvdXRlICE9PSBudWxsKVxuICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHJvdXRlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcbiAgICBhd2FpdCBhbGVydC5wcmVzZW50KCk7XG4gIH1cblxuICBhc3luYyBwcmVzZW50QWxlcnQobWVzc2FnZSwgYnV0dG9uPzogc3RyaW5nKSB7XG4gICAgbGV0IGJ1dHRvbk5hbWUgPSAoYnV0dG9uICE9PSB1bmRlZmluZWQpID8gYnV0dG9uIDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnbGFuZGluZy5hY2NlcHQtYnRuJyk7XG4gICAgY29uc3QgYWxlcnQgPSBhd2FpdCB0aGlzLmFsZXJ0Q29udHJvbGxlci5jcmVhdGUoe1xuICAgICAgY3NzQ2xhc3M6ICdteS1hbGVydC1jbGFzcycsXG4gICAgICAvL21vZGU6ICdpb3MnLFxuICAgICAgbWVzc2FnZTogbWVzc2FnZSxcbiAgICAgIGJ1dHRvbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHRleHQ6IGJ1dHRvbk5hbWUsXG4gICAgICAgICAgcm9sZTogJ2NvbmZpcm0nLFxuICAgICAgICAgIGNzc0NsYXNzOiAnb25seUJ1dHRvbicsXG4gICAgICAgICAgaGFuZGxlcjogKGJsYWgpID0+IHtcbiAgICAgICAgICAgIC8vLy9jb25zb2xlLmxvZygnW0xhbmRpbmdQYWdlXSBBbGVydENvbmZpcm0gQ2FuY2VsJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG4gICAgYXdhaXQgYWxlcnQucHJlc2VudCgpO1xuICB9XG5cbiAgZ2V0RmFtaWx5VW5pdElEKCk6IEh0dHBQYXJhbXMge1xuICAgIGxldCBodHRwUGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcbiAgICBsZXQgdXNlciA9IHRoaXMuYXV0aFNlcnZpY2U/LnVzZXJcbiAgICByZXR1cm4gaHR0cFBhcmFtcyA9ICh1c2VyLmZhbWlseVVuaXQpID8gaHR0cFBhcmFtcy5hcHBlbmQoJ3VzZXInLCB1c2VyLmZhbWlseVVuaXQpIDogaHR0cFBhcmFtc1xuICB9XG5cbiAgZ2V0QVBJTGVnYWxBbmRQb2xpY3koKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICdjZW50ZXIvbGVnYWwtdGVybS1hbmQtcHJpdmFjeS1wb2xpY3kvbGFzdCc7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSUxlZ2FsQW5kUG9saWN5KCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKVxuICB9XG5cbiAgZ2V0QVBJTGVnYWxJbmZvcm1hdGlvbigpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ3VzZXIvbGVnYWxUZXJtL2xhc3RBY2NlcHRlZCc7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSUxlZ2FsSW5mb3JtYXRpb24oJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApXG4gIH1cbiAgcG9zdEFQSUxlZ2FsQ29uZmlybWF0aW9uKHBhcmFtczogT2JqZWN0KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICd1c2VyL2xlZ2FsVGVybS9sYXN0QWNjZXB0ZWQnO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGVuZHBvaW50LCBwYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBwb3N0QVBJQ29uZmlybWF0aW9uTGVnYWwoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwb3N0QVBJUmVqZWN0TGVnYWxDb25maXJtYXRpb24ocGFyYW1zOiBPYmplY3QpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ3VzZXIvbGVnYWxUZXJtL2xhc3REZWNsaW5lZCc7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoZW5kcG9pbnQsIHBhcmFtcykucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIHBvc3RBUElDb25maXJtYXRpb25MZWdhbCgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG5cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHBvc3RBUElwYXNzd29yZFJlY292ZXJ5KHBhcmFtczogT2JqZWN0KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICdwYXRpZW50L2ZvcmdvdCdcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChlbmRwb2ludCwgcGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gcG9zdEFQSXBhc3N3b3JkUmVjb3ZlcnkoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QVBJU3RhZmZTbG90cyhwYXJhbXM6IHsgaWQ6IG51bWJlciwgZGF0ZTogc3RyaW5nIH0pIHtcblxuICAgIGxldCBwYXRoID0gYHN0YWZmLyR7cGFyYW1zLmlkfS9hdmFpbGFiaWxpdHlgO1xuICAgIGxldCBlbmRwb2ludDogc3RyaW5nO1xuICAgIGlmIChwYXJhbXMuZGF0ZSAhPT0gXCJcIikge1xuICAgICAgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludFdpdGhQYXJhbWV0ZXJzKHBhdGgsIChxczogUXVlcnlTdHJpbmdQYXJhbWV0ZXJzKSA9PiBxcy5wdXNoKCdkYXRlJywgcGFyYW1zLmRhdGUpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSVN0YWZmU2xvdHMoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApXG4gIH1cblxuICBnZXRBUElnb2FscygpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ3VzZXIvZWxlbWVudC9nb2FscydcbiAgICAvL2xldCBwYXRoID0gJ3VzZXIvZ29hbHMvZWxlbWVudHMnXG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSWhvbWVJbml0aWFsKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKVxuICB9XG5cbiAgZ2V0QVBJdmlkZW9jYWxsKGlkOnN0cmluZyk6IE9ic2VydmFibGU8YW55PntcbiAgICBsZXQgcGF0aCA9ICd1c2VyL2FnZW5kYS8nK2lkKycvdmlkZW9jYWxsU2Vzc2lvbidcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSXZpZGVvY2FsbCgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgIClcbiAgfVxuXG5cbiAgcG9zdEFQSVBlbmRpbmdDb25uZWN0KCk6IE9ic2VydmFibGU8YW55PntcbiAgICBsZXQgcGF0aCA9ICd1c2VyL3ZpZGVvY2FsbC9wZW5kaW5nQ29ubmVjdCdcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChlbmRwb2ludCkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUElQZW5kaW5nQ29ubmVjdCgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgIClcbiAgfVxuXG4vKiAgIGdldEFQSWluZm9ybWF0aW9uVXNlcigpOiBPYnNlcnZhYmxlPGFueT57XG5cbiAgICBsZXQgcGF0aCA9ICd1c2VyL2luZm9ybWF0aW9uVXNlcidcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJaG9tZUluaXRpYWwoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApXG4gIH0gKi9cbiAgXG4gIHVwZGF0ZUFQSUltYWdldXNlcihwYXJhbXM6IE9iamVjdCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSBgdXNlci9pbWFnZWA7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChlbmRwb2ludCwgcGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gdXBkYXRlQVBJUmVtaW5kZXIoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBkZWxldGVBUElJbWFnZXVzZXIoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9IGB1c2VyL2ltYWdlYDtcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlKGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gdXBkYXRlQVBJUmVtaW5kZXIoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBnZXRBUElpbmZvcm1hdGlvblN1bW1hcnkocGFyYW1zOiBPYmplY3Qpe1xuICAgIGxldCBwYXRoID0gJ2hvbWUnXG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoZW5kcG9pbnQsIHBhcmFtcykucGlwZShcbiAgICAgIG1lcmdlTWFwKCh2KSA9PiB2IGluc3RhbmNlb2YgVGltZW91dEVycm9yID8gdGhyb3dFcnJvcih2KSA6IG9mKHYpKSBcbiAgICApO1xuICB9XG4gIGdldEFQSWluZm9ybWF0aW9uU3VtbWFyeU9sZChwYXJhbXM6IE9iamVjdCl7XG4gICAgbGV0IHBhdGggPSAnaG9tZSdcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChlbmRwb2ludCwgcGFyYW1zKS5waXBlKFxuICAgICAgbWFwKHJlcyA9PiByZXMpIFxuICAgICk7XG4gIH1cblxuXG4gIGdldEFQSXVzZXJQcm9maWxlKCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSAndjIvdXNlci9wcm9maWxlJ1xuICAgIC8vbGV0IGh0dHBQYXJhbXMgPSB0aGlzLmdldEZhbWlseVVuaXRJRCgpXG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSWhvbWVJbml0aWFsKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKVxuICB9XG5cbiAgcG9zdEFQSUNoYW5nZVBhc3N3b3JkKHBhcmFtczogT2JqZWN0KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICd1c2VyL2NoYW5nZVBhc3N3b3JkJztcbiAgICBsZXQgaHR0cFBhcmFtcyA9IHRoaXMuZ2V0RmFtaWx5VW5pdElEKClcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChlbmRwb2ludCwgcGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gcG9zdEFQSUNoYW5nZVBhc3N3b3JkKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcblxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QVBJbm90aWZpY2F0aW9uQ29uZmlndXJhdGlvbnMoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICd1c2VyL2NvbmZpZ3VyYXRpb24nXG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSW5vdGlmaWNhdGlvbkNvbmZpZ3VyYXRpb25zKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKVxuICB9XG5cbiAgcG9zdEFQSUNvbmZpZ3VyYXRpb24ocGFyYW1zOiBPYmplY3QpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ3VzZXIvY29uZmlndXJhdGlvbic7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoZW5kcG9pbnQsIHBhcmFtcykucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIHBvc3RBUElDb25maWd1cmF0aW9uKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcblxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QVBJbGFuZ3VhZ2VzQ2VudGVyKCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSAnY2VudGVyL2xhbmd1YWdlcydcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJbGFuZ3VhZ2VzQ2VudGVyKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKVxuICB9XG5cbiAgZ2V0QVBJRmFxcygpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ2NlbnRlci9mYXEnXG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSWhvbWVJbml0aWFsKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKVxuICB9XG5cbiAgZ2V0QVBJRmFtaWx5VW5pdCgpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ3VzZXIvZmFtaWx5VW5pdCc7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSUZhbWlseVVuaXQoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG4gIGdldEFQSUZhbWlseVVuaXQyKCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSAndjIvdXNlci9mYW1pbHlVbml0JztcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSUZhbWlseVVuaXQoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcG9zdEFQSVJlcG9ydFByb2JsZW0ocGFyYW1zOiBPYmplY3QpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ3VzZXIvcmVwb3J0UHJvYmxlbSc7IC8vICdtZWRpYS91cGxvYWQvdGVtcCcgXG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoZW5kcG9pbnQsIHBhcmFtcykucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBwb3N0QVBJUmVwb3J0UHJvYmxlbSgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG5cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHBvc3RBUEllbWFpbFZlcmlmaWNhdGlvbihwYXJhbXM6IE9iamVjdCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSAndXNlci9lbWFpbF92ZXJpZmljYXRpb24nO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGVuZHBvaW50LCBwYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gcG9zdEFQSWVtYWlsVmVyaWZpY2F0aW9uKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcblxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QVBJQ29kZUJ5RW1haWwoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICd1c2VyL3Jlc2VuZFR3b0ZhY3RvckNvZGUnO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJQ29kZUJ5RW1haWwoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcG9zdEFQSWNvZGVWZXJpZmljYXRpb24ocGFyYW1zOiBPYmplY3QpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ3VzZXIvdmVyaWZ5VHdvRmFjdG9yJztcbiAgICAvL2xldCBwYXRoID0gJ3VzZXIvY29kZVZlcmlmaWNhdGlvbic7IFxuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGVuZHBvaW50LCBwYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gcG9zdEFQSWNvZGVWZXJpZmljYXRpb24oJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuXG4gIGdldEFQSWhlYWx0aENhcmRUeXBlcygpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ2NlbnRlci9oZWFsdGhDYXJkVHlwZXMnO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJaGVhbHRoQ2FyZFR5cGVzKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldEFQSWhlYWx0aENhcmRzKCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSAndXNlci9oZWFsdGhjYXJkcyc7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUGhlYWx0aENhcmRzKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldEFQSWhlYWx0aENhcmRJZChpZCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSBgdXNlci9oZWFsdGhjYXJkLyR7aWR9YDtcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSWhlYWx0aENhcmQoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcG9zdEFQSWhlYWx0aENhcmRzKHBhcmFtczogT2JqZWN0KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICd1c2VyL2hlYWx0aGNhcmQnO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGVuZHBvaW50LCBwYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gcG9zdEFQSVJlcG9ydFByb2JsZW0oJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwdXRBUEloZWFsdGhDYXJkKHBhcmFtczogSGVhbHRoQ2FyZCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSBgdXNlci9oZWFsdGhjYXJkLyR7cGFyYW1zLmlkfWA7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChlbmRwb2ludCwgcGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIHB1dEFQSWhlYWx0aENhcmQoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBkZWxldGVBUEloZWFsdGhDYXJkKHBhcmFtczogSGVhbHRoQ2FyZCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSBgdXNlci9oZWFsdGhjYXJkLyR7cGFyYW1zLmlkfWA7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmRlbGV0ZShlbmRwb2ludCkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBkZWxldGVBUEloZWFsdGhDYXJkKCR7cGF0aH0pIHJlczogJHtyZXN9YCwgSlNPTi5zdHJpbmdpZnkocmVzKSk7XG4gICAgICAgIHJldHVybiByZXM7XG5cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldEFQSVNvY2lhbFJlbGF0aW9uVHlwZSgpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ2NlbnRlci9zb2NpYWxSZWxhdGlvblR5cGUnO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJU29jaWFsUmVsYXRpb25UeXBlKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldEFQSWVtZXJnZW5jeUNvbnRhY3QoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICd1c2VyL0VtZXJnZW5jeUNvbnRhY3RzJztcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSWVtZXJnZW5jeUNvbnRhY3QoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QVBJZW1lcmdlbmN5Q29udGFjdElEKGlkOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gYHVzZXIvRW1lcmdlbmN5Q29udGFjdC8ke2lkfWA7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUEllbWVyZ2VuY3lDb250YWN0KCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHBvc3RBUEllbWVyZ2VuY3lDb250YWN0KHBhcmFtczogT2JqZWN0KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICd1c2VyL0VtZXJnZW5jeUNvbnRhY3QnO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGVuZHBvaW50LCBwYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gcG9zdEFQSWVtZXJnZW5jeUNvbnRhY3QoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwdXRBUEllbWVyZ2VuY3lDb250YWN0KGlkOiBhbnksIHBhcmFtczogT2JqZWN0KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9IGB1c2VyL0VtZXJnZW5jeUNvbnRhY3QvJHtpZH1gO1xuICAgIC8vLy9jb25zb2xlLmxvZygnW0Rvb2xlU2VydmljZV0gcHV0QVBJZW1lcmdlbmN5Q29udGFjdCgpJywgcGFyYW1zKTtcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KGVuZHBvaW50LCBwYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gcHV0QVBJZW1lcmdlbmN5Q29udGFjdCgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG5cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGRlbGV0ZUFQSWVtZXJnZW5jeUNvbnRhY3QoaWQ6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSBgdXNlci9FbWVyZ2VuY3lDb250YWN0LyR7aWR9YDtcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlKGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGRlbGV0ZUFQSWVtZXJnZW5jeUNvbnRhY3QoJHtwYXRofSkgcmVzOiAke3Jlc31gLCBKU09OLnN0cmluZ2lmeShyZXMpKTtcbiAgICAgICAgcmV0dXJuIHJlcztcblxuICAgICAgfSlcbiAgICApO1xuICB9XG5cblxuICBnZXRBUElhYm91dFVzKCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSAnY2VudGVyL2Fib3V0JztcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSWFib3V0VXMoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QVBJYXBwb2ludG1lbnRBZ2VuZGEoKTogT2JzZXJ2YWJsZTxhbnk+e1xuICAgIGxldCBwYXRoID0gJ3VzZXIvYWdlbmRhJztcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJYXBwb2ludG1lbnRBZ2VuZGEoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgLy9kb2N1bWVudHMtVHJhY2tpbmdcbiAgZ2V0QVBJZGlhZ25vc3RpY1Rlc3RzKCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSAndXNlci9kaWFnbm9zdGljVGVzdHMnO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUElkaWFnbm9zdGljVGVzdHMoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QVBJZGlhZ25vc3RpY1Rlc3RzTGFzdCgpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ3VzZXIvZGlhZ25vc3RpY1Rlc3RzL2xhc3QtZG9uZSc7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSWRpYWdub3N0aWNUZXN0cygke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBnZXRBUElkaWFnbm9zdGljVGVzdFR5cGVzQXZhaWxhYmxlKCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSAnZGlhZ25vc3RpY1Rlc3RUeXBlcy9hdmFpbGFibGUnO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJZGlhZ25vc3RpY1Rlc3RUeXBlc0F2YWlsYWJsZSgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBnZXRBUElkaWFnbm9zdGljVGVzdElEKGlkOiBPYmplY3QpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ3YyL3VzZXIvZGlhZ25vc3RpY1Rlc3QvJyArIGlkO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJZGlhZ25vc3RpY1Rlc3RJRCgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwb3N0QVBJZGlhZ25vc3RpY1Rlc3QocGFyYW1zOiBPYmplY3QpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ3YyL3VzZXIvZGlhZ25vc3RpY1Rlc3RzLyc7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICAvLy8vY29uc29sZS5sb2coXCJQT1NUOiBcIixwYXJhbXMpO1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChlbmRwb2ludCwgcGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIHBvc3RBUElkaWFnbm9zdGljVGVzdCgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG5cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHB1dEFQSWRpYWdub3N0aWNUZXN0KGlkLCBwYXJhbXM6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSBgdXNlci9kaWFnbm9zdGljVGVzdC8ke2lkfWA7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChlbmRwb2ludCwgcGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIHB1dEFQSWRpYWdub3N0aWNUZXN0KCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcblxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZGVsZXRlQVBJZGlhZ25vc3RpY1Rlc3QoaWQpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gYHVzZXIvZGlhZ25vc3RpY1Rlc3QvJHtpZH1gO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGUoZW5kcG9pbnQpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZGVsZXRlQVBJZGlhZ25vc3RpY1Rlc3QoJHtwYXRofSkgcmVzOiAke3Jlc31gLCBKU09OLnN0cmluZ2lmeShyZXMpKTtcbiAgICAgICAgcmV0dXJuIHJlcztcblxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QVBJZmlsdGVyZWREaWFnbm9zdGljVGVzdChwYXJhbXM6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSAndXNlci9kaWFnbm9zdGljVGVzdHMnO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgbGV0IGh0dHBQYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xuICAgIC8vIEJlZ2luIGFzc2lnbmluZyBwYXJhbWV0ZXJzXG4gICAgaWYgKHBhcmFtcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBodHRwUGFyYW1zID0gKHBhcmFtcy5zdGFydF9kYXRlKSA/IGh0dHBQYXJhbXMuYXBwZW5kKCdmcm9tX2RhdGUnLCBwYXJhbXMuc3RhcnRfZGF0ZSkgOiBodHRwUGFyYW1zXG4gICAgICBodHRwUGFyYW1zID0gKHBhcmFtcy5lbmRfZGF0ZSkgPyBodHRwUGFyYW1zLmFwcGVuZCgndG9fZGF0ZScsIHBhcmFtcy5lbmRfZGF0ZSkgOiBodHRwUGFyYW1zXG4gICAgICBpZiAocGFyYW1zLmRpYWdub3N0aWNUZXN0VHlwZXMpIHtcbiAgICAgICAgcGFyYW1zLmRpYWdub3N0aWNUZXN0VHlwZXMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgICBodHRwUGFyYW1zID0gaHR0cFBhcmFtcy5hcHBlbmQoJ2RpYWdub3N0aWNfdGVzdF90eXBlX2lkW10nLCBlbGVtZW50KVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQsIGh0dHBQYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJZmlsdGVyZWREaWFnbm9zdGljVGVzdCgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG5cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldEFQSWZvcm1QZW5kaW5nKHBhcmFtcyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSAnZm9ybXMvcGVuZGluZy91c2VyJztcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChlbmRwb2ludCwgcGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJZm9ybVBlbmRpbmcoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG4gIFxuICAvL2Zvcm1zLVRyYWNraW5nXG4gIGdldEFQSVNoYXJlZGNhcmVGb3JtTGlzdChwYXRpZW50KXtcbiAgICBsZXQgcGF0aCA9IGAvcmVoYWJpbGlmeS9zaGFyZWRjYXJlcGxhbi9tb25pdG9yaW5nLyR7cGF0aWVudH1gOyAgIFxuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUElyZW1pbmRlcnMoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cblxuXG4gIGdldEFQSWZvcm1MaXN0cygpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ2Zvcm1zL3VzZXInO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJZm9ybUxpc3RzKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldEFQSUZvcm1KU09OKGZvcm0sIHBhcmFtcz8pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gYGZvcm0vJHtmb3JtfS9mb3JtRmllbGRzYDtcbiAgICBsZXQgaHR0cFBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XG4gICAgaHR0cFBhcmFtcyA9IChwYXJhbXM/LmZvcm1BbnN3ZXIpID8gaHR0cFBhcmFtcy5hcHBlbmQoJ2Zvcm1BbnN3ZXInLCBwYXJhbXM/LmZvcm1BbnN3ZXIpICA6IGh0dHBQYXJhbXNcbiAgICBodHRwUGFyYW1zID0gKHBhcmFtcz8uZ2FtZV9wbGF5X2lkKSA/IGh0dHBQYXJhbXMuYXBwZW5kKCdnYW1lX3BsYXlfaWQnLCBwYXJhbXM/LmdhbWVfcGxheV9pZCkgIDogaHR0cFBhcmFtc1xuICAgIGh0dHBQYXJhbXMgPSAocGFyYW1zPy5zdGFydGVkX2FwcCkgPyBodHRwUGFyYW1zLmFwcGVuZCgnc3RhcnRlZF9hcHAnLCBwYXJhbXM/LnN0YXJ0ZWRfYXBwKSAgOiBodHRwUGFyYW1zXG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCwgaHR0cFBhcmFtcykucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSXJlbWluZGVycygke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwb3N0QVBJRm9ybUpTT04oZm9ybSwgcGFyYW1zKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9IGBmb3JtZmllbGQvY29uZGl0aW9uYWwvJHtmb3JtfS9maWVsZC8ke3BhcmFtcy5mb3JtRmllbGR9YDtcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChlbmRwb2ludCwgcGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gcG9zdEFQSUNvbnRlbnRTdGF0dXMoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcG9zdEFQSUZvcm1GaWxsKHBhcmFtcyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSBgZm9ybS9maWxsL2A7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoZW5kcG9pbnQsIHBhcmFtcykucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIHBvc3RBUElDb250ZW50U3RhdHVzKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuICAvL2dyYXBoaWNzLVRyYWNraW5nXG5cbiAgZ2V0QVBJZWxlbWVudHNMaXN0KGZpbHRlcj8pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ3VzZXIvZWxlbWVudHMnICAvKiAndXNlci9lbGVtZW50c0xpc3QvdjInICAqL1xuICAgIGxldCBodHRwUGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcbiAgICBodHRwUGFyYW1zID0gKGZpbHRlcj8ub25seV93aXRoX3ZhbHVlcyk/IGh0dHBQYXJhbXMuYXBwZW5kKCdvbmx5X3dpdGhfdmFsdWVzJywgZmlsdGVyPy5vbmx5X3dpdGhfdmFsdWVzKTogaHR0cFBhcmFtc1xuICAgIGh0dHBQYXJhbXMgPSAoZmlsdGVyPy5ncm91cGVkKT8gaHR0cFBhcmFtcy5hcHBlbmQoJ2dyb3VwZWQnLCBmaWx0ZXI/Lmdyb3VwZWQpIDogaHR0cFBhcmFtc1xuICAgIGh0dHBQYXJhbXMgPSAoZmlsdGVyPy5maWx0ZXIpPyBodHRwUGFyYW1zLmFwcGVuZCgnZmlsdGVyJywgZmlsdGVyPy5maWx0ZXIpIDogaHR0cFBhcmFtc1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQsIGh0dHBQYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJZWxlbWVudHNMaXN0KCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuICBcbiAgLyoqIGdldCBlbGVtZW50cyB3aXRoIHF1ZXJ5IGJ5IHBhcmFtZXRlciBkYXRlICAqL1xuICBnZXRBUEllbGVtZW50c0xpc3RCeURhdGUocGFyYW1zOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ3VzZXIvZWxlbWVudHNMaXN0L3YyJyAgLyogJ3VzZXIvZWxlbWVudHNMaXN0JyAgKi9cbiAgICBsZXQgaHR0cFBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XG4gICAgaWYocGFyYW1zLmZpbHRlciA9PSAnMScpIGh0dHBQYXJhbXMgPSBodHRwUGFyYW1zLmFwcGVuZCgnZmlsdGVyJywgJzEnKVxuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQsaHR0cFBhcmFtcykucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSWVsZW1lbnRzTGlzdEJ5RGF0ZSgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBnZXRBUEllbGVtZW50c0J5R3JvdXAoZmlsdGVyPyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSAnY2VudGVyL2VsZW1lbnRHcm91cC9lbGVtZW50cydcbiAgICBsZXQgaHR0cFBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XG4gICAgaWYoZmlsdGVyID09ICcxJyB8fCBmaWx0ZXIgPT0gJzAnKSBodHRwUGFyYW1zID0gaHR0cFBhcmFtcy5hcHBlbmQoJ2ZpbHRlcicsIGZpbHRlcilcbiAgICBlbHNlIGh0dHBQYXJhbXMgPSBodHRwUGFyYW1zLmFwcGVuZCgnZmlsdGVyJywgJzEnKVxuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQsaHR0cFBhcmFtcykucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSWVsZW1lbnRzTGlzdEJ5RGF0ZSgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwb3N0QVBJYWRkRWxlbWVudChpZCwgcGFyYW1zOiBPYmplY3QpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ3VzZXIvZWxlbWVudC8nICsgaWQgKyAnL3ZhbHVlL2FkZCdcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChlbmRwb2ludCwgcGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gcG9zdEFQSWFkZEVsZW1lbnQoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QVBJZ3JhcGhpY3NFbGVtZW50KGlkOiBPYmplY3QsIHF1ZXJ5KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICd1c2VyL2VsZW1lbnQvJyArIGlkO1xuICAgIGxldCBodHRwUGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcbiAgICBodHRwUGFyYW1zID0gKHF1ZXJ5KSA/IGh0dHBQYXJhbXMuYXBwZW5kKCdpbnRlcnZhbCcsIHF1ZXJ5KSA6IGh0dHBQYXJhbXNcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50LGh0dHBQYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUElncmFwaGljc0VsZW1lbnQoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QVBJZWxlbWVudElEKGlkOiBPYmplY3QsIHBhcmFtcz8pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gYHYyL3VzZXIvZWxlbWVudC8ke2lkfWA7XG4gICAgbGV0IGh0dHBQYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xuICAgIGh0dHBQYXJhbXMgPSAocGFyYW1zPy5pbnRlcnZhbCkgPyBodHRwUGFyYW1zLmFwcGVuZCgnaW50ZXJ2YWwnLCBwYXJhbXM/LmludGVydmFsKSA6IGh0dHBQYXJhbXNcbiAgICBodHRwUGFyYW1zID0gKHBhcmFtcz8uZnJvbV9kYXRlKSA/IGh0dHBQYXJhbXMuYXBwZW5kKCdmcm9tX2RhdGUnLCBwYXJhbXM/LmZyb21fZGF0ZSkgOiBodHRwUGFyYW1zXG4gICAgaHR0cFBhcmFtcyA9IChwYXJhbXM/LnRvX2RhdGUpID8gaHR0cFBhcmFtcy5hcHBlbmQoJ3RvX2RhdGUnLCBwYXJhbXM/LnRvX2RhdGUpIDogaHR0cFBhcmFtc1xuICAgIGh0dHBQYXJhbXMgPSAocGFyYW1zPy52ZXJzaW9uKSA/IGh0dHBQYXJhbXMuYXBwZW5kKCd2ZXJzaW9uJywgcGFyYW1zPy52ZXJzaW9uKSA6IGh0dHBQYXJhbXNcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50LGh0dHBQYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUElncmFwaGljc0VsZW1lbnQoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QVBJZWxlbWVudEF2YWlsYWJsZUlEKGlkOiBPYmplY3QpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gYGVsZW1lbnQvYXZhaWxhYmxlLyR7aWR9YDtcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJZWxlbWVudEF2YWlsYWJsZUlEKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldEFQSWNhdGVnb3J5KCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSAndXNlci9lbGVtZW50X2NhdGVnb3J5JztcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJY2F0ZWdvcnkoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QVBJZWxlbWVudEdyb3VwSUQoaWQ6IE9iamVjdCwgZmlsdGVyPyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSBgY2VudGVyL2VsZW1lbnRHcm91cC8ke2lkfS9lbGVtZW50c2A7XG4gICAgbGV0IGh0dHBQYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xuICAgIGh0dHBQYXJhbXMgPSAoZmlsdGVyKSA/IGh0dHBQYXJhbXMuYXBwZW5kKCdmaWx0ZXInLCBmaWx0ZXIpIDogaHR0cFBhcmFtc1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQsIGh0dHBQYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUEllbGVtZW50R3JvdXBJRCgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBzZWFyY2hBUEllbGVtZW50R3JvdXAocGFyYW1zPzogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICdjZW50ZXIvZWxlbWVudEdyb3VwcydcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChlbmRwb2ludCwgcGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gc2VhcmNoQVBJZWxlbWVudEdyb3VwKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldEFQSWVsZW1lbnRHcm91cChwYXJhbXM/OiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ2NlbnRlci9lbGVtZW50R3JvdXBzJ1xuICAgIGxldCBodHRwUGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcbiAgICBodHRwUGFyYW1zID0gKHBhcmFtcz8uZmlsdGVyKSA/IGh0dHBQYXJhbXMuYXBwZW5kKCdmaWx0ZXInLCBwYXJhbXM/LmZpbHRlcikgOiBodHRwUGFyYW1zXG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCwgaHR0cFBhcmFtcykucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSWVsZW1lbnRHcm91cCgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cbiAgLyoqIGdldCBkaWV0cyB3aXRoIHF1ZXJ5IGJ5IHBhcmFtZXRlciBkYXRlICAqL1xuICBnZXRBUElsaXN0RGlldHNCeURhdGUocGFyYW1zPzogT2JqZWN0KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICd1c2VyL2RpZXRzJztcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJbGlzdERpZXRzQnlEYXRlKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldEFQSUxpc3RSZWNpcGUocGFyYW1zKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9IGB1c2VyL2RpZXRzL3JlY2VpcHRzYDtcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIGxldCBodHRwUGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKVxuICAgIC5zZXQoJ3RhZ3MnLCBwYXJhbXMudGFncylcbiAgICAuc2V0KCdpbnRlcmFjdGlvbnMnLCBwYXJhbXMuaW50ZXJhY3Rpb25zKVxuICAgIC5zZXQoJ3JlYWRpbmdUaW1lJywgcGFyYW1zLnJlYWRpbmdUaW1lKVxuICAgIC5zZXQoJ2Zyb21fZGF0ZScsIHBhcmFtcy5mcm9tX2RhdGUpXG4gICAgLnNldCgndG9fZGF0ZScsIHBhcmFtcy50b19kYXRlKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCwgaHR0cFBhcmFtcykucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSWRldGFpbFJlY2lwZSgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICAvKmdldEFQSWRpZXRzQnlEYXRlKGRhdGU6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSBgdXNlci9kaWV0YXJ5SW50YWtlc2BcbiAgICBsZXQgaHR0cFBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XG4gICAgaHR0cFBhcmFtcyA9IChkYXRlKSA/IGh0dHBQYXJhbXMuYXBwZW5kKCdkYXRlJywgZGF0ZSkgOiBodHRwUGFyYW1zXG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCwgaHR0cFBhcmFtcykucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSWRpZXRzQnlEYXRlKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfSovXG5cbiAgZ2V0QVBJZGlldHNCeURhdGUocGFyYW1zOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gYHVzZXIvZGlldGFyeUludGFrZXNgXG4gICAgbGV0IGh0dHBQYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xuICAgIGh0dHBQYXJhbXMgPSAocGFyYW1zPy5kYXRlKSA/IGh0dHBQYXJhbXMuYXBwZW5kKCdkYXRlJywgcGFyYW1zLmRhdGUpIDogaHR0cFBhcmFtc1xuICAgIGh0dHBQYXJhbXMgPSAocGFyYW1zPy5ncm91cGVkX2J5X3RpbWVzKSA/IGh0dHBQYXJhbXMuYXBwZW5kKCdncm91cGVkX2J5X3RpbWVzJywgcGFyYW1zLmdyb3VwZWRfYnlfdGltZXMpIDogaHR0cFBhcmFtc1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQsIGh0dHBQYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUElkaWV0c0J5RGF0ZSgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBnZXRBUElGb3Jtc0J5RGF0ZShwYXJhbXM6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSBgcmVoYWJpbGlmeS9zaGFyZWRjYXJlcGxhbi9mb3Jtc2A7XG4gICAgbGV0IGh0dHBQYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xuICAgIGh0dHBQYXJhbXMgPSAocGFyYW1zPy5kYXRlKSA/IGh0dHBQYXJhbXMuYXBwZW5kKCdkYXRlJywgcGFyYW1zLmRhdGUpIDogaHR0cFBhcmFtc1xuICAgIGh0dHBQYXJhbXMgPSAocGFyYW1zPy5ncm91cGVkX2J5X3RpbWVzKSA/IGh0dHBQYXJhbXMuYXBwZW5kKCdncm91cGVkX2J5X3RpbWVzJywgcGFyYW1zLmdyb3VwZWRfYnlfdGltZXMpIDogaHR0cFBhcmFtc1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQsIGh0dHBQYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUElkaWV0c0J5RGF0ZSgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cbiBcblxuICBnZXRBUElkZXRhaWxEaWV0cyhpZDogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9IGBkaWV0LyR7aWR9YDtcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIGxldCBodHRwUGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKVxuICAgICAgLnNldCgnaW50ZXJhY3Rpb25zJywgMSk7XG5cbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50LCAgaHR0cFBhcmFtcyApLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUElkZXRhaWxEaWV0cygke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBnZXRBUElkZXRhaWxSZWNpcGUoaWQ6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSBgZGlldC9yZWNlaXB0LyR7aWR9YDtcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJZGV0YWlsUmVjaXBlKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldEFQSWxpc3RUZXN0aW1vbmlhbHMocGFyYW1zKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9IGB1c2VyL3Rlc3RpbW9uaWFsc2A7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICBsZXQgaHR0cFBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKClcbiAgICAuc2V0KCd0YWdzJywgcGFyYW1zLnRhZ3MpXG4gICAgLnNldCgnaW50ZXJhY3Rpb25zJywgcGFyYW1zLmludGVyYWN0aW9ucylcbiAgICAuc2V0KCdyZWFkaW5nVGltZScsIHBhcmFtcy5yZWFkaW5nVGltZSk7XG4gICAgXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQsIGh0dHBQYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUElkZXRhaWxSZWNpcGUoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QVBJZGV0YWlsVGVzdGltb25pYWwoaWQsIHBhcmFtcyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSBgdXNlci90ZXN0aW1vbnkvJHtpZH1gO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgbGV0IGh0dHBQYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpXG4gICAgLnNldCgndGFncycsIHBhcmFtcy50YWdzKVxuICAgIC5zZXQoJ2ludGVyYWN0aW9ucycsIHBhcmFtcy5pbnRlcmFjdGlvbnMpXG4gICAgLnNldCgncmVhZGluZ1RpbWUnLCBwYXJhbXMucmVhZGluZ1RpbWUpXG4gICAgLnNldCgnaW50ZXJhY3Rpb25zJywgMSk7XG4gICAgXG4gICAgXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQsaHR0cFBhcmFtcykucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUElkZXRhaWxSZWNpcGUoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG4gIFxuXG4gIC8qKiBnZXQgYWR2aWNlcyAgKiovXG4gIGdldEFQSWxpc3RBZHZpY2VzKHBhcmFtcyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSAndXNlci9hZHZpY2VzJztcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIGxldCBodHRwUGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKVxuICAgIC5zZXQoJ3RhZ3MnLCBwYXJhbXMudGFncylcbiAgICAuc2V0KCdpbnRlcmFjdGlvbnMnLCBwYXJhbXMuaW50ZXJhY3Rpb25zKVxuICAgIC5zZXQoJ3JlYWRpbmdUaW1lJywgcGFyYW1zLnJlYWRpbmdUaW1lKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCwgaHR0cFBhcmFtcykucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSWxpc3RBZHZpY2VzKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gXG4gICAgLyoqIGdldCBuZXdzICAqKi9cbiAgICBnZXRBUElsaXN0TmV3cyhwYXJhbXMpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgbGV0IHBhdGggPSAndXNlci9uZXdzJztcbiAgICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgICBsZXQgaHR0cFBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKClcbiAgICAgIC5zZXQoJ3RhZ3MnLCBwYXJhbXMudGFncylcbiAgICAgIC5zZXQoJ2ludGVyYWN0aW9ucycsIHBhcmFtcy5pbnRlcmFjdGlvbnMpXG4gICAgICAuc2V0KCdyZWFkaW5nVGltZScsIHBhcmFtcy5yZWFkaW5nVGltZSk7XG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCwgaHR0cFBhcmFtcykucGlwZShcbiAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgIC8vLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUElsaXN0TmV3cygke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgZ2V0QVBJZGV0YWlsTmV3KGlkOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgbGV0IHBhdGggPSBgdXNlci9uZXcvJHtpZH1gO1xuICAgICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICAgIGxldCBodHRwUGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKVxuICAgICAgLnNldCgnaW50ZXJhY3Rpb25zJywgMSk7XG5cbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50LCAgaHR0cFBhcmFtcyApLnBpcGUoXG4gICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJZGV0YWlsTmV3KCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9IFxuXG4gICAgZ2V0QVBJZGV0YWlsQWR2aWNlcyhpZDogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAgIGxldCBwYXRoID0gYGFkdmljZS8ke2lkfWA7XG4gICAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIFxuICAgICAgbGV0IGh0dHBQYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpXG4gICAgICAuc2V0KCdpbnRlcmFjdGlvbnMnLCAxKTtcblxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQsICBodHRwUGFyYW1zICkucGlwZShcbiAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cblxuXG4gIGdldEFQSVNlYXJjaE5ld3MocXVlcnk6IGFueSxwYXJhbXMpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ25ld3MnO1xuICAgIGxldCBodHRwUGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKVxuICAgIC5zZXQoJ3RhZ3MnLCBwYXJhbXMudGFncylcbiAgICAuc2V0KCdpbnRlcmFjdGlvbnMnLCBwYXJhbXMuaW50ZXJhY3Rpb25zKVxuICAgIC5zZXQoJ3JlYWRpbmdUaW1lJywgcGFyYW1zLnJlYWRpbmdUaW1lKTtcbiAgICBodHRwUGFyYW1zID0gKHF1ZXJ5KSA/IGh0dHBQYXJhbXMuYXBwZW5kKCdzZWFyY2gnLCBxdWVyeSkgOiBodHRwUGFyYW1zXG4gICBcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50LCBodHRwUGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJU2VhcmNoTmV3cygke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBnZXRBUElTZWFyY2hBZHZpY2VzKHF1ZXJ5OiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ2FkdmljZXMnO1xuICAgIGxldCBodHRwUGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcbiAgICBodHRwUGFyYW1zID0gKHF1ZXJ5KSA/IGh0dHBQYXJhbXMuYXBwZW5kKCdzZWFyY2gnLCBxdWVyeSkgOiBodHRwUGFyYW1zXG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCwgaHR0cFBhcmFtcykucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUElTZWFyY2hBZHZpY2VzKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuICBcbiAgZ2V0QVBJZHJ1Z3NMaXN0KHF1ZXJ5OiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gYGRydWdJbnRha2UvbGlzdGA7XG4gICAgbGV0IGh0dHBQYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xuICAgIGh0dHBQYXJhbXMgPSAocXVlcnkpID8gaHR0cFBhcmFtcy5hcHBlbmQoJ3NlYXJjaCcsIHF1ZXJ5KSA6IGh0dHBQYXJhbXNcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50LCBodHRwUGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJZHJ1Z3NMaXN0KCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIFxuICBnZXRBUElkcnVnc0xpc3RJbnRlcmFjdGlvbihxdWVyeTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBjb25zdCBlbmRwb2ludCA9IGBodHRwczovL242aWJhYXpldm5zaXhmY3M0cHJsN3o3d3JhMG9vbm1hLmxhbWJkYS11cmwuZXUtY2VudHJhbC0xLm9uLmF3cy9gO1xuICAgLy8gY29uc3QgZW5kcG9pbnQgPSBgaHR0cHM6Ly9uNmliYWF6ZXZuc2l4ZmNzNHBybDd6N3dyYTBvb25tYS5sYW1iZGEtdXJsLmV1LWNlbnRyYWwtMS5vbi5hd3MvP2RydWc9REIwMTM2M2A7XG4gICAvL2xldCBodHRwUGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKS5zZXQoJ2RydWcnLCBxdWVyeSk7XG4gICBsZXQgaHR0cFBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKClcbiAgIC5zZXQoJ2RydWcnLCBxdWVyeSlcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCwgaHR0cFBhcmFtcykucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG5cbiAgZ2V0QVBJZHJ1Z0ludGFrZUJ5RGF0ZShwYXJhbXM6IE9iamVjdCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSAndXNlci9kcnVnSW50YWtlL2RhdGUnO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGVuZHBvaW50LCBwYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUElkcnVnSW50YWtlQnlEYXRlKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcblxuICAgICAgfSlcbiAgICApO1xuICB9XG4vLyBzZW5kIG1lZGljYXRpb24gbGlzdFxuICBnZXRBUEltZWRpY2F0aW9uTGlzdChxdWVyeTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9IGBzZW5kbWVkaWNhdGlvbi9saXN0YDtcbiAgICBsZXQgaHR0cFBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XG4gICAgaHR0cFBhcmFtcyA9IChxdWVyeSkgPyBodHRwUGFyYW1zLmFwcGVuZCgnc2VhcmNoJywgcXVlcnkpIDogaHR0cFBhcmFtc1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQsIGh0dHBQYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJbWVkaWNhdGlvbkxpc3QoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QVBJZGlyZWN0aW9uc0xpc3QoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9IGB1c2VyL2FkZHJlc3Nlc2A7XG4gICAgLy8gbGV0IGh0dHBQYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xuICAgIC8vIGh0dHBQYXJhbXMgPSAocXVlcnkpID8gaHR0cFBhcmFtcy5hcHBlbmQoJ3NlYXJjaCcsIHF1ZXJ5KSA6IGh0dHBQYXJhbXNcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSWRpcmVjdGlvbkxpc3QoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG4gIGdldEFQSW1lZGljYXRpb25zTGlzdCgpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gYHNlbmRtZWRpY2F0aW9uL2xpc3RgO1xuICAgIC8vIGxldCBodHRwUGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcbiAgICAvLyBodHRwUGFyYW1zID0gKHF1ZXJ5KSA/IGh0dHBQYXJhbXMuYXBwZW5kKCdzZWFyY2gnLCBxdWVyeSkgOiBodHRwUGFyYW1zXG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUElkaXJlY3Rpb25MaXN0KCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHBvc3RBUElzZW5kRGlyZWN0aW9uKHBhcmFtczogT2JqZWN0KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICd1c2VyL2FkZHJlc3MnO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGVuZHBvaW50LCBwYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gcG9zdEFQSXNlbmREaXJlY3Rpb24oJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwdXRBUElzZW5kRGlyZWN0aW9uKGlkOiBhbnksIHBhcmFtczogT2JqZWN0KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9IGB1c2VyL2FkZHJlc3MvJHtpZH1gO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoZW5kcG9pbnQsIHBhcmFtcykucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIHB1dEFQSWRydWdJbnRha2UoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBkZWxldGVBUElzZW5kRGlyZWN0aW9uKGlkOiBPYmplY3QpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gYHVzZXIvYWRkcmVzcy8ke2lkfWA7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmRlbGV0ZShlbmRwb2ludCkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGRlbGV0ZUFQSW1lZGljYXRpb25QbGFuKCR7cGF0aH0pIHJlczogJHtyZXN9YCwgSlNPTi5zdHJpbmdpZnkocmVzKSk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwb3N0QVBJbWVkaWNhdGlvblNlbmRQZXRpdGlvbihwYXJhbXM6IE9iamVjdCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSAnc2VuZG1lZGljYXRpb24nO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGVuZHBvaW50LCBwYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gcG9zdEFQSXNlbmREaXJlY3Rpb24oJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwb3N0QVBJZHJ1Z0ludGFrZShwYXJhbXM6IE9iamVjdCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSAndXNlci9kcnVnSW50YWtlJztcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChlbmRwb2ludCwgcGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gcG9zdEFQSWRydWdJbnRha2UoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwb3N0QVBJY2hhbmdlU3RhdGVkcnVnSW50YWtlKGlkOiBPYmplY3QsIHN0YXRlOiBPYmplY3QpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gYHVzZXIvZHJ1Z0ludGFrZS8ke2lkfS9zZXQvJHtzdGF0ZX1gO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gcG9zdEFQSWRydWdJbnRha2UoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwb3N0QVBJbWVkaWNhdGlvblBsYW4ocGFyYW1zOiBPYmplY3QpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gYHVzZXIvbWVkaWNhdGlvblBsYW5gO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGVuZHBvaW50LCBwYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBwb3N0QVBJZHJ1Z0ludGFrZSgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG5cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHB1dEFQSW1lZGljYXRpb25QbGFuKGlkOiBhbnksIHBhcmFtczogT2JqZWN0KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9IGB1c2VyL21lZGljYXRpb25QbGFuLyR7aWR9YDtcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KGVuZHBvaW50LCBwYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBwdXRBUElkcnVnSW50YWtlKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcblxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZGVsZXRlQVBJbWVkaWNhdGlvblBsYW4oaWQ6IE9iamVjdCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSBgdXNlci9tZWRpY2F0aW9uUGxhbi8ke2lkfWA7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmRlbGV0ZShlbmRwb2ludCkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGRlbGV0ZUFQSW1lZGljYXRpb25QbGFuKCR7cGF0aH0pIHJlczogJHtyZXN9YCwgSlNPTi5zdHJpbmdpZnkocmVzKSk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBnZXRBUEltZWRpY2F0aW9uUGxhbihpZCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSBgdXNlci9tZWRpY2F0aW9uUGxhbi8ke2lkfWBcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJbWVkaWNhdGlvblBsYW4oJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QVBJbWVkaWNhdGlvblBsYW5zKHBhcmFtcz8pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gYHVzZXIvbWVkaWNhdGlvblBsYW5zYFxuICAgIGxldCBodHRwUGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcbiAgICBodHRwUGFyYW1zID0gKHBhcmFtcz8ub25EYXRlID09PSAwIHx8IHBhcmFtcz8ub25EYXRlID09PSAxKSA/IGh0dHBQYXJhbXMuYXBwZW5kKCdvbkRhdGUnLCBwYXJhbXM/Lm9uRGF0ZSkgOiBodHRwUGFyYW1zXG4gICAgaHR0cFBhcmFtcyA9IChwYXJhbXM/LmZyb21fZGF0ZSkgPyBodHRwUGFyYW1zLmFwcGVuZCgnZnJvbV9kYXRlJywgcGFyYW1zPy5mcm9tX2RhdGUpIDogaHR0cFBhcmFtc1xuICAgIGh0dHBQYXJhbXMgPSAocGFyYW1zPy50b19kYXRlKSA/IGh0dHBQYXJhbXMuYXBwZW5kKCd0b19kYXRlJywgcGFyYW1zPy50b19kYXRlKSA6IGh0dHBQYXJhbXNcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50LCBodHRwUGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSW1lZGljYXRpb25QbGFuKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuLy90b2RvcyBsb3MgbWVkaWNhbWVudG9zIGFzaWduYWRvcyBhIGVzYSBwZXJzb25hXG4gIGdldEFQSW1lZGljYXRpb25BbGxzKCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSBgdXNlci9tZWRpY2F0aW9uUGxhbnNgICBcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSW1lZGljYXRpb25QbGFuKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4vLyBhY3RpdmF0ZVBlbmRpbmdNZWRpY2F0aW9uUGxhbnNcbiAgZ2V0QVBJUGVuZGluZ01lZGljYXRpb25QbGFucyhwYXJhbXM/KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9IGB1c2VyL3BlbmRpbmcvbWVkaWNhdGlvblBsYW5zYFxuICAgIGxldCBodHRwUGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcbiAgICBodHRwUGFyYW1zID0gKHBhcmFtcz8ub25seUNvdW50ID09PSAxIHx8IHBhcmFtcz8ub25seUNvdW50ID09PSAwKSA/IGh0dHBQYXJhbXMuYXBwZW5kKCdvbmx5Q291bnQnLCBwYXJhbXM/Lm9ubHlDb3VudCkgOiBodHRwUGFyYW1zXG4gICAgaHR0cFBhcmFtcyA9IChwYXJhbXM/Lm9ubHlDb3VudCA9PT0gdW5kZWZpbmVkKSA/IGh0dHBQYXJhbXMuYXBwZW5kKCdvbmx5Q291bnQnLCAnMCcpIDogaHR0cFBhcmFtc1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQsIGh0dHBQYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJUGVuZGluZ01lZGljYXRpb25QbGFucygke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBnZXRBUElGcmVxdWVuY2llc01lZGljYXRpb25QbGFuc0hQQyhwYXJhbXM/KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9IGBocGMvbWVkaWNhdGlvblBsYW4vZnJlcXVlbmNpZXNgXG4gICAgbGV0IGh0dHBQYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQsIGh0dHBQYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJRnJlcXVlbmNpZXNNZWRpY2F0aW9uUGxhbnNIUEMoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QVBJRHJ1Z1VuaXRzKGlkLCBzZWFyY2g/KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9IGBkcnVnLyR7aWR9L3VuaXRzYFxuICAgIGxldCBodHRwUGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcbiAgICBodHRwUGFyYW1zID0gc2VhcmNoID8gaHR0cFBhcmFtcy5hcHBlbmQoJ3NlYXJjaCcsIHNlYXJjaCkgOiBodHRwUGFyYW1zXG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCwgaHR0cFBhcmFtcykucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUElEcnVnVW5pdHMoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QVBJRGlhZ25vc3RpYyhwYXJhbXMpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ3VzZXIvZGlhZ25vc3RpY3MnLy8ndjIvZGlhZ25vc3RpYy91c2VyJztcbiAgICBsZXQgaHR0cFBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XG4gICAgaHR0cFBhcmFtcyA9IChwYXJhbXM/Lm9uRGF0ZSA9PT0gMCB8fCBwYXJhbXM/Lm9uRGF0ZSA9PT0gMSkgPyBodHRwUGFyYW1zLmFwcGVuZCgnb25EYXRlJywgcGFyYW1zPy5vbkRhdGUpIDogaHR0cFBhcmFtc1xuICAgIGh0dHBQYXJhbXMgPSAocGFyYW1zPy5mcm9tX2RhdGUpID8gaHR0cFBhcmFtcy5hcHBlbmQoJ2Zyb21fZGF0ZScsIHBhcmFtcz8uZnJvbV9kYXRlKSA6IGh0dHBQYXJhbXNcbiAgICBodHRwUGFyYW1zID0gKHBhcmFtcz8udG9fZGF0ZSkgPyBodHRwUGFyYW1zLmFwcGVuZCgndG9fZGF0ZScsIHBhcmFtcz8udG9fZGF0ZSkgOiBodHRwUGFyYW1zXG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCwgaHR0cFBhcmFtcykucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSWdhbWVzKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldEFQSUNlbnRlckFsbGVyZ2llcyhzZWFyY2g/KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICdjZW50ZXIvYWxsZXJnaWVzJztcbiAgICBsZXQgaHR0cFBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XG4gICAgaHR0cFBhcmFtcyA9IChzZWFyY2gpID8gaHR0cFBhcmFtcy5hcHBlbmQoJ3NlYXJjaCcsIHNlYXJjaCkgOiBodHRwUGFyYW1zXG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCwgaHR0cFBhcmFtcykucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSWdhbWVzKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldEFQSUFsbGVyZ2llcygpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ3VzZXIvYWxsZXJnaWVzJztcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJZ2FtZXMoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcG9zdEFQSUFsbGVyZ2llcyhwYXJhbXM6IE9iamVjdCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSBgdXNlci9hbGxlcmd5L2NyZWF0ZWA7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoZW5kcG9pbnQsIHBhcmFtcykucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIHBvc3RBUElkcnVnSW50YWtlKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcblxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHV0QVBJQWxsZXJneShpZDogYW55LCBwYXJhbXM6IE9iamVjdCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSBgdXNlci9hbGxlcmd5LyR7aWR9YDtcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KGVuZHBvaW50LCBwYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBwdXRBUElBbGxlcmd5KCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcblxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZGVsZXRlQVBJQWxsZXJneShpZDogT2JqZWN0KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9IGB1c2VyL2FsbGVyZ3kvJHtpZH1gO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGUoZW5kcG9pbnQpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZGVsZXRlQVBJQWxsZXJneSgke3BhdGh9KSByZXM6ICR7cmVzfWAsIEpTT04uc3RyaW5naWZ5KHJlcykpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QVBJZ2FtZXMoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICd1c2VyL2dhbWVzJztcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJZ2FtZXMoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG4gIC8qKiBnZXQgZ2FtZXMgd2l0aCBxdWVyeSBieSBwYXJhbWV0ZXIgZGF0ZSAgKi9cbiAgZ2V0QVBJZ2FtZXNCeURhdGUoZnJvbV9kYXRlOiBhbnksIHRvX2RhdGU6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSAndXNlci9nYW1lUGxheXMvc2NoZWR1bGVkJztcbiAgICBsZXQgaHR0cFBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XG4gICAgaHR0cFBhcmFtcyA9IChmcm9tX2RhdGUpID8gaHR0cFBhcmFtcy5hcHBlbmQoJ2Zyb21fZGF0ZScsIGZyb21fZGF0ZSkgOiBodHRwUGFyYW1zXG4gICAgaHR0cFBhcmFtcyA9ICh0b19kYXRlKSA/IGh0dHBQYXJhbXMuYXBwZW5kKCd0b19kYXRlJywgdG9fZGF0ZSkgOiBodHRwUGFyYW1zXG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCwgaHR0cFBhcmFtcykucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSWdhbWVzKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuICBnZXRBUElnYW1lSWQoaWQpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gYHVzZXIvZ2FtZS8ke2lkfWA7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSWdhbWVJZCgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBnZXRBUElhZ2VuZGEoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICd1c2VyL2FnZW5kYSc7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSWFnZW5kYSgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICAvL3JlbWluZGVyc1xuICAvL3VzZXIvcmVtaW5kZXIgXG5cbiAgZ2V0QVBJYWxsQWdlbmRhKHBhcmFtcz8pOiBPYnNlcnZhYmxlPGFueT57XG4gICAgbGV0IHBhdGggPSAndXNlci9hZ2VuZGEvdjInO1xuICAgIGxldCBodHRwUGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcbiAgICBodHRwUGFyYW1zID0gcGFyYW1zPy5mcm9tX2RhdGU/IGh0dHBQYXJhbXMuYXBwZW5kKCdmcm9tX2RhdGUnLCBwYXJhbXM/LmZyb21fZGF0ZSkgOiBodHRwUGFyYW1zXG4gICAgaHR0cFBhcmFtcyA9IHBhcmFtcz8udG9fZGF0ZT8gaHR0cFBhcmFtcy5hcHBlbmQoJ3RvX2RhdGUnLCBwYXJhbXM/LnRvX2RhdGUpIDogaHR0cFBhcmFtc1xuICAgIGh0dHBQYXJhbXMgPSBwYXJhbXM/LmZpbHRlcl9ieV9kYXRlPyBodHRwUGFyYW1zLmFwcGVuZCgnZmlsdGVyX2J5X2RhdGUnLCBwYXJhbXM/LmZpbHRlcl9ieV9kYXRlKSA6IGh0dHBQYXJhbXNcbiAgICBodHRwUGFyYW1zID0gKHBhcmFtcz8ud2l0aF9tZWRpY2FsX3Byb2NlZHVyZXMgIT0gdW5kZWZpbmVkKT8gaHR0cFBhcmFtcy5hcHBlbmQoJ3dpdGhfbWVkaWNhbF9wcm9jZWR1cmVzJywgcGFyYW1zPy53aXRoX21lZGljYWxfcHJvY2VkdXJlcykgOiBodHRwUGFyYW1zXG4gICAgaHR0cFBhcmFtcyA9IChwYXJhbXM/Lm9yZGVyICE9IHVuZGVmaW5lZCk/IGh0dHBQYXJhbXMuYXBwZW5kKCdvcmRlcicsIHBhcmFtcz8ub3JkZXIpIDogaHR0cFBhcmFtc1xuXG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCwgaHR0cFBhcmFtcykucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUElhcHBvaW50bWVudEFnZW5kYVYyKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldEFQSWFnZW5kYUlEKGlkKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9IGB1c2VyL2FnZW5kYS8ke2lkfWA7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSWFnZW5kYUlEKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHBvc3RBUElhZGRBZ2VuZGEocGFyYW1zOiBPYmplY3QpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ3VzZXIvYWdlbmRhLydcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChlbmRwb2ludCwgcGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gcG9zdEFQSWFkZEFnZW5kYSgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBkZWxldGVBUElhZGRBZ2VuZGEoaWQ6IE9iamVjdCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhcmFtcyA9IHsgYWdlbmRhOiBpZCB9XG4gICAgbGV0IHBhdGggPSAndXNlci9hZ2VuZGEvZGVsZXRlJ1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGVuZHBvaW50LCBwYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBkZWxldGVBUElhZGRBZ2VuZGEoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHV0QVBJYWdlbmRhKGlkOiBhbnksIHBhcmFtczogT2JqZWN0KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9IGB1c2VyL2FnZW5kYS8ke2lkfWA7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChlbmRwb2ludCwgcGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gcHV0QVBJYWdlbmRhKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldEFQSWFsbG93ZWRDb250YWN0cygpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gYHVzZXIvYWxsb3dlZENvbnRhY3RzYDtcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIGxldCBodHRwUGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcbiAgICBodHRwUGFyYW1zID0gaHR0cFBhcmFtcy5hcHBlbmQoJ3dpdGhEZXBhcnRtZW50cycsICcxJykgXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQsIGh0dHBQYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJYWxsb3dlZENvbnRhY3RzKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgbGV0IGFsbG93ZWQgPSByZXMuYWxsb3dlZFxuICAgICAgICBpZihyZXMuYWxsb3dlZCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICBhbGxvd2VkID0gW11cbiAgICAgICAgcmV0dXJuIGFsbG93ZWQ7XG5cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldEFQSXN0YWZmSWQoaWQpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gYHN0YWZmLyR7aWR9YDtcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJc3RhZmZJZCgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICAvKiogZ2V0IGdhbWVzIHdpdGggcXVlcnkgYnkgcGFyYW1ldGVyIGRhdGUgICovXG4gIGdldEFQSVVzZXJNZXNzYWdlcygpOiBPYnNlcnZhYmxlPFNoZWxsQ2hhdE1vZGVsW10+IHtcblxuICAgIGxldCBwYXRoID0gJ21lc3NhZ2UvdXNlcic7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcblxuICAgICAgICAvLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSVVzZXJNZXNzYWdlcygke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIGlmKHJlcy5sZW5ndGggPT0gMClcbiAgICAgICAgcmV0dXJuIHJlc1xuICAgICAgICByZXR1cm4gcmVzLm1lc3NhZ2VzIGFzIFNoZWxsQ2hhdE1vZGVsW107XG4gICAgICB9KVxuICAgICk7XG4gIH1cbiAgLy8gZ2V0IHRoZSBjb21wYW55IGRldGFpbHMsIGEgc3Vic2V0IG9mIHRoZSB1c2VyIGRhdGFcbiAgZ2V0VXNlclN1YnNldERhdGEoKTogT2JzZXJ2YWJsZTxTaGVsbENoYXRNb2RlbD4ge1xuICAgIGxldCBwYXRoID0gJ21lc3NhZ2UvdXNlcic7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcblxuICAgIGNvbnN0IGRhdGFPYnNlcnZhYmxlID0gdGhpcy5odHRwLmdldChlbmRwb2ludCk7XG5cbiAgICByZXR1cm4gZGF0YU9ic2VydmFibGUucGlwZShcbiAgICAgIG1hcCgoanNvblJlc3BvbnNlKSA9PiB7XG4gICAgICAgIGNvbnN0IGZpbHRlcmVkRGF0YTogU2hlbGxDaGF0TW9kZWwgPSB7XG4gICAgICAgICAgLi4uanNvblJlc3BvbnNlLm1lc3NhZ2VzXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBmaWx0ZXJlZERhdGE7XG4gICAgICB9KVxuICAgICk7XG4gIH1cbi8qKiBSZW1pbmRlcnMgKi9cbiAgZ2V0QVBJcmVtaW5kZXJzKCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSAndXNlci9yZW1pbmRlcic7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSXJlbWluZGVycygke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBnZXRBUElyZW1pbmRlcklEKGlkKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9IGB1c2VyL3JlbWluZGVyLyR7aWR9YDtcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJcmVtaW5kZXJJRCgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwb3N0QVBJYWRkUmVtaW5kZXIocGFyYW1zOiBPYmplY3QpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ3VzZXIvcmVtaW5kZXIvJ1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGVuZHBvaW50LCBwYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBwb3N0QVBJYWRkUmVtaW5kZXIoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZGVsZXRlQVBJUmVtaW5kZXIoaWQpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gYHVzZXIvcmVtaW5kZXIvJHtpZH1gO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGUoZW5kcG9pbnQpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBkZWxldGVBUElSZW1pbmRlcigke3BhdGh9KSByZXM6ICR7cmVzfWAsIEpTT04uc3RyaW5naWZ5KHJlcykpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgdXBkYXRlQVBJUmVtaW5kZXIoaWQ6IGFueSwgcGFyYW1zOiBPYmplY3QpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gYHVzZXIvcmVtaW5kZXIvJHtpZH1gO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoZW5kcG9pbnQsIHBhcmFtcykucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIHVwZGF0ZUFQSVJlbWluZGVyKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcblxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgdXBkYXRlQVBJdXNlcihwYXJhbXM6IE9iamVjdCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSBgdXNlcmA7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChlbmRwb2ludCwgcGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gdXBkYXRlQVBJUmVtaW5kZXIoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwb3N0QVBJQ29udGVudFN0YXR1cyhwYXJhbXM6IE9iamVjdCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSAnY29udGVudC9zdGF0dXMnXG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoZW5kcG9pbnQsIHBhcmFtcykucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIHBvc3RBUElDb250ZW50U3RhdHVzKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHBvc3RBUEl1c2VyUmVnaXN0ZXIocGFyYW1zOiBPYmplY3QpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ2hwYy91c2VyL3N0b3JlJztcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChlbmRwb2ludCwgcGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIHBvc3RBUElzZW5kUmVnaXN0ZXIoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBnZXRBUElUeXBlRG9jdW1lbnQoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICdjZW50ZXIvZG9jdW1lbnRUeXBlcyc7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSVR5cGVEb2N1bWVudCgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cbiAgXG4gIGdldEFQSW1lc3NhZ2UoaWQsIHBhcmFtcz8pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ3VzZXIvbWVzc2FnZS8nKyBpZFxuICAgIGxldCBodHRwUGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcbiAgICBodHRwUGFyYW1zID0gaHR0cFBhcmFtcz8gaHR0cFBhcmFtcy5hcHBlbmQoJ3BhZ2UnLCBwYXJhbXMpIDogaHR0cFBhcmFtc1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQsIGh0dHBQYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUEllbGVtZW50c0xpc3QoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QVBJRXZlbnRzKHBhcmFtcyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSAnaHBjL3VzZXIvZXBpc29kZXMnO1xuICAgIGxldCBodHRwUGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcbiAgICBodHRwUGFyYW1zID0gKHBhcmFtcz8ub25EYXRlID09PSAwIHx8IHBhcmFtcz8ub25EYXRlID09PSAxKSA/IGh0dHBQYXJhbXMuYXBwZW5kKCdvbkRhdGUnLCBwYXJhbXM/Lm9uRGF0ZSkgOiBodHRwUGFyYW1zXG4gICAgaHR0cFBhcmFtcyA9IChwYXJhbXM/LmZyb21fZGF0ZSkgPyBodHRwUGFyYW1zLmFwcGVuZCgnZnJvbV9kYXRlJywgcGFyYW1zPy5mcm9tX2RhdGUpIDogaHR0cFBhcmFtc1xuICAgIGh0dHBQYXJhbXMgPSAocGFyYW1zPy50b19kYXRlKSA/IGh0dHBQYXJhbXMuYXBwZW5kKCd0b19kYXRlJywgcGFyYW1zPy50b19kYXRlKSA6IGh0dHBQYXJhbXNcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50LCBodHRwUGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJZ2FtZXMoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzOyBcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHBvc3RBUEltZWRpY2FsUHJvY2VkdXJlcyhwYXJhbXM/OiBPYmplY3QpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gYHVzZXIvbWVkaWNhbFByb2NlZHVyZXNgO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGVuZHBvaW50LCBwYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBwb3N0QVBJZHJ1Z0ludGFrZSgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG5cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldEFQSW1lZGljYWxQcm9jZWR1cmVzMihwYXJhbXM/OiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gYGhwYy91c2VyL21lZGljYWxQcm9jZWR1cmVzYDtcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIGxldCBodHRwUGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcbiAgICBodHRwUGFyYW1zID0gKHBhcmFtcz8udG9fZGF0ZSkgPyBodHRwUGFyYW1zLmFwcGVuZCgndG9fZGF0ZScsIHBhcmFtcz8udG9fZGF0ZSkgOiBodHRwUGFyYW1zXG4gICAgaHR0cFBhcmFtcyA9IChwYXJhbXM/LmZyb21fZGF0ZSkgPyBodHRwUGFyYW1zLmFwcGVuZCgnZnJvbV9kYXRlJywgcGFyYW1zPy5mcm9tX2RhdGUpIDogaHR0cFBhcmFtc1xuICAgIGh0dHBQYXJhbXMgPSAocGFyYW1zPy51c2VyKSA/IGh0dHBQYXJhbXMuYXBwZW5kKCd1c2VyJywgcGFyYW1zPy51c2VyKSA6IGh0dHBQYXJhbXNcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCwgcGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gcG9zdEFQSWRydWdJbnRha2UoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwb3N0QVBJTmV4dE1lZGljYWxQcm9jZWR1cmUocGFyYW1zPzogT2JqZWN0KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9IGB1c2VyL21lZGljYWxQcm9jZWR1cmUvbmV4dGA7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoZW5kcG9pbnQsIHBhcmFtcykucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIHBvc3RBUElkcnVnSW50YWtlKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcblxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QVBJbWVkaWNhbFByb2NlZHVyZXMocGFyYW1zOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gYGhwYy91c2VyL21lZGljYWxQcm9jZWR1cmVgO1xuICAgIGxldCBodHRwUGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcbiAgICBodHRwUGFyYW1zID0gKHBhcmFtcz8uYnlFcGlzb2RlID09PSAwIHx8IHBhcmFtcz8uYnlFcGlzb2RlID09PSAxKSA/IGh0dHBQYXJhbXMuYXBwZW5kKCdieUVwaXNvZGUnLCBwYXJhbXM/LmJ5RXBpc29kZSkgOiBodHRwUGFyYW1zXG4gICAgaHR0cFBhcmFtcyA9IChwYXJhbXM/Lm1lZGljYWxfcHJvY2VkdXJlX2lkICYmIHBhcmFtcz8uYnlFcGlzb2RlID09PSAwKSA/IGh0dHBQYXJhbXMuYXBwZW5kKCdtZWRpY2FsX3Byb2NlZHVyZV9pZCcsIHBhcmFtcz8ubWVkaWNhbF9wcm9jZWR1cmVfaWQpIDogaHR0cFBhcmFtc1xuICAgIGh0dHBQYXJhbXMgPSAocGFyYW1zPy5lcGlzb2RlX2lkICYmIHBhcmFtcz8uYnlFcGlzb2RlID09PSAxKSA/IGh0dHBQYXJhbXMuYXBwZW5kKCdlcGlzb2RlX2lkJywgcGFyYW1zPy5lcGlzb2RlX2lkKSA6IGh0dHBQYXJhbXNcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50LCBodHRwUGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gcG9zdEFQSWRydWdJbnRha2UoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBnZXRBUElwcmVleGlzdGluZ0NvbmRpdGlvbnMocGFyYW1zPyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSAndXNlci9wcmVleGlzdGluZ0NvbmRpdGlvbnMnXG4gICAgbGV0IGh0dHBQYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xuICAgIGh0dHBQYXJhbXMgPSAocGFyYW1zPy5vbkRhdGUgPT09IDAgfHwgcGFyYW1zPy5vbkRhdGUgPT09IDEpID8gaHR0cFBhcmFtcy5hcHBlbmQoJ29uRGF0ZScsIHBhcmFtcz8ub25EYXRlKSA6IGh0dHBQYXJhbXNcbiAgICBodHRwUGFyYW1zID0gKHBhcmFtcz8uZnJvbV9kYXRlKSA/IGh0dHBQYXJhbXMuYXBwZW5kKCdmcm9tX2RhdGUnLCBwYXJhbXM/LmZyb21fZGF0ZSkgOiBodHRwUGFyYW1zXG4gICAgaHR0cFBhcmFtcyA9IChwYXJhbXM/LnRvX2RhdGUpID8gaHR0cFBhcmFtcy5hcHBlbmQoJ3RvX2RhdGUnLCBwYXJhbXM/LnRvX2RhdGUpIDogaHR0cFBhcmFtc1xuICAgIC8vaHR0cFBhcmFtcyA9IChwYXJhbXM/LnByZWV4aXN0aW5nQ29uZGl0aW9uVHlwZXMpID8gaHR0cFBhcmFtcy5hcHBlbmQoJ3ByZWV4aXN0aW5nQ29uZGl0aW9uVHlwZXNbXScsIHBhcmFtcz8ucHJlZXhpc3RpbmdDb25kaXRpb25UeXBlcykgOiBodHRwUGFyYW1zXG4gICAgaWYgKHBhcmFtcz8ucHJlZXhpc3RpbmdDb25kaXRpb25UeXBlcyAmJiBwYXJhbXM/LnByZWV4aXN0aW5nQ29uZGl0aW9uVHlwZXM/Lmxlbmd0aCkge1xuICAgICAgcGFyYW1zLnByZWV4aXN0aW5nQ29uZGl0aW9uVHlwZXMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgaHR0cFBhcmFtcyA9IGh0dHBQYXJhbXMuYXBwZW5kKCdwcmVleGlzdGluZ0NvbmRpdGlvblR5cGVzW10nLCBlbGVtZW50KVxuICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQsIGh0dHBQYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUEllbGVtZW50c0xpc3QoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QVBJcHJlZXhpc3RpbmdDb25kaXRpb25zVHlwZSgpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ2NlbnRlci9wcmVleGlzdGluZ0NvbmRpdGlvblR5cGVzJ1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUElwcmVleGlzdGluZ0NvbmRpdGlvbnNUeXBlKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldEFQSU5vdGlmaWNhdGlvbnNDb3VudCgpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ3VzZXIvbm90aWZpY2F0aW9ucy9jb3VudCc7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSU5vdGlmaWNhdGlvbnMoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QVBJTm90aWZpY2F0aW9ucyhwYXJhbXM/KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICd1c2VyL25vdGlmaWNhdGlvbnMnO1xuICAgIGxldCBodHRwUGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcbiAgICBodHRwUGFyYW1zID0gKHBhcmFtcz8ucmVhZCkgPyBodHRwUGFyYW1zLmFwcGVuZCgncmVhZCcsIHBhcmFtcz8ucmVhZCkgOiBodHRwUGFyYW1zXG4gICAgaHR0cFBhcmFtcyA9IChwYXJhbXM/LndpdGhQYWdpbmF0ZSA9PSAxKSA/IGh0dHBQYXJhbXMuYXBwZW5kKCd3aXRoUGFnaW5hdGUnLCBwYXJhbXM/LndpdGhQYWdpbmF0ZSkgOiBodHRwUGFyYW1zXG4gICAgaHR0cFBhcmFtcyA9IChwYXJhbXM/LnBhZ2UgPiAwKSA/IGh0dHBQYXJhbXMuYXBwZW5kKCdwYWdlJywgcGFyYW1zPy5wYWdlKSA6IGh0dHBQYXJhbXNcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50LCBodHRwUGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJTm90aWZpY2F0aW9ucygke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBnZXRBUElVc2VySW1hZ2UoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICd1c2VyL2ltYWdlJztcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJZ2FtZXMoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcG9zdEFQSU5vdGlmaWNhdGlvblJlYWQoaWQpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gYHVzZXIvbm90aWZpY2F0aW9uL3JlYWRgO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGVuZHBvaW50LCBpZCkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldChlbmRwdCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChlbmRwdCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwb3N0KGVuZHB0LCBpdGVtcyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChlbmRwdCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGVuZHBvaW50LCBpdGVtcykucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHNldFB1c2hOb3RpZmljYXRpb24ocHVzaE5vdGlmaWNhdGlvbjogYW55KXtcbiAgICB0aGlzLnB1c2hOb3RpZmljYXRpb24gPSBwdXNoTm90aWZpY2F0aW9uO1xuICB9XG5cbiAgZ2V0UHVzaE5vdGlmaWNhdGlvbigpe1xuICAgcmV0dXJuIHRoaXMucHVzaE5vdGlmaWNhdGlvbjtcbiAgfVxuXG4gIGdldEFQSUV4ZXJjaXNlRGV0YWlsKGlkLCBwYXJhbXM/KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9IGB1c2VyL2V4ZXJjaXNlLyR7aWR9YDtcbiAgICBsZXQgaHR0cFBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XG4gICAgaHR0cFBhcmFtcyA9IChwYXJhbXM/LnByb2dyYW1hYmxlX3BsYXkpID8gaHR0cFBhcmFtcy5hcHBlbmQoJ3Byb2dyYW1hYmxlX3BsYXknLCBwYXJhbXM/LnByb2dyYW1hYmxlX3BsYXkpIDogaHR0cFBhcmFtc1xuICAgIGh0dHBQYXJhbXMgPSAocGFyYW1zPy5jaGFsbGVuZ2VfaWQpID8gaHR0cFBhcmFtcy5hcHBlbmQoJ2NoYWxsZW5nZV9pZCcsIHBhcmFtcz8uY2hhbGxlbmdlX2lkKSA6IGh0dHBQYXJhbXNcbiAgICAgLy8gQWdyZWdhciBlbCBwYXLDoW1ldHJvICdpbnRlcmFjdGlvbnMnXG4gICAgIGh0dHBQYXJhbXMgPSBodHRwUGFyYW1zLnNldCgnaW50ZXJhY3Rpb25zJywgJzEnKTtcblxuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQsIGh0dHBQYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJRXhlcmNpc2VzKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldEFQSUV4ZXJjaXNlc0J5RGF0ZShmcm9tX2RhdGU/LHRvX2RhdGU/KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICd1c2VyL2V4ZXJjaXNlcy9zY2hlZHVsZWQnO1xuICAgIGxldCBodHRwUGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcbiAgICBodHRwUGFyYW1zID0gaHR0cFBhcmFtcz8gaHR0cFBhcmFtcy5hcHBlbmQoJ2Zyb21fZGF0ZScsIGZyb21fZGF0ZSkgOiBodHRwUGFyYW1zXG4gICAgaHR0cFBhcmFtcyA9IGh0dHBQYXJhbXM/IGh0dHBQYXJhbXMuYXBwZW5kKCd0b19kYXRlJywgdG9fZGF0ZSkgOiBodHRwUGFyYW1zXG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCwgaHR0cFBhcmFtcykucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUElFeGVyY2lzZXMoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QVBJRXhlcmNpc2VzKCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSAndXNlci9leGVyY2lzZXMnO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJRXhlcmNpc2VzKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldEFQSUNoYWxsZW5nZShjaGFsbGVuZ2VJZCwgcGFyYW1zPyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSAndXNlci9jaGFsbGVuZ2UvJytjaGFsbGVuZ2VJZFxuXG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUElDaGFsbGVuZ2UoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcG9zdENvbXBsZXRlZEV4ZXJjaWNlKHBhcmFtcz86IE9iamVjdCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSBgdjEvcGF0aWVudC9wcm9ncmFtYWJsZS1wbGF5cy9lbmRgO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGVuZHBvaW50LCBwYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIHBvc3RBUElkcnVnSW50YWtlKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcblxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QVBJQ2hhbGxlbmdlcyggcGFyYW1zPyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSAndXNlci9jaGFsbGVuZ2VzJ1xuICAgIGxldCBodHRwUGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcblxuICAgIGlmIChwYXJhbXM/Lm9ubHlBY2NlcHRlZCkgaHR0cFBhcmFtcyA9IGh0dHBQYXJhbXMuYXBwZW5kKCdvbmx5QWNjZXB0ZWQnLCBwYXJhbXMub25seUFjY2VwdGVkKTtcbiAgICBcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50LCBodHRwUGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSUNoYWxsZW5nZXMoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG4gIGdldEFQSUNoYWxsZW5nZXMyKCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSAndXNlci9jaGFsbGVuZ2VzL2dvYWxzJ1xuXG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCwgKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSUNoYWxsZW5nZXMyKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldEFQSUFwcExhdGVzdFZlcnNpb24odmVyc2lvbiwgcGxhdGZvcm0pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ2FwcC92ZXJzaW9ucy9tdXN0LXVwZGF0ZT92ZXJzaW9uPScrdmVyc2lvbisnJnBsYXRmb3JtPScrcGxhdGZvcm07XG4gICAgLy8vL2NvbnNvbGUubG9nKHBhdGgpO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG5cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKVxuICB9XG5cbiAgZ2V0QVBJcGF0aWVudHMoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICd1c2VyL3BhdGllbnRzJztcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJcmVtaW5kZXJzKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldEFQSV9TQ1BfZ29hbHMoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9IGBzaGFyZWNhcmVwbGFuL2dvYWxzYDtcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJYWdlbmRhSUQoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgXG4gIGdldEFQSV9wcmVzY3JpYmVkQXBwc19CeURhdGUoZnJvbV9kYXRlPyx0b19kYXRlPyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSAncmVoYWJpbGlmeS9wcmVzY3JpYmVkLWFwcHMvYWN0aXZpdGllcy9wZW5kaW5nJztcbiAgICBsZXQgaHR0cFBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XG4gICAgaHR0cFBhcmFtcyA9IGh0dHBQYXJhbXM/IGh0dHBQYXJhbXMuYXBwZW5kKCdmcm9tJywgZnJvbV9kYXRlKSA6IGh0dHBQYXJhbXNcbiAgICBodHRwUGFyYW1zID0gaHR0cFBhcmFtcz8gaHR0cFBhcmFtcy5hcHBlbmQoJ3RvJywgdG9fZGF0ZSkgOiBodHRwUGFyYW1zXG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCwgaHR0cFBhcmFtcykucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUElfcHJlc2NyaWJlZEFwcHNfQnlEYXRlKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldEFQSWFsbG93ZWREZXBhcnRtZW50cygpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gYHVzZXIvZGVwYXJ0bWVudHNgO1xuICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCkucGlwZShcbiAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gIFxuICAgICAgcmV0dXJuIHJlcztcbiAgICB9KVxuICApO1xuICB9XG4gIGdldEFQSWRldGFpbERlcGFydG1lbnRzKGlkOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gYGRlcGFydG1lbnQvc2hvdy8ke2lkfWA7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBnZXRBUElBbnN3ZXJzKGlkKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9IGB1c2VyL2Zvcm0vJHtpZH0vYW5zd2Vycy9kZXRhaWw/aHRtbD10cnVlYDtcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSUFuc3dlcnMoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cblxuICBnZXRBUElEYXlQaHJhc2UoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9IGB1c2VyL2RheVBocmFzZWA7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUElEYXlQaHJhc2UoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG59XG4iXX0=
1762
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9vbGUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NlcnZpY2UtbGliL3NyYy9saWIvc2VydmljZXMvZG9vbGUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBSzNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHaEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzVDLE9BQU8sRUFBNkIsR0FBRyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRzFFLE9BQU8sRUFBZSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7Ozs7Ozs7Ozs7QUFTL0QsTUFBTSxPQUFPLFlBQVk7SUFFdkIsWUFDVSxXQUFrQyxFQUNsQyxRQUFzQixFQUN0QixJQUFVLEVBQ1YsSUFBaUIsRUFDakIsR0FBd0IsRUFDekIsTUFBYyxFQUNiLFFBQWtCLEVBQ25CLE1BQWMsRUFDZCxlQUFnQyxFQUNoQyxTQUEyQjtRQVQxQixnQkFBVyxHQUFYLFdBQVcsQ0FBdUI7UUFDbEMsYUFBUSxHQUFSLFFBQVEsQ0FBYztRQUN0QixTQUFJLEdBQUosSUFBSSxDQUFNO1FBQ1YsU0FBSSxHQUFKLElBQUksQ0FBYTtRQUNqQixRQUFHLEdBQUgsR0FBRyxDQUFxQjtRQUN6QixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2IsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNuQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2Qsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ2hDLGNBQVMsR0FBVCxTQUFTLENBQWtCO0lBQUksQ0FBQztJQUl6QyxVQUFVLENBQUMsS0FBYSxFQUFFLEVBQVc7UUFFbkMscUNBQXFDO1FBQ3JDLE1BQU0sS0FBSyxHQUFH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LENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUNqQyxHQUFHLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUNmLDJFQUEyRTtZQUMzRSxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBR0QsZUFBZTtRQUNiLElBQUksSUFBSSxHQUFHLGdCQUFnQixDQUFDO1FBQzVCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUNqQyxHQUFHLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUNmLHNFQUFzRTtZQUN0RSxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDOytHQXZ3RVUsWUFBWTttSEFBWixZQUFZLGNBRlgsTUFBTTs7NEZBRVAsWUFBWTtrQkFIeEIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGaWxlVHJhbnNmZXIsIEZpbGVVcGxvYWRPcHRpb25zLCBGaWxlVHJhbnNmZXJPYmplY3QgfSBmcm9tICdAYXdlc29tZS1jb3Jkb3ZhLXBsdWdpbnMvZmlsZS10cmFuc2Zlci9uZ3gnO1xuaW1wb3J0IHsgQXBpRW5kcG9pbnRzU2VydmljZSB9IGZyb20gJy4vYXBpLWVuZHBvaW50cy5zZXJ2aWNlJztcbmltcG9ydCB7IEV2ZW50cyB9IGZyb20gJy4vZXZlbnRzLnNlcnZpY2UnO1xuaW1wb3J0IHsgSHR0cFNlcnZpY2UgfSBmcm9tICcuL2h0dHAuc2VydmljZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiwgdGhyb3dFcnJvciwgVGltZW91dEVycm9yIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBbGVydENvbnRyb2xsZXIsIFBsYXRmb3JtIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuaW1wb3J0IHsgRmlsZSB9IGZyb20gJ0Bhd2Vzb21lLWNvcmRvdmEtcGx1Z2lucy9maWxlL25neCc7XG5pbXBvcnQgeyBDYXBhY2l0b3IgfSBmcm9tICdAY2FwYWNpdG9yL2NvcmUnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgZGVsYXksIGZpbHRlciwgbWFwLCBtZXJnZU1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEhlYWx0aENhcmQgfSBmcm9tICcuLi9tb2RlbHMvdXNlcic7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgSHR0cEhlYWRlcnMsIEh0dHBQYXJhbXMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBRdWVyeVN0cmluZ1BhcmFtZXRlcnMgfSBmcm9tICcuLi91dGlscy9xdWVyeS1zdHJpbmctcGFyYW1ldGVycyc7XG5pbXBvcnQgeyBTaGVsbENoYXRNb2RlbCwgU2hlbGxNZXNzYWdlTW9kZWwsIFNoZWxsUmVjaXBpZW50TW9kZWwgfSBmcm9tICcuLi91dGlscy9jaGF0UGFyYW1ldGVycyc7XG5pbXBvcnQgeyBBdXRoZW50aWNhdGlvblNlcnZpY2UgfSBmcm9tICcuL2F1dGhlbnRpY2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBEb29sZVNlcnZpY2Uge1xuICBwdXNoTm90aWZpY2F0aW9uOiBhbnk7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhlbnRpY2F0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIHRyYW5zZmVyOiBGaWxlVHJhbnNmZXIsXG4gICAgcHJpdmF0ZSBmaWxlOiBGaWxlLFxuICAgIHByaXZhdGUgaHR0cDogSHR0cFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhcGk6IEFwaUVuZHBvaW50c1NlcnZpY2UsXG4gICAgcHVibGljIGV2ZW50czogRXZlbnRzLFxuICAgIHByaXZhdGUgcGxhdGZvcm06IFBsYXRmb3JtLFxuICAgIHB1YmxpYyByb3V0ZXI6IFJvdXRlcixcbiAgICBwdWJsaWMgYWxlcnRDb250cm9sbGVyOiBBbGVydENvbnRyb2xsZXIsXG4gICAgcHVibGljIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSkgeyB9XG5cbiAgcHVibGljIHNlbGVjdGVkRGF0ZTogRGF0ZTtcblxuICB1cGxvYWRGaWxlKGltYWdlOiBzdHJpbmcsIGlkPzogc3RyaW5nKSB7XG5cbiAgICAvLy8vY29uc29sZS5sb2coXCJ1cGxvYWRpbmcgXCIsIGltYWdlKTtcbiAgICBjb25zdCB0b2tlbiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd0b2tlbicpO1xuICAgIGxldCBvcHRpb25zOiBGaWxlVXBsb2FkT3B0aW9ucyA9IHtcbiAgICAgIGZpbGVLZXk6ICdmaWxlJyxcbiAgICAgIGZpbGVOYW1lOiAnbmFtZS5qcGcnLFxuXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdBdXRob3JpemF0aW9uJzogJ0JlYXJlciAnICsgdG9rZW4sXG4gICAgICAgICdBY2NlcHQnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICB9LFxuICAgICAgcGFyYW1zOiB7XG4gICAgICAgIGlkOiBpZFxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGZpbGVUcmFuc2ZlcjogRmlsZVRyYW5zZmVyT2JqZWN0ID0gdGhpcy50cmFuc2Zlci5jcmVhdGUoKTtcbiAgICAvLyBBZGQgZmlsZXMgZm9yIG5ldyBvciBzYXZlZCBkaWFnbm9zdGljcy4gXG4gICAgLy8gdXNlcyBkaWFnbm9zdGljL21lZGlhIHdoZW4gZGlhZ25vc3RpYyBpcyBuZXcgXG4gICAgLy9jb25zdCBlbmRwb2ludCA9IGlkID8gdGhpcy5hcGkuZ2V0RW5kcG9pbnQoJ2RpYWdub3N0aWMvbWVkaWEnKTp0aGlzLmFwaS5nZXRFbmRwb2ludCgnbWVkaWEvdXBsb2FkL3RlbXAnKSA7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludCgnbWVkaWEvdXBsb2FkL3RlbXAnKTtcbiAgICAvLy8vLy9jb25zb2xlLmxvZyhcIiogdXBsb2FkRmlsZSBlbmRwb2ludFwiLCBlbmRwb2ludCk7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgZmlsZVRyYW5zZmVyLnVwbG9hZChpbWFnZSwgZW5kcG9pbnQsIG9wdGlvbnMpLnRoZW4oZGF0YSA9PiB7XG4gICAgICAgIC8vLy9jb25zb2xlLmxvZyhkYXRhKTtcbiAgICAgICAgcmVzb2x2ZShKU09OLnBhcnNlKGRhdGEucmVzcG9uc2UpKTtcbiAgICAgIH0sIChlcnIpID0+IHtcbiAgICAgICAgLy8vL2NvbnNvbGUubG9nKGVycik7XG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgfSlcbiAgICB9KVxuXG4gIH1cblxuICBcblxuICBwb3N0QVBJQWRkTWVkaWEocGFyYW1zOiBPYmplY3Qpe1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQoJ21lZGlhL2FkZCcpO1xuICAgXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0Rm9ybShlbmRwb2ludCwgcGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIHBvc3RBUElBZGRNZWRpYSgke2VuZHBvaW50fSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG4gIFxuICB1cGxvYWRGaWxlVG9Nb2RlbChpbWFnZTogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIHBhcmFtczogYW55KSB7XG4gICAgLy8vLy8vY29uc29sZS5sb2coXCJ1cGxvYWRpbmcgXCIsIGltYWdlKTtcbiAgICBjb25zdCB0b2tlbiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd0b2tlbicpO1xuICAgIGxldCBvcHRpb25zOiBGaWxlVXBsb2FkT3B0aW9ucyA9IHtcbiAgICAgIGZpbGVLZXk6ICdmaWxlJyxcbiAgICAgIGZpbGVOYW1lOiBuYW1lLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICAnQXV0aG9yaXphdGlvbic6ICdCZWFyZXIgJyArIHRva2VuLFxuICAgICAgICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgfSxcbiAgICAgIHBhcmFtc1xuICAgIH1cblxuICAgIGNvbnN0IGZpbGVUcmFuc2ZlcjogRmlsZVRyYW5zZmVyT2JqZWN0ID0gdGhpcy50cmFuc2Zlci5jcmVhdGUoKTtcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KCdtZWRpYS9hZGQnKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgZmlsZVRyYW5zZmVyLnVwbG9hZChpbWFnZSwgZW5kcG9pbnQsIG9wdGlvbnMpLnRoZW4oZGF0YSA9PiB7XG4gICAgICAgIC8vLy9jb25zb2xlLmxvZyhKU09OLnBhcnNlKGRhdGEucmVzcG9uc2UpKTtcbiAgICAgICAgcmVzb2x2ZShKU09OLnBhcnNlKGRhdGEucmVzcG9uc2UpKTtcbiAgICAgIH0sIChlcnIpID0+IHtcbiAgICAgICAgLy8vL2NvbnNvbGUubG9nKGVycik7XG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgfSlcbiAgICB9KVxuXG4gIH1cblxuICB1cGxvYWRNZXNzYWdlSW1hZ2UoaWRNZXNzYWdlSGVhZGVyLCBpZFVzZXJUbywgbWVzc2FnZSwgZmlsZVVybCwgaWRfdXN1YXJpX2FtaXEpIHtcblxuICAgIGNvbnN0IHRva2VuID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3Rva2VuJyk7XG5cbiAgICBsZXQgb3B0aW9uczogRmlsZVVwbG9hZE9wdGlvbnMgPSB7XG4gICAgICBmaWxlS2V5OiAnZmlsZScsXG4gICAgICBmaWxlTmFtZTogJ25hbWUucGRmJywgLy9UT0RPOiAnbmFtZS5qcGcnXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdBdXRob3JpemF0aW9uJzogJ0JlYXJlciAnICsgdG9rZW4sXG4gICAgICAgICdBY2NlcHQnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICB9LFxuICAgICAgcGFyYW1zOiB7XG4gICAgICAgIGlkVXNlcjogaWRfdXN1YXJpX2FtaXEsXG4gICAgICAgIHNlY3JldDogdG9rZW4sXG4gICAgICAgIHZhbHVlOiBcIlwiLFxuICAgICAgICBpZDogaWRNZXNzYWdlSGVhZGVyXG4gICAgICB9XG4gICAgfVxuICAgIC8vLy8vL2NvbnNvbGUubG9nKFwib3B0aW9uczogXCIsIG9wdGlvbnMpO1xuXG4gICAgY29uc3QgZmlsZVRyYW5zZmVyOiBGaWxlVHJhbnNmZXJPYmplY3QgPSB0aGlzLnRyYW5zZmVyLmNyZWF0ZSgpO1xuXG4gICAgZmlsZVRyYW5zZmVyLm9uUHJvZ3Jlc3MoKHByb2dyZXNzRXZlbnQpID0+IHtcbiAgICAgIGlmIChwcm9ncmVzc0V2ZW50Lmxlbmd0aENvbXB1dGFibGUpIHtcbiAgICAgICAgdmFyIHBlcmMgPSBNYXRoLmZsb29yKHByb2dyZXNzRXZlbnQubG9hZGVkIC8gcHJvZ3Jlc3NFdmVudC50b3RhbCAqIDEwMCk7XG4gICAgICAgIHRoaXMuZXZlbnRzLnB1Ymxpc2goXCJ1cGxvYWRNZXNzYWdlSW1hZ2VcIiwgeyBmaWxlVXJsLCBwZXJjIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coXCJwcm9ncmVzc0V2ZW50IC0gXCIsIHByb2dyZXNzRXZlbnQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludCgnbWVzc2FnZScpO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIGZpbGVUcmFuc2Zlci51cGxvYWQoZmlsZVVybCwgZW5kcG9pbnQsIG9wdGlvbnMpXG4gICAgICAgIC50aGVuKGRhdGEgPT4ge1xuICAgICAgICAgIC8vLy8vL2NvbnNvbGUubG9nKFwic3VjY2VzcyBmaWxlVHJhbnNmZXIudXBsb2FkXCIsIEpTT04ucGFyc2UoZGF0YS5yZXNwb25zZSkpO1xuICAgICAgICAgIHJlc29sdmUoSlNPTi5wYXJzZShkYXRhLnJlc3BvbnNlKSk7XG4gICAgICAgIH0sIChlcnIpID0+IHtcbiAgICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhcIioqIGVycm9yICoqIGZpbGVUcmFuc2Zlci51cGxvYWQ6IFwiLCBlcnIpO1xuICAgICAgICAgIHJlamVjdChmaWxlVHJhbnNmZXIudXBsb2FkKTtcbiAgICAgICAgfSlcbiAgICB9KVxuXG4gIH1cblxuICBiNjR0b0Jsb2IoYjY0RGF0YSwgY29udGVudFR5cGUgPSAnJywgc2xpY2VTaXplID0gNTEyKSB7XG4gICAgY29uc3QgYnl0ZUNoYXJhY3RlcnMgPSBhdG9iKGI2NERhdGEpO1xuICAgIGNvbnN0IGJ5dGVBcnJheXMgPSBbXTtcblxuICAgIGZvciAobGV0IG9mZnNldCA9IDA7IG9mZnNldCA8IGJ5dGVDaGFyYWN0ZXJzLmxlbmd0aDsgb2Zmc2V0ICs9IHNsaWNlU2l6ZSkge1xuICAgICAgY29uc3Qgc2xpY2UgPSBieXRlQ2hhcmFjdGVycy5zbGljZShvZmZzZXQsIG9mZnNldCArIHNsaWNlU2l6ZSk7XG5cbiAgICAgIGNvbnN0IGJ5dGVOdW1iZXJzID0gbmV3IEFycmF5KHNsaWNlLmxlbmd0aCk7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNsaWNlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGJ5dGVOdW1iZXJzW2ldID0gc2xpY2UuY2hhckNvZGVBdChpKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYnl0ZUFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYnl0ZU51bWJlcnMpO1xuICAgICAgYnl0ZUFycmF5cy5wdXNoKGJ5dGVBcnJheSk7XG4gICAgfVxuXG4gICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKGJ5dGVBcnJheXMsIHsgdHlwZTogY29udGVudFR5cGUgfSk7XG4gICAgcmV0dXJuIGJsb2I7XG4gIH1cblxuICBkb3dubG9hZCh1cmwpIHtcbiAgICBjb25zdCBmaWxlVHJhbnNmZXI6IEZpbGVUcmFuc2Zlck9iamVjdCA9IHRoaXMudHJhbnNmZXIuY3JlYXRlKCk7XG4gICAgdmFyIHBhdGggPSBudWxsO1xuICAgIGlmICh0aGlzLnBsYXRmb3JtLmlzKCdpb3MnKSkge1xuICAgICAgcGF0aCA9IHRoaXMuZmlsZS5kb2N1bWVudHNEaXJlY3Rvcnk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhdGggPSB0aGlzLmZpbGUuZGF0YURpcmVjdG9yeTtcbiAgICB9XG4gICAgZmlsZVRyYW5zZmVyLmRvd25sb2FkKHVybCwgcGF0aCArICdmaWxlLnBkZicpLnRoZW4oKGVudHJ5KSA9PiB7XG4gICAgICAvLy8vY29uc29sZS5sb2coJ2Rvd25sb2FkIGNvbXBsZXRlOiAnICsgZW50cnkudG9VUkwoKSk7XG4gICAgfSwgKGVycm9yKSA9PiB7XG4gICAgICAvLyBoYW5kbGUgZXJyb3JcbiAgICB9KTtcbiAgfVxuXG4gIGRvd25sb2FkRmlsZSh1cmwsIGRlc3RpbmF0aW9uKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICB2YXIgcmVzdWx0OiBhbnkgPSBbXTtcbiAgICBjb25zdCBmaWxlVHJhbnNmZXI6IEZpbGVUcmFuc2Zlck9iamVjdCA9IHRoaXMudHJhbnNmZXIuY3JlYXRlKCk7XG4gICAgdmFyIHBhdGggPSBudWxsO1xuXG4gICAgaWYgKHRoaXMucGxhdGZvcm0uaXMoJ2lvcycpKSB7XG4gICAgICBwYXRoID0gdGhpcy5maWxlLmRvY3VtZW50c0RpcmVjdG9yeTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGF0aCA9IHRoaXMuZmlsZS5kYXRhRGlyZWN0b3J5O1xuICAgIH1cblxuICAgIC8vLy8vL2NvbnNvbGUubG9nKFwiZG93bmxvYWRGaWxlXCIsIHVybCwgZGVzdGluYXRpb24sICdwYXRoLGRlc3RpbmF0aW9uJywgcGF0aCwgZGVzdGluYXRpb24pO1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZSgob2JzZXJ2ZXIpID0+IHtcbiAgICAgIC8vLy8vL2NvbnNvbGUubG9nKFwiYmVmb3JlIENoZWNrRmlsZVwiLCB0aGlzLmZpbGUpO1xuICAgICAgdGhpcy5maWxlLmNoZWNrRmlsZShwYXRoLCBkZXN0aW5hdGlvbikudGhlbihyZXMgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhcIipyZXMqXCIsIHJlcyk7XG4gICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhcImV4aXN0c1wiLCByZXMpO1xuICAgICAgICAgIHJlc3VsdFtcInN1Y2Nlc3NcIl0gPSB0cnVlO1xuICAgICAgICAgIHJlc3VsdFtcImRvd25sb2FkZWRcIl0gPSB0cnVlO1xuICAgICAgICAgIHJlc3VsdFtcImZpbGVcIl0gPSBwYXRoICsgZGVzdGluYXRpb247Ly9ub3JtYWxpemVVUkwodGhpcy5maWxlLmNhY2hlRGlyZWN0b3J5ICsgZGVzdGluYXRpb24pO1xuICAgICAgICAgIHJlc3VsdFtcImZpbGVOb3JtYWxpemVkXCJdID0gQ2FwYWNpdG9yLmNvbnZlcnRGaWxlU3JjKHBhdGggKyBkZXN0aW5hdGlvbik7XG4gICAgICAgICAgcmV0dXJuIG9ic2VydmVyLm5leHQocmVzdWx0KTtcbiAgICAgICAgfVxuICAgICAgfSwgZXJyb3IgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhcIm5vdCBleGlzdHNcIik7XG4gICAgICAgIGZpbGVUcmFuc2Zlci5vblByb2dyZXNzKGV2ZW50ID0+IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vZGVzY2FycmVndWVtXG4gICAgICAgICAgaWYgKGV2ZW50Lmxlbmd0aENvbXB1dGFibGUpIHtcbiAgICAgICAgICAgIC8vLy8vL2NvbnNvbGUubG9nKGV2ZW50LmxvYWRlZCAvIGV2ZW50LnRvdGFsKTtcbiAgICAgICAgICAgIHJlc3VsdFtcInN0YXR1c1wiXSA9IFwiZG93bmxvYWRpbmdcIjtcbiAgICAgICAgICAgIHJlc3VsdFtcImRvd25sb2FkZWRcIl0gPSBmYWxzZTtcbiAgICAgICAgICAgIHJlc3VsdFtcInBlcmNlbnRcIl0gPSBNYXRoLnJvdW5kKChldmVudC5sb2FkZWQgLyBldmVudC50b3RhbCkgKiAxMDApO1xuICAgICAgICAgICAgcmV0dXJuIG9ic2VydmVyLm5leHQocmVzdWx0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBmaWxlVHJhbnNmZXIuZG93bmxvYWQodXJsLCBwYXRoICsgZGVzdGluYXRpb24pLnRoZW4oKGVudHJ5KSA9PiB7XG4gICAgICAgICAgLy8vLy8vY29uc29sZS5sb2coJypkb3dubG9hZDoqICcgKyB1cmwgKyBcIiBcIiArIGVudHJ5LnRvVVJMKCkpO1xuICAgICAgICAgIHJlc3VsdFtcInN1Y2Nlc3NcIl0gPSB0cnVlO1xuICAgICAgICAgIHJlc3VsdFtcImRvd25sb2FkZWRcIl0gPSB0cnVlO1xuICAgICAgICAgIHJlc3VsdFtcImZpbGVcIl0gPSBlbnRyeS50b1VSTCgpOy8vbm9ybWFsaXplVVJMKHRoaXMuZmlsZS5jYWNoZURpcmVjdG9yeSArIGRlc3RpbmF0aW9uKTtcbiAgICAgICAgICByZXN1bHRbXCJmaWxlTm9ybWFsaXplZFwiXSA9IENhcGFjaXRvci5jb252ZXJ0RmlsZVNyYyhwYXRoICsgZGVzdGluYXRpb24pO1xuICAgICAgICAgIHJldHVybiBvYnNlcnZlci5uZXh0KHJlc3VsdCk7XG4gICAgICAgIH0sIChlcnJvcikgPT4ge1xuICAgICAgICAgIC8vLy8vL2NvbnNvbGUubG9nKGVycm9yKTtcbiAgICAgICAgICByZXN1bHRbXCJzdWNjZXNzXCJdID0gZmFsc2U7XG4gICAgICAgICAgcmVzdWx0W1wiZG93bmxvYWRlZFwiXSA9IGZhbHNlO1xuICAgICAgICAgIC8vLy8vL2NvbnNvbGUubG9nKFwiZXJyb3IgZG93bmxvYWQgXCIgKyB1cmwpO1xuICAgICAgICAgIC8vLy8vL2NvbnNvbGUubG9nKHJlc3VsdCk7XG4gICAgICAgICAgcmV0dXJuIG9ic2VydmVyLm5leHQocmVzdWx0KTtcbiAgICAgICAgfSlcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgZGVsZXRlRmlsZShpZCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSBgbWVkaWEvJHtpZH1gO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGUoZW5kcG9pbnQpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZGVsZXRlRmlsZSgke3BhdGh9KSByZXM6ICR7cmVzfWAsIEpTT04uc3RyaW5naWZ5KHJlcykpO1xuICAgICAgICByZXR1cm4gcmVzO1xuXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBzaG93QWxlcnQobWVzc2FnZTogc3RyaW5nKSB7XG5cbiAgICByZXR1cm4gdGhpcy5hbGVydENvbnRyb2xsZXIuY3JlYXRlKHtcbiAgICAgIGNzc0NsYXNzOiAnbXktYWxlcnQtY2xhc3MnLFxuICAgICAgLy9tb2RlOiAnaW9zJyxcbiAgICAgIGhlYWRlcjogJ0luZm8nLFxuICAgICAgbWVzc2FnZTogbWVzc2FnZSxcbiAgICAgIGJhY2tkcm9wRGlzbWlzczogZmFsc2UsXG4gICAgICBidXR0b25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0ZXh0OiAnQWNlcHRhcicsXG4gICAgICAgICAgcm9sZTogJ2NvbmZpcm0nLFxuICAgICAgICAgIGNzc0NsYXNzOiAnb25seUJ1dHRvbicsXG4gICAgICAgICAgaGFuZGxlcjogKGJsYWgpID0+IHtcbiAgICAgICAgICAgIC8vLy9jb25zb2xlLmxvZygnW0xhbmRpbmdQYWdlXSBBbGVydENvbmZpcm0gQ2FuY2VsJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgfVxuXG4gIGFzeW5jIHNob3dBbGVydEFuZFJldHVybihoZWFkZXI6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nLCBpc0Rpc21pc3M/OiBib29sZWFuLCByb3V0ZT86IHN0cmluZykge1xuICAgIC8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIHNob3dBbGVydEFuZFJldHVybigpYCk7XG4gICAgbGV0IGRpc21pc3MgPSAoaXNEaXNtaXNzICE9PSB1bmRlZmluZWQpID8gaXNEaXNtaXNzIDogZmFsc2VcbiAgICBjb25zdCBhbGVydCA9IGF3YWl0IHRoaXMuYWxlcnRDb250cm9sbGVyLmNyZWF0ZSh7XG4gICAgICBjc3NDbGFzczogJ215LWFsZXJ0LWNsYXNzJyxcbiAgICAgIC8vbW9kZTogJ2lvcycsXG4gICAgICBoZWFkZXI6IGhlYWRlcixcbiAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UsXG4gICAgICBiYWNrZHJvcERpc21pc3M6IGRpc21pc3MsXG4gICAgICBidXR0b25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0ZXh0OiAnQWNlcHRhcicsXG4gICAgICAgICAgaGFuZGxlcjogKGJsYWgpID0+IHtcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ0NvbmZpcm0gT0s6IGJsYWgnKTtcbiAgICAgICAgICAgIGlmIChyb3V0ZSAhPT0gdW5kZWZpbmVkICYmIHJvdXRlICE9PSBudWxsKVxuICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHJvdXRlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcbiAgICBhd2FpdCBhbGVydC5wcmVzZW50KCk7XG4gIH1cblxuICBhc3luYyBwcmVzZW50QWxlcnQobWVzc2FnZSwgYnV0dG9uPzogc3RyaW5nKSB7XG4gICAgbGV0IGJ1dHRvbk5hbWUgPSAoYnV0dG9uICE9PSB1bmRlZmluZWQpID8gYnV0dG9uIDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnbGFuZGluZy5hY2NlcHQtYnRuJyk7XG4gICAgY29uc3QgYWxlcnQgPSBhd2FpdCB0aGlzLmFsZXJ0Q29udHJvbGxlci5jcmVhdGUoe1xuICAgICAgY3NzQ2xhc3M6ICdteS1hbGVydC1jbGFzcycsXG4gICAgICAvL21vZGU6ICdpb3MnLFxuICAgICAgbWVzc2FnZTogbWVzc2FnZSxcbiAgICAgIGJ1dHRvbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHRleHQ6IGJ1dHRvbk5hbWUsXG4gICAgICAgICAgcm9sZTogJ2NvbmZpcm0nLFxuICAgICAgICAgIGNzc0NsYXNzOiAnb25seUJ1dHRvbicsXG4gICAgICAgICAgaGFuZGxlcjogKGJsYWgpID0+IHtcbiAgICAgICAgICAgIC8vLy9jb25zb2xlLmxvZygnW0xhbmRpbmdQYWdlXSBBbGVydENvbmZpcm0gQ2FuY2VsJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG4gICAgYXdhaXQgYWxlcnQucHJlc2VudCgpO1xuICB9XG5cbiAgZ2V0RmFtaWx5VW5pdElEKCk6IEh0dHBQYXJhbXMge1xuICAgIGxldCBodHRwUGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcbiAgICBsZXQgdXNlciA9IHRoaXMuYXV0aFNlcnZpY2U/LnVzZXJcbiAgICByZXR1cm4gaHR0cFBhcmFtcyA9ICh1c2VyLmZhbWlseVVuaXQpID8gaHR0cFBhcmFtcy5hcHBlbmQoJ3VzZXInLCB1c2VyLmZhbWlseVVuaXQpIDogaHR0cFBhcmFtc1xuICB9XG5cbiAgZ2V0QVBJTGVnYWxBbmRQb2xpY3koKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICdjZW50ZXIvbGVnYWwtdGVybS1hbmQtcHJpdmFjeS1wb2xpY3kvbGFzdCc7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSUxlZ2FsQW5kUG9saWN5KCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKVxuICB9XG5cbiAgZ2V0QVBJTGVnYWxJbmZvcm1hdGlvbigpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ3VzZXIvbGVnYWxUZXJtL2xhc3RBY2NlcHRlZCc7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSUxlZ2FsSW5mb3JtYXRpb24oJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApXG4gIH1cbiAgcG9zdEFQSUxlZ2FsQ29uZmlybWF0aW9uKHBhcmFtczogT2JqZWN0KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICd1c2VyL2xlZ2FsVGVybS9sYXN0QWNjZXB0ZWQnO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGVuZHBvaW50LCBwYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBwb3N0QVBJQ29uZmlybWF0aW9uTGVnYWwoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwb3N0QVBJUmVqZWN0TGVnYWxDb25maXJtYXRpb24ocGFyYW1zOiBPYmplY3QpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ3VzZXIvbGVnYWxUZXJtL2xhc3REZWNsaW5lZCc7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoZW5kcG9pbnQsIHBhcmFtcykucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIHBvc3RBUElDb25maXJtYXRpb25MZWdhbCgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG5cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHBvc3RBUElwYXNzd29yZFJlY292ZXJ5KHBhcmFtczogT2JqZWN0KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICdwYXRpZW50L2ZvcmdvdCdcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChlbmRwb2ludCwgcGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gcG9zdEFQSXBhc3N3b3JkUmVjb3ZlcnkoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QVBJU3RhZmZTbG90cyhwYXJhbXM6IHsgaWQ6IG51bWJlciwgZGF0ZTogc3RyaW5nIH0pIHtcblxuICAgIGxldCBwYXRoID0gYHN0YWZmLyR7cGFyYW1zLmlkfS9hdmFpbGFiaWxpdHlgO1xuICAgIGxldCBlbmRwb2ludDogc3RyaW5nO1xuICAgIGlmIChwYXJhbXMuZGF0ZSAhPT0gXCJcIikge1xuICAgICAgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludFdpdGhQYXJhbWV0ZXJzKHBhdGgsIChxczogUXVlcnlTdHJpbmdQYXJhbWV0ZXJzKSA9PiBxcy5wdXNoKCdkYXRlJywgcGFyYW1zLmRhdGUpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSVN0YWZmU2xvdHMoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApXG4gIH1cblxuICBnZXRBUElnb2FscygpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ3VzZXIvZWxlbWVudC9nb2FscydcbiAgICAvL2xldCBwYXRoID0gJ3VzZXIvZ29hbHMvZWxlbWVudHMnXG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSWhvbWVJbml0aWFsKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKVxuICB9XG5cbiAgZ2V0QVBJdmlkZW9jYWxsKGlkOnN0cmluZyk6IE9ic2VydmFibGU8YW55PntcbiAgICBsZXQgcGF0aCA9ICd1c2VyL2FnZW5kYS8nK2lkKycvdmlkZW9jYWxsU2Vzc2lvbidcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSXZpZGVvY2FsbCgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgIClcbiAgfVxuXG5cbiAgcG9zdEFQSVBlbmRpbmdDb25uZWN0KCk6IE9ic2VydmFibGU8YW55PntcbiAgICBsZXQgcGF0aCA9ICd1c2VyL3ZpZGVvY2FsbC9wZW5kaW5nQ29ubmVjdCdcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChlbmRwb2ludCkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUElQZW5kaW5nQ29ubmVjdCgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgIClcbiAgfVxuXG4vKiAgIGdldEFQSWluZm9ybWF0aW9uVXNlcigpOiBPYnNlcnZhYmxlPGFueT57XG5cbiAgICBsZXQgcGF0aCA9ICd1c2VyL2luZm9ybWF0aW9uVXNlcidcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJaG9tZUluaXRpYWwoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApXG4gIH0gKi9cbiAgXG4gIHVwZGF0ZUFQSUltYWdldXNlcihwYXJhbXM6IE9iamVjdCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSBgdXNlci9pbWFnZWA7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChlbmRwb2ludCwgcGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gdXBkYXRlQVBJUmVtaW5kZXIoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBkZWxldGVBUElJbWFnZXVzZXIoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9IGB1c2VyL2ltYWdlYDtcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlKGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gdXBkYXRlQVBJUmVtaW5kZXIoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBnZXRBUElpbmZvcm1hdGlvblN1bW1hcnkocGFyYW1zOiBPYmplY3Qpe1xuICAgIGxldCBwYXRoID0gJ2hvbWUnXG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoZW5kcG9pbnQsIHBhcmFtcykucGlwZShcbiAgICAgIG1lcmdlTWFwKCh2KSA9PiB2IGluc3RhbmNlb2YgVGltZW91dEVycm9yID8gdGhyb3dFcnJvcih2KSA6IG9mKHYpKSBcbiAgICApO1xuICB9XG4gIGdldEFQSWluZm9ybWF0aW9uU3VtbWFyeU9sZChwYXJhbXM6IE9iamVjdCl7XG4gICAgbGV0IHBhdGggPSAnaG9tZSdcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChlbmRwb2ludCwgcGFyYW1zKS5waXBlKFxuICAgICAgbWFwKHJlcyA9PiByZXMpIFxuICAgICk7XG4gIH1cblxuXG4gIGdldEFQSXVzZXJQcm9maWxlKCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSAndjIvdXNlci9wcm9maWxlJ1xuICAgIC8vbGV0IGh0dHBQYXJhbXMgPSB0aGlzLmdldEZhbWlseVVuaXRJRCgpXG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSWhvbWVJbml0aWFsKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKVxuICB9XG5cbiAgcG9zdEFQSUNoYW5nZVBhc3N3b3JkKHBhcmFtczogT2JqZWN0KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICd1c2VyL2NoYW5nZVBhc3N3b3JkJztcbiAgICBsZXQgaHR0cFBhcmFtcyA9IHRoaXMuZ2V0RmFtaWx5VW5pdElEKClcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChlbmRwb2ludCwgcGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gcG9zdEFQSUNoYW5nZVBhc3N3b3JkKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcblxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QVBJbm90aWZpY2F0aW9uQ29uZmlndXJhdGlvbnMoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICd1c2VyL2NvbmZpZ3VyYXRpb24nXG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSW5vdGlmaWNhdGlvbkNvbmZpZ3VyYXRpb25zKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKVxuICB9XG5cbiAgcG9zdEFQSUNvbmZpZ3VyYXRpb24ocGFyYW1zOiBPYmplY3QpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ3VzZXIvY29uZmlndXJhdGlvbic7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoZW5kcG9pbnQsIHBhcmFtcykucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIHBvc3RBUElDb25maWd1cmF0aW9uKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcblxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QVBJbGFuZ3VhZ2VzQ2VudGVyKCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSAnY2VudGVyL2xhbmd1YWdlcydcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJbGFuZ3VhZ2VzQ2VudGVyKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKVxuICB9XG5cbiAgZ2V0QVBJRmFxcygpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ2NlbnRlci9mYXEnXG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSWhvbWVJbml0aWFsKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKVxuICB9XG5cbiAgZ2V0QVBJRmFtaWx5VW5pdCgpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ3VzZXIvZmFtaWx5VW5pdCc7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSUZhbWlseVVuaXQoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG4gIGdldEFQSUZhbWlseVVuaXQyKCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSAndjIvdXNlci9mYW1pbHlVbml0JztcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSUZhbWlseVVuaXQoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcG9zdEFQSVJlcG9ydFByb2JsZW0ocGFyYW1zOiBPYmplY3QpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ3VzZXIvcmVwb3J0UHJvYmxlbSc7IC8vICdtZWRpYS91cGxvYWQvdGVtcCcgXG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoZW5kcG9pbnQsIHBhcmFtcykucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBwb3N0QVBJUmVwb3J0UHJvYmxlbSgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG5cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHBvc3RBUEllbWFpbFZlcmlmaWNhdGlvbihwYXJhbXM6IE9iamVjdCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSAndXNlci9lbWFpbF92ZXJpZmljYXRpb24nO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGVuZHBvaW50LCBwYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gcG9zdEFQSWVtYWlsVmVyaWZpY2F0aW9uKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcblxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QVBJQ29kZUJ5RW1haWwoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICd1c2VyL3Jlc2VuZFR3b0ZhY3RvckNvZGUnO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJQ29kZUJ5RW1haWwoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcG9zdEFQSWNvZGVWZXJpZmljYXRpb24ocGFyYW1zOiBPYmplY3QpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ3VzZXIvdmVyaWZ5VHdvRmFjdG9yJztcbiAgICAvL2xldCBwYXRoID0gJ3VzZXIvY29kZVZlcmlmaWNhdGlvbic7IFxuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGVuZHBvaW50LCBwYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gcG9zdEFQSWNvZGVWZXJpZmljYXRpb24oJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuXG4gIGdldEFQSWhlYWx0aENhcmRUeXBlcygpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ2NlbnRlci9oZWFsdGhDYXJkVHlwZXMnO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJaGVhbHRoQ2FyZFR5cGVzKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldEFQSWhlYWx0aENhcmRzKCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSAndXNlci9oZWFsdGhjYXJkcyc7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUGhlYWx0aENhcmRzKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldEFQSWhlYWx0aENhcmRJZChpZCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSBgdXNlci9oZWFsdGhjYXJkLyR7aWR9YDtcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSWhlYWx0aENhcmQoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcG9zdEFQSWhlYWx0aENhcmRzKHBhcmFtczogT2JqZWN0KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICd1c2VyL2hlYWx0aGNhcmQnO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGVuZHBvaW50LCBwYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gcG9zdEFQSVJlcG9ydFByb2JsZW0oJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwdXRBUEloZWFsdGhDYXJkKHBhcmFtczogSGVhbHRoQ2FyZCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSBgdXNlci9oZWFsdGhjYXJkLyR7cGFyYW1zLmlkfWA7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChlbmRwb2ludCwgcGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIHB1dEFQSWhlYWx0aENhcmQoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBkZWxldGVBUEloZWFsdGhDYXJkKHBhcmFtczogSGVhbHRoQ2FyZCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSBgdXNlci9oZWFsdGhjYXJkLyR7cGFyYW1zLmlkfWA7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmRlbGV0ZShlbmRwb2ludCkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBkZWxldGVBUEloZWFsdGhDYXJkKCR7cGF0aH0pIHJlczogJHtyZXN9YCwgSlNPTi5zdHJpbmdpZnkocmVzKSk7XG4gICAgICAgIHJldHVybiByZXM7XG5cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldEFQSVNvY2lhbFJlbGF0aW9uVHlwZSgpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ2NlbnRlci9zb2NpYWxSZWxhdGlvblR5cGUnO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJU29jaWFsUmVsYXRpb25UeXBlKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldEFQSWVtZXJnZW5jeUNvbnRhY3QoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICd1c2VyL0VtZXJnZW5jeUNvbnRhY3RzJztcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSWVtZXJnZW5jeUNvbnRhY3QoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QVBJZW1lcmdlbmN5Q29udGFjdElEKGlkOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gYHVzZXIvRW1lcmdlbmN5Q29udGFjdC8ke2lkfWA7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUEllbWVyZ2VuY3lDb250YWN0KCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHBvc3RBUEllbWVyZ2VuY3lDb250YWN0KHBhcmFtczogT2JqZWN0KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICd1c2VyL0VtZXJnZW5jeUNvbnRhY3QnO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGVuZHBvaW50LCBwYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gcG9zdEFQSWVtZXJnZW5jeUNvbnRhY3QoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwdXRBUEllbWVyZ2VuY3lDb250YWN0KGlkOiBhbnksIHBhcmFtczogT2JqZWN0KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9IGB1c2VyL0VtZXJnZW5jeUNvbnRhY3QvJHtpZH1gO1xuICAgIC8vLy9jb25zb2xlLmxvZygnW0Rvb2xlU2VydmljZV0gcHV0QVBJZW1lcmdlbmN5Q29udGFjdCgpJywgcGFyYW1zKTtcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KGVuZHBvaW50LCBwYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gcHV0QVBJZW1lcmdlbmN5Q29udGFjdCgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG5cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGRlbGV0ZUFQSWVtZXJnZW5jeUNvbnRhY3QoaWQ6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSBgdXNlci9FbWVyZ2VuY3lDb250YWN0LyR7aWR9YDtcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlKGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGRlbGV0ZUFQSWVtZXJnZW5jeUNvbnRhY3QoJHtwYXRofSkgcmVzOiAke3Jlc31gLCBKU09OLnN0cmluZ2lmeShyZXMpKTtcbiAgICAgICAgcmV0dXJuIHJlcztcblxuICAgICAgfSlcbiAgICApO1xuICB9XG5cblxuICBnZXRBUElhYm91dFVzKCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSAnY2VudGVyL2Fib3V0JztcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSWFib3V0VXMoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QVBJYXBwb2ludG1lbnRBZ2VuZGEoKTogT2JzZXJ2YWJsZTxhbnk+e1xuICAgIGxldCBwYXRoID0gJ3VzZXIvYWdlbmRhJztcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJYXBwb2ludG1lbnRBZ2VuZGEoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgLy9kb2N1bWVudHMtVHJhY2tpbmdcbiAgZ2V0QVBJZGlhZ25vc3RpY1Rlc3RzKCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSAndXNlci9kaWFnbm9zdGljVGVzdHMnO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUElkaWFnbm9zdGljVGVzdHMoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QVBJZGlhZ25vc3RpY1Rlc3RzTGFzdCgpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ3VzZXIvZGlhZ25vc3RpY1Rlc3RzL2xhc3QtZG9uZSc7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSWRpYWdub3N0aWNUZXN0cygke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBnZXRBUElkaWFnbm9zdGljVGVzdFR5cGVzQXZhaWxhYmxlKCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSAnZGlhZ25vc3RpY1Rlc3RUeXBlcy9hdmFpbGFibGUnO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJZGlhZ25vc3RpY1Rlc3RUeXBlc0F2YWlsYWJsZSgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBnZXRBUElkaWFnbm9zdGljVGVzdElEKGlkOiBPYmplY3QpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ3YyL3VzZXIvZGlhZ25vc3RpY1Rlc3QvJyArIGlkO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJZGlhZ25vc3RpY1Rlc3RJRCgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwb3N0QVBJZGlhZ25vc3RpY1Rlc3QocGFyYW1zOiBPYmplY3QpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ3YyL3VzZXIvZGlhZ25vc3RpY1Rlc3RzLyc7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICAvLy8vY29uc29sZS5sb2coXCJQT1NUOiBcIixwYXJhbXMpO1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChlbmRwb2ludCwgcGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIHBvc3RBUElkaWFnbm9zdGljVGVzdCgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG5cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHB1dEFQSWRpYWdub3N0aWNUZXN0KGlkLCBwYXJhbXM6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSBgdXNlci9kaWFnbm9zdGljVGVzdC8ke2lkfWA7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChlbmRwb2ludCwgcGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIHB1dEFQSWRpYWdub3N0aWNUZXN0KCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcblxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZGVsZXRlQVBJZGlhZ25vc3RpY1Rlc3QoaWQpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gYHVzZXIvZGlhZ25vc3RpY1Rlc3QvJHtpZH1gO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGUoZW5kcG9pbnQpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZGVsZXRlQVBJZGlhZ25vc3RpY1Rlc3QoJHtwYXRofSkgcmVzOiAke3Jlc31gLCBKU09OLnN0cmluZ2lmeShyZXMpKTtcbiAgICAgICAgcmV0dXJuIHJlcztcblxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QVBJZmlsdGVyZWREaWFnbm9zdGljVGVzdChwYXJhbXM6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSAndXNlci9kaWFnbm9zdGljVGVzdHMnO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgbGV0IGh0dHBQYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xuICAgIC8vIEJlZ2luIGFzc2lnbmluZyBwYXJhbWV0ZXJzXG4gICAgaWYgKHBhcmFtcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBodHRwUGFyYW1zID0gKHBhcmFtcy5zdGFydF9kYXRlKSA/IGh0dHBQYXJhbXMuYXBwZW5kKCdmcm9tX2RhdGUnLCBwYXJhbXMuc3RhcnRfZGF0ZSkgOiBodHRwUGFyYW1zXG4gICAgICBodHRwUGFyYW1zID0gKHBhcmFtcy5lbmRfZGF0ZSkgPyBodHRwUGFyYW1zLmFwcGVuZCgndG9fZGF0ZScsIHBhcmFtcy5lbmRfZGF0ZSkgOiBodHRwUGFyYW1zXG4gICAgICBpZiAocGFyYW1zLmRpYWdub3N0aWNUZXN0VHlwZXMpIHtcbiAgICAgICAgcGFyYW1zLmRpYWdub3N0aWNUZXN0VHlwZXMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgICBodHRwUGFyYW1zID0gaHR0cFBhcmFtcy5hcHBlbmQoJ2RpYWdub3N0aWNfdGVzdF90eXBlX2lkW10nLCBlbGVtZW50KVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQsIGh0dHBQYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJZmlsdGVyZWREaWFnbm9zdGljVGVzdCgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG5cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldEFQSWZvcm1QZW5kaW5nKHBhcmFtcyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSAnZm9ybXMvcGVuZGluZy91c2VyJztcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChlbmRwb2ludCwgcGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJZm9ybVBlbmRpbmcoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG4gIFxuICAvL2Zvcm1zLVRyYWNraW5nXG4gIGdldEFQSVNoYXJlZGNhcmVGb3JtTGlzdChwYXRpZW50KXtcbiAgICBsZXQgcGF0aCA9IGAvcmVoYWJpbGlmeS9zaGFyZWRjYXJlcGxhbi9tb25pdG9yaW5nLyR7cGF0aWVudH1gOyAgIFxuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUElyZW1pbmRlcnMoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cblxuXG4gIGdldEFQSWZvcm1MaXN0cygpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ2Zvcm1zL3VzZXInO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJZm9ybUxpc3RzKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldEFQSUZvcm1KU09OKGZvcm0sIHBhcmFtcz8pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gYGZvcm0vJHtmb3JtfS9mb3JtRmllbGRzYDtcbiAgICBsZXQgaHR0cFBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XG4gICAgaHR0cFBhcmFtcyA9IChwYXJhbXM/LmZvcm1BbnN3ZXIpID8gaHR0cFBhcmFtcy5hcHBlbmQoJ2Zvcm1BbnN3ZXInLCBwYXJhbXM/LmZvcm1BbnN3ZXIpICA6IGh0dHBQYXJhbXNcbiAgICBodHRwUGFyYW1zID0gKHBhcmFtcz8uZ2FtZV9wbGF5X2lkKSA/IGh0dHBQYXJhbXMuYXBwZW5kKCdnYW1lX3BsYXlfaWQnLCBwYXJhbXM/LmdhbWVfcGxheV9pZCkgIDogaHR0cFBhcmFtc1xuICAgIGh0dHBQYXJhbXMgPSAocGFyYW1zPy5zdGFydGVkX2FwcCkgPyBodHRwUGFyYW1zLmFwcGVuZCgnc3RhcnRlZF9hcHAnLCBwYXJhbXM/LnN0YXJ0ZWRfYXBwKSAgOiBodHRwUGFyYW1zXG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCwgaHR0cFBhcmFtcykucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSXJlbWluZGVycygke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwb3N0QVBJRm9ybUpTT04oZm9ybSwgcGFyYW1zKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9IGBmb3JtZmllbGQvY29uZGl0aW9uYWwvJHtmb3JtfS9maWVsZC8ke3BhcmFtcy5mb3JtRmllbGR9YDtcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChlbmRwb2ludCwgcGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gcG9zdEFQSUNvbnRlbnRTdGF0dXMoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcG9zdEFQSUZvcm1GaWxsKHBhcmFtcyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSBgZm9ybS9maWxsL2A7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoZW5kcG9pbnQsIHBhcmFtcykucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIHBvc3RBUElDb250ZW50U3RhdHVzKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuICAvL2dyYXBoaWNzLVRyYWNraW5nXG5cbiAgZ2V0QVBJZWxlbWVudHNMaXN0KGZpbHRlcj8pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ3VzZXIvZWxlbWVudHMnICAvKiAndXNlci9lbGVtZW50c0xpc3QvdjInICAqL1xuICAgIGxldCBodHRwUGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcbiAgICBodHRwUGFyYW1zID0gKGZpbHRlcj8ub25seV93aXRoX3ZhbHVlcyk/IGh0dHBQYXJhbXMuYXBwZW5kKCdvbmx5X3dpdGhfdmFsdWVzJywgZmlsdGVyPy5vbmx5X3dpdGhfdmFsdWVzKTogaHR0cFBhcmFtc1xuICAgIGh0dHBQYXJhbXMgPSAoZmlsdGVyPy5ncm91cGVkKT8gaHR0cFBhcmFtcy5hcHBlbmQoJ2dyb3VwZWQnLCBmaWx0ZXI/Lmdyb3VwZWQpIDogaHR0cFBhcmFtc1xuICAgIGh0dHBQYXJhbXMgPSAoZmlsdGVyPy5maWx0ZXIpPyBodHRwUGFyYW1zLmFwcGVuZCgnZmlsdGVyJywgZmlsdGVyPy5maWx0ZXIpIDogaHR0cFBhcmFtc1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQsIGh0dHBQYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJZWxlbWVudHNMaXN0KCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuICBcbiAgLyoqIGdldCBlbGVtZW50cyB3aXRoIHF1ZXJ5IGJ5IHBhcmFtZXRlciBkYXRlICAqL1xuICBnZXRBUEllbGVtZW50c0xpc3RCeURhdGUocGFyYW1zOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ3VzZXIvZWxlbWVudHNMaXN0L3YyJyAgLyogJ3VzZXIvZWxlbWVudHNMaXN0JyAgKi9cbiAgICBsZXQgaHR0cFBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XG4gICAgaWYocGFyYW1zLmZpbHRlciA9PSAnMScpIGh0dHBQYXJhbXMgPSBodHRwUGFyYW1zLmFwcGVuZCgnZmlsdGVyJywgJzEnKVxuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQsaHR0cFBhcmFtcykucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSWVsZW1lbnRzTGlzdEJ5RGF0ZSgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBnZXRBUEllbGVtZW50c0J5R3JvdXAoZmlsdGVyPyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSAnY2VudGVyL2VsZW1lbnRHcm91cC9lbGVtZW50cydcbiAgICBsZXQgaHR0cFBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XG4gICAgaWYoZmlsdGVyID09ICcxJyB8fCBmaWx0ZXIgPT0gJzAnKSBodHRwUGFyYW1zID0gaHR0cFBhcmFtcy5hcHBlbmQoJ2ZpbHRlcicsIGZpbHRlcilcbiAgICBlbHNlIGh0dHBQYXJhbXMgPSBodHRwUGFyYW1zLmFwcGVuZCgnZmlsdGVyJywgJzEnKVxuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQsaHR0cFBhcmFtcykucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSWVsZW1lbnRzTGlzdEJ5RGF0ZSgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwb3N0QVBJYWRkRWxlbWVudChpZCwgcGFyYW1zOiBPYmplY3QpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ3VzZXIvZWxlbWVudC8nICsgaWQgKyAnL3ZhbHVlL2FkZCdcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChlbmRwb2ludCwgcGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gcG9zdEFQSWFkZEVsZW1lbnQoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QVBJZ3JhcGhpY3NFbGVtZW50KGlkOiBPYmplY3QsIHF1ZXJ5KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICd1c2VyL2VsZW1lbnQvJyArIGlkO1xuICAgIGxldCBodHRwUGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcbiAgICBodHRwUGFyYW1zID0gKHF1ZXJ5KSA/IGh0dHBQYXJhbXMuYXBwZW5kKCdpbnRlcnZhbCcsIHF1ZXJ5KSA6IGh0dHBQYXJhbXNcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50LGh0dHBQYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUElncmFwaGljc0VsZW1lbnQoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QVBJZWxlbWVudElEKGlkOiBPYmplY3QsIHBhcmFtcz8pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gYHYyL3VzZXIvZWxlbWVudC8ke2lkfWA7XG4gICAgbGV0IGh0dHBQYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xuICAgIGh0dHBQYXJhbXMgPSAocGFyYW1zPy5pbnRlcnZhbCkgPyBodHRwUGFyYW1zLmFwcGVuZCgnaW50ZXJ2YWwnLCBwYXJhbXM/LmludGVydmFsKSA6IGh0dHBQYXJhbXNcbiAgICBodHRwUGFyYW1zID0gKHBhcmFtcz8uZnJvbV9kYXRlKSA/IGh0dHBQYXJhbXMuYXBwZW5kKCdmcm9tX2RhdGUnLCBwYXJhbXM/LmZyb21fZGF0ZSkgOiBodHRwUGFyYW1zXG4gICAgaHR0cFBhcmFtcyA9IChwYXJhbXM/LnRvX2RhdGUpID8gaHR0cFBhcmFtcy5hcHBlbmQoJ3RvX2RhdGUnLCBwYXJhbXM/LnRvX2RhdGUpIDogaHR0cFBhcmFtc1xuICAgIGh0dHBQYXJhbXMgPSAocGFyYW1zPy52ZXJzaW9uKSA/IGh0dHBQYXJhbXMuYXBwZW5kKCd2ZXJzaW9uJywgcGFyYW1zPy52ZXJzaW9uKSA6IGh0dHBQYXJhbXNcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50LGh0dHBQYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUElncmFwaGljc0VsZW1lbnQoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QVBJZWxlbWVudEF2YWlsYWJsZUlEKGlkOiBPYmplY3QpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gYGVsZW1lbnQvYXZhaWxhYmxlLyR7aWR9YDtcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJZWxlbWVudEF2YWlsYWJsZUlEKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldEFQSWNhdGVnb3J5KCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSAndXNlci9lbGVtZW50X2NhdGVnb3J5JztcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJY2F0ZWdvcnkoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QVBJZWxlbWVudEdyb3VwSUQoaWQ6IE9iamVjdCwgZmlsdGVyPyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSBgY2VudGVyL2VsZW1lbnRHcm91cC8ke2lkfS9lbGVtZW50c2A7XG4gICAgbGV0IGh0dHBQYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xuICAgIGh0dHBQYXJhbXMgPSAoZmlsdGVyKSA/IGh0dHBQYXJhbXMuYXBwZW5kKCdmaWx0ZXInLCBmaWx0ZXIpIDogaHR0cFBhcmFtc1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQsIGh0dHBQYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUEllbGVtZW50R3JvdXBJRCgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBzZWFyY2hBUEllbGVtZW50R3JvdXAocGFyYW1zPzogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICdjZW50ZXIvZWxlbWVudEdyb3VwcydcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChlbmRwb2ludCwgcGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gc2VhcmNoQVBJZWxlbWVudEdyb3VwKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldEFQSWVsZW1lbnRHcm91cChwYXJhbXM/OiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ2NlbnRlci9lbGVtZW50R3JvdXBzJ1xuICAgIGxldCBodHRwUGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcbiAgICBodHRwUGFyYW1zID0gKHBhcmFtcz8uZmlsdGVyKSA/IGh0dHBQYXJhbXMuYXBwZW5kKCdmaWx0ZXInLCBwYXJhbXM/LmZpbHRlcikgOiBodHRwUGFyYW1zXG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCwgaHR0cFBhcmFtcykucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSWVsZW1lbnRHcm91cCgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cbiAgLyoqIGdldCBkaWV0cyB3aXRoIHF1ZXJ5IGJ5IHBhcmFtZXRlciBkYXRlICAqL1xuICBnZXRBUElsaXN0RGlldHNCeURhdGUocGFyYW1zPzogT2JqZWN0KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICd1c2VyL2RpZXRzJztcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJbGlzdERpZXRzQnlEYXRlKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldEFQSUxpc3RSZWNpcGUocGFyYW1zKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9IGB1c2VyL2RpZXRzL3JlY2VpcHRzYDtcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIGxldCBodHRwUGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKVxuICAgIC5zZXQoJ3RhZ3MnLCBwYXJhbXMudGFncylcbiAgICAuc2V0KCdpbnRlcmFjdGlvbnMnLCBwYXJhbXMuaW50ZXJhY3Rpb25zKVxuICAgIC5zZXQoJ3JlYWRpbmdUaW1lJywgcGFyYW1zLnJlYWRpbmdUaW1lKVxuICAgIC5zZXQoJ2Zyb21fZGF0ZScsIHBhcmFtcy5mcm9tX2RhdGUpXG4gICAgLnNldCgndG9fZGF0ZScsIHBhcmFtcy50b19kYXRlKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCwgaHR0cFBhcmFtcykucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSWRldGFpbFJlY2lwZSgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICAvKmdldEFQSWRpZXRzQnlEYXRlKGRhdGU6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSBgdXNlci9kaWV0YXJ5SW50YWtlc2BcbiAgICBsZXQgaHR0cFBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XG4gICAgaHR0cFBhcmFtcyA9IChkYXRlKSA/IGh0dHBQYXJhbXMuYXBwZW5kKCdkYXRlJywgZGF0ZSkgOiBodHRwUGFyYW1zXG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCwgaHR0cFBhcmFtcykucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSWRpZXRzQnlEYXRlKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfSovXG5cbiAgZ2V0QVBJZGlldHNCeURhdGUocGFyYW1zOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gYHVzZXIvZGlldGFyeUludGFrZXNgXG4gICAgbGV0IGh0dHBQYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xuICAgIGh0dHBQYXJhbXMgPSAocGFyYW1zPy5kYXRlKSA/IGh0dHBQYXJhbXMuYXBwZW5kKCdkYXRlJywgcGFyYW1zLmRhdGUpIDogaHR0cFBhcmFtc1xuICAgIGh0dHBQYXJhbXMgPSAocGFyYW1zPy5ncm91cGVkX2J5X3RpbWVzKSA/IGh0dHBQYXJhbXMuYXBwZW5kKCdncm91cGVkX2J5X3RpbWVzJywgcGFyYW1zLmdyb3VwZWRfYnlfdGltZXMpIDogaHR0cFBhcmFtc1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQsIGh0dHBQYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUElkaWV0c0J5RGF0ZSgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBnZXRBUElGb3Jtc0J5RGF0ZShwYXJhbXM6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSBgcmVoYWJpbGlmeS9zaGFyZWRjYXJlcGxhbi9mb3Jtc2A7XG4gICAgbGV0IGh0dHBQYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xuICAgIGh0dHBQYXJhbXMgPSAocGFyYW1zPy5kYXRlKSA/IGh0dHBQYXJhbXMuYXBwZW5kKCdkYXRlJywgcGFyYW1zLmRhdGUpIDogaHR0cFBhcmFtc1xuICAgIGh0dHBQYXJhbXMgPSAocGFyYW1zPy5ncm91cGVkX2J5X3RpbWVzKSA/IGh0dHBQYXJhbXMuYXBwZW5kKCdncm91cGVkX2J5X3RpbWVzJywgcGFyYW1zLmdyb3VwZWRfYnlfdGltZXMpIDogaHR0cFBhcmFtc1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQsIGh0dHBQYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUElkaWV0c0J5RGF0ZSgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cbiBcblxuICBnZXRBUElkZXRhaWxEaWV0cyhpZDogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9IGBkaWV0LyR7aWR9YDtcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIGxldCBodHRwUGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKVxuICAgICAgLnNldCgnaW50ZXJhY3Rpb25zJywgMSk7XG5cbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50LCAgaHR0cFBhcmFtcyApLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUElkZXRhaWxEaWV0cygke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBnZXRBUElkZXRhaWxSZWNpcGUoaWQ6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSBgZGlldC9yZWNlaXB0LyR7aWR9YDtcbiAgICBsZXQgaHR0cFBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKClcbiAgICAgIC5zZXQoJ2ludGVyYWN0aW9ucycsIDEpO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQsIGh0dHBQYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUElkZXRhaWxSZWNpcGUoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QVBJbGlzdFRlc3RpbW9uaWFscyhwYXJhbXMpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gYHVzZXIvdGVzdGltb25pYWxzYDtcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIGxldCBodHRwUGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKVxuICAgIC5zZXQoJ3RhZ3MnLCBwYXJhbXMudGFncylcbiAgICAuc2V0KCdpbnRlcmFjdGlvbnMnLCBwYXJhbXMuaW50ZXJhY3Rpb25zKVxuICAgIC5zZXQoJ3JlYWRpbmdUaW1lJywgcGFyYW1zLnJlYWRpbmdUaW1lKTtcbiAgICBcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCwgaHR0cFBhcmFtcykucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSWRldGFpbFJlY2lwZSgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBnZXRBUElkZXRhaWxUZXN0aW1vbmlhbChpZCwgcGFyYW1zKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9IGB1c2VyL3Rlc3RpbW9ueS8ke2lkfWA7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICBsZXQgaHR0cFBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKClcbiAgICAuc2V0KCd0YWdzJywgcGFyYW1zLnRhZ3MpXG4gICAgLnNldCgnaW50ZXJhY3Rpb25zJywgcGFyYW1zLmludGVyYWN0aW9ucylcbiAgICAuc2V0KCdyZWFkaW5nVGltZScsIHBhcmFtcy5yZWFkaW5nVGltZSlcbiAgICAuc2V0KCdpbnRlcmFjdGlvbnMnLCAxKTtcbiAgICBcbiAgICBcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCxodHRwUGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSWRldGFpbFJlY2lwZSgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cbiAgXG5cbiAgLyoqIGdldCBhZHZpY2VzICAqKi9cbiAgZ2V0QVBJbGlzdEFkdmljZXMocGFyYW1zKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICd1c2VyL2FkdmljZXMnO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgbGV0IGh0dHBQYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpXG4gICAgLnNldCgndGFncycsIHBhcmFtcy50YWdzKVxuICAgIC5zZXQoJ2ludGVyYWN0aW9ucycsIHBhcmFtcy5pbnRlcmFjdGlvbnMpXG4gICAgLnNldCgncmVhZGluZ1RpbWUnLCBwYXJhbXMucmVhZGluZ1RpbWUpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50LCBodHRwUGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJbGlzdEFkdmljZXMoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiBcbiAgICAvKiogZ2V0IG5ld3MgICoqL1xuICAgIGdldEFQSWxpc3ROZXdzKHBhcmFtcyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICBsZXQgcGF0aCA9ICd1c2VyL25ld3MnO1xuICAgICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICAgIGxldCBodHRwUGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKVxuICAgICAgLnNldCgndGFncycsIHBhcmFtcy50YWdzKVxuICAgICAgLnNldCgnaW50ZXJhY3Rpb25zJywgcGFyYW1zLmludGVyYWN0aW9ucylcbiAgICAgIC5zZXQoJ3JlYWRpbmdUaW1lJywgcGFyYW1zLnJlYWRpbmdUaW1lKTtcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50LCBodHRwUGFyYW1zKS5waXBlKFxuICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSWxpc3ROZXdzKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBnZXRBUElkZXRhaWxOZXcoaWQ6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICBsZXQgcGF0aCA9IGB1c2VyL25ldy8ke2lkfWA7XG4gICAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgICAgbGV0IGh0dHBQYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpXG4gICAgICAuc2V0KCdpbnRlcmFjdGlvbnMnLCAxKTtcblxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQsICBodHRwUGFyYW1zICkucGlwZShcbiAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgIC8vLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUElkZXRhaWxOZXcoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH0gXG5cbiAgICBnZXRBUElkZXRhaWxBZHZpY2VzKGlkOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgbGV0IHBhdGggPSBgYWR2aWNlLyR7aWR9YDtcbiAgICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgXG4gICAgICBsZXQgaHR0cFBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKClcbiAgICAgIC5zZXQoJ2ludGVyYWN0aW9ucycsIDEpO1xuXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCwgIGh0dHBQYXJhbXMgKS5waXBlKFxuICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuXG5cbiAgZ2V0QVBJU2VhcmNoTmV3cyhxdWVyeTogYW55LHBhcmFtcyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSAnbmV3cyc7XG4gICAgbGV0IGh0dHBQYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpXG4gICAgLnNldCgndGFncycsIHBhcmFtcy50YWdzKVxuICAgIC5zZXQoJ2ludGVyYWN0aW9ucycsIHBhcmFtcy5pbnRlcmFjdGlvbnMpXG4gICAgLnNldCgncmVhZGluZ1RpbWUnLCBwYXJhbXMucmVhZGluZ1RpbWUpO1xuICAgIGh0dHBQYXJhbXMgPSAocXVlcnkpID8gaHR0cFBhcmFtcy5hcHBlbmQoJ3NlYXJjaCcsIHF1ZXJ5KSA6IGh0dHBQYXJhbXNcbiAgIFxuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQsIGh0dHBQYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUElTZWFyY2hOZXdzKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldEFQSVNlYXJjaEFkdmljZXMocXVlcnk6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSAnYWR2aWNlcyc7XG4gICAgbGV0IGh0dHBQYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xuICAgIGh0dHBQYXJhbXMgPSAocXVlcnkpID8gaHR0cFBhcmFtcy5hcHBlbmQoJ3NlYXJjaCcsIHF1ZXJ5KSA6IGh0dHBQYXJhbXNcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50LCBodHRwUGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSVNlYXJjaEFkdmljZXMoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG4gIFxuICBnZXRBUElkcnVnc0xpc3QocXVlcnk6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSBgZHJ1Z0ludGFrZS9saXN0YDtcbiAgICBsZXQgaHR0cFBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XG4gICAgaHR0cFBhcmFtcyA9IChxdWVyeSkgPyBodHRwUGFyYW1zLmFwcGVuZCgnc2VhcmNoJywgcXVlcnkpIDogaHR0cFBhcmFtc1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQsIGh0dHBQYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUElkcnVnc0xpc3QoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgXG4gIGdldEFQSWRydWdzTGlzdEludGVyYWN0aW9uKHF1ZXJ5OiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGNvbnN0IGVuZHBvaW50ID0gYGh0dHBzOi8vbjZpYmFhemV2bnNpeGZjczRwcmw3ejd3cmEwb29ubWEubGFtYmRhLXVybC5ldS1jZW50cmFsLTEub24uYXdzL2A7XG4gICAvLyBjb25zdCBlbmRwb2ludCA9IGBodHRwczovL242aWJhYXpldm5zaXhmY3M0cHJsN3o3d3JhMG9vbm1hLmxhbWJkYS11cmwuZXUtY2VudHJhbC0xLm9uLmF3cy8/ZHJ1Zz1EQjAxMzYzYDtcbiAgIC8vbGV0IGh0dHBQYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpLnNldCgnZHJ1ZycsIHF1ZXJ5KTtcbiAgIGxldCBodHRwUGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKVxuICAgLnNldCgnZHJ1ZycsIHF1ZXJ5KVxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50LCBodHRwUGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cblxuICBnZXRBUElkcnVnSW50YWtlQnlEYXRlKHBhcmFtczogT2JqZWN0KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICd1c2VyL2RydWdJbnRha2UvZGF0ZSc7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoZW5kcG9pbnQsIHBhcmFtcykucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSWRydWdJbnRha2VCeURhdGUoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuXG4gICAgICB9KVxuICAgICk7XG4gIH1cbi8vIHNlbmQgbWVkaWNhdGlvbiBsaXN0XG4gIGdldEFQSW1lZGljYXRpb25MaXN0KHF1ZXJ5OiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gYHNlbmRtZWRpY2F0aW9uL2xpc3RgO1xuICAgIGxldCBodHRwUGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcbiAgICBodHRwUGFyYW1zID0gKHF1ZXJ5KSA/IGh0dHBQYXJhbXMuYXBwZW5kKCdzZWFyY2gnLCBxdWVyeSkgOiBodHRwUGFyYW1zXG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCwgaHR0cFBhcmFtcykucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUEltZWRpY2F0aW9uTGlzdCgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBnZXRBUElkaXJlY3Rpb25zTGlzdCgpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gYHVzZXIvYWRkcmVzc2VzYDtcbiAgICAvLyBsZXQgaHR0cFBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XG4gICAgLy8gaHR0cFBhcmFtcyA9IChxdWVyeSkgPyBodHRwUGFyYW1zLmFwcGVuZCgnc2VhcmNoJywgcXVlcnkpIDogaHR0cFBhcmFtc1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJZGlyZWN0aW9uTGlzdCgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cbiAgZ2V0QVBJbWVkaWNhdGlvbnNMaXN0KCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSBgc2VuZG1lZGljYXRpb24vbGlzdGA7XG4gICAgLy8gbGV0IGh0dHBQYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xuICAgIC8vIGh0dHBQYXJhbXMgPSAocXVlcnkpID8gaHR0cFBhcmFtcy5hcHBlbmQoJ3NlYXJjaCcsIHF1ZXJ5KSA6IGh0dHBQYXJhbXNcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSWRpcmVjdGlvbkxpc3QoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcG9zdEFQSXNlbmREaXJlY3Rpb24ocGFyYW1zOiBPYmplY3QpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ3VzZXIvYWRkcmVzcyc7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoZW5kcG9pbnQsIHBhcmFtcykucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBwb3N0QVBJc2VuZERpcmVjdGlvbigke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG5cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHB1dEFQSXNlbmREaXJlY3Rpb24oaWQ6IGFueSwgcGFyYW1zOiBPYmplY3QpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gYHVzZXIvYWRkcmVzcy8ke2lkfWA7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChlbmRwb2ludCwgcGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gcHV0QVBJZHJ1Z0ludGFrZSgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG5cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGRlbGV0ZUFQSXNlbmREaXJlY3Rpb24oaWQ6IE9iamVjdCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSBgdXNlci9hZGRyZXNzLyR7aWR9YDtcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlKGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZGVsZXRlQVBJbWVkaWNhdGlvblBsYW4oJHtwYXRofSkgcmVzOiAke3Jlc31gLCBKU09OLnN0cmluZ2lmeShyZXMpKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHBvc3RBUEltZWRpY2F0aW9uU2VuZFBldGl0aW9uKHBhcmFtczogT2JqZWN0KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICdzZW5kbWVkaWNhdGlvbic7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoZW5kcG9pbnQsIHBhcmFtcykucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBwb3N0QVBJc2VuZERpcmVjdGlvbigke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG5cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHBvc3RBUElkcnVnSW50YWtlKHBhcmFtczogT2JqZWN0KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICd1c2VyL2RydWdJbnRha2UnO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGVuZHBvaW50LCBwYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBwb3N0QVBJZHJ1Z0ludGFrZSgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG5cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHBvc3RBUEljaGFuZ2VTdGF0ZWRydWdJbnRha2UoaWQ6IE9iamVjdCwgc3RhdGU6IE9iamVjdCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSBgdXNlci9kcnVnSW50YWtlLyR7aWR9L3NldC8ke3N0YXRlfWA7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoZW5kcG9pbnQpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBwb3N0QVBJZHJ1Z0ludGFrZSgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG5cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHBvc3RBUEltZWRpY2F0aW9uUGxhbihwYXJhbXM6IE9iamVjdCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSBgdXNlci9tZWRpY2F0aW9uUGxhbmA7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoZW5kcG9pbnQsIHBhcmFtcykucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIHBvc3RBUElkcnVnSW50YWtlKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcblxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHV0QVBJbWVkaWNhdGlvblBsYW4oaWQ6IGFueSwgcGFyYW1zOiBPYmplY3QpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gYHVzZXIvbWVkaWNhdGlvblBsYW4vJHtpZH1gO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoZW5kcG9pbnQsIHBhcmFtcykucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIHB1dEFQSWRydWdJbnRha2UoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBkZWxldGVBUEltZWRpY2F0aW9uUGxhbihpZDogT2JqZWN0KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9IGB1c2VyL21lZGljYXRpb25QbGFuLyR7aWR9YDtcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlKGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZGVsZXRlQVBJbWVkaWNhdGlvblBsYW4oJHtwYXRofSkgcmVzOiAke3Jlc31gLCBKU09OLnN0cmluZ2lmeShyZXMpKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldEFQSW1lZGljYXRpb25QbGFuKGlkKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9IGB1c2VyL21lZGljYXRpb25QbGFuLyR7aWR9YFxuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUEltZWRpY2F0aW9uUGxhbigke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBnZXRBUEltZWRpY2F0aW9uUGxhbnMocGFyYW1zPyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSBgdXNlci9tZWRpY2F0aW9uUGxhbnNgXG4gICAgbGV0IGh0dHBQYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xuICAgIGh0dHBQYXJhbXMgPSAocGFyYW1zPy5vbkRhdGUgPT09IDAgfHwgcGFyYW1zPy5vbkRhdGUgPT09IDEpID8gaHR0cFBhcmFtcy5hcHBlbmQoJ29uRGF0ZScsIHBhcmFtcz8ub25EYXRlKSA6IGh0dHBQYXJhbXNcbiAgICBodHRwUGFyYW1zID0gKHBhcmFtcz8uZnJvbV9kYXRlKSA/IGh0dHBQYXJhbXMuYXBwZW5kKCdmcm9tX2RhdGUnLCBwYXJhbXM/LmZyb21fZGF0ZSkgOiBodHRwUGFyYW1zXG4gICAgaHR0cFBhcmFtcyA9IChwYXJhbXM/LnRvX2RhdGUpID8gaHR0cFBhcmFtcy5hcHBlbmQoJ3RvX2RhdGUnLCBwYXJhbXM/LnRvX2RhdGUpIDogaHR0cFBhcmFtc1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQsIGh0dHBQYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJbWVkaWNhdGlvblBsYW4oJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG4vL3RvZG9zIGxvcyBtZWRpY2FtZW50b3MgYXNpZ25hZG9zIGEgZXNhIHBlcnNvbmFcbiAgZ2V0QVBJbWVkaWNhdGlvbkFsbHMoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9IGB1c2VyL21lZGljYXRpb25QbGFuc2AgIFxuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJbWVkaWNhdGlvblBsYW4oJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbi8vIGFjdGl2YXRlUGVuZGluZ01lZGljYXRpb25QbGFuc1xuICBnZXRBUElQZW5kaW5nTWVkaWNhdGlvblBsYW5zKHBhcmFtcz8pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gYHVzZXIvcGVuZGluZy9tZWRpY2F0aW9uUGxhbnNgXG4gICAgbGV0IGh0dHBQYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xuICAgIGh0dHBQYXJhbXMgPSAocGFyYW1zPy5vbmx5Q291bnQgPT09IDEgfHwgcGFyYW1zPy5vbmx5Q291bnQgPT09IDApID8gaHR0cFBhcmFtcy5hcHBlbmQoJ29ubHlDb3VudCcsIHBhcmFtcz8ub25seUNvdW50KSA6IGh0dHBQYXJhbXNcbiAgICBodHRwUGFyYW1zID0gKHBhcmFtcz8ub25seUNvdW50ID09PSB1bmRlZmluZWQpID8gaHR0cFBhcmFtcy5hcHBlbmQoJ29ubHlDb3VudCcsICcwJykgOiBodHRwUGFyYW1zXG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCwgaHR0cFBhcmFtcykucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUElQZW5kaW5nTWVkaWNhdGlvblBsYW5zKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldEFQSUZyZXF1ZW5jaWVzTWVkaWNhdGlvblBsYW5zSFBDKHBhcmFtcz8pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gYGhwYy9tZWRpY2F0aW9uUGxhbi9mcmVxdWVuY2llc2BcbiAgICBsZXQgaHR0cFBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCwgaHR0cFBhcmFtcykucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUElGcmVxdWVuY2llc01lZGljYXRpb25QbGFuc0hQQygke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBnZXRBUElEcnVnVW5pdHMoaWQsIHNlYXJjaD8pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gYGRydWcvJHtpZH0vdW5pdHNgXG4gICAgbGV0IGh0dHBQYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xuICAgIGh0dHBQYXJhbXMgPSBzZWFyY2ggPyBodHRwUGFyYW1zLmFwcGVuZCgnc2VhcmNoJywgc2VhcmNoKSA6IGh0dHBQYXJhbXNcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50LCBodHRwUGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSURydWdVbml0cygke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBnZXRBUElEaWFnbm9zdGljKHBhcmFtcyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSAndXNlci9kaWFnbm9zdGljcycvLyd2Mi9kaWFnbm9zdGljL3VzZXInO1xuICAgIGxldCBodHRwUGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcbiAgICBodHRwUGFyYW1zID0gKHBhcmFtcz8ub25EYXRlID09PSAwIHx8IHBhcmFtcz8ub25EYXRlID09PSAxKSA/IGh0dHBQYXJhbXMuYXBwZW5kKCdvbkRhdGUnLCBwYXJhbXM/Lm9uRGF0ZSkgOiBodHRwUGFyYW1zXG4gICAgaHR0cFBhcmFtcyA9IChwYXJhbXM/LmZyb21fZGF0ZSkgPyBodHRwUGFyYW1zLmFwcGVuZCgnZnJvbV9kYXRlJywgcGFyYW1zPy5mcm9tX2RhdGUpIDogaHR0cFBhcmFtc1xuICAgIGh0dHBQYXJhbXMgPSAocGFyYW1zPy50b19kYXRlKSA/IGh0dHBQYXJhbXMuYXBwZW5kKCd0b19kYXRlJywgcGFyYW1zPy50b19kYXRlKSA6IGh0dHBQYXJhbXNcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50LCBodHRwUGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJZ2FtZXMoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QVBJQ2VudGVyQWxsZXJnaWVzKHNlYXJjaD8pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ2NlbnRlci9hbGxlcmdpZXMnO1xuICAgIGxldCBodHRwUGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcbiAgICBodHRwUGFyYW1zID0gKHNlYXJjaCkgPyBodHRwUGFyYW1zLmFwcGVuZCgnc2VhcmNoJywgc2VhcmNoKSA6IGh0dHBQYXJhbXNcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50LCBodHRwUGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJZ2FtZXMoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QVBJQWxsZXJnaWVzKCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSAndXNlci9hbGxlcmdpZXMnO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUElnYW1lcygke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwb3N0QVBJQWxsZXJnaWVzKHBhcmFtczogT2JqZWN0KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9IGB1c2VyL2FsbGVyZ3kvY3JlYXRlYDtcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChlbmRwb2ludCwgcGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gcG9zdEFQSWRydWdJbnRha2UoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwdXRBUElBbGxlcmd5KGlkOiBhbnksIHBhcmFtczogT2JqZWN0KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9IGB1c2VyL2FsbGVyZ3kvJHtpZH1gO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoZW5kcG9pbnQsIHBhcmFtcykucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIHB1dEFQSUFsbGVyZ3koJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBkZWxldGVBUElBbGxlcmd5KGlkOiBPYmplY3QpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gYHVzZXIvYWxsZXJneS8ke2lkfWA7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmRlbGV0ZShlbmRwb2ludCkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBkZWxldGVBUElBbGxlcmd5KCR7cGF0aH0pIHJlczogJHtyZXN9YCwgSlNPTi5zdHJpbmdpZnkocmVzKSk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBnZXRBUElnYW1lcygpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ3VzZXIvZ2FtZXMnO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUElnYW1lcygke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cbiAgLyoqIGdldCBnYW1lcyB3aXRoIHF1ZXJ5IGJ5IHBhcmFtZXRlciBkYXRlICAqL1xuICBnZXRBUElnYW1lc0J5RGF0ZShmcm9tX2RhdGU6IGFueSwgdG9fZGF0ZTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICd1c2VyL2dhbWVQbGF5cy9zY2hlZHVsZWQnO1xuICAgIGxldCBodHRwUGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcbiAgICBodHRwUGFyYW1zID0gKGZyb21fZGF0ZSkgPyBodHRwUGFyYW1zLmFwcGVuZCgnZnJvbV9kYXRlJywgZnJvbV9kYXRlKSA6IGh0dHBQYXJhbXNcbiAgICBodHRwUGFyYW1zID0gKHRvX2RhdGUpID8gaHR0cFBhcmFtcy5hcHBlbmQoJ3RvX2RhdGUnLCB0b19kYXRlKSA6IGh0dHBQYXJhbXNcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50LCBodHRwUGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJZ2FtZXMoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG4gIGdldEFQSWdhbWVJZChpZCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSBgdXNlci9nYW1lLyR7aWR9YDtcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJZ2FtZUlkKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldEFQSWFnZW5kYSgpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ3VzZXIvYWdlbmRhJztcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJYWdlbmRhKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8vcmVtaW5kZXJzXG4gIC8vdXNlci9yZW1pbmRlciBcblxuICBnZXRBUElhbGxBZ2VuZGEocGFyYW1zPyk6IE9ic2VydmFibGU8YW55PntcbiAgICBsZXQgcGF0aCA9ICd1c2VyL2FnZW5kYS92Mic7XG4gICAgbGV0IGh0dHBQYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xuICAgIGh0dHBQYXJhbXMgPSBwYXJhbXM/LmZyb21fZGF0ZT8gaHR0cFBhcmFtcy5hcHBlbmQoJ2Zyb21fZGF0ZScsIHBhcmFtcz8uZnJvbV9kYXRlKSA6IGh0dHBQYXJhbXNcbiAgICBodHRwUGFyYW1zID0gcGFyYW1zPy50b19kYXRlPyBodHRwUGFyYW1zLmFwcGVuZCgndG9fZGF0ZScsIHBhcmFtcz8udG9fZGF0ZSkgOiBodHRwUGFyYW1zXG4gICAgaHR0cFBhcmFtcyA9IHBhcmFtcz8uZmlsdGVyX2J5X2RhdGU/IGh0dHBQYXJhbXMuYXBwZW5kKCdmaWx0ZXJfYnlfZGF0ZScsIHBhcmFtcz8uZmlsdGVyX2J5X2RhdGUpIDogaHR0cFBhcmFtc1xuICAgIGh0dHBQYXJhbXMgPSAocGFyYW1zPy53aXRoX21lZGljYWxfcHJvY2VkdXJlcyAhPSB1bmRlZmluZWQpPyBodHRwUGFyYW1zLmFwcGVuZCgnd2l0aF9tZWRpY2FsX3Byb2NlZHVyZXMnLCBwYXJhbXM/LndpdGhfbWVkaWNhbF9wcm9jZWR1cmVzKSA6IGh0dHBQYXJhbXNcbiAgICBodHRwUGFyYW1zID0gKHBhcmFtcz8ub3JkZXIgIT0gdW5kZWZpbmVkKT8gaHR0cFBhcmFtcy5hcHBlbmQoJ29yZGVyJywgcGFyYW1zPy5vcmRlcikgOiBodHRwUGFyYW1zXG5cbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50LCBodHRwUGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSWFwcG9pbnRtZW50QWdlbmRhVjIoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QVBJYWdlbmRhSUQoaWQpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gYHVzZXIvYWdlbmRhLyR7aWR9YDtcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJYWdlbmRhSUQoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcG9zdEFQSWFkZEFnZW5kYShwYXJhbXM6IE9iamVjdCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSAndXNlci9hZ2VuZGEvJ1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGVuZHBvaW50LCBwYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBwb3N0QVBJYWRkQWdlbmRhKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGRlbGV0ZUFQSWFkZEFnZW5kYShpZDogT2JqZWN0KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGFyYW1zID0geyBhZ2VuZGE6IGlkIH1cbiAgICBsZXQgcGF0aCA9ICd1c2VyL2FnZW5kYS9kZWxldGUnXG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoZW5kcG9pbnQsIHBhcmFtcykucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGRlbGV0ZUFQSWFkZEFnZW5kYSgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwdXRBUElhZ2VuZGEoaWQ6IGFueSwgcGFyYW1zOiBPYmplY3QpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gYHVzZXIvYWdlbmRhLyR7aWR9YDtcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KGVuZHBvaW50LCBwYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBwdXRBUElhZ2VuZGEoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QVBJYWxsb3dlZENvbnRhY3RzKCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSBgdXNlci9hbGxvd2VkQ29udGFjdHNgO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgbGV0IGh0dHBQYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xuICAgIGh0dHBQYXJhbXMgPSBodHRwUGFyYW1zLmFwcGVuZCgnd2l0aERlcGFydG1lbnRzJywgJzEnKSBcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCwgaHR0cFBhcmFtcykucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUElhbGxvd2VkQ29udGFjdHMoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICBsZXQgYWxsb3dlZCA9IHJlcy5hbGxvd2VkXG4gICAgICAgIGlmKHJlcy5hbGxvd2VkID09PSB1bmRlZmluZWQpXG4gICAgICAgIGFsbG93ZWQgPSBbXVxuICAgICAgICByZXR1cm4gYWxsb3dlZDtcblxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QVBJc3RhZmZJZChpZCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSBgc3RhZmYvJHtpZH1gO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUElzdGFmZklkKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKiBnZXQgZ2FtZXMgd2l0aCBxdWVyeSBieSBwYXJhbWV0ZXIgZGF0ZSAgKi9cbiAgZ2V0QVBJVXNlck1lc3NhZ2VzKCk6IE9ic2VydmFibGU8U2hlbGxDaGF0TW9kZWxbXT4ge1xuXG4gICAgbGV0IHBhdGggPSAnbWVzc2FnZS91c2VyJztcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuXG4gICAgICAgIC8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJVXNlck1lc3NhZ2VzKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgaWYocmVzLmxlbmd0aCA9PSAwKVxuICAgICAgICByZXR1cm4gcmVzXG4gICAgICAgIHJldHVybiByZXMubWVzc2FnZXMgYXMgU2hlbGxDaGF0TW9kZWxbXTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuICAvLyBnZXQgdGhlIGNvbXBhbnkgZGV0YWlscywgYSBzdWJzZXQgb2YgdGhlIHVzZXIgZGF0YVxuICBnZXRVc2VyU3Vic2V0RGF0YSgpOiBPYnNlcnZhYmxlPFNoZWxsQ2hhdE1vZGVsPiB7XG4gICAgbGV0IHBhdGggPSAnbWVzc2FnZS91c2VyJztcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuXG4gICAgY29uc3QgZGF0YU9ic2VydmFibGUgPSB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50KTtcblxuICAgIHJldHVybiBkYXRhT2JzZXJ2YWJsZS5waXBlKFxuICAgICAgbWFwKChqc29uUmVzcG9uc2UpID0+IHtcbiAgICAgICAgY29uc3QgZmlsdGVyZWREYXRhOiBTaGVsbENoYXRNb2RlbCA9IHtcbiAgICAgICAgICAuLi5qc29uUmVzcG9uc2UubWVzc2FnZXNcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGZpbHRlcmVkRGF0YTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuLyoqIFJlbWluZGVycyAqL1xuICBnZXRBUElyZW1pbmRlcnMoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICd1c2VyL3JlbWluZGVyJztcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJcmVtaW5kZXJzKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldEFQSXJlbWluZGVySUQoaWQpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gYHVzZXIvcmVtaW5kZXIvJHtpZH1gO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUElyZW1pbmRlcklEKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHBvc3RBUElhZGRSZW1pbmRlcihwYXJhbXM6IE9iamVjdCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSAndXNlci9yZW1pbmRlci8nXG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoZW5kcG9pbnQsIHBhcmFtcykucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIHBvc3RBUElhZGRSZW1pbmRlcigke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBkZWxldGVBUElSZW1pbmRlcihpZCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSBgdXNlci9yZW1pbmRlci8ke2lkfWA7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmRlbGV0ZShlbmRwb2ludCkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGRlbGV0ZUFQSVJlbWluZGVyKCR7cGF0aH0pIHJlczogJHtyZXN9YCwgSlNPTi5zdHJpbmdpZnkocmVzKSk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICB1cGRhdGVBUElSZW1pbmRlcihpZDogYW55LCBwYXJhbXM6IE9iamVjdCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSBgdXNlci9yZW1pbmRlci8ke2lkfWA7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChlbmRwb2ludCwgcGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gdXBkYXRlQVBJUmVtaW5kZXIoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICB1cGRhdGVBUEl1c2VyKHBhcmFtczogT2JqZWN0KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9IGB1c2VyYDtcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KGVuZHBvaW50LCBwYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSB1cGRhdGVBUElSZW1pbmRlcigke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG5cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHBvc3RBUElDb250ZW50U3RhdHVzKHBhcmFtczogT2JqZWN0KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICdjb250ZW50L3N0YXR1cydcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChlbmRwb2ludCwgcGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gcG9zdEFQSUNvbnRlbnRTdGF0dXMoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcG9zdEFQSXVzZXJSZWdpc3RlcihwYXJhbXM6IE9iamVjdCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSAnaHBjL3VzZXIvc3RvcmUnO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGVuZHBvaW50LCBwYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gcG9zdEFQSXNlbmRSZWdpc3Rlcigke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG5cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldEFQSVR5cGVEb2N1bWVudCgpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ2NlbnRlci9kb2N1bWVudFR5cGVzJztcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJVHlwZURvY3VtZW50KCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuICBcbiAgZ2V0QVBJbWVzc2FnZShpZCwgcGFyYW1zPyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSAndXNlci9tZXNzYWdlLycrIGlkXG4gICAgbGV0IGh0dHBQYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xuICAgIGh0dHBQYXJhbXMgPSBodHRwUGFyYW1zPyBodHRwUGFyYW1zLmFwcGVuZCgncGFnZScsIHBhcmFtcykgOiBodHRwUGFyYW1zXG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCwgaHR0cFBhcmFtcykucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSWVsZW1lbnRzTGlzdCgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBnZXRBUElFdmVudHMocGFyYW1zKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICdocGMvdXNlci9lcGlzb2Rlcyc7XG4gICAgbGV0IGh0dHBQYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xuICAgIGh0dHBQYXJhbXMgPSAocGFyYW1zPy5vbkRhdGUgPT09IDAgfHwgcGFyYW1zPy5vbkRhdGUgPT09IDEpID8gaHR0cFBhcmFtcy5hcHBlbmQoJ29uRGF0ZScsIHBhcmFtcz8ub25EYXRlKSA6IGh0dHBQYXJhbXNcbiAgICBodHRwUGFyYW1zID0gKHBhcmFtcz8uZnJvbV9kYXRlKSA/IGh0dHBQYXJhbXMuYXBwZW5kKCdmcm9tX2RhdGUnLCBwYXJhbXM/LmZyb21fZGF0ZSkgOiBodHRwUGFyYW1zXG4gICAgaHR0cFBhcmFtcyA9IChwYXJhbXM/LnRvX2RhdGUpID8gaHR0cFBhcmFtcy5hcHBlbmQoJ3RvX2RhdGUnLCBwYXJhbXM/LnRvX2RhdGUpIDogaHR0cFBhcmFtc1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQsIGh0dHBQYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUElnYW1lcygke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7IFxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcG9zdEFQSW1lZGljYWxQcm9jZWR1cmVzKHBhcmFtcz86IE9iamVjdCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSBgdXNlci9tZWRpY2FsUHJvY2VkdXJlc2A7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoZW5kcG9pbnQsIHBhcmFtcykucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIHBvc3RBUElkcnVnSW50YWtlKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcblxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QVBJbWVkaWNhbFByb2NlZHVyZXMyKHBhcmFtcz86IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSBgaHBjL3VzZXIvbWVkaWNhbFByb2NlZHVyZXNgO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgbGV0IGh0dHBQYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xuICAgIGh0dHBQYXJhbXMgPSAocGFyYW1zPy50b19kYXRlKSA/IGh0dHBQYXJhbXMuYXBwZW5kKCd0b19kYXRlJywgcGFyYW1zPy50b19kYXRlKSA6IGh0dHBQYXJhbXNcbiAgICBodHRwUGFyYW1zID0gKHBhcmFtcz8uZnJvbV9kYXRlKSA/IGh0dHBQYXJhbXMuYXBwZW5kKCdmcm9tX2RhdGUnLCBwYXJhbXM/LmZyb21fZGF0ZSkgOiBodHRwUGFyYW1zXG4gICAgaHR0cFBhcmFtcyA9IChwYXJhbXM/LnVzZXIpID8gaHR0cFBhcmFtcy5hcHBlbmQoJ3VzZXInLCBwYXJhbXM/LnVzZXIpIDogaHR0cFBhcmFtc1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50LCBwYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBwb3N0QVBJZHJ1Z0ludGFrZSgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG5cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHBvc3RBUElOZXh0TWVkaWNhbFByb2NlZHVyZShwYXJhbXM/OiBPYmplY3QpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gYHVzZXIvbWVkaWNhbFByb2NlZHVyZS9uZXh0YDtcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChlbmRwb2ludCwgcGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gcG9zdEFQSWRydWdJbnRha2UoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBnZXRBUEltZWRpY2FsUHJvY2VkdXJlcyhwYXJhbXM6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSBgaHBjL3VzZXIvbWVkaWNhbFByb2NlZHVyZWA7XG4gICAgbGV0IGh0dHBQYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xuICAgIGh0dHBQYXJhbXMgPSAocGFyYW1zPy5ieUVwaXNvZGUgPT09IDAgfHwgcGFyYW1zPy5ieUVwaXNvZGUgPT09IDEpID8gaHR0cFBhcmFtcy5hcHBlbmQoJ2J5RXBpc29kZScsIHBhcmFtcz8uYnlFcGlzb2RlKSA6IGh0dHBQYXJhbXNcbiAgICBodHRwUGFyYW1zID0gKHBhcmFtcz8ubWVkaWNhbF9wcm9jZWR1cmVfaWQgJiYgcGFyYW1zPy5ieUVwaXNvZGUgPT09IDApID8gaHR0cFBhcmFtcy5hcHBlbmQoJ21lZGljYWxfcHJvY2VkdXJlX2lkJywgcGFyYW1zPy5tZWRpY2FsX3Byb2NlZHVyZV9pZCkgOiBodHRwUGFyYW1zXG4gICAgaHR0cFBhcmFtcyA9IChwYXJhbXM/LmVwaXNvZGVfaWQgJiYgcGFyYW1zPy5ieUVwaXNvZGUgPT09IDEpID8gaHR0cFBhcmFtcy5hcHBlbmQoJ2VwaXNvZGVfaWQnLCBwYXJhbXM/LmVwaXNvZGVfaWQpIDogaHR0cFBhcmFtc1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQsIGh0dHBQYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBwb3N0QVBJZHJ1Z0ludGFrZSgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG5cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldEFQSXByZWV4aXN0aW5nQ29uZGl0aW9ucyhwYXJhbXM/KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICd1c2VyL3ByZWV4aXN0aW5nQ29uZGl0aW9ucydcbiAgICBsZXQgaHR0cFBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XG4gICAgaHR0cFBhcmFtcyA9IChwYXJhbXM/Lm9uRGF0ZSA9PT0gMCB8fCBwYXJhbXM/Lm9uRGF0ZSA9PT0gMSkgPyBodHRwUGFyYW1zLmFwcGVuZCgnb25EYXRlJywgcGFyYW1zPy5vbkRhdGUpIDogaHR0cFBhcmFtc1xuICAgIGh0dHBQYXJhbXMgPSAocGFyYW1zPy5mcm9tX2RhdGUpID8gaHR0cFBhcmFtcy5hcHBlbmQoJ2Zyb21fZGF0ZScsIHBhcmFtcz8uZnJvbV9kYXRlKSA6IGh0dHBQYXJhbXNcbiAgICBodHRwUGFyYW1zID0gKHBhcmFtcz8udG9fZGF0ZSkgPyBodHRwUGFyYW1zLmFwcGVuZCgndG9fZGF0ZScsIHBhcmFtcz8udG9fZGF0ZSkgOiBodHRwUGFyYW1zXG4gICAgLy9odHRwUGFyYW1zID0gKHBhcmFtcz8ucHJlZXhpc3RpbmdDb25kaXRpb25UeXBlcykgPyBodHRwUGFyYW1zLmFwcGVuZCgncHJlZXhpc3RpbmdDb25kaXRpb25UeXBlc1tdJywgcGFyYW1zPy5wcmVleGlzdGluZ0NvbmRpdGlvblR5cGVzKSA6IGh0dHBQYXJhbXNcbiAgICBpZiAocGFyYW1zPy5wcmVleGlzdGluZ0NvbmRpdGlvblR5cGVzICYmIHBhcmFtcz8ucHJlZXhpc3RpbmdDb25kaXRpb25UeXBlcz8ubGVuZ3RoKSB7XG4gICAgICBwYXJhbXMucHJlZXhpc3RpbmdDb25kaXRpb25UeXBlcy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICBodHRwUGFyYW1zID0gaHR0cFBhcmFtcy5hcHBlbmQoJ3ByZWV4aXN0aW5nQ29uZGl0aW9uVHlwZXNbXScsIGVsZW1lbnQpXG4gICAgICB9KTtcbiAgICB9XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCwgaHR0cFBhcmFtcykucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSWVsZW1lbnRzTGlzdCgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBnZXRBUElwcmVleGlzdGluZ0NvbmRpdGlvbnNUeXBlKCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSAnY2VudGVyL3ByZWV4aXN0aW5nQ29uZGl0aW9uVHlwZXMnXG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSXByZWV4aXN0aW5nQ29uZGl0aW9uc1R5cGUoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QVBJTm90aWZpY2F0aW9uc0NvdW50KCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSAndXNlci9ub3RpZmljYXRpb25zL2NvdW50JztcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJTm90aWZpY2F0aW9ucygke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBnZXRBUElOb3RpZmljYXRpb25zKHBhcmFtcz8pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ3VzZXIvbm90aWZpY2F0aW9ucyc7XG4gICAgbGV0IGh0dHBQYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xuICAgIGh0dHBQYXJhbXMgPSAocGFyYW1zPy5yZWFkKSA/IGh0dHBQYXJhbXMuYXBwZW5kKCdyZWFkJywgcGFyYW1zPy5yZWFkKSA6IGh0dHBQYXJhbXNcbiAgICBodHRwUGFyYW1zID0gKHBhcmFtcz8ud2l0aFBhZ2luYXRlID09IDEpID8gaHR0cFBhcmFtcy5hcHBlbmQoJ3dpdGhQYWdpbmF0ZScsIHBhcmFtcz8ud2l0aFBhZ2luYXRlKSA6IGh0dHBQYXJhbXNcbiAgICBodHRwUGFyYW1zID0gKHBhcmFtcz8ucGFnZSA+IDApID8gaHR0cFBhcmFtcy5hcHBlbmQoJ3BhZ2UnLCBwYXJhbXM/LnBhZ2UpIDogaHR0cFBhcmFtc1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQsIGh0dHBQYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUElOb3RpZmljYXRpb25zKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldEFQSVVzZXJJbWFnZSgpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ3VzZXIvaW1hZ2UnO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUElnYW1lcygke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwb3N0QVBJTm90aWZpY2F0aW9uUmVhZChpZCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSBgdXNlci9ub3RpZmljYXRpb24vcmVhZGA7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoZW5kcG9pbnQsIGlkKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0KGVuZHB0KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KGVuZHB0KTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHBvc3QoZW5kcHQsIGl0ZW1zKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KGVuZHB0KTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoZW5kcG9pbnQsIGl0ZW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgc2V0UHVzaE5vdGlmaWNhdGlvbihwdXNoTm90aWZpY2F0aW9uOiBhbnkpe1xuICAgIHRoaXMucHVzaE5vdGlmaWNhdGlvbiA9IHB1c2hOb3RpZmljYXRpb247XG4gIH1cblxuICBnZXRQdXNoTm90aWZpY2F0aW9uKCl7XG4gICByZXR1cm4gdGhpcy5wdXNoTm90aWZpY2F0aW9uO1xuICB9XG5cbiAgZ2V0QVBJRXhlcmNpc2VEZXRhaWwoaWQsIHBhcmFtcz8pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gYHVzZXIvZXhlcmNpc2UvJHtpZH1gO1xuICAgIGxldCBodHRwUGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcbiAgICBodHRwUGFyYW1zID0gKHBhcmFtcz8ucHJvZ3JhbWFibGVfcGxheSkgPyBodHRwUGFyYW1zLmFwcGVuZCgncHJvZ3JhbWFibGVfcGxheScsIHBhcmFtcz8ucHJvZ3JhbWFibGVfcGxheSkgOiBodHRwUGFyYW1zXG4gICAgaHR0cFBhcmFtcyA9IChwYXJhbXM/LmNoYWxsZW5nZV9pZCkgPyBodHRwUGFyYW1zLmFwcGVuZCgnY2hhbGxlbmdlX2lkJywgcGFyYW1zPy5jaGFsbGVuZ2VfaWQpIDogaHR0cFBhcmFtc1xuICAgICAvLyBBZ3JlZ2FyIGVsIHBhcsOhbWV0cm8gJ2ludGVyYWN0aW9ucydcbiAgICAgaHR0cFBhcmFtcyA9IGh0dHBQYXJhbXMuc2V0KCdpbnRlcmFjdGlvbnMnLCAnMScpO1xuXG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCwgaHR0cFBhcmFtcykucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUElFeGVyY2lzZXMoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QVBJRXhlcmNpc2VzQnlEYXRlKGZyb21fZGF0ZT8sdG9fZGF0ZT8pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ3VzZXIvZXhlcmNpc2VzL3NjaGVkdWxlZCc7XG4gICAgbGV0IGh0dHBQYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xuICAgIGh0dHBQYXJhbXMgPSBodHRwUGFyYW1zPyBodHRwUGFyYW1zLmFwcGVuZCgnZnJvbV9kYXRlJywgZnJvbV9kYXRlKSA6IGh0dHBQYXJhbXNcbiAgICBodHRwUGFyYW1zID0gaHR0cFBhcmFtcz8gaHR0cFBhcmFtcy5hcHBlbmQoJ3RvX2RhdGUnLCB0b19kYXRlKSA6IGh0dHBQYXJhbXNcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50LCBodHRwUGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSUV4ZXJjaXNlcygke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBnZXRBUElFeGVyY2lzZXMoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICd1c2VyL2V4ZXJjaXNlcyc7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUElFeGVyY2lzZXMoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QVBJQ2hhbGxlbmdlKGNoYWxsZW5nZUlkLCBwYXJhbXM/KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICd1c2VyL2NoYWxsZW5nZS8nK2NoYWxsZW5nZUlkXG5cbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSUNoYWxsZW5nZSgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwb3N0Q29tcGxldGVkRXhlcmNpY2UocGFyYW1zPzogT2JqZWN0KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9IGB2MS9wYXRpZW50L3Byb2dyYW1hYmxlLXBsYXlzL2VuZGA7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoZW5kcG9pbnQsIHBhcmFtcykucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gcG9zdEFQSWRydWdJbnRha2UoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBnZXRBUElDaGFsbGVuZ2VzKCBwYXJhbXM/KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICd1c2VyL2NoYWxsZW5nZXMnXG4gICAgbGV0IGh0dHBQYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xuXG4gICAgaWYgKHBhcmFtcz8ub25seUFjY2VwdGVkKSBodHRwUGFyYW1zID0gaHR0cFBhcmFtcy5hcHBlbmQoJ29ubHlBY2NlcHRlZCcsIHBhcmFtcy5vbmx5QWNjZXB0ZWQpO1xuICAgIFxuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQsIGh0dHBQYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJQ2hhbGxlbmdlcygke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cbiAgZ2V0QVBJQ2hhbGxlbmdlczIoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICd1c2VyL2NoYWxsZW5nZXMvZ29hbHMnXG5cbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50LCApLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJQ2hhbGxlbmdlczIoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QVBJQXBwTGF0ZXN0VmVyc2lvbih2ZXJzaW9uLCBwbGF0Zm9ybSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSAnYXBwL3ZlcnNpb25zL211c3QtdXBkYXRlP3ZlcnNpb249Jyt2ZXJzaW9uKycmcGxhdGZvcm09JytwbGF0Zm9ybTtcbiAgICAvLy8vY29uc29sZS5sb2cocGF0aCk7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcblxuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApXG4gIH1cblxuICBnZXRBUElwYXRpZW50cygpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ3VzZXIvcGF0aWVudHMnO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUElyZW1pbmRlcnMoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QVBJX1NDUF9nb2FscygpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gYHNoYXJlY2FyZXBsYW4vZ29hbHNgO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUElhZ2VuZGFJRCgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBcbiAgZ2V0QVBJX3ByZXNjcmliZWRBcHBzX0J5RGF0ZShmcm9tX2RhdGU/LHRvX2RhdGU/KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICdyZWhhYmlsaWZ5L3ByZXNjcmliZWQtYXBwcy9hY3Rpdml0aWVzL3BlbmRpbmcnO1xuICAgIGxldCBodHRwUGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcbiAgICBodHRwUGFyYW1zID0gaHR0cFBhcmFtcz8gaHR0cFBhcmFtcy5hcHBlbmQoJ2Zyb20nLCBmcm9tX2RhdGUpIDogaHR0cFBhcmFtc1xuICAgIGh0dHBQYXJhbXMgPSBodHRwUGFyYW1zPyBodHRwUGFyYW1zLmFwcGVuZCgndG8nLCB0b19kYXRlKSA6IGh0dHBQYXJhbXNcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50LCBodHRwUGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSV9wcmVzY3JpYmVkQXBwc19CeURhdGUoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QVBJYWxsb3dlZERlcGFydG1lbnRzKCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSBgdXNlci9kZXBhcnRtZW50c2A7XG4gIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50KS5waXBlKFxuICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgXG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0pXG4gICk7XG4gIH1cbiAgZ2V0QVBJZGV0YWlsRGVwYXJ0bWVudHMoaWQ6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSBgZGVwYXJ0bWVudC9zaG93LyR7aWR9YDtcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICBcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldEFQSUFuc3dlcnMoaWQpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gYHVzZXIvZm9ybS8ke2lkfS9hbnN3ZXJzL2RldGFpbD9odG1sPXRydWVgO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJQW5zd2Vycygke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBnZXRBUElBbnN3ZXJlZEZvcm0oKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9IGB1c2VyL2Zvcm1zL2Fuc3dlcmVkYDtcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIHBvc3RBUElDb250ZW50U3RhdHVzKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG5cbiAgZ2V0QVBJRGF5UGhyYXNlKCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSBgdXNlci9kYXlQaHJhc2VgO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJRGF5UGhyYXNlKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxufVxuIl19