tnx-shared 5.1.310 → 5.1.313
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/bundles/tnx-shared.umd.js +143 -12
- package/bundles/tnx-shared.umd.js.map +1 -1
- package/bundles/tnx-shared.umd.min.js +1 -1
- package/bundles/tnx-shared.umd.min.js.map +1 -1
- package/classes/public-function.d.ts +1 -1
- package/components/common-app-component/common-app-component.d.ts +4 -3
- package/components/common-app-component/common-app-component.d.ts.map +1 -1
- package/components/crud/crud-form/crud-form.component.d.ts +2 -2
- package/esm2015/components/chat/chat-box/chat-box.component.js +1 -1
- package/esm2015/components/chat/chat-send-message-box/chat-send-message-box.component.js +1 -1
- package/esm2015/components/common-app-component/common-app-component.js +27 -5
- package/esm2015/services/permission.service.js +63 -18
- package/esm2015/services/role.service.js +29 -1
- package/esm2015/services/user.service.js +4 -1
- package/fesm2015/tnx-shared.js +117 -19
- package/fesm2015/tnx-shared.js.map +1 -1
- package/package.json +2 -2
- package/services/permission.service.d.ts +6 -4
- package/services/permission.service.d.ts.map +1 -1
- package/services/role.service.d.ts +7 -0
- package/services/role.service.d.ts.map +1 -1
- package/services/user.service.d.ts +1 -0
- package/services/user.service.d.ts.map +1 -1
- package/tnx-shared.metadata.json +1 -1
|
@@ -96,6 +96,9 @@ export class UserService extends BaseService {
|
|
|
96
96
|
const decoded = JWT.default(this._oauthService.getAccessToken());
|
|
97
97
|
return decoded[key];
|
|
98
98
|
}
|
|
99
|
+
getJwtDecoded() {
|
|
100
|
+
return JWT.default(this._oauthService.getAccessToken());
|
|
101
|
+
}
|
|
99
102
|
handleUserInfoChange(data) {
|
|
100
103
|
let dataObj;
|
|
101
104
|
if (typeof data == 'string') {
|
|
@@ -588,4 +591,4 @@ UserService.ctorParameters = () => [
|
|
|
588
591
|
{ type: ExceptionHandlerService },
|
|
589
592
|
{ type: ApplicationContextService }
|
|
590
593
|
];
|
|
591
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uL3Byb2plY3RzL3RueC1zaGFyZWQvc3JjL2xpYi8iLCJzb3VyY2VzIjpbInNlcnZpY2VzL3VzZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBcUIsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbkQsT0FBTyxLQUFLLElBQUksTUFBTSxZQUFZLENBQUM7QUFDbkMsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUd4RSxPQUFPLEVBQVUsUUFBUSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFHdkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2pELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7Ozs7Ozs7O0FBRW5ELHFCQUFxQjtBQUNyQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUM7QUFLakIsTUFBTSxPQUFPLFdBQVksU0FBUSxXQUFXO0lBVXhDLFlBQVksSUFBZ0IsRUFDaEIsUUFBa0IsRUFDbEIsb0JBQXlDLEVBQ2pDLGNBQTZCLEVBQzdCLGFBQTJCLEVBQzNCLGVBQStCLEVBQy9CLHdCQUFpRCxFQUNqRCxtQkFBOEM7UUFFOUQsS0FBSyxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsR0FBRyxvQkFBb0IsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLGVBQWUsSUFBSSxvQkFBb0IsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxXQUFXLENBQUMsVUFBVSxPQUFPLENBQUMsQ0FBQztRQU5uSixtQkFBYyxHQUFkLGNBQWMsQ0FBZTtRQUM3QixrQkFBYSxHQUFiLGFBQWEsQ0FBYztRQUMzQixvQkFBZSxHQUFmLGVBQWUsQ0FBZ0I7UUFDL0IsNkJBQXdCLEdBQXhCLHdCQUF3QixDQUF5QjtRQUNqRCx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQTJCO1FBaEJ6RCxrQkFBYSxHQUFHLFdBQVcsQ0FBQztRQUM1QixxQkFBZ0IsR0FBRyxtQkFBbUIsQ0FBQztRQUN2QyxnQkFBVyxHQUFXLENBQUMsQ0FBQztRQUN4QixpQkFBWSxHQUFXLEVBQUUsQ0FBQztRQWdCL0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxvQkFBb0IsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQztRQUV2RixJQUFJLENBQUMsYUFBYSxHQUFHLG9CQUFvQixDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3RELElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFFakQsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUM7UUFDN0YsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUM7UUFFakcsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUM5RSxJQUFJLEdBQUcsRUFBRTtnQkFDTCw0QkFBNEI7Z0JBQzVCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLENBQUMsRUFBRTtvQkFDN0YsSUFBSSxFQUFFLEVBQUU7d0JBQ0osWUFBWSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQzt3QkFDL0MsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7cUJBQzlCO2dCQUNMLENBQUMsQ0FBQyxDQUFDO2dCQUVILGNBQWMsQ0FBQyxXQUFXLEVBQUUsQ0FBQzthQUNoQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLGtCQUFrQixFQUFFLElBQUksQ0FBQyxFQUFFO1lBQ3hELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwQyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTyxhQUFhO1FBQ2pCLElBQUksSUFBSSxDQUFDLG9CQUFvQixFQUFFLEVBQUU7WUFDN0IsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsb0JBQW9CLENBQUM7WUFDMUYsT0FBTyxHQUFHLG1CQUFtQixPQUFPLENBQUM7U0FDeEM7YUFDSTtZQUNELE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUM7WUFDakYsT0FBTyxHQUFHLGVBQWUsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxVQUFVLE9BQU8sQ0FBQztTQUNqRjtJQUNMLENBQUM7SUFFTyxvQkFBb0I7UUFDeEIsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQztRQUM3RSxJQUFJLGtCQUFrQixFQUFFO1lBQ3BCLE9BQU8sSUFBSSxDQUFDO1NBQ2Y7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBRUQsaUJBQWlCLENBQUMsSUFBSSxFQUFFLGNBQWMsR0FBRyxLQUFLO1FBQzFDLElBQUksS0FBSyxHQUFHLGNBQWMsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNGLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEtBQUssRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hILE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxjQUFjLENBQUMsT0FBaUI7UUFDNUIsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFRCxlQUFlLENBQUMsUUFBa0I7UUFDOUIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFRCxPQUFPLENBQUMsRUFBVTtRQUNkLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRUQsa0JBQWtCLENBQUMsRUFBVTtRQUN6QixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSx1QkFBdUIsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUMxRSxDQUFDO0lBRUQsUUFBUSxDQUFDLEdBQVc7UUFDaEIsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUM7UUFDakUsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUVELG9CQUFvQixDQUFDLElBQUk7UUFDckIsSUFBSSxPQUFPLENBQUM7UUFDWixJQUFJLE9BQU8sSUFBSSxJQUFJLFFBQVEsRUFBRTtZQUN6QixPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUM5QjtRQUNELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNyRCxJQUFJLFFBQVEsQ0FBQyxFQUFFLEVBQUU7WUFDYixZQUFZLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxhQUFhLEdBQUcsR0FBRyxHQUFHLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNoRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQ3RDO0lBQ0wsQ0FBQztJQUVELGtCQUFrQixDQUFDLEdBQVc7UUFDMUIsTUFBTSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSwyQkFBMkIsR0FBRyxFQUFFLENBQUM7UUFFbEUsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBaUIsTUFBTSxDQUFDO2FBQ2pDLElBQUksQ0FDRCxVQUFVLENBQUMsQ0FBQyxHQUFzQixFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FDekcsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQsbUJBQW1CO1FBQ2YsTUFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNoRSxNQUFNLElBQUksR0FBVyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzdDLElBQUksSUFBSSxFQUFFO1lBQ04sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7Z0JBQ2QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDN0IsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2FBQ3JFO2lCQUNJO2dCQUNELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7Z0JBQzlCLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDakMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRTtvQkFDaEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO29CQUM1QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7b0JBQzlCLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztpQkFDckU7YUFDSjtZQUNELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztZQUNsRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsY0FBYyxFQUFFLENBQUMsZUFBZSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ3JHO2FBQ0k7WUFDRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsY0FBYyxFQUFFLENBQUMsbUJBQW1CLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLEVBQUU7Z0JBQ2hHLE1BQU0sY0FBYyxHQUFHLEVBQUUsYUFBRixFQUFFLGNBQUYsRUFBRSxHQUFJLEtBQUssQ0FBQztnQkFDbkMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDeEQsTUFBTSxPQUFPLEdBQVEsR0FBRyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDOUMsa0dBQWtHO2dCQUNsRyxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDO2dCQUM5QixNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ2pDLElBQUksWUFBWSxHQUFHLEVBQUUsQ0FBQztnQkFDdEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRTtvQkFDaEIsWUFBWSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUM7aUJBQ3JDO3FCQUNJO29CQUNELFlBQVksR0FBRyxTQUFTLENBQUM7aUJBQzVCO2dCQUNELElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO29CQUN2QyxNQUFNLElBQUksR0FBRyxJQUFJLE1BQU0sRUFBRSxDQUFDO29CQUMxQixJQUFJLEdBQUcsRUFBRTt3QkFDTCxJQUFJLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUM7d0JBQ3ZDLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQzt3QkFDL0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxZQUFZLENBQUM7d0JBQzNCLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQzt3QkFDakMsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDO3dCQUNqQyxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUM7d0JBQy9CLElBQUksQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQzt3QkFDckMsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDO3dCQUN6QixJQUFJLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUM7d0JBQzdCLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQzt3QkFDckIsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDO3dCQUN6QixJQUFJLENBQUMsWUFBWSxHQUFHLEdBQUcsQ0FBQyxZQUFZLENBQUM7d0JBQ3JDLElBQUksQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQzt3QkFDckMsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDO3dCQUMvQixJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUM7d0JBRTVCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksRUFBRSxFQUFFOzRCQUNuQyxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO2dDQUNsQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQzs2QkFDNUM7aUNBQ0k7Z0NBQ0QsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUM7NkJBQzFDO3lCQUNKO3dCQUNELFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztxQkFDckU7b0JBQ0QsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGNBQWMsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO29CQUVsRSxJQUFJLGNBQWMsRUFBRTt3QkFDaEIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGNBQWMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLENBQUM7cUJBQ3pHO3lCQUNJO3dCQUNELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxlQUFlLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7cUJBQ3JHO2dCQUNMLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRTtnQkFFVCxDQUFDLENBQUMsQ0FBQztZQUNQLENBQUMsQ0FBQyxDQUFDO1NBQ047SUFDTCxDQUFDO0lBRUQsY0FBYztRQUNWLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVELFVBQVUsQ0FBQyxXQUFXO1FBQ2xCLE9BQU8sV0FBVyxJQUFJLElBQUksSUFBSSxXQUFXLElBQUksSUFBSSxDQUFDO0lBQ3RELENBQUM7SUFFRCxPQUFPLENBQUMsV0FBVztRQUNmLE9BQU8sV0FBVyxJQUFJLElBQUksQ0FBQztJQUMvQixDQUFDO0lBRUQsY0FBYztRQUNWLE9BQWUsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsY0FBYyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2hGLENBQUM7SUFFRCxXQUFXLENBQUMsSUFBSTtRQUNaLE9BQU8sSUFBSSxDQUFDLFdBQVc7WUFDbkIsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUN2QixDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM5QyxDQUFDO0lBRUQsZ0JBQWdCO1FBQ1osTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQy9CLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNqQyxJQUFJLFlBQVksR0FBRyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNoQixZQUFZLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1NBQ3ZDO2FBQ0k7WUFDRCxZQUFZLEdBQUcsU0FBUyxDQUFDO1NBQzVCO1FBQ0QsT0FBTyxZQUFZLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUVELFlBQVksQ0FBQyxNQUFNO1FBQ2YsTUFBTSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxJQUFJLE1BQU0sRUFBRSxDQUFDO1FBQzNDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQWlCLEdBQUcsQ0FBQzthQUM5QixJQUFJLENBQ0QsVUFBVSxDQUFDLENBQUMsR0FBc0IsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQzdFLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRTtZQUNMLE1BQU0sRUFBRSxHQUFXO2dCQUNmLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDekMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUNqQyxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ3JDLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDcEMsWUFBWSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDOUQsVUFBVSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVTthQUNqQyxDQUFDO1lBRUYsSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDLE1BQU0sSUFBSSxFQUFFLEVBQUU7Z0JBQy9CLElBQUksRUFBRSxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7b0JBQ2hCLEVBQUUsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDO2lCQUMxQztxQkFDSTtvQkFDRCxFQUFFLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztpQkFDeEM7YUFDSjtZQUVELE9BQU8sRUFBRSxDQUFDO1FBQ2QsQ0FBQyxDQUFDLENBQUM7YUFDTixTQUFTLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQsS0FBSztRQUNELE1BQU0sV0FBVyxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDaEUsTUFBTSxJQUFJLEdBQVcsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM3QyxJQUFJLElBQUksRUFBRTtZQUNOLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztTQUN0QjthQUNJO1lBQ0QsT0FBTyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsTUFBTSxDQUFDO1NBQ3ZDO0lBQ0wsQ0FBQztJQUVELGFBQWE7UUFDVCxNQUFNLFdBQVcsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ2hFLE1BQU0sSUFBSSxHQUFXLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDN0MsSUFBSSxJQUFJLEVBQUU7WUFDTixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7U0FDMUI7YUFDSTtZQUNELE9BQU8sSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLFVBQVUsQ0FBQztTQUMzQztJQUNMLENBQUM7SUFFRCxjQUFjLENBQUMsUUFBa0I7UUFDN0IsTUFBTSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxpQkFBaUIsQ0FBQztRQUNuRCxPQUFPLElBQUksQ0FBQyxLQUFLO2FBQ0wsSUFBSSxDQUFpQixNQUFNLEVBQUUsUUFBUSxDQUFDO2FBQ3RDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQzthQUM5RCxTQUFTLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsTUFBYztRQUUzQixNQUFNLFdBQVcsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLEdBQUcsR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDO1FBQzVFLDhEQUE4RDtRQUM5RCw4RUFBOEU7UUFDOUUsTUFBTSxJQUFJLEdBQWtCLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDcEQsSUFBSSxJQUFJLEVBQUU7WUFDTixPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7U0FDMUQ7YUFDSTtZQUNELE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBTyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7Z0JBQ3pDLElBQUksTUFBTSxJQUFJLElBQUksRUFBRTtvQkFDaEIsTUFBTSxDQUFnQixFQUFFLENBQUMsQ0FBQztpQkFDN0I7cUJBQ0k7b0JBQ0QsSUFBSSxNQUFNLEdBQUcsQ0FBQyxFQUFFO3dCQUNaLE1BQU0sS0FBSyxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUsd0JBQXdCLE1BQU0sRUFBRSxDQUFDO3dCQUNqRSxJQUFJOzRCQUNBLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQWlCLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FDM0QsV0FBVyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFDOUIsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFDdkIsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFO2dDQUNQLHNDQUFzQztnQ0FDdEMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsYUFBYSxHQUFHLEdBQUcsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2dDQUNqRyxPQUFzQixRQUFRLENBQUMsSUFBSSxDQUFDOzRCQUN4QyxDQUFDLEVBQ0QsVUFBVSxDQUFDLENBQUMsR0FBc0IsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQ2hGLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQzs0QkFFbkIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO3lCQUNuQjt3QkFDRCxXQUFNOzRCQUNGLE1BQU0sQ0FBZ0IsRUFBRSxDQUFDLENBQUM7eUJBQzdCO3FCQUNKO2lCQUNKO1lBQ0wsQ0FBQyxDQUFBLENBQUMsQ0FBQztTQUNOO0lBQ0wsQ0FBQztJQUVELGlCQUFpQixDQUFDLE9BQWU7UUFDN0IsSUFBSSxDQUFDLE9BQU8sSUFBSSxPQUFPLEtBQUssRUFBRSxFQUFFO1lBQzVCLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7Z0JBQ25DLE9BQU8sQ0FBa0IsRUFBRSxDQUFDLENBQUM7WUFDakMsQ0FBQyxDQUFDLENBQUM7U0FDTjtRQUNELE1BQU0sV0FBVyxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzdELE1BQU0sU0FBUyxHQUFvQixJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRTNELG1HQUFtRztRQUNuRyxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUN2RSxJQUFJLEtBQUssRUFBRTtZQUNQLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztTQUMvRDthQUNJO1lBQ0QsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtnQkFDbkMsTUFBTSxLQUFLLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSw4QkFBOEIsT0FBTyxFQUFFLENBQUM7Z0JBQ3hFLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFpQixLQUFLLENBQUMsQ0FBQyxJQUFJLENBQ3RDLFdBQVcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQzlCLEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQ3ZCLFVBQVUsQ0FBQyxDQUFDLEdBQXNCLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUM3RSxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBa0IsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUNsRCxDQUFDLFNBQVMsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRTtvQkFDekIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUNyQixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUU7b0JBQ1gsT0FBTyxDQUFrQixFQUFFLENBQUMsQ0FBQztnQkFDakMsQ0FBQyxDQUFDLENBQUM7WUFDUCxDQUFDLENBQUMsQ0FBQztTQUNOO0lBQ0wsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsMEJBQTBCLENBQUMsUUFBZ0I7UUFDdkMsTUFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsYUFBYSxHQUFHLEdBQUcsR0FBRyxRQUFRLENBQUMsQ0FBQztRQUM5RSxNQUFNLElBQUksR0FBa0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNwRCxJQUFJLElBQUksRUFBRTtZQUNOLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztTQUMxRDthQUNJO1lBQ0QsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFPLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtnQkFDekMsSUFBSSxRQUFRLElBQUksSUFBSSxFQUFFO29CQUNsQixPQUFPLENBQWdCLEVBQUUsQ0FBQyxDQUFDO2lCQUM5QjtxQkFDSTtvQkFDRCxJQUFJLFFBQVEsSUFBSSxFQUFFLEVBQUU7d0JBQ2hCLE1BQU0sS0FBSyxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUsd0NBQXdDLFFBQVEsRUFBRSxDQUFDO3dCQUNuRixJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBaUIsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUN0QyxXQUFXLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUM5QixLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUN2QixHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUU7NEJBQ1Asc0NBQXNDOzRCQUN0QyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLEdBQUcsR0FBRyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7NEJBQ3ZHLE9BQXNCLFFBQVEsQ0FBQyxJQUFJLENBQUM7d0JBQ3hDLENBQUMsRUFDRCxVQUFVLENBQUMsQ0FBQyxHQUFzQixFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FDaEYsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTs0QkFDMUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO3dCQUNqQixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUU7NEJBQ1osT0FBTyxDQUFNLEVBQUUsQ0FBQyxDQUFDO3dCQUNyQixDQUFDLENBQUMsQ0FBQztxQkFDTjtpQkFDSjtZQUNMLENBQUMsQ0FBQSxDQUFDLENBQUM7U0FDTjtJQUNMLENBQUM7SUFHRDs7Ozs7T0FLRztJQUNHLDRCQUE0QixDQUFDLFNBQWlCOztZQUNoRCxNQUFNLFdBQVcsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUM3RCxNQUFNLFNBQVMsR0FBb0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUMzRCxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUMvRSxJQUFJLEtBQUssRUFBRTtnQkFDUCxPQUFPLFNBQVMsQ0FBQzthQUNwQjtpQkFDSTtnQkFDRCxNQUFNLEtBQUssR0FBRyxHQUFHLElBQUksQ0FBQyxVQUFVLDJDQUEyQyxTQUFTLEVBQUUsQ0FBQztnQkFDdkYsT0FBTyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFpQixLQUFLLENBQUMsQ0FBQyxJQUFJLENBQ25ELFdBQVcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQzlCLEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQ3ZCLFVBQVUsQ0FBQyxDQUFDLEdBQXNCLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUM3RSxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUU7b0JBQ1gsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsYUFBYSxHQUFHLEdBQUcsR0FBcUIsUUFBUSxDQUFDLElBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUU7d0JBQ3JGLElBQUksQ0FBQyxDQUFDLFFBQVE7NEJBQUUsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDO29CQUN0QyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO29CQUNuQyxPQUF3QixRQUFRLENBQUMsSUFBSSxDQUFDO2dCQUMxQyxDQUFDLENBQUMsQ0FDTCxDQUFDLFNBQVMsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2FBQ2xDO1FBQ0wsQ0FBQztLQUFBO0lBRUQseUJBQXlCLENBQUMsT0FBaUI7UUFDdkMsSUFBSSxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNwQixPQUFPLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO1NBQ25DO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDZixDQUFDO0lBRUQsaUJBQWlCLENBQUMsVUFBaUIsRUFBRSxZQUFvQjtRQUNyRCxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3RCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNsRixnREFBZ0Q7WUFDaEQsdURBQXVEO1lBQ3ZELGNBQWM7WUFDZCxpQ0FBaUM7WUFDakMsSUFBSTtRQUNSLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxVQUFVLENBQUM7SUFDdEIsQ0FBQztJQUdELGVBQWUsQ0FBQyxJQUFTO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQWlCLEdBQUcsSUFBSSxDQUFDLFVBQVUsa0JBQWtCLEVBQUUsSUFBSSxDQUFDO2FBQ3JFLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQzthQUM5RCxTQUFTLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQsY0FBYyxDQUFDLE1BQWMsRUFBRSxJQUFTO1FBRXBDLE1BQU0sTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUsaUJBQWlCLENBQUM7UUFDbkQsT0FBTyxJQUFJLENBQUMsS0FBSzthQUNMLElBQUksQ0FBaUIsTUFBTSxFQUFFLElBQUksQ0FBQzthQUNsQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7YUFDOUQsU0FBUyxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVELGFBQWEsQ0FBQyxJQUFTO1FBRW5CLE1BQU0sTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUsZ0JBQWdCLENBQUM7UUFDbEQsT0FBTyxJQUFJLENBQUMsS0FBSzthQUNMLEdBQUcsQ0FBaUIsTUFBTSxFQUFFLElBQUksQ0FBQzthQUNqQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7YUFDOUQsU0FBUyxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVELHNCQUFzQixDQUFDLEVBQVU7UUFDN0IsTUFBTSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxrQ0FBa0MsRUFBRSxFQUFFLENBQUM7UUFDeEUsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRCxXQUFXLENBQUMsTUFBYyxFQUFFLE9BQWdCO1FBQ3hDLE1BQU0sR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUsZ0JBQWdCLE1BQU0sSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUNsRSxPQUFPLElBQUksQ0FBQyxLQUFLO2FBQ0wsR0FBRyxDQUFpQixHQUFHLEVBQUUsT0FBTyxDQUFDO2FBQ2pDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQzthQUM5RCxTQUFTLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQsZUFBZSxDQUFDLE1BQWMsRUFBRSxXQUFtQjtRQUMvQyxNQUFNLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxVQUFVLG9CQUFvQixNQUFNLElBQUksV0FBVyxFQUFFLENBQUM7UUFFMUUsT0FBTyxJQUFJLENBQUMsS0FBSzthQUNMLEdBQUcsQ0FBaUIsR0FBRyxFQUFFLFdBQVcsQ0FBQzthQUNyQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7YUFDOUQsU0FBUyxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVELHdCQUF3QixDQUFDLFVBQTBCLEVBQUUsYUFBcUIsRUFBRSxFQUFFLGtCQUEwQixFQUFFLEVBQUUsbUJBQTJCLEVBQUU7UUFFckksSUFBSSxXQUFXLEdBQUcsUUFBUSxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7UUFFN0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUU7WUFDcEIsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7U0FDekI7UUFFRCxXQUFXLElBQUksV0FBVyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUM7UUFHOUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUU7WUFDbkIsVUFBVSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO1NBQ3pDO1FBQ0QsV0FBVyxJQUFJLFVBQVUsVUFBVSxDQUFDLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUdoRCxJQUFJLFVBQVUsQ0FBQyxTQUFTLEVBQUU7WUFDdEIsV0FBVyxJQUFJLGNBQWMsVUFBVSxDQUFDLFNBQVMsVUFBVSxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDakY7UUFDRCxJQUFJLGdCQUFnQixJQUFJLEVBQUUsRUFBRTtZQUN4QixXQUFXLElBQUksSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1NBQ3pDO1FBQ0QsSUFBSSxlQUFlLElBQUksRUFBRSxFQUFFO1lBQ3ZCLFdBQVcsSUFBSSxJQUFJLGVBQWUsRUFBRSxDQUFDO1NBQ3hDO1FBQ0QsTUFBTSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsVUFBVSxHQUFHLFdBQVcsRUFBRSxDQUFDO1FBQ3pFLElBQUksVUFBVSxDQUFDLG1CQUFtQixFQUFFO1lBQ2hDLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQzVDO1FBRUQsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxjQUFzQixFQUFFLE9BQWdCLEVBQUUsTUFBZSxFQUFFLEtBQWM7UUFFMUYsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNWLE9BQU8sR0FBRyxFQUFFLENBQUM7U0FDaEI7UUFFRCxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1QsTUFBTSxHQUFHLENBQUMsQ0FBQztTQUNkO1FBRUQsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNULE1BQU0sR0FBRyxDQUFDLENBQUM7U0FDZDtRQUVELElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDUixLQUFLLEdBQUcsRUFBRSxDQUFDO1NBQ2Q7UUFFRCxNQUFNLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxVQUFVLHVCQUF1QjtjQUN2QyxtQkFBbUIsY0FBYyxFQUFFO2NBQ25DLFlBQVksT0FBTyxFQUFFO2NBQ3JCLFdBQVcsTUFBTSxFQUFFO2NBQ25CLFVBQVUsS0FBSyxFQUFFLENBQUM7UUFDbkMsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRCxnQkFBZ0I7UUFDWixPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztJQUNwQyxDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQVUsRUFBRSxRQUFrQjtRQUN0QyxNQUFNLGFBQWEsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ2xELE9BQU8sYUFBYSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVELFFBQVEsQ0FBQyxJQUFTO1FBRWQsTUFBTSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxrQkFBa0IsQ0FBQztRQUNwRCxPQUFPLElBQUksQ0FBQyxLQUFLO2FBQ0wsSUFBSSxDQUFpQixNQUFNLEVBQUUsSUFBSSxDQUFDO2FBQ2xDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQzthQUM5RCxTQUFTLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQsVUFBVSxDQUFDLElBQVM7UUFFaEIsTUFBTSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxvQkFBb0IsQ0FBQztRQUN0RCxPQUFPLElBQUksQ0FBQyxLQUFLO2FBQ0wsSUFBSSxDQUFpQixNQUFNLEVBQUUsSUFBSSxDQUFDO2FBQ2xDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQzthQUM5RCxTQUFTLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQsV0FBVztRQUNQLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLGNBQWMsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXO2VBQ3ZELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsS0FBSyxNQUFNLENBQUM7SUFDaEcsQ0FBQztJQUVELE9BQU87UUFDSCxPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVztlQUN2RCxJQUFJLENBQUMsbUJBQW1CLENBQUMsY0FBYyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEtBQUssTUFBTSxDQUFDO0lBQzVGLENBQUM7SUFFRCxrQkFBa0I7UUFDZCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUNwRCxDQUFDO0lBRUQsbUJBQW1CLENBQUMsU0FBaUI7UUFDakMsTUFBTSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxrQ0FBa0MsU0FBUyxFQUFFLENBQUM7UUFDL0UsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBaUIsTUFBTSxDQUFDO2FBQ2pDLElBQUksQ0FDRCxVQUFVLENBQUMsQ0FBQyxHQUFzQixFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FDekcsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQsa0JBQWtCO1FBQ2QsT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBRUQsaUJBQWlCO1FBQ2IsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3hDLElBQUksU0FBUyxFQUFFO1lBQ1gsSUFBSSxTQUFTLENBQUMsVUFBVSxFQUFFO2dCQUN0QixPQUFPLElBQUksQ0FBQzthQUNmO1NBQ0o7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBRUQsZUFBZSxDQUFDLE9BQWU7UUFDM0IsSUFBSSxDQUFDLE9BQU8sSUFBSSxPQUFPLEtBQUssRUFBRSxFQUFFO1lBQzVCLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7Z0JBQ25DLE9BQU8sQ0FBa0IsRUFBRSxDQUFDLENBQUM7WUFDakMsQ0FBQyxDQUFDLENBQUM7U0FDTjtRQUNELE1BQU0sV0FBVyxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzdELE1BQU0sU0FBUyxHQUFvQixJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRTNELG1HQUFtRztRQUNuRyxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUN2RSxJQUFJLEtBQUssRUFBRTtZQUNQLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztTQUMvRDthQUNJO1lBQ0QsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtnQkFDbkMsTUFBTSxLQUFLLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxXQUFXLENBQUM7Z0JBQzVDLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQztnQkFDbkIsTUFBTSxVQUFVLEdBQUc7b0JBQ2YsS0FBSyxFQUFFLElBQUk7b0JBQ1gsUUFBUSxFQUFFLElBQUk7b0JBQ2QsS0FBSyxFQUFFLE9BQU87aUJBQ2pCLENBQUM7Z0JBQ0YsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDekIsTUFBTSxRQUFRLEdBQUcsSUFBSSxRQUFRLENBQUM7b0JBQzFCLE1BQU0sRUFBRSxFQUFFO29CQUNWLFFBQVEsRUFBRTt3QkFDTixJQUFJLEVBQUUsQ0FBQzt3QkFDUCxRQUFRLEVBQUUsS0FBSztxQkFDbEI7b0JBQ0QsS0FBSyxFQUFFLEVBQUU7b0JBQ1QsT0FBTyxFQUFFLE9BQU87aUJBQ25CLENBQUMsQ0FBQztnQkFFSCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBaUIsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FDakQsV0FBVyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFDOUIsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFDdkIsVUFBVSxDQUFDLENBQUMsR0FBc0IsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQzdFLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFrQixRQUFRLENBQUMsSUFBSSxDQUFDLENBQ2xELENBQUMsU0FBUyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFO29CQUN6QixPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ3JCLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRTtvQkFDWCxPQUFPLENBQWtCLEVBQUUsQ0FBQyxDQUFDO2dCQUNqQyxDQUFDLENBQUMsQ0FBQztZQUNQLENBQUMsQ0FBQyxDQUFDO1NBQ047SUFDTCxDQUFDOzs7O1lBNXBCSixVQUFVLFNBQUM7Z0JBQ1IsVUFBVSxFQUFFLE1BQU07YUFDckI7OztZQXpCUSxVQUFVO1lBQ0UsUUFBUTtZQWdCcEIsbUJBQW1CO1lBSm5CLGFBQWE7WUFYYixZQUFZO1lBZ0JaLGNBQWM7WUFGZCx1QkFBdUI7WUFYdkIseUJBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEluamVjdGFibGUsIEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE9BdXRoU2VydmljZSB9IGZyb20gJ2FuZ3VsYXItb2F1dGgyLW9pZGMnO1xyXG5pbXBvcnQgKiBhcyBKV1RfIGZyb20gJ2p3dC1kZWNvZGUnO1xyXG5pbXBvcnQgeyBjYXRjaEVycm9yLCBtYXAsIHJldHJ5LCBzaGFyZVJlcGxheSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgQXBwbGljYXRpb25Db250ZXh0U2VydmljZSB9IGZyb20gJy4uL2FwcC1jb250ZXh0L2FwcGxpY2F0aW9uLWNvbnRleHQuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbUN0eENvbnN0YW50cyB9IGZyb20gJy4uL2NvbmZpZ3MvY29tcG9uZW50LWNvbnRleHQuY29uc3RhbnQnO1xyXG5pbXBvcnQgeyBNb2R1bGVDb25maWcgfSBmcm9tICcuLi9jb25maWdzL21vZHVsZS1jb25maWcnO1xyXG5pbXBvcnQgeyBCYXNpY1VzZXJJbmZvIH0gZnJvbSAnLi4vbW9kZWxzL2Jhc2ljLXVzZXItaW5mbyc7XHJcbmltcG9ydCB7IEZpbHRlciwgR3JpZEluZm8gfSBmcm9tICcuLi9tb2RlbHMvZ3JpZC1pbmZvJztcclxuaW1wb3J0IHsgUGFnZU9wdGlvbkJhc2UgfSBmcm9tICcuLi9tb2RlbHMvcGFnZS1vcHRpb24nO1xyXG5pbXBvcnQgeyBSZXNwb25zZVJlc3VsdCB9IGZyb20gJy4uL21vZGVscy9yZXNwb25zZS1yZXN1bHQnO1xyXG5pbXBvcnQgeyBUblVzZXIgfSBmcm9tICcuLi9tb2RlbHMvdG4tdXNlcic7XHJcbmltcG9ydCB7IEF1dGhlblNlcnZpY2UgfSBmcm9tICcuL2F1dGhlbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQmFzZVNlcnZpY2UgfSBmcm9tICcuL2Jhc2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbW1vblNlcnZpY2UgfSBmcm9tICcuL2NvbW1vbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRXhjZXB0aW9uSGFuZGxlclNlcnZpY2UgfSBmcm9tICcuL2V4Y2VwdGlvbi1oYW5kbGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNb2R1bGVDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi9tb2R1bGUtY29uZmlnLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTaWduYWxSU2VydmljZSB9IGZyb20gJy4vc2lnbmFsci5zZXJ2aWNlJztcclxuXHJcbi8vIGZpeCBmb3IgcHJvZCBidWlsZFxyXG5jb25zdCBKV1QgPSBKV1RfO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBVc2VyU2VydmljZSBleHRlbmRzIEJhc2VTZXJ2aWNlIHtcclxuICAgIHJlYWRvbmx5IFVTRVJfSU5GT19LRVkgPSAndXNlcl9pbmZvJztcclxuICAgIHJlYWRvbmx5IENVUlJFTlRfVVNFUl9LRVkgPSAnY3VycmVudF91c2VyX2luZm8nO1xyXG4gICAgcmVhZG9ubHkgUkVUUllfQ09VTlQ6IG51bWJlciA9IDA7XHJcbiAgICByZWFkb25seSBSRVBMQVlfQ09VTlQ6IG51bWJlciA9IDEwO1xyXG4gICAgcmVhZG9ubHkgREVGQVVMVF9BVkFUQVJfTUFMRTtcclxuICAgIHJlYWRvbmx5IERFRkFVTFRfQVZBVEFSX0ZFTUFMRTtcclxuICAgIHJlYWRvbmx5IG9yZ2FuaXphdGlvbkVuZHBvaW50O1xyXG4gICAgcmVhZG9ubHkgX21vZHVsZUNvbmZpZzogTW9kdWxlQ29uZmlnO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKGh0dHA6IEh0dHBDbGllbnQsXHJcbiAgICAgICAgICAgICAgICBpbmplY3RvcjogSW5qZWN0b3IsXHJcbiAgICAgICAgICAgICAgICBfbW9kdWxlQ29uZmlnU2VydmljZTogTW9kdWxlQ29uZmlnU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgX2F1dGhlblNlcnZpY2U6IEF1dGhlblNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIF9vYXV0aFNlcnZpY2U6IE9BdXRoU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgX3NpZ25hbHJTZXJ2aWNlOiBTaWduYWxSU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgX2V4Y2VwdGlvbkhhbmRsZXJTZXJ2aWNlOiBFeGNlcHRpb25IYW5kbGVyU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgX2FwcGxpY2F0aW9uQ29udGV4dDogQXBwbGljYXRpb25Db250ZXh0U2VydmljZVxyXG4gICAgKSB7XHJcbiAgICAgICAgc3VwZXIoaHR0cCwgaW5qZWN0b3IsIGAke19tb2R1bGVDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLmVudmlyb25tZW50LmFwaURvbWFpbi51c2VyT3JnRW5kcG9pbnR9LyR7X21vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCkuZW52aXJvbm1lbnQuYXBpVmVyc2lvbn0vdXNlcmApO1xyXG4gICAgICAgIHRoaXMuZW5kUG9pbnQgPSBfbW9kdWxlQ29uZmlnU2VydmljZS5nZXRDb25maWcoKS5lbnZpcm9ubWVudC5hcGlEb21haW4udXNlck9yZ0VuZHBvaW50O1xyXG5cclxuICAgICAgICB0aGlzLl9tb2R1bGVDb25maWcgPSBfbW9kdWxlQ29uZmlnU2VydmljZS5nZXRDb25maWcoKTtcclxuICAgICAgICB0aGlzLnNlcnZpY2VVcmkgPSB0aGlzLmdldFNlcnZpY2VVcmwoKTtcclxuICAgICAgICB0aGlzLm9yZ2FuaXphdGlvbkVuZHBvaW50ID0gdGhpcy5nZXRTZXJ2aWNlVXJsKCk7XHJcblxyXG4gICAgICAgIHRoaXMuREVGQVVMVF9BVkFUQVJfTUFMRSA9IHRoaXMuX21vZHVsZUNvbmZpZy5lbnZpcm9ubWVudC5hcHBNZXRhZGF0YS5tYWluLmRlZmF1bHRNYWxlQXZhdGFyO1xyXG4gICAgICAgIHRoaXMuREVGQVVMVF9BVkFUQVJfRkVNQUxFID0gdGhpcy5fbW9kdWxlQ29uZmlnLmVudmlyb25tZW50LmFwcE1ldGFkYXRhLm1haW4uZGVmYXVsdEZlbWFsZUF2YXRhcjtcclxuXHJcbiAgICAgICAgY29uc3Qgcm9vdENvbnRleHRTdWIgPSB0aGlzLl9hcHBsaWNhdGlvbkNvbnRleHQucm9vdENvbnRleHRMb2FkZWQuc3Vic2NyaWJlKHJzMSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyczEpIHtcclxuICAgICAgICAgICAgICAgIC8vIGJpbmRpbmcgZXZlbnQgdXNlciBjaGFuZ2VcclxuICAgICAgICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uQ29udGV4dC5nZXRSb290Q29udGV4dCgpLnN1YnNjcmliZShDb21DdHhDb25zdGFudHMuUk9PVC5VU0VSX0lORk9fQ0hBTkdFRCwgcnMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChycykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLkNVUlJFTlRfVVNFUl9LRVkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBvcHVsYXRlQ3VycmVudFVzZXIoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICByb290Q29udGV4dFN1Yi51bnN1YnNjcmliZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuX3NpZ25hbHJTZXJ2aWNlLnN0YXJ0KG51bGwsICdVU0VSX0lORk9fRURJVEVEJywgZGF0YSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlVXNlckluZm9DaGFuZ2UoZGF0YSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRTZXJ2aWNlVXJsKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmlzVXNlT2xkT3JnYW5pemF0aW9uKCkpIHtcclxuICAgICAgICAgICAgY29uc3QgdXNlck9sZE9yZ2FuaXphdGlvbiA9IHRoaXMuX21vZHVsZUNvbmZpZy5lbnZpcm9ubWVudC5hcGlEb21haW4ub3JnYW5pemF0aW9uRW5kcG9pbnQ7XHJcbiAgICAgICAgICAgIHJldHVybiBgJHt1c2VyT2xkT3JnYW5pemF0aW9ufS91c2VyYDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHVzZXJPcmdFbmRwb2ludCA9IHRoaXMuX21vZHVsZUNvbmZpZy5lbnZpcm9ubWVudC5hcGlEb21haW4udXNlck9yZ0VuZHBvaW50O1xyXG4gICAgICAgICAgICByZXR1cm4gYCR7dXNlck9yZ0VuZHBvaW50fS8ke3RoaXMuX21vZHVsZUNvbmZpZy5lbnZpcm9ubWVudC5hcGlWZXJzaW9ufS91c2VyYDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpc1VzZU9sZE9yZ2FuaXphdGlvbigpIHtcclxuICAgICAgICBjb25zdCB1c2VPbGRPcmdhbml6YXRpb24gPSB0aGlzLl9tb2R1bGVDb25maWcuZW52aXJvbm1lbnQudXNlT2xkT3JnYW5pemF0aW9uO1xyXG4gICAgICAgIGlmICh1c2VPbGRPcmdhbml6YXRpb24pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRGdWxsQ2FuQm9MYWJlbChpdGVtLCBnZXREaXNwbGF5TmFtZSA9IGZhbHNlKSB7XHJcbiAgICAgICAgbGV0IGxhYmVsID0gZ2V0RGlzcGxheU5hbWUgJiYgaXRlbS5kaXNwbGF5TmFtZSA/IGl0ZW0uZGlzcGxheU5hbWUgOiB0aGlzLmdldFVzZXJOYW1lKGl0ZW0pO1xyXG4gICAgICAgIGxhYmVsID0gKGl0ZW0ubWFDaHVjVnUgPyBgJHtpdGVtLm1hQ2h1Y1Z1fS4gYCA6ICcnKSArIGAke2xhYmVsfWAgKyAoaXRlbS50ZW5Eb25WaSA/IGAgLSAke2l0ZW0udGVuRG9uVml9YCA6ICcnKTtcclxuICAgICAgICByZXR1cm4gbGFiZWw7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QWxsV2l0aEluZm8oZmlsdGVyczogRmlsdGVyW10pIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXREYXRhQ3VzdG9tUm91dGUoJ1dpdGhJbmZvJywgZmlsdGVycyk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0UGFnZVdpdGhJbmZvKGdyaWRJbmZvOiBHcmlkSW5mbykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldEJ5R3JpZFJlcXVlc3QoZ3JpZEluZm8sICdXaXRoSW5mbycpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEluZm8oaWQ6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRHZXQoYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXRJbmZvLyR7aWR9YCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0SW5mb0ZvcldvcmtmbG93KGlkOiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0R2V0KGAke3RoaXMuc2VydmljZVVyaX0vR2V0SW5mb0ZvcldvcmtmbG93LyR7aWR9YCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q2xhaW0oa2V5OiBzdHJpbmcpIHtcclxuICAgICAgICBjb25zdCBkZWNvZGVkID0gSldULmRlZmF1bHQodGhpcy5fb2F1dGhTZXJ2aWNlLmdldEFjY2Vzc1Rva2VuKCkpO1xyXG4gICAgICAgIHJldHVybiBkZWNvZGVkW2tleV07XHJcbiAgICB9XHJcblxyXG4gICAgaGFuZGxlVXNlckluZm9DaGFuZ2UoZGF0YSkge1xyXG4gICAgICAgIGxldCBkYXRhT2JqO1xyXG4gICAgICAgIGlmICh0eXBlb2YgZGF0YSA9PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBkYXRhT2JqID0gSlNPTi5wYXJzZShkYXRhKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgaW5mb1VzZXIgPSBKU09OLnBhcnNlKGRhdGFPYmoubWVzc2FnZS5jb250ZW50KTtcclxuICAgICAgICBpZiAoaW5mb1VzZXIuSWQpIHtcclxuICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5VU0VSX0lORk9fS0VZICsgJ18nICsgaW5mb1VzZXIuSWQpO1xyXG4gICAgICAgICAgICB0aGlzLmdldEJhc2ljVXNlckluZm8oaW5mb1VzZXIuSWQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXRGb3JBdXRvQ29tcGxldGUoa2V5OiBzdHJpbmcpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XHJcbiAgICAgICAgY29uc3QgYXBpVXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXRGb3JBdXRvQ29tcGxldGU/a2V5PSR7a2V5fWA7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwLmdldDxSZXNwb25zZVJlc3VsdD4oYXBpVXJsKVxyXG4gICAgICAgICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gdGhpcy5fZXhjZXB0aW9uSGFuZGxlclNlcnZpY2UuaGFuZGxlRXJyb3IoZXJyLCB0aGlzLl9pbmplY3RvcikpXHJcbiAgICAgICAgICAgICAgICAgICApLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHBvcHVsYXRlQ3VycmVudFVzZXIoKSB7XHJcbiAgICAgICAgY29uc3Qgc3RvcmFnZUl0ZW0gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLkNVUlJFTlRfVVNFUl9LRVkpO1xyXG4gICAgICAgIGNvbnN0IHVzZXIgPSA8VG5Vc2VyPkpTT04ucGFyc2Uoc3RvcmFnZUl0ZW0pO1xyXG4gICAgICAgIGlmICh1c2VyKSB7XHJcbiAgICAgICAgICAgIGlmICghdXNlci51c2VySWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2F1dGhlblNlcnZpY2UubG9nb3V0KCk7XHJcbiAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLkNVUlJFTlRfVVNFUl9LRVksIEpTT04uc3RyaW5naWZ5KHVzZXIpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJhd1VzZXJJZCA9IHVzZXIudXNlcklkO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdXNlcklkID0gTnVtYmVyKHJhd1VzZXJJZCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWlzTmFOKHVzZXJJZCkpIHtcclxuICAgICAgICAgICAgICAgICAgICB1c2VyLm9yaWdpbklkID0gdXNlci51c2VySWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgdXNlci51c2VySWQgPSB1c2VyLmluc3RhbmNlaWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5DVVJSRU5UX1VTRVJfS0VZLCBKU09OLnN0cmluZ2lmeSh1c2VyKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb25Db250ZXh0LmdldFJvb3RDb250ZXh0KCkuZGF0YS5jdXJyZW50VXNlciA9IHVzZXI7XHJcbiAgICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uQ29udGV4dC5nZXRSb290Q29udGV4dCgpLmZpcmVSZXBsYXlFdmVudChDb21DdHhDb25zdGFudHMuUk9PVC5VU0VSX0xPQURFRCwgdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbkNvbnRleHQuZ2V0Um9vdENvbnRleHQoKS5yZXBsYXlTdWJzY3JpYmVPbmNlKENvbUN0eENvbnN0YW50cy5ST09ULlVTRVJfUkVBRFksIHJzID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZpcnN0VGltZUxvZ2luID0gcnMgPz8gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhY2Nlc3NUb2tlbiA9IHRoaXMuX29hdXRoU2VydmljZS5nZXRBY2Nlc3NUb2tlbigpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZGVjb2RlZDogYW55ID0gSldULmRlZmF1bHQoYWNjZXNzVG9rZW4pO1xyXG4gICAgICAgICAgICAgICAgLy8gQ2h1eeG7g24gxJHhu5VpIHNhbmcgZMO5bmcgaW5zdGFuY2VJZCBu4bq/dSDEkcSDbmcgbmjhuq1wIGLhurFuZyBpZGVudGl0eXY0IG5oxrBuZyBwaOG6o2kgc+G7rSBk4bulbmcgYmFzZSB1c2VyT3JndjVcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJhd1VzZXJJZCA9IGRlY29kZWQuc3ViO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdXNlcklkID0gTnVtYmVyKHJhd1VzZXJJZCk7XHJcbiAgICAgICAgICAgICAgICBsZXQgdXNlcklkUmVzdWx0ID0gJyc7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWlzTmFOKHVzZXJJZCkpIHtcclxuICAgICAgICAgICAgICAgICAgICB1c2VySWRSZXN1bHQgPSBkZWNvZGVkLmluc3RhbmNlaWQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB1c2VySWRSZXN1bHQgPSByYXdVc2VySWQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldFN0YWZmSW5mbyh1c2VySWRSZXN1bHQpLnRoZW4ocnMxID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB1c2VyID0gbmV3IFRuVXNlcigpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyczEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5pc3N1cGVydXNlciA9IGRlY29kZWQuaXNzdXBlcnVzZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIuaXNhZG1pbiA9IGRlY29kZWQuaXNhZG1pbjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlci51c2VySWQgPSB1c2VySWRSZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIuZnVsbE5hbWUgPSBkZWNvZGVkLmZ1bGxuYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VyLnVzZXJOYW1lID0gZGVjb2RlZC51c2VybmFtZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5tYUNhbkJvID0gZGVjb2RlZC5tYUNhbkJvO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VyLm1hTmd1b2lIb2MgPSBkZWNvZGVkLm1hTmd1b2lIb2M7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIuYXZhdGFyID0gcnMxLmF2YXRhcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5wb3NpdGlvbiA9IHJzMS5wb3NpdGlvbjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5yb2xlID0gcnMxLnJvbGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIuZ2VuZGVyID0gcnMxLmdlbmRlcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5wb3NpdGlvbkNvZGUgPSByczEucG9zaXRpb25Db2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VyLmluc3RhbmNlaWQgPSBkZWNvZGVkLmluc3RhbmNlaWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIuaWRDYW5CbyA9IGRlY29kZWQuaWRDYW5CbztcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5vcmlnaW5JZCA9IGRlY29kZWQuc3ViO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF1c2VyLmF2YXRhciB8fCB1c2VyLmF2YXRhciA9PSAnJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVzZXIuZ2VuZGVyID09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLmF2YXRhciA9IHRoaXMuREVGQVVMVF9BVkFUQVJfRkVNQUxFO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5hdmF0YXIgPSB0aGlzLkRFRkFVTFRfQVZBVEFSX01BTEU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5DVVJSRU5UX1VTRVJfS0VZLCBKU09OLnN0cmluZ2lmeSh1c2VyKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uQ29udGV4dC5nZXRSb290Q29udGV4dCgpLmRhdGEuY3VycmVudFVzZXIgPSB1c2VyO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoZmlyc3RUaW1lTG9naW4pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb25Db250ZXh0LmdldFJvb3RDb250ZXh0KCkuZmlyZUV2ZW50KENvbUN0eENvbnN0YW50cy5ST09ULk5FRURfQ0xFQVJfUEVSTUlTU0lPTl9DQUNIRSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbkNvbnRleHQuZ2V0Um9vdENvbnRleHQoKS5maXJlUmVwbGF5RXZlbnQoQ29tQ3R4Q29uc3RhbnRzLlJPT1QuVVNFUl9MT0FERUQsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sIGVyciA9PiB7XHJcblxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXRQcm9maWxlSW5mbygpIHtcclxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdwcm9maWxlcycpKTtcclxuICAgIH1cclxuXHJcbiAgICBpc0tob2FWaWVuKGlkTG9haURvblZpKSB7XHJcbiAgICAgICAgcmV0dXJuIGlkTG9haURvblZpID09ICcyMCcgfHwgaWRMb2FpRG9uVmkgPT0gJzYwJztcclxuICAgIH1cclxuXHJcbiAgICBpc0JvTW9uKGlkTG9haURvblZpKSB7XHJcbiAgICAgICAgcmV0dXJuIGlkTG9haURvblZpID09ICcyMSc7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q3VycmVudFVzZXIoKTogVG5Vc2VyIHtcclxuICAgICAgICByZXR1cm4gPFRuVXNlcj4odGhpcy5fYXBwbGljYXRpb25Db250ZXh0LmdldFJvb3RDb250ZXh0KCkuZGF0YS5jdXJyZW50VXNlcik7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VXNlck5hbWUoaXRlbSk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW0uZnVsbE5hbWVOZXdcclxuICAgICAgICAgICAgPyBgJHtpdGVtLmZ1bGxOYW1lTmV3fWBcclxuICAgICAgICAgICAgOiBgJHtpdGVtLmxhc3ROYW1lfSAke2l0ZW0uZmlzdE5hbWV9YDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRVc2VySWRDb21iaW5lKCkge1xyXG4gICAgICAgIGNvbnN0IHJhd1VzZXJJZCA9IHRoaXMuZ2V0SWQoKTtcclxuICAgICAgICBjb25zdCB1c2VySWQgPSBOdW1iZXIocmF3VXNlcklkKTtcclxuICAgICAgICBsZXQgdXNlcklkUmVzdWx0ID0gJyc7XHJcbiAgICAgICAgaWYgKCFpc05hTih1c2VySWQpKSB7XHJcbiAgICAgICAgICAgIHVzZXJJZFJlc3VsdCA9IHRoaXMuZ2V0SW5zdGFuY2VJZCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdXNlcklkUmVzdWx0ID0gcmF3VXNlcklkO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdXNlcklkUmVzdWx0LnRvU3RyaW5nKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U3RhZmZJbmZvKHVzZXJJZCk6IFByb21pc2U8VG5Vc2VyPiB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS8ke3VzZXJJZH1gO1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwLmdldDxSZXNwb25zZVJlc3VsdD4odXJsKVxyXG4gICAgICAgICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIsIHRoaXMuX2luamVjdG9yKSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgbWFwKHJzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3AgPSA8VG5Vc2VyPntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGxOYW1lOiBycy5kYXRhID8gcnMuZGF0YS5mdWxsTmFtZSA6ICcnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9sZTogcnMuZGF0YSA/IHJzLmRhdGEucm9sZSA6ICcnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZhdGFyOiBycy5kYXRhID8gcnMuZGF0YS5hdmF0YXIgOiAnJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmRlcjogcnMuZGF0YSA/IHJzLmRhdGEuZ2VuZGVyIDogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uQ29kZTogcnMuZGF0YS5wb3NpdGlvbkNvZGUgPyBycy5kYXRhLnBvc2l0aW9uQ29kZSA6ICcnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2VpZDogcnMuZGF0YS5pbnN0YW5jZWlkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW9wLmF2YXRhciB8fCBvcC5hdmF0YXIgPT0gJycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcC5nZW5kZXIgPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wLmF2YXRhciA9IHRoaXMuREVGQVVMVF9BVkFUQVJfRkVNQUxFO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3AuYXZhdGFyID0gdGhpcy5ERUZBVUxUX0FWQVRBUl9NQUxFO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3A7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgfSkpXHJcbiAgICAgICAgICAgICAgICAgICAudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0SWQoKTogc3RyaW5nIHtcclxuICAgICAgICBjb25zdCBzdG9yYWdlSXRlbSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuQ1VSUkVOVF9VU0VSX0tFWSk7XHJcbiAgICAgICAgY29uc3QgdXNlciA9IDxUblVzZXI+SlNPTi5wYXJzZShzdG9yYWdlSXRlbSk7XHJcbiAgICAgICAgaWYgKHVzZXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHVzZXIudXNlcklkO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q3VycmVudFVzZXIoKS51c2VySWQ7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldEluc3RhbmNlSWQoKTogc3RyaW5nIHtcclxuICAgICAgICBjb25zdCBzdG9yYWdlSXRlbSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuQ1VSUkVOVF9VU0VSX0tFWSk7XHJcbiAgICAgICAgY29uc3QgdXNlciA9IDxUblVzZXI+SlNPTi5wYXJzZShzdG9yYWdlSXRlbSk7XHJcbiAgICAgICAgaWYgKHVzZXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHVzZXIuaW5zdGFuY2VpZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEN1cnJlbnRVc2VyKCkuaW5zdGFuY2VpZDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmVnaXN0ZXJPbmxpbmUoZm9ybURhdGE6IEZvcm1EYXRhKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xyXG4gICAgICAgIGNvbnN0IGFwaVVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vcmVnaXN0ZXJPbmxpbmVgO1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwXHJcbiAgICAgICAgICAgICAgICAgICAucG9zdDxSZXNwb25zZVJlc3VsdD4oYXBpVXJsLCBmb3JtRGF0YSlcclxuICAgICAgICAgICAgICAgICAgIC5waXBlKGNhdGNoRXJyb3IoZXJyID0+IHRoaXMuaGFuZGxlRXJyb3IoZXJyLCB0aGlzLl9pbmplY3RvcikpKVxyXG4gICAgICAgICAgICAgICAgICAgLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEJhc2ljVXNlckluZm8odXNlcklkOiBudW1iZXIpOiBQcm9taXNlPEJhc2ljVXNlckluZm8+IHtcclxuXHJcbiAgICAgICAgY29uc3Qgc3RvcmFnZUl0ZW0gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLlVTRVJfSU5GT19LRVkgKyAnXycgKyB1c2VySWQpO1xyXG4gICAgICAgIC8vIGNvbnN0IHVzZXJJbmZvcyA9IDxCYXNpY1VzZXJJbmZvW10+SlNPTi5wYXJzZShzdG9yYWdlSXRlbSk7XHJcbiAgICAgICAgLy8gY29uc3QgdXNlciA9IHVzZXJJbmZvcyA/IHVzZXJJbmZvcy5maW5kKGl0ZW0gPT4gaXRlbS5pZCA9PT0gdXNlcklkKSA6IG51bGw7XHJcbiAgICAgICAgY29uc3QgdXNlciA9IDxCYXNpY1VzZXJJbmZvPkpTT04ucGFyc2Uoc3RvcmFnZUl0ZW0pO1xyXG4gICAgICAgIGlmICh1c2VyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiByZXNvbHZlKHVzZXIpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodXNlcklkID09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICByZWplY3QoPEJhc2ljVXNlckluZm8+e30pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHVzZXJJZCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3ZVcmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0dldEJhc2ljVXNlckluZm8/aWQ9JHt1c2VySWR9YDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuX2h0dHAuZ2V0PFJlc3BvbnNlUmVzdWx0PihzdlVybCkucGlwZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFyZVJlcGxheSh0aGlzLlJFUExBWV9DT1VOVCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0cnkodGhpcy5SRVRSWV9DT1VOVCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwKHJlcHNvbnNlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNhdmUgcmVzcG9uc2UgdG8gbG9jYWwgc3RvcmFnZSBoZXJlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLlVTRVJfSU5GT19LRVkgKyAnXycgKyByZXBzb25zZS5kYXRhLmlkLCBKU09OLnN0cmluZ2lmeShyZXBzb25zZS5kYXRhKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gPEJhc2ljVXNlckluZm8+cmVwc29uc2UuZGF0YTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIsIHRoaXMuX2luamVjdG9yKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApKS50b1Byb21pc2UoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2gge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KDxCYXNpY1VzZXJJbmZvPnt9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldEJhc2ljVXNlcnNJbmZvKHVzZXJJZHM6IHN0cmluZyk6IFByb21pc2U8QmFzaWNVc2VySW5mb1tdPiB7XHJcbiAgICAgICAgaWYgKCF1c2VySWRzIHx8IHVzZXJJZHMgPT09ICcnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKDxCYXNpY1VzZXJJbmZvW10+W10pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgc3RvcmFnZUl0ZW0gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLlVTRVJfSU5GT19LRVkpO1xyXG4gICAgICAgIGNvbnN0IHVzZXJJbmZvcyA9IDxCYXNpY1VzZXJJbmZvW10+SlNPTi5wYXJzZShzdG9yYWdlSXRlbSk7XHJcblxyXG4gICAgICAgIC8vIGNvbnN0IHVzZXJzID0gdXNlckluZm9zID8gdXNlckluZm9zLmZpbHRlcihpdGVtID0+IHVzZXJJZHMuaW5kZXhPZihgLCR7aXRlbS5pZH0sYCkgPiAtMSkgOiBudWxsO1xyXG4gICAgICAgIGNvbnN0IGNoZWNrID0gdXNlckluZm9zID8gdXNlcklkcy5pbmRleE9mKHVzZXJJbmZvc1snaWQnXSkgPiAtMSA6IG51bGw7XHJcbiAgICAgICAgaWYgKGNoZWNrKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiByZXNvbHZlKHVzZXJJbmZvcykpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHN2VXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXRCYXNpY1VzZXJzSW5mbz91c2VySWRzPSR7dXNlcklkc31gO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5faHR0cC5nZXQ8UmVzcG9uc2VSZXN1bHQ+KHN2VXJsKS5waXBlKFxyXG4gICAgICAgICAgICAgICAgICAgIHNoYXJlUmVwbGF5KHRoaXMuUkVQTEFZX0NPVU5UKSxcclxuICAgICAgICAgICAgICAgICAgICByZXRyeSh0aGlzLlJFVFJZX0NPVU5UKSxcclxuICAgICAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnI6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB0aGlzLmhhbmRsZUVycm9yKGVyciwgdGhpcy5faW5qZWN0b3IpKSxcclxuICAgICAgICAgICAgICAgICAgICBtYXAocmVwc29uc2UgPT4gPEJhc2ljVXNlckluZm9bXT5yZXBzb25zZS5kYXRhKVxyXG4gICAgICAgICAgICAgICAgKS50b1Byb21pc2UoKS50aGVuKHN1Y2Nlc3MgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoc3VjY2Vzcyk7XHJcbiAgICAgICAgICAgICAgICB9KS5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoPEJhc2ljVXNlckluZm9bXT5bXSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSMOgbSBkw7luZyDEkeG7gyBs4bqleSB0aMO0bmcgdGluIGPGoSBi4bqjbiBuaGnhu4F1IG5nxrDhu51pIGTDuW5nIGThu7FhIHbDoG8gdXNlck5hbWUsXHJcbiAgICAgKiBoaeG7h24gdOG6oWkgY2jGsGEgY8OzIHRow7RuZyB0aW4gduG7gSDEkcahbiB24buLIHbDoCBjaOG7qWMgduG7pSBuZ8aw4budaSBkw7luZyDEkeG7gyBnaeG6o20gbG9hZCB2w6AgdsOsIGNoxrBhIGTDuW5nIMSR4bq/blxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJOYW1lXHJcbiAgICAgKiBAcmV0dXJuIHtQcm9taXNlPEJhc2ljVXNlckluZm9bXT5cclxuICAgICAqL1xyXG4gICAgZ2V0QmFzaWNVc2VySW5mb0J5VXNlck5hbWUodXNlck5hbWU6IHN0cmluZyk6IFByb21pc2U8QmFzaWNVc2VySW5mbz4ge1xyXG4gICAgICAgIGNvbnN0IHN0b3JhZ2VJdGVtID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5VU0VSX0lORk9fS0VZICsgJ18nICsgdXNlck5hbWUpO1xyXG4gICAgICAgIGNvbnN0IHVzZXIgPSA8QmFzaWNVc2VySW5mbz5KU09OLnBhcnNlKHN0b3JhZ2VJdGVtKTtcclxuICAgICAgICBpZiAodXNlcikge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gcmVzb2x2ZSh1c2VyKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHVzZXJOYW1lID09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKDxCYXNpY1VzZXJJbmZvPnt9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh1c2VyTmFtZSAhPSAnJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdlVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vR2V0QmFzaWNVc2VySW5mb0J5VXNlck5hbWU/dXNlck5hbWU9JHt1c2VyTmFtZX1gO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9odHRwLmdldDxSZXNwb25zZVJlc3VsdD4oc3ZVcmwpLnBpcGUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFyZVJlcGxheSh0aGlzLlJFUExBWV9DT1VOVCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRyeSh0aGlzLlJFVFJZX0NPVU5UKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcChyZXBzb25zZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNhdmUgcmVzcG9uc2UgdG8gbG9jYWwgc3RvcmFnZSBoZXJlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuVVNFUl9JTkZPX0tFWSArICdfJyArIHJlcHNvbnNlLmRhdGEudXNlck5hbWUsIEpTT04uc3RyaW5naWZ5KHJlcHNvbnNlLmRhdGEpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxCYXNpY1VzZXJJbmZvPnJlcHNvbnNlLmRhdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnI6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB0aGlzLmhhbmRsZUVycm9yKGVyciwgdGhpcy5faW5qZWN0b3IpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSkudG9Qcm9taXNlKCkudGhlbihyc3MgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyc3MpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaChlcnJyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoPGFueT57fSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIEjDoG0gZMO5bmcgxJHhu4MgbOG6pXkgdGjDtG5nIHRpbiBjxqEgYuG6o24gbmhp4buBdSBuZ8aw4budaSBkw7luZyBk4buxYSB2w6BvIHVzZXJOYW1lLFxyXG4gICAgICogaGnhu4duIHThuqFpIGNoxrBhIGPDsyB0aMO0bmcgdGluIHbhu4EgxJHGoW4gduG7iyB2w6AgY2jhu6ljIHbhu6UgbmfGsOG7nWkgZMO5bmcgxJHhu4MgZ2nhuqNtIGxvYWQgdsOgIHbDrCBjaMawYSBkw7luZyDEkeG6v25cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VyTmFtZXNcclxuICAgICAqIEByZXR1cm4ge1Byb21pc2U8QmFzaWNVc2VySW5mb1tdPlxyXG4gICAgICovXHJcbiAgICBhc3luYyBnZXRCYXNpY1VzZXJzSW5mb0J5VXNlck5hbWVzKHVzZXJOYW1lczogc3RyaW5nKTogUHJvbWlzZTxCYXNpY1VzZXJJbmZvW10+IHtcclxuICAgICAgICBjb25zdCBzdG9yYWdlSXRlbSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuVVNFUl9JTkZPX0tFWSk7XHJcbiAgICAgICAgY29uc3QgdXNlckluZm9zID0gPEJhc2ljVXNlckluZm9bXT5KU09OLnBhcnNlKHN0b3JhZ2VJdGVtKTtcclxuICAgICAgICBjb25zdCBjaGVjayA9IHVzZXJJbmZvcyA/IHVzZXJOYW1lcy5pbmRleE9mKHVzZXJJbmZvc1sndXNlck5hbWUnXSkgPiAtMSA6IG51bGw7XHJcbiAgICAgICAgaWYgKGNoZWNrKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1c2VySW5mb3M7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBzdlVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vR2V0QmFzaWNVc2Vyc0luZm9CeVVzZXJOYW1lcz91c2VyTmFtZXM9JHt1c2VyTmFtZXN9YDtcclxuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX2h0dHAuZ2V0PFJlc3BvbnNlUmVzdWx0PihzdlVybCkucGlwZShcclxuICAgICAgICAgICAgICAgIHNoYXJlUmVwbGF5KHRoaXMuUkVQTEFZX0NPVU5UKSxcclxuICAgICAgICAgICAgICAgIHJldHJ5KHRoaXMuUkVUUllfQ09VTlQpLFxyXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIsIHRoaXMuX2luamVjdG9yKSksXHJcbiAgICAgICAgICAgICAgICBtYXAocmVwc29uc2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuVVNFUl9JTkZPX0tFWSArICdfJyArICg8QmFzaWNVc2VySW5mb1tdPnJlcHNvbnNlLmRhdGEpLm1hcCh4ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHgudXNlck5hbWUpIHJldHVybiB4LnVzZXJOYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pLCBKU09OLnN0cmluZ2lmeShyZXBzb25zZS5kYXRhKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxCYXNpY1VzZXJJbmZvW10+cmVwc29uc2UuZGF0YTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICkudG9Qcm9taXNlKCkuY2F0Y2goZXJyID0+IFtdKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29udmVydExpc3RVc2VySWRUb1N0cmluZyh1c2VySWRzOiBudW1iZXJbXSk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKHVzZXJJZHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gYCwke3VzZXJJZHMuam9pbignLCcpfSxgO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gJywnO1xyXG4gICAgfVxyXG5cclxuICAgIGZpbGxCYXNpY1VzZXJJbmZvKGRhdGFTb3VyY2U6IGFueVtdLCBwcm9wZXJ0eU5hbWU6IHN0cmluZyk6IGFueVtdIHtcclxuICAgICAgICBkYXRhU291cmNlLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHVzZXJJZCA9IGl0ZW1bcHJvcGVydHlOYW1lXS5pZCA/IGl0ZW1bcHJvcGVydHlOYW1lXS5pZCA6IGl0ZW1bcHJvcGVydHlOYW1lXTtcclxuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLXNoYWRvd2VkLXZhcmlhYmxlXHJcbiAgICAgICAgICAgIC8vIGNvbnN0IHVzZXIgPSB1c2Vycy5maW5kKHVzZXIgPT4gdXNlci5pZCA9PT0gdXNlcklkKTtcclxuICAgICAgICAgICAgLy8gaWYgKHVzZXIpIHtcclxuICAgICAgICAgICAgLy8gICAgIGl0ZW1bcHJvcGVydHlOYW1lXSA9IHVzZXI7XHJcbiAgICAgICAgICAgIC8vIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGRhdGFTb3VyY2U7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHJlc3RvcmVQYXNzd29yZChpdGVtOiBhbnkpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5wdXQ8UmVzcG9uc2VSZXN1bHQ+KGAke3RoaXMuc2VydmljZVVyaX0vcmVzdG9yZVBhc3N3b3JkYCwgaXRlbSlcclxuICAgICAgICAgICAgICAgICAgIC5waXBlKGNhdGNoRXJyb3IoZXJyID0+IHRoaXMuaGFuZGxlRXJyb3IoZXJyLCB0aGlzLl9pbmplY3RvcikpKVxyXG4gICAgICAgICAgICAgICAgICAgLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGNoYW5nZVBhc3N3b3JkKHVzZXJJZDogc3RyaW5nLCBpdGVtOiBhbnkpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XHJcblxyXG4gICAgICAgIGNvbnN0IGFwaVVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vQ2hhbmdlUGFzc3dvcmRgO1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwXHJcbiAgICAgICAgICAgICAgICAgICAucG9zdDxSZXNwb25zZVJlc3VsdD4oYXBpVXJsLCBpdGVtKVxyXG4gICAgICAgICAgICAgICAgICAgLnBpcGUoY2F0Y2hFcnJvcihlcnIgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIsIHRoaXMuX2luamVjdG9yKSkpXHJcbiAgICAgICAgICAgICAgICAgICAudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXRQYXNzd29yZChpdGVtOiBhbnkpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XHJcblxyXG4gICAgICAgIGNvbnN0IGFwaVVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vcmVzZXRQYXNzd29yZGA7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHBcclxuICAgICAgICAgICAgICAgICAgIC5wdXQ8UmVzcG9uc2VSZXN1bHQ+KGFwaVVybCwgaXRlbSlcclxuICAgICAgICAgICAgICAgICAgIC5waXBlKGNhdGNoRXJyb3IoZXJyID0+IHRoaXMuaGFuZGxlRXJyb3IoZXJyLCB0aGlzLl9pbmplY3RvcikpKVxyXG4gICAgICAgICAgICAgICAgICAgLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIEdldHNCeU1hbmFnZXJJZEFycmF5SWQoaWQ6IHN0cmluZyk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcclxuICAgICAgICBjb25zdCBhcGlVcmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0dldExvd2VyU3RhZmZzQnlVc2VySWQ/dXNlcklkPSR7aWR9YDtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0R2V0KGFwaVVybCk7XHJcbiAgICB9XHJcblxyXG4gICAgbWFya0FzQWRtaW4odXNlcklkOiBudW1iZXIsIGlzQWRtaW46IGJvb2xlYW4pIHtcclxuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L21hcmtBc0FkbWluLyR7dXNlcklkfS8ke2lzQWRtaW59YDtcclxuICAgICAgICByZXR1cm4gdGhpcy5faHR0cFxyXG4gICAgICAgICAgICAgICAgICAgLnB1dDxSZXNwb25zZVJlc3VsdD4odXJsLCBpc0FkbWluKVxyXG4gICAgICAgICAgICAgICAgICAgLnBpcGUoY2F0Y2hFcnJvcihlcnIgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIsIHRoaXMuX2luamVjdG9yKSkpXHJcbiAgICAgICAgICAgICAgICAgICAudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgbWFya0FzUmVwcmVzZW50KHVzZXJJZDogbnVtYmVyLCBpc1JlcHJlc2VudDogbnVtYmVyKSB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9tYXJrQXNSZXByZXNlbnQvJHt1c2VySWR9LyR7aXNSZXByZXNlbnR9YDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHBcclxuICAgICAgICAgICAgICAgICAgIC5wdXQ8UmVzcG9uc2VSZXN1bHQ+KHVybCwgaXNSZXByZXNlbnQpXHJcbiAgICAgICAgICAgICAgICAgICAucGlwZShjYXRjaEVycm9yKGVyciA9PiB0aGlzLmhhbmRsZUVycm9yKGVyciwgdGhpcy5faW5qZWN0b3IpKSlcclxuICAgICAgICAgICAgICAgICAgIC50b1Byb21pc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRzQnlPcmdhbml6YXRpb25MaXN0SWQocGFnZU9wdGlvbjogUGFnZU9wdGlvbkJhc2UsIGZ1bkdldE5hbWU6IHN0cmluZyA9ICcnLCBvcHRpb25QYXJhbWV0ZXI6IHN0cmluZyA9ICcnLCBkZWZhdWx0UGFyYW1ldGVyOiBzdHJpbmcgPSAnJyk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcclxuXHJcbiAgICAgICAgbGV0IHF1ZXJ5U3RyaW5nID0gYD9rZXk9JHtwYWdlT3B0aW9uLnF1ZXJ5fWA7XHJcblxyXG4gICAgICAgIGlmICghcGFnZU9wdGlvbi5vZmZzZXQpIHtcclxuICAgICAgICAgICAgcGFnZU9wdGlvbi5vZmZzZXQgPSAwO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcXVlcnlTdHJpbmcgKz0gYCZvZmZzZXQ9JHtwYWdlT3B0aW9uLm9mZnNldH1gO1xyXG5cclxuXHJcbiAgICAgICAgaWYgKCFwYWdlT3B0aW9uLmxpbWl0KSB7XHJcbiAgICAgICAgICAgIHBhZ2VPcHRpb24ubGltaXQgPSB0aGlzLkxJTUlUX0RFRkFVTFQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHF1ZXJ5U3RyaW5nICs9IGAmbGltaXQ9JHtwYWdlT3B0aW9uLmxpbWl0ICsgMX1gO1xyXG5cclxuXHJcbiAgICAgICAgaWYgKHBhZ2VPcHRpb24uc29ydEZpZWxkKSB7XHJcbiAgICAgICAgICAgIHF1ZXJ5U3RyaW5nICs9IGAmc29ydEZpZWxkPSR7cGFnZU9wdGlvbi5zb3J0RmllbGR9JmlzQXNjPSR7cGFnZU9wdGlvbi5pc0FzY31gO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZGVmYXVsdFBhcmFtZXRlciAhPSAnJykge1xyXG4gICAgICAgICAgICBxdWVyeVN0cmluZyArPSBgJiR7ZGVmYXVsdFBhcmFtZXRlcn1gO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAob3B0aW9uUGFyYW1ldGVyICE9ICcnKSB7XHJcbiAgICAgICAgICAgIHF1ZXJ5U3RyaW5nICs9IGAmJHtvcHRpb25QYXJhbWV0ZXJ9YDtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgYXBpVXJsID0gYCR7dGhpcy5vcmdhbml6YXRpb25FbmRwb2ludH0ke2Z1bkdldE5hbWV9JHtxdWVyeVN0cmluZ31gO1xyXG4gICAgICAgIGlmIChwYWdlT3B0aW9uLmlzSWdub3JlQ2xpZW50Q2FjaGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0SWdub3JlQ2xpZW50Q2FjaGUoYXBpVXJsKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRHZXQoYXBpVXJsKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRzQnlPcmdhbml6YXRpb25JZChvcmdhbml6YXRpb25JZDogc3RyaW5nLCBrZXl3b3JkPzogc3RyaW5nLCBvZmZzZXQ/OiBudW1iZXIsIGxpbWl0PzogbnVtYmVyKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xyXG5cclxuICAgICAgICBpZiAoIWtleXdvcmQpIHtcclxuICAgICAgICAgICAga2V5d29yZCA9ICcnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFvZmZzZXQpIHtcclxuICAgICAgICAgICAgb2Zmc2V0ID0gMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghb2Zmc2V0KSB7XHJcbiAgICAgICAgICAgIG9mZnNldCA9IDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIWxpbWl0KSB7XHJcbiAgICAgICAgICAgIGxpbWl0ID0gMTA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBhcGlVcmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0dldHNCeU9yZ2FuaXphdGlvbklkYFxyXG4gICAgICAgICAgICAgICAgICAgICAgICsgYD9vcmdhbml6YXRpb25JZD0ke29yZ2FuaXphdGlvbklkfWBcclxuICAgICAgICAgICAgICAgICAgICAgICArIGAma2V5d29yZD0ke2tleXdvcmR9YFxyXG4gICAgICAgICAgICAgICAgICAgICAgICsgYCZvZmZzZXQ9JHtvZmZzZXR9YFxyXG4gICAgICAgICAgICAgICAgICAgICAgICsgYCZsaW1pdD0ke2xpbWl0fWA7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdEdldChhcGlVcmwpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldERlZmF1bHRBdmF0YXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuREVGQVVMVF9BVkFUQVJfTUFMRTtcclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVFcnJvcihlcnJvcjogYW55LCBpbmplY3RvcjogSW5qZWN0b3IpIHtcclxuICAgICAgICBjb25zdCBjb21tb25TZXJ2aWNlID0gaW5qZWN0b3IuZ2V0KENvbW1vblNlcnZpY2UpO1xyXG4gICAgICAgIHJldHVybiBjb21tb25TZXJ2aWNlLmhhbmRsZUVycm9yKGVycm9yLCBpbmplY3Rvcik7XHJcbiAgICB9XHJcblxyXG4gICAgbG9ja1VzZXIoaXRlbTogYW55KTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xyXG5cclxuICAgICAgICBjb25zdCBhcGlVcmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L2xvY2tVc2VyQWNjb3VudGA7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHBcclxuICAgICAgICAgICAgICAgICAgIC5wb3N0PFJlc3BvbnNlUmVzdWx0PihhcGlVcmwsIGl0ZW0pXHJcbiAgICAgICAgICAgICAgICAgICAucGlwZShjYXRjaEVycm9yKGVyciA9PiB0aGlzLmhhbmRsZUVycm9yKGVyciwgdGhpcy5faW5qZWN0b3IpKSlcclxuICAgICAgICAgICAgICAgICAgIC50b1Byb21pc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICB1bmxvY2tVc2VyKGl0ZW06IGFueSk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcclxuXHJcbiAgICAgICAgY29uc3QgYXBpVXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS91bmxvY2tVc2VyQWNjb3VudGA7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHBcclxuICAgICAgICAgICAgICAgICAgIC5wb3N0PFJlc3BvbnNlUmVzdWx0PihhcGlVcmwsIGl0ZW0pXHJcbiAgICAgICAgICAgICAgICAgICAucGlwZShjYXRjaEVycm9yKGVyciA9PiB0aGlzLmhhbmRsZUVycm9yKGVyciwgdGhpcy5faW5qZWN0b3IpKSlcclxuICAgICAgICAgICAgICAgICAgIC50b1Byb21pc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBpc1N1cGVyVXNlcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fYXBwbGljYXRpb25Db250ZXh0LmdldFJvb3RDb250ZXh0KCkuZGF0YS5jdXJyZW50VXNlclxyXG4gICAgICAgICAgICAgICAmJiB0aGlzLl9hcHBsaWNhdGlvbkNvbnRleHQuZ2V0Um9vdENvbnRleHQoKS5kYXRhLmN1cnJlbnRVc2VyLmlzc3VwZXJ1c2VyID09PSAnVHJ1ZSc7XHJcbiAgICB9XHJcblxyXG4gICAgaXNBZG1pbigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fYXBwbGljYXRpb25Db250ZXh0LmdldFJvb3RDb250ZXh0KCkuZGF0YS5jdXJyZW50VXNlclxyXG4gICAgICAgICAgICAgICAmJiB0aGlzLl9hcHBsaWNhdGlvbkNvbnRleHQuZ2V0Um9vdENvbnRleHQoKS5kYXRhLmN1cnJlbnRVc2VyLmlzYWRtaW4gPT09ICdUcnVlJztcclxuICAgIH1cclxuXHJcbiAgICBpc1ZhbGlkQWNjZXNzVG9rZW4oKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX29hdXRoU2VydmljZS5oYXNWYWxpZEFjY2Vzc1Rva2VuKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VXNlcnNCeUdyb3VwQ29kZShncm91cENvZGU6IHN0cmluZyk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcclxuICAgICAgICBjb25zdCBhcGlVcmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0dldFVzZXJzQnlHcm91cENvZGU/Z3JvdXBDb2RlPSR7Z3JvdXBDb2RlfWA7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAuZ2V0PFJlc3BvbnNlUmVzdWx0PihhcGlVcmwpXHJcbiAgICAgICAgICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnI6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB0aGlzLl9leGNlcHRpb25IYW5kbGVyU2VydmljZS5oYW5kbGVFcnJvcihlcnIsIHRoaXMuX2luamVjdG9yKSlcclxuICAgICAgICAgICAgICAgICAgICkudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U2VydmljZUVuZHBvaW50KCkge1xyXG4gICAgICAgIHJldHVybiBgJHt0aGlzLnNlcnZpY2VVcml9YDtcclxuICAgIH1cclxuXHJcbiAgICBpc1NpbmhWaWVuQWNjb3VudCgpIHtcclxuICAgICAgICBjb25zdCB1c2VyTG9naW4gPSB0aGlzLmdldEN1cnJlbnRVc2VyKCk7XHJcbiAgICAgICAgaWYgKHVzZXJMb2dpbikge1xyXG4gICAgICAgICAgICBpZiAodXNlckxvZ2luLm1hTmd1b2lIb2MpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRQYWdlVXNlckluZm8odXNlcklkczogc3RyaW5nKTogUHJvbWlzZTxCYXNpY1VzZXJJbmZvW10+IHtcclxuICAgICAgICBpZiAoIXVzZXJJZHMgfHwgdXNlcklkcyA9PT0gJycpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoPEJhc2ljVXNlckluZm9bXT5bXSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBzdG9yYWdlSXRlbSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuVVNFUl9JTkZPX0tFWSk7XHJcbiAgICAgICAgY29uc3QgdXNlckluZm9zID0gPEJhc2ljVXNlckluZm9bXT5KU09OLnBhcnNlKHN0b3JhZ2VJdGVtKTtcclxuXHJcbiAgICAgICAgLy8gY29uc3QgdXNlcnMgPSB1c2VySW5mb3MgPyB1c2VySW5mb3MuZmlsdGVyKGl0ZW0gPT4gdXNlcklkcy5pbmRleE9mKGAsJHtpdGVtLmlkfSxgKSA+IC0xKSA6IG51bGw7XHJcbiAgICAgICAgY29uc3QgY2hlY2sgPSB1c2VySW5mb3MgPyB1c2VySWRzLmluZGV4T2YodXNlckluZm9zWydpZCddKSA+IC0xIDogbnVsbDtcclxuICAgICAgICBpZiAoY2hlY2spIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHJlc29sdmUodXNlckluZm9zKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc3ZVcmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0dldFBhZ2VkYDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlcnMgPSBbXTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1GaWx0ZXIgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZmllbGQ6ICdpZCcsXHJcbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3I6ICdpbicsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHVzZXJJZHNcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICBmaWx0ZXJzLnB1c2goaXRlbUZpbHRlcik7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBncmlkSW5mbyA9IG5ldyBHcmlkSW5mbyh7XHJcbiAgICAgICAgICAgICAgICAgICAgZmllbGRzOiAnJyxcclxuICAgICAgICAgICAgICAgICAgICBwYWdlSW5mbzoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWdlOiAxLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWdlU2l6ZTogMTAwMDBcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHNvcnRzOiBbXSxcclxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzOiBmaWx0ZXJzXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9odHRwLnBvc3Q8UmVzcG9uc2VSZXN1bHQ+KHN2VXJsLCBncmlkSW5mbykucGlwZShcclxuICAgICAgICAgICAgICAgICAgICBzaGFyZVJlcGxheSh0aGlzLlJFUExBWV9DT1VOVCksXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0cnkodGhpcy5SRVRSWV9DT1VOVCksXHJcbiAgICAgICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIsIHRoaXMuX2luamVjdG9yKSksXHJcbiAgICAgICAgICAgICAgICAgICAgbWFwKHJlcHNvbnNlID0+IDxCYXNpY1VzZXJJbmZvW10+cmVwc29uc2UuZGF0YSlcclxuICAgICAgICAgICAgICAgICkudG9Qcm9taXNlKCkudGhlbihzdWNjZXNzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHN1Y2Nlc3MpO1xyXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKDxCYXNpY1VzZXJJbmZvW10+W10pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iXX0=
|
|
594
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uL3Byb2plY3RzL3RueC1zaGFyZWQvc3JjL2xpYi8iLCJzb3VyY2VzIjpbInNlcnZpY2VzL3VzZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBcUIsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbkQsT0FBTyxLQUFLLElBQUksTUFBTSxZQUFZLENBQUM7QUFDbkMsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUd4RSxPQUFPLEVBQVUsUUFBUSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFHdkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2pELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7Ozs7Ozs7O0FBRW5ELHFCQUFxQjtBQUNyQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUM7QUFLakIsTUFB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LHlCQUF5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBFcnJvclJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBPQXV0aFNlcnZpY2UgfSBmcm9tICdhbmd1bGFyLW9hdXRoMi1vaWRjJztcclxuaW1wb3J0ICogYXMgSldUXyBmcm9tICdqd3QtZGVjb2RlJztcclxuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwLCByZXRyeSwgc2hhcmVSZXBsYXkgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IEFwcGxpY2F0aW9uQ29udGV4dFNlcnZpY2UgfSBmcm9tICcuLi9hcHAtY29udGV4dC9hcHBsaWNhdGlvbi1jb250ZXh0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb21DdHhDb25zdGFudHMgfSBmcm9tICcuLi9jb25maWdzL2NvbXBvbmVudC1jb250ZXh0LmNvbnN0YW50JztcclxuaW1wb3J0IHsgTW9kdWxlQ29uZmlnIH0gZnJvbSAnLi4vY29uZmlncy9tb2R1bGUtY29uZmlnJztcclxuaW1wb3J0IHsgQmFzaWNVc2VySW5mbyB9IGZyb20gJy4uL21vZGVscy9iYXNpYy11c2VyLWluZm8nO1xyXG5pbXBvcnQgeyBGaWx0ZXIsIEdyaWRJbmZvIH0gZnJvbSAnLi4vbW9kZWxzL2dyaWQtaW5mbyc7XHJcbmltcG9ydCB7IFBhZ2VPcHRpb25CYXNlIH0gZnJvbSAnLi4vbW9kZWxzL3BhZ2Utb3B0aW9uJztcclxuaW1wb3J0IHsgUmVzcG9uc2VSZXN1bHQgfSBmcm9tICcuLi9tb2RlbHMvcmVzcG9uc2UtcmVzdWx0JztcclxuaW1wb3J0IHsgVG5Vc2VyIH0gZnJvbSAnLi4vbW9kZWxzL3RuLXVzZXInO1xyXG5pbXBvcnQgeyBBdXRoZW5TZXJ2aWNlIH0gZnJvbSAnLi9hdXRoZW4uc2VydmljZSc7XHJcbmltcG9ydCB7IEJhc2VTZXJ2aWNlIH0gZnJvbSAnLi9iYXNlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb21tb25TZXJ2aWNlIH0gZnJvbSAnLi9jb21tb24uc2VydmljZSc7XHJcbmltcG9ydCB7IEV4Y2VwdGlvbkhhbmRsZXJTZXJ2aWNlIH0gZnJvbSAnLi9leGNlcHRpb24taGFuZGxlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTW9kdWxlQ29uZmlnU2VydmljZSB9IGZyb20gJy4vbW9kdWxlLWNvbmZpZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU2lnbmFsUlNlcnZpY2UgfSBmcm9tICcuL3NpZ25hbHIuc2VydmljZSc7XHJcblxyXG4vLyBmaXggZm9yIHByb2QgYnVpbGRcclxuY29uc3QgSldUID0gSldUXztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICAgIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgVXNlclNlcnZpY2UgZXh0ZW5kcyBCYXNlU2VydmljZSB7XHJcbiAgICByZWFkb25seSBVU0VSX0lORk9fS0VZID0gJ3VzZXJfaW5mbyc7XHJcbiAgICByZWFkb25seSBDVVJSRU5UX1VTRVJfS0VZID0gJ2N1cnJlbnRfdXNlcl9pbmZvJztcclxuICAgIHJlYWRvbmx5IFJFVFJZX0NPVU5UOiBudW1iZXIgPSAwO1xyXG4gICAgcmVhZG9ubHkgUkVQTEFZX0NPVU5UOiBudW1iZXIgPSAxMDtcclxuICAgIHJlYWRvbmx5IERFRkFVTFRfQVZBVEFSX01BTEU7XHJcbiAgICByZWFkb25seSBERUZBVUxUX0FWQVRBUl9GRU1BTEU7XHJcbiAgICByZWFkb25seSBvcmdhbml6YXRpb25FbmRwb2ludDtcclxuICAgIHJlYWRvbmx5IF9tb2R1bGVDb25maWc6IE1vZHVsZUNvbmZpZztcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihodHRwOiBIdHRwQ2xpZW50LFxyXG4gICAgICAgIGluamVjdG9yOiBJbmplY3RvcixcclxuICAgICAgICBfbW9kdWxlQ29uZmlnU2VydmljZTogTW9kdWxlQ29uZmlnU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9hdXRoZW5TZXJ2aWNlOiBBdXRoZW5TZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX29hdXRoU2VydmljZTogT0F1dGhTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX3NpZ25hbHJTZXJ2aWNlOiBTaWduYWxSU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9leGNlcHRpb25IYW5kbGVyU2VydmljZTogRXhjZXB0aW9uSGFuZGxlclNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfYXBwbGljYXRpb25Db250ZXh0OiBBcHBsaWNhdGlvbkNvbnRleHRTZXJ2aWNlXHJcbiAgICApIHtcclxuICAgICAgICBzdXBlcihodHRwLCBpbmplY3RvciwgYCR7X21vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCkuZW52aXJvbm1lbnQuYXBpRG9tYWluLnVzZXJPcmdFbmRwb2ludH0vJHtfbW9kdWxlQ29uZmlnU2VydmljZS5nZXRDb25maWcoKS5lbnZpcm9ubWVudC5hcGlWZXJzaW9ufS91c2VyYCk7XHJcbiAgICAgICAgdGhpcy5lbmRQb2ludCA9IF9tb2R1bGVDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLmVudmlyb25tZW50LmFwaURvbWFpbi51c2VyT3JnRW5kcG9pbnQ7XHJcblxyXG4gICAgICAgIHRoaXMuX21vZHVsZUNvbmZpZyA9IF9tb2R1bGVDb25maWdTZXJ2aWNlLmdldENvbmZpZygpO1xyXG4gICAgICAgIHRoaXMuc2VydmljZVVyaSA9IHRoaXMuZ2V0U2VydmljZVVybCgpO1xyXG4gICAgICAgIHRoaXMub3JnYW5pemF0aW9uRW5kcG9pbnQgPSB0aGlzLmdldFNlcnZpY2VVcmwoKTtcclxuXHJcbiAgICAgICAgdGhpcy5ERUZBVUxUX0FWQVRBUl9NQUxFID0gdGhpcy5fbW9kdWxlQ29uZmlnLmVudmlyb25tZW50LmFwcE1ldGFkYXRhLm1haW4uZGVmYXVsdE1hbGVBdmF0YXI7XHJcbiAgICAgICAgdGhpcy5ERUZBVUxUX0FWQVRBUl9GRU1BTEUgPSB0aGlzLl9tb2R1bGVDb25maWcuZW52aXJvbm1lbnQuYXBwTWV0YWRhdGEubWFpbi5kZWZhdWx0RmVtYWxlQXZhdGFyO1xyXG5cclxuICAgICAgICBjb25zdCByb290Q29udGV4dFN1YiA9IHRoaXMuX2FwcGxpY2F0aW9uQ29udGV4dC5yb290Q29udGV4dExvYWRlZC5zdWJzY3JpYmUocnMxID0+IHtcclxuICAgICAgICAgICAgaWYgKHJzMSkge1xyXG4gICAgICAgICAgICAgICAgLy8gYmluZGluZyBldmVudCB1c2VyIGNoYW5nZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb25Db250ZXh0LmdldFJvb3RDb250ZXh0KCkuc3Vic2NyaWJlKENvbUN0eENvbnN0YW50cy5ST09ULlVTRVJfSU5GT19DSEFOR0VELCBycyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuQ1VSUkVOVF9VU0VSX0tFWSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucG9wdWxhdGVDdXJyZW50VXNlcigpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgIHJvb3RDb250ZXh0U3ViLnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5fc2lnbmFsclNlcnZpY2Uuc3RhcnQobnVsbCwgJ1VTRVJfSU5GT19FRElURUQnLCBkYXRhID0+IHtcclxuICAgICAgICAgICAgdGhpcy5oYW5kbGVVc2VySW5mb0NoYW5nZShkYXRhKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldFNlcnZpY2VVcmwoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNVc2VPbGRPcmdhbml6YXRpb24oKSkge1xyXG4gICAgICAgICAgICBjb25zdCB1c2VyT2xkT3JnYW5pemF0aW9uID0gdGhpcy5fbW9kdWxlQ29uZmlnLmVudmlyb25tZW50LmFwaURvbWFpbi5vcmdhbml6YXRpb25FbmRwb2ludDtcclxuICAgICAgICAgICAgcmV0dXJuIGAke3VzZXJPbGRPcmdhbml6YXRpb259L3VzZXJgO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgdXNlck9yZ0VuZHBvaW50ID0gdGhpcy5fbW9kdWxlQ29uZmlnLmVudmlyb25tZW50LmFwaURvbWFpbi51c2VyT3JnRW5kcG9pbnQ7XHJcbiAgICAgICAgICAgIHJldHVybiBgJHt1c2VyT3JnRW5kcG9pbnR9LyR7dGhpcy5fbW9kdWxlQ29uZmlnLmVudmlyb25tZW50LmFwaVZlcnNpb259L3VzZXJgO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGlzVXNlT2xkT3JnYW5pemF0aW9uKCkge1xyXG4gICAgICAgIGNvbnN0IHVzZU9sZE9yZ2FuaXphdGlvbiA9IHRoaXMuX21vZHVsZUNvbmZpZy5lbnZpcm9ubWVudC51c2VPbGRPcmdhbml6YXRpb247XHJcbiAgICAgICAgaWYgKHVzZU9sZE9yZ2FuaXphdGlvbikge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEZ1bGxDYW5Cb0xhYmVsKGl0ZW0sIGdldERpc3BsYXlOYW1lID0gZmFsc2UpIHtcclxuICAgICAgICBsZXQgbGFiZWwgPSBnZXREaXNwbGF5TmFtZSAmJiBpdGVtLmRpc3BsYXlOYW1lID8gaXRlbS5kaXNwbGF5TmFtZSA6IHRoaXMuZ2V0VXNlck5hbWUoaXRlbSk7XHJcbiAgICAgICAgbGFiZWwgPSAoaXRlbS5tYUNodWNWdSA/IGAke2l0ZW0ubWFDaHVjVnV9LiBgIDogJycpICsgYCR7bGFiZWx9YCArIChpdGVtLnRlbkRvblZpID8gYCAtICR7aXRlbS50ZW5Eb25WaX1gIDogJycpO1xyXG4gICAgICAgIHJldHVybiBsYWJlbDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRBbGxXaXRoSW5mbyhmaWx0ZXJzOiBGaWx0ZXJbXSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldERhdGFDdXN0b21Sb3V0ZSgnV2l0aEluZm8nLCBmaWx0ZXJzKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRQYWdlV2l0aEluZm8oZ3JpZEluZm86IEdyaWRJbmZvKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QnlHcmlkUmVxdWVzdChncmlkSW5mbywgJ1dpdGhJbmZvJyk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0SW5mbyhpZDogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdEdldChgJHt0aGlzLnNlcnZpY2VVcml9L0dldEluZm8vJHtpZH1gKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRJbmZvRm9yV29ya2Zsb3coaWQ6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRHZXQoYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXRJbmZvRm9yV29ya2Zsb3cvJHtpZH1gKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRDbGFpbShrZXk6IHN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IGRlY29kZWQgPSBKV1QuZGVmYXVsdCh0aGlzLl9vYXV0aFNlcnZpY2UuZ2V0QWNjZXNzVG9rZW4oKSk7XHJcbiAgICAgICAgcmV0dXJuIGRlY29kZWRba2V5XTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRKd3REZWNvZGVkKCkge1xyXG4gICAgICAgIHJldHVybiBKV1QuZGVmYXVsdCh0aGlzLl9vYXV0aFNlcnZpY2UuZ2V0QWNjZXNzVG9rZW4oKSk7XHJcbiAgICB9XHJcblxyXG4gICAgaGFuZGxlVXNlckluZm9DaGFuZ2UoZGF0YSkge1xyXG4gICAgICAgIGxldCBkYXRhT2JqO1xyXG4gICAgICAgIGlmICh0eXBlb2YgZGF0YSA9PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBkYXRhT2JqID0gSlNPTi5wYXJzZShkYXRhKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgaW5mb1VzZXIgPSBKU09OLnBhcnNlKGRhdGFPYmoubWVzc2FnZS5jb250ZW50KTtcclxuICAgICAgICBpZiAoaW5mb1VzZXIuSWQpIHtcclxuICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5VU0VSX0lORk9fS0VZICsgJ18nICsgaW5mb1VzZXIuSWQpO1xyXG4gICAgICAgICAgICB0aGlzLmdldEJhc2ljVXNlckluZm8oaW5mb1VzZXIuSWQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXRGb3JBdXRvQ29tcGxldGUoa2V5OiBzdHJpbmcpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XHJcbiAgICAgICAgY29uc3QgYXBpVXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXRGb3JBdXRvQ29tcGxldGU/a2V5PSR7a2V5fWA7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwLmdldDxSZXNwb25zZVJlc3VsdD4oYXBpVXJsKVxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHRoaXMuX2V4Y2VwdGlvbkhhbmRsZXJTZXJ2aWNlLmhhbmRsZUVycm9yKGVyciwgdGhpcy5faW5qZWN0b3IpKVxyXG4gICAgICAgICAgICApLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHBvcHVsYXRlQ3VycmVudFVzZXIoKSB7XHJcbiAgICAgICAgY29uc3Qgc3RvcmFnZUl0ZW0gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLkNVUlJFTlRfVVNFUl9LRVkpO1xyXG4gICAgICAgIGNvbnN0IHVzZXIgPSA8VG5Vc2VyPkpTT04ucGFyc2Uoc3RvcmFnZUl0ZW0pO1xyXG4gICAgICAgIGlmICh1c2VyKSB7XHJcbiAgICAgICAgICAgIGlmICghdXNlci51c2VySWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2F1dGhlblNlcnZpY2UubG9nb3V0KCk7XHJcbiAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLkNVUlJFTlRfVVNFUl9LRVksIEpTT04uc3RyaW5naWZ5KHVzZXIpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJhd1VzZXJJZCA9IHVzZXIudXNlcklkO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdXNlcklkID0gTnVtYmVyKHJhd1VzZXJJZCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWlzTmFOKHVzZXJJZCkpIHtcclxuICAgICAgICAgICAgICAgICAgICB1c2VyLm9yaWdpbklkID0gdXNlci51c2VySWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgdXNlci51c2VySWQgPSB1c2VyLmluc3RhbmNlaWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5DVVJSRU5UX1VTRVJfS0VZLCBKU09OLnN0cmluZ2lmeSh1c2VyKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb25Db250ZXh0LmdldFJvb3RDb250ZXh0KCkuZGF0YS5jdXJyZW50VXNlciA9IHVzZXI7XHJcbiAgICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uQ29udGV4dC5nZXRSb290Q29udGV4dCgpLmZpcmVSZXBsYXlFdmVudChDb21DdHhDb25zdGFudHMuUk9PVC5VU0VSX0xPQURFRCwgdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbkNvbnRleHQuZ2V0Um9vdENvbnRleHQoKS5yZXBsYXlTdWJzY3JpYmVPbmNlKENvbUN0eENvbnN0YW50cy5ST09ULlVTRVJfUkVBRFksIHJzID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZpcnN0VGltZUxvZ2luID0gcnMgPz8gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhY2Nlc3NUb2tlbiA9IHRoaXMuX29hdXRoU2VydmljZS5nZXRBY2Nlc3NUb2tlbigpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZGVjb2RlZDogYW55ID0gSldULmRlZmF1bHQoYWNjZXNzVG9rZW4pO1xyXG4gICAgICAgICAgICAgICAgLy8gQ2h1eeG7g24gxJHhu5VpIHNhbmcgZMO5bmcgaW5zdGFuY2VJZCBu4bq/dSDEkcSDbmcgbmjhuq1wIGLhurFuZyBpZGVudGl0eXY0IG5oxrBuZyBwaOG6o2kgc+G7rSBk4bulbmcgYmFzZSB1c2VyT3JndjVcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJhd1VzZXJJZCA9IGRlY29kZWQuc3ViO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdXNlcklkID0gTnVtYmVyKHJhd1VzZXJJZCk7XHJcbiAgICAgICAgICAgICAgICBsZXQgdXNlcklkUmVzdWx0ID0gJyc7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWlzTmFOKHVzZXJJZCkpIHtcclxuICAgICAgICAgICAgICAgICAgICB1c2VySWRSZXN1bHQgPSBkZWNvZGVkLmluc3RhbmNlaWQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB1c2VySWRSZXN1bHQgPSByYXdVc2VySWQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldFN0YWZmSW5mbyh1c2VySWRSZXN1bHQpLnRoZW4ocnMxID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB1c2VyID0gbmV3IFRuVXNlcigpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyczEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5pc3N1cGVydXNlciA9IGRlY29kZWQuaXNzdXBlcnVzZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIuaXNhZG1pbiA9IGRlY29kZWQuaXNhZG1pbjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlci51c2VySWQgPSB1c2VySWRSZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIuZnVsbE5hbWUgPSBkZWNvZGVkLmZ1bGxuYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VyLnVzZXJOYW1lID0gZGVjb2RlZC51c2VybmFtZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5tYUNhbkJvID0gZGVjb2RlZC5tYUNhbkJvO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VyLm1hTmd1b2lIb2MgPSBkZWNvZGVkLm1hTmd1b2lIb2M7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIuYXZhdGFyID0gcnMxLmF2YXRhcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5wb3NpdGlvbiA9IHJzMS5wb3NpdGlvbjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5yb2xlID0gcnMxLnJvbGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIuZ2VuZGVyID0gcnMxLmdlbmRlcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5wb3NpdGlvbkNvZGUgPSByczEucG9zaXRpb25Db2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VyLmluc3RhbmNlaWQgPSBkZWNvZGVkLmluc3RhbmNlaWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIuaWRDYW5CbyA9IGRlY29kZWQuaWRDYW5CbztcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5vcmlnaW5JZCA9IGRlY29kZWQuc3ViO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF1c2VyLmF2YXRhciB8fCB1c2VyLmF2YXRhciA9PSAnJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVzZXIuZ2VuZGVyID09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLmF2YXRhciA9IHRoaXMuREVGQVVMVF9BVkFUQVJfRkVNQUxFO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5hdmF0YXIgPSB0aGlzLkRFRkFVTFRfQVZBVEFSX01BTEU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5DVVJSRU5UX1VTRVJfS0VZLCBKU09OLnN0cmluZ2lmeSh1c2VyKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uQ29udGV4dC5nZXRSb290Q29udGV4dCgpLmRhdGEuY3VycmVudFVzZXIgPSB1c2VyO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoZmlyc3RUaW1lTG9naW4pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb25Db250ZXh0LmdldFJvb3RDb250ZXh0KCkuZmlyZUV2ZW50KENvbUN0eENvbnN0YW50cy5ST09ULk5FRURfQ0xFQVJfUEVSTUlTU0lPTl9DQUNIRSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbkNvbnRleHQuZ2V0Um9vdENvbnRleHQoKS5maXJlUmVwbGF5RXZlbnQoQ29tQ3R4Q29uc3RhbnRzLlJPT1QuVVNFUl9MT0FERUQsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sIGVyciA9PiB7XHJcblxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXRQcm9maWxlSW5mbygpIHtcclxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdwcm9maWxlcycpKTtcclxuICAgIH1cclxuXHJcbiAgICBpc0tob2FWaWVuKGlkTG9haURvblZpKSB7XHJcbiAgICAgICAgcmV0dXJuIGlkTG9haURvblZpID09ICcyMCcgfHwgaWRMb2FpRG9uVmkgPT0gJzYwJztcclxuICAgIH1cclxuXHJcbiAgICBpc0JvTW9uKGlkTG9haURvblZpKSB7XHJcbiAgICAgICAgcmV0dXJuIGlkTG9haURvblZpID09ICcyMSc7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q3VycmVudFVzZXIoKTogVG5Vc2VyIHtcclxuICAgICAgICByZXR1cm4gPFRuVXNlcj4odGhpcy5fYXBwbGljYXRpb25Db250ZXh0LmdldFJvb3RDb250ZXh0KCkuZGF0YS5jdXJyZW50VXNlcik7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VXNlck5hbWUoaXRlbSk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW0uZnVsbE5hbWVOZXdcclxuICAgICAgICAgICAgPyBgJHtpdGVtLmZ1bGxOYW1lTmV3fWBcclxuICAgICAgICAgICAgOiBgJHtpdGVtLmxhc3ROYW1lfSAke2l0ZW0uZmlzdE5hbWV9YDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRVc2VySWRDb21iaW5lKCkge1xyXG4gICAgICAgIGNvbnN0IHJhd1VzZXJJZCA9IHRoaXMuZ2V0SWQoKTtcclxuICAgICAgICBjb25zdCB1c2VySWQgPSBOdW1iZXIocmF3VXNlcklkKTtcclxuICAgICAgICBsZXQgdXNlcklkUmVzdWx0ID0gJyc7XHJcbiAgICAgICAgaWYgKCFpc05hTih1c2VySWQpKSB7XHJcbiAgICAgICAgICAgIHVzZXJJZFJlc3VsdCA9IHRoaXMuZ2V0SW5zdGFuY2VJZCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdXNlcklkUmVzdWx0ID0gcmF3VXNlcklkO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdXNlcklkUmVzdWx0LnRvU3RyaW5nKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U3RhZmZJbmZvKHVzZXJJZCk6IFByb21pc2U8VG5Vc2VyPiB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS8ke3VzZXJJZH1gO1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwLmdldDxSZXNwb25zZVJlc3VsdD4odXJsKVxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHRoaXMuaGFuZGxlRXJyb3IoZXJyLCB0aGlzLl9pbmplY3RvcikpLFxyXG4gICAgICAgICAgICAgICAgbWFwKHJzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBvcCA9IDxUblVzZXI+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmdWxsTmFtZTogcnMuZGF0YSA/IHJzLmRhdGEuZnVsbE5hbWUgOiAnJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcm9sZTogcnMuZGF0YSA/IHJzLmRhdGEucm9sZSA6ICcnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhdmF0YXI6IHJzLmRhdGEgPyBycy5kYXRhLmF2YXRhciA6ICcnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBnZW5kZXI6IHJzLmRhdGEgPyBycy5kYXRhLmdlbmRlciA6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uQ29kZTogcnMuZGF0YS5wb3NpdGlvbkNvZGUgPyBycy5kYXRhLnBvc2l0aW9uQ29kZSA6ICcnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZWlkOiBycy5kYXRhLmluc3RhbmNlaWRcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoIW9wLmF2YXRhciB8fCBvcC5hdmF0YXIgPT0gJycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wLmdlbmRlciA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcC5hdmF0YXIgPSB0aGlzLkRFRkFVTFRfQVZBVEFSX0ZFTUFMRTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wLmF2YXRhciA9IHRoaXMuREVGQVVMVF9BVkFUQVJfTUFMRTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9wO1xyXG4gICAgICAgICAgICAgICAgfSkpXHJcbiAgICAgICAgICAgIC50b1Byb21pc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRJZCgpOiBzdHJpbmcge1xyXG4gICAgICAgIGNvbnN0IHN0b3JhZ2VJdGVtID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5DVVJSRU5UX1VTRVJfS0VZKTtcclxuICAgICAgICBjb25zdCB1c2VyID0gPFRuVXNlcj5KU09OLnBhcnNlKHN0b3JhZ2VJdGVtKTtcclxuICAgICAgICBpZiAodXNlcikge1xyXG4gICAgICAgICAgICByZXR1cm4gdXNlci51c2VySWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDdXJyZW50VXNlcigpLnVzZXJJZDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0SW5zdGFuY2VJZCgpOiBzdHJpbmcge1xyXG4gICAgICAgIGNvbnN0IHN0b3JhZ2VJdGVtID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5DVVJSRU5UX1VTRVJfS0VZKTtcclxuICAgICAgICBjb25zdCB1c2VyID0gPFRuVXNlcj5KU09OLnBhcnNlKHN0b3JhZ2VJdGVtKTtcclxuICAgICAgICBpZiAodXNlcikge1xyXG4gICAgICAgICAgICByZXR1cm4gdXNlci5pbnN0YW5jZWlkO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q3VycmVudFVzZXIoKS5pbnN0YW5jZWlkO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZWdpc3Rlck9ubGluZShmb3JtRGF0YTogRm9ybURhdGEpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XHJcbiAgICAgICAgY29uc3QgYXBpVXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9yZWdpc3Rlck9ubGluZWA7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHBcclxuICAgICAgICAgICAgLnBvc3Q8UmVzcG9uc2VSZXN1bHQ+KGFwaVVybCwgZm9ybURhdGEpXHJcbiAgICAgICAgICAgIC5waXBlKGNhdGNoRXJyb3IoZXJyID0+IHRoaXMuaGFuZGxlRXJyb3IoZXJyLCB0aGlzLl9pbmplY3RvcikpKVxyXG4gICAgICAgICAgICAudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QmFzaWNVc2VySW5mbyh1c2VySWQ6IG51bWJlcik6IFByb21pc2U8QmFzaWNVc2VySW5mbz4ge1xyXG5cclxuICAgICAgICBjb25zdCBzdG9yYWdlSXRlbSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuVVNFUl9JTkZPX0tFWSArICdfJyArIHVzZXJJZCk7XHJcbiAgICAgICAgLy8gY29uc3QgdXNlckluZm9zID0gPEJhc2ljVXNlckluZm9bXT5KU09OLnBhcnNlKHN0b3JhZ2VJdGVtKTtcclxuICAgICAgICAvLyBjb25zdCB1c2VyID0gdXNlckluZm9zID8gdXNlckluZm9zLmZpbmQoaXRlbSA9PiBpdGVtLmlkID09PSB1c2VySWQpIDogbnVsbDtcclxuICAgICAgICBjb25zdCB1c2VyID0gPEJhc2ljVXNlckluZm8+SlNPTi5wYXJzZShzdG9yYWdlSXRlbSk7XHJcbiAgICAgICAgaWYgKHVzZXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHJlc29sdmUodXNlcikpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh1c2VySWQgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdCg8QmFzaWNVc2VySW5mbz57fSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodXNlcklkID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdlVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vR2V0QmFzaWNVc2VySW5mbz9pZD0ke3VzZXJJZH1gO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5faHR0cC5nZXQ8UmVzcG9uc2VSZXN1bHQ+KHN2VXJsKS5waXBlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXJlUmVwbGF5KHRoaXMuUkVQTEFZX0NPVU5UKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRyeSh0aGlzLlJFVFJZX0NPVU5UKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXAocmVwc29uc2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzYXZlIHJlc3BvbnNlIHRvIGxvY2FsIHN0b3JhZ2UgaGVyZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLlVTRVJfSU5GT19LRVkgKyAnXycgKyByZXBzb25zZS5kYXRhLmlkLCBKU09OLnN0cmluZ2lmeShyZXBzb25zZS5kYXRhKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8QmFzaWNVc2VySW5mbz5yZXBzb25zZS5kYXRhO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHRoaXMuaGFuZGxlRXJyb3IoZXJyLCB0aGlzLl9pbmplY3RvcikpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSkudG9Qcm9taXNlKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdCg8QmFzaWNVc2VySW5mbz57fSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXRCYXNpY1VzZXJzSW5mbyh1c2VySWRzOiBzdHJpbmcpOiBQcm9taXNlPEJhc2ljVXNlckluZm9bXT4ge1xyXG4gICAgICAgIGlmICghdXNlcklkcyB8fCB1c2VySWRzID09PSAnJykge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZSg8QmFzaWNVc2VySW5mb1tdPltdKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHN0b3JhZ2VJdGVtID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5VU0VSX0lORk9fS0VZKTtcclxuICAgICAgICBjb25zdCB1c2VySW5mb3MgPSA8QmFzaWNVc2VySW5mb1tdPkpTT04ucGFyc2Uoc3RvcmFnZUl0ZW0pO1xyXG5cclxuICAgICAgICAvLyBjb25zdCB1c2VycyA9IHVzZXJJbmZvcyA/IHVzZXJJbmZvcy5maWx0ZXIoaXRlbSA9PiB1c2VySWRzLmluZGV4T2YoYCwke2l0ZW0uaWR9LGApID4gLTEpIDogbnVsbDtcclxuICAgICAgICBjb25zdCBjaGVjayA9IHVzZXJJbmZvcyA/IHVzZXJJZHMuaW5kZXhPZih1c2VySW5mb3NbJ2lkJ10pID4gLTEgOiBudWxsO1xyXG4gICAgICAgIGlmIChjaGVjaykge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gcmVzb2x2ZSh1c2VySW5mb3MpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzdlVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vR2V0QmFzaWNVc2Vyc0luZm8/dXNlcklkcz0ke3VzZXJJZHN9YDtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2h0dHAuZ2V0PFJlc3BvbnNlUmVzdWx0PihzdlVybCkucGlwZShcclxuICAgICAgICAgICAgICAgICAgICBzaGFyZVJlcGxheSh0aGlzLlJFUExBWV9DT1VOVCksXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0cnkodGhpcy5SRVRSWV9DT1VOVCksXHJcbiAgICAgICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIsIHRoaXMuX2luamVjdG9yKSksXHJcbiAgICAgICAgICAgICAgICAgICAgbWFwKHJlcHNvbnNlID0+IDxCYXNpY1VzZXJJbmZvW10+cmVwc29uc2UuZGF0YSlcclxuICAgICAgICAgICAgICAgICkudG9Qcm9taXNlKCkudGhlbihzdWNjZXNzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHN1Y2Nlc3MpO1xyXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKDxCYXNpY1VzZXJJbmZvW10+W10pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEjDoG0gZMO5bmcgxJHhu4MgbOG6pXkgdGjDtG5nIHRpbiBjxqEgYuG6o24gbmhp4buBdSBuZ8aw4budaSBkw7luZyBk4buxYSB2w6BvIHVzZXJOYW1lLFxyXG4gICAgICogaGnhu4duIHThuqFpIGNoxrBhIGPDsyB0aMO0bmcgdGluIHbhu4EgxJHGoW4gduG7iyB2w6AgY2jhu6ljIHbhu6UgbmfGsOG7nWkgZMO5bmcgxJHhu4MgZ2nhuqNtIGxvYWQgdsOgIHbDrCBjaMawYSBkw7luZyDEkeG6v25cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VyTmFtZVxyXG4gICAgICogQHJldHVybiB7UHJvbWlzZTxCYXNpY1VzZXJJbmZvW10+XHJcbiAgICAgKi9cclxuICAgIGdldEJhc2ljVXNlckluZm9CeVVzZXJOYW1lKHVzZXJOYW1lOiBzdHJpbmcpOiBQcm9taXNlPEJhc2ljVXNlckluZm8+IHtcclxuICAgICAgICBjb25zdCBzdG9yYWdlSXRlbSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuVVNFUl9JTkZPX0tFWSArICdfJyArIHVzZXJOYW1lKTtcclxuICAgICAgICBjb25zdCB1c2VyID0gPEJhc2ljVXNlckluZm8+SlNPTi5wYXJzZShzdG9yYWdlSXRlbSk7XHJcbiAgICAgICAgaWYgKHVzZXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHJlc29sdmUodXNlcikpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh1c2VyTmFtZSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSg8QmFzaWNVc2VySW5mbz57fSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodXNlck5hbWUgIT0gJycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3ZVcmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0dldEJhc2ljVXNlckluZm9CeVVzZXJOYW1lP3VzZXJOYW1lPSR7dXNlck5hbWV9YDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faHR0cC5nZXQ8UmVzcG9uc2VSZXN1bHQ+KHN2VXJsKS5waXBlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhcmVSZXBsYXkodGhpcy5SRVBMQVlfQ09VTlQpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0cnkodGhpcy5SRVRSWV9DT1VOVCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXAocmVwc29uc2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNhdmUgcmVzcG9uc2UgdG8gbG9jYWwgc3RvcmFnZSBoZXJlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5VU0VSX0lORk9fS0VZICsgJ18nICsgcmVwc29uc2UuZGF0YS51c2VyTmFtZSwgSlNPTi5zdHJpbmdpZnkocmVwc29uc2UuZGF0YSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8QmFzaWNVc2VySW5mbz5yZXBzb25zZS5kYXRhO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnI6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB0aGlzLmhhbmRsZUVycm9yKGVyciwgdGhpcy5faW5qZWN0b3IpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSkudG9Qcm9taXNlKCkudGhlbihyc3MgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUocnNzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKGVycnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoPGFueT57fSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBIw6BtIGTDuW5nIMSR4buDIGzhuqV5IHRow7RuZyB0aW4gY8ahIGLhuqNuIG5oaeG7gXUgbmfGsOG7nWkgZMO5bmcgZOG7sWEgdsOgbyB1c2VyTmFtZSxcclxuICAgICAqIGhp4buHbiB04bqhaSBjaMawYSBjw7MgdGjDtG5nIHRpbiB24buBIMSRxqFuIHbhu4sgdsOgIGNo4bupYyB24bulIG5nxrDhu51pIGTDuW5nIMSR4buDIGdp4bqjbSBsb2FkIHbDoCB2w6wgY2jGsGEgZMO5bmcgxJHhur9uXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlck5hbWVzXHJcbiAgICAgKiBAcmV0dXJuIHtQcm9taXNlPEJhc2ljVXNlckluZm9bXT5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgZ2V0QmFzaWNVc2Vyc0luZm9CeVVzZXJOYW1lcyh1c2VyTmFtZXM6IHN0cmluZyk6IFByb21pc2U8QmFzaWNVc2VySW5mb1tdPiB7XHJcbiAgICAgICAgY29uc3Qgc3RvcmFnZUl0ZW0gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLlVTRVJfSU5GT19LRVkpO1xyXG4gICAgICAgIGNvbnN0IHVzZXJJbmZvcyA9IDxCYXNpY1VzZXJJbmZvW10+SlNPTi5wYXJzZShzdG9yYWdlSXRlbSk7XHJcbiAgICAgICAgY29uc3QgY2hlY2sgPSB1c2VySW5mb3MgPyB1c2VyTmFtZXMuaW5kZXhPZih1c2VySW5mb3NbJ3VzZXJOYW1lJ10pID4gLTEgOiBudWxsO1xyXG4gICAgICAgIGlmIChjaGVjaykge1xyXG4gICAgICAgICAgICByZXR1cm4gdXNlckluZm9zO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3Qgc3ZVcmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0dldEJhc2ljVXNlcnNJbmZvQnlVc2VyTmFtZXM/dXNlck5hbWVzPSR7dXNlck5hbWVzfWA7XHJcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl9odHRwLmdldDxSZXNwb25zZVJlc3VsdD4oc3ZVcmwpLnBpcGUoXHJcbiAgICAgICAgICAgICAgICBzaGFyZVJlcGxheSh0aGlzLlJFUExBWV9DT1VOVCksXHJcbiAgICAgICAgICAgICAgICByZXRyeSh0aGlzLlJFVFJZX0NPVU5UKSxcclxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHRoaXMuaGFuZGxlRXJyb3IoZXJyLCB0aGlzLl9pbmplY3RvcikpLFxyXG4gICAgICAgICAgICAgICAgbWFwKHJlcHNvbnNlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLlVTRVJfSU5GT19LRVkgKyAnXycgKyAoPEJhc2ljVXNlckluZm9bXT5yZXBzb25zZS5kYXRhKS5tYXAoeCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4LnVzZXJOYW1lKSByZXR1cm4geC51c2VyTmFtZTtcclxuICAgICAgICAgICAgICAgICAgICB9KSwgSlNPTi5zdHJpbmdpZnkocmVwc29uc2UuZGF0YSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiA8QmFzaWNVc2VySW5mb1tdPnJlcHNvbnNlLmRhdGE7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApLnRvUHJvbWlzZSgpLmNhdGNoKGVyciA9PiBbXSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnZlcnRMaXN0VXNlcklkVG9TdHJpbmcodXNlcklkczogbnVtYmVyW10pOiBzdHJpbmcge1xyXG4gICAgICAgIGlmICh1c2VySWRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIGAsJHt1c2VySWRzLmpvaW4oJywnKX0sYDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuICcsJztcclxuICAgIH1cclxuXHJcbiAgICBmaWxsQmFzaWNVc2VySW5mbyhkYXRhU291cmNlOiBhbnlbXSwgcHJvcGVydHlOYW1lOiBzdHJpbmcpOiBhbnlbXSB7XHJcbiAgICAgICAgZGF0YVNvdXJjZS5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICBjb25zdCB1c2VySWQgPSBpdGVtW3Byb3BlcnR5TmFtZV0uaWQgPyBpdGVtW3Byb3BlcnR5TmFtZV0uaWQgOiBpdGVtW3Byb3BlcnR5TmFtZV07XHJcbiAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1zaGFkb3dlZC12YXJpYWJsZVxyXG4gICAgICAgICAgICAvLyBjb25zdCB1c2VyID0gdXNlcnMuZmluZCh1c2VyID0+IHVzZXIuaWQgPT09IHVzZXJJZCk7XHJcbiAgICAgICAgICAgIC8vIGlmICh1c2VyKSB7XHJcbiAgICAgICAgICAgIC8vICAgICBpdGVtW3Byb3BlcnR5TmFtZV0gPSB1c2VyO1xyXG4gICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiBkYXRhU291cmNlO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICByZXN0b3JlUGFzc3dvcmQoaXRlbTogYW55KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAucHV0PFJlc3BvbnNlUmVzdWx0PihgJHt0aGlzLnNlcnZpY2VVcml9L3Jlc3RvcmVQYXNzd29yZGAsIGl0ZW0pXHJcbiAgICAgICAgICAgIC5waXBlKGNhdGNoRXJyb3IoZXJyID0+IHRoaXMuaGFuZGxlRXJyb3IoZXJyLCB0aGlzLl9pbmplY3RvcikpKVxyXG4gICAgICAgICAgICAudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgY2hhbmdlUGFzc3dvcmQodXNlcklkOiBzdHJpbmcsIGl0ZW06IGFueSk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcclxuXHJcbiAgICAgICAgY29uc3QgYXBpVXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9DaGFuZ2VQYXNzd29yZGA7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHBcclxuICAgICAgICAgICAgLnBvc3Q8UmVzcG9uc2VSZXN1bHQ+KGFwaVVybCwgaXRlbSlcclxuICAgICAgICAgICAgLnBpcGUoY2F0Y2hFcnJvcihlcnIgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIsIHRoaXMuX2luamVjdG9yKSkpXHJcbiAgICAgICAgICAgIC50b1Byb21pc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXNldFBhc3N3b3JkKGl0ZW06IGFueSk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcclxuXHJcbiAgICAgICAgY29uc3QgYXBpVXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9yZXNldFBhc3N3b3JkYDtcclxuICAgICAgICByZXR1cm4gdGhpcy5faHR0cFxyXG4gICAgICAgICAgICAucHV0PFJlc3BvbnNlUmVzdWx0PihhcGlVcmwsIGl0ZW0pXHJcbiAgICAgICAgICAgIC5waXBlKGNhdGNoRXJyb3IoZXJyID0+IHRoaXMuaGFuZGxlRXJyb3IoZXJyLCB0aGlzLl9pbmplY3RvcikpKVxyXG4gICAgICAgICAgICAudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgR2V0c0J5TWFuYWdlcklkQXJyYXlJZChpZDogc3RyaW5nKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xyXG4gICAgICAgIGNvbnN0IGFwaVVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vR2V0TG93ZXJTdGFmZnNCeVVzZXJJZD91c2VySWQ9JHtpZH1gO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRHZXQoYXBpVXJsKTtcclxuICAgIH1cclxuXHJcbiAgICBtYXJrQXNBZG1pbih1c2VySWQ6IG51bWJlciwgaXNBZG1pbjogYm9vbGVhbikge1xyXG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vbWFya0FzQWRtaW4vJHt1c2VySWR9LyR7aXNBZG1pbn1gO1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwXHJcbiAgICAgICAgICAgIC5wdXQ8UmVzcG9uc2VSZXN1bHQ+KHVybCwgaXNBZG1pbilcclxuICAgICAgICAgICAgLnBpcGUoY2F0Y2hFcnJvcihlcnIgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIsIHRoaXMuX2luamVjdG9yKSkpXHJcbiAgICAgICAgICAgIC50b1Byb21pc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBtYXJrQXNSZXByZXNlbnQodXNlcklkOiBudW1iZXIsIGlzUmVwcmVzZW50OiBudW1iZXIpIHtcclxuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L21hcmtBc1JlcHJlc2VudC8ke3VzZXJJZH0vJHtpc1JlcHJlc2VudH1gO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5faHR0cFxyXG4gICAgICAgICAgICAucHV0PFJlc3BvbnNlUmVzdWx0Pih1cmwsIGlzUmVwcmVzZW50KVxyXG4gICAgICAgICAgICAucGlwZShjYXRjaEVycm9yKGVyciA9PiB0aGlzLmhhbmRsZUVycm9yKGVyciwgdGhpcy5faW5qZWN0b3IpKSlcclxuICAgICAgICAgICAgLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldHNCeU9yZ2FuaXphdGlvbkxpc3RJZChwYWdlT3B0aW9uOiBQYWdlT3B0aW9uQmFzZSwgZnVuR2V0TmFtZTogc3RyaW5nID0gJycsIG9wdGlvblBhcmFtZXRlcjogc3RyaW5nID0gJycsIGRlZmF1bHRQYXJhbWV0ZXI6IHN0cmluZyA9ICcnKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xyXG5cclxuICAgICAgICBsZXQgcXVlcnlTdHJpbmcgPSBgP2tleT0ke3BhZ2VPcHRpb24ucXVlcnl9YDtcclxuXHJcbiAgICAgICAgaWYgKCFwYWdlT3B0aW9uLm9mZnNldCkge1xyXG4gICAgICAgICAgICBwYWdlT3B0aW9uLm9mZnNldCA9IDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBxdWVyeVN0cmluZyArPSBgJm9mZnNldD0ke3BhZ2VPcHRpb24ub2Zmc2V0fWA7XHJcblxyXG5cclxuICAgICAgICBpZiAoIXBhZ2VPcHRpb24ubGltaXQpIHtcclxuICAgICAgICAgICAgcGFnZU9wdGlvbi5saW1pdCA9IHRoaXMuTElNSVRfREVGQVVMVDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcXVlcnlTdHJpbmcgKz0gYCZsaW1pdD0ke3BhZ2VPcHRpb24ubGltaXQgKyAxfWA7XHJcblxyXG5cclxuICAgICAgICBpZiAocGFnZU9wdGlvbi5zb3J0RmllbGQpIHtcclxuICAgICAgICAgICAgcXVlcnlTdHJpbmcgKz0gYCZzb3J0RmllbGQ9JHtwYWdlT3B0aW9uLnNvcnRGaWVsZH0maXNBc2M9JHtwYWdlT3B0aW9uLmlzQXNjfWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChkZWZhdWx0UGFyYW1ldGVyICE9ICcnKSB7XHJcbiAgICAgICAgICAgIHF1ZXJ5U3RyaW5nICs9IGAmJHtkZWZhdWx0UGFyYW1ldGVyfWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChvcHRpb25QYXJhbWV0ZXIgIT0gJycpIHtcclxuICAgICAgICAgICAgcXVlcnlTdHJpbmcgKz0gYCYke29wdGlvblBhcmFtZXRlcn1gO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBhcGlVcmwgPSBgJHt0aGlzLm9yZ2FuaXphdGlvbkVuZHBvaW50fSR7ZnVuR2V0TmFtZX0ke3F1ZXJ5U3RyaW5nfWA7XHJcbiAgICAgICAgaWYgKHBhZ2VPcHRpb24uaXNJZ25vcmVDbGllbnRDYWNoZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRJZ25vcmVDbGllbnRDYWNoZShhcGlVcmwpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdEdldChhcGlVcmwpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldHNCeU9yZ2FuaXphdGlvbklkKG9yZ2FuaXphdGlvbklkOiBzdHJpbmcsIGtleXdvcmQ/OiBzdHJpbmcsIG9mZnNldD86IG51bWJlciwgbGltaXQ/OiBudW1iZXIpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XHJcblxyXG4gICAgICAgIGlmICgha2V5d29yZCkge1xyXG4gICAgICAgICAgICBrZXl3b3JkID0gJyc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIW9mZnNldCkge1xyXG4gICAgICAgICAgICBvZmZzZXQgPSAwO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFvZmZzZXQpIHtcclxuICAgICAgICAgICAgb2Zmc2V0ID0gMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghbGltaXQpIHtcclxuICAgICAgICAgICAgbGltaXQgPSAxMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGFwaVVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vR2V0c0J5T3JnYW5pemF0aW9uSWRgXHJcbiAgICAgICAgICAgICsgYD9vcmdhbml6YXRpb25JZD0ke29yZ2FuaXphdGlvbklkfWBcclxuICAgICAgICAgICAgKyBgJmtleXdvcmQ9JHtrZXl3b3JkfWBcclxuICAgICAgICAgICAgKyBgJm9mZnNldD0ke29mZnNldH1gXHJcbiAgICAgICAgICAgICsgYCZsaW1pdD0ke2xpbWl0fWA7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdEdldChhcGlVcmwpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldERlZmF1bHRBdmF0YXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuREVGQVVMVF9BVkFUQVJfTUFMRTtcclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVFcnJvcihlcnJvcjogYW55LCBpbmplY3RvcjogSW5qZWN0b3IpIHtcclxuICAgICAgICBjb25zdCBjb21tb25TZXJ2aWNlID0gaW5qZWN0b3IuZ2V0KENvbW1vblNlcnZpY2UpO1xyXG4gICAgICAgIHJldHVybiBjb21tb25TZXJ2aWNlLmhhbmRsZUVycm9yKGVycm9yLCBpbmplY3Rvcik7XHJcbiAgICB9XHJcblxyXG4gICAgbG9ja1VzZXIoaXRlbTogYW55KTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xyXG5cclxuICAgICAgICBjb25zdCBhcGlVcmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L2xvY2tVc2VyQWNjb3VudGA7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHBcclxuICAgICAgICAgICAgLnBvc3Q8UmVzcG9uc2VSZXN1bHQ+KGFwaVVybCwgaXRlbSlcclxuICAgICAgICAgICAgLnBpcGUoY2F0Y2hFcnJvcihlcnIgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIsIHRoaXMuX2luamVjdG9yKSkpXHJcbiAgICAgICAgICAgIC50b1Byb21pc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICB1bmxvY2tVc2VyKGl0ZW06IGFueSk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcclxuXHJcbiAgICAgICAgY29uc3QgYXBpVXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS91bmxvY2tVc2VyQWNjb3VudGA7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHBcclxuICAgICAgICAgICAgLnBvc3Q8UmVzcG9uc2VSZXN1bHQ+KGFwaVVybCwgaXRlbSlcclxuICAgICAgICAgICAgLnBpcGUoY2F0Y2hFcnJvcihlcnIgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIsIHRoaXMuX2luamVjdG9yKSkpXHJcbiAgICAgICAgICAgIC50b1Byb21pc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBpc1N1cGVyVXNlcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fYXBwbGljYXRpb25Db250ZXh0LmdldFJvb3RDb250ZXh0KCkuZGF0YS5jdXJyZW50VXNlclxyXG4gICAgICAgICAgICAmJiB0aGlzLl9hcHBsaWNhdGlvbkNvbnRleHQuZ2V0Um9vdENvbnRleHQoKS5kYXRhLmN1cnJlbnRVc2VyLmlzc3VwZXJ1c2VyID09PSAnVHJ1ZSc7XHJcbiAgICB9XHJcblxyXG4gICAgaXNBZG1pbigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fYXBwbGljYXRpb25Db250ZXh0LmdldFJvb3RDb250ZXh0KCkuZGF0YS5jdXJyZW50VXNlclxyXG4gICAgICAgICAgICAmJiB0aGlzLl9hcHBsaWNhdGlvbkNvbnRleHQuZ2V0Um9vdENvbnRleHQoKS5kYXRhLmN1cnJlbnRVc2VyLmlzYWRtaW4gPT09ICdUcnVlJztcclxuICAgIH1cclxuXHJcbiAgICBpc1ZhbGlkQWNjZXNzVG9rZW4oKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX29hdXRoU2VydmljZS5oYXNWYWxpZEFjY2Vzc1Rva2VuKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VXNlcnNCeUdyb3VwQ29kZShncm91cENvZGU6IHN0cmluZyk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcclxuICAgICAgICBjb25zdCBhcGlVcmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0dldFVzZXJzQnlHcm91cENvZGU/Z3JvdXBDb2RlPSR7Z3JvdXBDb2RlfWA7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAuZ2V0PFJlc3BvbnNlUmVzdWx0PihhcGlVcmwpXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gdGhpcy5fZXhjZXB0aW9uSGFuZGxlclNlcnZpY2UuaGFuZGxlRXJyb3IoZXJyLCB0aGlzLl9pbmplY3RvcikpXHJcbiAgICAgICAgICAgICkudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U2VydmljZUVuZHBvaW50KCkge1xyXG4gICAgICAgIHJldHVybiBgJHt0aGlzLnNlcnZpY2VVcml9YDtcclxuICAgIH1cclxuXHJcbiAgICBpc1NpbmhWaWVuQWNjb3VudCgpIHtcclxuICAgICAgICBjb25zdCB1c2VyTG9naW4gPSB0aGlzLmdldEN1cnJlbnRVc2VyKCk7XHJcbiAgICAgICAgaWYgKHVzZXJMb2dpbikge1xyXG4gICAgICAgICAgICBpZiAodXNlckxvZ2luLm1hTmd1b2lIb2MpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRQYWdlVXNlckluZm8odXNlcklkczogc3RyaW5nKTogUHJvbWlzZTxCYXNpY1VzZXJJbmZvW10+IHtcclxuICAgICAgICBpZiAoIXVzZXJJZHMgfHwgdXNlcklkcyA9PT0gJycpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoPEJhc2ljVXNlckluZm9bXT5bXSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBzdG9yYWdlSXRlbSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuVVNFUl9JTkZPX0tFWSk7XHJcbiAgICAgICAgY29uc3QgdXNlckluZm9zID0gPEJhc2ljVXNlckluZm9bXT5KU09OLnBhcnNlKHN0b3JhZ2VJdGVtKTtcclxuXHJcbiAgICAgICAgLy8gY29uc3QgdXNlcnMgPSB1c2VySW5mb3MgPyB1c2VySW5mb3MuZmlsdGVyKGl0ZW0gPT4gdXNlcklkcy5pbmRleE9mKGAsJHtpdGVtLmlkfSxgKSA+IC0xKSA6IG51bGw7XHJcbiAgICAgICAgY29uc3QgY2hlY2sgPSB1c2VySW5mb3MgPyB1c2VySWRzLmluZGV4T2YodXNlckluZm9zWydpZCddKSA+IC0xIDogbnVsbDtcclxuICAgICAgICBpZiAoY2hlY2spIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHJlc29sdmUodXNlckluZm9zKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc3ZVcmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0dldFBhZ2VkYDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlcnMgPSBbXTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1GaWx0ZXIgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZmllbGQ6ICdpZCcsXHJcbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3I6ICdpbicsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHVzZXJJZHNcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICBmaWx0ZXJzLnB1c2goaXRlbUZpbHRlcik7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBncmlkSW5mbyA9IG5ldyBHcmlkSW5mbyh7XHJcbiAgICAgICAgICAgICAgICAgICAgZmllbGRzOiAnJyxcclxuICAgICAgICAgICAgICAgICAgICBwYWdlSW5mbzoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWdlOiAxLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWdlU2l6ZTogMTAwMDBcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHNvcnRzOiBbXSxcclxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzOiBmaWx0ZXJzXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9odHRwLnBvc3Q8UmVzcG9uc2VSZXN1bHQ+KHN2VXJsLCBncmlkSW5mbykucGlwZShcclxuICAgICAgICAgICAgICAgICAgICBzaGFyZVJlcGxheSh0aGlzLlJFUExBWV9DT1VOVCksXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0cnkodGhpcy5SRVRSWV9DT1VOVCksXHJcbiAgICAgICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIsIHRoaXMuX2luamVjdG9yKSksXHJcbiAgICAgICAgICAgICAgICAgICAgbWFwKHJlcHNvbnNlID0+IDxCYXNpY1VzZXJJbmZvW10+cmVwc29uc2UuZGF0YSlcclxuICAgICAgICAgICAgICAgICkudG9Qcm9taXNlKCkudGhlbihzdWNjZXNzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHN1Y2Nlc3MpO1xyXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKDxCYXNpY1VzZXJJbmZvW10+W10pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iXX0=
|