nuxeo-development-framework 4.2.2 → 4.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/nuxeo-development-framework.umd.js +504 -477
- package/bundles/nuxeo-development-framework.umd.js.map +1 -1
- package/esm2015/lib/components/comments/components/comment-item/comment-item.component.js +30 -23
- package/esm2015/lib/components/correspondence-relation/components/correspondence-relation/correspondence-relation.component.js +27 -32
- package/esm2015/lib/components/correspondence-relation/components/correspondence-relation-list/correspondence-relation-list.component.js +27 -32
- package/esm2015/lib/components/documents/components/document-list/documents-list.component.js +22 -19
- package/esm2015/lib/components/file-manger/components/add-to-collection/add-to-collection.component.js +2 -2
- package/esm2015/lib/components/file-manger/components/create-directory/create-directory.component.js +2 -2
- package/esm2015/lib/components/file-manger/components/move/move.component.js +2 -2
- package/esm2015/lib/components/file-manger/file-manager.abstract.js +260 -258
- package/esm2015/lib/components/permissions/permissions/permissions.component.js +100 -57
- package/esm2015/lib/components/permissions/permissions-template/permissions-template.component.js +36 -52
- package/esm2015/lib/shared-services/dialog-mangment.service.js +27 -23
- package/esm2015/lib/shared-services/shared-docs.service.js +22 -27
- package/fesm2015/nuxeo-development-framework.js +487 -460
- package/fesm2015/nuxeo-development-framework.js.map +1 -1
- package/lib/components/comments/components/comment-item/comment-item.component.d.ts +3 -1
- package/lib/components/correspondence-relation/components/correspondence-relation/correspondence-relation.component.d.ts +4 -2
- package/lib/components/correspondence-relation/components/correspondence-relation-list/correspondence-relation-list.component.d.ts +4 -2
- package/lib/components/documents/components/document-list/documents-list.component.d.ts +3 -1
- package/lib/components/file-manger/file-manager.abstract.d.ts +24 -22
- package/lib/components/permissions/permissions/permissions.component.d.ts +3 -1
- package/lib/components/permissions/permissions-template/permissions-template.component.d.ts +3 -3
- package/lib/shared-services/dialog-mangment.service.d.ts +3 -3
- package/lib/shared-services/shared-docs.service.d.ts +4 -2
- package/package.json +2 -2
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { Component, Input } from '@angular/core';
|
|
2
|
-
import { MatDialogConfig } from '@angular/material/dialog';
|
|
3
2
|
import { AddPermissionsDialogComponent } from '../add-permissions-dialog/add-permissions-dialog.component';
|
|
4
3
|
import * as i0 from "@angular/core";
|
|
5
4
|
import * as i1 from "../permission.service";
|
|
@@ -9,14 +8,15 @@ import * as i4 from "../../../core/services/translation/translation.service";
|
|
|
9
8
|
import * as i5 from "../../../core/services/nuxeo/nuxeo.service";
|
|
10
9
|
import * as i6 from "../../../shared-services/user.service";
|
|
11
10
|
import * as i7 from "../../../directive/permissions/evaluators.service";
|
|
12
|
-
import * as i8 from "
|
|
13
|
-
import * as i9 from "
|
|
14
|
-
import * as i10 from "
|
|
15
|
-
import * as i11 from "@angular/material/progress-
|
|
16
|
-
import * as i12 from "@angular/
|
|
17
|
-
import * as i13 from "@
|
|
11
|
+
import * as i8 from "../../../shared/components/nuxeo-dialog/services/nuxeo-dialog.service";
|
|
12
|
+
import * as i9 from "@angular/material/divider";
|
|
13
|
+
import * as i10 from "../permissions-template/permissions-template.component";
|
|
14
|
+
import * as i11 from "@angular/material/progress-bar";
|
|
15
|
+
import * as i12 from "@angular/material/progress-spinner";
|
|
16
|
+
import * as i13 from "@angular/common";
|
|
17
|
+
import * as i14 from "@ngx-translate/core";
|
|
18
18
|
export class PermissionsComponent {
|
|
19
|
-
constructor(permissionService, addPermissionsDialog, tosterService, translateService, nuxeoService, userServ, evaluatorService) {
|
|
19
|
+
constructor(permissionService, addPermissionsDialog, tosterService, translateService, nuxeoService, userServ, evaluatorService, nuxeoDialogService) {
|
|
20
20
|
this.permissionService = permissionService;
|
|
21
21
|
this.addPermissionsDialog = addPermissionsDialog;
|
|
22
22
|
this.tosterService = tosterService;
|
|
@@ -24,6 +24,7 @@ export class PermissionsComponent {
|
|
|
24
24
|
this.nuxeoService = nuxeoService;
|
|
25
25
|
this.userServ = userServ;
|
|
26
26
|
this.evaluatorService = evaluatorService;
|
|
27
|
+
this.nuxeoDialogService = nuxeoDialogService;
|
|
27
28
|
this.sourcePage = '';
|
|
28
29
|
this.subscriptions$ = [];
|
|
29
30
|
this.localPermissions = [];
|
|
@@ -39,17 +40,19 @@ export class PermissionsComponent {
|
|
|
39
40
|
}
|
|
40
41
|
ngOnInit() {
|
|
41
42
|
this.subscriptions$.concat([
|
|
42
|
-
this.permissionService.createAndAddAnother.subscribe(res => {
|
|
43
|
+
this.permissionService.createAndAddAnother.subscribe((res) => {
|
|
43
44
|
this.getPermissions();
|
|
44
45
|
})
|
|
45
46
|
]);
|
|
46
47
|
this.loading = true;
|
|
47
48
|
this.checkIfUserCanDoActionsOnPermissions();
|
|
48
49
|
this.getPermissions();
|
|
49
|
-
|
|
50
|
+
this.inheritedPermissions.length > 0
|
|
51
|
+
? (this.status = 'unblock')
|
|
52
|
+
: (this.status = 'block');
|
|
50
53
|
}
|
|
51
54
|
addPermissionLabel(arr, permissionArr) {
|
|
52
|
-
arr.forEach(element => {
|
|
55
|
+
arr.forEach((element) => {
|
|
53
56
|
if (!this.isItemContainAdministratorGroup(element)) {
|
|
54
57
|
element.permissionLabel = this.translateService.instant(`rights.${element.permission}`);
|
|
55
58
|
permissionArr.push(element);
|
|
@@ -61,11 +64,13 @@ export class PermissionsComponent {
|
|
|
61
64
|
if (element.granted === false) {
|
|
62
65
|
isAdministrator = true;
|
|
63
66
|
}
|
|
64
|
-
else if (element.username &&
|
|
67
|
+
else if (element.username &&
|
|
68
|
+
element.username['entity-type'] === 'group' &&
|
|
69
|
+
element.username.groupname === 'administrators') {
|
|
65
70
|
isAdministrator = true;
|
|
66
71
|
}
|
|
67
72
|
else if (element.username.userGroups) {
|
|
68
|
-
element.username.userGroups.map(group => {
|
|
73
|
+
element.username.userGroups.map((group) => {
|
|
69
74
|
if (group.name === 'administrators') {
|
|
70
75
|
isAdministrator = true;
|
|
71
76
|
}
|
|
@@ -74,16 +79,23 @@ export class PermissionsComponent {
|
|
|
74
79
|
return isAdministrator;
|
|
75
80
|
}
|
|
76
81
|
getPermissions() {
|
|
77
|
-
this.subscriptions$.concat([
|
|
82
|
+
this.subscriptions$.concat([
|
|
83
|
+
this.permissionService
|
|
84
|
+
.getPermissionsForDocument(this.documentId)
|
|
85
|
+
.subscribe((res) => {
|
|
78
86
|
this.permissionsType = res.contextParameters.acls;
|
|
79
|
-
this.userVisiblePermissions =
|
|
87
|
+
this.userVisiblePermissions =
|
|
88
|
+
res.contextParameters.userVisiblePermissions;
|
|
80
89
|
for (let p of this.permissionsType) {
|
|
81
90
|
if (p.name == 'local') {
|
|
82
91
|
this.localPermissions = [];
|
|
83
92
|
this.addPermissionLabel(p.aces, this.localPermissions);
|
|
84
|
-
this.localPermissions = this.localPermissions.map(element => {
|
|
93
|
+
this.localPermissions = this.localPermissions.map((element) => {
|
|
85
94
|
var _a, _b;
|
|
86
|
-
if (element.creator === null ||
|
|
95
|
+
if (element.creator === null ||
|
|
96
|
+
element.creator === 'system' ||
|
|
97
|
+
((_b = (_a = element.creator) === null || _a === void 0 ? void 0 : _a.properties) === null || _b === void 0 ? void 0 : _b.username) !=
|
|
98
|
+
this.nuxeoService.nuxeoClient.user.properties.username) {
|
|
87
99
|
element['currentUserIsPermissionOwner'] = false;
|
|
88
100
|
}
|
|
89
101
|
else {
|
|
@@ -109,62 +121,77 @@ export class PermissionsComponent {
|
|
|
109
121
|
this.addPermissionLabel(p.aces, this.workflowPermissions);
|
|
110
122
|
}
|
|
111
123
|
}
|
|
112
|
-
|
|
124
|
+
this.inheritedPermissions.length == 0
|
|
125
|
+
? (this.status = 'block')
|
|
126
|
+
: (this.status = 'unblock');
|
|
113
127
|
this.loading = false;
|
|
114
|
-
}, err => this.loading = false)
|
|
128
|
+
}, (err) => (this.loading = false))
|
|
129
|
+
]);
|
|
115
130
|
}
|
|
116
131
|
blockPermissionInheritance() {
|
|
117
132
|
this.blockOrUnblock = true;
|
|
118
|
-
this.subscriptions$.concat([
|
|
133
|
+
this.subscriptions$.concat([
|
|
134
|
+
this.permissionService
|
|
135
|
+
.blockPermissionInheritance(this.documentId)
|
|
136
|
+
.subscribe((res) => {
|
|
119
137
|
if (res) {
|
|
120
138
|
this.getPermissions();
|
|
121
|
-
this.tosterService.show('success', 'TOASTER.SUCCESS',
|
|
139
|
+
this.tosterService.show('success', 'TOASTER.SUCCESS', 'TOASTER.PERMISSION_BLOCK_SUCCESS');
|
|
122
140
|
this.blockOrUnblock = false;
|
|
123
|
-
this.status =
|
|
141
|
+
this.status = 'unblock';
|
|
124
142
|
this.inheritedPermissions = [];
|
|
125
143
|
}
|
|
126
|
-
}, err => {
|
|
144
|
+
}, (err) => {
|
|
127
145
|
this.blockOrUnblock = false;
|
|
128
146
|
this.tosterService.show('error', 'TOASTER.ERROR', 'TOASTER.PERMISSION_BLOCK_FAIL');
|
|
129
|
-
})
|
|
147
|
+
})
|
|
148
|
+
]);
|
|
130
149
|
}
|
|
131
150
|
unblockPermissionInheritance() {
|
|
132
151
|
this.blockOrUnblock = true;
|
|
133
|
-
this.subscriptions$.concat([
|
|
152
|
+
this.subscriptions$.concat([
|
|
153
|
+
this.permissionService
|
|
154
|
+
.unblockPermissionInheritance(this.documentId)
|
|
155
|
+
.subscribe((res) => {
|
|
134
156
|
if (res) {
|
|
135
157
|
this.getPermissions();
|
|
136
|
-
this.tosterService.show('success', 'TOASTER.SUCCESS',
|
|
137
|
-
this.status =
|
|
158
|
+
this.tosterService.show('success', 'TOASTER.SUCCESS', 'TOASTER.PERMISSION_UNBLOCK_SUCCESS');
|
|
159
|
+
this.status = 'block';
|
|
138
160
|
this.blockOrUnblock = false;
|
|
139
161
|
}
|
|
140
|
-
}, err => {
|
|
162
|
+
}, (err) => {
|
|
141
163
|
this.blockOrUnblock = false;
|
|
142
164
|
this.tosterService.show('error', 'TOASTER.ERROR', 'TOASTER.PERMISSION_UNBLOCK_FAIL');
|
|
143
|
-
})
|
|
165
|
+
})
|
|
166
|
+
]);
|
|
144
167
|
}
|
|
145
168
|
addNewLocalPermissions() {
|
|
146
169
|
this.permissionService.departmentUsers = [...this.allDepartmentUsers];
|
|
147
|
-
this.localPermissions.forEach(perm => {
|
|
170
|
+
this.localPermissions.forEach((perm) => {
|
|
148
171
|
this.permissionService.departmentUsers.forEach((user, index) => {
|
|
149
|
-
if (perm.username.properties.username === user.properties.username
|
|
150
|
-
|
|
172
|
+
if (perm.username.properties.username === user.properties.username &&
|
|
173
|
+
perm.creator.properties.username ===
|
|
174
|
+
this.nuxeoService.nuxeoClient.user.properties.username) {
|
|
151
175
|
this.permissionService.departmentUsers.splice(index, 1);
|
|
152
176
|
}
|
|
153
177
|
});
|
|
154
178
|
});
|
|
155
|
-
const dialogConfig = new MatDialogConfig();
|
|
156
|
-
dialogConfig.disableClose = false;
|
|
157
|
-
dialogConfig.autoFocus = true;
|
|
158
|
-
dialogConfig.data = {
|
|
159
|
-
id: this.documentId,
|
|
160
|
-
rights: this.userVisiblePermissions
|
|
161
|
-
};
|
|
162
|
-
dialogConfig.width = '35%';
|
|
163
|
-
dialogConfig.height = '70%';
|
|
164
179
|
// befor opening modal we diable clickout side effect to prevent details side menu from closing when clicking in the modal
|
|
165
180
|
this.permissionService.disableClickOutSide = true;
|
|
166
|
-
|
|
167
|
-
|
|
181
|
+
this.nuxeoDialogService
|
|
182
|
+
.open({
|
|
183
|
+
component: AddPermissionsDialogComponent,
|
|
184
|
+
width: '35%',
|
|
185
|
+
height: '70%',
|
|
186
|
+
panelClass: 'watcher-dialog-container',
|
|
187
|
+
data: {
|
|
188
|
+
id: this.documentId,
|
|
189
|
+
rights: this.userVisiblePermissions
|
|
190
|
+
}
|
|
191
|
+
//disableClose: true,
|
|
192
|
+
})
|
|
193
|
+
.afterClosed()
|
|
194
|
+
.subscribe((res) => {
|
|
168
195
|
// return click outside effect to work to close side menu when clicking out side it
|
|
169
196
|
this.permissionService.disableClickOutSide = false;
|
|
170
197
|
if (res) {
|
|
@@ -173,9 +200,15 @@ export class PermissionsComponent {
|
|
|
173
200
|
});
|
|
174
201
|
}
|
|
175
202
|
checkIfUserCanDoActionsOnPermissions() {
|
|
176
|
-
this.evaluatorService
|
|
203
|
+
this.evaluatorService
|
|
204
|
+
.evaluateRule('isManagePermissionEnabled')
|
|
205
|
+
.then((isEnabled) => {
|
|
177
206
|
if (isEnabled) {
|
|
178
|
-
this.evaluatorService
|
|
207
|
+
this.evaluatorService
|
|
208
|
+
.evaluateRule('isDepartmentDocumentController', {
|
|
209
|
+
entity: this.document
|
|
210
|
+
})
|
|
211
|
+
.then((userInControllerGroup) => {
|
|
179
212
|
// let userInControllerGroup = false;
|
|
180
213
|
// this.nuxeoService.nuxeoClient.user.userGroups.forEach(group => {
|
|
181
214
|
// if (group.name === 'dms_document_controller') {
|
|
@@ -184,15 +217,25 @@ export class PermissionsComponent {
|
|
|
184
217
|
// });
|
|
185
218
|
if (userInControllerGroup) {
|
|
186
219
|
let depCode = this.userServ.getUserDepartmentFromPath(this.document.path);
|
|
187
|
-
this.permissionService
|
|
188
|
-
|
|
189
|
-
|
|
220
|
+
this.permissionService
|
|
221
|
+
.getDepMembers(depCode)
|
|
222
|
+
.subscribe((res) => {
|
|
223
|
+
this.permissionService.departmentUsers = res.users.map((e) => {
|
|
224
|
+
e['displayLabel'] =
|
|
225
|
+
e.properties.firstName + ' ' + e.properties.lastName;
|
|
190
226
|
return e;
|
|
191
227
|
});
|
|
192
|
-
this.allDepartmentUsers = [
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
228
|
+
this.allDepartmentUsers = [
|
|
229
|
+
...this.permissionService.departmentUsers
|
|
230
|
+
];
|
|
231
|
+
res.users.forEach((user) => {
|
|
232
|
+
if (user.properties.username ===
|
|
233
|
+
this.nuxeoService.nuxeoClient.user.properties
|
|
234
|
+
.username &&
|
|
235
|
+
((this.document.type === 'DmsFolder' &&
|
|
236
|
+
this.document.path.includes('/default-domain/workspaces/DMS/')) ||
|
|
237
|
+
(this.document.type === 'Folder' &&
|
|
238
|
+
this.document.path.includes('/default-domain/workspaces/DMSWorkspaces/')))) {
|
|
196
239
|
this.allowAdd_Block_DeletePermission = true;
|
|
197
240
|
}
|
|
198
241
|
});
|
|
@@ -211,11 +254,11 @@ export class PermissionsComponent {
|
|
|
211
254
|
ngOnDestroy() {
|
|
212
255
|
// return click outside effect to work to close side menu when clicking out side it
|
|
213
256
|
this.permissionService.disableClickOutSide = false;
|
|
214
|
-
this.subscriptions$.forEach(e => e.unsubscribe());
|
|
257
|
+
this.subscriptions$.forEach((e) => e.unsubscribe());
|
|
215
258
|
}
|
|
216
259
|
}
|
|
217
|
-
PermissionsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PermissionsComponent, deps: [{ token: i1.PermissionService }, { token: i2.MatDialog }, { token: i3.CustomToastrService }, { token: i4.TranslationService }, { token: i5.NuxeoService }, { token: i6.UserService }, { token: i7.EvaluatorsService }], target: i0.ɵɵFactoryTarget.Component });
|
|
218
|
-
PermissionsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: PermissionsComponent, selector: "app-permissions", inputs: { documentId: "documentId", document: "document", allowAddAndBlock: "allowAddAndBlock", sourcePage: "sourcePage" }, ngImport: i0, template: "<div class=\"h-auto mt-3 px-0 pb-4\" *ngIf=\"!loading; else loader\">\r\n <!--LocalPermission List Items-->\r\n <div *ngIf=\"sourcePage != 'myFiles'\">\r\n <div class=\"flex flex-row justify-between\">\r\n <span class=\"font-bold text-gray-500 text-base\">{{\r\n \"permission.local\" | translate\r\n }}</span>\r\n <span *ngIf=\"allowAdd_Block_DeletePermission && !inheritedPermissions.length\">\r\n <button\r\n *ngIf=\"allowAddAndBlock\"\r\n class=\"hover:text-blue-700 text-blue-500 mb-1 text-base\"\r\n (click)=\"addNewLocalPermissions()\"\r\n [disabled]=\"!permissionsType\"\r\n >\r\n {{ \"permission.new\" | translate }}\r\n </button>\r\n </span>\r\n </div>\r\n <mat-divider class=\"mat-divider\"></mat-divider>\r\n <app-permissions-template\r\n [documentId]=\"documentId\"\r\n [userVisiblePermissions]=\"userVisiblePermissions\"\r\n (getPermissions)=\"getPermissions()\"\r\n [allowDeleteAndEdit]=\"allowAdd_Block_DeletePermission\"\r\n [permissionsArray]=\"localPermissions\"\r\n *ngIf=\"localPermissions.length > 0; else nolocalPermissions\"\r\n >\r\n </app-permissions-template>\r\n </div>\r\n <ng-template #nolocalPermissions>\r\n <div class=\"single-permssion p-3 text-center\">\r\n {{ \"permission.noLocal\" | translate }}\r\n </div>\r\n </ng-template>\r\n <!--InheritedPermission List Items-->\r\n <div>\r\n <div class=\"flex flex-row justify-between mt-3\">\r\n <span class=\"font-bold text-gray-500 text-base\">{{\r\n \"permission.inherited\" | translate\r\n }}</span>\r\n <span *ngIf=\"allowAdd_Block_DeletePermission\">\r\n <button\r\n class=\"hover:text-blue-700 text-blue-500 mb-1 text-base\"\r\n *ngIf=\"status != null && allowAddAndBlock\"\r\n >\r\n <span\r\n *ngIf=\"status == 'block'; else unblock\"\r\n (click)=\"unblockPermissionInheritance()\"\r\n >\r\n {{ \"permission.unblock\" | translate }}\r\n </span>\r\n <ng-template #unblock>\r\n <span (click)=\"blockPermissionInheritance()\">\r\n {{ \"permission.block\" | translate }}\r\n </span>\r\n </ng-template>\r\n </button>\r\n </span>\r\n </div>\r\n <mat-divider class=\"mat-divider\" *ngIf=\"!blockOrUnblock\"></mat-divider>\r\n <mat-progress-bar mode=\"indeterminate\" *ngIf=\"blockOrUnblock\"></mat-progress-bar>\r\n <app-permissions-template\r\n *ngIf=\"inheritedPermissions.length > 0; else noinheritedPermissions\"\r\n [documentId]=\"documentId\"\r\n [userVisiblePermissions]=\"userVisiblePermissions\"\r\n [permissionsArray]=\"inheritedPermissions\"\r\n (getPermissions)=\"getPermissions()\"\r\n >\r\n </app-permissions-template>\r\n </div>\r\n <ng-template #noinheritedPermissions>\r\n <div class=\"single-permssion p-3 text-center\">\r\n {{\"permission.noInherited\" | translate }}</div>\r\n </ng-template>\r\n <!--departmentPermissions List Items-->\r\n <div *ngIf=\"departmentPermissions.length > 0\">\r\n <div class=\"flex flex-row justify-between\">\r\n <span class=\"font-bold text-gray-500 text-base\">{{\r\n \"permission.departmentPermissions\" | translate\r\n }}</span>\r\n </div>\r\n <mat-divider class=\"mat-divider\"></mat-divider>\r\n <app-permissions-template\r\n [documentId]=\"documentId\"\r\n [userVisiblePermissions]=\"userVisiblePermissions\"\r\n (getPermissions)=\"getPermissions()\"\r\n [permissionsArray]=\"departmentPermissions\"\r\n >\r\n </app-permissions-template>\r\n </div>\r\n <!--sharePermissions List Items-->\r\n <div *ngIf=\"sharePermissions.length > 0\">\r\n <div class=\"flex flex-row justify-between\">\r\n <span class=\"font-bold text-gray-500 text-base\">{{\r\n \"permission.sharePermissions\" | translate\r\n }}</span>\r\n </div>\r\n <mat-divider class=\"mat-divider\"></mat-divider>\r\n <app-permissions-template\r\n [documentId]=\"documentId\"\r\n [userVisiblePermissions]=\"userVisiblePermissions\"\r\n (getPermissions)=\"getPermissions()\"\r\n [permissionsArray]=\"sharePermissions\"\r\n >\r\n </app-permissions-template>\r\n </div>\r\n <!--workflowPermissions List Items-->\r\n <div *ngIf=\"workflowPermissions.length > 0\">\r\n <div class=\"flex flex-row justify-between\">\r\n <span class=\"font-bold text-gray-500 text-base\">{{\r\n \"permission.workflowPermissions\" | translate\r\n }}</span>\r\n </div>\r\n <mat-divider class=\"mat-divider\"></mat-divider>\r\n <app-permissions-template\r\n [documentId]=\"documentId\"\r\n [userVisiblePermissions]=\"userVisiblePermissions\"\r\n (getPermissions)=\"getPermissions()\"\r\n [permissionsArray]=\"workflowPermissions\"\r\n >\r\n </app-permissions-template>\r\n </div>\r\n</div>\r\n\r\n<ng-template #loader>\r\n <div class=\"flex items-center justify-center w-full h-full\">\r\n <mat-spinner [value]=\"90\" [strokeWidth]=\"6\" overlay=\"true\" [diameter]=\"75\"></mat-spinner>\r\n </div>\r\n</ng-template>\r\n", styles: [""], components: [{ type:
|
|
260
|
+
PermissionsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PermissionsComponent, deps: [{ token: i1.PermissionService }, { token: i2.MatDialog }, { token: i3.CustomToastrService }, { token: i4.TranslationService }, { token: i5.NuxeoService }, { token: i6.UserService }, { token: i7.EvaluatorsService }, { token: i8.NuxeoDialogService }], target: i0.ɵɵFactoryTarget.Component });
|
|
261
|
+
PermissionsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: PermissionsComponent, selector: "app-permissions", inputs: { documentId: "documentId", document: "document", allowAddAndBlock: "allowAddAndBlock", sourcePage: "sourcePage" }, ngImport: i0, template: "<div class=\"h-auto mt-3 px-0 pb-4\" *ngIf=\"!loading; else loader\">\r\n <!--LocalPermission List Items-->\r\n <div *ngIf=\"sourcePage != 'myFiles'\">\r\n <div class=\"flex flex-row justify-between\">\r\n <span class=\"font-bold text-gray-500 text-base\">{{\r\n \"permission.local\" | translate\r\n }}</span>\r\n <span *ngIf=\"allowAdd_Block_DeletePermission && !inheritedPermissions.length\">\r\n <button\r\n *ngIf=\"allowAddAndBlock\"\r\n class=\"hover:text-blue-700 text-blue-500 mb-1 text-base\"\r\n (click)=\"addNewLocalPermissions()\"\r\n [disabled]=\"!permissionsType\"\r\n >\r\n {{ \"permission.new\" | translate }}\r\n </button>\r\n </span>\r\n </div>\r\n <mat-divider class=\"mat-divider\"></mat-divider>\r\n <app-permissions-template\r\n [documentId]=\"documentId\"\r\n [userVisiblePermissions]=\"userVisiblePermissions\"\r\n (getPermissions)=\"getPermissions()\"\r\n [allowDeleteAndEdit]=\"allowAdd_Block_DeletePermission\"\r\n [permissionsArray]=\"localPermissions\"\r\n *ngIf=\"localPermissions.length > 0; else nolocalPermissions\"\r\n >\r\n </app-permissions-template>\r\n </div>\r\n <ng-template #nolocalPermissions>\r\n <div class=\"single-permssion p-3 text-center\">\r\n {{ \"permission.noLocal\" | translate }}\r\n </div>\r\n </ng-template>\r\n <!--InheritedPermission List Items-->\r\n <div>\r\n <div class=\"flex flex-row justify-between mt-3\">\r\n <span class=\"font-bold text-gray-500 text-base\">{{\r\n \"permission.inherited\" | translate\r\n }}</span>\r\n <span *ngIf=\"allowAdd_Block_DeletePermission\">\r\n <button\r\n class=\"hover:text-blue-700 text-blue-500 mb-1 text-base\"\r\n *ngIf=\"status != null && allowAddAndBlock\"\r\n >\r\n <span\r\n *ngIf=\"status == 'block'; else unblock\"\r\n (click)=\"unblockPermissionInheritance()\"\r\n >\r\n {{ \"permission.unblock\" | translate }}\r\n </span>\r\n <ng-template #unblock>\r\n <span (click)=\"blockPermissionInheritance()\">\r\n {{ \"permission.block\" | translate }}\r\n </span>\r\n </ng-template>\r\n </button>\r\n </span>\r\n </div>\r\n <mat-divider class=\"mat-divider\" *ngIf=\"!blockOrUnblock\"></mat-divider>\r\n <mat-progress-bar mode=\"indeterminate\" *ngIf=\"blockOrUnblock\"></mat-progress-bar>\r\n <app-permissions-template\r\n *ngIf=\"inheritedPermissions.length > 0; else noinheritedPermissions\"\r\n [documentId]=\"documentId\"\r\n [userVisiblePermissions]=\"userVisiblePermissions\"\r\n [permissionsArray]=\"inheritedPermissions\"\r\n (getPermissions)=\"getPermissions()\"\r\n >\r\n </app-permissions-template>\r\n </div>\r\n <ng-template #noinheritedPermissions>\r\n <div class=\"single-permssion p-3 text-center\">\r\n {{\"permission.noInherited\" | translate }}</div>\r\n </ng-template>\r\n <!--departmentPermissions List Items-->\r\n <div *ngIf=\"departmentPermissions.length > 0\">\r\n <div class=\"flex flex-row justify-between\">\r\n <span class=\"font-bold text-gray-500 text-base\">{{\r\n \"permission.departmentPermissions\" | translate\r\n }}</span>\r\n </div>\r\n <mat-divider class=\"mat-divider\"></mat-divider>\r\n <app-permissions-template\r\n [documentId]=\"documentId\"\r\n [userVisiblePermissions]=\"userVisiblePermissions\"\r\n (getPermissions)=\"getPermissions()\"\r\n [permissionsArray]=\"departmentPermissions\"\r\n >\r\n </app-permissions-template>\r\n </div>\r\n <!--sharePermissions List Items-->\r\n <div *ngIf=\"sharePermissions.length > 0\">\r\n <div class=\"flex flex-row justify-between\">\r\n <span class=\"font-bold text-gray-500 text-base\">{{\r\n \"permission.sharePermissions\" | translate\r\n }}</span>\r\n </div>\r\n <mat-divider class=\"mat-divider\"></mat-divider>\r\n <app-permissions-template\r\n [documentId]=\"documentId\"\r\n [userVisiblePermissions]=\"userVisiblePermissions\"\r\n (getPermissions)=\"getPermissions()\"\r\n [permissionsArray]=\"sharePermissions\"\r\n >\r\n </app-permissions-template>\r\n </div>\r\n <!--workflowPermissions List Items-->\r\n <div *ngIf=\"workflowPermissions.length > 0\">\r\n <div class=\"flex flex-row justify-between\">\r\n <span class=\"font-bold text-gray-500 text-base\">{{\r\n \"permission.workflowPermissions\" | translate\r\n }}</span>\r\n </div>\r\n <mat-divider class=\"mat-divider\"></mat-divider>\r\n <app-permissions-template\r\n [documentId]=\"documentId\"\r\n [userVisiblePermissions]=\"userVisiblePermissions\"\r\n (getPermissions)=\"getPermissions()\"\r\n [permissionsArray]=\"workflowPermissions\"\r\n >\r\n </app-permissions-template>\r\n </div>\r\n</div>\r\n\r\n<ng-template #loader>\r\n <div class=\"flex items-center justify-center w-full h-full\">\r\n <mat-spinner [value]=\"90\" [strokeWidth]=\"6\" overlay=\"true\" [diameter]=\"75\"></mat-spinner>\r\n </div>\r\n</ng-template>\r\n", styles: [""], components: [{ type: i9.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { type: i10.PermissionsTemplateComponent, selector: "app-permissions-template", inputs: ["allowDeleteAndEdit", "documentId", "userVisiblePermissions", "permissionsArray"], outputs: ["getPermissions"] }, { type: i11.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "mode", "value", "bufferValue"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { type: i12.MatSpinner, selector: "mat-spinner", inputs: ["color"] }], directives: [{ type: i13.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "translate": i14.TranslatePipe } });
|
|
219
262
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PermissionsComponent, decorators: [{
|
|
220
263
|
type: Component,
|
|
221
264
|
args: [{
|
|
@@ -223,7 +266,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
|
|
|
223
266
|
templateUrl: './permissions.component.html',
|
|
224
267
|
styleUrls: ['./permissions.component.scss']
|
|
225
268
|
}]
|
|
226
|
-
}], ctorParameters: function () { return [{ type: i1.PermissionService }, { type: i2.MatDialog }, { type: i3.CustomToastrService }, { type: i4.TranslationService }, { type: i5.NuxeoService }, { type: i6.UserService }, { type: i7.EvaluatorsService }]; }, propDecorators: { documentId: [{
|
|
269
|
+
}], ctorParameters: function () { return [{ type: i1.PermissionService }, { type: i2.MatDialog }, { type: i3.CustomToastrService }, { type: i4.TranslationService }, { type: i5.NuxeoService }, { type: i6.UserService }, { type: i7.EvaluatorsService }, { type: i8.NuxeoDialogService }]; }, propDecorators: { documentId: [{
|
|
227
270
|
type: Input
|
|
228
271
|
}], document: [{
|
|
229
272
|
type: Input
|
|
@@ -232,4 +275,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
|
|
|
232
275
|
}], sourcePage: [{
|
|
233
276
|
type: Input
|
|
234
277
|
}] } });
|
|
235
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbnMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnV4ZW8tZGV2ZWxvcG1lbnQtZnJhbWV3b3JrL3NyYy9saWIvY29tcG9uZW50cy9wZXJtaXNzaW9ucy9wZXJtaXNzaW9ucy9wZXJtaXNzaW9ucy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9udXhlby1kZXZlbG9wbWVudC1mcmFtZXdvcmsvc3JjL2xpYi9jb21wb25lbnRzL3Blcm1pc3Npb25zL3Blcm1pc3Npb25zL3Blcm1pc3Npb25zLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUNwRSxPQUFPLEVBQWEsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFJdEUsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sNERBQTRELENBQUM7Ozs7Ozs7Ozs7Ozs7OztBQVczRyxNQUFNLE9BQU8sb0JBQW9CO0lBc0IvQixZQUFvQixpQkFBb0MsRUFDOUMsb0JBQStCLEVBQy9CLGFBQWtDLEVBQ2xDLGdCQUFvQyxFQUNwQyxZQUEwQixFQUMxQixRQUFxQixFQUNyQixnQkFBb0M7UUFOMUIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUM5Qyx5QkFBb0IsR0FBcEIsb0JBQW9CLENBQVc7UUFDL0Isa0JBQWEsR0FBYixhQUFhLENBQXFCO1FBQ2xDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBb0I7UUFDcEMsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsYUFBUSxHQUFSLFFBQVEsQ0FBYTtRQUNyQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQW9CO1FBbkI5QyxlQUFVLEdBQUcsRUFBRSxDQUFBO1FBQ2YsbUJBQWMsR0FBbUIsRUFBRSxDQUFDO1FBRXBDLHFCQUFn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LENBQUM7UUFDbkQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQTtJQUNuRCxDQUFDOztrSEFwTlUsb0JBQW9CO3NHQUFwQixvQkFBb0IsbUxDaEJqQyx1MExBaUlBOzRGRGpIYSxvQkFBb0I7a0JBTGhDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGlCQUFpQjtvQkFDM0IsV0FBVyxFQUFFLDhCQUE4QjtvQkFDM0MsU0FBUyxFQUFFLENBQUMsOEJBQThCLENBQUM7aUJBQzVDO3dSQUlDLFVBQVU7c0JBRFQsS0FBSztnQkFHTixRQUFRO3NCQURQLEtBQUs7Z0JBR04sZ0JBQWdCO3NCQURmLEtBQUs7Z0JBR04sVUFBVTtzQkFEVCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0RGlhbG9nLCBNYXREaWFsb2dDb25maWcgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgUGVybWlzc2lvblNlcnZpY2UgfSBmcm9tICcuLi9wZXJtaXNzaW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBVc2VyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC1zZXJ2aWNlcy91c2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBZGRQZXJtaXNzaW9uc0RpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4uL2FkZC1wZXJtaXNzaW9ucy1kaWFsb2cvYWRkLXBlcm1pc3Npb25zLWRpYWxvZy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBFdmFsdWF0b3JzU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZS9wZXJtaXNzaW9ucy9ldmFsdWF0b3JzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDdXN0b21Ub2FzdHJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY3VzdG9tLXRvYXN0ci9zZXJ2aWNlcy9jdXN0b20tdG9hc3RyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2VzL3RyYW5zbGF0aW9uL3RyYW5zbGF0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBOdXhlb1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2VzL251eGVvL251eGVvLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtcGVybWlzc2lvbnMnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9wZXJtaXNzaW9ucy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vcGVybWlzc2lvbnMuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgUGVybWlzc2lvbnNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgcGVybWlzc2lvbnNUeXBlOiBhbnk7XHJcbiAgQElucHV0KClcclxuICBkb2N1bWVudElkO1xyXG4gIEBJbnB1dCgpXHJcbiAgZG9jdW1lbnQ7XHJcbiAgQElucHV0KClcclxuICBhbGxvd0FkZEFuZEJsb2NrXHJcbiAgQElucHV0KClcclxuICBzb3VyY2VQYWdlID0gJydcclxuICBzdWJzY3JpcHRpb25zJDogU3Vic2NyaXB0aW9uW10gPSBbXTtcclxuICB1c2VyVmlzaWJsZVBlcm1pc3Npb25zOiBhbnk7XHJcbiAgbG9jYWxQZXJtaXNzaW9ucyA9IFtdO1xyXG4gIGluaGVyaXRlZFBlcm1pc3Npb25zID0gW107XHJcbiAgZGVwYXJ0bWVudFBlcm1pc3Npb25zID0gW107XHJcbiAgc2hhcmVQZXJtaXNzaW9ucyA9IFtdO1xyXG4gIHdvcmtmbG93UGVybWlzc2lvbnMgPSBbXTtcclxuICBzdGF0dXM9bnVsbDsvL3RvIGtub3cgaW5oZXJpdGVkIFBlcm1pc3Npb25zIGlmIGJsb2NrIG9yIG5vdFxyXG4gIGFsbG93QWRkX0Jsb2NrX0RlbGV0ZVBlcm1pc3Npb24gPWZhbHNlO1xyXG4gIGJsb2NrT3JVbmJsb2NrID0gZmFsc2U7XHJcbiAgbG9hZGluZyA9IGZhbHNlO1xyXG4gIGFsbERlcGFydG1lbnRVc2VycyA9IFtdO1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcGVybWlzc2lvblNlcnZpY2U6IFBlcm1pc3Npb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhZGRQZXJtaXNzaW9uc0RpYWxvZzogTWF0RGlhbG9nLFxyXG4gICAgcHJpdmF0ZSB0b3N0ZXJTZXJ2aWNlOiBDdXN0b21Ub2FzdHJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG51eGVvU2VydmljZTogTnV4ZW9TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB1c2VyU2VydjogVXNlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGV2YWx1YXRvclNlcnZpY2UgOiBFdmFsdWF0b3JzU2VydmljZSkge1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMkLmNvbmNhdChbXHJcbiAgICAgIHRoaXMucGVybWlzc2lvblNlcnZpY2UuY3JlYXRlQW5kQWRkQW5vdGhlci5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgICB0aGlzLmdldFBlcm1pc3Npb25zKCk7XHJcbiAgICAgIH0pXHJcbiAgICBdKTtcclxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLmNoZWNrSWZVc2VyQ2FuRG9BY3Rpb25zT25QZXJtaXNzaW9ucygpO1xyXG4gICAgdGhpcy5nZXRQZXJtaXNzaW9ucygpO1xyXG4gICAgKHRoaXMuaW5oZXJpdGVkUGVybWlzc2lvbnMubGVuZ3RoID4gMCkgPyB0aGlzLnN0YXR1cyA9ICd1bmJsb2NrJyA6IHRoaXMuc3RhdHVzID0gJ2Jsb2NrJztcclxuICB9XHJcblxyXG4gIGFkZFBlcm1pc3Npb25MYWJlbChhcnIscGVybWlzc2lvbkFycikge1xyXG4gICAgYXJyLmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgIGlmKCF0aGlzLmlzSXRlbUNvbnRhaW5BZG1pbmlzdHJhdG9yR3JvdXAoZWxlbWVudCkpe1xyXG4gICAgICAgIGVsZW1lbnQucGVybWlzc2lvbkxhYmVsID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoYHJpZ2h0cy4ke2VsZW1lbnQucGVybWlzc2lvbn1gKVxyXG4gICAgICAgIHBlcm1pc3Npb25BcnIucHVzaChlbGVtZW50KVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGlzSXRlbUNvbnRhaW5BZG1pbmlzdHJhdG9yR3JvdXAoZWxlbWVudCl7XHJcbiAgICBsZXQgaXNBZG1pbmlzdHJhdG9yID0gZmFsc2U7XHJcbiAgICBpZihlbGVtZW50LmdyYW50ZWQgPT09IGZhbHNlKXtcclxuICAgICAgaXNBZG1pbmlzdHJhdG9yID0gdHJ1ZTtcclxuICAgIH1lbHNlIGlmIChlbGVtZW50LnVzZXJuYW1lICYmIGVsZW1lbnQudXNlcm5hbWVbJ2VudGl0eS10eXBlJ10gPT09ICdncm91cCcgJiYgZWxlbWVudC51c2VybmFtZS5ncm91cG5hbWUgPT09ICdhZG1pbmlzdHJhdG9ycycpe1xyXG4gICAgICBpc0FkbWluaXN0cmF0b3IgPSB0cnVlO1xyXG4gICAgfSBlbHNlIGlmKGVsZW1lbnQudXNlcm5hbWUudXNlckdyb3Vwcyl7XHJcbiAgICAgICAgZWxlbWVudC51c2VybmFtZS51c2VyR3JvdXBzLm1hcChncm91cCA9PiB7XHJcbiAgICAgICAgICBpZihncm91cC5uYW1lID09PSAnYWRtaW5pc3RyYXRvcnMnKXtcclxuICAgICAgICAgICAgaXNBZG1pbmlzdHJhdG9yID0gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGlzQWRtaW5pc3RyYXRvcjtcclxuICB9XHJcblxyXG4gIGdldFBlcm1pc3Npb25zKCkge1xyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zJC5jb25jYXQoW3RoaXMucGVybWlzc2lvblNlcnZpY2UuZ2V0UGVybWlzc2lvbnNGb3JEb2N1bWVudCh0aGlzLmRvY3VtZW50SWQpLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICB0aGlzLnBlcm1pc3Npb25zVHlwZSA9IHJlcy5jb250ZXh0UGFyYW1ldGVycy5hY2xzO1xyXG4gICAgICB0aGlzLnVzZXJWaXNpYmxlUGVybWlzc2lvbnMgPSByZXMuY29udGV4dFBhcmFtZXRlcnMudXNlclZpc2libGVQZXJtaXNzaW9ucztcclxuICAgICAgZm9yIChsZXQgcCBvZiB0aGlzLnBlcm1pc3Npb25zVHlwZSkge1xyXG4gICAgICAgIGlmIChwLm5hbWUgPT0gJ2xvY2FsJykge1xyXG4gICAgICAgICAgdGhpcy5sb2NhbFBlcm1pc3Npb25zID0gW107XHJcbiAgICAgICAgICB0aGlzLmFkZFBlcm1pc3Npb25MYWJlbChwLmFjZXMsdGhpcy5sb2NhbFBlcm1pc3Npb25zKTtcclxuICAgICAgICAgIHRoaXMubG9jYWxQZXJtaXNzaW9ucyA9IHRoaXMubG9jYWxQZXJtaXNzaW9ucy5tYXAoZWxlbWVudCA9PiB7XHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50LmNyZWF0b3IgPT09IG51bGwgfHwgZWxlbWVudC5jcmVhdG9yID09PSAnc3lzdGVtJyB8fCBlbGVtZW50LmNyZWF0b3I/LnByb3BlcnRpZXM/LnVzZXJuYW1lICE9IHRoaXMubnV4ZW9TZXJ2aWNlLm51eGVvQ2xpZW50LnVzZXIucHJvcGVydGllcy51c2VybmFtZSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIGVsZW1lbnRbJ2N1cnJlbnRVc2VySXNQZXJtaXNzaW9uT3duZXInXSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGVsZW1lbnRbJ2N1cnJlbnRVc2VySXNQZXJtaXNzaW9uT3duZXInXSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAocC5uYW1lID09ICdpbmhlcml0ZWQnKSB7XHJcbiAgICAgICAgICB0aGlzLmluaGVyaXRlZFBlcm1pc3Npb25zID0gW107XHJcbiAgICAgICAgICB0aGlzLmFkZFBlcm1pc3Npb25MYWJlbChwLmFjZXMsdGhpcy5pbmhlcml0ZWRQZXJtaXNzaW9ucylcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAocC5uYW1lLmluY2x1ZGVzKCdkZXB0U3BhY2UnKSkge1xyXG4gICAgICAgICAgdGhpcy5kZXBhcnRtZW50UGVybWlzc2lvbnMgPSBbXTtcclxuICAgICAgICAgIHRoaXMuYWRkUGVybWlzc2lvbkxhYmVsKHAuYWNlcyx0aGlzLmRlcGFydG1lbnRQZXJtaXNzaW9ucylcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAocC5uYW1lLmluY2x1ZGVzKCdzaGFyZScpKSB7XHJcbiAgICAgICAgICB0aGlzLnNoYXJlUGVybWlzc2lvbnMgPSBbXTtcclxuICAgICAgICAgIHRoaXMuYWRkUGVybWlzc2lvbkxhYmVsKHAuYWNlcyx0aGlzLnNoYXJlUGVybWlzc2lvbnMpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHAubmFtZS5pbmNsdWRlcygncm91dGluZycpKSB7XHJcbiAgICAgICAgICB0aGlzLndvcmtmbG93UGVybWlzc2lvbnMgPSBbXTtcclxuICAgICAgICAgIHRoaXMuYWRkUGVybWlzc2lvbkxhYmVsKHAuYWNlcyx0aGlzLndvcmtmbG93UGVybWlzc2lvbnMpXHJcbiAgICAgICAgfSAgICBcclxuICAgICAgfVxyXG4gICAgICAodGhpcy5pbmhlcml0ZWRQZXJtaXNzaW9ucy5sZW5ndGggPT0gMCkgPyB0aGlzLnN0YXR1cyA9ICdibG9jaycgOiB0aGlzLnN0YXR1cyA9ICd1bmJsb2NrJzsgIFxyXG4gICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgIH0sZXJyID0+IHRoaXMubG9hZGluZyA9IGZhbHNlXHJcbiAgICApXSk7XHJcbiAgICBcclxuICB9XHJcblxyXG4gIGJsb2NrUGVybWlzc2lvbkluaGVyaXRhbmNlKCkge1xyXG4gICAgdGhpcy5ibG9ja09yVW5ibG9jayA9IHRydWU7XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMkLmNvbmNhdChbdGhpcy5wZXJtaXNzaW9uU2VydmljZS5ibG9ja1Blcm1pc3Npb25Jbmhlcml0YW5jZSh0aGlzLmRvY3VtZW50SWQpLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICBpZiAocmVzKSB7XHJcbiAgICAgICAgdGhpcy5nZXRQZXJtaXNzaW9ucygpO1xyXG4gICAgICAgIHRoaXMudG9zdGVyU2VydmljZS5zaG93KCdzdWNjZXNzJywgJ1RPQVNURVIuU1VDQ0VTUycsIFwiVE9BU1RFUi5QRVJNSVNTSU9OX0JMT0NLX1NVQ0NFU1NcIik7XHJcbiAgICAgICAgdGhpcy5ibG9ja09yVW5ibG9jayA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc3RhdHVzID0gXCJ1bmJsb2NrXCI7XHJcbiAgICAgICAgdGhpcy5pbmhlcml0ZWRQZXJtaXNzaW9ucyA9IFtdO1xyXG4gICAgICB9XHJcbiAgICB9LCBlcnIgPT4ge1xyXG4gICAgICB0aGlzLmJsb2NrT3JVbmJsb2NrID0gZmFsc2U7XHJcbiAgICAgIHRoaXMudG9zdGVyU2VydmljZS5zaG93KCdlcnJvcicsICdUT0FTVEVSLkVSUk9SJywgJ1RPQVNURVIuUEVSTUlTU0lPTl9CTE9DS19GQUlMJyk7XHJcbiAgICB9XHJcbiAgICApXSlcclxuICB9XHJcblxyXG4gIHVuYmxvY2tQZXJtaXNzaW9uSW5oZXJpdGFuY2UoKSB7XHJcbiAgICB0aGlzLmJsb2NrT3JVbmJsb2NrID0gdHJ1ZTtcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucyQuY29uY2F0KFt0aGlzLnBlcm1pc3Npb25TZXJ2aWNlLnVuYmxvY2tQZXJtaXNzaW9uSW5oZXJpdGFuY2UodGhpcy5kb2N1bWVudElkKS5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgaWYgKHJlcykgeyAgIFxyXG4gICAgICAgIHRoaXMuZ2V0UGVybWlzc2lvbnMoKTtcclxuICAgICAgICB0aGlzLnRvc3RlclNlcnZpY2Uuc2hvdygnc3VjY2VzcycsICdUT0FTVEVSLlNVQ0NFU1MnLCBcIlRPQVNURVIuUEVSTUlTU0lPTl9VTkJMT0NLX1NVQ0NFU1NcIik7XHJcbiAgICAgICAgdGhpcy5zdGF0dXMgPSBcImJsb2NrXCI7XHJcbiAgICAgICAgdGhpcy5ibG9ja09yVW5ibG9jayA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9LCBlcnIgPT4ge1xyXG4gICAgICB0aGlzLmJsb2NrT3JVbmJsb2NrID0gZmFsc2U7XHJcbiAgICAgIHRoaXMudG9zdGVyU2VydmljZS5zaG93KCdlcnJvcicsICdUT0FTVEVSLkVSUk9SJywgJ1RPQVNURVIuUEVSTUlTU0lPTl9VTkJMT0NLX0ZBSUwnKTtcclxuICAgIH0pXSlcclxuICB9XHJcblxyXG4gIGFkZE5ld0xvY2FsUGVybWlzc2lvbnMoKSB7XHJcbiAgICB0aGlzLnBlcm1pc3Npb25TZXJ2aWNlLmRlcGFydG1lbnRVc2VycyA9IFsuLi50aGlzLmFsbERlcGFydG1lbnRVc2Vyc107XHJcbiAgICB0aGlzLmxvY2FsUGVybWlzc2lvbnMuZm9yRWFjaChwZXJtID0+IHtcclxuICAgICAgdGhpcy5wZXJtaXNzaW9uU2VydmljZS5kZXBhcnRtZW50VXNlcnMuZm9yRWFjaCgodXNlciwgaW5kZXgpID0+IHtcclxuICAgICAgICBpZiAocGVybS51c2VybmFtZS5wcm9wZXJ0aWVzLnVzZXJuYW1lID09PSB1c2VyLnByb3BlcnRpZXMudXNlcm5hbWVcclxuICAgICAgICAgICYmIHBlcm0uY3JlYXRvci5wcm9wZXJ0aWVzLnVzZXJuYW1lID09PSB0aGlzLm51eGVvU2VydmljZS5udXhlb0NsaWVudC51c2VyLnByb3BlcnRpZXMudXNlcm5hbWUpIHtcclxuICAgICAgICAgIHRoaXMucGVybWlzc2lvblNlcnZpY2UuZGVwYXJ0bWVudFVzZXJzLnNwbGljZShpbmRleCwgMSlcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgICBjb25zdCBkaWFsb2dDb25maWcgPSBuZXcgTWF0RGlhbG9nQ29uZmlnKCk7XHJcbiAgICBkaWFsb2dDb25maWcuZGlzYWJsZUNsb3NlID0gZmFsc2U7XHJcbiAgICBkaWFsb2dDb25maWcuYXV0b0ZvY3VzID0gdHJ1ZTtcclxuICAgIGRpYWxvZ0NvbmZpZy5kYXRhID0ge1xyXG4gICAgICBpZDogdGhpcy5kb2N1bWVudElkLFxyXG4gICAgICByaWdodHM6IHRoaXMudXNlclZpc2libGVQZXJtaXNzaW9uc1xyXG4gICAgfTtcclxuICAgIGRpYWxvZ0NvbmZpZy53aWR0aCA9ICczNSUnO1xyXG4gICAgZGlhbG9nQ29uZmlnLmhlaWdodCA9ICc3MCUnO1xyXG4gICAgLy8gYmVmb3Igb3BlbmluZyBtb2RhbCB3ZSBkaWFibGUgY2xpY2tvdXQgc2lkZSBlZmZlY3QgdG8gcHJldmVudCBkZXRhaWxzIHNpZGUgbWVudSBmcm9tIGNsb3Npbmcgd2hlbiBjbGlja2luZyBpbiB0aGUgbW9kYWxcclxuICAgIHRoaXMucGVybWlzc2lvblNlcnZpY2UuZGlzYWJsZUNsaWNrT3V0U2lkZSA9IHRydWU7XHJcbiAgICBsZXQgZGlhbG9mUmVmID0gdGhpcy5hZGRQZXJtaXNzaW9uc0RpYWxvZy5vcGVuKFxyXG4gICAgICBBZGRQZXJtaXNzaW9uc0RpYWxvZ0NvbXBvbmVudCwgXHJcbiAgICAgIGRpYWxvZ0NvbmZpZyk7XHJcbiAgICBkaWFsb2ZSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgLy8gcmV0dXJuIGNsaWNrIG91dHNpZGUgZWZmZWN0IHRvIHdvcmsgdG8gY2xvc2Ugc2lkZSBtZW51IHdoZW4gY2xpY2tpbmcgb3V0IHNpZGUgaXRcclxuICAgICAgdGhpcy5wZXJtaXNzaW9uU2VydmljZS5kaXNhYmxlQ2xpY2tPdXRTaWRlID0gZmFsc2U7XHJcbiAgICAgIGlmKHJlcykge1xyXG4gICAgICAgIHRoaXMuZ2V0UGVybWlzc2lvbnMoKVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuICBjaGVja0lmVXNlckNhbkRvQWN0aW9uc09uUGVybWlzc2lvbnMoKSB7XHJcbiAgICB0aGlzLmV2YWx1YXRvclNlcnZpY2UuZXZhbHVhdGVSdWxlKCdpc01hbmFnZVBlcm1pc3Npb25FbmFibGVkJykudGhlbihpc0VuYWJsZWQgPT4ge1xyXG4gICAgICBpZiAoaXNFbmFibGVkKSB7XHJcbiAgICAgICB0aGlzLmV2YWx1YXRvclNlcnZpY2UuZXZhbHVhdGVSdWxlKCdpc0RlcGFydG1lbnREb2N1bWVudENvbnRyb2xsZXInICwge2VudGl0eSA6IHRoaXMuZG9jdW1lbnR9KS50aGVuKHVzZXJJbkNvbnRyb2xsZXJHcm91cCA9PiB7XHJcbiAgICAgICAgLy8gbGV0IHVzZXJJbkNvbnRyb2xsZXJHcm91cCA9IGZhbHNlO1xyXG4gICAgICAgIC8vIHRoaXMubnV4ZW9TZXJ2aWNlLm51eGVvQ2xpZW50LnVzZXIudXNlckdyb3Vwcy5mb3JFYWNoKGdyb3VwID0+IHtcclxuICAgICAgICAvLyAgIGlmIChncm91cC5uYW1lID09PSAnZG1zX2RvY3VtZW50X2NvbnRyb2xsZXInKSB7XHJcbiAgICAgICAgLy8gICAgIHVzZXJJbkNvbnRyb2xsZXJHcm91cCA9IHRydWU7XHJcbiAgICAgICAgLy8gICB9XHJcbiAgICAgICAgLy8gfSk7XHJcbiAgICAgICAgaWYgKHVzZXJJbkNvbnRyb2xsZXJHcm91cCkge1xyXG4gICAgICAgICAgbGV0IGRlcENvZGUgPSB0aGlzLnVzZXJTZXJ2LmdldFVzZXJEZXBhcnRtZW50RnJvbVBhdGgodGhpcy5kb2N1bWVudC5wYXRoKTtcclxuICAgICAgICAgIHRoaXMucGVybWlzc2lvblNlcnZpY2UuZ2V0RGVwTWVtYmVycyhkZXBDb2RlKS5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9uU2VydmljZS5kZXBhcnRtZW50VXNlcnMgPSByZXMudXNlcnMubWFwKGUgPT4ge1xyXG4gICAgICAgICAgICAgIGVbJ2Rpc3BsYXlMYWJlbCddID0gZS5wcm9wZXJ0aWVzLmZpcnN0TmFtZSArICcgJyArIGUucHJvcGVydGllcy5sYXN0TmFtZTtcclxuICAgICAgICAgICAgICByZXR1cm4gZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMuYWxsRGVwYXJ0bWVudFVzZXJzID0gWy4uLnRoaXMucGVybWlzc2lvblNlcnZpY2UuZGVwYXJ0bWVudFVzZXJzXTtcclxuICAgICAgICAgICAgcmVzLnVzZXJzLmZvckVhY2godXNlciA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKHVzZXIucHJvcGVydGllcy51c2VybmFtZSA9PT0gdGhpcy5udXhlb1NlcnZpY2UubnV4ZW9DbGllbnQudXNlci5wcm9wZXJ0aWVzLnVzZXJuYW1lXHJcbiAgICAgICAgICAgICAgICAmJiAoKHRoaXMuZG9jdW1lbnQudHlwZSA9PT0gJ0Rtc0ZvbGRlcicgJiYgdGhpcy5kb2N1bWVudC5wYXRoLmluY2x1ZGVzKCcvZGVmYXVsdC1kb21haW4vd29ya3NwYWNlcy9ETVMvJykpIHx8ICh0aGlzLmRvY3VtZW50LnR5cGUgPT09ICdGb2xkZXInICYmIHRoaXMuZG9jdW1lbnQucGF0aC5pbmNsdWRlcygnL2RlZmF1bHQtZG9tYWluL3dvcmtzcGFjZXMvRE1TV29ya3NwYWNlcy8nKSkpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFsbG93QWRkX0Jsb2NrX0RlbGV0ZVBlcm1pc3Npb24gPSB0cnVlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmFsbG93QWRkX0Jsb2NrX0RlbGV0ZVBlcm1pc3Npb24gPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICB9KVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuYWxsb3dBZGRfQmxvY2tfRGVsZXRlUGVybWlzc2lvbiA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICAvLyByZXR1cm4gY2xpY2sgb3V0c2lkZSBlZmZlY3QgdG8gd29yayB0byBjbG9zZSBzaWRlIG1lbnUgd2hlbiBjbGlja2luZyBvdXQgc2lkZSBpdFxyXG4gICAgdGhpcy5wZXJtaXNzaW9uU2VydmljZS5kaXNhYmxlQ2xpY2tPdXRTaWRlID0gZmFsc2U7XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMkLmZvckVhY2goZSA9PiBlLnVuc3Vic2NyaWJlKCkpXHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJoLWF1dG8gbXQtMyBweC0wIHBiLTRcIiAqbmdJZj1cIiFsb2FkaW5nOyBlbHNlIGxvYWRlclwiPlxyXG4gICAgPCEtLUxvY2FsUGVybWlzc2lvbiBMaXN0IEl0ZW1zLS0+XHJcbiAgICA8ZGl2ICpuZ0lmPVwic291cmNlUGFnZSAhPSAnbXlGaWxlcydcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWJldHdlZW5cIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb250LWJvbGQgdGV4dC1ncmF5LTUwMCB0ZXh0LWJhc2VcIj57e1xyXG4gICAgICAgICAgICAgICAgXCJwZXJtaXNzaW9uLmxvY2FsXCIgfCB0cmFuc2xhdGVcclxuICAgICAgICAgICAgfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiYWxsb3dBZGRfQmxvY2tfRGVsZXRlUGVybWlzc2lvbiAmJiAhaW5oZXJpdGVkUGVybWlzc2lvbnMubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJhbGxvd0FkZEFuZEJsb2NrXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImhvdmVyOnRleHQtYmx1ZS03MDAgdGV4dC1ibHVlLTUwMCBtYi0xIHRleHQtYmFzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFkZE5ld0xvY2FsUGVybWlzc2lvbnMoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFwZXJtaXNzaW9uc1R5cGVcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IFwicGVybWlzc2lvbi5uZXdcIiB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8bWF0LWRpdmlkZXIgY2xhc3M9XCJtYXQtZGl2aWRlclwiPjwvbWF0LWRpdmlkZXI+XHJcbiAgICAgICAgPGFwcC1wZXJtaXNzaW9ucy10ZW1wbGF0ZVxyXG4gICAgICAgICAgICBbZG9jdW1lbnRJZF09XCJkb2N1bWVudElkXCJcclxuICAgICAgICAgICAgW3VzZXJWaXNpYmxlUGVybWlzc2lvbnNdPVwidXNlclZpc2libGVQZXJtaXNzaW9uc1wiXHJcbiAgICAgICAgICAgIChnZXRQZXJtaXNzaW9ucyk9XCJnZXRQZXJtaXNzaW9ucygpXCJcclxuICAgICAgICAgICAgW2FsbG93RGVsZXRlQW5kRWRpdF09XCJhbGxvd0FkZF9CbG9ja19EZWxldGVQZXJtaXNzaW9uXCJcclxuICAgICAgICAgICAgW3Blcm1pc3Npb25zQXJyYXldPVwibG9jYWxQZXJtaXNzaW9uc1wiXHJcbiAgICAgICAgICAgICpuZ0lmPVwibG9jYWxQZXJtaXNzaW9ucy5sZW5ndGggPiAwOyBlbHNlIG5vbG9jYWxQZXJtaXNzaW9uc1wiXHJcbiAgICAgICAgPlxyXG4gICAgICAgIDwvYXBwLXBlcm1pc3Npb25zLXRlbXBsYXRlPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8bmctdGVtcGxhdGUgI25vbG9jYWxQZXJtaXNzaW9ucz5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2luZ2xlLXBlcm1zc2lvbiBwLTMgdGV4dC1jZW50ZXJcIj5cclxuICAgICAgICAgICAge3sgXCJwZXJtaXNzaW9uLm5vTG9jYWxcIiB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDwhLS1Jbmhlcml0ZWRQZXJtaXNzaW9uIExpc3QgSXRlbXMtLT5cclxuICAgIDxkaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cganVzdGlmeS1iZXR3ZWVuIG10LTNcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb250LWJvbGQgdGV4dC1ncmF5LTUwMCB0ZXh0LWJhc2VcIj57e1xyXG4gICAgICAgICAgICAgICAgXCJwZXJtaXNzaW9uLmluaGVyaXRlZFwiIHwgdHJhbnNsYXRlXHJcbiAgICAgICAgICAgIH19PC9zcGFuPlxyXG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImFsbG93QWRkX0Jsb2NrX0RlbGV0ZVBlcm1pc3Npb25cIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImhvdmVyOnRleHQtYmx1ZS03MDAgdGV4dC1ibHVlLTUwMCBtYi0xIHRleHQtYmFzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzdGF0dXMgIT0gbnVsbCAmJiBhbGxvd0FkZEFuZEJsb2NrXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInN0YXR1cyA9PSAnYmxvY2snOyBlbHNlIHVuYmxvY2tcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidW5ibG9ja1Blcm1pc3Npb25Jbmhlcml0YW5jZSgpXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwicGVybWlzc2lvbi51bmJsb2NrXCIgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICN1bmJsb2NrPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAoY2xpY2spPVwiYmxvY2tQZXJtaXNzaW9uSW5oZXJpdGFuY2UoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgXCJwZXJtaXNzaW9uLmJsb2NrXCIgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxtYXQtZGl2aWRlciBjbGFzcz1cIm1hdC1kaXZpZGVyXCIgKm5nSWY9XCIhYmxvY2tPclVuYmxvY2tcIj48L21hdC1kaXZpZGVyPlxyXG4gICAgICAgIDxtYXQtcHJvZ3Jlc3MtYmFyIG1vZGU9XCJpbmRldGVybWluYXRlXCIgKm5nSWY9XCJibG9ja09yVW5ibG9ja1wiPjwvbWF0LXByb2dyZXNzLWJhcj5cclxuICAgICAgICA8YXBwLXBlcm1pc3Npb25zLXRlbXBsYXRlXHJcbiAgICAgICAgICAgICpuZ0lmPVwiaW5oZXJpdGVkUGVybWlzc2lvbnMubGVuZ3RoID4gMDsgZWxzZSBub2luaGVyaXRlZFBlcm1pc3Npb25zXCJcclxuICAgICAgICAgICAgW2RvY3VtZW50SWRdPVwiZG9jdW1lbnRJZFwiXHJcbiAgICAgICAgICAgIFt1c2VyVmlzaWJsZVBlcm1pc3Npb25zXT1cInVzZXJWaXNpYmxlUGVybWlzc2lvbnNcIlxyXG4gICAgICAgICAgICBbcGVybWlzc2lvbnNBcnJheV09XCJpbmhlcml0ZWRQZXJtaXNzaW9uc1wiXHJcbiAgICAgICAgICAgIChnZXRQZXJtaXNzaW9ucyk9XCJnZXRQZXJtaXNzaW9ucygpXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgPC9hcHAtcGVybWlzc2lvbnMtdGVtcGxhdGU+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxuZy10ZW1wbGF0ZSAjbm9pbmhlcml0ZWRQZXJtaXNzaW9ucz5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2luZ2xlLXBlcm1zc2lvbiBwLTMgdGV4dC1jZW50ZXJcIj5cclxuICAgICAgICAgICAge3tcInBlcm1pc3Npb24ubm9Jbmhlcml0ZWRcIiB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDwhLS1kZXBhcnRtZW50UGVybWlzc2lvbnMgTGlzdCBJdGVtcy0tPlxyXG4gICAgPGRpdiAqbmdJZj1cImRlcGFydG1lbnRQZXJtaXNzaW9ucy5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cganVzdGlmeS1iZXR3ZWVuXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9udC1ib2xkIHRleHQtZ3JheS01MDAgdGV4dC1iYXNlXCI+e3tcclxuICAgICAgICAgICAgICAgIFwicGVybWlzc2lvbi5kZXBhcnRtZW50UGVybWlzc2lvbnNcIiB8IHRyYW5zbGF0ZVxyXG4gICAgICAgICAgICB9fTwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8bWF0LWRpdmlkZXIgY2xhc3M9XCJtYXQtZGl2aWRlclwiPjwvbWF0LWRpdmlkZXI+XHJcbiAgICAgICAgPGFwcC1wZXJtaXNzaW9ucy10ZW1wbGF0ZVxyXG4gICAgICAgICAgICBbZG9jdW1lbnRJZF09XCJkb2N1bWVudElkXCJcclxuICAgICAgICAgICAgW3VzZXJWaXNpYmxlUGVybWlzc2lvbnNdPVwidXNlclZpc2libGVQZXJtaXNzaW9uc1wiXHJcbiAgICAgICAgICAgIChnZXRQZXJtaXNzaW9ucyk9XCJnZXRQZXJtaXNzaW9ucygpXCJcclxuICAgICAgICAgICAgW3Blcm1pc3Npb25zQXJyYXldPVwiZGVwYXJ0bWVudFBlcm1pc3Npb25zXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgPC9hcHAtcGVybWlzc2lvbnMtdGVtcGxhdGU+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS1zaGFyZVBlcm1pc3Npb25zIExpc3QgSXRlbXMtLT5cclxuICAgIDxkaXYgKm5nSWY9XCJzaGFyZVBlcm1pc3Npb25zLmxlbmd0aCA+IDBcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWJldHdlZW5cIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb250LWJvbGQgdGV4dC1ncmF5LTUwMCB0ZXh0LWJhc2VcIj57e1xyXG4gICAgICAgICAgICAgICAgXCJwZXJtaXNzaW9uLnNoYXJlUGVybWlzc2lvbnNcIiB8IHRyYW5zbGF0ZVxyXG4gICAgICAgICAgICB9fTwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8bWF0LWRpdmlkZXIgY2xhc3M9XCJtYXQtZGl2aWRlclwiPjwvbWF0LWRpdmlkZXI+XHJcbiAgICAgICAgPGFwcC1wZXJtaXNzaW9ucy10ZW1wbGF0ZVxyXG4gICAgICAgICAgICBbZG9jdW1lbnRJZF09XCJkb2N1bWVudElkXCJcclxuICAgICAgICAgICAgW3VzZXJWaXNpYmxlUGVybWlzc2lvbnNdPVwidXNlclZpc2libGVQZXJtaXNzaW9uc1wiXHJcbiAgICAgICAgICAgIChnZXRQZXJtaXNzaW9ucyk9XCJnZXRQZXJtaXNzaW9ucygpXCJcclxuICAgICAgICAgICAgW3Blcm1pc3Npb25zQXJyYXldPVwic2hhcmVQZXJtaXNzaW9uc1wiXHJcbiAgICAgICAgPlxyXG4gICAgICAgIDwvYXBwLXBlcm1pc3Npb25zLXRlbXBsYXRlPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0td29ya2Zsb3dQZXJtaXNzaW9ucyBMaXN0IEl0ZW1zLS0+XHJcbiAgICA8ZGl2ICpuZ0lmPVwid29ya2Zsb3dQZXJtaXNzaW9ucy5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cganVzdGlmeS1iZXR3ZWVuXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9udC1ib2xkIHRleHQtZ3JheS01MDAgdGV4dC1iYXNlXCI+e3tcclxuICAgICAgICAgICAgICAgIFwicGVybWlzc2lvbi53b3JrZmxvd1Blcm1pc3Npb25zXCIgfCB0cmFuc2xhdGVcclxuICAgICAgICAgICAgfX08L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPG1hdC1kaXZpZGVyIGNsYXNzPVwibWF0LWRpdmlkZXJcIj48L21hdC1kaXZpZGVyPlxyXG4gICAgICAgIDxhcHAtcGVybWlzc2lvbnMtdGVtcGxhdGVcclxuICAgICAgICAgICAgW2RvY3VtZW50SWRdPVwiZG9jdW1lbnRJZFwiXHJcbiAgICAgICAgICAgIFt1c2VyVmlzaWJsZVBlcm1pc3Npb25zXT1cInVzZXJWaXNpYmxlUGVybWlzc2lvbnNcIlxyXG4gICAgICAgICAgICAoZ2V0UGVybWlzc2lvbnMpPVwiZ2V0UGVybWlzc2lvbnMoKVwiXHJcbiAgICAgICAgICAgIFtwZXJtaXNzaW9uc0FycmF5XT1cIndvcmtmbG93UGVybWlzc2lvbnNcIlxyXG4gICAgICAgID5cclxuICAgICAgICA8L2FwcC1wZXJtaXNzaW9ucy10ZW1wbGF0ZT5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjbG9hZGVyPlxyXG4gICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHctZnVsbCBoLWZ1bGxcIj5cclxuICAgICAgICA8bWF0LXNwaW5uZXIgW3ZhbHVlXT1cIjkwXCIgW3N0cm9rZVdpZHRoXT1cIjZcIiBvdmVybGF5PVwidHJ1ZVwiIFtkaWFtZXRlcl09XCI3NVwiPjwvbWF0LXNwaW5uZXI+XHJcbiAgICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuIl19
|
|
278
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbnMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnV4ZW8tZGV2ZWxvcG1lbnQtZnJhbWV3b3JrL3NyYy9saWIvY29tcG9uZW50cy9wZXJtaXNzaW9ucy9wZXJtaXNzaW9ucy9wZXJtaXNzaW9ucy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9udXhlby1kZXZlbG9wbWVudC1mcmFtZXdvcmsvc3JjL2xpYi9jb21wb25lbnRzL3Blcm1pc3Npb25zL3Blcm1pc3Npb25zL3Blcm1pc3Npb25zLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUtwRSxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSw0REFBNEQsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7OztBQVkzRyxNQUFNLE9BQU8sb0JBQW9CO0lBc0JoQyxZQUNTLGlCQUFvQyxFQUNwQyxvQkFBK0IsRUFDL0IsYUFBa0MsRUFDbEMsZ0JBQW9DLEVBQ3BDLFlBQTBCLEVBQzFCLFFBQXFCLEVBQ3JCLGdCQUFtQyxFQUNwQyxrQkFBc0M7UUFQckMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQyx5QkFBb0IsR0FBcEIsb0JBQW9CLENBQVc7UUFDL0Isa0JBQWEsR0FBYixhQUFhLENBQXFCO1FBQ2xDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBb0I7UUFDcEMsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsYUFBUSxHQUFSLFFBQVEsQ0FBYTtRQUNyQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQW1CO1FBQ3BDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFyQjlDLGVBQVUsR0FBRyxFQUFFLENBQUM7UUFDaEIsbUJBQWMsR0FBbUIsRUFBRSxDQUFDO1FBRXBDLHFC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bkYsSUFBSSxDQUFDLGlCQUFpQixDQUFDLG1CQUFtQixHQUFHLEtBQUssQ0FBQztRQUNuRCxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDckQsQ0FBQzs7a0hBbFNXLG9CQUFvQjtzR0FBcEIsb0JBQW9CLG1MQ2pCakMsdTBMQWlJQTs0RkRoSGEsb0JBQW9CO2tCQUxoQyxTQUFTO21CQUFDO29CQUNWLFFBQVEsRUFBRSxpQkFBaUI7b0JBQzNCLFdBQVcsRUFBRSw4QkFBOEI7b0JBQzNDLFNBQVMsRUFBRSxDQUFDLDhCQUE4QixDQUFDO2lCQUMzQzt5VEFJQSxVQUFVO3NCQURULEtBQUs7Z0JBR04sUUFBUTtzQkFEUCxLQUFLO2dCQUdOLGdCQUFnQjtzQkFEZixLQUFLO2dCQUdOLFVBQVU7c0JBRFQsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdERpYWxvZywgTWF0RGlhbG9nQ29uZmlnIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFBlcm1pc3Npb25TZXJ2aWNlIH0gZnJvbSAnLi4vcGVybWlzc2lvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVXNlclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQtc2VydmljZXMvdXNlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQWRkUGVybWlzc2lvbnNEaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi9hZGQtcGVybWlzc2lvbnMtZGlhbG9nL2FkZC1wZXJtaXNzaW9ucy1kaWFsb2cuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRXZhbHVhdG9yc1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmUvcGVybWlzc2lvbnMvZXZhbHVhdG9ycy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ3VzdG9tVG9hc3RyU2VydmljZSB9IGZyb20gJy4uLy4uL2N1c3RvbS10b2FzdHIvc2VydmljZXMvY3VzdG9tLXRvYXN0ci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVHJhbnNsYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlcy90cmFuc2xhdGlvbi90cmFuc2xhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTnV4ZW9TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlcy9udXhlby9udXhlby5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTnV4ZW9EaWFsb2dTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2NvbXBvbmVudHMvbnV4ZW8tZGlhbG9nL3NlcnZpY2VzL251eGVvLWRpYWxvZy5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG5cdHNlbGVjdG9yOiAnYXBwLXBlcm1pc3Npb25zJyxcclxuXHR0ZW1wbGF0ZVVybDogJy4vcGVybWlzc2lvbnMuY29tcG9uZW50Lmh0bWwnLFxyXG5cdHN0eWxlVXJsczogWycuL3Blcm1pc3Npb25zLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFBlcm1pc3Npb25zQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG5cdHBlcm1pc3Npb25zVHlwZTogYW55O1xyXG5cdEBJbnB1dCgpXHJcblx0ZG9jdW1lbnRJZDtcclxuXHRASW5wdXQoKVxyXG5cdGRvY3VtZW50O1xyXG5cdEBJbnB1dCgpXHJcblx0YWxsb3dBZGRBbmRCbG9jaztcclxuXHRASW5wdXQoKVxyXG5cdHNvdXJjZVBhZ2UgPSAnJztcclxuXHRzdWJzY3JpcHRpb25zJDogU3Vic2NyaXB0aW9uW10gPSBbXTtcclxuXHR1c2VyVmlzaWJsZVBlcm1pc3Npb25zOiBhbnk7XHJcblx0bG9jYWxQZXJtaXNzaW9ucyA9IFtdO1xyXG5cdGluaGVyaXRlZFBlcm1pc3Npb25zID0gW107XHJcblx0ZGVwYXJ0bWVudFBlcm1pc3Npb25zID0gW107XHJcblx0c2hhcmVQZXJtaXNzaW9ucyA9IFtdO1xyXG5cdHdvcmtmbG93UGVybWlzc2lvbnMgPSBbXTtcclxuXHRzdGF0dXMgPSBudWxsOyAvL3RvIGtub3cgaW5oZXJpdGVkIFBlcm1pc3Npb25zIGlmIGJsb2NrIG9yIG5vdFxyXG5cdGFsbG93QWRkX0Jsb2NrX0RlbGV0ZVBlcm1pc3Npb24gPSBmYWxzZTtcclxuXHRibG9ja09yVW5ibG9jayA9IGZhbHNlO1xyXG5cdGxvYWRpbmcgPSBmYWxzZTtcclxuXHRhbGxEZXBhcnRtZW50VXNlcnMgPSBbXTtcclxuXHRjb25zdHJ1Y3RvcihcclxuXHRcdHByaXZhdGUgcGVybWlzc2lvblNlcnZpY2U6IFBlcm1pc3Npb25TZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBhZGRQZXJtaXNzaW9uc0RpYWxvZzogTWF0RGlhbG9nLFxyXG5cdFx0cHJpdmF0ZSB0b3N0ZXJTZXJ2aWNlOiBDdXN0b21Ub2FzdHJTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGlvblNlcnZpY2UsXHJcblx0XHRwcml2YXRlIG51eGVvU2VydmljZTogTnV4ZW9TZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSB1c2VyU2VydjogVXNlclNlcnZpY2UsXHJcblx0XHRwcml2YXRlIGV2YWx1YXRvclNlcnZpY2U6IEV2YWx1YXRvcnNTZXJ2aWNlLFxyXG5cdFx0cHVibGljIG51eGVvRGlhbG9nU2VydmljZTogTnV4ZW9EaWFsb2dTZXJ2aWNlXHJcblx0KSB7fVxyXG5cclxuXHRuZ09uSW5pdCgpOiB2b2lkIHtcclxuXHRcdHRoaXMuc3Vic2NyaXB0aW9ucyQuY29uY2F0KFtcclxuXHRcdFx0dGhpcy5wZXJtaXNzaW9uU2VydmljZS5jcmVhdGVBbmRBZGRBbm90aGVyLnN1YnNjcmliZSgocmVzKSA9PiB7XHJcblx0XHRcdFx0dGhpcy5nZXRQZXJtaXNzaW9ucygpO1xyXG5cdFx0XHR9KVxyXG5cdFx0XSk7XHJcblx0XHR0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG5cdFx0dGhpcy5jaGVja0lmVXNlckNhbkRvQWN0aW9uc09uUGVybWlzc2lvbnMoKTtcclxuXHRcdHRoaXMuZ2V0UGVybWlzc2lvbnMoKTtcclxuXHRcdHRoaXMuaW5oZXJpdGVkUGVybWlzc2lvbnMubGVuZ3RoID4gMFxyXG5cdFx0XHQ/ICh0aGlzLnN0YXR1cyA9ICd1bmJsb2NrJylcclxuXHRcdFx0OiAodGhpcy5zdGF0dXMgPSAnYmxvY2snKTtcclxuXHR9XHJcblxyXG5cdGFkZFBlcm1pc3Npb25MYWJlbChhcnIsIHBlcm1pc3Npb25BcnIpIHtcclxuXHRcdGFyci5mb3JFYWNoKChlbGVtZW50KSA9PiB7XHJcblx0XHRcdGlmICghdGhpcy5pc0l0ZW1Db250YWluQWRtaW5pc3RyYXRvckdyb3VwKGVsZW1lbnQpKSB7XHJcblx0XHRcdFx0ZWxlbWVudC5wZXJtaXNzaW9uTGFiZWwgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcclxuXHRcdFx0XHRcdGByaWdodHMuJHtlbGVtZW50LnBlcm1pc3Npb259YFxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdFx0cGVybWlzc2lvbkFyci5wdXNoKGVsZW1lbnQpO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdGlzSXRlbUNvbnRhaW5BZG1pbmlzdHJhdG9yR3JvdXAoZWxlbWVudCkge1xyXG5cdFx0bGV0IGlzQWRtaW5pc3RyYXRvciA9IGZhbHNlO1xyXG5cdFx0aWYgKGVsZW1lbnQuZ3JhbnRlZCA9PT0gZmFsc2UpIHtcclxuXHRcdFx0aXNBZG1pbmlzdHJhdG9yID0gdHJ1ZTtcclxuXHRcdH0gZWxzZSBpZiAoXHJcblx0XHRcdGVsZW1lbnQudXNlcm5hbWUgJiZcclxuXHRcdFx0ZWxlbWVudC51c2VybmFtZVsnZW50aXR5LXR5cGUnXSA9PT0gJ2dyb3VwJyAmJlxyXG5cdFx0XHRlbGVtZW50LnVzZXJuYW1lLmdyb3VwbmFtZSA9PT0gJ2FkbWluaXN0cmF0b3JzJ1xyXG5cdFx0KSB7XHJcblx0XHRcdGlzQWRtaW5pc3RyYXRvciA9IHRydWU7XHJcblx0XHR9IGVsc2UgaWYgKGVsZW1lbnQudXNlcm5hbWUudXNlckdyb3Vwcykge1xyXG5cdFx0XHRlbGVtZW50LnVzZXJuYW1lLnVzZXJHcm91cHMubWFwKChncm91cCkgPT4ge1xyXG5cdFx0XHRcdGlmIChncm91cC5uYW1lID09PSAnYWRtaW5pc3RyYXRvcnMnKSB7XHJcblx0XHRcdFx0XHRpc0FkbWluaXN0cmF0b3IgPSB0cnVlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gaXNBZG1pbmlzdHJhdG9yO1xyXG5cdH1cclxuXHJcblx0Z2V0UGVybWlzc2lvbnMoKSB7XHJcblx0XHR0aGlzLnN1YnNjcmlwdGlvbnMkLmNvbmNhdChbXHJcblx0XHRcdHRoaXMucGVybWlzc2lvblNlcnZpY2VcclxuXHRcdFx0XHQuZ2V0UGVybWlzc2lvbnNGb3JEb2N1bWVudCh0aGlzLmRvY3VtZW50SWQpXHJcblx0XHRcdFx0LnN1YnNjcmliZShcclxuXHRcdFx0XHRcdChyZXMpID0+IHtcclxuXHRcdFx0XHRcdFx0dGhpcy5wZXJtaXNzaW9uc1R5cGUgPSByZXMuY29udGV4dFBhcmFtZXRlcnMuYWNscztcclxuXHRcdFx0XHRcdFx0dGhpcy51c2VyVmlzaWJsZVBlcm1pc3Npb25zID1cclxuXHRcdFx0XHRcdFx0XHRyZXMuY29udGV4dFBhcmFtZXRlcnMudXNlclZpc2libGVQZXJtaXNzaW9ucztcclxuXHRcdFx0XHRcdFx0Zm9yIChsZXQgcCBvZiB0aGlzLnBlcm1pc3Npb25zVHlwZSkge1xyXG5cdFx0XHRcdFx0XHRcdGlmIChwLm5hbWUgPT0gJ2xvY2FsJykge1xyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5sb2NhbFBlcm1pc3Npb25zID0gW107XHJcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmFkZFBlcm1pc3Npb25MYWJlbChwLmFjZXMsIHRoaXMubG9jYWxQZXJtaXNzaW9ucyk7XHJcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmxvY2FsUGVybWlzc2lvbnMgPSB0aGlzLmxvY2FsUGVybWlzc2lvbnMubWFwKChlbGVtZW50KSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRlbGVtZW50LmNyZWF0b3IgPT09IG51bGwgfHxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRlbGVtZW50LmNyZWF0b3IgPT09ICdzeXN0ZW0nIHx8XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZWxlbWVudC5jcmVhdG9yPy5wcm9wZXJ0aWVzPy51c2VybmFtZSAhPVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5udXhlb1NlcnZpY2UubnV4ZW9DbGllbnQudXNlci5wcm9wZXJ0aWVzLnVzZXJuYW1lXHJcblx0XHRcdFx0XHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGVsZW1lbnRbJ2N1cnJlbnRVc2VySXNQZXJtaXNzaW9uT3duZXInXSA9IGZhbHNlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGVsZW1lbnRbJ2N1cnJlbnRVc2VySXNQZXJtaXNzaW9uT3duZXInXSA9IHRydWU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGVsZW1lbnQ7XHJcblx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKHAubmFtZSA9PSAnaW5oZXJpdGVkJykge1xyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5pbmhlcml0ZWRQZXJtaXNzaW9ucyA9IFtdO1xyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5hZGRQZXJtaXNzaW9uTGFiZWwocC5hY2VzLCB0aGlzLmluaGVyaXRlZFBlcm1pc3Npb25zKTtcclxuXHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKHAubmFtZS5pbmNsdWRlcygnZGVwdFNwYWNlJykpIHtcclxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuZGVwYXJ0bWVudFBlcm1pc3Npb25zID0gW107XHJcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmFkZFBlcm1pc3Npb25MYWJlbChwLmFjZXMsIHRoaXMuZGVwYXJ0bWVudFBlcm1pc3Npb25zKTtcclxuXHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKHAubmFtZS5pbmNsdWRlcygnc2hhcmUnKSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5zaGFyZVBlcm1pc3Npb25zID0gW107XHJcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmFkZFBlcm1pc3Npb25MYWJlbChwLmFjZXMsIHRoaXMuc2hhcmVQZXJtaXNzaW9ucyk7XHJcblx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmIChwLm5hbWUuaW5jbHVkZXMoJ3JvdXRpbmcnKSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy53b3JrZmxvd1Blcm1pc3Npb25zID0gW107XHJcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmFkZFBlcm1pc3Npb25MYWJlbChwLmFjZXMsIHRoaXMud29ya2Zsb3dQZXJtaXNzaW9ucyk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdHRoaXMuaW5oZXJpdGVkUGVybWlzc2lvbnMubGVuZ3RoID09IDBcclxuXHRcdFx0XHRcdFx0XHQ/ICh0aGlzLnN0YXR1cyA9ICdibG9jaycpXHJcblx0XHRcdFx0XHRcdFx0OiAodGhpcy5zdGF0dXMgPSAndW5ibG9jaycpO1xyXG5cdFx0XHRcdFx0XHR0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHQoZXJyKSA9PiAodGhpcy5sb2FkaW5nID0gZmFsc2UpXHJcblx0XHRcdFx0KVxyXG5cdFx0XSk7XHJcblx0fVxyXG5cclxuXHRibG9ja1Blcm1pc3Npb25Jbmhlcml0YW5jZSgpIHtcclxuXHRcdHRoaXMuYmxvY2tPclVuYmxvY2sgPSB0cnVlO1xyXG5cdFx0dGhpcy5zdWJzY3JpcHRpb25zJC5jb25jYXQoW1xyXG5cdFx0XHR0aGlzLnBlcm1pc3Npb25TZXJ2aWNlXHJcblx0XHRcdFx0LmJsb2NrUGVybWlzc2lvbkluaGVyaXRhbmNlKHRoaXMuZG9jdW1lbnRJZClcclxuXHRcdFx0XHQuc3Vic2NyaWJlKFxyXG5cdFx0XHRcdFx0KHJlcykgPT4ge1xyXG5cdFx0XHRcdFx0XHRpZiAocmVzKSB7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5nZXRQZXJtaXNzaW9ucygpO1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMudG9zdGVyU2VydmljZS5zaG93KFxyXG5cdFx0XHRcdFx0XHRcdFx0J3N1Y2Nlc3MnLFxyXG5cdFx0XHRcdFx0XHRcdFx0J1RPQVNURVIuU1VDQ0VTUycsXHJcblx0XHRcdFx0XHRcdFx0XHQnVE9BU1RFUi5QRVJNSVNTSU9OX0JMT0NLX1NVQ0NFU1MnXHJcblx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmJsb2NrT3JVbmJsb2NrID0gZmFsc2U7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5zdGF0dXMgPSAndW5ibG9jayc7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5pbmhlcml0ZWRQZXJtaXNzaW9ucyA9IFtdO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0KGVycikgPT4ge1xyXG5cdFx0XHRcdFx0XHR0aGlzLmJsb2NrT3JVbmJsb2NrID0gZmFsc2U7XHJcblx0XHRcdFx0XHRcdHRoaXMudG9zdGVyU2VydmljZS5zaG93KFxyXG5cdFx0XHRcdFx0XHRcdCdlcnJvcicsXHJcblx0XHRcdFx0XHRcdFx0J1RPQVNURVIuRVJST1InLFxyXG5cdFx0XHRcdFx0XHRcdCdUT0FTVEVSLlBFUk1JU1NJT05fQkxPQ0tfRkFJTCdcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHQpXHJcblx0XHRdKTtcclxuXHR9XHJcblxyXG5cdHVuYmxvY2tQZXJtaXNzaW9uSW5oZXJpdGFuY2UoKSB7XHJcblx0XHR0aGlzLmJsb2NrT3JVbmJsb2NrID0gdHJ1ZTtcclxuXHRcdHRoaXMuc3Vic2NyaXB0aW9ucyQuY29uY2F0KFtcclxuXHRcdFx0dGhpcy5wZXJtaXNzaW9uU2VydmljZVxyXG5cdFx0XHRcdC51bmJsb2NrUGVybWlzc2lvbkluaGVyaXRhbmNlKHRoaXMuZG9jdW1lbnRJZClcclxuXHRcdFx0XHQuc3Vic2NyaWJlKFxyXG5cdFx0XHRcdFx0KHJlcykgPT4ge1xyXG5cdFx0XHRcdFx0XHRpZiAocmVzKSB7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5nZXRQZXJtaXNzaW9ucygpO1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMudG9zdGVyU2VydmljZS5zaG93KFxyXG5cdFx0XHRcdFx0XHRcdFx0J3N1Y2Nlc3MnLFxyXG5cdFx0XHRcdFx0XHRcdFx0J1RPQVNURVIuU1VDQ0VTUycsXHJcblx0XHRcdFx0XHRcdFx0XHQnVE9BU1RFUi5QRVJNSVNTSU9OX1VOQkxPQ0tfU1VDQ0VTUydcclxuXHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMuc3RhdHVzID0gJ2Jsb2NrJztcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmJsb2NrT3JVbmJsb2NrID0gZmFsc2U7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHQoZXJyKSA9PiB7XHJcblx0XHRcdFx0XHRcdHRoaXMuYmxvY2tPclVuYmxvY2sgPSBmYWxzZTtcclxuXHRcdFx0XHRcdFx0dGhpcy50b3N0ZXJTZXJ2aWNlLnNob3coXHJcblx0XHRcdFx0XHRcdFx0J2Vycm9yJyxcclxuXHRcdFx0XHRcdFx0XHQnVE9BU1RFUi5FUlJPUicsXHJcblx0XHRcdFx0XHRcdFx0J1RPQVNURVIuUEVSTUlTU0lPTl9VTkJMT0NLX0ZBSUwnXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0KVxyXG5cdFx0XSk7XHJcblx0fVxyXG5cclxuXHRhZGROZXdMb2NhbFBlcm1pc3Npb25zKCkge1xyXG5cdFx0dGhpcy5wZXJtaXNzaW9uU2VydmljZS5kZXBhcnRtZW50VXNlcnMgPSBbLi4udGhpcy5hbGxEZXBhcnRtZW50VXNlcnNdO1xyXG5cdFx0dGhpcy5sb2NhbFBlcm1pc3Npb25zLmZvckVhY2goKHBlcm0pID0+IHtcclxuXHRcdFx0dGhpcy5wZXJtaXNzaW9uU2VydmljZS5kZXBhcnRtZW50VXNlcnMuZm9yRWFjaCgodXNlciwgaW5kZXgpID0+IHtcclxuXHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRwZXJtLnVzZXJuYW1lLnByb3BlcnRpZXMudXNlcm5hbWUgPT09IHVzZXIucHJvcGVydGllcy51c2VybmFtZSAmJlxyXG5cdFx0XHRcdFx0cGVybS5jcmVhdG9yLnByb3BlcnRpZXMudXNlcm5hbWUgPT09XHJcblx0XHRcdFx0XHRcdHRoaXMubnV4ZW9TZXJ2aWNlLm51eGVvQ2xpZW50LnVzZXIucHJvcGVydGllcy51c2VybmFtZVxyXG5cdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0dGhpcy5wZXJtaXNzaW9uU2VydmljZS5kZXBhcnRtZW50VXNlcnMuc3BsaWNlKGluZGV4LCAxKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cdFx0fSk7XHJcblxyXG5cdFx0Ly8gYmVmb3Igb3BlbmluZyBtb2RhbCB3ZSBkaWFibGUgY2xpY2tvdXQgc2lkZSBlZmZlY3QgdG8gcHJldmVudCBkZXRhaWxzIHNpZGUgbWVudSBmcm9tIGNsb3Npbmcgd2hlbiBjbGlja2luZyBpbiB0aGUgbW9kYWxcclxuXHRcdHRoaXMucGVybWlzc2lvblNlcnZpY2UuZGlzYWJsZUNsaWNrT3V0U2lkZSA9IHRydWU7XHJcblx0XHR0aGlzLm51eGVvRGlhbG9nU2VydmljZVxyXG5cdFx0XHQub3Blbih7XHJcblx0XHRcdFx0Y29tcG9uZW50OiBBZGRQZXJtaXNzaW9uc0RpYWxvZ0NvbXBvbmVudCxcclxuXHRcdFx0XHR3aWR0aDogJzM1JScsXHJcblx0XHRcdFx0aGVpZ2h0OiAnNzAlJyxcclxuXHRcdFx0XHRwYW5lbENsYXNzOiAnd2F0Y2hlci1kaWFsb2ctY29udGFpbmVyJyxcclxuXHRcdFx0XHRkYXRhOiB7XHJcblx0XHRcdFx0XHRpZDogdGhpcy5kb2N1bWVudElkLFxyXG5cdFx0XHRcdFx0cmlnaHRzOiB0aGlzLnVzZXJWaXNpYmxlUGVybWlzc2lvbnNcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Ly9kaXNhYmxlQ2xvc2U6IHRydWUsXHJcblx0XHRcdH0pXHJcblx0XHRcdC5hZnRlckNsb3NlZCgpXHJcblx0XHRcdC5zdWJzY3JpYmUoKHJlcykgPT4ge1xyXG5cdFx0XHRcdC8vIHJldHVybiBjbGljayBvdXRzaWRlIGVmZmVjdCB0byB3b3JrIHRvIGNsb3NlIHNpZGUgbWVudSB3aGVuIGNsaWNraW5nIG91dCBzaWRlIGl0XHJcblx0XHRcdFx0dGhpcy5wZXJtaXNzaW9uU2VydmljZS5kaXNhYmxlQ2xpY2tPdXRTaWRlID0gZmFsc2U7XHJcblx0XHRcdFx0aWYgKHJlcykge1xyXG5cdFx0XHRcdFx0dGhpcy5nZXRQZXJtaXNzaW9ucygpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblx0fVxyXG5cdGNoZWNrSWZVc2VyQ2FuRG9BY3Rpb25zT25QZXJtaXNzaW9ucygpIHtcclxuXHRcdHRoaXMuZXZhbHVhdG9yU2VydmljZVxyXG5cdFx0XHQuZXZhbHVhdGVSdWxlKCdpc01hbmFnZVBlcm1pc3Npb25FbmFibGVkJylcclxuXHRcdFx0LnRoZW4oKGlzRW5hYmxlZCkgPT4ge1xyXG5cdFx0XHRcdGlmIChpc0VuYWJsZWQpIHtcclxuXHRcdFx0XHRcdHRoaXMuZXZhbHVhdG9yU2VydmljZVxyXG5cdFx0XHRcdFx0XHQuZXZhbHVhdGVSdWxlKCdpc0RlcGFydG1lbnREb2N1bWVudENvbnRyb2xsZXInLCB7XHJcblx0XHRcdFx0XHRcdFx0ZW50aXR5OiB0aGlzLmRvY3VtZW50XHJcblx0XHRcdFx0XHRcdH0pXHJcblx0XHRcdFx0XHRcdC50aGVuKCh1c2VySW5Db250cm9sbGVyR3JvdXApID0+IHtcclxuXHRcdFx0XHRcdFx0XHQvLyBsZXQgdXNlckluQ29udHJvbGxlckdyb3VwID0gZmFsc2U7XHJcblx0XHRcdFx0XHRcdFx0Ly8gdGhpcy5udXhlb1NlcnZpY2UubnV4ZW9DbGllbnQudXNlci51c2VyR3JvdXBzLmZvckVhY2goZ3JvdXAgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdC8vICAgaWYgKGdyb3VwLm5hbWUgPT09ICdkbXNfZG9jdW1lbnRfY29udHJvbGxlcicpIHtcclxuXHRcdFx0XHRcdFx0XHQvLyAgICAgdXNlckluQ29udHJvbGxlckdyb3VwID0gdHJ1ZTtcclxuXHRcdFx0XHRcdFx0XHQvLyAgIH1cclxuXHRcdFx0XHRcdFx0XHQvLyB9KTtcclxuXHRcdFx0XHRcdFx0XHRpZiAodXNlckluQ29udHJvbGxlckdyb3VwKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRsZXQgZGVwQ29kZSA9IHRoaXMudXNlclNlcnYuZ2V0VXNlckRlcGFydG1lbnRGcm9tUGF0aChcclxuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5kb2N1bWVudC5wYXRoXHJcblx0XHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5wZXJtaXNzaW9uU2VydmljZVxyXG5cdFx0XHRcdFx0XHRcdFx0XHQuZ2V0RGVwTWVtYmVycyhkZXBDb2RlKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHQuc3Vic2NyaWJlKChyZXMpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLnBlcm1pc3Npb25TZXJ2aWNlLmRlcGFydG1lbnRVc2VycyA9IHJlcy51c2Vycy5tYXAoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQoZSkgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlWydkaXNwbGF5TGFiZWwnXSA9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZS5wcm9wZXJ0aWVzLmZpcnN0TmFtZSArICcgJyArIGUucHJvcGVydGllcy5sYXN0TmFtZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmFsbERlcGFydG1lbnRVc2VycyA9IFtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC4uLnRoaXMucGVybWlzc2lvblNlcnZpY2UuZGVwYXJ0bWVudFVzZXJzXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXMudXNlcnMuZm9yRWFjaCgodXNlcikgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR1c2VyLnByb3BlcnRpZXMudXNlcm5hbWUgPT09XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5udXhlb1NlcnZpY2UubnV4ZW9DbGllbnQudXNlci5wcm9wZXJ0aWVzXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQudXNlcm5hbWUgJiZcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KCh0aGlzLmRvY3VtZW50LnR5cGUgPT09ICdEbXNGb2xkZXInICYmXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5kb2N1bWVudC5wYXRoLmluY2x1ZGVzKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Jy9kZWZhdWx0LWRvbWFpbi93b3Jrc3BhY2VzL0RNUy8nXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KSkgfHxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQodGhpcy5kb2N1bWVudC50eXBlID09PSAnRm9sZGVyJyAmJlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5kb2N1bWVudC5wYXRoLmluY2x1ZGVzKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnL2RlZmF1bHQtZG9tYWluL3dvcmtzcGFjZXMvRE1TV29ya3NwYWNlcy8nXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpKSlcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmFsbG93QWRkX0Jsb2NrX0RlbGV0ZVBlcm1pc3Npb24gPSB0cnVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5hbGxvd0FkZF9CbG9ja19EZWxldGVQZXJtaXNzaW9uID0gZmFsc2U7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0dGhpcy5hbGxvd0FkZF9CbG9ja19EZWxldGVQZXJtaXNzaW9uID0gZmFsc2U7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHR9XHJcblx0bmdPbkRlc3Ryb3koKSB7XHJcblx0XHQvLyByZXR1cm4gY2xpY2sgb3V0c2lkZSBlZmZlY3QgdG8gd29yayB0byBjbG9zZSBzaWRlIG1lbnUgd2hlbiBjbGlja2luZyBvdXQgc2lkZSBpdFxyXG5cdFx0dGhpcy5wZXJtaXNzaW9uU2VydmljZS5kaXNhYmxlQ2xpY2tPdXRTaWRlID0gZmFsc2U7XHJcblx0XHR0aGlzLnN1YnNjcmlwdGlvbnMkLmZvckVhY2goKGUpID0+IGUudW5zdWJzY3JpYmUoKSk7XHJcblx0fVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJoLWF1dG8gbXQtMyBweC0wIHBiLTRcIiAqbmdJZj1cIiFsb2FkaW5nOyBlbHNlIGxvYWRlclwiPlxyXG4gICAgPCEtLUxvY2FsUGVybWlzc2lvbiBMaXN0IEl0ZW1zLS0+XHJcbiAgICA8ZGl2ICpuZ0lmPVwic291cmNlUGFnZSAhPSAnbXlGaWxlcydcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWJldHdlZW5cIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb250LWJvbGQgdGV4dC1ncmF5LTUwMCB0ZXh0LWJhc2VcIj57e1xyXG4gICAgICAgICAgICAgICAgXCJwZXJtaXNzaW9uLmxvY2FsXCIgfCB0cmFuc2xhdGVcclxuICAgICAgICAgICAgfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiYWxsb3dBZGRfQmxvY2tfRGVsZXRlUGVybWlzc2lvbiAmJiAhaW5oZXJpdGVkUGVybWlzc2lvbnMubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJhbGxvd0FkZEFuZEJsb2NrXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImhvdmVyOnRleHQtYmx1ZS03MDAgdGV4dC1ibHVlLTUwMCBtYi0xIHRleHQtYmFzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFkZE5ld0xvY2FsUGVybWlzc2lvbnMoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFwZXJtaXNzaW9uc1R5cGVcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IFwicGVybWlzc2lvbi5uZXdcIiB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8bWF0LWRpdmlkZXIgY2xhc3M9XCJtYXQtZGl2aWRlclwiPjwvbWF0LWRpdmlkZXI+XHJcbiAgICAgICAgPGFwcC1wZXJtaXNzaW9ucy10ZW1wbGF0ZVxyXG4gICAgICAgICAgICBbZG9jdW1lbnRJZF09XCJkb2N1bWVudElkXCJcclxuICAgICAgICAgICAgW3VzZXJWaXNpYmxlUGVybWlzc2lvbnNdPVwidXNlclZpc2libGVQZXJtaXNzaW9uc1wiXHJcbiAgICAgICAgICAgIChnZXRQZXJtaXNzaW9ucyk9XCJnZXRQZXJtaXNzaW9ucygpXCJcclxuICAgICAgICAgICAgW2FsbG93RGVsZXRlQW5kRWRpdF09XCJhbGxvd0FkZF9CbG9ja19EZWxldGVQZXJtaXNzaW9uXCJcclxuICAgICAgICAgICAgW3Blcm1pc3Npb25zQXJyYXldPVwibG9jYWxQZXJtaXNzaW9uc1wiXHJcbiAgICAgICAgICAgICpuZ0lmPVwibG9jYWxQZXJtaXNzaW9ucy5sZW5ndGggPiAwOyBlbHNlIG5vbG9jYWxQZXJtaXNzaW9uc1wiXHJcbiAgICAgICAgPlxyXG4gICAgICAgIDwvYXBwLXBlcm1pc3Npb25zLXRlbXBsYXRlPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8bmctdGVtcGxhdGUgI25vbG9jYWxQZXJtaXNzaW9ucz5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2luZ2xlLXBlcm1zc2lvbiBwLTMgdGV4dC1jZW50ZXJcIj5cclxuICAgICAgICAgICAge3sgXCJwZXJtaXNzaW9uLm5vTG9jYWxcIiB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDwhLS1Jbmhlcml0ZWRQZXJtaXNzaW9uIExpc3QgSXRlbXMtLT5cclxuICAgIDxkaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cganVzdGlmeS1iZXR3ZWVuIG10LTNcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb250LWJvbGQgdGV4dC1ncmF5LTUwMCB0ZXh0LWJhc2VcIj57e1xyXG4gICAgICAgICAgICAgICAgXCJwZXJtaXNzaW9uLmluaGVyaXRlZFwiIHwgdHJhbnNsYXRlXHJcbiAgICAgICAgICAgIH19PC9zcGFuPlxyXG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImFsbG93QWRkX0Jsb2NrX0RlbGV0ZVBlcm1pc3Npb25cIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImhvdmVyOnRleHQtYmx1ZS03MDAgdGV4dC1ibHVlLTUwMCBtYi0xIHRleHQtYmFzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzdGF0dXMgIT0gbnVsbCAmJiBhbGxvd0FkZEFuZEJsb2NrXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInN0YXR1cyA9PSAnYmxvY2snOyBlbHNlIHVuYmxvY2tcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidW5ibG9ja1Blcm1pc3Npb25Jbmhlcml0YW5jZSgpXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwicGVybWlzc2lvbi51bmJsb2NrXCIgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICN1bmJsb2NrPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAoY2xpY2spPVwiYmxvY2tQZXJtaXNzaW9uSW5oZXJpdGFuY2UoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgXCJwZXJtaXNzaW9uLmJsb2NrXCIgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxtYXQtZGl2aWRlciBjbGFzcz1cIm1hdC1kaXZpZGVyXCIgKm5nSWY9XCIhYmxvY2tPclVuYmxvY2tcIj48L21hdC1kaXZpZGVyPlxyXG4gICAgICAgIDxtYXQtcHJvZ3Jlc3MtYmFyIG1vZGU9XCJpbmRldGVybWluYXRlXCIgKm5nSWY9XCJibG9ja09yVW5ibG9ja1wiPjwvbWF0LXByb2dyZXNzLWJhcj5cclxuICAgICAgICA8YXBwLXBlcm1pc3Npb25zLXRlbXBsYXRlXHJcbiAgICAgICAgICAgICpuZ0lmPVwiaW5oZXJpdGVkUGVybWlzc2lvbnMubGVuZ3RoID4gMDsgZWxzZSBub2luaGVyaXRlZFBlcm1pc3Npb25zXCJcclxuICAgICAgICAgICAgW2RvY3VtZW50SWRdPVwiZG9jdW1lbnRJZFwiXHJcbiAgICAgICAgICAgIFt1c2VyVmlzaWJsZVBlcm1pc3Npb25zXT1cInVzZXJWaXNpYmxlUGVybWlzc2lvbnNcIlxyXG4gICAgICAgICAgICBbcGVybWlzc2lvbnNBcnJheV09XCJpbmhlcml0ZWRQZXJtaXNzaW9uc1wiXHJcbiAgICAgICAgICAgIChnZXRQZXJtaXNzaW9ucyk9XCJnZXRQZXJtaXNzaW9ucygpXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgPC9hcHAtcGVybWlzc2lvbnMtdGVtcGxhdGU+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxuZy10ZW1wbGF0ZSAjbm9pbmhlcml0ZWRQZXJtaXNzaW9ucz5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2luZ2xlLXBlcm1zc2lvbiBwLTMgdGV4dC1jZW50ZXJcIj5cclxuICAgICAgICAgICAge3tcInBlcm1pc3Npb24ubm9Jbmhlcml0ZWRcIiB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDwhLS1kZXBhcnRtZW50UGVybWlzc2lvbnMgTGlzdCBJdGVtcy0tPlxyXG4gICAgPGRpdiAqbmdJZj1cImRlcGFydG1lbnRQZXJtaXNzaW9ucy5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cganVzdGlmeS1iZXR3ZWVuXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9udC1ib2xkIHRleHQtZ3JheS01MDAgdGV4dC1iYXNlXCI+e3tcclxuICAgICAgICAgICAgICAgIFwicGVybWlzc2lvbi5kZXBhcnRtZW50UGVybWlzc2lvbnNcIiB8IHRyYW5zbGF0ZVxyXG4gICAgICAgICAgICB9fTwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8bWF0LWRpdmlkZXIgY2xhc3M9XCJtYXQtZGl2aWRlclwiPjwvbWF0LWRpdmlkZXI+XHJcbiAgICAgICAgPGFwcC1wZXJtaXNzaW9ucy10ZW1wbGF0ZVxyXG4gICAgICAgICAgICBbZG9jdW1lbnRJZF09XCJkb2N1bWVudElkXCJcclxuICAgICAgICAgICAgW3VzZXJWaXNpYmxlUGVybWlzc2lvbnNdPVwidXNlclZpc2libGVQZXJtaXNzaW9uc1wiXHJcbiAgICAgICAgICAgIChnZXRQZXJtaXNzaW9ucyk9XCJnZXRQZXJtaXNzaW9ucygpXCJcclxuICAgICAgICAgICAgW3Blcm1pc3Npb25zQXJyYXldPVwiZGVwYXJ0bWVudFBlcm1pc3Npb25zXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgPC9hcHAtcGVybWlzc2lvbnMtdGVtcGxhdGU+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS1zaGFyZVBlcm1pc3Npb25zIExpc3QgSXRlbXMtLT5cclxuICAgIDxkaXYgKm5nSWY9XCJzaGFyZVBlcm1pc3Npb25zLmxlbmd0aCA+IDBcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWJldHdlZW5cIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb250LWJvbGQgdGV4dC1ncmF5LTUwMCB0ZXh0LWJhc2VcIj57e1xyXG4gICAgICAgICAgICAgICAgXCJwZXJtaXNzaW9uLnNoYXJlUGVybWlzc2lvbnNcIiB8IHRyYW5zbGF0ZVxyXG4gICAgICAgICAgICB9fTwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8bWF0LWRpdmlkZXIgY2xhc3M9XCJtYXQtZGl2aWRlclwiPjwvbWF0LWRpdmlkZXI+XHJcbiAgICAgICAgPGFwcC1wZXJtaXNzaW9ucy10ZW1wbGF0ZVxyXG4gICAgICAgICAgICBbZG9jdW1lbnRJZF09XCJkb2N1bWVudElkXCJcclxuICAgICAgICAgICAgW3VzZXJWaXNpYmxlUGVybWlzc2lvbnNdPVwidXNlclZpc2libGVQZXJtaXNzaW9uc1wiXHJcbiAgICAgICAgICAgIChnZXRQZXJtaXNzaW9ucyk9XCJnZXRQZXJtaXNzaW9ucygpXCJcclxuICAgICAgICAgICAgW3Blcm1pc3Npb25zQXJyYXldPVwic2hhcmVQZXJtaXNzaW9uc1wiXHJcbiAgICAgICAgPlxyXG4gICAgICAgIDwvYXBwLXBlcm1pc3Npb25zLXRlbXBsYXRlPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0td29ya2Zsb3dQZXJtaXNzaW9ucyBMaXN0IEl0ZW1zLS0+XHJcbiAgICA8ZGl2ICpuZ0lmPVwid29ya2Zsb3dQZXJtaXNzaW9ucy5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cganVzdGlmeS1iZXR3ZWVuXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9udC1ib2xkIHRleHQtZ3JheS01MDAgdGV4dC1iYXNlXCI+e3tcclxuICAgICAgICAgICAgICAgIFwicGVybWlzc2lvbi53b3JrZmxvd1Blcm1pc3Npb25zXCIgfCB0cmFuc2xhdGVcclxuICAgICAgICAgICAgfX08L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPG1hdC1kaXZpZGVyIGNsYXNzPVwibWF0LWRpdmlkZXJcIj48L21hdC1kaXZpZGVyPlxyXG4gICAgICAgIDxhcHAtcGVybWlzc2lvbnMtdGVtcGxhdGVcclxuICAgICAgICAgICAgW2RvY3VtZW50SWRdPVwiZG9jdW1lbnRJZFwiXHJcbiAgICAgICAgICAgIFt1c2VyVmlzaWJsZVBlcm1pc3Npb25zXT1cInVzZXJWaXNpYmxlUGVybWlzc2lvbnNcIlxyXG4gICAgICAgICAgICAoZ2V0UGVybWlzc2lvbnMpPVwiZ2V0UGVybWlzc2lvbnMoKVwiXHJcbiAgICAgICAgICAgIFtwZXJtaXNzaW9uc0FycmF5XT1cIndvcmtmbG93UGVybWlzc2lvbnNcIlxyXG4gICAgICAgID5cclxuICAgICAgICA8L2FwcC1wZXJtaXNzaW9ucy10ZW1wbGF0ZT5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjbG9hZGVyPlxyXG4gICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHctZnVsbCBoLWZ1bGxcIj5cclxuICAgICAgICA8bWF0LXNwaW5uZXIgW3ZhbHVlXT1cIjkwXCIgW3N0cm9rZVdpZHRoXT1cIjZcIiBvdmVybGF5PVwidHJ1ZVwiIFtkaWFtZXRlcl09XCI3NVwiPjwvbWF0LXNwaW5uZXI+XHJcbiAgICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuIl19
|