@sambath999/localize-token 12.4.12 → 12.4.13
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/sambath999-localize-token.umd.js +44 -138
- package/bundles/sambath999-localize-token.umd.js.map +1 -1
- package/components/localize-token-login-dialog.component.d.ts +7 -19
- package/esm2015/components/localize-token-login-dialog.component.js +29 -108
- package/esm2015/models/localize-token-models.js +1 -1
- package/fesm2015/sambath999-localize-token.js +28 -107
- package/fesm2015/sambath999-localize-token.js.map +1 -1
- package/models/localize-token-models.d.ts +1 -1
- package/package.json +2 -2
- package/sambath999-localize-token.metadata.json +1 -1
|
@@ -1,67 +1,46 @@
|
|
|
1
1
|
import { __awaiter } from "tslib";
|
|
2
|
-
import { HttpClient } from "@angular/common/http";
|
|
3
2
|
import { ChangeDetectorRef, Component, Injector, ViewEncapsulation, } from "@angular/core";
|
|
4
3
|
import { MessageService } from "primeng/api";
|
|
5
4
|
import { DynamicDialogConfig, DynamicDialogRef } from "primeng/dynamicdialog";
|
|
6
5
|
import { DomSanitizer } from "@angular/platform-browser";
|
|
7
|
-
import {
|
|
8
|
-
var ELoginState;
|
|
9
|
-
(function (ELoginState) {
|
|
10
|
-
ELoginState[ELoginState["Requesting"] = 0] = "Requesting";
|
|
11
|
-
ELoginState[ELoginState["Success"] = 1] = "Success";
|
|
12
|
-
ELoginState[ELoginState["Error"] = 2] = "Error";
|
|
13
|
-
})(ELoginState || (ELoginState = {}));
|
|
6
|
+
import { LocalizeApiLoginService, waitFor } from "@sambath999/localize-api";
|
|
14
7
|
export class LocalizeTokenLoginDialogComponent {
|
|
15
|
-
constructor(messageService, cdt, dlgRef, dlgConfig,
|
|
8
|
+
constructor(messageService, cdt, dlgRef, dlgConfig, sanitizer, injector) {
|
|
16
9
|
this.messageService = messageService;
|
|
17
10
|
this.cdt = cdt;
|
|
18
11
|
this.dlgRef = dlgRef;
|
|
19
12
|
this.dlgConfig = dlgConfig;
|
|
20
|
-
this.httpClient = httpClient;
|
|
21
13
|
this.sanitizer = sanitizer;
|
|
22
14
|
this.injector = injector;
|
|
23
15
|
this.messageKey = "$login-dlg";
|
|
24
|
-
this.loading = false;
|
|
25
|
-
this.success = false;
|
|
26
|
-
this.loginBroadcastChannel = "bc-localize-login";
|
|
27
|
-
this.sourceId = `${Date.now()}-${Math.random().toString(36).slice(2)}`;
|
|
28
|
-
this.clickLogout = () => { var _a; return (_a = this.logout) === null || _a === void 0 ? void 0 : _a.call(this); };
|
|
29
|
-
this.tokenService = this.injector.get(LocalizeApiTokenService);
|
|
30
|
-
this.broadcastService = this.injector.get(LocalizeApiBroadcastService);
|
|
31
|
-
this.apiService = this.injector.get(LocalizeApiService);
|
|
32
|
-
this.decodeToken = this.tokenService.decodeRefreshToken;
|
|
33
16
|
this.loginConfig = this.dlgConfig.data.loginConfig;
|
|
17
|
+
this.apiLoginService = this.injector.get(LocalizeApiLoginService);
|
|
34
18
|
this.properties = this.loginConfig.properties;
|
|
35
|
-
this.
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
console.warn('Ignoring login state message with invalid payload or from same source', payload);
|
|
39
|
-
return;
|
|
40
|
-
}
|
|
41
|
-
switch (payload.state) {
|
|
42
|
-
case ELoginState.Requesting:
|
|
43
|
-
this.loading = true;
|
|
44
|
-
this.success = false;
|
|
45
|
-
break;
|
|
46
|
-
case ELoginState.Success:
|
|
47
|
-
this.apiService.clearRequiredLoginStateAfterLogin();
|
|
48
|
-
this.loginSuccess();
|
|
49
|
-
break;
|
|
50
|
-
case ELoginState.Error:
|
|
51
|
-
this.showMessage("error", (_a = payload.message) !== null && _a !== void 0 ? _a : "Login failed");
|
|
52
|
-
break;
|
|
53
|
-
}
|
|
54
|
-
});
|
|
19
|
+
this.decodeToken = this.apiLoginService.decodedToken;
|
|
20
|
+
this.logout = this.loginConfig.logoutFunc;
|
|
21
|
+
this.configure();
|
|
55
22
|
}
|
|
56
|
-
get
|
|
57
|
-
|
|
23
|
+
get loading() { return this.apiLoginService.isLoading; }
|
|
24
|
+
get success() { return this.apiLoginService.isSuccess; }
|
|
25
|
+
configure() {
|
|
26
|
+
var _a, _b;
|
|
58
27
|
this.dlgConfig.closable = false;
|
|
59
28
|
this.dlgConfig.dismissableMask = false;
|
|
60
29
|
this.dlgConfig.modal = true;
|
|
61
|
-
this.
|
|
62
|
-
|
|
30
|
+
this.apiLoginService.configure({
|
|
31
|
+
loginUrl: this.loginConfig.loginUrl,
|
|
32
|
+
onSuccess: this.loginSuccess.bind(this),
|
|
33
|
+
onFailure: (msg) => this.showMessage("error", msg),
|
|
34
|
+
onError: (msg) => this.showMessage("error", msg),
|
|
35
|
+
loginFunction: this.loginConfig.loginFunction,
|
|
36
|
+
refreshTokenTtl: this.loginConfig.expire,
|
|
37
|
+
passwordResolver: () => this.password,
|
|
38
|
+
passwordValidator: (_b = (_a = this.loginConfig.properties) === null || _a === void 0 ? void 0 : _a.passwordValidator) === null || _b === void 0 ? void 0 : _b.bind(this),
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
ngOnInit() {
|
|
63
42
|
if (!this.decodeToken) {
|
|
64
|
-
this.showMessage("error", "Token
|
|
43
|
+
this.showMessage("error", "Invalid Token. Please login again.");
|
|
65
44
|
setTimeout(() => { var _a; return (_a = this.logout) === null || _a === void 0 ? void 0 : _a.call(this); }, 2000);
|
|
66
45
|
}
|
|
67
46
|
}
|
|
@@ -70,85 +49,28 @@ export class LocalizeTokenLoginDialogComponent {
|
|
|
70
49
|
}
|
|
71
50
|
loginSuccess() {
|
|
72
51
|
return __awaiter(this, void 0, void 0, function* () {
|
|
73
|
-
this.success = true;
|
|
74
52
|
yield waitFor(2000);
|
|
75
53
|
this.dlgRef.close(true);
|
|
76
54
|
});
|
|
77
55
|
}
|
|
78
56
|
clickLogin() {
|
|
79
|
-
var _a, _b, _c;
|
|
80
57
|
return __awaiter(this, void 0, void 0, function* () {
|
|
81
|
-
|
|
82
|
-
return this.showMessage("error", "Password is required and must be at least 6 characters");
|
|
83
|
-
}
|
|
84
|
-
this.publishLoginState(ELoginState.Requesting);
|
|
85
|
-
yield waitFor(300);
|
|
86
|
-
this.loading = true;
|
|
87
|
-
const loginRes = yield this.login();
|
|
88
|
-
if (!(loginRes === null || loginRes === void 0 ? void 0 : loginRes.status)) {
|
|
89
|
-
const message = (_a = loginRes === null || loginRes === void 0 ? void 0 : loginRes.message) !== null && _a !== void 0 ? _a : "An error occurred";
|
|
90
|
-
this.publishLoginState(ELoginState.Error, message);
|
|
91
|
-
return this.showMessage("error", message);
|
|
92
|
-
}
|
|
93
|
-
this.tokenService.accessToken = loginRes.tokens.accessToken;
|
|
94
|
-
const cookieOptions = { expires: (_b = this.loginConfig.expire) !== null && _b !== void 0 ? _b : 365 };
|
|
95
|
-
LocalizeApiToken.storage.set(((_c = this.config.refreshToken) === null || _c === void 0 ? void 0 : _c.name) || '', loginRes.tokens.refreshToken, cookieOptions);
|
|
96
|
-
this.apiService.clearRequiredLoginStateAfterLogin();
|
|
97
|
-
this.publishLoginState(ELoginState.Success);
|
|
98
|
-
this.loginSuccess();
|
|
58
|
+
yield this.apiLoginService.clickLogin();
|
|
99
59
|
});
|
|
100
60
|
}
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
sourceId: this.sourceId,
|
|
105
|
-
message,
|
|
106
|
-
});
|
|
107
|
-
}
|
|
108
|
-
login() {
|
|
109
|
-
var _a, _b, _c;
|
|
110
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
111
|
-
if (!((_a = this.loginUrl) === null || _a === void 0 ? void 0 : _a.trim().length)) {
|
|
112
|
-
this.showMessage("error", "Login url is required");
|
|
113
|
-
throw new Error("Login url is required");
|
|
114
|
-
}
|
|
115
|
-
try {
|
|
116
|
-
if (this.loginConfig.loginFunction) {
|
|
117
|
-
console.log("Using custom login function");
|
|
118
|
-
return yield this.loginConfig.loginFunction((_c = (_b = this.decodeToken) === null || _b === void 0 ? void 0 : _b.email) !== null && _c !== void 0 ? _c : '', this.password.trim(), this.getHeaders());
|
|
119
|
-
}
|
|
120
|
-
return yield new Promise((resolve, reject) => this.httpClient.post(this.loginUrl, { password: this.password.trim() }, { headers: this.getHeaders() }).subscribe({ next: resolve, error: reject }));
|
|
121
|
-
}
|
|
122
|
-
catch (e) {
|
|
123
|
-
this.showMessage("error", e.message);
|
|
124
|
-
return null;
|
|
125
|
-
}
|
|
126
|
-
});
|
|
127
|
-
}
|
|
128
|
-
getHeaders() {
|
|
129
|
-
var _a, _b;
|
|
130
|
-
return {
|
|
131
|
-
[LocalizeApiToken.httpHeaders.X_REFRESH_TOKEN]: (_a = this.tokenService.refreshToken) !== null && _a !== void 0 ? _a : "",
|
|
132
|
-
[LocalizeApiToken.httpHeaders.X_TENANT]: (_b = this.tokenService.tenantToken) !== null && _b !== void 0 ? _b : "",
|
|
133
|
-
};
|
|
134
|
-
}
|
|
135
|
-
get isValidPassword() {
|
|
136
|
-
this.loading = false;
|
|
137
|
-
return this.properties.passwordValidator
|
|
138
|
-
? this.properties.passwordValidator(this.password)
|
|
139
|
-
: this.password && this.password.trim().length >= 6 && this.password.trim().length <= 50;
|
|
61
|
+
clickLogout() {
|
|
62
|
+
var _a;
|
|
63
|
+
(_a = this.logout) === null || _a === void 0 ? void 0 : _a.call(this);
|
|
140
64
|
}
|
|
141
65
|
showMessage(severity, summary) {
|
|
142
66
|
this.messageService.add({ key: this.messageKey, severity, summary });
|
|
143
|
-
this.loading = false;
|
|
144
67
|
}
|
|
145
68
|
get sanitizedTitle() {
|
|
146
69
|
var _a;
|
|
147
70
|
return this.sanitizer.bypassSecurityTrustHtml((_a = this.properties.title) !== null && _a !== void 0 ? _a : '');
|
|
148
71
|
}
|
|
149
72
|
ngOnDestroy() {
|
|
150
|
-
|
|
151
|
-
(_a = this.removeLoginListener) === null || _a === void 0 ? void 0 : _a.call(this);
|
|
73
|
+
this.apiLoginService.unConfigure();
|
|
152
74
|
}
|
|
153
75
|
}
|
|
154
76
|
LocalizeTokenLoginDialogComponent.decorators = [
|
|
@@ -467,8 +389,7 @@ LocalizeTokenLoginDialogComponent.ctorParameters = () => [
|
|
|
467
389
|
{ type: ChangeDetectorRef },
|
|
468
390
|
{ type: DynamicDialogRef },
|
|
469
391
|
{ type: DynamicDialogConfig },
|
|
470
|
-
{ type: HttpClient },
|
|
471
392
|
{ type: DomSanitizer },
|
|
472
393
|
{ type: Injector }
|
|
473
394
|
];
|
|
474
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemUtdG9rZW4tbG9naW4tZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wYWNrYWdlL2NvbXBvbmVudHMvbG9jYWxpemUtdG9rZW4tbG9naW4tZGlhbG9nLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULFFBQVEsRUFHUixpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM3QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUU5RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekQsT0FBTyxFQUFjLGtCQUFrQixFQUFFLDJCQUEyQixFQUFFLGdCQUFnQixFQUFFLHVCQUF1QixFQUFFLE9BQU8sRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRzNKLElBQUssV0FJSjtBQUpELFdBQUssV0FBVztJQUNkLHlEQUFVLENBQUE7SUFDVixtREFBTyxDQUFBO0lBQ1AsK0NBQUssQ0FBQTtBQUNQLENBQUMsRUFKSSxXQUFXLEtBQVgsV0FBVyxRQUlmO0FBK1RELE1BQU0sT0FBTyxpQ0FBaUM7SUFvQjVDLFlBQ21CLGNBQThCLEVBQzlCLEdBQXNCLEVBQ3RCLE1BQXdCLEVBQ3hCLFNBQThCLEVBQzlCLFVBQXNCLEVBQ3RCLFNBQXVCLEVBQ3ZCLFFBQWtCO1FBTmxCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUN0QixXQUFNLEdBQU4sTUFBTSxDQUFrQjtRQUN4QixjQUFTLEdBQVQsU0FBUyxDQUFxQjtRQUM5QixlQUFVLEdBQVYsVUFBVSxD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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbVBSO2FBZ0VGOzs7WUF6VVEsY0FBYztZQVByQixpQkFBaUI7WUFRVyxnQkFBZ0I7WUFBckMsbUJBQW1CO1lBVm5CLFVBQVU7WUFZVixZQUFZO1lBUm5CLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XHJcbmltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIEluamVjdG9yLFxyXG4gIE9uRGVzdHJveSxcclxuICBPbkluaXQsXHJcbiAgVmlld0VuY2Fwc3VsYXRpb24sXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgTWVzc2FnZVNlcnZpY2UgfSBmcm9tIFwicHJpbWVuZy9hcGlcIjtcclxuaW1wb3J0IHsgRHluYW1pY0RpYWxvZ0NvbmZpZywgRHluYW1pY0RpYWxvZ1JlZiB9IGZyb20gXCJwcmltZW5nL2R5bmFtaWNkaWFsb2dcIjtcclxuaW1wb3J0IHsgSUxvZ2luRGlhbG9nQ29uZmlnLCBJTG9naW5EaWFsb2dQcm9wZXJ0aWVzIH0gZnJvbSBcIi4uL21vZGVscy9sb2NhbGl6ZS10b2tlbi1tb2RlbHNcIjtcclxuaW1wb3J0IHsgRG9tU2FuaXRpemVyIH0gZnJvbSBcIkBhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXJcIjtcclxuaW1wb3J0IHsgSnd0UGF5bG9hZCwgTG9jYWxpemVBcGlTZXJ2aWNlLCBMb2NhbGl6ZUFwaUJyb2FkY2FzdFNlcnZpY2UsIExvY2FsaXplQXBpVG9rZW4sIExvY2FsaXplQXBpVG9rZW5TZXJ2aWNlLCB3YWl0Rm9yIH0gZnJvbSBcIkBzYW1iYXRoOTk5L2xvY2FsaXplLWFwaVwiO1xyXG5cclxuXHJcbmVudW0gRUxvZ2luU3RhdGUge1xyXG4gIFJlcXVlc3RpbmcsXHJcbiAgU3VjY2VzcyxcclxuICBFcnJvclxyXG59XHJcblxyXG5pbnRlcmZhY2UgSUxvZ2luQnJvYWRjYXN0TWVzc2FnZSB7XHJcbiAgc3RhdGU6IEVMb2dpblN0YXRlO1xyXG4gIHNvdXJjZUlkOiBzdHJpbmc7XHJcbiAgcmVxdWVzdElkPzogc3RyaW5nO1xyXG4gIGVtaXR0ZWRBdD86IG51bWJlcjtcclxuICBtZXNzYWdlPzogc3RyaW5nO1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzdHlsZXM6IFtgXHJcbiAgI2xvZ2luLWRsZy13cmFwIHtcclxuICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgbWF4LXdpZHRoOiA0MDBweDtcclxuICAgIG1hcmdpbjogMCBhdXRvO1xyXG4gICAgcGFkZGluZzogMzBweDtcclxuICAgIGhlaWdodDogMTAwJTtcclxuICB9XHJcbiAgXHJcbiAgLmxvZ2luLWRsZy1lbG0ge1xyXG4gICAgbWFyZ2luLXRvcDogMXJlbTtcclxuICB9XHJcblxyXG4gIC5sb2dpbi1kbGctZWxtLmxvZ2luLWRsZy1zdWdnZXN0IHtcclxuICAgIGRpc3BsYXk6IGZsZXggO1xyXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgIHVzZXItc2VsZWN0OiBub25lO1xyXG4gICAgYm9yZGVyLWJvdHRvbTogc29saWQgMXB4ICNkZGQ7XHJcbiAgICBib3JkZXItcmFkaXVzOiA1cHg7XHJcbiAgICBwYWRkaW5nOiA1cHggMTBweDtcclxuICAgIGJhY2tncm91bmQ6ICNmOWY5Zjk7XHJcbiAgICBib3gtc2hhZG93OiAxcHggNXB4IDEwcHggLTEycHggIzAwMDtcclxuICB9XHJcbiAgXHJcbiAgI2xvZ2luLWRsZy1oZWFkZXIge1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XHJcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XHJcbiAgfVxyXG4gIFxyXG4gICNsb2dpbi1kbGctaGVhZGVyIGgzIHtcclxuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xyXG4gICAgZm9udC1zaXplOiAwLjlyZW07XHJcbiAgICBjb2xvcjogb3JhbmdlO1xyXG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gIH1cclxuICBcclxuICAjbG9naW4tbG9nbyB7XHJcbiAgICBoZWlnaHQ6IDU1cHg7XHJcbiAgICB3aWR0aDogNTVweDtcclxuICAgIC8qIGJhY2tncm91bmQ6IHVybChcIi9hc3NldHMvaW1hZ2VzL2xvZ28tMzAwcHgucG5nXCIpIG5vLXJlcGVhdDsgKi9cclxuICAgIGJhY2tncm91bmQtc2l6ZTogY29udGFpbiAhaW1wb3J0YW50O1xyXG4gIH1cclxuICBcclxuICAjbG9naW4tZGxnLWNvbnRlbnQgLnAtaW5wdXRncm91cCB7XHJcbiAgICBoZWlnaHQ6IDQ1cHg7XHJcbiAgfVxyXG4gIFxyXG4gICNsb2dpbi1kbGctY29udGVudCAucC1pbnB1dGdyb3VwIC5wLWlucHV0Z3JvdXAtYWRkb24ge1xyXG4gICAgaGVpZ2h0OiA0NXB4O1xyXG4gICAgYm9yZGVyLXJhZGl1czogMTVweCAwIDAgMTVweDtcclxuICAgIHdpZHRoOiA1MHB4O1xyXG4gIH1cclxuICAjbG9naW4tZGxnLWNvbnRlbnQgKntcclxuICAgIGZvbnQtc2l6ZTogLjlyZW07XHJcbiAgICAvKiBmb250LWZhbWlseTogJ0xleGVuZCcsICdSb2JvdG8nLCBzYW5zLXNlcmlmLCAnbWF0ZXJpYWwtaWNvbnMtcm91bmQnOyAqL1xyXG4gIH1cclxuICBcclxuICAjbG9naW4tZGxnLWNvbnRlbnQgLnAtaW5wdXRncm91cCAucC1pbnB1dGdyb3VwLWFkZG9uICoge1xyXG4gICAgZm9udC1zaXplOiAxcmVtO1xyXG4gIH1cclxuICBcclxuICAjbG9naW4tZGxnLWNvbnRlbnQgLnAtaW5wdXRncm91cCBpbnB1dCB7XHJcbiAgICBoZWlnaHQ6IDQ1cHg7XHJcbiAgICBib3JkZXItcmFkaXVzOiAwIDE1cHggMTVweCAwO1xyXG4gIH1cclxuICBcclxuICAjbG9naW4tZGxnLWNvbnRlbnQgYnV0dG9uIHtcclxuICAgIGhlaWdodDogNDVweDtcclxuICAgIGJvcmRlci1yYWRpdXM6IDE1cHg7XHJcbiAgfVxyXG4gIFxyXG4gIC8qY2hlY2sgYW5pbWF0aW9uIGJsb2NrKi9cclxuICBcclxuICAuY2hlY2stYW5pbWF0aW9uLXdyYXAge1xyXG4gICAgdG9wOiAwO1xyXG4gICAgbGVmdDogMDtcclxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gICAgd2lkdGg6IDEwMCU7XHJcbiAgICBoZWlnaHQ6IGNhbGMoMTAwJSAtIDIwMHB4KTtcclxuICAgIG1pbi1oZWlnaHQ6IDQwMHB4O1xyXG4gIH1cclxuICBcclxuICAuY2hlY2stbWFpbi1jb250YWluZXIge1xyXG4gICAgd2lkdGg6IDEwMCU7XHJcbiAgICBoZWlnaHQ6IDEwMHZoO1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGZsZXgtZmxvdzogY29sdW1uO1xyXG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XHJcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gIH1cclxuICBcclxuICAuY2hlY2stY29udGFpbmVyIHtcclxuICAgIHdpZHRoOiA2LjI1cmVtO1xyXG4gICAgaGVpZ2h0OiA3LjVyZW07XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgZmxleC1mbG93OiBjb2x1bW47XHJcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xyXG4gIH1cclxuICBcclxuICAuY2hlY2stY29udGFpbmVyIC5jaGVjay1iYWNrZ3JvdW5kIHtcclxuICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgaGVpZ2h0OiBjYWxjKDEwMCUgLSAxLjI1cmVtKTtcclxuICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20gcmlnaHQsICM1ZGU1OTMsICM0MWQ2N2MpO1xyXG4gICAgYm94LXNoYWRvdzogMHB4IDBweCAwcHggNjVweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjUpIGluc2V0LCAwcHggMHB4IDBweCA2NXB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNSkgaW5zZXQ7XHJcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDAuODQpO1xyXG4gICAgYm9yZGVyLXJhZGl1czogNTAlO1xyXG4gICAgYW5pbWF0aW9uOiBhbmltYXRlQ29udGFpbmVyIDAuNzVzIGVhc2Utb3V0IGZvcndhcmRzIDAuNzVzO1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuICAgIG9wYWNpdHk6IDA7XHJcbiAgfVxyXG4gIFxyXG4gIC5jaGVjay1jb250YWluZXIgLmNoZWNrLWJhY2tncm91bmQgc3ZnIHtcclxuICAgIHdpZHRoOiA2NSU7XHJcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMC4yNXJlbSk7XHJcbiAgICBzdHJva2UtZGFzaGFycmF5OiA4MDtcclxuICAgIHN0cm9rZS1kYXNob2Zmc2V0OiA4MDtcclxuICAgIGFuaW1hdGlvbjogYW5pbWF0ZUNoZWNrIDAuMzVzIGZvcndhcmRzIDEuMjVzIGVhc2Utb3V0O1xyXG4gICAgbWluLXdpZHRoOiBhdXRvICFpbXBvcnRhbnQ7XHJcbiAgfVxyXG4gIFxyXG4gIC5jaGVjay1jb250YWluZXIgLmNoZWNrLXNoYWRvdyB7XHJcbiAgICBib3R0b206IGNhbGMoLTE1JSAtIDVweCk7XHJcbiAgICBsZWZ0OiAwO1xyXG4gICAgYm9yZGVyLXJhZGl1czogNTAlO1xyXG4gICAgYmFja2dyb3VuZDogcmFkaWFsLWdyYWRpZW50KGNsb3Nlc3Qtc2lkZSwgcmdiYSg3MywgMjE4LCAxMzEsIDEpLCB0cmFuc3BhcmVudCk7XHJcbiAgICBhbmltYXRpb246IGFuaW1hdGVTaGFkb3cgMC43NXMgZWFzZS1vdXQgZm9yd2FyZHMgMC43NXM7XHJcbiAgfVxyXG4gIFxyXG4gIEBrZXlmcmFtZXMgYW5pbWF0ZUNvbnRhaW5lciB7XHJcbiAgICAwJSB7XHJcbiAgICAgIG9wYWNpdHk6IDA7XHJcbiAgICAgIHRyYW5zZm9ybTogc2NhbGUoMCk7XHJcbiAgICAgIGJveC1zaGFkb3c6IDBweCAwcHggMHB4IDY1cHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjI1KSBpbnNldCwgMHB4IDBweCAwcHggNjVweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjUpIGluc2V0O1xyXG4gICAgfVxyXG4gIFxyXG4gICAgMjUlIHtcclxuICAgICAgb3BhY2l0eTogMTtcclxuICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLjkpO1xyXG4gICAgICBib3gtc2hhZG93OiAwcHggMHB4IDBweCA2NXB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNSkgaW5zZXQsIDBweCAwcHggMHB4IDY1cHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjI1KSBpbnNldDtcclxuICAgIH1cclxuICBcclxuICAgIDQzLjc1JSB7XHJcbiAgICAgIHRyYW5zZm9ybTogc2NhbGUoMS4xNSk7XHJcbiAgICAgIGJveC1zaGFkb3c6IDBweCAwcHggMHB4IDQzLjMzNHB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNSkgaW5zZXQsIDBweCAwcHggMHB4IDY1cHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjI1KSBpbnNldDtcclxuICAgIH1cclxuICBcclxuICAgIDYyLjUlIHtcclxuICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcclxuICAgICAgYm94LXNoYWRvdzogMHB4IDBweCAwcHggMHB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNSkgaW5zZXQsIDBweCAwcHggMHB4IDIxLjY2N3B4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNSkgaW5zZXQ7XHJcbiAgICB9XHJcbiAgXHJcbiAgICA4MS4yNSUge1xyXG4gICAgICBib3gtc2hhZG93OiAwcHggMHB4IDBweCAwcHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjI1KSBpbnNldCwgMHB4IDBweCAwcHggMHB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNSkgaW5zZXQ7XHJcbiAgICB9XHJcbiAgXHJcbiAgICAxMDAlIHtcclxuICAgICAgb3BhY2l0eTogMTtcclxuICAgICAgYm94LXNoYWRvdzogMHB4IDBweCAwcHggMHB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNSkgaW5zZXQsIDBweCAwcHggMHB4IDBweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjUpIGluc2V0O1xyXG4gICAgfVxyXG4gIH1cclxuICBcclxuICBAa2V5ZnJhbWVzIGFuaW1hdGVDaGVjayB7XHJcbiAgICBmcm9tIHtcclxuICAgICAgc3Ryb2tlLWRhc2hvZmZzZXQ6IDgwO1xyXG4gICAgfVxyXG4gIFxyXG4gICAgdG8ge1xyXG4gICAgICBzdHJva2UtZGFzaG9mZnNldDogMDtcclxuICAgIH1cclxuICB9XHJcbiAgXHJcbiAgQGtleWZyYW1lcyBhbmltYXRlU2hhZG93IHtcclxuICAgIDAlIHtcclxuICAgICAgb3BhY2l0eTogMDtcclxuICAgICAgd2lkdGg6IDEwMCU7XHJcbiAgICAgIGhlaWdodDogMTUlO1xyXG4gICAgfVxyXG4gIFxyXG4gICAgMjUlIHtcclxuICAgICAgb3BhY2l0eTogMC4yNTtcclxuICAgIH1cclxuICBcclxuICAgIDQzLjc1JSB7XHJcbiAgICAgIHdpZHRoOiA0MCU7XHJcbiAgICAgIGhlaWdodDogNyU7XHJcbiAgICAgIG9wYWNpdHk6IDAuMzU7XHJcbiAgICB9XHJcbiAgXHJcbiAgICAxMDAlIHtcclxuICAgICAgd2lkdGg6IDg1JTtcclxuICAgICAgaGVpZ2h0OiAxNSU7XHJcbiAgICAgIG9wYWNpdHk6IDAuMjU7XHJcbiAgICB9XHJcbiAgfVxyXG4gICNsb2dpbi1kbGctd3JhcCAubG9hZGVyLXdyYXAge1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgIGhlaWdodDoxMDAlO1xyXG4gICAgd2lkdGg6MTAwJTtcclxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgIHRvcDogMDtcclxuICAgIGxlZnQ6IDA7XHJcbiAgICB6LWluZGV4OiAxMDA7XHJcbiAgICBiYWNrZ3JvdW5kOiAjZmZmZmZmNDI7XHJcbiAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMXB4KTtcclxuICB9XHJcblxyXG4gICNsb2dpbi1kbGctd3JhcCAubG9naW4tZGxnLWxvYWRlciB7XHJcbiAgICBib3JkZXI6IDE1cHggc29saWQgI2U3ZTdlNztcclxuICAgIGJvcmRlci10b3A6IDE1cHggc29saWQgIzUyZGJhMTtcclxuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcclxuICAgIHdpZHRoOiAxMDBweDtcclxuICAgIGhlaWdodDogMTAwcHg7XHJcbiAgICBhbmltYXRpb246IHNwaW5sb2FkZXIgMnMgbGluZWFyIGluZmluaXRlO1xyXG4gIH1cclxuXHJcbiAgI2xvZ2luLWRsZy13cmFwIC5sb2FkZXItd3JhcDo6YmVmb3JlIHtcclxuICAgIGNvbnRlbnQ6IFwiXCI7XHJcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICB3aWR0aDogNzBweDtcclxuICAgIGhlaWdodDogNzBweDtcclxuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xyXG4gICAgei1pbmRleDogMTtcclxuICAgIGJvcmRlcjogMTVweCBzb2xpZCAjZTdlN2U3MDA7XHJcbiAgICBib3JkZXItdG9wOiAxNXB4IHNvbGlkICM1MmRiYTFjOTtcclxuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcclxuICAgIGFuaW1hdGlvbjogc3BpbmxvYWRlciAuNzVzIGxpbmVhciBpbmZpbml0ZTtcclxuICB9XHJcblxyXG4gIEBrZXlmcmFtZXMgc3BpbmxvYWRlciB7XHJcbiAgICAwJSB7IHRyYW5zZm9ybTogcm90YXRlKDBkZWcpOyB9XHJcbiAgICAxMDAlIHsgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTsgfVxyXG4gIH1cclxuICBgXSxcclxuICB0ZW1wbGF0ZTogYDxwLXRvYXN0IGtleT1cIiRsb2dpbi1kbGdcIiBwb3NpdGlvbj1cInRvcC1jZW50ZXJcIj48L3AtdG9hc3Q+XHJcbiAgPGRpdiBpZD1cImxvZ2luLWRsZy13cmFwXCI+XHJcbiAgICA8ZGl2IGlkPVwibG9naW4tZGxnLWhlYWRlclwiPlxyXG4gICAgICA8ZGl2IGlkPVwibG9naW4tbG9nb1wiIGNsYXNzPVwicC1tYi0yXCIgc3R5bGU9XCJiYWNrZ3JvdW5kOiB1cmwoJ3t7cHJvcGVydGllcy5sb2dvSW1hZ2V9fScpIG5vLXJlcGVhdFwiPjwvZGl2PlxyXG4gICAgICA8aDMgKm5nSWY9XCIhc3VjY2Vzc1wiIFtpbm5lckhUTUxdPVwic2FuaXRpemVkVGl0bGVcIj48L2gzPlxyXG4gICAgICA8aDMgKm5nSWY9XCJzdWNjZXNzXCIgc3R5bGU9XCJjb2xvcjpncmVlbiAhaW1wb3J0YW50O1wiPnt7cHJvcGVydGllcy5sb2dpblN1Y2Nlc3NNZXNzYWdlfX08L2gzPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGlkPVwibG9naW4tZGxnLWNvbnRlbnRcIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFzdWNjZXNzXCI+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cImxvYWRpbmdcIiBjbGFzcz1cImxvYWRlci13cmFwXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibG9naW4tZGxnLWxvYWRlclwiPjwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJsb2dpbi1kbGctZWxtXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicC1pbnB1dGdyb3VwXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicC1pbnB1dGdyb3VwLWFkZG9uXCI+XHJcbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1yb3VuZFwiPnBlcnNvbjwvaT5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8aW5wdXQgZGlzYWJsZWQgcElucHV0VGV4dCB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPVwie3twcm9wZXJ0aWVzLnVzZXJuYW1lPy5wbGFjZUhvbGRlcn19XCIgW3ZhbHVlXT1cImRlY29kZVRva2VuPy5lbWFpbFwiIC8+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICBcclxuICAgICAgICA8ZGl2IGNsYXNzPVwibG9naW4tZGxnLWVsbVwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInAtaW5wdXRncm91cFwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInAtaW5wdXRncm91cC1hZGRvblwiPlxyXG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtcm91bmRcIj5sb2NrPC9pPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDxpbnB1dCBbZGlzYWJsZWRdPVwibG9hZGluZ1wiIChrZXlkb3duLmVudGVyKT1cImNsaWNrTG9naW4oKVwiIHBJbnB1dFRleHQgdHlwZT1cInBhc3N3b3JkXCIgXHJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7e3Byb3BlcnRpZXMucGFzc3dvcmQ/LnBsYWNlSG9sZGVyfX1cIiBbKG5nTW9kZWwpXT1cInBhc3N3b3JkXCJcclxuICAgICAgICAgICAgICBhdXRvZm9jdXMgLz5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJsb2dpbi1kbGctZWxtXCI+XHJcbiAgICAgICAgICA8YnV0dG9uIHN0eWxlPVwid2lkdGg6IDEwMCU7XCIgcEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgbGFiZWw9XCJ7e3Byb3BlcnRpZXMubG9naW5CdXR0b24/LnBsYWNlSG9sZGVyfX1cIiAoY2xpY2spPVwiY2xpY2tMb2dpbigpXCJcclxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFwYXNzd29yZCB8fCBsb2FkaW5nXCI+PC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImxvZ2luLWRsZy1lbG0gbG9naW4tZGxnLXN1Z2dlc3RcIiBzdHlsZT1cImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczogY2VudGVyO3VzZXItc2VsZWN0OiBub25lO1wiPlxyXG4gICAgICAgICAgPHNwYW4+e3twcm9wZXJ0aWVzLmxvZ291dEJ1dHRvbj8ubWVzc2FnZX19PC9zcGFuPlxyXG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInAtYnV0dG9uLXRleHRcIiBwQnV0dG9uIHR5cGU9XCJidXR0b25cIiBsYWJlbD1cInt7cHJvcGVydGllcy5sb2dvdXRCdXR0b24/LnBsYWNlSG9sZGVyfX1cIiBcclxuICAgICAgICAgICAgKGNsaWNrKT1cImNsaWNrTG9nb3V0KClcIj48L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgXHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzdWNjZXNzXCI+XHJcbiAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi10b3A6MzVweDtcIj48L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2stYW5pbWF0aW9uLXdyYXBcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVjay1tYWluLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2stY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrLWJhY2tncm91bmRcIj5cclxuICAgICAgICAgICAgICAgIDxzdmcgdmlld0JveD1cIjAgMCA2NSA1MVwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTcgMjVMMjcuMzA3NyA0NEw1OC41IDdcIiBzdHJva2U9XCJ3aGl0ZVwiIHN0cm9rZS13aWR0aD1cIjEzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48L3BhdGg+XHJcbiAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5gLFxyXG4gIHNlbGVjdG9yOiBcImFwcC1sb2NhbGl6ZS1sb2dpbmRsZ1wiLFxyXG4gIHByb3ZpZGVyczogW01lc3NhZ2VTZXJ2aWNlXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTG9jYWxpemVUb2tlbkxvZ2luRGlhbG9nQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIHJlYWRvbmx5IG1lc3NhZ2VLZXkgPSBcIiRsb2dpbi1kbGdcIjtcclxuICBwYXNzd29yZDogYW55O1xyXG4gIHJlYWRvbmx5IGRlY29kZVRva2VuOiBKd3RQYXlsb2FkIHwgbnVsbDtcclxuICBsb2FkaW5nID0gZmFsc2U7XHJcbiAgc3VjY2VzcyA9IGZhbHNlO1xyXG4gIHByaXZhdGUgZ2V0IGNvbmZpZygpIHsgcmV0dXJuIHRoaXMudG9rZW5TZXJ2aWNlLmNvbmZpZzsgfVxyXG4gIHByaXZhdGUgcmVhZG9ubHkgbG9naW5Db25maWc6IElMb2dpbkRpYWxvZ0NvbmZpZ1xyXG5cclxuICBwcml2YXRlIGxvZ291dD86ICgpID0+IGFueVxyXG4gIHByaXZhdGUgbG9naW5Vcmw/OiBzdHJpbmc7XHJcbiAgcmVhZG9ubHkgcHJvcGVydGllczogSUxvZ2luRGlhbG9nUHJvcGVydGllcztcclxuICBwcml2YXRlIHJlYWRvbmx5IHJlbW92ZUxvZ2luTGlzdGVuZXI/OiAoKSA9PiB2b2lkO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgbG9naW5Ccm9hZGNhc3RDaGFubmVsID0gXCJiYy1sb2NhbGl6ZS1sb2dpblwiO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgc291cmNlSWQgPSBgJHtEYXRlLm5vdygpfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIpfWA7XHJcbiAgcHJpdmF0ZSByZWFkb25seSB0b2tlblNlcnZpY2U6IExvY2FsaXplQXBpVG9rZW5TZXJ2aWNlO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgYnJvYWRjYXN0U2VydmljZTogTG9jYWxpemVBcGlCcm9hZGNhc3RTZXJ2aWNlO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgYXBpU2VydmljZTogTG9jYWxpemVBcGlTZXJ2aWNlO1xyXG5cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IG1lc3NhZ2VTZXJ2aWNlOiBNZXNzYWdlU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2R0OiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgZGxnUmVmOiBEeW5hbWljRGlhbG9nUmVmLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBkbGdDb25maWc6IER5bmFtaWNEaWFsb2dDb25maWcsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGh0dHBDbGllbnQ6IEh0dHBDbGllbnQsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNhbml0aXplcjogRG9tU2FuaXRpemVyLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBpbmplY3RvcjogSW5qZWN0b3JcclxuICApIHtcclxuICAgIHRoaXMudG9rZW5TZXJ2aWNlID0gdGhpcy5pbmplY3Rvci5nZXQoTG9jYWxpemVBcGlUb2tlblNlcnZpY2UpO1xyXG4gICAgdGhpcy5icm9hZGNhc3RTZXJ2aWNlID0gdGhpcy5pbmplY3Rvci5nZXQoTG9jYWxpemVBcGlCcm9hZGNhc3RTZXJ2aWNlKTtcclxuICAgIHRoaXMuYXBpU2VydmljZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KExvY2FsaXplQXBpU2VydmljZSk7XHJcbiAgICB0aGlzLmRlY29kZVRva2VuID0gdGhpcy50b2tlblNlcnZpY2UuZGVjb2RlUmVmcmVzaFRva2VuO1xyXG4gICAgdGhpcy5sb2dpbkNvbmZpZyA9IHRoaXMuZGxnQ29uZmlnLmRhdGEubG9naW5Db25maWc7XHJcbiAgICB0aGlzLnByb3BlcnRpZXMgPSB0aGlzLmxvZ2luQ29uZmlnLnByb3BlcnRpZXMhO1xyXG5cclxuICAgIHRoaXMucmVtb3ZlTG9naW5MaXN0ZW5lciA9IHRoaXMuYnJvYWRjYXN0U2VydmljZS5saXN0ZW48SUxvZ2luQnJvYWRjYXN0TWVzc2FnZT4odGhpcy5sb2dpbkJyb2FkY2FzdENoYW5uZWwsIChwYXlsb2FkKSA9PiB7XHJcbiAgICAgIGlmICghcGF5bG9hZCB8fCBwYXlsb2FkLnNvdXJjZUlkID09PSB0aGlzLnNvdXJjZUlkKSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKCdJZ25vcmluZyBsb2dpbiBzdGF0ZSBtZXNzYWdlIHdpdGggaW52YWxpZCBwYXlsb2FkIG9yIGZyb20gc2FtZSBzb3VyY2UnLCBwYXlsb2FkKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHN3aXRjaCAocGF5bG9hZC5zdGF0ZSkge1xyXG4gICAgICAgIGNhc2UgRUxvZ2luU3RhdGUuUmVxdWVzdGluZzpcclxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLnN1Y2Nlc3MgPSBmYWxzZTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgRUxvZ2luU3RhdGUuU3VjY2VzczpcclxuICAgICAgICAgIHRoaXMuYXBpU2VydmljZS5jbGVhclJlcXVpcmVkTG9naW5TdGF0ZUFmdGVyTG9naW4oKTtcclxuICAgICAgICAgIHRoaXMubG9naW5TdWNjZXNzKCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIEVMb2dpblN0YXRlLkVycm9yOlxyXG4gICAgICAgICAgdGhpcy5zaG93TWVzc2FnZShcImVycm9yXCIsIHBheWxvYWQubWVzc2FnZSA/PyBcIkxvZ2luIGZhaWxlZFwiKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kbGdDb25maWcuY2xvc2FibGUgPSBmYWxzZTtcclxuICAgIHRoaXMuZGxnQ29uZmlnLmRpc21pc3NhYmxlTWFzayA9IGZhbHNlO1xyXG4gICAgdGhpcy5kbGdDb25maWcubW9kYWwgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMubG9nb3V0ID0gdGhpcy5sb2dpbkNvbmZpZy5sb2dvdXRGdW5jO1xyXG4gICAgdGhpcy5sb2dpblVybCA9IHRoaXMubG9naW5Db25maWcubG9naW5VcmxcclxuXHJcbiAgICBpZiAoIXRoaXMuZGVjb2RlVG9rZW4pIHtcclxuICAgICAgdGhpcy5zaG93TWVzc2FnZShcImVycm9yXCIsIFwiVG9rZW4gaXMgaW52YWxpZFwiKTtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmxvZ291dD8uKCksIDIwMDApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgdGhpcy5jZHQuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBsb2dpblN1Y2Nlc3MoKSB7XHJcbiAgICB0aGlzLnN1Y2Nlc3MgPSB0cnVlO1xyXG4gICAgYXdhaXQgd2FpdEZvcigyMDAwKTtcclxuICAgIHRoaXMuZGxnUmVmLmNsb3NlKHRydWUpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgY2xpY2tMb2dpbigpIHtcclxuICAgIGlmICghdGhpcy5pc1ZhbGlkUGFzc3dvcmQpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuc2hvd01lc3NhZ2UoXCJlcnJvclwiLCBcIlBhc3N3b3JkIGlzIHJlcXVpcmVkIGFuZCBtdXN0IGJlIGF0IGxlYXN0IDYgY2hhcmFjdGVyc1wiKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnB1Ymxpc2hMb2dpblN0YXRlKEVMb2dpblN0YXRlLlJlcXVlc3RpbmcpO1xyXG4gICAgYXdhaXQgd2FpdEZvcigzMDApO1xyXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgIGNvbnN0IGxvZ2luUmVzID0gYXdhaXQgdGhpcy5sb2dpbigpO1xyXG4gICAgaWYgKCFsb2dpblJlcz8uc3RhdHVzKSB7XHJcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBsb2dpblJlcz8ubWVzc2FnZSA/PyBcIkFuIGVycm9yIG9jY3VycmVkXCI7XHJcbiAgICAgIHRoaXMucHVibGlzaExvZ2luU3RhdGUoRUxvZ2luU3RhdGUuRXJyb3IsIG1lc3NhZ2UpO1xyXG4gICAgICByZXR1cm4gdGhpcy5zaG93TWVzc2FnZShcImVycm9yXCIsIG1lc3NhZ2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudG9rZW5TZXJ2aWNlLmFjY2Vzc1Rva2VuID0gbG9naW5SZXMudG9rZW5zLmFjY2Vzc1Rva2VuO1xyXG4gICAgY29uc3QgY29va2llT3B0aW9ucyA9IHsgZXhwaXJlczogdGhpcy5sb2dpbkNvbmZpZy5leHBpcmUgPz8gMzY1IH1cclxuICAgIExvY2FsaXplQXBpVG9rZW4uc3RvcmFnZS5zZXQodGhpcy5jb25maWcucmVmcmVzaFRva2VuPy5uYW1lIHx8ICcnLCBsb2dpblJlcy50b2tlbnMucmVmcmVzaFRva2VuLCBjb29raWVPcHRpb25zKTtcclxuICAgIHRoaXMuYXBpU2VydmljZS5jbGVhclJlcXVpcmVkTG9naW5TdGF0ZUFmdGVyTG9naW4oKTtcclxuXHJcbiAgICB0aGlzLnB1Ymxpc2hMb2dpblN0YXRlKEVMb2dpblN0YXRlLlN1Y2Nlc3MpO1xyXG4gICAgdGhpcy5sb2dpblN1Y2Nlc3MoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcHVibGlzaExvZ2luU3RhdGUoc3RhdGU6IEVMb2dpblN0YXRlLCBtZXNzYWdlPzogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLmJyb2FkY2FzdFNlcnZpY2UucHVibGlzaDxJTG9naW5Ccm9hZGNhc3RNZXNzYWdlPih0aGlzLmxvZ2luQnJvYWRjYXN0Q2hhbm5lbCwge1xyXG4gICAgICBzdGF0ZSxcclxuICAgICAgc291cmNlSWQ6IHRoaXMuc291cmNlSWQsXHJcbiAgICAgIG1lc3NhZ2UsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgbG9naW4oKSB7XHJcbiAgICBpZiAoIXRoaXMubG9naW5Vcmw/LnRyaW0oKS5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5zaG93TWVzc2FnZShcImVycm9yXCIsIFwiTG9naW4gdXJsIGlzIHJlcXVpcmVkXCIpO1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJMb2dpbiB1cmwgaXMgcmVxdWlyZWRcIik7XHJcbiAgICB9XHJcblxyXG4gICAgdHJ5IHtcclxuXHJcbiAgICAgIGlmICh0aGlzLmxvZ2luQ29uZmlnLmxvZ2luRnVuY3Rpb24pIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIlVzaW5nIGN1c3RvbSBsb2dpbiBmdW5jdGlvblwiKTtcclxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5sb2dpbkNvbmZpZy5sb2dpbkZ1bmN0aW9uKHRoaXMuZGVjb2RlVG9rZW4/LmVtYWlsID8/ICcnLCB0aGlzLnBhc3N3b3JkLnRyaW0oKSwgdGhpcy5nZXRIZWFkZXJzKCkpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2U8YW55PigocmVzb2x2ZSwgcmVqZWN0KSA9PlxyXG4gICAgICAgIHRoaXMuaHR0cENsaWVudC5wb3N0KHRoaXMubG9naW5VcmwhLFxyXG4gICAgICAgICAgeyBwYXNzd29yZDogdGhpcy5wYXNzd29yZC50cmltKCkgfSxcclxuICAgICAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIZWFkZXJzKCkgfSkuc3Vic2NyaWJlKHsgbmV4dDogcmVzb2x2ZSwgZXJyb3I6IHJlamVjdCB9KSk7XHJcblxyXG4gICAgfSBjYXRjaCAoZTogYW55KSB7XHJcbiAgICAgIHRoaXMuc2hvd01lc3NhZ2UoXCJlcnJvclwiLCBlLm1lc3NhZ2UpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0SGVhZGVycygpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIFtMb2NhbGl6ZUFwaVRva2VuLmh0dHBIZWFkZXJzLlhfUkVGUkVTSF9UT0tFTl06IHRoaXMudG9rZW5TZXJ2aWNlLnJlZnJlc2hUb2tlbiA/PyBcIlwiLFxyXG4gICAgICBbTG9jYWxpemVBcGlUb2tlbi5odHRwSGVhZGVycy5YX1RFTkFOVF06IHRoaXMudG9rZW5TZXJ2aWNlLnRlbmFudFRva2VuID8/IFwiXCIsXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgZ2V0IGlzVmFsaWRQYXNzd29yZCgpOiBib29sZWFuIHtcclxuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllcy5wYXNzd29yZFZhbGlkYXRvclxyXG4gICAgICA/IHRoaXMucHJvcGVydGllcy5wYXNzd29yZFZhbGlkYXRvcih0aGlzLnBhc3N3b3JkKVxyXG4gICAgICA6IHRoaXMucGFzc3dvcmQgJiYgdGhpcy5wYXNzd29yZC50cmltKCkubGVuZ3RoID49IDYgJiYgdGhpcy5wYXNzd29yZC50cmltKCkubGVuZ3RoIDw9IDUwO1xyXG4gIH1cclxuXHJcbiAgY2xpY2tMb2dvdXQgPSAoKSA9PiB0aGlzLmxvZ291dD8uKCk7XHJcblxyXG4gIHByaXZhdGUgc2hvd01lc3NhZ2Uoc2V2ZXJpdHk6IHN0cmluZywgc3VtbWFyeTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IGtleTogdGhpcy5tZXNzYWdlS2V5LCBzZXZlcml0eSwgc3VtbWFyeSB9KTtcclxuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHNhbml0aXplZFRpdGxlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKHRoaXMucHJvcGVydGllcy50aXRsZSA/PyAnJyk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMucmVtb3ZlTG9naW5MaXN0ZW5lcj8uKCk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
395
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemUtdG9rZW4tbG9naW4tZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wYWNrYWdlL2NvbXBvbmVudHMvbG9jYWxpemUtdG9rZW4tbG9naW4tZGlhbG9nLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsUUFBUSxFQUdSLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTlFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLEVBQWMsdUJBQXVCLEVBQUUsT0FBTyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUF1VHhGLE1BQU0sT0FBTyxpQ0FBaUM7SUFZNUMsWUFDbUIsY0FBOEIsRUFDOUIsR0FBc0IsRUFDdEIsTUFBd0IsRUFDeEIsU0FBOEIsRUFDOUIsU0FBdUIsRUFDdkIsUUFBa0I7UUFMbEIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ3RCLFdBQU0sR0FBTixNQUFNLENBQWtCO1FBQ3hCLGNBQVMsR0FBVCxTQUFTLENBQXFCO1FBQzlCLGNBQVMsR0FBVCxTQUFTLENBQWM7UUFDdkIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQWpCNUIsZUFBVSxHQUFHLFlBQVksQ0FBQztRQW1CakMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDbkQsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1FBQ2xFLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFXLENBQUM7UUFDL0MsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQztRQUVyRCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDO1FBQzFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBdkJELElBQUksT0FBTyxLQUFLLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQ3hELElBQUksT0FBTyxLQUFLLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBd0JoRCxTQUFTOztRQUNmLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztRQUNoQyxJQUFJLENBQUMsU0FBUyxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7UUFDdkMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBRTVCLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDO1lBQzdCLFFBQVEsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVE7WUFDbkMsU0FBUyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztZQUN2QyxTQUFTLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQztZQUNsRCxPQUFPLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQztZQUNoRCxhQUFhLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhO1lBQzdDLGVBQWUsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU07WUFDeEMsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVE7WUFDckMsaUJBQWlCLEVBQUUsTUFBQSxNQUFBLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSwwQ0FBRSxpQkFBaUIsMENBQUUsSUFBSSxDQUFDLElBQUksQ0FBQztTQUM5RSxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ3JCLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLG9DQUFvQyxDQUFDLENBQUM7WUFDaEUsVUFBVSxDQUFDLEdBQUcsRUFBRSxXQUFDLE9BQUEsTUFBQSxJQUFJLENBQUMsTUFBTSwrQ0FBWCxJQUFJLENBQVcsQ0FBQSxFQUFBLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDekM7SUFDSCxDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVhLFlBQVk7O1lBQ3hCLE1BQU0sT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3BCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFCLENBQUM7S0FBQTtJQUVLLFVBQVU7O1lBQ2QsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQzFDLENBQUM7S0FBQTtJQUVELFdBQVc7O1FBQ1QsTUFBQSxJQUFJLENBQUMsTUFBTSwrQ0FBWCxJQUFJLENBQVcsQ0FBQztJQUNsQixDQUFDO0lBRU8sV0FBVyxDQUFDLFFBQWdCLEVBQUUsT0FBZTtRQUNuRCxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFFRCxJQUFJLGNBQWM7O1FBQ2hCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyx1QkFBdUIsQ0FBQyxNQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxtQ0FBSSxFQUFFLENBQUMsQ0FBQztJQUM3RSxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDckMsQ0FBQzs7O1lBcllGLFNBQVMsU0FBQztnQkFxUFQsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztTQTJESDtnQkFDUCxRQUFRLEVBQUUsdUJBQXVCO2dCQUNqQyxTQUFTLEVBQUUsQ0FBQyxjQUFjLENBQUM7Z0JBQzNCLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO3lCQWxUNUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1QUjthQWdFRjs7O1lBMVRRLGNBQWM7WUFQckIsaUJBQWlCO1lBUVcsZ0JBQWdCO1lBQXJDLG1CQUFtQjtZQUVuQixZQUFZO1lBUm5CLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBJbmplY3RvcixcclxuICBPbkRlc3Ryb3ksXHJcbiAgT25Jbml0LFxyXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSBcInByaW1lbmcvYXBpXCI7XHJcbmltcG9ydCB7IER5bmFtaWNEaWFsb2dDb25maWcsIER5bmFtaWNEaWFsb2dSZWYgfSBmcm9tIFwicHJpbWVuZy9keW5hbWljZGlhbG9nXCI7XHJcbmltcG9ydCB7IElMb2dpbkRpYWxvZ0NvbmZpZywgSUxvZ2luRGlhbG9nUHJvcGVydGllcyB9IGZyb20gXCIuLi9tb2RlbHMvbG9jYWxpemUtdG9rZW4tbW9kZWxzXCI7XHJcbmltcG9ydCB7IERvbVNhbml0aXplciB9IGZyb20gXCJAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyXCI7XHJcbmltcG9ydCB7IEp3dFBheWxvYWQsIExvY2FsaXplQXBpTG9naW5TZXJ2aWNlLCB3YWl0Rm9yIH0gZnJvbSBcIkBzYW1iYXRoOTk5L2xvY2FsaXplLWFwaVwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc3R5bGVzOiBbYFxyXG4gICNsb2dpbi1kbGctd3JhcCB7XHJcbiAgICB3aWR0aDogMTAwJTtcclxuICAgIG1heC13aWR0aDogNDAwcHg7XHJcbiAgICBtYXJnaW46IDAgYXV0bztcclxuICAgIHBhZGRpbmc6IDMwcHg7XHJcbiAgICBoZWlnaHQ6IDEwMCU7XHJcbiAgfVxyXG4gIFxyXG4gIC5sb2dpbi1kbGctZWxtIHtcclxuICAgIG1hcmdpbi10b3A6IDFyZW07XHJcbiAgfVxyXG5cclxuICAubG9naW4tZGxnLWVsbS5sb2dpbi1kbGctc3VnZ2VzdCB7XHJcbiAgICBkaXNwbGF5OiBmbGV4IDtcclxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICB1c2VyLXNlbGVjdDogbm9uZTtcclxuICAgIGJvcmRlci1ib3R0b206IHNvbGlkIDFweCAjZGRkO1xyXG4gICAgYm9yZGVyLXJhZGl1czogNXB4O1xyXG4gICAgcGFkZGluZzogNXB4IDEwcHg7XHJcbiAgICBiYWNrZ3JvdW5kOiAjZjlmOWY5O1xyXG4gICAgYm94LXNoYWRvdzogMXB4IDVweCAxMHB4IC0xMnB4ICMwMDA7XHJcbiAgfVxyXG4gIFxyXG4gICNsb2dpbi1kbGctaGVhZGVyIHtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gIH1cclxuICBcclxuICAjbG9naW4tZGxnLWhlYWRlciBoMyB7XHJcbiAgICBmb250LXdlaWdodDogYm9sZDtcclxuICAgIGZvbnQtc2l6ZTogMC45cmVtO1xyXG4gICAgY29sb3I6IG9yYW5nZTtcclxuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICB9XHJcbiAgXHJcbiAgI2xvZ2luLWxvZ28ge1xyXG4gICAgaGVpZ2h0OiA1NXB4O1xyXG4gICAgd2lkdGg6IDU1cHg7XHJcbiAgICAvKiBiYWNrZ3JvdW5kOiB1cmwoXCIvYXNzZXRzL2ltYWdlcy9sb2dvLTMwMHB4LnBuZ1wiKSBuby1yZXBlYXQ7ICovXHJcbiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW4gIWltcG9ydGFudDtcclxuICB9XHJcbiAgXHJcbiAgI2xvZ2luLWRsZy1jb250ZW50IC5wLWlucHV0Z3JvdXAge1xyXG4gICAgaGVpZ2h0OiA0NXB4O1xyXG4gIH1cclxuICBcclxuICAjbG9naW4tZGxnLWNvbnRlbnQgLnAtaW5wdXRncm91cCAucC1pbnB1dGdyb3VwLWFkZG9uIHtcclxuICAgIGhlaWdodDogNDVweDtcclxuICAgIGJvcmRlci1yYWRpdXM6IDE1cHggMCAwIDE1cHg7XHJcbiAgICB3aWR0aDogNTBweDtcclxuICB9XHJcbiAgI2xvZ2luLWRsZy1jb250ZW50ICp7XHJcbiAgICBmb250LXNpemU6IC45cmVtO1xyXG4gICAgLyogZm9udC1mYW1pbHk6ICdMZXhlbmQnLCAnUm9ib3RvJywgc2Fucy1zZXJpZiwgJ21hdGVyaWFsLWljb25zLXJvdW5kJzsgKi9cclxuICB9XHJcbiAgXHJcbiAgI2xvZ2luLWRsZy1jb250ZW50IC5wLWlucHV0Z3JvdXAgLnAtaW5wdXRncm91cC1hZGRvbiAqIHtcclxuICAgIGZvbnQtc2l6ZTogMXJlbTtcclxuICB9XHJcbiAgXHJcbiAgI2xvZ2luLWRsZy1jb250ZW50IC5wLWlucHV0Z3JvdXAgaW5wdXQge1xyXG4gICAgaGVpZ2h0OiA0NXB4O1xyXG4gICAgYm9yZGVyLXJhZGl1czogMCAxNXB4IDE1cHggMDtcclxuICB9XHJcbiAgXHJcbiAgI2xvZ2luLWRsZy1jb250ZW50IGJ1dHRvbiB7XHJcbiAgICBoZWlnaHQ6IDQ1cHg7XHJcbiAgICBib3JkZXItcmFkaXVzOiAxNXB4O1xyXG4gIH1cclxuICBcclxuICAvKmNoZWNrIGFuaW1hdGlvbiBibG9jayovXHJcbiAgXHJcbiAgLmNoZWNrLWFuaW1hdGlvbi13cmFwIHtcclxuICAgIHRvcDogMDtcclxuICAgIGxlZnQ6IDA7XHJcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgaGVpZ2h0OiBjYWxjKDEwMCUgLSAyMDBweCk7XHJcbiAgICBtaW4taGVpZ2h0OiA0MDBweDtcclxuICB9XHJcbiAgXHJcbiAgLmNoZWNrLW1haW4tY29udGFpbmVyIHtcclxuICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgaGVpZ2h0OiAxMDB2aDtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBmbGV4LWZsb3c6IGNvbHVtbjtcclxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICB9XHJcbiAgXHJcbiAgLmNoZWNrLWNvbnRhaW5lciB7XHJcbiAgICB3aWR0aDogNi4yNXJlbTtcclxuICAgIGhlaWdodDogNy41cmVtO1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGZsZXgtZmxvdzogY29sdW1uO1xyXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcclxuICB9XHJcbiAgXHJcbiAgLmNoZWNrLWNvbnRhaW5lciAuY2hlY2stYmFja2dyb3VuZCB7XHJcbiAgICB3aWR0aDogMTAwJTtcclxuICAgIGhlaWdodDogY2FsYygxMDAlIC0gMS4yNXJlbSk7XHJcbiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tIHJpZ2h0LCAjNWRlNTkzLCAjNDFkNjdjKTtcclxuICAgIGJveC1zaGFkb3c6IDBweCAwcHggMHB4IDY1cHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjI1KSBpbnNldCwgMHB4IDBweCAwcHggNjVweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjUpIGluc2V0O1xyXG4gICAgdHJhbnNmb3JtOiBzY2FsZSgwLjg0KTtcclxuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcclxuICAgIGFuaW1hdGlvbjogYW5pbWF0ZUNvbnRhaW5lciAwLjc1cyBlYXNlLW91dCBmb3J3YXJkcyAwLjc1cztcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XHJcbiAgICBvcGFjaXR5OiAwO1xyXG4gIH1cclxuICBcclxuICAuY2hlY2stY29udGFpbmVyIC5jaGVjay1iYWNrZ3JvdW5kIHN2ZyB7XHJcbiAgICB3aWR0aDogNjUlO1xyXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDAuMjVyZW0pO1xyXG4gICAgc3Ryb2tlLWRhc2hhcnJheTogODA7XHJcbiAgICBzdHJva2UtZGFzaG9mZnNldDogODA7XHJcbiAgICBhbmltYXRpb246IGFuaW1hdGVDaGVjayAwLjM1cyBmb3J3YXJkcyAxLjI1cyBlYXNlLW91dDtcclxuICAgIG1pbi13aWR0aDogYXV0byAhaW1wb3J0YW50O1xyXG4gIH1cclxuICBcclxuICAuY2hlY2stY29udGFpbmVyIC5jaGVjay1zaGFkb3cge1xyXG4gICAgYm90dG9tOiBjYWxjKC0xNSUgLSA1cHgpO1xyXG4gICAgbGVmdDogMDtcclxuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcclxuICAgIGJhY2tncm91bmQ6IHJhZGlhbC1ncmFkaWVudChjbG9zZXN0LXNpZGUsIHJnYmEoNzMsIDIxOCwgMTMxLCAxKSwgdHJhbnNwYXJlbnQpO1xyXG4gICAgYW5pbWF0aW9uOiBhbmltYXRlU2hhZG93IDAuNzVzIGVhc2Utb3V0IGZvcndhcmRzIDAuNzVzO1xyXG4gIH1cclxuICBcclxuICBAa2V5ZnJhbWVzIGFuaW1hdGVDb250YWluZXIge1xyXG4gICAgMCUge1xyXG4gICAgICBvcGFjaXR5OiAwO1xyXG4gICAgICB0cmFuc2Zvcm06IHNjYWxlKDApO1xyXG4gICAgICBib3gtc2hhZG93OiAwcHggMHB4IDBweCA2NXB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNSkgaW5zZXQsIDBweCAwcHggMHB4IDY1cHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjI1KSBpbnNldDtcclxuICAgIH1cclxuICBcclxuICAgIDI1JSB7XHJcbiAgICAgIG9wYWNpdHk6IDE7XHJcbiAgICAgIHRyYW5zZm9ybTogc2NhbGUoMC45KTtcclxuICAgICAgYm94LXNoYWRvdzogMHB4IDBweCAwcHggNjVweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjUpIGluc2V0LCAwcHggMHB4IDBweCA2NXB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNSkgaW5zZXQ7XHJcbiAgICB9XHJcbiAgXHJcbiAgICA0My43NSUge1xyXG4gICAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMTUpO1xyXG4gICAgICBib3gtc2hhZG93OiAwcHggMHB4IDBweCA0My4zMzRweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjUpIGluc2V0LCAwcHggMHB4IDBweCA2NXB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNSkgaW5zZXQ7XHJcbiAgICB9XHJcbiAgXHJcbiAgICA2Mi41JSB7XHJcbiAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XHJcbiAgICAgIGJveC1zaGFkb3c6IDBweCAwcHggMHB4IDBweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjUpIGluc2V0LCAwcHggMHB4IDBweCAyMS42NjdweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjUpIGluc2V0O1xyXG4gICAgfVxyXG4gIFxyXG4gICAgODEuMjUlIHtcclxuICAgICAgYm94LXNoYWRvdzogMHB4IDBweCAwcHggMHB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNSkgaW5zZXQsIDBweCAwcHggMHB4IDBweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjUpIGluc2V0O1xyXG4gICAgfVxyXG4gIFxyXG4gICAgMTAwJSB7XHJcbiAgICAgIG9wYWNpdHk6IDE7XHJcbiAgICAgIGJveC1zaGFkb3c6IDBweCAwcHggMHB4IDBweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjUpIGluc2V0LCAwcHggMHB4IDBweCAwcHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjI1KSBpbnNldDtcclxuICAgIH1cclxuICB9XHJcbiAgXHJcbiAgQGtleWZyYW1lcyBhbmltYXRlQ2hlY2sge1xyXG4gICAgZnJvbSB7XHJcbiAgICAgIHN0cm9rZS1kYXNob2Zmc2V0OiA4MDtcclxuICAgIH1cclxuICBcclxuICAgIHRvIHtcclxuICAgICAgc3Ryb2tlLWRhc2hvZmZzZXQ6IDA7XHJcbiAgICB9XHJcbiAgfVxyXG4gIFxyXG4gIEBrZXlmcmFtZXMgYW5pbWF0ZVNoYWRvdyB7XHJcbiAgICAwJSB7XHJcbiAgICAgIG9wYWNpdHk6IDA7XHJcbiAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgICBoZWlnaHQ6IDE1JTtcclxuICAgIH1cclxuICBcclxuICAgIDI1JSB7XHJcbiAgICAgIG9wYWNpdHk6IDAuMjU7XHJcbiAgICB9XHJcbiAgXHJcbiAgICA0My43NSUge1xyXG4gICAgICB3aWR0aDogNDAlO1xyXG4gICAgICBoZWlnaHQ6IDclO1xyXG4gICAgICBvcGFjaXR5OiAwLjM1O1xyXG4gICAgfVxyXG4gIFxyXG4gICAgMTAwJSB7XHJcbiAgICAgIHdpZHRoOiA4NSU7XHJcbiAgICAgIGhlaWdodDogMTUlO1xyXG4gICAgICBvcGFjaXR5OiAwLjI1O1xyXG4gICAgfVxyXG4gIH1cclxuICAjbG9naW4tZGxnLXdyYXAgLmxvYWRlci13cmFwIHtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICBoZWlnaHQ6MTAwJTtcclxuICAgIHdpZHRoOjEwMCU7XHJcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICB0b3A6IDA7XHJcbiAgICBsZWZ0OiAwO1xyXG4gICAgei1pbmRleDogMTAwO1xyXG4gICAgYmFja2dyb3VuZDogI2ZmZmZmZjQyO1xyXG4gICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDFweCk7XHJcbiAgfVxyXG5cclxuICAjbG9naW4tZGxnLXdyYXAgLmxvZ2luLWRsZy1sb2FkZXIge1xyXG4gICAgYm9yZGVyOiAxNXB4IHNvbGlkICNlN2U3ZTc7XHJcbiAgICBib3JkZXItdG9wOiAxNXB4IHNvbGlkICM1MmRiYTE7XHJcbiAgICBib3JkZXItcmFkaXVzOiA1MCU7XHJcbiAgICB3aWR0aDogMTAwcHg7XHJcbiAgICBoZWlnaHQ6IDEwMHB4O1xyXG4gICAgYW5pbWF0aW9uOiBzcGlubG9hZGVyIDJzIGxpbmVhciBpbmZpbml0ZTtcclxuICB9XHJcblxyXG4gICNsb2dpbi1kbGctd3JhcCAubG9hZGVyLXdyYXA6OmJlZm9yZSB7XHJcbiAgICBjb250ZW50OiBcIlwiO1xyXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgd2lkdGg6IDcwcHg7XHJcbiAgICBoZWlnaHQ6IDcwcHg7XHJcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcclxuICAgIHotaW5kZXg6IDE7XHJcbiAgICBib3JkZXI6IDE1cHggc29saWQgI2U3ZTdlNzAwO1xyXG4gICAgYm9yZGVyLXRvcDogMTVweCBzb2xpZCAjNTJkYmExYzk7XHJcbiAgICBib3JkZXItcmFkaXVzOiA1MCU7XHJcbiAgICBhbmltYXRpb246IHNwaW5sb2FkZXIgLjc1cyBsaW5lYXIgaW5maW5pdGU7XHJcbiAgfVxyXG5cclxuICBAa2V5ZnJhbWVzIHNwaW5sb2FkZXIge1xyXG4gICAgMCUgeyB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTsgfVxyXG4gICAgMTAwJSB7IHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7IH1cclxuICB9XHJcbiAgYF0sXHJcbiAgdGVtcGxhdGU6IGA8cC10b2FzdCBrZXk9XCIkbG9naW4tZGxnXCIgcG9zaXRpb249XCJ0b3AtY2VudGVyXCI+PC9wLXRvYXN0PlxyXG4gIDxkaXYgaWQ9XCJsb2dpbi1kbGctd3JhcFwiPlxyXG4gICAgPGRpdiBpZD1cImxvZ2luLWRsZy1oZWFkZXJcIj5cclxuICAgICAgPGRpdiBpZD1cImxvZ2luLWxvZ29cIiBjbGFzcz1cInAtbWItMlwiIHN0eWxlPVwiYmFja2dyb3VuZDogdXJsKCd7e3Byb3BlcnRpZXMubG9nb0ltYWdlfX0nKSBuby1yZXBlYXRcIj48L2Rpdj5cclxuICAgICAgPGgzICpuZ0lmPVwiIXN1Y2Nlc3NcIiBbaW5uZXJIVE1MXT1cInNhbml0aXplZFRpdGxlXCI+PC9oMz5cclxuICAgICAgPGgzICpuZ0lmPVwic3VjY2Vzc1wiIHN0eWxlPVwiY29sb3I6Z3JlZW4gIWltcG9ydGFudDtcIj57e3Byb3BlcnRpZXMubG9naW5TdWNjZXNzTWVzc2FnZX19PC9oMz5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBpZD1cImxvZ2luLWRsZy1jb250ZW50XCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhc3VjY2Vzc1wiPlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJsb2FkaW5nXCIgY2xhc3M9XCJsb2FkZXItd3JhcFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImxvZ2luLWRsZy1sb2FkZXJcIj48L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibG9naW4tZGxnLWVsbVwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInAtaW5wdXRncm91cFwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInAtaW5wdXRncm91cC1hZGRvblwiPlxyXG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtcm91bmRcIj5wZXJzb248L2k+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPGlucHV0IGRpc2FibGVkIHBJbnB1dFRleHQgdHlwZT1cInRleHRcIiBwbGFjZWhvbGRlcj1cInt7cHJvcGVydGllcy51c2VybmFtZT8ucGxhY2VIb2xkZXJ9fVwiIFt2YWx1ZV09XCJkZWNvZGVUb2tlbj8uZW1haWxcIiAvPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImxvZ2luLWRsZy1lbG1cIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLWlucHV0Z3JvdXBcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwLWlucHV0Z3JvdXAtYWRkb25cIj5cclxuICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1hdGVyaWFsLWljb25zLXJvdW5kXCI+bG9jazwvaT5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8aW5wdXQgW2Rpc2FibGVkXT1cImxvYWRpbmdcIiAoa2V5ZG93bi5lbnRlcik9XCJjbGlja0xvZ2luKClcIiBwSW5wdXRUZXh0IHR5cGU9XCJwYXNzd29yZFwiIFxyXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3twcm9wZXJ0aWVzLnBhc3N3b3JkPy5wbGFjZUhvbGRlcn19XCIgWyhuZ01vZGVsKV09XCJwYXNzd29yZFwiXHJcbiAgICAgICAgICAgICAgYXV0b2ZvY3VzIC8+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibG9naW4tZGxnLWVsbVwiPlxyXG4gICAgICAgICAgPGJ1dHRvbiBzdHlsZT1cIndpZHRoOiAxMDAlO1wiIHBCdXR0b24gdHlwZT1cImJ1dHRvblwiIGxhYmVsPVwie3twcm9wZXJ0aWVzLmxvZ2luQnV0dG9uPy5wbGFjZUhvbGRlcn19XCIgKGNsaWNrKT1cImNsaWNrTG9naW4oKVwiXHJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhcGFzc3dvcmQgfHwgbG9hZGluZ1wiPjwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gIFxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJsb2dpbi1kbGctZWxtIGxvZ2luLWRsZy1zdWdnZXN0XCIgc3R5bGU9XCJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6IGNlbnRlcjt1c2VyLXNlbGVjdDogbm9uZTtcIj5cclxuICAgICAgICAgIDxzcGFuPnt7cHJvcGVydGllcy5sb2dvdXRCdXR0b24/Lm1lc3NhZ2V9fTwvc3Bhbj5cclxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJwLWJ1dHRvbi10ZXh0XCIgcEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgbGFiZWw9XCJ7e3Byb3BlcnRpZXMubG9nb3V0QnV0dG9uPy5wbGFjZUhvbGRlcn19XCIgXHJcbiAgICAgICAgICAgIChjbGljayk9XCJjbGlja0xvZ291dCgpXCI+PC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gIFxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic3VjY2Vzc1wiPlxyXG4gICAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW4tdG9wOjM1cHg7XCI+PC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrLWFuaW1hdGlvbi13cmFwXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2stbWFpbi1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVjay1iYWNrZ3JvdW5kXCI+XHJcbiAgICAgICAgICAgICAgICA8c3ZnIHZpZXdCb3g9XCIwIDAgNjUgNTFcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk03IDI1TDI3LjMwNzcgNDRMNTguNSA3XCIgc3Ryb2tlPVwid2hpdGVcIiBzdHJva2Utd2lkdGg9XCIxM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+YCxcclxuICBzZWxlY3RvcjogXCJhcHAtbG9jYWxpemUtbG9naW5kbGdcIixcclxuICBwcm92aWRlcnM6IFtNZXNzYWdlU2VydmljZV0sXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxufSlcclxuZXhwb3J0IGNsYXNzIExvY2FsaXplVG9rZW5Mb2dpbkRpYWxvZ0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICByZWFkb25seSBtZXNzYWdlS2V5ID0gXCIkbG9naW4tZGxnXCI7XHJcbiAgcGFzc3dvcmQ6IGFueTtcclxuICByZWFkb25seSBkZWNvZGVUb2tlbjogSnd0UGF5bG9hZCB8IG51bGw7XHJcbiAgZ2V0IGxvYWRpbmcoKSB7IHJldHVybiB0aGlzLmFwaUxvZ2luU2VydmljZS5pc0xvYWRpbmc7IH1cclxuICBnZXQgc3VjY2VzcygpIHsgcmV0dXJuIHRoaXMuYXBpTG9naW5TZXJ2aWNlLmlzU3VjY2VzczsgfVxyXG4gIHByaXZhdGUgcmVhZG9ubHkgbG9naW5Db25maWc6IElMb2dpbkRpYWxvZ0NvbmZpZ1xyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IGxvZ291dD86ICgpID0+IGFueVxyXG4gIHJlYWRvbmx5IHByb3BlcnRpZXM6IElMb2dpbkRpYWxvZ1Byb3BlcnRpZXM7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBhcGlMb2dpblNlcnZpY2U6IExvY2FsaXplQXBpTG9naW5TZXJ2aWNlO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBjZHQ6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBkbGdSZWY6IER5bmFtaWNEaWFsb2dSZWYsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRsZ0NvbmZpZzogRHluYW1pY0RpYWxvZ0NvbmZpZyxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGluamVjdG9yOiBJbmplY3RvclxyXG4gICkge1xyXG4gICAgdGhpcy5sb2dpbkNvbmZpZyA9IHRoaXMuZGxnQ29uZmlnLmRhdGEubG9naW5Db25maWc7XHJcbiAgICB0aGlzLmFwaUxvZ2luU2VydmljZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KExvY2FsaXplQXBpTG9naW5TZXJ2aWNlKTtcclxuICAgIHRoaXMucHJvcGVydGllcyA9IHRoaXMubG9naW5Db25maWcucHJvcGVydGllcyE7XHJcbiAgICB0aGlzLmRlY29kZVRva2VuID0gdGhpcy5hcGlMb2dpblNlcnZpY2UuZGVjb2RlZFRva2VuO1xyXG5cclxuICAgIHRoaXMubG9nb3V0ID0gdGhpcy5sb2dpbkNvbmZpZy5sb2dvdXRGdW5jO1xyXG4gICAgdGhpcy5jb25maWd1cmUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY29uZmlndXJlKCkge1xyXG4gICAgdGhpcy5kbGdDb25maWcuY2xvc2FibGUgPSBmYWxzZTtcclxuICAgIHRoaXMuZGxnQ29uZmlnLmRpc21pc3NhYmxlTWFzayA9IGZhbHNlO1xyXG4gICAgdGhpcy5kbGdDb25maWcubW9kYWwgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMuYXBpTG9naW5TZXJ2aWNlLmNvbmZpZ3VyZSh7XHJcbiAgICAgIGxvZ2luVXJsOiB0aGlzLmxvZ2luQ29uZmlnLmxvZ2luVXJsLFxyXG4gICAgICBvblN1Y2Nlc3M6IHRoaXMubG9naW5TdWNjZXNzLmJpbmQodGhpcyksXHJcbiAgICAgIG9uRmFpbHVyZTogKG1zZykgPT4gdGhpcy5zaG93TWVzc2FnZShcImVycm9yXCIsIG1zZyksXHJcbiAgICAgIG9uRXJyb3I6IChtc2cpID0+IHRoaXMuc2hvd01lc3NhZ2UoXCJlcnJvclwiLCBtc2cpLFxyXG4gICAgICBsb2dpbkZ1bmN0aW9uOiB0aGlzLmxvZ2luQ29uZmlnLmxvZ2luRnVuY3Rpb24sXHJcbiAgICAgIHJlZnJlc2hUb2tlblR0bDogdGhpcy5sb2dpbkNvbmZpZy5leHBpcmUsXHJcbiAgICAgIHBhc3N3b3JkUmVzb2x2ZXI6ICgpID0+IHRoaXMucGFzc3dvcmQsXHJcbiAgICAgIHBhc3N3b3JkVmFsaWRhdG9yOiB0aGlzLmxvZ2luQ29uZmlnLnByb3BlcnRpZXM/LnBhc3N3b3JkVmFsaWRhdG9yPy5iaW5kKHRoaXMpLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5kZWNvZGVUb2tlbikge1xyXG4gICAgICB0aGlzLnNob3dNZXNzYWdlKFwiZXJyb3JcIiwgXCJJbnZhbGlkIFRva2VuLiBQbGVhc2UgbG9naW4gYWdhaW4uXCIpO1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMubG9nb3V0Py4oKSwgMjAwMCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICB0aGlzLmNkdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGxvZ2luU3VjY2VzcygpIHtcclxuICAgIGF3YWl0IHdhaXRGb3IoMjAwMCk7XHJcbiAgICB0aGlzLmRsZ1JlZi5jbG9zZSh0cnVlKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGNsaWNrTG9naW4oKSB7XHJcbiAgICBhd2FpdCB0aGlzLmFwaUxvZ2luU2VydmljZS5jbGlja0xvZ2luKCk7XHJcbiAgfVxyXG5cclxuICBjbGlja0xvZ291dCgpIHtcclxuICAgIHRoaXMubG9nb3V0Py4oKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2hvd01lc3NhZ2Uoc2V2ZXJpdHk6IHN0cmluZywgc3VtbWFyeTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IGtleTogdGhpcy5tZXNzYWdlS2V5LCBzZXZlcml0eSwgc3VtbWFyeSB9KTtcclxuICB9XHJcblxyXG4gIGdldCBzYW5pdGl6ZWRUaXRsZSgpIHtcclxuICAgIHJldHVybiB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbCh0aGlzLnByb3BlcnRpZXMudGl0bGUgPz8gJycpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmFwaUxvZ2luU2VydmljZS51bkNvbmZpZ3VyZSgpO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemUtdG9rZW4tbW9kZWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3BhY2thZ2UvbW9kZWxzL2xvY2FsaXplLXRva2VuLW1vZGVscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBJTG9naW5EaWFsb2dQbGFjZUhvbGRlciB7XHJcbiAgLyoqXHJcbiAgICogTWVzc2FnZSB0byBkaXNwbGF5IGluIHRoZSBpbnB1dCBmaWVsZCwgdHlwaWNhbGx5IHVzZWQgZm9yIGVycm9yIG1lc3NhZ2VzIG9yIGhpbnRzLlxyXG4gICAqIFRoaXMgaXMgb3B0aW9uYWwgYW5kIGNhbiBiZSB1c2VkIHRvIHByb3ZpZGUgYWRkaXRpb25hbCBjb250ZXh0IG9yIGluc3RydWN0aW9ucyB0byB0aGUgdXNlci5cclxuICAgKi9cclxuICBtZXNzYWdlPzogc3RyaW5nO1xyXG4gIC8qKlxyXG4gICAqIFBsYWNlaG9sZGVyIG9yIGxhYmVsIHRleHQgZm9yIHRoZSBpbnB1dCBmaWVsZFxyXG4gICAqL1xyXG4gIHBsYWNlSG9sZGVyPzogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElMb2dpbkRpYWxvZ1Byb3BlcnRpZXMge1xyXG4gIC8qKlxyXG4gICAqIFRpdGxlIG9mIHRoZSBsb2dpbiBkaWFsb2dcclxuICAgKi9cclxuICB0aXRsZT86IHN0cmluZztcclxuICBsb2dpblN1Y2Nlc3NNZXNzYWdlPzogc3RyaW5nO1xyXG4gIC8qKlxyXG4gICAqIExvZ29nIGltYWdlIHBhdGggb3IgVVJMIHRvIGRpc3BsYXkgaW4gdGhlIGxvZ2luIGRpYWxvZ1xyXG4gICAqIElmIG5vdCBwcm92aWRlZCwgdGhlIFwiL2Fzc2V0cy9pbWFnZXMvbG9nby0zMDBweC5wbmdcIiBpbWFnZSB3aWxsIGJlIHVzZWQuXHJcbiAgICovXHJcbiAgbG9nb0ltYWdlPzogc3RyaW5nO1xyXG4gIHVzZXJuYW1lPzogSUxvZ2luRGlhbG9nUGxhY2VIb2xkZXI7XHJcbiAgcGFzc3dvcmQ/
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemUtdG9rZW4tbW9kZWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3BhY2thZ2UvbW9kZWxzL2xvY2FsaXplLXRva2VuLW1vZGVscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBJTG9naW5EaWFsb2dQbGFjZUhvbGRlciB7XHJcbiAgLyoqXHJcbiAgICogTWVzc2FnZSB0byBkaXNwbGF5IGluIHRoZSBpbnB1dCBmaWVsZCwgdHlwaWNhbGx5IHVzZWQgZm9yIGVycm9yIG1lc3NhZ2VzIG9yIGhpbnRzLlxyXG4gICAqIFRoaXMgaXMgb3B0aW9uYWwgYW5kIGNhbiBiZSB1c2VkIHRvIHByb3ZpZGUgYWRkaXRpb25hbCBjb250ZXh0IG9yIGluc3RydWN0aW9ucyB0byB0aGUgdXNlci5cclxuICAgKi9cclxuICBtZXNzYWdlPzogc3RyaW5nO1xyXG4gIC8qKlxyXG4gICAqIFBsYWNlaG9sZGVyIG9yIGxhYmVsIHRleHQgZm9yIHRoZSBpbnB1dCBmaWVsZFxyXG4gICAqL1xyXG4gIHBsYWNlSG9sZGVyPzogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElMb2dpbkRpYWxvZ1Byb3BlcnRpZXMge1xyXG4gIC8qKlxyXG4gICAqIFRpdGxlIG9mIHRoZSBsb2dpbiBkaWFsb2dcclxuICAgKi9cclxuICB0aXRsZT86IHN0cmluZztcclxuICBsb2dpblN1Y2Nlc3NNZXNzYWdlPzogc3RyaW5nO1xyXG4gIC8qKlxyXG4gICAqIExvZ29nIGltYWdlIHBhdGggb3IgVVJMIHRvIGRpc3BsYXkgaW4gdGhlIGxvZ2luIGRpYWxvZ1xyXG4gICAqIElmIG5vdCBwcm92aWRlZCwgdGhlIFwiL2Fzc2V0cy9pbWFnZXMvbG9nby0zMDBweC5wbmdcIiBpbWFnZSB3aWxsIGJlIHVzZWQuXHJcbiAgICovXHJcbiAgbG9nb0ltYWdlPzogc3RyaW5nO1xyXG4gIHVzZXJuYW1lPzogSUxvZ2luRGlhbG9nUGxhY2VIb2xkZXI7XHJcbiAgcGFzc3dvcmQ/OiBJTG9naW5EaWFsb2dQbGFjZUhvbGRlcjtcclxuICBsb2dpbkJ1dHRvbj86IElMb2dpbkRpYWxvZ1BsYWNlSG9sZGVyO1xyXG4gIGxvZ291dEJ1dHRvbj86IElMb2dpbkRpYWxvZ1BsYWNlSG9sZGVyO1xyXG4gIC8qKlxyXG4gICAqIEZ1bmN0aW9uIHRvIHZhbGlkYXRlIHRoZSBwYXNzd29yZC5cclxuICAgKiBJZiBub3QgcHJvdmlkZWQsIHRoZSBkZWZhdWx0IHZhbGlkYXRpb24gY2hlY2tzIGlmIHRoZSBwYXNzd29yZCBpcyBiZXR3ZWVuIDYgYW5kIDUwIGNoYXJhY3RlcnMgbG9uZy5cclxuICAgKiBAcGFyYW0gcGFzc3dvcmRcclxuICAgKiBAcmV0dXJuc1xyXG4gICAqL1xyXG4gIHBhc3N3b3JkVmFsaWRhdG9yPzogKHBhc3N3b3JkOiBzdHJpbmcgfCB1bmRlZmluZWQpID0+IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUxvZ2luRGlhbG9nQ29uZmlnIHtcclxuICBsb2dpblVybD86IHN0cmluZztcclxuICBsb2dvdXRVcmw/OiBzdHJpbmc7XHJcbiAgbG9naW5GdW5jdGlvbj86ICh1c2VybmFtZTogc3RyaW5nLCBwYXNzd29yZDogc3RyaW5nLCBoZWFkZXJzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSkgPT4gUHJvbWlzZTxhbnk+O1xyXG4gIGxvZ291dEZ1bmM/OiAoKSA9PiB2b2lkO1xyXG4gIC8qKlxyXG4gICAqIENvb2tpZSBleHBpcmF0aW9uIGRhdGUgaW4gZGF5cyBmcm9tIG5vdy4gSWYgbm90IHByb3ZpZGVkIHRoZSBjb29raWUgaXMgYSBzZXNzaW9uIGNvb2tpZVxyXG4gICAqL1xyXG4gIGV4cGlyZT86IG51bWJlcjtcclxuICAvKipcclxuICAgKiBDb25maWd1cmF0aW9uIGZvciB0aGUgbG9naW4gZGlhbG9nLlxyXG4gICAqIFRoaXMgaW50ZXJmYWNlIGRlZmluZXMgdGhlIHByb3BlcnRpZXMgdGhhdCBjYW4gYmUgdXNlZCB0byBjdXN0b21pemUgdGhlIGxvZ2luIGRpYWxvZydzIGJlaGF2aW9yIGFuZCBhcHBlYXJhbmNlXHJcbiAgICovXHJcbiAgcHJvcGVydGllcz86IElMb2dpbkRpYWxvZ1Byb3BlcnRpZXM7XHJcbn1cclxuIl19
|
|
@@ -1,75 +1,54 @@
|
|
|
1
1
|
import { __awaiter } from 'tslib';
|
|
2
|
-
import { HttpClient } from '@angular/common/http';
|
|
3
2
|
import * as i0 from '@angular/core';
|
|
4
3
|
import { Component, ViewEncapsulation, ChangeDetectorRef, Injector, Injectable, NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
|
|
5
4
|
import { MessageService } from 'primeng/api';
|
|
6
5
|
import { DynamicDialogRef, DynamicDialogConfig, DialogService } from 'primeng/dynamicdialog';
|
|
7
6
|
import { DomSanitizer } from '@angular/platform-browser';
|
|
8
7
|
import * as i1 from '@sambath999/localize-api';
|
|
9
|
-
import {
|
|
8
|
+
import { LocalizeApiLoginService, waitFor, LocalizeApiTokenService, LocalizeApiService } from '@sambath999/localize-api';
|
|
10
9
|
import { CommonModule } from '@angular/common';
|
|
11
10
|
import { ToastModule } from 'primeng/toast';
|
|
12
11
|
import { InputTextModule } from 'primeng/inputtext';
|
|
13
12
|
import { ButtonModule } from 'primeng/button';
|
|
14
13
|
import { FormsModule } from '@angular/forms';
|
|
15
14
|
|
|
16
|
-
var ELoginState;
|
|
17
|
-
(function (ELoginState) {
|
|
18
|
-
ELoginState[ELoginState["Requesting"] = 0] = "Requesting";
|
|
19
|
-
ELoginState[ELoginState["Success"] = 1] = "Success";
|
|
20
|
-
ELoginState[ELoginState["Error"] = 2] = "Error";
|
|
21
|
-
})(ELoginState || (ELoginState = {}));
|
|
22
15
|
class LocalizeTokenLoginDialogComponent {
|
|
23
|
-
constructor(messageService, cdt, dlgRef, dlgConfig,
|
|
16
|
+
constructor(messageService, cdt, dlgRef, dlgConfig, sanitizer, injector) {
|
|
24
17
|
this.messageService = messageService;
|
|
25
18
|
this.cdt = cdt;
|
|
26
19
|
this.dlgRef = dlgRef;
|
|
27
20
|
this.dlgConfig = dlgConfig;
|
|
28
|
-
this.httpClient = httpClient;
|
|
29
21
|
this.sanitizer = sanitizer;
|
|
30
22
|
this.injector = injector;
|
|
31
23
|
this.messageKey = "$login-dlg";
|
|
32
|
-
this.loading = false;
|
|
33
|
-
this.success = false;
|
|
34
|
-
this.loginBroadcastChannel = "bc-localize-login";
|
|
35
|
-
this.sourceId = `${Date.now()}-${Math.random().toString(36).slice(2)}`;
|
|
36
|
-
this.clickLogout = () => { var _a; return (_a = this.logout) === null || _a === void 0 ? void 0 : _a.call(this); };
|
|
37
|
-
this.tokenService = this.injector.get(LocalizeApiTokenService);
|
|
38
|
-
this.broadcastService = this.injector.get(LocalizeApiBroadcastService);
|
|
39
|
-
this.apiService = this.injector.get(LocalizeApiService);
|
|
40
|
-
this.decodeToken = this.tokenService.decodeRefreshToken;
|
|
41
24
|
this.loginConfig = this.dlgConfig.data.loginConfig;
|
|
25
|
+
this.apiLoginService = this.injector.get(LocalizeApiLoginService);
|
|
42
26
|
this.properties = this.loginConfig.properties;
|
|
43
|
-
this.
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
console.warn('Ignoring login state message with invalid payload or from same source', payload);
|
|
47
|
-
return;
|
|
48
|
-
}
|
|
49
|
-
switch (payload.state) {
|
|
50
|
-
case ELoginState.Requesting:
|
|
51
|
-
this.loading = true;
|
|
52
|
-
this.success = false;
|
|
53
|
-
break;
|
|
54
|
-
case ELoginState.Success:
|
|
55
|
-
this.apiService.clearRequiredLoginStateAfterLogin();
|
|
56
|
-
this.loginSuccess();
|
|
57
|
-
break;
|
|
58
|
-
case ELoginState.Error:
|
|
59
|
-
this.showMessage("error", (_a = payload.message) !== null && _a !== void 0 ? _a : "Login failed");
|
|
60
|
-
break;
|
|
61
|
-
}
|
|
62
|
-
});
|
|
27
|
+
this.decodeToken = this.apiLoginService.decodedToken;
|
|
28
|
+
this.logout = this.loginConfig.logoutFunc;
|
|
29
|
+
this.configure();
|
|
63
30
|
}
|
|
64
|
-
get
|
|
65
|
-
|
|
31
|
+
get loading() { return this.apiLoginService.isLoading; }
|
|
32
|
+
get success() { return this.apiLoginService.isSuccess; }
|
|
33
|
+
configure() {
|
|
34
|
+
var _a, _b;
|
|
66
35
|
this.dlgConfig.closable = false;
|
|
67
36
|
this.dlgConfig.dismissableMask = false;
|
|
68
37
|
this.dlgConfig.modal = true;
|
|
69
|
-
this.
|
|
70
|
-
|
|
38
|
+
this.apiLoginService.configure({
|
|
39
|
+
loginUrl: this.loginConfig.loginUrl,
|
|
40
|
+
onSuccess: this.loginSuccess.bind(this),
|
|
41
|
+
onFailure: (msg) => this.showMessage("error", msg),
|
|
42
|
+
onError: (msg) => this.showMessage("error", msg),
|
|
43
|
+
loginFunction: this.loginConfig.loginFunction,
|
|
44
|
+
refreshTokenTtl: this.loginConfig.expire,
|
|
45
|
+
passwordResolver: () => this.password,
|
|
46
|
+
passwordValidator: (_b = (_a = this.loginConfig.properties) === null || _a === void 0 ? void 0 : _a.passwordValidator) === null || _b === void 0 ? void 0 : _b.bind(this),
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
ngOnInit() {
|
|
71
50
|
if (!this.decodeToken) {
|
|
72
|
-
this.showMessage("error", "Token
|
|
51
|
+
this.showMessage("error", "Invalid Token. Please login again.");
|
|
73
52
|
setTimeout(() => { var _a; return (_a = this.logout) === null || _a === void 0 ? void 0 : _a.call(this); }, 2000);
|
|
74
53
|
}
|
|
75
54
|
}
|
|
@@ -78,85 +57,28 @@ class LocalizeTokenLoginDialogComponent {
|
|
|
78
57
|
}
|
|
79
58
|
loginSuccess() {
|
|
80
59
|
return __awaiter(this, void 0, void 0, function* () {
|
|
81
|
-
this.success = true;
|
|
82
60
|
yield waitFor(2000);
|
|
83
61
|
this.dlgRef.close(true);
|
|
84
62
|
});
|
|
85
63
|
}
|
|
86
64
|
clickLogin() {
|
|
87
|
-
var _a, _b, _c;
|
|
88
65
|
return __awaiter(this, void 0, void 0, function* () {
|
|
89
|
-
|
|
90
|
-
return this.showMessage("error", "Password is required and must be at least 6 characters");
|
|
91
|
-
}
|
|
92
|
-
this.publishLoginState(ELoginState.Requesting);
|
|
93
|
-
yield waitFor(300);
|
|
94
|
-
this.loading = true;
|
|
95
|
-
const loginRes = yield this.login();
|
|
96
|
-
if (!(loginRes === null || loginRes === void 0 ? void 0 : loginRes.status)) {
|
|
97
|
-
const message = (_a = loginRes === null || loginRes === void 0 ? void 0 : loginRes.message) !== null && _a !== void 0 ? _a : "An error occurred";
|
|
98
|
-
this.publishLoginState(ELoginState.Error, message);
|
|
99
|
-
return this.showMessage("error", message);
|
|
100
|
-
}
|
|
101
|
-
this.tokenService.accessToken = loginRes.tokens.accessToken;
|
|
102
|
-
const cookieOptions = { expires: (_b = this.loginConfig.expire) !== null && _b !== void 0 ? _b : 365 };
|
|
103
|
-
LocalizeApiToken.storage.set(((_c = this.config.refreshToken) === null || _c === void 0 ? void 0 : _c.name) || '', loginRes.tokens.refreshToken, cookieOptions);
|
|
104
|
-
this.apiService.clearRequiredLoginStateAfterLogin();
|
|
105
|
-
this.publishLoginState(ELoginState.Success);
|
|
106
|
-
this.loginSuccess();
|
|
66
|
+
yield this.apiLoginService.clickLogin();
|
|
107
67
|
});
|
|
108
68
|
}
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
sourceId: this.sourceId,
|
|
113
|
-
message,
|
|
114
|
-
});
|
|
115
|
-
}
|
|
116
|
-
login() {
|
|
117
|
-
var _a, _b, _c;
|
|
118
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
119
|
-
if (!((_a = this.loginUrl) === null || _a === void 0 ? void 0 : _a.trim().length)) {
|
|
120
|
-
this.showMessage("error", "Login url is required");
|
|
121
|
-
throw new Error("Login url is required");
|
|
122
|
-
}
|
|
123
|
-
try {
|
|
124
|
-
if (this.loginConfig.loginFunction) {
|
|
125
|
-
console.log("Using custom login function");
|
|
126
|
-
return yield this.loginConfig.loginFunction((_c = (_b = this.decodeToken) === null || _b === void 0 ? void 0 : _b.email) !== null && _c !== void 0 ? _c : '', this.password.trim(), this.getHeaders());
|
|
127
|
-
}
|
|
128
|
-
return yield new Promise((resolve, reject) => this.httpClient.post(this.loginUrl, { password: this.password.trim() }, { headers: this.getHeaders() }).subscribe({ next: resolve, error: reject }));
|
|
129
|
-
}
|
|
130
|
-
catch (e) {
|
|
131
|
-
this.showMessage("error", e.message);
|
|
132
|
-
return null;
|
|
133
|
-
}
|
|
134
|
-
});
|
|
135
|
-
}
|
|
136
|
-
getHeaders() {
|
|
137
|
-
var _a, _b;
|
|
138
|
-
return {
|
|
139
|
-
[LocalizeApiToken.httpHeaders.X_REFRESH_TOKEN]: (_a = this.tokenService.refreshToken) !== null && _a !== void 0 ? _a : "",
|
|
140
|
-
[LocalizeApiToken.httpHeaders.X_TENANT]: (_b = this.tokenService.tenantToken) !== null && _b !== void 0 ? _b : "",
|
|
141
|
-
};
|
|
142
|
-
}
|
|
143
|
-
get isValidPassword() {
|
|
144
|
-
this.loading = false;
|
|
145
|
-
return this.properties.passwordValidator
|
|
146
|
-
? this.properties.passwordValidator(this.password)
|
|
147
|
-
: this.password && this.password.trim().length >= 6 && this.password.trim().length <= 50;
|
|
69
|
+
clickLogout() {
|
|
70
|
+
var _a;
|
|
71
|
+
(_a = this.logout) === null || _a === void 0 ? void 0 : _a.call(this);
|
|
148
72
|
}
|
|
149
73
|
showMessage(severity, summary) {
|
|
150
74
|
this.messageService.add({ key: this.messageKey, severity, summary });
|
|
151
|
-
this.loading = false;
|
|
152
75
|
}
|
|
153
76
|
get sanitizedTitle() {
|
|
154
77
|
var _a;
|
|
155
78
|
return this.sanitizer.bypassSecurityTrustHtml((_a = this.properties.title) !== null && _a !== void 0 ? _a : '');
|
|
156
79
|
}
|
|
157
80
|
ngOnDestroy() {
|
|
158
|
-
|
|
159
|
-
(_a = this.removeLoginListener) === null || _a === void 0 ? void 0 : _a.call(this);
|
|
81
|
+
this.apiLoginService.unConfigure();
|
|
160
82
|
}
|
|
161
83
|
}
|
|
162
84
|
LocalizeTokenLoginDialogComponent.decorators = [
|
|
@@ -475,7 +397,6 @@ LocalizeTokenLoginDialogComponent.ctorParameters = () => [
|
|
|
475
397
|
{ type: ChangeDetectorRef },
|
|
476
398
|
{ type: DynamicDialogRef },
|
|
477
399
|
{ type: DynamicDialogConfig },
|
|
478
|
-
{ type: HttpClient },
|
|
479
400
|
{ type: DomSanitizer },
|
|
480
401
|
{ type: Injector }
|
|
481
402
|
];
|