@techextensor/tab-sdk 0.0.40 → 0.0.41
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.
- package/README.md +24 -24
- package/esm2022/lib/app/analytics.service.mjs +1 -1
- package/esm2022/lib/app/app.service.mjs +1 -1
- package/esm2022/lib/app/file.service.mjs +1 -1
- package/esm2022/lib/app/release.service.mjs +1 -1
- package/esm2022/lib/app/report.service.mjs +1 -1
- package/esm2022/lib/app/translator.service.mjs +1 -1
- package/esm2022/lib/auth/auth.service.mjs +1 -1
- package/esm2022/lib/crud/crud.service.mjs +1 -1
- package/esm2022/lib/enum/store.enum.mjs +1 -1
- package/esm2022/lib/enum/ui.enum.mjs +1 -1
- package/esm2022/lib/http/http.service.mjs +1 -1
- package/esm2022/lib/interface/http.interface.mjs +1 -1
- package/esm2022/lib/interface/ui.interface.mjs +1 -1
- package/esm2022/lib/store/store.service.mjs +1 -1
- package/esm2022/lib/tab-sdk.service.mjs +1 -1
- package/esm2022/lib/ui/form.service.mjs +1 -1
- package/esm2022/lib/ui/ui.service.mjs +1 -1
- package/esm2022/lib/util/util.service.mjs +1 -1
- package/esm2022/lib/workflow/transition.service.mjs +1 -1
- package/esm2022/public-api.mjs +1 -1
- package/fesm2022/techextensor-tab-sdk.mjs.map +1 -1
- package/package.json +5 -5
|
@@ -826,4 +826,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
826
826
|
providedIn: 'root'
|
|
827
827
|
}]
|
|
828
828
|
}] });
|
|
829
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhYi1zZGsvc3JjL2xpYi9zdG9yZS9zdG9yZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxxQkFBcUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzlHLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7QUFLakQsTUFBTSxPQUFPLFlBQVk7SUFDSixvQkFBb0IsR0FBd0IsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDeEUsc0JBQXNCLEdBQTBCLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0lBRS9GOztPQUVHO0lBQ0gsSUFBSSxRQUFRO1FBQ1IsT0FBTyxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsRUFBRSxJQUFJLElBQUksQ0FBQztJQUN6QyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILElBQUksUUFBUSxDQUFDLEtBQW9CO1FBQzdCLHFFQUFxRTtRQUNyRSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxDQUFDO1FBRXhDLDZCQUE2QjtRQUM3QixPQUFPLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQztRQUVuQixxREFBcUQ7UUFDckQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFJLFVBQVU7UUFDViw4Q0FBOEM7UUFDOUMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBRWxDLDZEQUE2RDtRQUM3RCxPQUFPLE9BQU8sRUFBRSxnQkFBZ0IsSUFBSSxJQUFJLENBQUM7SUFDN0MsQ0FBQztJQUVE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V0FBVyxDQUFDO1FBQ3ZCLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2IsT0FBTyxDQUFDLEtBQUssQ0FBQyxnQ0FBZ0MsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN2RCxPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO0lBQ0wsQ0FBQzt3R0FsNUJRLFlBQVk7NEdBQVosWUFBWSxjQUZULE1BQU07OzRGQUVULFlBQVk7a0JBSHhCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IExvY2FsU3RvcmFnZVNlcnZpY2UsIFNlc3Npb25TdG9yYWdlU2VydmljZSwgU3RvcmFnZUNvbnN0YW50cyB9IGZyb20gJ0B0ZWNoZXh0ZW5zb3IvdGFiLWNvcmUtdXRpbGl0eSc7XHJcbmltcG9ydCB7IFN0b3JhZ2VUeXBlIH0gZnJvbSAnLi4vZW51bS9zdG9yZS5lbnVtJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICAgIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgU3RvcmVTZXJ2aWNlIHtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2xvY2FsU3RvcmFnZVNlcnZpY2U6IExvY2FsU3RvcmFnZVNlcnZpY2UgPSBpbmplY3QoTG9jYWxTdG9yYWdlU2VydmljZSk7XHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9zZXNzaW9uU3RvcmFnZVNlcnZpY2U6IFNlc3Npb25TdG9yYWdlU2VydmljZSA9IGluamVjdChTZXNzaW9uU3RvcmFnZVNlcnZpY2UpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0cmlldmVzIHRoZSB0ZW5hbnQgSUQgZnJvbSB0aGUgbG9jYWwgc3RvcmFnZS5cclxuICAgICAqL1xyXG4gICAgZ2V0IHRlbmFudElkKCk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldE9yZ0luZm8oKT8uSWQgfHwgbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIHRlbmFudCBJRCBpbiB0aGUgb3JnYW5pemF0aW9uIGluZm8uXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB0ZW5hbnQgSUQgdG8gc2V0LlxyXG4gICAgICovXHJcbiAgICBzZXQgdGVuYW50SWQodmFsdWU6IHN0cmluZyB8IG51bGwpIHtcclxuICAgICAgICAvLyBSZXRyaWV2ZSB0aGUgZXhpc3Rpbmcgb3JnYW5pemF0aW9uIGluZm8gb3IgaW5pdGlhbGl6ZSBhIG5ldyBvYmplY3RcclxuICAgICAgICBjb25zdCBvcmdJbmZvID0gdGhpcy5nZXRPcmdJbmZvKCkgfHwge307XHJcblxyXG4gICAgICAgIC8vIFVwZGF0ZSB0aGUgdGVuYW50IElEIHZhbHVlXHJcbiAgICAgICAgb3JnSW5mby5JZCA9IHZhbHVlO1xyXG5cclxuICAgICAgICAvLyBTYXZlIHRoZSB1cGRhdGVkIG9yZ2FuaXphdGlvbiBpbmZvIGJhY2sgdG8gc3RvcmFnZVxyXG4gICAgICAgIHRoaXMuc2V0T3JnSW5mbyhvcmdJbmZvKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHJpZXZlcyB0aGUgdGVuYW50IG5hbWUgZnJvbSB0aGUgb3JnYW5pemF0aW9uIGluZm8uXHJcbiAgICAgKi9cclxuICAgIGdldCB0ZW5hbnROYW1lKCk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgICAgIC8vIFJldHJpZXZlIHRoZSBvcmdhbml6YXRpb24gaW5mbyBmcm9tIHN0b3JhZ2VcclxuICAgICAgICBjb25zdCBvcmdJbmZvID0gdGhpcy5nZXRPcmdJbmZvKCk7XHJcblxyXG4gICAgICAgIC8vIFJldHVybiB0aGUgdGVuYW50IG5hbWUgaWYgaXQgZXhpc3RzLCBvdGhlcndpc2UgcmV0dXJuIG51bGxcclxuICAgICAgICByZXR1cm4gb3JnSW5mbz8uT3JnYW5pemF0aW9uTmFtZSB8fCBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgdGVuYW50IG5hbWUgaW4gdGhlIG9yZ2FuaXphdGlvbiBpbmZvLlxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgdGVuYW50IG5hbWUgdG8gc2V0LlxyXG4gICAgICovXHJcbiAgICBzZXQgdGVuYW50TmFtZSh2YWx1ZTogc3RyaW5nIHwgbnVsbCkge1xyXG4gICAgICAgIC8vIFJldHJpZXZlIHRoZSBleGlzdGluZyBvcmdhbml6YXRpb24gaW5mbyBvciBpbml0aWFsaXplIGEgbmV3IG9iamVjdFxyXG4gICAgICAgIGNvbnN0IG9yZ0luZm8gPSB0aGlzLmdldE9yZ0luZm8oKSB8fCB7fTtcclxuXHJcbiAgICAgICAgLy8gVXBkYXRlIHRoZSBvcmdhbml6YXRpb24gbmFtZSB2YWx1ZVxyXG4gICAgICAgIG9yZ0luZm8uT3JnYW5pemF0aW9uTmFtZSA9IHZhbHVlO1xyXG5cclxuICAgICAgICAvLyBTYXZlIHRoZSB1cGRhdGVkIG9yZ2FuaXphdGlvbiBpbmZvIGJhY2sgdG8gc3RvcmFnZVxyXG4gICAgICAgIHRoaXMuc2V0T3JnSW5mbyhvcmdJbmZvKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHJpZXZlcyB0aGUgc3ViZG9tYWluIGZyb20gdGhlIG9yZ2FuaXphdGlvbiBpbmZvLlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJucyBUaGUgc3ViZG9tYWluIGlmIGl0IGV4aXN0cywgb3RoZXJ3aXNlIGBudWxsYC5cclxuICAgICAqL1xyXG4gICAgZ2V0IHN1YmRvbWFpbigpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgICAgICAvLyBSZXRyaWV2ZSB0aGUgb3JnYW5pemF0aW9uIGluZm8gZnJvbSBzdG9yYWdlXHJcbiAgICAgICAgY29uc3Qgb3JnSW5mbyA9IHRoaXMuZ2V0T3JnSW5mbygpO1xyXG5cclxuICAgICAgICAvLyBSZXR1cm4gdGhlIHN1YmRvbWFpbiBpZiBpdCBleGlzdHMsIG90aGVyd2lzZSByZXR1cm4gbnVsbFxyXG4gICAgICAgIHJldHVybiBvcmdJbmZvPy5TdWJkb21haW4gfHwgbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIHN1YmRvbWFpbiBpbiB0aGUgb3JnYW5pemF0aW9uIGluZm8uXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBzdWJkb21haW4gdG8gc2V0LlxyXG4gICAgICovXHJcbiAgICBzZXQgc3ViZG9tYWluKHZhbHVlOiBzdHJpbmcgfCBudWxsKSB7XHJcbiAgICAgICAgLy8gUmV0cmlldmUgdGhlIGV4aXN0aW5nIG9yZ2FuaXphdGlvbiBpbmZvIG9yIGluaXRpYWxpemUgYSBuZXcgb2JqZWN0XHJcbiAgICAgICAgY29uc3Qgb3JnSW5mbyA9IHRoaXMuZ2V0T3JnSW5mbygpIHx8IHt9O1xyXG5cclxuICAgICAgICAvLyBVcGRhdGUgdGhlIHN1YmRvbWFpbiB2YWx1ZVxyXG4gICAgICAgIG9yZ0luZm8uU3ViZG9tYWluID0gdmFsdWU7XHJcblxyXG4gICAgICAgIC8vIFNhdmUgdGhlIHVwZGF0ZWQgb3JnYW5pemF0aW9uIGluZm8gYmFjayB0byBzdG9yYWdlXHJcbiAgICAgICAgdGhpcy5zZXRPcmdJbmZvKG9yZ0luZm8pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0cmlldmVzIHRoZSBsb2NhbGUgc2V0dGluZ3MgZnJvbSB0aGUgb3JnYW5pemF0aW9uIGluZm8uXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm5zIFRoZSBsb2NhbGUgc2V0dGluZ3MgaWYgdGhleSBleGlzdCwgb3RoZXJ3aXNlIGBudWxsYC5cclxuICAgICAqL1xyXG4gICAgZ2V0IG9yZ0xvY2FsZVNldHRpbmdzKCk6IGFueSB7XHJcbiAgICAgICAgLy8gUmV0cmlldmUgdGhlIGxvY2FsZSBzZXR0aW5ncyBmcm9tIHRoZSBvcmdhbml6YXRpb24gaW5mb1xyXG4gICAgICAgIGxldCBsb2NhbFNldHRpbmdzID0gdGhpcy5nZXRPcmdJbmZvKCk/LkxvY2FsZVNldHRpbmdzO1xyXG5cclxuICAgICAgICAvLyBJZiB0aGUgbG9jYWxlIHNldHRpbmdzIGFyZSBhIHN0cmluZywgcGFyc2UgdGhlbSBhcyBKU09OXHJcbiAgICAgICAgaWYgKHR5cGVvZiBsb2NhbFNldHRpbmdzID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBsb2NhbFNldHRpbmdzID0gSlNPTi5wYXJzZShsb2NhbFNldHRpbmdzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFJldHVybiB0aGUgbG9jYWxlIHNldHRpbmdzXHJcbiAgICAgICAgcmV0dXJuIGxvY2FsU2V0dGluZ3M7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBsb2NhbGUgc2V0dGluZ3MgaW4gdGhlIG9yZ2FuaXphdGlvbiBpbmZvLlxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgbG9jYWxlIHNldHRpbmdzIHRvIHNldC5cclxuICAgICAqL1xyXG4gICAgc2V0IG9yZ0xvY2FsZVNldHRpbmdzKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICAvLyBSZXRyaWV2ZSB0aGUgZXhpc3Rpbmcgb3JnYW5pemF0aW9uIGluZm8gb3IgaW5pdGlhbGl6ZSBhIG5ldyBvYmplY3RcclxuICAgICAgICBjb25zdCBvcmdJbmZvID0gdGhpcy5nZXRPcmdJbmZvKCkgfHwge307XHJcblxyXG4gICAgICAgIC8vIFVwZGF0ZSB0aGUgbG9jYWxlIHNldHRpbmdzIHZhbHVlXHJcbiAgICAgICAgb3JnSW5mby5Mb2NhbGVTZXR0aW5ncyA9IHZhbHVlO1xyXG5cclxuICAgICAgICAvLyBTYXZlIHRoZSB1cGRhdGVkIG9yZ2FuaXphdGlvbiBpbmZvIGJhY2sgdG8gc3RvcmFnZVxyXG4gICAgICAgIHRoaXMuc2V0T3JnSW5mbyhvcmdJbmZvKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHJpZXZlcyB0aGUgYXBwIElEIGZyb20gdGhlIGFwcCBpbmZvLlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJucyBUaGUgYXBwIElEIGlmIGl0IGV4aXN0cywgb3RoZXJ3aXNlIGBudWxsYC5cclxuICAgICAqL1xyXG4gICAgZ2V0IGFwcElkKCk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldEFwcEluZm8oKT8uSWQgfHwgbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGFwcCBJRCBpbiB0aGUgYXBwIGluZm8uXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBhcHAgSUQgdG8gc2V0LlxyXG4gICAgICovXHJcbiAgICBzZXQgYXBwSWQodmFsdWU6IHN0cmluZyB8IG51bGwpIHtcclxuICAgICAgICAvLyBSZXRyaWV2ZSB0aGUgZXhpc3RpbmcgYXBwIGluZm8gb3IgaW5pdGlhbGl6ZSBhIG5ldyBvYmplY3RcclxuICAgICAgICBjb25zdCBhcHBJbmZvID0gdGhpcy5nZXRBcHBJbmZvKCkgfHwge307XHJcblxyXG4gICAgICAgIC8vIFVwZGF0ZSB0aGUgYXBwIElEIHZhbHVlXHJcbiAgICAgICAgYXBwSW5mby5JZCA9IHZhbHVlO1xyXG5cclxuICAgICAgICAvLyBTYXZlIHRoZSB1cGRhdGVkIGFwcCBpbmZvIGJhY2sgdG8gc3RvcmFnZVxyXG4gICAgICAgIHRoaXMuc2V0QXBwSW5mbyhhcHBJbmZvKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHJpZXZlcyB0aGUgYXBwIG5hbWUgZnJvbSB0aGUgYXBwIGluZm8uXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm5zIFRoZSBhcHAgbmFtZSBpZiBpdCBleGlzdHMsIG90aGVyd2lzZSBgbnVsbGAuXHJcbiAgICAgKi9cclxuICAgIGdldCBhcHBOYW1lKCk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgICAgIC8vIFJldHJpZXZlIGFuZCByZXR1cm4gdGhlIGFwcCBuYW1lIGZyb20gdGhlIGFwcCBpbmZvLCBvciByZXR1cm4gbnVsbCBpZiBpdCBkb2Vzbid0IGV4aXN0XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QXBwSW5mbygpPy5BcHBOYW1lIHx8IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBhcHAgbmFtZSBpbiB0aGUgYXBwIGluZm8uXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBhcHAgbmFtZSB0byBzZXQuXHJcbiAgICAgKi9cclxuICAgIHNldCBhcHBOYW1lKHZhbHVlOiBzdHJpbmcgfCBudWxsKSB7XHJcbiAgICAgICAgLy8gUmV0cmlldmUgdGhlIGV4aXN0aW5nIGFwcCBpbmZvIG9yIGluaXRpYWxpemUgYSBuZXcgb2JqZWN0XHJcbiAgICAgICAgY29uc3QgYXBwSW5mbyA9IHRoaXMuZ2V0QXBwSW5mbygpIHx8IHt9O1xyXG5cclxuICAgICAgICAvLyBVcGRhdGUgdGhlIGFwcCBuYW1lIHZhbHVlXHJcbiAgICAgICAgYXBwSW5mby5BcHBOYW1lID0gdmFsdWU7XHJcblxyXG4gICAgICAgIC8vIFNhdmUgdGhlIHVwZGF0ZWQgYXBwIGluZm8gYmFjayB0byBzdG9yYWdlXHJcbiAgICAgICAgdGhpcy5zZXRBcHBJbmZvKGFwcEluZm8pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0cmlldmVzIHRoZSBlbnZpcm9ubWVudCBJRCBmcm9tIHRoZSBlbnZpcm9ubWVudCBpbmZvLlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJucyBUaGUgZW52aXJvbm1lbnQgSUQgaWYgaXQgZXhpc3RzLCBvdGhlcndpc2UgYG51bGxgLlxyXG4gICAgICovXHJcbiAgICBnZXQgZW52aXJvbm1lbnRJZCgpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgICAgICAvLyBSZXRyaWV2ZSBhbmQgcmV0dXJuIHRoZSBlbnZpcm9ubWVudCBJRCBmcm9tIHRoZSBlbnZpcm9ubWVudCBpbmZvLCBvciByZXR1cm4gbnVsbCBpZiBpdCBkb2Vzbid0IGV4aXN0XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RW52aXJvbm1lbnRJbmZvKCk/LklkIHx8IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBlbnZpcm9ubWVudCBJRCBpbiB0aGUgZW52aXJvbm1lbnQgaW5mby5cclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHZhbHVlIC0gVGhlIGVudmlyb25tZW50IElEIHRvIHNldC5cclxuICAgICAqL1xyXG4gICAgc2V0IGVudmlyb25tZW50SWQodmFsdWU6IHN0cmluZyB8IG51bGwpIHtcclxuICAgICAgICAvLyBSZXRyaWV2ZSB0aGUgZXhpc3RpbmcgZW52aXJvbm1lbnQgaW5mbyBvciBpbml0aWFsaXplIGEgbmV3IG9iamVjdFxyXG4gICAgICAgIGNvbnN0IGVudmlyb25tZW50SW5mbyA9IHRoaXMuZ2V0RW52aXJvbm1lbnRJbmZvKCkgfHwge307XHJcblxyXG4gICAgICAgIC8vIFVwZGF0ZSB0aGUgZW52aXJvbm1lbnQgSUQgdmFsdWVcclxuICAgICAgICBlbnZpcm9ubWVudEluZm8uSWQgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgLy8gU2F2ZSB0aGUgdXBkYXRlZCBlbnZpcm9ubWVudCBpbmZvIGJhY2sgdG8gc3RvcmFnZVxyXG4gICAgICAgIHRoaXMuc2V0RW52aXJvbm1lbnRJbmZvKGVudmlyb25tZW50SW5mbyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXRyaWV2ZXMgdGhlIGVudmlyb25tZW50IG5hbWUgZnJvbSB0aGUgZW52aXJvbm1lbnQgaW5mby5cclxuICAgICAqIFxyXG4gICAgICogQHJldHVybnMgVGhlIGVudmlyb25tZW50IG5hbWUgaWYgaXQgZXhpc3RzLCBvdGhlcndpc2UgYG51bGxgLlxyXG4gICAgICovXHJcbiAgICBnZXQgZW52aXJvbm1lbnROYW1lKCk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgICAgIC8vIFJldHJpZXZlIGFuZCByZXR1cm4gdGhlIGVudmlyb25tZW50IG5hbWUgZnJvbSB0aGUgZW52aXJvbm1lbnQgaW5mbywgb3IgcmV0dXJuIG51bGwgaWYgaXQgZG9lc24ndCBleGlzdFxyXG4gICAgICAgIHJldHVybiB0aGlzLmdldEVudmlyb25tZW50SW5mbygpPy5OYW1lIHx8IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBlbnZpcm9ubWVudCBuYW1lIGluIHRoZSBlbnZpcm9ubWVudCBpbmZvLlxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgZW52aXJvbm1lbnQgbmFtZSB0byBzZXQuXHJcbiAgICAgKi9cclxuICAgIHNldCBlbnZpcm9ubWVudE5hbWUodmFsdWU6IHN0cmluZyB8IG51bGwpIHtcclxuICAgICAgICAvLyBSZXRyaWV2ZSB0aGUgZXhpc3RpbmcgZW52aXJvbm1lbnQgaW5mbyBvciBpbml0aWFsaXplIGEgbmV3IG9iamVjdFxyXG4gICAgICAgIGNvbnN0IGVudmlyb25tZW50SW5mbyA9IHRoaXMuZ2V0RW52aXJvbm1lbnRJbmZvKCkgfHwge307XHJcblxyXG4gICAgICAgIC8vIFVwZGF0ZSB0aGUgZW52aXJvbm1lbnQgbmFtZSB2YWx1ZVxyXG4gICAgICAgIGVudmlyb25tZW50SW5mby5OYW1lID0gdmFsdWU7XHJcblxyXG4gICAgICAgIC8vIFNhdmUgdGhlIHVwZGF0ZWQgZW52aXJvbm1lbnQgaW5mbyBiYWNrIHRvIHN0b3JhZ2VcclxuICAgICAgICB0aGlzLnNldEVudmlyb25tZW50SW5mbyhlbnZpcm9ubWVudEluZm8pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0cmlldmVzIHRoZSB0b2tlbiBmcm9tIHRoZSB0b2tlbiBpbmZvLlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJucyBUaGUgdG9rZW4gaWYgaXQgZXhpc3RzLCBvdGhlcndpc2UgYG51bGxgLlxyXG4gICAgICovXHJcbiAgICBnZXQgdG9rZW4oKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICAgICAgLy8gUmV0cmlldmUgYW5kIHJldHVybiB0aGUgdG9rZW4gZnJvbSB0aGUgdG9rZW4gaW5mbywgb3IgcmV0dXJuIG51bGwgaWYgaXQgZG9lc24ndCBleGlzdFxyXG4gICAgICAgIHJldHVybiB0aGlzLmdldFRva2VuSW5mbygpPy50b2tlbiB8fCBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgdG9rZW4gaW4gdGhlIHRva2VuIGluZm8uXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB0b2tlbiB0byBzZXQuXHJcbiAgICAgKi9cclxuICAgIHNldCB0b2tlbih2YWx1ZTogc3RyaW5nIHwgbnVsbCkge1xyXG4gICAgICAgIC8vIFJldHJpZXZlIHRoZSBleGlzdGluZyB0b2tlbiBpbmZvIG9yIGluaXRpYWxpemUgYSBuZXcgb2JqZWN0XHJcbiAgICAgICAgY29uc3QgdG9rZW5JbmZvID0gdGhpcy5nZXRUb2tlbkluZm8oKSB8fCB7fTtcclxuXHJcbiAgICAgICAgLy8gVXBkYXRlIHRoZSB0b2tlbiB2YWx1ZVxyXG4gICAgICAgIHRva2VuSW5mby50b2tlbiA9IHZhbHVlO1xyXG5cclxuICAgICAgICAvLyBTYXZlIHRoZSB1cGRhdGVkIHRva2VuIGluZm8gYmFjayB0byBzdG9yYWdlXHJcbiAgICAgICAgdGhpcy5zZXRUb2tlbkluZm8odG9rZW5JbmZvKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHJpZXZlcyB0aGUgcmVmcmVzaCB0b2tlbiBmcm9tIHRoZSB0b2tlbiBpbmZvLlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJucyBUaGUgcmVmcmVzaCB0b2tlbiBpZiBpdCBleGlzdHMsIG90aGVyd2lzZSBgbnVsbGAuXHJcbiAgICAgKi9cclxuICAgIGdldCByZWZyZXNoVG9rZW4oKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICAgICAgLy8gUmV0cmlldmUgYW5kIHJldHVybiB0aGUgcmVmcmVzaCB0b2tlbiBmcm9tIHRoZSB0b2tlbiBpbmZvLCBvciByZXR1cm4gbnVsbCBpZiBpdCBkb2Vzbid0IGV4aXN0XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VG9rZW5JbmZvKCk/LnJlZnJlc2hUb2tlbiB8fCBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgcmVmcmVzaCB0b2tlbiBpbiB0aGUgdG9rZW4gaW5mby5cclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHZhbHVlIC0gVGhlIHJlZnJlc2ggdG9rZW4gdG8gc2V0LlxyXG4gICAgICovXHJcbiAgICBzZXQgcmVmcmVzaFRva2VuKHZhbHVlOiBzdHJpbmcgfCBudWxsKSB7XHJcbiAgICAgICAgLy8gUmV0cmlldmUgdGhlIGV4aXN0aW5nIHRva2VuIGluZm8gb3IgaW5pdGlhbGl6ZSBhIG5ldyBvYmplY3RcclxuICAgICAgICBjb25zdCB0b2tlbkluZm8gPSB0aGlzLmdldFRva2VuSW5mbygpIHx8IHt9O1xyXG5cclxuICAgICAgICAvLyBVcGRhdGUgdGhlIHJlZnJlc2ggdG9rZW4gdmFsdWVcclxuICAgICAgICB0b2tlbkluZm8ucmVmcmVzaFRva2VuID0gdmFsdWU7XHJcblxyXG4gICAgICAgIC8vIFNhdmUgdGhlIHVwZGF0ZWQgdG9rZW4gaW5mbyBiYWNrIHRvIHN0b3JhZ2VcclxuICAgICAgICB0aGlzLnNldFRva2VuSW5mbyh0b2tlbkluZm8pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0cmlldmVzIHRoZSByZWZyZXNoIHRva2VuIGV4cGlyeSB0aW1lIGZyb20gdGhlIHRva2VuIGluZm8uXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm5zIFRoZSByZWZyZXNoIHRva2VuIGV4cGlyeSB0aW1lIGlmIGl0IGV4aXN0cywgb3RoZXJ3aXNlIGBudWxsYC5cclxuICAgICAqL1xyXG4gICAgZ2V0IHJlZnJlc2hUb2tlbkV4cGlyeSgpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgICAgICAvLyBSZXRyaWV2ZSBhbmQgcmV0dXJuIHRoZSByZWZyZXNoIHRva2VuIGV4cGlyeSB0aW1lIGZyb20gdGhlIHRva2VuIGluZm8sXHJcbiAgICAgICAgLy8gb3IgcmV0dXJuIG51bGwgaWYgaXQgZG9lc24ndCBleGlzdFxyXG4gICAgICAgIHJldHVybiB0aGlzLmdldFRva2VuSW5mbygpPy5yZWZyZXNoVG9rZW5FeHBpcnkgfHwgbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIHJlZnJlc2ggdG9rZW4gZXhwaXJ5IHRpbWUgaW4gdGhlIHRva2VuIGluZm8uXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSByZWZyZXNoIHRva2VuIGV4cGlyeSB0aW1lIHRvIHNldC5cclxuICAgICAqL1xyXG4gICAgc2V0IHJlZnJlc2hUb2tlbkV4cGlyeSh2YWx1ZTogc3RyaW5nIHwgbnVsbCkge1xyXG4gICAgICAgIC8vIFJldHJpZXZlIHRoZSBleGlzdGluZyB0b2tlbiBpbmZvIG9yIGluaXRpYWxpemUgYSBuZXcgb2JqZWN0XHJcbiAgICAgICAgY29uc3QgdG9rZW5JbmZvID0gdGhpcy5nZXRUb2tlbkluZm8oKSB8fCB7fTtcclxuXHJcbiAgICAgICAgLy8gVXBkYXRlIHRoZSByZWZyZXNoIHRva2VuIGV4cGlyeSB0aW1lXHJcbiAgICAgICAgdG9rZW5JbmZvLnJlZnJlc2hUb2tlbkV4cGlyeSA9IHZhbHVlO1xyXG5cclxuICAgICAgICAvLyBTYXZlIHRoZSB1cGRhdGVkIHRva2VuIGluZm8gYmFjayB0byBzdG9yYWdlXHJcbiAgICAgICAgdGhpcy5zZXRUb2tlbkluZm8odG9rZW5JbmZvKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHJpZXZlcyB0aGUgc3RhdGljIHRva2VuIGZyb20gdGhlIHRva2VuIGluZm8uXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm5zIFRoZSBzdGF0aWMgdG9rZW4gaWYgaXQgZXhpc3RzLCBvdGhlcndpc2UgYG51bGxgLlxyXG4gICAgICovXHJcbiAgICBnZXQgc3RhdGljVG9rZW4oKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICAgICAgLy8gUmV0cmlldmUgYW5kIHJldHVybiB0aGUgc3RhdGljIHRva2VuIGZyb20gdGhlIHRva2VuIGluZm8sXHJcbiAgICAgICAgLy8gb3IgcmV0dXJuIG51bGwgaWYgaXQgZG9lc24ndCBleGlzdFxyXG4gICAgICAgIHJldHVybiB0aGlzLmdldFRva2VuSW5mbygpPy5zdGF0aWNUb2tlbiB8fCBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgc3RhdGljIHRva2VuIGluIHRoZSB0b2tlbiBpbmZvLlxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgc3RhdGljIHRva2VuIHRvIHNldC5cclxuICAgICAqL1xyXG4gICAgc2V0IHN0YXRpY1Rva2VuKHZhbHVlOiBzdHJpbmcgfCBudWxsKSB7XHJcbiAgICAgICAgLy8gUmV0cmlldmUgdGhlIGV4aXN0aW5nIHRva2VuIGluZm8gb3IgaW5pdGlhbGl6ZSBhIG5ldyBvYmplY3RcclxuICAgICAgICBjb25zdCB0b2tlbkluZm8gPSB0aGlzLmdldFRva2VuSW5mbygpIHx8IHt9O1xyXG5cclxuICAgICAgICAvLyBVcGRhdGUgdGhlIHN0YXRpYyB0b2tlbiB2YWx1ZVxyXG4gICAgICAgIHRva2VuSW5mby5zdGF0aWNUb2tlbiA9IHZhbHVlO1xyXG5cclxuICAgICAgICAvLyBTYXZlIHRoZSB1cGRhdGVkIHRva2VuIGluZm8gYmFjayB0byBzdG9yYWdlXHJcbiAgICAgICAgdGhpcy5zZXRUb2tlbkluZm8odG9rZW5JbmZvKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHJpZXZlcyB0aGUgdXNlciBJRCBmcm9tIHRoZSB1c2VyIGluZm8uXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm5zIFRoZSB1c2VyIElEIGlmIGl0IGV4aXN0cywgb3RoZXJ3aXNlIGBudWxsYC5cclxuICAgICAqL1xyXG4gICAgZ2V0IHVzZXJJZCgpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgICAgICAvLyBSZXRyaWV2ZSBhbmQgcmV0dXJuIHRoZSB1c2VyIElEIGZyb20gdGhlIHVzZXIgaW5mbywgb3IgcmV0dXJuIG51bGwgaWYgaXQgZG9lc24ndCBleGlzdFxyXG4gICAgICAgIHJldHVybiB0aGlzLmdldFVzZXJJbmZvKCk/LnVzZXI/LklkIHx8IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXRyaWV2ZXMgdGhlIHVzZXIncyByb2xlcyBmcm9tIHRoZSB1c2VyIGluZm9ybWF0aW9uLlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJucyBBbiBhcnJheSBvZiB1c2VyIHJvbGVzIGlmIHRoZXkgZXhpc3QsIG90aGVyd2lzZSBgbnVsbGAuXHJcbiAgICAgKi9cclxuICAgIGdldCB1c2VyUm9sZXMoKTogYW55W10gfCBudWxsIHtcclxuICAgICAgICAvLyBSZXRyaWV2ZSBhbmQgcmV0dXJuIHRoZSB1c2VyIHJvbGVzIGZyb20gdGhlIHVzZXIgaW5mbywgb3IgcmV0dXJuIG51bGwgaWYgdGhleSBkb24ndCBleGlzdFxyXG4gICAgICAgIHJldHVybiB0aGlzLmdldFVzZXJJbmZvKCk/LnVzZXI/LlJvbGVzIHx8IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXRyaWV2ZXMgdGhlIHVzZXIncyB0ZWFtcyBmcm9tIHRoZSB1c2VyIGluZm9ybWF0aW9uLlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJucyBBbiBhcnJheSBvZiB1c2VyIHRlYW1zIGlmIHRoZXkgZXhpc3QsIG90aGVyd2lzZSBgbnVsbGAuXHJcbiAgICAgKi9cclxuICAgIGdldCB1c2VyVGVhbXMoKTogYW55W10gfCBudWxsIHtcclxuICAgICAgICAvLyBSZXRyaWV2ZSBhbmQgcmV0dXJuIHRoZSB1c2VyIHRlYW1zIGZyb20gdGhlIHVzZXIgaW5mbywgb3IgcmV0dXJuIG51bGwgaWYgdGhleSBkb24ndCBleGlzdFxyXG4gICAgICAgIHJldHVybiB0aGlzLmdldFVzZXJJbmZvKCk/LnVzZXI/LlRlYW1zIHx8IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmVzIHRoZSB0ZW5hbnQgSUQgZnJvbSB0aGUgb3JnYW5pemF0aW9uIGluZm9ybWF0aW9uLlxyXG4gICAgICovXHJcbiAgICByZW1vdmVUZW5hbnRJZCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnJlbW92ZUZyb21PcmdJbmZvKCdJZCcpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyB0aGUgdGVuYW50IG5hbWUgZnJvbSB0aGUgb3JnYW5pemF0aW9uIGluZm9ybWF0aW9uLlxyXG4gICAgICovXHJcbiAgICByZW1vdmVUZW5hbnROYW1lKCk6IHZvaWQge1xyXG4gICAgICAgIC8vIFJlbW92ZSB0aGUgdGVuYW50IG5hbWUgZnJvbSB0aGUgb3JnYW5pemF0aW9uIGluZm9ybWF0aW9uXHJcbiAgICAgICAgdGhpcy5yZW1vdmVGcm9tT3JnSW5mbygnT3JnYW5pemF0aW9uTmFtZScpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyB0aGUgc3ViZG9tYWluIGZyb20gdGhlIG9yZ2FuaXphdGlvbiBpbmZvcm1hdGlvbi5cclxuICAgICAqIFxyXG4gICAgICogVGhpcyByZW1vdmVzIHRoZSBzdWJkb21haW4gcHJvcGVydHkgZnJvbSB0aGUgb3JnYW5pemF0aW9uIGluZm9ybWF0aW9uXHJcbiAgICAgKiBzdG9yZWQgaW4gbG9jYWwgc3RvcmFnZS5cclxuICAgICAqL1xyXG4gICAgcmVtb3ZlU3ViZG9tYWluKCk6IHZvaWQge1xyXG4gICAgICAgIC8vIFJlbW92ZSB0aGUgc3ViZG9tYWluIGZyb20gdGhlIG9yZ2FuaXphdGlvbiBpbmZvcm1hdGlvblxyXG4gICAgICAgIHRoaXMucmVtb3ZlRnJvbU9yZ0luZm8oJ1N1YmRvbWFpbicpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyB0aGUgYXBwIElEIGZyb20gdGhlIGFwcCBpbmZvcm1hdGlvbi5cclxuICAgICAqIFxyXG4gICAgICogVGhpcyByZW1vdmVzIHRoZSBhcHAgSUQgcHJvcGVydHkgZnJvbSB0aGUgYXBwIGluZm9ybWF0aW9uIHN0b3JlZCBpbiBsb2NhbCBzdG9yYWdlLlxyXG4gICAgICovXHJcbiAgICByZW1vdmVBcHBJZCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnJlbW92ZUZyb21BcHBJbmZvKCdJZCcpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyB0aGUgYXBwIG5hbWUgZnJvbSB0aGUgYXBwIGluZm9ybWF0aW9uLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGlzIHJlbW92ZXMgdGhlIGFwcCBuYW1lIHByb3BlcnR5IGZyb20gdGhlIGFwcCBpbmZvcm1hdGlvbiBzdG9yZWQgaW4gbG9jYWwgc3RvcmFnZS5cclxuICAgICAqL1xyXG4gICAgcmVtb3ZlQXBwTmFtZSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnJlbW92ZUZyb21BcHBJbmZvKCdBcHBOYW1lJyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmVzIHRoZSBlbnZpcm9ubWVudCBJRCBmcm9tIHRoZSBlbnZpcm9ubWVudCBpbmZvcm1hdGlvbi5cclxuICAgICAqIFxyXG4gICAgICogVGhpcyByZW1vdmVzIHRoZSBJRCBwcm9wZXJ0eSBmcm9tIHRoZSBlbnZpcm9ubWVudCBpbmZvcm1hdGlvblxyXG4gICAgICogc3RvcmVkIGluIGxvY2FsIHN0b3JhZ2UuXHJcbiAgICAgKi9cclxuICAgIHJlbW92ZUVudmlyb25tZW50SWQoKTogdm9pZCB7XHJcbiAgICAgICAgLy8gUmVtb3ZlIHRoZSBlbnZpcm9ubWVudCBJRCBmcm9tIHRoZSBlbnZpcm9ubWVudCBpbmZvcm1hdGlvblxyXG4gICAgICAgIHRoaXMucmVtb3ZlRnJvbUVudmlyb25tZW50SW5mbygnSWQnKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZXMgdGhlIGVudmlyb25tZW50IG5hbWUgZnJvbSB0aGUgZW52aXJvbm1lbnQgaW5mb3JtYXRpb24uXHJcbiAgICAgKiBcclxuICAgICAqIFRoaXMgcmVtb3ZlcyB0aGUgTmFtZSBwcm9wZXJ0eSBmcm9tIHRoZSBlbnZpcm9ubWVudCBpbmZvcm1hdGlvblxyXG4gICAgICogc3RvcmVkIGluIGxvY2FsIHN0b3JhZ2UuXHJcbiAgICAgKi9cclxuICAgIHJlbW92ZUVudmlyb25tZW50TmFtZSgpOiB2b2lkIHtcclxuICAgICAgICAvLyBSZW1vdmUgdGhlIGVudmlyb25tZW50IG5hbWUgZnJvbSB0aGUgZW52aXJvbm1lbnQgaW5mb3JtYXRpb25cclxuICAgICAgICB0aGlzLnJlbW92ZUZyb21FbnZpcm9ubWVudEluZm8oJ05hbWUnKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZXMgdGhlIHRva2VuIGZyb20gdGhlIHRva2VuIGluZm8uXHJcbiAgICAgKiBcclxuICAgICAqIFRoaXMgcmVtb3ZlcyB0aGUgdG9rZW4gcHJvcGVydHkgZnJvbSB0aGUgdG9rZW4gaW5mb3JtYXRpb24gc3RvcmVkIGluIHNlc3Npb25cclxuICAgICAqIHN0b3JhZ2UuXHJcbiAgICAgKi9cclxuICAgIHJlbW92ZVRva2VuKCk6IHZvaWQge1xyXG4gICAgICAgIC8vIFJlbW92ZSB0aGUgdG9rZW4gZnJvbSB0aGUgdG9rZW4gaW5mb1xyXG4gICAgICAgIHRoaXMucmVtb3ZlRnJvbVRva2VuSW5mbygndG9rZW4nKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZXMgdGhlIHJlZnJlc2ggdG9rZW4gZnJvbSB0aGUgdG9rZW4gaW5mb3JtYXRpb24uXHJcbiAgICAgKiBcclxuICAgICAqIFRoaXMgcmVtb3ZlcyB0aGUgcmVmcmVzaCB0b2tlbiBwcm9wZXJ0eSBmcm9tIHRoZSB0b2tlbiBpbmZvcm1hdGlvbiBzdG9yZWQgaW4gc2Vzc2lvblxyXG4gICAgICogc3RvcmFnZS5cclxuICAgICAqL1xyXG4gICAgcmVtb3ZlUmVmcmVzaFRva2VuKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMucmVtb3ZlRnJvbVRva2VuSW5mbygncmVmcmVzaFRva2VuJyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmVzIHRoZSByZWZyZXNoIHRva2VuIGV4cGlyeSB0aW1lIGZyb20gdGhlIHRva2VuIGluZm9ybWF0aW9uLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGlzIHJlbW92ZXMgdGhlIHJlZnJlc2ggdG9rZW4gZXhwaXJ5IHRpbWUgcHJvcGVydHkgZnJvbSB0aGUgdG9rZW4gaW5mb3JtYXRpb24gc3RvcmVkIGluIHNlc3Npb25cclxuICAgICAqIHN0b3JhZ2UuXHJcbiAgICAgKi9cclxuICAgIHJlbW92ZVJlZnJlc2hUb2tlbkV4cGlyeSgpOiB2b2lkIHtcclxuICAgICAgICAvLyBSZW1vdmUgdGhlIHJlZnJlc2ggdG9rZW4gZXhwaXJ5IGZyb20gdGhlIHRva2VuIGluZm9cclxuICAgICAgICB0aGlzLnJlbW92ZUZyb21Ub2tlbkluZm8oJ3JlZnJlc2hUb2tlbkV4cGlyeScpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyB0aGUgc3RhdGljIHRva2VuIGZyb20gdGhlIHRva2VuIGluZm9ybWF0aW9uLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGlzIHJlbW92ZXMgdGhlIHN0YXRpYyB0b2tlbiBwcm9wZXJ0eSBmcm9tIHRoZSB0b2tlbiBpbmZvcm1hdGlvbiBzdG9yZWQgaW4gc2Vzc2lvblxyXG4gICAgICogc3RvcmFnZS5cclxuICAgICAqL1xyXG4gICAgcmVtb3ZlU3RhdGljVG9rZW4oKTogdm9pZCB7XHJcbiAgICAgICAgLy8gUmVtb3ZlIHRoZSBzdGF0aWMgdG9rZW4gZnJvbSB0aGUgdG9rZW4gaW5mb1xyXG4gICAgICAgIHRoaXMucmVtb3ZlRnJvbVRva2VuSW5mbygnc3RhdGljVG9rZW4nKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZXMgdGhlIHNwZWNpZmllZCBrZXkgZnJvbSB0aGUgb3JnYW5pemF0aW9uIGluZm9ybWF0aW9uLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGlzIHJlbW92ZXMgdGhlIHNwZWNpZmllZCBrZXkgZnJvbSB0aGUgb3JnYW5pemF0aW9uIGluZm9ybWF0aW9uIHN0b3JlZCBpbiBsb2NhbCBzdG9yYWdlLlxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ga2V5IFRoZSBrZXkgdG8gcmVtb3ZlIGZyb20gdGhlIG9yZ2FuaXphdGlvbiBpbmZvcm1hdGlvbi5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSByZW1vdmVGcm9tT3JnSW5mbyhrZXk6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IG9yZ0luZm8gPSB0aGlzLmdldE9yZ0luZm8oKTtcclxuICAgICAgICBpZiAob3JnSW5mbykge1xyXG4gICAgICAgICAgICAvLyBSZW1vdmUgdGhlIGtleSBmcm9tIHRoZSBvcmdhbml6YXRpb24gaW5mb3JtYXRpb25cclxuICAgICAgICAgICAgZGVsZXRlIG9yZ0luZm9ba2V5XTtcclxuICAgICAgICAgICAgLy8gU2F2ZSB0aGUgdXBkYXRlZCBvcmdhbml6YXRpb24gaW5mb3JtYXRpb24gYmFjayB0byBsb2NhbCBzdG9yYWdlXHJcbiAgICAgICAgICAgIHRoaXMuc2V0T3JnSW5mbyhvcmdJbmZvKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmVzIHRoZSBzcGVjaWZpZWQga2V5IGZyb20gdGhlIGFwcCBpbmZvcm1hdGlvbi5cclxuICAgICAqIFxyXG4gICAgICogVGhpcyByZW1vdmVzIHRoZSBzcGVjaWZpZWQga2V5IGZyb20gdGhlIGFwcCBpbmZvcm1hdGlvbiBzdG9yZWQgaW4gc2Vzc2lvblxyXG4gICAgICogc3RvcmFnZS5cclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIGtleSBUaGUga2V5IHRvIHJlbW92ZSBmcm9tIHRoZSBhcHAgaW5mb3JtYXRpb24uXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgcmVtb3ZlRnJvbUFwcEluZm8oa2V5OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBhcHBJbmZvID0gdGhpcy5nZXRBcHBJbmZvKCk7XHJcbiAgICAgICAgaWYgKGFwcEluZm8pIHtcclxuICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBrZXkgZnJvbSB0aGUgYXBwIGluZm9ybWF0aW9uXHJcbiAgICAgICAgICAgIGRlbGV0ZSBhcHBJbmZvW2tleV07XHJcbiAgICAgICAgICAgIC8vIFNhdmUgdGhlIHVwZGF0ZWQgYXBwIGluZm9ybWF0aW9uIGJhY2sgdG8gc2Vzc2lvbiBzdG9yYWdlXHJcbiAgICAgICAgICAgIHRoaXMuc2V0QXBwSW5mbyhhcHBJbmZvKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmVzIHRoZSBzcGVjaWZpZWQga2V5IGZyb20gdGhlIGVudmlyb25tZW50IGluZm9ybWF0aW9uLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGlzIHJlbW92ZXMgdGhlIHNwZWNpZmllZCBrZXkgZnJvbSB0aGUgZW52aXJvbm1lbnQgaW5mb3JtYXRpb24gc3RvcmVkIGluIHNlc3Npb25cclxuICAgICAqIHN0b3JhZ2UuXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSBrZXkgVGhlIGtleSB0byByZW1vdmUgZnJvbSB0aGUgZW52aXJvbm1lbnQgaW5mb3JtYXRpb24uXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgcmVtb3ZlRnJvbUVudmlyb25tZW50SW5mbyhrZXk6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGVudmlyb25tZW50SW5mbyA9IHRoaXMuZ2V0RW52aXJvbm1lbnRJbmZvKCk7XHJcbiAgICAgICAgaWYgKGVudmlyb25tZW50SW5mbykge1xyXG4gICAgICAgICAgICAvLyBSZW1vdmUgdGhlIGtleSBmcm9tIHRoZSBlbnZpcm9ubWVudCBpbmZvcm1hdGlvblxyXG4gICAgICAgICAgICBkZWxldGUgZW52aXJvbm1lbnRJbmZvW2tleV07XHJcbiAgICAgICAgICAgIC8vIFNhdmUgdGhlIHVwZGF0ZWQgZW52aXJvbm1lbnQgaW5mb3JtYXRpb24gYmFjayB0byBzZXNzaW9uIHN0b3JhZ2VcclxuICAgICAgICAgICAgdGhpcy5zZXRFbnZpcm9ubWVudEluZm8oZW52aXJvbm1lbnRJbmZvKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmVzIHRoZSBzcGVjaWZpZWQga2V5IGZyb20gdGhlIHRva2VuIGluZm9ybWF0aW9uLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGlzIHJlbW92ZXMgdGhlIHNwZWNpZmllZCBrZXkgZnJvbSB0aGUgdG9rZW4gaW5mb3JtYXRpb24gc3RvcmVkIGluIHNlc3Npb25cclxuICAgICAqIHN0b3JhZ2UuXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSBrZXkgVGhlIGtleSB0byByZW1vdmUgZnJvbSB0aGUgdG9rZW4gaW5mb3JtYXRpb24uXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgcmVtb3ZlRnJvbVRva2VuSW5mbyhrZXk6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHRva2VuSW5mbyA9IHRoaXMuZ2V0VG9rZW5JbmZvKCk7XHJcbiAgICAgICAgaWYgKHRva2VuSW5mbykge1xyXG4gICAgICAgICAgICAvLyBSZW1vdmUgdGhlIGtleSBmcm9tIHRoZSB0b2tlbiBpbmZvcm1hdGlvblxyXG4gICAgICAgICAgICBkZWxldGUgdG9rZW5JbmZvW2tleV07XHJcbiAgICAgICAgICAgIC8vIFNhdmUgdGhlIHVwZGF0ZWQgdG9rZW4gaW5mb3JtYXRpb24gYmFjayB0byBzZXNzaW9uIHN0b3JhZ2VcclxuICAgICAgICAgICAgdGhpcy5zZXRUb2tlbkluZm8odG9rZW5JbmZvKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXRyaWV2ZXMgdGhlIG9yZ2FuaXphdGlvbiBpbmZvcm1hdGlvbiBmcm9tIGxvY2FsIHN0b3JhZ2UuXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm5zIFRoZSBvcmdhbml6YXRpb24gaW5mb3JtYXRpb24gb2JqZWN0IG9yIG51bGwgaWYgaXQgZG9lc24ndCBleGlzdC5cclxuICAgICAqL1xyXG4gICAgZ2V0T3JnSW5mbygpOiBhbnkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldEZyb21TdG9yYWdlKFN0b3JhZ2VUeXBlLkxvY2FsLCBTdG9yYWdlQ29uc3RhbnRzLm9yZ0luZm8pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2F2ZXMgdGhlIG9yZ2FuaXphdGlvbiBpbmZvcm1hdGlvbiB0byBsb2NhbCBzdG9yYWdlLlxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0gb3JnSW5mbyAtIFRoZSBvcmdhbml6YXRpb24gaW5mb3JtYXRpb24gdG8gc3RvcmUuXHJcbiAgICAgKi9cclxuICAgIHNldE9yZ0luZm8ob3JnSW5mbzogYW55KTogdm9pZCB7XHJcbiAgICAgICAgLy8gdGVtcCBvbmNlIHJlbW92ZSBmcm9tIGRyb3Bkb3duLCB3ZSBjYW4gcmVtb3ZlIHRoaXNcclxuICAgICAgICAvLyBpZiAob3JnSW5mby5JZCkge1xyXG4gICAgICAgIC8vICAgICB0aGlzLnNldFNlc3Npb24oU3RvcmFnZUNvbnN0YW50cy5UZW5hbnRJZCwgb3JnSW5mby5JZCk7XHJcbiAgICAgICAgLy8gfSBlbHNlIHtcclxuICAgICAgICAvLyAgICAgdGhpcy5yZW1vdmVTZXNzaW9uKFN0b3JhZ2VDb25zdGFudHMuVGVuYW50SWQpO1xyXG4gICAgICAgIC8vIH1cclxuXHJcbiAgICAgICAgLy8gU2F2ZSB0aGUgb3JnYW5pemF0aW9uIGluZm8gdG8gbG9jYWwgc3RvcmFnZVxyXG4gICAgICAgIHRoaXMuc2V0VG9TdG9yYWdlKFN0b3JhZ2VUeXBlLkxvY2FsLCBTdG9yYWdlQ29uc3RhbnRzLm9yZ0luZm8sIG9yZ0luZm8pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0cmlldmVzIHRoZSBhcHAgaW5mb3JtYXRpb24gZnJvbSBzZXNzaW9uIHN0b3JhZ2UuXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm5zIFRoZSBhcHAgaW5mb3JtYXRpb24gb2JqZWN0IG9yIG51bGwgaWYgaXQgZG9lc24ndCBleGlzdC5cclxuICAgICAqL1xyXG4gICAgZ2V0QXBwSW5mbygpOiBhbnkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldEZyb21TdG9yYWdlKFN0b3JhZ2VUeXBlLlNlc3Npb24sIFN0b3JhZ2VDb25zdGFudHMuYXBwSW5mbyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTYXZlcyB0aGUgYXBwIGluZm9ybWF0aW9uIHRvIHNlc3Npb24gc3RvcmFnZS5cclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIGFwcEluZm8gLSBUaGUgYXBwIGluZm9ybWF0aW9uIHRvIHN0b3JlLlxyXG4gICAgICovXHJcbiAgICBzZXRBcHBJbmZvKGFwcEluZm86IGFueSk6IHZvaWQge1xyXG4gICAgICAgIC8vIHRlbXAgb25jZSByZW1vdmUgZnJvbSBkcm9wZG93biwgd2UgY2FuIHJlbW92ZSB0aGlzXHJcbiAgICAgICAgLy8gaWYgKGFwcEluZm8/LklkKSB7XHJcbiAgICAgICAgLy8gICAgIHRoaXMuc2V0U2Vzc2lvbihTdG9yYWdlQ29uc3RhbnRzLkFwcElkLCBhcHBJbmZvLklkKTtcclxuICAgICAgICAvLyB9IGVsc2Uge1xyXG4gICAgICAgIC8vICAgICB0aGlzLnJlbW92ZVNlc3Npb24oU3RvcmFnZUNvbnN0YW50cy5BcHBJZCk7XHJcbiAgICAgICAgLy8gfVxyXG5cclxuICAgICAgICAvLyBpZiAoYXBwSW5mbz8uQXBwTmFtZSkge1xyXG4gICAgICAgIC8vICAgICB0aGlzLnNldFNlc3Npb24oU3RvcmFnZUNvbnN0YW50cy5hcHBsaWNhdGlvbkNvZGUsIGFwcEluZm8uQXBwTmFtZSk7XHJcbiAgICAgICAgLy8gfSBlbHNlIHtcclxuICAgICAgICAvLyAgICAgdGhpcy5yZW1vdmVTZXNzaW9uKFN0b3JhZ2VDb25zdGFudHMuYXBwbGljYXRpb25Db2RlKTtcclxuICAgICAgICAvLyB9XHJcblxyXG4gICAgICAgIC8vIFNhdmUgdGhlIGFwcCBpbmZvIHRvIHNlc3Npb24gc3RvcmFnZVxyXG4gICAgICAgIHRoaXMuc2V0VG9TdG9yYWdlKFN0b3JhZ2VUeXBlLlNlc3Npb24sIFN0b3JhZ2VDb25zdGFudHMuYXBwSW5mbywgYXBwSW5mbyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXRyaWV2ZXMgdGhlIGVudmlyb25tZW50IGluZm9ybWF0aW9uIGZyb20gc2Vzc2lvbiBzdG9yYWdlLlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJucyBUaGUgZW52aXJvbm1lbnQgaW5mb3JtYXRpb24gb2JqZWN0IG9yIG51bGwgaWYgaXQgZG9lc24ndCBleGlzdC5cclxuICAgICAqL1xyXG4gICAgZ2V0RW52aXJvbm1lbnRJbmZvKCk6IGFueSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RnJvbVN0b3JhZ2UoU3RvcmFnZVR5cGUuU2Vzc2lvbiwgU3RvcmFnZUNvbnN0YW50cy5lbnZpcm9ubWVudEluZm8pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2F2ZXMgdGhlIGVudmlyb25tZW50IGluZm9ybWF0aW9uIHRvIHNlc3Npb24gc3RvcmFnZS5cclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIGVudkluZm8gLSBUaGUgZW52aXJvbm1lbnQgaW5mb3JtYXRpb24gdG8gc3RvcmUuXHJcbiAgICAgKi9cclxuICAgIHNldEVudmlyb25tZW50SW5mbyhlbnZJbmZvOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICAvLyBTYXZlIHRoZSBlbnZpcm9ubWVudCBpbmZvIHRvIHNlc3Npb24gc3RvcmFnZVxyXG4gICAgICAgIHRoaXMuc2V0VG9TdG9yYWdlKFN0b3JhZ2VUeXBlLlNlc3Npb24sIFN0b3JhZ2VDb25zdGFudHMuZW52aXJvbm1lbnRJbmZvLCBlbnZJbmZvKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHJpZXZlcyB0aGUgdG9rZW4gaW5mb3JtYXRpb24gZnJvbSBzZXNzaW9uIHN0b3JhZ2UuXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm5zIFRoZSB0b2tlbiBpbmZvcm1hdGlvbiBvYmplY3Qgb3IgbnVsbCBpZiBpdCBkb2Vzbid0IGV4aXN0LlxyXG4gICAgICovXHJcbiAgICBnZXRUb2tlbkluZm8oKTogYW55IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRGcm9tU3RvcmFnZShTdG9yYWdlVHlwZS5Mb2NhbCwgU3RvcmFnZUNvbnN0YW50cy50b2tlbkluZm8pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2F2ZXMgdGhlIHRva2VuIGluZm9ybWF0aW9uIHRvIHNlc3Npb24gc3RvcmFnZS5cclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHRva2VuSW5mbyAtIFRoZSB0b2tlbiBpbmZvcm1hdGlvbiB0byBzdG9yZS5cclxuICAgICAqL1xyXG4gICAgc2V0VG9rZW5JbmZvKHRva2VuSW5mbzogYW55KTogdm9pZCB7XHJcbiAgICAgICAgLy8gdGVtcCBvbmNlIHJlbW92ZSBmcm9tIGRyb3Bkb3duLCB3ZSBjYW4gcmVtb3ZlIHRoaXNcclxuICAgICAgICAvLyBpZiAodG9rZW5JbmZvPy50b2tlbikge1xyXG4gICAgICAgIC8vICAgICB0aGlzLnNldFNlc3Npb24oU3RvcmFnZUNvbnN0YW50cy50b2tlbiwgdG9rZW5JbmZvPy50b2tlbik7XHJcbiAgICAgICAgLy8gfSBlbHNlIHtcclxuICAgICAgICAvLyAgICAgdGhpcy5yZW1vdmVTZXNzaW9uKFN0b3JhZ2VDb25zdGFudHMudG9rZW4pO1xyXG4gICAgICAgIC8vIH1cclxuXHJcbiAgICAgICAgLy8gU2F2ZSB0aGUgdG9rZW4gaW5mbyB0byBzZXNzaW9uIHN0b3JhZ2VcclxuICAgICAgICB0aGlzLnNldFRvU3RvcmFnZShTdG9yYWdlVHlwZS5Mb2NhbCwgU3RvcmFnZUNvbnN0YW50cy50b2tlbkluZm8sIHRva2VuSW5mbyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXRyaWV2ZXMgdGhlIHVzZXIgaW5mb3JtYXRpb24gZnJvbSBsb2NhbCBzdG9yYWdlLlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJucyBUaGUgdXNlciBpbmZvcm1hdGlvbiBvYmplY3Qgb3IgbnVsbCBpZiBpdCBkb2Vzbid0IGV4aXN0LlxyXG4gICAgICovXHJcbiAgICBnZXRVc2VySW5mbygpOiBhbnkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldEZyb21TdG9yYWdlKFN0b3JhZ2VUeXBlLkxvY2FsLCBTdG9yYWdlQ29uc3RhbnRzLnVzZXJJbmZvKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIHVzZXIgaW5mb3JtYXRpb24gaW4gbG9jYWwgc3RvcmFnZS5cclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHVzZXJJbmZvIFRoZSB1c2VyIGluZm9ybWF0aW9uIHRvIHN0b3JlLlxyXG4gICAgICovXHJcbiAgICBzZXRVc2VySW5mbyh1c2VySW5mbzogYW55KTogdm9pZCB7XHJcbiAgICAgICAgLy8gU2F2ZSB0aGUgdXNlciBpbmZvIHRvIGxvY2FsIHN0b3JhZ2VcclxuICAgICAgICB0aGlzLnNldFRvU3RvcmFnZShTdG9yYWdlVHlwZS5Mb2NhbCwgU3RvcmFnZUNvbnN0YW50cy51c2VySW5mbywgdXNlckluZm8pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyBhIGtleS12YWx1ZSBwYWlyIGluIGxvY2FsIHN0b3JhZ2UuXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSBrZXkgVGhlIGtleSB0byBzdG9yZSB0aGUgdmFsdWUgdW5kZXIuXHJcbiAgICAgKiBAcGFyYW0gZGF0YSBUaGUgdmFsdWUgdG8gc3RvcmUuXHJcbiAgICAgKi9cclxuICAgIHNldExvY2FsKGtleTogc3RyaW5nLCBkYXRhOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNldFRvU3RvcmFnZShTdG9yYWdlVHlwZS5Mb2NhbCwga2V5LCBkYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHJpZXZlcyBhIHZhbHVlIGZyb20gbG9jYWwgc3RvcmFnZSBieSBrZXkuXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSBrZXkgVGhlIGtleSBhc3NvY2lhdGVkIHdpdGggdGhlIHZhbHVlIHRvIHJldHJpZXZlLlxyXG4gICAgICogQHJldHVybnMgVGhlIHZhbHVlIHN0b3JlZCBpbiBsb2NhbCBzdG9yYWdlLCBvciBudWxsIGlmIGl0IGRvZXNuJ3QgZXhpc3QuXHJcbiAgICAgKi9cclxuICAgIGdldExvY2FsKGtleTogc3RyaW5nKTogYW55IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRGcm9tU3RvcmFnZShTdG9yYWdlVHlwZS5Mb2NhbCwga2V5KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZXMgYSBrZXktdmFsdWUgcGFpciBmcm9tIGxvY2FsIHN0b3JhZ2UuXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSBrZXkgVGhlIGtleSBhc3NvY2lhdGVkIHdpdGggdGhlIHZhbHVlIHRvIHJlbW92ZS5cclxuICAgICAqL1xyXG4gICAgcmVtb3ZlTG9jYWwoa2V5OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICAvLyBSZW1vdmUgdGhlIGtleSBmcm9tIGxvY2FsIHN0b3JhZ2VcclxuICAgICAgICB0aGlzLnJlbW92ZUZyb21TdG9yYWdlKFN0b3JhZ2VUeXBlLkxvY2FsLCBrZXkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2xlYXJzIGFsbCBsb2NhbCBzdG9yYWdlIGRhdGEuXHJcbiAgICAgKi9cclxuICAgIGNsZWFyTG9jYWwoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jbGVhclN0b3JhZ2UoU3RvcmFnZVR5cGUuTG9jYWwpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyBhIGtleS12YWx1ZSBwYWlyIGluIHNlc3Npb24gc3RvcmFnZS5cclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIGtleSBUaGUga2V5IHRvIHN0b3JlIHRoZSB2YWx1ZSB1bmRlci5cclxuICAgICAqIEBwYXJhbSBkYXRhIFRoZSB2YWx1ZSB0byBzdG9yZS5cclxuICAgICAqL1xyXG4gICAgc2V0U2Vzc2lvbihrZXk6IHN0cmluZywgZGF0YTogYW55KTogdm9pZCB7XHJcbiAgICAgICAgLy8gU2F2ZSBkYXRhIHRvIHNlc3Npb24gc3RvcmFnZSB1bmRlciB0aGUgc3BlY2lmaWVkIGtleVxyXG4gICAgICAgIHRoaXMuc2V0VG9TdG9yYWdlKFN0b3JhZ2VUeXBlLlNlc3Npb24sIGtleSwgZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXRyaWV2ZXMgYSB2YWx1ZSBmcm9tIHNlc3Npb24gc3RvcmFnZSBieSBrZXkuXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSBrZXkgVGhlIGtleSBhc3NvY2lhdGVkIHdpdGggdGhlIHZhbHVlIHRvIHJldHJpZXZlLlxyXG4gICAgICogQHJldHVybnMgVGhlIHZhbHVlIHN0b3JlZCBpbiBzZXNzaW9uIHN0b3JhZ2UsIG9yIG51bGwgaWYgaXQgZG9lc24ndCBleGlzdC5cclxuICAgICAqL1xyXG4gICAgZ2V0U2Vzc2lvbihrZXk6IHN0cmluZyk6IGFueSB7XHJcbiAgICAgICAgLy8gUmV0cmlldmUgdGhlIHZhbHVlIGZyb20gc2Vzc2lvbiBzdG9yYWdlXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RnJvbVN0b3JhZ2UoU3RvcmFnZVR5cGUuU2Vzc2lvbiwga2V5KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZXMgYSBrZXktdmFsdWUgcGFpciBmcm9tIHNlc3Npb24gc3RvcmFnZS5cclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIGtleSBUaGUga2V5IGFzc29jaWF0ZWQgd2l0aCB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxyXG4gICAgICovXHJcbiAgICByZW1vdmVTZXNzaW9uKGtleTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgLy8gUmVtb3ZlIHRoZSBrZXkgZnJvbSBzZXNzaW9uIHN0b3JhZ2VcclxuICAgICAgICB0aGlzLnJlbW92ZUZyb21TdG9yYWdlKFN0b3JhZ2VUeXBlLlNlc3Npb24sIGtleSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDbGVhcnMgYWxsIHNlc3Npb24gc3RvcmFnZSBkYXRhLlxyXG4gICAgICovXHJcbiAgICBjbGVhclNlc3Npb24oKTogdm9pZCB7XHJcbiAgICAgICAgLy8gUmVtb3ZlIGFsbCBrZXktdmFsdWUgcGFpcnMgZnJvbSBzZXNzaW9uIHN0b3JhZ2VcclxuICAgICAgICB0aGlzLmNsZWFyU3RvcmFnZShTdG9yYWdlVHlwZS5TZXNzaW9uKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENsZWFycyBhbGwgYXV0aGVudGljYXRpb24tcmVsYXRlZCBkYXRhIGZyb20gbG9jYWwgYW5kIHNlc3Npb24gc3RvcmFnZS5cclxuICAgICAqIFxyXG4gICAgICogVGhpcyBtZXRob2QgaXMgdHlwaWNhbGx5IHVzZWQgYWZ0ZXIgYSB1c2VyIGxvZ3Mgb3V0LlxyXG4gICAgICovXHJcbiAgICBjbGVhckF1dGgoKTogdm9pZCB7XHJcbiAgICAgICAgLy8gUmVtb3ZlIHVzZXIgaW5mbyBmcm9tIGxvY2FsIHN0b3JhZ2VcclxuICAgICAgICB0aGlzLnJlbW92ZUZyb21TdG9yYWdlKFN0b3JhZ2VUeXBlLkxvY2FsLCBTdG9yYWdlQ29uc3RhbnRzLnVzZXJJbmZvKTtcclxuICAgICAgICAvLyBSZW1vdmUgdG9rZW4gaW5mbyBmcm9tIHNlc3Npb24gc3RvcmFnZVxyXG4gICAgICAgIHRoaXMucmVtb3ZlRnJvbVN0b3JhZ2UoU3RvcmFnZVR5cGUuTG9jYWwsIFN0b3JhZ2VDb25zdGFudHMudG9rZW5JbmZvKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdlbmVyaWMgZ2V0dGVyIG1ldGhvZCBmb3IgcmV0cmlldmluZyBkYXRhIGZyb20gZWl0aGVyIGxvY2FsIG9yIHNlc3Npb24gc3RvcmFnZS5cclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHN0b3JhZ2UgVGhlIHR5cGUgb2Ygc3RvcmFnZSB0byByZXRyaWV2ZSBmcm9tLlxyXG4gICAgICogQHBhcmFtIGtleSBUaGUga2V5IGFzc29jaWF0ZWQgd2l0aCB0aGUgZGF0YSB0byByZXRyaWV2ZS5cclxuICAgICAqIEByZXR1cm5zIFRoZSByZXRyaWV2ZWQgZGF0YSwgZGVzZXJpYWxpemVkIGZyb20gSlNPTiBpZiBpdCB3YXMgc3RvcmVkIGFzIGEgc3RyaW5nLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGdldEZyb21TdG9yYWdlKHN0b3JhZ2U6IFN0b3JhZ2VUeXBlLCBrZXk6IHN0cmluZyk6IGFueSB7XHJcbiAgICAgICAgLy8gUmV0cmlldmUgdGhlIGRhdGEgZnJvbSB0aGUgc3BlY2lmaWVkIHN0b3JhZ2VcclxuICAgICAgICBjb25zdCBkYXRhID0gc3RvcmFnZSA9PT0gU3RvcmFnZVR5cGUuTG9jYWxcclxuICAgICAgICAgICAgPyB0aGlzLl9sb2NhbFN0b3JhZ2VTZXJ2aWNlLmdldExvY2FsU3RvcmFnZShrZXkpXHJcbiAgICAgICAgICAgIDogdGhpcy5fc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLmdldFNlc3Npb25TdG9yYWdlKGtleSk7XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIC8vIEF0dGVtcHQgdG8gcGFyc2UgdGhlIGRhdGEgYXMgSlNPTlxyXG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnID8gSlNPTi5wYXJzZShkYXRhKSA6IGRhdGE7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAvLyBJZiB0aGUgZGF0YSBjYW5ub3QgYmUgcGFyc2VkLCByZXR1cm4gaXQgYXMgaXNcclxuICAgICAgICAgICAgcmV0dXJuIGRhdGE7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyBhIGtleS12YWx1ZSBwYWlyIGluIHRoZSBzcGVjaWZpZWQgc3RvcmFnZSB0eXBlLlxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0gc3RvcmFnZSBUaGUgdHlwZSBvZiBzdG9yYWdlIHRvIHVzZSAobG9jYWwgb3Igc2Vzc2lvbikuXHJcbiAgICAgKiBAcGFyYW0ga2V5IFRoZSBrZXkgdW5kZXIgd2hpY2ggdGhlIGRhdGEgc2hvdWxkIGJlIHN0b3JlZC5cclxuICAgICAqIEBwYXJhbSBkYXRhIFRoZSBkYXRhIHRvIHN0b3JlLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHNldFRvU3RvcmFnZShzdG9yYWdlOiBTdG9yYWdlVHlwZSwga2V5OiBzdHJpbmcsIGRhdGE6IGFueSk6IHZvaWQge1xyXG4gICAgICAgIC8vIENoZWNrIGlmIHRoZSBzdG9yYWdlIHR5cGUgaXMgbG9jYWxcclxuICAgICAgICBpZiAoc3RvcmFnZSA9PT0gU3RvcmFnZVR5cGUuTG9jYWwpIHtcclxuICAgICAgICAgICAgLy8gU2V0IHRoZSBkYXRhIGluIGxvY2FsIHN0b3JhZ2VcclxuICAgICAgICAgICAgdGhpcy5fbG9jYWxTdG9yYWdlU2VydmljZS5zZXRMb2NhbFN0b3JhZ2Uoa2V5LCBkYXRhKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBPdGhlcndpc2UsIHNldCB0aGUgZGF0YSBpbiBzZXNzaW9uIHN0b3JhZ2VcclxuICAgICAgICAgICAgdGhpcy5fc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLnNldFNlc3Npb25TdG9yYWdlKGtleSwgZGF0YSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyBhIGtleS12YWx1ZSBwYWlyIGZyb20gdGhlIHNwZWNpZmllZCBzdG9yYWdlIHR5cGUuXHJcbiAgICAgKiBcclxuICAgICAqIFRoaXMgbWV0aG9kIHJlbW92ZXMgdGhlIGdpdmVuIGtleSBmcm9tIGVpdGhlciBsb2NhbCBvciBzZXNzaW9uIHN0b3JhZ2UgXHJcbiAgICAgKiBiYXNlZCBvbiB0aGUgc3BlY2lmaWVkIHN0b3JhZ2UgdHlwZS5cclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHN0b3JhZ2UgVGhlIHR5cGUgb2Ygc3RvcmFnZSB0byByZW1vdmUgZnJvbSAobG9jYWwgb3Igc2Vzc2lvbikuXHJcbiAgICAgKiBAcGFyYW0ga2V5IFRoZSBrZXkgYXNzb2NpYXRlZCB3aXRoIHRoZSB2YWx1ZSB0byByZW1vdmUuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgcmVtb3ZlRnJvbVN0b3JhZ2Uoc3RvcmFnZTogU3RvcmFnZVR5cGUsIGtleTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHN0b3JhZ2UgPT09IFN0b3JhZ2VUeXBlLkxvY2FsKSB7XHJcbiAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUga2V5IGZyb20gbG9jYWwgc3RvcmFnZVxyXG4gICAgICAgICAgICB0aGlzLl9sb2NhbFN0b3JhZ2VTZXJ2aWNlLnJlbW92ZUxvY2FsU3RvcmFnZShrZXkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUga2V5IGZyb20gc2Vzc2lvbiBzdG9yYWdlXHJcbiAgICAgICAgICAgIHRoaXMuX3Nlc3Npb25TdG9yYWdlU2VydmljZS5yZW1vdmVTZXNzaW9uU3RvcmFnZShrZXkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENsZWFycyBhbGwga2V5LXZhbHVlIHBhaXJzIGZyb20gdGhlIHNwZWNpZmllZCBzdG9yYWdlIHR5cGUuXHJcbiAgICAgKiBcclxuICAgICAqIFRoaXMgbWV0aG9kIGNsZWFycyBhbGwga2V5LXZhbHVlIHBhaXJzIGZyb20gZWl0aGVyIGxvY2FsIG9yIHNlc3Npb24gc3RvcmFnZVxyXG4gICAgICogYmFzZWQgb24gdGhlIHNwZWNpZmllZCBzdG9yYWdlIHR5cGUuXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSBzdG9yYWdlIFRoZSB0eXBlIG9mIHN0b3JhZ2UgdG8gY2xlYXIgKGxvY2FsIG9yIHNlc3Npb24pLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGNsZWFyU3RvcmFnZShzdG9yYWdlOiBTdG9yYWdlVHlwZSk6IHZvaWQge1xyXG4gICAgICAgIGlmIChzdG9yYWdlID09PSBTdG9yYWdlVHlwZS5Mb2NhbCkge1xyXG4gICAgICAgICAgICAvLyBDbGVhciBsb2NhbCBzdG9yYWdlXHJcbiAgICAgICAgICAgIHRoaXMuX2xvY2FsU3RvcmFnZVNlcnZpY2UuY2xlYXJMb2NhbFN0b3JhZ2UoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBDbGVhciBzZXNzaW9uIHN0b3JhZ2VcclxuICAgICAgICAgICAgdGhpcy5fc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLmNsZWFyU2Vzc2lvblN0b3JhZ2UoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGRzIGEgc2NyZWVuIGNvbnRleHQgd2l0aCB0aGUgZ2l2ZW4ga2V5IGFuZCBkYXRhLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgc2NyZWVuIGNvbnRleHQgaXMgYSBjb2xsZWN0aW9uIG9mIGtleS12YWx1ZSBwYWlycyB0aGF0IGFyZSBzdG9yZWQgaW4gc2Vzc2lvbiBzdG9yYWdlLlxyXG4gICAgICogVGhlIGtleSBpcyB1c2VkIHRvIGlkZW50aWZ5IHRoZSBzY3JlZW4gY29udGV4dCBhbmQgdGhlIGRhdGEgaXMgdGhlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGUga2V5LlxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ga2V5IFRoZSBrZXkgZm9yIHRoZSBzY3JlZW4gY29udGV4dC5cclxuICAgICAqIEBwYXJhbSBkYXRhIFRoZSBkYXRhIHRvIHN0b3JlIGluIHRoZSBzY3JlZW4gY29udGV4dC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGFkZFNjcmVlbkNvbnRleHQoa2V5OiBzdHJpbmcsIGRhdGE6IGFueSk6IHZvaWQge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGlmICgha2V5IHx8IGRhdGEgPT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgc2NyZWVuQ29udGV4dCA9IHRoaXMuZ2V0U2Vzc2lvbihTdG9yYWdlQ29uc3RhbnRzLnNjcmVlbkNvbnRleHQpIHx8IHt9O1xyXG5cclxuICAgICAgICAgICAgaWYgKCFzY3JlZW5Db250ZXh0W2tleV0pIHtcclxuICAgICAgICAgICAgICAgIC8vIEluaXRpYWxpemUgdGhlIGtleSB3aXRoIGFuIGVtcHR5IGFycmF5IGlmIGl0IGRvZXNuJ3QgZXhpc3RcclxuICAgICAgICAgICAgICAgIHNjcmVlbkNvbnRleHRba2V5XSA9IFtdO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHNjcmVlbkNvbnRleHRba2V5XS5sZW5ndGggPj0gNSkge1xyXG4gICAgICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBvbGRlc3QgZGF0YSBpZiB0aGUgYXJyYXkgZXhjZWVkcyA1IGVsZW1lbnRzXHJcbiAgICAgICAgICAgICAgICBzY3JlZW5Db250ZXh0W2tleV0uc2hpZnQoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gQWRkIHRoZSBkYXRhIHRvIHRoZSBleGlzdGluZyBhcnJheVxyXG4gICAgICAgICAgICBzY3JlZW5Db250ZXh0W2tleV0ucHVzaChkYXRhKTtcclxuICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSBzY3JlZW4gY29udGV4dCB3aXRoIHRoZSBuZXcgZGF0YVxyXG4gICAgICAgICAgICB0aGlzLnNldFNlc3Npb24oU3RvcmFnZUNvbnN0YW50cy5zY3JlZW5Db250ZXh0LCBzY3JlZW5Db250ZXh0KTtcclxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBhZGRpbmcgc2NyZWVuIGNvbnRleHQ6JywgZXJyb3IpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHJpZXZlcyB0aGUgbGF0ZXN0IHNjcmVlbiBjb250ZXh0IGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBrZXkuXHJcbiAgICAgKiBcclxuICAgICAqIFRoZSBzY3JlZW4gY29udGV4dCBpcyBhIGNvbGxlY3Rpb24gb2Yga2V5LXZhbHVlIHBhaXJzIHRoYXQgYXJlIHN0b3JlZCBpbiBzZXNzaW9uIHN0b3JhZ2UuXHJcbiAgICAgKiBUaGUga2V5IGlzIHVzZWQgdG8gaWRlbnRpZnkgdGhlIHNjcmVlbiBjb250ZXh0IGFuZCB0aGUgZGF0YSBpcyB0aGUgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBrZXkuXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSBrZXkgVGhlIGtleSBmb3IgdGhlIHNjcmVlbiBjb250ZXh0LlxyXG4gICAgICogQHJldHVybnMgVGhlIGxhdGVzdCBzY3JlZW4gY29udGV4dCBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGUga2V5LCBvciBudWxsIGlmIHRoZSBrZXkgaXMgbm90IGZvdW5kLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0U2NyZWVuQ29udGV4dChrZXk6IHN0cmluZyk6IGFueSB8IG51bGwge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGlmICgha2V5KSByZXR1cm4gbnVsbDtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHNjcmVlbkNvbnRleHQgPSB0aGlzLmdldFNlc3Npb24oU3RvcmFnZUNvbnN0YW50cy5zY3JlZW5Db250ZXh0KTtcclxuICAgICAgICAgICAgaWYgKCFzY3JlZW5Db250ZXh0IHx8ICFzY3JlZW5Db250ZXh0W2tleV0gfHwgc2NyZWVuQ29udGV4dFtrZXldLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIFJldHVybiB0aGUgbGF0ZXN0IHNjcmVlbiBjb250ZXh0IGRhdGEgKExJRk8pXHJcbiAgICAgICAgICAgIHJldHVybiBzY3JlZW5Db250ZXh0W2tleV1bc2NyZWVuQ29udGV4dFtrZXldLmxlbmd0aCAtIDFdO1xyXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGdldHRpbmcgc2NyZWVuIGNvbnRleHQ6JywgZXJyb3IpO1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmVzIHRoZSBsYXRlc3Qgc2NyZWVuIGNvbnRleHQgZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIGtleSBmcm9tIHNlc3Npb24gc3RvcmFnZS5cclxuICAgICAqIFxyXG4gICAgICogVGhlIHNjcmVlbiBjb250ZXh0IGlzIGEgY29sbGVjdGlvbiBvZiBrZXktdmFsdWUgcGFpcnMgdGhhdCBhcmUgc3RvcmVkIGluIHNlc3Npb24gc3RvcmFnZS5cclxuICAgICAqIFRoZSBrZXkgaXMgdXNlZCB0byBpZGVudGlmeSB0aGUgc2NyZWVuIGNvbnRleHQgYW5kIHRoZSBkYXRhIGlzIHRoZSB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggdGhlIGtleS5cclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIGtleSBUaGUga2V5IGZvciB0aGUgc2NyZWVuIGNvbnRleHQuXHJcbiAgICAgKiBAcmV0dXJucyBUaGUgcmVtb3ZlZCBzY3JlZW4gY29udGV4dCBkYXRhLCBvciBudWxsIGlmIHRoZSBrZXkgaXMgbm90IGZvdW5kIG9yIHRoZSBkYXRhIGlzIG5vdCBwcmVzZW50LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgY2xlYW5TY3JlZW5Db250ZXh0KGtleTogc3RyaW5nKTogYW55IHwgbnVsbCB7XHJcbiAgICAgICAgdHJ5IHsgICAgICAgICAgICBcclxuICAgICAgICAgICAgaWYgKCFrZXkpIHJldHVybiBudWxsO1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgc2NyZWVuQ29udGV4dCA9IHRoaXMuZ2V0U2Vzc2lvbihTdG9yYWdlQ29uc3RhbnRzLnNjcmVlbkNvbnRleHQpO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgaWYgKCFzY3JlZW5Db250ZXh0IHx8ICFzY3JlZW5Db250ZXh0W2tleV0gfHwgc2NyZWVuQ29udGV4dFtrZXldLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHJlbW92ZWREYXRhID0gc2NyZWVuQ29udGV4dFtrZXldLnBvcCgpOyAvLyBSZW1vdmUgbGF0ZXN0IChMSUZPKVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLy8gQXV0by1jbGVhbnVwOiBSZW1vdmUga2V5IGlmIGFycmF5IGJlY29tZXMgZW1wdHlcclxuICAgICAgICAgICAgaWYgKHNjcmVlbkNvbnRleHRba2V5XS5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSBzY3JlZW5Db250ZXh0W2tleV07XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0U2Vzc2lvbihTdG9yYWdlQ29uc3RhbnRzLnNjcmVlbkNvbnRleHQsIHNjcmVlbkNvbnRleHQpO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVtb3ZlZERhdGE7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgY2xlYW5pbmcgc2NyZWVuIGNvbnRleHQ6JywgZXJyb3IpO1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0iXX0=
|
|
829
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhYi1zZGsvc3JjL2xpYi9zdG9yZS9zdG9yZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxxQkFBcUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzlHLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7QUFLakQsTUFBTSxPQUFPLFlBQVk7SUFDSixvQkFBb0IsR0FBd0IsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDeEUsc0JBQXNCLEdBQTBCLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0lBRS9GOztPQUVHO0lBQ0gsSUFBSSxRQUFRO1FBQ1IsT0FBTyxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsRUFBRSxJQUFJLElBQUksQ0FBQztJQUN6QyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILElBQUksUUFBUSxDQUFDLEtBQW9CO1FBQzdCLHFFQUFxRTtRQUNyRSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxDQUFDO1FBRXhDLDZCQUE2QjtRQUM3QixPQUFPLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQztRQUVuQixxREFBcUQ7UUFDckQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFJLFVBQVU7UUFDViw4Q0FBOEM7UUFDOUMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBRWxDLDZEQUE2RDtRQUM3RCxPQUFPLE9BQU8sRUFBRSxnQkFBZ0IsSUFBSSxJQUFJLENBQUM7SUFDN0MsQ0FBQztJQUVE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V0FBVyxDQUFDO1FBQ3ZCLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2IsT0FBTyxDQUFDLEtBQUssQ0FBQyxnQ0FBZ0MsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN2RCxPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO0lBQ0wsQ0FBQzt3R0FsNUJRLFlBQVk7NEdBQVosWUFBWSxjQUZULE1BQU07OzRGQUVULFlBQVk7a0JBSHhCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMb2NhbFN0b3JhZ2VTZXJ2aWNlLCBTZXNzaW9uU3RvcmFnZVNlcnZpY2UsIFN0b3JhZ2VDb25zdGFudHMgfSBmcm9tICdAdGVjaGV4dGVuc29yL3RhYi1jb3JlLXV0aWxpdHknO1xuaW1wb3J0IHsgU3RvcmFnZVR5cGUgfSBmcm9tICcuLi9lbnVtL3N0b3JlLmVudW0nO1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFN0b3JlU2VydmljZSB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfbG9jYWxTdG9yYWdlU2VydmljZTogTG9jYWxTdG9yYWdlU2VydmljZSA9IGluamVjdChMb2NhbFN0b3JhZ2VTZXJ2aWNlKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9zZXNzaW9uU3RvcmFnZVNlcnZpY2U6IFNlc3Npb25TdG9yYWdlU2VydmljZSA9IGluamVjdChTZXNzaW9uU3RvcmFnZVNlcnZpY2UpO1xuXG4gICAgLyoqXG4gICAgICogUmV0cmlldmVzIHRoZSB0ZW5hbnQgSUQgZnJvbSB0aGUgbG9jYWwgc3RvcmFnZS5cbiAgICAgKi9cbiAgICBnZXQgdGVuYW50SWQoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldE9yZ0luZm8oKT8uSWQgfHwgbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSB0ZW5hbnQgSUQgaW4gdGhlIG9yZ2FuaXphdGlvbiBpbmZvLlxuICAgICAqIFxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB0ZW5hbnQgSUQgdG8gc2V0LlxuICAgICAqL1xuICAgIHNldCB0ZW5hbnRJZCh2YWx1ZTogc3RyaW5nIHwgbnVsbCkge1xuICAgICAgICAvLyBSZXRyaWV2ZSB0aGUgZXhpc3Rpbmcgb3JnYW5pemF0aW9uIGluZm8gb3IgaW5pdGlhbGl6ZSBhIG5ldyBvYmplY3RcbiAgICAgICAgY29uc3Qgb3JnSW5mbyA9IHRoaXMuZ2V0T3JnSW5mbygpIHx8IHt9O1xuXG4gICAgICAgIC8vIFVwZGF0ZSB0aGUgdGVuYW50IElEIHZhbHVlXG4gICAgICAgIG9yZ0luZm8uSWQgPSB2YWx1ZTtcblxuICAgICAgICAvLyBTYXZlIHRoZSB1cGRhdGVkIG9yZ2FuaXphdGlvbiBpbmZvIGJhY2sgdG8gc3RvcmFnZVxuICAgICAgICB0aGlzLnNldE9yZ0luZm8ob3JnSW5mbyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0cmlldmVzIHRoZSB0ZW5hbnQgbmFtZSBmcm9tIHRoZSBvcmdhbml6YXRpb24gaW5mby5cbiAgICAgKi9cbiAgICBnZXQgdGVuYW50TmFtZSgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICAgICAgLy8gUmV0cmlldmUgdGhlIG9yZ2FuaXphdGlvbiBpbmZvIGZyb20gc3RvcmFnZVxuICAgICAgICBjb25zdCBvcmdJbmZvID0gdGhpcy5nZXRPcmdJbmZvKCk7XG5cbiAgICAgICAgLy8gUmV0dXJuIHRoZSB0ZW5hbnQgbmFtZSBpZiBpdCBleGlzdHMsIG90aGVyd2lzZSByZXR1cm4gbnVsbFxuICAgICAgICByZXR1cm4gb3JnSW5mbz8uT3JnYW5pemF0aW9uTmFtZSB8fCBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHRlbmFudCBuYW1lIGluIHRoZSBvcmdhbml6YXRpb24gaW5mby5cbiAgICAgKiBcbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgdGVuYW50IG5hbWUgdG8gc2V0LlxuICAgICAqL1xuICAgIHNldCB0ZW5hbnROYW1lKHZhbHVlOiBzdHJpbmcgfCBudWxsKSB7XG4gICAgICAgIC8vIFJldHJpZXZlIHRoZSBleGlzdGluZyBvcmdhbml6YXRpb24gaW5mbyBvciBpbml0aWFsaXplIGEgbmV3IG9iamVjdFxuICAgICAgICBjb25zdCBvcmdJbmZvID0gdGhpcy5nZXRPcmdJbmZvKCkgfHwge307XG5cbiAgICAgICAgLy8gVXBkYXRlIHRoZSBvcmdhbml6YXRpb24gbmFtZSB2YWx1ZVxuICAgICAgICBvcmdJbmZvLk9yZ2FuaXphdGlvbk5hbWUgPSB2YWx1ZTtcblxuICAgICAgICAvLyBTYXZlIHRoZSB1cGRhdGVkIG9yZ2FuaXphdGlvbiBpbmZvIGJhY2sgdG8gc3RvcmFnZVxuICAgICAgICB0aGlzLnNldE9yZ0luZm8ob3JnSW5mbyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0cmlldmVzIHRoZSBzdWJkb21haW4gZnJvbSB0aGUgb3JnYW5pemF0aW9uIGluZm8uXG4gICAgICogXG4gICAgICogQHJldHVybnMgVGhlIHN1YmRvbWFpbiBpZiBpdCBleGlzdHMsIG90aGVyd2lzZSBgbnVsbGAuXG4gICAgICovXG4gICAgZ2V0IHN1YmRvbWFpbigpOiBzdHJpbmcgfCBudWxsIHtcbiAgICAgICAgLy8gUmV0cmlldmUgdGhlIG9yZ2FuaXphdGlvbiBpbmZvIGZyb20gc3RvcmFnZVxuICAgICAgICBjb25zdCBvcmdJbmZvID0gdGhpcy5nZXRPcmdJbmZvKCk7XG5cbiAgICAgICAgLy8gUmV0dXJuIHRoZSBzdWJkb21haW4gaWYgaXQgZXhpc3RzLCBvdGhlcndpc2UgcmV0dXJuIG51bGxcbiAgICAgICAgcmV0dXJuIG9yZ0luZm8/LlN1YmRvbWFpbiB8fCBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN1YmRvbWFpbiBpbiB0aGUgb3JnYW5pemF0aW9uIGluZm8uXG4gICAgICogXG4gICAgICogQHBhcmFtIHZhbHVlIC0gVGhlIHN1YmRvbWFpbiB0byBzZXQuXG4gICAgICovXG4gICAgc2V0IHN1YmRvbWFpbih2YWx1ZTogc3RyaW5nIHwgbnVsbCkge1xuICAgICAgICAvLyBSZXRyaWV2ZSB0aGUgZXhpc3Rpbmcgb3JnYW5pemF0aW9uIGluZm8gb3IgaW5pdGlhbGl6ZSBhIG5ldyBvYmplY3RcbiAgICAgICAgY29uc3Qgb3JnSW5mbyA9IHRoaXMuZ2V0T3JnSW5mbygpIHx8IHt9O1xuXG4gICAgICAgIC8vIFVwZGF0ZSB0aGUgc3ViZG9tYWluIHZhbHVlXG4gICAgICAgIG9yZ0luZm8uU3ViZG9tYWluID0gdmFsdWU7XG5cbiAgICAgICAgLy8gU2F2ZSB0aGUgdXBkYXRlZCBvcmdhbml6YXRpb24gaW5mbyBiYWNrIHRvIHN0b3JhZ2VcbiAgICAgICAgdGhpcy5zZXRPcmdJbmZvKG9yZ0luZm8pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlcyB0aGUgbG9jYWxlIHNldHRpbmdzIGZyb20gdGhlIG9yZ2FuaXphdGlvbiBpbmZvLlxuICAgICAqIFxuICAgICAqIEByZXR1cm5zIFRoZSBsb2NhbGUgc2V0dGluZ3MgaWYgdGhleSBleGlzdCwgb3RoZXJ3aXNlIGBudWxsYC5cbiAgICAgKi9cbiAgICBnZXQgb3JnTG9jYWxlU2V0dGluZ3MoKTogYW55IHtcbiAgICAgICAgLy8gUmV0cmlldmUgdGhlIGxvY2FsZSBzZXR0aW5ncyBmcm9tIHRoZSBvcmdhbml6YXRpb24gaW5mb1xuICAgICAgICBsZXQgbG9jYWxTZXR0aW5ncyA9IHRoaXMuZ2V0T3JnSW5mbygpPy5Mb2NhbGVTZXR0aW5ncztcblxuICAgICAgICAvLyBJZiB0aGUgbG9jYWxlIHNldHRpbmdzIGFyZSBhIHN0cmluZywgcGFyc2UgdGhlbSBhcyBKU09OXG4gICAgICAgIGlmICh0eXBlb2YgbG9jYWxTZXR0aW5ncyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGxvY2FsU2V0dGluZ3MgPSBKU09OLnBhcnNlKGxvY2FsU2V0dGluZ3MpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUmV0dXJuIHRoZSBsb2NhbGUgc2V0dGluZ3NcbiAgICAgICAgcmV0dXJuIGxvY2FsU2V0dGluZ3M7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbG9jYWxlIHNldHRpbmdzIGluIHRoZSBvcmdhbml6YXRpb24gaW5mby5cbiAgICAgKiBcbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgbG9jYWxlIHNldHRpbmdzIHRvIHNldC5cbiAgICAgKi9cbiAgICBzZXQgb3JnTG9jYWxlU2V0dGluZ3ModmFsdWU6IGFueSkge1xuICAgICAgICAvLyBSZXRyaWV2ZSB0aGUgZXhpc3Rpbmcgb3JnYW5pemF0aW9uIGluZm8gb3IgaW5pdGlhbGl6ZSBhIG5ldyBvYmplY3RcbiAgICAgICAgY29uc3Qgb3JnSW5mbyA9IHRoaXMuZ2V0T3JnSW5mbygpIHx8IHt9O1xuXG4gICAgICAgIC8vIFVwZGF0ZSB0aGUgbG9jYWxlIHNldHRpbmdzIHZhbHVlXG4gICAgICAgIG9yZ0luZm8uTG9jYWxlU2V0dGluZ3MgPSB2YWx1ZTtcblxuICAgICAgICAvLyBTYXZlIHRoZSB1cGRhdGVkIG9yZ2FuaXphdGlvbiBpbmZvIGJhY2sgdG8gc3RvcmFnZVxuICAgICAgICB0aGlzLnNldE9yZ0luZm8ob3JnSW5mbyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0cmlldmVzIHRoZSBhcHAgSUQgZnJvbSB0aGUgYXBwIGluZm8uXG4gICAgICogXG4gICAgICogQHJldHVybnMgVGhlIGFwcCBJRCBpZiBpdCBleGlzdHMsIG90aGVyd2lzZSBgbnVsbGAuXG4gICAgICovXG4gICAgZ2V0IGFwcElkKCk6IHN0cmluZyB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRBcHBJbmZvKCk/LklkIHx8IG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgYXBwIElEIGluIHRoZSBhcHAgaW5mby5cbiAgICAgKiBcbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgYXBwIElEIHRvIHNldC5cbiAgICAgKi9cbiAgICBzZXQgYXBwSWQodmFsdWU6IHN0cmluZyB8IG51bGwpIHtcbiAgICAgICAgLy8gUmV0cmlldmUgdGhlIGV4aXN0aW5nIGFwcCBpbmZvIG9yIGluaXRpYWxpemUgYSBuZXcgb2JqZWN0XG4gICAgICAgIGNvbnN0IGFwcEluZm8gPSB0aGlzLmdldEFwcEluZm8oKSB8fCB7fTtcblxuICAgICAgICAvLyBVcGRhdGUgdGhlIGFwcCBJRCB2YWx1ZVxuICAgICAgICBhcHBJbmZvLklkID0gdmFsdWU7XG5cbiAgICAgICAgLy8gU2F2ZSB0aGUgdXBkYXRlZCBhcHAgaW5mbyBiYWNrIHRvIHN0b3JhZ2VcbiAgICAgICAgdGhpcy5zZXRBcHBJbmZvKGFwcEluZm8pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlcyB0aGUgYXBwIG5hbWUgZnJvbSB0aGUgYXBwIGluZm8uXG4gICAgICogXG4gICAgICogQHJldHVybnMgVGhlIGFwcCBuYW1lIGlmIGl0IGV4aXN0cywgb3RoZXJ3aXNlIGBudWxsYC5cbiAgICAgKi9cbiAgICBnZXQgYXBwTmFtZSgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICAgICAgLy8gUmV0cmlldmUgYW5kIHJldHVybiB0aGUgYXBwIG5hbWUgZnJvbSB0aGUgYXBwIGluZm8sIG9yIHJldHVybiBudWxsIGlmIGl0IGRvZXNuJ3QgZXhpc3RcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QXBwSW5mbygpPy5BcHBOYW1lIHx8IG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgYXBwIG5hbWUgaW4gdGhlIGFwcCBpbmZvLlxuICAgICAqIFxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBhcHAgbmFtZSB0byBzZXQuXG4gICAgICovXG4gICAgc2V0IGFwcE5hbWUodmFsdWU6IHN0cmluZyB8IG51bGwpIHtcbiAgICAgICAgLy8gUmV0cmlldmUgdGhlIGV4aXN0aW5nIGFwcCBpbmZvIG9yIGluaXRpYWxpemUgYSBuZXcgb2JqZWN0XG4gICAgICAgIGNvbnN0IGFwcEluZm8gPSB0aGlzLmdldEFwcEluZm8oKSB8fCB7fTtcblxuICAgICAgICAvLyBVcGRhdGUgdGhlIGFwcCBuYW1lIHZhbHVlXG4gICAgICAgIGFwcEluZm8uQXBwTmFtZSA9IHZhbHVlO1xuXG4gICAgICAgIC8vIFNhdmUgdGhlIHVwZGF0ZWQgYXBwIGluZm8gYmFjayB0byBzdG9yYWdlXG4gICAgICAgIHRoaXMuc2V0QXBwSW5mbyhhcHBJbmZvKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXRyaWV2ZXMgdGhlIGVudmlyb25tZW50IElEIGZyb20gdGhlIGVudmlyb25tZW50IGluZm8uXG4gICAgICogXG4gICAgICogQHJldHVybnMgVGhlIGVudmlyb25tZW50IElEIGlmIGl0IGV4aXN0cywgb3RoZXJ3aXNlIGBudWxsYC5cbiAgICAgKi9cbiAgICBnZXQgZW52aXJvbm1lbnRJZCgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICAgICAgLy8gUmV0cmlldmUgYW5kIHJldHVybiB0aGUgZW52aXJvbm1lbnQgSUQgZnJvbSB0aGUgZW52aXJvbm1lbnQgaW5mbywgb3IgcmV0dXJuIG51bGwgaWYgaXQgZG9lc24ndCBleGlzdFxuICAgICAgICByZXR1cm4gdGhpcy5nZXRFbnZpcm9ubWVudEluZm8oKT8uSWQgfHwgbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBlbnZpcm9ubWVudCBJRCBpbiB0aGUgZW52aXJvbm1lbnQgaW5mby5cbiAgICAgKiBcbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgZW52aXJvbm1lbnQgSUQgdG8gc2V0LlxuICAgICAqL1xuICAgIHNldCBlbnZpcm9ubWVudElkKHZhbHVlOiBzdHJpbmcgfCBudWxsKSB7XG4gICAgICAgIC8vIFJldHJpZXZlIHRoZSBleGlzdGluZyBlbnZpcm9ubWVudCBpbmZvIG9yIGluaXRpYWxpemUgYSBuZXcgb2JqZWN0XG4gICAgICAgIGNvbnN0IGVudmlyb25tZW50SW5mbyA9IHRoaXMuZ2V0RW52aXJvbm1lbnRJbmZvKCkgfHwge307XG5cbiAgICAgICAgLy8gVXBkYXRlIHRoZSBlbnZpcm9ubWVudCBJRCB2YWx1ZVxuICAgICAgICBlbnZpcm9ubWVudEluZm8uSWQgPSB2YWx1ZTtcblxuICAgICAgICAvLyBTYXZlIHRoZSB1cGRhdGVkIGVudmlyb25tZW50IGluZm8gYmFjayB0byBzdG9yYWdlXG4gICAgICAgIHRoaXMuc2V0RW52aXJvbm1lbnRJbmZvKGVudmlyb25tZW50SW5mbyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0cmlldmVzIHRoZSBlbnZpcm9ubWVudCBuYW1lIGZyb20gdGhlIGVudmlyb25tZW50IGluZm8uXG4gICAgICogXG4gICAgICogQHJldHVybnMgVGhlIGVudmlyb25tZW50IG5hbWUgaWYgaXQgZXhpc3RzLCBvdGhlcndpc2UgYG51bGxgLlxuICAgICAqL1xuICAgIGdldCBlbnZpcm9ubWVudE5hbWUoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgICAgIC8vIFJldHJpZXZlIGFuZCByZXR1cm4gdGhlIGVudmlyb25tZW50IG5hbWUgZnJvbSB0aGUgZW52aXJvbm1lbnQgaW5mbywgb3IgcmV0dXJuIG51bGwgaWYgaXQgZG9lc24ndCBleGlzdFxuICAgICAgICByZXR1cm4gdGhpcy5nZXRFbnZpcm9ubWVudEluZm8oKT8uTmFtZSB8fCBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGVudmlyb25tZW50IG5hbWUgaW4gdGhlIGVudmlyb25tZW50IGluZm8uXG4gICAgICogXG4gICAgICogQHBhcmFtIHZhbHVlIC0gVGhlIGVudmlyb25tZW50IG5hbWUgdG8gc2V0LlxuICAgICAqL1xuICAgIHNldCBlbnZpcm9ubWVudE5hbWUodmFsdWU6IHN0cmluZyB8IG51bGwpIHtcbiAgICAgICAgLy8gUmV0cmlldmUgdGhlIGV4aXN0aW5nIGVudmlyb25tZW50IGluZm8gb3IgaW5pdGlhbGl6ZSBhIG5ldyBvYmplY3RcbiAgICAgICAgY29uc3QgZW52aXJvbm1lbnRJbmZvID0gdGhpcy5nZXRFbnZpcm9ubWVudEluZm8oKSB8fCB7fTtcblxuICAgICAgICAvLyBVcGRhdGUgdGhlIGVudmlyb25tZW50IG5hbWUgdmFsdWVcbiAgICAgICAgZW52aXJvbm1lbnRJbmZvLk5hbWUgPSB2YWx1ZTtcblxuICAgICAgICAvLyBTYXZlIHRoZSB1cGRhdGVkIGVudmlyb25tZW50IGluZm8gYmFjayB0byBzdG9yYWdlXG4gICAgICAgIHRoaXMuc2V0RW52aXJvbm1lbnRJbmZvKGVudmlyb25tZW50SW5mbyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0cmlldmVzIHRoZSB0b2tlbiBmcm9tIHRoZSB0b2tlbiBpbmZvLlxuICAgICAqIFxuICAgICAqIEByZXR1cm5zIFRoZSB0b2tlbiBpZiBpdCBleGlzdHMsIG90aGVyd2lzZSBgbnVsbGAuXG4gICAgICovXG4gICAgZ2V0IHRva2VuKCk6IHN0cmluZyB8IG51bGwge1xuICAgICAgICAvLyBSZXRyaWV2ZSBhbmQgcmV0dXJuIHRoZSB0b2tlbiBmcm9tIHRoZSB0b2tlbiBpbmZvLCBvciByZXR1cm4gbnVsbCBpZiBpdCBkb2Vzbid0IGV4aXN0XG4gICAgICAgIHJldHVybiB0aGlzLmdldFRva2VuSW5mbygpPy50b2tlbiB8fCBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHRva2VuIGluIHRoZSB0b2tlbiBpbmZvLlxuICAgICAqIFxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB0b2tlbiB0byBzZXQuXG4gICAgICovXG4gICAgc2V0IHRva2VuKHZhbHVlOiBzdHJpbmcgfCBudWxsKSB7XG4gICAgICAgIC8vIFJldHJpZXZlIHRoZSBleGlzdGluZyB0b2tlbiBpbmZvIG9yIGluaXRpYWxpemUgYSBuZXcgb2JqZWN0XG4gICAgICAgIGNvbnN0IHRva2VuSW5mbyA9IHRoaXMuZ2V0VG9rZW5JbmZvKCkgfHwge307XG5cbiAgICAgICAgLy8gVXBkYXRlIHRoZSB0b2tlbiB2YWx1ZVxuICAgICAgICB0b2tlbkluZm8udG9rZW4gPSB2YWx1ZTtcblxuICAgICAgICAvLyBTYXZlIHRoZSB1cGRhdGVkIHRva2VuIGluZm8gYmFjayB0byBzdG9yYWdlXG4gICAgICAgIHRoaXMuc2V0VG9rZW5JbmZvKHRva2VuSW5mbyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0cmlldmVzIHRoZSByZWZyZXNoIHRva2VuIGZyb20gdGhlIHRva2VuIGluZm8uXG4gICAgICogXG4gICAgICogQHJldHVybnMgVGhlIHJlZnJlc2ggdG9rZW4gaWYgaXQgZXhpc3RzLCBvdGhlcndpc2UgYG51bGxgLlxuICAgICAqL1xuICAgIGdldCByZWZyZXNoVG9rZW4oKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgICAgIC8vIFJldHJpZXZlIGFuZCByZXR1cm4gdGhlIHJlZnJlc2ggdG9rZW4gZnJvbSB0aGUgdG9rZW4gaW5mbywgb3IgcmV0dXJuIG51bGwgaWYgaXQgZG9lc24ndCBleGlzdFxuICAgICAgICByZXR1cm4gdGhpcy5nZXRUb2tlbkluZm8oKT8ucmVmcmVzaFRva2VuIHx8IG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgcmVmcmVzaCB0b2tlbiBpbiB0aGUgdG9rZW4gaW5mby5cbiAgICAgKiBcbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgcmVmcmVzaCB0b2tlbiB0byBzZXQuXG4gICAgICovXG4gICAgc2V0IHJlZnJlc2hUb2tlbih2YWx1ZTogc3RyaW5nIHwgbnVsbCkge1xuICAgICAgICAvLyBSZXRyaWV2ZSB0aGUgZXhpc3RpbmcgdG9rZW4gaW5mbyBvciBpbml0aWFsaXplIGEgbmV3IG9iamVjdFxuICAgICAgICBjb25zdCB0b2tlbkluZm8gPSB0aGlzLmdldFRva2VuSW5mbygpIHx8IHt9O1xuXG4gICAgICAgIC8vIFVwZGF0ZSB0aGUgcmVmcmVzaCB0b2tlbiB2YWx1ZVxuICAgICAgICB0b2tlbkluZm8ucmVmcmVzaFRva2VuID0gdmFsdWU7XG5cbiAgICAgICAgLy8gU2F2ZSB0aGUgdXBkYXRlZCB0b2tlbiBpbmZvIGJhY2sgdG8gc3RvcmFnZVxuICAgICAgICB0aGlzLnNldFRva2VuSW5mbyh0b2tlbkluZm8pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlcyB0aGUgcmVmcmVzaCB0b2tlbiBleHBpcnkgdGltZSBmcm9tIHRoZSB0b2tlbiBpbmZvLlxuICAgICAqIFxuICAgICAqIEByZXR1cm5zIFRoZSByZWZyZXNoIHRva2VuIGV4cGlyeSB0aW1lIGlmIGl0IGV4aXN0cywgb3RoZXJ3aXNlIGBudWxsYC5cbiAgICAgKi9cbiAgICBnZXQgcmVmcmVzaFRva2VuRXhwaXJ5KCk6IHN0cmluZyB8IG51bGwge1xuICAgICAgICAvLyBSZXRyaWV2ZSBhbmQgcmV0dXJuIHRoZSByZWZyZXNoIHRva2VuIGV4cGlyeSB0aW1lIGZyb20gdGhlIHRva2VuIGluZm8sXG4gICAgICAgIC8vIG9yIHJldHVybiBudWxsIGlmIGl0IGRvZXNuJ3QgZXhpc3RcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VG9rZW5JbmZvKCk/LnJlZnJlc2hUb2tlbkV4cGlyeSB8fCBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHJlZnJlc2ggdG9rZW4gZXhwaXJ5IHRpbWUgaW4gdGhlIHRva2VuIGluZm8uXG4gICAgICogXG4gICAgICogQHBhcmFtIHZhbHVlIC0gVGhlIHJlZnJlc2ggdG9rZW4gZXhwaXJ5IHRpbWUgdG8gc2V0LlxuICAgICAqL1xuICAgIHNldCByZWZyZXNoVG9rZW5FeHBpcnkodmFsdWU6IHN0cmluZyB8IG51bGwpIHtcbiAgICAgICAgLy8gUmV0cmlldmUgdGhlIGV4aXN0aW5nIHRva2VuIGluZm8gb3IgaW5pdGlhbGl6ZSBhIG5ldyBvYmplY3RcbiAgICAgICAgY29uc3QgdG9rZW5JbmZvID0gdGhpcy5nZXRUb2tlbkluZm8oKSB8fCB7fTtcblxuICAgICAgICAvLyBVcGRhdGUgdGhlIHJlZnJlc2ggdG9rZW4gZXhwaXJ5IHRpbWVcbiAgICAgICAgdG9rZW5JbmZvLnJlZnJlc2hUb2tlbkV4cGlyeSA9IHZhbHVlO1xuXG4gICAgICAgIC8vIFNhdmUgdGhlIHVwZGF0ZWQgdG9rZW4gaW5mbyBiYWNrIHRvIHN0b3JhZ2VcbiAgICAgICAgdGhpcy5zZXRUb2tlbkluZm8odG9rZW5JbmZvKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXRyaWV2ZXMgdGhlIHN0YXRpYyB0b2tlbiBmcm9tIHRoZSB0b2tlbiBpbmZvLlxuICAgICAqIFxuICAgICAqIEByZXR1cm5zIFRoZSBzdGF0aWMgdG9rZW4gaWYgaXQgZXhpc3RzLCBvdGhlcndpc2UgYG51bGxgLlxuICAgICAqL1xuICAgIGdldCBzdGF0aWNUb2tlbigpOiBzdHJpbmcgfCBudWxsIHtcbiAgICAgICAgLy8gUmV0cmlldmUgYW5kIHJldHVybiB0aGUgc3RhdGljIHRva2VuIGZyb20gdGhlIHRva2VuIGluZm8sXG4gICAgICAgIC8vIG9yIHJldHVybiBudWxsIGlmIGl0IGRvZXNuJ3QgZXhpc3RcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VG9rZW5JbmZvKCk/LnN0YXRpY1Rva2VuIHx8IG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RhdGljIHRva2VuIGluIHRoZSB0b2tlbiBpbmZvLlxuICAgICAqIFxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBzdGF0aWMgdG9rZW4gdG8gc2V0LlxuICAgICAqL1xuICAgIHNldCBzdGF0aWNUb2tlbih2YWx1ZTogc3RyaW5nIHwgbnVsbCkge1xuICAgICAgICAvLyBSZXRyaWV2ZSB0aGUgZXhpc3RpbmcgdG9rZW4gaW5mbyBvciBpbml0aWFsaXplIGEgbmV3IG9iamVjdFxuICAgICAgICBjb25zdCB0b2tlbkluZm8gPSB0aGlzLmdldFRva2VuSW5mbygpIHx8IHt9O1xuXG4gICAgICAgIC8vIFVwZGF0ZSB0aGUgc3RhdGljIHRva2VuIHZhbHVlXG4gICAgICAgIHRva2VuSW5mby5zdGF0aWNUb2tlbiA9IHZhbHVlO1xuXG4gICAgICAgIC8vIFNhdmUgdGhlIHVwZGF0ZWQgdG9rZW4gaW5mbyBiYWNrIHRvIHN0b3JhZ2VcbiAgICAgICAgdGhpcy5zZXRUb2tlbkluZm8odG9rZW5JbmZvKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXRyaWV2ZXMgdGhlIHVzZXIgSUQgZnJvbSB0aGUgdXNlciBpbmZvLlxuICAgICAqIFxuICAgICAqIEByZXR1cm5zIFRoZSB1c2VyIElEIGlmIGl0IGV4aXN0cywgb3RoZXJ3aXNlIGBudWxsYC5cbiAgICAgKi9cbiAgICBnZXQgdXNlcklkKCk6IHN0cmluZyB8IG51bGwge1xuICAgICAgICAvLyBSZXRyaWV2ZSBhbmQgcmV0dXJuIHRoZSB1c2VyIElEIGZyb20gdGhlIHVzZXIgaW5mbywgb3IgcmV0dXJuIG51bGwgaWYgaXQgZG9lc24ndCBleGlzdFxuICAgICAgICByZXR1cm4gdGhpcy5nZXRVc2VySW5mbygpPy51c2VyPy5JZCB8fCBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlcyB0aGUgdXNlcidzIHJvbGVzIGZyb20gdGhlIHVzZXIgaW5mb3JtYXRpb24uXG4gICAgICogXG4gICAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgdXNlciByb2xlcyBpZiB0aGV5IGV4aXN0LCBvdGhlcndpc2UgYG51bGxgLlxuICAgICAqL1xuICAgIGdldCB1c2VyUm9sZXMoKTogYW55W10gfCBudWxsIHtcbiAgICAgICAgLy8gUmV0cmlldmUgYW5kIHJldHVybiB0aGUgdXNlciByb2xlcyBmcm9tIHRoZSB1c2VyIGluZm8sIG9yIHJldHVybiBudWxsIGlmIHRoZXkgZG9uJ3QgZXhpc3RcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VXNlckluZm8oKT8udXNlcj8uUm9sZXMgfHwgbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXRyaWV2ZXMgdGhlIHVzZXIncyB0ZWFtcyBmcm9tIHRoZSB1c2VyIGluZm9ybWF0aW9uLlxuICAgICAqIFxuICAgICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHVzZXIgdGVhbXMgaWYgdGhleSBleGlzdCwgb3RoZXJ3aXNlIGBudWxsYC5cbiAgICAgKi9cbiAgICBnZXQgdXNlclRlYW1zKCk6IGFueVtdIHwgbnVsbCB7XG4gICAgICAgIC8vIFJldHJpZXZlIGFuZCByZXR1cm4gdGhlIHVzZXIgdGVhbXMgZnJvbSB0aGUgdXNlciBpbmZvLCBvciByZXR1cm4gbnVsbCBpZiB0aGV5IGRvbid0IGV4aXN0XG4gICAgICAgIHJldHVybiB0aGlzLmdldFVzZXJJbmZvKCk/LnVzZXI/LlRlYW1zIHx8IG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyB0aGUgdGVuYW50IElEIGZyb20gdGhlIG9yZ2FuaXphdGlvbiBpbmZvcm1hdGlvbi5cbiAgICAgKi9cbiAgICByZW1vdmVUZW5hbnRJZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZW1vdmVGcm9tT3JnSW5mbygnSWQnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIHRoZSB0ZW5hbnQgbmFtZSBmcm9tIHRoZSBvcmdhbml6YXRpb24gaW5mb3JtYXRpb24uXG4gICAgICovXG4gICAgcmVtb3ZlVGVuYW50TmFtZSgpOiB2b2lkIHtcbiAgICAgICAgLy8gUmVtb3ZlIHRoZSB0ZW5hbnQgbmFtZSBmcm9tIHRoZSBvcmdhbml6YXRpb24gaW5mb3JtYXRpb25cbiAgICAgICAgdGhpcy5yZW1vdmVGcm9tT3JnSW5mbygnT3JnYW5pemF0aW9uTmFtZScpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgdGhlIHN1YmRvbWFpbiBmcm9tIHRoZSBvcmdhbml6YXRpb24gaW5mb3JtYXRpb24uXG4gICAgICogXG4gICAgICogVGhpcyByZW1vdmVzIHRoZSBzdWJkb21haW4gcHJvcGVydHkgZnJvbSB0aGUgb3JnYW5pemF0aW9uIGluZm9ybWF0aW9uXG4gICAgICogc3RvcmVkIGluIGxvY2FsIHN0b3JhZ2UuXG4gICAgICovXG4gICAgcmVtb3ZlU3ViZG9tYWluKCk6IHZvaWQge1xuICAgICAgICAvLyBSZW1vdmUgdGhlIHN1YmRvbWFpbiBmcm9tIHRoZSBvcmdhbml6YXRpb24gaW5mb3JtYXRpb25cbiAgICAgICAgdGhpcy5yZW1vdmVGcm9tT3JnSW5mbygnU3ViZG9tYWluJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyB0aGUgYXBwIElEIGZyb20gdGhlIGFwcCBpbmZvcm1hdGlvbi5cbiAgICAgKiBcbiAgICAgKiBUaGlzIHJlbW92ZXMgdGhlIGFwcCBJRCBwcm9wZXJ0eSBmcm9tIHRoZSBhcHAgaW5mb3JtYXRpb24gc3RvcmVkIGluIGxvY2FsIHN0b3JhZ2UuXG4gICAgICovXG4gICAgcmVtb3ZlQXBwSWQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucmVtb3ZlRnJvbUFwcEluZm8oJ0lkJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyB0aGUgYXBwIG5hbWUgZnJvbSB0aGUgYXBwIGluZm9ybWF0aW9uLlxuICAgICAqIFxuICAgICAqIFRoaXMgcmVtb3ZlcyB0aGUgYXBwIG5hbWUgcHJvcGVydHkgZnJvbSB0aGUgYXBwIGluZm9ybWF0aW9uIHN0b3JlZCBpbiBsb2NhbCBzdG9yYWdlLlxuICAgICAqL1xuICAgIHJlbW92ZUFwcE5hbWUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucmVtb3ZlRnJvbUFwcEluZm8oJ0FwcE5hbWUnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIHRoZSBlbnZpcm9ubWVudCBJRCBmcm9tIHRoZSBlbnZpcm9ubWVudCBpbmZvcm1hdGlvbi5cbiAgICAgKiBcbiAgICAgKiBUaGlzIHJlbW92ZXMgdGhlIElEIHByb3BlcnR5IGZyb20gdGhlIGVudmlyb25tZW50IGluZm9ybWF0aW9uXG4gICAgICogc3RvcmVkIGluIGxvY2FsIHN0b3JhZ2UuXG4gICAgICovXG4gICAgcmVtb3ZlRW52aXJvbm1lbnRJZCgpOiB2b2lkIHtcbiAgICAgICAgLy8gUmVtb3ZlIHRoZSBlbnZpcm9ubWVudCBJRCBmcm9tIHRoZSBlbnZpcm9ubWVudCBpbmZvcm1hdGlvblxuICAgICAgICB0aGlzLnJlbW92ZUZyb21FbnZpcm9ubWVudEluZm8oJ0lkJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyB0aGUgZW52aXJvbm1lbnQgbmFtZSBmcm9tIHRoZSBlbnZpcm9ubWVudCBpbmZvcm1hdGlvbi5cbiAgICAgKiBcbiAgICAgKiBUaGlzIHJlbW92ZXMgdGhlIE5hbWUgcHJvcGVydHkgZnJvbSB0aGUgZW52aXJvbm1lbnQgaW5mb3JtYXRpb25cbiAgICAgKiBzdG9yZWQgaW4gbG9jYWwgc3RvcmFnZS5cbiAgICAgKi9cbiAgICByZW1vdmVFbnZpcm9ubWVudE5hbWUoKTogdm9pZCB7XG4gICAgICAgIC8vIFJlbW92ZSB0aGUgZW52aXJvbm1lbnQgbmFtZSBmcm9tIHRoZSBlbnZpcm9ubWVudCBpbmZvcm1hdGlvblxuICAgICAgICB0aGlzLnJlbW92ZUZyb21FbnZpcm9ubWVudEluZm8oJ05hbWUnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIHRoZSB0b2tlbiBmcm9tIHRoZSB0b2tlbiBpbmZvLlxuICAgICAqIFxuICAgICAqIFRoaXMgcmVtb3ZlcyB0aGUgdG9rZW4gcHJvcGVydHkgZnJvbSB0aGUgdG9rZW4gaW5mb3JtYXRpb24gc3RvcmVkIGluIHNlc3Npb25cbiAgICAgKiBzdG9yYWdlLlxuICAgICAqL1xuICAgIHJlbW92ZVRva2VuKCk6IHZvaWQge1xuICAgICAgICAvLyBSZW1vdmUgdGhlIHRva2VuIGZyb20gdGhlIHRva2VuIGluZm9cbiAgICAgICAgdGhpcy5yZW1vdmVGcm9tVG9rZW5JbmZvKCd0b2tlbicpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgdGhlIHJlZnJlc2ggdG9rZW4gZnJvbSB0aGUgdG9rZW4gaW5mb3JtYXRpb24uXG4gICAgICogXG4gICAgICogVGhpcyByZW1vdmVzIHRoZSByZWZyZXNoIHRva2VuIHByb3BlcnR5IGZyb20gdGhlIHRva2VuIGluZm9ybWF0aW9uIHN0b3JlZCBpbiBzZXNzaW9uXG4gICAgICogc3RvcmFnZS5cbiAgICAgKi9cbiAgICByZW1vdmVSZWZyZXNoVG9rZW4oKTogdm9pZCB7XG4gICAgICAgIHRoaXMucmVtb3ZlRnJvbVRva2VuSW5mbygncmVmcmVzaFRva2VuJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyB0aGUgcmVmcmVzaCB0b2tlbiBleHBpcnkgdGltZSBmcm9tIHRoZSB0b2tlbiBpbmZvcm1hdGlvbi5cbiAgICAgKiBcbiAgICAgKiBUaGlzIHJlbW92ZXMgdGhlIHJlZnJlc2ggdG9rZW4gZXhwaXJ5IHRpbWUgcHJvcGVydHkgZnJvbSB0aGUgdG9rZW4gaW5mb3JtYXRpb24gc3RvcmVkIGluIHNlc3Npb25cbiAgICAgKiBzdG9yYWdlLlxuICAgICAqL1xuICAgIHJlbW92ZVJlZnJlc2hUb2tlbkV4cGlyeSgpOiB2b2lkIHtcbiAgICAgICAgLy8gUmVtb3ZlIHRoZSByZWZyZXNoIHRva2VuIGV4cGlyeSBmcm9tIHRoZSB0b2tlbiBpbmZvXG4gICAgICAgIHRoaXMucmVtb3ZlRnJvbVRva2VuSW5mbygncmVmcmVzaFRva2VuRXhwaXJ5Jyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyB0aGUgc3RhdGljIHRva2VuIGZyb20gdGhlIHRva2VuIGluZm9ybWF0aW9uLlxuICAgICAqIFxuICAgICAqIFRoaXMgcmVtb3ZlcyB0aGUgc3RhdGljIHRva2VuIHByb3BlcnR5IGZyb20gdGhlIHRva2VuIGluZm9ybWF0aW9uIHN0b3JlZCBpbiBzZXNzaW9uXG4gICAgICogc3RvcmFnZS5cbiAgICAgKi9cbiAgICByZW1vdmVTdGF0aWNUb2tlbigpOiB2b2lkIHtcbiAgICAgICAgLy8gUmVtb3ZlIHRoZSBzdGF0aWMgdG9rZW4gZnJvbSB0aGUgdG9rZW4gaW5mb1xuICAgICAgICB0aGlzLnJlbW92ZUZyb21Ub2tlbkluZm8oJ3N0YXRpY1Rva2VuJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyB0aGUgc3BlY2lmaWVkIGtleSBmcm9tIHRoZSBvcmdhbml6YXRpb24gaW5mb3JtYXRpb24uXG4gICAgICogXG4gICAgICogVGhpcyByZW1vdmVzIHRoZSBzcGVjaWZpZWQga2V5IGZyb20gdGhlIG9yZ2FuaXphdGlvbiBpbmZvcm1hdGlvbiBzdG9yZWQgaW4gbG9jYWwgc3RvcmFnZS5cbiAgICAgKiBcbiAgICAgKiBAcGFyYW0ga2V5IFRoZSBrZXkgdG8gcmVtb3ZlIGZyb20gdGhlIG9yZ2FuaXphdGlvbiBpbmZvcm1hdGlvbi5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlbW92ZUZyb21PcmdJbmZvKGtleTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG9yZ0luZm8gPSB0aGlzLmdldE9yZ0luZm8oKTtcbiAgICAgICAgaWYgKG9yZ0luZm8pIHtcbiAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUga2V5IGZyb20gdGhlIG9yZ2FuaXphdGlvbiBpbmZvcm1hdGlvblxuICAgICAgICAgICAgZGVsZXRlIG9yZ0luZm9ba2V5XTtcbiAgICAgICAgICAgIC8vIFNhdmUgdGhlIHVwZGF0ZWQgb3JnYW5pemF0aW9uIGluZm9ybWF0aW9uIGJhY2sgdG8gbG9jYWwgc3RvcmFnZVxuICAgICAgICAgICAgdGhpcy5zZXRPcmdJbmZvKG9yZ0luZm8pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyB0aGUgc3BlY2lmaWVkIGtleSBmcm9tIHRoZSBhcHAgaW5mb3JtYXRpb24uXG4gICAgICogXG4gICAgICogVGhpcyByZW1vdmVzIHRoZSBzcGVjaWZpZWQga2V5IGZyb20gdGhlIGFwcCBpbmZvcm1hdGlvbiBzdG9yZWQgaW4gc2Vzc2lvblxuICAgICAqIHN0b3JhZ2UuXG4gICAgICogXG4gICAgICogQHBhcmFtIGtleSBUaGUga2V5IHRvIHJlbW92ZSBmcm9tIHRoZSBhcHAgaW5mb3JtYXRpb24uXG4gICAgICovXG4gICAgcHJpdmF0ZSByZW1vdmVGcm9tQXBwSW5mbyhrZXk6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zdCBhcHBJbmZvID0gdGhpcy5nZXRBcHBJbmZvKCk7XG4gICAgICAgIGlmIChhcHBJbmZvKSB7XG4gICAgICAgICAgICAvLyBSZW1vdmUgdGhlIGtleSBmcm9tIHRoZSBhcHAgaW5mb3JtYXRpb25cbiAgICAgICAgICAgIGRlbGV0ZSBhcHBJbmZvW2tleV07XG4gICAgICAgICAgICAvLyBTYXZlIHRoZSB1cGRhdGVkIGFwcCBpbmZvcm1hdGlvbiBiYWNrIHRvIHNlc3Npb24gc3RvcmFnZVxuICAgICAgICAgICAgdGhpcy5zZXRBcHBJbmZvKGFwcEluZm8pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyB0aGUgc3BlY2lmaWVkIGtleSBmcm9tIHRoZSBlbnZpcm9ubWVudCBpbmZvcm1hdGlvbi5cbiAgICAgKiBcbiAgICAgKiBUaGlzIHJlbW92ZXMgdGhlIHNwZWNpZmllZCBrZXkgZnJvbSB0aGUgZW52aXJvbm1lbnQgaW5mb3JtYXRpb24gc3RvcmVkIGluIHNlc3Npb25cbiAgICAgKiBzdG9yYWdlLlxuICAgICAqIFxuICAgICAqIEBwYXJhbSBrZXkgVGhlIGtleSB0byByZW1vdmUgZnJvbSB0aGUgZW52aXJvbm1lbnQgaW5mb3JtYXRpb24uXG4gICAgICovXG4gICAgcHJpdmF0ZSByZW1vdmVGcm9tRW52aXJvbm1lbnRJbmZvKGtleTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGVudmlyb25tZW50SW5mbyA9IHRoaXMuZ2V0RW52aXJvbm1lbnRJbmZvKCk7XG4gICAgICAgIGlmIChlbnZpcm9ubWVudEluZm8pIHtcbiAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUga2V5IGZyb20gdGhlIGVudmlyb25tZW50IGluZm9ybWF0aW9uXG4gICAgICAgICAgICBkZWxldGUgZW52aXJvbm1lbnRJbmZvW2tleV07XG4gICAgICAgICAgICAvLyBTYXZlIHRoZSB1cGRhdGVkIGVudmlyb25tZW50IGluZm9ybWF0aW9uIGJhY2sgdG8gc2Vzc2lvbiBzdG9yYWdlXG4gICAgICAgICAgICB0aGlzLnNldEVudmlyb25tZW50SW5mbyhlbnZpcm9ubWVudEluZm8pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyB0aGUgc3BlY2lmaWVkIGtleSBmcm9tIHRoZSB0b2tlbiBpbmZvcm1hdGlvbi5cbiAgICAgKiBcbiAgICAgKiBUaGlzIHJlbW92ZXMgdGhlIHNwZWNpZmllZCBrZXkgZnJvbSB0aGUgdG9rZW4gaW5mb3JtYXRpb24gc3RvcmVkIGluIHNlc3Npb25cbiAgICAgKiBzdG9yYWdlLlxuICAgICAqIFxuICAgICAqIEBwYXJhbSBrZXkgVGhlIGtleSB0byByZW1vdmUgZnJvbSB0aGUgdG9rZW4gaW5mb3JtYXRpb24uXG4gICAgICovXG4gICAgcHJpdmF0ZSByZW1vdmVGcm9tVG9rZW5JbmZvKGtleTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRva2VuSW5mbyA9IHRoaXMuZ2V0VG9rZW5JbmZvKCk7XG4gICAgICAgIGlmICh0b2tlbkluZm8pIHtcbiAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUga2V5IGZyb20gdGhlIHRva2VuIGluZm9ybWF0aW9uXG4gICAgICAgICAgICBkZWxldGUgdG9rZW5JbmZvW2tleV07XG4gICAgICAgICAgICAvLyBTYXZlIHRoZSB1cGRhdGVkIHRva2VuIGluZm9ybWF0aW9uIGJhY2sgdG8gc2Vzc2lvbiBzdG9yYWdlXG4gICAgICAgICAgICB0aGlzLnNldFRva2VuSW5mbyh0b2tlbkluZm8pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0cmlldmVzIHRoZSBvcmdhbml6YXRpb24gaW5mb3JtYXRpb24gZnJvbSBsb2NhbCBzdG9yYWdlLlxuICAgICAqIFxuICAgICAqIEByZXR1cm5zIFRoZSBvcmdhbml6YXRpb24gaW5mb3JtYXRpb24gb2JqZWN0IG9yIG51bGwgaWYgaXQgZG9lc24ndCBleGlzdC5cbiAgICAgKi9cbiAgICBnZXRPcmdJbmZvKCk6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEZyb21TdG9yYWdlKFN0b3JhZ2VUeXBlLkxvY2FsLCBTdG9yYWdlQ29uc3RhbnRzLm9yZ0luZm8pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNhdmVzIHRoZSBvcmdhbml6YXRpb24gaW5mb3JtYXRpb24gdG8gbG9jYWwgc3RvcmFnZS5cbiAgICAgKiBcbiAgICAgKiBAcGFyYW0gb3JnSW5mbyAtIFRoZSBvcmdhbml6YXRpb24gaW5mb3JtYXRpb24gdG8gc3RvcmUuXG4gICAgICovXG4gICAgc2V0T3JnSW5mbyhvcmdJbmZvOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgLy8gdGVtcCBvbmNlIHJlbW92ZSBmcm9tIGRyb3Bkb3duLCB3ZSBjYW4gcmVtb3ZlIHRoaXNcbiAgICAgICAgLy8gaWYgKG9yZ0luZm8uSWQpIHtcbiAgICAgICAgLy8gICAgIHRoaXMuc2V0U2Vzc2lvbihTdG9yYWdlQ29uc3RhbnRzLlRlbmFudElkLCBvcmdJbmZvLklkKTtcbiAgICAgICAgLy8gfSBlbHNlIHtcbiAgICAgICAgLy8gICAgIHRoaXMucmVtb3ZlU2Vzc2lvbihTdG9yYWdlQ29uc3RhbnRzLlRlbmFudElkKTtcbiAgICAgICAgLy8gfVxuXG4gICAgICAgIC8vIFNhdmUgdGhlIG9yZ2FuaXphdGlvbiBpbmZvIHRvIGxvY2FsIHN0b3JhZ2VcbiAgICAgICAgdGhpcy5zZXRUb1N0b3JhZ2UoU3RvcmFnZVR5cGUuTG9jYWwsIFN0b3JhZ2VDb25zdGFudHMub3JnSW5mbywgb3JnSW5mbyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0cmlldmVzIHRoZSBhcHAgaW5mb3JtYXRpb24gZnJvbSBzZXNzaW9uIHN0b3JhZ2UuXG4gICAgICogXG4gICAgICogQHJldHVybnMgVGhlIGFwcCBpbmZvcm1hdGlvbiBvYmplY3Qgb3IgbnVsbCBpZiBpdCBkb2Vzbid0IGV4aXN0LlxuICAgICAqL1xuICAgIGdldEFwcEluZm8oKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RnJvbVN0b3JhZ2UoU3RvcmFnZVR5cGUuU2Vzc2lvbiwgU3RvcmFnZUNvbnN0YW50cy5hcHBJbmZvKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTYXZlcyB0aGUgYXBwIGluZm9ybWF0aW9uIHRvIHNlc3Npb24gc3RvcmFnZS5cbiAgICAgKiBcbiAgICAgKiBAcGFyYW0gYXBwSW5mbyAtIFRoZSBhcHAgaW5mb3JtYXRpb24gdG8gc3RvcmUuXG4gICAgICovXG4gICAgc2V0QXBwSW5mbyhhcHBJbmZvOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgLy8gdGVtcCBvbmNlIHJlbW92ZSBmcm9tIGRyb3Bkb3duLCB3ZSBjYW4gcmVtb3ZlIHRoaXNcbiAgICAgICAgLy8gaWYgKGFwcEluZm8/LklkKSB7XG4gICAgICAgIC8vICAgICB0aGlzLnNldFNlc3Npb24oU3RvcmFnZUNvbnN0YW50cy5BcHBJZCwgYXBwSW5mby5JZCk7XG4gICAgICAgIC8vIH0gZWxzZSB7XG4gICAgICAgIC8vICAgICB0aGlzLnJlbW92ZVNlc3Npb24oU3RvcmFnZUNvbnN0YW50cy5BcHBJZCk7XG4gICAgICAgIC8vIH1cblxuICAgICAgICAvLyBpZiAoYXBwSW5mbz8uQXBwTmFtZSkge1xuICAgICAgICAvLyAgICAgdGhpcy5zZXRTZXNzaW9uKFN0b3JhZ2VDb25zdGFudHMuYXBwbGljYXRpb25Db2RlLCBhcHBJbmZvLkFwcE5hbWUpO1xuICAgICAgICAvLyB9IGVsc2Uge1xuICAgICAgICAvLyAgICAgdGhpcy5yZW1vdmVTZXNzaW9uKFN0b3JhZ2VDb25zdGFudHMuYXBwbGljYXRpb25Db2RlKTtcbiAgICAgICAgLy8gfVxuXG4gICAgICAgIC8vIFNhdmUgdGhlIGFwcCBpbmZvIHRvIHNlc3Npb24gc3RvcmFnZVxuICAgICAgICB0aGlzLnNldFRvU3RvcmFnZShTdG9yYWdlVHlwZS5TZXNzaW9uLCBTdG9yYWdlQ29uc3RhbnRzLmFwcEluZm8sIGFwcEluZm8pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlcyB0aGUgZW52aXJvbm1lbnQgaW5mb3JtYXRpb24gZnJvbSBzZXNzaW9uIHN0b3JhZ2UuXG4gICAgICogXG4gICAgICogQHJldHVybnMgVGhlIGVudmlyb25tZW50IGluZm9ybWF0aW9uIG9iamVjdCBvciBudWxsIGlmIGl0IGRvZXNuJ3QgZXhpc3QuXG4gICAgICovXG4gICAgZ2V0RW52aXJvbm1lbnRJbmZvKCk6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEZyb21TdG9yYWdlKFN0b3JhZ2VUeXBlLlNlc3Npb24sIFN0b3JhZ2VDb25zdGFudHMuZW52aXJvbm1lbnRJbmZvKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTYXZlcyB0aGUgZW52aXJvbm1lbnQgaW5mb3JtYXRpb24gdG8gc2Vzc2lvbiBzdG9yYWdlLlxuICAgICAqIFxuICAgICAqIEBwYXJhbSBlbnZJbmZvIC0gVGhlIGVudmlyb25tZW50IGluZm9ybWF0aW9uIHRvIHN0b3JlLlxuICAgICAqL1xuICAgIHNldEVudmlyb25tZW50SW5mbyhlbnZJbmZvOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgLy8gU2F2ZSB0aGUgZW52aXJvbm1lbnQgaW5mbyB0byBzZXNzaW9uIHN0b3JhZ2VcbiAgICAgICAgdGhpcy5zZXRUb1N0b3JhZ2UoU3RvcmFnZVR5cGUuU2Vzc2lvbiwgU3RvcmFnZUNvbnN0YW50cy5lbnZpcm9ubWVudEluZm8sIGVudkluZm8pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlcyB0aGUgdG9rZW4gaW5mb3JtYXRpb24gZnJvbSBzZXNzaW9uIHN0b3JhZ2UuXG4gICAgICogXG4gICAgICogQHJldHVybnMgVGhlIHRva2VuIGluZm9ybWF0aW9uIG9iamVjdCBvciBudWxsIGlmIGl0IGRvZXNuJ3QgZXhpc3QuXG4gICAgICovXG4gICAgZ2V0VG9rZW5JbmZvKCk6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEZyb21TdG9yYWdlKFN0b3JhZ2VUeXBlLkxvY2FsLCBTdG9yYWdlQ29uc3RhbnRzLnRva2VuSW5mbyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2F2ZXMgdGhlIHRva2VuIGluZm9ybWF0aW9uIHRvIHNlc3Npb24gc3RvcmFnZS5cbiAgICAgKiBcbiAgICAgKiBAcGFyYW0gdG9rZW5JbmZvIC0gVGhlIHRva2VuIGluZm9ybWF0aW9uIHRvIHN0b3JlLlxuICAgICAqL1xuICAgIHNldFRva2VuSW5mbyh0b2tlbkluZm86IGFueSk6IHZvaWQge1xuICAgICAgICAvLyB0ZW1wIG9uY2UgcmVtb3ZlIGZyb20gZHJvcGRvd24sIHdlIGNhbiByZW1vdmUgdGhpc1xuICAgICAgICAvLyBpZiAodG9rZW5JbmZvPy50b2tlbikge1xuICAgICAgICAvLyAgICAgdGhpcy5zZXRTZXNzaW9uKFN0b3JhZ2VDb25zdGFudHMudG9rZW4sIHRva2VuSW5mbz8udG9rZW4pO1xuICAgICAgICAvLyB9IGVsc2Uge1xuICAgICAgICAvLyAgICAgdGhpcy5yZW1vdmVTZXNzaW9uKFN0b3JhZ2VDb25zdGFudHMudG9rZW4pO1xuICAgICAgICAvLyB9XG5cbiAgICAgICAgLy8gU2F2ZSB0aGUgdG9rZW4gaW5mbyB0byBzZXNzaW9uIHN0b3JhZ2VcbiAgICAgICAgdGhpcy5zZXRUb1N0b3JhZ2UoU3RvcmFnZVR5cGUuTG9jYWwsIFN0b3JhZ2VDb25zdGFudHMudG9rZW5JbmZvLCB0b2tlbkluZm8pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlcyB0aGUgdXNlciBpbmZvcm1hdGlvbiBmcm9tIGxvY2FsIHN0b3JhZ2UuXG4gICAgICogXG4gICAgICogQHJldHVybnMgVGhlIHVzZXIgaW5mb3JtYXRpb24gb2JqZWN0IG9yIG51bGwgaWYgaXQgZG9lc24ndCBleGlzdC5cbiAgICAgKi9cbiAgICBnZXRVc2VySW5mbygpOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRGcm9tU3RvcmFnZShTdG9yYWdlVHlwZS5Mb2NhbCwgU3RvcmFnZUNvbnN0YW50cy51c2VySW5mbyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgdXNlciBpbmZvcm1hdGlvbiBpbiBsb2NhbCBzdG9yYWdlLlxuICAgICAqIFxuICAgICAqIEBwYXJhbSB1c2VySW5mbyBUaGUgdXNlciBpbmZvcm1hdGlvbiB0byBzdG9yZS5cbiAgICAgKi9cbiAgICBzZXRVc2VySW5mbyh1c2VySW5mbzogYW55KTogdm9pZCB7XG4gICAgICAgIC8vIFNhdmUgdGhlIHVzZXIgaW5mbyB0byBsb2NhbCBzdG9yYWdlXG4gICAgICAgIHRoaXMuc2V0VG9TdG9yYWdlKFN0b3JhZ2VUeXBlLkxvY2FsLCBTdG9yYWdlQ29uc3RhbnRzLnVzZXJJbmZvLCB1c2VySW5mbyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBhIGtleS12YWx1ZSBwYWlyIGluIGxvY2FsIHN0b3JhZ2UuXG4gICAgICogXG4gICAgICogQHBhcmFtIGtleSBUaGUga2V5IHRvIHN0b3JlIHRoZSB2YWx1ZSB1bmRlci5cbiAgICAgKiBAcGFyYW0gZGF0YSBUaGUgdmFsdWUgdG8gc3RvcmUuXG4gICAgICovXG4gICAgc2V0TG9jYWwoa2V5OiBzdHJpbmcsIGRhdGE6IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLnNldFRvU3RvcmFnZShTdG9yYWdlVHlwZS5Mb2NhbCwga2V5LCBkYXRhKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXRyaWV2ZXMgYSB2YWx1ZSBmcm9tIGxvY2FsIHN0b3JhZ2UgYnkga2V5LlxuICAgICAqIFxuICAgICAqIEBwYXJhbSBrZXkgVGhlIGtleSBhc3NvY2lhdGVkIHdpdGggdGhlIHZhbHVlIHRvIHJldHJpZXZlLlxuICAgICAqIEByZXR1cm5zIFRoZSB2YWx1ZSBzdG9yZWQgaW4gbG9jYWwgc3RvcmFnZSwgb3IgbnVsbCBpZiBpdCBkb2Vzbid0IGV4aXN0LlxuICAgICAqL1xuICAgIGdldExvY2FsKGtleTogc3RyaW5nKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RnJvbVN0b3JhZ2UoU3RvcmFnZVR5cGUuTG9jYWwsIGtleSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBhIGtleS12YWx1ZSBwYWlyIGZyb20gbG9jYWwgc3RvcmFnZS5cbiAgICAgKiBcbiAgICAgKiBAcGFyYW0ga2V5IFRoZSBrZXkgYXNzb2NpYXRlZCB3aXRoIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gICAgICovXG4gICAgcmVtb3ZlTG9jYWwoa2V5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgLy8gUmVtb3ZlIHRoZSBrZXkgZnJvbSBsb2NhbCBzdG9yYWdlXG4gICAgICAgIHRoaXMucmVtb3ZlRnJvbVN0b3JhZ2UoU3RvcmFnZVR5cGUuTG9jYWwsIGtleSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2xlYXJzIGFsbCBsb2NhbCBzdG9yYWdlIGRhdGEuXG4gICAgICovXG4gICAgY2xlYXJMb2NhbCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jbGVhclN0b3JhZ2UoU3RvcmFnZVR5cGUuTG9jYWwpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgYSBrZXktdmFsdWUgcGFpciBpbiBzZXNzaW9uIHN0b3JhZ2UuXG4gICAgICogXG4gICAgICogQHBhcmFtIGtleSBUaGUga2V5IHRvIHN0b3JlIHRoZSB2YWx1ZSB1bmRlci5cbiAgICAgKiBAcGFyYW0gZGF0YSBUaGUgdmFsdWUgdG8gc3RvcmUuXG4gICAgICovXG4gICAgc2V0U2Vzc2lvbihrZXk6IHN0cmluZywgZGF0YTogYW55KTogdm9pZCB7XG4gICAgICAgIC8vIFNhdmUgZGF0YSB0byBzZXNzaW9uIHN0b3JhZ2UgdW5kZXIgdGhlIHNwZWNpZmllZCBrZXlcbiAgICAgICAgdGhpcy5zZXRUb1N0b3JhZ2UoU3RvcmFnZVR5cGUuU2Vzc2lvbiwga2V5LCBkYXRhKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXRyaWV2ZXMgYSB2YWx1ZSBmcm9tIHNlc3Npb24gc3RvcmFnZSBieSBrZXkuXG4gICAgICogXG4gICAgICogQHBhcmFtIGtleSBUaGUga2V5IGFzc29jaWF0ZWQgd2l0aCB0aGUgdmFsdWUgdG8gcmV0cmlldmUuXG4gICAgICogQHJldHVybnMgVGhlIHZhbHVlIHN0b3JlZCBpbiBzZXNzaW9uIHN0b3JhZ2UsIG9yIG51bGwgaWYgaXQgZG9lc24ndCBleGlzdC5cbiAgICAgKi9cbiAgICBnZXRTZXNzaW9uKGtleTogc3RyaW5nKTogYW55IHtcbiAgICAgICAgLy8gUmV0cmlldmUgdGhlIHZhbHVlIGZyb20gc2Vzc2lvbiBzdG9yYWdlXG4gICAgICAgIHJldHVybiB0aGlzLmdldEZyb21TdG9yYWdlKFN0b3JhZ2VUeXBlLlNlc3Npb24sIGtleSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBhIGtleS12YWx1ZSBwYWlyIGZyb20gc2Vzc2lvbiBzdG9yYWdlLlxuICAgICAqIFxuICAgICAqIEBwYXJhbSBrZXkgVGhlIGtleSBhc3NvY2lhdGVkIHdpdGggdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAgICAgKi9cbiAgICByZW1vdmVTZXNzaW9uKGtleTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIC8vIFJlbW92ZSB0aGUga2V5IGZyb20gc2Vzc2lvbiBzdG9yYWdlXG4gICAgICAgIHRoaXMucmVtb3ZlRnJvbVN0b3JhZ2UoU3RvcmFnZVR5cGUuU2Vzc2lvbiwga2V5KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbGVhcnMgYWxsIHNlc3Npb24gc3RvcmFnZSBkYXRhLlxuICAgICAqL1xuICAgIGNsZWFyU2Vzc2lvbigpOiB2b2lkIHtcbiAgICAgICAgLy8gUmVtb3ZlIGFsbCBrZXktdmFsdWUgcGFpcnMgZnJvbSBzZXNzaW9uIHN0b3JhZ2VcbiAgICAgICAgdGhpcy5jbGVhclN0b3JhZ2UoU3RvcmFnZVR5cGUuU2Vzc2lvbik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2xlYXJzIGFsbCBhdXRoZW50aWNhdGlvbi1yZWxhdGVkIGRhdGEgZnJvbSBsb2NhbCBhbmQgc2Vzc2lvbiBzdG9yYWdlLlxuICAgICAqIFxuICAgICAqIFRoaXMgbWV0aG9kIGlzIHR5cGljYWxseSB1c2VkIGFmdGVyIGEgdXNlciBsb2dzIG91dC5cbiAgICAgKi9cbiAgICBjbGVhckF1dGgoKTogdm9pZCB7XG4gICAgICAgIC8vIFJlbW92ZSB1c2VyIGluZm8gZnJvbSBsb2NhbCBzdG9yYWdlXG4gICAgICAgIHRoaXMucmVtb3ZlRnJvbVN0b3JhZ2UoU3RvcmFnZVR5cGUuTG9jYWwsIFN0b3JhZ2VDb25zdGFudHMudXNlckluZm8pO1xuICAgICAgICAvLyBSZW1vdmUgdG9rZW4gaW5mbyBmcm9tIHNlc3Npb24gc3RvcmFnZVxuICAgICAgICB0aGlzLnJlbW92ZUZyb21TdG9yYWdlKFN0b3JhZ2VUeXBlLkxvY2FsLCBTdG9yYWdlQ29uc3RhbnRzLnRva2VuSW5mbyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2VuZXJpYyBnZXR0ZXIgbWV0aG9kIGZvciByZXRyaWV2aW5nIGRhdGEgZnJvbSBlaXRoZXIgbG9jYWwgb3Igc2Vzc2lvbiBzdG9yYWdlLlxuICAgICAqIFxuICAgICAqIEBwYXJhbSBzdG9yYWdlIFRoZSB0eXBlIG9mIHN0b3JhZ2UgdG8gcmV0cmlldmUgZnJvbS5cbiAgICAgKiBAcGFyYW0ga2V5IFRoZSBrZXkgYXNzb2NpYXRlZCB3aXRoIHRoZSBkYXRhIHRvIHJldHJpZXZlLlxuICAgICAqIEByZXR1cm5zIFRoZSByZXRyaWV2ZWQgZGF0YSwgZGVzZXJpYWxpemVkIGZyb20gSlNPTiBpZiBpdCB3YXMgc3RvcmVkIGFzIGEgc3RyaW5nLlxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0RnJvbVN0b3JhZ2Uoc3RvcmFnZTogU3RvcmFnZVR5cGUsIGtleTogc3RyaW5nKTogYW55IHtcbiAgICAgICAgLy8gUmV0cmlldmUgdGhlIGRhdGEgZnJvbSB0aGUgc3BlY2lmaWVkIHN0b3JhZ2VcbiAgICAgICAgY29uc3QgZGF0YSA9IHN0b3JhZ2UgPT09IFN0b3JhZ2VUeXBlLkxvY2FsXG4gICAgICAgICAgICA/IHRoaXMuX2xvY2FsU3RvcmFnZVNlcnZpY2UuZ2V0TG9jYWxTdG9yYWdlKGtleSlcbiAgICAgICAgICAgIDogdGhpcy5fc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLmdldFNlc3Npb25TdG9yYWdlKGtleSk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIEF0dGVtcHQgdG8gcGFyc2UgdGhlIGRhdGEgYXMgSlNPTlxuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJyA/IEpTT04ucGFyc2UoZGF0YSkgOiBkYXRhO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAvLyBJZiB0aGUgZGF0YSBjYW5ub3QgYmUgcGFyc2VkLCByZXR1cm4gaXQgYXMgaXNcbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBhIGtleS12YWx1ZSBwYWlyIGluIHRoZSBzcGVjaWZpZWQgc3RvcmFnZSB0eXBlLlxuICAgICAqIFxuICAgICAqIEBwYXJhbSBzdG9yYWdlIFRoZSB0eXBlIG9mIHN0b3JhZ2UgdG8gdXNlIChsb2NhbCBvciBzZXNzaW9uKS5cbiAgICAgKiBAcGFyYW0ga2V5IFRoZSBrZXkgdW5kZXIgd2hpY2ggdGhlIGRhdGEgc2hvdWxkIGJlIHN0b3JlZC5cbiAgICAgKiBAcGFyYW0gZGF0YSBUaGUgZGF0YSB0byBzdG9yZS5cbiAgICAgKi9cbiAgICBwcml2YXRlIHNldFRvU3RvcmFnZShzdG9yYWdlOiBTdG9yYWdlVHlwZSwga2V5OiBzdHJpbmcsIGRhdGE6IGFueSk6IHZvaWQge1xuICAgICAgICAvLyBDaGVjayBpZiB0aGUgc3RvcmFnZSB0eXBlIGlzIGxvY2FsXG4gICAgICAgIGlmIChzdG9yYWdlID09PSBTdG9yYWdlVHlwZS5Mb2NhbCkge1xuICAgICAgICAgICAgLy8gU2V0IHRoZSBkYXRhIGluIGxvY2FsIHN0b3JhZ2VcbiAgICAgICAgICAgIHRoaXMuX2xvY2FsU3RvcmFnZVNlcnZpY2Uuc2V0TG9jYWxTdG9yYWdlKGtleSwgZGF0YSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBPdGhlcndpc2UsIHNldCB0aGUgZGF0YSBpbiBzZXNzaW9uIHN0b3JhZ2VcbiAgICAgICAgICAgIHRoaXMuX3Nlc3Npb25TdG9yYWdlU2VydmljZS5zZXRTZXNzaW9uU3RvcmFnZShrZXksIGRhdGEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBhIGtleS12YWx1ZSBwYWlyIGZyb20gdGhlIHNwZWNpZmllZCBzdG9yYWdlIHR5cGUuXG4gICAgICogXG4gICAgICogVGhpcyBtZXRob2QgcmVtb3ZlcyB0aGUgZ2l2ZW4ga2V5IGZyb20gZWl0aGVyIGxvY2FsIG9yIHNlc3Npb24gc3RvcmFnZSBcbiAgICAgKiBiYXNlZCBvbiB0aGUgc3BlY2lmaWVkIHN0b3JhZ2UgdHlwZS5cbiAgICAgKiBcbiAgICAgKiBAcGFyYW0gc3RvcmFnZSBUaGUgdHlwZSBvZiBzdG9yYWdlIHRvIHJlbW92ZSBmcm9tIChsb2NhbCBvciBzZXNzaW9uKS5cbiAgICAgKiBAcGFyYW0ga2V5IFRoZSBrZXkgYXNzb2NpYXRlZCB3aXRoIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZW1vdmVGcm9tU3RvcmFnZShzdG9yYWdlOiBTdG9yYWdlVHlwZSwga2V5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgaWYgKHN0b3JhZ2UgPT09IFN0b3JhZ2VUeXBlLkxvY2FsKSB7XG4gICAgICAgICAgICAvLyBSZW1vdmUgdGhlIGtleSBmcm9tIGxvY2FsIHN0b3JhZ2VcbiAgICAgICAgICAgIHRoaXMuX2xvY2FsU3RvcmFnZVNlcnZpY2UucmVtb3ZlTG9jYWxTdG9yYWdlKGtleSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBSZW1vdmUgdGhlIGtleSBmcm9tIHNlc3Npb24gc3RvcmFnZVxuICAgICAgICAgICAgdGhpcy5fc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLnJlbW92ZVNlc3Npb25TdG9yYWdlKGtleSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbGVhcnMgYWxsIGtleS12YWx1ZSBwYWlycyBmcm9tIHRoZSBzcGVjaWZpZWQgc3RvcmFnZSB0eXBlLlxuICAgICAqIFxuICAgICAqIFRoaXMgbWV0aG9kIGNsZWFycyBhbGwga2V5LXZhbHVlIHBhaXJzIGZyb20gZWl0aGVyIGxvY2FsIG9yIHNlc3Npb24gc3RvcmFnZVxuICAgICAqIGJhc2VkIG9uIHRoZSBzcGVjaWZpZWQgc3RvcmFnZSB0eXBlLlxuICAgICAqIFxuICAgICAqIEBwYXJhbSBzdG9yYWdlIFRoZSB0eXBlIG9mIHN0b3JhZ2UgdG8gY2xlYXIgKGxvY2FsIG9yIHNlc3Npb24pLlxuICAgICAqL1xuICAgIHByaXZhdGUgY2xlYXJTdG9yYWdlKHN0b3JhZ2U6IFN0b3JhZ2VUeXBlKTogdm9pZCB7XG4gICAgICAgIGlmIChzdG9yYWdlID09PSBTdG9yYWdlVHlwZS5Mb2NhbCkge1xuICAgICAgICAgICAgLy8gQ2xlYXIgbG9jYWwgc3RvcmFnZVxuICAgICAgICAgICAgdGhpcy5fbG9jYWxTdG9yYWdlU2VydmljZS5jbGVhckxvY2FsU3RvcmFnZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gQ2xlYXIgc2Vzc2lvbiBzdG9yYWdlXG4gICAgICAgICAgICB0aGlzLl9zZXNzaW9uU3RvcmFnZVNlcnZpY2UuY2xlYXJTZXNzaW9uU3RvcmFnZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBhIHNjcmVlbiBjb250ZXh0IHdpdGggdGhlIGdpdmVuIGtleSBhbmQgZGF0YS5cbiAgICAgKiBcbiAgICAgKiBUaGUgc2NyZWVuIGNvbnRleHQgaXMgYSBjb2xsZWN0aW9uIG9mIGtleS12YWx1ZSBwYWlycyB0aGF0IGFyZSBzdG9yZWQgaW4gc2Vzc2lvbiBzdG9yYWdlLlxuICAgICAqIFRoZSBrZXkgaXMgdXNlZCB0byBpZGVudGlmeSB0aGUgc2NyZWVuIGNvbnRleHQgYW5kIHRoZSBkYXRhIGlzIHRoZSB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggdGhlIGtleS5cbiAgICAgKiBcbiAgICAgKiBAcGFyYW0ga2V5IFRoZSBrZXkgZm9yIHRoZSBzY3JlZW4gY29udGV4dC5cbiAgICAgKiBAcGFyYW0gZGF0YSBUaGUgZGF0YSB0byBzdG9yZSBpbiB0aGUgc2NyZWVuIGNvbnRleHQuXG4gICAgICovXG4gICAgcHVibGljIGFkZFNjcmVlbkNvbnRleHQoa2V5OiBzdHJpbmcsIGRhdGE6IGFueSk6IHZvaWQge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKCFrZXkgfHwgZGF0YSA9PSBudWxsKSByZXR1cm47XG5cbiAgICAgICAgICAgIGNvbnN0IHNjcmVlbkNvbnRleHQgPSB0aGlzLmdldFNlc3Npb24oU3RvcmFnZUNvbnN0YW50cy5zY3JlZW5Db250ZXh0KSB8fCB7fTtcblxuICAgICAgICAgICAgaWYgKCFzY3JlZW5Db250ZXh0W2tleV0pIHtcbiAgICAgICAgICAgICAgICAvLyBJbml0aWFsaXplIHRoZSBrZXkgd2l0aCBhbiBlbXB0eSBhcnJheSBpZiBpdCBkb2Vzbid0IGV4aXN0XG4gICAgICAgICAgICAgICAgc2NyZWVuQ29udGV4dFtrZXldID0gW107XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHNjcmVlbkNvbnRleHRba2V5XS5sZW5ndGggPj0gNSkge1xuICAgICAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgb2xkZXN0IGRhdGEgaWYgdGhlIGFycmF5IGV4Y2VlZHMgNSBlbGVtZW50c1xuICAgICAgICAgICAgICAgIHNjcmVlbkNvbnRleHRba2V5XS5zaGlmdCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBBZGQgdGhlIGRhdGEgdG8gdGhlIGV4aXN0aW5nIGFycmF5XG4gICAgICAgICAgICBzY3JlZW5Db250ZXh0W2tleV0ucHVzaChkYXRhKTtcbiAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgc2NyZWVuIGNvbnRleHQgd2l0aCB0aGUgbmV3IGRhdGFcbiAgICAgICAgICAgIHRoaXMuc2V0U2Vzc2lvbihTdG9yYWdlQ29uc3RhbnRzLnNjcmVlbkNvbnRleHQsIHNjcmVlbkNvbnRleHQpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgYWRkaW5nIHNjcmVlbiBjb250ZXh0OicsIGVycm9yKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlcyB0aGUgbGF0ZXN0IHNjcmVlbiBjb250ZXh0IGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBrZXkuXG4gICAgICogXG4gICAgICogVGhlIHNjcmVlbiBjb250ZXh0IGlzIGEgY29sbGVjdGlvbiBvZiBrZXktdmFsdWUgcGFpcnMgdGhhdCBhcmUgc3RvcmVkIGluIHNlc3Npb24gc3RvcmFnZS5cbiAgICAgKiBUaGUga2V5IGlzIHVzZWQgdG8gaWRlbnRpZnkgdGhlIHNjcmVlbiBjb250ZXh0IGFuZCB0aGUgZGF0YSBpcyB0aGUgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBrZXkuXG4gICAgICogXG4gICAgICogQHBhcmFtIGtleSBUaGUga2V5IGZvciB0aGUgc2NyZWVuIGNvbnRleHQuXG4gICAgICogQHJldHVybnMgVGhlIGxhdGVzdCBzY3JlZW4gY29udGV4dCBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGUga2V5LCBvciBudWxsIGlmIHRoZSBrZXkgaXMgbm90IGZvdW5kLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRTY3JlZW5Db250ZXh0KGtleTogc3RyaW5nKTogYW55IHwgbnVsbCB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoIWtleSkgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgICAgIGNvbnN0IHNjcmVlbkNvbnRleHQgPSB0aGlzLmdldFNlc3Npb24oU3RvcmFnZUNvbnN0YW50cy5zY3JlZW5Db250ZXh0KTtcbiAgICAgICAgICAgIGlmICghc2NyZWVuQ29udGV4dCB8fCAhc2NyZWVuQ29udGV4dFtrZXldIHx8IHNjcmVlbkNvbnRleHRba2V5XS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gUmV0dXJuIHRoZSBsYXRlc3Qgc2NyZWVuIGNvbnRleHQgZGF0YSAoTElGTylcbiAgICAgICAgICAgIHJldHVybiBzY3JlZW5Db250ZXh0W2tleV1bc2NyZWVuQ29udGV4dFtrZXldLmxlbmd0aCAtIDFdO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZ2V0dGluZyBzY3JlZW4gY29udGV4dDonLCBlcnJvcik7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgdGhlIGxhdGVzdCBzY3JlZW4gY29udGV4dCBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4ga2V5IGZyb20gc2Vzc2lvbiBzdG9yYWdlLlxuICAgICAqIFxuICAgICAqIFRoZSBzY3JlZW4gY29udGV4dCBpcyBhIGNvbGxlY3Rpb24gb2Yga2V5LXZhbHVlIHBhaXJzIHRoYXQgYXJlIHN0b3JlZCBpbiBzZXNzaW9uIHN0b3JhZ2UuXG4gICAgICogVGhlIGtleSBpcyB1c2VkIHRvIGlkZW50aWZ5IHRoZSBzY3JlZW4gY29udGV4dCBhbmQgdGhlIGRhdGEgaXMgdGhlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGUga2V5LlxuICAgICAqIFxuICAgICAqIEBwYXJhbSBrZXkgVGhlIGtleSBmb3IgdGhlIHNjcmVlbiBjb250ZXh0LlxuICAgICAqIEByZXR1cm5zIFRoZSByZW1vdmVkIHNjcmVlbiBjb250ZXh0IGRhdGEsIG9yIG51bGwgaWYgdGhlIGtleSBpcyBub3QgZm91bmQgb3IgdGhlIGRhdGEgaXMgbm90IHByZXNlbnQuXG4gICAgICovXG4gICAgcHVibGljIGNsZWFuU2NyZWVuQ29udGV4dChrZXk6IHN0cmluZyk6IGFueSB8IG51bGwge1xuICAgICAgICB0cnkgeyAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKCFrZXkpIHJldHVybiBudWxsO1xuXG4gICAgICAgICAgICBjb25zdCBzY3JlZW5Db250ZXh0ID0gdGhpcy5nZXRTZXNzaW9uKFN0b3JhZ2VDb25zdGFudHMuc2NyZWVuQ29udGV4dCk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmICghc2NyZWVuQ29udGV4dCB8fCAhc2NyZWVuQ29udGV4dFtrZXldIHx8IHNjcmVlbkNvbnRleHRba2V5XS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcmVtb3ZlZERhdGEgPSBzY3JlZW5Db250ZXh0W2tleV0ucG9wKCk7IC8vIFJlbW92ZSBsYXRlc3QgKExJRk8pXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIEF1dG8tY2xlYW51cDogUmVtb3ZlIGtleSBpZiBhcnJheSBiZWNvbWVzIGVtcHR5XG4gICAgICAgICAgICBpZiAoc2NyZWVuQ29udGV4dFtrZXldLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBzY3JlZW5Db250ZXh0W2tleV07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuc2V0U2Vzc2lvbihTdG9yYWdlQ29uc3RhbnRzLnNjcmVlbkNvbnRleHQsIHNjcmVlbkNvbnRleHQpO1xuICAgICAgICAgICAgcmV0dXJuIHJlbW92ZWREYXRhO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgY2xlYW5pbmcgc2NyZWVuIGNvbnRleHQ6JywgZXJyb3IpO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9XG59Il19
|
|
@@ -81,4 +81,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
81
81
|
providedIn: 'root'
|
|
82
82
|
}]
|
|
83
83
|
}] });
|
|
84
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
84
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiLXNkay5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFiLXNkay9zcmMvbGliL3RhYi1zZGsuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNoRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDNUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDckQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFDOztBQUtsRCxNQUFNLE9BQU8sTUFBTTtJQUNWLE1BQU0sQ0FBQyxHQUFHLENBQWE7SUFDdkIsTUFBTSxD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QUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDM0IsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDNUIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDOUIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDL0IsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDM0IsQ0FBQzt3R0E5RFUsTUFBTTs0R0FBTixNQUFNLGNBRkwsTUFBTTs7NEZBRVAsTUFBTTtrQkFIbEIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWV0YWRhdGFIZWxwZXIgfSBmcm9tICdAdGVjaGV4dGVuc29yL3RhYi1jb3JlLXV0aWxpdHknO1xuaW1wb3J0IHsgVWlTZXJ2aWNlIH0gZnJvbSAnLi91aS91aS5zZXJ2aWNlJztcbmltcG9ydCB7IEF1dGhVdGlsU2VydmljZSB9IGZyb20gJy4vYXV0aC9hdXRoLnNlcnZpY2UnO1xuaW1wb3J0IHsgRm9ybVNlcnZpY2UgfSBmcm9tICcuL3VpL2Zvcm0uc2VydmljZSc7XG5pbXBvcnQgeyBUcmFuc2l0aW9uU2VydmljZSB9IGZyb20gJy4vd29ya2Zsb3cvdHJhbnNpdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IEFwcFNlcnZpY2UgfSBmcm9tICcuL2FwcC9hcHAuc2VydmljZSc7XG5pbXBvcnQgeyBGaWxlU2VydmljZSB9IGZyb20gJy4vYXBwL2ZpbGUuc2VydmljZSc7XG5pbXBvcnQgeyBSZXBvcnRTZXJ2aWNlIH0gZnJvbSAnLi9hcHAvcmVwb3J0LnNlcnZpY2UnO1xuaW1wb3J0IHsgUmVsZWFzZVNlcnZpY2UgfSBmcm9tICcuL2FwcC9yZWxlYXNlLnNlcnZpY2UnO1xuaW1wb3J0IHsgQW5hbHl0aWNzU2VydmljZSB9IGZyb20gJy4vYXBwL2FuYWx5dGljcy5zZXJ2aWNlJztcbmltcG9ydCB7IFRyYW5zbGF0b3JTZXJ2aWNlIH0gZnJvbSAnLi9hcHAvdHJhbnNsYXRvci5zZXJ2aWNlJztcbmltcG9ydCB7IENydWRTZXJ2aWNlIH0gZnJvbSAnLi9jcnVkL2NydWQuc2VydmljZSc7XG5pbXBvcnQgeyBIdHRwU2VydmljZSB9IGZyb20gJy4vaHR0cC9odHRwLnNlcnZpY2UnO1xuaW1wb3J0IHsgU3RvcmVTZXJ2aWNlIH0gZnJvbSAnLi9zdG9yZS9zdG9yZS5zZXJ2aWNlJztcbmltcG9ydCB7IFV0aWxTZXJ2aWNlIH0gZnJvbSAnLi91dGlsL3V0aWwuc2VydmljZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFRhYlNkayB7XG4gIHB1YmxpYyBzdGF0aWMgYXBwOiBBcHBTZXJ2aWNlO1xuICBwdWJsaWMgc3RhdGljIGF1dGg6IEF1dGhVdGlsU2VydmljZTtcbiAgcHVibGljIHN0YXRpYyB1aTogVWlTZXJ2aWNlO1xuICBwdWJsaWMgc3RhdGljIGZvcm06IEZvcm1TZXJ2aWNlO1xuICBwdWJsaWMgc3RhdGljIHRyYW5zaXRpb246IFRyYW5zaXRpb25TZXJ2aWNlO1xuICBwdWJsaWMgc3RhdGljIG1ldGFkYXRhVXRpbHM6IE1ldGFkYXRhSGVscGVyO1xuICBwdWJsaWMgc3RhdGljIGZpbGU6IEZpbGVTZXJ2aWNlO1xuICBwdWJsaWMgc3RhdGljIHJlcG9ydDogUmVwb3J0U2VydmljZTtcbiAgcHVibGljIHN0YXRpYyByZWxlYXNlOiBSZWxlYXNlU2VydmljZTtcbiAgcHVibGljIHN0YXRpYyBhbmFseXRpY3M6IEFuYWx5dGljc1NlcnZpY2U7XG4gIHB1YmxpYyBzdGF0aWMgdHJhbnNsYXRvcjogVHJhbnNsYXRvclNlcnZpY2U7XG4gIHB1YmxpYyBzdGF0aWMgY3J1ZDogQ3J1ZFNlcnZpY2U7XG4gIHB1YmxpYyBzdGF0aWMgaHR0cDogSHR0cFNlcnZpY2U7XG4gIHB1YmxpYyBzdGF0aWMgc3RvcmU6IFN0b3JlU2VydmljZTtcbiAgcHVibGljIHN0YXRpYyB1dGlsOiBhbnk7XG5cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSB0aGUgU0RLIHdpdGggbmVjZXNzYXJ5IHNlcnZpY2VzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGluaXQoaW5qZWN0b3I6IEluamVjdG9yLCBjb250ZXh0OiBhbnkpOiB2b2lkIHtcbiAgICAvLyBFeHBvc2UgdG8gd2luZG93IGZvciBnbG9iYWwgYWNjZXNzIGlmIG5lZWRlZFxuICAgICh3aW5kb3cgYXMgYW55KS5UYWJTZGsgPSBUYWJTZGs7XG5cbiAgICAvLyBJbml0aWFsaXplIHNlcnZpY2VzXG4gICAgdGhpcy5hcHAgPSBpbmplY3Rvci5nZXQoQXBwU2VydmljZSk7XG4gICAgdGhpcy5hdXRoID0gaW5qZWN0b3IuZ2V0KEF1dGhVdGlsU2VydmljZSk7XG4gICAgdGhpcy51aSA9IGluamVjdG9yLmdldChVaVNlcnZpY2UpO1xuICAgIHRoaXMuZm9ybSA9IGluamVjdG9yLmdldChGb3JtU2VydmljZSk7XG4gICAgdGhpcy50cmFuc2l0aW9uID0gaW5qZWN0b3IuZ2V0KFRyYW5zaXRpb25TZXJ2aWNlKTtcbiAgICB0aGlzLm1ldGFkYXRhVXRpbHMgPSBpbmplY3Rvci5nZXQoTWV0YWRhdGFIZWxwZXIpO1xuICAgIHRoaXMuZmlsZSA9IGluamVjdG9yLmdldChGaWxlU2VydmljZSk7XG4gICAgdGhpcy5yZXBvcnQgPSBpbmplY3Rvci5nZXQoUmVwb3J0U2VydmljZSk7XG4gICAgdGhpcy5yZWxlYXNlID0gaW5qZWN0b3IuZ2V0KFJlbGVhc2VTZXJ2aWNlKTtcbiAgICB0aGlzLmFuYWx5dGljcyA9IGluamVjdG9yLmdldChBbmFseXRpY3NTZXJ2aWNlKTtcbiAgICB0aGlzLnRyYW5zbGF0b3IgPSBpbmplY3Rvci5nZXQoVHJhbnNsYXRvclNlcnZpY2UpO1xuICAgIHRoaXMuY3J1ZCA9IGluamVjdG9yLmdldChDcnVkU2VydmljZSk7XG4gICAgdGhpcy5odHRwID0gaW5qZWN0b3IuZ2V0KEh0dHBTZXJ2aWNlKTtcbiAgICB0aGlzLnN0b3JlID0gaW5qZWN0b3IuZ2V0KFN0b3JlU2VydmljZSk7XG5cbiAgICAvLyBJbml0aWFsaXplIHV0aWwgc2VydmljZSB3aXRoIGNvbnRleHRcbiAgICBjb25zdCB1dGlsU2VydmljZSA9IGluamVjdG9yLmdldChVdGlsU2VydmljZSk7XG4gICAgdGhpcy51dGlsID0gdXRpbFNlcnZpY2UuaW5pdChjb250ZXh0KTtcblxuICAgIC8vIEZyZWV6ZSB0aGUgZ2xvYmFsIG9iamVjdCB0byBwcmV2ZW50IG1vZGlmaWNhdGlvbnNcbiAgICBPYmplY3QuZnJlZXplKHRoaXMpO1xuICAgIFxuICAgIE9iamVjdC5mcmVlemUodGhpcy5hcHApO1xuICAgIE9iamVjdC5mcmVlemUodGhpcy5hdXRoKTtcbiAgICBPYmplY3QuZnJlZXplKHRoaXMudWkpO1xuICAgIE9iamVjdC5mcmVlemUodGhpcy5mb3JtKTtcbiAgICBPYmplY3QuZnJlZXplKHRoaXMudHJhbnNpdGlvbik7XG4gICAgT2JqZWN0LmZyZWV6ZSh0aGlzLmZpbGUpO1xuICAgIE9iamVjdC5mcmVlemUodGhpcy5yZXBvcnQpO1xuICAgIE9iamVjdC5mcmVlemUodGhpcy5yZWxlYXNlKTtcbiAgICBPYmplY3QuZnJlZXplKHRoaXMuYW5hbHl0aWNzKTtcbiAgICBPYmplY3QuZnJlZXplKHRoaXMudHJhbnNsYXRvcik7XG4gICAgT2JqZWN0LmZyZWV6ZSh0aGlzLmNydWQpO1xuICAgIE9iamVjdC5mcmVlemUodGhpcy5odHRwKTtcbiAgICBPYmplY3QuZnJlZXplKHRoaXMuc3RvcmUpO1xuICAgIE9iamVjdC5mcmVlemUodGhpcy51dGlsKTtcbiAgfVxufSJdfQ==
|
|
@@ -76,4 +76,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
76
76
|
providedIn: 'root'
|
|
77
77
|
}]
|
|
78
78
|
}] });
|
|
79
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
79
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFiLXNkay9zcmMvbGliL3VpL2Zvcm0uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQXFGLGdCQUFnQixFQUFFLGNBQWMsRUFBd0IsTUFBTSxnQ0FBZ0MsQ0FBQztBQUMzTCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQUt0QyxNQUFNLE9BQU8sV0FBVztJQUNILGlCQUFpQixHQUFxQixNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUMvRCxlQUFlLEdBQW1CLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUUxRTs7Ozs7O09BTUc7SUFDSCxLQUFLLENBQUMsU0FBUyxDQUFDLFFBQWdCLEVBQUUsTUFBd0I7UUFDdEQsTUFBTSxRQUFRLEdBQUcsTUFBTSxjQUFjLENBQ2pDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUNyRCxDQUFDO1FBQ0YsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILEtBQUssQ0FBQyxhQUFhLENBQUMsUUFBZ0IsRUFBRSxjQUFtQjtRQUNyRCx1REFBdUQ7UUFDdkQsTUFBTSxRQUFRLEdBQUcsTUFBTSxjQUFjLENBQ2pDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLGNBQWMsQ0FBQyxDQUNqRSxDQUFDO1FBRUYsdUNBQXVDO1FBQ3ZDLE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILEtBQUssQ0FBQyxjQUFjLENBQUMsY0FBcUM7UUFDdEQsaUVBQWlFO1FBQ2pFLE1BQU0sUUFBUSxHQUFHLE1BQU0sY0FBYyxDQUNqQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxDQUN4RCxDQUFDO1FBRUYsZ0NBQWdDO1FBQ2hDLE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxLQUFLLENBQUMscUJBQXFCLENBQUMsV0FBbUIsRUFBRSxJQUE0QjtRQUN6RSwwREFBMEQ7UUFDMUQsTUFBTSxRQUFRLEdBQUcsTUFBTSxjQUFjLENBQ2pDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxxQkFBcUIsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQ2xFLENBQUM7UUFFRix1Q0FBdUM7UUFDdkMsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILEtBQUssQ0FBQyxhQUFhLENBQUMsY0FBb0MsRUFBRSxxQkFBcUIsR0FBRyxLQUFLO1FBQ25GLHdEQUF3RDtRQUN4RCxNQUFNLFFBQVEsR0FBRyxNQUFNLGNBQWMsQ0FDakMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxzQkFBc0IsQ0FBQyxjQUFjLEVBQUUscUJBQXFCLENBQUMsQ0FDckYsQ0FBQztRQUVGLHVDQUF1QztRQUN2QyxPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO3dHQW5GUSxXQUFXOzRHQUFYLFdBQVcsY0FGUixNQUFNOzs0RkFFVCxXQUFXO2tCQUh2QixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQnVpbGRGb3JtQ29tcG9uZW50VHlwZSwgQ29tbW9uQXBpUmVzcG9uc2UsIEdldFNjcmVlbkNvbmZpZywgUHJvY2Vzc1JlcXVlc3RQYXlsb2FkLCBUYWJGb3JtaW9TZXJ2aWNlLCBUZW1wbGF0ZUhlbHBlciwgVGVtcGxhdGVQYXJzZVBheWxvYWQgfSBmcm9tICdAdGVjaGV4dGVuc29yL3RhYi1jb3JlLXV0aWxpdHknO1xuaW1wb3J0IHsgZmlyc3RWYWx1ZUZyb20gfSBmcm9tICdyeGpzJztcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBGb3JtU2VydmljZSB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfdGFiRm9ybWlvU2VydmljZTogVGFiRm9ybWlvU2VydmljZSA9IGluamVjdChUYWJGb3JtaW9TZXJ2aWNlKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF90ZW1wbGF0ZUhlbHBlcjogVGVtcGxhdGVIZWxwZXIgPSBpbmplY3QoVGVtcGxhdGVIZWxwZXIpO1xuXG4gICAgLyoqXG4gICAgICogUmV0cmlldmVzIGEgc2NyZWVuIGJ5IGl0cyBJRC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBzY3JlZW5JZCBUaGUgSUQgb2YgdGhlIHNjcmVlbiB0byByZXRyaWV2ZS5cbiAgICAgKiBAcGFyYW0gY29uZmlnIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gb2JqZWN0IGZvciB0aGUgcmVxdWVzdC5cbiAgICAgKiBAcmV0dXJucyBBIHByb21pc2Ugb2YgdGhlIHJlc3BvbnNlIGZyb20gdGhlIHNlcnZlci5cbiAgICAgKi9cbiAgICBhc3luYyBnZXRTY3JlZW4oc2NyZWVuSWQ6IHN0cmluZywgY29uZmlnPzogR2V0U2NyZWVuQ29uZmlnKTogUHJvbWlzZTxDb21tb25BcGlSZXNwb25zZT4ge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxuICAgICAgICAgICAgdGhpcy5fdGFiRm9ybWlvU2VydmljZS5nZXRTY3JlZW4oc2NyZWVuSWQsIGNvbmZpZylcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlcyB0aGUgZGF0YSBmb3IgYSBzY3JlZW4gYnkgaXRzIElELlxuICAgICAqXG4gICAgICogQHBhcmFtIHNjcmVlbklkIFRoZSBJRCBvZiB0aGUgc2NyZWVuIHRvIHJldHJpZXZlIHRoZSBkYXRhIGZvci5cbiAgICAgKiBAcGFyYW0gcmVxdWVzdFBheWxvYWQgVGhlIHJlcXVlc3QgcGF5bG9hZCB0byBzZW5kIHRvIHRoZSBzZXJ2ZXIuXG4gICAgICogQHJldHVybnMgQSBwcm9taXNlIG9mIHRoZSByZXNwb25zZSBmcm9tIHRoZSBzZXJ2ZXIuXG4gICAgICovXG4gICAgYXN5bmMgZ2V0U2NyZWVuRGF0YShzY3JlZW5JZDogc3RyaW5nLCByZXF1ZXN0UGF5bG9hZDogYW55KTogUHJvbWlzZTxDb21tb25BcGlSZXNwb25zZT4ge1xuICAgICAgICAvLyBTZW5kIHRoZSByZXF1ZXN0IHRvIHRoZSBzZXJ2ZXIgYW5kIGdldCB0aGUgcmVzcG9uc2UuXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20oXG4gICAgICAgICAgICB0aGlzLl90YWJGb3JtaW9TZXJ2aWNlLmdldFNjcmVlbkRhdGEoc2NyZWVuSWQsIHJlcXVlc3RQYXlsb2FkKVxuICAgICAgICApO1xuXG4gICAgICAgIC8vIFJldHVybiB0aGUgcmVzcG9uc2UgZnJvbSB0aGUgc2VydmVyLlxuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUHJvY2Vzc2VzIGEgcmVxdWVzdCB1c2luZyB0aGUgcHJvdmlkZWQgcmVxdWVzdCBwYXlsb2FkLlxuICAgICAqXG4gICAgICogQHBhcmFtIHJlcXVlc3RQYXlsb2FkIFRoZSBwYXlsb2FkIHRvIGJlIHByb2Nlc3NlZC5cbiAgICAgKiBAcmV0dXJucyBBIHByb21pc2Ugb2YgdGhlIHJlc3BvbnNlIGZyb20gdGhlIHNlcnZlci5cbiAgICAgKi9cbiAgICBhc3luYyBwcm9jZXNzUmVxdWVzdChyZXF1ZXN0UGF5bG9hZDogUHJvY2Vzc1JlcXVlc3RQYXlsb2FkKTogUHJvbWlzZTxDb21tb25BcGlSZXNwb25zZT4ge1xuICAgICAgICAvLyBTZW5kIHRoZSByZXF1ZXN0IHBheWxvYWQgdG8gdGhlIHNlcnZlciBhbmQgYXdhaXQgdGhlIHJlc3BvbnNlLlxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxuICAgICAgICAgICAgdGhpcy5fdGFiRm9ybWlvU2VydmljZS5wcm9jZXNzUmVxdWVzdChyZXF1ZXN0UGF5bG9hZClcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBSZXR1cm4gdGhlIHNlcnZlcidzIHJlc3BvbnNlLlxuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQnVpbGRzIEZvcm0uaW8gY29tcG9uZW50cyBmb3IgdGhlIHNwZWNpZmllZCBhcHAgb2JqZWN0IElEIGFuZCB0eXBlLlxuICAgICAqXG4gICAgICogQHBhcmFtIGFwcE9iamVjdElkIFRoZSBJRCBvZiB0aGUgYXBwIG9iamVjdCB0byBidWlsZCB0aGUgY29tcG9uZW50cyBmb3IuXG4gICAgICogQHBhcmFtIHR5cGUgVGhlIHR5cGUgb2YgY29tcG9uZW50cyB0byBidWlsZC5cbiAgICAgKiBAcmV0dXJucyBBIHByb21pc2Ugb2YgdGhlIHJlc3BvbnNlIGZyb20gdGhlIHNlcnZlci5cbiAgICAgKi9cbiAgICBhc3luYyBidWlsZEZvcm1JT0NvbXBvbmVudHMoYXBwT2JqZWN0SWQ6IHN0cmluZywgdHlwZTogQnVpbGRGb3JtQ29tcG9uZW50VHlwZSk6IFByb21pc2U8Q29tbW9uQXBpUmVzcG9uc2U+IHtcbiAgICAgICAgLy8gU2VuZCB0aGUgcmVxdWVzdCB0byB0aGUgc2VydmVyIHRvIGJ1aWxkIHRoZSBjb21wb25lbnRzLlxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxuICAgICAgICAgICAgdGhpcy5fdGFiRm9ybWlvU2VydmljZS5idWlsZEZvcm1JT0NvbXBvbmVudHMoYXBwT2JqZWN0SWQsIHR5cGUpXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gUmV0dXJuIHRoZSByZXNwb25zZSBmcm9tIHRoZSBzZXJ2ZXIuXG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQYXJzZXMgYSB0ZW1wbGF0ZSB1c2luZyB0aGUgcHJvdmlkZWQgcmVxdWVzdCBwYXlsb2FkLlxuICAgICAqXG4gICAgICogQHBhcmFtIHJlcXVlc3RQYXlsb2FkIFRoZSBwYXlsb2FkIGNvbnRhaW5pbmcgdGhlIHRlbXBsYXRlIHRvIGJlIHBhcnNlZC5cbiAgICAgKiBAcGFyYW0gb25GYWlsZWRQYXJzZU9uU2VydmVyIElmIHRoZSBwYXJzaW5nIHNob3VsZCBiZSBkb25lIG9uIHRoZSBzZXJ2ZXIuXG4gICAgICogQHJldHVybnMgQSBwcm9taXNlIG9mIHRoZSByZXNwb25zZSBmcm9tIHRoZSBzZXJ2ZXIuXG4gICAgICovXG4gICAgYXN5bmMgcGFyc2VUZW1wbGF0ZShyZXF1ZXN0UGF5bG9hZDogVGVtcGxhdGVQYXJzZVBheWxvYWQsIG9uRmFpbGVkUGFyc2VPblNlcnZlciA9IGZhbHNlKTogUHJvbWlzZTxDb21tb25BcGlSZXNwb25zZT4ge1xuICAgICAgICAvLyBTZW5kIHRoZSByZXF1ZXN0IHRvIHRoZSBzZXJ2ZXIgdG8gcGFyc2UgdGhlIHRlbXBsYXRlLlxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxuICAgICAgICAgICAgdGhpcy5fdGVtcGxhdGVIZWxwZXIudGVtcGxhdGVQYXJzZVVuaXZlcnNhbChyZXF1ZXN0UGF5bG9hZCwgb25GYWlsZWRQYXJzZU9uU2VydmVyKVxuICAgICAgICApO1xuXG4gICAgICAgIC8vIFJldHVybiB0aGUgcmVzcG9uc2UgZnJvbSB0aGUgc2VydmVyLlxuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfVxufSJdfQ==
|
|
@@ -341,4 +341,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
341
341
|
providedIn: 'root'
|
|
342
342
|
}]
|
|
343
343
|
}] });
|
|
344
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhYi1zZGsvc3JjL2xpYi91aS91aS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBT25ELE9BQU8sRUFBRSxjQUFjLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDNUMsT0FBTyxFQUFnRCxtQkFBbUIsRUFBdUIsbUJBQW1CLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQzs7QUFLL0ssTUFBTSxPQUFPLFNBQVM7SUFDRCxvQkFBb0IsR0FBd0IsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDeEUsb0JBQW9CLEdBQXdCLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBRXpGOzs7OztPQUtHO0lBQ0gsVUFBVSxDQUFDLE9BQTBCO1FBQ2pDLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxZQUFZLEVBQUUsR0FBRyxPQUFPLENBQUM7UUFFMUMsUUFBUSxJQUFJLEVBQUUsQ0FBQztZQUNYLEtBQUssaUJBQWlCLENBQUMsT0FBTztnQkFDMUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFDL0IsTUFBTTtZQUVWLEtBQUssaUJBQWlCLENBQUMsS0FBSztnQkFDeEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFDOUIsTUFBTTtZQUVWLEtBQUssaUJBQWlCLENBQUMsT0FBTztnQkFDMUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFDOUIsTUFBTTtZQUVWLEtBQUssaUJBQWlCLENBQUMsTUFBTTtnQkFDekIsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENB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QUcsSUFBSSxDQUFDO1FBRXZCLGtEQUFrRDtRQUNsRCxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUVyQyx1Q0FBdUM7UUFDdkMsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBRW5CLDJCQUEyQjtRQUMzQixRQUFRLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTdCLG9EQUFvRDtRQUNwRCxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUVyQyw4QkFBOEI7UUFDOUIsSUFBSSxDQUFDLFdBQVcsQ0FBQztZQUNiLE9BQU8sRUFBRSxFQUFFO1lBQ1gsS0FBSyxFQUFFLHNCQUFzQjtZQUM3QixhQUFhLEVBQUU7Z0JBQ1gsT0FBTyxFQUFFLElBQUk7Z0JBQ2IsYUFBYSxFQUFFLGtCQUFrQjtnQkFDakMsTUFBTSxFQUFFLFNBQVM7Z0JBQ2pCLFFBQVEsRUFBRSxHQUFHO2dCQUNiLGVBQWUsRUFBRSxJQUFJO2FBQ3hCO1NBQ0osQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVEOztPQUVHO0lBQ0gseUJBQXlCO1FBQ3JCLGdFQUFnRTtRQUNoRSxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0MsQ0FBQzt3R0FwWVEsU0FBUzs0R0FBVCxTQUFTLGNBRk4sTUFBTTs7NEZBRVQsU0FBUztrQkFIckIsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICAgIFNjcmVlbk9wZW5PcHRpb25zLFxyXG4gICAgTmF2aWdhdGlvbk9wdGlvbnMsXHJcbiAgICBCYXNlU2NyZWVuT3B0aW9ucyxcclxuICAgIE5hdmlnYXRlVG9TdWJkb21haW5PcHRpb25zXHJcbn0gZnJvbSAnLi4vaW50ZXJmYWNlL3VpLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IE5hdmlnYXRpb25UeXBlLCBTY3JlZW5EaXNwbGF5TW9kZSB9IGZyb20gJy4uL2VudW0vdWkuZW51bSc7XHJcbmltcG9ydCB7IFRhYlNkayB9IGZyb20gJy4uL3RhYi1zZGsuc2VydmljZSc7XHJcbmltcG9ydCB7IEJhc2VOb3RpZmljYXRpb25PcHRpb25zLCBDb25maXJtYXRpb25PcHRpb25zLCBDb25maXJtYXRpb25TZXJ2aWNlLCBOb3RpZmljYXRpb25PcHRpb25zLCBOb3RpZmljYXRpb25TZXJ2aWNlLCBOb3RpZmljYXRpb25UeXBlIH0gZnJvbSAnQHRlY2hleHRlbnNvci90YWItY29yZS11dGlsaXR5JztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICAgIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgVWlTZXJ2aWNlIHtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgX25vdGlmaWNhdGlvblNlcnZpY2U6IE5vdGlmaWNhdGlvblNlcnZpY2UgPSBpbmplY3QoTm90aWZpY2F0aW9uU2VydmljZSk7XHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9jb25maXJtYXRpb25TZXJ2aWNlOiBDb25maXJtYXRpb25TZXJ2aWNlID0gaW5qZWN0KENvbmZpcm1hdGlvblNlcnZpY2UpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogT3BlbiBhIHNjcmVlbiB3aXRoIHRoZSBnaXZlbiBvcHRpb25zLiBUaGUgbW9kZSBkZXRlcm1pbmVzIGhvdyB0aGUgc2NyZWVuIGlzXHJcbiAgICAgKiBkaXNwbGF5ZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgZm9yIG9wZW5pbmcgdGhlIHNjcmVlbi5cclxuICAgICAqL1xyXG4gICAgb3BlblNjcmVlbihvcHRpb25zOiBTY3JlZW5PcGVuT3B0aW9ucyk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHsgbW9kZSwgLi4ub3RoZXJPcHRpb25zIH0gPSBvcHRpb25zO1xyXG5cclxuICAgICAgICBzd2l0Y2ggKG1vZGUpIHtcclxuICAgICAgICAgICAgY2FzZSBTY3JlZW5EaXNwbGF5TW9kZS5TaWRlYmFyOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5zaG93U2lkZWJhcihvdGhlck9wdGlvbnMpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBjYXNlIFNjcmVlbkRpc3BsYXlNb2RlLlBvcHVwOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5zaG93RGlhbG9nKG90aGVyT3B0aW9ucyk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIGNhc2UgU2NyZWVuRGlzcGxheU1vZGUuU2FtZVRhYjpcclxuICAgICAgICAgICAgICAgIHRoaXMubmF2aWdhdGVUbyhvdGhlck9wdGlvbnMpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBjYXNlIFNjcmVlbkRpc3BsYXlNb2RlLk5ld1RhYjpcclxuICAgICAgICAgICAgICAgIHRoaXMub3BlbkluTmV3VGFiKG90aGVyT3B0aW9ucyk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBPcGVucyBhIHNjcmVlbiBpbiBhIHNpZGViYXIuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgZm9yIG9wZW5pbmcgdGhlIHNpZGViYXIuXHJcbiAgICAgKi9cclxuICAgIHNob3dTaWRlYmFyKG9wdGlvbnM6IEJhc2VTY3JlZW5PcHRpb25zKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3Qgb3RoZXJDb25maWd1cmF0aW9uID0ge1xyXG4gICAgICAgICAgICAuLi4ob3B0aW9ucy50aXRsZSAmJiB7IHRpdGxlOiBvcHRpb25zLnRpdGxlIH0pLFxyXG4gICAgICAgICAgICAuLi4ob3B0aW9ucy53aWR0aCAmJiB7IHdpZHRoOiBvcHRpb25zLndpZHRoIH0pLFxyXG4gICAgICAgICAgICAuLi4ob3B0aW9ucy5oZWlnaHQgJiYgeyBoZWlnaHQ6IG9wdGlvbnMuaGVpZ2h0IH0pLFxyXG4gICAgICAgICAgICAuLi4ob3B0aW9ucy5jdXN0b21DbGFzcyAmJiB7IGN1c3RvbUNsYXNzOiBvcHRpb25zLmN1c3RvbUNsYXNzIH0pLFxyXG4gICAgICAgICAgICAuLi4ob3B0aW9ucy5yZWZyZXNoZXIgJiYgeyByZWZyZXNoZXI6IG9wdGlvbnMucmVmcmVzaGVyIH0pLFxyXG4gICAgICAgICAgICAuLi4ob3B0aW9ucy5jbG9zZXIgJiYgeyBjbG9zZXI6IG9wdGlvbnMuY2xvc2VyIH0pXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgVGFiU2RrLnV0aWw/Lm9wZW5TY3JlZW4oXHJcbiAgICAgICAgICAgIFNjcmVlbkRpc3BsYXlNb2RlLlNpZGViYXIsXHJcbiAgICAgICAgICAgIG9wdGlvbnMuc2NyZWVuSWQsXHJcbiAgICAgICAgICAgIG9wdGlvbnMucmVxdG9rZW5zIHx8IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgb3B0aW9ucy5zdWJtaXNzaW9uIHx8IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgT2JqZWN0LmtleXMob3RoZXJDb25maWd1cmF0aW9uKS5sZW5ndGggPiAwID8gb3RoZXJDb25maWd1cmF0aW9uIDogdW5kZWZpbmVkXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE9wZW5zIGEgc2NyZWVuIGluIGEgcG9wdXAgZGlhbG9nLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIGZvciBvcGVuaW5nIHRoZSBkaWFsb2cuXHJcbiAgICAgKi9cclxuICAgIHNob3dEaWFsb2cob3B0aW9uczogQmFzZVNjcmVlbk9wdGlvbnMpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBvdGhlckNvbmZpZ3VyYXRpb24gPSB7XHJcbiAgICAgICAgICAgIC4uLihvcHRpb25zLnRpdGxlICYmIHsgdGl0bGU6IG9wdGlvbnMudGl0bGUgfSksXHJcbiAgICAgICAgICAgIC4uLihvcHRpb25zLndpZHRoICYmIHsgd2lkdGg6IG9wdGlvbnMud2lkdGggfSksXHJcbiAgICAgICAgICAgIC4uLihvcHRpb25zLmhlaWdodCAmJiB7IGhlaWdodDogb3B0aW9ucy5oZWlnaHQgfSksXHJcbiAgICAgICAgICAgIC4uLihvcHRpb25zLmN1c3RvbUNsYXNzICYmIHsgY3VzdG9tQ2xhc3M6IG9wdGlvbnMuY3VzdG9tQ2xhc3MgfSksXHJcbiAgICAgICAgICAgIC4uLihvcHRpb25zLnJlZnJlc2hlciAmJiB7IHJlZnJlc2hlcjogb3B0aW9ucy5yZWZyZXNoZXIgfSksXHJcbiAgICAgICAgICAgIC4uLihvcHRpb25zLmNsb3NlciAmJiB7IGNsb3Nlcjogb3B0aW9ucy5jbG9zZXIgfSlcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBUYWJTZGsudXRpbD8ub3BlblNjcmVlbihcclxuICAgICAgICAgICAgU2NyZWVuRGlzcGxheU1vZGUuUG9wdXAsXHJcbiAgICAgICAgICAgIG9wdGlvbnMuc2NyZWVuSWQsXHJcbiAgICAgICAgICAgIG9wdGlvbnMucmVxdG9rZW5zIHx8IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgb3B0aW9ucy5zdWJtaXNzaW9uIHx8IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgT2JqZWN0LmtleXMob3RoZXJDb25maWd1cmF0aW9uKS5sZW5ndGggPiAwID8gb3RoZXJDb25maWd1cmF0aW9uIDogdW5kZWZpbmVkXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE5hdmlnYXRlcyB0byBhIHNjcmVlbiB3aXRoaW4gdGhlIHNhbWUgdGFiLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIG5hdmlnYXRpb24sIGluY2x1ZGluZyBzY3JlZW5JZCBhbmQgb3B0aW9uYWwgcmVxdG9rZW5zLlxyXG4gICAgICovXHJcbiAgICBuYXZpZ2F0ZVRvKG9wdGlvbnM6IE5hdmlnYXRpb25PcHRpb25zKTogdm9pZCB7XHJcbiAgICAgICAgVGFiU2RrLnV0aWw/Lm9wZW5TY3JlZW4oXHJcbiAgICAgICAgICAgIFNjcmVlbkRpc3BsYXlNb2RlLlNhbWVUYWIsXHJcbiAgICAgICAgICAgIG9wdGlvbnMuc2NyZWVuSWQsXHJcbiAgICAgICAgICAgIG9wdGlvbnMucmVxdG9rZW5zIHx8IHVuZGVmaW5lZFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBOYXZpZ2F0ZXMgdG8gYSBzY3JlZW4gaW4gYSBuZXcgdGFiLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIGZvciBuYXZpZ2F0aW9uLCBpbmNsdWRpbmcgc2NyZWVuSWQgYW5kIG9wdGlvbmFsIHJlcXRva2Vucy5cclxuICAgICAqL1xyXG4gICAgb3BlbkluTmV3VGFiKG9wdGlvbnM6IE5hdmlnYXRpb25PcHRpb25zKTogdm9pZCB7XHJcbiAgICAgICAgVGFiU2RrLnV0aWw/Lm9wZW5TY3JlZW4oXHJcbiAgICAgICAgICAgIFNjcmVlbkRpc3BsYXlNb2RlLk5ld1RhYixcclxuICAgICAgICAgICAgb3B0aW9ucy5zY3JlZW5JZCxcclxuICAgICAgICAgICAgb3B0aW9ucy5yZXF0b2tlbnMgfHwgdW5kZWZpbmVkXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE5hdmlnYXRlcyB0byB0aGUgc3BlY2lmaWVkIFVSTC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdXJsIC0gVGhlIFVSTCB0byBuYXZpZ2F0ZSB0by5cclxuICAgICAqL1xyXG4gICAgbmF2aWdhdGVUb1VybChwYXJhbXM6IHsgdXJsOiBzdHJpbmcsIGV4dHJhcz86IGFueSwgcmVwbGFjZVVybD86IGJvb2xlYW4gfSk6IHZvaWQge1xyXG4gICAgICAgIFRhYlNkay51dGlsPy5uYXZpZ2F0ZVRvKHtcclxuICAgICAgICAgICAgLi4ucGFyYW1zLFxyXG4gICAgICAgICAgICB0eXBlOiBOYXZpZ2F0aW9uVHlwZS5OYXZpZ2F0ZVRvVXJsXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE5hdmlnYXRlcyB0byBhIHNwZWNpZmllZCBzdWJkb21haW4gdXNpbmcgdGhlIHByb3ZpZGVkIG9wdGlvbnMuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgbmF2aWdhdGlvbiwgaW5jbHVkaW5nIHN1YkRvbWFpbiwgYXBwQ29kZSwgYW5kIHVybC5cclxuICAgICAqL1xyXG4gICAgbmF2aWdhdGVUb1N1YmRvbWFpbihvcHRpb25zOiBOYXZpZ2F0ZVRvU3ViZG9tYWluT3B0aW9ucyk6IHZvaWQge1xyXG4gICAgICAgIFRhYlNkay51dGlsPy5uYXZpZ2F0ZVRvKHtcclxuICAgICAgICAgICAgLi4ub3B0aW9ucyxcclxuICAgICAgICAgICAgdHlwZTogTmF2aWdhdGlvblR5cGUuTmF2aWdhdGVUb1N1YmRvbWFpblxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXRyaWV2ZXMgdGhlIGFjdGl2ZSBzY3JlZW4gSUQgZnJvbSB0aGUgY3VycmVudCBVUkwuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybnMgVGhlIHNjcmVlbiBJRCBpZiBwcmVzZW50IGluIHRoZSBVUkwsIG90aGVyd2lzZSB1bmRlZmluZWQuXHJcbiAgICAgKi9cclxuICAgIGdldEFjdGl2ZVVybFNjcmVlbklkKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XHJcbiAgICAgICAgLy8gU3BsaXQgdGhlIFVSTCBwYXRobmFtZSBpbnRvIHBhcnRzIHVzaW5nIHRoZSAnLycgY2hhcmFjdGVyIGFzIGEgZGVsaW1pdGVyXHJcbiAgICAgICAgY29uc3QgdXJsUGFydHMgPSB3aW5kb3c/LmxvY2F0aW9uPy5wYXRobmFtZT8uc3BsaXQoJy8nKTtcclxuICAgICAgICAvLyBFeHRyYWN0IHRoZSBzY3JlZW4gSUQgcGFydCBhbmQgcmVtb3ZlIGFueSBxdWVyeSBwYXJhbWV0ZXJzXHJcbiAgICAgICAgY29uc3Qgc2NyZWVuSWQgPSB1cmxQYXJ0cz8ubGVuZ3RoID4gMSA/IHVybFBhcnRzPy5bdXJsUGFydHM/Lmxlbmd0aCAtIDFdPy5zcGxpdCgnPycpWzBdIDogdW5kZWZpbmVkO1xyXG4gICAgICAgIC8vIFJldHVybiB0aGUgc2NyZWVuIElEIG9yIHVuZGVmaW5lZCBpZiBub3QgZm91bmRcclxuICAgICAgICByZXR1cm4gc2NyZWVuSWQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXRyaWV2ZXMgdGhlIGFjdGl2ZSByZWRpcmVjdCBVUkwgYnkgY29tYmluaW5nIHRoZSBhY3RpdmUgc2NyZWVuIElEIGFuZCBhbnkgcXVlcnkgcGFyYW1ldGVycy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJucyBUaGUgY29uc3RydWN0ZWQgcmVkaXJlY3QgVVJMIG9yIHVuZGVmaW5lZCBpZiBubyBzY3JlZW4gSUQgaXMgcHJlc2VudC5cclxuICAgICAqL1xyXG4gICAgZ2V0QWN0aXZlUmVkaXJlY3RVcmwoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgICAgICAvLyBHZXQgdGhlIGFjdGl2ZSBzY3JlZW4gSUQgZnJvbSB0aGUgY3VycmVudCBVUkxcclxuICAgICAgICBjb25zdCBzY3JlZW5JZCA9IHRoaXMuZ2V0QWN0aXZlVXJsU2NyZWVuSWQoKTtcclxuICAgICAgICBsZXQgcmVkaXJlY3RVUkw7XHJcblxyXG4gICAgICAgIC8vIENoZWNrIGlmIHRoZSBjdXJyZW50IFVSTCBjb250YWlucyBhIHNjcmVlbiBJRFxyXG4gICAgICAgIGlmIChzY3JlZW5JZCkge1xyXG4gICAgICAgICAgICAvLyBJbml0aWFsaXplIHRoZSByZWRpcmVjdCBVUkwgd2l0aCB0aGUgc2NyZWVuIElEXHJcbiAgICAgICAgICAgIHJlZGlyZWN0VVJMID0gc2NyZWVuSWQ7XHJcblxyXG4gICAgICAgICAgICAvLyBQYXJzZSB0aGUgY3VycmVudCBVUkwncyBxdWVyeSBwYXJhbWV0ZXJzXHJcbiAgICAgICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKTtcclxuXHJcbiAgICAgICAgICAgIC8vIElmIHRoZXJlIGFyZSBxdWVyeSBwYXJhbWV0ZXJzLCBhcHBlbmQgdGhlbSB0byB0aGUgcmVkaXJlY3QgVVJMXHJcbiAgICAgICAgICAgIGlmIChxdWVyeVBhcmFtcy50b1N0cmluZygpKSB7XHJcbiAgICAgICAgICAgICAgICByZWRpcmVjdFVSTCArPSBgJiR7cXVlcnlQYXJhbXMudG9TdHJpbmcoKX1gO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBSZXR1cm4gdGhlIGNvbnN0cnVjdGVkIHJlZGlyZWN0IFVSTCBvciB1bmRlZmluZWRcclxuICAgICAgICByZXR1cm4gcmVkaXJlY3RVUkw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTaG93IGEgbm90aWZpY2F0aW9uIHRvIHRoZSB1c2VyLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIGZvciB0aGUgbm90aWZpY2F0aW9uLlxyXG4gICAgICovXHJcbiAgICBub3RpZnkob3B0aW9uczogTm90aWZpY2F0aW9uT3B0aW9ucykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9ub3RpZmljYXRpb25TZXJ2aWNlLm5vdGlmeSh7XHJcbiAgICAgICAgICAgIHR5cGU6IG9wdGlvbnMudHlwZSxcclxuICAgICAgICAgICAgbWVzc2FnZTogVGFiU2RrLnRyYW5zbGF0b3IudHJhbnNsYXRlKG9wdGlvbnMubWVzc2FnZSksXHJcbiAgICAgICAgICAgIC4uLihvcHRpb25zPy50aXRsZSA/IHsgdGl0bGU6IFRhYlNkay50cmFuc2xhdG9yLnRyYW5zbGF0ZShvcHRpb25zLnRpdGxlKSB9IDoge30pLFxyXG4gICAgICAgICAgICAuLi4ob3B0aW9ucz8uY29uZmlndXJhdGlvbiA/IHsgY29uZmlndXJhdGlvbjogb3B0aW9ucy5jb25maWd1cmF0aW9uIH0gOiB7fSksXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXNwbGF5cyBhIHN1Y2Nlc3Mgbm90aWZpY2F0aW9uIHRvIHRoZSB1c2VyLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIHRoZSBub3RpZmljYXRpb24sIGluY2x1ZGluZyBtZXNzYWdlLCB0aXRsZSwgYW5kIGNvbmZpZ3VyYXRpb24uXHJcbiAgICAgKi9cclxuICAgIHNob3dTdWNjZXNzKG9wdGlvbnM6IEJhc2VOb3RpZmljYXRpb25PcHRpb25zKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubm90aWZ5KHtcclxuICAgICAgICAgICAgLi4ub3B0aW9ucyxcclxuICAgICAgICAgICAgdHlwZTogTm90aWZpY2F0aW9uVHlwZS5TdWNjZXNzLFxyXG4gICAgICAgICAgICB0aXRsZTogb3B0aW9ucz8udGl0bGUgPz8gJ1N1Y2Nlc3MnXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXNwbGF5cyBhIHdhcm5pbmcgbm90aWZpY2F0aW9uIHRvIHRoZSB1c2VyLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIHRoZSBub3RpZmljYXRpb24sIGluY2x1ZGluZyBtZXNzYWdlLCB0aXRsZSwgYW5kIGNvbmZpZ3VyYXRpb24uXHJcbiAgICAgKi9cclxuICAgIHNob3dXYXJuaW5nKG9wdGlvbnM6IEJhc2VOb3RpZmljYXRpb25PcHRpb25zKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubm90aWZ5KHtcclxuICAgICAgICAgICAgLi4ub3B0aW9ucyxcclxuICAgICAgICAgICAgdHlwZTogTm90aWZpY2F0aW9uVHlwZS5XYXJuaW5nLFxyXG4gICAgICAgICAgICB0aXRsZTogb3B0aW9ucz8udGl0bGUgPz8gJ1dhcm5pbmcnXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXNwbGF5cyBhbiBpbmZvIG5vdGlmaWNhdGlvbiB0byB0aGUgdXNlci5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIGZvciB0aGUgbm90aWZpY2F0aW9uLCBpbmNsdWRpbmcgbWVzc2FnZSwgdGl0bGUsIGFuZCBjb25maWd1cmF0aW9uLlxyXG4gICAgICovXHJcbiAgICBzaG93SW5mbyhvcHRpb25zOiBCYXNlTm90aWZpY2F0aW9uT3B0aW9ucykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm5vdGlmeSh7XHJcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXHJcbiAgICAgICAgICAgIHR5cGU6IE5vdGlmaWNhdGlvblR5cGUuSW5mbyxcclxuICAgICAgICAgICAgdGl0bGU6IG9wdGlvbnM/LnRpdGxlID8/ICdJbmZvJ1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGlzcGxheXMgYW4gZXJyb3Igbm90aWZpY2F0aW9uIHRvIHRoZSB1c2VyLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIHRoZSBub3RpZmljYXRpb24sIGluY2x1ZGluZyBtZXNzYWdlLCB0aXRsZSwgYW5kIGNvbmZpZ3VyYXRpb24uXHJcbiAgICAgKi9cclxuICAgIHNob3dFcnJvcihvcHRpb25zOiBCYXNlTm90aWZpY2F0aW9uT3B0aW9ucykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm5vdGlmeSh7XHJcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXHJcbiAgICAgICAgICAgIHR5cGU6IE5vdGlmaWNhdGlvblR5cGUuRXJyb3IsXHJcbiAgICAgICAgICAgIHRpdGxlOiBvcHRpb25zPy50aXRsZSA/PyAnRXJyb3InXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDbGVhcnMgYSBub3RpZmljYXRpb24gYnkgSUQuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIG5vdGlmaWNhdGlvbklkIC0gVGhlIElEIG9mIHRoZSBub3RpZmljYXRpb24gdG8gY2xlYXIuXHJcbiAgICAgKiBAcmV0dXJucyBUaGUgY2xlYXJlZCBub3RpZmljYXRpb24sIG9yIG51bGwgaWYgdGhlIG5vdGlmaWNhdGlvbiBkb2Vzbid0IGV4aXN0LlxyXG4gICAgICovXHJcbiAgICBjbGVhck5vdGlmaWNhdGlvbihub3RpZmljYXRpb25JZDogbnVtYmVyKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX25vdGlmaWNhdGlvblNlcnZpY2UuY2xlYXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uSWQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGlzcGxheXMgYSBjb25maXJtYXRpb24gZGlhbG9nIHRvIHRoZSB1c2VyIGFuZCByZXR1cm5zIGEgcHJvbWlzZSB0aGF0IHJlc29sdmVzXHJcbiAgICAgKiB0byBhIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSB1c2VyIGNvbmZpcm1lZCB0aGUgYWN0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIHRoZSBjb25maXJtYXRpb24gZGlhbG9nLCBpbmNsdWRpbmcgdGl0bGUsIG1lc3NhZ2UsXHJcbiAgICAgKiBjb25maXJtVGV4dCwgY2FuY2VsVGV4dCwgYW5kIHZpc2liaWxpdHkgb2YgYnV0dG9ucy5cclxuICAgICAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHRydWUgaWYgdGhlIHVzZXIgY29uZmlybXMsIGZhbHNlIG90aGVyd2lzZS5cclxuICAgICAqL1xyXG4gICAgY29uZmlybShvcHRpb25zPzogQ29uZmlybWF0aW9uT3B0aW9ucyk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl9jb25maXJtYXRpb25TZXJ2aWNlLmNvbmZpcm0ob3B0aW9ucylcclxuICAgICAgICAgICAgICAgID8uc3Vic2NyaWJlKChpc0NvbmZpcm1lZDogYm9vbGVhbikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoaXNDb25maXJtZWQpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXNwbGF5cyBhIGNvbmZpcm1hdGlvbiBkaWFsb2cgdG8gdGhlIHVzZXIgd2l0aCBhIHRpdGxlIGFuZCBtZXNzYWdlIHRoYXQgaW5kaWNhdGVzXHJcbiAgICAgKiB0aGUgdXNlciBpcyBhYm91dCB0byBkZWxldGUgYW4gaXRlbS4gVGhlIGNvbmZpcm1hdGlvbiBkaWFsb2cgaGFzIGEgXCJEZWxldGVcIiBhbmQgXCJDYW5jZWxcIlxyXG4gICAgICogYnV0dG9uLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIHRoZSBjb25maXJtYXRpb24gZGlhbG9nLCBpbmNsdWRpbmcgdGhlIGl0ZW0gbmFtZSBhbmRcclxuICAgICAqIG9wdGlvbmFsIG1lc3NhZ2UuXHJcbiAgICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0cnVlIGlmIHRoZSB1c2VyIGNvbmZpcm1zLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAgICAgKi9cclxuICAgIGNvbmZpcm1EZWxldGUob3B0aW9ucz86IENvbmZpcm1hdGlvbk9wdGlvbnMpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb25maXJtKHtcclxuICAgICAgICAgICAgdGl0bGU6IG9wdGlvbnM/LnRpdGxlID8/IGBBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgcmVjb3JkYCxcclxuICAgICAgICAgICAgbWVzc2FnZTogb3B0aW9ucz8ubWVzc2FnZSA/PyBgWW91IGFyZSBhYm91dCB0byBkZWxldGUgdGhlIHNlbGVjdGVkIHJlY29yZC4gQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHByb2NlZWQ/YCxcclxuICAgICAgICAgICAgcHJpbWFyeU9wdGlvbjogJ0RlbGV0ZScsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXNwbGF5cyBhIGNvbmZpcm1hdGlvbiBkaWFsb2cgdG8gdGhlIHVzZXIgd2l0aCBhIHRpdGxlIGFuZCBtZXNzYWdlIHRoYXQgaW5kaWNhdGVzXHJcbiAgICAgKiB0aGUgdXNlciBpcyBhYm91dCB0byBkaXNjYXJkIGNoYW5nZXMgdG8gYW4gaXRlbS4gVGhlIGNvbmZpcm1hdGlvbiBkaWFsb2cgaGFzIGEgXCJEaXNjYXJkXCJcclxuICAgICAqIGFuZCBcIkNhbmNlbFwiIGJ1dHRvbi5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIGZvciB0aGUgY29uZmlybWF0aW9uIGRpYWxvZywgaW5jbHVkaW5nIHRoZSBpdGVtIG5hbWUgYW5kXHJcbiAgICAgKiBvcHRpb25hbCBtZXNzYWdlLlxyXG4gICAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdHJ1ZSBpZiB0aGUgdXNlciBjb25maXJtcywgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gICAgICovXHJcbiAgICBjb25maXJtRGlzY2FyZChvcHRpb25zPzogQ29uZmlybWF0aW9uT3B0aW9ucyk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvbmZpcm0oe1xyXG4gICAgICAgICAgICB0aXRsZTogYEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkaXNjYXJkIHlvdXIgY2hhbmdlc2AsXHJcbiAgICAgICAgICAgIG1lc3NhZ2U6IG9wdGlvbnM/Lm1lc3NhZ2UgPz8gYFlvdSBhcmUgYWJvdXQgdG8gZGlzY2FyZCB5b3VyIGNoYW5nZXMuIEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBwcm9jZWVkP2AsXHJcbiAgICAgICAgICAgIHByaW1hcnlPcHRpb246ICdEaXNjYXJkJyxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENsb3NlcyB0aGUgY29uZmlybWF0aW9uIGRpYWxvZy5cclxuICAgICAqXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBjYW4gYmUgdXNlZCB0byBtYW51YWxseSBjbG9zZSB0aGUgY29uZmlybWF0aW9uIGRpYWxvZy5cclxuICAgICAqL1xyXG4gICAgY2xvc2VDb25maXJtYXRpb25EaWFsb2coKSB7XHJcbiAgICAgICAgLy8gQ2xvc2UgdGhlIGNvbmZpcm1hdGlvbiBkaWFsb2dcclxuICAgICAgICB0aGlzLl9jb25maXJtYXRpb25TZXJ2aWNlLmNsb3NlRGlhbG9nKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXRyaWV2ZXMgdGhlIGNvbmZpcm1hdGlvbiBlbWl0dGVyIGZyb20gdGhlIGNvbmZpcm1hdGlvbiBzZXJ2aWNlLlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJucyBUaGUgY29uZmlybWF0aW9uIGVtaXR0ZXIgdXNlZCBmb3IgZW1pdHRpbmcgY29uZmlybWF0aW9uIGV2ZW50cy5cclxuICAgICAqL1xyXG4gICAgZ2V0Q29uZm9ybWF0aW9uRW1pdHRlcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY29uZmlybWF0aW9uU2VydmljZS5nZXRDb25mb3JtYXRpb25FbWl0dGVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXRyaWV2ZXMgdGhlIGRpYWxvZyBlbWl0dGVyIGZyb20gdGhlIGNvbmZpcm1hdGlvbiBzZXJ2aWNlLlxyXG4gICAgICpcclxuICAgICAqIFRoZSBkaWFsb2cgZW1pdHRlciBpcyBhbiBSeEpTIFN1YmplY3QgdGhhdCBlbWl0cyB3aGVuZXZlciBhIGNvbmZpcm1hdGlvbiBkaWFsb2cgaXNcclxuICAgICAqIG9wZW5lZCBvciBjbG9zZWQuIFRoZSB2YWx1ZSBlbWl0dGVkIGlzIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgYSBkaWFsb2cgaXNcclxuICAgICAqIGN1cnJlbnRseSBvcGVuLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm5zIFRoZSBkaWFsb2cgZW1pdHRlciB1c2VkIGZvciBlbWl0dGluZyBjb25maXJtYXRpb24gZGlhbG9nIGV2ZW50cy5cclxuICAgICAqL1xyXG4gICAgZ2V0RGlhbG9nRW1pdHRlcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY29uZmlybWF0aW9uU2VydmljZS5nZXREaWFsb2dFbWl0dGVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXRyaWV2ZXMgdGhlIHJlbW92ZSBlbWl0dGVyIGZyb20gdGhlIGNvbmZpcm1hdGlvbiBzZXJ2aWNlLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgcmVtb3ZlIGVtaXR0ZXIgaXMgYW4gUnhKUyBTdWJqZWN0IHRoYXQgZW1pdHMgd2hlbmV2ZXIgYSByZW1vdmFsIGNvbmZpcm1hdGlvblxyXG4gICAgICogZGlhbG9nIGlzIG9wZW5lZCBvciBjbG9zZWQuIFRoZSB2YWx1ZSBlbWl0dGVkIGlzIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgYVxyXG4gICAgICogcmVtb3ZhbCBkaWFsb2cgaXMgY3VycmVudGx5IG9wZW4uXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm5zIFRoZSByZW1vdmUgZW1pdHRlciB1c2VkIGZvciBlbWl0dGluZyByZW1vdmFsIGNvbmZpcm1hdGlvbiBkaWFsb2cgZXZlbnRzLlxyXG4gICAgICovXHJcbiAgICBnZXRSZW1vdmVFbWl0dGVyKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jb25maXJtYXRpb25TZXJ2aWNlLmdldFJlbW92ZUVtaXR0ZXIoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENvcGllcyB0aGUgcHJvdmlkZWQgdGV4dCB0byB0aGUgY2xpcGJvYXJkIGFuZCBkaXNwbGF5cyBhIHN1Y2Nlc3Mgbm90aWZpY2F0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0ZXh0IC0gVGhlIHRleHQgdG8gYmUgY29waWVkIHRvIHRoZSBjbGlwYm9hcmQuXHJcbiAgICAgKi9cclxuICAgIGNvcHlUb0NsaXBib2FyZCh0ZXh0OiBzdHJpbmcpIHtcclxuICAgICAgICAvLyBDcmVhdGUgYSB0ZW1wb3JhcnkgaW5wdXQgZWxlbWVudCB0byBob2xkIHRoZSB0ZXh0XHJcbiAgICAgICAgY29uc3QgdGVtcElucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xyXG5cclxuICAgICAgICAvLyBTZXQgdGhlIGlucHV0J3MgdmFsdWUgdG8gdGhlIHRleHQgdG8gYmUgY29waWVkXHJcbiAgICAgICAgdGVtcElucHV0LnZhbHVlID0gdGV4dDtcclxuXHJcbiAgICAgICAgLy8gQXBwZW5kIHRoZSB0ZW1wb3JhcnkgaW5wdXQgdG8gdGhlIGRvY3VtZW50IGJvZHlcclxuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRlbXBJbnB1dCk7XHJcblxyXG4gICAgICAgIC8vIFNlbGVjdCB0aGUgdGV4dCBpbiB0aGUgaW5wdXQgZWxlbWVudFxyXG4gICAgICAgIHRlbXBJbnB1dC5zZWxlY3QoKTtcclxuXHJcbiAgICAgICAgLy8gRXhlY3V0ZSB0aGUgY29weSBjb21tYW5kXHJcbiAgICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoXCJjb3B5XCIpO1xyXG5cclxuICAgICAgICAvLyBSZW1vdmUgdGhlIHRlbXBvcmFyeSBpbnB1dCBmcm9tIHRoZSBkb2N1bWVudCBib2R5XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0ZW1wSW5wdXQpO1xyXG5cclxuICAgICAgICAvLyBTaG93IGEgc3VjY2VzcyBub3RpZmljYXRpb25cclxuICAgICAgICB0aGlzLnNob3dTdWNjZXNzKHtcclxuICAgICAgICAgICAgbWVzc2FnZTogXCJcIixcclxuICAgICAgICAgICAgdGl0bGU6IFwiQ29waWVkIHRvIGNsaXBib2FyZCFcIixcclxuICAgICAgICAgICAgY29uZmlndXJhdGlvbjoge1xyXG4gICAgICAgICAgICAgICAgdGltZU91dDogMTAwMCxcclxuICAgICAgICAgICAgICAgIHBvc2l0aW9uQ2xhc3M6ICd0b2FzdC10b3AtY2VudGVyJyxcclxuICAgICAgICAgICAgICAgIGVhc2luZzogJ2Vhc2UtaW4nLFxyXG4gICAgICAgICAgICAgICAgZWFzZVRpbWU6IDMwMCxcclxuICAgICAgICAgICAgICAgIGV4dGVuZGVkVGltZU91dDogMjAwMCxcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29waWVzIHRoZSBjdXJyZW50IFVSTCB0byB0aGUgY2xpcGJvYXJkIGFuZCBkaXNwbGF5cyBhIHN1Y2Nlc3Mgbm90aWZpY2F0aW9uLlxyXG4gICAgICovXHJcbiAgICBjb3B5Q3VycmVudFVybFRvQ2xpcGJvYXJkKCkge1xyXG4gICAgICAgIC8vIFVzZSB0aGUgY29weVRvQ2xpcGJvYXJkIG1ldGhvZCB0byBjb3B5IHRoZSBjdXJyZW50IHdpbmRvdyBVUkxcclxuICAgICAgICB0aGlzLmNvcHlUb0NsaXBib2FyZCh3aW5kb3cubG9jYXRpb24uaHJlZik7XHJcbiAgICB9XHJcbn0iXX0=
|
|
344
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhYi1zZGsvc3JjL2xpYi91aS91aS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBT25ELE9BQU8sRUFBRSxjQUFjLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDNUMsT0FBTyxFQUFnRCxtQkFBbUIsRUFBdUIsbUJBQW1CLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQzs7QUFLL0ssTUFBTSxPQUFPLFNBQVM7SUFDRCxvQkFBb0IsR0FBd0IsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDeEUsb0JBQW9CLEdBQXdCLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBRXpGOzs7OztPQUtHO0lBQ0gsVUFBVSxDQUFDLE9BQTBCO1FBQ2pDLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxZQUFZLEVBQUUsR0FBRyxPQUFPLENBQUM7UUFFMUMsUUFBUSxJQUFJLEVBQUUsQ0FBQztZQUNYLEtBQUssaUJBQWlCLENBQUMsT0FBTztnQkFDMUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFDL0IsTUFBTTtZQUVWLEtBQUssaUJBQWlCLENBQUMsS0FBSztnQkFDeEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFDOUIsTUFBTTtZQUVWLEtBQUssaUJBQWlCLENBQUMsT0FBTztnQkFDMUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFDOUIsTUFBTTtZQUVWLEtBQUssaUJBQWlCLENBQUMsTUFBTTtnQkFDekIsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENB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QUcsSUFBSSxDQUFDO1FBRXZCLGtEQUFrRDtRQUNsRCxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUVyQyx1Q0FBdUM7UUFDdkMsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBRW5CLDJCQUEyQjtRQUMzQixRQUFRLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTdCLG9EQUFvRDtRQUNwRCxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUVyQyw4QkFBOEI7UUFDOUIsSUFBSSxDQUFDLFdBQVcsQ0FBQztZQUNiLE9BQU8sRUFBRSxFQUFFO1lBQ1gsS0FBSyxFQUFFLHNCQUFzQjtZQUM3QixhQUFhLEVBQUU7Z0JBQ1gsT0FBTyxFQUFFLElBQUk7Z0JBQ2IsYUFBYSxFQUFFLGtCQUFrQjtnQkFDakMsTUFBTSxFQUFFLFNBQVM7Z0JBQ2pCLFFBQVEsRUFBRSxHQUFHO2dCQUNiLGVBQWUsRUFBRSxJQUFJO2FBQ3hCO1NBQ0osQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVEOztPQUVHO0lBQ0gseUJBQXlCO1FBQ3JCLGdFQUFnRTtRQUNoRSxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0MsQ0FBQzt3R0FwWVEsU0FBUzs0R0FBVCxTQUFTLGNBRk4sTUFBTTs7NEZBRVQsU0FBUztrQkFIckIsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gICAgU2NyZWVuT3Blbk9wdGlvbnMsXG4gICAgTmF2aWdhdGlvbk9wdGlvbnMsXG4gICAgQmFzZVNjcmVlbk9wdGlvbnMsXG4gICAgTmF2aWdhdGVUb1N1YmRvbWFpbk9wdGlvbnNcbn0gZnJvbSAnLi4vaW50ZXJmYWNlL3VpLmludGVyZmFjZSc7XG5pbXBvcnQgeyBOYXZpZ2F0aW9uVHlwZSwgU2NyZWVuRGlzcGxheU1vZGUgfSBmcm9tICcuLi9lbnVtL3VpLmVudW0nO1xuaW1wb3J0IHsgVGFiU2RrIH0gZnJvbSAnLi4vdGFiLXNkay5zZXJ2aWNlJztcbmltcG9ydCB7IEJhc2VOb3RpZmljYXRpb25PcHRpb25zLCBDb25maXJtYXRpb25PcHRpb25zLCBDb25maXJtYXRpb25TZXJ2aWNlLCBOb3RpZmljYXRpb25PcHRpb25zLCBOb3RpZmljYXRpb25TZXJ2aWNlLCBOb3RpZmljYXRpb25UeXBlIH0gZnJvbSAnQHRlY2hleHRlbnNvci90YWItY29yZS11dGlsaXR5JztcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBVaVNlcnZpY2Uge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX25vdGlmaWNhdGlvblNlcnZpY2U6IE5vdGlmaWNhdGlvblNlcnZpY2UgPSBpbmplY3QoTm90aWZpY2F0aW9uU2VydmljZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfY29uZmlybWF0aW9uU2VydmljZTogQ29uZmlybWF0aW9uU2VydmljZSA9IGluamVjdChDb25maXJtYXRpb25TZXJ2aWNlKTtcblxuICAgIC8qKlxuICAgICAqIE9wZW4gYSBzY3JlZW4gd2l0aCB0aGUgZ2l2ZW4gb3B0aW9ucy4gVGhlIG1vZGUgZGV0ZXJtaW5lcyBob3cgdGhlIHNjcmVlbiBpc1xuICAgICAqIGRpc3BsYXllZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIGZvciBvcGVuaW5nIHRoZSBzY3JlZW4uXG4gICAgICovXG4gICAgb3BlblNjcmVlbihvcHRpb25zOiBTY3JlZW5PcGVuT3B0aW9ucyk6IHZvaWQge1xuICAgICAgICBjb25zdCB7IG1vZGUsIC4uLm90aGVyT3B0aW9ucyB9ID0gb3B0aW9ucztcblxuICAgICAgICBzd2l0Y2ggKG1vZGUpIHtcbiAgICAgICAgICAgIGNhc2UgU2NyZWVuRGlzcGxheU1vZGUuU2lkZWJhcjpcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dTaWRlYmFyKG90aGVyT3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgU2NyZWVuRGlzcGxheU1vZGUuUG9wdXA6XG4gICAgICAgICAgICAgICAgdGhpcy5zaG93RGlhbG9nKG90aGVyT3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgU2NyZWVuRGlzcGxheU1vZGUuU2FtZVRhYjpcbiAgICAgICAgICAgICAgICB0aGlzLm5hdmlnYXRlVG8ob3RoZXJPcHRpb25zKTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSBTY3JlZW5EaXNwbGF5TW9kZS5OZXdUYWI6XG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuSW5OZXdUYWIob3RoZXJPcHRpb25zKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE9wZW5zIGEgc2NyZWVuIGluIGEgc2lkZWJhci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIGZvciBvcGVuaW5nIHRoZSBzaWRlYmFyLlxuICAgICAqL1xuICAgIHNob3dTaWRlYmFyKG9wdGlvbnM6IEJhc2VTY3JlZW5PcHRpb25zKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG90aGVyQ29uZmlndXJhdGlvbiA9IHtcbiAgICAgICAgICAgIC4uLihvcHRpb25zLnRpdGxlICYmIHsgdGl0bGU6IG9wdGlvbnMudGl0bGUgfSksXG4gICAgICAgICAgICAuLi4ob3B0aW9ucy53aWR0aCAmJiB7IHdpZHRoOiBvcHRpb25zLndpZHRoIH0pLFxuICAgICAgICAgICAgLi4uKG9wdGlvbnMuaGVpZ2h0ICYmIHsgaGVpZ2h0OiBvcHRpb25zLmhlaWdodCB9KSxcbiAgICAgICAgICAgIC4uLihvcHRpb25zLmN1c3RvbUNsYXNzICYmIHsgY3VzdG9tQ2xhc3M6IG9wdGlvbnMuY3VzdG9tQ2xhc3MgfSksXG4gICAgICAgICAgICAuLi4ob3B0aW9ucy5yZWZyZXNoZXIgJiYgeyByZWZyZXNoZXI6IG9wdGlvbnMucmVmcmVzaGVyIH0pLFxuICAgICAgICAgICAgLi4uKG9wdGlvbnMuY2xvc2VyICYmIHsgY2xvc2VyOiBvcHRpb25zLmNsb3NlciB9KVxuICAgICAgICB9O1xuXG4gICAgICAgIFRhYlNkay51dGlsPy5vcGVuU2NyZWVuKFxuICAgICAgICAgICAgU2NyZWVuRGlzcGxheU1vZGUuU2lkZWJhcixcbiAgICAgICAgICAgIG9wdGlvbnMuc2NyZWVuSWQsXG4gICAgICAgICAgICBvcHRpb25zLnJlcXRva2VucyB8fCB1bmRlZmluZWQsXG4gICAgICAgICAgICBvcHRpb25zLnN1Ym1pc3Npb24gfHwgdW5kZWZpbmVkLFxuICAgICAgICAgICAgT2JqZWN0LmtleXMob3RoZXJDb25maWd1cmF0aW9uKS5sZW5ndGggPiAwID8gb3RoZXJDb25maWd1cmF0aW9uIDogdW5kZWZpbmVkXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogT3BlbnMgYSBzY3JlZW4gaW4gYSBwb3B1cCBkaWFsb2cuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBmb3Igb3BlbmluZyB0aGUgZGlhbG9nLlxuICAgICAqL1xuICAgIHNob3dEaWFsb2cob3B0aW9uczogQmFzZVNjcmVlbk9wdGlvbnMpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgb3RoZXJDb25maWd1cmF0aW9uID0ge1xuICAgICAgICAgICAgLi4uKG9wdGlvbnMudGl0bGUgJiYgeyB0aXRsZTogb3B0aW9ucy50aXRsZSB9KSxcbiAgICAgICAgICAgIC4uLihvcHRpb25zLndpZHRoICYmIHsgd2lkdGg6IG9wdGlvbnMud2lkdGggfSksXG4gICAgICAgICAgICAuLi4ob3B0aW9ucy5oZWlnaHQgJiYgeyBoZWlnaHQ6IG9wdGlvbnMuaGVpZ2h0IH0pLFxuICAgICAgICAgICAgLi4uKG9wdGlvbnMuY3VzdG9tQ2xhc3MgJiYgeyBjdXN0b21DbGFzczogb3B0aW9ucy5jdXN0b21DbGFzcyB9KSxcbiAgICAgICAgICAgIC4uLihvcHRpb25zLnJlZnJlc2hlciAmJiB7IHJlZnJlc2hlcjogb3B0aW9ucy5yZWZyZXNoZXIgfSksXG4gICAgICAgICAgICAuLi4ob3B0aW9ucy5jbG9zZXIgJiYgeyBjbG9zZXI6IG9wdGlvbnMuY2xvc2VyIH0pXG4gICAgICAgIH07XG5cbiAgICAgICAgVGFiU2RrLnV0aWw/Lm9wZW5TY3JlZW4oXG4gICAgICAgICAgICBTY3JlZW5EaXNwbGF5TW9kZS5Qb3B1cCxcbiAgICAgICAgICAgIG9wdGlvbnMuc2NyZWVuSWQsXG4gICAgICAgICAgICBvcHRpb25zLnJlcXRva2VucyB8fCB1bmRlZmluZWQsXG4gICAgICAgICAgICBvcHRpb25zLnN1Ym1pc3Npb24gfHwgdW5kZWZpbmVkLFxuICAgICAgICAgICAgT2JqZWN0LmtleXMob3RoZXJDb25maWd1cmF0aW9uKS5sZW5ndGggPiAwID8gb3RoZXJDb25maWd1cmF0aW9uIDogdW5kZWZpbmVkXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTmF2aWdhdGVzIHRvIGEgc2NyZWVuIHdpdGhpbiB0aGUgc2FtZSB0YWIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIGZvciBuYXZpZ2F0aW9uLCBpbmNsdWRpbmcgc2NyZWVuSWQgYW5kIG9wdGlvbmFsIHJlcXRva2Vucy5cbiAgICAgKi9cbiAgICBuYXZpZ2F0ZVRvKG9wdGlvbnM6IE5hdmlnYXRpb25PcHRpb25zKTogdm9pZCB7XG4gICAgICAgIFRhYlNkay51dGlsPy5vcGVuU2NyZWVuKFxuICAgICAgICAgICAgU2NyZWVuRGlzcGxheU1vZGUuU2FtZVRhYixcbiAgICAgICAgICAgIG9wdGlvbnMuc2NyZWVuSWQsXG4gICAgICAgICAgICBvcHRpb25zLnJlcXRva2VucyB8fCB1bmRlZmluZWRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBOYXZpZ2F0ZXMgdG8gYSBzY3JlZW4gaW4gYSBuZXcgdGFiLlxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgZm9yIG5hdmlnYXRpb24sIGluY2x1ZGluZyBzY3JlZW5JZCBhbmQgb3B0aW9uYWwgcmVxdG9rZW5zLlxuICAgICAqL1xuICAgIG9wZW5Jbk5ld1RhYihvcHRpb25zOiBOYXZpZ2F0aW9uT3B0aW9ucyk6IHZvaWQge1xuICAgICAgICBUYWJTZGsudXRpbD8ub3BlblNjcmVlbihcbiAgICAgICAgICAgIFNjcmVlbkRpc3BsYXlNb2RlLk5ld1RhYixcbiAgICAgICAgICAgIG9wdGlvbnMuc2NyZWVuSWQsXG4gICAgICAgICAgICBvcHRpb25zLnJlcXRva2VucyB8fCB1bmRlZmluZWRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBOYXZpZ2F0ZXMgdG8gdGhlIHNwZWNpZmllZCBVUkwuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJsIC0gVGhlIFVSTCB0byBuYXZpZ2F0ZSB0by5cbiAgICAgKi9cbiAgICBuYXZpZ2F0ZVRvVXJsKHBhcmFtczogeyB1cmw6IHN0cmluZywgZXh0cmFzPzogYW55LCByZXBsYWNlVXJsPzogYm9vbGVhbiB9KTogdm9pZCB7XG4gICAgICAgIFRhYlNkay51dGlsPy5uYXZpZ2F0ZVRvKHtcbiAgICAgICAgICAgIC4uLnBhcmFtcyxcbiAgICAgICAgICAgIHR5cGU6IE5hdmlnYXRpb25UeXBlLk5hdmlnYXRlVG9VcmxcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBOYXZpZ2F0ZXMgdG8gYSBzcGVjaWZpZWQgc3ViZG9tYWluIHVzaW5nIHRoZSBwcm92aWRlZCBvcHRpb25zLlxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgbmF2aWdhdGlvbiwgaW5jbHVkaW5nIHN1YkRvbWFpbiwgYXBwQ29kZSwgYW5kIHVybC5cbiAgICAgKi9cbiAgICBuYXZpZ2F0ZVRvU3ViZG9tYWluKG9wdGlvbnM6IE5hdmlnYXRlVG9TdWJkb21haW5PcHRpb25zKTogdm9pZCB7XG4gICAgICAgIFRhYlNkay51dGlsPy5uYXZpZ2F0ZVRvKHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICB0eXBlOiBOYXZpZ2F0aW9uVHlwZS5OYXZpZ2F0ZVRvU3ViZG9tYWluXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0cmlldmVzIHRoZSBhY3RpdmUgc2NyZWVuIElEIGZyb20gdGhlIGN1cnJlbnQgVVJMLlxuICAgICAqXG4gICAgICogQHJldHVybnMgVGhlIHNjcmVlbiBJRCBpZiBwcmVzZW50IGluIHRoZSBVUkwsIG90aGVyd2lzZSB1bmRlZmluZWQuXG4gICAgICovXG4gICAgZ2V0QWN0aXZlVXJsU2NyZWVuSWQoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgLy8gU3BsaXQgdGhlIFVSTCBwYXRobmFtZSBpbnRvIHBhcnRzIHVzaW5nIHRoZSAnLycgY2hhcmFjdGVyIGFzIGEgZGVsaW1pdGVyXG4gICAgICAgIGNvbnN0IHVybFBhcnRzID0gd2luZG93Py5sb2NhdGlvbj8ucGF0aG5hbWU/LnNwbGl0KCcvJyk7XG4gICAgICAgIC8vIEV4dHJhY3QgdGhlIHNjcmVlbiBJRCBwYXJ0IGFuZCByZW1vdmUgYW55IHF1ZXJ5IHBhcmFtZXRlcnNcbiAgICAgICAgY29uc3Qgc2NyZWVuSWQgPSB1cmxQYXJ0cz8ubGVuZ3RoID4gMSA/IHVybFBhcnRzPy5bdXJsUGFydHM/Lmxlbmd0aCAtIDFdPy5zcGxpdCgnPycpWzBdIDogdW5kZWZpbmVkO1xuICAgICAgICAvLyBSZXR1cm4gdGhlIHNjcmVlbiBJRCBvciB1bmRlZmluZWQgaWYgbm90IGZvdW5kXG4gICAgICAgIHJldHVybiBzY3JlZW5JZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXRyaWV2ZXMgdGhlIGFjdGl2ZSByZWRpcmVjdCBVUkwgYnkgY29tYmluaW5nIHRoZSBhY3RpdmUgc2NyZWVuIElEIGFuZCBhbnkgcXVlcnkgcGFyYW1ldGVycy5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIFRoZSBjb25zdHJ1Y3RlZCByZWRpcmVjdCBVUkwgb3IgdW5kZWZpbmVkIGlmIG5vIHNjcmVlbiBJRCBpcyBwcmVzZW50LlxuICAgICAqL1xuICAgIGdldEFjdGl2ZVJlZGlyZWN0VXJsKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgICAgIC8vIEdldCB0aGUgYWN0aXZlIHNjcmVlbiBJRCBmcm9tIHRoZSBjdXJyZW50IFVSTFxuICAgICAgICBjb25zdCBzY3JlZW5JZCA9IHRoaXMuZ2V0QWN0aXZlVXJsU2NyZWVuSWQoKTtcbiAgICAgICAgbGV0IHJlZGlyZWN0VVJMO1xuXG4gICAgICAgIC8vIENoZWNrIGlmIHRoZSBjdXJyZW50IFVSTCBjb250YWlucyBhIHNjcmVlbiBJRFxuICAgICAgICBpZiAoc2NyZWVuSWQpIHtcbiAgICAgICAgICAgIC8vIEluaXRpYWxpemUgdGhlIHJlZGlyZWN0IFVSTCB3aXRoIHRoZSBzY3JlZW4gSURcbiAgICAgICAgICAgIHJlZGlyZWN0VVJMID0gc2NyZWVuSWQ7XG5cbiAgICAgICAgICAgIC8vIFBhcnNlIHRoZSBjdXJyZW50IFVSTCdzIHF1ZXJ5IHBhcmFtZXRlcnNcbiAgICAgICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKTtcblxuICAgICAgICAgICAgLy8gSWYgdGhlcmUgYXJlIHF1ZXJ5IHBhcmFtZXRlcnMsIGFwcGVuZCB0aGVtIHRvIHRoZSByZWRpcmVjdCBVUkxcbiAgICAgICAgICAgIGlmIChxdWVyeVBhcmFtcy50b1N0cmluZygpKSB7XG4gICAgICAgICAgICAgICAgcmVkaXJlY3RVUkwgKz0gYCYke3F1ZXJ5UGFyYW1zLnRvU3RyaW5nKCl9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJldHVybiB0aGUgY29uc3RydWN0ZWQgcmVkaXJlY3QgVVJMIG9yIHVuZGVmaW5lZFxuICAgICAgICByZXR1cm4gcmVkaXJlY3RVUkw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2hvdyBhIG5vdGlmaWNhdGlvbiB0byB0aGUgdXNlci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIGZvciB0aGUgbm90aWZpY2F0aW9uLlxuICAgICAqL1xuICAgIG5vdGlmeShvcHRpb25zOiBOb3RpZmljYXRpb25PcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ub3RpZmljYXRpb25TZXJ2aWNlLm5vdGlmeSh7XG4gICAgICAgICAgICB0eXBlOiBvcHRpb25zLnR5cGUsXG4gICAgICAgICAgICBtZXNzYWdlOiBUYWJTZGsudHJhbnNsYXRvci50cmFuc2xhdGUob3B0aW9ucy5tZXNzYWdlKSxcbiAgICAgICAgICAgIC4uLihvcHRpb25zPy50aXRsZSA/IHsgdGl0bGU6IFRhYlNkay50cmFuc2xhdG9yLnRyYW5zbGF0ZShvcHRpb25zLnRpdGxlKSB9IDoge30pLFxuICAgICAgICAgICAgLi4uKG9wdGlvbnM/LmNvbmZpZ3VyYXRpb24gPyB7IGNvbmZpZ3VyYXRpb246IG9wdGlvbnMuY29uZmlndXJhdGlvbiB9IDoge30pLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEaXNwbGF5cyBhIHN1Y2Nlc3Mgbm90aWZpY2F0aW9uIHRvIHRoZSB1c2VyLlxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgdGhlIG5vdGlmaWNhdGlvbiwgaW5jbHVkaW5nIG1lc3NhZ2UsIHRpdGxlLCBhbmQgY29uZmlndXJhdGlvbi5cbiAgICAgKi9cbiAgICBzaG93U3VjY2VzcyhvcHRpb25zOiBCYXNlTm90aWZpY2F0aW9uT3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIHR5cGU6IE5vdGlmaWNhdGlvblR5cGUuU3VjY2VzcyxcbiAgICAgICAgICAgIHRpdGxlOiBvcHRpb25zPy50aXRsZSA/PyAnU3VjY2VzcydcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGlzcGxheXMgYSB3YXJuaW5nIG5vdGlmaWNhdGlvbiB0byB0aGUgdXNlci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIHRoZSBub3RpZmljYXRpb24sIGluY2x1ZGluZyBtZXNzYWdlLCB0aXRsZSwgYW5kIGNvbmZpZ3VyYXRpb24uXG4gICAgICovXG4gICAgc2hvd1dhcm5pbmcob3B0aW9uczogQmFzZU5vdGlmaWNhdGlvbk9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICB0eXBlOiBOb3RpZmljYXRpb25UeXBlLldhcm5pbmcsXG4gICAgICAgICAgICB0aXRsZTogb3B0aW9ucz8udGl0bGUgPz8gJ1dhcm5pbmcnXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERpc3BsYXlzIGFuIGluZm8gbm90aWZpY2F0aW9uIHRvIHRoZSB1c2VyLlxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgdGhlIG5vdGlmaWNhdGlvbiwgaW5jbHVkaW5nIG1lc3NhZ2UsIHRpdGxlLCBhbmQgY29uZmlndXJhdGlvbi5cbiAgICAgKi9cbiAgICBzaG93SW5mbyhvcHRpb25zOiBCYXNlTm90aWZpY2F0aW9uT3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIHR5cGU6IE5vdGlmaWNhdGlvblR5cGUuSW5mbyxcbiAgICAgICAgICAgIHRpdGxlOiBvcHRpb25zPy50aXRsZSA/PyAnSW5mbydcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGlzcGxheXMgYW4gZXJyb3Igbm90aWZpY2F0aW9uIHRvIHRoZSB1c2VyLlxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgdGhlIG5vdGlmaWNhdGlvbiwgaW5jbHVkaW5nIG1lc3NhZ2UsIHRpdGxlLCBhbmQgY29uZmlndXJhdGlvbi5cbiAgICAgKi9cbiAgICBzaG93RXJyb3Iob3B0aW9uczogQmFzZU5vdGlmaWNhdGlvbk9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICB0eXBlOiBOb3RpZmljYXRpb25UeXBlLkVycm9yLFxuICAgICAgICAgICAgdGl0bGU6IG9wdGlvbnM/LnRpdGxlID8/ICdFcnJvcidcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2xlYXJzIGEgbm90aWZpY2F0aW9uIGJ5IElELlxuICAgICAqXG4gICAgICogQHBhcmFtIG5vdGlmaWNhdGlvbklkIC0gVGhlIElEIG9mIHRoZSBub3RpZmljYXRpb24gdG8gY2xlYXIuXG4gICAgICogQHJldHVybnMgVGhlIGNsZWFyZWQgbm90aWZpY2F0aW9uLCBvciBudWxsIGlmIHRoZSBub3RpZmljYXRpb24gZG9lc24ndCBleGlzdC5cbiAgICAgKi9cbiAgICBjbGVhck5vdGlmaWNhdGlvbihub3RpZmljYXRpb25JZDogbnVtYmVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ub3RpZmljYXRpb25TZXJ2aWNlLmNsZWFyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbklkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEaXNwbGF5cyBhIGNvbmZpcm1hdGlvbiBkaWFsb2cgdG8gdGhlIHVzZXIgYW5kIHJldHVybnMgYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXNcbiAgICAgKiB0byBhIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSB1c2VyIGNvbmZpcm1lZCB0aGUgYWN0aW9uLlxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgdGhlIGNvbmZpcm1hdGlvbiBkaWFsb2csIGluY2x1ZGluZyB0aXRsZSwgbWVzc2FnZSxcbiAgICAgKiBjb25maXJtVGV4dCwgY2FuY2VsVGV4dCwgYW5kIHZpc2liaWxpdHkgb2YgYnV0dG9ucy5cbiAgICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0cnVlIGlmIHRoZSB1c2VyIGNvbmZpcm1zLCBmYWxzZSBvdGhlcndpc2UuXG4gICAgICovXG4gICAgY29uZmlybShvcHRpb25zPzogQ29uZmlybWF0aW9uT3B0aW9ucyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2NvbmZpcm1hdGlvblNlcnZpY2UuY29uZmlybShvcHRpb25zKVxuICAgICAgICAgICAgICAgID8uc3Vic2NyaWJlKChpc0NvbmZpcm1lZDogYm9vbGVhbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGlzQ29uZmlybWVkKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGlzcGxheXMgYSBjb25maXJtYXRpb24gZGlhbG9nIHRvIHRoZSB1c2VyIHdpdGggYSB0aXRsZSBhbmQgbWVzc2FnZSB0aGF0IGluZGljYXRlc1xuICAgICAqIHRoZSB1c2VyIGlzIGFib3V0IHRvIGRlbGV0ZSBhbiBpdGVtLiBUaGUgY29uZmlybWF0aW9uIGRpYWxvZyBoYXMgYSBcIkRlbGV0ZVwiIGFuZCBcIkNhbmNlbFwiXG4gICAgICogYnV0dG9uLlxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgdGhlIGNvbmZpcm1hdGlvbiBkaWFsb2csIGluY2x1ZGluZyB0aGUgaXRlbSBuYW1lIGFuZFxuICAgICAqIG9wdGlvbmFsIG1lc3NhZ2UuXG4gICAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdHJ1ZSBpZiB0aGUgdXNlciBjb25maXJtcywgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgICAqL1xuICAgIGNvbmZpcm1EZWxldGUob3B0aW9ucz86IENvbmZpcm1hdGlvbk9wdGlvbnMpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZmlybSh7XG4gICAgICAgICAgICB0aXRsZTogb3B0aW9ucz8udGl0bGUgPz8gYEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhpcyByZWNvcmRgLFxuICAgICAgICAgICAgbWVzc2FnZTogb3B0aW9ucz8ubWVzc2FnZSA/PyBgWW91IGFyZSBhYm91dCB0byBkZWxldGUgdGhlIHNlbGVjdGVkIHJlY29yZC4gQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHByb2NlZWQ/YCxcbiAgICAgICAgICAgIHByaW1hcnlPcHRpb246ICdEZWxldGUnLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEaXNwbGF5cyBhIGNvbmZpcm1hdGlvbiBkaWFsb2cgdG8gdGhlIHVzZXIgd2l0aCBhIHRpdGxlIGFuZCBtZXNzYWdlIHRoYXQgaW5kaWNhdGVzXG4gICAgICogdGhlIHVzZXIgaXMgYWJvdXQgdG8gZGlzY2FyZCBjaGFuZ2VzIHRvIGFuIGl0ZW0uIFRoZSBjb25maXJtYXRpb24gZGlhbG9nIGhhcyBhIFwiRGlzY2FyZFwiXG4gICAgICogYW5kIFwiQ2FuY2VsXCIgYnV0dG9uLlxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgdGhlIGNvbmZpcm1hdGlvbiBkaWFsb2csIGluY2x1ZGluZyB0aGUgaXRlbSBuYW1lIGFuZFxuICAgICAqIG9wdGlvbmFsIG1lc3NhZ2UuXG4gICAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdHJ1ZSBpZiB0aGUgdXNlciBjb25maXJtcywgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgICAqL1xuICAgIGNvbmZpcm1EaXNjYXJkKG9wdGlvbnM/OiBDb25maXJtYXRpb25PcHRpb25zKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbmZpcm0oe1xuICAgICAgICAgICAgdGl0bGU6IGBBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGlzY2FyZCB5b3VyIGNoYW5nZXNgLFxuICAgICAgICAgICAgbWVzc2FnZTogb3B0aW9ucz8ubWVzc2FnZSA/PyBgWW91IGFyZSBhYm91dCB0byBkaXNjYXJkIHlvdXIgY2hhbmdlcy4gQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHByb2NlZWQ/YCxcbiAgICAgICAgICAgIHByaW1hcnlPcHRpb246ICdEaXNjYXJkJyxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2xvc2VzIHRoZSBjb25maXJtYXRpb24gZGlhbG9nLlxuICAgICAqXG4gICAgICogVGhpcyBtZXRob2QgY2FuIGJlIHVzZWQgdG8gbWFudWFsbHkgY2xvc2UgdGhlIGNvbmZpcm1hdGlvbiBkaWFsb2cuXG4gICAgICovXG4gICAgY2xvc2VDb25maXJtYXRpb25EaWFsb2coKSB7XG4gICAgICAgIC8vIENsb3NlIHRoZSBjb25maXJtYXRpb24gZGlhbG9nXG4gICAgICAgIHRoaXMuX2NvbmZpcm1hdGlvblNlcnZpY2UuY2xvc2VEaWFsb2coKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXRyaWV2ZXMgdGhlIGNvbmZpcm1hdGlvbiBlbWl0dGVyIGZyb20gdGhlIGNvbmZpcm1hdGlvbiBzZXJ2aWNlLlxuICAgICAqIFxuICAgICAqIEByZXR1cm5zIFRoZSBjb25maXJtYXRpb24gZW1pdHRlciB1c2VkIGZvciBlbWl0dGluZyBjb25maXJtYXRpb24gZXZlbnRzLlxuICAgICAqL1xuICAgIGdldENvbmZvcm1hdGlvbkVtaXR0ZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb25maXJtYXRpb25TZXJ2aWNlLmdldENvbmZvcm1hdGlvbkVtaXR0ZXIoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXRyaWV2ZXMgdGhlIGRpYWxvZyBlbWl0dGVyIGZyb20gdGhlIGNvbmZpcm1hdGlvbiBzZXJ2aWNlLlxuICAgICAqXG4gICAgICogVGhlIGRpYWxvZyBlbWl0dGVyIGlzIGFuIFJ4SlMgU3ViamVjdCB0aGF0IGVtaXRzIHdoZW5ldmVyIGEgY29uZmlybWF0aW9uIGRpYWxvZyBpc1xuICAgICAqIG9wZW5lZCBvciBjbG9zZWQuIFRoZSB2YWx1ZSBlbWl0dGVkIGlzIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgYSBkaWFsb2cgaXNcbiAgICAgKiBjdXJyZW50bHkgb3Blbi5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIFRoZSBkaWFsb2cgZW1pdHRlciB1c2VkIGZvciBlbWl0dGluZyBjb25maXJtYXRpb24gZGlhbG9nIGV2ZW50cy5cbiAgICAgKi9cbiAgICBnZXREaWFsb2dFbWl0dGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29uZmlybWF0aW9uU2VydmljZS5nZXREaWFsb2dFbWl0dGVyKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0cmlldmVzIHRoZSByZW1vdmUgZW1pdHRlciBmcm9tIHRoZSBjb25maXJtYXRpb24gc2VydmljZS5cbiAgICAgKiBcbiAgICAgKiBUaGUgcmVtb3ZlIGVtaXR0ZXIgaXMgYW4gUnhKUyBTdWJqZWN0IHRoYXQgZW1pdHMgd2hlbmV2ZXIgYSByZW1vdmFsIGNvbmZpcm1hdGlvblxuICAgICAqIGRpYWxvZyBpcyBvcGVuZWQgb3IgY2xvc2VkLiBUaGUgdmFsdWUgZW1pdHRlZCBpcyBhIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIGFcbiAgICAgKiByZW1vdmFsIGRpYWxvZyBpcyBjdXJyZW50bHkgb3Blbi5cbiAgICAgKiBcbiAgICAgKiBAcmV0dXJucyBUaGUgcmVtb3ZlIGVtaXR0ZXIgdXNlZCBmb3IgZW1pdHRpbmcgcmVtb3ZhbCBjb25maXJtYXRpb24gZGlhbG9nIGV2ZW50cy5cbiAgICAgKi9cbiAgICBnZXRSZW1vdmVFbWl0dGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29uZmlybWF0aW9uU2VydmljZS5nZXRSZW1vdmVFbWl0dGVyKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29waWVzIHRoZSBwcm92aWRlZCB0ZXh0IHRvIHRoZSBjbGlwYm9hcmQgYW5kIGRpc3BsYXlzIGEgc3VjY2VzcyBub3RpZmljYXRpb24uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdGV4dCAtIFRoZSB0ZXh0IHRvIGJlIGNvcGllZCB0byB0aGUgY2xpcGJvYXJkLlxuICAgICAqL1xuICAgIGNvcHlUb0NsaXBib2FyZCh0ZXh0OiBzdHJpbmcpIHtcbiAgICAgICAgLy8gQ3JlYXRlIGEgdGVtcG9yYXJ5IGlucHV0IGVsZW1lbnQgdG8gaG9sZCB0aGUgdGV4dFxuICAgICAgICBjb25zdCB0ZW1wSW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XG5cbiAgICAgICAgLy8gU2V0IHRoZSBpbnB1dCdzIHZhbHVlIHRvIHRoZSB0ZXh0IHRvIGJlIGNvcGllZFxuICAgICAgICB0ZW1wSW5wdXQudmFsdWUgPSB0ZXh0O1xuXG4gICAgICAgIC8vIEFwcGVuZCB0aGUgdGVtcG9yYXJ5IGlucHV0IHRvIHRoZSBkb2N1bWVudCBib2R5XG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGVtcElucHV0KTtcblxuICAgICAgICAvLyBTZWxlY3QgdGhlIHRleHQgaW4gdGhlIGlucHV0IGVsZW1lbnRcbiAgICAgICAgdGVtcElucHV0LnNlbGVjdCgpO1xuXG4gICAgICAgIC8vIEV4ZWN1dGUgdGhlIGNvcHkgY29tbWFuZFxuICAgICAgICBkb2N1bWVudC5leGVjQ29tbWFuZChcImNvcHlcIik7XG5cbiAgICAgICAgLy8gUmVtb3ZlIHRoZSB0ZW1wb3JhcnkgaW5wdXQgZnJvbSB0aGUgZG9jdW1lbnQgYm9keVxuICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHRlbXBJbnB1dCk7XG5cbiAgICAgICAgLy8gU2hvdyBhIHN1Y2Nlc3Mgbm90aWZpY2F0aW9uXG4gICAgICAgIHRoaXMuc2hvd1N1Y2Nlc3Moe1xuICAgICAgICAgICAgbWVzc2FnZTogXCJcIixcbiAgICAgICAgICAgIHRpdGxlOiBcIkNvcGllZCB0byBjbGlwYm9hcmQhXCIsXG4gICAgICAgICAgICBjb25maWd1cmF0aW9uOiB7XG4gICAgICAgICAgICAgICAgdGltZU91dDogMTAwMCxcbiAgICAgICAgICAgICAgICBwb3NpdGlvbkNsYXNzOiAndG9hc3QtdG9wLWNlbnRlcicsXG4gICAgICAgICAgICAgICAgZWFzaW5nOiAnZWFzZS1pbicsXG4gICAgICAgICAgICAgICAgZWFzZVRpbWU6IDMwMCxcbiAgICAgICAgICAgICAgICBleHRlbmRlZFRpbWVPdXQ6IDIwMDAsXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvcGllcyB0aGUgY3VycmVudCBVUkwgdG8gdGhlIGNsaXBib2FyZCBhbmQgZGlzcGxheXMgYSBzdWNjZXNzIG5vdGlmaWNhdGlvbi5cbiAgICAgKi9cbiAgICBjb3B5Q3VycmVudFVybFRvQ2xpcGJvYXJkKCkge1xuICAgICAgICAvLyBVc2UgdGhlIGNvcHlUb0NsaXBib2FyZCBtZXRob2QgdG8gY29weSB0aGUgY3VycmVudCB3aW5kb3cgVVJMXG4gICAgICAgIHRoaXMuY29weVRvQ2xpcGJvYXJkKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcbiAgICB9XG59Il19
|
|
@@ -51,4 +51,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
51
51
|
providedIn: 'root'
|
|
52
52
|
}]
|
|
53
53
|
}] });
|
|
54
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
54
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFiLXNkay9zcmMvbGliL3V0aWwvdXRpbC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBSzNDLE1BQU0sT0FBTyxXQUFXO0lBQ3BCLHVDQUF1QztJQUMvQixRQUFRLEdBQUcsSUFBSSxDQUFDO0lBQ2hCLFFBQVEsR0FBUSxJQUFJLENBQUM7SUFDckIsWUFBWSxHQUFHLEtBQUssQ0FBQztJQUU3Qjs7Ozs7T0FLRztJQUNILElBQUksQ0FBQyxPQUFZO1FBQ2IsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDcEIsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQztRQUVELElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBRXpCLGtEQUFrRDtRQUNsRCxPQUFPLElBQUksS0FBSyxDQUFDLElBQUksRUFBRTtZQUNuQixHQUFHLEVBQUUsQ0FBQyxNQUFXLEVBQUUsSUFBcUIsRUFBRSxFQUFFO2dCQUN4Qyw2REFBNkQ7Z0JBQzdELElBQUksSUFBSSxJQUFJLE1BQU0sRUFBRSxDQUFDO29CQUNqQixPQUFRLE1BQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDakMsQ0FBQztnQkFFRCxxQ0FBcUM7Z0JBQ3JDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFFakMsK0JBQStCO2dCQUMvQixJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUN6RCwyQ0FBMkM7b0JBQzNDLEtBQUssTUFBTSxXQUFXLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQzt3QkFDbkQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQzt3QkFDM0MsSUFBSSxPQUFPLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxJQUFJLFFBQVEsSUFBSSxPQUFPLElBQUksT0FBTyxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssVUFBVSxFQUFFLENBQUM7NEJBQzNHLDZDQUE2Qzs0QkFDN0MsT0FBTyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO3dCQUMzQyxDQUFDO29CQUNMLENBQUM7Z0JBQ0wsQ0FBQztnQkFFRCxtREFBbUQ7Z0JBQ25ELE9BQU8sU0FBUyxDQUFDO1lBQ3JCLENBQUM7U0FDSixDQUFDLENBQUM7SUFDUCxDQUFDO3dHQS9DUSxXQUFXOzRHQUFYLFdBQVcsY0FGUixNQUFNOzs0RkFFVCxXQUFXO2tCQUh2QixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBVdGlsU2VydmljZSB7XG4gICAgLy8gV2lsbCBzdG9yZSB0aGUgc2VydmljZXMgZnJvbSBjb250ZXh0XG4gICAgcHJpdmF0ZSBfaXNQcm94eSA9IHRydWU7XG4gICAgcHJpdmF0ZSBfY29udGV4dDogYW55ID0gbnVsbDtcbiAgICBwcml2YXRlIF9pbml0aWFsaXplZCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogSW5pdGlhbGl6ZXMgdGhlIFV0aWxTZXJ2aWNlIHdpdGggY29udGV4dCB0aGF0IGNvbnRhaW5zIHNlcnZpY2UgcmVmZXJlbmNlc1xuICAgICAqIFxuICAgICAqIEBwYXJhbSBjb250ZXh0IFRoZSBjb250ZXh0IG9iamVjdCBjb250YWluaW5nIHNlcnZpY2UgcmVmZXJlbmNlc1xuICAgICAqIEByZXR1cm5zIEEgcHJveHkgdGhhdCBpbnRlcmNlcHRzIGFuZCBkZWxlZ2F0ZXMgbWV0aG9kIGNhbGxzIHRvIHRoZSBhcHByb3ByaWF0ZSBzZXJ2aWNlXG4gICAgICovXG4gICAgaW5pdChjb250ZXh0OiBhbnkpOiBhbnkge1xuICAgICAgICBpZiAodGhpcy5faW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY29udGV4dCA9IGNvbnRleHQ7XG4gICAgICAgIHRoaXMuX2luaXRpYWxpemVkID0gdHJ1ZTtcblxuICAgICAgICAvLyBSZXR1cm4gYSBwcm94eSB0aGF0IHdpbGwgaW50ZXJjZXB0IG1ldGhvZCBjYWxsc1xuICAgICAgICByZXR1cm4gbmV3IFByb3h5KHRoaXMsIHtcbiAgICAgICAgICAgIGdldDogKHRhcmdldDogYW55LCBwcm9wOiBzdHJpbmcgfCBzeW1ib2wpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBGaXJzdCBjaGVjayBpZiB0aGUgcHJvcGVydHkgZXhpc3RzIGRpcmVjdGx5IG9uIFV0aWxTZXJ2aWNlXG4gICAgICAgICAgICAgICAgaWYgKHByb3AgaW4gdGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAodGFyZ2V0IGFzIGFueSlbcHJvcF07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gQ29udmVydCBzeW1ib2wgdG8gc3RyaW5nIGlmIG5lZWRlZFxuICAgICAgICAgICAgICAgIGNvbnN0IHByb3BOYW1lID0gcHJvcC50b1N0cmluZygpO1xuXG4gICAgICAgICAgICAgICAgLy8gQ2hlY2sgY29udGV4dCBzZXJ2aWNlcyBmaXJzdFxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jb250ZXh0ICYmIE9iamVjdC5rZXlzKHRoaXMuX2NvbnRleHQpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gTG9vcCB0aHJvdWdoIGVhY2ggc2VydmljZSBpbiB0aGUgY29udGV4dFxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHNlcnZpY2VOYW1lIG9mIE9iamVjdC5rZXlzKHRoaXMuX2NvbnRleHQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzZXJ2aWNlID0gdGhpcy5fY29udGV4dFtzZXJ2aWNlTmFtZV07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VydmljZSAmJiB0eXBlb2Ygc2VydmljZSA9PT0gJ29iamVjdCcgJiYgcHJvcE5hbWUgaW4gc2VydmljZSAmJiB0eXBlb2Ygc2VydmljZVtwcm9wTmFtZV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXR1cm4gdGhlIGJvdW5kIGZ1bmN0aW9uIGZyb20gdGhlIHNlcnZpY2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VydmljZVtwcm9wTmFtZV0uYmluZChzZXJ2aWNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIElmIHByb3BlcnR5IG5vdCBmb3VuZCBhbnl3aGVyZSwgcmV0dXJuIHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbn0iXX0=
|
|
@@ -37,4 +37,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
37
37
|
providedIn: 'root'
|
|
38
38
|
}]
|
|
39
39
|
}] });
|
|
40
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNpdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFiLXNkay9zcmMvbGliL3dvcmtmbG93L3RyYW5zaXRpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQXdDLG1CQUFtQixFQUF1QixNQUFNLGdDQUFnQyxDQUFDO0FBQ2hJLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLG9CQUFvQixDQUFDOztBQUs1QyxNQUFNLE9BQU8saUJBQWlCO0lBQ1Qsb0JBQW9CLEdBQXdCLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBRXpGOzs7OztPQUtHO0lBQ0gsS0FBSyxDQUFDLGFBQWEsQ0FBQyxPQUEwQjtRQUMxQyw4RUFBOEU7UUFDOUUsTUFBTSxRQUFRLEdBQUcsTUFBTSxjQUFjLENBQ2pDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQ25ELENBQUM7UUFDRiwrQkFBK0I7UUFDL0IsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsS0FBSyxDQUFDLFlBQVksQ0FBQyxPQUE0QjtRQUMzQyxNQUFNLFFBQVEsR0FBRyxNQUFNLGNBQWMsQ0FDakMsTUFBTSxDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsT0FBTyxDQUFDLENBQ3JDLENBQUM7UUFDRiwrQkFBK0I7UUFDL0IsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQzt3R0E5QlEsaUJBQWlCOzRHQUFqQixpQkFBaUIsY0FGZCxNQUFNOzs0RkFFVCxpQkFBaUI7a0JBSDdCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25BcGlSZXNwb25zZSwgTmV4dFN0YXR1c1BheWxvYWQsIFRhYkJsdWVwcmludFNlcnZpY2UsIFVwZGF0ZVN0YXR1c1BheWxvYWQgfSBmcm9tICdAdGVjaGV4dGVuc29yL3RhYi1jb3JlLXV0aWxpdHknO1xuaW1wb3J0IHsgZmlyc3RWYWx1ZUZyb20gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFRhYlNkayB9IGZyb20gJy4uL3RhYi1zZGsuc2VydmljZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgVHJhbnNpdGlvblNlcnZpY2Uge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3RhYkJsdWVwcmludFNlcnZpY2U6IFRhYkJsdWVwcmludFNlcnZpY2UgPSBpbmplY3QoVGFiQmx1ZXByaW50U2VydmljZSk7XG5cbiAgICAvKipcbiAgICAgKiBSZXRyaWV2ZXMgdGhlIG5leHQgc3RhdHVzIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBwYXlsb2FkLlxuICAgICAqXG4gICAgICogQHBhcmFtIHBheWxvYWQgLSBUaGUgcGF5bG9hZCBjb250YWluaW5nIGluZm9ybWF0aW9uIHRvIGRldGVybWluZSB0aGUgbmV4dCBzdGF0dXMuXG4gICAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGNvbW1vbiBBUEkgcmVzcG9uc2UuXG4gICAgICovXG4gICAgYXN5bmMgZ2V0TmV4dFN0YXR1cyhwYXlsb2FkOiBOZXh0U3RhdHVzUGF5bG9hZCk6IFByb21pc2U8Q29tbW9uQXBpUmVzcG9uc2U+IHtcbiAgICAgICAgLy8gQXdhaXQgdGhlIHJlc3BvbnNlIGZyb20gdGhlIGdldE5leHRTdGF0dXMgbWV0aG9kIG9mIHRoZSB0YWJCbHVlcHJpbnRTZXJ2aWNlXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20oXG4gICAgICAgICAgICB0aGlzLl90YWJCbHVlcHJpbnRTZXJ2aWNlLmdldE5leHRTdGF0dXMocGF5bG9hZClcbiAgICAgICAgKTtcbiAgICAgICAgLy8gUmV0dXJuIHRoZSBvYnRhaW5lZCByZXNwb25zZVxuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXBkYXRlcyB0aGUgc3RhdHVzIG9mIGFuIGVudGl0eSBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgcGF5bG9hZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwYXlsb2FkIC0gVGhlIHBheWxvYWQgY29udGFpbmluZyBpbmZvcm1hdGlvbiB0byB1cGRhdGUgdGhlIHN0YXR1cy5cbiAgICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgY29tbW9uIEFQSSByZXNwb25zZS5cbiAgICAgKi9cbiAgICBhc3luYyB1cGRhdGVTdGF0dXMocGF5bG9hZDogVXBkYXRlU3RhdHVzUGF5bG9hZCk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20oXG4gICAgICAgICAgICBUYWJTZGsudXRpbD8udXBkYXRlU3RhdHVzKHBheWxvYWQpXG4gICAgICAgICk7XG4gICAgICAgIC8vIFJldHVybiB0aGUgb2J0YWluZWQgcmVzcG9uc2VcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH1cbn0iXX0=
|
package/esm2022/public-api.mjs
CHANGED
|
@@ -6,4 +6,4 @@ export * from './lib/enum/store.enum';
|
|
|
6
6
|
// Interfaces
|
|
7
7
|
export * from './lib/interface/ui.interface';
|
|
8
8
|
export * from './lib/interface/http.interface';
|
|
9
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL3RhYi1zZGsvc3JjL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTTtBQUNOLGNBQWMsdUJBQXVCLENBQUM7QUFFdEMsUUFBUTtBQUNSLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyx1QkFBdUIsQ0FBQztBQUV0QyxhQUFhO0FBQ2IsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLGdDQUFnQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gU0RLXG5leHBvcnQgKiBmcm9tICcuL2xpYi90YWItc2RrLnNlcnZpY2UnO1xuXG4vLyBFbnVtc1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZW51bS91aS5lbnVtJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2VudW0vc3RvcmUuZW51bSc7XG5cbi8vIEludGVyZmFjZXNcbmV4cG9ydCAqIGZyb20gJy4vbGliL2ludGVyZmFjZS91aS5pbnRlcmZhY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvaW50ZXJmYWNlL2h0dHAuaW50ZXJmYWNlJzsiXX0=
|