@tiba-spark/client-shared-lib 25.1.0-638 → 25.1.0-645
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/esm2022/libraries/modules/login/login.actions.mjs +3 -2
- package/esm2022/libraries/modules/login/login.state.mjs +8 -3
- package/esm2022/libraries/service-proxy/identity-service-proxies.mjs +66 -1
- package/fesm2022/tiba-spark-client-shared-lib.mjs +74 -3
- package/fesm2022/tiba-spark-client-shared-lib.mjs.map +1 -1
- package/libraries/modules/login/login.actions.d.ts +2 -1
- package/libraries/modules/login/login.actions.d.ts.map +1 -1
- package/libraries/modules/login/login.state.d.ts +1 -1
- package/libraries/modules/login/login.state.d.ts.map +1 -1
- package/libraries/service-proxy/identity-service-proxies.d.ts +6 -0
- package/libraries/service-proxy/identity-service-proxies.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -57,9 +57,10 @@ export class MobileAuthenticateMultipleTenantsAction {
|
|
|
57
57
|
}
|
|
58
58
|
export class Verify2FactorAuthenticationAction {
|
|
59
59
|
static { this.type = '[login] Verify2FactorAuthenticationAction'; }
|
|
60
|
-
constructor(userName, code) {
|
|
60
|
+
constructor(userName, code, setup2Fa = false) {
|
|
61
61
|
this.userName = userName;
|
|
62
62
|
this.code = code;
|
|
63
|
+
this.setup2Fa = setup2Fa;
|
|
63
64
|
}
|
|
64
65
|
}
|
|
65
66
|
export class SetTFASetupAction {
|
|
@@ -76,4 +77,4 @@ export class OpenIdAutheticateAction {
|
|
|
76
77
|
this.tenantInfo = tenantInfo;
|
|
77
78
|
}
|
|
78
79
|
}
|
|
79
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
80
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naW4uYWN0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC1zaGFyZWQtbGliL3NyYy9saWJyYXJpZXMvbW9kdWxlcy9sb2dpbi9sb2dpbi5hY3Rpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU1BLE1BQU0sT0FBTyxvQkFBb0I7YUFDUixTQUFJLEdBQUcsd0JBQXdCLENBQUM7SUFFdkQsWUFBbUIsS0FBYSxFQUFTLFFBQWdCO1FBQXRDLFVBQUssR0FBTCxLQUFLLENBQVE7UUFBUyxhQUFRLEdBQVIsUUFBUSxDQUFRO0lBQ3pELENBQUM7O0FBR0gsTUFBTSxPQUFPLDhCQUE4QjthQUNsQixTQUFJLEdBQUcsa0NBQWtDLENBQUM7SUFFakUsWUFBbUIsS0FBYTtRQUFiLFVBQUssR0FBTCxLQUFLLENBQVE7SUFDaEMsQ0FBQzs7QUFHSCxNQUFNLE9BQU8sNEJBQTRCO2FBQ2hCLFNBQUksR0FBRyw2QkFBNkIsQ0FBQztJQUU1RCxZQUFtQixRQUFrQixFQUFTLFVBQWtCLEVBQVMsYUFBbUM7UUFBekYsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUFTLGVBQVUsR0FBVixVQUFVLENBQVE7UUFBUyxrQkFBYSxHQUFiLGFBQWEsQ0FBc0I7SUFDNUcsQ0FBQzs7QUFHSCxNQUFNLE9BQU8sNkJBQTZCO2FBQ2pCLFNBQUksR0FBRyw4QkFBOEIsQ0FBQztJQUU3RCxZQUFtQixRQUFnQixFQUFTLFFBQWdCO1FBQXpDLGFBQVEsR0FBUixRQUFRLENBQVE7UUFBUyxhQUFRLEdBQVIsUUFBUSxDQUFRO0lBQzVELENBQUM7O0FBR0gsTUFBTSxPQUFPLHdCQUF3QjthQUNaLFNBQUksR0FBRyw0QkFBNEIsQ0FBQztJQUUzRCxZQUFtQixRQUFnQjtRQUFoQixhQUFRLEdBQVIsUUFBUSxDQUFRO0lBQ25DLENBQUM7O0FBR0gsTUFBTSxPQUFPLHVCQUF1QjthQUNYLFNBQUksR0FBRyx1QkFBdUIsQ0FBQztJQUV0RCxZQUFtQixLQUFhLEVBQVMsU0FBNkI7UUFBbkQsVUFBSyxHQUFMLEtBQUssQ0FBUTtRQUFTLGNBQVMsR0FBVCxTQUFTLENBQW9CO1FBQ3BFLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxPQUFPLFNBQVMsQ0FBQyxDQUFDO0lBQ3JELENBQUM7O0FBR0gsTUFBTSxPQUFPLGlDQUFpQzthQUNyQixTQUFJLEdBQUcscUNBQXFDLENBQUM7SUFFcEUsWUFBbUIsUUFBZ0IsRUFBUyxRQUFnQjtRQUF6QyxhQUFRLEdBQVIsUUFBUSxDQUFRO1FBQVMsYUFBUSxHQUFSLFFBQVEsQ0FBUTtJQUM1RCxDQUFDOztBQUdILE1BQU0sT0FBTyx1Q0FBdUM7YUFDM0IsU0FBSSxHQUFHLDJDQUEyQyxDQUFDO0lBRTFFLFlBQW1CLFFBQWdCLEVBQVMsUUFBZ0IsRUFBUyxhQUFxQixJQUFJO1FBQTNFLGFBQVEsR0FBUixRQUFRLENBQVE7UUFBUyxhQUFRLEdBQVIsUUFBUSxDQUFRO1FBQVMsZUFBVSxHQUFWLFVBQVUsQ0FBZTtJQUM5RixDQUFDOztBQUdILE1BQU0sT0FBTyxpQ0FBaUM7YUFDckIsU0FBSSxHQUFHLDJDQUEyQyxDQUFDO0lBRTFFLFlBQW1CLFFBQWdCLEVBQVMsSUFBWSxFQUFTLFdBQVcsS0FBSztRQUE5RCxhQUFRLEdBQVIsUUFBUSxDQUFRO1FBQVMsU0FBSSxHQUFKLElBQUksQ0FBUTtRQUFTLGFBQVEsR0FBUixRQUFRLENBQVE7SUFDakYsQ0FBQzs7QUFHSCxNQUFNLE9BQU8saUJBQWlCO2FBQ0wsU0FBSSxHQUFHLDJCQUEyQixDQUFDO0lBRTFELFlBQW1CLFdBQXdCO1FBQXhCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO0lBQzNDLENBQUM7O0FBR0gsTUFBTSxPQUFPLHVCQUF1QjthQUNYLFNBQUksR0FBRyxpQ0FBaUMsQ0FBQztJQUNoRSxZQUFtQixLQUFhLEVBQVMsb0JBQTBDLEVBQVMsVUFBc0I7UUFBL0YsVUFBSyxHQUFMLEtBQUssQ0FBUTtRQUFTLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBc0I7UUFBUyxlQUFVLEdBQVYsVUFBVSxDQUFZO0lBQ2xILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUZmFTZXR1cER0byB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlLXByb3h5L2Nsb3VkLXNlcnZpY2UtcHJveGllc1wiO1xuaW1wb3J0IHsgU2luZ2xlU2lnbk9uUHJvdmlkZXIgfSBmcm9tIFwiLi4vLi4vc2VydmljZS1wcm94eS9lZGdlLXNlcnZpY2UtcHJveGllc1wiO1xuaW1wb3J0IHsgUGFzc3dvcmRDaGFuZ2VUeXBlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2UtcHJveHkvaWRlbnRpdHktc2VydmljZS1wcm94aWVzXCI7XG5pbXBvcnQgeyBUZW5hbnRJbmZvIH0gZnJvbSBcIi4uL2F1dGgvbW9kZWwvdGVuYW50LWluZm8uaW50ZXJmYWNlXCI7XG5pbXBvcnQgeyBVc2VySW5mbyB9IGZyb20gXCIuLi9hdXRoL21vZGVsL3VzZXItaW5mby5pbnRlcmZhY2VcIjtcblxuZXhwb3J0IGNsYXNzIEZvcmdvdFBhc3N3b3JkQWN0aW9uIHtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSB0eXBlID0gJ1tsb2dpbl0gRm9yZ290UGFzc3dvcmQnO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBlbWFpbDogc3RyaW5nLCBwdWJsaWMgdGVuYW50SWQ6IG51bWJlcikge1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBGb3Jnb3RQYXNzd29yZFRlbmFudGxlc3NBY3Rpb24ge1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IHR5cGUgPSAnW2xvZ2luXSBGb3Jnb3RQYXNzd29yZFRlbmFudGxlc3MnO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBlbWFpbDogc3RyaW5nKSB7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFjY291bnRTZXRQYXNzd29yZEluaXRBY3Rpb24ge1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IHR5cGUgPSAnW2FjY291bnQtc2V0LXBhc3N3b3JkXSBJbml0JztcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgdXNlckluZm86IFVzZXJJbmZvLCBwdWJsaWMgdGVuYW50TmFtZTogc3RyaW5nLCBwdWJsaWMgY29tcG9uZW50VHlwZTogKFBhc3N3b3JkQ2hhbmdlVHlwZSkpIHtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQWNjb3VudFNldFBhc3N3b3JkRXJyb3JBY3Rpb24ge1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IHR5cGUgPSAnW2FjY291bnQtc2V0LXBhc3N3b3JkXSBFcnJvcic7XG5cbiAgY29uc3RydWN0b3IocHVibGljIGVycm9yTXNnOiBzdHJpbmcsIHB1YmxpYyB1c2VybmFtZTogc3RyaW5nKSB7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFjY291bnRTZXRQYXNzd29yZEFjdGlvbiB7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgdHlwZSA9ICdbYWNjb3VudC1zZXQtcGFzc3dvcmRdIFNldCc7XG5cbiAgY29uc3RydWN0b3IocHVibGljIHBhc3N3b3JkOiBzdHJpbmcpIHtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVmFsaWRhdGVVc2VyVG9rZW5BY3Rpb24ge1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IHR5cGUgPSAnW3ZhbGlkYXRlLXRva2VuXSBVc2VyJztcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgdG9rZW46IHN0cmluZywgcHVibGljIHRva2VuVHlwZTogUGFzc3dvcmRDaGFuZ2VUeXBlKSB7XG4gICAgY29uc29sZS5kZWJ1ZygnY29uICcsIHRva2VuVHlwZSwgdHlwZW9mIHRva2VuVHlwZSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEF1dGhlbnRpY2F0ZU11bHRpcGxlVGVuYW50c0FjdGlvbiB7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgdHlwZSA9ICdbbG9naW5dIEF1dGhlbnRpY2F0ZU11bHRpcGxlVGVuYW50cyc7XG5cbiAgY29uc3RydWN0b3IocHVibGljIHVzZXJuYW1lOiBzdHJpbmcsIHB1YmxpYyBwYXNzd29yZDogc3RyaW5nKSB7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE1vYmlsZUF1dGhlbnRpY2F0ZU11bHRpcGxlVGVuYW50c0FjdGlvbiB7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgdHlwZSA9ICdbbG9naW5dIE1vYmlsZUF1dGhlbnRpY2F0ZU11bHRpcGxlVGVuYW50cyc7XG5cbiAgY29uc3RydWN0b3IocHVibGljIHVzZXJuYW1lOiBzdHJpbmcsIHB1YmxpYyBwYXNzd29yZDogc3RyaW5nLCBwdWJsaWMgdGVuYW50TmFtZTogc3RyaW5nID0gbnVsbCkge1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBWZXJpZnkyRmFjdG9yQXV0aGVudGljYXRpb25BY3Rpb24ge1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IHR5cGUgPSAnW2xvZ2luXSBWZXJpZnkyRmFjdG9yQXV0aGVudGljYXRpb25BY3Rpb24nO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB1c2VyTmFtZTogc3RyaW5nLCBwdWJsaWMgY29kZTogc3RyaW5nLCBwdWJsaWMgc2V0dXAyRmEgPSBmYWxzZSkge1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTZXRURkFTZXR1cEFjdGlvbiB7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgdHlwZSA9ICdbbG9naW5dIFNldFRGQVNldHVwQWN0aW9uJztcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgdGZhU2V0dXBEdG86IFRmYVNldHVwRHRvKSB7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE9wZW5JZEF1dGhldGljYXRlQWN0aW9uIHtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSB0eXBlID0gJ1tsb2dpbl0gT3BlbklkQXV0aGV0aWNhdGVBY3Rpb24nO1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgdG9rZW46IHN0cmluZywgcHVibGljIHNpbmdsZVNpZ25PblByb3ZpZGVyOiBTaW5nbGVTaWduT25Qcm92aWRlciwgcHVibGljIHRlbmFudEluZm86IFRlbmFudEluZm8pIHtcbiAgfVxufSJdfQ==
|
|
@@ -194,13 +194,18 @@ let LoginState = class LoginState {
|
|
|
194
194
|
}
|
|
195
195
|
}));
|
|
196
196
|
}
|
|
197
|
-
onVerify2FactorAuthenticationAction(ctx, { userName, code }) {
|
|
197
|
+
onVerify2FactorAuthenticationAction(ctx, { userName, code, setup2Fa }) {
|
|
198
198
|
const verify2FactorAuthRequestDto = new Verify2FactorAuthRequestDto({
|
|
199
199
|
code,
|
|
200
200
|
userName
|
|
201
201
|
});
|
|
202
202
|
let verify2FactorAuth$;
|
|
203
|
-
|
|
203
|
+
if (setup2Fa) {
|
|
204
|
+
verify2FactorAuth$ = this.usersServiceProxyIdentity.verify2FactorAuthentication(verify2FactorAuthRequestDto);
|
|
205
|
+
}
|
|
206
|
+
else { // login for user with 2FA (already set up)
|
|
207
|
+
verify2FactorAuth$ = this.usersServiceProxyIdentity.verify2FactorAuthenticationLogin(verify2FactorAuthRequestDto);
|
|
208
|
+
}
|
|
204
209
|
return verify2FactorAuth$.pipe(tap({
|
|
205
210
|
error: e => {
|
|
206
211
|
this.messageBarService.error(parseApiErrorMessage(e), this.messageOptions);
|
|
@@ -354,4 +359,4 @@ export { LoginState };
|
|
|
354
359
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LoginState, decorators: [{
|
|
355
360
|
type: Injectable
|
|
356
361
|
}], ctorParameters: function () { return [{ type: i1.UsersServiceProxy }, { type: i2.UsersServiceProxy }, { type: i3.OpenIdAuthService }, { type: i4.UsersServiceProxyIdentity }, { type: i5.AuthService }, { type: i6.SessionStorageService }, { type: i7.LoginService }, { type: i8.TranslateService }, { type: i9.MsalService }, { type: i10.MessageBarService }, { type: i11.AppConfigService }, { type: i12.RouteService }, { type: i13.Store }, { type: i4.MobileServiceProxyIdentity }]; }, propDecorators: { onAuthenticateMultipleTenantsAction: [], onMobileAuthenticateMultipleTenantsAction: [], onForgotPassword: [], onForgotPasswordTenantless: [], onAccountSetPasswordInitAction: [], onAccountSetPasswordErrorAction: [], onAccountSetPasswordAction: [], onValidateUserTokenAction: [], onVerify2FactorAuthenticationAction: [], onSetTFASetupAction: [], onOpenIdAutheticateAction: [] } });
|
|
357
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naW4uc3RhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtc2hhcmVkLWxpYi9zcmMvbGlicmFyaWVzL21vZHVsZXMvbG9naW4vbG9naW4uc3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJM0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBdUIsTUFBTSxhQUFhLENBQUM7QUFDM0UsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQWMsR0FBRyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUU1RixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzdELE9BQU8sRUFBdUMsZUFBZSxFQUFtSCxVQUFVLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUM5TyxPQUFPLEVBQUUsb0JBQW9CLEVBQThDLHFCQUFxQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDbkosT0FBTyxFQUFnQyxzQkFBc0IsRUFBb0Usa0JBQWtCLEVBQW9HLDJCQUEyQixFQUFpRCxNQUFNLDhDQUE4QyxDQUFDO0FBS3hYLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBSXRGLE9BQU8sRUFBRSxZQUFZLEVBQUUsMEJBQTBCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN4RyxPQUFPLEVBQUUsd0JB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LFFBQVEsRUFBRTs2Q0FHVjtBQUdhO0lBRGIsUUFBUSxFQUFFO2tDQUdWO0FBR2E7SUFEYixRQUFRLEVBQUU7Z0NBR1Y7QUFHYTtJQURiLFFBQVEsRUFBRTtvQ0FHVjtBQUdhO0lBRGIsUUFBUSxFQUFFO2dDQUdWO0FBR2E7SUFEYixRQUFRLEVBQUU7bUNBR1Y7QUF6Q1UsVUFBVTtJQVh0QixLQUFLLENBQWtCO1FBQ3RCLElBQUksRUFBRSxPQUFPO1FBQ2IsUUFBUSxFQUFFO1lBQ1IsUUFBUSxFQUFFLFNBQVM7WUFDbkIsVUFBVSxFQUFFLEVBQUU7WUFDZCxrQkFBa0IsRUFBRSxTQUFTO1lBQzdCLFFBQVEsRUFBRSxFQUFFO1lBQ1osV0FBVyxFQUFFLEVBQUU7WUFDZixRQUFRLEVBQUUsU0FBUztTQUNwQjtLQUNGLENBQUM7R0FDVyxVQUFVLENBOFN0QjtTQTlTWSxVQUFVOzRGQUFWLFVBQVU7a0JBWnRCLFVBQVU7NmZBd0RGLG1DQUFtQyxNQWtCbkMseUNBQXlDLE1BZ0J6QyxnQkFBZ0IsTUFZaEIsMEJBQTBCLE1BTzFCLDhCQUE4QixNQVE5QiwrQkFBK0IsTUFTL0IsMEJBQTBCLE1Bd0MxQix5QkFBeUIsTUF3Q3pCLG1DQUFtQyxNQWdCbkMsbUJBQW1CLE1BeUNuQix5QkFBeUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNc2FsU2VydmljZSB9IGZyb20gJ0BhenVyZS9tc2FsLWFuZ3VsYXInO1xuaW1wb3J0IHsgQ2xlYXJDYWNoZVJlcXVlc3QgfSBmcm9tICdAYXp1cmUvbXNhbC1icm93c2VyJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IE5hdmlnYXRlIH0gZnJvbSAnQG5neHMvcm91dGVyLXBsdWdpbic7XG5pbXBvcnQgeyBBY3Rpb24sIFNlbGVjdG9yLCBTdGF0ZSwgU3RhdGVDb250ZXh0LCBTdG9yZSB9IGZyb20gJ0BuZ3hzL3N0b3JlJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCwgT2JzZXJ2YWJsZSwgdGFwLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBNZXNzYWdlQmFyUG9zaXRpb24gfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL21lc3NhZ2UtYmFyL21lc3NhZ2UtYmFyLXBvc2l0aW9uLmVudW0nO1xuaW1wb3J0IHsgTWVzc2FnZUJhclNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL21lc3NhZ2UtYmFyL21lc3NhZ2UtYmFyLnNlcnZpY2UnO1xuaW1wb3J0IHsgUkVTRVRfUEFTU1dPUkRfRU1BSUwgfSBmcm9tICcuLi8uLi9jb25zdGFudHMva2V5cy1jb25zdGFudHMnO1xuaW1wb3J0IHsgQXBwVHlwZSB9IGZyb20gJy4uLy4uL2VudW1zL2FwcC10eXBlLmVudW0nO1xuaW1wb3J0IHsgTG9jYWxpemF0aW9uIH0gZnJvbSAnLi4vLi4vZW51bXMvbG9jYWxpemF0aW9uLmVudW0nO1xuaW1wb3J0IHsgQWN0aXZhdGVSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGEsIEFjdGl2YXRlVXNlckR0bywgQXBpRXhjZXB0aW9uLCBQcm9ibGVtRGV0YWlscywgVGZhU2V0dXBEdG8sIFVzZXJEdG9IdHRwUmVzcG9uc2VEYXRhLCBVc2Vyc1NlcnZpY2VQcm94eSBhcyBVc2Vyc1NlcnZpY2VQcm94eUNsb3VkLCBVc2VyU3RhdHVzIH0gZnJvbSAnLi4vLi4vc2VydmljZS1wcm94eS9jbG91ZC1zZXJ2aWNlLXByb3hpZXMnO1xuaW1wb3J0IHsgU2luZ2xlU2lnbk9uUHJvdmlkZXIsIFVzZXJzU2VydmljZVByb3h5IGFzIFVzZXJzU2VydmljZVByb3h5RWRnZSwgVXNlclVwZGF0ZVBhc3N3b3JkRHRvIH0gZnJvbSAnLi4vLi4vc2VydmljZS1wcm94eS9lZGdlLXNlcnZpY2UtcHJveGllcyc7XG5pbXBvcnQgeyBBdXRoZW50aWNhdGVFcnJvclJlc3BvbnNlRHRvLCBBdXRoZW50aWNhdGVSZXF1ZXN0RHRvLCBBdXRoZW50aWNhdGVSZXNwb25zZUR0bywgQXV0aGVudGljYXRlUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhLCBQYXNzd29yZENoYW5nZVR5cGUsIE1vYmlsZVNlcnZpY2VQcm94eUlkZW50aXR5LCBVc2Vyc1NlcnZpY2VQcm94eUlkZW50aXR5LCBWYWxpZGF0ZUFjdGl2YXRpb25Vc2VyRHRvSHR0cFJlc3BvbnNlRGF0YSwgVmVyaWZ5MkZhY3RvckF1dGhSZXF1ZXN0RHRvLCBWZXJpZnkyRmFjdG9yQXV0aFJlc3BvbnNldER0b0h0dHBSZXNwb25zZURhdGEgfSBmcm9tICcuLi8uLi9zZXJ2aWNlLXByb3h5L2lkZW50aXR5LXNlcnZpY2UtcHJveGllcyc7XG5pbXBvcnQgeyBBcHBDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYXBwLWNvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7IE9wZW5JZEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvb3BlbmlkLWF1dGguc2VydmljZSc7XG5pbXBvcnQgeyBSb3V0ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yb3V0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IFNlc3Npb25TdG9yYWdlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Nlc3Npb24tc3RvcmFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IHBhcnNlQXBpRXJyb3JEYXRhLCBwYXJzZUFwaUVycm9yTWVzc2FnZSB9IGZyb20gJy4uLy4uL3V0aWxzL2FwaS1oZWxwZXIudXRpbCc7XG5pbXBvcnQgeyBTdHJpbmdNYXAgfSBmcm9tICcuLi8uLi91dGlscy9sYW5nLnV0aWwnO1xuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuLi9hdXRoL2F1dGguc2VydmljZSc7XG5pbXBvcnQgeyBVc2VySW5mbyB9IGZyb20gJy4uL2F1dGgvbW9kZWwvdXNlci1pbmZvLmludGVyZmFjZSc7XG5pbXBvcnQgeyBIZWFsdGhBY3Rpb24sIExvYWRBcHBDb25maWd1cmF0aW9uQWN0aW9uLCBTZXRUZW5hbnRVc2VyQWN0aW9uIH0gZnJvbSAnLi4vYXV0aC9zZXNzaW9uLmFjdGlvbnMnO1xuaW1wb3J0IHsgQWNjb3VudFNldFBhc3N3b3JkQWN0aW9uLCBBY2NvdW50U2V0UGFzc3dvcmRFcnJvckFjdGlvbiwgQWNjb3VudFNldFBhc3N3b3JkSW5pdEFjdGlvbiwgQXV0aGVudGljYXRlTXVsdGlwbGVUZW5hbnRzQWN0aW9uLCBGb3Jnb3RQYXNzd29yZEFjdGlvbiwgRm9yZ290UGFzc3dvcmRUZW5hbnRsZXNzQWN0aW9uLCBNb2JpbGVBdXRoZW50aWNhdGVNdWx0aXBsZVRlbmFudHNBY3Rpb24sIE9wZW5JZEF1dGhldGljYXRlQWN0aW9uLCBTZXRURkFTZXR1cEFjdGlvbiwgVmFsaWRhdGVVc2VyVG9rZW5BY3Rpb24sIFZlcmlmeTJGYWN0b3JBdXRoZW50aWNhdGlvbkFjdGlvbiB9IGZyb20gJy4vbG9naW4uYWN0aW9ucyc7XG5pbXBvcnQgeyBMb2dpblNlcnZpY2UgfSBmcm9tICcuL2xvZ2luLnNlcnZpY2UnO1xuaW1wb3J0IHsgVkVSU0lPTl9WMSB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy92ZXJzaW9uLWNvbnN0YW50cyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9naW5TdGF0ZU1vZGVsIHtcbiAgdXNlckluZm86IFVzZXJJbmZvO1xuICB0ZW5hbnROYW1lOiBzdHJpbmc7XG4gIHBhc3N3b3JkQ2hhbmdlVHlwZTogUGFzc3dvcmRDaGFuZ2VUeXBlO1xuICBhY2NvdW50czogQXV0aGVudGljYXRlUmVzcG9uc2VEdG9bXTtcbiAgYWNjb3VudHNNYXA6IFN0cmluZ01hcDxBdXRoZW50aWNhdGVSZXNwb25zZUR0bz47XG4gIHRmYVNldHVwOiBUZmFTZXR1cER0bztcbn1cblxuQEluamVjdGFibGUoKVxuQFN0YXRlPExvZ2luU3RhdGVNb2RlbD4oe1xuICBuYW1lOiAnbG9naW4nLFxuICBkZWZhdWx0czoge1xuICAgIHVzZXJJbmZvOiB1bmRlZmluZWQsXG4gICAgdGVuYW50TmFtZTogJycsXG4gICAgcGFzc3dvcmRDaGFuZ2VUeXBlOiB1bmRlZmluZWQsXG4gICAgYWNjb3VudHM6IFtdLFxuICAgIGFjY291bnRzTWFwOiB7fSxcbiAgICB0ZmFTZXR1cDogdW5kZWZpbmVkLFxuICB9XG59KVxuZXhwb3J0IGNsYXNzIExvZ2luU3RhdGUge1xuXG4gIHByaXZhdGUgbWVzc2FnZU9wdGlvbnMgPSB7IHBvc2l0aW9uOiBNZXNzYWdlQmFyUG9zaXRpb24uU3RhdGljIH07XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSB1c2Vyc1NlcnZpY2VQcm94eUNsb3VkOiBVc2Vyc1NlcnZpY2VQcm94eUNsb3VkLFxuICAgIHByaXZhdGUgdXNlcnNTZXJ2aWNlUHJveHlFZGdlOiBVc2Vyc1NlcnZpY2VQcm94eUVkZ2UsIHByaXZhdGUgb3BlbklkQXV0aFNlcnZpY2U6IE9wZW5JZEF1dGhTZXJ2aWNlLFxuICAgIHByaXZhdGUgdXNlcnNTZXJ2aWNlUHJveHlJZGVudGl0eTogVXNlcnNTZXJ2aWNlUHJveHlJZGVudGl0eSwgcHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzZXNzaW9uU3RvcmFnZVNlcnZpY2U6IFNlc3Npb25TdG9yYWdlU2VydmljZSwgcHJpdmF0ZSBsb2dpblNlcnZpY2U6IExvZ2luU2VydmljZSwgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgbXNhbFNlcnZpY2U6IE1zYWxTZXJ2aWNlLCBwcml2YXRlIG1lc3NhZ2VCYXJTZXJ2aWNlOiBNZXNzYWdlQmFyU2VydmljZSwgcHJpdmF0ZSBhcHBDb25maWc6IEFwcENvbmZpZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZVNlcnZpY2U6IFJvdXRlU2VydmljZSwgcHJpdmF0ZSBzdG9yZTogU3RvcmUsIHByaXZhdGUgbW9iaWxlU2VydmljZVByb3h5SWRlbnRpdHk6IE1vYmlsZVNlcnZpY2VQcm94eUlkZW50aXR5KSB7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIHR3b0ZhY3RvclNldHVwRm9yVXNlcihzdGF0ZTogTG9naW5TdGF0ZU1vZGVsKTogVGZhU2V0dXBEdG8ge1xuICAgIHJldHVybiBzdGF0ZS50ZmFTZXR1cDtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHB1YmxpYyBzdGF0aWMgdGVuYW50TmFtZShzdGF0ZTogTG9naW5TdGF0ZU1vZGVsKTogc3RyaW5nIHtcbiAgICByZXR1cm4gc3RhdGUudGVuYW50TmFtZTtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHB1YmxpYyBzdGF0aWMgdXNlckluZm8oc3RhdGU6IExvZ2luU3RhdGVNb2RlbCk6IFVzZXJJbmZvIHtcbiAgICByZXR1cm4gc3RhdGUudXNlckluZm87XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIHRlbXBsYXRlVHlwZShzdGF0ZTogTG9naW5TdGF0ZU1vZGVsKTogUGFzc3dvcmRDaGFuZ2VUeXBlIHtcbiAgICByZXR1cm4gc3RhdGUucGFzc3dvcmRDaGFuZ2VUeXBlO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyBhY2NvdW50cyhzdGF0ZTogTG9naW5TdGF0ZU1vZGVsKTogQXV0aGVudGljYXRlUmVzcG9uc2VEdG9bXSB7XG4gICAgcmV0dXJuIHN0YXRlLmFjY291bnRzO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyBhY2NvdW50c01hcChzdGF0ZTogTG9naW5TdGF0ZU1vZGVsKTogU3RyaW5nTWFwPEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvPiB7XG4gICAgcmV0dXJuIHN0YXRlLmFjY291bnRzTWFwO1xuICB9XG5cbiAgQEFjdGlvbihBdXRoZW50aWNhdGVNdWx0aXBsZVRlbmFudHNBY3Rpb24pXG4gIHB1YmxpYyBvbkF1dGhlbnRpY2F0ZU11bHRpcGxlVGVuYW50c0FjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxMb2dpblN0YXRlTW9kZWw+LCB7IHVzZXJuYW1lLCBwYXNzd29yZCB9OiBBdXRoZW50aWNhdGVNdWx0aXBsZVRlbmFudHNBY3Rpb24pIHtcbiAgICBjb25zdCBhdXRoZW50aWNhdGVSZXF1ZXN0RHRvID0gbmV3IEF1dGhlbnRpY2F0ZVJlcXVlc3REdG8oKTtcbiAgICBhdXRoZW50aWNhdGVSZXF1ZXN0RHRvLnVzZXJuYW1lID0gdXNlcm5hbWU7XG4gICAgYXV0aGVudGljYXRlUmVxdWVzdER0by5wYXNzd29yZCA9IHBhc3N3b3JkO1xuICAgIGF1dGhlbnRpY2F0ZVJlcXVlc3REdG8udGVuYW50TmFtZSA9ICcnO1xuXG4gICAgcmV0dXJuIHRoaXMudXNlcnNTZXJ2aWNlUHJveHlJZGVudGl0eS5tdWx0aVRlbmFudHNBdXRoZW50aWNhdGUoYXV0aGVudGljYXRlUmVxdWVzdER0bykucGlwZSh0YXAoe1xuICAgICAgbmV4dDogYWNjb3VudHNIdHRwUmVzcG9uc2VEYXRhID0+IHtcbiAgICAgICAgY29uc3QgYWNjb3VudHMgPSBhY2NvdW50c0h0dHBSZXNwb25zZURhdGEuZGF0YTtcbiAgICAgICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgICAgIGFjY291bnRzXG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiBlID0+IHRoaXMuYXV0aGVudGljYXRpb25FcnJvck1lc3NhZ2VCYXIoZSlcbiAgICB9KSk7XG4gIH1cblxuICBAQWN0aW9uKE1vYmlsZUF1dGhlbnRpY2F0ZU11bHRpcGxlVGVuYW50c0FjdGlvbilcbiAgcHVibGljIG9uTW9iaWxlQXV0aGVudGljYXRlTXVsdGlwbGVUZW5hbnRzQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PExvZ2luU3RhdGVNb2RlbD4sIHsgdXNlcm5hbWUsIHBhc3N3b3JkLCB0ZW5hbnROYW1lIH06IE1vYmlsZUF1dGhlbnRpY2F0ZU11bHRpcGxlVGVuYW50c0FjdGlvbikge1xuICAgIGNvbnN0IGF1dGhlbnRpY2F0ZVJlcXVlc3REdG8gPSBuZXcgQXV0aGVudGljYXRlUmVxdWVzdER0bygpO1xuICAgIGF1dGhlbnRpY2F0ZVJlcXVlc3REdG8udXNlcm5hbWUgPSB1c2VybmFtZTtcbiAgICBhdXRoZW50aWNhdGVSZXF1ZXN0RHRvLnBhc3N3b3JkID0gcGFzc3dvcmQ7XG4gICAgYXV0aGVudGljYXRlUmVxdWVzdER0by50ZW5hbnROYW1lID0gdGVuYW50TmFtZTtcbiAgICByZXR1cm4gdGhpcy5tb2JpbGVTZXJ2aWNlUHJveHlJZGVudGl0eS5tb2JpbGVBdXRoZW50aWNhdGUoVkVSU0lPTl9WMSwgYXV0aGVudGljYXRlUmVxdWVzdER0bykucGlwZSh0YXAoe1xuICAgICAgbmV4dDogYWNjb3VudHMgPT4ge1xuICAgICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgICAgYWNjb3VudHNNYXA6IGFjY291bnRzLmRhdGEsXG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiBlID0+IHRoaXMuYXV0aGVudGljYXRpb25FcnJvck1lc3NhZ2VCYXIoZSlcbiAgICB9KSk7XG4gIH1cblxuICBAQWN0aW9uKEZvcmdvdFBhc3N3b3JkQWN0aW9uKVxuICBwdWJsaWMgb25Gb3Jnb3RQYXNzd29yZChjdHg6IFN0YXRlQ29udGV4dDxMb2dpblN0YXRlTW9kZWw+LCB7IGVtYWlsLCB0ZW5hbnRJZCB9OiBGb3Jnb3RQYXNzd29yZEFjdGlvbikge1xuICAgIGNvbnN0IGlzTW9iaWxlQXBwTW9kZSA9IHRoaXMuYXBwQ29uZmlnLmdldENvbmZpZygpLmFwcFR5cGUgPT09IEFwcFR5cGUuTW9iaWxlO1xuICAgIGNvbnN0IHBhdGggPSBbJ2FjY291bnQnLCAnZm9yZ290LXBhc3N3b3JkLXN1Y2Nlc3MnXTtcbiAgICBjb25zdCB1cmwgPSBpc01vYmlsZUFwcE1vZGUgPyBwYXRoIDogdGhpcy5yb3V0ZVNlcnZpY2UuZ2V0TmF2aWdhdGlvblJvdXRlKHBhdGgpO1xuXG4gICAgdGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2Uuc2V0SXRlbShSRVNFVF9QQVNTV09SRF9FTUFJTCwgSlNPTi5zdHJpbmdpZnkoZW1haWwpKTtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBOYXZpZ2F0ZSh1cmwpKTtcbiAgICB0aGlzLm1lc3NhZ2VCYXJTZXJ2aWNlLnN1Y2Nlc3MoTG9jYWxpemF0aW9uLmZvcmdvdF9wYXNzd29yZF9lbWFpbF9zZW50X21zZywgdGhpcy5tZXNzYWdlT3B0aW9ucyk7XG4gICAgcmV0dXJuIHRoaXMudXNlcnNTZXJ2aWNlUHJveHlDbG91ZC5mb3Jnb3RQYXNzd29yZChlbWFpbCwgdGVuYW50SWQpO1xuICB9XG5cbiAgQEFjdGlvbihGb3Jnb3RQYXNzd29yZFRlbmFudGxlc3NBY3Rpb24pXG4gIHB1YmxpYyBvbkZvcmdvdFBhc3N3b3JkVGVuYW50bGVzcyhjdHg6IFN0YXRlQ29udGV4dDxMb2dpblN0YXRlTW9kZWw+LCB7IGVtYWlsIH06IEZvcmdvdFBhc3N3b3JkQWN0aW9uKSB7XG4gICAgdGhpcy5tZXNzYWdlQmFyU2VydmljZS5zdWNjZXNzKExvY2FsaXphdGlvbi5mb3Jnb3RfcGFzc3dvcmRfZW1haWxfc2VudF9tc2csIHRoaXMubWVzc2FnZU9wdGlvbnMpO1xuICAgIHJldHVybiB0aGlzLnVzZXJzU2VydmljZVByb3h5Q2xvdWQuZm9yZ290UGFzc3dvcmRUZW5hbnRsZXNzKGVtYWlsKTtcbiAgfVxuXG5cbiAgQEFjdGlvbihBY2NvdW50U2V0UGFzc3dvcmRJbml0QWN0aW9uKVxuICBwdWJsaWMgb25BY2NvdW50U2V0UGFzc3dvcmRJbml0QWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PExvZ2luU3RhdGVNb2RlbD4sIHsgdXNlckluZm8sIGNvbXBvbmVudFR5cGUgfSkge1xuICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgIHVzZXJJbmZvLFxuICAgICAgcGFzc3dvcmRDaGFuZ2VUeXBlOiBjb21wb25lbnRUeXBlXG4gICAgfSk7XG4gIH1cblxuICBAQWN0aW9uKEFjY291bnRTZXRQYXNzd29yZEVycm9yQWN0aW9uKVxuICBwdWJsaWMgb25BY2NvdW50U2V0UGFzc3dvcmRFcnJvckFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxMb2dpblN0YXRlTW9kZWw+LCB7IGVycm9yTXNnLCB1c2VybmFtZSB9KSB7XG4gICAgY29uc3QgdXNlckluZm86IFVzZXJJbmZvID0geyAuLi51c2VybmFtZSB9O1xuICAgIHRoaXMubWVzc2FnZUJhclNlcnZpY2UuZXJyb3IoZXJyb3JNc2csIHRoaXMubWVzc2FnZU9wdGlvbnMpO1xuICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgIHVzZXJJbmZvXG4gICAgfSk7XG4gIH1cblxuICBAQWN0aW9uKEFjY291bnRTZXRQYXNzd29yZEFjdGlvbilcbiAgcHVibGljIG9uQWNjb3VudFNldFBhc3N3b3JkQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PExvZ2luU3RhdGVNb2RlbD4sIHsgcGFzc3dvcmQgfTogQWNjb3VudFNldFBhc3N3b3JkQWN0aW9uKSB7XG4gICAgY29uc3QgdXNlckluZm8gPSBjdHguZ2V0U3RhdGUoKS51c2VySW5mbztcbiAgICBsZXQgZGF0YTogYW55O1xuICAgIGxldCBzZXRQYXNzd29yZCQ6IE9ic2VydmFibGU8VXNlckR0b0h0dHBSZXNwb25zZURhdGEgfCBBY3RpdmF0ZVJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YT47XG5cbiAgICBpZiAodGhpcy5hcHBDb25maWcuZ2V0Q29uZmlnKCkuYXBwVHlwZSA9PT0gQXBwVHlwZS5DbG91ZCkge1xuICAgICAgZGF0YSA9IG5ldyBBY3RpdmF0ZVVzZXJEdG8oe1xuICAgICAgICBwYXNzd29yZCxcbiAgICAgICAgY3VycmVudFBhc3N3b3JkOiBudWxsLFxuICAgICAgICB1c2VyU3RhdHVzOiB1c2VySW5mby5zdGF0dXMgYXMgVXNlclN0YXR1c1xuICAgICAgfSk7XG5cbiAgICAgIHNldFBhc3N3b3JkJCA9IHRoaXMudXNlcnNTZXJ2aWNlUHJveHlDbG91ZC5hY3RpdmF0ZShkYXRhKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGF0YSA9IG5ldyBVc2VyVXBkYXRlUGFzc3dvcmREdG8oe1xuICAgICAgICBwYXNzd29yZCxcbiAgICAgICAgY3VycmVudFBhc3N3b3JkOiBudWxsXG4gICAgICB9KTtcbiAgICAgIHNldFBhc3N3b3JkJCA9IHRoaXMudXNlcnNTZXJ2aWNlUHJveHlFZGdlLnVwZGF0ZVVzZXJQYXNzd29yZChkYXRhKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2V0UGFzc3dvcmQkLnBpcGUoXG4gICAgICBtYXAoKGFjdGl2YXRlUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhOiBBY3RpdmF0ZVJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YSkgPT4ge1xuICAgICAgICBpZiAoYWN0aXZhdGVSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGEuZGF0YS5pc1N1Y2Nlc3MpIHtcbiAgICAgICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgICAgICB0ZmFTZXR1cDogYWN0aXZhdGVSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGEuZGF0YT8udGZhU2V0dXAsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGFjdGl2YXRlUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhLmRhdGEuZXJyb3JNZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBjYXRjaEVycm9yKGUgPT4ge1xuICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBlIGluc3RhbmNlb2YgRXJyb3IgPyBlLm1lc3NhZ2UgOiBlO1xuICAgICAgICB0aGlzLm1lc3NhZ2VCYXJTZXJ2aWNlLmVycm9yKGVycm9yTWVzc2FnZSwgdGhpcy5tZXNzYWdlT3B0aW9ucyk7XG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycm9yTWVzc2FnZSk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBAQWN0aW9uKFZhbGlkYXRlVXNlclRva2VuQWN0aW9uKVxuICBwdWJsaWMgb25WYWxpZGF0ZVVzZXJUb2tlbkFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxMb2dpblN0YXRlTW9kZWw+LCB7IHRva2VuLCB0b2tlblR5cGUgfTogVmFsaWRhdGVVc2VyVG9rZW5BY3Rpb24pIHtcbiAgICBjb25zdCBwY3Q6IGFueSA9IFBhc3N3b3JkQ2hhbmdlVHlwZVt0b2tlblR5cGVdO1xuICAgIHJldHVybiB0aGlzLnVzZXJzU2VydmljZVByb3h5SWRlbnRpdHkudmFsaWRhdGVBY3RpdmF0aW9uKHRva2VuLCBQYXNzd29yZENoYW5nZVR5cGVbUGFzc3dvcmRDaGFuZ2VUeXBlW3Rva2VuVHlwZV1dKS5waXBlKHRhcCh7XG4gICAgICBuZXh0OiAodXNlcjogVmFsaWRhdGVBY3RpdmF0aW9uVXNlckR0b0h0dHBSZXNwb25zZURhdGEpID0+IHtcbiAgICAgICAgaWYgKHVzZXI/LmRhdGEpIHtcbiAgICAgICAgICBjb25zdCB1c2VySW5mbzogVXNlckluZm8gPSB7XG4gICAgICAgICAgICB1c2VySWQ6IHVzZXIuZGF0YS5pZCxcbiAgICAgICAgICAgIHVzZXJuYW1lOiB1c2VyLmRhdGEudU5hbWUsXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogYCR7dXNlci5kYXRhLm5hbWV9ICR7dXNlci5kYXRhLmxhc3ROYW1lfWAsXG4gICAgICAgICAgICBzdGF0dXM6IHVzZXIuZGF0YS5zdGF0dXMsXG4gICAgICAgICAgICBwbWw6IHVzZXIuZGF0YS5wbWxcbiAgICAgICAgICB9O1xuICAgICAgICAgIGlmICh1c2VyLmRhdGEuc3RhdHVzICE9PSBVc2VyU3RhdHVzLkJsb2NrZWQpIHtcbiAgICAgICAgICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgICAgICAgICAgdXNlckluZm8sXG4gICAgICAgICAgICAgIHBhc3N3b3JkQ2hhbmdlVHlwZTogcGN0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZUJhclNlcnZpY2UuZXJyb3IoTG9jYWxpemF0aW9uLm5vbl9hY3RpdmVfdXNlciwgdGhpcy5tZXNzYWdlT3B0aW9ucyk7XG4gICAgICAgICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgICAgICAgIHVzZXJJbmZvLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZXJyb3I6IGUgPT4ge1xuICAgICAgICBjb25zdCBlcnJvckpzb246IFByb2JsZW1EZXRhaWxzID0gSlNPTi5wYXJzZShlLnJlc3BvbnNlKSBhcyBQcm9ibGVtRGV0YWlscztcbiAgICAgICAgdGhpcy5tZXNzYWdlQmFyU2VydmljZS5lcnJvcihwYXJzZUFwaUVycm9yTWVzc2FnZShlKSwgdGhpcy5tZXNzYWdlT3B0aW9ucyk7XG4gICAgICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgICAgICB1c2VySW5mbzoge1xuICAgICAgICAgICAgdXNlcm5hbWU6IGVycm9ySnNvbi5pbnN0YW5jZSxcbiAgICAgICAgICAgIHVzZXJJZDogbnVsbCxcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiBudWxsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSkpO1xuICB9XG5cbiAgQEFjdGlvbihWZXJpZnkyRmFjdG9yQXV0aGVudGljYXRpb25BY3Rpb24pXG4gIHB1YmxpYyBvblZlcmlmeTJGYWN0b3JBdXRoZW50aWNhdGlvbkFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxMb2dpblN0YXRlTW9kZWw+LCB7IHVzZXJOYW1lLCBjb2RlIH06IFZlcmlmeTJGYWN0b3JBdXRoZW50aWNhdGlvbkFjdGlvbikge1xuICAgIGNvbnN0IHZlcmlmeTJGYWN0b3JBdXRoUmVxdWVzdER0byA9IG5ldyBWZXJpZnkyRmFjdG9yQXV0aFJlcXVlc3REdG8oe1xuICAgICAgY29kZSxcbiAgICAgIHVzZXJOYW1lXG4gICAgfSk7XG5cbiAgICBsZXQgdmVyaWZ5MkZhY3RvckF1dGgkOiBPYnNlcnZhYmxlPFZlcmlmeTJGYWN0b3JBdXRoUmVzcG9uc2V0RHRvSHR0cFJlc3BvbnNlRGF0YT47XG4gICAgdmVyaWZ5MkZhY3RvckF1dGgkID0gdGhpcy51c2Vyc1NlcnZpY2VQcm94eUlkZW50aXR5LnZlcmlmeTJGYWN0b3JBdXRoZW50aWNhdGlvbih2ZXJpZnkyRmFjdG9yQXV0aFJlcXVlc3REdG8pO1xuICAgIHJldHVybiB2ZXJpZnkyRmFjdG9yQXV0aCQucGlwZSh0YXAoe1xuICAgICAgZXJyb3I6IGUgPT4ge1xuICAgICAgICB0aGlzLm1lc3NhZ2VCYXJTZXJ2aWNlLmVycm9yKHBhcnNlQXBpRXJyb3JNZXNzYWdlKGUpLCB0aGlzLm1lc3NhZ2VPcHRpb25zKTtcbiAgICAgIH1cbiAgICB9KSk7XG4gIH1cblxuICBAQWN0aW9uKFNldFRGQVNldHVwQWN0aW9uKVxuICBwdWJsaWMgb25TZXRURkFTZXR1cEFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxMb2dpblN0YXRlTW9kZWw+LCB7IHRmYVNldHVwRHRvIH0pIHtcbiAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICB0ZmFTZXR1cDogdGZhU2V0dXBEdG9cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXV0aGVudGljYXRpb25FcnJvck1lc3NhZ2VCYXIoZXJyb3I6IEFwaUV4Y2VwdGlvbikge1xuICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IHBhcnNlQXBpRXJyb3JNZXNzYWdlKGVycm9yKTtcbiAgICBjb25zdCBkYXRhID0gcGFyc2VBcGlFcnJvckRhdGE8QXV0aGVudGljYXRlRXJyb3JSZXNwb25zZUR0bz4oZXJyb3IpO1xuICAgIHRoaXMubWVzc2FnZUJhclNlcnZpY2UuZXJyb3IoZXJyb3JNZXNzYWdlLCB7IHBvc2l0aW9uOiBNZXNzYWdlQmFyUG9zaXRpb24uU3RhdGljLCBtZXNzYWdlUGFyYW1zOiB7IHRlbXBvcmFyeUxvY2tlZE1pbnV0ZXM6IGRhdGE/LnRlbXBvcmFyeUJsb2NrZWRUaW1lIH0gfSk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFyTXNsTG9naW5DYWNoZSgpIHtcbiAgICBjb25zdCBjbGVhckNhY2hlUmVxdWVzdDogQ2xlYXJDYWNoZVJlcXVlc3QgPSB7XG4gICAgICBhY2NvdW50OiB0aGlzLm1zYWxTZXJ2aWNlLmluc3RhbmNlLmdldEFsbEFjY291bnRzKClbMF0sXG4gICAgfTtcbiAgICB0aGlzLm1zYWxTZXJ2aWNlLmluc3RhbmNlLmNsZWFyQ2FjaGUoY2xlYXJDYWNoZVJlcXVlc3QpO1xuICAgIHRoaXMubXNhbFNlcnZpY2UubG9nb3V0KCk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFyU2luZ2xlU2luZ09uQ2FjaGUoc2luZ2xlU2lnbk9uUHJvdmlkZXI6IFNpbmdsZVNpZ25PblByb3ZpZGVyKSB7XG4gICAgc3dpdGNoIChzaW5nbGVTaWduT25Qcm92aWRlcikge1xuICAgICAgY2FzZSBTaW5nbGVTaWduT25Qcm92aWRlci5NaWNyb3NvZnQ6XG4gICAgICAgIHRoaXMuY2xlYXJNc2xMb2dpbkNhY2hlKCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFNpbmdsZVNpZ25PblByb3ZpZGVyLlBpbmdGZWRlcmF0ZTpcbiAgICAgICAgdGhpcy5vcGVuSWRBdXRoU2VydmljZS5zaWduT3V0KCk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBsb2NhbFN0b3JhZ2UuY2xlYXIoKTtcbiAgfVxuXG4gIHByaXZhdGUgdXNlclN0YXR1c0lzQXdhaXRpbmdBY2Nlc3MgPSAoYXV0aFJlc3BvbnNlOiBBdXRoZW50aWNhdGVSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGEpOiBib29sZWFuID0+XG4gICAgYXV0aFJlc3BvbnNlLmRhdGEuc2luZ2xlU2lnbk9uQXV0aGVudGljYXRpb25EdG8/LmlzQXV0aGVudGljYXRlZCA9PT0gZmFsc2UgJiZcbiAgICBhdXRoUmVzcG9uc2UuZGF0YS5zaW5nbGVTaWduT25BdXRoZW50aWNhdGlvbkR0bz8udXNlclN0YXR1cyA9PT0gVXNlclN0YXR1cy5Bd2FpdGluZ0FjY2VzcztcblxuXG4gIEBBY3Rpb24oT3BlbklkQXV0aGV0aWNhdGVBY3Rpb24pXG4gIHB1YmxpYyBvbk9wZW5JZEF1dGhldGljYXRlQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PExvZ2luU3RhdGVNb2RlbD4sIHsgdG9rZW4sIHNpbmdsZVNpZ25PblByb3ZpZGVyLCB0ZW5hbnRJbmZvIH06IE9wZW5JZEF1dGhldGljYXRlQWN0aW9uKSB7XG4gICAgbGV0IGF1dGhlbnRpY2F0ZU9pZGMkOiBPYnNlcnZhYmxlPEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YT47XG4gICAgYXV0aGVudGljYXRlT2lkYyQgPSB0aGlzLnVzZXJzU2VydmljZVByb3h5SWRlbnRpdHkub3BlbklkQXV0aGVudGljYXRlKHRva2VuLCB0ZW5hbnRJbmZvLnRlbmFudE5hbWUpO1xuICAgIHJldHVybiBhdXRoZW50aWNhdGVPaWRjJC5waXBlKHRhcCh7XG4gICAgICBuZXh0OiBhdXRoUmVzcG9uc2UgPT4ge1xuICAgICAgICBpZiAoYXV0aFJlc3BvbnNlLmRhdGEubWVzc2FnZSA9PT0gTG9jYWxpemF0aW9uLnNzb19wZW5kaW5nX2FwcHJvdmFsKSB7XG4gICAgICAgICAgY29uc3QgbWVzc2FnZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KExvY2FsaXphdGlvbi5zc29fcGVuZGluZ19hcHByb3ZhbCk7XG4gICAgICAgICAgdGhpcy5tZXNzYWdlQmFyU2VydmljZS5pbmZvKG1lc3NhZ2UsIHsgcG9zaXRpb246IE1lc3NhZ2VCYXJQb3NpdGlvbi5TdGF0aWMgfSk7XG4gICAgICAgICAgdGhpcy5jbGVhclNpbmdsZVNpbmdPbkNhY2hlKHNpbmdsZVNpZ25PblByb3ZpZGVyKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzcGFya1Nlc3Npb24gPSB0aGlzLmF1dGhTZXJ2aWNlLnByb2Nlc3NBdXRoZW50aWNhdGUoYXV0aFJlc3BvbnNlLmRhdGEpO1xuICAgICAgICBjdHguZGlzcGF0Y2gobmV3IFNldFRlbmFudFVzZXJBY3Rpb24oc3BhcmtTZXNzaW9uKSk7XG5cbiAgICAgICAgaWYgKHRoaXMudXNlclN0YXR1c0lzQXdhaXRpbmdBY2Nlc3MoYXV0aFJlc3BvbnNlKSkge1xuICAgICAgICAgIHRoaXMuY2xlYXJTaW5nbGVTaW5nT25DYWNoZShzaW5nbGVTaWduT25Qcm92aWRlcik7XG4gICAgICAgICAgY29uc3QgbWVzc2FnZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KExvY2FsaXphdGlvbi5zc29fcGVuZGluZ19hcHByb3ZhbCk7XG4gICAgICAgICAgdGhpcy5tZXNzYWdlQmFyU2VydmljZS53YXJuKG1lc3NhZ2UsIHsgcG9zaXRpb246IE1lc3NhZ2VCYXJQb3NpdGlvbi5TdGF0aWMgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgLy8gQWZ0ZXIgYXV0aGVudGljYXRpb24gZ2V0IGFwcCBjb25maWd1cmF0aW9uXG4gICAgICAgICAgdGhpcy5sb2dpblRvU3BhcmsoKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGVycm9yOiBlID0+IHtcbiAgICAgICAgdGhpcy5zaW5nbGVTaW5nT25FcnJvckhhbmRsaW5nKGUpO1xuICAgICAgfVxuICAgIH0pKTtcbiAgfVxuXG4gIHNpbmdsZVNpbmdPbkVycm9ySGFuZGxpbmcoZTogYW55KSB7XG4gICAgaWYgKGUuZXJyb3JNZXNzYWdlID09IExvY2FsaXphdGlvbi5zc29fcGVuZGluZ19hcHByb3ZhbCkge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KExvY2FsaXphdGlvbi5zc29fcGVuZGluZ19hcHByb3ZhbCk7XG4gICAgICB0aGlzLm1lc3NhZ2VCYXJTZXJ2aWNlLmluZm8obWVzc2FnZSwgeyBwb3NpdGlvbjogTWVzc2FnZUJhclBvc2l0aW9uLlN0YXRpYyB9KTtcbiAgICB9XG4gICAgZWxzZSBpZiAoZS5lcnJvck1lc3NhZ2UpIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChlLmVycm9yTWVzc2FnZSk7XG4gICAgICB0aGlzLm1lc3NhZ2VCYXJTZXJ2aWNlLmVycm9yKG1lc3NhZ2UsIHsgcG9zaXRpb246IE1lc3NhZ2VCYXJQb3NpdGlvbi5TdGF0aWMgfSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhpcy5tZXNzYWdlQmFyU2VydmljZS5lcnJvcihwYXJzZUFwaUVycm9yTWVzc2FnZShlKSwgdGhpcy5tZXNzYWdlT3B0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgbG9naW5Ub1NwYXJrKCkge1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IExvYWRBcHBDb25maWd1cmF0aW9uQWN0aW9uKCkpO1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IEhlYWx0aEFjdGlvbigpKTtcbiAgICB0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS51cGRhdGVMb2dnZWRUZW5hbnQoKTtcbiAgICB0aGlzLmxvZ2luU2VydmljZS5sb2dpblRvU3BhcmsoKTtcbiAgfVxufVxuIl19
|
|
362
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naW4uc3RhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtc2hhcmVkLWxpYi9zcmMvbGlicmFyaWVzL21vZHVsZXMvbG9naW4vbG9naW4uc3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJM0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBdUIsTUFBTSxhQUFhLENBQUM7QUFDM0UsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQWMsR0FBRyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUU1RixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzdELE9BQU8sRUFBdUMsZUFBZSxFQUFtSCxVQUFVLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUM5TyxPQUFPLEVBQUUsb0JBQW9CLEVBQThDLHFCQUFxQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDbkosT0FBTyxFQUFnQyxzQkFBc0IsRUFBb0Usa0JBQWtCLEVBQW9HLDJCQUEyQixFQUFpRCxNQUFNLDhDQUE4QyxDQUFDO0FBS3hYLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBSXRGLE9BQU8sRUFBRSxZQUFZLEVBQUUsMEJBQTBCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN4RyxPQUFPLEVBQUUsd0JB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R0Q7SUFEQyxNQUFNLENBQUMsaUNBQWlDLENBQUM7cUVBa0J6QztBQUdEO0lBREMsTUFBTSxDQUFDLGlCQUFpQixDQUFDO3FEQUt6QjtBQXFDRDtJQURDLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQzsyREE4Qi9CO0FBOVFhO0lBRGIsUUFBUSxFQUFFOzZDQUdWO0FBR2E7SUFEYixRQUFRLEVBQUU7a0NBR1Y7QUFHYTtJQURiLFFBQVEsRUFBRTtnQ0FHVjtBQUdhO0lBRGIsUUFBUSxFQUFFO29DQUdWO0FBR2E7SUFEYixRQUFRLEVBQUU7Z0NBR1Y7QUFHYTtJQURiLFFBQVEsRUFBRTttQ0FHVjtBQXpDVSxVQUFVO0lBWHRCLEtBQUssQ0FBa0I7UUFDdEIsSUFBSSxFQUFFLE9BQU87UUFDYixRQUFRLEVBQUU7WUFDUixRQUFRLEVBQUUsU0FBUztZQUNuQixVQUFVLEVBQUUsRUFBRTtZQUNkLGtCQUFrQixFQUFFLFNBQVM7WUFDN0IsUUFBUSxFQUFFLEVBQUU7WUFDWixXQUFXLEVBQUUsRUFBRTtZQUNmLFFBQVEsRUFBRSxTQUFTO1NBQ3BCO0tBQ0YsQ0FBQztHQUNXLFVBQVUsQ0FrVHRCO1NBbFRZLFVBQVU7NEZBQVYsVUFBVTtrQkFadEIsVUFBVTs2ZkF3REYsbUNBQW1DLE1Ba0JuQyx5Q0FBeUMsTUFnQnpDLGdCQUFnQixNQVloQiwwQkFBMEIsTUFPMUIsOEJBQThCLE1BUTlCLCtCQUErQixNQVMvQiwwQkFBMEIsTUF3QzFCLHlCQUF5QixNQXdDekIsbUNBQW1DLE1Bb0JuQyxtQkFBbUIsTUF5Q25CLHlCQUF5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1zYWxTZXJ2aWNlIH0gZnJvbSAnQGF6dXJlL21zYWwtYW5ndWxhcic7XG5pbXBvcnQgeyBDbGVhckNhY2hlUmVxdWVzdCB9IGZyb20gJ0BhenVyZS9tc2FsLWJyb3dzZXInO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgTmF2aWdhdGUgfSBmcm9tICdAbmd4cy9yb3V0ZXItcGx1Z2luJztcbmltcG9ydCB7IEFjdGlvbiwgU2VsZWN0b3IsIFN0YXRlLCBTdGF0ZUNvbnRleHQsIFN0b3JlIH0gZnJvbSAnQG5neHMvc3RvcmUnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwLCBPYnNlcnZhYmxlLCB0YXAsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IE1lc3NhZ2VCYXJQb3NpdGlvbiB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvbWVzc2FnZS1iYXIvbWVzc2FnZS1iYXItcG9zaXRpb24uZW51bSc7XG5pbXBvcnQgeyBNZXNzYWdlQmFyU2VydmljZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvbWVzc2FnZS1iYXIvbWVzc2FnZS1iYXIuc2VydmljZSc7XG5pbXBvcnQgeyBSRVNFVF9QQVNTV09SRF9FTUFJTCB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9rZXlzLWNvbnN0YW50cyc7XG5pbXBvcnQgeyBBcHBUeXBlIH0gZnJvbSAnLi4vLi4vZW51bXMvYXBwLXR5cGUuZW51bSc7XG5pbXBvcnQgeyBMb2NhbGl6YXRpb24gfSBmcm9tICcuLi8uLi9lbnVtcy9sb2NhbGl6YXRpb24uZW51bSc7XG5pbXBvcnQgeyBBY3RpdmF0ZVJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YSwgQWN0aXZhdGVVc2VyRHRvLCBBcGlFeGNlcHRpb24sIFByb2JsZW1EZXRhaWxzLCBUZmFTZXR1cER0bywgVXNlckR0b0h0dHBSZXNwb25zZURhdGEsIFVzZXJzU2VydmljZVByb3h5IGFzIFVzZXJzU2VydmljZVByb3h5Q2xvdWQsIFVzZXJTdGF0dXMgfSBmcm9tICcuLi8uLi9zZXJ2aWNlLXByb3h5L2Nsb3VkLXNlcnZpY2UtcHJveGllcyc7XG5pbXBvcnQgeyBTaW5nbGVTaWduT25Qcm92aWRlciwgVXNlcnNTZXJ2aWNlUHJveHkgYXMgVXNlcnNTZXJ2aWNlUHJveHlFZGdlLCBVc2VyVXBkYXRlUGFzc3dvcmREdG8gfSBmcm9tICcuLi8uLi9zZXJ2aWNlLXByb3h5L2VkZ2Utc2VydmljZS1wcm94aWVzJztcbmltcG9ydCB7IEF1dGhlbnRpY2F0ZUVycm9yUmVzcG9uc2VEdG8sIEF1dGhlbnRpY2F0ZVJlcXVlc3REdG8sIEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvLCBBdXRoZW50aWNhdGVSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGEsIFBhc3N3b3JkQ2hhbmdlVHlwZSwgTW9iaWxlU2VydmljZVByb3h5SWRlbnRpdHksIFVzZXJzU2VydmljZVByb3h5SWRlbnRpdHksIFZhbGlkYXRlQWN0aXZhdGlvblVzZXJEdG9IdHRwUmVzcG9uc2VEYXRhLCBWZXJpZnkyRmFjdG9yQXV0aFJlcXVlc3REdG8sIFZlcmlmeTJGYWN0b3JBdXRoUmVzcG9uc2V0RHRvSHR0cFJlc3BvbnNlRGF0YSB9IGZyb20gJy4uLy4uL3NlcnZpY2UtcHJveHkvaWRlbnRpdHktc2VydmljZS1wcm94aWVzJztcbmltcG9ydCB7IEFwcENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hcHAtY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgT3BlbklkQXV0aFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9vcGVuaWQtYXV0aC5zZXJ2aWNlJztcbmltcG9ydCB7IFJvdXRlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3JvdXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2Vzc2lvblN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc2Vzc2lvbi1zdG9yYWdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgcGFyc2VBcGlFcnJvckRhdGEsIHBhcnNlQXBpRXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vLi4vdXRpbHMvYXBpLWhlbHBlci51dGlsJztcbmltcG9ydCB7IFN0cmluZ01hcCB9IGZyb20gJy4uLy4uL3V0aWxzL2xhbmcudXRpbCc7XG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uL2F1dGgvYXV0aC5zZXJ2aWNlJztcbmltcG9ydCB7IFVzZXJJbmZvIH0gZnJvbSAnLi4vYXV0aC9tb2RlbC91c2VyLWluZm8uaW50ZXJmYWNlJztcbmltcG9ydCB7IEhlYWx0aEFjdGlvbiwgTG9hZEFwcENvbmZpZ3VyYXRpb25BY3Rpb24sIFNldFRlbmFudFVzZXJBY3Rpb24gfSBmcm9tICcuLi9hdXRoL3Nlc3Npb24uYWN0aW9ucyc7XG5pbXBvcnQgeyBBY2NvdW50U2V0UGFzc3dvcmRBY3Rpb24sIEFjY291bnRTZXRQYXNzd29yZEVycm9yQWN0aW9uLCBBY2NvdW50U2V0UGFzc3dvcmRJbml0QWN0aW9uLCBBdXRoZW50aWNhdGVNdWx0aXBsZVRlbmFudHNBY3Rpb24sIEZvcmdvdFBhc3N3b3JkQWN0aW9uLCBGb3Jnb3RQYXNzd29yZFRlbmFudGxlc3NBY3Rpb24sIE1vYmlsZUF1dGhlbnRpY2F0ZU11bHRpcGxlVGVuYW50c0FjdGlvbiwgT3BlbklkQXV0aGV0aWNhdGVBY3Rpb24sIFNldFRGQVNldHVwQWN0aW9uLCBWYWxpZGF0ZVVzZXJUb2tlbkFjdGlvbiwgVmVyaWZ5MkZhY3RvckF1dGhlbnRpY2F0aW9uQWN0aW9uIH0gZnJvbSAnLi9sb2dpbi5hY3Rpb25zJztcbmltcG9ydCB7IExvZ2luU2VydmljZSB9IGZyb20gJy4vbG9naW4uc2VydmljZSc7XG5pbXBvcnQgeyBWRVJTSU9OX1YxIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL3ZlcnNpb24tY29uc3RhbnRzJztcblxuZXhwb3J0IGludGVyZmFjZSBMb2dpblN0YXRlTW9kZWwge1xuICB1c2VySW5mbzogVXNlckluZm87XG4gIHRlbmFudE5hbWU6IHN0cmluZztcbiAgcGFzc3dvcmRDaGFuZ2VUeXBlOiBQYXNzd29yZENoYW5nZVR5cGU7XG4gIGFjY291bnRzOiBBdXRoZW50aWNhdGVSZXNwb25zZUR0b1tdO1xuICBhY2NvdW50c01hcDogU3RyaW5nTWFwPEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvPjtcbiAgdGZhU2V0dXA6IFRmYVNldHVwRHRvO1xufVxuXG5ASW5qZWN0YWJsZSgpXG5AU3RhdGU8TG9naW5TdGF0ZU1vZGVsPih7XG4gIG5hbWU6ICdsb2dpbicsXG4gIGRlZmF1bHRzOiB7XG4gICAgdXNlckluZm86IHVuZGVmaW5lZCxcbiAgICB0ZW5hbnROYW1lOiAnJyxcbiAgICBwYXNzd29yZENoYW5nZVR5cGU6IHVuZGVmaW5lZCxcbiAgICBhY2NvdW50czogW10sXG4gICAgYWNjb3VudHNNYXA6IHt9LFxuICAgIHRmYVNldHVwOiB1bmRlZmluZWQsXG4gIH1cbn0pXG5leHBvcnQgY2xhc3MgTG9naW5TdGF0ZSB7XG5cbiAgcHJpdmF0ZSBtZXNzYWdlT3B0aW9ucyA9IHsgcG9zaXRpb246IE1lc3NhZ2VCYXJQb3NpdGlvbi5TdGF0aWMgfTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHVzZXJzU2VydmljZVByb3h5Q2xvdWQ6IFVzZXJzU2VydmljZVByb3h5Q2xvdWQsXG4gICAgcHJpdmF0ZSB1c2Vyc1NlcnZpY2VQcm94eUVkZ2U6IFVzZXJzU2VydmljZVByb3h5RWRnZSwgcHJpdmF0ZSBvcGVuSWRBdXRoU2VydmljZTogT3BlbklkQXV0aFNlcnZpY2UsXG4gICAgcHJpdmF0ZSB1c2Vyc1NlcnZpY2VQcm94eUlkZW50aXR5OiBVc2Vyc1NlcnZpY2VQcm94eUlkZW50aXR5LCBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSxcbiAgICBwcml2YXRlIHNlc3Npb25TdG9yYWdlU2VydmljZTogU2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLCBwcml2YXRlIGxvZ2luU2VydmljZTogTG9naW5TZXJ2aWNlLCBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBtc2FsU2VydmljZTogTXNhbFNlcnZpY2UsIHByaXZhdGUgbWVzc2FnZUJhclNlcnZpY2U6IE1lc3NhZ2VCYXJTZXJ2aWNlLCBwcml2YXRlIGFwcENvbmZpZzogQXBwQ29uZmlnU2VydmljZSxcbiAgICBwcml2YXRlIHJvdXRlU2VydmljZTogUm91dGVTZXJ2aWNlLCBwcml2YXRlIHN0b3JlOiBTdG9yZSwgcHJpdmF0ZSBtb2JpbGVTZXJ2aWNlUHJveHlJZGVudGl0eTogTW9iaWxlU2VydmljZVByb3h5SWRlbnRpdHkpIHtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHB1YmxpYyBzdGF0aWMgdHdvRmFjdG9yU2V0dXBGb3JVc2VyKHN0YXRlOiBMb2dpblN0YXRlTW9kZWwpOiBUZmFTZXR1cER0byB7XG4gICAgcmV0dXJuIHN0YXRlLnRmYVNldHVwO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyB0ZW5hbnROYW1lKHN0YXRlOiBMb2dpblN0YXRlTW9kZWwpOiBzdHJpbmcge1xuICAgIHJldHVybiBzdGF0ZS50ZW5hbnROYW1lO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyB1c2VySW5mbyhzdGF0ZTogTG9naW5TdGF0ZU1vZGVsKTogVXNlckluZm8ge1xuICAgIHJldHVybiBzdGF0ZS51c2VySW5mbztcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHB1YmxpYyBzdGF0aWMgdGVtcGxhdGVUeXBlKHN0YXRlOiBMb2dpblN0YXRlTW9kZWwpOiBQYXNzd29yZENoYW5nZVR5cGUge1xuICAgIHJldHVybiBzdGF0ZS5wYXNzd29yZENoYW5nZVR5cGU7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIGFjY291bnRzKHN0YXRlOiBMb2dpblN0YXRlTW9kZWwpOiBBdXRoZW50aWNhdGVSZXNwb25zZUR0b1tdIHtcbiAgICByZXR1cm4gc3RhdGUuYWNjb3VudHM7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIGFjY291bnRzTWFwKHN0YXRlOiBMb2dpblN0YXRlTW9kZWwpOiBTdHJpbmdNYXA8QXV0aGVudGljYXRlUmVzcG9uc2VEdG8+IHtcbiAgICByZXR1cm4gc3RhdGUuYWNjb3VudHNNYXA7XG4gIH1cblxuICBAQWN0aW9uKEF1dGhlbnRpY2F0ZU11bHRpcGxlVGVuYW50c0FjdGlvbilcbiAgcHVibGljIG9uQXV0aGVudGljYXRlTXVsdGlwbGVUZW5hbnRzQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PExvZ2luU3RhdGVNb2RlbD4sIHsgdXNlcm5hbWUsIHBhc3N3b3JkIH06IEF1dGhlbnRpY2F0ZU11bHRpcGxlVGVuYW50c0FjdGlvbikge1xuICAgIGNvbnN0IGF1dGhlbnRpY2F0ZVJlcXVlc3REdG8gPSBuZXcgQXV0aGVudGljYXRlUmVxdWVzdER0bygpO1xuICAgIGF1dGhlbnRpY2F0ZVJlcXVlc3REdG8udXNlcm5hbWUgPSB1c2VybmFtZTtcbiAgICBhdXRoZW50aWNhdGVSZXF1ZXN0RHRvLnBhc3N3b3JkID0gcGFzc3dvcmQ7XG4gICAgYXV0aGVudGljYXRlUmVxdWVzdER0by50ZW5hbnROYW1lID0gJyc7XG5cbiAgICByZXR1cm4gdGhpcy51c2Vyc1NlcnZpY2VQcm94eUlkZW50aXR5Lm11bHRpVGVuYW50c0F1dGhlbnRpY2F0ZShhdXRoZW50aWNhdGVSZXF1ZXN0RHRvKS5waXBlKHRhcCh7XG4gICAgICBuZXh0OiBhY2NvdW50c0h0dHBSZXNwb25zZURhdGEgPT4ge1xuICAgICAgICBjb25zdCBhY2NvdW50cyA9IGFjY291bnRzSHR0cFJlc3BvbnNlRGF0YS5kYXRhO1xuICAgICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgICAgYWNjb3VudHNcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IGUgPT4gdGhpcy5hdXRoZW50aWNhdGlvbkVycm9yTWVzc2FnZUJhcihlKVxuICAgIH0pKTtcbiAgfVxuXG4gIEBBY3Rpb24oTW9iaWxlQXV0aGVudGljYXRlTXVsdGlwbGVUZW5hbnRzQWN0aW9uKVxuICBwdWJsaWMgb25Nb2JpbGVBdXRoZW50aWNhdGVNdWx0aXBsZVRlbmFudHNBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8TG9naW5TdGF0ZU1vZGVsPiwgeyB1c2VybmFtZSwgcGFzc3dvcmQsIHRlbmFudE5hbWUgfTogTW9iaWxlQXV0aGVudGljYXRlTXVsdGlwbGVUZW5hbnRzQWN0aW9uKSB7XG4gICAgY29uc3QgYXV0aGVudGljYXRlUmVxdWVzdER0byA9IG5ldyBBdXRoZW50aWNhdGVSZXF1ZXN0RHRvKCk7XG4gICAgYXV0aGVudGljYXRlUmVxdWVzdER0by51c2VybmFtZSA9IHVzZXJuYW1lO1xuICAgIGF1dGhlbnRpY2F0ZVJlcXVlc3REdG8ucGFzc3dvcmQgPSBwYXNzd29yZDtcbiAgICBhdXRoZW50aWNhdGVSZXF1ZXN0RHRvLnRlbmFudE5hbWUgPSB0ZW5hbnROYW1lO1xuICAgIHJldHVybiB0aGlzLm1vYmlsZVNlcnZpY2VQcm94eUlkZW50aXR5Lm1vYmlsZUF1dGhlbnRpY2F0ZShWRVJTSU9OX1YxLCBhdXRoZW50aWNhdGVSZXF1ZXN0RHRvKS5waXBlKHRhcCh7XG4gICAgICBuZXh0OiBhY2NvdW50cyA9PiB7XG4gICAgICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgICAgICBhY2NvdW50c01hcDogYWNjb3VudHMuZGF0YSxcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IGUgPT4gdGhpcy5hdXRoZW50aWNhdGlvbkVycm9yTWVzc2FnZUJhcihlKVxuICAgIH0pKTtcbiAgfVxuXG4gIEBBY3Rpb24oRm9yZ290UGFzc3dvcmRBY3Rpb24pXG4gIHB1YmxpYyBvbkZvcmdvdFBhc3N3b3JkKGN0eDogU3RhdGVDb250ZXh0PExvZ2luU3RhdGVNb2RlbD4sIHsgZW1haWwsIHRlbmFudElkIH06IEZvcmdvdFBhc3N3b3JkQWN0aW9uKSB7XG4gICAgY29uc3QgaXNNb2JpbGVBcHBNb2RlID0gdGhpcy5hcHBDb25maWcuZ2V0Q29uZmlnKCkuYXBwVHlwZSA9PT0gQXBwVHlwZS5Nb2JpbGU7XG4gICAgY29uc3QgcGF0aCA9IFsnYWNjb3VudCcsICdmb3Jnb3QtcGFzc3dvcmQtc3VjY2VzcyddO1xuICAgIGNvbnN0IHVybCA9IGlzTW9iaWxlQXBwTW9kZSA/IHBhdGggOiB0aGlzLnJvdXRlU2VydmljZS5nZXROYXZpZ2F0aW9uUm91dGUocGF0aCk7XG5cbiAgICB0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS5zZXRJdGVtKFJFU0VUX1BBU1NXT1JEX0VNQUlMLCBKU09OLnN0cmluZ2lmeShlbWFpbCkpO1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IE5hdmlnYXRlKHVybCkpO1xuICAgIHRoaXMubWVzc2FnZUJhclNlcnZpY2Uuc3VjY2VzcyhMb2NhbGl6YXRpb24uZm9yZ290X3Bhc3N3b3JkX2VtYWlsX3NlbnRfbXNnLCB0aGlzLm1lc3NhZ2VPcHRpb25zKTtcbiAgICByZXR1cm4gdGhpcy51c2Vyc1NlcnZpY2VQcm94eUNsb3VkLmZvcmdvdFBhc3N3b3JkKGVtYWlsLCB0ZW5hbnRJZCk7XG4gIH1cblxuICBAQWN0aW9uKEZvcmdvdFBhc3N3b3JkVGVuYW50bGVzc0FjdGlvbilcbiAgcHVibGljIG9uRm9yZ290UGFzc3dvcmRUZW5hbnRsZXNzKGN0eDogU3RhdGVDb250ZXh0PExvZ2luU3RhdGVNb2RlbD4sIHsgZW1haWwgfTogRm9yZ290UGFzc3dvcmRBY3Rpb24pIHtcbiAgICB0aGlzLm1lc3NhZ2VCYXJTZXJ2aWNlLnN1Y2Nlc3MoTG9jYWxpemF0aW9uLmZvcmdvdF9wYXNzd29yZF9lbWFpbF9zZW50X21zZywgdGhpcy5tZXNzYWdlT3B0aW9ucyk7XG4gICAgcmV0dXJuIHRoaXMudXNlcnNTZXJ2aWNlUHJveHlDbG91ZC5mb3Jnb3RQYXNzd29yZFRlbmFudGxlc3MoZW1haWwpO1xuICB9XG5cblxuICBAQWN0aW9uKEFjY291bnRTZXRQYXNzd29yZEluaXRBY3Rpb24pXG4gIHB1YmxpYyBvbkFjY291bnRTZXRQYXNzd29yZEluaXRBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8TG9naW5TdGF0ZU1vZGVsPiwgeyB1c2VySW5mbywgY29tcG9uZW50VHlwZSB9KSB7XG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgdXNlckluZm8sXG4gICAgICBwYXNzd29yZENoYW5nZVR5cGU6IGNvbXBvbmVudFR5cGVcbiAgICB9KTtcbiAgfVxuXG4gIEBBY3Rpb24oQWNjb3VudFNldFBhc3N3b3JkRXJyb3JBY3Rpb24pXG4gIHB1YmxpYyBvbkFjY291bnRTZXRQYXNzd29yZEVycm9yQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PExvZ2luU3RhdGVNb2RlbD4sIHsgZXJyb3JNc2csIHVzZXJuYW1lIH0pIHtcbiAgICBjb25zdCB1c2VySW5mbzogVXNlckluZm8gPSB7IC4uLnVzZXJuYW1lIH07XG4gICAgdGhpcy5tZXNzYWdlQmFyU2VydmljZS5lcnJvcihlcnJvck1zZywgdGhpcy5tZXNzYWdlT3B0aW9ucyk7XG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgdXNlckluZm9cbiAgICB9KTtcbiAgfVxuXG4gIEBBY3Rpb24oQWNjb3VudFNldFBhc3N3b3JkQWN0aW9uKVxuICBwdWJsaWMgb25BY2NvdW50U2V0UGFzc3dvcmRBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8TG9naW5TdGF0ZU1vZGVsPiwgeyBwYXNzd29yZCB9OiBBY2NvdW50U2V0UGFzc3dvcmRBY3Rpb24pIHtcbiAgICBjb25zdCB1c2VySW5mbyA9IGN0eC5nZXRTdGF0ZSgpLnVzZXJJbmZvO1xuICAgIGxldCBkYXRhOiBhbnk7XG4gICAgbGV0IHNldFBhc3N3b3JkJDogT2JzZXJ2YWJsZTxVc2VyRHRvSHR0cFJlc3BvbnNlRGF0YSB8IEFjdGl2YXRlUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhPjtcblxuICAgIGlmICh0aGlzLmFwcENvbmZpZy5nZXRDb25maWcoKS5hcHBUeXBlID09PSBBcHBUeXBlLkNsb3VkKSB7XG4gICAgICBkYXRhID0gbmV3IEFjdGl2YXRlVXNlckR0byh7XG4gICAgICAgIHBhc3N3b3JkLFxuICAgICAgICBjdXJyZW50UGFzc3dvcmQ6IG51bGwsXG4gICAgICAgIHVzZXJTdGF0dXM6IHVzZXJJbmZvLnN0YXR1cyBhcyBVc2VyU3RhdHVzXG4gICAgICB9KTtcblxuICAgICAgc2V0UGFzc3dvcmQkID0gdGhpcy51c2Vyc1NlcnZpY2VQcm94eUNsb3VkLmFjdGl2YXRlKGRhdGEpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkYXRhID0gbmV3IFVzZXJVcGRhdGVQYXNzd29yZER0byh7XG4gICAgICAgIHBhc3N3b3JkLFxuICAgICAgICBjdXJyZW50UGFzc3dvcmQ6IG51bGxcbiAgICAgIH0pO1xuICAgICAgc2V0UGFzc3dvcmQkID0gdGhpcy51c2Vyc1NlcnZpY2VQcm94eUVkZ2UudXBkYXRlVXNlclBhc3N3b3JkKGRhdGEpO1xuICAgIH1cblxuICAgIHJldHVybiBzZXRQYXNzd29yZCQucGlwZShcbiAgICAgIG1hcCgoYWN0aXZhdGVSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGE6IEFjdGl2YXRlUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhKSA9PiB7XG4gICAgICAgIGlmIChhY3RpdmF0ZVJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YS5kYXRhLmlzU3VjY2Vzcykge1xuICAgICAgICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgICAgICAgIHRmYVNldHVwOiBhY3RpdmF0ZVJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YS5kYXRhPy50ZmFTZXR1cCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYWN0aXZhdGVSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGEuZGF0YS5lcnJvck1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIGNhdGNoRXJyb3IoZSA9PiB7XG4gICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGUgaW5zdGFuY2VvZiBFcnJvciA/IGUubWVzc2FnZSA6IGU7XG4gICAgICAgIHRoaXMubWVzc2FnZUJhclNlcnZpY2UuZXJyb3IoZXJyb3JNZXNzYWdlLCB0aGlzLm1lc3NhZ2VPcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyb3JNZXNzYWdlKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIEBBY3Rpb24oVmFsaWRhdGVVc2VyVG9rZW5BY3Rpb24pXG4gIHB1YmxpYyBvblZhbGlkYXRlVXNlclRva2VuQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PExvZ2luU3RhdGVNb2RlbD4sIHsgdG9rZW4sIHRva2VuVHlwZSB9OiBWYWxpZGF0ZVVzZXJUb2tlbkFjdGlvbikge1xuICAgIGNvbnN0IHBjdDogYW55ID0gUGFzc3dvcmRDaGFuZ2VUeXBlW3Rva2VuVHlwZV07XG4gICAgcmV0dXJuIHRoaXMudXNlcnNTZXJ2aWNlUHJveHlJZGVudGl0eS52YWxpZGF0ZUFjdGl2YXRpb24odG9rZW4sIFBhc3N3b3JkQ2hhbmdlVHlwZVtQYXNzd29yZENoYW5nZVR5cGVbdG9rZW5UeXBlXV0pLnBpcGUodGFwKHtcbiAgICAgIG5leHQ6ICh1c2VyOiBWYWxpZGF0ZUFjdGl2YXRpb25Vc2VyRHRvSHR0cFJlc3BvbnNlRGF0YSkgPT4ge1xuICAgICAgICBpZiAodXNlcj8uZGF0YSkge1xuICAgICAgICAgIGNvbnN0IHVzZXJJbmZvOiBVc2VySW5mbyA9IHtcbiAgICAgICAgICAgIHVzZXJJZDogdXNlci5kYXRhLmlkLFxuICAgICAgICAgICAgdXNlcm5hbWU6IHVzZXIuZGF0YS51TmFtZSxcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiBgJHt1c2VyLmRhdGEubmFtZX0gJHt1c2VyLmRhdGEubGFzdE5hbWV9YCxcbiAgICAgICAgICAgIHN0YXR1czogdXNlci5kYXRhLnN0YXR1cyxcbiAgICAgICAgICAgIHBtbDogdXNlci5kYXRhLnBtbFxuICAgICAgICAgIH07XG4gICAgICAgICAgaWYgKHVzZXIuZGF0YS5zdGF0dXMgIT09IFVzZXJTdGF0dXMuQmxvY2tlZCkge1xuICAgICAgICAgICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgICAgICAgICB1c2VySW5mbyxcbiAgICAgICAgICAgICAgcGFzc3dvcmRDaGFuZ2VUeXBlOiBwY3QsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5tZXNzYWdlQmFyU2VydmljZS5lcnJvcihMb2NhbGl6YXRpb24ubm9uX2FjdGl2ZV91c2VyLCB0aGlzLm1lc3NhZ2VPcHRpb25zKTtcbiAgICAgICAgICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgICAgICAgICAgdXNlckluZm8sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBlcnJvcjogZSA9PiB7XG4gICAgICAgIGNvbnN0IGVycm9ySnNvbjogUHJvYmxlbURldGFpbHMgPSBKU09OLnBhcnNlKGUucmVzcG9uc2UpIGFzIFByb2JsZW1EZXRhaWxzO1xuICAgICAgICB0aGlzLm1lc3NhZ2VCYXJTZXJ2aWNlLmVycm9yKHBhcnNlQXBpRXJyb3JNZXNzYWdlKGUpLCB0aGlzLm1lc3NhZ2VPcHRpb25zKTtcbiAgICAgICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgICAgIHVzZXJJbmZvOiB7XG4gICAgICAgICAgICB1c2VybmFtZTogZXJyb3JKc29uLmluc3RhbmNlLFxuICAgICAgICAgICAgdXNlcklkOiBudWxsLFxuICAgICAgICAgICAgZGlzcGxheU5hbWU6IG51bGxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KSk7XG4gIH1cblxuICBAQWN0aW9uKFZlcmlmeTJGYWN0b3JBdXRoZW50aWNhdGlvbkFjdGlvbilcbiAgcHVibGljIG9uVmVyaWZ5MkZhY3RvckF1dGhlbnRpY2F0aW9uQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PExvZ2luU3RhdGVNb2RlbD4sIHsgdXNlck5hbWUsIGNvZGUsIHNldHVwMkZhIH06IFZlcmlmeTJGYWN0b3JBdXRoZW50aWNhdGlvbkFjdGlvbikge1xuICAgIGNvbnN0IHZlcmlmeTJGYWN0b3JBdXRoUmVxdWVzdER0byA9IG5ldyBWZXJpZnkyRmFjdG9yQXV0aFJlcXVlc3REdG8oe1xuICAgICAgY29kZSxcbiAgICAgIHVzZXJOYW1lXG4gICAgfSk7XG5cbiAgICBsZXQgdmVyaWZ5MkZhY3RvckF1dGgkOiBPYnNlcnZhYmxlPFZlcmlmeTJGYWN0b3JBdXRoUmVzcG9uc2V0RHRvSHR0cFJlc3BvbnNlRGF0YT47XG4gICAgaWYgKHNldHVwMkZhKSB7XG4gICAgICB2ZXJpZnkyRmFjdG9yQXV0aCQgPSB0aGlzLnVzZXJzU2VydmljZVByb3h5SWRlbnRpdHkudmVyaWZ5MkZhY3RvckF1dGhlbnRpY2F0aW9uKHZlcmlmeTJGYWN0b3JBdXRoUmVxdWVzdER0byk7XG4gICAgfSBlbHNlIHsgLy8gbG9naW4gZm9yIHVzZXIgd2l0aCAyRkEgKGFscmVhZHkgc2V0IHVwKVxuICAgICAgdmVyaWZ5MkZhY3RvckF1dGgkID0gdGhpcy51c2Vyc1NlcnZpY2VQcm94eUlkZW50aXR5LnZlcmlmeTJGYWN0b3JBdXRoZW50aWNhdGlvbkxvZ2luKHZlcmlmeTJGYWN0b3JBdXRoUmVxdWVzdER0byk7XG4gICAgfVxuICAgIHJldHVybiB2ZXJpZnkyRmFjdG9yQXV0aCQucGlwZSh0YXAoe1xuICAgICAgZXJyb3I6IGUgPT4ge1xuICAgICAgICB0aGlzLm1lc3NhZ2VCYXJTZXJ2aWNlLmVycm9yKHBhcnNlQXBpRXJyb3JNZXNzYWdlKGUpLCB0aGlzLm1lc3NhZ2VPcHRpb25zKTtcbiAgICAgIH1cbiAgICB9KSk7XG4gIH1cblxuICBAQWN0aW9uKFNldFRGQVNldHVwQWN0aW9uKVxuICBwdWJsaWMgb25TZXRURkFTZXR1cEFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxMb2dpblN0YXRlTW9kZWw+LCB7IHRmYVNldHVwRHRvIH0pIHtcbiAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICB0ZmFTZXR1cDogdGZhU2V0dXBEdG9cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXV0aGVudGljYXRpb25FcnJvck1lc3NhZ2VCYXIoZXJyb3I6IEFwaUV4Y2VwdGlvbikge1xuICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IHBhcnNlQXBpRXJyb3JNZXNzYWdlKGVycm9yKTtcbiAgICBjb25zdCBkYXRhID0gcGFyc2VBcGlFcnJvckRhdGE8QXV0aGVudGljYXRlRXJyb3JSZXNwb25zZUR0bz4oZXJyb3IpO1xuICAgIHRoaXMubWVzc2FnZUJhclNlcnZpY2UuZXJyb3IoZXJyb3JNZXNzYWdlLCB7IHBvc2l0aW9uOiBNZXNzYWdlQmFyUG9zaXRpb24uU3RhdGljLCBtZXNzYWdlUGFyYW1zOiB7IHRlbXBvcmFyeUxvY2tlZE1pbnV0ZXM6IGRhdGE/LnRlbXBvcmFyeUJsb2NrZWRUaW1lIH0gfSk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFyTXNsTG9naW5DYWNoZSgpIHtcbiAgICBjb25zdCBjbGVhckNhY2hlUmVxdWVzdDogQ2xlYXJDYWNoZVJlcXVlc3QgPSB7XG4gICAgICBhY2NvdW50OiB0aGlzLm1zYWxTZXJ2aWNlLmluc3RhbmNlLmdldEFsbEFjY291bnRzKClbMF0sXG4gICAgfTtcbiAgICB0aGlzLm1zYWxTZXJ2aWNlLmluc3RhbmNlLmNsZWFyQ2FjaGUoY2xlYXJDYWNoZVJlcXVlc3QpO1xuICAgIHRoaXMubXNhbFNlcnZpY2UubG9nb3V0KCk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFyU2luZ2xlU2luZ09uQ2FjaGUoc2luZ2xlU2lnbk9uUHJvdmlkZXI6IFNpbmdsZVNpZ25PblByb3ZpZGVyKSB7XG4gICAgc3dpdGNoIChzaW5nbGVTaWduT25Qcm92aWRlcikge1xuICAgICAgY2FzZSBTaW5nbGVTaWduT25Qcm92aWRlci5NaWNyb3NvZnQ6XG4gICAgICAgIHRoaXMuY2xlYXJNc2xMb2dpbkNhY2hlKCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFNpbmdsZVNpZ25PblByb3ZpZGVyLlBpbmdGZWRlcmF0ZTpcbiAgICAgICAgdGhpcy5vcGVuSWRBdXRoU2VydmljZS5zaWduT3V0KCk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBsb2NhbFN0b3JhZ2UuY2xlYXIoKTtcbiAgfVxuXG4gIHByaXZhdGUgdXNlclN0YXR1c0lzQXdhaXRpbmdBY2Nlc3MgPSAoYXV0aFJlc3BvbnNlOiBBdXRoZW50aWNhdGVSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGEpOiBib29sZWFuID0+XG4gICAgYXV0aFJlc3BvbnNlLmRhdGEuc2luZ2xlU2lnbk9uQXV0aGVudGljYXRpb25EdG8/LmlzQXV0aGVudGljYXRlZCA9PT0gZmFsc2UgJiZcbiAgICBhdXRoUmVzcG9uc2UuZGF0YS5zaW5nbGVTaWduT25BdXRoZW50aWNhdGlvbkR0bz8udXNlclN0YXR1cyA9PT0gVXNlclN0YXR1cy5Bd2FpdGluZ0FjY2VzcztcblxuXG4gIEBBY3Rpb24oT3BlbklkQXV0aGV0aWNhdGVBY3Rpb24pXG4gIHB1YmxpYyBvbk9wZW5JZEF1dGhldGljYXRlQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PExvZ2luU3RhdGVNb2RlbD4sIHsgdG9rZW4sIHNpbmdsZVNpZ25PblByb3ZpZGVyLCB0ZW5hbnRJbmZvIH06IE9wZW5JZEF1dGhldGljYXRlQWN0aW9uKSB7XG4gICAgbGV0IGF1dGhlbnRpY2F0ZU9pZGMkOiBPYnNlcnZhYmxlPEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YT47XG4gICAgYXV0aGVudGljYXRlT2lkYyQgPSB0aGlzLnVzZXJzU2VydmljZVByb3h5SWRlbnRpdHkub3BlbklkQXV0aGVudGljYXRlKHRva2VuLCB0ZW5hbnRJbmZvLnRlbmFudE5hbWUpO1xuICAgIHJldHVybiBhdXRoZW50aWNhdGVPaWRjJC5waXBlKHRhcCh7XG4gICAgICBuZXh0OiBhdXRoUmVzcG9uc2UgPT4ge1xuICAgICAgICBpZiAoYXV0aFJlc3BvbnNlLmRhdGEubWVzc2FnZSA9PT0gTG9jYWxpemF0aW9uLnNzb19wZW5kaW5nX2FwcHJvdmFsKSB7XG4gICAgICAgICAgY29uc3QgbWVzc2FnZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KExvY2FsaXphdGlvbi5zc29fcGVuZGluZ19hcHByb3ZhbCk7XG4gICAgICAgICAgdGhpcy5tZXNzYWdlQmFyU2VydmljZS5pbmZvKG1lc3NhZ2UsIHsgcG9zaXRpb246IE1lc3NhZ2VCYXJQb3NpdGlvbi5TdGF0aWMgfSk7XG4gICAgICAgICAgdGhpcy5jbGVhclNpbmdsZVNpbmdPbkNhY2hlKHNpbmdsZVNpZ25PblByb3ZpZGVyKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzcGFya1Nlc3Npb24gPSB0aGlzLmF1dGhTZXJ2aWNlLnByb2Nlc3NBdXRoZW50aWNhdGUoYXV0aFJlc3BvbnNlLmRhdGEpO1xuICAgICAgICBjdHguZGlzcGF0Y2gobmV3IFNldFRlbmFudFVzZXJBY3Rpb24oc3BhcmtTZXNzaW9uKSk7XG5cbiAgICAgICAgaWYgKHRoaXMudXNlclN0YXR1c0lzQXdhaXRpbmdBY2Nlc3MoYXV0aFJlc3BvbnNlKSkge1xuICAgICAgICAgIHRoaXMuY2xlYXJTaW5nbGVTaW5nT25DYWNoZShzaW5nbGVTaWduT25Qcm92aWRlcik7XG4gICAgICAgICAgY29uc3QgbWVzc2FnZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KExvY2FsaXphdGlvbi5zc29fcGVuZGluZ19hcHByb3ZhbCk7XG4gICAgICAgICAgdGhpcy5tZXNzYWdlQmFyU2VydmljZS53YXJuKG1lc3NhZ2UsIHsgcG9zaXRpb246IE1lc3NhZ2VCYXJQb3NpdGlvbi5TdGF0aWMgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgLy8gQWZ0ZXIgYXV0aGVudGljYXRpb24gZ2V0IGFwcCBjb25maWd1cmF0aW9uXG4gICAgICAgICAgdGhpcy5sb2dpblRvU3BhcmsoKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGVycm9yOiBlID0+IHtcbiAgICAgICAgdGhpcy5zaW5nbGVTaW5nT25FcnJvckhhbmRsaW5nKGUpO1xuICAgICAgfVxuICAgIH0pKTtcbiAgfVxuXG4gIHNpbmdsZVNpbmdPbkVycm9ySGFuZGxpbmcoZTogYW55KSB7XG4gICAgaWYgKGUuZXJyb3JNZXNzYWdlID09IExvY2FsaXphdGlvbi5zc29fcGVuZGluZ19hcHByb3ZhbCkge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KExvY2FsaXphdGlvbi5zc29fcGVuZGluZ19hcHByb3ZhbCk7XG4gICAgICB0aGlzLm1lc3NhZ2VCYXJTZXJ2aWNlLmluZm8obWVzc2FnZSwgeyBwb3NpdGlvbjogTWVzc2FnZUJhclBvc2l0aW9uLlN0YXRpYyB9KTtcbiAgICB9XG4gICAgZWxzZSBpZiAoZS5lcnJvck1lc3NhZ2UpIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChlLmVycm9yTWVzc2FnZSk7XG4gICAgICB0aGlzLm1lc3NhZ2VCYXJTZXJ2aWNlLmVycm9yKG1lc3NhZ2UsIHsgcG9zaXRpb246IE1lc3NhZ2VCYXJQb3NpdGlvbi5TdGF0aWMgfSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhpcy5tZXNzYWdlQmFyU2VydmljZS5lcnJvcihwYXJzZUFwaUVycm9yTWVzc2FnZShlKSwgdGhpcy5tZXNzYWdlT3B0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgbG9naW5Ub1NwYXJrKCkge1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IExvYWRBcHBDb25maWd1cmF0aW9uQWN0aW9uKCkpO1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IEhlYWx0aEFjdGlvbigpKTtcbiAgICB0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS51cGRhdGVMb2dnZWRUZW5hbnQoKTtcbiAgICB0aGlzLmxvZ2luU2VydmljZS5sb2dpblRvU3BhcmsoKTtcbiAgfVxufVxuIl19
|