@cdktn/cli-core 0.24.0-pre.86 → 0.24.0-pre.87
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.
|
@@ -188,7 +188,7 @@ class DependencyManager {
|
|
|
188
188
|
provider: ${constraint.simplifiedName}
|
|
189
189
|
version : ${constraint.version || "latest"}
|
|
190
190
|
language: ${this.targetLanguage}
|
|
191
|
-
|
|
191
|
+
cdktn : ${this.cdktfVersion}
|
|
192
192
|
`);
|
|
193
193
|
if (this.targetLanguage === commons_1.Language.GO &&
|
|
194
194
|
semver.lt(this.cdktfVersion, "0.12.0")) {
|
|
@@ -393,4 +393,4 @@ class DependencyManager {
|
|
|
393
393
|
}
|
|
394
394
|
}
|
|
395
395
|
exports.DependencyManager = DependencyManager;
|
|
396
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwZW5kZW5jeS1tYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9kZXBlbmRlbmNpZXMvZGVwZW5kZW5jeS1tYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsK0JBQStCO0FBQy9CLG1DQUFtQztBQUNuQyw0Q0FNd0I7QUFDeEIseUNBQXNEO0FBQ3RELGtEQUE4QztBQUM5QyxpRUFBNEQ7QUFDNUQsdURBQW1EO0FBQ25ELDZEQUs4QjtBQUM5QixpREFBa0Q7QUFDbEQsK0RBQWlFO0FBQ2pFLCtDQUFpQztBQUNqQyx3RUFBbUU7QUFDbkUsOEVBQXlFO0FBRXpFLGlGQUFpRjtBQUNwRSxRQUFBLGdCQUFnQixHQUFHLHVCQUF1QixDQUFDO0FBQzNDLFFBQUEsaUJBQWlCLEdBQUcsV0FBVyxDQUFDO0FBQzdDLFNBQVMsdUJBQXVCLENBQUMsTUFBYztJQUM3Qyx3Q0FBd0M7SUFDeEMsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQzdDLFFBQVEsT0FBTyxFQUFFLENBQUM7UUFDaEIsS0FBSyxDQUFDO1lBQ0osT0FBTyxHQUFHLHdCQUFnQixJQUFJLHlCQUFpQixJQUFJLE1BQU0sRUFBRSxDQUFDO1FBQzlELEtBQUssQ0FBQztZQUNKLE9BQU8sR0FBRyx3QkFBZ0IsSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUN6QztZQUNFLE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7QUFDSCxDQUFDO0FBRUQsTUFBYSxrQkFBa0I7SUFPN0IsbUVBQW1FO0lBQ25FLHNFQUFzRTtJQUN0RSw0R0FBNEc7SUFDNUcsWUFDRSxNQUFjLEVBQ0UsT0FBMkI7UUFBM0IsWUFBTyxHQUFQLE9BQU8sQ0FBb0I7UUFFM0MsSUFBSSxDQUFDLE1BQU0sR0FBRyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMs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QyxDQUNILENBQUM7UUFFRixNQUFNLFdBQVcsR0FBRyxJQUFJLHFEQUF3QixFQUFFLENBQUM7UUFFbkQsTUFBTSxrQkFBa0IsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQzFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsRUFBRTtZQUNyRCxNQUFNLFVBQVUsR0FDZCxrQkFBa0IsQ0FBQyxlQUFlLENBQUMsbUJBQW1CLENBQUMsQ0FBQztZQUMxRCxNQUFNLE9BQU8sR0FBRyxNQUFNLGFBQWEsQ0FBQyxrQkFBa0IsQ0FDcEQsVUFBVSxDQUFDLGNBQWMsQ0FDMUIsQ0FBQztZQUNGLE1BQU0sZUFBZSxHQUFHLE1BQU0sV0FBVyxDQUFDLHFCQUFxQixDQUM3RCxVQUFVLENBQUMsY0FBYyxDQUMxQixDQUFDO1lBRUYsT0FBTztnQkFDTCxZQUFZLEVBQUUsVUFBVSxDQUFDLGNBQWM7Z0JBQ3ZDLGtCQUFrQixFQUFFLGVBQWUsSUFBSSxVQUFVLENBQUMsT0FBTztnQkFDekQsZUFBZSxFQUFFLE9BQU87YUFDekIsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUNILENBQUM7UUFFRixPQUFPO1lBQ0wsS0FBSyxFQUFFLGtCQUFrQjtZQUN6QixRQUFRLEVBQUUscUJBQXFCO1NBQ2hDLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUE3WkQsOENBNlpDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluY1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcbmltcG9ydCB7XG4gIExhbmd1YWdlLFxuICBFcnJvcnMsXG4gIElzRXJyb3JUeXBlLFxuICBsb2dnZXIsXG4gIFRlcnJhZm9ybURlcGVuZGVuY3lDb25zdHJhaW50LFxufSBmcm9tIFwiQGNka3RuL2NvbW1vbnNcIjtcbmltcG9ydCB7IHRvUGFzY2FsQ2FzZSwgdG9TbmFrZUNhc2UgfSBmcm9tIFwiY29kZW1ha2VyXCI7XG5pbXBvcnQgeyBDZGt0ZkNvbmZpZyB9IGZyb20gXCIuLi9jZGt0Zi1jb25maWdcIjtcbmltcG9ydCB7IENka3RmQ29uZmlnTWFuYWdlciB9IGZyb20gXCIuL2Nka3RmLWNvbmZpZy1tYW5hZ2VyXCI7XG5pbXBvcnQgeyBQYWNrYWdlTWFuYWdlciB9IGZyb20gXCIuL3BhY2thZ2UtbWFuYWdlclwiO1xuaW1wb3J0IHtcbiAgZ2V0TnBtUGFja2FnZU5hbWUsXG4gIGdldFByZWJ1aWx0UHJvdmlkZXJSZXBvc2l0b3J5TmFtZSxcbiAgZ2V0UHJlYnVpbHRQcm92aWRlclZlcnNpb25JbmZvcm1hdGlvbixcbiAgZ2V0UHJlYnVpbHRQcm92aWRlclZlcnNpb25zLFxufSBmcm9tIFwiLi9wcmVidWlsdC1wcm92aWRlcnNcIjtcbmltcG9ydCB7IGdldExhdGVzdFZlcnNpb24gfSBmcm9tIFwiLi9yZWdpc3RyeS1hcGlcIjtcbmltcG9ydCB7IHZlcnNpb25NYXRjaGVzQ29uc3RyYWludCB9IGZyb20gXCIuL3ZlcnNpb24tY29uc3RyYWludHNcIjtcbmltcG9ydCAqIGFzIHNlbXZlciBmcm9tIFwic2VtdmVyXCI7XG5pbXBvcnQgeyBMb2NhbFByb3ZpZGVyVmVyc2lvbnMgfSBmcm9tIFwiLi4vbG9jYWwtcHJvdmlkZXItdmVyc2lvbnNcIjtcbmltcG9ydCB7IExvY2FsUHJvdmlkZXJDb25zdHJhaW50cyB9IGZyb20gXCIuLi9sb2NhbC1wcm92aWRlci1jb25zdHJhaW50c1wiO1xuXG4vLyByZWY6IGh0dHBzOi8vd3d3LnRlcnJhZm9ybS5pby9sYW5ndWFnZS9wcm92aWRlcnMvcmVxdWlyZW1lbnRzI3NvdXJjZS1hZGRyZXNzZXNcbmV4cG9ydCBjb25zdCBERUZBVUxUX0hPU1ROQU1FID0gXCJyZWdpc3RyeS50ZXJyYWZvcm0uaW9cIjtcbmV4cG9ydCBjb25zdCBERUZBVUxUX05BTUVTUEFDRSA9IFwiaGFzaGljb3JwXCI7XG5mdW5jdGlvbiBub3JtYWxpemVQcm92aWRlclNvdXJjZShzb3VyY2U6IHN0cmluZykge1xuICAvLyByZXR1cm5zIDxIT1NUTkFNRT4vPE5BTUVTUEFDRT4vPFRZUEU+XG4gIGNvbnN0IHNsYXNoZXMgPSBzb3VyY2Uuc3BsaXQoXCIvXCIpLmxlbmd0aCAtIDE7XG4gIHN3aXRjaCAoc2xhc2hlcykge1xuICAgIGNhc2UgMDpcbiAgICAgIHJldHVybiBgJHtERUZBVUxUX0hPU1ROQU1FfS8ke0RFRkFVTFRfTkFNRVNQQUNFfS8ke3NvdXJjZX1gO1xuICAgIGNhc2UgMTpcbiAgICAgIHJldHVybiBgJHtERUZBVUxUX0hPU1ROQU1FfS8ke3NvdXJjZX1gO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gc291cmNlO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBQcm92aWRlckNvbnN0cmFpbnQge1xuICAvKipcbiAgICogbm9ybWFsaXplZCBzb3VyY2Ugb2YgdGhlIHByb3ZpZGVyXG4gICAqIGUuZy4gXCJyZWdpc3RyeS50ZXJyYWZvcm0uaW8vaGFzaGljb3JwL2F3c1wiXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc291cmNlOiBzdHJpbmc7XG5cbiAgLy8gVE9ETzogYWRkIGV4YW1wbGVzIHRvIGNsaSBjb21tYW5kIGRlc2NyaXB0aW9uIChpLmUuID0sfj4uPiBldGMuKVxuICAvLyBpZiBubyB2ZXJzaW9uIGNvbnN0cmFpbnQgaXMgc3BlY2lmaWVkLCB3ZSBhc3N1bWUgdGhlIGxhdGVzdCB2ZXJzaW9uXG4gIC8vIGlmIHNwZWNpZmljIHZlcnNpb24gaXMgc3BlY2lmaWVkIHdpdGhvdXQgZS5nLiA9LCB3ZSBhbGxvdyBwYXRjaCBsZXZlbCBpbmNyZW1lbnRzIChlLmcuIH4+Mi4xMiBmb3IgXCIyLjEyXCIpXG4gIGNvbnN0cnVjdG9yKFxuICAgIHNvdXJjZTogc3RyaW5nLFxuICAgIHB1YmxpYyByZWFkb25seSB2ZXJzaW9uOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICkge1xuICAgIHRoaXMuc291cmNlID0gbm9ybWFsaXplUHJvdmlkZXJTb3VyY2Uoc291cmNlKTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tQ29uZmlnRW50cnkoXG4gICAgcHJvdmlkZXI6IHN0cmluZyB8IFRlcnJhZm9ybURlcGVuZGVuY3lDb25zdHJhaW50LFxuICApOiBQcm92aWRlckNvbnN0cmFpbnQge1xuICAgIGlmICh0eXBlb2YgcHJvdmlkZXIgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIGNvbnN0IFtzcmMsIHZlcnNpb25dID0gcHJvdmlkZXIuc3BsaXQoXCJAXCIpO1xuICAgICAgcmV0dXJuIG5ldyBQcm92aWRlckNvbnN0cmFpbnQoXG4gICAgICAgIHNyYy50cmltKCksXG4gICAgICAgIHZlcnNpb24gPyB2ZXJzaW9uLnRyaW0oKSA6IHVuZGVmaW5lZCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3JjID1cbiAgICAgIChwcm92aWRlci5uYW1lc3BhY2UgPyBgJHtwcm92aWRlci5uYW1lc3BhY2V9L2AgOiBcIlwiKSArXG4gICAgICAocHJvdmlkZXIuc291cmNlIHx8IHByb3ZpZGVyLm5hbWUpO1xuXG4gICAgcmV0dXJuIG5ldyBQcm92aWRlckNvbnN0cmFpbnQoc3JjLCBwcm92aWRlci52ZXJzaW9uKTtcbiAgfVxuXG4gIHB1YmxpYyBpc0Zyb21UZXJyYWZvcm1SZWdpc3RyeSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5ob3N0bmFtZSA9PT0gREVGQVVMVF9IT1NUTkFNRTtcbiAgfVxuXG4gIC8qKlxuICAgKiB0aGUgbmFtZXNwYWNlIG9mIHRoZSBwcm92aWRlclxuICAgKiBlLmcuIFwiaGFzaGljb3JwXCIgb3IgXCJrcmV1endlcmtlclwiXG4gICAqL1xuICBwdWJsaWMgZ2V0IG5hbWVzcGFjZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnNvdXJjZS5zcGxpdChcIi9cIilbMV07XG4gIH1cblxuICAvKipcbiAgICogdGhlIG5hbWUgb2YgdGhlIHByb3ZpZGVyXG4gICAqIGUuZy4gXCJhd3NcIlxuICAgKi9cbiAgcHVibGljIGdldCBuYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc291cmNlLnNwbGl0KFwiL1wiKVsyXTtcbiAgfVxuXG4gIC8qKlxuICAgKiB0aGUgaG9zdG5hbWUgb2YgdGhlIHByb3ZpZGVyXG4gICAqIGUuZy4gXCJyZWdpc3RyeS50ZXJyYWZvcm0uaW9cIlxuICAgKi9cbiAgcHVibGljIGdldCBob3N0bmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnNvdXJjZS5zcGxpdChcIi9cIilbMF07XG4gIH1cblxuICAvKipcbiAgICogcmV0dXJucyBhIHNpbXBsaWZpZWQgcHJvdmlkZXIgbmFtZSwgZHJvcHBpbmcgbmFtZXNwYWNlIGFuZCBob3N0bmFtZVxuICAgKiBpZiB0aGV5IG1hdGNoIHRoZSBkZWZhdWx0c1xuICAgKi9cbiAgcHVibGljIGdldCBzaW1wbGlmaWVkTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnNvdXJjZVxuICAgICAgLnNwbGl0KFwiL1wiKVxuICAgICAgLmZpbHRlcigocGFydCkgPT4gcGFydCAhPT0gREVGQVVMVF9IT1NUTkFNRSAmJiBwYXJ0ICE9PSBERUZBVUxUX05BTUVTUEFDRSlcbiAgICAgIC5qb2luKFwiL1wiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBjaGVja3MgaWYgdGhlIHZlcnNpb24gY29uc3RyYWludCBtYXRjaGVzIHRoZSBnaXZlbiB2ZXJzaW9uXG4gICAqIEBwYXJhbSB2ZXJzaW9uIGFuIGFjdHVhbCB2ZXJzaW9uIChlLmcuIFwiNC4xMi4xXCIpXG4gICAqIEByZXR1cm5zIHRydWUgaWYgdGhlIHZlcnNpb24gaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBjb25zdHJhaW50XG4gICAqL1xuICBwdWJsaWMgbWF0Y2hlc1ZlcnNpb24odmVyc2lvbjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMudmVyc2lvbikge1xuICAgICAgcmV0dXJuIHZlcnNpb25NYXRjaGVzQ29uc3RyYWludCh2ZXJzaW9uLCB0aGlzLnZlcnNpb24pO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHB1YmxpYyB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gYCR7dGhpcy5zb3VyY2V9JHt0aGlzLnZlcnNpb24gPyBgQCR7dGhpcy52ZXJzaW9ufWAgOiBcIlwifWA7XG4gIH1cbn1cblxuLyoqXG4gKiBtYW5hZ2VzIGRlcGVuZGVuY2llcyBvZiBhIENES1ROIHByb2plY3QgKGUuZy4gdGVycmFmb3JtIHByb3ZpZGVycylcbiAqL1xuZXhwb3J0IGNsYXNzIERlcGVuZGVuY3lNYW5hZ2VyIHtcbiAgcHJpdmF0ZSBwYWNrYWdlTWFuYWdlcjogUGFja2FnZU1hbmFnZXI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSB0YXJnZXRMYW5ndWFnZTogTGFuZ3VhZ2UsXG4gICAgcHJpdmF0ZSBjZGt0ZlZlcnNpb246IHN0cmluZyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHByb2plY3REaXJlY3Rvcnk6IHN0cmluZyxcbiAgKSB7XG4gICAgdGhpcy5wYWNrYWdlTWFuYWdlciA9IFBhY2thZ2VNYW5hZ2VyLmZvckxhbmd1YWdlKFxuICAgICAgdGFyZ2V0TGFuZ3VhZ2UsXG4gICAgICB0aGlzLnByb2plY3REaXJlY3RvcnksXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIGFkZFByb3ZpZGVyKFxuICAgIGNvbnN0cmFpbnQ6IFByb3ZpZGVyQ29uc3RyYWludCxcbiAgKTogUHJvbWlzZTx7IGFkZGVkTG9jYWxQcm92aWRlcjogYm9vbGVhbiB9PiB7XG4gICAgaWYgKGF3YWl0IHRoaXMuaGFzUHJlYnVpbHRQcm92aWRlcihjb25zdHJhaW50KSkge1xuICAgICAgYXdhaXQgdGhpcy5hZGRQcmVidWlsdFByb3ZpZGVyKGNvbnN0cmFpbnQpO1xuICAgICAgcmV0dXJuIHsgYWRkZWRMb2NhbFByb3ZpZGVyOiBmYWxzZSB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCB0aGlzLmFkZExvY2FsUHJvdmlkZXIoY29uc3RyYWludCk7XG4gICAgICByZXR1cm4geyBhZGRlZExvY2FsUHJvdmlkZXI6IHRydWUgfTtcbiAgICB9XG4gIH1cblxuICBhc3luYyB1cGdyYWRlUHJvdmlkZXIoY29uc3RyYWludDogUHJvdmlkZXJDb25zdHJhaW50KSB7XG4gICAgY29uc29sZS5sb2coYFVwZ3JhZGluZyAke2NvbnN0cmFpbnQuc2ltcGxpZmllZE5hbWV9Li4uYCk7XG4gICAgY29uc3QgY2RrdGZKc29uID0gbmV3IENka3RmQ29uZmlnTWFuYWdlcigpO1xuICAgIGNvbnN0IHByZWJ1aWx0VmVyc2lvbiA9IGF3YWl0IHRoaXMuZ2V0Q3VycmVudGx5SW5zdGFsbGVkVmVyc2lvbihjb25zdHJhaW50KTtcbiAgICBpZiAocHJlYnVpbHRWZXJzaW9uKSB7XG4gICAgICBhd2FpdCB0aGlzLnVwZ3JhZGVQcmVidWlsdFByb3ZpZGVyKGNvbnN0cmFpbnQsIHByZWJ1aWx0VmVyc2lvbik7XG4gICAgICByZXR1cm4geyBhZGRlZExvY2FsUHJvdmlkZXI6IGZhbHNlIH07XG4gICAgfVxuICAgIGlmIChhd2FpdCBjZGt0Zkpzb24uaGFzUHJvdmlkZXIoY29uc3RyYWludCkpIHtcbiAgICAgIGF3YWl0IGNka3RmSnNvbi51cGRhdGVQcm92aWRlcihjb25zdHJhaW50KTtcbiAgICAgIHJldHVybiB7IGFkZGVkTG9jYWxQcm92aWRlcjogdHJ1ZSB9O1xuICAgIH1cblxuICAgIHRocm93IEVycm9ycy5Vc2FnZShcbiAgICAgIGBUcnlpbmcgdG8gdXBncmFkZSAke2NvbnN0cmFpbnQuc2ltcGxpZmllZE5hbWV9IGJ1dCBpdCBpcyBub3QgaW5zdGFsbGVkLCBwbGVhc2UgdXNlIFwiY2RrdG4gcHJvdmlkZXIgYWRkICR7Y29uc3RyYWludC5zaW1wbGlmaWVkTmFtZX1cIiB0byBhZGQgaXQuYCxcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgZ2V0Q3VycmVudGx5SW5zdGFsbGVkVmVyc2lvbihjb25zdHJhaW50OiBQcm92aWRlckNvbnN0cmFpbnQpIHtcbiAgICBsb2dnZXIuaW5mbyhgQ2hlY2tpbmcgaWYgJHtjb25zdHJhaW50LnNpbXBsaWZpZWROYW1lfSBpcyBpbnN0YWxsZWQuLi5gKTtcbiAgICBjb25zdCBjZGt0ZlBhY2thZ2VOYW1lID0gYXdhaXQgdGhpcy50cnlHZXRQYWNrYWdlTmFtZShjb25zdHJhaW50LCBmYWxzZSk7XG4gICAgY29uc3QgY2RrdG5QYWNrYWdlTmFtZSA9IGF3YWl0IHRoaXMudHJ5R2V0UGFja2FnZU5hbWUoY29uc3RyYWludCwgdHJ1ZSk7XG5cbiAgICBpZiAoIWNka3RmUGFja2FnZU5hbWUgJiYgIWNka3RuUGFja2FnZU5hbWUpIHJldHVybjsgLy8gbm90IGF2YWlsYWJsZSBhcyBwcmUtYnVpbHQgcHJvdmlkZXIsIHNvIGNhbid0IGJlIGluc3RhbGxlZCBhcyBzdWNoXG5cbiAgICBsb2dnZXIuZGVidWcoXG4gICAgICBgRXhwZWN0aW5nIHBhY2thZ2UgJHtjZGt0ZlBhY2thZ2VOYW1lfSBvciAke2Nka3RuUGFja2FnZU5hbWV9IHRvIGJlIGluc3RhbGxlZCBpZiBwcm92aWRlciBpcyBpbnN0YWxsZWQgYXMgcHJlLWJ1aWx0IG9uZWAsXG4gICAgKTtcblxuICAgIGxldCBpbnN0YWxsZWRQYWNrYWdlcztcbiAgICB0cnkge1xuICAgICAgaW5zdGFsbGVkUGFja2FnZXMgPSBhd2FpdCB0aGlzLnBhY2thZ2VNYW5hZ2VyLmxpc3RQcm92aWRlclBhY2thZ2VzKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gbGlzdCBwYWNrYWdlczogJHtlfWApO1xuICAgIH1cblxuICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgIGBJbnN0YWxsZWQgcGFja2FnZXMgZm91bmQ6ICR7SlNPTi5zdHJpbmdpZnkoaW5zdGFsbGVkUGFja2FnZXMsIG51bGwsIDIpfWAsXG4gICAgKTtcblxuICAgIHJldHVybiBpbnN0YWxsZWRQYWNrYWdlcy5maW5kKFxuICAgICAgKHBrZykgPT4gcGtnLm5hbWUgPT09IGNka3RmUGFja2FnZU5hbWUgfHwgcGtnLm5hbWUgPT09IGNka3RuUGFja2FnZU5hbWUsXG4gICAgKT8udmVyc2lvbjtcbiAgfVxuXG4gIGFzeW5jIHVwZ3JhZGVQcmVidWlsdFByb3ZpZGVyKFxuICAgIGNvbnN0cmFpbnQ6IFByb3ZpZGVyQ29uc3RyYWludCxcbiAgICBjdXJyZW50VmVyc2lvbjogc3RyaW5nLFxuICApIHtcbiAgICBsb2dnZXIuZGVidWcoXG4gICAgICBgU2VhcmNoaW5nIGZvciBsYXRlc3QgbWF0Y2hpbmcgdmVyc2lvbiBvZiAke2NvbnN0cmFpbnQuc2ltcGxpZmllZE5hbWV9YCxcbiAgICApO1xuXG4gICAgY29uc3QgeyBuYW1lLCB2ZXJzaW9uIH0gPSBhd2FpdCB0aGlzLmdldE1hdGNoaW5nUHJvdmlkZXJWZXJzaW9uKGNvbnN0cmFpbnQpO1xuXG4gICAgbG9nZ2VyLmRlYnVnKGBGb3VuZCBwYWNrYWdlICR7bmFtZX1AJHt2ZXJzaW9ufWApO1xuICAgIGlmICh2ZXJzaW9uICE9PSBjdXJyZW50VmVyc2lvbikge1xuICAgICAgYXdhaXQgdGhpcy5wYWNrYWdlTWFuYWdlci5hZGRQYWNrYWdlKG5hbWUsIHZlcnNpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgYFRoZSBsYXRlc3QgdmVyc2lvbiBvZiAke25hbWV9IGlzIGFscmVhZHkgaW5zdGFsbGVkOiAke3ZlcnNpb259YCxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgaGFzUHJlYnVpbHRQcm92aWRlcihjb25zdHJhaW50OiBQcm92aWRlckNvbnN0cmFpbnQpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBsb2dnZXIuZGVidWcoXG4gICAgICBgZGV0ZXJtaW5pbmcgd2hldGhlciBwcmUtYnVpbHQgcHJvdmlkZXIgZXhpc3RzIGZvciAke2NvbnN0cmFpbnQuc291cmNlfSB3aXRoIHZlcnNpb24gY29uc3RyYWludCAke2NvbnN0cmFpbnQudmVyc2lvbn0gYW5kIGNka3RmIHZlcnNpb24gJHt0aGlzLmNka3RmVmVyc2lvbn1gLFxuICAgICk7XG5cbiAgICBsb2dnZXIuaW5mbyhgQ2hlY2tpbmcgd2hldGhlciBwcmUtYnVpbHQgcHJvdmlkZXIgZXhpc3RzIGZvciB0aGUgZm9sbG93aW5nIGNvbnN0cmFpbnRzOlxuICBwcm92aWRlcjogJHtjb25zdHJhaW50LnNpbXBsaWZpZWROYW1lfVxuICB2ZXJzaW9uIDogJHtjb25zdHJhaW50LnZlcnNpb24gfHwgXCJsYXRlc3RcIn1cbiAgbGFuZ3VhZ2U6ICR7dGhpcy50YXJnZXRMYW5ndWFnZX1cbiAgY2RrdGYgICA6ICR7dGhpcy5jZGt0ZlZlcnNpb259XG5gKTtcblxuICAgIGlmIChcbiAgICAgIHRoaXMudGFyZ2V0TGFuZ3VhZ2UgPT09IExhbmd1YWdlLkdPICYmXG4gICAgICBzZW12ZXIubHQodGhpcy5jZGt0ZlZlcnNpb24sIFwiMC4xMi4wXCIpXG4gICAgKSB7XG4gICAgICBsb2dnZXIuaW5mbyhcbiAgICAgICAgYEJlZm9yZSBDREtURiAwLjEyLjAgdGhlcmUgd2VyZSBubyBwcmUtYnVpbHQgcHJvdmlkZXJzIHB1Ymxpc2hlZCBmb3IgR28uYCxcbiAgICAgICk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgdiA9IGF3YWl0IGdldFByZWJ1aWx0UHJvdmlkZXJWZXJzaW9ucyhjb25zdHJhaW50LCB0aGlzLmNka3RmVmVyc2lvbik7XG4gICAgY29uc3QgZXhpc3RzID0gdiAhPT0gbnVsbDtcblxuICAgIGlmIChleGlzdHMpIHtcbiAgICAgIGxvZ2dlci5pbmZvKGBGb3VuZCBwcmUtYnVpbHQgcHJvdmlkZXIuYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZ2dlci5pbmZvKFxuICAgICAgICBgUHJlLWJ1aWx0IHByb3ZpZGVyIGRvZXMgbm90IGV4aXN0IGZvciB0aGUgZ2l2ZW4gY29uc3RyYWludHMuYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGV4aXN0cztcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdHJ5R2V0UGFja2FnZU5hbWUoXG4gICAgY29uc3RyYWludDogUHJvdmlkZXJDb25zdHJhaW50LFxuICAgIHVzZUNka3RuOiBib29sZWFuLFxuICApOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IG5wbVBhY2thZ2VOYW1lID0gYXdhaXQgZ2V0TnBtUGFja2FnZU5hbWUoY29uc3RyYWludCwgdXNlQ2RrdG4pO1xuXG4gICAgaWYgKCFucG1QYWNrYWdlTmFtZSkgcmV0dXJuO1xuXG4gICAgcmV0dXJuIHRoaXMudHJ5R2V0TGFuZ3VhZ2VQYWNrYWdlTmFtZShucG1QYWNrYWdlTmFtZSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHRyeUdldExhbmd1YWdlUGFja2FnZU5hbWUoXG4gICAgbnBtUGFja2FnZU5hbWU6IHN0cmluZyxcbiAgKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgICBjb25zdCBwcmVidWlsdFByb3ZpZGVyUmVwb3NpdG9yeSA9XG4gICAgICBhd2FpdCBnZXRQcmVidWlsdFByb3ZpZGVyUmVwb3NpdG9yeU5hbWUobnBtUGFja2FnZU5hbWUpO1xuXG4gICAgcmV0dXJuIHRoaXMuY29udmVydFBhY2thZ2VOYW1lKFxuICAgICAgbnBtUGFja2FnZU5hbWUsXG4gICAgICBwcmVidWlsdFByb3ZpZGVyUmVwb3NpdG9yeSxcbiAgICAgIG5wbVBhY2thZ2VOYW1lLnN0YXJ0c1dpdGgoXCJAY2RrdG5cIiksXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIGdldE1hdGNoaW5nUHJvdmlkZXJWZXJzaW9uKGNvbnN0cmFpbnQ6IFByb3ZpZGVyQ29uc3RyYWludCkge1xuICAgIGNvbnN0IHByZWJ1aWx0UHJvdmlkZXJOcG1WZXJzaW9ucyA9IGF3YWl0IGdldFByZWJ1aWx0UHJvdmlkZXJWZXJzaW9ucyhcbiAgICAgIGNvbnN0cmFpbnQsXG4gICAgICB0aGlzLmNka3RmVmVyc2lvbixcbiAgICApO1xuICAgIGlmICghcHJlYnVpbHRQcm92aWRlck5wbVZlcnNpb25zKSB7XG4gICAgICB0aHJvdyBFcnJvcnMuVXNhZ2UoXG4gICAgICAgIGBObyBwcmUtYnVpbHQgcHJvdmlkZXIgZm91bmQgZm9yICR7Y29uc3RyYWludC5zb3VyY2V9IHdpdGggdmVyc2lvbiBjb25zdHJhaW50ICR7Y29uc3RyYWludC52ZXJzaW9ufSBhbmQgY2RrdGYgdmVyc2lvbiAke3RoaXMuY2RrdGZWZXJzaW9ufWAsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHBhY2thZ2VWZXJzaW9uID0gYXdhaXQgdGhpcy5nZXRMYW5ndWFnZVNwZWNpZmljUGFja2FnZVZlcnNpb24oXG4gICAgICBwcmVidWlsdFByb3ZpZGVyTnBtVmVyc2lvbnMsXG4gICAgKTtcblxuICAgIGlmICghcGFja2FnZVZlcnNpb24pIHtcbiAgICAgIHRocm93IEVycm9ycy5Vc2FnZShcbiAgICAgICAgYE5vIHByZS1idWlsdCBwcm92aWRlciBmb3VuZCBmb3IgJHtjb25zdHJhaW50LnNvdXJjZX0gd2l0aCB2ZXJzaW9uIGNvbnN0cmFpbnQgJHtjb25zdHJhaW50LnZlcnNpb259IGFuZCBjZGt0ZiB2ZXJzaW9uICR7dGhpcy5jZGt0ZlZlcnNpb259IGZvciBsYW5ndWFnZSAke3RoaXMudGFyZ2V0TGFuZ3VhZ2V9LmAsXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBwYWNrYWdlVmVyc2lvbjtcbiAgfVxuXG4gIGFzeW5jIGFkZFByZWJ1aWx0UHJvdmlkZXIoY29uc3RyYWludDogUHJvdmlkZXJDb25zdHJhaW50LCBzaWxlbnQgPSBmYWxzZSkge1xuICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgIGBhZGRpbmcgcHJlLWJ1aWx0IHByb3ZpZGVyICR7Y29uc3RyYWludC5zb3VyY2V9IHdpdGggdmVyc2lvbiBjb25zdHJhaW50ICR7Y29uc3RyYWludC52ZXJzaW9ufSBmb3IgY2RrdGYgdmVyc2lvbiAke3RoaXMuY2RrdGZWZXJzaW9ufWAsXG4gICAgKTtcblxuICAgIGNvbnN0IHsgbmFtZSwgdmVyc2lvbiB9ID0gYXdhaXQgdGhpcy5nZXRNYXRjaGluZ1Byb3ZpZGVyVmVyc2lvbihjb25zdHJhaW50KTtcbiAgICBhd2FpdCB0aGlzLnBhY2thZ2VNYW5hZ2VyLmFkZFBhY2thZ2UobmFtZSwgdmVyc2lvbiwgc2lsZW50KTtcblxuICAgIC8vIFRPRE86IG1vcmUgZGVidWcgbG9nc1xuICB9XG5cbiAgLy8gVGhlIHZlcnNpb24gd2UgdXNlIGZvciBucG0gbWlnaHQgZGlmZmVyIGZyb20gb3RoZXIgcmVnaXN0cmllc1xuICAvLyBUaGlzIGhhcHBlbnMgbW9zdGx5IGluIGNhc2VzIHdoZXJlIGEgcHJvdmlkZXIgdXBkYXRlIGZhaWxlZCB0byBwdWJsaXNoIHRvIG9uZSBvZiB0aGUgcmVnaXN0cmllc1xuICAvLyBJbiB0aGF0IGNhc2Ugd2UgdXNlIHRoZSBsYXRlc3QgdmVyc2lvbiB0aGF0IHdhcyBwdWJsaXNoZWQgc3VjY2Vzc2Z1bGx5IGFuZCB3b3JrcyB3aXRoIHRoZSBjdXJyZW50IGNka3RmIHJlbGVhc2VcbiAgcHJpdmF0ZSBhc3luYyBnZXRMYW5ndWFnZVNwZWNpZmljUGFja2FnZVZlcnNpb24oXG4gICAgcHJlYnVpbHRQcm92aWRlck5wbVZlcnNpb25zOiB7IG5hbWU6IHN0cmluZzsgdmVyc2lvbjogc3RyaW5nIH1bXSxcbiAgKTogUHJvbWlzZTx7IG5hbWU6IHN0cmluZzsgdmVyc2lvbjogc3RyaW5nIH0gfCBudWxsPiB7XG4gICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgXCJGb3VuZCBwb3NzaWJseSBtYXRjaGluZyB2ZXJzaW9ucyAocmVsZWFzZWQgb24gbnBtKTogXCIsXG4gICAgICBwcmVidWlsdFByb3ZpZGVyTnBtVmVyc2lvbnMsXG4gICAgKTtcbiAgICBsb2dnZXIuZGVidWcoXG4gICAgICBcIlNlYXJjaGluZyB0aHJvdWdoIHBhY2thZ2UgbWFuYWdlciB0byBmaW5kIGxhdGVzdCBhdmFpbGFibGUgdmVyc2lvbiBmb3IgZ2l2ZW4gbGFuZ3VhZ2VcIixcbiAgICApO1xuXG4gICAgZm9yIChjb25zdCB7IG5hbWUsIHZlcnNpb24gfSBvZiBwcmVidWlsdFByb3ZpZGVyTnBtVmVyc2lvbnMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGxhbmd1YWdlUGFja2FnZU5hbWUgPSBhd2FpdCB0aGlzLnRyeUdldExhbmd1YWdlUGFja2FnZU5hbWUobmFtZSk7XG4gICAgICAgIGlmICghbGFuZ3VhZ2VQYWNrYWdlTmFtZSkgY29udGludWU7XG5cbiAgICAgICAgY29uc3QgaXNBdmFpbGFibGUgPSBhd2FpdCB0aGlzLnBhY2thZ2VNYW5hZ2VyLmlzTnBtVmVyc2lvbkF2YWlsYWJsZShcbiAgICAgICAgICBsYW5ndWFnZVBhY2thZ2VOYW1lLFxuICAgICAgICAgIHZlcnNpb24sXG4gICAgICAgICk7XG4gICAgICAgIGlmIChpc0F2YWlsYWJsZSkge1xuICAgICAgICAgIHJldHVybiB7IG5hbWU6IGxhbmd1YWdlUGFja2FnZU5hbWUsIHZlcnNpb24gfTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmIChJc0Vycm9yVHlwZShlcnIsIFwiRXh0ZXJuYWxcIikpIHtcbiAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cbiAgICAgICAgbG9nZ2VyLmluZm8oXG4gICAgICAgICAgYENvdWxkIG5vdCBmaW5kIHZlcnNpb24gJHt2ZXJzaW9ufSBmb3IgcGFja2FnZSAke25hbWV9OiAnJHtlcnJ9Jy4gU2tpcHBpbmcuLi5gLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGFzeW5jIGFkZExvY2FsUHJvdmlkZXIoY29uc3RyYWludDogUHJvdmlkZXJDb25zdHJhaW50KSB7XG4gICAgbG9nZ2VyLmluZm8oXG4gICAgICBgQWRkaW5nIGxvY2FsIHByb3ZpZGVyICR7Y29uc3RyYWludC5zb3VyY2V9IHdpdGggdmVyc2lvbiBjb25zdHJhaW50ICR7Y29uc3RyYWludC52ZXJzaW9ufSB0byBjZGt0Zi5qc29uYCxcbiAgICApO1xuXG4gICAgaWYgKCFjb25zdHJhaW50LnZlcnNpb24gJiYgY29uc3RyYWludC5pc0Zyb21UZXJyYWZvcm1SZWdpc3RyeSgpKSB7XG4gICAgICBjb25zdCB2ID0gYXdhaXQgZ2V0TGF0ZXN0VmVyc2lvbihjb25zdHJhaW50KTtcbiAgICAgIGlmICh2KSB7XG4gICAgICAgIGNvbnN0cmFpbnQgPSBuZXcgUHJvdmlkZXJDb25zdHJhaW50KFxuICAgICAgICAgIGNvbnN0cmFpbnQuc291cmNlLFxuICAgICAgICAgIC8vIFwiMS4zLjJcIiAtPiBcIn4+IDEuM1wiXG4gICAgICAgICAgYH4+ICR7di5zcGxpdChcIi5cIikuc2xpY2UoMCwgMikuam9pbihcIi5cIil9YCxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IEVycm9ycy5Vc2FnZShcbiAgICAgICAgICBgQ291bGQgbm90IGZpbmQgYSB2ZXJzaW9uIGZvciB0aGUgcHJvdmlkZXIgJyR7Y29uc3RyYWludH0nIGluIHRoZSBwdWJsaWMgcmVnaXN0cnkuIFRoaXMgY291bGQgYmUgZHVlIHRvIGEgdHlwbywgcGxlYXNlIHRha2UgYSBsb29rIGF0IGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL2Jyb3dzZS9wcm92aWRlcnMgdG8gZmluZCBhbGwgc3VwcG9ydGVkIHByb3ZpZGVycy5gLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGF3YWl0IG5ldyBDZGt0ZkNvbmZpZ01hbmFnZXIoKS5hZGRQcm92aWRlcihjb25zdHJhaW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBhbiBOUE0gcGFja2FnZSBuYW1lIG9mIGEgcHJlLWJ1aWx0IHByb3ZpZGVyIHBhY2thZ2UgdG8gdGhlIG5hbWUgaW4gdGhlIHRhcmdldCBsYW5ndWFnZVxuICAgKi9cbiAgcHJpdmF0ZSBjb252ZXJ0UGFja2FnZU5hbWUoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHJlcG9zaXRvcnk6IHN0cmluZyxcbiAgICB1c2VDZGt0bjogYm9vbGVhbixcbiAgKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdXNlQ2RrdG5cbiAgICAgID8gdGhpcy5jb252ZXJ0UGFja2FnZU5hbWVDZGt0bihuYW1lLCByZXBvc2l0b3J5KVxuICAgICAgOiB0aGlzLmNvbnZlcnRQYWNrYWdlTmFtZUNka3RmKG5hbWUsIHJlcG9zaXRvcnkpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIGFuIE5QTSBwYWNrYWdlIG5hbWUgb2YgYSBwcmUtYnVpbHQgcHJvdmlkZXIgcGFja2FnZSB0byB0aGUgbmFtZSBpbiB0aGUgdGFyZ2V0IGxhbmd1YWdlXG4gICAqL1xuICBwcml2YXRlIGNvbnZlcnRQYWNrYWdlTmFtZUNka3RmKG5hbWU6IHN0cmluZywgcmVwb3NpdG9yeTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBwcm92aWRlck5hbWUgPSBuYW1lLnJlcGxhY2UoXCJAY2RrdGYvcHJvdmlkZXItXCIsIFwiXCIpO1xuICAgIHN3aXRjaCAodGhpcy50YXJnZXRMYW5ndWFnZSkge1xuICAgICAgY2FzZSBMYW5ndWFnZS5HTzogLy8gZS5nLiBnaXRodWIuY29tL2Nka3RmL2Nka3RmLXByb3ZpZGVyLW9wZW50ZWxla29tY2xvdWQtZ28vb3BlbnRlbGVrb21jbG91ZFxuICAgICAgICBpZiAocmVwb3NpdG9yeSkge1xuICAgICAgICAgIHJldHVybiBgJHtyZXBvc2l0b3J5fS1nby8ke3Byb3ZpZGVyTmFtZX1gO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGBnaXRodWIuY29tL2Nka3RmL2Nka3RmLXByb3ZpZGVyLSR7cHJvdmlkZXJOYW1lfS1nby8ke3Byb3ZpZGVyTmFtZX1gO1xuICAgICAgY2FzZSBMYW5ndWFnZS5UWVBFU0NSSVBUOiAvLyBlLmcuIEBjZGt0Zi9wcm92aWRlci1yYW5kb21cbiAgICAgICAgcmV0dXJuIG5hbWU7IC8vIGFscmVhZHkgdGhlIGNvcnJlY3QgbmFtZVxuICAgICAgY2FzZSBMYW5ndWFnZS5DU0hBUlA6IC8vIGUuZy4gSGFzaGlDb3JwLkNka3RmLlByb3ZpZGVycy5PcGVudGVsZWtvbWNsb3VkXG4gICAgICAgIHJldHVybiBgSGFzaGlDb3JwLkNka3RmLlByb3ZpZGVycy5gICsgdG9QYXNjYWxDYXNlKHByb3ZpZGVyTmFtZSk7XG4gICAgICBjYXNlIExhbmd1YWdlLkpBVkE6IC8vIGUuZy4gY29tLmhhc2hpY29ycC5vcGVudGVsZWtvbWNsb3VkXG4gICAgICAgIHJldHVybiBgY29tLmhhc2hpY29ycC5jZGt0Zi1wcm92aWRlci0ke3Byb3ZpZGVyTmFtZX1gO1xuICAgICAgY2FzZSBMYW5ndWFnZS5QWVRIT046IC8vIGUuZy4gY2RrdGYtY2RrdGYtcHJvdmlkZXItb3BlbnRlbGVrb21jbG91ZFxuICAgICAgICByZXR1cm4gYGNka3RmLWNka3RmLXByb3ZpZGVyLSR7cHJvdmlkZXJOYW1lfWA7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYGNvbnZlcnRpbmcgcGFja2FnZSBuYW1lIGZvciBsYW5ndWFnZSAke3RoaXMudGFyZ2V0TGFuZ3VhZ2V9IG5vdCBpbXBsZW1lbnRlZCB5ZXRgLFxuICAgICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBhbiBOUE0gcGFja2FnZSBuYW1lIG9mIGEgcHJlLWJ1aWx0IHByb3ZpZGVyIHBhY2thZ2UgdG8gdGhlIG5hbWUgaW4gdGhlIHRhcmdldCBsYW5ndWFnZVxuICAgKi9cbiAgcHJpdmF0ZSBjb252ZXJ0UGFja2FnZU5hbWVDZGt0bihcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgcmVwb3NpdG9yeTogc3RyaW5nLFxuICApOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHByb3ZpZGVyTmFtZSA9IG5hbWUucmVwbGFjZShcIkBjZGt0bi9wcm92aWRlci1cIiwgXCJcIik7XG4gICAgc3dpdGNoICh0aGlzLnRhcmdldExhbmd1YWdlKSB7XG4gICAgICBjYXNlIExhbmd1YWdlLkdPOiAvLyBlLmcuIGdpdGh1Yi5jb20vY2RrdGYvY2RrdGYtcHJvdmlkZXItb3BlbnRlbGVrb21jbG91ZC1nby9vcGVudGVsZWtvbWNsb3VkXG4gICAgICAgIGlmIChyZXBvc2l0b3J5KSB7XG4gICAgICAgICAgcmV0dXJuIGAke3JlcG9zaXRvcnl9LWdvLyR7cHJvdmlkZXJOYW1lfWA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYGdpdGh1Yi5jb20vY2RrdG4taW8vY2RrdG4tcHJvdmlkZXItJHtwcm92aWRlck5hbWV9LWdvLyR7cHJvdmlkZXJOYW1lfWA7XG4gICAgICBjYXNlIExhbmd1YWdlLlRZUEVTQ1JJUFQ6IC8vIGUuZy4gQGNka3RmL3Byb3ZpZGVyLXJhbmRvbVxuICAgICAgICByZXR1cm4gbmFtZTsgLy8gYWxyZWFkeSB0aGUgY29ycmVjdCBuYW1lXG4gICAgICBjYXNlIExhbmd1YWdlLkNTSEFSUDogLy8gZS5nLiBIYXNoaUNvcnAuQ2RrdGYuUHJvdmlkZXJzLk9wZW50ZWxla29tY2xvdWRcbiAgICAgICAgcmV0dXJuIGBJby5DZGt0bi5Qcm92aWRlcnMuYCArIHRvUGFzY2FsQ2FzZShwcm92aWRlck5hbWUpO1xuICAgICAgY2FzZSBMYW5ndWFnZS5KQVZBOiAvLyBlLmcuIGNvbS5oYXNoaWNvcnAub3BlbnRlbGVrb21jbG91ZFxuICAgICAgICByZXR1cm4gYGlvLmNka3RuLmNka3RuLXByb3ZpZGVyLSR7cHJvdmlkZXJOYW1lfWA7XG4gICAgICBjYXNlIExhbmd1YWdlLlBZVEhPTjogLy8gZS5nLiBjZGt0Zi1jZGt0Zi1wcm92aWRlci1vcGVudGVsZWtvbWNsb3VkXG4gICAgICAgIHJldHVybiBgY2RrdG4tcHJvdmlkZXItJHtwcm92aWRlck5hbWV9YDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgY29udmVydGluZyBwYWNrYWdlIG5hbWUgZm9yIGxhbmd1YWdlICR7dGhpcy50YXJnZXRMYW5ndWFnZX0gbm90IGltcGxlbWVudGVkIHlldGAsXG4gICAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIGFuIHBhY2thZ2UgbmFtZSBvZiBhIHByZS1idWlsdCBwcm92aWRlciBwYWNrYWdlIGluIHRhcmdldCBsYW5ndWFnZSB0byB0aGUgbmFtZSBpbiBucG1cbiAgICogSW52ZXJzZSBvZjogYGNvbnZlcnRQYWNrYWdlTmFtZWBcbiAgICovXG4gIHByaXZhdGUgY29udmVydEZyb21QYWNrYWdlTmFtZVRvTnBtKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgcmVnZXhlcyA9IHtcbiAgICAgIFtMYW5ndWFnZS5HT106XG4gICAgICAgIC9naXRodWIuY29tXFwvKD86Y2RrdGZ8aGFzaGljb3JwfGNka3RuLWlvKVxcL2Nka3QoW2ZuXSktcHJvdmlkZXItKC4rKS1nb1xcLy9pLFxuICAgICAgW0xhbmd1YWdlLlRZUEVTQ1JJUFRdOiAvKC4rKS9pLFxuICAgICAgW0xhbmd1YWdlLkNTSEFSUF06IC8oPzpIYXNoaUNvcnB8SW8pXFwuQ2RrdChbZm5dKVxcLlByb3ZpZGVyc1xcLiguKykvaSxcbiAgICAgIFtMYW5ndWFnZS5KQVZBXTpcbiAgICAgICAgLyg/OmNvbVxcLmhhc2hpY29ycHxpb1xcLmNka3RuKVxcLmNka3QoW2ZuXSktcHJvdmlkZXItKC4rKS9pLFxuICAgICAgW0xhbmd1YWdlLlBZVEhPTl06IC8oPzpjZGt0Zi0pP2Nka3QoW2ZuXSktcHJvdmlkZXItKC4rKS9pLFxuICAgIH07XG4gICAgY29uc3QgcmVnZXggPSByZWdleGVzW3RoaXMudGFyZ2V0TGFuZ3VhZ2VdO1xuICAgIGlmICghcmVnZXgpIHtcbiAgICAgIHRocm93IEVycm9ycy5Vc2FnZShcIkxhbmd1YWdlIG5vdCBzdXBwb3J0ZWQgZm9yIHByZS1idWlsdCBwcm92aWRlcnNcIik7XG4gICAgfVxuXG4gICAgY29uc3QgbWF0Y2ggPSByZWdleC5leGVjKG5hbWUpO1xuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUGFja2FnZSBuYW1lIGlzIG5vdCBpbiBleHBlY3RlZCBmb3JtYXQ6ICR7bmFtZX1gKTtcbiAgICB9XG5cbiAgICBjb25zdCBucG1QYWNrYWdlUHJlZml4ID0gYEBjZGt0JHttYXRjaFsxXX0vcHJvdmlkZXItYDtcblxuICAgIHN3aXRjaCAodGhpcy50YXJnZXRMYW5ndWFnZSkge1xuICAgICAgY2FzZSBMYW5ndWFnZS5HTzogLy8gZS5nLiBnaXRodWIuY29tL2Nka3RmL2Nka3RmLXByb3ZpZGVyLW9wZW50ZWxla29tY2xvdWQtZ28vb3BlbnRlbGVrb21jbG91ZFxuICAgICAgICByZXR1cm4gbnBtUGFja2FnZVByZWZpeCArIG1hdGNoWzJdO1xuICAgICAgY2FzZSBMYW5ndWFnZS5UWVBFU0NSSVBUOiAvLyBlLmcuIEBjZGt0Zi9wcm92aWRlci1yYW5kb21cbiAgICAgICAgcmV0dXJuIG1hdGNoWzFdOyAvLyBhbHJlYWR5IHRoZSBjb3JyZWN0IG5hbWVcbiAgICAgIGNhc2UgTGFuZ3VhZ2UuQ1NIQVJQOiAvLyBlLmcuIEhhc2hpQ29ycC5DZGt0Zi5Qcm92aWRlcnMuT3BlbnRlbGVrb21jbG91ZFxuICAgICAgICByZXR1cm4gbnBtUGFja2FnZVByZWZpeCArIHRvU25ha2VDYXNlKG1hdGNoWzJdKTtcbiAgICAgIGNhc2UgTGFuZ3VhZ2UuSkFWQTogLy8gZS5nLiBjb20uaGFzaGljb3JwLm9wZW50ZWxla29tY2xvdWRcbiAgICAgICAgcmV0dXJuIG5wbVBhY2thZ2VQcmVmaXggKyBtYXRjaFsyXTtcbiAgICAgIGNhc2UgTGFuZ3VhZ2UuUFlUSE9OOiAvLyBlLmcuIGNka3RmLWNka3RmLXByb3ZpZGVyLW9wZW50ZWxla29tY2xvdWRcbiAgICAgICAgcmV0dXJuIG5wbVBhY2thZ2VQcmVmaXggKyBtYXRjaFsyXTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgY29udmVydGluZyBwYWNrYWdlIG5hbWUgZm9yIGxhbmd1YWdlICR7dGhpcy50YXJnZXRMYW5ndWFnZX0gbm90IGltcGxlbWVudGVkIHlldGAsXG4gICAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGFsbFByb3ZpZGVycygpIHtcbiAgICBjb25zdCBjZGt0Zkpzb24gPSBDZGt0ZkNvbmZpZy5yZWFkKCk7XG4gICAgY29uc3QgbG9jYWxWZXJzaW9ucyA9IG5ldyBMb2NhbFByb3ZpZGVyVmVyc2lvbnMoKTtcblxuICAgIGNvbnN0IGxvY2FsUHJvdmlkZXJDb25maWdzID0gY2RrdGZKc29uLnRlcnJhZm9ybVByb3ZpZGVycztcbiAgICBjb25zdCBwcmVidWlsdFByb3ZpZGVyQ29uZmlncyA9XG4gICAgICBhd2FpdCB0aGlzLnBhY2thZ2VNYW5hZ2VyLmxpc3RQcm92aWRlclBhY2thZ2VzKCk7XG5cbiAgICBjb25zdCBwcmVidWlsdFByb3ZpZGVyc0luZm8gPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIHByZWJ1aWx0UHJvdmlkZXJDb25maWdzLm1hcChhc3luYyAocHJlYnVpbHRQcm92aWRlckNvbmZpZykgPT4ge1xuICAgICAgICBjb25zdCBwYWNrYWdlTmFtZSA9IHRoaXMuY29udmVydEZyb21QYWNrYWdlTmFtZVRvTnBtKFxuICAgICAgICAgIHByZWJ1aWx0UHJvdmlkZXJDb25maWcubmFtZSxcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCBwcm92aWRlckluZm9ybWF0aW9uID0gYXdhaXQgZ2V0UHJlYnVpbHRQcm92aWRlclZlcnNpb25JbmZvcm1hdGlvbihcbiAgICAgICAgICBwYWNrYWdlTmFtZSxcbiAgICAgICAgICBwcmVidWlsdFByb3ZpZGVyQ29uZmlnLnZlcnNpb24sXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5wcm92aWRlckluZm9ybWF0aW9uLFxuICAgICAgICAgIHBhY2thZ2VOYW1lOiBwcmVidWlsdFByb3ZpZGVyQ29uZmlnLm5hbWUsXG4gICAgICAgIH07XG4gICAgICB9KSxcbiAgICApO1xuXG4gICAgY29uc3QgY29uc3RyYWludHMgPSBuZXcgTG9jYWxQcm92aWRlckNvbnN0cmFpbnRzKCk7XG5cbiAgICBjb25zdCBsb2NhbFByb3ZpZGVyc0luZm8gPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIGxvY2FsUHJvdmlkZXJDb25maWdzLm1hcChhc3luYyAobG9jYWxQcm92aWRlckNvbmZpZykgPT4ge1xuICAgICAgICBjb25zdCBjb25zdHJhaW50ID1cbiAgICAgICAgICBQcm92aWRlckNvbnN0cmFpbnQuZnJvbUNvbmZpZ0VudHJ5KGxvY2FsUHJvdmlkZXJDb25maWcpO1xuICAgICAgICBjb25zdCB2ZXJzaW9uID0gYXdhaXQgbG9jYWxWZXJzaW9ucy52ZXJzaW9uRm9yUHJvdmlkZXIoXG4gICAgICAgICAgY29uc3RyYWludC5zaW1wbGlmaWVkTmFtZSxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgY29uc3RyYWludFZhbHVlID0gYXdhaXQgY29uc3RyYWludHMuY29uc3RyYWludEZvclByb3ZpZGVyKFxuICAgICAgICAgIGNvbnN0cmFpbnQuc2ltcGxpZmllZE5hbWUsXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBwcm92aWRlck5hbWU6IGNvbnN0cmFpbnQuc2ltcGxpZmllZE5hbWUsXG4gICAgICAgICAgcHJvdmlkZXJDb25zdHJhaW50OiBjb25zdHJhaW50VmFsdWUgfHwgY29uc3RyYWludC52ZXJzaW9uLFxuICAgICAgICAgIHByb3ZpZGVyVmVyc2lvbjogdmVyc2lvbixcbiAgICAgICAgfTtcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgbG9jYWw6IGxvY2FsUHJvdmlkZXJzSW5mbyxcbiAgICAgIHByZWJ1aWx0OiBwcmVidWlsdFByb3ZpZGVyc0luZm8sXG4gICAgfTtcbiAgfVxufVxuIl19
|
|
396
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwZW5kZW5jeS1tYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9kZXBlbmRlbmNpZXMvZGVwZW5kZW5jeS1tYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsK0JBQStCO0FBQy9CLG1DQUFtQztBQUNuQyw0Q0FNd0I7QUFDeEIseUNBQXNEO0FBQ3RELGtEQUE4QztBQUM5QyxpRUFBNEQ7QUFDNUQsdURBQW1EO0FBQ25ELDZEQUs4QjtBQUM5QixpREFBa0Q7QUFDbEQsK0RBQWlFO0FBQ2pFLCtDQUFpQztBQUNqQyx3RUFBbUU7QUFDbkUsOEVBQXlFO0FBRXpFLGlGQUFpRjtBQUNwRSxRQUFBLGdCQUFnQixHQUFHLHVCQUF1QixDQUFDO0FBQzNDLFFBQUEsaUJBQWlCLEdBQUcsV0FBVyxDQUFDO0FBQzdDLFNBQVMsdUJBQXVCLENBQUMsTUFBYztJQUM3Qyx3Q0FBd0M7SUFDeEMsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQzdDLFFBQVEsT0FBTyxFQUFFLENBQUM7UUFDaEIsS0FBSyxDQUFDO1lBQ0osT0FBTyxHQUFHLHdCQUFnQixJQUFJLHlCQUFpQixJQUFJLE1BQU0sRUFBRSxDQUFDO1FBQzlELEtBQUssQ0FBQztZQUNKLE9BQU8sR0FBRyx3QkFBZ0IsSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUN6QztZQUNFLE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7QUFDSCxDQUFDO0FBRUQsTUFBYSxrQkFBa0I7SUFPN0IsbUVBQW1FO0lBQ25FLHNFQUFzRTtJQUN0RSw0R0FBNEc7SUFDNUcsWUFDRSxNQUFjLEVBQ0UsT0FBMkI7UUFBM0IsWUFBTyxHQUFQLE9BQU8sQ0FBb0I7UUFFM0MsSUFBSSxDQUFDLE1BQU0sR0FBRyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMs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QyxDQUNILENBQUM7UUFFRixNQUFNLFdBQVcsR0FBRyxJQUFJLHFEQUF3QixFQUFFLENBQUM7UUFFbkQsTUFBTSxrQkFBa0IsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQzFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsRUFBRTtZQUNyRCxNQUFNLFVBQVUsR0FDZCxrQkFBa0IsQ0FBQyxlQUFlLENBQUMsbUJBQW1CLENBQUMsQ0FBQztZQUMxRCxNQUFNLE9BQU8sR0FBRyxNQUFNLGFBQWEsQ0FBQyxrQkFBa0IsQ0FDcEQsVUFBVSxDQUFDLGNBQWMsQ0FDMUIsQ0FBQztZQUNGLE1BQU0sZUFBZSxHQUFHLE1BQU0sV0FBVyxDQUFDLHFCQUFxQixDQUM3RCxVQUFVLENBQUMsY0FBYyxDQUMxQixDQUFDO1lBRUYsT0FBTztnQkFDTCxZQUFZLEVBQUUsVUFBVSxDQUFDLGNBQWM7Z0JBQ3ZDLGtCQUFrQixFQUFFLGVBQWUsSUFBSSxVQUFVLENBQUMsT0FBTztnQkFDekQsZUFBZSxFQUFFLE9BQU87YUFDekIsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUNILENBQUM7UUFFRixPQUFPO1lBQ0wsS0FBSyxFQUFFLGtCQUFrQjtZQUN6QixRQUFRLEVBQUUscUJBQXFCO1NBQ2hDLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUE3WkQsOENBNlpDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluY1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcbmltcG9ydCB7XG4gIExhbmd1YWdlLFxuICBFcnJvcnMsXG4gIElzRXJyb3JUeXBlLFxuICBsb2dnZXIsXG4gIFRlcnJhZm9ybURlcGVuZGVuY3lDb25zdHJhaW50LFxufSBmcm9tIFwiQGNka3RuL2NvbW1vbnNcIjtcbmltcG9ydCB7IHRvUGFzY2FsQ2FzZSwgdG9TbmFrZUNhc2UgfSBmcm9tIFwiY29kZW1ha2VyXCI7XG5pbXBvcnQgeyBDZGt0ZkNvbmZpZyB9IGZyb20gXCIuLi9jZGt0Zi1jb25maWdcIjtcbmltcG9ydCB7IENka3RmQ29uZmlnTWFuYWdlciB9IGZyb20gXCIuL2Nka3RmLWNvbmZpZy1tYW5hZ2VyXCI7XG5pbXBvcnQgeyBQYWNrYWdlTWFuYWdlciB9IGZyb20gXCIuL3BhY2thZ2UtbWFuYWdlclwiO1xuaW1wb3J0IHtcbiAgZ2V0TnBtUGFja2FnZU5hbWUsXG4gIGdldFByZWJ1aWx0UHJvdmlkZXJSZXBvc2l0b3J5TmFtZSxcbiAgZ2V0UHJlYnVpbHRQcm92aWRlclZlcnNpb25JbmZvcm1hdGlvbixcbiAgZ2V0UHJlYnVpbHRQcm92aWRlclZlcnNpb25zLFxufSBmcm9tIFwiLi9wcmVidWlsdC1wcm92aWRlcnNcIjtcbmltcG9ydCB7IGdldExhdGVzdFZlcnNpb24gfSBmcm9tIFwiLi9yZWdpc3RyeS1hcGlcIjtcbmltcG9ydCB7IHZlcnNpb25NYXRjaGVzQ29uc3RyYWludCB9IGZyb20gXCIuL3ZlcnNpb24tY29uc3RyYWludHNcIjtcbmltcG9ydCAqIGFzIHNlbXZlciBmcm9tIFwic2VtdmVyXCI7XG5pbXBvcnQgeyBMb2NhbFByb3ZpZGVyVmVyc2lvbnMgfSBmcm9tIFwiLi4vbG9jYWwtcHJvdmlkZXItdmVyc2lvbnNcIjtcbmltcG9ydCB7IExvY2FsUHJvdmlkZXJDb25zdHJhaW50cyB9IGZyb20gXCIuLi9sb2NhbC1wcm92aWRlci1jb25zdHJhaW50c1wiO1xuXG4vLyByZWY6IGh0dHBzOi8vd3d3LnRlcnJhZm9ybS5pby9sYW5ndWFnZS9wcm92aWRlcnMvcmVxdWlyZW1lbnRzI3NvdXJjZS1hZGRyZXNzZXNcbmV4cG9ydCBjb25zdCBERUZBVUxUX0hPU1ROQU1FID0gXCJyZWdpc3RyeS50ZXJyYWZvcm0uaW9cIjtcbmV4cG9ydCBjb25zdCBERUZBVUxUX05BTUVTUEFDRSA9IFwiaGFzaGljb3JwXCI7XG5mdW5jdGlvbiBub3JtYWxpemVQcm92aWRlclNvdXJjZShzb3VyY2U6IHN0cmluZykge1xuICAvLyByZXR1cm5zIDxIT1NUTkFNRT4vPE5BTUVTUEFDRT4vPFRZUEU+XG4gIGNvbnN0IHNsYXNoZXMgPSBzb3VyY2Uuc3BsaXQoXCIvXCIpLmxlbmd0aCAtIDE7XG4gIHN3aXRjaCAoc2xhc2hlcykge1xuICAgIGNhc2UgMDpcbiAgICAgIHJldHVybiBgJHtERUZBVUxUX0hPU1ROQU1FfS8ke0RFRkFVTFRfTkFNRVNQQUNFfS8ke3NvdXJjZX1gO1xuICAgIGNhc2UgMTpcbiAgICAgIHJldHVybiBgJHtERUZBVUxUX0hPU1ROQU1FfS8ke3NvdXJjZX1gO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gc291cmNlO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBQcm92aWRlckNvbnN0cmFpbnQge1xuICAvKipcbiAgICogbm9ybWFsaXplZCBzb3VyY2Ugb2YgdGhlIHByb3ZpZGVyXG4gICAqIGUuZy4gXCJyZWdpc3RyeS50ZXJyYWZvcm0uaW8vaGFzaGljb3JwL2F3c1wiXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc291cmNlOiBzdHJpbmc7XG5cbiAgLy8gVE9ETzogYWRkIGV4YW1wbGVzIHRvIGNsaSBjb21tYW5kIGRlc2NyaXB0aW9uIChpLmUuID0sfj4uPiBldGMuKVxuICAvLyBpZiBubyB2ZXJzaW9uIGNvbnN0cmFpbnQgaXMgc3BlY2lmaWVkLCB3ZSBhc3N1bWUgdGhlIGxhdGVzdCB2ZXJzaW9uXG4gIC8vIGlmIHNwZWNpZmljIHZlcnNpb24gaXMgc3BlY2lmaWVkIHdpdGhvdXQgZS5nLiA9LCB3ZSBhbGxvdyBwYXRjaCBsZXZlbCBpbmNyZW1lbnRzIChlLmcuIH4+Mi4xMiBmb3IgXCIyLjEyXCIpXG4gIGNvbnN0cnVjdG9yKFxuICAgIHNvdXJjZTogc3RyaW5nLFxuICAgIHB1YmxpYyByZWFkb25seSB2ZXJzaW9uOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICkge1xuICAgIHRoaXMuc291cmNlID0gbm9ybWFsaXplUHJvdmlkZXJTb3VyY2Uoc291cmNlKTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tQ29uZmlnRW50cnkoXG4gICAgcHJvdmlkZXI6IHN0cmluZyB8IFRlcnJhZm9ybURlcGVuZGVuY3lDb25zdHJhaW50LFxuICApOiBQcm92aWRlckNvbnN0cmFpbnQge1xuICAgIGlmICh0eXBlb2YgcHJvdmlkZXIgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIGNvbnN0IFtzcmMsIHZlcnNpb25dID0gcHJvdmlkZXIuc3BsaXQoXCJAXCIpO1xuICAgICAgcmV0dXJuIG5ldyBQcm92aWRlckNvbnN0cmFpbnQoXG4gICAgICAgIHNyYy50cmltKCksXG4gICAgICAgIHZlcnNpb24gPyB2ZXJzaW9uLnRyaW0oKSA6IHVuZGVmaW5lZCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3JjID1cbiAgICAgIChwcm92aWRlci5uYW1lc3BhY2UgPyBgJHtwcm92aWRlci5uYW1lc3BhY2V9L2AgOiBcIlwiKSArXG4gICAgICAocHJvdmlkZXIuc291cmNlIHx8IHByb3ZpZGVyLm5hbWUpO1xuXG4gICAgcmV0dXJuIG5ldyBQcm92aWRlckNvbnN0cmFpbnQoc3JjLCBwcm92aWRlci52ZXJzaW9uKTtcbiAgfVxuXG4gIHB1YmxpYyBpc0Zyb21UZXJyYWZvcm1SZWdpc3RyeSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5ob3N0bmFtZSA9PT0gREVGQVVMVF9IT1NUTkFNRTtcbiAgfVxuXG4gIC8qKlxuICAgKiB0aGUgbmFtZXNwYWNlIG9mIHRoZSBwcm92aWRlclxuICAgKiBlLmcuIFwiaGFzaGljb3JwXCIgb3IgXCJrcmV1endlcmtlclwiXG4gICAqL1xuICBwdWJsaWMgZ2V0IG5hbWVzcGFjZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnNvdXJjZS5zcGxpdChcIi9cIilbMV07XG4gIH1cblxuICAvKipcbiAgICogdGhlIG5hbWUgb2YgdGhlIHByb3ZpZGVyXG4gICAqIGUuZy4gXCJhd3NcIlxuICAgKi9cbiAgcHVibGljIGdldCBuYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc291cmNlLnNwbGl0KFwiL1wiKVsyXTtcbiAgfVxuXG4gIC8qKlxuICAgKiB0aGUgaG9zdG5hbWUgb2YgdGhlIHByb3ZpZGVyXG4gICAqIGUuZy4gXCJyZWdpc3RyeS50ZXJyYWZvcm0uaW9cIlxuICAgKi9cbiAgcHVibGljIGdldCBob3N0bmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnNvdXJjZS5zcGxpdChcIi9cIilbMF07XG4gIH1cblxuICAvKipcbiAgICogcmV0dXJucyBhIHNpbXBsaWZpZWQgcHJvdmlkZXIgbmFtZSwgZHJvcHBpbmcgbmFtZXNwYWNlIGFuZCBob3N0bmFtZVxuICAgKiBpZiB0aGV5IG1hdGNoIHRoZSBkZWZhdWx0c1xuICAgKi9cbiAgcHVibGljIGdldCBzaW1wbGlmaWVkTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnNvdXJjZVxuICAgICAgLnNwbGl0KFwiL1wiKVxuICAgICAgLmZpbHRlcigocGFydCkgPT4gcGFydCAhPT0gREVGQVVMVF9IT1NUTkFNRSAmJiBwYXJ0ICE9PSBERUZBVUxUX05BTUVTUEFDRSlcbiAgICAgIC5qb2luKFwiL1wiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBjaGVja3MgaWYgdGhlIHZlcnNpb24gY29uc3RyYWludCBtYXRjaGVzIHRoZSBnaXZlbiB2ZXJzaW9uXG4gICAqIEBwYXJhbSB2ZXJzaW9uIGFuIGFjdHVhbCB2ZXJzaW9uIChlLmcuIFwiNC4xMi4xXCIpXG4gICAqIEByZXR1cm5zIHRydWUgaWYgdGhlIHZlcnNpb24gaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBjb25zdHJhaW50XG4gICAqL1xuICBwdWJsaWMgbWF0Y2hlc1ZlcnNpb24odmVyc2lvbjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMudmVyc2lvbikge1xuICAgICAgcmV0dXJuIHZlcnNpb25NYXRjaGVzQ29uc3RyYWludCh2ZXJzaW9uLCB0aGlzLnZlcnNpb24pO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHB1YmxpYyB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gYCR7dGhpcy5zb3VyY2V9JHt0aGlzLnZlcnNpb24gPyBgQCR7dGhpcy52ZXJzaW9ufWAgOiBcIlwifWA7XG4gIH1cbn1cblxuLyoqXG4gKiBtYW5hZ2VzIGRlcGVuZGVuY2llcyBvZiBhIENES1ROIHByb2plY3QgKGUuZy4gdGVycmFmb3JtIHByb3ZpZGVycylcbiAqL1xuZXhwb3J0IGNsYXNzIERlcGVuZGVuY3lNYW5hZ2VyIHtcbiAgcHJpdmF0ZSBwYWNrYWdlTWFuYWdlcjogUGFja2FnZU1hbmFnZXI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSB0YXJnZXRMYW5ndWFnZTogTGFuZ3VhZ2UsXG4gICAgcHJpdmF0ZSBjZGt0ZlZlcnNpb246IHN0cmluZyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHByb2plY3REaXJlY3Rvcnk6IHN0cmluZyxcbiAgKSB7XG4gICAgdGhpcy5wYWNrYWdlTWFuYWdlciA9IFBhY2thZ2VNYW5hZ2VyLmZvckxhbmd1YWdlKFxuICAgICAgdGFyZ2V0TGFuZ3VhZ2UsXG4gICAgICB0aGlzLnByb2plY3REaXJlY3RvcnksXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIGFkZFByb3ZpZGVyKFxuICAgIGNvbnN0cmFpbnQ6IFByb3ZpZGVyQ29uc3RyYWludCxcbiAgKTogUHJvbWlzZTx7IGFkZGVkTG9jYWxQcm92aWRlcjogYm9vbGVhbiB9PiB7XG4gICAgaWYgKGF3YWl0IHRoaXMuaGFzUHJlYnVpbHRQcm92aWRlcihjb25zdHJhaW50KSkge1xuICAgICAgYXdhaXQgdGhpcy5hZGRQcmVidWlsdFByb3ZpZGVyKGNvbnN0cmFpbnQpO1xuICAgICAgcmV0dXJuIHsgYWRkZWRMb2NhbFByb3ZpZGVyOiBmYWxzZSB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCB0aGlzLmFkZExvY2FsUHJvdmlkZXIoY29uc3RyYWludCk7XG4gICAgICByZXR1cm4geyBhZGRlZExvY2FsUHJvdmlkZXI6IHRydWUgfTtcbiAgICB9XG4gIH1cblxuICBhc3luYyB1cGdyYWRlUHJvdmlkZXIoY29uc3RyYWludDogUHJvdmlkZXJDb25zdHJhaW50KSB7XG4gICAgY29uc29sZS5sb2coYFVwZ3JhZGluZyAke2NvbnN0cmFpbnQuc2ltcGxpZmllZE5hbWV9Li4uYCk7XG4gICAgY29uc3QgY2RrdGZKc29uID0gbmV3IENka3RmQ29uZmlnTWFuYWdlcigpO1xuICAgIGNvbnN0IHByZWJ1aWx0VmVyc2lvbiA9IGF3YWl0IHRoaXMuZ2V0Q3VycmVudGx5SW5zdGFsbGVkVmVyc2lvbihjb25zdHJhaW50KTtcbiAgICBpZiAocHJlYnVpbHRWZXJzaW9uKSB7XG4gICAgICBhd2FpdCB0aGlzLnVwZ3JhZGVQcmVidWlsdFByb3ZpZGVyKGNvbnN0cmFpbnQsIHByZWJ1aWx0VmVyc2lvbik7XG4gICAgICByZXR1cm4geyBhZGRlZExvY2FsUHJvdmlkZXI6IGZhbHNlIH07XG4gICAgfVxuICAgIGlmIChhd2FpdCBjZGt0Zkpzb24uaGFzUHJvdmlkZXIoY29uc3RyYWludCkpIHtcbiAgICAgIGF3YWl0IGNka3RmSnNvbi51cGRhdGVQcm92aWRlcihjb25zdHJhaW50KTtcbiAgICAgIHJldHVybiB7IGFkZGVkTG9jYWxQcm92aWRlcjogdHJ1ZSB9O1xuICAgIH1cblxuICAgIHRocm93IEVycm9ycy5Vc2FnZShcbiAgICAgIGBUcnlpbmcgdG8gdXBncmFkZSAke2NvbnN0cmFpbnQuc2ltcGxpZmllZE5hbWV9IGJ1dCBpdCBpcyBub3QgaW5zdGFsbGVkLCBwbGVhc2UgdXNlIFwiY2RrdG4gcHJvdmlkZXIgYWRkICR7Y29uc3RyYWludC5zaW1wbGlmaWVkTmFtZX1cIiB0byBhZGQgaXQuYCxcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgZ2V0Q3VycmVudGx5SW5zdGFsbGVkVmVyc2lvbihjb25zdHJhaW50OiBQcm92aWRlckNvbnN0cmFpbnQpIHtcbiAgICBsb2dnZXIuaW5mbyhgQ2hlY2tpbmcgaWYgJHtjb25zdHJhaW50LnNpbXBsaWZpZWROYW1lfSBpcyBpbnN0YWxsZWQuLi5gKTtcbiAgICBjb25zdCBjZGt0ZlBhY2thZ2VOYW1lID0gYXdhaXQgdGhpcy50cnlHZXRQYWNrYWdlTmFtZShjb25zdHJhaW50LCBmYWxzZSk7XG4gICAgY29uc3QgY2RrdG5QYWNrYWdlTmFtZSA9IGF3YWl0IHRoaXMudHJ5R2V0UGFja2FnZU5hbWUoY29uc3RyYWludCwgdHJ1ZSk7XG5cbiAgICBpZiAoIWNka3RmUGFja2FnZU5hbWUgJiYgIWNka3RuUGFja2FnZU5hbWUpIHJldHVybjsgLy8gbm90IGF2YWlsYWJsZSBhcyBwcmUtYnVpbHQgcHJvdmlkZXIsIHNvIGNhbid0IGJlIGluc3RhbGxlZCBhcyBzdWNoXG5cbiAgICBsb2dnZXIuZGVidWcoXG4gICAgICBgRXhwZWN0aW5nIHBhY2thZ2UgJHtjZGt0ZlBhY2thZ2VOYW1lfSBvciAke2Nka3RuUGFja2FnZU5hbWV9IHRvIGJlIGluc3RhbGxlZCBpZiBwcm92aWRlciBpcyBpbnN0YWxsZWQgYXMgcHJlLWJ1aWx0IG9uZWAsXG4gICAgKTtcblxuICAgIGxldCBpbnN0YWxsZWRQYWNrYWdlcztcbiAgICB0cnkge1xuICAgICAgaW5zdGFsbGVkUGFja2FnZXMgPSBhd2FpdCB0aGlzLnBhY2thZ2VNYW5hZ2VyLmxpc3RQcm92aWRlclBhY2thZ2VzKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gbGlzdCBwYWNrYWdlczogJHtlfWApO1xuICAgIH1cblxuICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgIGBJbnN0YWxsZWQgcGFja2FnZXMgZm91bmQ6ICR7SlNPTi5zdHJpbmdpZnkoaW5zdGFsbGVkUGFja2FnZXMsIG51bGwsIDIpfWAsXG4gICAgKTtcblxuICAgIHJldHVybiBpbnN0YWxsZWRQYWNrYWdlcy5maW5kKFxuICAgICAgKHBrZykgPT4gcGtnLm5hbWUgPT09IGNka3RmUGFja2FnZU5hbWUgfHwgcGtnLm5hbWUgPT09IGNka3RuUGFja2FnZU5hbWUsXG4gICAgKT8udmVyc2lvbjtcbiAgfVxuXG4gIGFzeW5jIHVwZ3JhZGVQcmVidWlsdFByb3ZpZGVyKFxuICAgIGNvbnN0cmFpbnQ6IFByb3ZpZGVyQ29uc3RyYWludCxcbiAgICBjdXJyZW50VmVyc2lvbjogc3RyaW5nLFxuICApIHtcbiAgICBsb2dnZXIuZGVidWcoXG4gICAgICBgU2VhcmNoaW5nIGZvciBsYXRlc3QgbWF0Y2hpbmcgdmVyc2lvbiBvZiAke2NvbnN0cmFpbnQuc2ltcGxpZmllZE5hbWV9YCxcbiAgICApO1xuXG4gICAgY29uc3QgeyBuYW1lLCB2ZXJzaW9uIH0gPSBhd2FpdCB0aGlzLmdldE1hdGNoaW5nUHJvdmlkZXJWZXJzaW9uKGNvbnN0cmFpbnQpO1xuXG4gICAgbG9nZ2VyLmRlYnVnKGBGb3VuZCBwYWNrYWdlICR7bmFtZX1AJHt2ZXJzaW9ufWApO1xuICAgIGlmICh2ZXJzaW9uICE9PSBjdXJyZW50VmVyc2lvbikge1xuICAgICAgYXdhaXQgdGhpcy5wYWNrYWdlTWFuYWdlci5hZGRQYWNrYWdlKG5hbWUsIHZlcnNpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgYFRoZSBsYXRlc3QgdmVyc2lvbiBvZiAke25hbWV9IGlzIGFscmVhZHkgaW5zdGFsbGVkOiAke3ZlcnNpb259YCxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgaGFzUHJlYnVpbHRQcm92aWRlcihjb25zdHJhaW50OiBQcm92aWRlckNvbnN0cmFpbnQpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBsb2dnZXIuZGVidWcoXG4gICAgICBgZGV0ZXJtaW5pbmcgd2hldGhlciBwcmUtYnVpbHQgcHJvdmlkZXIgZXhpc3RzIGZvciAke2NvbnN0cmFpbnQuc291cmNlfSB3aXRoIHZlcnNpb24gY29uc3RyYWludCAke2NvbnN0cmFpbnQudmVyc2lvbn0gYW5kIGNka3RmIHZlcnNpb24gJHt0aGlzLmNka3RmVmVyc2lvbn1gLFxuICAgICk7XG5cbiAgICBsb2dnZXIuaW5mbyhgQ2hlY2tpbmcgd2hldGhlciBwcmUtYnVpbHQgcHJvdmlkZXIgZXhpc3RzIGZvciB0aGUgZm9sbG93aW5nIGNvbnN0cmFpbnRzOlxuICBwcm92aWRlcjogJHtjb25zdHJhaW50LnNpbXBsaWZpZWROYW1lfVxuICB2ZXJzaW9uIDogJHtjb25zdHJhaW50LnZlcnNpb24gfHwgXCJsYXRlc3RcIn1cbiAgbGFuZ3VhZ2U6ICR7dGhpcy50YXJnZXRMYW5ndWFnZX1cbiAgY2RrdG4gICA6ICR7dGhpcy5jZGt0ZlZlcnNpb259XG5gKTtcblxuICAgIGlmIChcbiAgICAgIHRoaXMudGFyZ2V0TGFuZ3VhZ2UgPT09IExhbmd1YWdlLkdPICYmXG4gICAgICBzZW12ZXIubHQodGhpcy5jZGt0ZlZlcnNpb24sIFwiMC4xMi4wXCIpXG4gICAgKSB7XG4gICAgICBsb2dnZXIuaW5mbyhcbiAgICAgICAgYEJlZm9yZSBDREtURiAwLjEyLjAgdGhlcmUgd2VyZSBubyBwcmUtYnVpbHQgcHJvdmlkZXJzIHB1Ymxpc2hlZCBmb3IgR28uYCxcbiAgICAgICk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgdiA9IGF3YWl0IGdldFByZWJ1aWx0UHJvdmlkZXJWZXJzaW9ucyhjb25zdHJhaW50LCB0aGlzLmNka3RmVmVyc2lvbik7XG4gICAgY29uc3QgZXhpc3RzID0gdiAhPT0gbnVsbDtcblxuICAgIGlmIChleGlzdHMpIHtcbiAgICAgIGxvZ2dlci5pbmZvKGBGb3VuZCBwcmUtYnVpbHQgcHJvdmlkZXIuYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZ2dlci5pbmZvKFxuICAgICAgICBgUHJlLWJ1aWx0IHByb3ZpZGVyIGRvZXMgbm90IGV4aXN0IGZvciB0aGUgZ2l2ZW4gY29uc3RyYWludHMuYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGV4aXN0cztcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdHJ5R2V0UGFja2FnZU5hbWUoXG4gICAgY29uc3RyYWludDogUHJvdmlkZXJDb25zdHJhaW50LFxuICAgIHVzZUNka3RuOiBib29sZWFuLFxuICApOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IG5wbVBhY2thZ2VOYW1lID0gYXdhaXQgZ2V0TnBtUGFja2FnZU5hbWUoY29uc3RyYWludCwgdXNlQ2RrdG4pO1xuXG4gICAgaWYgKCFucG1QYWNrYWdlTmFtZSkgcmV0dXJuO1xuXG4gICAgcmV0dXJuIHRoaXMudHJ5R2V0TGFuZ3VhZ2VQYWNrYWdlTmFtZShucG1QYWNrYWdlTmFtZSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHRyeUdldExhbmd1YWdlUGFja2FnZU5hbWUoXG4gICAgbnBtUGFja2FnZU5hbWU6IHN0cmluZyxcbiAgKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgICBjb25zdCBwcmVidWlsdFByb3ZpZGVyUmVwb3NpdG9yeSA9XG4gICAgICBhd2FpdCBnZXRQcmVidWlsdFByb3ZpZGVyUmVwb3NpdG9yeU5hbWUobnBtUGFja2FnZU5hbWUpO1xuXG4gICAgcmV0dXJuIHRoaXMuY29udmVydFBhY2thZ2VOYW1lKFxuICAgICAgbnBtUGFja2FnZU5hbWUsXG4gICAgICBwcmVidWlsdFByb3ZpZGVyUmVwb3NpdG9yeSxcbiAgICAgIG5wbVBhY2thZ2VOYW1lLnN0YXJ0c1dpdGgoXCJAY2RrdG5cIiksXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIGdldE1hdGNoaW5nUHJvdmlkZXJWZXJzaW9uKGNvbnN0cmFpbnQ6IFByb3ZpZGVyQ29uc3RyYWludCkge1xuICAgIGNvbnN0IHByZWJ1aWx0UHJvdmlkZXJOcG1WZXJzaW9ucyA9IGF3YWl0IGdldFByZWJ1aWx0UHJvdmlkZXJWZXJzaW9ucyhcbiAgICAgIGNvbnN0cmFpbnQsXG4gICAgICB0aGlzLmNka3RmVmVyc2lvbixcbiAgICApO1xuICAgIGlmICghcHJlYnVpbHRQcm92aWRlck5wbVZlcnNpb25zKSB7XG4gICAgICB0aHJvdyBFcnJvcnMuVXNhZ2UoXG4gICAgICAgIGBObyBwcmUtYnVpbHQgcHJvdmlkZXIgZm91bmQgZm9yICR7Y29uc3RyYWludC5zb3VyY2V9IHdpdGggdmVyc2lvbiBjb25zdHJhaW50ICR7Y29uc3RyYWludC52ZXJzaW9ufSBhbmQgY2RrdGYgdmVyc2lvbiAke3RoaXMuY2RrdGZWZXJzaW9ufWAsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHBhY2thZ2VWZXJzaW9uID0gYXdhaXQgdGhpcy5nZXRMYW5ndWFnZVNwZWNpZmljUGFja2FnZVZlcnNpb24oXG4gICAgICBwcmVidWlsdFByb3ZpZGVyTnBtVmVyc2lvbnMsXG4gICAgKTtcblxuICAgIGlmICghcGFja2FnZVZlcnNpb24pIHtcbiAgICAgIHRocm93IEVycm9ycy5Vc2FnZShcbiAgICAgICAgYE5vIHByZS1idWlsdCBwcm92aWRlciBmb3VuZCBmb3IgJHtjb25zdHJhaW50LnNvdXJjZX0gd2l0aCB2ZXJzaW9uIGNvbnN0cmFpbnQgJHtjb25zdHJhaW50LnZlcnNpb259IGFuZCBjZGt0ZiB2ZXJzaW9uICR7dGhpcy5jZGt0ZlZlcnNpb259IGZvciBsYW5ndWFnZSAke3RoaXMudGFyZ2V0TGFuZ3VhZ2V9LmAsXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBwYWNrYWdlVmVyc2lvbjtcbiAgfVxuXG4gIGFzeW5jIGFkZFByZWJ1aWx0UHJvdmlkZXIoY29uc3RyYWludDogUHJvdmlkZXJDb25zdHJhaW50LCBzaWxlbnQgPSBmYWxzZSkge1xuICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgIGBhZGRpbmcgcHJlLWJ1aWx0IHByb3ZpZGVyICR7Y29uc3RyYWludC5zb3VyY2V9IHdpdGggdmVyc2lvbiBjb25zdHJhaW50ICR7Y29uc3RyYWludC52ZXJzaW9ufSBmb3IgY2RrdGYgdmVyc2lvbiAke3RoaXMuY2RrdGZWZXJzaW9ufWAsXG4gICAgKTtcblxuICAgIGNvbnN0IHsgbmFtZSwgdmVyc2lvbiB9ID0gYXdhaXQgdGhpcy5nZXRNYXRjaGluZ1Byb3ZpZGVyVmVyc2lvbihjb25zdHJhaW50KTtcbiAgICBhd2FpdCB0aGlzLnBhY2thZ2VNYW5hZ2VyLmFkZFBhY2thZ2UobmFtZSwgdmVyc2lvbiwgc2lsZW50KTtcblxuICAgIC8vIFRPRE86IG1vcmUgZGVidWcgbG9nc1xuICB9XG5cbiAgLy8gVGhlIHZlcnNpb24gd2UgdXNlIGZvciBucG0gbWlnaHQgZGlmZmVyIGZyb20gb3RoZXIgcmVnaXN0cmllc1xuICAvLyBUaGlzIGhhcHBlbnMgbW9zdGx5IGluIGNhc2VzIHdoZXJlIGEgcHJvdmlkZXIgdXBkYXRlIGZhaWxlZCB0byBwdWJsaXNoIHRvIG9uZSBvZiB0aGUgcmVnaXN0cmllc1xuICAvLyBJbiB0aGF0IGNhc2Ugd2UgdXNlIHRoZSBsYXRlc3QgdmVyc2lvbiB0aGF0IHdhcyBwdWJsaXNoZWQgc3VjY2Vzc2Z1bGx5IGFuZCB3b3JrcyB3aXRoIHRoZSBjdXJyZW50IGNka3RmIHJlbGVhc2VcbiAgcHJpdmF0ZSBhc3luYyBnZXRMYW5ndWFnZVNwZWNpZmljUGFja2FnZVZlcnNpb24oXG4gICAgcHJlYnVpbHRQcm92aWRlck5wbVZlcnNpb25zOiB7IG5hbWU6IHN0cmluZzsgdmVyc2lvbjogc3RyaW5nIH1bXSxcbiAgKTogUHJvbWlzZTx7IG5hbWU6IHN0cmluZzsgdmVyc2lvbjogc3RyaW5nIH0gfCBudWxsPiB7XG4gICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgXCJGb3VuZCBwb3NzaWJseSBtYXRjaGluZyB2ZXJzaW9ucyAocmVsZWFzZWQgb24gbnBtKTogXCIsXG4gICAgICBwcmVidWlsdFByb3ZpZGVyTnBtVmVyc2lvbnMsXG4gICAgKTtcbiAgICBsb2dnZXIuZGVidWcoXG4gICAgICBcIlNlYXJjaGluZyB0aHJvdWdoIHBhY2thZ2UgbWFuYWdlciB0byBmaW5kIGxhdGVzdCBhdmFpbGFibGUgdmVyc2lvbiBmb3IgZ2l2ZW4gbGFuZ3VhZ2VcIixcbiAgICApO1xuXG4gICAgZm9yIChjb25zdCB7IG5hbWUsIHZlcnNpb24gfSBvZiBwcmVidWlsdFByb3ZpZGVyTnBtVmVyc2lvbnMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGxhbmd1YWdlUGFja2FnZU5hbWUgPSBhd2FpdCB0aGlzLnRyeUdldExhbmd1YWdlUGFja2FnZU5hbWUobmFtZSk7XG4gICAgICAgIGlmICghbGFuZ3VhZ2VQYWNrYWdlTmFtZSkgY29udGludWU7XG5cbiAgICAgICAgY29uc3QgaXNBdmFpbGFibGUgPSBhd2FpdCB0aGlzLnBhY2thZ2VNYW5hZ2VyLmlzTnBtVmVyc2lvbkF2YWlsYWJsZShcbiAgICAgICAgICBsYW5ndWFnZVBhY2thZ2VOYW1lLFxuICAgICAgICAgIHZlcnNpb24sXG4gICAgICAgICk7XG4gICAgICAgIGlmIChpc0F2YWlsYWJsZSkge1xuICAgICAgICAgIHJldHVybiB7IG5hbWU6IGxhbmd1YWdlUGFja2FnZU5hbWUsIHZlcnNpb24gfTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmIChJc0Vycm9yVHlwZShlcnIsIFwiRXh0ZXJuYWxcIikpIHtcbiAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cbiAgICAgICAgbG9nZ2VyLmluZm8oXG4gICAgICAgICAgYENvdWxkIG5vdCBmaW5kIHZlcnNpb24gJHt2ZXJzaW9ufSBmb3IgcGFja2FnZSAke25hbWV9OiAnJHtlcnJ9Jy4gU2tpcHBpbmcuLi5gLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGFzeW5jIGFkZExvY2FsUHJvdmlkZXIoY29uc3RyYWludDogUHJvdmlkZXJDb25zdHJhaW50KSB7XG4gICAgbG9nZ2VyLmluZm8oXG4gICAgICBgQWRkaW5nIGxvY2FsIHByb3ZpZGVyICR7Y29uc3RyYWludC5zb3VyY2V9IHdpdGggdmVyc2lvbiBjb25zdHJhaW50ICR7Y29uc3RyYWludC52ZXJzaW9ufSB0byBjZGt0Zi5qc29uYCxcbiAgICApO1xuXG4gICAgaWYgKCFjb25zdHJhaW50LnZlcnNpb24gJiYgY29uc3RyYWludC5pc0Zyb21UZXJyYWZvcm1SZWdpc3RyeSgpKSB7XG4gICAgICBjb25zdCB2ID0gYXdhaXQgZ2V0TGF0ZXN0VmVyc2lvbihjb25zdHJhaW50KTtcbiAgICAgIGlmICh2KSB7XG4gICAgICAgIGNvbnN0cmFpbnQgPSBuZXcgUHJvdmlkZXJDb25zdHJhaW50KFxuICAgICAgICAgIGNvbnN0cmFpbnQuc291cmNlLFxuICAgICAgICAgIC8vIFwiMS4zLjJcIiAtPiBcIn4+IDEuM1wiXG4gICAgICAgICAgYH4+ICR7di5zcGxpdChcIi5cIikuc2xpY2UoMCwgMikuam9pbihcIi5cIil9YCxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IEVycm9ycy5Vc2FnZShcbiAgICAgICAgICBgQ291bGQgbm90IGZpbmQgYSB2ZXJzaW9uIGZvciB0aGUgcHJvdmlkZXIgJyR7Y29uc3RyYWludH0nIGluIHRoZSBwdWJsaWMgcmVnaXN0cnkuIFRoaXMgY291bGQgYmUgZHVlIHRvIGEgdHlwbywgcGxlYXNlIHRha2UgYSBsb29rIGF0IGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL2Jyb3dzZS9wcm92aWRlcnMgdG8gZmluZCBhbGwgc3VwcG9ydGVkIHByb3ZpZGVycy5gLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGF3YWl0IG5ldyBDZGt0ZkNvbmZpZ01hbmFnZXIoKS5hZGRQcm92aWRlcihjb25zdHJhaW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBhbiBOUE0gcGFja2FnZSBuYW1lIG9mIGEgcHJlLWJ1aWx0IHByb3ZpZGVyIHBhY2thZ2UgdG8gdGhlIG5hbWUgaW4gdGhlIHRhcmdldCBsYW5ndWFnZVxuICAgKi9cbiAgcHJpdmF0ZSBjb252ZXJ0UGFja2FnZU5hbWUoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHJlcG9zaXRvcnk6IHN0cmluZyxcbiAgICB1c2VDZGt0bjogYm9vbGVhbixcbiAgKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdXNlQ2RrdG5cbiAgICAgID8gdGhpcy5jb252ZXJ0UGFja2FnZU5hbWVDZGt0bihuYW1lLCByZXBvc2l0b3J5KVxuICAgICAgOiB0aGlzLmNvbnZlcnRQYWNrYWdlTmFtZUNka3RmKG5hbWUsIHJlcG9zaXRvcnkpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIGFuIE5QTSBwYWNrYWdlIG5hbWUgb2YgYSBwcmUtYnVpbHQgcHJvdmlkZXIgcGFja2FnZSB0byB0aGUgbmFtZSBpbiB0aGUgdGFyZ2V0IGxhbmd1YWdlXG4gICAqL1xuICBwcml2YXRlIGNvbnZlcnRQYWNrYWdlTmFtZUNka3RmKG5hbWU6IHN0cmluZywgcmVwb3NpdG9yeTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBwcm92aWRlck5hbWUgPSBuYW1lLnJlcGxhY2UoXCJAY2RrdGYvcHJvdmlkZXItXCIsIFwiXCIpO1xuICAgIHN3aXRjaCAodGhpcy50YXJnZXRMYW5ndWFnZSkge1xuICAgICAgY2FzZSBMYW5ndWFnZS5HTzogLy8gZS5nLiBnaXRodWIuY29tL2Nka3RmL2Nka3RmLXByb3ZpZGVyLW9wZW50ZWxla29tY2xvdWQtZ28vb3BlbnRlbGVrb21jbG91ZFxuICAgICAgICBpZiAocmVwb3NpdG9yeSkge1xuICAgICAgICAgIHJldHVybiBgJHtyZXBvc2l0b3J5fS1nby8ke3Byb3ZpZGVyTmFtZX1gO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGBnaXRodWIuY29tL2Nka3RmL2Nka3RmLXByb3ZpZGVyLSR7cHJvdmlkZXJOYW1lfS1nby8ke3Byb3ZpZGVyTmFtZX1gO1xuICAgICAgY2FzZSBMYW5ndWFnZS5UWVBFU0NSSVBUOiAvLyBlLmcuIEBjZGt0Zi9wcm92aWRlci1yYW5kb21cbiAgICAgICAgcmV0dXJuIG5hbWU7IC8vIGFscmVhZHkgdGhlIGNvcnJlY3QgbmFtZVxuICAgICAgY2FzZSBMYW5ndWFnZS5DU0hBUlA6IC8vIGUuZy4gSGFzaGlDb3JwLkNka3RmLlByb3ZpZGVycy5PcGVudGVsZWtvbWNsb3VkXG4gICAgICAgIHJldHVybiBgSGFzaGlDb3JwLkNka3RmLlByb3ZpZGVycy5gICsgdG9QYXNjYWxDYXNlKHByb3ZpZGVyTmFtZSk7XG4gICAgICBjYXNlIExhbmd1YWdlLkpBVkE6IC8vIGUuZy4gY29tLmhhc2hpY29ycC5vcGVudGVsZWtvbWNsb3VkXG4gICAgICAgIHJldHVybiBgY29tLmhhc2hpY29ycC5jZGt0Zi1wcm92aWRlci0ke3Byb3ZpZGVyTmFtZX1gO1xuICAgICAgY2FzZSBMYW5ndWFnZS5QWVRIT046IC8vIGUuZy4gY2RrdGYtY2RrdGYtcHJvdmlkZXItb3BlbnRlbGVrb21jbG91ZFxuICAgICAgICByZXR1cm4gYGNka3RmLWNka3RmLXByb3ZpZGVyLSR7cHJvdmlkZXJOYW1lfWA7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYGNvbnZlcnRpbmcgcGFja2FnZSBuYW1lIGZvciBsYW5ndWFnZSAke3RoaXMudGFyZ2V0TGFuZ3VhZ2V9IG5vdCBpbXBsZW1lbnRlZCB5ZXRgLFxuICAgICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBhbiBOUE0gcGFja2FnZSBuYW1lIG9mIGEgcHJlLWJ1aWx0IHByb3ZpZGVyIHBhY2thZ2UgdG8gdGhlIG5hbWUgaW4gdGhlIHRhcmdldCBsYW5ndWFnZVxuICAgKi9cbiAgcHJpdmF0ZSBjb252ZXJ0UGFja2FnZU5hbWVDZGt0bihcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgcmVwb3NpdG9yeTogc3RyaW5nLFxuICApOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHByb3ZpZGVyTmFtZSA9IG5hbWUucmVwbGFjZShcIkBjZGt0bi9wcm92aWRlci1cIiwgXCJcIik7XG4gICAgc3dpdGNoICh0aGlzLnRhcmdldExhbmd1YWdlKSB7XG4gICAgICBjYXNlIExhbmd1YWdlLkdPOiAvLyBlLmcuIGdpdGh1Yi5jb20vY2RrdGYvY2RrdGYtcHJvdmlkZXItb3BlbnRlbGVrb21jbG91ZC1nby9vcGVudGVsZWtvbWNsb3VkXG4gICAgICAgIGlmIChyZXBvc2l0b3J5KSB7XG4gICAgICAgICAgcmV0dXJuIGAke3JlcG9zaXRvcnl9LWdvLyR7cHJvdmlkZXJOYW1lfWA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYGdpdGh1Yi5jb20vY2RrdG4taW8vY2RrdG4tcHJvdmlkZXItJHtwcm92aWRlck5hbWV9LWdvLyR7cHJvdmlkZXJOYW1lfWA7XG4gICAgICBjYXNlIExhbmd1YWdlLlRZUEVTQ1JJUFQ6IC8vIGUuZy4gQGNka3RmL3Byb3ZpZGVyLXJhbmRvbVxuICAgICAgICByZXR1cm4gbmFtZTsgLy8gYWxyZWFkeSB0aGUgY29ycmVjdCBuYW1lXG4gICAgICBjYXNlIExhbmd1YWdlLkNTSEFSUDogLy8gZS5nLiBIYXNoaUNvcnAuQ2RrdGYuUHJvdmlkZXJzLk9wZW50ZWxla29tY2xvdWRcbiAgICAgICAgcmV0dXJuIGBJby5DZGt0bi5Qcm92aWRlcnMuYCArIHRvUGFzY2FsQ2FzZShwcm92aWRlck5hbWUpO1xuICAgICAgY2FzZSBMYW5ndWFnZS5KQVZBOiAvLyBlLmcuIGNvbS5oYXNoaWNvcnAub3BlbnRlbGVrb21jbG91ZFxuICAgICAgICByZXR1cm4gYGlvLmNka3RuLmNka3RuLXByb3ZpZGVyLSR7cHJvdmlkZXJOYW1lfWA7XG4gICAgICBjYXNlIExhbmd1YWdlLlBZVEhPTjogLy8gZS5nLiBjZGt0Zi1jZGt0Zi1wcm92aWRlci1vcGVudGVsZWtvbWNsb3VkXG4gICAgICAgIHJldHVybiBgY2RrdG4tcHJvdmlkZXItJHtwcm92aWRlck5hbWV9YDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgY29udmVydGluZyBwYWNrYWdlIG5hbWUgZm9yIGxhbmd1YWdlICR7dGhpcy50YXJnZXRMYW5ndWFnZX0gbm90IGltcGxlbWVudGVkIHlldGAsXG4gICAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIGFuIHBhY2thZ2UgbmFtZSBvZiBhIHByZS1idWlsdCBwcm92aWRlciBwYWNrYWdlIGluIHRhcmdldCBsYW5ndWFnZSB0byB0aGUgbmFtZSBpbiBucG1cbiAgICogSW52ZXJzZSBvZjogYGNvbnZlcnRQYWNrYWdlTmFtZWBcbiAgICovXG4gIHByaXZhdGUgY29udmVydEZyb21QYWNrYWdlTmFtZVRvTnBtKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgcmVnZXhlcyA9IHtcbiAgICAgIFtMYW5ndWFnZS5HT106XG4gICAgICAgIC9naXRodWIuY29tXFwvKD86Y2RrdGZ8aGFzaGljb3JwfGNka3RuLWlvKVxcL2Nka3QoW2ZuXSktcHJvdmlkZXItKC4rKS1nb1xcLy9pLFxuICAgICAgW0xhbmd1YWdlLlRZUEVTQ1JJUFRdOiAvKC4rKS9pLFxuICAgICAgW0xhbmd1YWdlLkNTSEFSUF06IC8oPzpIYXNoaUNvcnB8SW8pXFwuQ2RrdChbZm5dKVxcLlByb3ZpZGVyc1xcLiguKykvaSxcbiAgICAgIFtMYW5ndWFnZS5KQVZBXTpcbiAgICAgICAgLyg/OmNvbVxcLmhhc2hpY29ycHxpb1xcLmNka3RuKVxcLmNka3QoW2ZuXSktcHJvdmlkZXItKC4rKS9pLFxuICAgICAgW0xhbmd1YWdlLlBZVEhPTl06IC8oPzpjZGt0Zi0pP2Nka3QoW2ZuXSktcHJvdmlkZXItKC4rKS9pLFxuICAgIH07XG4gICAgY29uc3QgcmVnZXggPSByZWdleGVzW3RoaXMudGFyZ2V0TGFuZ3VhZ2VdO1xuICAgIGlmICghcmVnZXgpIHtcbiAgICAgIHRocm93IEVycm9ycy5Vc2FnZShcIkxhbmd1YWdlIG5vdCBzdXBwb3J0ZWQgZm9yIHByZS1idWlsdCBwcm92aWRlcnNcIik7XG4gICAgfVxuXG4gICAgY29uc3QgbWF0Y2ggPSByZWdleC5leGVjKG5hbWUpO1xuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUGFja2FnZSBuYW1lIGlzIG5vdCBpbiBleHBlY3RlZCBmb3JtYXQ6ICR7bmFtZX1gKTtcbiAgICB9XG5cbiAgICBjb25zdCBucG1QYWNrYWdlUHJlZml4ID0gYEBjZGt0JHttYXRjaFsxXX0vcHJvdmlkZXItYDtcblxuICAgIHN3aXRjaCAodGhpcy50YXJnZXRMYW5ndWFnZSkge1xuICAgICAgY2FzZSBMYW5ndWFnZS5HTzogLy8gZS5nLiBnaXRodWIuY29tL2Nka3RmL2Nka3RmLXByb3ZpZGVyLW9wZW50ZWxla29tY2xvdWQtZ28vb3BlbnRlbGVrb21jbG91ZFxuICAgICAgICByZXR1cm4gbnBtUGFja2FnZVByZWZpeCArIG1hdGNoWzJdO1xuICAgICAgY2FzZSBMYW5ndWFnZS5UWVBFU0NSSVBUOiAvLyBlLmcuIEBjZGt0Zi9wcm92aWRlci1yYW5kb21cbiAgICAgICAgcmV0dXJuIG1hdGNoWzFdOyAvLyBhbHJlYWR5IHRoZSBjb3JyZWN0IG5hbWVcbiAgICAgIGNhc2UgTGFuZ3VhZ2UuQ1NIQVJQOiAvLyBlLmcuIEhhc2hpQ29ycC5DZGt0Zi5Qcm92aWRlcnMuT3BlbnRlbGVrb21jbG91ZFxuICAgICAgICByZXR1cm4gbnBtUGFja2FnZVByZWZpeCArIHRvU25ha2VDYXNlKG1hdGNoWzJdKTtcbiAgICAgIGNhc2UgTGFuZ3VhZ2UuSkFWQTogLy8gZS5nLiBjb20uaGFzaGljb3JwLm9wZW50ZWxla29tY2xvdWRcbiAgICAgICAgcmV0dXJuIG5wbVBhY2thZ2VQcmVmaXggKyBtYXRjaFsyXTtcbiAgICAgIGNhc2UgTGFuZ3VhZ2UuUFlUSE9OOiAvLyBlLmcuIGNka3RmLWNka3RmLXByb3ZpZGVyLW9wZW50ZWxla29tY2xvdWRcbiAgICAgICAgcmV0dXJuIG5wbVBhY2thZ2VQcmVmaXggKyBtYXRjaFsyXTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgY29udmVydGluZyBwYWNrYWdlIG5hbWUgZm9yIGxhbmd1YWdlICR7dGhpcy50YXJnZXRMYW5ndWFnZX0gbm90IGltcGxlbWVudGVkIHlldGAsXG4gICAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGFsbFByb3ZpZGVycygpIHtcbiAgICBjb25zdCBjZGt0Zkpzb24gPSBDZGt0ZkNvbmZpZy5yZWFkKCk7XG4gICAgY29uc3QgbG9jYWxWZXJzaW9ucyA9IG5ldyBMb2NhbFByb3ZpZGVyVmVyc2lvbnMoKTtcblxuICAgIGNvbnN0IGxvY2FsUHJvdmlkZXJDb25maWdzID0gY2RrdGZKc29uLnRlcnJhZm9ybVByb3ZpZGVycztcbiAgICBjb25zdCBwcmVidWlsdFByb3ZpZGVyQ29uZmlncyA9XG4gICAgICBhd2FpdCB0aGlzLnBhY2thZ2VNYW5hZ2VyLmxpc3RQcm92aWRlclBhY2thZ2VzKCk7XG5cbiAgICBjb25zdCBwcmVidWlsdFByb3ZpZGVyc0luZm8gPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIHByZWJ1aWx0UHJvdmlkZXJDb25maWdzLm1hcChhc3luYyAocHJlYnVpbHRQcm92aWRlckNvbmZpZykgPT4ge1xuICAgICAgICBjb25zdCBwYWNrYWdlTmFtZSA9IHRoaXMuY29udmVydEZyb21QYWNrYWdlTmFtZVRvTnBtKFxuICAgICAgICAgIHByZWJ1aWx0UHJvdmlkZXJDb25maWcubmFtZSxcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCBwcm92aWRlckluZm9ybWF0aW9uID0gYXdhaXQgZ2V0UHJlYnVpbHRQcm92aWRlclZlcnNpb25JbmZvcm1hdGlvbihcbiAgICAgICAgICBwYWNrYWdlTmFtZSxcbiAgICAgICAgICBwcmVidWlsdFByb3ZpZGVyQ29uZmlnLnZlcnNpb24sXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5wcm92aWRlckluZm9ybWF0aW9uLFxuICAgICAgICAgIHBhY2thZ2VOYW1lOiBwcmVidWlsdFByb3ZpZGVyQ29uZmlnLm5hbWUsXG4gICAgICAgIH07XG4gICAgICB9KSxcbiAgICApO1xuXG4gICAgY29uc3QgY29uc3RyYWludHMgPSBuZXcgTG9jYWxQcm92aWRlckNvbnN0cmFpbnRzKCk7XG5cbiAgICBjb25zdCBsb2NhbFByb3ZpZGVyc0luZm8gPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIGxvY2FsUHJvdmlkZXJDb25maWdzLm1hcChhc3luYyAobG9jYWxQcm92aWRlckNvbmZpZykgPT4ge1xuICAgICAgICBjb25zdCBjb25zdHJhaW50ID1cbiAgICAgICAgICBQcm92aWRlckNvbnN0cmFpbnQuZnJvbUNvbmZpZ0VudHJ5KGxvY2FsUHJvdmlkZXJDb25maWcpO1xuICAgICAgICBjb25zdCB2ZXJzaW9uID0gYXdhaXQgbG9jYWxWZXJzaW9ucy52ZXJzaW9uRm9yUHJvdmlkZXIoXG4gICAgICAgICAgY29uc3RyYWludC5zaW1wbGlmaWVkTmFtZSxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgY29uc3RyYWludFZhbHVlID0gYXdhaXQgY29uc3RyYWludHMuY29uc3RyYWludEZvclByb3ZpZGVyKFxuICAgICAgICAgIGNvbnN0cmFpbnQuc2ltcGxpZmllZE5hbWUsXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBwcm92aWRlck5hbWU6IGNvbnN0cmFpbnQuc2ltcGxpZmllZE5hbWUsXG4gICAgICAgICAgcHJvdmlkZXJDb25zdHJhaW50OiBjb25zdHJhaW50VmFsdWUgfHwgY29uc3RyYWludC52ZXJzaW9uLFxuICAgICAgICAgIHByb3ZpZGVyVmVyc2lvbjogdmVyc2lvbixcbiAgICAgICAgfTtcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgbG9jYWw6IGxvY2FsUHJvdmlkZXJzSW5mbyxcbiAgICAgIHByZWJ1aWx0OiBwcmVidWlsdFByb3ZpZGVyc0luZm8sXG4gICAgfTtcbiAgfVxufVxuIl19
|
|
@@ -400,8 +400,9 @@ class NugetPackageManager extends PackageManager {
|
|
|
400
400
|
var _a, _b, _c;
|
|
401
401
|
commons_1.logger.debug(`Checking if ${packageName}@${packageVersion} is available`);
|
|
402
402
|
const [owner, ...rest] = packageName.split(".");
|
|
403
|
+
const fixedOwner = packageName.startsWith("Io.Cdktn") ? "cdktn" : owner;
|
|
403
404
|
const id = rest[rest.length - 1];
|
|
404
|
-
const url = `https://azuresearch-usnc.nuget.org/query?q=owner:${
|
|
405
|
+
const url = `https://azuresearch-usnc.nuget.org/query?q=owner:${fixedOwner}%20id:${id}&prerelease=false&semVerLevel=2.0.0`;
|
|
405
406
|
commons_1.logger.debug(`Fetching package metadata from Nuget: '${url}'`);
|
|
406
407
|
const response = await fetchWithRetry(url);
|
|
407
408
|
if (response.status === HTTP_NOT_FOUND) {
|
|
@@ -591,7 +592,7 @@ class GradlePackageManager extends JavaPackageManager {
|
|
|
591
592
|
dep.name.includes("cdktn-provider-"));
|
|
592
593
|
})
|
|
593
594
|
.map((dep) => ({
|
|
594
|
-
name:
|
|
595
|
+
name: `${dep.group}.${dep.name}`,
|
|
595
596
|
version: dep.version,
|
|
596
597
|
}));
|
|
597
598
|
return dependencyList;
|
|
@@ -680,4 +681,4 @@ class GoPackageManager extends PackageManager {
|
|
|
680
681
|
}
|
|
681
682
|
}
|
|
682
683
|
}
|
|
683
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFja2FnZS1tYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9kZXBlbmRlbmNpZXMvcGFja2FnZS1tYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsK0JBQStCO0FBQy9CLG1DQUFtQztBQUNuQyw0Q0FRd0I7QUFDeEIsdUNBQXNDO0FBQ3RDLGdEQUF3QjtBQUN4QixtQ0FBaUQ7QUFDakQsNkNBQStCO0FBQy9CLCtDQUFpQztBQUNqQyxtQ0FBa0U7QUFDbEUsdUNBQXlCO0FBRXpCLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDO0FBQy9ELE1BQU0sVUFBVSxHQUEyQixLQUFLO0lBQzlDLENBQUMsQ0FBQyxJQUFJLG1CQUFVLENBQUMsS0FBSyxDQUFDO0lBQ3ZCLENBQUMsQ0FBQyxTQUFTLENBQUM7QUFFZDs7O0dBR0c7QUFDSCxNQUFNLHVCQUF1QixHQUFHLENBQUMsQ0FBQztBQUVsQyx5RUFBeUU7QUFDekUsTUFBTSx5QkFBeUIsR0FBRyxHQUFHLENBQUM7QUFFdEM7O0dBRUc7QUFDSCxNQUFNLG9CQUFvQixHQUFHLEdBQUcsQ0FBQztBQUVqQzs7R0FFRztBQUNILE1BQU0sc0JBQXNCLEdBQUcsR0FBRyxDQUFDO0FBRW5DOztHQUVHO0FBQ0gsTUFBTSxxQkFBcUIsR0FBRyxHQUFHLENBQUM7QUFFbEM7O0dBRUc7QUFDSCxNQUFNLGNBQWMsR0FBRyxHQUFHLENBQUM7QUFFM0I7Ozs7OztHQU1HO0FBQ0gsU0FBUyxpQkFBaUIsQ0FBQyxNQUFjO0lBQ3ZDLE9BQU8sQ0FDTCxNQUFNLEtBQUssb0JBQW9CO1FBQy9CLE1BQU0sS0FBSyxzQkFBc0I7UUFDakMsTUFBTSxJQUFJLHFCQUFxQixDQUNoQyxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7OztHQUtHO0FB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QyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUV2RCxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUV2QyxJQUFJLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO29CQUNuQyxPQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLENBQUM7Z0JBQ25DLENBQUM7Z0JBRUQsb0JBQW9CLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUUvQixPQUFPO29CQUNMLElBQUk7b0JBQ0osT0FBTztpQkFDUixDQUFDO1lBQ0osQ0FBQyxDQUFDO2lCQUNELE1BQU0sQ0FDTCxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQ2hFLENBQUM7UUFDTixDQUFDO1FBQUMsT0FBTyxDQUFNLEVBQUUsQ0FBQztZQUNoQixNQUFNLElBQUksS0FBSyxDQUNiLDhEQUE4RCxDQUFDLENBQUMsT0FBTyxFQUFFLENBQzFFLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluY1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcbmltcG9ydCB7XG4gIExhbmd1YWdlLFxuICBleGVjLFxuICBFcnJvcnMsXG4gIGxvZ2dlcixcbiAgaXNHcmFkbGVQcm9qZWN0LFxuICBnZXRHcmFkbGVEZXBlbmRlbmNpZXMsXG4gIGdldERlcGVuZGVuY3lJbmZvcm1hdGlvbkZyb21MaW5lLFxufSBmcm9tIFwiQGNka3RuL2NvbW1vbnNcIjtcbmltcG9ydCB7IGV4aXN0c1N5bmMgfSBmcm9tIFwiZnMtZXh0cmFcIjtcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyB4bWwyanMsIGpzMnhtbCwgRWxlbWVudCB9IGZyb20gXCJ4bWwtanNcIjtcbmltcG9ydCAqIGFzIGZzIGZyb20gXCJmcy1leHRyYVwiO1xuaW1wb3J0ICogYXMgc2VtdmVyIGZyb20gXCJzZW12ZXJcIjtcbmltcG9ydCB7IGZldGNoLCBQcm94eUFnZW50LCBSZXF1ZXN0SW5pdCwgUmVzcG9uc2UgfSBmcm9tIFwidW5kaWNpXCI7XG5pbXBvcnQgKiBhcyB6IGZyb20gXCJ6b2RcIjtcblxuY29uc3QgcHJveHkgPSBwcm9jZXNzLmVudi5odHRwX3Byb3h5IHx8IHByb2Nlc3MuZW52LkhUVFBfUFJPWFk7XG5jb25zdCBkaXNwYXRjaGVyOiBQcm94eUFnZW50IHwgdW5kZWZpbmVkID0gcHJveHlcbiAgPyBuZXcgUHJveHlBZ2VudChwcm94eSlcbiAgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogTnVtYmVyIG9mIGF0dGVtcHRzIChpbml0aWFsIHRyeSArIHJldHJpZXMpIGZvciBhIHJlZ2lzdHJ5IHByb2JlIGJlZm9yZSB3ZSBnaXZlIHVwIGFuZCB0cmVhdCB0aGUgcmVnaXN0cnkgYXNcbiAqIHVucmVhY2hhYmxlLiBUcmFuc2llbnQgZmFpbHVyZXMgKG5ldHdvcmsgZXJyb3JzIC8gNDA4IC8gNDI5IC8gNXh4KSBhcmUgcmV0cmllZDsgZGVmaW5pdGl2ZSByZXNwb25zZXMgYXJlIG5vdC5cbiAqL1xuY29uc3QgUkVHSVNUUllfUFJPQkVfQVRURU1QVFMgPSAzO1xuXG4vKiogQmFzZSBiYWNrb2ZmIGJldHdlZW4gcmV0cmllcywgZG91YmxlZCBlYWNoIGF0dGVtcHQgKDI1MG1zLCA1MDBtcykuICovXG5jb25zdCBSRUdJU1RSWV9QUk9CRV9CQUNLT0ZGX01TID0gMjUwO1xuXG4vKipcbiAqIEhUVFAgNDA4IFJlcXVlc3QgVGltZW91dCDigJQgYSB0cmFuc2llbnQgc3RhdHVzIHdvcnRoIHJldHJ5aW5nLlxuICovXG5jb25zdCBIVFRQX1JFUVVFU1RfVElNRU9VVCA9IDQwODtcblxuLyoqXG4gKiBIVFRQIDQyOSBUb28gTWFueSBSZXF1ZXN0cyAocmF0ZSBsaW1pdCkg4oCUIGEgdHJhbnNpZW50IHN0YXR1cyB3b3J0aCByZXRyeWluZy5cbiAqL1xuY29uc3QgSFRUUF9UT09fTUFOWV9SRVFVRVNUUyA9IDQyOTtcblxuLyoqXG4gKiBMb3dlc3QgSFRUUCA1eHggc3RhdHVzIOKAlCBhbnkgc3RhdHVzIGF0IG9yIGFib3ZlIHRoaXMgaXMgYSBzZXJ2ZXIgZXJyb3IgYW5kIHRyZWF0ZWQgYXMgYSB0cmFuc2llbnQgc3RhdHVzIHdvcnRoIHJldHJ5aW5nLlxuICovXG5jb25zdCBIVFRQX1NFUlZFUl9FUlJPUl9NSU4gPSA1MDA7XG5cbi8qKlxuICogSFRUUCA0MDQgTm90IEZvdW5kIOKAlCBhIGRlZmluaXRpdmUgXCJ0aGUgdmVyc2lvbiBpcyBub3QgcHVibGlzaGVkXCIgYW5zd2VyIGZyb20gYSByZWdpc3RyeSAobm90IHRyYW5zaWVudCkuXG4gKi9cbmNvbnN0IEhUVFBfTk9UX0ZPVU5EID0gNDA0O1xuXG4vKipcbiAqIFJlcG9ydHMgd2hldGhlciBhbiBIVFRQIHN0YXR1cyBpcyB0cmFuc2llbnQgYW5kIHRoZXJlZm9yZSB3b3J0aCByZXRyeWluZzogcmVxdWVzdCB0aW1lb3V0ICg0MDgpLCByYXRlIGxpbWl0ICg0MjkpLFxuICogb3IgYW55IHNlcnZlciBlcnJvciAoNXh4KS4gRGVmaW5pdGl2ZSBzdGF0dXNlcyAoMnh4LCA0MDQsIG90aGVyIDR4eCkgYXJlIG5vdCB0cmFuc2llbnQuXG4gKlxuICogQHBhcmFtIHN0YXR1cyAtIFRoZSBIVFRQIHN0YXR1cyBjb2RlIGZyb20gYSByZWdpc3RyeSByZXNwb25zZS5cbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgc3RhdHVzIGlzIHRyYW5zaWVudCBhbmQgdGhlIHJlcXVlc3Qgc2hvdWxkIGJlIHJldHJpZWQsIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICovXG5mdW5jdGlvbiBpc1RyYW5zaWVudFN0YXR1cyhzdGF0dXM6IG51bWJlcik6IGJvb2xlYW4ge1xuICByZXR1cm4gKFxuICAgIHN0YXR1cyA9PT0gSFRUUF9SRVFVRVNUX1RJTUVPVVQgfHxcbiAgICBzdGF0dXMgPT09IEhUVFBfVE9PX01BTllfUkVRVUVTVFMgfHxcbiAgICBzdGF0dXMgPj0gSFRUUF9TRVJWRVJfRVJST1JfTUlOXG4gICk7XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgYWZ0ZXIgYG1zYCBtaWxsaXNlY29uZHM7IHVzZWQgdG8gYmFjayBvZmYgYmV0d2VlbiByZWdpc3RyeS1wcm9iZSByZXRyaWVzLlxuICpcbiAqIEBwYXJhbSBtcyAtIFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHdhaXQuXG4gKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBkZWxheSBoYXMgZWxhcHNlZC5cbiAqL1xuZnVuY3Rpb24gZGVsYXkobXM6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKTtcbn1cblxuLyoqXG4gKiBGZXRjaGVzIGB1cmxgLCByZXRyeWluZyBvbmx5IG9uIHRyYW5zaWVudCBmYWlsdXJlcyDigJQgbmV0d29yayBlcnJvcnMgYW5kIEhUVFAgNDA4LzQyOS81eHgg4oCUIHNvIGEgcmVnaXN0cnkgaGljY3VwIGlzXG4gKiBub3QgbWlzdGFrZW4gZm9yIGEgZGVmaW5pdGl2ZSBhbnN3ZXIuIERlZmluaXRpdmUgcmVzcG9uc2VzICgyeHgsIDQwNCwgb3RoZXIgNHh4KSBhcmUgcmV0dXJuZWQgaW1tZWRpYXRlbHkgd2l0aG91dFxuICogcmV0cnkuIElmIGV2ZXJ5IGF0dGVtcHQgZmFpbHMgdHJhbnNpZW50bHksIHRocm93cyBhbiBgRXh0ZXJuYWxgIGVycm9yIHNvIGNhbGxlcnMgY2FuIGRpc3Rpbmd1aXNoIFwicmVnaXN0cnlcbiAqIHVucmVhY2hhYmxlXCIgZnJvbSBcInZlcnNpb24gYWJzZW50XCIgcmF0aGVyIHRoYW4gc2lsZW50bHkgdHJlYXRpbmcgYSBoaWNjdXAgYXMgYWJzZW5jZS5cbiAqXG4gKiBAcGFyYW0gdXJsIC0gVGhlIHJlZ2lzdHJ5IFVSTCB0byBmZXRjaC5cbiAqIEBwYXJhbSBpbml0IC0gT3B0aW9uYWwgYGZldGNoYCByZXF1ZXN0IG9wdGlvbnMgKGUuZy4gaGVhZGVycyksIHBhc3NlZCB0aHJvdWdoIHVuY2hhbmdlZCBvbiBldmVyeSBhdHRlbXB0LlxuICogQHJldHVybnMgVGhlIGBSZXNwb25zZWAgZm9yIHRoZSBmaXJzdCBkZWZpbml0aXZlIChub24tdHJhbnNpZW50KSByZXN1bHQuXG4gKiBAdGhyb3dzIEFuIGBFeHRlcm5hbGAgZXJyb3IgaWYgZXZlcnkgYXR0ZW1wdCAodXAgdG8gYFJFR0lTVFJZX1BST0JFX0FUVEVNUFRTYCkgZmFpbHMgdHJhbnNpZW50bHkuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGZldGNoV2l0aFJldHJ5KFxuICB1cmw6IHN0cmluZyxcbiAgaW5pdD86IFJlcXVlc3RJbml0LFxuKTogUHJvbWlzZTxSZXNwb25zZT4ge1xuICBsZXQgbGFzdEVycm9yOiB1bmtub3duO1xuXG4gIGZvciAobGV0IGF0dGVtcHQgPSAxOyBhdHRlbXB0IDw9IFJFR0lTVFJZX1BST0JFX0FUVEVNUFRTOyBhdHRlbXB0KyspIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsIHsgLi4uaW5pdCwgZGlzcGF0Y2hlciB9KTtcbiAgICAgIGlmICghaXNUcmFuc2llbnRTdGF0dXMocmVzcG9uc2Uuc3RhdHVzKSkge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICB9XG4gICAgICBsYXN0RXJyb3IgPSBuZXcgRXJyb3IoYHJlZ2lzdHJ5IHJlc3BvbmRlZCBIVFRQICR7cmVzcG9uc2Uuc3RhdHVzfWApO1xuICAgICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgICBgVHJhbnNpZW50IEhUVFAgJHtyZXNwb25zZS5zdGF0dXN9IGZyb20gJyR7dXJsfScgKGF0dGVtcHQgJHthdHRlbXB0fS8ke1JFR0lTVFJZX1BST0JFX0FUVEVNUFRTfSlgLFxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIC8vIGZldGNoIHJlamVjdHMgb24gbmV0d29yay1sZXZlbCBmYWlsdXJlcyAoRE5TLCBjb25uZWN0aW9uIHJlc2V0LCB0aW1lb3V0KSDigJQgYWx3YXlzIHRyYW5zaWVudC5cbiAgICAgIGxhc3RFcnJvciA9IGU7XG4gICAgICBsb2dnZXIuZGVidWcoXG4gICAgICAgIGBOZXR3b3JrIGVycm9yIGZldGNoaW5nICcke3VybH0nIChhdHRlbXB0ICR7YXR0ZW1wdH0vJHtSRUdJU1RSWV9QUk9CRV9BVFRFTVBUU30pOiAke2V9YCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGF0dGVtcHQgPCBSRUdJU1RSWV9QUk9CRV9BVFRFTVBUUykge1xuICAgICAgYXdhaXQgZGVsYXkoUkVHSVNUUllfUFJPQkVfQkFDS09GRl9NUyAqIDIgKiogKGF0dGVtcHQgLSAxKSk7XG4gICAgfVxuICB9XG5cbiAgdGhyb3cgRXJyb3JzLkV4dGVybmFsKFxuICAgIGBDb3VsZCBub3QgcmVhY2ggdGhlIHJlZ2lzdHJ5IGF0ICcke3VybH0nIGFmdGVyICR7UkVHSVNUUllfUFJPQkVfQVRURU1QVFN9IGF0dGVtcHRzOiAke2xhc3RFcnJvcn1gLFxuICApO1xufVxuXG4vLyBDYW4ndCB1c2UgQ0RLVEZfIGFzIHByZWZpeCBiZWNhdXNlIHlhcmdzIC5lbnYoXCJDREtURlwiKSBpbiBzdHJpY3QgbW9kZSBkb2VzIG5vdCBhbGxvdyB1cyB0b1xuLy8gUmVmZXIgdG86IGh0dHBzOi8vZ2l0aHViLmNvbS95YXJncy95YXJncy9pc3N1ZXMvODczXG5jb25zdCB7IEdJVEhVQl9BUElfVE9LRU5fQ0RLVEYgfSA9IHByb2Nlc3MuZW52O1xuXG4vLyB7XG4vLyAgIFwidmVyc2lvblwiOiBcIjEuMC4wXCIsXG4vLyAgIFwibmFtZVwiOiBcInRlc3RVU0hhc0ZcIixcbi8vICAgXCJwcm9ibGVtc1wiOiBbXG4vLyAgICAgXCJleHRyYW5lb3VzOiBhcmNoaXZlci11dGlsc0AyLjEuMCAvcHJpdmF0ZS92YXIvZm9sZGVycy96Xy92MDNsMzNkNTVmYjU3bnJyM2IxcTAzY2gwMDAwZ3EvVC90ZXN0VVNIYXNGL25vZGVfbW9kdWxlcy9hcmNoaXZlci11dGlsc1wiLFxuLy8gICBdLFxuLy8gICBcImRlcGVuZGVuY2llc1wiOiB7XG4vLyAgICAgXCJAY2RrdGYvcHJvdmlkZXItcmFuZG9tXCI6IHtcbi8vICAgICAgIFwidmVyc2lvblwiOiBcIjMuMC4xMVwiLFxuLy8gICAgICAgXCJyZXNvbHZlZFwiOiBcImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BjZGt0Zi9wcm92aWRlci1yYW5kb20vLS9wcm92aWRlci1yYW5kb20tMy4wLjExLnRnelwiXG4vLyAgICAgfSxcbmNvbnN0IG5wbUxpc3RTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIGRlcGVuZGVuY2llczogei5yZWNvcmQoXG4gICAgICB6LnN0cmluZygpLFxuICAgICAgelxuICAgICAgICAub2JqZWN0KHtcbiAgICAgICAgICB2ZXJzaW9uOiB6LnN0cmluZygpLFxuICAgICAgICB9KVxuICAgICAgICAubG9vc2UoKSxcbiAgICApLFxuICB9KVxuICAucGFydGlhbCgpXG4gIC5sb29zZSgpO1xuXG4vLyB7XG4vLyAgIFwidHlwZVwiOiBcInRyZWVcIixcbi8vICAgXCJkYXRhXCI6IHtcbi8vICAgICBcInR5cGVcIjogXCJsaXN0XCIsXG4vLyAgICAgXCJ0cmVlc1wiOiBbXG4vLyAgICAgICB7XG4vLyAgICAgICAgIFwibmFtZVwiOiBcIkBjZGt0Zi9wcm92aWRlci1yYW5kb21AMy4wLjExXCIsXG4vLyAgICAgICAgIFwiY2hpbGRyZW5cIjogW10sXG4vLyAgICAgICAgIFwiaGludFwiOiBudWxsLFxuLy8gICAgICAgICBcImNvbG9yXCI6IFwiYm9sZFwiLFxuLy8gICAgICAgICBcImRlcHRoXCI6IDBcbi8vICAgICAgIH1cbi8vICAgICBdXG4vLyAgIH1cbi8vIH1cbmNvbnN0IHlhcm5MaXN0U2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICBkYXRhOiB6XG4gICAgICAub2JqZWN0KHtcbiAgICAgICAgdHJlZXM6IHouYXJyYXkoXG4gICAgICAgICAgelxuICAgICAgICAgICAgLm9iamVjdCh7XG4gICAgICAgICAgICAgIG5hbWU6IHouc3RyaW5nKCksXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnBhcnRpYWwoKVxuICAgICAgICAgICAgLmxvb3NlKCksXG4gICAgICAgICksXG4gICAgICB9KVxuICAgICAgLnBhcnRpYWwoKVxuICAgICAgLmxvb3NlKCksXG4gIH0pXG4gIC5wYXJ0aWFsKClcbiAgLmxvb3NlKCk7XG5cbi8vIFtcbi8vICAge1xuLy8gICAgIFwibmFtZVwiOiBcImFwcGRpcnNcIixcbi8vICAgICBcInZlcnNpb25cIjogXCIxLjQuNFwiXG4vLyAgIH0sXG4vLyAgIHtcbmNvbnN0IHBpcFBhY2thZ2VTY2hlbWEgPSB6LmFycmF5KFxuICB6Lm9iamVjdCh7IG5hbWU6IHouc3RyaW5nKCksIHZlcnNpb246IHouc3RyaW5nKCkgfSkubG9vc2UoKSxcbik7XG5cbi8qKlxuICogbWFuYWdlcyBpbnN0YWxsaW5nLCB1cGRhdGluZywgYW5kIHJlbW92aW5nIGRlcGVuZGVuY2llc1xuICogaW4gdGhlIHBhY2thZ2Ugc3lzdGVtIHVzZWQgYnkgdGhlIHRhcmdldCBsYW5ndWFnZSBvZiBhIENES1ROXG4gKiBwcm9qZWN0XG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBQYWNrYWdlTWFuYWdlciB7XG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCByZWFkb25seSB3b3JraW5nRGlyZWN0b3J5OiBzdHJpbmcpIHt9XG5cbiAgcHVibGljIHN0YXRpYyBmb3JMYW5ndWFnZShcbiAgICBsYW5ndWFnZTogTGFuZ3VhZ2UsXG4gICAgd29ya2luZ0RpcmVjdG9yeTogc3RyaW5nLFxuICApOiBQYWNrYWdlTWFuYWdlciB7XG4gICAgc3dpdGNoIChsYW5ndWFnZSkge1xuICAgICAgY2FzZSBMYW5ndWFnZS5HTzpcbiAgICAgICAgcmV0dXJuIG5ldyBHb1BhY2thZ2VNYW5hZ2VyKHdvcmtpbmdEaXJlY3RvcnkpO1xuICAgICAgY2FzZSBMYW5ndWFnZS5UWVBFU0NSSVBUOlxuICAgICAgICByZXR1cm4gbmV3IE5vZGVQYWNrYWdlTWFuYWdlcih3b3JraW5nRGlyZWN0b3J5KTtcbiAgICAgIGNhc2UgTGFuZ3VhZ2UuUFlUSE9OOlxuICAgICAgICByZXR1cm4gbmV3IFB5dGhvblBhY2thZ2VNYW5hZ2VyKHdvcmtpbmdEaXJlY3RvcnkpO1xuICAgICAgY2FzZSBMYW5ndWFnZS5DU0hBUlA6XG4gICAgICAgIHJldHVybiBuZXcgTnVnZXRQYWNrYWdlTWFuYWdlcih3b3JraW5nRGlyZWN0b3J5KTtcbiAgICAgIGNhc2UgTGFuZ3VhZ2UuSkFWQTpcbiAgICAgICAgaWYgKEdyYWRsZVBhY2thZ2VNYW5hZ2VyLmlzR3JhZGxlUHJvamVjdCh3b3JraW5nRGlyZWN0b3J5KSkge1xuICAgICAgICAgIHJldHVybiBuZXcgR3JhZGxlUGFja2FnZU1hbmFnZXIod29ya2luZ0RpcmVjdG9yeSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBNYXZlblBhY2thZ2VNYW5hZ2VyKHdvcmtpbmdEaXJlY3RvcnkpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGxhbmd1YWdlOiAke2xhbmd1YWdlfWApO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhYnN0cmFjdCBhZGRQYWNrYWdlKFxuICAgIHBhY2thZ2VOYW1lOiBzdHJpbmcsXG4gICAgcGFja2FnZVZlcnNpb24/OiBzdHJpbmcsXG4gICAgc2lsZW50PzogYm9vbGVhbixcbiAgKTogUHJvbWlzZTx2b2lkPjtcbiAgLy8gYWRkIGNoZWNrIGlmIHBhY2thZ2UgZXhpc3RzIGFscmVhZHkuIG1pZ2h0IHF1ZXJ5IHZlcnNpb24gaW4gdGhlIGZ1dHVyZSBhbmQgb2ZmZXIgdG8gdXBncmFkZT9cblxuICBwdWJsaWMgYWJzdHJhY3QgaXNOcG1WZXJzaW9uQXZhaWxhYmxlKFxuICAgIHBhY2thZ2VOYW1lOiBzdHJpbmcsXG4gICAgcGFja2FnZVZlcnNpb246IHN0cmluZyxcbiAgKTogUHJvbWlzZTxib29sZWFuPjtcblxuICBwdWJsaWMgYWJzdHJhY3QgbGlzdFByb3ZpZGVyUGFja2FnZXMoKTogUHJvbWlzZTxcbiAgICB7IG5hbWU6IHN0cmluZzsgdmVyc2lvbjogc3RyaW5nIH1bXVxuICA+O1xufVxuXG5jbGFzcyBOb2RlUGFja2FnZU1hbmFnZXIgZXh0ZW5kcyBQYWNrYWdlTWFuYWdlciB7XG4gIHByaXZhdGUgaGFzWWFybkxvY2tmaWxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBleGlzdHNTeW5jKHBhdGguam9pbih0aGlzLndvcmtpbmdEaXJlY3RvcnksIFwieWFybi5sb2NrXCIpKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBhZGRQYWNrYWdlKFxuICAgIHBhY2thZ2VOYW1lOiBzdHJpbmcsXG4gICAgcGFja2FnZVZlcnNpb24/OiBzdHJpbmcsXG4gICAgc2lsZW50PzogYm9vbGVhbixcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc29sZS5sb2coYEFkZGluZyBwYWNrYWdlICR7cGFja2FnZU5hbWV9IEAgJHtwYWNrYWdlVmVyc2lvbn1gKTtcblxuICAgIC8vIHByb2JlIGZvciBwYWNrYWdlLWxvY2suanNvbiBvciB5YXJuLmxvY2tcbiAgICBsZXQgY29tbWFuZCA9IFwibnBtXCI7XG4gICAgbGV0IGFyZ3MgPSBbXCJpbnN0YWxsXCJdO1xuXG4gICAgaWYgKHRoaXMuaGFzWWFybkxvY2tmaWxlKCkpIHtcbiAgICAgIGNvbW1hbmQgPSBcInlhcm5cIjtcbiAgICAgIGFyZ3MgPSBbXCJhZGRcIl07XG4gICAgfVxuICAgIGFyZ3MucHVzaChcbiAgICAgIHBhY2thZ2VWZXJzaW9uID8gcGFja2FnZU5hbWUgKyBcIkBcIiArIHBhY2thZ2VWZXJzaW9uIDogcGFja2FnZU5hbWUsXG4gICAgKTtcblxuICAgIGlmIChzaWxlbnQpIHtcbiAgICAgIGFyZ3MucHVzaChcIi0tc2lsZW50XCIpO1xuICAgICAgYXJncy5wdXNoKFwiLS1uby1wcm9ncmVzc1wiKTtcbiAgICB9XG5cbiAgICAvLyBJbnN0YWxsIGV4YWN0IHZlcnNpb25cbiAgICAvLyBZYXJuOiBodHRwczovL2NsYXNzaWMueWFybnBrZy5jb20vbGFuZy9lbi9kb2NzL2NsaS9hZGQvI3RvYy15YXJuLWFkZC1leGFjdC1lXG4gICAgLy8gTnBtOiBodHRwczovL2RvY3MubnBtanMuY29tL2NsaS92OC9jb21tYW5kcy9ucG0taW5zdGFsbCNzYXZlLWV4YWN0XG4gICAgYXJncy5wdXNoKFwiLUVcIik7XG5cbiAgICBsb2dnZXIuaW5mbyhcbiAgICAgIGBJbnN0YWxsaW5nIHBhY2thZ2UgJHtwYWNrYWdlTmFtZX0gQCAke3BhY2thZ2VWZXJzaW9ufSB1c2luZyAke2NvbW1hbmR9LmAsXG4gICAgKTtcblxuICAgIGF3YWl0IGV4ZWMoY29tbWFuZCwgYXJncywgeyBjd2Q6IHRoaXMud29ya2luZ0RpcmVjdG9yeSB9KTtcblxuICAgIGxvZ2dlci5pbmZvKFwiUGFja2FnZSBpbnN0YWxsZWQuXCIpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGlzTnBtVmVyc2lvbkF2YWlsYWJsZShcbiAgICBfcGFja2FnZU5hbWU6IHN0cmluZyxcbiAgICBfcGFja2FnZVZlcnNpb246IHN0cmluZyxcbiAgKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgLy8gV2UgZ2V0IHRoZSBsaXN0IG9mIGF2YWlsYWJsZSB2ZXJzaW9ucyBmcm9tIG5wbSwgbm8gbmVlZCB0byBjaGVjayBoZXJlXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGxpc3RZYXJuUGFja2FnZXMoKTogUHJvbWlzZTxcbiAgICB7IG5hbWU6IHN0cmluZzsgdmVyc2lvbjogc3RyaW5nIH1bXVxuICA+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3Rkb3V0ID0gYXdhaXQgZXhlYyhcInlhcm5cIiwgW1wibGlzdFwiLCBcIi0tanNvblwiXSwge1xuICAgICAgICBjd2Q6IHRoaXMud29ya2luZ0RpcmVjdG9yeSxcbiAgICAgIH0pO1xuXG4gICAgICBsb2dnZXIuZGVidWcoYExpc3RpbmcgeWFybiBwYWNrYWdlcyB1c2luZyBcInlhcm4gbGlzdCAtLWpzb25cIjogJHtzdGRvdXR9YCk7XG5cbiAgICAgIGNvbnN0IGpzb24gPSB5YXJuTGlzdFNjaGVtYS5wYXJzZShKU09OLnBhcnNlKHN0ZG91dCkpO1xuXG4gICAgICByZXR1cm4gKGpzb24/LmRhdGE/LnRyZWVzIHx8IFtdKVxuICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgIChkZXA6IGFueSkgPT5cbiAgICAgICAgICAgIGRlcC5uYW1lLnN0YXJ0c1dpdGgoXCJAY2RrdGYvcHJvdmlkZXItXCIpIHx8XG4gICAgICAgICAgICBkZXAubmFtZS5zdGFydHNXaXRoKFwiQGNka3RuL3Byb3ZpZGVyLVwiKSxcbiAgICAgICAgKVxuICAgICAgICAubWFwKChkZXA6IGFueSkgPT4gKHtcbiAgICAgICAgICBuYW1lOiBgQCR7ZGVwLm5hbWUuc3BsaXQoXCJAXCIpWzFdfWAsXG4gICAgICAgICAgdmVyc2lvbjogZGVwLm5hbWUuc3BsaXQoXCJAXCIpWzJdLFxuICAgICAgICB9KSk7XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDb3VsZCBub3QgZGV0ZXJtaW5lIGluc3RhbGxlZCBwYWNrYWdlcyB1c2luZyAneWFybiBsaXN0IC0tanNvbic6ICR7ZX1gLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGxpc3ROcG1QYWNrYWdlcygpOiBQcm9taXNlPFxuICAgIHsgbmFtZTogc3RyaW5nOyB2ZXJzaW9uOiBzdHJpbmcgfVtdXG4gID4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdGRvdXQgPSBhd2FpdCBleGVjKFwibnBtXCIsIFtcImxpc3RcIiwgXCItLWpzb25cIl0sIHtcbiAgICAgICAgY3dkOiB0aGlzLndvcmtpbmdEaXJlY3RvcnksXG4gICAgICB9KTtcblxuICAgICAgbG9nZ2VyLmRlYnVnKGBMaXN0aW5nIG5wbSBwYWNrYWdlcyB1c2luZyBcIm5wbSBsaXN0IC0tanNvblwiOiAke3N0ZG91dH1gKTtcbiAgICAgIGNvbnN0IGpzb24gPSBucG1MaXN0U2NoZW1hLnBhcnNlKEpTT04ucGFyc2Uoc3Rkb3V0KSk7XG5cbiAgICAgIHJldHVybiBPYmplY3QuZW50cmllcyhqc29uPy5kZXBlbmRlbmNpZXMgfHwge30pXG4gICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgKFtkZXBOYW1lXSkgPT5cbiAgICAgICAgICAgIGRlcE5hbWUuc3RhcnRzV2l0aChcIkBjZGt0Zi9wcm92aWRlci1cIikgfHxcbiAgICAgICAgICAgIGRlcE5hbWUuc3RhcnRzV2l0aChcIkBjZGt0bi9wcm92aWRlci1cIiksXG4gICAgICAgIClcbiAgICAgICAgLm1hcCgoW25hbWUsIGRlcF0pID0+ICh7IG5hbWUsIHZlcnNpb246IGRlcC52ZXJzaW9uIH0pKTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENvdWxkIG5vdCBkZXRlcm1pbmUgaW5zdGFsbGVkIHBhY2thZ2VzIHVzaW5nICducG0gbGlzdCAtLWpzb24nOiAke2V9YCxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGxpc3RQcm92aWRlclBhY2thZ2VzKCk6IFByb21pc2U8XG4gICAgeyBuYW1lOiBzdHJpbmc7IHZlcnNpb246IHN0cmluZyB9W11cbiAgPiB7XG4gICAgcmV0dXJuIHRoaXMuaGFzWWFybkxvY2tmaWxlKClcbiAgICAgID8gdGhpcy5saXN0WWFyblBhY2thZ2VzKClcbiAgICAgIDogdGhpcy5saXN0TnBtUGFja2FnZXMoKTtcbiAgfVxufVxuXG5jbGFzcyBQeXRob25QYWNrYWdlTWFuYWdlciBleHRlbmRzIFBhY2thZ2VNYW5hZ2VyIHtcbiAgcHJpdmF0ZSBnZXQgYXBwQ29tbWFuZCgpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIEpTT04ucGFyc2UoXG4gICAgICAgIGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICBwYXRoLnJlc29sdmUodGhpcy53b3JraW5nRGlyZWN0b3J5LCBcImNka3RmLmpzb25cIiksXG4gICAgICAgICAgXCJ1dGY4XCIsXG4gICAgICAgICksXG4gICAgICApW1wiYXBwXCJdO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgdGhyb3cgRXJyb3JzLlVzYWdlKFxuICAgICAgICBgQ291bGQgbm90IGZpbmQgZmluZCBhbmQgcGFyc2UgY2RrdGYuanNvbiBpbiAke3RoaXMud29ya2luZ0RpcmVjdG9yeX1gLFxuICAgICAgICBlLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgYWRkUGFja2FnZShcbiAgICBwYWNrYWdlTmFtZTogc3RyaW5nLFxuICAgIHBhY2thZ2VWZXJzaW9uPzogc3RyaW5nLFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB1c2VQaXBlbnYgPSB0aGlzLmFwcENvbW1hbmQuaW5jbHVkZXMoXCJwaXBlbnZcIik7XG5cbiAgICBpZiAodXNlUGlwZW52KSB7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgYEluc3RhbGxpbmcgcGFja2FnZSAke3BhY2thZ2VOYW1lfSBAICR7cGFja2FnZVZlcnNpb259IHVzaW5nIHBpcGVudi5gLFxuICAgICAgKTtcblxuICAgICAgYXdhaXQgZXhlYyhcInBpcGVudlwiLCBbXCJpbnN0YWxsXCIsIGAke3BhY2thZ2VOYW1lfX49JHtwYWNrYWdlVmVyc2lvbn1gXSwge1xuICAgICAgICBjd2Q6IHRoaXMud29ya2luZ0RpcmVjdG9yeSxcbiAgICAgICAgZW52OiB7XG4gICAgICAgICAgLi4ucHJvY2Vzcy5lbnYsXG4gICAgICAgICAgUElQRU5WX1FVSUVUOiBcIjFcIixcbiAgICAgICAgfSxcbiAgICAgICAgc3RkaW86IFtcImluaGVyaXRcIiwgMSwgMV0sXG4gICAgICB9KTtcblxuICAgICAgY29uc29sZS5sb2coXCJQYWNrYWdlIGluc3RhbGxlZC5cIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBgSW5zdGFsbGluZyBwYWNrYWdlICR7cGFja2FnZU5hbWV9IEAgJHtwYWNrYWdlVmVyc2lvbn0gdXNpbmcgcGlwLmAsXG4gICAgICApO1xuXG4gICAgICBjb25zdCByZXF1aXJlbWVudHNGaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICAgICAgdGhpcy53b3JraW5nRGlyZWN0b3J5LFxuICAgICAgICBcInJlcXVpcmVtZW50cy50eHRcIixcbiAgICAgICk7XG4gICAgICBpZiAoIWZzLmV4aXN0c1N5bmMocmVxdWlyZW1lbnRzRmlsZVBhdGgpKSB7XG4gICAgICAgIHRocm93IEVycm9ycy5Vc2FnZShcbiAgICAgICAgICBgQ291bGQgbm90IGZpbmQgcmVxdWlyZW1lbnRzLnR4dCBpbiAke3RoaXMud29ya2luZ0RpcmVjdG9yeX1gLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCByZXF1aXJlbWVudHMgPSBhd2FpdCBmcy5yZWFkRmlsZShyZXF1aXJlbWVudHNGaWxlUGF0aCwgXCJ1dGY4XCIpO1xuICAgICAgY29uc3QgcmVxdWlyZW1lbnRMaW5lID0gcmVxdWlyZW1lbnRzXG4gICAgICAgIC5zcGxpdChcIlxcblwiKVxuICAgICAgICAuZmluZCgobGluZSkgPT4gbGluZS5pbmNsdWRlcyhwYWNrYWdlTmFtZSkpO1xuXG4gICAgICBsb2dnZXIuZGVidWcoXG4gICAgICAgIGBSZWFkIHJlcXVpcmVtZW50cy50eHQgZmlsZSBhbmQgZm91bmQgbGluZSBpbmNsdWRpbmcgJHtwYWNrYWdlTmFtZX06ICR7cmVxdWlyZW1lbnRMaW5lfWAsXG4gICAgICApO1xuXG4gICAgICBpZiAocmVxdWlyZW1lbnRMaW5lKSB7XG4gICAgICAgIGlmIChwYWNrYWdlVmVyc2lvbiA/IHJlcXVpcmVtZW50TGluZS5pbmNsdWRlcyhwYWNrYWdlVmVyc2lvbikgOiB0cnVlKSB7XG4gICAgICAgICAgbG9nZ2VyLmluZm8oXG4gICAgICAgICAgICBgUGFja2FnZSAke3BhY2thZ2VOYW1lfSBhbHJlYWR5IGluc3RhbGxlZC4gU2tpcHBpbmcgaW5zdGFsbGF0aW9uLmAsXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgICAgICAgYEZvdW5kIHRoZSBwYWNrYWdlIGJ1dCB3aXRoIGEgZGlmZmVyZW50IHZlcnNpb24sIGNvbnRpbnVpbmdgLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgbmV3UmVxdWlyZW1lbnRzID1cbiAgICAgICAgcmVxdWlyZW1lbnRzXG4gICAgICAgICAgLnNwbGl0KFwiXFxuXCIpXG4gICAgICAgICAgLmZpbHRlcigobGluZSkgPT4gIWxpbmUuc3RhcnRzV2l0aChwYWNrYWdlTmFtZSkpXG4gICAgICAgICAgLmpvaW4oXCJcXG5cIikgK1xuICAgICAgICBgXFxuJHtwYWNrYWdlTmFtZX0ke3BhY2thZ2VWZXJzaW9uID8gYH49JHtwYWNrYWdlVmVyc2lvbn1gIDogXCJcIn1gO1xuICAgICAgYXdhaXQgZnMud3JpdGVGaWxlKHJlcXVpcmVtZW50c0ZpbGVQYXRoLCBuZXdSZXF1aXJlbWVudHMsIFwidXRmOFwiKTtcblxuICAgICAgYXdhaXQgZXhlYyhcInBpcFwiLCBbXCJpbnN0YWxsXCIsIFwiLXJcIiwgXCJyZXF1aXJlbWVudHMudHh0XCJdLCB7XG4gICAgICAgIGN3ZDogdGhpcy53b3JraW5nRGlyZWN0b3J5LFxuICAgICAgICBzdGRpbzogW1wiaW5oZXJpdFwiLCAxLCAxXSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zb2xlLmxvZyhcIlBhY2thZ2UgaW5zdGFsbGVkLlwiKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgaXNOcG1WZXJzaW9uQXZhaWxhYmxlKFxuICAgIHBhY2thZ2VOYW1lOiBzdHJpbmcsXG4gICAgcGFja2FnZVZlcnNpb246IHN0cmluZyxcbiAgKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgYENoZWNraW5nIGlmICR7cGFja2FnZU5hbWV9QCR7cGFja2FnZVZlcnNpb259IGlzIGF2YWlsYWJsZSBmb3IgUHl0aG9uYCxcbiAgICApO1xuICAgIGNvbnN0IHVybCA9IGBodHRwczovL3B5cGkub3JnL3B5cGkvJHtwYWNrYWdlTmFtZX0vJHtwYWNrYWdlVmVyc2lvbn0vanNvbmA7XG4gICAgbG9nZ2VyLmRlYnVnKGBGZXRjaGluZyBwYWNrYWdlIGluZm9ybWF0aW9uIGZvciAke3BhY2thZ2VOYW1lfSBmcm9tICR7dXJsfWApO1xuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaFdpdGhSZXRyeSh1cmwpO1xuICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IEhUVFBfTk9UX0ZPVU5EKSB7XG4gICAgICBsb2dnZXIuZGVidWcoYFB5UEkgcmVwb3J0cyAke3BhY2thZ2VOYW1lfUAke3BhY2thZ2VWZXJzaW9ufSBub3QgZm91bmRgKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBqc29uID0gKGF3YWl0IHJlc3BvbnNlLmpzb24oKSkgYXMgYW55O1xuICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgIGBHb3QgcmVzcG9uc2UgZnJvbSBQeVBJIGZvciAke3BhY2thZ2VOYW1lfUAke3BhY2thZ2VWZXJzaW9ufTogJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAganNvbixcbiAgICAgICl9YCxcbiAgICApO1xuXG4gICAgcmV0dXJuIEJvb2xlYW4oanNvbi5pbmZvKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBsaXN0UGlwZW52UGFja2FnZXMoKTogUHJvbWlzZTxcbiAgICB7IG5hbWU6IHN0cmluZzsgdmVyc2lvbjogc3RyaW5nIH1bXVxuICA+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3Rkb3V0ID0gYXdhaXQgZXhlYyhcbiAgICAgICAgXCJwaXBlbnZcIixcbiAgICAgICAgW1wicnVuXCIsIFwicGlwXCIsIFwibGlzdFwiLCBcIi0tZm9ybWF0PWpzb25cIl0sXG4gICAgICAgIHtcbiAgICAgICAgICBjd2Q6IHRoaXMud29ya2luZ0RpcmVjdG9yeSxcbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgICBsb2dnZXIuZGVidWcoXG4gICAgICAgIGBMaXN0aW5nIHBpcGVudiBwYWNrYWdlcyB1c2luZyBcInBpcGVudiBydW4gcGlwIGxpc3QgLS1mb3JtYXQ9anNvblwiOiAke3N0ZG91dH1gLFxuICAgICAgKTtcblxuICAgICAgY29uc3QgbGlzdCA9IHBpcFBhY2thZ2VTY2hlbWEucGFyc2UoSlNPTi5wYXJzZShzdGRvdXQpKTtcbiAgICAgIHJldHVybiBsaXN0LmZpbHRlcihcbiAgICAgICAgKGl0ZW0pID0+XG4gICAgICAgICAgaXRlbS5uYW1lLnN0YXJ0c1dpdGgoXCJjZGt0Zi1jZGt0Zi1wcm92aWRlclwiKSB8fFxuICAgICAgICAgIGl0ZW0ubmFtZS5zdGFydHNXaXRoKFwiY2RrdG4tcHJvdmlkZXJcIiksXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ291bGQgbm90IGRldGVybWluZSBpbnN0YWxsZWQgcGFja2FnZXMgdXNpbmcgJ3BpcGVudiBydW4gcGlwIGxpc3QgLS1mb3JtYXQ9anNvbic6ICR7ZX1gLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgbGlzdFBpcFBhY2thZ2VzKCk6IFByb21pc2U8eyBuYW1lOiBzdHJpbmc7IHZlcnNpb246IHN0cmluZyB9W10+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3Rkb3V0ID0gYXdhaXQgZXhlYyhcInBpcFwiLCBbXCJsaXN0XCIsIFwiLS1mb3JtYXQ9anNvblwiXSwge1xuICAgICAgICBjd2Q6IHRoaXMud29ya2luZ0RpcmVjdG9yeSxcbiAgICAgIH0pO1xuICAgICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgICBgTGlzdGluZyBwaXAgcGFja2FnZXMgdXNpbmcgXCJwaXAgbGlzdCAtLWZvcm1hdD1qc29uXCI6ICR7c3Rkb3V0fWAsXG4gICAgICApO1xuXG4gICAgICBjb25zdCBsaXN0ID0gcGlwUGFja2FnZVNjaGVtYS5wYXJzZShKU09OLnBhcnNlKHN0ZG91dCkpO1xuICAgICAgcmV0dXJuIGxpc3QuZmlsdGVyKFxuICAgICAgICAoaXRlbSkgPT5cbiAgICAgICAgICBpdGVtLm5hbWUuc3RhcnRzV2l0aChcImNka3RmLWNka3RmLXByb3ZpZGVyXCIpIHx8XG4gICAgICAgICAgaXRlbS5uYW1lLnN0YXJ0c1dpdGgoXCJjZGt0bi1wcm92aWRlclwiKSxcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDb3VsZCBub3QgZGV0ZXJtaW5lIGluc3RhbGxlZCBwYWNrYWdlcyB1c2luZyAncGlwIGxpc3QgLS1mb3JtYXQ9anNvbic6ICR7ZX1gLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgbGlzdFByb3ZpZGVyUGFja2FnZXMoKTogUHJvbWlzZTxcbiAgICB7IG5hbWU6IHN0cmluZzsgdmVyc2lvbjogc3RyaW5nIH1bXVxuICA+IHtcbiAgICByZXR1cm4gdGhpcy5hcHBDb21tYW5kLmluY2x1ZGVzKFwicGlwZW52XCIpXG4gICAgICA/IHRoaXMubGlzdFBpcGVudlBhY2thZ2VzKClcbiAgICAgIDogdGhpcy5saXN0UGlwUGFja2FnZXMoKTtcbiAgfVxufVxuXG5jbGFzcyBOdWdldFBhY2thZ2VNYW5hZ2VyIGV4dGVuZHMgUGFja2FnZU1hbmFnZXIge1xuICBwdWJsaWMgYXN5bmMgYWRkUGFja2FnZShcbiAgICBwYWNrYWdlTmFtZTogc3RyaW5nLFxuICAgIHBhY2thZ2VWZXJzaW9uPzogc3RyaW5nLFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBjb21tYW5kID0gXCJkb3RuZXRcIjtcbiAgICBjb25zdCBhcmdzID0gW1wiYWRkXCIsIFwicGFja2FnZVwiLCBwYWNrYWdlTmFtZV07XG4gICAgaWYgKHBhY2thZ2VWZXJzaW9uKSB7XG4gICAgICBhcmdzLnB1c2goXCItLXZlcnNpb25cIiwgcGFja2FnZVZlcnNpb24pO1xuICAgIH1cbiAgICBjb25zb2xlLmxvZyhcbiAgICAgIGBJbnN0YWxsaW5nIHBhY2thZ2UgJHtwYWNrYWdlTmFtZX0gQCAke3BhY2thZ2VWZXJzaW9ufSB1c2luZyBcIiR7Y29tbWFuZH0gJHthcmdzLmpvaW4oXG4gICAgICAgIFwiIFwiLFxuICAgICAgKX1cIi5gLFxuICAgICk7XG5cbiAgICBhd2FpdCBleGVjKGNvbW1hbmQsIGFyZ3MsIHsgY3dkOiB0aGlzLndvcmtpbmdEaXJlY3RvcnkgfSk7XG5cbiAgICBjb25zb2xlLmxvZyhcIlBhY2thZ2UgaW5zdGFsbGVkLlwiKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBpc05wbVZlcnNpb25BdmFpbGFibGUoXG4gICAgcGFja2FnZU5hbWU6IHN0cmluZyxcbiAgICBwYWNrYWdlVmVyc2lvbjogc3RyaW5nLFxuICApOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBsb2dnZXIuZGVidWcoYENoZWNraW5nIGlmICR7cGFja2FnZU5hbWV9QCR7cGFja2FnZVZlcnNpb259IGlzIGF2YWlsYWJsZWApO1xuXG4gICAgY29uc3QgW293bmVyLCAuLi5yZXN0XSA9IHBhY2thZ2VOYW1lLnNwbGl0KFwiLlwiKTtcbiAgICBjb25zdCBpZCA9IHJlc3RbcmVzdC5sZW5ndGggLSAxXTtcbiAgICBjb25zdCB1cmwgPSBgaHR0cHM6Ly9henVyZXNlYXJjaC11c25jLm51Z2V0Lm9yZy9xdWVyeT9xPW93bmVyOiR7b3duZXJ9JTIwaWQ6JHtpZH0mcHJlcmVsZWFzZT1mYWxzZSZzZW1WZXJMZXZlbD0yLjAuMGA7XG4gICAgbG9nZ2VyLmRlYnVnKGBGZXRjaGluZyBwYWNrYWdlIG1ldGFkYXRhIGZyb20gTnVnZXQ6ICcke3VybH0nYCk7XG5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoV2l0aFJldHJ5KHVybCk7XG4gICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gSFRUUF9OT1RfRk9VTkQpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgTnVHZXQgcmVwb3J0cyAke3BhY2thZ2VOYW1lfUAke3BhY2thZ2VWZXJzaW9ufSBub3QgZm91bmRgKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QganNvbiA9IChhd2FpdCByZXNwb25zZS5qc29uKCkpIGFzIHtcbiAgICAgIGRhdGE6IHsgaWQ6IHN0cmluZzsgdmVyc2lvbnM6IHsgdmVyc2lvbjogc3RyaW5nIH1bXSB9W107XG4gICAgfTtcbiAgICBsb2dnZXIuZGVidWcoXG4gICAgICBgR290IHJlc3BvbnNlIGZyb20gTnVHZXQgZm9yICR7cGFja2FnZU5hbWV9IDogJHtKU09OLnN0cmluZ2lmeShqc29uKX1gLFxuICAgICk7XG5cbiAgICBpZiAoIWpzb24/LmRhdGE/Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGZhbHNlOyAvLyBObyBwYWNrYWdlIGZvdW5kXG4gICAgfVxuXG4gICAgY29uc3QgcGFja2FnZVZlcnNpb25zID1cbiAgICAgIGpzb24uZGF0YS5maW5kKChwKSA9PiBwLmlkID09PSBwYWNrYWdlTmFtZSk/LnZlcnNpb25zID8/IFtdO1xuXG4gICAgaWYgKCFwYWNrYWdlVmVyc2lvbnMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZmFsc2U7IC8vIE5vIHBhY2thZ2UgcmVsZWFzZSBtYXRjaGluZyB0aGUgaWQgZm91bmRcbiAgICB9XG5cbiAgICByZXR1cm4gcGFja2FnZVZlcnNpb25zLnNvbWUoKHYpID0+IHYudmVyc2lvbiA9PT0gcGFja2FnZVZlcnNpb24pO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGxpc3RQcm92aWRlclBhY2thZ2VzKCk6IFByb21pc2U8XG4gICAgeyBuYW1lOiBzdHJpbmc7IHZlcnNpb246IHN0cmluZyB9W11cbiAgPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0ZG91dCA9IGF3YWl0IGV4ZWMoXCJkb3RuZXRcIiwgW1wibGlzdFwiLCBcInBhY2thZ2VcIl0sIHtcbiAgICAgICAgY3dkOiB0aGlzLndvcmtpbmdEaXJlY3RvcnksXG4gICAgICB9KTtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgYExpc3RpbmcgbnVnZXQgcGFja2FnZXMgdXNpbmcgXCJkb3RuZXQgbGlzdCBwYWNrYWdlXCI6ICR7c3Rkb3V0fWAsXG4gICAgICApO1xuXG4gICAgICBjb25zdCByZWdleCA9XG4gICAgICAgIC9eXFxzKj5cXHMoKD86SGFzaGlDb3JwXFwuQ2RrdGZ8SW9cXC5DZGt0bilcXC5Qcm92aWRlcnNcXC5bXFx3Ll0rKVxccysoKD86XFxkK1xcLil7Mn1cXGQrKD86LVxcUyspPylcXHMrKCg/OlxcZCtcXC4pezJ9XFxkKyg/Oi1cXFMrKT8pXFxzKiQvO1xuXG4gICAgICByZXR1cm4gc3Rkb3V0XG4gICAgICAgIC5zcGxpdChcIlxcblwiKVxuICAgICAgICAubWFwKChsaW5lOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAvLyBFeGFtcGxlIG91dHB1dDpcbiAgICAgICAgICAvLyBQcm9qZWN0ICdNeVRlcnJhZm9ybVN0YWNrJyBoYXMgdGhlIGZvbGxvd2luZyBwYWNrYWdlIHJlZmVyZW5jZXNcbiAgICAgICAgICAvLyAgW25ldDYuMF06XG4gICAgICAgICAgLy8gIFRvcC1sZXZlbCBQYWNrYWdlICAgICAgUmVxdWVzdGVkICAgUmVzb2x2ZWRcbiAgICAgICAgICAvLyAgPiBIYXNoaUNvcnAuQ2RrdGYgICAgICAwLjAuMCAgICAgICAwLjAuMFxuICAgICAgICAgIC8vIG1hdGNoWzBdID0gZnVsbCBtYXRjaFxuICAgICAgICAgIC8vIG1hdGNoWzFdID0gcGFja2FnZSBuYW1lXG4gICAgICAgICAgLy8gbWF0Y2hbMl0gPSByZXF1ZXN0ZWQgdmVyc2lvblxuICAgICAgICAgIC8vIG1hdGNoWzNdID0gcmVzb2x2ZWQgdmVyc2lvblxuICAgICAgICAgIHJldHVybiByZWdleC5leGVjKGxpbmUpO1xuICAgICAgICB9KVxuICAgICAgICAuZmlsdGVyKChtYXRjaCkgPT4gISFtYXRjaClcbiAgICAgICAgLm1hcCgobWF0Y2gpID0+ICh7IG5hbWU6IG1hdGNoIVsxXSwgdmVyc2lvbjogbWF0Y2ghWzNdIH0pKTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENvdWxkIG5vdCBkZXRlcm1pbmUgaW5zdGFsbGVkIHBhY2thZ2VzIHVzaW5nICdkb3RuZXQgbGlzdCBwYWNrYWdlJzogJHtlfWAsXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFNoYXJlZCBiYXNlIGZvciB0aGUgSmF2YSBwYWNrYWdlIG1hbmFnZXJzIChNYXZlbiBhbmQgR3JhZGxlKS4gQm90aCBpbnN0YWxsIGZyb20gTWF2ZW4gQ2VudHJhbCwgc28gdGhlIGNoZWNrIGZvclxuICogd2hldGhlciBhIGdpdmVuIHByb3ZpZGVyIHZlcnNpb24gZXhpc3RzIGlzIGNvbW1vbiB0byBib3RoIGFuZCBsaXZlcyBoZXJlOyB0aGUgY29uY3JldGUgc3ViY2xhc3NlcyBkaWZmZXIgb25seSBpbiBob3dcbiAqIHRoZXkgZGVjbGFyZSBhbmQgbGlzdCBkZXBlbmRlbmNpZXMgKHBvbS54bWwgdnMgYnVpbGQuZ3JhZGxlKS5cbiAqL1xuYWJzdHJhY3QgY2xhc3MgSmF2YVBhY2thZ2VNYW5hZ2VyIGV4dGVuZHMgUGFja2FnZU1hbmFnZXIge1xuICAvKipcbiAgICogUmVwb3J0cyB3aGV0aGVyIGBwYWNrYWdlTmFtZUBwYWNrYWdlVmVyc2lvbmAgaXMgcHVibGlzaGVkIG9uIE1hdmVuIENlbnRyYWwgYnkgcHJvYmluZyB0aGUgYXJ0aWZhY3QgcmVwb3NpdG9yeSBmb3JcbiAgICogdGhlIHZlcnNpb24ncyBgLnBvbWAgZGlyZWN0bHk6IEhUVFAgMjAwIG1lYW5zIHByZXNlbnQsIGFueXRoaW5nIGVsc2UgbWVhbnMgbm90IGF2YWlsYWJsZS5cbiAgICpcbiAgICogQHBhcmFtIHBhY2thZ2VOYW1lIC0gVGhlIEphdmEgY29vcmRpbmF0ZXMgaW4gXCJncm91cC5hcnRpZmFjdFwiIGZvcm0sIGUuZy4gXCJjb20uaGFzaGljb3JwLmNka3RmLXByb3ZpZGVyLXJhbmRvbVwiLlxuICAgKiBAcGFyYW0gcGFja2FnZVZlcnNpb24gLSBUaGUgZXhhY3QgdmVyc2lvbiB0byBjaGVjayBmb3IuXG4gICAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgYC5wb21gIGV4aXN0cyBvbiBNYXZlbiBDZW50cmFsLCBgZmFsc2VgIG90aGVyd2lzZS5cbiAgICogQHRocm93cyBJZiBgcGFja2FnZU5hbWVgIGlzIG5vdCBpbiB0aGUgZXhwZWN0ZWQgXCJncm91cC5hcnRpZmFjdFwiIGZvcm1hdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBpc05wbVZlcnNpb25BdmFpbGFibGUoXG4gICAgcGFja2FnZU5hbWU6IHN0cmluZyxcbiAgICBwYWNrYWdlVmVyc2lvbjogc3RyaW5nLFxuICApOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBsb2dnZXIuZGVidWcoYENoZWNraW5nIGlmICR7cGFja2FnZU5hbWV9QCR7cGFja2FnZVZlcnNpb259IGlzIGF2YWlsYWJsZWApO1xuXG4gICAgY29uc3QgcGFydHMgPSBwYWNrYWdlTmFtZS5zcGxpdChcIi5cIik7XG4gICAgaWYgKHBhcnRzLmxlbmd0aCAhPT0gMykge1xuICAgICAgdGhyb3cgRXJyb3JzLkludGVybmFsKFxuICAgICAgICBgRXhwZWN0ZWQgcGFja2FnZSBuYW1lIHRvIGJlIGluIGZvcm1hdCBcImdyb3VwLmFydGlmYWN0XCIsIGUuZy4gXCJjb20uaGFzaGljb3JwLmNka3RmLXByb3ZpZGVyLWdvb2dsZVwiLCBnb3Q6ICR7cGFja2FnZU5hbWV9YCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgYXJ0aWZhY3RJZCA9IHBhcnRzLnBvcCgpO1xuICAgIGNvbnN0IGdyb3VwSWQgPSBwYXJ0cy5qb2luKFwiLlwiKTtcblxuICAgIC8vIFByb2JlIHRoZSBhcnRpZmFjdCBDRE4gZGlyZWN0bHkgZm9yIHRoZSAucG9tOiAyMDAgPSBwcmVzZW50LCBhbnl0aGluZyBlbHNlID0gbm90IGF2YWlsYWJsZS5cbiAgICBjb25zdCBncm91cFBhdGggPSBncm91cElkLnJlcGxhY2UoL1xcLi9nLCBcIi9cIik7XG4gICAgY29uc3QgdXJsID0gYGh0dHBzOi8vcmVwbzEubWF2ZW4ub3JnL21hdmVuMi8ke2dyb3VwUGF0aH0vJHthcnRpZmFjdElkfS8ke3BhY2thZ2VWZXJzaW9ufS8ke2FydGlmYWN0SWR9LSR7cGFja2FnZVZlcnNpb259LnBvbWA7XG4gICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgYENoZWNraW5nIHdoZXRoZXIgJHtwYWNrYWdlTmFtZX1AJHtwYWNrYWdlVmVyc2lvbn0gZXhpc3RzIG9uIE1hdmVuIENlbnRyYWwgdW5kZXIgJyR7dXJsfSdgLFxuICAgICk7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaFdpdGhSZXRyeSh1cmwpO1xuICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IEhUVFBfTk9UX0ZPVU5EKSB7XG4gICAgICBsb2dnZXIuZGVidWcoXG4gICAgICAgIGBNYXZlbiBDZW50cmFsIHJlcG9ydHMgJHtwYWNrYWdlTmFtZX1AJHtwYWNrYWdlVmVyc2lvbn0gbm90IGZvdW5kYCxcbiAgICAgICk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgIGBNYXZlbiBDZW50cmFsIHJlc3BvbmRlZCBIVFRQICR7cmVzcG9uc2Uuc3RhdHVzfSBmb3IgJHtwYWNrYWdlTmFtZX1AJHtwYWNrYWdlVmVyc2lvbn1gLFxuICAgICk7XG5cbiAgICByZXR1cm4gcmVzcG9uc2Uub2s7XG4gIH1cbn1cblxuY2xhc3MgTWF2ZW5QYWNrYWdlTWFuYWdlciBleHRlbmRzIEphdmFQYWNrYWdlTWFuYWdlciB7XG4gIHB1YmxpYyBhc3luYyBhZGRQYWNrYWdlKFxuICAgIHBhY2thZ2VOYW1lOiBzdHJpbmcsXG4gICAgcGFja2FnZVZlcnNpb24gPSBcIkxBVEVTVFwiLCAvLyB0aGUgbGF0ZXN0IG9wdGlvbiBpcyBkZXByZWNhdGVkIGluIG1hdmVuIDMuNVxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zb2xlLmxvZyhgQWRkaW5nICR7cGFja2FnZU5hbWV9IEAgJHtwYWNrYWdlVmVyc2lvbn0gdG8gcG9tLnhtbGApO1xuICAgIC8vIEFzc2VydCBwb20ueG1sIGV4aXN0c1xuICAgIGNvbnN0IHBvbVBhdGggPSBwYXRoLmpvaW4odGhpcy53b3JraW5nRGlyZWN0b3J5LCBcInBvbS54bWxcIik7XG4gICAgaWYgKCFleGlzdHNTeW5jKHBvbVBhdGgpKSB7XG4gICAgICB0aHJvdyBFcnJvcnMuVXNhZ2UoXG4gICAgICAgIFwiTm8gcG9tLnhtbCBmb3VuZCBpbiBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LiBQbGVhc2UgcnVuIHRoZSBjb21tYW5kIGZyb20gdGhlIHJvb3Qgb2YgeW91ciBwcm9qZWN0LlwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBwb20gPSBhd2FpdCBmcy5yZWFkRmlsZShwb21QYXRoLCBcInV0ZjhcIik7XG4gICAgY29uc3QgcG9tWG1sID0gKGF3YWl0IHhtbDJqcyhwb20sIHt9KSkgYXMgRWxlbWVudDtcblxuICAgIC8vIE11dGF0ZSBkZXBlbmRlbmNpZXNcbiAgICBjb25zdCBuYW1lUGFydHMgPSBwYWNrYWdlTmFtZS5zcGxpdChcIi5cIik7XG4gICAgY29uc3QgZ3JvdXBJZCA9IG5hbWVQYXJ0cy5zbGljZSgwLCBuYW1lUGFydHMubGVuZ3RoIC0gMSkuam9pbihcIi5cIik7XG4gICAgY29uc3QgYXJ0aWZhY3RJZCA9IG5hbWVQYXJ0c1tuYW1lUGFydHMubGVuZ3RoIC0gMV07XG5cbiAgICBjb25zdCBuZXdEZXBlbmRlbmN5ID0gKGF3YWl0IHhtbDJqcyhcbiAgICAgIGA8ZGVwZW5kZW5jeT5cbiAgICA8Z3JvdXBJZD4ke2dyb3VwSWR9PC9ncm91cElkPlxuICAgIDxhcnRpZmFjdElkPiR7YXJ0aWZhY3RJZH08L2FydGlmYWN0SWQ+XG4gICAgPHZlcnNpb24+JHtwYWNrYWdlVmVyc2lvbn08L3ZlcnNpb24+XG48L2RlcGVuZGVuY3k+YCxcbiAgICApKSBhcyBFbGVtZW50O1xuXG4gICAgY29uc3QgZGVwZW5kZW5jaWVzID0gcG9tWG1sLmVsZW1lbnRzXG4gICAgICA/LmZpbmQoKGVsKSA9PiBlbC5uYW1lID09PSBcInByb2plY3RcIilcbiAgICAgID8uZWxlbWVudHM/LmZpbmQoKGVsKSA9PiBlbC5uYW1lID09PSBcImRlcGVuZGVuY2llc1wiKTtcblxuICAgIGlmICghZGVwZW5kZW5jaWVzKSB7XG4gICAgICB0aHJvdyBFcnJvcnMuVXNhZ2UoYENvdWxkIG5vdCBmaW5kIGRlcGVuZGVuY2llcyBzZWN0aW9uIGluIHRoZSBwb20ueG1sYCk7XG4gICAgfVxuICAgIGRlcGVuZGVuY2llcy5lbGVtZW50cyA9IChkZXBlbmRlbmNpZXM/LmVsZW1lbnRzIHx8IFtdKS5maWx0ZXIoXG4gICAgICAoZWwpID0+XG4gICAgICAgIGVsLmVsZW1lbnRzPy5zb21lKFxuICAgICAgICAgIChncm91cCkgPT5cbiAgICAgICAgICAgIGdyb3VwLm5hbWUgPT09IFwiZ3JvdXBJZFwiICYmIGdyb3VwLmVsZW1lbnRzPy5bMF0udGV4dCAhPT0gZ3JvdXBJZCxcbiAgICAgICAgKSB8fFxuICAgICAgICBlbC5lbGVtZW50cz8uc29tZShcbiAgICAgICAgICAoYXJ0aWZhY3QpID0+XG4gICAgICAgICAgICBhcnRpZmFjdC5uYW1lID09PSBcImFydGlmYWN0SWRcIiAmJlxuICAgICAgICAgICAgYXJ0aWZhY3QuZWxlbWVudHM/LlswXS50ZXh0ICE9PSBhcnRpZmFjdElkLFxuICAgICAgICApLFxuICAgICk7XG4gICAgZGVwZW5kZW5jaWVzPy5lbGVtZW50cz8ucHVzaChuZXdEZXBlbmRlbmN5LmVsZW1lbnRzIVswXSk7XG5cbiAgICAvLyBXcml0ZSBuZXcgcG9tLnhtbFxuICAgIGF3YWl0IGZzLndyaXRlRmlsZShwb21QYXRoLCBqczJ4bWwocG9tWG1sLCB7IHNwYWNlczogMiB9KSk7XG5cbiAgICAvLyBJbnN0YWxsXG4gICAgYXdhaXQgZXhlYyhcIm12blwiLCBbXCJpbnN0YWxsXCJdLCB7IGN3ZDogdGhpcy53b3JraW5nRGlyZWN0b3J5IH0pO1xuICAgIGNvbnNvbGUubG9nKFwiUGFja2FnZSBpbnN0YWxsZWQuXCIpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGxpc3RQcm92aWRlclBhY2thZ2VzKCk6IFByb21pc2U8XG4gICAgeyBuYW1lOiBzdHJpbmc7IHZlcnNpb246IHN0cmluZyB9W11cbiAgPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBvbVBhdGggPSBwYXRoLmpvaW4odGhpcy53b3JraW5nRGlyZWN0b3J5LCBcInBvbS54bWxcIik7XG4gICAgICBpZiAoIWV4aXN0c1N5bmMocG9tUGF0aCkpIHtcbiAgICAgICAgdGhyb3cgRXJyb3JzLlVzYWdlKFxuICAgICAgICAgIFwiTm8gcG9tLnhtbCBmb3VuZCBpbiBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LiBQbGVhc2UgcnVuIHRoZSBjb21tYW5kIGZyb20gdGhlIHJvb3Qgb2YgeW91ciBwcm9qZWN0LlwiLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwb20gPSBhd2FpdCBmcy5yZWFkRmlsZShwb21QYXRoLCBcInV0ZjhcIik7XG4gICAgICBjb25zdCBwb21YbWwgPSAoYXdhaXQgeG1sMmpzKHBvbSwge30pKSBhcyBFbGVtZW50O1xuXG4gICAgICBjb25zdCBkZXBlbmRlbmNpZXMgPVxuICAgICAgICBwb21YbWwuZWxlbWVudHNcbiAgICAgICAgICA/LmZpbmQoKGVsKSA9PiBlbC5uYW1lID09PSBcInByb2plY3RcIilcbiAgICAgICAgICA/LmVsZW1lbnRzPy5maW5kKChlbCkgPT4gZWwubmFtZSA9PT0gXCJkZXBlbmRlbmNpZXNcIik/LmVsZW1lbnRzID8/IFtdO1xuXG4gICAgICByZXR1cm4gZGVwZW5kZW5jaWVzXG4gICAgICAgIC5tYXAoKGRlcCkgPT4gKHtcbiAgICAgICAgICBuYW1lOiBgJHtcbiAgICAgICAgICAgIGRlcC5lbGVtZW50cz8uZmluZCgoZWwpID0+IGVsLm5hbWUgPT09IFwiZ3JvdXBJZFwiKT8uZWxlbWVudHM/LlswXVxuICAgICAgICAgICAgICAudGV4dFxuICAgICAgICAgIH0uJHtcbiAgICAgICAgICAgIGRlcC5lbGVtZW50cz8uZmluZCgoZWwpID0+IGVsLm5hbWUgPT09IFwiYXJ0aWZhY3RJZFwiKT8uZWxlbWVudHM/LlswXVxuICAgICAgICAgICAgICAudGV4dFxuICAgICAgICAgIH1gLFxuICAgICAgICAgIHZlcnNpb246IGRlcC5lbGVtZW50cz8uZmluZCgoZWwpID0+IGVsLm5hbWUgPT09IFwidmVyc2lvblwiKVxuICAgICAgICAgICAgPy5lbGVtZW50cz8uWzBdLnRleHQgYXMgc3RyaW5nLFxuICAgICAgICB9KSlcbiAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAoZGVwKSA9PlxuICAgICAgICAgICAgZGVwLm5hbWUuc3RhcnRzV2l0aChcImNvbS5oYXNoaWNvcnAuY2RrdGYtcHJvdmlkZXItXCIpIHx8XG4gICAgICAgICAgICBkZXAubmFtZS5zdGFydHNXaXRoKFwiaW8uY2RrdG4uY2RrdG4tcHJvdmlkZXItXCIpLFxuICAgICAgICApO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ291bGQgbm90IGRldGVybWluZSBpbnN0YWxsZWQgcGFja2FnZXMgcmVhZGluZyB0aGUgcG9tLnhtbDogJHtlLm1lc3NhZ2V9YCxcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5cbmNsYXNzIEdyYWRsZVBhY2thZ2VNYW5hZ2VyIGV4dGVuZHMgSmF2YVBhY2thZ2VNYW5hZ2VyIHtcbiAgcHVibGljIHN0YXRpYyBpc0dyYWRsZVByb2plY3Qod29ya2luZ0RpcmVjdG9yeTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzR3JhZGxlUHJvamVjdCh3b3JraW5nRGlyZWN0b3J5KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBhZGRQYWNrYWdlKFxuICAgIHBhY2thZ2VGUU46IHN0cmluZyxcbiAgICBwYWNrYWdlVmVyc2lvbiA9IFwibGF0ZXN0LnJlbGVhc2VcIixcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgYnVpbGRHcmFkbGVQYXRoID0gcGF0aC5qb2luKHRoaXMud29ya2luZ0RpcmVjdG9yeSwgXCJidWlsZC5ncmFkbGVcIik7XG4gICAgY29uc3QgYnVpbGRHcmFkbGUgPSBhd2FpdCBmcy5yZWFkRmlsZShidWlsZEdyYWRsZVBhdGgsIFwidXRmOFwiKTtcbiAgICBjb25zdCBidWlsZEdyYWRsZUxpbmVzID0gYnVpbGRHcmFkbGUuc3BsaXQoL1xccj9cXG4vKTtcblxuICAgIGNvbnN0IGRlcGVuZGVuY2llc1JlZ2V4ID0gL2RlcGVuZGVuY2llc1xccytcXHsvaTtcbiAgICBjb25zdCBkZXBlbmRlbmN5QmxvY2tTdGFydCA9IGJ1aWxkR3JhZGxlTGluZXMuZmluZEluZGV4KChsaW5lKSA9PlxuICAgICAgZGVwZW5kZW5jaWVzUmVnZXgudGVzdChsaW5lKSxcbiAgICApO1xuICAgIGlmIChkZXBlbmRlbmN5QmxvY2tTdGFydCA9PT0gLTEpIHtcbiAgICAgIHRocm93IEVycm9ycy5Vc2FnZShcbiAgICAgICAgXCJDb3VsZCBub3QgZmluZCBkZXBlbmRlbmNpZXMgc2VjdGlvbiBpbiB0aGUgYnVpbGQuZ3JhZGxlXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHBhY2thZ2VTZWdtZW50cyA9IHBhY2thZ2VGUU4uc3BsaXQoXCIuXCIpO1xuICAgIGNvbnN0IHBhY2thZ2VOYW1lID0gcGFja2FnZVNlZ21lbnRzLnBvcCgpO1xuICAgIGNvbnN0IGdyb3VwTmFtZSA9IHBhY2thZ2VTZWdtZW50cy5qb2luKFwiLlwiKTtcbiAgICBjb25zdCBkZXBlbmRlbmN5U3BlY2lmaWVyID0gYCR7Z3JvdXBOYW1lfToke3BhY2thZ2VOYW1lfWA7XG4gICAgY29uc3QgZGVwZW5kZW5jeUFuZFZlcnNpb25TcGVjaWZpZXIgPSBgJHtkZXBlbmRlbmN5U3BlY2lmaWVyfToke3BhY2thZ2VWZXJzaW9ufWA7XG5cbiAgICBjb25zdCBleGlzdGluZ0RlcGVuZGVuY3kgPSBidWlsZEdyYWRsZUxpbmVzLmZpbmRJbmRleCgobGluZSkgPT5cbiAgICAgIGxpbmUuaW5jbHVkZXMoZGVwZW5kZW5jeVNwZWNpZmllciksXG4gICAgKTtcbiAgICBpZiAoZXhpc3RpbmdEZXBlbmRlbmN5ICE9PSAtMSkge1xuICAgICAgYnVpbGRHcmFkbGVMaW5lcy5zcGxpY2UoZXhpc3RpbmdEZXBlbmRlbmN5LCAxKTtcbiAgICB9XG5cbiAgICBjb25zdCBuZXdQYWNrYWdlRGVwZW5kZW5jeSA9IGBcXHRpbXBsZW1lbnRhdGlvbiAnJHtkZXBlbmRlbmN5QW5kVmVyc2lvblNwZWNpZmllcn0nYDtcbiAgICBidWlsZEdyYWRsZUxpbmVzLnNwbGljZShkZXBlbmRlbmN5QmxvY2tTdGFydCArIDEsIDAsIG5ld1BhY2thZ2VEZXBlbmRlbmN5KTtcblxuICAgIGF3YWl0IGZzLndyaXRlRmlsZShidWlsZEdyYWRsZVBhdGgsIGJ1aWxkR3JhZGxlTGluZXMuam9pbihcIlxcblwiKSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgbGlzdFByb3ZpZGVyUGFja2FnZXMoKTogUHJvbWlzZTxcbiAgICB7IG5hbWU6IHN0cmluZzsgdmVyc2lvbjogc3RyaW5nIH1bXVxuICA+IHtcbiAgICBjb25zdCBkZXBlbmRlbmNpZXMgPSBhd2FpdCBnZXRHcmFkbGVEZXBlbmRlbmNpZXMoKTtcbiAgICBpZiAoIWRlcGVuZGVuY2llcykge1xuICAgICAgdGhyb3cgRXJyb3JzLlVzYWdlKFwiQ291bGQgbm90IGZpbmQgYW55IGRlcGVuZGVuY2llc1wiKTtcbiAgICB9XG5cbiAgICBjb25zdCBkZXBlbmRlbmN5TGlzdCA9IGRlcGVuZGVuY2llc1xuICAgICAgLm1hcCgobGluZSkgPT4gZ2V0RGVwZW5kZW5jeUluZm9ybWF0aW9uRnJvbUxpbmUobGluZSkpXG4gICAgICAuZmlsdGVyKChkZXApID0+IHtcbiAgICAgICAgaWYgKCFkZXApIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBkZXAubmFtZS5pbmNsdWRlcyhcImNka3RmLXByb3ZpZGVyLVwiKSB8fFxuICAgICAgICAgIGRlcC5uYW1lLmluY2x1ZGVzKFwiY2RrdG4tcHJvdmlkZXItXCIpXG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICAgLm1hcCgoZGVwKSA9PiAoe1xuICAgICAgICBuYW1lOiBgY29tLmhhc2hpY29ycC4ke2RlcCEubmFtZX1gLFxuICAgICAgICB2ZXJzaW9uOiBkZXAhLnZlcnNpb24sXG4gICAgICB9KSk7XG5cbiAgICByZXR1cm4gZGVwZW5kZW5jeUxpc3Q7XG4gIH1cbn1cblxuY2xhc3MgR29QYWNrYWdlTWFuYWdlciBleHRlbmRzIFBhY2thZ2VNYW5hZ2VyIHtcbiAgcHVibGljIGFzeW5jIGFkZFBhY2thZ2UoXG4gICAgcGFja2FnZU5hbWU6IHN0cmluZyxcbiAgICBwYWNrYWdlVmVyc2lvbj86IHN0cmluZyxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc29sZS5sb2coYEFkZGluZyBwYWNrYWdlICR7cGFja2FnZU5hbWV9IEAgJHtwYWNrYWdlVmVyc2lvbn1gKTtcblxuICAgIGNvbnN0IG1ham9yVmVyc2lvbjogbnVtYmVyIHwgdW5kZWZpbmVkID0gcGFja2FnZVZlcnNpb25cbiAgICAgID8gc2VtdmVyLm1ham9yKHBhY2thZ2VWZXJzaW9uKVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBsZXQgdmVyc2lvblBhY2thZ2VTdWZmaXggPSBcIlwiO1xuICAgIGlmICh0eXBlb2YgbWFqb3JWZXJzaW9uID09PSBcIm51bWJlclwiICYmIG1ham9yVmVyc2lvbiA+IDEpIHtcbiAgICAgIHZlcnNpb25QYWNrYWdlU3VmZml4ID0gYC92JHttYWpvclZlcnNpb259YDtcbiAgICB9XG5cbiAgICBsb2dnZXIuZGVidWcoXG4gICAgICBgUnVubmluZyAnZ28gZ2V0ICR7cGFja2FnZU5hbWV9JHt2ZXJzaW9uUGFja2FnZVN1ZmZpeH1AdiR7cGFja2FnZVZlcnNpb259J2AsXG4gICAgKTtcbiAgICAvLyBJbnN0YWxsXG4gICAgYXdhaXQgZXhlYyhcbiAgICAgIFwiZ29cIixcbiAgICAgIFtcImdldFwiLCBgJHtwYWNrYWdlTmFtZX0ke3ZlcnNpb25QYWNrYWdlU3VmZml4fUB2JHtwYWNrYWdlVmVyc2lvbn1gXSxcbiAgICAgIHtcbiAgICAgICAgY3dkOiB0aGlzLndvcmtpbmdEaXJlY3RvcnksXG4gICAgICB9LFxuICAgICk7XG5cbiAgICBjb25zb2xlLmxvZyhcIlBhY2thZ2UgaW5zdGFsbGVkLlwiKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBpc05wbVZlcnNpb25BdmFpbGFibGUoXG4gICAgcGFja2FnZU5hbWU6IHN0cmluZyxcbiAgICBwYWNrYWdlVmVyc2lvbjogc3RyaW5nLFxuICApOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBsb2dnZXIuZGVidWcoYENoZWNraW5nIGlmICR7cGFja2FnZU5hbWV9QCR7cGFja2FnZVZlcnNpb259IGlzIGF2YWlsYWJsZWApO1xuXG4gICAgLy8gZS5nLiBnaXRodWIuY29tL2Nka3RmL2Nka3RmLXByb3ZpZGVyLWdvb2dsZS1nby9nb29nbGVcbiAgICBjb25zdCBwYXJ0cyA9IHBhY2thZ2VOYW1lLnNwbGl0KFwiL1wiKTtcbiAgICBpZiAocGFydHMubGVuZ3RoICE9PSA0KSB7XG4gICAgICB0aHJvdyBFcnJvcnMuSW50ZXJuYWwoXG4gICAgICAgIGBFeHBlY3RpbmcgR28gcGFja2FnZSBuYW1lIHRvIGJlIGluIHRoZSBmb3JtYXQgb2YgZ2l0aHViLmNvbS88b3JnPi88cmVwbz4vPHBhY2thZ2U+LCBnb3QgJHtwYWNrYWdlTmFtZX1gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBvcmcgPSBwYXJ0c1sxXTtcbiAgICBjb25zdCByZXBvID0gcGFydHNbMl07XG4gICAgY29uc3QgcGFja2FnZVBhdGggPSBwYXJ0c1szXTtcblxuICAgIGNvbnN0IHVybCA9IGBodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zLyR7b3JnfS8ke3JlcG99L2dpdC9yZWYvdGFncy8ke3BhY2thZ2VQYXRofS92JHtwYWNrYWdlVmVyc2lvbn1gO1xuICAgIGxvZ2dlci5kZWJ1ZyhgRmV0Y2hpbmcgdGFncyBmb3IgJHtvcmd9LyR7cmVwb30gZnJvbSAnJHt1cmx9J2ApO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2hXaXRoUmV0cnkodXJsLCB7XG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgIEFjY2VwdDogXCJhcHBsaWNhdGlvbi92bmQuZ2l0aHViK2pzb25cIixcbiAgICAgICAgXCJVc2VyLUFnZW50XCI6IFwiT3BlbkNvbnN0cnVjdHMvY2RrdG4tY2xpXCIsXG4gICAgICAgIC4uLihHSVRIVUJfQVBJX1RPS0VOX0NES1RGXG4gICAgICAgICAgPyB7IEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtHSVRIVUJfQVBJX1RPS0VOX0NES1RGfWAgfVxuICAgICAgICAgIDoge30pLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IEhUVFBfTk9UX0ZPVU5EKSB7XG4gICAgICBsb2dnZXIuaW5mbyhcbiAgICAgICAgYENvdWxkIG5vdCBmaW5kIHRoZSB0YWcgJHtwYWNrYWdlUGF0aH0vdiR7cGFja2FnZVZlcnNpb259IGluIHRoZSByZXBvc2l0b3J5ICR7b3JnfS8ke3JlcG99YCxcbiAgICAgICk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QganNvbiA9IChhd2FpdCByZXNwb25zZS5qc29uKCkpIGFzIGFueTtcbiAgICBsb2dnZXIuZGVidWcoXG4gICAgICBgR290IHJlc3BvbnNlIGZyb20gR2l0SHVicyByZXBvc2l0b3J5IHRhZyBlbmRwb2ludCBmb3IgJHtwYWNrYWdlTmFtZX06ICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgIGpzb24sXG4gICAgICApfWAsXG4gICAgKTtcblxuICAgIHJldHVybiBCb29sZWFuKGpzb24gJiYganNvbi5yZWYpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGxpc3RQcm92aWRlclBhY2thZ2VzKCk6IFByb21pc2U8XG4gICAgeyBuYW1lOiBzdHJpbmc7IHZlcnNpb246IHN0cmluZyB9W11cbiAgPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGdvU3VtUGF0aCA9IHBhdGguam9pbih0aGlzLndvcmtpbmdEaXJlY3RvcnksIFwiZ28uc3VtXCIpO1xuICAgICAgaWYgKCFleGlzdHNTeW5jKGdvU3VtUGF0aCkpIHtcbiAgICAgICAgdGhyb3cgRXJyb3JzLlVzYWdlKFxuICAgICAgICAgIFwiTm8gZ28uc3VtIGZvdW5kIGluIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuIFBsZWFzZSBydW4gdGhlIGNvbW1hbmQgZnJvbSB0aGUgcm9vdCBvZiB5b3VyIHByb2plY3QuXCIsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGdvU3VtID0gYXdhaXQgZnMucmVhZEZpbGUoZ29TdW1QYXRoLCBcInV0ZjhcIik7XG4gICAgICBjb25zdCBkZWR1cGVkUHJvdmlkZXJOYW1lcyA9IG5ldyBTZXQoKTtcblxuICAgICAgcmV0dXJuIGdvU3VtXG4gICAgICAgIC5zcGxpdChcIlxcblwiKVxuICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgIChsaW5lKSA9PlxuICAgICAgICAgICAgbGluZS5zdGFydHNXaXRoKFwiZ2l0aHViLmNvbS9oYXNoaWNvcnAvY2RrdGYtcHJvdmlkZXJcIikgfHxcbiAgICAgICAgICAgIGxpbmUuc3RhcnRzV2l0aChcImdpdGh1Yi5jb20vY2RrdGYvY2RrdGYtcHJvdmlkZXJcIikgfHxcbiAgICAgICAgICAgIGxpbmUuc3RhcnRzV2l0aChcImdpdGh1Yi5jb20vY2RrdG4taW8vY2RrdG4tcHJvdmlkZXJcIiksXG4gICAgICAgIClcbiAgICAgICAgLm1hcCgobGluZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHBhcnRzID0gbGluZS5zcGxpdChcIiBcIik7XG4gICAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCAhPT0gMykge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3JzLkludGVybmFsKFxuICAgICAgICAgICAgICBgRXhwZWN0ZWQgbGluZSBpbiBnby5zdW0gdG8gYmUgaW4gdGhlIGZvcm1hdCBvZiAnPHBhY2thZ2U+IDx2ZXJzaW9uPiA8Y2hlY2tzdW0+JywgZ290OiAke2xpbmV9YCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gcGFydFswXSBjb3VsZCBiZSBnaXRodWIuY29tL2F3cy9jb25zdHJ1Y3RzLWdvL2NvbnN0cnVjdHMvdjEwXG4gICAgICAgICAgY29uc3QgbmFtZSA9IHBhcnRzWzBdLnNwbGl0KFwiL1wiKS5zbGljZSgwLCA0KS5qb2luKFwiL1wiKTtcblxuICAgICAgICAgIGNvbnN0IHZlcnNpb24gPSBwYXJ0c1sxXS5zcGxpdChcIi9cIilbMF07XG5cbiAgICAgICAgICBpZiAoZGVkdXBlZFByb3ZpZGVyTmFtZXMuaGFzKG5hbWUpKSB7XG4gICAgICAgICAgICByZXR1cm4geyBuYW1lOiBcIlwiLCB2ZXJzaW9uOiBcIlwiIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGVkdXBlZFByb3ZpZGVyTmFtZXMuYWRkKG5hbWUpO1xuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICB2ZXJzaW9uLFxuICAgICAgICAgIH07XG4gICAgICAgIH0pXG4gICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgKHByb3ZpZGVySW5mbykgPT4gISFwcm92aWRlckluZm8ubmFtZSAmJiAhIXByb3ZpZGVySW5mby52ZXJzaW9uLFxuICAgICAgICApO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ291bGQgbm90IGRldGVybWluZSBpbnN0YWxsZWQgcGFja2FnZXMgcmVhZGluZyB0aGUgZ28uc3VtOiAke2UubWVzc2FnZX1gLFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
684
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFja2FnZS1tYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9kZXBlbmRlbmNpZXMvcGFja2FnZS1tYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsK0JBQStCO0FBQy9CLG1DQUFtQztBQUNuQyw0Q0FRd0I7QUFDeEIsdUNBQXNDO0FBQ3RDLGdEQUF3QjtBQUN4QixtQ0FBaUQ7QUFDakQsNkNBQStCO0FBQy9CLCtDQUFpQztBQUNqQyxtQ0FBa0U7QUFDbEUsdUNBQXlCO0FBRXpCLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDO0FBQy9ELE1BQU0sVUFBVSxHQUEyQixLQUFLO0lBQzlDLENBQUMsQ0FBQyxJQUFJLG1CQUFVLENBQUMsS0FBSyxDQUFDO0lBQ3ZCLENBQUMsQ0FBQyxTQUFTLENBQUM7QUFFZDs7O0dBR0c7QUFDSCxNQUFNLHVCQUF1QixHQUFHLENBQUMsQ0FBQztBQUVsQyx5RUFBeUU7QUFDekUsTUFBTSx5QkFBeUIsR0FBRyxHQUFHLENBQUM7QUFFdEM7O0dBRUc7QUFDSCxNQUFNLG9CQUFvQixHQUFHLEdBQUcsQ0FBQztBQUVqQzs7R0FFRztBQUNILE1BQU0sc0JBQXNCLEdBQUcsR0FBRyxDQUFDO0FBRW5DOztHQUVHO0FBQ0gsTUFBTSxxQkFBcUIsR0FBRyxHQUFHLENBQUM7QUFFbEM7O0dBRUc7QUFDSCxNQUFNLGNBQWMsR0FBRyxHQUFHLENBQUM7QUFFM0I7Ozs7OztHQU1HO0FBQ0gsU0FBUyxpQkFBaUIsQ0FBQyxNQUFjO0lBQ3ZDLE9BQU8sQ0FDTCxNQUFNLEtBQUssb0JBQW9CO1FBQy9CLE1BQU0sS0FBSyxzQkFBc0I7UUFDakMsTUFBTSxJQUFJLHFCQUFxQixDQUNoQyxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7OztHQUtHO0FB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TUFBTSxnQkFBTSxDQUFDLFFBQVEsQ0FDbkIseUZBQXlGLElBQUksRUFBRSxDQUNoRyxDQUFDO2dCQUNKLENBQUM7Z0JBRUQsK0RBQStEO2dCQUMvRCxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUV2RCxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUV2QyxJQUFJLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO29CQUNuQyxPQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLENBQUM7Z0JBQ25DLENBQUM7Z0JBRUQsb0JBQW9CLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUUvQixPQUFPO29CQUNMLElBQUk7b0JBQ0osT0FBTztpQkFDUixDQUFDO1lBQ0osQ0FBQyxDQUFDO2lCQUNELE1BQU0sQ0FDTCxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQ2hFLENBQUM7UUFDTixDQUFDO1FBQUMsT0FBTyxDQUFNLEVBQUUsQ0FBQztZQUNoQixNQUFNLElBQUksS0FBSyxDQUNiLDhEQUE4RCxDQUFDLENBQUMsT0FBTyxFQUFFLENBQzFFLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluY1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcbmltcG9ydCB7XG4gIExhbmd1YWdlLFxuICBleGVjLFxuICBFcnJvcnMsXG4gIGxvZ2dlcixcbiAgaXNHcmFkbGVQcm9qZWN0LFxuICBnZXRHcmFkbGVEZXBlbmRlbmNpZXMsXG4gIGdldERlcGVuZGVuY3lJbmZvcm1hdGlvbkZyb21MaW5lLFxufSBmcm9tIFwiQGNka3RuL2NvbW1vbnNcIjtcbmltcG9ydCB7IGV4aXN0c1N5bmMgfSBmcm9tIFwiZnMtZXh0cmFcIjtcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyB4bWwyanMsIGpzMnhtbCwgRWxlbWVudCB9IGZyb20gXCJ4bWwtanNcIjtcbmltcG9ydCAqIGFzIGZzIGZyb20gXCJmcy1leHRyYVwiO1xuaW1wb3J0ICogYXMgc2VtdmVyIGZyb20gXCJzZW12ZXJcIjtcbmltcG9ydCB7IGZldGNoLCBQcm94eUFnZW50LCBSZXF1ZXN0SW5pdCwgUmVzcG9uc2UgfSBmcm9tIFwidW5kaWNpXCI7XG5pbXBvcnQgKiBhcyB6IGZyb20gXCJ6b2RcIjtcblxuY29uc3QgcHJveHkgPSBwcm9jZXNzLmVudi5odHRwX3Byb3h5IHx8IHByb2Nlc3MuZW52LkhUVFBfUFJPWFk7XG5jb25zdCBkaXNwYXRjaGVyOiBQcm94eUFnZW50IHwgdW5kZWZpbmVkID0gcHJveHlcbiAgPyBuZXcgUHJveHlBZ2VudChwcm94eSlcbiAgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogTnVtYmVyIG9mIGF0dGVtcHRzIChpbml0aWFsIHRyeSArIHJldHJpZXMpIGZvciBhIHJlZ2lzdHJ5IHByb2JlIGJlZm9yZSB3ZSBnaXZlIHVwIGFuZCB0cmVhdCB0aGUgcmVnaXN0cnkgYXNcbiAqIHVucmVhY2hhYmxlLiBUcmFuc2llbnQgZmFpbHVyZXMgKG5ldHdvcmsgZXJyb3JzIC8gNDA4IC8gNDI5IC8gNXh4KSBhcmUgcmV0cmllZDsgZGVmaW5pdGl2ZSByZXNwb25zZXMgYXJlIG5vdC5cbiAqL1xuY29uc3QgUkVHSVNUUllfUFJPQkVfQVRURU1QVFMgPSAzO1xuXG4vKiogQmFzZSBiYWNrb2ZmIGJldHdlZW4gcmV0cmllcywgZG91YmxlZCBlYWNoIGF0dGVtcHQgKDI1MG1zLCA1MDBtcykuICovXG5jb25zdCBSRUdJU1RSWV9QUk9CRV9CQUNLT0ZGX01TID0gMjUwO1xuXG4vKipcbiAqIEhUVFAgNDA4IFJlcXVlc3QgVGltZW91dCDigJQgYSB0cmFuc2llbnQgc3RhdHVzIHdvcnRoIHJldHJ5aW5nLlxuICovXG5jb25zdCBIVFRQX1JFUVVFU1RfVElNRU9VVCA9IDQwODtcblxuLyoqXG4gKiBIVFRQIDQyOSBUb28gTWFueSBSZXF1ZXN0cyAocmF0ZSBsaW1pdCkg4oCUIGEgdHJhbnNpZW50IHN0YXR1cyB3b3J0aCByZXRyeWluZy5cbiAqL1xuY29uc3QgSFRUUF9UT09fTUFOWV9SRVFVRVNUUyA9IDQyOTtcblxuLyoqXG4gKiBMb3dlc3QgSFRUUCA1eHggc3RhdHVzIOKAlCBhbnkgc3RhdHVzIGF0IG9yIGFib3ZlIHRoaXMgaXMgYSBzZXJ2ZXIgZXJyb3IgYW5kIHRyZWF0ZWQgYXMgYSB0cmFuc2llbnQgc3RhdHVzIHdvcnRoIHJldHJ5aW5nLlxuICovXG5jb25zdCBIVFRQX1NFUlZFUl9FUlJPUl9NSU4gPSA1MDA7XG5cbi8qKlxuICogSFRUUCA0MDQgTm90IEZvdW5kIOKAlCBhIGRlZmluaXRpdmUgXCJ0aGUgdmVyc2lvbiBpcyBub3QgcHVibGlzaGVkXCIgYW5zd2VyIGZyb20gYSByZWdpc3RyeSAobm90IHRyYW5zaWVudCkuXG4gKi9cbmNvbnN0IEhUVFBfTk9UX0ZPVU5EID0gNDA0O1xuXG4vKipcbiAqIFJlcG9ydHMgd2hldGhlciBhbiBIVFRQIHN0YXR1cyBpcyB0cmFuc2llbnQgYW5kIHRoZXJlZm9yZSB3b3J0aCByZXRyeWluZzogcmVxdWVzdCB0aW1lb3V0ICg0MDgpLCByYXRlIGxpbWl0ICg0MjkpLFxuICogb3IgYW55IHNlcnZlciBlcnJvciAoNXh4KS4gRGVmaW5pdGl2ZSBzdGF0dXNlcyAoMnh4LCA0MDQsIG90aGVyIDR4eCkgYXJlIG5vdCB0cmFuc2llbnQuXG4gKlxuICogQHBhcmFtIHN0YXR1cyAtIFRoZSBIVFRQIHN0YXR1cyBjb2RlIGZyb20gYSByZWdpc3RyeSByZXNwb25zZS5cbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgc3RhdHVzIGlzIHRyYW5zaWVudCBhbmQgdGhlIHJlcXVlc3Qgc2hvdWxkIGJlIHJldHJpZWQsIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICovXG5mdW5jdGlvbiBpc1RyYW5zaWVudFN0YXR1cyhzdGF0dXM6IG51bWJlcik6IGJvb2xlYW4ge1xuICByZXR1cm4gKFxuICAgIHN0YXR1cyA9PT0gSFRUUF9SRVFVRVNUX1RJTUVPVVQgfHxcbiAgICBzdGF0dXMgPT09IEhUVFBfVE9PX01BTllfUkVRVUVTVFMgfHxcbiAgICBzdGF0dXMgPj0gSFRUUF9TRVJWRVJfRVJST1JfTUlOXG4gICk7XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgYWZ0ZXIgYG1zYCBtaWxsaXNlY29uZHM7IHVzZWQgdG8gYmFjayBvZmYgYmV0d2VlbiByZWdpc3RyeS1wcm9iZSByZXRyaWVzLlxuICpcbiAqIEBwYXJhbSBtcyAtIFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHdhaXQuXG4gKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBkZWxheSBoYXMgZWxhcHNlZC5cbiAqL1xuZnVuY3Rpb24gZGVsYXkobXM6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKTtcbn1cblxuLyoqXG4gKiBGZXRjaGVzIGB1cmxgLCByZXRyeWluZyBvbmx5IG9uIHRyYW5zaWVudCBmYWlsdXJlcyDigJQgbmV0d29yayBlcnJvcnMgYW5kIEhUVFAgNDA4LzQyOS81eHgg4oCUIHNvIGEgcmVnaXN0cnkgaGljY3VwIGlzXG4gKiBub3QgbWlzdGFrZW4gZm9yIGEgZGVmaW5pdGl2ZSBhbnN3ZXIuIERlZmluaXRpdmUgcmVzcG9uc2VzICgyeHgsIDQwNCwgb3RoZXIgNHh4KSBhcmUgcmV0dXJuZWQgaW1tZWRpYXRlbHkgd2l0aG91dFxuICogcmV0cnkuIElmIGV2ZXJ5IGF0dGVtcHQgZmFpbHMgdHJhbnNpZW50bHksIHRocm93cyBhbiBgRXh0ZXJuYWxgIGVycm9yIHNvIGNhbGxlcnMgY2FuIGRpc3Rpbmd1aXNoIFwicmVnaXN0cnlcbiAqIHVucmVhY2hhYmxlXCIgZnJvbSBcInZlcnNpb24gYWJzZW50XCIgcmF0aGVyIHRoYW4gc2lsZW50bHkgdHJlYXRpbmcgYSBoaWNjdXAgYXMgYWJzZW5jZS5cbiAqXG4gKiBAcGFyYW0gdXJsIC0gVGhlIHJlZ2lzdHJ5IFVSTCB0byBmZXRjaC5cbiAqIEBwYXJhbSBpbml0IC0gT3B0aW9uYWwgYGZldGNoYCByZXF1ZXN0IG9wdGlvbnMgKGUuZy4gaGVhZGVycyksIHBhc3NlZCB0aHJvdWdoIHVuY2hhbmdlZCBvbiBldmVyeSBhdHRlbXB0LlxuICogQHJldHVybnMgVGhlIGBSZXNwb25zZWAgZm9yIHRoZSBmaXJzdCBkZWZpbml0aXZlIChub24tdHJhbnNpZW50KSByZXN1bHQuXG4gKiBAdGhyb3dzIEFuIGBFeHRlcm5hbGAgZXJyb3IgaWYgZXZlcnkgYXR0ZW1wdCAodXAgdG8gYFJFR0lTVFJZX1BST0JFX0FUVEVNUFRTYCkgZmFpbHMgdHJhbnNpZW50bHkuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGZldGNoV2l0aFJldHJ5KFxuICB1cmw6IHN0cmluZyxcbiAgaW5pdD86IFJlcXVlc3RJbml0LFxuKTogUHJvbWlzZTxSZXNwb25zZT4ge1xuICBsZXQgbGFzdEVycm9yOiB1bmtub3duO1xuXG4gIGZvciAobGV0IGF0dGVtcHQgPSAxOyBhdHRlbXB0IDw9IFJFR0lTVFJZX1BST0JFX0FUVEVNUFRTOyBhdHRlbXB0KyspIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsIHsgLi4uaW5pdCwgZGlzcGF0Y2hlciB9KTtcbiAgICAgIGlmICghaXNUcmFuc2llbnRTdGF0dXMocmVzcG9uc2Uuc3RhdHVzKSkge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICB9XG4gICAgICBsYXN0RXJyb3IgPSBuZXcgRXJyb3IoYHJlZ2lzdHJ5IHJlc3BvbmRlZCBIVFRQICR7cmVzcG9uc2Uuc3RhdHVzfWApO1xuICAgICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgICBgVHJhbnNpZW50IEhUVFAgJHtyZXNwb25zZS5zdGF0dXN9IGZyb20gJyR7dXJsfScgKGF0dGVtcHQgJHthdHRlbXB0fS8ke1JFR0lTVFJZX1BST0JFX0FUVEVNUFRTfSlgLFxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIC8vIGZldGNoIHJlamVjdHMgb24gbmV0d29yay1sZXZlbCBmYWlsdXJlcyAoRE5TLCBjb25uZWN0aW9uIHJlc2V0LCB0aW1lb3V0KSDigJQgYWx3YXlzIHRyYW5zaWVudC5cbiAgICAgIGxhc3RFcnJvciA9IGU7XG4gICAgICBsb2dnZXIuZGVidWcoXG4gICAgICAgIGBOZXR3b3JrIGVycm9yIGZldGNoaW5nICcke3VybH0nIChhdHRlbXB0ICR7YXR0ZW1wdH0vJHtSRUdJU1RSWV9QUk9CRV9BVFRFTVBUU30pOiAke2V9YCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGF0dGVtcHQgPCBSRUdJU1RSWV9QUk9CRV9BVFRFTVBUUykge1xuICAgICAgYXdhaXQgZGVsYXkoUkVHSVNUUllfUFJPQkVfQkFDS09GRl9NUyAqIDIgKiogKGF0dGVtcHQgLSAxKSk7XG4gICAgfVxuICB9XG5cbiAgdGhyb3cgRXJyb3JzLkV4dGVybmFsKFxuICAgIGBDb3VsZCBub3QgcmVhY2ggdGhlIHJlZ2lzdHJ5IGF0ICcke3VybH0nIGFmdGVyICR7UkVHSVNUUllfUFJPQkVfQVRURU1QVFN9IGF0dGVtcHRzOiAke2xhc3RFcnJvcn1gLFxuICApO1xufVxuXG4vLyBDYW4ndCB1c2UgQ0RLVEZfIGFzIHByZWZpeCBiZWNhdXNlIHlhcmdzIC5lbnYoXCJDREtURlwiKSBpbiBzdHJpY3QgbW9kZSBkb2VzIG5vdCBhbGxvdyB1cyB0b1xuLy8gUmVmZXIgdG86IGh0dHBzOi8vZ2l0aHViLmNvbS95YXJncy95YXJncy9pc3N1ZXMvODczXG5jb25zdCB7IEdJVEhVQl9BUElfVE9LRU5fQ0RLVEYgfSA9IHByb2Nlc3MuZW52O1xuXG4vLyB7XG4vLyAgIFwidmVyc2lvblwiOiBcIjEuMC4wXCIsXG4vLyAgIFwibmFtZVwiOiBcInRlc3RVU0hhc0ZcIixcbi8vICAgXCJwcm9ibGVtc1wiOiBbXG4vLyAgICAgXCJleHRyYW5lb3VzOiBhcmNoaXZlci11dGlsc0AyLjEuMCAvcHJpdmF0ZS92YXIvZm9sZGVycy96Xy92MDNsMzNkNTVmYjU3bnJyM2IxcTAzY2gwMDAwZ3EvVC90ZXN0VVNIYXNGL25vZGVfbW9kdWxlcy9hcmNoaXZlci11dGlsc1wiLFxuLy8gICBdLFxuLy8gICBcImRlcGVuZGVuY2llc1wiOiB7XG4vLyAgICAgXCJAY2RrdGYvcHJvdmlkZXItcmFuZG9tXCI6IHtcbi8vICAgICAgIFwidmVyc2lvblwiOiBcIjMuMC4xMVwiLFxuLy8gICAgICAgXCJyZXNvbHZlZFwiOiBcImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BjZGt0Zi9wcm92aWRlci1yYW5kb20vLS9wcm92aWRlci1yYW5kb20tMy4wLjExLnRnelwiXG4vLyAgICAgfSxcbmNvbnN0IG5wbUxpc3RTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIGRlcGVuZGVuY2llczogei5yZWNvcmQoXG4gICAgICB6LnN0cmluZygpLFxuICAgICAgelxuICAgICAgICAub2JqZWN0KHtcbiAgICAgICAgICB2ZXJzaW9uOiB6LnN0cmluZygpLFxuICAgICAgICB9KVxuICAgICAgICAubG9vc2UoKSxcbiAgICApLFxuICB9KVxuICAucGFydGlhbCgpXG4gIC5sb29zZSgpO1xuXG4vLyB7XG4vLyAgIFwidHlwZVwiOiBcInRyZWVcIixcbi8vICAgXCJkYXRhXCI6IHtcbi8vICAgICBcInR5cGVcIjogXCJsaXN0XCIsXG4vLyAgICAgXCJ0cmVlc1wiOiBbXG4vLyAgICAgICB7XG4vLyAgICAgICAgIFwibmFtZVwiOiBcIkBjZGt0Zi9wcm92aWRlci1yYW5kb21AMy4wLjExXCIsXG4vLyAgICAgICAgIFwiY2hpbGRyZW5cIjogW10sXG4vLyAgICAgICAgIFwiaGludFwiOiBudWxsLFxuLy8gICAgICAgICBcImNvbG9yXCI6IFwiYm9sZFwiLFxuLy8gICAgICAgICBcImRlcHRoXCI6IDBcbi8vICAgICAgIH1cbi8vICAgICBdXG4vLyAgIH1cbi8vIH1cbmNvbnN0IHlhcm5MaXN0U2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICBkYXRhOiB6XG4gICAgICAub2JqZWN0KHtcbiAgICAgICAgdHJlZXM6IHouYXJyYXkoXG4gICAgICAgICAgelxuICAgICAgICAgICAgLm9iamVjdCh7XG4gICAgICAgICAgICAgIG5hbWU6IHouc3RyaW5nKCksXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnBhcnRpYWwoKVxuICAgICAgICAgICAgLmxvb3NlKCksXG4gICAgICAgICksXG4gICAgICB9KVxuICAgICAgLnBhcnRpYWwoKVxuICAgICAgLmxvb3NlKCksXG4gIH0pXG4gIC5wYXJ0aWFsKClcbiAgLmxvb3NlKCk7XG5cbi8vIFtcbi8vICAge1xuLy8gICAgIFwibmFtZVwiOiBcImFwcGRpcnNcIixcbi8vICAgICBcInZlcnNpb25cIjogXCIxLjQuNFwiXG4vLyAgIH0sXG4vLyAgIHtcbmNvbnN0IHBpcFBhY2thZ2VTY2hlbWEgPSB6LmFycmF5KFxuICB6Lm9iamVjdCh7IG5hbWU6IHouc3RyaW5nKCksIHZlcnNpb246IHouc3RyaW5nKCkgfSkubG9vc2UoKSxcbik7XG5cbi8qKlxuICogbWFuYWdlcyBpbnN0YWxsaW5nLCB1cGRhdGluZywgYW5kIHJlbW92aW5nIGRlcGVuZGVuY2llc1xuICogaW4gdGhlIHBhY2thZ2Ugc3lzdGVtIHVzZWQgYnkgdGhlIHRhcmdldCBsYW5ndWFnZSBvZiBhIENES1ROXG4gKiBwcm9qZWN0XG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBQYWNrYWdlTWFuYWdlciB7XG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCByZWFkb25seSB3b3JraW5nRGlyZWN0b3J5OiBzdHJpbmcpIHt9XG5cbiAgcHVibGljIHN0YXRpYyBmb3JMYW5ndWFnZShcbiAgICBsYW5ndWFnZTogTGFuZ3VhZ2UsXG4gICAgd29ya2luZ0RpcmVjdG9yeTogc3RyaW5nLFxuICApOiBQYWNrYWdlTWFuYWdlciB7XG4gICAgc3dpdGNoIChsYW5ndWFnZSkge1xuICAgICAgY2FzZSBMYW5ndWFnZS5HTzpcbiAgICAgICAgcmV0dXJuIG5ldyBHb1BhY2thZ2VNYW5hZ2VyKHdvcmtpbmdEaXJlY3RvcnkpO1xuICAgICAgY2FzZSBMYW5ndWFnZS5UWVBFU0NSSVBUOlxuICAgICAgICByZXR1cm4gbmV3IE5vZGVQYWNrYWdlTWFuYWdlcih3b3JraW5nRGlyZWN0b3J5KTtcbiAgICAgIGNhc2UgTGFuZ3VhZ2UuUFlUSE9OOlxuICAgICAgICByZXR1cm4gbmV3IFB5dGhvblBhY2thZ2VNYW5hZ2VyKHdvcmtpbmdEaXJlY3RvcnkpO1xuICAgICAgY2FzZSBMYW5ndWFnZS5DU0hBUlA6XG4gICAgICAgIHJldHVybiBuZXcgTnVnZXRQYWNrYWdlTWFuYWdlcih3b3JraW5nRGlyZWN0b3J5KTtcbiAgICAgIGNhc2UgTGFuZ3VhZ2UuSkFWQTpcbiAgICAgICAgaWYgKEdyYWRsZVBhY2thZ2VNYW5hZ2VyLmlzR3JhZGxlUHJvamVjdCh3b3JraW5nRGlyZWN0b3J5KSkge1xuICAgICAgICAgIHJldHVybiBuZXcgR3JhZGxlUGFja2FnZU1hbmFnZXIod29ya2luZ0RpcmVjdG9yeSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBNYXZlblBhY2thZ2VNYW5hZ2VyKHdvcmtpbmdEaXJlY3RvcnkpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGxhbmd1YWdlOiAke2xhbmd1YWdlfWApO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhYnN0cmFjdCBhZGRQYWNrYWdlKFxuICAgIHBhY2thZ2VOYW1lOiBzdHJpbmcsXG4gICAgcGFja2FnZVZlcnNpb24/OiBzdHJpbmcsXG4gICAgc2lsZW50PzogYm9vbGVhbixcbiAgKTogUHJvbWlzZTx2b2lkPjtcbiAgLy8gYWRkIGNoZWNrIGlmIHBhY2thZ2UgZXhpc3RzIGFscmVhZHkuIG1pZ2h0IHF1ZXJ5IHZlcnNpb24gaW4gdGhlIGZ1dHVyZSBhbmQgb2ZmZXIgdG8gdXBncmFkZT9cblxuICBwdWJsaWMgYWJzdHJhY3QgaXNOcG1WZXJzaW9uQXZhaWxhYmxlKFxuICAgIHBhY2thZ2VOYW1lOiBzdHJpbmcsXG4gICAgcGFja2FnZVZlcnNpb246IHN0cmluZyxcbiAgKTogUHJvbWlzZTxib29sZWFuPjtcblxuICBwdWJsaWMgYWJzdHJhY3QgbGlzdFByb3ZpZGVyUGFja2FnZXMoKTogUHJvbWlzZTxcbiAgICB7IG5hbWU6IHN0cmluZzsgdmVyc2lvbjogc3RyaW5nIH1bXVxuICA+O1xufVxuXG5jbGFzcyBOb2RlUGFja2FnZU1hbmFnZXIgZXh0ZW5kcyBQYWNrYWdlTWFuYWdlciB7XG4gIHByaXZhdGUgaGFzWWFybkxvY2tmaWxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBleGlzdHNTeW5jKHBhdGguam9pbih0aGlzLndvcmtpbmdEaXJlY3RvcnksIFwieWFybi5sb2NrXCIpKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBhZGRQYWNrYWdlKFxuICAgIHBhY2thZ2VOYW1lOiBzdHJpbmcsXG4gICAgcGFja2FnZVZlcnNpb24/OiBzdHJpbmcsXG4gICAgc2lsZW50PzogYm9vbGVhbixcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc29sZS5sb2coYEFkZGluZyBwYWNrYWdlICR7cGFja2FnZU5hbWV9IEAgJHtwYWNrYWdlVmVyc2lvbn1gKTtcblxuICAgIC8vIHByb2JlIGZvciBwYWNrYWdlLWxvY2suanNvbiBvciB5YXJuLmxvY2tcbiAgICBsZXQgY29tbWFuZCA9IFwibnBtXCI7XG4gICAgbGV0IGFyZ3MgPSBbXCJpbnN0YWxsXCJdO1xuXG4gICAgaWYgKHRoaXMuaGFzWWFybkxvY2tmaWxlKCkpIHtcbiAgICAgIGNvbW1hbmQgPSBcInlhcm5cIjtcbiAgICAgIGFyZ3MgPSBbXCJhZGRcIl07XG4gICAgfVxuICAgIGFyZ3MucHVzaChcbiAgICAgIHBhY2thZ2VWZXJzaW9uID8gcGFja2FnZU5hbWUgKyBcIkBcIiArIHBhY2thZ2VWZXJzaW9uIDogcGFja2FnZU5hbWUsXG4gICAgKTtcblxuICAgIGlmIChzaWxlbnQpIHtcbiAgICAgIGFyZ3MucHVzaChcIi0tc2lsZW50XCIpO1xuICAgICAgYXJncy5wdXNoKFwiLS1uby1wcm9ncmVzc1wiKTtcbiAgICB9XG5cbiAgICAvLyBJbnN0YWxsIGV4YWN0IHZlcnNpb25cbiAgICAvLyBZYXJuOiBodHRwczovL2NsYXNzaWMueWFybnBrZy5jb20vbGFuZy9lbi9kb2NzL2NsaS9hZGQvI3RvYy15YXJuLWFkZC1leGFjdC1lXG4gICAgLy8gTnBtOiBodHRwczovL2RvY3MubnBtanMuY29tL2NsaS92OC9jb21tYW5kcy9ucG0taW5zdGFsbCNzYXZlLWV4YWN0XG4gICAgYXJncy5wdXNoKFwiLUVcIik7XG5cbiAgICBsb2dnZXIuaW5mbyhcbiAgICAgIGBJbnN0YWxsaW5nIHBhY2thZ2UgJHtwYWNrYWdlTmFtZX0gQCAke3BhY2thZ2VWZXJzaW9ufSB1c2luZyAke2NvbW1hbmR9LmAsXG4gICAgKTtcblxuICAgIGF3YWl0IGV4ZWMoY29tbWFuZCwgYXJncywgeyBjd2Q6IHRoaXMud29ya2luZ0RpcmVjdG9yeSB9KTtcblxuICAgIGxvZ2dlci5pbmZvKFwiUGFja2FnZSBpbnN0YWxsZWQuXCIpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGlzTnBtVmVyc2lvbkF2YWlsYWJsZShcbiAgICBfcGFja2FnZU5hbWU6IHN0cmluZyxcbiAgICBfcGFja2FnZVZlcnNpb246IHN0cmluZyxcbiAgKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgLy8gV2UgZ2V0IHRoZSBsaXN0IG9mIGF2YWlsYWJsZSB2ZXJzaW9ucyBmcm9tIG5wbSwgbm8gbmVlZCB0byBjaGVjayBoZXJlXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGxpc3RZYXJuUGFja2FnZXMoKTogUHJvbWlzZTxcbiAgICB7IG5hbWU6IHN0cmluZzsgdmVyc2lvbjogc3RyaW5nIH1bXVxuICA+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3Rkb3V0ID0gYXdhaXQgZXhlYyhcInlhcm5cIiwgW1wibGlzdFwiLCBcIi0tanNvblwiXSwge1xuICAgICAgICBjd2Q6IHRoaXMud29ya2luZ0RpcmVjdG9yeSxcbiAgICAgIH0pO1xuXG4gICAgICBsb2dnZXIuZGVidWcoYExpc3RpbmcgeWFybiBwYWNrYWdlcyB1c2luZyBcInlhcm4gbGlzdCAtLWpzb25cIjogJHtzdGRvdXR9YCk7XG5cbiAgICAgIGNvbnN0IGpzb24gPSB5YXJuTGlzdFNjaGVtYS5wYXJzZShKU09OLnBhcnNlKHN0ZG91dCkpO1xuXG4gICAgICByZXR1cm4gKGpzb24/LmRhdGE/LnRyZWVzIHx8IFtdKVxuICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgIChkZXA6IGFueSkgPT5cbiAgICAgICAgICAgIGRlcC5uYW1lLnN0YXJ0c1dpdGgoXCJAY2RrdGYvcHJvdmlkZXItXCIpIHx8XG4gICAgICAgICAgICBkZXAubmFtZS5zdGFydHNXaXRoKFwiQGNka3RuL3Byb3ZpZGVyLVwiKSxcbiAgICAgICAgKVxuICAgICAgICAubWFwKChkZXA6IGFueSkgPT4gKHtcbiAgICAgICAgICBuYW1lOiBgQCR7ZGVwLm5hbWUuc3BsaXQoXCJAXCIpWzFdfWAsXG4gICAgICAgICAgdmVyc2lvbjogZGVwLm5hbWUuc3BsaXQoXCJAXCIpWzJdLFxuICAgICAgICB9KSk7XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDb3VsZCBub3QgZGV0ZXJtaW5lIGluc3RhbGxlZCBwYWNrYWdlcyB1c2luZyAneWFybiBsaXN0IC0tanNvbic6ICR7ZX1gLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGxpc3ROcG1QYWNrYWdlcygpOiBQcm9taXNlPFxuICAgIHsgbmFtZTogc3RyaW5nOyB2ZXJzaW9uOiBzdHJpbmcgfVtdXG4gID4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdGRvdXQgPSBhd2FpdCBleGVjKFwibnBtXCIsIFtcImxpc3RcIiwgXCItLWpzb25cIl0sIHtcbiAgICAgICAgY3dkOiB0aGlzLndvcmtpbmdEaXJlY3RvcnksXG4gICAgICB9KTtcblxuICAgICAgbG9nZ2VyLmRlYnVnKGBMaXN0aW5nIG5wbSBwYWNrYWdlcyB1c2luZyBcIm5wbSBsaXN0IC0tanNvblwiOiAke3N0ZG91dH1gKTtcbiAgICAgIGNvbnN0IGpzb24gPSBucG1MaXN0U2NoZW1hLnBhcnNlKEpTT04ucGFyc2Uoc3Rkb3V0KSk7XG5cbiAgICAgIHJldHVybiBPYmplY3QuZW50cmllcyhqc29uPy5kZXBlbmRlbmNpZXMgfHwge30pXG4gICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgKFtkZXBOYW1lXSkgPT5cbiAgICAgICAgICAgIGRlcE5hbWUuc3RhcnRzV2l0aChcIkBjZGt0Zi9wcm92aWRlci1cIikgfHxcbiAgICAgICAgICAgIGRlcE5hbWUuc3RhcnRzV2l0aChcIkBjZGt0bi9wcm92aWRlci1cIiksXG4gICAgICAgIClcbiAgICAgICAgLm1hcCgoW25hbWUsIGRlcF0pID0+ICh7IG5hbWUsIHZlcnNpb246IGRlcC52ZXJzaW9uIH0pKTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENvdWxkIG5vdCBkZXRlcm1pbmUgaW5zdGFsbGVkIHBhY2thZ2VzIHVzaW5nICducG0gbGlzdCAtLWpzb24nOiAke2V9YCxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGxpc3RQcm92aWRlclBhY2thZ2VzKCk6IFByb21pc2U8XG4gICAgeyBuYW1lOiBzdHJpbmc7IHZlcnNpb246IHN0cmluZyB9W11cbiAgPiB7XG4gICAgcmV0dXJuIHRoaXMuaGFzWWFybkxvY2tmaWxlKClcbiAgICAgID8gdGhpcy5saXN0WWFyblBhY2thZ2VzKClcbiAgICAgIDogdGhpcy5saXN0TnBtUGFja2FnZXMoKTtcbiAgfVxufVxuXG5jbGFzcyBQeXRob25QYWNrYWdlTWFuYWdlciBleHRlbmRzIFBhY2thZ2VNYW5hZ2VyIHtcbiAgcHJpdmF0ZSBnZXQgYXBwQ29tbWFuZCgpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIEpTT04ucGFyc2UoXG4gICAgICAgIGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICBwYXRoLnJlc29sdmUodGhpcy53b3JraW5nRGlyZWN0b3J5LCBcImNka3RmLmpzb25cIiksXG4gICAgICAgICAgXCJ1dGY4XCIsXG4gICAgICAgICksXG4gICAgICApW1wiYXBwXCJdO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgdGhyb3cgRXJyb3JzLlVzYWdlKFxuICAgICAgICBgQ291bGQgbm90IGZpbmQgZmluZCBhbmQgcGFyc2UgY2RrdGYuanNvbiBpbiAke3RoaXMud29ya2luZ0RpcmVjdG9yeX1gLFxuICAgICAgICBlLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgYWRkUGFja2FnZShcbiAgICBwYWNrYWdlTmFtZTogc3RyaW5nLFxuICAgIHBhY2thZ2VWZXJzaW9uPzogc3RyaW5nLFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB1c2VQaXBlbnYgPSB0aGlzLmFwcENvbW1hbmQuaW5jbHVkZXMoXCJwaXBlbnZcIik7XG5cbiAgICBpZiAodXNlUGlwZW52KSB7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgYEluc3RhbGxpbmcgcGFja2FnZSAke3BhY2thZ2VOYW1lfSBAICR7cGFja2FnZVZlcnNpb259IHVzaW5nIHBpcGVudi5gLFxuICAgICAgKTtcblxuICAgICAgYXdhaXQgZXhlYyhcInBpcGVudlwiLCBbXCJpbnN0YWxsXCIsIGAke3BhY2thZ2VOYW1lfX49JHtwYWNrYWdlVmVyc2lvbn1gXSwge1xuICAgICAgICBjd2Q6IHRoaXMud29ya2luZ0RpcmVjdG9yeSxcbiAgICAgICAgZW52OiB7XG4gICAgICAgICAgLi4ucHJvY2Vzcy5lbnYsXG4gICAgICAgICAgUElQRU5WX1FVSUVUOiBcIjFcIixcbiAgICAgICAgfSxcbiAgICAgICAgc3RkaW86IFtcImluaGVyaXRcIiwgMSwgMV0sXG4gICAgICB9KTtcblxuICAgICAgY29uc29sZS5sb2coXCJQYWNrYWdlIGluc3RhbGxlZC5cIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBgSW5zdGFsbGluZyBwYWNrYWdlICR7cGFja2FnZU5hbWV9IEAgJHtwYWNrYWdlVmVyc2lvbn0gdXNpbmcgcGlwLmAsXG4gICAgICApO1xuXG4gICAgICBjb25zdCByZXF1aXJlbWVudHNGaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICAgICAgdGhpcy53b3JraW5nRGlyZWN0b3J5LFxuICAgICAgICBcInJlcXVpcmVtZW50cy50eHRcIixcbiAgICAgICk7XG4gICAgICBpZiAoIWZzLmV4aXN0c1N5bmMocmVxdWlyZW1lbnRzRmlsZVBhdGgpKSB7XG4gICAgICAgIHRocm93IEVycm9ycy5Vc2FnZShcbiAgICAgICAgICBgQ291bGQgbm90IGZpbmQgcmVxdWlyZW1lbnRzLnR4dCBpbiAke3RoaXMud29ya2luZ0RpcmVjdG9yeX1gLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCByZXF1aXJlbWVudHMgPSBhd2FpdCBmcy5yZWFkRmlsZShyZXF1aXJlbWVudHNGaWxlUGF0aCwgXCJ1dGY4XCIpO1xuICAgICAgY29uc3QgcmVxdWlyZW1lbnRMaW5lID0gcmVxdWlyZW1lbnRzXG4gICAgICAgIC5zcGxpdChcIlxcblwiKVxuICAgICAgICAuZmluZCgobGluZSkgPT4gbGluZS5pbmNsdWRlcyhwYWNrYWdlTmFtZSkpO1xuXG4gICAgICBsb2dnZXIuZGVidWcoXG4gICAgICAgIGBSZWFkIHJlcXVpcmVtZW50cy50eHQgZmlsZSBhbmQgZm91bmQgbGluZSBpbmNsdWRpbmcgJHtwYWNrYWdlTmFtZX06ICR7cmVxdWlyZW1lbnRMaW5lfWAsXG4gICAgICApO1xuXG4gICAgICBpZiAocmVxdWlyZW1lbnRMaW5lKSB7XG4gICAgICAgIGlmIChwYWNrYWdlVmVyc2lvbiA/IHJlcXVpcmVtZW50TGluZS5pbmNsdWRlcyhwYWNrYWdlVmVyc2lvbikgOiB0cnVlKSB7XG4gICAgICAgICAgbG9nZ2VyLmluZm8oXG4gICAgICAgICAgICBgUGFja2FnZSAke3BhY2thZ2VOYW1lfSBhbHJlYWR5IGluc3RhbGxlZC4gU2tpcHBpbmcgaW5zdGFsbGF0aW9uLmAsXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgICAgICAgYEZvdW5kIHRoZSBwYWNrYWdlIGJ1dCB3aXRoIGEgZGlmZmVyZW50IHZlcnNpb24sIGNvbnRpbnVpbmdgLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgbmV3UmVxdWlyZW1lbnRzID1cbiAgICAgICAgcmVxdWlyZW1lbnRzXG4gICAgICAgICAgLnNwbGl0KFwiXFxuXCIpXG4gICAgICAgICAgLmZpbHRlcigobGluZSkgPT4gIWxpbmUuc3RhcnRzV2l0aChwYWNrYWdlTmFtZSkpXG4gICAgICAgICAgLmpvaW4oXCJcXG5cIikgK1xuICAgICAgICBgXFxuJHtwYWNrYWdlTmFtZX0ke3BhY2thZ2VWZXJzaW9uID8gYH49JHtwYWNrYWdlVmVyc2lvbn1gIDogXCJcIn1gO1xuICAgICAgYXdhaXQgZnMud3JpdGVGaWxlKHJlcXVpcmVtZW50c0ZpbGVQYXRoLCBuZXdSZXF1aXJlbWVudHMsIFwidXRmOFwiKTtcblxuICAgICAgYXdhaXQgZXhlYyhcInBpcFwiLCBbXCJpbnN0YWxsXCIsIFwiLXJcIiwgXCJyZXF1aXJlbWVudHMudHh0XCJdLCB7XG4gICAgICAgIGN3ZDogdGhpcy53b3JraW5nRGlyZWN0b3J5LFxuICAgICAgICBzdGRpbzogW1wiaW5oZXJpdFwiLCAxLCAxXSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zb2xlLmxvZyhcIlBhY2thZ2UgaW5zdGFsbGVkLlwiKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgaXNOcG1WZXJzaW9uQXZhaWxhYmxlKFxuICAgIHBhY2thZ2VOYW1lOiBzdHJpbmcsXG4gICAgcGFja2FnZVZlcnNpb246IHN0cmluZyxcbiAgKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgYENoZWNraW5nIGlmICR7cGFja2FnZU5hbWV9QCR7cGFja2FnZVZlcnNpb259IGlzIGF2YWlsYWJsZSBmb3IgUHl0aG9uYCxcbiAgICApO1xuICAgIGNvbnN0IHVybCA9IGBodHRwczovL3B5cGkub3JnL3B5cGkvJHtwYWNrYWdlTmFtZX0vJHtwYWNrYWdlVmVyc2lvbn0vanNvbmA7XG4gICAgbG9nZ2VyLmRlYnVnKGBGZXRjaGluZyBwYWNrYWdlIGluZm9ybWF0aW9uIGZvciAke3BhY2thZ2VOYW1lfSBmcm9tICR7dXJsfWApO1xuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaFdpdGhSZXRyeSh1cmwpO1xuICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IEhUVFBfTk9UX0ZPVU5EKSB7XG4gICAgICBsb2dnZXIuZGVidWcoYFB5UEkgcmVwb3J0cyAke3BhY2thZ2VOYW1lfUAke3BhY2thZ2VWZXJzaW9ufSBub3QgZm91bmRgKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBqc29uID0gKGF3YWl0IHJlc3BvbnNlLmpzb24oKSkgYXMgYW55O1xuICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgIGBHb3QgcmVzcG9uc2UgZnJvbSBQeVBJIGZvciAke3BhY2thZ2VOYW1lfUAke3BhY2thZ2VWZXJzaW9ufTogJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAganNvbixcbiAgICAgICl9YCxcbiAgICApO1xuXG4gICAgcmV0dXJuIEJvb2xlYW4oanNvbi5pbmZvKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBsaXN0UGlwZW52UGFja2FnZXMoKTogUHJvbWlzZTxcbiAgICB7IG5hbWU6IHN0cmluZzsgdmVyc2lvbjogc3RyaW5nIH1bXVxuICA+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3Rkb3V0ID0gYXdhaXQgZXhlYyhcbiAgICAgICAgXCJwaXBlbnZcIixcbiAgICAgICAgW1wicnVuXCIsIFwicGlwXCIsIFwibGlzdFwiLCBcIi0tZm9ybWF0PWpzb25cIl0sXG4gICAgICAgIHtcbiAgICAgICAgICBjd2Q6IHRoaXMud29ya2luZ0RpcmVjdG9yeSxcbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgICBsb2dnZXIuZGVidWcoXG4gICAgICAgIGBMaXN0aW5nIHBpcGVudiBwYWNrYWdlcyB1c2luZyBcInBpcGVudiBydW4gcGlwIGxpc3QgLS1mb3JtYXQ9anNvblwiOiAke3N0ZG91dH1gLFxuICAgICAgKTtcblxuICAgICAgY29uc3QgbGlzdCA9IHBpcFBhY2thZ2VTY2hlbWEucGFyc2UoSlNPTi5wYXJzZShzdGRvdXQpKTtcbiAgICAgIHJldHVybiBsaXN0LmZpbHRlcihcbiAgICAgICAgKGl0ZW0pID0+XG4gICAgICAgICAgaXRlbS5uYW1lLnN0YXJ0c1dpdGgoXCJjZGt0Zi1jZGt0Zi1wcm92aWRlclwiKSB8fFxuICAgICAgICAgIGl0ZW0ubmFtZS5zdGFydHNXaXRoKFwiY2RrdG4tcHJvdmlkZXJcIiksXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ291bGQgbm90IGRldGVybWluZSBpbnN0YWxsZWQgcGFja2FnZXMgdXNpbmcgJ3BpcGVudiBydW4gcGlwIGxpc3QgLS1mb3JtYXQ9anNvbic6ICR7ZX1gLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgbGlzdFBpcFBhY2thZ2VzKCk6IFByb21pc2U8eyBuYW1lOiBzdHJpbmc7IHZlcnNpb246IHN0cmluZyB9W10+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3Rkb3V0ID0gYXdhaXQgZXhlYyhcInBpcFwiLCBbXCJsaXN0XCIsIFwiLS1mb3JtYXQ9anNvblwiXSwge1xuICAgICAgICBjd2Q6IHRoaXMud29ya2luZ0RpcmVjdG9yeSxcbiAgICAgIH0pO1xuICAgICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgICBgTGlzdGluZyBwaXAgcGFja2FnZXMgdXNpbmcgXCJwaXAgbGlzdCAtLWZvcm1hdD1qc29uXCI6ICR7c3Rkb3V0fWAsXG4gICAgICApO1xuXG4gICAgICBjb25zdCBsaXN0ID0gcGlwUGFja2FnZVNjaGVtYS5wYXJzZShKU09OLnBhcnNlKHN0ZG91dCkpO1xuICAgICAgcmV0dXJuIGxpc3QuZmlsdGVyKFxuICAgICAgICAoaXRlbSkgPT5cbiAgICAgICAgICBpdGVtLm5hbWUuc3RhcnRzV2l0aChcImNka3RmLWNka3RmLXByb3ZpZGVyXCIpIHx8XG4gICAgICAgICAgaXRlbS5uYW1lLnN0YXJ0c1dpdGgoXCJjZGt0bi1wcm92aWRlclwiKSxcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDb3VsZCBub3QgZGV0ZXJtaW5lIGluc3RhbGxlZCBwYWNrYWdlcyB1c2luZyAncGlwIGxpc3QgLS1mb3JtYXQ9anNvbic6ICR7ZX1gLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgbGlzdFByb3ZpZGVyUGFja2FnZXMoKTogUHJvbWlzZTxcbiAgICB7IG5hbWU6IHN0cmluZzsgdmVyc2lvbjogc3RyaW5nIH1bXVxuICA+IHtcbiAgICByZXR1cm4gdGhpcy5hcHBDb21tYW5kLmluY2x1ZGVzKFwicGlwZW52XCIpXG4gICAgICA/IHRoaXMubGlzdFBpcGVudlBhY2thZ2VzKClcbiAgICAgIDogdGhpcy5saXN0UGlwUGFja2FnZXMoKTtcbiAgfVxufVxuXG5jbGFzcyBOdWdldFBhY2thZ2VNYW5hZ2VyIGV4dGVuZHMgUGFja2FnZU1hbmFnZXIge1xuICBwdWJsaWMgYXN5bmMgYWRkUGFja2FnZShcbiAgICBwYWNrYWdlTmFtZTogc3RyaW5nLFxuICAgIHBhY2thZ2VWZXJzaW9uPzogc3RyaW5nLFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBjb21tYW5kID0gXCJkb3RuZXRcIjtcbiAgICBjb25zdCBhcmdzID0gW1wiYWRkXCIsIFwicGFja2FnZVwiLCBwYWNrYWdlTmFtZV07XG4gICAgaWYgKHBhY2thZ2VWZXJzaW9uKSB7XG4gICAgICBhcmdzLnB1c2goXCItLXZlcnNpb25cIiwgcGFja2FnZVZlcnNpb24pO1xuICAgIH1cbiAgICBjb25zb2xlLmxvZyhcbiAgICAgIGBJbnN0YWxsaW5nIHBhY2thZ2UgJHtwYWNrYWdlTmFtZX0gQCAke3BhY2thZ2VWZXJzaW9ufSB1c2luZyBcIiR7Y29tbWFuZH0gJHthcmdzLmpvaW4oXG4gICAgICAgIFwiIFwiLFxuICAgICAgKX1cIi5gLFxuICAgICk7XG5cbiAgICBhd2FpdCBleGVjKGNvbW1hbmQsIGFyZ3MsIHsgY3dkOiB0aGlzLndvcmtpbmdEaXJlY3RvcnkgfSk7XG5cbiAgICBjb25zb2xlLmxvZyhcIlBhY2thZ2UgaW5zdGFsbGVkLlwiKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBpc05wbVZlcnNpb25BdmFpbGFibGUoXG4gICAgcGFja2FnZU5hbWU6IHN0cmluZyxcbiAgICBwYWNrYWdlVmVyc2lvbjogc3RyaW5nLFxuICApOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBsb2dnZXIuZGVidWcoYENoZWNraW5nIGlmICR7cGFja2FnZU5hbWV9QCR7cGFja2FnZVZlcnNpb259IGlzIGF2YWlsYWJsZWApO1xuXG4gICAgY29uc3QgW293bmVyLCAuLi5yZXN0XSA9IHBhY2thZ2VOYW1lLnNwbGl0KFwiLlwiKTtcbiAgICBjb25zdCBmaXhlZE93bmVyID0gcGFja2FnZU5hbWUuc3RhcnRzV2l0aChcIklvLkNka3RuXCIpID8gXCJjZGt0blwiIDogb3duZXI7XG4gICAgY29uc3QgaWQgPSByZXN0W3Jlc3QubGVuZ3RoIC0gMV07XG4gICAgY29uc3QgdXJsID0gYGh0dHBzOi8vYXp1cmVzZWFyY2gtdXNuYy5udWdldC5vcmcvcXVlcnk/cT1vd25lcjoke2ZpeGVkT3duZXJ9JTIwaWQ6JHtpZH0mcHJlcmVsZWFzZT1mYWxzZSZzZW1WZXJMZXZlbD0yLjAuMGA7XG4gICAgbG9nZ2VyLmRlYnVnKGBGZXRjaGluZyBwYWNrYWdlIG1ldGFkYXRhIGZyb20gTnVnZXQ6ICcke3VybH0nYCk7XG5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoV2l0aFJldHJ5KHVybCk7XG4gICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gSFRUUF9OT1RfRk9VTkQpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgTnVHZXQgcmVwb3J0cyAke3BhY2thZ2VOYW1lfUAke3BhY2thZ2VWZXJzaW9ufSBub3QgZm91bmRgKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QganNvbiA9IChhd2FpdCByZXNwb25zZS5qc29uKCkpIGFzIHtcbiAgICAgIGRhdGE6IHsgaWQ6IHN0cmluZzsgdmVyc2lvbnM6IHsgdmVyc2lvbjogc3RyaW5nIH1bXSB9W107XG4gICAgfTtcbiAgICBsb2dnZXIuZGVidWcoXG4gICAgICBgR290IHJlc3BvbnNlIGZyb20gTnVHZXQgZm9yICR7cGFja2FnZU5hbWV9IDogJHtKU09OLnN0cmluZ2lmeShqc29uKX1gLFxuICAgICk7XG5cbiAgICBpZiAoIWpzb24/LmRhdGE/Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGZhbHNlOyAvLyBObyBwYWNrYWdlIGZvdW5kXG4gICAgfVxuXG4gICAgY29uc3QgcGFja2FnZVZlcnNpb25zID1cbiAgICAgIGpzb24uZGF0YS5maW5kKChwKSA9PiBwLmlkID09PSBwYWNrYWdlTmFtZSk/LnZlcnNpb25zID8/IFtdO1xuXG4gICAgaWYgKCFwYWNrYWdlVmVyc2lvbnMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZmFsc2U7IC8vIE5vIHBhY2thZ2UgcmVsZWFzZSBtYXRjaGluZyB0aGUgaWQgZm91bmRcbiAgICB9XG5cbiAgICByZXR1cm4gcGFja2FnZVZlcnNpb25zLnNvbWUoKHYpID0+IHYudmVyc2lvbiA9PT0gcGFja2FnZVZlcnNpb24pO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGxpc3RQcm92aWRlclBhY2thZ2VzKCk6IFByb21pc2U8XG4gICAgeyBuYW1lOiBzdHJpbmc7IHZlcnNpb246IHN0cmluZyB9W11cbiAgPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0ZG91dCA9IGF3YWl0IGV4ZWMoXCJkb3RuZXRcIiwgW1wibGlzdFwiLCBcInBhY2thZ2VcIl0sIHtcbiAgICAgICAgY3dkOiB0aGlzLndvcmtpbmdEaXJlY3RvcnksXG4gICAgICB9KTtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgYExpc3RpbmcgbnVnZXQgcGFja2FnZXMgdXNpbmcgXCJkb3RuZXQgbGlzdCBwYWNrYWdlXCI6ICR7c3Rkb3V0fWAsXG4gICAgICApO1xuXG4gICAgICBjb25zdCByZWdleCA9XG4gICAgICAgIC9eXFxzKj5cXHMoKD86SGFzaGlDb3JwXFwuQ2RrdGZ8SW9cXC5DZGt0bilcXC5Qcm92aWRlcnNcXC5bXFx3Ll0rKVxccysoKD86XFxkK1xcLil7Mn1cXGQrKD86LVxcUyspPylcXHMrKCg/OlxcZCtcXC4pezJ9XFxkKyg/Oi1cXFMrKT8pXFxzKiQvO1xuXG4gICAgICByZXR1cm4gc3Rkb3V0XG4gICAgICAgIC5zcGxpdChcIlxcblwiKVxuICAgICAgICAubWFwKChsaW5lOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAvLyBFeGFtcGxlIG91dHB1dDpcbiAgICAgICAgICAvLyBQcm9qZWN0ICdNeVRlcnJhZm9ybVN0YWNrJyBoYXMgdGhlIGZvbGxvd2luZyBwYWNrYWdlIHJlZmVyZW5jZXNcbiAgICAgICAgICAvLyAgW25ldDYuMF06XG4gICAgICAgICAgLy8gIFRvcC1sZXZlbCBQYWNrYWdlICAgICAgUmVxdWVzdGVkICAgUmVzb2x2ZWRcbiAgICAgICAgICAvLyAgPiBIYXNoaUNvcnAuQ2RrdGYgICAgICAwLjAuMCAgICAgICAwLjAuMFxuICAgICAgICAgIC8vIG1hdGNoWzBdID0gZnVsbCBtYXRjaFxuICAgICAgICAgIC8vIG1hdGNoWzFdID0gcGFja2FnZSBuYW1lXG4gICAgICAgICAgLy8gbWF0Y2hbMl0gPSByZXF1ZXN0ZWQgdmVyc2lvblxuICAgICAgICAgIC8vIG1hdGNoWzNdID0gcmVzb2x2ZWQgdmVyc2lvblxuICAgICAgICAgIHJldHVybiByZWdleC5leGVjKGxpbmUpO1xuICAgICAgICB9KVxuICAgICAgICAuZmlsdGVyKChtYXRjaCkgPT4gISFtYXRjaClcbiAgICAgICAgLm1hcCgobWF0Y2gpID0+ICh7IG5hbWU6IG1hdGNoIVsxXSwgdmVyc2lvbjogbWF0Y2ghWzNdIH0pKTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENvdWxkIG5vdCBkZXRlcm1pbmUgaW5zdGFsbGVkIHBhY2thZ2VzIHVzaW5nICdkb3RuZXQgbGlzdCBwYWNrYWdlJzogJHtlfWAsXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFNoYXJlZCBiYXNlIGZvciB0aGUgSmF2YSBwYWNrYWdlIG1hbmFnZXJzIChNYXZlbiBhbmQgR3JhZGxlKS4gQm90aCBpbnN0YWxsIGZyb20gTWF2ZW4gQ2VudHJhbCwgc28gdGhlIGNoZWNrIGZvclxuICogd2hldGhlciBhIGdpdmVuIHByb3ZpZGVyIHZlcnNpb24gZXhpc3RzIGlzIGNvbW1vbiB0byBib3RoIGFuZCBsaXZlcyBoZXJlOyB0aGUgY29uY3JldGUgc3ViY2xhc3NlcyBkaWZmZXIgb25seSBpbiBob3dcbiAqIHRoZXkgZGVjbGFyZSBhbmQgbGlzdCBkZXBlbmRlbmNpZXMgKHBvbS54bWwgdnMgYnVpbGQuZ3JhZGxlKS5cbiAqL1xuYWJzdHJhY3QgY2xhc3MgSmF2YVBhY2thZ2VNYW5hZ2VyIGV4dGVuZHMgUGFja2FnZU1hbmFnZXIge1xuICAvKipcbiAgICogUmVwb3J0cyB3aGV0aGVyIGBwYWNrYWdlTmFtZUBwYWNrYWdlVmVyc2lvbmAgaXMgcHVibGlzaGVkIG9uIE1hdmVuIENlbnRyYWwgYnkgcHJvYmluZyB0aGUgYXJ0aWZhY3QgcmVwb3NpdG9yeSBmb3JcbiAgICogdGhlIHZlcnNpb24ncyBgLnBvbWAgZGlyZWN0bHk6IEhUVFAgMjAwIG1lYW5zIHByZXNlbnQsIGFueXRoaW5nIGVsc2UgbWVhbnMgbm90IGF2YWlsYWJsZS5cbiAgICpcbiAgICogQHBhcmFtIHBhY2thZ2VOYW1lIC0gVGhlIEphdmEgY29vcmRpbmF0ZXMgaW4gXCJncm91cC5hcnRpZmFjdFwiIGZvcm0sIGUuZy4gXCJjb20uaGFzaGljb3JwLmNka3RmLXByb3ZpZGVyLXJhbmRvbVwiLlxuICAgKiBAcGFyYW0gcGFja2FnZVZlcnNpb24gLSBUaGUgZXhhY3QgdmVyc2lvbiB0byBjaGVjayBmb3IuXG4gICAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgYC5wb21gIGV4aXN0cyBvbiBNYXZlbiBDZW50cmFsLCBgZmFsc2VgIG90aGVyd2lzZS5cbiAgICogQHRocm93cyBJZiBgcGFja2FnZU5hbWVgIGlzIG5vdCBpbiB0aGUgZXhwZWN0ZWQgXCJncm91cC5hcnRpZmFjdFwiIGZvcm1hdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBpc05wbVZlcnNpb25BdmFpbGFibGUoXG4gICAgcGFja2FnZU5hbWU6IHN0cmluZyxcbiAgICBwYWNrYWdlVmVyc2lvbjogc3RyaW5nLFxuICApOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBsb2dnZXIuZGVidWcoYENoZWNraW5nIGlmICR7cGFja2FnZU5hbWV9QCR7cGFja2FnZVZlcnNpb259IGlzIGF2YWlsYWJsZWApO1xuXG4gICAgY29uc3QgcGFydHMgPSBwYWNrYWdlTmFtZS5zcGxpdChcIi5cIik7XG4gICAgaWYgKHBhcnRzLmxlbmd0aCAhPT0gMykge1xuICAgICAgdGhyb3cgRXJyb3JzLkludGVybmFsKFxuICAgICAgICBgRXhwZWN0ZWQgcGFja2FnZSBuYW1lIHRvIGJlIGluIGZvcm1hdCBcImdyb3VwLmFydGlmYWN0XCIsIGUuZy4gXCJjb20uaGFzaGljb3JwLmNka3RmLXByb3ZpZGVyLWdvb2dsZVwiLCBnb3Q6ICR7cGFja2FnZU5hbWV9YCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgYXJ0aWZhY3RJZCA9IHBhcnRzLnBvcCgpO1xuICAgIGNvbnN0IGdyb3VwSWQgPSBwYXJ0cy5qb2luKFwiLlwiKTtcblxuICAgIC8vIFByb2JlIHRoZSBhcnRpZmFjdCBDRE4gZGlyZWN0bHkgZm9yIHRoZSAucG9tOiAyMDAgPSBwcmVzZW50LCBhbnl0aGluZyBlbHNlID0gbm90IGF2YWlsYWJsZS5cbiAgICBjb25zdCBncm91cFBhdGggPSBncm91cElkLnJlcGxhY2UoL1xcLi9nLCBcIi9cIik7XG4gICAgY29uc3QgdXJsID0gYGh0dHBzOi8vcmVwbzEubWF2ZW4ub3JnL21hdmVuMi8ke2dyb3VwUGF0aH0vJHthcnRpZmFjdElkfS8ke3BhY2thZ2VWZXJzaW9ufS8ke2FydGlmYWN0SWR9LSR7cGFja2FnZVZlcnNpb259LnBvbWA7XG4gICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgYENoZWNraW5nIHdoZXRoZXIgJHtwYWNrYWdlTmFtZX1AJHtwYWNrYWdlVmVyc2lvbn0gZXhpc3RzIG9uIE1hdmVuIENlbnRyYWwgdW5kZXIgJyR7dXJsfSdgLFxuICAgICk7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaFdpdGhSZXRyeSh1cmwpO1xuICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IEhUVFBfTk9UX0ZPVU5EKSB7XG4gICAgICBsb2dnZXIuZGVidWcoXG4gICAgICAgIGBNYXZlbiBDZW50cmFsIHJlcG9ydHMgJHtwYWNrYWdlTmFtZX1AJHtwYWNrYWdlVmVyc2lvbn0gbm90IGZvdW5kYCxcbiAgICAgICk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgIGBNYXZlbiBDZW50cmFsIHJlc3BvbmRlZCBIVFRQICR7cmVzcG9uc2Uuc3RhdHVzfSBmb3IgJHtwYWNrYWdlTmFtZX1AJHtwYWNrYWdlVmVyc2lvbn1gLFxuICAgICk7XG5cbiAgICByZXR1cm4gcmVzcG9uc2Uub2s7XG4gIH1cbn1cblxuY2xhc3MgTWF2ZW5QYWNrYWdlTWFuYWdlciBleHRlbmRzIEphdmFQYWNrYWdlTWFuYWdlciB7XG4gIHB1YmxpYyBhc3luYyBhZGRQYWNrYWdlKFxuICAgIHBhY2thZ2VOYW1lOiBzdHJpbmcsXG4gICAgcGFja2FnZVZlcnNpb24gPSBcIkxBVEVTVFwiLCAvLyB0aGUgbGF0ZXN0IG9wdGlvbiBpcyBkZXByZWNhdGVkIGluIG1hdmVuIDMuNVxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zb2xlLmxvZyhgQWRkaW5nICR7cGFja2FnZU5hbWV9IEAgJHtwYWNrYWdlVmVyc2lvbn0gdG8gcG9tLnhtbGApO1xuICAgIC8vIEFzc2VydCBwb20ueG1sIGV4aXN0c1xuICAgIGNvbnN0IHBvbVBhdGggPSBwYXRoLmpvaW4odGhpcy53b3JraW5nRGlyZWN0b3J5LCBcInBvbS54bWxcIik7XG4gICAgaWYgKCFleGlzdHNTeW5jKHBvbVBhdGgpKSB7XG4gICAgICB0aHJvdyBFcnJvcnMuVXNhZ2UoXG4gICAgICAgIFwiTm8gcG9tLnhtbCBmb3VuZCBpbiBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LiBQbGVhc2UgcnVuIHRoZSBjb21tYW5kIGZyb20gdGhlIHJvb3Qgb2YgeW91ciBwcm9qZWN0LlwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBwb20gPSBhd2FpdCBmcy5yZWFkRmlsZShwb21QYXRoLCBcInV0ZjhcIik7XG4gICAgY29uc3QgcG9tWG1sID0gKGF3YWl0IHhtbDJqcyhwb20sIHt9KSkgYXMgRWxlbWVudDtcblxuICAgIC8vIE11dGF0ZSBkZXBlbmRlbmNpZXNcbiAgICBjb25zdCBuYW1lUGFydHMgPSBwYWNrYWdlTmFtZS5zcGxpdChcIi5cIik7XG4gICAgY29uc3QgZ3JvdXBJZCA9IG5hbWVQYXJ0cy5zbGljZSgwLCBuYW1lUGFydHMubGVuZ3RoIC0gMSkuam9pbihcIi5cIik7XG4gICAgY29uc3QgYXJ0aWZhY3RJZCA9IG5hbWVQYXJ0c1tuYW1lUGFydHMubGVuZ3RoIC0gMV07XG5cbiAgICBjb25zdCBuZXdEZXBlbmRlbmN5ID0gKGF3YWl0IHhtbDJqcyhcbiAgICAgIGA8ZGVwZW5kZW5jeT5cbiAgICA8Z3JvdXBJZD4ke2dyb3VwSWR9PC9ncm91cElkPlxuICAgIDxhcnRpZmFjdElkPiR7YXJ0aWZhY3RJZH08L2FydGlmYWN0SWQ+XG4gICAgPHZlcnNpb24+JHtwYWNrYWdlVmVyc2lvbn08L3ZlcnNpb24+XG48L2RlcGVuZGVuY3k+YCxcbiAgICApKSBhcyBFbGVtZW50O1xuXG4gICAgY29uc3QgZGVwZW5kZW5jaWVzID0gcG9tWG1sLmVsZW1lbnRzXG4gICAgICA/LmZpbmQoKGVsKSA9PiBlbC5uYW1lID09PSBcInByb2plY3RcIilcbiAgICAgID8uZWxlbWVudHM/LmZpbmQoKGVsKSA9PiBlbC5uYW1lID09PSBcImRlcGVuZGVuY2llc1wiKTtcblxuICAgIGlmICghZGVwZW5kZW5jaWVzKSB7XG4gICAgICB0aHJvdyBFcnJvcnMuVXNhZ2UoYENvdWxkIG5vdCBmaW5kIGRlcGVuZGVuY2llcyBzZWN0aW9uIGluIHRoZSBwb20ueG1sYCk7XG4gICAgfVxuICAgIGRlcGVuZGVuY2llcy5lbGVtZW50cyA9IChkZXBlbmRlbmNpZXM/LmVsZW1lbnRzIHx8IFtdKS5maWx0ZXIoXG4gICAgICAoZWwpID0+XG4gICAgICAgIGVsLmVsZW1lbnRzPy5zb21lKFxuICAgICAgICAgIChncm91cCkgPT5cbiAgICAgICAgICAgIGdyb3VwLm5hbWUgPT09IFwiZ3JvdXBJZFwiICYmIGdyb3VwLmVsZW1lbnRzPy5bMF0udGV4dCAhPT0gZ3JvdXBJZCxcbiAgICAgICAgKSB8fFxuICAgICAgICBlbC5lbGVtZW50cz8uc29tZShcbiAgICAgICAgICAoYXJ0aWZhY3QpID0+XG4gICAgICAgICAgICBhcnRpZmFjdC5uYW1lID09PSBcImFydGlmYWN0SWRcIiAmJlxuICAgICAgICAgICAgYXJ0aWZhY3QuZWxlbWVudHM/LlswXS50ZXh0ICE9PSBhcnRpZmFjdElkLFxuICAgICAgICApLFxuICAgICk7XG4gICAgZGVwZW5kZW5jaWVzPy5lbGVtZW50cz8ucHVzaChuZXdEZXBlbmRlbmN5LmVsZW1lbnRzIVswXSk7XG5cbiAgICAvLyBXcml0ZSBuZXcgcG9tLnhtbFxuICAgIGF3YWl0IGZzLndyaXRlRmlsZShwb21QYXRoLCBqczJ4bWwocG9tWG1sLCB7IHNwYWNlczogMiB9KSk7XG5cbiAgICAvLyBJbnN0YWxsXG4gICAgYXdhaXQgZXhlYyhcIm12blwiLCBbXCJpbnN0YWxsXCJdLCB7IGN3ZDogdGhpcy53b3JraW5nRGlyZWN0b3J5IH0pO1xuICAgIGNvbnNvbGUubG9nKFwiUGFja2FnZSBpbnN0YWxsZWQuXCIpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGxpc3RQcm92aWRlclBhY2thZ2VzKCk6IFByb21pc2U8XG4gICAgeyBuYW1lOiBzdHJpbmc7IHZlcnNpb246IHN0cmluZyB9W11cbiAgPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBvbVBhdGggPSBwYXRoLmpvaW4odGhpcy53b3JraW5nRGlyZWN0b3J5LCBcInBvbS54bWxcIik7XG4gICAgICBpZiAoIWV4aXN0c1N5bmMocG9tUGF0aCkpIHtcbiAgICAgICAgdGhyb3cgRXJyb3JzLlVzYWdlKFxuICAgICAgICAgIFwiTm8gcG9tLnhtbCBmb3VuZCBpbiBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LiBQbGVhc2UgcnVuIHRoZSBjb21tYW5kIGZyb20gdGhlIHJvb3Qgb2YgeW91ciBwcm9qZWN0LlwiLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwb20gPSBhd2FpdCBmcy5yZWFkRmlsZShwb21QYXRoLCBcInV0ZjhcIik7XG4gICAgICBjb25zdCBwb21YbWwgPSAoYXdhaXQgeG1sMmpzKHBvbSwge30pKSBhcyBFbGVtZW50O1xuXG4gICAgICBjb25zdCBkZXBlbmRlbmNpZXMgPVxuICAgICAgICBwb21YbWwuZWxlbWVudHNcbiAgICAgICAgICA/LmZpbmQoKGVsKSA9PiBlbC5uYW1lID09PSBcInByb2plY3RcIilcbiAgICAgICAgICA/LmVsZW1lbnRzPy5maW5kKChlbCkgPT4gZWwubmFtZSA9PT0gXCJkZXBlbmRlbmNpZXNcIik/LmVsZW1lbnRzID8/IFtdO1xuXG4gICAgICByZXR1cm4gZGVwZW5kZW5jaWVzXG4gICAgICAgIC5tYXAoKGRlcCkgPT4gKHtcbiAgICAgICAgICBuYW1lOiBgJHtcbiAgICAgICAgICAgIGRlcC5lbGVtZW50cz8uZmluZCgoZWwpID0+IGVsLm5hbWUgPT09IFwiZ3JvdXBJZFwiKT8uZWxlbWVudHM/LlswXVxuICAgICAgICAgICAgICAudGV4dFxuICAgICAgICAgIH0uJHtcbiAgICAgICAgICAgIGRlcC5lbGVtZW50cz8uZmluZCgoZWwpID0+IGVsLm5hbWUgPT09IFwiYXJ0aWZhY3RJZFwiKT8uZWxlbWVudHM/LlswXVxuICAgICAgICAgICAgICAudGV4dFxuICAgICAgICAgIH1gLFxuICAgICAgICAgIHZlcnNpb246IGRlcC5lbGVtZW50cz8uZmluZCgoZWwpID0+IGVsLm5hbWUgPT09IFwidmVyc2lvblwiKVxuICAgICAgICAgICAgPy5lbGVtZW50cz8uWzBdLnRleHQgYXMgc3RyaW5nLFxuICAgICAgICB9KSlcbiAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAoZGVwKSA9PlxuICAgICAgICAgICAgZGVwLm5hbWUuc3RhcnRzV2l0aChcImNvbS5oYXNoaWNvcnAuY2RrdGYtcHJvdmlkZXItXCIpIHx8XG4gICAgICAgICAgICBkZXAubmFtZS5zdGFydHNXaXRoKFwiaW8uY2RrdG4uY2RrdG4tcHJvdmlkZXItXCIpLFxuICAgICAgICApO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ291bGQgbm90IGRldGVybWluZSBpbnN0YWxsZWQgcGFja2FnZXMgcmVhZGluZyB0aGUgcG9tLnhtbDogJHtlLm1lc3NhZ2V9YCxcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5cbmNsYXNzIEdyYWRsZVBhY2thZ2VNYW5hZ2VyIGV4dGVuZHMgSmF2YVBhY2thZ2VNYW5hZ2VyIHtcbiAgcHVibGljIHN0YXRpYyBpc0dyYWRsZVByb2plY3Qod29ya2luZ0RpcmVjdG9yeTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzR3JhZGxlUHJvamVjdCh3b3JraW5nRGlyZWN0b3J5KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBhZGRQYWNrYWdlKFxuICAgIHBhY2thZ2VGUU46IHN0cmluZyxcbiAgICBwYWNrYWdlVmVyc2lvbiA9IFwibGF0ZXN0LnJlbGVhc2VcIixcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgYnVpbGRHcmFkbGVQYXRoID0gcGF0aC5qb2luKHRoaXMud29ya2luZ0RpcmVjdG9yeSwgXCJidWlsZC5ncmFkbGVcIik7XG4gICAgY29uc3QgYnVpbGRHcmFkbGUgPSBhd2FpdCBmcy5yZWFkRmlsZShidWlsZEdyYWRsZVBhdGgsIFwidXRmOFwiKTtcbiAgICBjb25zdCBidWlsZEdyYWRsZUxpbmVzID0gYnVpbGRHcmFkbGUuc3BsaXQoL1xccj9cXG4vKTtcblxuICAgIGNvbnN0IGRlcGVuZGVuY2llc1JlZ2V4ID0gL2RlcGVuZGVuY2llc1xccytcXHsvaTtcbiAgICBjb25zdCBkZXBlbmRlbmN5QmxvY2tTdGFydCA9IGJ1aWxkR3JhZGxlTGluZXMuZmluZEluZGV4KChsaW5lKSA9PlxuICAgICAgZGVwZW5kZW5jaWVzUmVnZXgudGVzdChsaW5lKSxcbiAgICApO1xuICAgIGlmIChkZXBlbmRlbmN5QmxvY2tTdGFydCA9PT0gLTEpIHtcbiAgICAgIHRocm93IEVycm9ycy5Vc2FnZShcbiAgICAgICAgXCJDb3VsZCBub3QgZmluZCBkZXBlbmRlbmNpZXMgc2VjdGlvbiBpbiB0aGUgYnVpbGQuZ3JhZGxlXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHBhY2thZ2VTZWdtZW50cyA9IHBhY2thZ2VGUU4uc3BsaXQoXCIuXCIpO1xuICAgIGNvbnN0IHBhY2thZ2VOYW1lID0gcGFja2FnZVNlZ21lbnRzLnBvcCgpO1xuICAgIGNvbnN0IGdyb3VwTmFtZSA9IHBhY2thZ2VTZWdtZW50cy5qb2luKFwiLlwiKTtcbiAgICBjb25zdCBkZXBlbmRlbmN5U3BlY2lmaWVyID0gYCR7Z3JvdXBOYW1lfToke3BhY2thZ2VOYW1lfWA7XG4gICAgY29uc3QgZGVwZW5kZW5jeUFuZFZlcnNpb25TcGVjaWZpZXIgPSBgJHtkZXBlbmRlbmN5U3BlY2lmaWVyfToke3BhY2thZ2VWZXJzaW9ufWA7XG5cbiAgICBjb25zdCBleGlzdGluZ0RlcGVuZGVuY3kgPSBidWlsZEdyYWRsZUxpbmVzLmZpbmRJbmRleCgobGluZSkgPT5cbiAgICAgIGxpbmUuaW5jbHVkZXMoZGVwZW5kZW5jeVNwZWNpZmllciksXG4gICAgKTtcbiAgICBpZiAoZXhpc3RpbmdEZXBlbmRlbmN5ICE9PSAtMSkge1xuICAgICAgYnVpbGRHcmFkbGVMaW5lcy5zcGxpY2UoZXhpc3RpbmdEZXBlbmRlbmN5LCAxKTtcbiAgICB9XG5cbiAgICBjb25zdCBuZXdQYWNrYWdlRGVwZW5kZW5jeSA9IGBcXHRpbXBsZW1lbnRhdGlvbiAnJHtkZXBlbmRlbmN5QW5kVmVyc2lvblNwZWNpZmllcn0nYDtcbiAgICBidWlsZEdyYWRsZUxpbmVzLnNwbGljZShkZXBlbmRlbmN5QmxvY2tTdGFydCArIDEsIDAsIG5ld1BhY2thZ2VEZXBlbmRlbmN5KTtcblxuICAgIGF3YWl0IGZzLndyaXRlRmlsZShidWlsZEdyYWRsZVBhdGgsIGJ1aWxkR3JhZGxlTGluZXMuam9pbihcIlxcblwiKSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgbGlzdFByb3ZpZGVyUGFja2FnZXMoKTogUHJvbWlzZTxcbiAgICB7IG5hbWU6IHN0cmluZzsgdmVyc2lvbjogc3RyaW5nIH1bXVxuICA+IHtcbiAgICBjb25zdCBkZXBlbmRlbmNpZXMgPSBhd2FpdCBnZXRHcmFkbGVEZXBlbmRlbmNpZXMoKTtcbiAgICBpZiAoIWRlcGVuZGVuY2llcykge1xuICAgICAgdGhyb3cgRXJyb3JzLlVzYWdlKFwiQ291bGQgbm90IGZpbmQgYW55IGRlcGVuZGVuY2llc1wiKTtcbiAgICB9XG5cbiAgICBjb25zdCBkZXBlbmRlbmN5TGlzdCA9IGRlcGVuZGVuY2llc1xuICAgICAgLm1hcCgobGluZSkgPT4gZ2V0RGVwZW5kZW5jeUluZm9ybWF0aW9uRnJvbUxpbmUobGluZSkpXG4gICAgICAuZmlsdGVyKChkZXApID0+IHtcbiAgICAgICAgaWYgKCFkZXApIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBkZXAubmFtZS5pbmNsdWRlcyhcImNka3RmLXByb3ZpZGVyLVwiKSB8fFxuICAgICAgICAgIGRlcC5uYW1lLmluY2x1ZGVzKFwiY2RrdG4tcHJvdmlkZXItXCIpXG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICAgLm1hcCgoZGVwKSA9PiAoe1xuICAgICAgICBuYW1lOiBgJHtkZXAhLmdyb3VwfS4ke2RlcCEubmFtZX1gLFxuICAgICAgICB2ZXJzaW9uOiBkZXAhLnZlcnNpb24sXG4gICAgICB9KSk7XG5cbiAgICByZXR1cm4gZGVwZW5kZW5jeUxpc3Q7XG4gIH1cbn1cblxuY2xhc3MgR29QYWNrYWdlTWFuYWdlciBleHRlbmRzIFBhY2thZ2VNYW5hZ2VyIHtcbiAgcHVibGljIGFzeW5jIGFkZFBhY2thZ2UoXG4gICAgcGFja2FnZU5hbWU6IHN0cmluZyxcbiAgICBwYWNrYWdlVmVyc2lvbj86IHN0cmluZyxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc29sZS5sb2coYEFkZGluZyBwYWNrYWdlICR7cGFja2FnZU5hbWV9IEAgJHtwYWNrYWdlVmVyc2lvbn1gKTtcblxuICAgIGNvbnN0IG1ham9yVmVyc2lvbjogbnVtYmVyIHwgdW5kZWZpbmVkID0gcGFja2FnZVZlcnNpb25cbiAgICAgID8gc2VtdmVyLm1ham9yKHBhY2thZ2VWZXJzaW9uKVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBsZXQgdmVyc2lvblBhY2thZ2VTdWZmaXggPSBcIlwiO1xuICAgIGlmICh0eXBlb2YgbWFqb3JWZXJzaW9uID09PSBcIm51bWJlclwiICYmIG1ham9yVmVyc2lvbiA+IDEpIHtcbiAgICAgIHZlcnNpb25QYWNrYWdlU3VmZml4ID0gYC92JHttYWpvclZlcnNpb259YDtcbiAgICB9XG5cbiAgICBsb2dnZXIuZGVidWcoXG4gICAgICBgUnVubmluZyAnZ28gZ2V0ICR7cGFja2FnZU5hbWV9JHt2ZXJzaW9uUGFja2FnZVN1ZmZpeH1AdiR7cGFja2FnZVZlcnNpb259J2AsXG4gICAgKTtcbiAgICAvLyBJbnN0YWxsXG4gICAgYXdhaXQgZXhlYyhcbiAgICAgIFwiZ29cIixcbiAgICAgIFtcImdldFwiLCBgJHtwYWNrYWdlTmFtZX0ke3ZlcnNpb25QYWNrYWdlU3VmZml4fUB2JHtwYWNrYWdlVmVyc2lvbn1gXSxcbiAgICAgIHtcbiAgICAgICAgY3dkOiB0aGlzLndvcmtpbmdEaXJlY3RvcnksXG4gICAgICB9LFxuICAgICk7XG5cbiAgICBjb25zb2xlLmxvZyhcIlBhY2thZ2UgaW5zdGFsbGVkLlwiKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBpc05wbVZlcnNpb25BdmFpbGFibGUoXG4gICAgcGFja2FnZU5hbWU6IHN0cmluZyxcbiAgICBwYWNrYWdlVmVyc2lvbjogc3RyaW5nLFxuICApOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBsb2dnZXIuZGVidWcoYENoZWNraW5nIGlmICR7cGFja2FnZU5hbWV9QCR7cGFja2FnZVZlcnNpb259IGlzIGF2YWlsYWJsZWApO1xuXG4gICAgLy8gZS5nLiBnaXRodWIuY29tL2Nka3RmL2Nka3RmLXByb3ZpZGVyLWdvb2dsZS1nby9nb29nbGVcbiAgICBjb25zdCBwYXJ0cyA9IHBhY2thZ2VOYW1lLnNwbGl0KFwiL1wiKTtcbiAgICBpZiAocGFydHMubGVuZ3RoICE9PSA0KSB7XG4gICAgICB0aHJvdyBFcnJvcnMuSW50ZXJuYWwoXG4gICAgICAgIGBFeHBlY3RpbmcgR28gcGFja2FnZSBuYW1lIHRvIGJlIGluIHRoZSBmb3JtYXQgb2YgZ2l0aHViLmNvbS88b3JnPi88cmVwbz4vPHBhY2thZ2U+LCBnb3QgJHtwYWNrYWdlTmFtZX1gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBvcmcgPSBwYXJ0c1sxXTtcbiAgICBjb25zdCByZXBvID0gcGFydHNbMl07XG4gICAgY29uc3QgcGFja2FnZVBhdGggPSBwYXJ0c1szXTtcblxuICAgIGNvbnN0IHVybCA9IGBodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zLyR7b3JnfS8ke3JlcG99L2dpdC9yZWYvdGFncy8ke3BhY2thZ2VQYXRofS92JHtwYWNrYWdlVmVyc2lvbn1gO1xuICAgIGxvZ2dlci5kZWJ1ZyhgRmV0Y2hpbmcgdGFncyBmb3IgJHtvcmd9LyR7cmVwb30gZnJvbSAnJHt1cmx9J2ApO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2hXaXRoUmV0cnkodXJsLCB7XG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgIEFjY2VwdDogXCJhcHBsaWNhdGlvbi92bmQuZ2l0aHViK2pzb25cIixcbiAgICAgICAgXCJVc2VyLUFnZW50XCI6IFwiT3BlbkNvbnN0cnVjdHMvY2RrdG4tY2xpXCIsXG4gICAgICAgIC4uLihHSVRIVUJfQVBJX1RPS0VOX0NES1RGXG4gICAgICAgICAgPyB7IEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtHSVRIVUJfQVBJX1RPS0VOX0NES1RGfWAgfVxuICAgICAgICAgIDoge30pLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IEhUVFBfTk9UX0ZPVU5EKSB7XG4gICAgICBsb2dnZXIuaW5mbyhcbiAgICAgICAgYENvdWxkIG5vdCBmaW5kIHRoZSB0YWcgJHtwYWNrYWdlUGF0aH0vdiR7cGFja2FnZVZlcnNpb259IGluIHRoZSByZXBvc2l0b3J5ICR7b3JnfS8ke3JlcG99YCxcbiAgICAgICk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QganNvbiA9IChhd2FpdCByZXNwb25zZS5qc29uKCkpIGFzIGFueTtcbiAgICBsb2dnZXIuZGVidWcoXG4gICAgICBgR290IHJlc3BvbnNlIGZyb20gR2l0SHVicyByZXBvc2l0b3J5IHRhZyBlbmRwb2ludCBmb3IgJHtwYWNrYWdlTmFtZX06ICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgIGpzb24sXG4gICAgICApfWAsXG4gICAgKTtcblxuICAgIHJldHVybiBCb29sZWFuKGpzb24gJiYganNvbi5yZWYpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGxpc3RQcm92aWRlclBhY2thZ2VzKCk6IFByb21pc2U8XG4gICAgeyBuYW1lOiBzdHJpbmc7IHZlcnNpb246IHN0cmluZyB9W11cbiAgPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGdvU3VtUGF0aCA9IHBhdGguam9pbih0aGlzLndvcmtpbmdEaXJlY3RvcnksIFwiZ28uc3VtXCIpO1xuICAgICAgaWYgKCFleGlzdHNTeW5jKGdvU3VtUGF0aCkpIHtcbiAgICAgICAgdGhyb3cgRXJyb3JzLlVzYWdlKFxuICAgICAgICAgIFwiTm8gZ28uc3VtIGZvdW5kIGluIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuIFBsZWFzZSBydW4gdGhlIGNvbW1hbmQgZnJvbSB0aGUgcm9vdCBvZiB5b3VyIHByb2plY3QuXCIsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGdvU3VtID0gYXdhaXQgZnMucmVhZEZpbGUoZ29TdW1QYXRoLCBcInV0ZjhcIik7XG4gICAgICBjb25zdCBkZWR1cGVkUHJvdmlkZXJOYW1lcyA9IG5ldyBTZXQoKTtcblxuICAgICAgcmV0dXJuIGdvU3VtXG4gICAgICAgIC5zcGxpdChcIlxcblwiKVxuICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgIChsaW5lKSA9PlxuICAgICAgICAgICAgbGluZS5zdGFydHNXaXRoKFwiZ2l0aHViLmNvbS9oYXNoaWNvcnAvY2RrdGYtcHJvdmlkZXJcIikgfHxcbiAgICAgICAgICAgIGxpbmUuc3RhcnRzV2l0aChcImdpdGh1Yi5jb20vY2RrdGYvY2RrdGYtcHJvdmlkZXJcIikgfHxcbiAgICAgICAgICAgIGxpbmUuc3RhcnRzV2l0aChcImdpdGh1Yi5jb20vY2RrdG4taW8vY2RrdG4tcHJvdmlkZXJcIiksXG4gICAgICAgIClcbiAgICAgICAgLm1hcCgobGluZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHBhcnRzID0gbGluZS5zcGxpdChcIiBcIik7XG4gICAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCAhPT0gMykge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3JzLkludGVybmFsKFxuICAgICAgICAgICAgICBgRXhwZWN0ZWQgbGluZSBpbiBnby5zdW0gdG8gYmUgaW4gdGhlIGZvcm1hdCBvZiAnPHBhY2thZ2U+IDx2ZXJzaW9uPiA8Y2hlY2tzdW0+JywgZ290OiAke2xpbmV9YCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gcGFydFswXSBjb3VsZCBiZSBnaXRodWIuY29tL2F3cy9jb25zdHJ1Y3RzLWdvL2NvbnN0cnVjdHMvdjEwXG4gICAgICAgICAgY29uc3QgbmFtZSA9IHBhcnRzWzBdLnNwbGl0KFwiL1wiKS5zbGljZSgwLCA0KS5qb2luKFwiL1wiKTtcblxuICAgICAgICAgIGNvbnN0IHZlcnNpb24gPSBwYXJ0c1sxXS5zcGxpdChcIi9cIilbMF07XG5cbiAgICAgICAgICBpZiAoZGVkdXBlZFByb3ZpZGVyTmFtZXMuaGFzKG5hbWUpKSB7XG4gICAgICAgICAgICByZXR1cm4geyBuYW1lOiBcIlwiLCB2ZXJzaW9uOiBcIlwiIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGVkdXBlZFByb3ZpZGVyTmFtZXMuYWRkKG5hbWUpO1xuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICB2ZXJzaW9uLFxuICAgICAgICAgIH07XG4gICAgICAgIH0pXG4gICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgKHByb3ZpZGVySW5mbykgPT4gISFwcm92aWRlckluZm8ubmFtZSAmJiAhIXByb3ZpZGVySW5mby52ZXJzaW9uLFxuICAgICAgICApO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ291bGQgbm90IGRldGVybWluZSBpbnN0YWxsZWQgcGFja2FnZXMgcmVhZGluZyB0aGUgZ28uc3VtOiAke2UubWVzc2FnZX1gLFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cdktn/cli-core",
|
|
3
|
-
"version": "0.24.0-pre.
|
|
3
|
+
"version": "0.24.0-pre.87",
|
|
4
4
|
"description": "CDK Terrain CLI Core, meant for internal use only",
|
|
5
5
|
"main": "build/lib/index.js",
|
|
6
6
|
"types": "build/lib/index.d.ts",
|
|
@@ -47,11 +47,11 @@
|
|
|
47
47
|
"xml-js": "1.6.11",
|
|
48
48
|
"xstate": "4.38.3",
|
|
49
49
|
"zod": "4.4.3",
|
|
50
|
-
"@cdktn/commons": "0.24.0-pre.
|
|
51
|
-
"@cdktn/hcl-tools": "0.24.0-pre.
|
|
52
|
-
"@cdktn/hcl2cdk": "0.24.0-pre.
|
|
53
|
-
"@cdktn/provider-schema": "0.24.0-pre.
|
|
54
|
-
"cdktn": "0.24.0-pre.
|
|
50
|
+
"@cdktn/commons": "0.24.0-pre.87",
|
|
51
|
+
"@cdktn/hcl-tools": "0.24.0-pre.87",
|
|
52
|
+
"@cdktn/hcl2cdk": "0.24.0-pre.87",
|
|
53
|
+
"@cdktn/provider-schema": "0.24.0-pre.87",
|
|
54
|
+
"cdktn": "0.24.0-pre.87"
|
|
55
55
|
},
|
|
56
56
|
"lint-staged": {
|
|
57
57
|
"src/**/*.{ts,tsx}": "tsc-files ambient.d.ts --noEmit"
|
|
@@ -65,7 +65,7 @@
|
|
|
65
65
|
"prettier": "2.8.8",
|
|
66
66
|
"tsc-files": "1.1.4",
|
|
67
67
|
"typescript": "^5.0.0",
|
|
68
|
-
"@cdktn/provider-generator": "0.24.0-pre.
|
|
68
|
+
"@cdktn/provider-generator": "0.24.0-pre.87"
|
|
69
69
|
},
|
|
70
70
|
"engines": {
|
|
71
71
|
"node": ">=22.19.0"
|