@smartbit4all/ng-client 4.0.60 → 4.0.62
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/lib/session/smart-error-catching.interceptor.mjs +51 -27
- package/esm2022/lib/session/smart-session-handler.service.mjs +1 -1
- package/esm2022/lib/session/smart-session.service.mjs +31 -26
- package/esm2022/lib/smart-component-layout/smart-component-layout.component.mjs +10 -1
- package/esm2022/lib/smart-form/services/smartform.layout-definition.service.mjs +2 -1
- package/esm2022/lib/smart-form/widgets/smartformwidget/smartformwidget.component.mjs +3 -3
- package/esm2022/lib/smart-grid/smart-grid.component.mjs +29 -16
- package/esm2022/lib/smart-grid/smart-grid.service.mjs +1 -1
- package/esm2022/lib/smart-table/tables/mobile-table/mobile-table.component.mjs +3 -3
- package/esm2022/lib/view-context/api/api/api.mjs +1 -1
- package/esm2022/lib/view-context/api/api/view.service.mjs +1 -1
- package/esm2022/lib/view-context/api/api.module.mjs +1 -1
- package/esm2022/lib/view-context/api/configuration.mjs +1 -1
- package/esm2022/lib/view-context/api/encoder.mjs +1 -1
- package/esm2022/lib/view-context/api/index.mjs +1 -1
- package/esm2022/lib/view-context/api/model/clipboardData.mjs +1 -1
- package/esm2022/lib/view-context/api/model/closeResult.mjs +1 -1
- package/esm2022/lib/view-context/api/model/componentConstraint.mjs +1 -1
- package/esm2022/lib/view-context/api/model/componentModel.mjs +1 -1
- package/esm2022/lib/view-context/api/model/componentModelChange.mjs +1 -1
- package/esm2022/lib/view-context/api/model/dataChange.mjs +1 -1
- package/esm2022/lib/view-context/api/model/dataChangeEvent.mjs +1 -1
- package/esm2022/lib/view-context/api/model/dataChangeKind.mjs +1 -1
- package/esm2022/lib/view-context/api/model/deviceInfo.mjs +13 -0
- package/esm2022/lib/view-context/api/model/downloadedFile.mjs +1 -1
- package/esm2022/lib/view-context/api/model/iconPosition.mjs +1 -1
- package/esm2022/lib/view-context/api/model/imageResource.mjs +1 -1
- package/esm2022/lib/view-context/api/model/link.mjs +1 -1
- package/esm2022/lib/view-context/api/model/messageData.mjs +1 -1
- package/esm2022/lib/view-context/api/model/messageOption.mjs +1 -1
- package/esm2022/lib/view-context/api/model/messageOptionType.mjs +1 -1
- package/esm2022/lib/view-context/api/model/messageResult.mjs +1 -1
- package/esm2022/lib/view-context/api/model/messageTextType.mjs +1 -1
- package/esm2022/lib/view-context/api/model/messageType.mjs +1 -1
- package/esm2022/lib/view-context/api/model/models.mjs +2 -1
- package/esm2022/lib/view-context/api/model/openPendingData.mjs +1 -1
- package/esm2022/lib/view-context/api/model/serverRequestExecutionStat.mjs +1 -1
- package/esm2022/lib/view-context/api/model/serverRequestTrack.mjs +1 -1
- package/esm2022/lib/view-context/api/model/serverRequestType.mjs +1 -1
- package/esm2022/lib/view-context/api/model/smartLinkData.mjs +1 -1
- package/esm2022/lib/view-context/api/model/statisticRecord.mjs +1 -1
- package/esm2022/lib/view-context/api/model/style.mjs +1 -1
- package/esm2022/lib/view-context/api/model/uiAction.mjs +1 -1
- package/esm2022/lib/view-context/api/model/uiActionButtonDescriptor.mjs +1 -12
- package/esm2022/lib/view-context/api/model/uiActionButtonType.mjs +1 -1
- package/esm2022/lib/view-context/api/model/uiActionConstraint.mjs +1 -1
- package/esm2022/lib/view-context/api/model/uiActionDescriptor.mjs +1 -1
- package/esm2022/lib/view-context/api/model/uiActionDialogDescriptor.mjs +1 -1
- package/esm2022/lib/view-context/api/model/uiActionFeedbackType.mjs +1 -1
- package/esm2022/lib/view-context/api/model/uiActionInputType.mjs +1 -1
- package/esm2022/lib/view-context/api/model/uiActionRequest.mjs +1 -1
- package/esm2022/lib/view-context/api/model/uiActionTooltip.mjs +1 -1
- package/esm2022/lib/view-context/api/model/uiActionUploadDescriptor.mjs +1 -1
- package/esm2022/lib/view-context/api/model/valueSet.mjs +1 -1
- package/esm2022/lib/view-context/api/model/view.mjs +1 -1
- package/esm2022/lib/view-context/api/model/viewApiError.mjs +1 -1
- package/esm2022/lib/view-context/api/model/viewConstraint.mjs +1 -1
- package/esm2022/lib/view-context/api/model/viewContext.mjs +1 -1
- package/esm2022/lib/view-context/api/model/viewContextChange.mjs +1 -1
- package/esm2022/lib/view-context/api/model/viewContextData.mjs +1 -1
- package/esm2022/lib/view-context/api/model/viewContextUpdate.mjs +1 -1
- package/esm2022/lib/view-context/api/model/viewData.mjs +1 -1
- package/esm2022/lib/view-context/api/model/viewPlaceholder.mjs +1 -1
- package/esm2022/lib/view-context/api/model/viewState.mjs +1 -1
- package/esm2022/lib/view-context/api/model/viewStateUpdate.mjs +1 -1
- package/esm2022/lib/view-context/api/model/viewType.mjs +1 -1
- package/esm2022/lib/view-context/api/param.mjs +1 -1
- package/esm2022/lib/view-context/api/variables.mjs +1 -1
- package/esm2022/lib/view-context/projects.mjs +2 -1
- package/esm2022/lib/view-context/smart-ui-action/dialogs/ui-action-confirm-dialog/ui-action-confirm-dialog.component.mjs +16 -17
- package/esm2022/lib/view-context/smart-ui-action/dialogs/ui-action-dialog-button/ui-action-dialog-button.component.mjs +60 -0
- package/esm2022/lib/view-context/smart-ui-action/dialogs/ui-action-file-upload-dialog/ui-action-file-upload-dialog.component.mjs +3 -3
- package/esm2022/lib/view-context/smart-ui-action/dialogs/ui-action-input-dialog/ui-action-input-dialog.component.mjs +16 -18
- package/esm2022/lib/view-context/smart-view-context.module.mjs +6 -1
- package/fesm2022/smartbit4all-ng-client.mjs +208 -106
- package/fesm2022/smartbit4all-ng-client.mjs.map +1 -1
- package/lib/session/smart-error-catching.interceptor.d.ts +8 -4
- package/lib/session/smart-session-handler.service.d.ts +10 -0
- package/lib/session/smart-session.service.d.ts +2 -0
- package/lib/smart-grid/smart-grid.component.d.ts +7 -1
- package/lib/smart-grid/smart-grid.service.d.ts +4 -3
- package/lib/view-context/api/model/deviceInfo.d.ts +38 -0
- package/lib/view-context/api/model/models.d.ts +1 -0
- package/lib/view-context/api/model/uiActionButtonDescriptor.d.ts +7 -0
- package/lib/view-context/api/model/viewContext.d.ts +2 -0
- package/lib/view-context/api/model/viewContextUpdate.d.ts +2 -0
- package/lib/view-context/projects.d.ts +1 -0
- package/lib/view-context/smart-ui-action/dialogs/ui-action-confirm-dialog/ui-action-confirm-dialog.component.d.ts +4 -5
- package/lib/view-context/smart-ui-action/dialogs/ui-action-dialog-button/ui-action-dialog-button.component.d.ts +15 -0
- package/lib/view-context/smart-ui-action/dialogs/ui-action-input-dialog/ui-action-input-dialog.component.d.ts +4 -5
- package/lib/view-context/smart-view-context.module.d.ts +44 -43
- package/package.json +1 -1
- package/smartbit4all-ng-client-4.0.62.tgz +0 -0
- package/smartbit4all-ng-client-4.0.60.tgz +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { Injectable } from
|
|
2
|
-
import { from, throwError } from
|
|
3
|
-
import { catchError, switchMap } from
|
|
4
|
-
import { SessionErrorBehaviour, } from
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { from, throwError } from 'rxjs';
|
|
3
|
+
import { catchError, switchMap } from 'rxjs/operators';
|
|
4
|
+
import { SessionErrorBehaviour, } from './projects';
|
|
5
5
|
import * as i0 from "@angular/core";
|
|
6
6
|
import * as i1 from "./projects";
|
|
7
7
|
export class SmartErrorCatchingInterceptor {
|
|
@@ -9,52 +9,68 @@ export class SmartErrorCatchingInterceptor {
|
|
|
9
9
|
this.session = session;
|
|
10
10
|
this.sessionErrorCodes = [
|
|
11
11
|
{
|
|
12
|
-
code:
|
|
12
|
+
code: 'session.expired',
|
|
13
13
|
behaviour: SessionErrorBehaviour.REFRESH,
|
|
14
14
|
},
|
|
15
15
|
{
|
|
16
|
-
code:
|
|
16
|
+
code: 'session.refreshtoken.invalid',
|
|
17
17
|
behaviour: SessionErrorBehaviour.RESTART,
|
|
18
18
|
},
|
|
19
19
|
{
|
|
20
|
-
code:
|
|
20
|
+
code: 'session.badrequest.missingtoken',
|
|
21
21
|
behaviour: SessionErrorBehaviour.RESTART,
|
|
22
22
|
},
|
|
23
23
|
{
|
|
24
|
-
code:
|
|
24
|
+
code: 'session.security.nocontext',
|
|
25
25
|
behaviour: SessionErrorBehaviour.RESTART,
|
|
26
26
|
},
|
|
27
27
|
{
|
|
28
|
-
code:
|
|
28
|
+
code: 'session.invalidsessionuri',
|
|
29
29
|
behaviour: SessionErrorBehaviour.RESTART,
|
|
30
30
|
},
|
|
31
31
|
{
|
|
32
|
-
code:
|
|
32
|
+
code: 'session.notinitialized',
|
|
33
33
|
behaviour: SessionErrorBehaviour.RESTART,
|
|
34
34
|
},
|
|
35
35
|
{
|
|
36
|
-
code:
|
|
36
|
+
code: 'session.viewcontext.missing',
|
|
37
37
|
behaviour: SessionErrorBehaviour.RESTART,
|
|
38
38
|
},
|
|
39
39
|
];
|
|
40
40
|
}
|
|
41
41
|
intercept(request, next) {
|
|
42
|
-
return next
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
return next.handle(request);
|
|
53
|
-
}
|
|
54
|
-
|
|
42
|
+
return next
|
|
43
|
+
.handle(request)
|
|
44
|
+
.pipe(catchError((error) => this.handleError(error, request, next)));
|
|
45
|
+
}
|
|
46
|
+
handleError(error, request, next) {
|
|
47
|
+
if (this.isSessionError(error)) {
|
|
48
|
+
const sessionError = this.getSessionError(error);
|
|
49
|
+
if (sessionError) {
|
|
50
|
+
return this.resolveError(sessionError).pipe(switchMap((resolved) => {
|
|
51
|
+
if (resolved && sessionError.behaviour === SessionErrorBehaviour.REFRESH) {
|
|
52
|
+
return next.handle(this.updateRequestHeaders(request));
|
|
53
|
+
}
|
|
54
|
+
return throwError(() => error);
|
|
55
|
+
}), catchError((resolveError) => {
|
|
56
|
+
// when the resolveError throws a restart error (in the refreshSession), rethrow the original error
|
|
57
|
+
if (this.isSessionError(resolveError)) {
|
|
58
|
+
const resolveSessionError = this.getSessionError(resolveError);
|
|
59
|
+
if (resolveSessionError?.behaviour === SessionErrorBehaviour.RESTART) {
|
|
60
|
+
return throwError(() => error);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return throwError(() => resolveError);
|
|
64
|
+
}));
|
|
55
65
|
}
|
|
56
|
-
|
|
57
|
-
|
|
66
|
+
}
|
|
67
|
+
return throwError(() => error);
|
|
68
|
+
}
|
|
69
|
+
isSessionError(error) {
|
|
70
|
+
return error.status === 400 && error.error.code != null;
|
|
71
|
+
}
|
|
72
|
+
getSessionError(error) {
|
|
73
|
+
return this.sessionErrorCodes.find((sessionError) => sessionError.code === error.error.code);
|
|
58
74
|
}
|
|
59
75
|
resolveError(sessionError) {
|
|
60
76
|
if (sessionError.behaviour === SessionErrorBehaviour.RESTART) {
|
|
@@ -62,10 +78,18 @@ export class SmartErrorCatchingInterceptor {
|
|
|
62
78
|
}
|
|
63
79
|
return from(this.session.refreshSession());
|
|
64
80
|
}
|
|
81
|
+
updateRequestHeaders(request) {
|
|
82
|
+
this.session.headerParams.forEach((headerParam) => {
|
|
83
|
+
request = request.clone({
|
|
84
|
+
headers: request.headers.set(headerParam.headerName, headerParam.value),
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
return request;
|
|
88
|
+
}
|
|
65
89
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartErrorCatchingInterceptor, deps: [{ token: i1.SmartSessionService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
66
90
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartErrorCatchingInterceptor }); }
|
|
67
91
|
}
|
|
68
92
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartErrorCatchingInterceptor, decorators: [{
|
|
69
93
|
type: Injectable
|
|
70
94
|
}], ctorParameters: () => [{ type: i1.SmartSessionService }] });
|
|
71
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
95
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtZXJyb3ItY2F0Y2hpbmcuaW50ZXJjZXB0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi9zZXNzaW9uL3NtYXJ0LWVycm9yLWNhdGNoaW5nLmludGVyY2VwdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU9BLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLElBQUksRUFBYyxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDcEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2RCxPQUFPLEVBSUwscUJBQXFCLEdBRXRCLE1BQU0sWUFBWSxDQUFDOzs7QUFHcEIsTUFBTSxPQUFPLDZCQUE2QjtJQWdDeEMsWUFBb0IsT0FBNEI7UUFBNUIsWUFBTyxHQUFQLE9BQU8sQ0FBcUI7UUEvQmhELHNCQUFpQixHQUFtQjtZQUNsQztnQkFDRSxJQUFJLEVBQUUsaUJBQWlCO2dCQUN2QixTQUFTLEVBQUUscUJBQXFCLENBQUMsT0FBTzthQUN6QztZQUNEO2dCQUNFLElBQUksRUFBRSw4QkFBOEI7Z0JBQ3BDLFNBQVMsRUFBRSxxQkFBcUIsQ0FBQyxPQUFPO2FBQ3pDO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLGlDQUFpQztnQkFDdkMsU0FBUyxFQUFFLHFCQUFxQixDQUFDLE9BQU87YUFDekM7WUFDRDtnQkFDRSxJQUFJLEVBQUUsNEJBQTRCO2dCQUNsQyxTQUFTLEVBQUUscUJBQXFCLENBQUMsT0FBTzthQUN6QztZQUNEO2dCQUNFLElBQUksRUFBRSwyQkFBMkI7Z0JBQ2pDLFNBQVMsRUFBRSxxQkFBcUIsQ0FBQyxPQUFPO2FBQ3pDO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLHdCQUF3QjtnQkFDOUIsU0FBUyxFQUFFLHFCQUFxQixDQUFDLE9BQU87YUFDekM7WUFDRDtnQkFD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LENBQUMsV0FBd0IsRUFBRSxFQUFFO1lBQzdELE9BQU8sR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO2dCQUN0QixPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxXQUFXLENBQUMsS0FBSyxDQUFDO2FBQ3hFLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQzsrR0EvRlUsNkJBQTZCO21IQUE3Qiw2QkFBNkI7OzRGQUE3Qiw2QkFBNkI7a0JBRHpDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEh0dHBFcnJvclJlc3BvbnNlLFxyXG4gIEh0dHBFdmVudCxcclxuICBIdHRwSGFuZGxlcixcclxuICBIdHRwSW50ZXJjZXB0b3IsXHJcbiAgSHR0cFJlcXVlc3QsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IGZyb20sIE9ic2VydmFibGUsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgY2F0Y2hFcnJvciwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQge1xyXG4gIEFwaUVycm9yLFxyXG4gIEhlYWRlclBhcmFtLFxyXG4gIFNlc3Npb25FcnJvcixcclxuICBTZXNzaW9uRXJyb3JCZWhhdmlvdXIsXHJcbiAgU21hcnRTZXNzaW9uU2VydmljZSxcclxufSBmcm9tICcuL3Byb2plY3RzJztcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIFNtYXJ0RXJyb3JDYXRjaGluZ0ludGVyY2VwdG9yIGltcGxlbWVudHMgSHR0cEludGVyY2VwdG9yIHtcclxuICBzZXNzaW9uRXJyb3JDb2RlczogU2Vzc2lvbkVycm9yW10gPSBbXHJcbiAgICB7XHJcbiAgICAgIGNvZGU6ICdzZXNzaW9uLmV4cGlyZWQnLFxyXG4gICAgICBiZWhhdmlvdXI6IFNlc3Npb25FcnJvckJlaGF2aW91ci5SRUZSRVNILFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgY29kZTogJ3Nlc3Npb24ucmVmcmVzaHRva2VuLmludmFsaWQnLFxyXG4gICAgICBiZWhhdmlvdXI6IFNlc3Npb25FcnJvckJlaGF2aW91ci5SRVNUQVJULFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgY29kZTogJ3Nlc3Npb24uYmFkcmVxdWVzdC5taXNzaW5ndG9rZW4nLFxyXG4gICAgICBiZWhhdmlvdXI6IFNlc3Npb25FcnJvckJlaGF2aW91ci5SRVNUQVJULFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgY29kZTogJ3Nlc3Npb24uc2VjdXJpdHkubm9jb250ZXh0JyxcclxuICAgICAgYmVoYXZpb3VyOiBTZXNzaW9uRXJyb3JCZWhhdmlvdXIuUkVTVEFSVCxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGNvZGU6ICdzZXNzaW9uLmludmFsaWRzZXNzaW9udXJpJyxcclxuICAgICAgYmVoYXZpb3VyOiBTZXNzaW9uRXJyb3JCZWhhdmlvdXIuUkVTVEFSVCxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGNvZGU6ICdzZXNzaW9uLm5vdGluaXRpYWxpemVkJyxcclxuICAgICAgYmVoYXZpb3VyOiBTZXNzaW9uRXJyb3JCZWhhdmlvdXIuUkVTVEFSVCxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGNvZGU6ICdzZXNzaW9uLnZpZXdjb250ZXh0Lm1pc3NpbmcnLFxyXG4gICAgICBiZWhhdmlvdXI6IFNlc3Npb25FcnJvckJlaGF2aW91ci5SRVNUQVJULFxyXG4gICAgfSxcclxuICBdO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHNlc3Npb246IFNtYXJ0U2Vzc2lvblNlcnZpY2UpIHt9XHJcblxyXG4gIGludGVyY2VwdChyZXF1ZXN0OiBIdHRwUmVxdWVzdDx1bmtub3duPiwgbmV4dDogSHR0cEhhbmRsZXIpOiBPYnNlcnZhYmxlPEh0dHBFdmVudDx1bmtub3duPj4ge1xyXG4gICAgcmV0dXJuIG5leHRcclxuICAgICAgLmhhbmRsZShyZXF1ZXN0KVxyXG4gICAgICAucGlwZShjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHRoaXMuaGFuZGxlRXJyb3IoZXJyb3IsIHJlcXVlc3QsIG5leHQpKSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZUVycm9yKFxyXG4gICAgZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlLFxyXG4gICAgcmVxdWVzdDogSHR0cFJlcXVlc3Q8dW5rbm93bj4sXHJcbiAgICBuZXh0OiBIdHRwSGFuZGxlclxyXG4gICk6IE9ic2VydmFibGU8SHR0cEV2ZW50PHVua25vd24+PiB7XHJcbiAgICBpZiAodGhpcy5pc1Nlc3Npb25FcnJvcihlcnJvcikpIHtcclxuICAgICAgY29uc3Qgc2Vzc2lvbkVycm9yID0gdGhpcy5nZXRTZXNzaW9uRXJyb3IoZXJyb3IpO1xyXG4gICAgICBpZiAoc2Vzc2lvbkVycm9yKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVzb2x2ZUVycm9yKHNlc3Npb25FcnJvcikucGlwZShcclxuICAgICAgICAgIHN3aXRjaE1hcCgocmVzb2x2ZWQpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlc29sdmVkICYmIHNlc3Npb25FcnJvci5iZWhhdmlvdXIgPT09IFNlc3Npb25FcnJvckJlaGF2aW91ci5SRUZSRVNIKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIG5leHQuaGFuZGxlKHRoaXMudXBkYXRlUmVxdWVzdEhlYWRlcnMocmVxdWVzdCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycm9yKTtcclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgY2F0Y2hFcnJvcigocmVzb2x2ZUVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgIC8vIHdoZW4gdGhlIHJlc29sdmVFcnJvciB0aHJvd3MgYSByZXN0YXJ0IGVycm9yIChpbiB0aGUgcmVmcmVzaFNlc3Npb24pLCByZXRocm93IHRoZSBvcmlnaW5hbCBlcnJvclxyXG4gICAgICAgICAgICBpZiAodGhpcy5pc1Nlc3Npb25FcnJvcihyZXNvbHZlRXJyb3IpKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgcmVzb2x2ZVNlc3Npb25FcnJvciA9IHRoaXMuZ2V0U2Vzc2lvbkVycm9yKHJlc29sdmVFcnJvcik7XHJcbiAgICAgICAgICAgICAgaWYgKHJlc29sdmVTZXNzaW9uRXJyb3I/LmJlaGF2aW91ciA9PT0gU2Vzc2lvbkVycm9yQmVoYXZpb3VyLlJFU1RBUlQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycm9yKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gcmVzb2x2ZUVycm9yKTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyb3IpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpc1Nlc3Npb25FcnJvcihlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBlcnJvci5zdGF0dXMgPT09IDQwMCAmJiAoZXJyb3IuZXJyb3IgYXMgQXBpRXJyb3IpLmNvZGUgIT0gbnVsbDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0U2Vzc2lvbkVycm9yKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSk6IFNlc3Npb25FcnJvciB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5zZXNzaW9uRXJyb3JDb2Rlcy5maW5kKFxyXG4gICAgICAoc2Vzc2lvbkVycm9yOiBTZXNzaW9uRXJyb3IpID0+IHNlc3Npb25FcnJvci5jb2RlID09PSAoZXJyb3IuZXJyb3IgYXMgQXBpRXJyb3IpLmNvZGVcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlc29sdmVFcnJvcihzZXNzaW9uRXJyb3I6IFNlc3Npb25FcnJvcik6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICBpZiAoc2Vzc2lvbkVycm9yLmJlaGF2aW91ciA9PT0gU2Vzc2lvbkVycm9yQmVoYXZpb3VyLlJFU1RBUlQpIHtcclxuICAgICAgcmV0dXJuIGZyb20odGhpcy5zZXNzaW9uLmhhbmRsZVNlc3Npb25FcnJvcihzZXNzaW9uRXJyb3IpKTtcclxuICAgIH1cclxuICAgIHJldHVybiBmcm9tKHRoaXMuc2Vzc2lvbi5yZWZyZXNoU2Vzc2lvbigpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlUmVxdWVzdEhlYWRlcnMocmVxdWVzdDogSHR0cFJlcXVlc3Q8dW5rbm93bj4pOiBIdHRwUmVxdWVzdDx1bmtub3duPiB7XHJcbiAgICB0aGlzLnNlc3Npb24uaGVhZGVyUGFyYW1zLmZvckVhY2goKGhlYWRlclBhcmFtOiBIZWFkZXJQYXJhbSkgPT4ge1xyXG4gICAgICByZXF1ZXN0ID0gcmVxdWVzdC5jbG9uZSh7XHJcbiAgICAgICAgaGVhZGVyczogcmVxdWVzdC5oZWFkZXJzLnNldChoZWFkZXJQYXJhbS5oZWFkZXJOYW1lLCBoZWFkZXJQYXJhbS52YWx1ZSksXHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gcmVxdWVzdDtcclxuICB9XHJcbn1cclxuIl19
|
|
@@ -3,4 +3,4 @@ export var SessionErrorBehaviour;
|
|
|
3
3
|
SessionErrorBehaviour[SessionErrorBehaviour["REFRESH"] = 0] = "REFRESH";
|
|
4
4
|
SessionErrorBehaviour[SessionErrorBehaviour["RESTART"] = 1] = "RESTART";
|
|
5
5
|
})(SessionErrorBehaviour || (SessionErrorBehaviour = {}));
|
|
6
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtc2Vzc2lvbi1oYW5kbGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi9zZXNzaW9uL3NtYXJ0LXNlc3Npb24taGFuZGxlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQW1CQSxNQUFNLENBQU4sSUFBWSxxQkFHWDtBQUhELFdBQVkscUJBQXFCO0lBQy9CLHVFQUFPLENBQUE7SUFDUCx1RUFBTyxDQUFBO0FBQ1QsQ0FBQyxFQUhXLHFCQUFxQixLQUFyQixxQkFBcUIsUUFHaEMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIFNtYXJ0U2Vzc2lvbkhhbmRsZXJTZXJ2aWNlIHtcclxuICAvKipcclxuICAgKiBIYW5kbGVzIFNlc3Npb25FcnJvcnMgd2l0aCBSRVNUQVJUIGJlaGF2aW91ci4gV2l0aCB0aGlzIG1ldGhvZCBpdCBpcyBwb3NzaWJsZSB0byBhZGQgYXBwbGljYXRpb25cclxuICAgKiBzcGVjaWZpYyBsb2dpYyB0byB0aGUgc2Vzc2lvbiByZXN0YXJ0IG1lY2hhbmlzbS5cclxuICAgKiBFLmcuOiBuYXZpZ2F0ZSB0byB0aGUgbG9naW4gcGFnZSB3aGVuIHRoZSBzZXNzaW9uIGNhbiBub3QgYmUgcmVmcmVzaGVkLlxyXG4gICAqXHJcbiAgICogQnkgZGVmYXVsdCB3aGVuIHRoZSBzZXNzaW9uIGNhbiBub3QgYmUgcmVmcmVzaGVkLCB0aGUgc21hcnQtc2Vzc2lvbi5zZXJ2aWNlIGNsZWFycyBhbmQgc3RhcnRzIGEgbmV3IHNlc3Npb24uXHJcbiAgICogQnkgdGhyb3dpbmcgYW4gZXhjZXB0aW9uIGluIHRoaXMgbWV0aG9kIGl0IGlzIHBvc3NpYmxlIHRvIGF2b2lkIHRoaXMgZGVmYXVsdCBmdW5jdGlvbmFsaXR5LFxyXG4gICAqIGFuZCBoYW5kbGUgdGhlIHNlc3Npb24gcmVjcmVhdGlvbiBjb21wbGV0ZWx5IGhlcmUgaW4gdGhlIGFwcGxpY2F0aW9uIGxldmVsLlxyXG4gICAqIEBwYXJhbSBzZXNzaW9uRXJyb3IgdGhlIFNlc3Npb25FcnJvciB3aXRoIFJFU1RBUlQgYmVoYXZpb3VyIGNhY2hlZCBpbiB0aGUgaHR0cCBpbnRlcmNlcHRvclxyXG4gICAqL1xyXG4gIGhhbmRsZVNlc3Npb25FcnJvcihzZXNzaW9uRXJyb3I6IFNlc3Npb25FcnJvcik6IFByb21pc2U8dm9pZD47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgU2Vzc2lvbkVycm9yIHtcclxuICBjb2RlOiBzdHJpbmc7XHJcbiAgYmVoYXZpb3VyOiBTZXNzaW9uRXJyb3JCZWhhdmlvdXI7XHJcbn1cclxuXHJcbmV4cG9ydCBlbnVtIFNlc3Npb25FcnJvckJlaGF2aW91ciB7XHJcbiAgUkVGUkVTSCxcclxuICBSRVNUQVJULFxyXG59XHJcbiJdfQ==
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import { HttpErrorResponse } from '@angular/common/http';
|
|
1
2
|
import { Injectable } from '@angular/core';
|
|
2
|
-
import { Subject } from 'rxjs';
|
|
3
|
+
import { lastValueFrom, Subject } from 'rxjs';
|
|
3
4
|
import { SmartSubject } from '../smart-subject/projects';
|
|
4
5
|
import * as i0 from "@angular/core";
|
|
5
6
|
import * as i1 from "./api";
|
|
@@ -37,7 +38,7 @@ export class SmartSessionService {
|
|
|
37
38
|
}
|
|
38
39
|
async handleSessionError(sessionError) {
|
|
39
40
|
if (this.sessionHandlerService) {
|
|
40
|
-
await this.sessionHandlerService.handleSessionError(sessionError);
|
|
41
|
+
return await this.sessionHandlerService.handleSessionError(sessionError);
|
|
41
42
|
}
|
|
42
43
|
throw new Error(`sessionHandlerService was not initialized. Error: ${sessionError.code}`);
|
|
43
44
|
}
|
|
@@ -132,11 +133,7 @@ export class SmartSessionService {
|
|
|
132
133
|
async startSession() {
|
|
133
134
|
let sessionInfo = await this.apiService.startSession().toPromise();
|
|
134
135
|
if (sessionInfo) {
|
|
135
|
-
this.
|
|
136
|
-
this.token = sessionInfo.sid;
|
|
137
|
-
this.saveTokenToLocalStorage();
|
|
138
|
-
this.setAuthenticationStatus();
|
|
139
|
-
this.setUpTokenForSessionService();
|
|
136
|
+
this.updateSessionInfo(sessionInfo);
|
|
140
137
|
}
|
|
141
138
|
return this.sessionInfoData;
|
|
142
139
|
}
|
|
@@ -155,26 +152,34 @@ export class SmartSessionService {
|
|
|
155
152
|
if (!refreshToken) {
|
|
156
153
|
return await this.startSession();
|
|
157
154
|
}
|
|
158
|
-
|
|
159
|
-
.refreshSession({
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
.catch(async (error) => {
|
|
164
|
-
if (error.error &&
|
|
165
|
-
error.error.code &&
|
|
166
|
-
error.error.code === 'session.refreshtoken.invalid') {
|
|
167
|
-
await this.startSession();
|
|
155
|
+
try {
|
|
156
|
+
const sessionInfo = await lastValueFrom(this.apiService.refreshSession({ refreshToken }));
|
|
157
|
+
if (sessionInfo) {
|
|
158
|
+
this.updateSessionInfo(sessionInfo);
|
|
159
|
+
return sessionInfo;
|
|
168
160
|
}
|
|
169
|
-
});
|
|
170
|
-
if (sessionInfo) {
|
|
171
|
-
this.sessionInfoData = sessionInfo;
|
|
172
|
-
this.token = sessionInfo.sid;
|
|
173
|
-
this.saveTokenToLocalStorage();
|
|
174
|
-
this.setAuthenticationStatus();
|
|
175
|
-
this.setUpTokenForSessionService();
|
|
176
161
|
}
|
|
177
|
-
|
|
162
|
+
catch (error) {
|
|
163
|
+
if (this.isInvalidRefreshTokenError(error)) {
|
|
164
|
+
this.clearAndStartNewSession();
|
|
165
|
+
// still throw the error, so the error can be handled in the caller
|
|
166
|
+
}
|
|
167
|
+
throw error;
|
|
168
|
+
}
|
|
169
|
+
// no sessionInfo returned
|
|
170
|
+
throw new Error('Unable to refresh session');
|
|
171
|
+
}
|
|
172
|
+
updateSessionInfo(sessionInfo) {
|
|
173
|
+
this.sessionInfoData = sessionInfo;
|
|
174
|
+
this.token = sessionInfo.sid;
|
|
175
|
+
this.saveTokenToLocalStorage();
|
|
176
|
+
this.setAuthenticationStatus();
|
|
177
|
+
this.setUpTokenForSessionService();
|
|
178
|
+
}
|
|
179
|
+
isInvalidRefreshTokenError(error) {
|
|
180
|
+
return (error instanceof HttpErrorResponse &&
|
|
181
|
+
error.error &&
|
|
182
|
+
error.error.code === 'session.refreshtoken.invalid');
|
|
178
183
|
}
|
|
179
184
|
async getAuthenticationProviders() {
|
|
180
185
|
let providers = await this.apiService
|
|
@@ -222,4 +227,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
|
|
|
222
227
|
providedIn: 'root',
|
|
223
228
|
}]
|
|
224
229
|
}], ctorParameters: () => [{ type: i1.SessionService }, { type: i2.SmartCookieService }] });
|
|
225
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtc2Vzc2lvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtbmctY2xpZW50L3NyYy9saWIvc2Vzc2lvbi9zbWFydC1zZXNzaW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUN0RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBVS9CLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7OztBQVN6RCxNQUFNLE9BQU8sbUJBQW1CO0lBTTlCLElBQVcsZUFBZTtRQUN4QixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztJQUMvQixDQUFDO0lBQ0QsSUFBWSxlQUFlLENBQUMsZUFBNEM7UUFDdEUsSUFBSSxlQUFlLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRSxVQUFVLEtBQUssZUFBZSxFQUFFLFVBQVUsQ0FBQztRQUV2RixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsZUFBZSxDQUFDO1FBRXhDLElBQUksZUFBZSxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3JDLENBQUM7SUFDSCxDQUFDO0lBb0JELFlBQW9CLFVBQTBCLEVBQVUsYUFBaUM7UUFBckUsZUFBVSxHQUFWLFVBQVUsQ0FBZ0I7UUFBVSxrQkFBYSxHQUFiLGFBQWEsQ0FBb0I7UUFqQ2pGLGNBQVMsR0FBa0IsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQWlCMUMsb0JBQWUsR0FBWSxLQUFLLENBQUM7UUFFakMsK0JBQTBCLEdBQXFCLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUVoRixpQkFBWSxHQUF1QixJQUFJLEtBQUssRUFBRSxDQUFDO1FBQy9DLG1CQUFjLEdBQWtCLElBQUksWUFBWSxDQUFDLElBQUks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QixDQUFDO0lBRU0sU0FBUztRQUNkLElBQUksSUFBSSxDQUFDLGVBQWUsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3hELElBQUksWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsS0FBSyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUN0RixZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2pGLENBQUM7WUFDRCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDO1FBQ3JDLENBQUM7UUFDRCxNQUFNLElBQUksS0FBSyxDQUFDLHFEQUFxRCxDQUFDLENBQUM7SUFDekUsQ0FBQztJQUVNLEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBYztRQUN0QyxJQUFJLENBQUMsZUFBZSxHQUFHLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDM0UsSUFBSSxJQUFJLENBQUMsZUFBZSxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDeEQsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMvRSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzVCLENBQUM7SUFDSCxDQUFDOytHQTdQVSxtQkFBbUI7bUhBQW5CLG1CQUFtQixjQUZsQixNQUFNOzs0RkFFUCxtQkFBbUI7a0JBSC9CLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEluamVjdGFibGUsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7XHJcbiAgQXBpRXJyb3IsXHJcbiAgQXV0aGVudGljYXRpb25Qcm92aWRlckRhdGEsXHJcbiAgR2V0QXV0aGVudGljYXRpb25Qcm92aWRlcnNSZXNwb25zZSxcclxuICBTZXNzaW9uSW5mb0RhdGEsXHJcbiAgU2Vzc2lvblNlcnZpY2UsXHJcbn0gZnJvbSAnLi9hcGknO1xyXG5pbXBvcnQgeyBTbWFydENvb2tpZVNlcnZpY2UgfSBmcm9tICcuL2Nvb2tpZS1zZXJ2aWNlL3NtYXJ0LWNvb2tpZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU2Vzc2lvbkVycm9yLCBTbWFydFNlc3Npb25IYW5kbGVyU2VydmljZSB9IGZyb20gJy4vc21hcnQtc2Vzc2lvbi1oYW5kbGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTbWFydFN1YmplY3QgfSBmcm9tICcuLi9zbWFydC1zdWJqZWN0L3Byb2plY3RzJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSGVhZGVyUGFyYW0ge1xyXG4gIGhlYWRlck5hbWU6IHN0cmluZztcclxuICB2YWx1ZTogc3RyaW5nO1xyXG59XHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTbWFydFNlc3Npb25TZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcclxuICBwcml2YXRlIGJhc2VQYXRoPzogc3RyaW5nO1xyXG4gIHByaXZhdGUgdG9rZW4/OiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSBfc2Vzc2lvbkluZm9EYXRhPzogU2Vzc2lvbkluZm9EYXRhO1xyXG4gIHByaXZhdGUgX2Rlc3Ryb3kkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgcHVibGljIGdldCBzZXNzaW9uSW5mb0RhdGEoKTogU2Vzc2lvbkluZm9EYXRhIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLl9zZXNzaW9uSW5mb0RhdGE7XHJcbiAgfVxyXG4gIHByaXZhdGUgc2V0IHNlc3Npb25JbmZvRGF0YShzZXNzaW9uSW5mb0RhdGE6IFNlc3Npb25JbmZvRGF0YSB8IHVuZGVmaW5lZCkge1xyXG4gICAgbGV0IGV4cGlyYWN5Q2hhbmdlZCA9IHRoaXMuc2Vzc2lvbkluZm9EYXRhPy5leHBpcmF0aW9uICE9PSBzZXNzaW9uSW5mb0RhdGE/LmV4cGlyYXRpb247XHJcblxyXG4gICAgdGhpcy5fc2Vzc2lvbkluZm9EYXRhID0gc2Vzc2lvbkluZm9EYXRhO1xyXG5cclxuICAgIGlmIChleHBpcmFjeUNoYW5nZWQpIHtcclxuICAgICAgdGhpcy5zZXNzaW9uRXhwaXJhY3lDaGFuZ2VkLm5leHQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgcHJvdmlkZXJzPzogQXJyYXk8QXV0aGVudGljYXRpb25Qcm92aWRlckRhdGE+O1xyXG4gIHByaXZhdGUgY29va2llTmFtZT86IHN0cmluZztcclxuICBwdWJsaWMgaXNBdXRoZW50aWNhdGVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIHB1YmxpYyBhdXRoZW50aWNhdGlvblN0YXRlQ2hhbmdlZDogU3ViamVjdDxib29sZWFuPiA9IG5ldyBTbWFydFN1YmplY3QodGhpcy5fZGVzdHJveSQpO1xyXG5cclxuICBwdWJsaWMgaGVhZGVyUGFyYW1zOiBBcnJheTxIZWFkZXJQYXJhbT4gPSBuZXcgQXJyYXkoKTtcclxuICBwdWJsaWMgaGVhZGVyc1VwZGF0ZWQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU21hcnRTdWJqZWN0KHRoaXMuX2Rlc3Ryb3kkKTtcclxuXHJcbiAgLy8gTG9jYWxlXHJcbiAgcHJpdmF0ZSBsb2NhbFN0b3JhZ2VMb2NhbGVOYW1lOiBzdHJpbmcgPSAnbG9jYWxlJztcclxuICBwdWJsaWMgbG9jYWxlQ2hhbmdlZDogU3ViamVjdDx2b2lkPiA9IG5ldyBTbWFydFN1YmplY3QodGhpcy5fZGVzdHJveSQpO1xyXG4gIHByaXZhdGUgaW5pdGlhbGl6ZVJ1bm5pbmc6IFN1YmplY3Q8dm9pZD4gfCB1bmRlZmluZWQ7XHJcblxyXG4gIHB1YmxpYyBzZXNzaW9uRXhwaXJhY3lDaGFuZ2VkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFNtYXJ0U3ViamVjdCh0aGlzLl9kZXN0cm95JCk7XHJcblxyXG4gIHByaXZhdGUgc2Vzc2lvbkhhbmRsZXJTZXJ2aWNlPzogU21hcnRTZXNzaW9uSGFuZGxlclNlcnZpY2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYXBpU2VydmljZTogU2Vzc2lvblNlcnZpY2UsIHByaXZhdGUgY29va2llU2VydmljZTogU21hcnRDb29raWVTZXJ2aWNlKSB7fVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2Rlc3Ryb3kkLm5leHQoKTtcclxuICAgIHRoaXMuX2Rlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0U2Vzc2lvbkhhbmRsZXJTZXJ2aWNlKHNtYXJ0U2Vzc2lvbkhhbmRsZXJTZXJ2aWNlOiBTbWFydFNlc3Npb25IYW5kbGVyU2VydmljZSk6IHZvaWQge1xyXG4gICAgdGhpcy5zZXNzaW9uSGFuZGxlclNlcnZpY2UgPSBzbWFydFNlc3Npb25IYW5kbGVyU2VydmljZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBoYW5kbGVTZXNzaW9uRXJyb3Ioc2Vzc2lvbkVycm9yOiBTZXNzaW9uRXJyb3IpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICh0aGlzLnNlc3Npb25IYW5kbGVyU2VydmljZSkge1xyXG4gICAgICBhd2FpdCB0aGlzLnNlc3Npb25IYW5kbGVyU2VydmljZS5oYW5kbGVTZXNzaW9uRXJyb3Ioc2Vzc2lvbkVycm9yKTtcclxuICAgIH1cclxuICAgIHRocm93IG5ldyBFcnJvcihgc2Vzc2lvbkhhbmRsZXJTZXJ2aWNlIHdhcyBub3QgaW5pdGlhbGl6ZWQuIEVycm9yOiAke3Nlc3Npb25FcnJvci5jb2RlfWApO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFkZEhlYWRlclBhcmFtKGhlYWRlclBhcmFtOiBIZWFkZXJQYXJhbSk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuaGVhZGVyUGFyYW1zLmZpbmQoKGg6IEhlYWRlclBhcmFtKSA9PiBoLmhlYWRlck5hbWUgPT09IGhlYWRlclBhcmFtLmhlYWRlck5hbWUpKSB7XHJcbiAgICAgIGxldCBpbmRleCA9IHRoaXMuaGVhZGVyUGFyYW1zLmZpbmRJbmRleChcclxuICAgICAgICAoaDogSGVhZGVyUGFyYW0pID0+IGguaGVhZGVyTmFtZSA9PT0gaGVhZGVyUGFyYW0uaGVhZGVyTmFtZVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLmhlYWRlclBhcmFtc1tpbmRleCFdLnZhbHVlID0gaGVhZGVyUGFyYW0udmFsdWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmhlYWRlclBhcmFtcy5wdXNoKGhlYWRlclBhcmFtKTtcclxuICAgIH1cclxuICAgIHRoaXMuaGVhZGVyc1VwZGF0ZWQubmV4dCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRVcFRva2VuRm9yU2Vzc2lvblNlcnZpY2UoKTogdm9pZCB7XHJcbiAgICB0aGlzLmFkZEhlYWRlclBhcmFtKHtcclxuICAgICAgaGVhZGVyTmFtZTogJ0F1dGhvcml6YXRpb24nLFxyXG4gICAgICB2YWx1ZTogYEJlYXJlciAke3RoaXMudG9rZW4hfWAsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRVcmwodXJsOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuYmFzZVBhdGggPSB1cmw7XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXRCYXNlUGF0aCgpOiBzdHJpbmcge1xyXG4gICAgaWYgKCF0aGlzLmJhc2VQYXRoKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignQmFzZVBhdGggaGFzIG5vdCBiZWVuIHNldCBpbiBTbWFydFNlc3Npb25TZXJ2aWNlIScpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuYmFzZVBhdGg7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0Q29va2llTmFtZShuYW1lOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuY29va2llTmFtZSA9IG5hbWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNhdmVUb2tlblRvTG9jYWxTdG9yYWdlKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc2Vzc2lvbkluZm9EYXRhICYmIHRoaXMuY29va2llTmFtZSkge1xyXG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgndG9rZW4nLCB0aGlzLnNlc3Npb25JbmZvRGF0YS5zaWQpO1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5zZXNzaW9uSW5mb0RhdGEucmVmcmVzaFRva2VuICYmXHJcbiAgICAgICAgdGhpcy5zZXNzaW9uSW5mb0RhdGEucmVmcmVzaFRva2VuICE9PSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgncmVmcmVzaFRva2VuJylcclxuICAgICAgKSB7XHJcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3JlZnJlc2hUb2tlbicsIHRoaXMuc2Vzc2lvbkluZm9EYXRhLnJlZnJlc2hUb2tlbik7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5jb29raWVTZXJ2aWNlLnNldCh0aGlzLmNvb2tpZU5hbWUsIHRoaXMudG9rZW4hKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0QXV0aGVudGljYXRpb25TdGF0dXMoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zZXNzaW9uSW5mb0RhdGEgJiYgdGhpcy5zZXNzaW9uSW5mb0RhdGEuYXV0aGVudGljYXRpb25zKSB7XHJcbiAgICAgIHRoaXMuaXNBdXRoZW50aWNhdGVkID0gdGhpcy5zZXNzaW9uSW5mb0RhdGEuYXV0aGVudGljYXRpb25zLmxlbmd0aCA+IDA7XHJcbiAgICB9XHJcbiAgICB0aGlzLmF1dGhlbnRpY2F0aW9uU3RhdGVDaGFuZ2VkLm5leHQodGhpcy5pc0F1dGhlbnRpY2F0ZWQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjaGVja1N0YXRlbWVudHMoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuYmFzZVBhdGgpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgdXJsIG9mIHRoZSBiYWNrZW5kIGFwaSBoYXMgbm90IGJlZW4gc2V0IScpO1xyXG4gICAgfSBlbHNlIGlmICghdGhpcy5jb29raWVOYW1lKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIG5hbWUgb2YgdGhlIGNvb2tpZSByZXF1aXJlZCBieSB0aGUgYmFja2VuZCBoYXMgbm90IGJlZW4gc2V0IScpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGluaXRpYWxpemUoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAodGhpcy5pbml0aWFsaXplUnVubmluZykge1xyXG4gICAgICByZXR1cm4gdGhpcy5pbml0aWFsaXplUnVubmluZy50b1Byb21pc2UoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZVJ1bm5pbmcgPSBuZXcgU21hcnRTdWJqZWN0KHRoaXMuX2Rlc3Ryb3kkKTtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICB0aGlzLmNoZWNrU3RhdGVtZW50cygpO1xyXG5cclxuICAgICAgICBsZXQgdG9rZW5Gcm9tTG9jYWxTdG9yYWdlID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3Rva2VuJyk7XHJcbiAgICAgICAgbGV0IHRva2VuRnJvbUNvb2tpZXMgPSB0aGlzLmNvb2tpZVNlcnZpY2UuZ2V0KHRoaXMuY29va2llTmFtZSEpO1xyXG5cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICB0b2tlbkZyb21Mb2NhbFN0b3JhZ2UgJiZcclxuICAgICAgICAgIHRva2VuRnJvbUNvb2tpZXMgJiZcclxuICAgICAgICAgIHRva2VuRnJvbUxvY2FsU3RvcmFnZSA9PT0gdG9rZW5Gcm9tQ29va2llc1xyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdGhpcy50b2tlbiA9IHRva2VuRnJvbUxvY2FsU3RvcmFnZTtcclxuICAgICAgICAgIHRoaXMuc2V0VXBUb2tlbkZvclNlc3Npb25TZXJ2aWNlKCk7XHJcbiAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmdldFNlc3Npb24oKTtcclxuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnN0YXJ0U2Vzc2lvbigpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLmNsZWFyQW5kU3RhcnROZXdTZXNzaW9uKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnNlc3Npb25JbmZvRGF0YSAmJiB0aGlzLnNlc3Npb25JbmZvRGF0YS5sb2NhbGUpIHtcclxuICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMubG9jYWxTdG9yYWdlTG9jYWxlTmFtZSwgdGhpcy5zZXNzaW9uSW5mb0RhdGEubG9jYWxlKTtcclxuICAgICAgICAgIHRoaXMubG9jYWxlQ2hhbmdlZC5uZXh0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZVJ1bm5pbmcuY29tcGxldGUoKTtcclxuICAgICAgICB0aGlzLmluaXRpYWxpemVSdW5uaW5nID0gdW5kZWZpbmVkO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIHN0YXJ0U2Vzc2lvbigpOiBQcm9taXNlPFNlc3Npb25JbmZvRGF0YT4ge1xyXG4gICAgbGV0IHNlc3Npb25JbmZvID0gYXdhaXQgdGhpcy5hcGlTZXJ2aWNlLnN0YXJ0U2Vzc2lvbigpLnRvUHJvbWlzZSgpO1xyXG4gICAgaWYgKHNlc3Npb25JbmZvKSB7XHJcbiAgICAgIHRoaXMuc2Vzc2lvbkluZm9EYXRhID0gc2Vzc2lvbkluZm87XHJcbiAgICAgIHRoaXMudG9rZW4gPSBzZXNzaW9uSW5mby5zaWQ7XHJcbiAgICAgIHRoaXMuc2F2ZVRva2VuVG9Mb2NhbFN0b3JhZ2UoKTtcclxuICAgICAgdGhpcy5zZXRBdXRoZW50aWNhdGlvblN0YXR1cygpO1xyXG4gICAgICB0aGlzLnNldFVwVG9rZW5Gb3JTZXNzaW9uU2VydmljZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLnNlc3Npb25JbmZvRGF0YSE7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0U2Vzc2lvbigpOiBQcm9taXNlPFNlc3Npb25JbmZvRGF0YT4ge1xyXG4gICAgbGV0IHNlc3Npb25JbmZvID0gYXdhaXQgdGhpcy5hcGlTZXJ2aWNlLmdldFNlc3Npb24oKS50b1Byb21pc2UoKTtcclxuICAgIGlmIChzZXNzaW9uSW5mbykge1xyXG4gICAgICB0aGlzLnNlc3Npb25JbmZvRGF0YSA9IHNlc3Npb25JbmZvO1xyXG4gICAgICB0aGlzLnRva2VuID0gc2Vzc2lvbkluZm8uc2lkO1xyXG4gICAgICB0aGlzLnNhdmVUb2tlblRvTG9jYWxTdG9yYWdlKCk7XHJcbiAgICAgIHRoaXMuc2V0QXV0aGVudGljYXRpb25TdGF0dXMoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5zZXNzaW9uSW5mb0RhdGEhO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHJlZnJlc2hTZXNzaW9uKCk6IFByb21pc2U8U2Vzc2lvbkluZm9EYXRhPiB7XHJcbiAgICBsZXQgcmVmcmVzaFRva2VuID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3JlZnJlc2hUb2tlbicpO1xyXG4gICAgaWYgKCFyZWZyZXNoVG9rZW4pIHtcclxuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuc3RhcnRTZXNzaW9uKCk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHNlc3Npb25JbmZvID0gYXdhaXQgdGhpcy5hcGlTZXJ2aWNlXHJcbiAgICAgIC5yZWZyZXNoU2Vzc2lvbih7XHJcbiAgICAgICAgcmVmcmVzaFRva2VuLFxyXG4gICAgICB9KVxyXG4gICAgICAudG9Qcm9taXNlKClcclxuICAgICAgLmNhdGNoKGFzeW5jIChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBlcnJvci5lcnJvciAmJlxyXG4gICAgICAgICAgKGVycm9yLmVycm9yIGFzIEFwaUVycm9yKS5jb2RlICYmXHJcbiAgICAgICAgICAoZXJyb3IuZXJyb3IgYXMgQXBpRXJyb3IpLmNvZGUgPT09ICdzZXNzaW9uLnJlZnJlc2h0b2tlbi5pbnZhbGlkJ1xyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy5zdGFydFNlc3Npb24oKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIGlmIChzZXNzaW9uSW5mbykge1xyXG4gICAgICB0aGlzLnNlc3Npb25JbmZvRGF0YSA9IHNlc3Npb25JbmZvO1xyXG4gICAgICB0aGlzLnRva2VuID0gc2Vzc2lvbkluZm8uc2lkO1xyXG4gICAgICB0aGlzLnNhdmVUb2tlblRvTG9jYWxTdG9yYWdlKCk7XHJcbiAgICAgIHRoaXMuc2V0QXV0aGVudGljYXRpb25TdGF0dXMoKTtcclxuICAgICAgdGhpcy5zZXRVcFRva2VuRm9yU2Vzc2lvblNlcnZpY2UoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5zZXNzaW9uSW5mb0RhdGEhO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldEF1dGhlbnRpY2F0aW9uUHJvdmlkZXJzKCk6IFByb21pc2U8QXJyYXk8QXV0aGVudGljYXRpb25Qcm92aWRlckRhdGE+PiB7XHJcbiAgICBsZXQgcHJvdmlkZXJzOiBHZXRBdXRoZW50aWNhdGlvblByb3ZpZGVyc1Jlc3BvbnNlIHwgdW5kZWZpbmVkID0gYXdhaXQgdGhpcy5hcGlTZXJ2aWNlXHJcbiAgICAgIC5nZXRBdXRoZW50aWNhdGlvblByb3ZpZGVycygpXHJcbiAgICAgIC50b1Byb21pc2UoKTtcclxuXHJcbiAgICB0aGlzLnByb3ZpZGVycyA9IHByb3ZpZGVycz8uYXV0aGVudGljYXRpb25Qcm92aWRlcnM7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMucHJvdmlkZXJzITtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRJc0F1dGhlbnRpY2F0ZWQoKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBpZiAodGhpcy5zZXNzaW9uSW5mb0RhdGEpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuaXNBdXRoZW50aWNhdGVkO1xyXG4gICAgfVxyXG4gICAgYXdhaXQgdGhpcy5nZXRTZXNzaW9uKCk7XHJcbiAgICByZXR1cm4gdGhpcy5pc0F1dGhlbnRpY2F0ZWQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgY2xlYXJBbmRTdGFydE5ld1Nlc3Npb24oKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBzZXNzaW9uU3RvcmFnZS5jbGVhcigpO1xyXG4gICAgbG9jYWxTdG9yYWdlLmNsZWFyKCk7XHJcbiAgICB0aGlzLmhlYWRlclBhcmFtcyA9IFtdO1xyXG4gICAgdGhpcy5jb29raWVTZXJ2aWNlLmRlbGV0ZSh0aGlzLmNvb2tpZU5hbWUhKTtcclxuXHJcbiAgICBhd2FpdCB0aGlzLnN0YXJ0U2Vzc2lvbigpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldExvY2FsZSgpOiBzdHJpbmcge1xyXG4gICAgaWYgKHRoaXMuc2Vzc2lvbkluZm9EYXRhICYmIHRoaXMuc2Vzc2lvbkluZm9EYXRhLmxvY2FsZSkge1xyXG4gICAgICBpZiAobG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5sb2NhbFN0b3JhZ2VMb2NhbGVOYW1lKSAhPT0gdGhpcy5zZXNzaW9uSW5mb0RhdGEubG9jYWxlKSB7XHJcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5sb2NhbFN0b3JhZ2VMb2NhbGVOYW1lLCB0aGlzLnNlc3Npb25JbmZvRGF0YS5sb2NhbGUpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB0aGlzLnNlc3Npb25JbmZvRGF0YS5sb2NhbGU7XHJcbiAgICB9XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZXJlIGlzIG5vIFNlc3Npb25JbmZvRGF0YSBvciBsb2NhbGUgaXMgdW5kZWZpbmVkLicpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGNoYW5nZUxvY2FsZShsb2NhbGU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5zZXNzaW9uSW5mb0RhdGEgPSBhd2FpdCB0aGlzLmFwaVNlcnZpY2Uuc2V0TG9jYWxlKGxvY2FsZSkudG9Qcm9taXNlKCk7XHJcbiAgICBpZiAodGhpcy5zZXNzaW9uSW5mb0RhdGEgJiYgdGhpcy5zZXNzaW9uSW5mb0RhdGEubG9jYWxlKSB7XHJcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMubG9jYWxTdG9yYWdlTG9jYWxlTmFtZSwgdGhpcy5zZXNzaW9uSW5mb0RhdGEubG9jYWxlKTtcclxuICAgICAgdGhpcy5sb2NhbGVDaGFuZ2VkLm5leHQoKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19
|
|
230
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtc2Vzc2lvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtbmctY2xpZW50L3NyYy9saWIvc2Vzc2lvbi9zbWFydC1zZXNzaW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekQsT0FBTyxFQUFFLFVBQVUsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUN0RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQVU5QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7Ozs7QUFTekQsTUFBTSxPQUFPLG1CQUFtQjtJQU05QixJQUFXLGVBQWU7UUFDeEIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7SUFDL0IsQ0FBQztJQUNELElBQVksZUFBZSxDQUFDLGVBQTRDO1FBQ3RFLElBQUksZUFBZSxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsVUFBVSxLQUFLLGVBQWUsRUFBRSxVQUFVLENBQUM7UUFFdkYsSUFBSSxDQUFDLGdCQUFnQixHQUFHLGVBQWUsQ0FBQztRQUV4QyxJQUFJLGVBQWUsRUFBRSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNyQyxDQUFDO0lBQ0gsQ0FBQztJQW9CRCxZQUFvQixVQUEwQixFQUFVLGFBQWlDO1FBQXJFLGVBQVUsR0FBVixVQUFVLENBQWdCO1FBQVUsa0JBQWEsR0FBYixhQUFhLENBQW9CO1FBakNqRixjQUFTLEdBQWtCLElBQUksT0FBTyxFQUFFLENBQUM7UUFpQjFDLG9CQUFlLEdBQVksS0FBSyxDQUFDO1FBRWpDLCtCQUEwQixHQUFxQixJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFaEYsaUJBQVksR0FBdUIsSUFB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TUFBTTs7NEZBRVAsbUJBQW1CO2tCQUgvQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgbGFzdFZhbHVlRnJvbSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge1xyXG4gIEFwaUVycm9yLFxyXG4gIEF1dGhlbnRpY2F0aW9uUHJvdmlkZXJEYXRhLFxyXG4gIEdldEF1dGhlbnRpY2F0aW9uUHJvdmlkZXJzUmVzcG9uc2UsXHJcbiAgU2Vzc2lvbkluZm9EYXRhLFxyXG4gIFNlc3Npb25TZXJ2aWNlLFxyXG59IGZyb20gJy4vYXBpJztcclxuaW1wb3J0IHsgU21hcnRDb29raWVTZXJ2aWNlIH0gZnJvbSAnLi9jb29raWUtc2VydmljZS9zbWFydC1jb29raWUuc2VydmljZSc7XHJcbmltcG9ydCB7IFNlc3Npb25FcnJvciwgU21hcnRTZXNzaW9uSGFuZGxlclNlcnZpY2UgfSBmcm9tICcuL3NtYXJ0LXNlc3Npb24taGFuZGxlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU21hcnRTdWJqZWN0IH0gZnJvbSAnLi4vc21hcnQtc3ViamVjdC9wcm9qZWN0cyc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEhlYWRlclBhcmFtIHtcclxuICBoZWFkZXJOYW1lOiBzdHJpbmc7XHJcbiAgdmFsdWU6IHN0cmluZztcclxufVxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgU21hcnRTZXNzaW9uU2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcbiAgcHJpdmF0ZSBiYXNlUGF0aD86IHN0cmluZztcclxuICBwcml2YXRlIHRva2VuPzogc3RyaW5nO1xyXG4gIHByaXZhdGUgX3Nlc3Npb25JbmZvRGF0YT86IFNlc3Npb25JbmZvRGF0YTtcclxuICBwcml2YXRlIF9kZXN0cm95JDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gIHB1YmxpYyBnZXQgc2Vzc2lvbkluZm9EYXRhKCk6IFNlc3Npb25JbmZvRGF0YSB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2Vzc2lvbkluZm9EYXRhO1xyXG4gIH1cclxuICBwcml2YXRlIHNldCBzZXNzaW9uSW5mb0RhdGEoc2Vzc2lvbkluZm9EYXRhOiBTZXNzaW9uSW5mb0RhdGEgfCB1bmRlZmluZWQpIHtcclxuICAgIGxldCBleHBpcmFjeUNoYW5nZWQgPSB0aGlzLnNlc3Npb25JbmZvRGF0YT8uZXhwaXJhdGlvbiAhPT0gc2Vzc2lvbkluZm9EYXRhPy5leHBpcmF0aW9uO1xyXG5cclxuICAgIHRoaXMuX3Nlc3Npb25JbmZvRGF0YSA9IHNlc3Npb25JbmZvRGF0YTtcclxuXHJcbiAgICBpZiAoZXhwaXJhY3lDaGFuZ2VkKSB7XHJcbiAgICAgIHRoaXMuc2Vzc2lvbkV4cGlyYWN5Q2hhbmdlZC5uZXh0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHByb3ZpZGVycz86IEFycmF5PEF1dGhlbnRpY2F0aW9uUHJvdmlkZXJEYXRhPjtcclxuICBwcml2YXRlIGNvb2tpZU5hbWU/OiBzdHJpbmc7XHJcbiAgcHVibGljIGlzQXV0aGVudGljYXRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBwdWJsaWMgYXV0aGVudGljYXRpb25TdGF0ZUNoYW5nZWQ6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgU21hcnRTdWJqZWN0KHRoaXMuX2Rlc3Ryb3kkKTtcclxuXHJcbiAgcHVibGljIGhlYWRlclBhcmFtczogQXJyYXk8SGVhZGVyUGFyYW0+ID0gbmV3IEFycmF5KCk7XHJcbiAgcHVibGljIGhlYWRlcnNVcGRhdGVkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFNtYXJ0U3ViamVjdCh0aGlzLl9kZXN0cm95JCk7XHJcblxyXG4gIC8vIExvY2FsZVxyXG4gIHByaXZhdGUgbG9jYWxTdG9yYWdlTG9jYWxlTmFtZTogc3RyaW5nID0gJ2xvY2FsZSc7XHJcbiAgcHVibGljIGxvY2FsZUNoYW5nZWQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU21hcnRTdWJqZWN0KHRoaXMuX2Rlc3Ryb3kkKTtcclxuICBwcml2YXRlIGluaXRpYWxpemVSdW5uaW5nOiBTdWJqZWN0PHZvaWQ+IHwgdW5kZWZpbmVkO1xyXG5cclxuICBwdWJsaWMgc2Vzc2lvbkV4cGlyYWN5Q2hhbmdlZDogU3ViamVjdDx2b2lkPiA9IG5ldyBTbWFydFN1YmplY3QodGhpcy5fZGVzdHJveSQpO1xyXG5cclxuICBwcml2YXRlIHNlc3Npb25IYW5kbGVyU2VydmljZT86IFNtYXJ0U2Vzc2lvbkhhbmRsZXJTZXJ2aWNlO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGFwaVNlcnZpY2U6IFNlc3Npb25TZXJ2aWNlLCBwcml2YXRlIGNvb2tpZVNlcnZpY2U6IFNtYXJ0Q29va2llU2VydmljZSkge31cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLl9kZXN0cm95JC5uZXh0KCk7XHJcbiAgICB0aGlzLl9kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldFNlc3Npb25IYW5kbGVyU2VydmljZShzbWFydFNlc3Npb25IYW5kbGVyU2VydmljZTogU21hcnRTZXNzaW9uSGFuZGxlclNlcnZpY2UpOiB2b2lkIHtcclxuICAgIHRoaXMuc2Vzc2lvbkhhbmRsZXJTZXJ2aWNlID0gc21hcnRTZXNzaW9uSGFuZGxlclNlcnZpY2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgaGFuZGxlU2Vzc2lvbkVycm9yKHNlc3Npb25FcnJvcjogU2Vzc2lvbkVycm9yKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAodGhpcy5zZXNzaW9uSGFuZGxlclNlcnZpY2UpIHtcclxuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuc2Vzc2lvbkhhbmRsZXJTZXJ2aWNlLmhhbmRsZVNlc3Npb25FcnJvcihzZXNzaW9uRXJyb3IpO1xyXG4gICAgfVxyXG4gICAgdGhyb3cgbmV3IEVycm9yKGBzZXNzaW9uSGFuZGxlclNlcnZpY2Ugd2FzIG5vdCBpbml0aWFsaXplZC4gRXJyb3I6ICR7c2Vzc2lvbkVycm9yLmNvZGV9YCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYWRkSGVhZGVyUGFyYW0oaGVhZGVyUGFyYW06IEhlYWRlclBhcmFtKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5oZWFkZXJQYXJhbXMuZmluZCgoaDogSGVhZGVyUGFyYW0pID0+IGguaGVhZGVyTmFtZSA9PT0gaGVhZGVyUGFyYW0uaGVhZGVyTmFtZSkpIHtcclxuICAgICAgbGV0IGluZGV4ID0gdGhpcy5oZWFkZXJQYXJhbXMuZmluZEluZGV4KFxyXG4gICAgICAgIChoOiBIZWFkZXJQYXJhbSkgPT4gaC5oZWFkZXJOYW1lID09PSBoZWFkZXJQYXJhbS5oZWFkZXJOYW1lXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuaGVhZGVyUGFyYW1zW2luZGV4IV0udmFsdWUgPSBoZWFkZXJQYXJhbS52YWx1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaGVhZGVyUGFyYW1zLnB1c2goaGVhZGVyUGFyYW0pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5oZWFkZXJzVXBkYXRlZC5uZXh0KCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFVwVG9rZW5Gb3JTZXNzaW9uU2VydmljZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuYWRkSGVhZGVyUGFyYW0oe1xyXG4gICAgICBoZWFkZXJOYW1lOiAnQXV0aG9yaXphdGlvbicsXHJcbiAgICAgIHZhbHVlOiBgQmVhcmVyICR7dGhpcy50b2tlbiF9YCxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldFVybCh1cmw6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5iYXNlUGF0aCA9IHVybDtcclxuICB9XHJcbiAgcHVibGljIGdldEJhc2VQYXRoKCk6IHN0cmluZyB7XHJcbiAgICBpZiAoIXRoaXMuYmFzZVBhdGgpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdCYXNlUGF0aCBoYXMgbm90IGJlZW4gc2V0IGluIFNtYXJ0U2Vzc2lvblNlcnZpY2UhJyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5iYXNlUGF0aDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRDb29raWVOYW1lKG5hbWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5jb29raWVOYW1lID0gbmFtZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2F2ZVRva2VuVG9Mb2NhbFN0b3JhZ2UoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zZXNzaW9uSW5mb0RhdGEgJiYgdGhpcy5jb29raWVOYW1lKSB7XHJcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCd0b2tlbicsIHRoaXMuc2Vzc2lvbkluZm9EYXRhLnNpZCk7XHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLnNlc3Npb25JbmZvRGF0YS5yZWZyZXNoVG9rZW4gJiZcclxuICAgICAgICB0aGlzLnNlc3Npb25JbmZvRGF0YS5yZWZyZXNoVG9rZW4gIT09IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdyZWZyZXNoVG9rZW4nKVxyXG4gICAgICApIHtcclxuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgncmVmcmVzaFRva2VuJywgdGhpcy5zZXNzaW9uSW5mb0RhdGEucmVmcmVzaFRva2VuKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmNvb2tpZVNlcnZpY2Uuc2V0KHRoaXMuY29va2llTmFtZSwgdGhpcy50b2tlbiEpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRBdXRoZW50aWNhdGlvblN0YXR1cygpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNlc3Npb25JbmZvRGF0YSAmJiB0aGlzLnNlc3Npb25JbmZvRGF0YS5hdXRoZW50aWNhdGlvbnMpIHtcclxuICAgICAgdGhpcy5pc0F1dGhlbnRpY2F0ZWQgPSB0aGlzLnNlc3Npb25JbmZvRGF0YS5hdXRoZW50aWNhdGlvbnMubGVuZ3RoID4gMDtcclxuICAgIH1cclxuICAgIHRoaXMuYXV0aGVudGljYXRpb25TdGF0ZUNoYW5nZWQubmV4dCh0aGlzLmlzQXV0aGVudGljYXRlZCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNoZWNrU3RhdGVtZW50cygpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5iYXNlUGF0aCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSB1cmwgb2YgdGhlIGJhY2tlbmQgYXBpIGhhcyBub3QgYmVlbiBzZXQhJyk7XHJcbiAgICB9IGVsc2UgaWYgKCF0aGlzLmNvb2tpZU5hbWUpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgbmFtZSBvZiB0aGUgY29va2llIHJlcXVpcmVkIGJ5IHRoZSBiYWNrZW5kIGhhcyBub3QgYmVlbiBzZXQhJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgaW5pdGlhbGl6ZSgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICh0aGlzLmluaXRpYWxpemVSdW5uaW5nKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmluaXRpYWxpemVSdW5uaW5nLnRvUHJvbWlzZSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5pbml0aWFsaXplUnVubmluZyA9IG5ldyBTbWFydFN1YmplY3QodGhpcy5fZGVzdHJveSQpO1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHRoaXMuY2hlY2tTdGF0ZW1lbnRzKCk7XHJcblxyXG4gICAgICAgIGxldCB0b2tlbkZyb21Mb2NhbFN0b3JhZ2UgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndG9rZW4nKTtcclxuICAgICAgICBsZXQgdG9rZW5Gcm9tQ29va2llcyA9IHRoaXMuY29va2llU2VydmljZS5nZXQodGhpcy5jb29raWVOYW1lISk7XHJcblxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIHRva2VuRnJvbUxvY2FsU3RvcmFnZSAmJlxyXG4gICAgICAgICAgdG9rZW5Gcm9tQ29va2llcyAmJlxyXG4gICAgICAgICAgdG9rZW5Gcm9tTG9jYWxTdG9yYWdlID09PSB0b2tlbkZyb21Db29raWVzXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICB0aGlzLnRva2VuID0gdG9rZW5Gcm9tTG9jYWxTdG9yYWdlO1xyXG4gICAgICAgICAgdGhpcy5zZXRVcFRva2VuRm9yU2Vzc2lvblNlcnZpY2UoKTtcclxuICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZ2V0U2Vzc2lvbigpO1xyXG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuc3RhcnRTZXNzaW9uKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGF3YWl0IHRoaXMuY2xlYXJBbmRTdGFydE5ld1Nlc3Npb24oKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuc2Vzc2lvbkluZm9EYXRhICYmIHRoaXMuc2Vzc2lvbkluZm9EYXRhLmxvY2FsZSkge1xyXG4gICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5sb2NhbFN0b3JhZ2VMb2NhbGVOYW1lLCB0aGlzLnNlc3Npb25JbmZvRGF0YS5sb2NhbGUpO1xyXG4gICAgICAgICAgdGhpcy5sb2NhbGVDaGFuZ2VkLm5leHQoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZmluYWxseSB7XHJcbiAgICAgICAgdGhpcy5pbml0aWFsaXplUnVubmluZy5jb21wbGV0ZSgpO1xyXG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZVJ1bm5pbmcgPSB1bmRlZmluZWQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgc3RhcnRTZXNzaW9uKCk6IFByb21pc2U8U2Vzc2lvbkluZm9EYXRhPiB7XHJcbiAgICBsZXQgc2Vzc2lvbkluZm8gPSBhd2FpdCB0aGlzLmFwaVNlcnZpY2Uuc3RhcnRTZXNzaW9uKCkudG9Qcm9taXNlKCk7XHJcbiAgICBpZiAoc2Vzc2lvbkluZm8pIHtcclxuICAgICAgdGhpcy51cGRhdGVTZXNzaW9uSW5mbyhzZXNzaW9uSW5mbyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuc2Vzc2lvbkluZm9EYXRhITtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRTZXNzaW9uKCk6IFByb21pc2U8U2Vzc2lvbkluZm9EYXRhPiB7XHJcbiAgICBsZXQgc2Vzc2lvbkluZm8gPSBhd2FpdCB0aGlzLmFwaVNlcnZpY2UuZ2V0U2Vzc2lvbigpLnRvUHJvbWlzZSgpO1xyXG4gICAgaWYgKHNlc3Npb25JbmZvKSB7XHJcbiAgICAgIHRoaXMuc2Vzc2lvbkluZm9EYXRhID0gc2Vzc2lvbkluZm87XHJcbiAgICAgIHRoaXMudG9rZW4gPSBzZXNzaW9uSW5mby5zaWQ7XHJcbiAgICAgIHRoaXMuc2F2ZVRva2VuVG9Mb2NhbFN0b3JhZ2UoKTtcclxuICAgICAgdGhpcy5zZXRBdXRoZW50aWNhdGlvblN0YXR1cygpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLnNlc3Npb25JbmZvRGF0YSE7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgcmVmcmVzaFNlc3Npb24oKTogUHJvbWlzZTxTZXNzaW9uSW5mb0RhdGE+IHtcclxuICAgIGxldCByZWZyZXNoVG9rZW4gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgncmVmcmVzaFRva2VuJyk7XHJcbiAgICBpZiAoIXJlZnJlc2hUb2tlbikge1xyXG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5zdGFydFNlc3Npb24oKTtcclxuICAgIH1cclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCBzZXNzaW9uSW5mbyA9IGF3YWl0IGxhc3RWYWx1ZUZyb20odGhpcy5hcGlTZXJ2aWNlLnJlZnJlc2hTZXNzaW9uKHsgcmVmcmVzaFRva2VuIH0pKTtcclxuICAgICAgaWYgKHNlc3Npb25JbmZvKSB7XHJcbiAgICAgICAgdGhpcy51cGRhdGVTZXNzaW9uSW5mbyhzZXNzaW9uSW5mbyk7XHJcbiAgICAgICAgcmV0dXJuIHNlc3Npb25JbmZvO1xyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBpZiAodGhpcy5pc0ludmFsaWRSZWZyZXNoVG9rZW5FcnJvcihlcnJvcikpIHtcclxuICAgICAgICB0aGlzLmNsZWFyQW5kU3RhcnROZXdTZXNzaW9uKCk7XHJcbiAgICAgICAgLy8gc3RpbGwgdGhyb3cgdGhlIGVycm9yLCBzbyB0aGUgZXJyb3IgY2FuIGJlIGhhbmRsZWQgaW4gdGhlIGNhbGxlclxyXG4gICAgICB9XHJcbiAgICAgIHRocm93IGVycm9yO1xyXG4gICAgfVxyXG4gICAgLy8gbm8gc2Vzc2lvbkluZm8gcmV0dXJuZWRcclxuICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIHJlZnJlc2ggc2Vzc2lvbicpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVTZXNzaW9uSW5mbyhzZXNzaW9uSW5mbzogU2Vzc2lvbkluZm9EYXRhKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlc3Npb25JbmZvRGF0YSA9IHNlc3Npb25JbmZvO1xyXG4gICAgdGhpcy50b2tlbiA9IHNlc3Npb25JbmZvLnNpZDtcclxuICAgIHRoaXMuc2F2ZVRva2VuVG9Mb2NhbFN0b3JhZ2UoKTtcclxuICAgIHRoaXMuc2V0QXV0aGVudGljYXRpb25TdGF0dXMoKTtcclxuICAgIHRoaXMuc2V0VXBUb2tlbkZvclNlc3Npb25TZXJ2aWNlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzSW52YWxpZFJlZnJlc2hUb2tlbkVycm9yKGVycm9yOiBhbnkpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIGVycm9yIGluc3RhbmNlb2YgSHR0cEVycm9yUmVzcG9uc2UgJiZcclxuICAgICAgZXJyb3IuZXJyb3IgJiZcclxuICAgICAgKGVycm9yLmVycm9yIGFzIEFwaUVycm9yKS5jb2RlID09PSAnc2Vzc2lvbi5yZWZyZXNodG9rZW4uaW52YWxpZCdcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0QXV0aGVudGljYXRpb25Qcm92aWRlcnMoKTogUHJvbWlzZTxBcnJheTxBdXRoZW50aWNhdGlvblByb3ZpZGVyRGF0YT4+IHtcclxuICAgIGxldCBwcm92aWRlcnM6IEdldEF1dGhlbnRpY2F0aW9uUHJvdmlkZXJzUmVzcG9uc2UgfCB1bmRlZmluZWQgPSBhd2FpdCB0aGlzLmFwaVNlcnZpY2VcclxuICAgICAgLmdldEF1dGhlbnRpY2F0aW9uUHJvdmlkZXJzKClcclxuICAgICAgLnRvUHJvbWlzZSgpO1xyXG5cclxuICAgIHRoaXMucHJvdmlkZXJzID0gcHJvdmlkZXJzPy5hdXRoZW50aWNhdGlvblByb3ZpZGVycztcclxuXHJcbiAgICByZXR1cm4gdGhpcy5wcm92aWRlcnMhO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldElzQXV0aGVudGljYXRlZCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGlmICh0aGlzLnNlc3Npb25JbmZvRGF0YSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5pc0F1dGhlbnRpY2F0ZWQ7XHJcbiAgICB9XHJcbiAgICBhd2FpdCB0aGlzLmdldFNlc3Npb24oKTtcclxuICAgIHJldHVybiB0aGlzLmlzQXV0aGVudGljYXRlZDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBjbGVhckFuZFN0YXJ0TmV3U2Vzc2lvbigpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHNlc3Npb25TdG9yYWdlLmNsZWFyKCk7XHJcbiAgICBsb2NhbFN0b3JhZ2UuY2xlYXIoKTtcclxuICAgIHRoaXMuaGVhZGVyUGFyYW1zID0gW107XHJcbiAgICB0aGlzLmNvb2tpZVNlcnZpY2UuZGVsZXRlKHRoaXMuY29va2llTmFtZSEpO1xyXG5cclxuICAgIGF3YWl0IHRoaXMuc3RhcnRTZXNzaW9uKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0TG9jYWxlKCk6IHN0cmluZyB7XHJcbiAgICBpZiAodGhpcy5zZXNzaW9uSW5mb0RhdGEgJiYgdGhpcy5zZXNzaW9uSW5mb0RhdGEubG9jYWxlKSB7XHJcbiAgICAgIGlmIChsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLmxvY2FsU3RvcmFnZUxvY2FsZU5hbWUpICE9PSB0aGlzLnNlc3Npb25JbmZvRGF0YS5sb2NhbGUpIHtcclxuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLmxvY2FsU3RvcmFnZUxvY2FsZU5hbWUsIHRoaXMuc2Vzc2lvbkluZm9EYXRhLmxvY2FsZSk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHRoaXMuc2Vzc2lvbkluZm9EYXRhLmxvY2FsZTtcclxuICAgIH1cclxuICAgIHRocm93IG5ldyBFcnJvcignVGhlcmUgaXMgbm8gU2Vzc2lvbkluZm9EYXRhIG9yIGxvY2FsZSBpcyB1bmRlZmluZWQuJyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgY2hhbmdlTG9jYWxlKGxvY2FsZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLnNlc3Npb25JbmZvRGF0YSA9IGF3YWl0IHRoaXMuYXBpU2VydmljZS5zZXRMb2NhbGUobG9jYWxlKS50b1Byb21pc2UoKTtcclxuICAgIGlmICh0aGlzLnNlc3Npb25JbmZvRGF0YSAmJiB0aGlzLnNlc3Npb25JbmZvRGF0YS5sb2NhbGUpIHtcclxuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5sb2NhbFN0b3JhZ2VMb2NhbGVOYW1lLCB0aGlzLnNlc3Npb25JbmZvRGF0YS5sb2NhbGUpO1xyXG4gICAgICB0aGlzLmxvY2FsZUNoYW5nZWQubmV4dCgpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=
|
|
@@ -78,6 +78,15 @@ export class SmartComponentLayoutComponent {
|
|
|
78
78
|
this.uuid = this.parentSmartComponent.uuid;
|
|
79
79
|
this.treeService = this.parentSmartComponent.smartTreeService;
|
|
80
80
|
this.smartComponentLayout?.direction;
|
|
81
|
+
// the nature of the layout might have changed (e.g. from GRID to FORM), we null out every
|
|
82
|
+
// template-related element, so no stale data is left on screen:
|
|
83
|
+
this.expandableSection = undefined;
|
|
84
|
+
this.smartForm = undefined;
|
|
85
|
+
this.smartGrid = undefined;
|
|
86
|
+
this.smartFilter = undefined;
|
|
87
|
+
this.smartGrid = undefined;
|
|
88
|
+
this.toolbarId = undefined;
|
|
89
|
+
// null out toolbar?
|
|
81
90
|
if (this.smartComponentLayout?.expandable) {
|
|
82
91
|
this.constructExpandableSection();
|
|
83
92
|
}
|
|
@@ -256,4 +265,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
|
|
|
256
265
|
type: ViewChildren,
|
|
257
266
|
args: [SmartComponentLayoutComponent]
|
|
258
267
|
}] } });
|
|
259
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtY29tcG9uZW50LWxheW91dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi9zbWFydC1jb21wb25lbnQtbGF5b3V0L3NtYXJ0LWNvbXBvbmVudC1sYXlvdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtbmctY2xpZW50L3NyYy9saWIvc21hcnQtY29tcG9uZW50LWxheW91dC9zbWFydC1jb21wb25lbnQtbGF5b3V0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxTQUFTLEVBRVQsS0FBSyxFQVFMLFlBQVksR0FDYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsYUFBYSxFQUNiLG1CQUFtQixFQUNuQixlQUFlLEdBRWhCLE1BQU0sT0FBTyxDQUFDO0FBQ2YsT0FBTyxFQUVMLHdCQUF3QixHQUd6QixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFDTCxnQkFBZ0IsRUFHaEIsY0FBYyxHQUNmLE1BQU0sd0JBQXdCLENBQUM7QUFHaEMsT0FBTyxFQUVMLDBCQUEwQixHQUMzQixNQUFNLHNDQUFzQyxDQUFDO0FBQzlDLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDeEMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7Ozs7Ozs7OztBQU9oRixNQUFNLE9BQU8sNkJBQTZCO0lBeUN4QyxZQUNVLGFBQStDLEVBQy9DLE9BQW9CLEVBQ3BCLFFBQW9CO1FBRnBCLGtCQUFhLEdBQWIsYUFBYSxDQUFrQztRQUMvQyxZQUFPLEdBQVAsT0FBTyxDQUFhO1FBQ3BCLGFBQVEsR0FBUixRQUFRLENBQVk7UUEzQ3BCLGNB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O2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFPTixhQUFhO3NCQURaLFlBQVk7dUJBQUMsTUFBTTtnQkFNcEIsYUFBYTtzQkFEWixZQUFZO3VCQUFDLE1BQU07Z0JBTXBCLGVBQWU7c0JBRGQsWUFBWTt1QkFBQyxRQUFRO2dCQU10QixXQUFXO3NCQURWLFlBQVk7dUJBQUMsU0FBUztnQkFVdkIsb0JBQW9CO3NCQURuQixZQUFZO3VCQUFDLDBCQUEwQjtnQkFJeEMsVUFBVTtzQkFEVCxZQUFZO3VCQUFDLDZCQUE2QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBDb21wb25lbnQsXHJcbiAgRWxlbWVudFJlZixcclxuICBJbnB1dCxcclxuICBPbkNoYW5nZXMsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9uSW5pdCxcclxuICBRdWVyeUxpc3QsXHJcbiAgUmVuZGVyZXIyLFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbiAgVmlld0NoaWxkLFxyXG4gIFZpZXdDaGlsZHJlbixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICBDb21wb25lbnRUeXBlLFxyXG4gIENvbXBvbmVudFdpZGdldFR5cGUsXHJcbiAgTGF5b3V0RGlyZWN0aW9uLFxyXG4gIFNtYXJ0Q29tcG9uZW50TGF5b3V0RGVmaW5pdGlvbixcclxufSBmcm9tICcuL2FwaSc7XHJcbmltcG9ydCB7XHJcbiAgU21hcnRGb3JtLFxyXG4gIFNtYXJ0Rm9ybVdpZGdldERpcmVjdGlvbixcclxuICBTbWFydGZvcm1Db21wb25lbnQsXHJcbiAgU21hcnRmb3JtTGF5b3V0RGVmaW5pdGlvblNlcnZpY2UsXHJcbn0gZnJvbSAnLi4vc21hcnQtZm9ybS9wcm9qZWN0cyc7XHJcbmltcG9ydCB7XHJcbiAgR3JpZFVpQWN0aW9uVHlwZSxcclxuICBTbWFydEdyaWQsXHJcbiAgU21hcnRHcmlkQ29tcG9uZW50LFxyXG4gIFNtYXJ0TGF5b3V0RGVmLFxyXG59IGZyb20gJy4uL3NtYXJ0LWdyaWQvcHJvamVjdHMnO1xyXG5pbXBvcnQgeyBTbWFydEZpbHRlciwgU21hcnRGaWx0ZXJDb21wb25lbnQgfSBmcm9tICcuLi9zbWFydC1maWx0ZXIvcHJvamVjdHMnO1xyXG5pbXBvcnQgeyBTbWFydHRyZWVHZW5lcmljU2VydmljZSB9IGZyb20gJy4uL3NtYXJ0LXRyZWUvcHJvamVjdHMnO1xyXG5pbXBvcnQge1xyXG4gIEV4cGFuZGFibGVTZWN0aW9uLFxyXG4gIEV4cGFuZGFibGVTZWN0aW9uQ29tcG9uZW50LFxyXG59IGZyb20gJy4uL3NtYXJ0LWV4cGFuZGFibGUtc2VjdGlvbi9wcm9qZWN0cyc7XHJcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBVaUFjdGlvblRvb2xiYXJDb21wb25lbnQgfSBmcm9tICcuLi92aWV3LWNvbnRleHQvcHJvamVjdHMnO1xyXG5pbXBvcnQgeyBkZWVwRXF1YWwgfSBmcm9tICdmYXN0LWVxdWFscyc7XHJcbmltcG9ydCB7IFNtYXJ0U3R5bGVVdGlsaXR5IH0gZnJvbSAnLi4vdmlldy1jb250ZXh0L3V0aWxpdHkvc21hcnQtc3R5bGUtdXRpbGl0eSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3NtYXJ0LWNvbXBvbmVudC1sYXlvdXQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9zbWFydC1jb21wb25lbnQtbGF5b3V0LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9zbWFydC1jb21wb25lbnQtbGF5b3V0LmNvbXBvbmVudC5jc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFNtYXJ0Q29tcG9uZW50TGF5b3V0Q29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXMge1xyXG4gIHByb3RlY3RlZCBfZGVzdHJveSQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICBASW5wdXQoKSBzbWFydENvbXBvbmVudExheW91dD86IFNtYXJ0Q29tcG9uZW50TGF5b3V0RGVmaW5pdGlvbjtcclxuICBASW5wdXQoKSBwYXJlbnRMYXlvdXRDb21wb25lbnQ/OiBTbWFydENvbXBvbmVudExheW91dENvbXBvbmVudDtcclxuICBASW5wdXQoKSBwYXJlbnRTbWFydENvbXBvbmVudDogYW55O1xyXG5cclxuICBjdXJyZW50TGF5b3V0PzogU21hcnRDb21wb25lbnRMYXlvdXREZWZpbml0aW9uO1xyXG5cclxuICB1dWlkPzogc3RyaW5nO1xyXG5cclxuICBAVmlld0NoaWxkcmVuKCdmb3JtJylcclxuICBzbWFydEZvcm1MaXN0ITogUXVlcnlMaXN0PFNtYXJ0Zm9ybUNvbXBvbmVudD47XHJcbiAgc21hcnRGb3JtQ29tcG9uZW50PzogU21hcnRmb3JtQ29tcG9uZW50O1xyXG4gIHNtYXJ0Rm9ybT86IFNtYXJ0Rm9ybTtcclxuXHJcbiAgQFZpZXdDaGlsZHJlbignZ3JpZCcpXHJcbiAgc21hcnRHcmlkTGlzdCE6IFF1ZXJ5TGlzdDxTbWFydEdyaWRDb21wb25lbnQ+O1xyXG4gIHNtYXJ0R3JpZENvbXBvbmVudD86IFNtYXJ0R3JpZENvbXBvbmVudDtcclxuICBzbWFydEdyaWQ/OiBTbWFydEdyaWQ7XHJcblxyXG4gIEBWaWV3Q2hpbGRyZW4oJ2ZpbHRlcicpXHJcbiAgc21hcnRGaWx0ZXJMaXN0ITogUXVlcnlMaXN0PFNtYXJ0RmlsdGVyQ29tcG9uZW50PjtcclxuICBzbWFydEZpbHRlckNvbXBvbmVudD86IFNtYXJ0RmlsdGVyQ29tcG9uZW50O1xyXG4gIHNtYXJ0RmlsdGVyPzogU21hcnRGaWx0ZXI7XHJcblxyXG4gIEBWaWV3Q2hpbGRyZW4oJ3Rvb2xiYXInKVxyXG4gIHRvb2xiYXJMaXN0ITogUXVlcnlMaXN0PFVpQWN0aW9uVG9vbGJhckNvbXBvbmVudD47XHJcbiAgdG9vbGJhcj86IFVpQWN0aW9uVG9vbGJhckNvbXBvbmVudDtcclxuICB0b29sYmFySWQ/OiBzdHJpbmc7XHJcblxyXG4gIHRyZWVTZXJ2aWNlPzogU21hcnR0cmVlR2VuZXJpY1NlcnZpY2U7XHJcblxyXG4gIGV4cGFuZGFibGVTZWN0aW9uPzogRXhwYW5kYWJsZVNlY3Rpb248U21hcnRDb21wb25lbnRMYXlvdXREZWZpbml0aW9uPjtcclxuXHJcbiAgQFZpZXdDaGlsZHJlbihFeHBhbmRhYmxlU2VjdGlvbkNvbXBvbmVudClcclxuICBleHBhbmRhYmxlQ29tcG9uZW50cyE6IFF1ZXJ5TGlzdDxFeHBhbmRhYmxlU2VjdGlvbkNvbXBvbmVudD47XHJcblxyXG4gIEBWaWV3Q2hpbGRyZW4oU21hcnRDb21wb25lbnRMYXlvdXRDb21wb25lbnQpXHJcbiAgY29tcG9uZW50cyE6IFF1ZXJ5TGlzdDxTbWFydENvbXBvbmVudExheW91dENvbXBvbmVudD47XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBsYXlvdXRTZXJ2aWNlOiBTbWFydGZvcm1MYXlvdXREZWZpbml0aW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgZWxlbWVudD86IEVsZW1lbnRSZWYsXHJcbiAgICBwcml2YXRlIHJlbmRlcmVyPzogUmVuZGVyZXIyXHJcbiAgKSB7fVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zbWFydEZvcm1MaXN0Py5maXJzdCkge1xyXG4gICAgICB0aGlzLnNldEZvcm1Db21wb25lbnQodGhpcy5zbWFydEZvcm1MaXN0Py5maXJzdCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNtYXJ0Rm9ybUxpc3QuY2hhbmdlc1xyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKChsaXN0OiBRdWVyeUxpc3Q8U21hcnRmb3JtQ29tcG9uZW50PikgPT4ge1xyXG4gICAgICAgIHRoaXMuc2V0Rm9ybUNvbXBvbmVudChsaXN0LmZpcnN0KTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgaWYgKHRoaXMuc21hcnRHcmlkTGlzdD8uZmlyc3QpIHtcclxuICAgICAgdGhpcy5zZXRHcmlkQ29tcG9uZW50KHRoaXMuc21hcnRHcmlkTGlzdD8uZmlyc3QpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zbWFydEdyaWRMaXN0LmNoYW5nZXNcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSgobGlzdDogUXVlcnlMaXN0PFNtYXJ0R3JpZENvbXBvbmVudD4pID0+IHtcclxuICAgICAgICB0aGlzLnNldEdyaWRDb21wb25lbnQobGlzdC5maXJzdCk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHRoaXMuc21hcnRGaWx0ZXJMaXN0LmNoYW5nZXNcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSgobGlzdDogUXVlcnlMaXN0PFNtYXJ0RmlsdGVyQ29tcG9uZW50PikgPT4ge1xyXG4gICAgICAgIGlmICghdGhpcy5zbWFydEZpbHRlckNvbXBvbmVudCkge1xyXG4gICAgICAgICAgdGhpcy5zbWFydEZpbHRlckNvbXBvbmVudCA9IGxpc3QuZmlyc3Q7XHJcbiAgICAgICAgICB0aGlzLmJpbmRGaWx0ZXIoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIGlmICh0aGlzLnRvb2xiYXJMaXN0Py5maXJzdCkge1xyXG4gICAgICB0aGlzLnNldFRvb2xiYXJDb21wb25lbnQodGhpcy50b29sYmFyTGlzdD8uZmlyc3QpO1xyXG4gICAgfVxyXG4gICAgdGhpcy50b29sYmFyTGlzdC5jaGFuZ2VzXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKGxpc3Q6IFF1ZXJ5TGlzdDxVaUFjdGlvblRvb2xiYXJDb21wb25lbnQ+KSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZXRUb29sYmFyQ29tcG9uZW50KGxpc3QuZmlyc3QpO1xyXG4gICAgICB9KTtcclxuICAgIHRoaXMuc2V0VXAoKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fZGVzdHJveSQubmV4dCgpO1xyXG4gICAgdGhpcy5fZGVzdHJveSQuY29tcGxldGUoKTtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIHRoaXMuc2V0VXAoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0VXAoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMucGFyZW50U21hcnRDb21wb25lbnQgfHwgIXRoaXMuc21hcnRDb21wb25lbnRMYXlvdXQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKGRlZXBFcXVhbCh0aGlzLnNtYXJ0Q29tcG9uZW50TGF5b3V0LCB0aGlzLmN1cnJlbnRMYXlvdXQpKSB7XHJcbiAgICAgIC8vIG5vIGxheW91dCBjaGFuZ2UsIGtlZXAgY3VycmVudCBzdGF0ZVxyXG4gICAgICB0aGlzLnNtYXJ0Q29tcG9uZW50TGF5b3V0ID0gdGhpcy5jdXJyZW50TGF5b3V0O1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICAvLyBsYXlvdXQgY2hhbmdlZCwgcmVuZGVyLCBidXQgc2F2ZSBjdXJyZW50XHJcbiAgICAvLyB0aGlzLmN1cnJlbnRMYXlvdXQgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuc21hcnRDb21wb25lbnRMYXlvdXQpKTtcclxuICAgIHRoaXMuY3VycmVudExheW91dCA9IHRoaXMuc21hcnRDb21wb25lbnRMYXlvdXQ7XHJcblxyXG4gICAgdGhpcy51dWlkID0gdGhpcy5wYXJlbnRTbWFydENvbXBvbmVudC51dWlkO1xyXG4gICAgdGhpcy50cmVlU2VydmljZSA9IHRoaXMucGFyZW50U21hcnRDb21wb25lbnQuc21hcnRUcmVlU2VydmljZTtcclxuXHJcbiAgICB0aGlzLnNtYXJ0Q29tcG9uZW50TGF5b3V0Py5kaXJlY3Rpb247XHJcblxyXG4gICAgaWYgKHRoaXMuc21hcnRDb21wb25lbnRMYXlvdXQ/LmV4cGFuZGFibGUpIHtcclxuICAgICAgdGhpcy5jb25zdHJ1Y3RFeHBhbmRhYmxlU2VjdGlvbigpO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnNtYXJ0Q29tcG9uZW50TGF5b3V0Py50eXBlID09PSBDb21wb25lbnRUeXBlLkZPUk0pIHtcclxuICAgICAgdGhpcy5jb25zdHJ1Y3RGb3JtKCk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuc21hcnRDb21wb25lbnRMYXlvdXQ/LnR5cGUgPT09IENvbXBvbmVudFR5cGUuV0lER0VUKSB7XHJcbiAgICAgIGlmICh0aGlzLnNtYXJ0Q29tcG9uZW50TGF5b3V0LndpZGdldD8udHlwZSA9PT0gQ29tcG9uZW50V2lkZ2V0VHlwZS5HUklEKSB7XHJcbiAgICAgICAgdGhpcy5jb25zdHJ1Y3RHcmlkKCk7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5zbWFydENvbXBvbmVudExheW91dC53aWRnZXQ/LnR5cGUgPT09IENvbXBvbmVudFdpZGdldFR5cGUuRklMVEVSKSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKCdDb21wb25lbnRXaWRnZXRUeXBlLkZJTFRFUiBpcyBub3Qgc3VwcG9ydGVkJyk7XHJcbiAgICAgICAgLy8gdGhpcy5jb25zdHJ1Y3RGaWx0ZXIoKTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLnNtYXJ0Q29tcG9uZW50TGF5b3V0LndpZGdldD8udHlwZSA9PT0gQ29tcG9uZW50V2lkZ2V0VHlwZS5UUkVFKSB7XHJcbiAgICAgICAgdGhpcy5jb25zdHJ1Y3RUcmVlKCk7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5zbWFydENvbXBvbmVudExheW91dC53aWRnZXQ/LnR5cGUgPT09IENvbXBvbmVudFdpZGdldFR5cGUuVE9PTEJBUikge1xyXG4gICAgICAgIHRoaXMuY29uc3RydWN0VG9vbGJhcigpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICghdGhpcy5wYXJlbnRMYXlvdXRDb21wb25lbnQpIHtcclxuICAgICAgICAvLyBvbmx5IHRvcCBsZXZlbCBjb21wb25lbnQgc2hvdWxkIGNhbGwgaW5pdCBhY3Rpb25zXHJcbiAgICAgICAgdGhpcy5wYXJlbnRTbWFydENvbXBvbmVudC5pbml0QWN0aW9ucygpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgU21hcnRTdHlsZVV0aWxpdHkuYXBwbHlTdHlsZSh0aGlzLnNtYXJ0Q29tcG9uZW50TGF5b3V0LnN0eWxlLCB0aGlzLmVsZW1lbnQsIHRoaXMucmVuZGVyZXIpO1xyXG4gIH1cclxuXHJcbiAgdHlwZSgpOiB0eXBlb2YgQ29tcG9uZW50VHlwZSB7XHJcbiAgICByZXR1cm4gQ29tcG9uZW50VHlwZTtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdEV4cGFuZGFibGVTZWN0aW9uKCk6IHZvaWQge1xyXG4gICAgbGV0IGRhdGE6IFNtYXJ0Q29tcG9uZW50TGF5b3V0RGVmaW5pdGlvbiA9IHsgLi4udGhpcy5zbWFydENvbXBvbmVudExheW91dCEgfTtcclxuICAgIGRhdGEuZXhwYW5kYWJsZSA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuZXhwYW5kYWJsZVNlY3Rpb24gPSB7XHJcbiAgICAgIHRpdGxlOiB0aGlzLnNtYXJ0Q29tcG9uZW50TGF5b3V0Py5leHBhbmRhYmxlU2VjdGlvbkxhYmVsID8/ICcnLFxyXG4gICAgICBpbnB1dHM6IG5ldyBNYXA8c3RyaW5nLCBhbnk+KFtcclxuICAgICAgICBbJ3NtYXJ0Q29tcG9uZW50TGF5b3V0JywgZGF0YV0sXHJcbiAgICAgICAgWydwYXJlbnRTbWFydENvbXBvbmVudCcsIHRoaXMucGFyZW50U21hcnRDb21wb25lbnRdLFxyXG4gICAgICAgIFsncGFyZW50TGF5b3V0Q29tcG9uZW50JywgdGhpcy5wYXJlbnRMYXlvdXRDb21wb25lbnRdLFxyXG4gICAgICBdKSxcclxuICAgICAgY3VzdG9tQ29tcG9uZW50OiBTbWFydENvbXBvbmVudExheW91dENvbXBvbmVudCxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RGb3JtKCk6IHZvaWQge1xyXG4gICAgY29uc3Qgd2lkZ2V0cyA9IHRoaXMubGF5b3V0U2VydmljZS5yZW5kZXIoe1xyXG4gICAgICBsYXlvdXREZWZpbml0aW9uczogdGhpcy5zbWFydENvbXBvbmVudExheW91dD8uZm9ybSxcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuc21hcnRGb3JtID0ge1xyXG4gICAgICBkaXJlY3Rpb246IHRoaXMuZ2V0Rm9ybUxheW91dCgpLFxyXG4gICAgICBjb21wb25lbnRNb2RlbDogdGhpcy5wYXJlbnRTbWFydENvbXBvbmVudD8ubW9kZWwsXHJcbiAgICAgIHdpZGdldHMsXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuYmluZEZvcm0oKTtcclxuICB9XHJcblxyXG4gIGdldEZvcm1MYXlvdXQoKTogU21hcnRGb3JtV2lkZ2V0RGlyZWN0aW9uIHtcclxuICAgIGlmICh0aGlzLnNtYXJ0Q29tcG9uZW50TGF5b3V0Py5kaXJlY3Rpb24pIHtcclxuICAgICAgcmV0dXJuIHRoaXMuc21hcnRDb21wb25lbnRMYXlvdXQ/LmRpcmVjdGlvbiA9PT0gTGF5b3V0RGlyZWN0aW9uLkhPUklaT05UQUxcclxuICAgICAgICA/IFNtYXJ0Rm9ybVdpZGdldERpcmVjdGlvbi5ST1dcclxuICAgICAgICA6IFNtYXJ0Rm9ybVdpZGdldERpcmVjdGlvbi5DT0w7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gU21hcnRGb3JtV2lkZ2V0RGlyZWN0aW9uLkNPTDtcclxuICB9XHJcblxyXG4gIHNldEZvcm1Db21wb25lbnQoY29tcDogU21hcnRmb3JtQ29tcG9uZW50KSB7XHJcbiAgICBpZiAoIXRoaXMuc21hcnRGb3JtQ29tcG9uZW50KSB7XHJcbiAgICAgIHRoaXMuc21hcnRGb3JtQ29tcG9uZW50ID0gY29tcDtcclxuICAgICAgdGhpcy5iaW5kRm9ybSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYmluZEZvcm0oKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5wYXJlbnRTbWFydENvbXBvbmVudD8udXNlUXVlcnlMaXN0cykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5zbWFydEZvcm0gJiYgdGhpcy5zbWFydEZvcm1Db21wb25lbnQpIHtcclxuICAgICAgdGhpcy5wYXJlbnRTbWFydENvbXBvbmVudD8uYWRkRm9ybShcclxuICAgICAgICAvLyB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIGZvcm1cclxuICAgICAgICBgZm9ybV8ke3RoaXMubWFrZWlkKDUpfWAsXHJcbiAgICAgICAgdGhpcy5zbWFydEZvcm0sXHJcbiAgICAgICAgdGhpcy5zbWFydEZvcm1Db21wb25lbnRcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG1ha2VpZChsZW5ndGg6IG51bWJlcikge1xyXG4gICAgbGV0IHJlc3VsdCA9ICcnO1xyXG4gICAgY29uc3QgY2hhcmFjdGVycyA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSc7XHJcbiAgICBjb25zdCBjaGFyYWN0ZXJzTGVuZ3RoID0gY2hhcmFjdGVycy5sZW5ndGg7XHJcbiAgICBsZXQgY291bnRlciA9IDA7XHJcbiAgICB3aGlsZSAoY291bnRlciA8IGxlbmd0aCkge1xyXG4gICAgICByZXN1bHQgKz0gY2hhcmFjdGVycy5jaGFyQXQoTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogY2hhcmFjdGVyc0xlbmd0aCkpO1xyXG4gICAgICBjb3VudGVyICs9IDE7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0R3JpZCgpOiB2b2lkIHtcclxuICAgIHRoaXMuc21hcnRHcmlkID0ge1xyXG4gICAgICBncmlkSWRlbnRpZmllcjogdGhpcy5zbWFydENvbXBvbmVudExheW91dD8ud2lkZ2V0Py5pZGVudGlmaWVyISxcclxuICAgICAgZ3JpZE1vZGVsOiB7XHJcbiAgICAgICAgcGFnZToge30sXHJcbiAgICAgIH0sXHJcbiAgICAgIG9wdGlvbnM6IHtcclxuICAgICAgICByb3dVaUFjdGlvblR5cGU6IEdyaWRVaUFjdGlvblR5cGUuUE9QVVBfTUVOVSxcclxuICAgICAgfSxcclxuICAgICAgbGF5b3V0RGVmOiBTbWFydExheW91dERlZi5UQUJMRSxcclxuICAgICAgcGFnaW5hdG9yOiB0cnVlLFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLmJpbmRHcmlkKCk7XHJcbiAgfVxyXG5cclxuICBzZXRHcmlkQ29tcG9uZW50KGNvbXA6IFNtYXJ0R3JpZENvbXBvbmVudCkge1xyXG4gICAgaWYgKCF0aGlzLnNtYXJ0R3JpZENvbXBvbmVudCkge1xyXG4gICAgICB0aGlzLnNtYXJ0R3JpZENvbXBvbmVudCA9IGNvbXA7XHJcbiAgICAgIHRoaXMuYmluZEdyaWQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGJpbmRHcmlkKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMucGFyZW50U21hcnRDb21wb25lbnQ/LnVzZVF1ZXJ5TGlzdHMpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc21hcnRHcmlkICYmIHRoaXMuc21hcnRHcmlkQ29tcG9uZW50KSB7XHJcbiAgICAgIHRoaXMuc21hcnRHcmlkID0gdGhpcy5wYXJlbnRTbWFydENvbXBvbmVudD8uYWRkR3JpZChcclxuICAgICAgICB0aGlzLnNtYXJ0R3JpZCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICByb3dVaUFjdGlvblR5cGU6IEdyaWRVaUFjdGlvblR5cGUuUE9QVVBfTUVOVSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIGZhbHNlLFxyXG4gICAgICAgIHRoaXMuc21hcnRHcmlkQ29tcG9uZW50XHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRUb29sYmFyQ29tcG9uZW50KGNvbXA6IFVpQWN0aW9uVG9vbGJhckNvbXBvbmVudCkge1xyXG4gICAgdGhpcy50b29sYmFyID0gY29tcDtcclxuICB9XHJcblxyXG4gIC8vIE5PVCBVU0VELCBET0VTTidUIFdPUktcclxuICAvLyBjb25zdHJ1Y3RGaWx0ZXIoKTogdm9pZCB7XHJcbiAgLy8gICB0aGlzLnNtYXJ0RmlsdGVyID0gKHRoaXMuc21hcnRDb21wb25lbnRMYXlvdXQhLnBhcmVudENvbXBvbmVudCBhcyBhbnkpLmFkZEZpbHRlcihcclxuICAvLyAgICAgYGZpbHRlcl8ke3RoaXMubWFrZWlkKDUpfWAsXHJcbiAgLy8gICAgIHRoaXMuc21hcnRDb21wb25lbnRMYXlvdXQ/LndpZGdldD8uZmlsdGVyRXhwcmVzc2lvbkZpZWxkTGlzdCxcclxuICAvLyAgICAgdGhpcy5zbWFydENvbXBvbmVudExheW91dD8ud2lkZ2V0Py5maWx0ZXJUeXBlLFxyXG4gIC8vICAgICB0aGlzLnNtYXJ0RmlsdGVyQ29tcG9uZW50XHJcbiAgLy8gICApO1xyXG4gIC8vIH1cclxuXHJcbiAgYmluZEZpbHRlcigpOiB2b2lkIHtcclxuICAgIC8vIFRPRE9cclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdFRyZWUoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5wYXJlbnRTbWFydENvbXBvbmVudD8udXNlUXVlcnlMaXN0cykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLnBhcmVudFNtYXJ0Q29tcG9uZW50LnNldFVwRGVmYXVsdFRyZWUodGhpcy5zbWFydENvbXBvbmVudExheW91dD8ud2lkZ2V0Py5pZGVudGlmaWVyKTtcclxuICAgIHRoaXMudHJlZVNlcnZpY2U/LmluaXRpYWxpemUoKTtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdFRvb2xiYXIoKTogdm9pZCB7XHJcbiAgICBsZXQgdG9vbGJhcklkID0gdGhpcy5zbWFydENvbXBvbmVudExheW91dD8ud2lkZ2V0Py5pZGVudGlmaWVyO1xyXG4gICAgaWYgKHRoaXMudG9vbGJhcklkICE9PSB0b29sYmFySWQpIHtcclxuICAgICAgdGhpcy50b29sYmFySWQgPSB0b29sYmFySWQ7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgKm5nSWY9XCJzbWFydENvbXBvbmVudExheW91dD8uZXhwYW5kYWJsZTsgdGhlbiBleHBhbmRhYmxlOyBlbHNlIG5vcm1hbFwiPiA8L2Rpdj5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjZXhwYW5kYWJsZT5cclxuICA8c21hcnQtZXhwYW5kYWJsZS1zZWN0aW9uXHJcbiAgICAqbmdJZj1cImV4cGFuZGFibGVTZWN0aW9uXCJcclxuICAgIFtkYXRhXT1cImV4cGFuZGFibGVTZWN0aW9uXCJcclxuICA+PC9zbWFydC1leHBhbmRhYmxlLXNlY3Rpb24+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI25vcm1hbD5cclxuICA8ZGl2XHJcbiAgICAqbmdJZj1cInNtYXJ0Q29tcG9uZW50TGF5b3V0Py50eXBlID09PSB0eXBlKCkuQ09OVEFJTkVSXCJcclxuICAgIFtuZ0NsYXNzXT1cInNtYXJ0Q29tcG9uZW50TGF5b3V0Py5kaXJlY3Rpb24gPz8gJ3ZlcnRpY2FsJ1wiXHJcbiAgPlxyXG4gICAgPHNtYXJ0LWNvbXBvbmVudC1sYXlvdXRcclxuICAgICAgKm5nRm9yPVwibGV0IGxheW91dCBvZiBzbWFydENvbXBvbmVudExheW91dD8uY29tcG9uZW50c1wiXHJcbiAgICAgIFtwYXJlbnRTbWFydENvbXBvbmVudF09XCJwYXJlbnRTbWFydENvbXBvbmVudFwiXHJcbiAgICAgIFtwYXJlbnRMYXlvdXRDb21wb25lbnRdPVwidGhpc1wiXHJcbiAgICAgIFtzbWFydENvbXBvbmVudExheW91dF09XCJsYXlvdXRcIlxyXG4gICAgPjwvc21hcnQtY29tcG9uZW50LWxheW91dD5cclxuICA8L2Rpdj5cclxuICA8c21hcnRmb3JtICpuZ0lmPVwic21hcnRGb3JtXCIgI2Zvcm0gW3NtYXJ0Rm9ybV09XCJzbWFydEZvcm1cIj48L3NtYXJ0Zm9ybT5cclxuICA8c21hcnQtZ3JpZCAqbmdJZj1cInNtYXJ0R3JpZFwiICNncmlkIFtzbWFydEdyaWRdPVwic21hcnRHcmlkXCIgW3V1aWRdPVwidXVpZCFcIj48L3NtYXJ0LWdyaWQ+XHJcbiAgPCEtLSA8c21hcnQtZmlsdGVyICNmaWx0ZXIgW2ZpbHRlcl09XCJzbWFydEZpbHRlclwiPjwvc21hcnQtZmlsdGVyPiAtLT5cclxuICA8c21hcnQtdHJlZSAqbmdJZj1cInRyZWVTZXJ2aWNlXCIgW3RyZWVTZXJ2aWNlXT1cInRyZWVTZXJ2aWNlIVwiPjwvc21hcnQtdHJlZT5cclxuICA8c21hcnQtdWktYWN0aW9uLXRvb2xiYXIgKm5nSWY9XCIhIXRvb2xiYXJJZFwiICN0b29sYmFyIFtpZF09XCJ0b29sYmFySWRcIj48L3NtYXJ0LXVpLWFjdGlvbi10b29sYmFyPlxyXG48L25nLXRlbXBsYXRlPlxyXG4iXX0=
|
|
268
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtY29tcG9uZW50LWxheW91dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi9zbWFydC1jb21wb25lbnQtbGF5b3V0L3NtYXJ0LWNvbXBvbmVudC1sYXlvdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtbmctY2xpZW50L3NyYy9saWIvc21hcnQtY29tcG9uZW50LWxheW91dC9zbWFydC1jb21wb25lbnQtbGF5b3V0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxTQUFTLEVBRVQsS0FBSyxFQVFMLFlBQVksR0FDYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsYUFBYSxFQUNiLG1CQUFtQixFQUNuQixlQUFlLEdBRWhCLE1BQU0sT0FBTyxDQUFDO0FBQ2YsT0FBTyxFQUVMLHdCQUF3QixHQUd6QixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFDTCxnQkFBZ0IsRUFHaEIsY0FBYyxHQUNmLE1BQU0sd0JBQXdCLENBQUM7QUFHaEMsT0FBTyxFQUVMLDBCQUEwQixHQUMzQixNQUFNLHNDQUFzQyxDQUFDO0FBQzlDLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDeEMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7Ozs7Ozs7OztBQU9oRixNQUFNLE9BQU8sNkJBQTZCO0lBeUN4QyxZQUNVLGFBQStDLEVBQy9DLE9BQW9CLEVBQ3BCLFFBQW9CO1FBRnBCLGtCQUFhLEdBQWIsYUFBYSxDQUFrQztRQUMvQyxZQUFPLEdBQVAsT0FBTyxDQUFhO1FBQ3BCLGFBQVEsR0FBUixRQUFRLENBQVk7UUEzQ3BCLGNBQVMsR0FBa0IsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQTRDaEQsQ0FBQztJQUVKLGVBQWU7UUFDYixJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsS0FBSyxFQUFFLENBQUM7WUFDOUIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDbkQsQ0FBQztRQUNELElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTzthQUN2QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQzthQUMvQixTQUFTLENBQUMsQ0FBQyxJQUFtQyxFQUFFLEVBQUU7WUFDakQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwQyxDQUFDLENBQUMsQ0FBQztRQUVMLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxLQUFLLEVBQUUsQ0FBQztZQUM5QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNuRCxDQUFDO1FBQ0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPO2FBQ3ZCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2FBQy9CLFNBQVMsQ0FBQyxDQUFDLElBQW1DLEVBQUUsRUFBRTtZQUNqRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BDLENBQUMsQ0FBQyxDQUFDO1FBRUwsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPO2FBQ3pCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2FBQy9CLFNBQVMsQ0FBQyxDQUFDLElBQXFDLEVBQUUsRUFBRTtZQUNuRCxJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7Z0JBQy9CLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO2dCQUN2QyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDcEIsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUwsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLEtBQUssRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3BELENBQUM7UUFDRCxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU87YUFDckIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7YUFDL0IsU0FBUyxDQUFDLENBQUMsSUFBeUMsRUFBRSxFQUFFO1lBQ3ZELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkMsQ0FBQyxDQUFDLENBQUM7UUFDTCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDZixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNmLENBQUM7SUFFTyxLQUFLO1FBQ1gsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1lBQzdELE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO1lBQzdELHVDQUF1QztZQUN2QyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztZQUMvQyxPQUFPO1FBQ1QsQ0FBQztRQUNELDJDQUEyQztRQUMzQyw4RUFBOEU7UUFDOUUsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUM7UUFFL0MsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDO1FBQzNDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGdCQUFnQixDQUFDO1FBRTlELElBQUksQ0FBQyxvQkFBb0IsRUFBRSxTQUFTLENBQUM7UUFFckMsMEZBQTBGO1FBQzFGLGdFQUFnRTtRQUNoRSxJQUFJLENBQUMsaUJBQWlCLEdBQUcsU0FBUyxDQUFDO1FBQ25DLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1FBQzNCLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1FBQzNCLElBQUksQ0FBQyxXQUFXLEdBQUcsU0FBUyxDQUFDO1FBQzdCLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1FBQzNCLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1FBQzNCLG9CQUFvQjtRQUVwQixJQUFJLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxVQUFVLEVBQUUsQ0FBQztZQUMxQyxJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztRQUNwQyxDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsSUFBSSxLQUFLLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNsRSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDdkIsQ0FBQzthQUFNLElBQUksSUFBSSxDQUFDLG9CQUFvQixFQUFFLElBQUksS0FBSyxhQUFhLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDcEUsSUFBSSxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxFQUFFLElBQUksS0FBSyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDeEUsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3ZCLENBQUM7aUJBQU0sSUFBSSxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxFQUFFLElBQUksS0FBSyxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDakYsT0FBTyxDQUFDLElBQUksQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFDO2dCQUM1RCwwQkFBMEI7WUFDNUIsQ0FBQztpQkFBTSxJQUFJLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsSUFBSSxLQUFLLG1CQUFtQixDQUFDLElBQUksRUFBRSxDQUFDO2dCQUMvRSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDdkIsQ0FBQztpQkFBTSxJQUFJLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsSUFBSSxLQUFLLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNsRixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUMxQixDQUFDO1lBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO2dCQUNoQyxvREFBb0Q7Z0JBQ3BELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUMxQyxDQUFDO1FBQ0gsQ0FBQztRQUVELGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzdGLENBQUM7SUFFRCxJQUFJO1FBQ0YsT0FBTyxhQUFhLENBQUM7SUFDdkIsQ0FBQztJQUVELDBCQUEwQjtRQUN4QixJQUFJLElBQUksR0FBbUMsRUFBRSxHQUFHLElBQUksQ0FBQyxvQkFBcUIsRUFBRSxDQUFDO1FBQzdFLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBRXhCLElBQUksQ0FBQyxpQkFBaUIsR0FBRztZQUN2QixLQUFLLEVBQUUsSUFBSSxDQUFDLG9CQUFvQixFQUFFLHNCQUFzQixJQUFJLEVBQUU7WUFDOUQsTUFBTSxFQUFFLElBQUksR0FBRyxDQUFjO2dCQUMzQixDQUFDLHNCQUFzQixFQUFFLElBQUksQ0FBQztnQkFDOUIsQ0FBQyxzQkFBc0IsRUFBRSxJQUFJLENBQUMsb0JBQW9CLENBQUM7Z0JBQ25ELENBQUMsdUJBQXVCLEVBQUUsSUFBSSxDQUFDLHFCQUFxQixDQUFDO2FBQ3RELENBQUM7WUFDRixlQUFlLEVBQUUsNkJBQTZCO1NBQy9DLENBQUM7SUFDSixDQUFDO0lBRUQsYUFBYTtRQUNYLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDO1lBQ3hDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxJQUFJO1NBQ25ELENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxTQUFTLEdBQUc7WUFDZixTQUFTLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUMvQixjQUFjLEVBQUUsSUFBSSxDQUFDLG9CQUFvQixFQUFFLEtBQUs7WUFDaEQsT0FBTztTQUNSLENBQUM7UUFFRixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbEIsQ0FBQztJQUVELGFBQWE7UUFDWCxJQUFJLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxTQUFTLEVBQUUsQ0FBQztZQUN6QyxPQUFPLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxTQUFTLEtBQUssZUFBZSxDQUFDLFVBQVU7Z0JBQ3hFLENBQUMsQ0FBQyx3QkFBd0IsQ0FBQyxHQUFHO2dCQUM5QixDQUFDLENBQUMsd0JBQXdCLENBQUMsR0FBRyxDQUFDO1FBQ25DLENBQUM7UUFDRCxPQUFPLHdCQUF3QixDQUFDLEdBQUcsQ0FBQztJQUN0QyxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsSUFBd0I7UUFDdkMsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQzdCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUM7WUFDL0IsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2xCLENBQUM7SUFDSCxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksSUFBSSxDQUFDLG9CQUFvQixFQUFFLGFBQWEsRUFBRSxDQUFDO1lBQzdDLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQzlDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxPQUFPO1lBQ2hDLGlDQUFpQztZQUNqQyxRQUFRLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFDeEIsSUFBSSxDQUFDLFNBQVMsRUFDZCxJQUFJLENBQUMsa0JBQWtCLENBQ3hCLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU0sQ0FBQyxNQUFjO1FBQ25CLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUNoQixNQUFNLFVBQVUsR0FBRyxnRUFBZ0UsQ0FBQztRQUNwRixNQUFNLGdCQUFnQixHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUM7UUFDM0MsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDO1FBQ2hCLE9BQU8sT0FBTyxHQUFHLE1BQU0sRUFBRSxDQUFDO1lBQ3hCLE1BQU0sSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLGdCQUFnQixDQUFDLENBQUMsQ0FBQztZQUMxRSxPQUFPLElBQUksQ0FBQyxDQUFDO1FBQ2YsQ0FBQztRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxhQUFhO1FBQ1gsSUFBSSxDQUFDLFNBQVMsR0FBRztZQUNmLGNBQWMsRUFBRSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLFVBQVc7WUFDOUQsU0FBUyxFQUFFO2dCQUNULElBQUksRUFBRSxFQUFFO2FBQ1Q7WUFDRCxPQUFPLEVBQUU7Z0JBQ1AsZUFBZSxFQUFFLGdCQUFnQixDQUFDLFVBQVU7YUFDN0M7WUFDRCxTQUFTLEVBQUUsY0FBYyxDQUFDLEtBQUs7WUFDL0IsU0FBUyxFQUFFLElBQUk7U0FDaEIsQ0FBQztRQUVGLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNsQixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsSUFBd0I7UUFDdkMsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQzdCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUM7WUFDL0IsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2xCLENBQUM7SUFDSCxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksSUFBSSxDQUFDLG9CQUFvQixFQUFFLGFBQWEsRUFBRSxDQUFDO1lBQzdDLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQzlDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixFQUFFLE9BQU8sQ0FDakQsSUFBSSxDQUFDLFNBQVMsRUFDZDtnQkFDRSxlQUFlLEVBQUUsZ0JBQWdCLENBQUMsVUFBVTthQUM3QyxFQUNELEtBQUssRUFDTCxJQUFJLENBQUMsa0JBQWtCLENBQ3hCLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUVELG1CQUFtQixDQUFDLElBQThCO1FBQ2hELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0lBQ3RCLENBQUM7SUFFRCx5QkFBeUI7SUFDekIsNEJBQTRCO0lBQzVCLHNGQUFzRjtJQUN0RixrQ0FBa0M7SUFDbEMsb0VBQW9FO0lBQ3BFLHFEQUFxRDtJQUNyRCxnQ0FBZ0M7SUFDaEMsT0FBTztJQUNQLElBQUk7SUFFSixVQUFVO1FBQ1IsT0FBTztJQUNULENBQUM7SUFFRCxhQUFhO1FBQ1gsSUFBSSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsYUFBYSxFQUFFLENBQUM7WUFDN0MsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLENBQUMsb0JBQW9CLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQztRQUMxRixJQUFJLENBQUMsV0FBVyxFQUFFLFVBQVUsRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLFVBQVUsQ0FBQztRQUM5RCxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDakMsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7UUFDN0IsQ0FBQztJQUNILENBQUM7K0dBcFNVLDZCQUE2QjttR0FBN0IsNkJBQTZCLGdqQkFtQzFCLDBCQUEwQixnRUFHMUIsNkJBQTZCLHFFQ3RGN0MseXJDQTJCQSxxakNEcUJhLDZCQUE2Qjs7NEZBQTdCLDZCQUE2QjtrQkFMekMsU0FBUzsrQkFDRSx3QkFBd0I7c0pBT3pCLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFDRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBQ0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQU9OLGFBQWE7c0JBRFosWUFBWTt1QkFBQyxNQUFNO2dCQU1wQixhQUFhO3NCQURaLFlBQVk7dUJBQUMsTUFBTTtnQkFNcEIsZUFBZTtzQkFEZCxZQUFZO3VCQUFDLFFBQVE7Z0JBTXRCLFdBQVc7c0JBRFYsWUFBWTt1QkFBQyxTQUFTO2dCQVV2QixvQkFBb0I7c0JBRG5CLFlBQVk7dUJBQUMsMEJBQTBCO2dCQUl4QyxVQUFVO3NCQURULFlBQVk7dUJBQUMsNkJBQTZCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIENvbXBvbmVudCxcclxuICBFbGVtZW50UmVmLFxyXG4gIElucHV0LFxyXG4gIE9uQ2hhbmdlcyxcclxuICBPbkRlc3Ryb3ksXHJcbiAgT25Jbml0LFxyXG4gIFF1ZXJ5TGlzdCxcclxuICBSZW5kZXJlcjIsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxuICBWaWV3Q2hpbGQsXHJcbiAgVmlld0NoaWxkcmVuLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1xyXG4gIENvbXBvbmVudFR5cGUsXHJcbiAgQ29tcG9uZW50V2lkZ2V0VHlwZSxcclxuICBMYXlvdXREaXJlY3Rpb24sXHJcbiAgU21hcnRDb21wb25lbnRMYXlvdXREZWZpbml0aW9uLFxyXG59IGZyb20gJy4vYXBpJztcclxuaW1wb3J0IHtcclxuICBTbWFydEZvcm0sXHJcbiAgU21hcnRGb3JtV2lkZ2V0RGlyZWN0aW9uLFxyXG4gIFNtYXJ0Zm9ybUNvbXBvbmVudCxcclxuICBTbWFydGZvcm1MYXlvdXREZWZpbml0aW9uU2VydmljZSxcclxufSBmcm9tICcuLi9zbWFydC1mb3JtL3Byb2plY3RzJztcclxuaW1wb3J0IHtcclxuICBHcmlkVWlBY3Rpb25UeXBlLFxyXG4gIFNtYXJ0R3JpZCxcclxuICBTbWFydEdyaWRDb21wb25lbnQsXHJcbiAgU21hcnRMYXlvdXREZWYsXHJcbn0gZnJvbSAnLi4vc21hcnQtZ3JpZC9wcm9qZWN0cyc7XHJcbmltcG9ydCB7IFNtYXJ0RmlsdGVyLCBTbWFydEZpbHRlckNvbXBvbmVudCB9IGZyb20gJy4uL3NtYXJ0LWZpbHRlci9wcm9qZWN0cyc7XHJcbmltcG9ydCB7IFNtYXJ0dHJlZUdlbmVyaWNTZXJ2aWNlIH0gZnJvbSAnLi4vc21hcnQtdHJlZS9wcm9qZWN0cyc7XHJcbmltcG9ydCB7XHJcbiAgRXhwYW5kYWJsZVNlY3Rpb24sXHJcbiAgRXhwYW5kYWJsZVNlY3Rpb25Db21wb25lbnQsXHJcbn0gZnJvbSAnLi4vc21hcnQtZXhwYW5kYWJsZS1zZWN0aW9uL3Byb2plY3RzJztcclxuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFVpQWN0aW9uVG9vbGJhckNvbXBvbmVudCB9IGZyb20gJy4uL3ZpZXctY29udGV4dC9wcm9qZWN0cyc7XHJcbmltcG9ydCB7IGRlZXBFcXVhbCB9IGZyb20gJ2Zhc3QtZXF1YWxzJztcclxuaW1wb3J0IHsgU21hcnRTdHlsZVV0aWxpdHkgfSBmcm9tICcuLi92aWV3LWNvbnRleHQvdXRpbGl0eS9zbWFydC1zdHlsZS11dGlsaXR5JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnc21hcnQtY29tcG9uZW50LWxheW91dCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3NtYXJ0LWNvbXBvbmVudC1sYXlvdXQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3NtYXJ0LWNvbXBvbmVudC1sYXlvdXQuY29tcG9uZW50LmNzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgU21hcnRDb21wb25lbnRMYXlvdXRDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcyB7XHJcbiAgcHJvdGVjdGVkIF9kZXN0cm95JDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gIEBJbnB1dCgpIHNtYXJ0Q29tcG9uZW50TGF5b3V0PzogU21hcnRDb21wb25lbnRMYXlvdXREZWZpbml0aW9uO1xyXG4gIEBJbnB1dCgpIHBhcmVudExheW91dENvbXBvbmVudD86IFNtYXJ0Q29tcG9uZW50TGF5b3V0Q29tcG9uZW50O1xyXG4gIEBJbnB1dCgpIHBhcmVudFNtYXJ0Q29tcG9uZW50OiBhbnk7XHJcblxyXG4gIGN1cnJlbnRMYXlvdXQ/OiBTbWFydENvbXBvbmVudExheW91dERlZmluaXRpb247XHJcblxyXG4gIHV1aWQ/OiBzdHJpbmc7XHJcblxyXG4gIEBWaWV3Q2hpbGRyZW4oJ2Zvcm0nKVxyXG4gIHNtYXJ0Rm9ybUxpc3QhOiBRdWVyeUxpc3Q8U21hcnRmb3JtQ29tcG9uZW50PjtcclxuICBzbWFydEZvcm1Db21wb25lbnQ/OiBTbWFydGZvcm1Db21wb25lbnQ7XHJcbiAgc21hcnRGb3JtPzogU21hcnRGb3JtO1xyXG5cclxuICBAVmlld0NoaWxkcmVuKCdncmlkJylcclxuICBzbWFydEdyaWRMaXN0ITogUXVlcnlMaXN0PFNtYXJ0R3JpZENvbXBvbmVudD47XHJcbiAgc21hcnRHcmlkQ29tcG9uZW50PzogU21hcnRHcmlkQ29tcG9uZW50O1xyXG4gIHNtYXJ0R3JpZD86IFNtYXJ0R3JpZDtcclxuXHJcbiAgQFZpZXdDaGlsZHJlbignZmlsdGVyJylcclxuICBzbWFydEZpbHRlckxpc3QhOiBRdWVyeUxpc3Q8U21hcnRGaWx0ZXJDb21wb25lbnQ+O1xyXG4gIHNtYXJ0RmlsdGVyQ29tcG9uZW50PzogU21hcnRGaWx0ZXJDb21wb25lbnQ7XHJcbiAgc21hcnRGaWx0ZXI/OiBTbWFydEZpbHRlcjtcclxuXHJcbiAgQFZpZXdDaGlsZHJlbigndG9vbGJhcicpXHJcbiAgdG9vbGJhckxpc3QhOiBRdWVyeUxpc3Q8VWlBY3Rpb25Ub29sYmFyQ29tcG9uZW50PjtcclxuICB0b29sYmFyPzogVWlBY3Rpb25Ub29sYmFyQ29tcG9uZW50O1xyXG4gIHRvb2xiYXJJZD86IHN0cmluZztcclxuXHJcbiAgdHJlZVNlcnZpY2U/OiBTbWFydHRyZWVHZW5lcmljU2VydmljZTtcclxuXHJcbiAgZXhwYW5kYWJsZVNlY3Rpb24/OiBFeHBhbmRhYmxlU2VjdGlvbjxTbWFydENvbXBvbmVudExheW91dERlZmluaXRpb24+O1xyXG5cclxuICBAVmlld0NoaWxkcmVuKEV4cGFuZGFibGVTZWN0aW9uQ29tcG9uZW50KVxyXG4gIGV4cGFuZGFibGVDb21wb25lbnRzITogUXVlcnlMaXN0PEV4cGFuZGFibGVTZWN0aW9uQ29tcG9uZW50PjtcclxuXHJcbiAgQFZpZXdDaGlsZHJlbihTbWFydENvbXBvbmVudExheW91dENvbXBvbmVudClcclxuICBjb21wb25lbnRzITogUXVlcnlMaXN0PFNtYXJ0Q29tcG9uZW50TGF5b3V0Q29tcG9uZW50PjtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGxheW91dFNlcnZpY2U6IFNtYXJ0Zm9ybUxheW91dERlZmluaXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBlbGVtZW50PzogRWxlbWVudFJlZixcclxuICAgIHByaXZhdGUgcmVuZGVyZXI/OiBSZW5kZXJlcjJcclxuICApIHt9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNtYXJ0Rm9ybUxpc3Q/LmZpcnN0KSB7XHJcbiAgICAgIHRoaXMuc2V0Rm9ybUNvbXBvbmVudCh0aGlzLnNtYXJ0Rm9ybUxpc3Q/LmZpcnN0KTtcclxuICAgIH1cclxuICAgIHRoaXMuc21hcnRGb3JtTGlzdC5jaGFuZ2VzXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKGxpc3Q6IFF1ZXJ5TGlzdDxTbWFydGZvcm1Db21wb25lbnQ+KSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZXRGb3JtQ29tcG9uZW50KGxpc3QuZmlyc3QpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICBpZiAodGhpcy5zbWFydEdyaWRMaXN0Py5maXJzdCkge1xyXG4gICAgICB0aGlzLnNldEdyaWRDb21wb25lbnQodGhpcy5zbWFydEdyaWRMaXN0Py5maXJzdCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNtYXJ0R3JpZExpc3QuY2hhbmdlc1xyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKChsaXN0OiBRdWVyeUxpc3Q8U21hcnRHcmlkQ29tcG9uZW50PikgPT4ge1xyXG4gICAgICAgIHRoaXMuc2V0R3JpZENvbXBvbmVudChsaXN0LmZpcnN0KTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgdGhpcy5zbWFydEZpbHRlckxpc3QuY2hhbmdlc1xyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKChsaXN0OiBRdWVyeUxpc3Q8U21hcnRGaWx0ZXJDb21wb25lbnQ+KSA9PiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnNtYXJ0RmlsdGVyQ29tcG9uZW50KSB7XHJcbiAgICAgICAgICB0aGlzLnNtYXJ0RmlsdGVyQ29tcG9uZW50ID0gbGlzdC5maXJzdDtcclxuICAgICAgICAgIHRoaXMuYmluZEZpbHRlcigpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgaWYgKHRoaXMudG9vbGJhckxpc3Q/LmZpcnN0KSB7XHJcbiAgICAgIHRoaXMuc2V0VG9vbGJhckNvbXBvbmVudCh0aGlzLnRvb2xiYXJMaXN0Py5maXJzdCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnRvb2xiYXJMaXN0LmNoYW5nZXNcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSgobGlzdDogUXVlcnlMaXN0PFVpQWN0aW9uVG9vbGJhckNvbXBvbmVudD4pID0+IHtcclxuICAgICAgICB0aGlzLnNldFRvb2xiYXJDb21wb25lbnQobGlzdC5maXJzdCk7XHJcbiAgICAgIH0pO1xyXG4gICAgdGhpcy5zZXRVcCgpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLl9kZXN0cm95JC5uZXh0KCk7XHJcbiAgICB0aGlzLl9kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgdGhpcy5zZXRVcCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRVcCgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5wYXJlbnRTbWFydENvbXBvbmVudCB8fCAhdGhpcy5zbWFydENvbXBvbmVudExheW91dCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoZGVlcEVxdWFsKHRoaXMuc21hcnRDb21wb25lbnRMYXlvdXQsIHRoaXMuY3VycmVudExheW91dCkpIHtcclxuICAgICAgLy8gbm8gbGF5b3V0IGNoYW5nZSwga2VlcCBjdXJyZW50IHN0YXRlXHJcbiAgICAgIHRoaXMuc21hcnRDb21wb25lbnRMYXlvdXQgPSB0aGlzLmN1cnJlbnRMYXlvdXQ7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIC8vIGxheW91dCBjaGFuZ2VkLCByZW5kZXIsIGJ1dCBzYXZlIGN1cnJlbnRcclxuICAgIC8vIHRoaXMuY3VycmVudExheW91dCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5zbWFydENvbXBvbmVudExheW91dCkpO1xyXG4gICAgdGhpcy5jdXJyZW50TGF5b3V0ID0gdGhpcy5zbWFydENvbXBvbmVudExheW91dDtcclxuXHJcbiAgICB0aGlzLnV1aWQgPSB0aGlzLnBhcmVudFNtYXJ0Q29tcG9uZW50LnV1aWQ7XHJcbiAgICB0aGlzLnRyZWVTZXJ2aWNlID0gdGhpcy5wYXJlbnRTbWFydENvbXBvbmVudC5zbWFydFRyZWVTZXJ2aWNlO1xyXG5cclxuICAgIHRoaXMuc21hcnRDb21wb25lbnRMYXlvdXQ/LmRpcmVjdGlvbjtcclxuXHJcbiAgICAvLyB0aGUgbmF0dXJlIG9mIHRoZSBsYXlvdXQgbWlnaHQgaGF2ZSBjaGFuZ2VkIChlLmcuIGZyb20gR1JJRCB0byBGT1JNKSwgd2UgbnVsbCBvdXQgZXZlcnlcclxuICAgIC8vIHRlbXBsYXRlLXJlbGF0ZWQgZWxlbWVudCwgc28gbm8gc3RhbGUgZGF0YSBpcyBsZWZ0IG9uIHNjcmVlbjpcclxuICAgIHRoaXMuZXhwYW5kYWJsZVNlY3Rpb24gPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLnNtYXJ0Rm9ybSA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMuc21hcnRHcmlkID0gdW5kZWZpbmVkO1xyXG4gICAgdGhpcy5zbWFydEZpbHRlciA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMuc21hcnRHcmlkID0gdW5kZWZpbmVkO1xyXG4gICAgdGhpcy50b29sYmFySWQgPSB1bmRlZmluZWQ7XHJcbiAgICAvLyBudWxsIG91dCB0b29sYmFyP1xyXG5cclxuICAgIGlmICh0aGlzLnNtYXJ0Q29tcG9uZW50TGF5b3V0Py5leHBhbmRhYmxlKSB7XHJcbiAgICAgIHRoaXMuY29uc3RydWN0RXhwYW5kYWJsZVNlY3Rpb24oKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5zbWFydENvbXBvbmVudExheW91dD8udHlwZSA9PT0gQ29tcG9uZW50VHlwZS5GT1JNKSB7XHJcbiAgICAgIHRoaXMuY29uc3RydWN0Rm9ybSgpO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnNtYXJ0Q29tcG9uZW50TGF5b3V0Py50eXBlID09PSBDb21wb25lbnRUeXBlLldJREdFVCkge1xyXG4gICAgICBpZiAodGhpcy5zbWFydENvbXBvbmVudExheW91dC53aWRnZXQ/LnR5cGUgPT09IENvbXBvbmVudFdpZGdldFR5cGUuR1JJRCkge1xyXG4gICAgICAgIHRoaXMuY29uc3RydWN0R3JpZCgpO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuc21hcnRDb21wb25lbnRMYXlvdXQud2lkZ2V0Py50eXBlID09PSBDb21wb25lbnRXaWRnZXRUeXBlLkZJTFRFUikge1xyXG4gICAgICAgIGNvbnNvbGUud2FybignQ29tcG9uZW50V2lkZ2V0VHlwZS5GSUxURVIgaXMgbm90IHN1cHBvcnRlZCcpO1xyXG4gICAgICAgIC8vIHRoaXMuY29uc3RydWN0RmlsdGVyKCk7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5zbWFydENvbXBvbmVudExheW91dC53aWRnZXQ/LnR5cGUgPT09IENvbXBvbmVudFdpZGdldFR5cGUuVFJFRSkge1xyXG4gICAgICAgIHRoaXMuY29uc3RydWN0VHJlZSgpO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuc21hcnRDb21wb25lbnRMYXlvdXQud2lkZ2V0Py50eXBlID09PSBDb21wb25lbnRXaWRnZXRUeXBlLlRPT0xCQVIpIHtcclxuICAgICAgICB0aGlzLmNvbnN0cnVjdFRvb2xiYXIoKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoIXRoaXMucGFyZW50TGF5b3V0Q29tcG9uZW50KSB7XHJcbiAgICAgICAgLy8gb25seSB0b3AgbGV2ZWwgY29tcG9uZW50IHNob3VsZCBjYWxsIGluaXQgYWN0aW9uc1xyXG4gICAgICAgIHRoaXMucGFyZW50U21hcnRDb21wb25lbnQuaW5pdEFjdGlvbnMoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIFNtYXJ0U3R5bGVVdGlsaXR5LmFwcGx5U3R5bGUodGhpcy5zbWFydENvbXBvbmVudExheW91dC5zdHlsZSwgdGhpcy5lbGVtZW50LCB0aGlzLnJlbmRlcmVyKTtcclxuICB9XHJcblxyXG4gIHR5cGUoKTogdHlwZW9mIENvbXBvbmVudFR5cGUge1xyXG4gICAgcmV0dXJuIENvbXBvbmVudFR5cGU7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RFeHBhbmRhYmxlU2VjdGlvbigpOiB2b2lkIHtcclxuICAgIGxldCBkYXRhOiBTbWFydENvbXBvbmVudExheW91dERlZmluaXRpb24gPSB7IC4uLnRoaXMuc21hcnRDb21wb25lbnRMYXlvdXQhIH07XHJcbiAgICBkYXRhLmV4cGFuZGFibGUgPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLmV4cGFuZGFibGVTZWN0aW9uID0ge1xyXG4gICAgICB0aXRsZTogdGhpcy5zbWFydENvbXBvbmVudExheW91dD8uZXhwYW5kYWJsZVNlY3Rpb25MYWJlbCA/PyAnJyxcclxuICAgICAgaW5wdXRzOiBuZXcgTWFwPHN0cmluZywgYW55PihbXHJcbiAgICAgICAgWydzbWFydENvbXBvbmVudExheW91dCcsIGRhdGFdLFxyXG4gICAgICAgIFsncGFyZW50U21hcnRDb21wb25lbnQnLCB0aGlzLnBhcmVudFNtYXJ0Q29tcG9uZW50XSxcclxuICAgICAgICBbJ3BhcmVudExheW91dENvbXBvbmVudCcsIHRoaXMucGFyZW50TGF5b3V0Q29tcG9uZW50XSxcclxuICAgICAgXSksXHJcbiAgICAgIGN1c3RvbUNvbXBvbmVudDogU21hcnRDb21wb25lbnRMYXlvdXRDb21wb25lbnQsXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0Rm9ybSgpOiB2b2lkIHtcclxuICAgIGNvbnN0IHdpZGdldHMgPSB0aGlzLmxheW91dFNlcnZpY2UucmVuZGVyKHtcclxuICAgICAgbGF5b3V0RGVmaW5pdGlvbnM6IHRoaXMuc21hcnRDb21wb25lbnRMYXlvdXQ/LmZvcm0sXHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnNtYXJ0Rm9ybSA9IHtcclxuICAgICAgZGlyZWN0aW9uOiB0aGlzLmdldEZvcm1MYXlvdXQoKSxcclxuICAgICAgY29tcG9uZW50TW9kZWw6IHRoaXMucGFyZW50U21hcnRDb21wb25lbnQ/Lm1vZGVsLFxyXG4gICAgICB3aWRnZXRzLFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLmJpbmRGb3JtKCk7XHJcbiAgfVxyXG5cclxuICBnZXRGb3JtTGF5b3V0KCk6IFNtYXJ0Rm9ybVdpZGdldERpcmVjdGlvbiB7XHJcbiAgICBpZiAodGhpcy5zbWFydENvbXBvbmVudExheW91dD8uZGlyZWN0aW9uKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnNtYXJ0Q29tcG9uZW50TGF5b3V0Py5kaXJlY3Rpb24gPT09IExheW91dERpcmVjdGlvbi5IT1JJWk9OVEFMXHJcbiAgICAgICAgPyBTbWFydEZvcm1XaWRnZXREaXJlY3Rpb24uUk9XXHJcbiAgICAgICAgOiBTbWFydEZvcm1XaWRnZXREaXJlY3Rpb24uQ09MO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFNtYXJ0Rm9ybVdpZGdldERpcmVjdGlvbi5DT0w7XHJcbiAgfVxyXG5cclxuICBzZXRGb3JtQ29tcG9uZW50KGNvbXA6IFNtYXJ0Zm9ybUNvbXBvbmVudCkge1xyXG4gICAgaWYgKCF0aGlzLnNtYXJ0Rm9ybUNvbXBvbmVudCkge1xyXG4gICAgICB0aGlzLnNtYXJ0Rm9ybUNvbXBvbmVudCA9IGNvbXA7XHJcbiAgICAgIHRoaXMuYmluZEZvcm0oKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGJpbmRGb3JtKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMucGFyZW50U21hcnRDb21wb25lbnQ/LnVzZVF1ZXJ5TGlzdHMpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc21hcnRGb3JtICYmIHRoaXMuc21hcnRGb3JtQ29tcG9uZW50KSB7XHJcbiAgICAgIHRoaXMucGFyZW50U21hcnRDb21wb25lbnQ/LmFkZEZvcm0oXHJcbiAgICAgICAgLy8gdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBmb3JtXHJcbiAgICAgICAgYGZvcm1fJHt0aGlzLm1ha2VpZCg1KX1gLFxyXG4gICAgICAgIHRoaXMuc21hcnRGb3JtLFxyXG4gICAgICAgIHRoaXMuc21hcnRGb3JtQ29tcG9uZW50XHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBtYWtlaWQobGVuZ3RoOiBudW1iZXIpIHtcclxuICAgIGxldCByZXN1bHQgPSAnJztcclxuICAgIGNvbnN0IGNoYXJhY3RlcnMgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODknO1xyXG4gICAgY29uc3QgY2hhcmFjdGVyc0xlbmd0aCA9IGNoYXJhY3RlcnMubGVuZ3RoO1xyXG4gICAgbGV0IGNvdW50ZXIgPSAwO1xyXG4gICAgd2hpbGUgKGNvdW50ZXIgPCBsZW5ndGgpIHtcclxuICAgICAgcmVzdWx0ICs9IGNoYXJhY3RlcnMuY2hhckF0KE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGNoYXJhY3RlcnNMZW5ndGgpKTtcclxuICAgICAgY291bnRlciArPSAxO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdEdyaWQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNtYXJ0R3JpZCA9IHtcclxuICAgICAgZ3JpZElkZW50aWZpZXI6IHRoaXMuc21hcnRDb21wb25lbnRMYXlvdXQ/LndpZGdldD8uaWRlbnRpZmllciEsXHJcbiAgICAgIGdyaWRNb2RlbDoge1xyXG4gICAgICAgIHBhZ2U6IHt9LFxyXG4gICAgICB9LFxyXG4gICAgICBvcHRpb25zOiB7XHJcbiAgICAgICAgcm93VWlBY3Rpb25UeXBlOiBHcmlkVWlBY3Rpb25UeXBlLlBPUFVQX01FTlUsXHJcbiAgICAgIH0sXHJcbiAgICAgIGxheW91dERlZjogU21hcnRMYXlvdXREZWYuVEFCTEUsXHJcbiAgICAgIHBhZ2luYXRvcjogdHJ1ZSxcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5iaW5kR3JpZCgpO1xyXG4gIH1cclxuXHJcbiAgc2V0R3JpZENvbXBvbmVudChjb21wOiBTbWFydEdyaWRDb21wb25lbnQpIHtcclxuICAgIGlmICghdGhpcy5zbWFydEdyaWRDb21wb25lbnQpIHtcclxuICAgICAgdGhpcy5zbWFydEdyaWRDb21wb25lbnQgPSBjb21wO1xyXG4gICAgICB0aGlzLmJpbmRHcmlkKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBiaW5kR3JpZCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnBhcmVudFNtYXJ0Q29tcG9uZW50Py51c2VRdWVyeUxpc3RzKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnNtYXJ0R3JpZCAmJiB0aGlzLnNtYXJ0R3JpZENvbXBvbmVudCkge1xyXG4gICAgICB0aGlzLnNtYXJ0R3JpZCA9IHRoaXMucGFyZW50U21hcnRDb21wb25lbnQ/LmFkZEdyaWQoXHJcbiAgICAgICAgdGhpcy5zbWFydEdyaWQsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgcm93VWlBY3Rpb25UeXBlOiBHcmlkVWlBY3Rpb25UeXBlLlBPUFVQX01FTlUsXHJcbiAgICAgICAgfSxcclxuICAgICAgICBmYWxzZSxcclxuICAgICAgICB0aGlzLnNtYXJ0R3JpZENvbXBvbmVudFxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0VG9vbGJhckNvbXBvbmVudChjb21wOiBVaUFjdGlvblRvb2xiYXJDb21wb25lbnQpIHtcclxuICAgIHRoaXMudG9vbGJhciA9IGNvbXA7XHJcbiAgfVxyXG5cclxuICAvLyBOT1QgVVNFRCwgRE9FU04nVCBXT1JLXHJcbiAgLy8gY29uc3RydWN0RmlsdGVyKCk6IHZvaWQge1xyXG4gIC8vICAgdGhpcy5zbWFydEZpbHRlciA9ICh0aGlzLnNtYXJ0Q29tcG9uZW50TGF5b3V0IS5wYXJlbnRDb21wb25lbnQgYXMgYW55KS5hZGRGaWx0ZXIoXHJcbiAgLy8gICAgIGBmaWx0ZXJfJHt0aGlzLm1ha2VpZCg1KX1gLFxyXG4gIC8vICAgICB0aGlzLnNtYXJ0Q29tcG9uZW50TGF5b3V0Py53aWRnZXQ/LmZpbHRlckV4cHJlc3Npb25GaWVsZExpc3QsXHJcbiAgLy8gICAgIHRoaXMuc21hcnRDb21wb25lbnRMYXlvdXQ/LndpZGdldD8uZmlsdGVyVHlwZSxcclxuICAvLyAgICAgdGhpcy5zbWFydEZpbHRlckNvbXBvbmVudFxyXG4gIC8vICAgKTtcclxuICAvLyB9XHJcblxyXG4gIGJpbmRGaWx0ZXIoKTogdm9pZCB7XHJcbiAgICAvLyBUT0RPXHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RUcmVlKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMucGFyZW50U21hcnRDb21wb25lbnQ/LnVzZVF1ZXJ5TGlzdHMpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5wYXJlbnRTbWFydENvbXBvbmVudC5zZXRVcERlZmF1bHRUcmVlKHRoaXMuc21hcnRDb21wb25lbnRMYXlvdXQ/LndpZGdldD8uaWRlbnRpZmllcik7XHJcbiAgICB0aGlzLnRyZWVTZXJ2aWNlPy5pbml0aWFsaXplKCk7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RUb29sYmFyKCk6IHZvaWQge1xyXG4gICAgbGV0IHRvb2xiYXJJZCA9IHRoaXMuc21hcnRDb21wb25lbnRMYXlvdXQ/LndpZGdldD8uaWRlbnRpZmllcjtcclxuICAgIGlmICh0aGlzLnRvb2xiYXJJZCAhPT0gdG9vbGJhcklkKSB7XHJcbiAgICAgIHRoaXMudG9vbGJhcklkID0gdG9vbGJhcklkO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8ZGl2ICpuZ0lmPVwic21hcnRDb21wb25lbnRMYXlvdXQ/LmV4cGFuZGFibGU7IHRoZW4gZXhwYW5kYWJsZTsgZWxzZSBub3JtYWxcIj4gPC9kaXY+XHJcblxyXG48bmctdGVtcGxhdGUgI2V4cGFuZGFibGU+XHJcbiAgPHNtYXJ0LWV4cGFuZGFibGUtc2VjdGlvblxyXG4gICAgKm5nSWY9XCJleHBhbmRhYmxlU2VjdGlvblwiXHJcbiAgICBbZGF0YV09XCJleHBhbmRhYmxlU2VjdGlvblwiXHJcbiAgPjwvc21hcnQtZXhwYW5kYWJsZS1zZWN0aW9uPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNub3JtYWw+XHJcbiAgPGRpdlxyXG4gICAgKm5nSWY9XCJzbWFydENvbXBvbmVudExheW91dD8udHlwZSA9PT0gdHlwZSgpLkNPTlRBSU5FUlwiXHJcbiAgICBbbmdDbGFzc109XCJzbWFydENvbXBvbmVudExheW91dD8uZGlyZWN0aW9uID8/ICd2ZXJ0aWNhbCdcIlxyXG4gID5cclxuICAgIDxzbWFydC1jb21wb25lbnQtbGF5b3V0XHJcbiAgICAgICpuZ0Zvcj1cImxldCBsYXlvdXQgb2Ygc21hcnRDb21wb25lbnRMYXlvdXQ/LmNvbXBvbmVudHNcIlxyXG4gICAgICBbcGFyZW50U21hcnRDb21wb25lbnRdPVwicGFyZW50U21hcnRDb21wb25lbnRcIlxyXG4gICAgICBbcGFyZW50TGF5b3V0Q29tcG9uZW50XT1cInRoaXNcIlxyXG4gICAgICBbc21hcnRDb21wb25lbnRMYXlvdXRdPVwibGF5b3V0XCJcclxuICAgID48L3NtYXJ0LWNvbXBvbmVudC1sYXlvdXQ+XHJcbiAgPC9kaXY+XHJcbiAgPHNtYXJ0Zm9ybSAqbmdJZj1cInNtYXJ0Rm9ybVwiICNmb3JtIFtzbWFydEZvcm1dPVwic21hcnRGb3JtXCI+PC9zbWFydGZvcm0+XHJcbiAgPHNtYXJ0LWdyaWQgKm5nSWY9XCJzbWFydEdyaWRcIiAjZ3JpZCBbc21hcnRHcmlkXT1cInNtYXJ0R3JpZFwiIFt1dWlkXT1cInV1aWQhXCI+PC9zbWFydC1ncmlkPlxyXG4gIDwhLS0gPHNtYXJ0LWZpbHRlciAjZmlsdGVyIFtmaWx0ZXJdPVwic21hcnRGaWx0ZXJcIj48L3NtYXJ0LWZpbHRlcj4gLS0+XHJcbiAgPHNtYXJ0LXRyZWUgKm5nSWY9XCJ0cmVlU2VydmljZVwiIFt0cmVlU2VydmljZV09XCJ0cmVlU2VydmljZSFcIj48L3NtYXJ0LXRyZWU+XHJcbiAgPHNtYXJ0LXVpLWFjdGlvbi10b29sYmFyICpuZ0lmPVwiISF0b29sYmFySWRcIiAjdG9vbGJhciBbaWRdPVwidG9vbGJhcklkXCI+PC9zbWFydC11aS1hY3Rpb24tdG9vbGJhcj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuIl19
|