nuxeo-development-framework 2.0.9 → 3.0.0
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 +8328 -454
- package/bundles/nuxeo-development-framework.umd.js.map +1 -1
- package/esm2015/lib/components/activities-log/activities-log/activities-log.component.js +84 -0
- package/esm2015/lib/components/activities-log/activities-log/activities-log.service.js +35 -0
- package/esm2015/lib/components/activities-log/activities-log.module.js +30 -0
- package/esm2015/lib/components/attachment-item/attachment-item/attachment-item.component.js +54 -0
- package/esm2015/lib/components/attachment-item/attachment-item.module.js +44 -0
- package/esm2015/lib/components/attachment-modal/attachment-modal.module.js +40 -0
- package/esm2015/lib/components/attachment-modal/attachments/attachments.component.js +157 -0
- package/esm2015/lib/components/confirmation-dialog/confirmation-dialog/confirmation-dialog.component.js +30 -0
- package/esm2015/lib/components/confirmation-dialog/confirmation-dialog.module.js +30 -0
- package/esm2015/lib/components/display-suitable-icon/display-suitable-icon/display-suitable-icon.component.js +44 -0
- package/esm2015/lib/components/display-suitable-icon/display-suitable-icon/icon.service.js +140 -0
- package/esm2015/lib/components/display-suitable-icon/display-suitable-icon.module.js +24 -0
- package/esm2015/lib/components/dynamic-fields-renderer/dynamic-fields-renderer/dynamic-fields-renderer.component.js +177 -0
- package/esm2015/lib/components/dynamic-fields-renderer/dynamic-fields-renderer.module.js +43 -0
- package/esm2015/lib/components/dynamic-tabs/dynamic-tabs/dynamic-tabs.component.js +39 -0
- package/esm2015/lib/components/dynamic-tabs/dynamic-tabs.module.js +34 -0
- package/esm2015/lib/components/file-manger/components/add-to-collection/add-to-collection.component.js +132 -0
- package/esm2015/lib/components/file-manger/components/copy/copy.component.js +119 -0
- package/esm2015/lib/components/file-manger/components/create-directory/create-directory.component.js +91 -0
- package/esm2015/lib/components/file-manger/components/create-modal/create-modal.component.js +455 -0
- package/esm2015/lib/components/file-manger/components/creation-type/creation-type.component.js +26 -0
- package/esm2015/lib/components/file-manger/components/delete/delete.component.js +77 -0
- package/esm2015/lib/components/file-manger/components/folder-modal/folder-modal.component.js +114 -0
- package/esm2015/lib/components/file-manger/components/loan-request/loan-request.component.js +80 -0
- package/esm2015/lib/components/file-manger/components/move/move.component.js +108 -0
- package/esm2015/lib/components/file-manger/components/publish-dialog/publish-dialog.component.js +111 -0
- package/esm2015/lib/components/file-manger/components/rename/rename.component.js +86 -0
- package/esm2015/lib/components/file-manger/components/scan-modal/scan-modal.component.js +313 -0
- package/esm2015/lib/components/file-manger/components/share-dialog/share-dialog.component.js +294 -0
- package/esm2015/lib/components/file-manger/components/sidepanel/sidepanel.component.js +256 -0
- package/esm2015/lib/components/file-manger/components/template-modal/template-modal.component.js +64 -0
- package/esm2015/lib/components/file-manger/components/transfer-doc/transfer-doc.component.js +71 -0
- package/esm2015/lib/components/file-manger/components/update-modal/update-modal.component.js +358 -0
- package/esm2015/lib/components/file-manger/file-manager.abstract.js +1004 -0
- package/esm2015/lib/components/file-manger/file-manger.module.js +275 -0
- package/esm2015/lib/components/mutiple-dynamic-form-viewer/multiple-dynamic-form-viewer/multiple-dynamic-form-viewer.component.js +51 -0
- package/esm2015/lib/components/mutiple-dynamic-form-viewer/mutiple-dynamic-form-viewer.module.js +30 -0
- package/esm2015/lib/components/permissions/add-permissions-dialog/add-permissions-dialog.component.js +177 -0
- package/esm2015/lib/components/permissions/permission.service.js +118 -0
- package/esm2015/lib/components/permissions/permissions/permissions.component.js +232 -0
- package/esm2015/lib/components/permissions/permissions-template/permissions-template.component.js +117 -0
- package/esm2015/lib/components/permissions/permissions.module.js +71 -0
- package/esm2015/lib/components/select-users-by-department/select-users-by-department.module.js +47 -0
- package/esm2015/lib/components/select-users-by-department/select-users-by-departments/department-management.service.js +27 -0
- package/esm2015/lib/components/select-users-by-department/select-users-by-departments/select-users-by-departments.component.js +116 -0
- package/esm2015/lib/components/user/user/user.component.js +29 -0
- package/esm2015/lib/components/user/user.module.js +30 -0
- package/esm2015/lib/directive/directive.module.js +9 -4
- package/esm2015/lib/directive/drag-and-drop/drag-and-drop.directive.js +46 -0
- package/esm2015/lib/shared/libraryShared.module.js +1 -4
- package/esm2015/lib/shared-services/dialog-mangment.service.js +61 -0
- package/esm2015/lib/shared-services/dynamic-form.service.js +241 -0
- package/esm2015/lib/shared-services/file-manager.adapter.js +74 -0
- package/esm2015/lib/shared-services/file-manager.service.js +741 -0
- package/esm2015/lib/shared-services/global-pdftron.service.js +46 -0
- package/esm2015/lib/shared-services/mainfolder.service.js +157 -0
- package/esm2015/lib/shared-services/publishing-document.service.js +202 -0
- package/esm2015/lib/shared-services/recently-viewed.service.js +57 -0
- package/esm2015/lib/shared-services/shared-docs.service.js +135 -0
- package/esm2015/lib/shared-services/shared-services.module.js +20 -0
- package/esm2015/lib/shared-services/upload-file.service.js +29 -0
- package/esm2015/lib/shared-services/upload-managment.service.js +151 -0
- package/esm2015/lib/shared-services/user.service.js +54 -0
- package/esm2015/public-api.js +64 -1
- package/fesm2015/nuxeo-development-framework.js +7621 -153
- package/fesm2015/nuxeo-development-framework.js.map +1 -1
- package/lib/components/activities-log/activities-log/activities-log.component.d.ts +23 -0
- package/lib/components/activities-log/activities-log/activities-log.service.d.ts +9 -0
- package/lib/components/activities-log/activities-log.module.d.ts +10 -0
- package/lib/components/attachment-item/attachment-item/attachment-item.component.d.ts +21 -0
- package/lib/components/attachment-item/attachment-item.module.d.ts +13 -0
- package/lib/components/attachment-modal/attachment-modal.module.d.ts +12 -0
- package/lib/components/attachment-modal/attachments/attachments.component.d.ts +50 -0
- package/lib/components/confirmation-dialog/confirmation-dialog/confirmation-dialog.component.d.ts +12 -0
- package/lib/components/confirmation-dialog/confirmation-dialog.module.d.ts +10 -0
- package/lib/components/display-suitable-icon/display-suitable-icon/display-suitable-icon.component.d.ts +17 -0
- package/lib/components/display-suitable-icon/display-suitable-icon/icon.service.d.ts +8 -0
- package/lib/components/display-suitable-icon/display-suitable-icon.module.d.ts +8 -0
- package/lib/components/dynamic-fields-renderer/dynamic-fields-renderer/dynamic-fields-renderer.component.d.ts +137 -0
- package/lib/components/dynamic-fields-renderer/dynamic-fields-renderer.module.d.ts +12 -0
- package/lib/components/dynamic-tabs/dynamic-tabs/dynamic-tabs.component.d.ts +13 -0
- package/lib/components/dynamic-tabs/dynamic-tabs.module.d.ts +11 -0
- package/lib/components/file-manger/components/add-to-collection/add-to-collection.component.d.ts +31 -0
- package/lib/components/file-manger/components/copy/copy.component.d.ts +32 -0
- package/lib/components/file-manger/components/create-directory/create-directory.component.d.ts +24 -0
- package/lib/components/file-manger/components/create-modal/create-modal.component.d.ts +108 -0
- package/lib/components/file-manger/components/creation-type/creation-type.component.d.ts +11 -0
- package/lib/components/file-manger/components/delete/delete.component.d.ts +30 -0
- package/lib/components/file-manger/components/folder-modal/folder-modal.component.d.ts +56 -0
- package/lib/components/file-manger/components/loan-request/loan-request.component.d.ts +23 -0
- package/lib/components/file-manger/components/move/move.component.d.ts +32 -0
- package/lib/components/file-manger/components/publish-dialog/publish-dialog.component.d.ts +32 -0
- package/lib/components/file-manger/components/rename/rename.component.d.ts +25 -0
- package/lib/components/file-manger/components/scan-modal/scan-modal.component.d.ts +95 -0
- package/lib/components/file-manger/components/share-dialog/share-dialog.component.d.ts +58 -0
- package/lib/components/file-manger/components/sidepanel/sidepanel.component.d.ts +62 -0
- package/lib/components/file-manger/components/template-modal/template-modal.component.d.ts +34 -0
- package/lib/components/file-manger/components/transfer-doc/transfer-doc.component.d.ts +24 -0
- package/lib/components/file-manger/components/update-modal/update-modal.component.d.ts +194 -0
- package/lib/components/file-manger/file-manager.abstract.d.ts +169 -0
- package/lib/components/file-manger/file-manger.module.d.ts +55 -0
- package/lib/components/mutiple-dynamic-form-viewer/multiple-dynamic-form-viewer/multiple-dynamic-form-viewer.component.d.ts +17 -0
- package/lib/components/mutiple-dynamic-form-viewer/mutiple-dynamic-form-viewer.module.d.ts +10 -0
- package/lib/components/permissions/add-permissions-dialog/add-permissions-dialog.component.d.ts +44 -0
- package/lib/components/permissions/permission.service.d.ts +21 -0
- package/lib/components/permissions/permissions/permissions.component.d.ts +48 -0
- package/lib/components/permissions/permissions-template/permissions-template.component.d.ts +22 -0
- package/lib/components/permissions/permissions.module.d.ts +21 -0
- package/lib/components/select-users-by-department/select-users-by-department.module.d.ts +13 -0
- package/lib/components/select-users-by-department/select-users-by-departments/department-management.service.d.ts +10 -0
- package/lib/components/select-users-by-department/select-users-by-departments/select-users-by-departments.component.d.ts +33 -0
- package/lib/components/user/user/user.component.d.ts +12 -0
- package/lib/components/user/user.module.d.ts +10 -0
- package/lib/directive/directive.module.d.ts +3 -2
- package/lib/directive/drag-and-drop/drag-and-drop.directive.d.ts +11 -0
- package/lib/shared/libraryShared.module.d.ts +1 -1
- package/lib/shared-services/dialog-mangment.service.d.ts +15 -0
- package/lib/shared-services/dynamic-form.service.d.ts +24 -0
- package/lib/shared-services/file-manager.adapter.d.ts +48 -0
- package/lib/shared-services/file-manager.service.d.ts +89 -0
- package/lib/shared-services/global-pdftron.service.d.ts +10 -0
- package/lib/shared-services/mainfolder.service.d.ts +29 -0
- package/lib/shared-services/publishing-document.service.d.ts +25 -0
- package/lib/shared-services/recently-viewed.service.d.ts +17 -0
- package/lib/shared-services/shared-docs.service.d.ts +21 -0
- package/lib/shared-services/shared-services.module.d.ts +7 -0
- package/lib/shared-services/upload-file.service.d.ts +10 -0
- package/lib/shared-services/upload-managment.service.d.ts +72 -0
- package/lib/shared-services/user.service.d.ts +12 -0
- package/package.json +7 -6
- package/public-api.d.ts +61 -0
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
import { Component, Inject, ViewEncapsulation } from '@angular/core';
|
|
2
|
+
import { FormControl, Validators } from '@angular/forms';
|
|
3
|
+
import { MAT_DIALOG_DATA } from '@angular/material/dialog';
|
|
4
|
+
import { combineLatest, of, Subject } from 'rxjs';
|
|
5
|
+
import { switchMap, takeUntil } from 'rxjs/operators';
|
|
6
|
+
import { UserPreferenceValues } from '../../../../Core/services/user/user-preferences.service';
|
|
7
|
+
import { ConfirmationDialogComponent } from '../../../confirmation-dialog/confirmation-dialog/confirmation-dialog.component';
|
|
8
|
+
import * as i0 from "@angular/core";
|
|
9
|
+
import * as i1 from "@angular/material/dialog";
|
|
10
|
+
import * as i2 from "@angular/forms";
|
|
11
|
+
import * as i3 from "../../../../shared-services/shared-docs.service";
|
|
12
|
+
import * as i4 from "../../../custom-toastr/services/custom-toastr.service";
|
|
13
|
+
import * as i5 from "../../../../Core/services/translation/translation.service";
|
|
14
|
+
import * as i6 from "../../../../Core/services/nuxeo/nuxeo.service";
|
|
15
|
+
import * as i7 from "../../../../Core/services/user/user-preferences.service";
|
|
16
|
+
import * as i8 from "../../../select-users-by-department/select-users-by-departments/select-users-by-departments.component";
|
|
17
|
+
import * as i9 from "@ng-select/ng-select";
|
|
18
|
+
import * as i10 from "@angular/material/icon";
|
|
19
|
+
import * as i11 from "../../../avatar/avatar/avatar.component";
|
|
20
|
+
import * as i12 from "../../../../directive/rtl/set-rtl.directive";
|
|
21
|
+
import * as i13 from "@angular/common";
|
|
22
|
+
import * as i14 from "@angular/material/tooltip";
|
|
23
|
+
import * as i15 from "../../../../directive/permissions/permissions.directive";
|
|
24
|
+
import * as i16 from "@ngx-translate/core";
|
|
25
|
+
import * as i17 from "../../../../pipes/localized-date.pipe";
|
|
26
|
+
export class ShareDialogComponent {
|
|
27
|
+
constructor(data, dialogRef, dialog, fb, shared, tosterService, translateService, nuxeoService, userPreferenceService) {
|
|
28
|
+
var _a, _b, _c;
|
|
29
|
+
this.data = data;
|
|
30
|
+
this.dialogRef = dialogRef;
|
|
31
|
+
this.dialog = dialog;
|
|
32
|
+
this.fb = fb;
|
|
33
|
+
this.shared = shared;
|
|
34
|
+
this.tosterService = tosterService;
|
|
35
|
+
this.translateService = translateService;
|
|
36
|
+
this.nuxeoService = nuxeoService;
|
|
37
|
+
this.userPreferenceService = userPreferenceService;
|
|
38
|
+
this.selectedUsers = [];
|
|
39
|
+
this.subscriptions$ = [];
|
|
40
|
+
this.mySharedata = [];
|
|
41
|
+
this.sharedList = [];
|
|
42
|
+
this.sharedListUser = [];
|
|
43
|
+
this.depUsers = [];
|
|
44
|
+
this.allowUsersToShare = [];
|
|
45
|
+
this.forbiddenUsers = [];
|
|
46
|
+
this.isSharedBefore = [];
|
|
47
|
+
this.sameCurrentUser = false;
|
|
48
|
+
this.disabled = true;
|
|
49
|
+
this.rights = [];
|
|
50
|
+
this.copied = false;
|
|
51
|
+
this.shareableUrl = '';
|
|
52
|
+
this.isArabic = false;
|
|
53
|
+
this.onDestroy$ = new Subject();
|
|
54
|
+
if (this.userPreferenceService) {
|
|
55
|
+
this.userPreferenceService
|
|
56
|
+
.select(UserPreferenceValues.Locale)
|
|
57
|
+
.pipe(takeUntil(this.onDestroy$))
|
|
58
|
+
.subscribe((locale) => {
|
|
59
|
+
this.locale = locale;
|
|
60
|
+
(this.locale === 'en') ? this.isArabic = false : this.isArabic = true;
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
this.rights = [
|
|
64
|
+
{
|
|
65
|
+
label: (this.locale === 'en') ? "Read" : "قراءة",
|
|
66
|
+
value: "Read"
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
label: (this.locale === 'en') ? "ReadWrite" : "قراءة و تعديل",
|
|
70
|
+
value: "ReadWrite"
|
|
71
|
+
}
|
|
72
|
+
];
|
|
73
|
+
this.currentUser = (_c = (_b = (_a = this.nuxeoService) === null || _a === void 0 ? void 0 : _a.nuxeoClient) === null || _b === void 0 ? void 0 : _b.user) === null || _c === void 0 ? void 0 : _c.properties.username;
|
|
74
|
+
this.selectedItem = data.selectedItem;
|
|
75
|
+
if (this.selectedItem.entity.type === "Folder" || this.selectedItem.entity.type === "DmsFolder") {
|
|
76
|
+
this.shareableUrl = `${window.location.protocol}//${window.location.host}/dms/files?id=${this.selectedItem.entity.uid}`;
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
this.selectedItemType = this.selectedItem.entity.properties['file:content']['mime-type'];
|
|
80
|
+
if (this.selectedItemType.includes('image')) {
|
|
81
|
+
this.typeToUrl = 'image';
|
|
82
|
+
}
|
|
83
|
+
else if (this.selectedItemType.includes('video')) {
|
|
84
|
+
this.typeToUrl = 'video';
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
this.typeToUrl = 'file';
|
|
88
|
+
}
|
|
89
|
+
this.shareableUrl = `${window.location.protocol}//${window.location.host}/dms/share(viewer:view/${this.typeToUrl}/${this.selectedItem.entity.uid})?location=/share&formType=${this.selectedItem.entity.type}`;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
ngOnInit() {
|
|
93
|
+
this.shareForm = this.fb.group({
|
|
94
|
+
depAnditsUsers: new FormControl('', Validators.required),
|
|
95
|
+
rights: new FormControl('', Validators.required),
|
|
96
|
+
});
|
|
97
|
+
this.shareForm.get('depAnditsUsers').valueChanges.subscribe(res => {
|
|
98
|
+
if (res === null || res === void 0 ? void 0 : res.users) {
|
|
99
|
+
(JSON.stringify(this.selectedUsers) != JSON.stringify(res.users))
|
|
100
|
+
? this.setUser(res.users)
|
|
101
|
+
: null;
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
this.shareForm.reset();
|
|
105
|
+
this.getMyShare();
|
|
106
|
+
}
|
|
107
|
+
removeFromForbiddenArr(event) {
|
|
108
|
+
(this.forbiddenUsers.includes(event.label)) ?
|
|
109
|
+
this.forbiddenUsers.splice(this.forbiddenUsers.indexOf(event.label), 1) : '';
|
|
110
|
+
}
|
|
111
|
+
copy() {
|
|
112
|
+
this.copied = true;
|
|
113
|
+
setTimeout(() => {
|
|
114
|
+
this.copied = false;
|
|
115
|
+
}, 2000);
|
|
116
|
+
}
|
|
117
|
+
setUser(users) {
|
|
118
|
+
this.isSharedBefore = [];
|
|
119
|
+
this.sameCurrentUser = false;
|
|
120
|
+
this.selectedUsers = users;
|
|
121
|
+
this.selectedUsers.forEach((element) => {
|
|
122
|
+
if (element.properties.username === this.currentUser) {
|
|
123
|
+
this.sameCurrentUser = true;
|
|
124
|
+
}
|
|
125
|
+
if (this.sharedListUser.includes(element.properties.username)) {
|
|
126
|
+
this.isSharedBefore.push(element.properties.fullName);
|
|
127
|
+
}
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
setRight(event) {
|
|
131
|
+
(!this.sameCurrentUser && !this.isSharedBefore.length && this.shareForm.get('rights').value) ? this.disabled = false : this.disabled = true;
|
|
132
|
+
}
|
|
133
|
+
close() {
|
|
134
|
+
this.dialogRef.close();
|
|
135
|
+
}
|
|
136
|
+
checkIfCanViewSecret() {
|
|
137
|
+
this.forbiddenUsers = [];
|
|
138
|
+
let arr = [];
|
|
139
|
+
this.selectedUsers.map(element => {
|
|
140
|
+
let context = {
|
|
141
|
+
username: element.properties.username,
|
|
142
|
+
secrecyLevel: this.selectedItem.entity.properties.secrecyLevel
|
|
143
|
+
};
|
|
144
|
+
arr.push(this.shared.canSeeSecretdocs(context).pipe(switchMap((res) => {
|
|
145
|
+
return of(Object.assign({ element }, res));
|
|
146
|
+
})));
|
|
147
|
+
});
|
|
148
|
+
return combineLatest(arr).pipe(switchMap((res) => {
|
|
149
|
+
res.forEach(e => {
|
|
150
|
+
if (!e.canViewSecretFiles) {
|
|
151
|
+
this.forbiddenUsers.push(e.element.properties.fullName);
|
|
152
|
+
}
|
|
153
|
+
});
|
|
154
|
+
return of(this.forbiddenUsers);
|
|
155
|
+
}));
|
|
156
|
+
}
|
|
157
|
+
doShare(users) {
|
|
158
|
+
let context = {
|
|
159
|
+
users: users,
|
|
160
|
+
mode: this.shareForm.get('rights').value
|
|
161
|
+
};
|
|
162
|
+
this.subscriptions$.concat([this.shared.shareDocumentWithUser(context, this.selectedItem.entity.uid).subscribe((res) => {
|
|
163
|
+
if (res)
|
|
164
|
+
this.tosterService.show('success', 'TOASTER.SUCCESS', "TOASTER.share_Doc_success");
|
|
165
|
+
this.depUsers = [];
|
|
166
|
+
this.shareForm.reset();
|
|
167
|
+
this.disabled = true;
|
|
168
|
+
this.getMyShare();
|
|
169
|
+
}, err => {
|
|
170
|
+
this.tosterService.show('error', 'TOASTER.ERROR', 'TOASTER.share_Doc_fail');
|
|
171
|
+
})
|
|
172
|
+
]);
|
|
173
|
+
}
|
|
174
|
+
share() {
|
|
175
|
+
if (this.shareForm.invalid) {
|
|
176
|
+
alert(this.translateService.instant("share.select_user_to_share"));
|
|
177
|
+
}
|
|
178
|
+
else {
|
|
179
|
+
this.allowUsersToShare = [];
|
|
180
|
+
if (this.selectedItem.entity.properties.secrecyLevel
|
|
181
|
+
&& this.selectedItem.entity.properties.secrecyLevel != "Normal") {
|
|
182
|
+
this.checkIfCanViewSecret().subscribe(res => {
|
|
183
|
+
if (!res.length) {
|
|
184
|
+
this.selectedUsers.forEach(element => {
|
|
185
|
+
this.allowUsersToShare.push(element.properties.username);
|
|
186
|
+
});
|
|
187
|
+
this.doShare(this.allowUsersToShare);
|
|
188
|
+
}
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
else {
|
|
192
|
+
this.selectedUsers.forEach(element => {
|
|
193
|
+
this.allowUsersToShare.push(element.properties.username);
|
|
194
|
+
});
|
|
195
|
+
this.doShare(this.allowUsersToShare);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
openDialog(functionToDo, username, sharedMode) {
|
|
200
|
+
let message;
|
|
201
|
+
(functionToDo === "Rem_ALL_shares") ? message = "confirmDialog.Rem_All_shares"
|
|
202
|
+
: message = "confirmDialog.Rem_custom_share";
|
|
203
|
+
const dialogRef = this.dialog.open(ConfirmationDialogComponent, {
|
|
204
|
+
width: '510px',
|
|
205
|
+
data: {
|
|
206
|
+
title: this.translateService.instant("confirmDialog.confirm"),
|
|
207
|
+
message: this.translateService.instant(message),
|
|
208
|
+
confirmButton: `BUTTONS.Remove`,
|
|
209
|
+
cancelButton: "BUTTONS.Cancel"
|
|
210
|
+
},
|
|
211
|
+
disableClose: true,
|
|
212
|
+
});
|
|
213
|
+
// const dialogRef = this.fuseConfirmationService.open(
|
|
214
|
+
// {
|
|
215
|
+
// dismissible: true,
|
|
216
|
+
// title: this.translateService.instant("confirmDialog.confirm"),
|
|
217
|
+
// message: this.translateService.instant(message),
|
|
218
|
+
// actions: {
|
|
219
|
+
// confirm: {
|
|
220
|
+
// show: true,
|
|
221
|
+
// label: this.translateService.instant("BUTTONS.Remove"),
|
|
222
|
+
// color: "warn"
|
|
223
|
+
// },
|
|
224
|
+
// cancel: {
|
|
225
|
+
// show: true,
|
|
226
|
+
// label: this.translateService.instant("BUTTONS.Cancel"),
|
|
227
|
+
// }
|
|
228
|
+
// }
|
|
229
|
+
// }
|
|
230
|
+
// );
|
|
231
|
+
dialogRef.afterClosed().subscribe((result) => {
|
|
232
|
+
if (result) {
|
|
233
|
+
if (functionToDo === "Rem_ALL_shares") {
|
|
234
|
+
this.subscriptions$.concat([this.shared.removeAllSharesforDocs(this.selectedItem.entity.uid).subscribe((res) => {
|
|
235
|
+
if (res) {
|
|
236
|
+
this.tosterService.show('success', 'TOASTER.SUCCESS', "TOASTER.Rm_All_Shares_success");
|
|
237
|
+
this.getMyShare();
|
|
238
|
+
}
|
|
239
|
+
}, err => {
|
|
240
|
+
this.tosterService.show('error', 'TOASTER.ERROR', 'TOASTER.Rm_All_Shares_fail');
|
|
241
|
+
})
|
|
242
|
+
]);
|
|
243
|
+
}
|
|
244
|
+
else {
|
|
245
|
+
let context = {
|
|
246
|
+
user: username,
|
|
247
|
+
mode: sharedMode
|
|
248
|
+
};
|
|
249
|
+
this.subscriptions$.concat([
|
|
250
|
+
this.shared.removeCustomShare(context, this.selectedItem.entity.uid).subscribe((res) => {
|
|
251
|
+
if (res) {
|
|
252
|
+
this.tosterService.show('success', 'TOASTER.SUCCESS', "TOASTER.Rem_custom_share_success");
|
|
253
|
+
this.getMyShare();
|
|
254
|
+
}
|
|
255
|
+
}, err => {
|
|
256
|
+
this.tosterService.show('error', 'TOASTER.ERROR', 'TOASTER.Rem_custom_share_fail');
|
|
257
|
+
})
|
|
258
|
+
]);
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
});
|
|
262
|
+
}
|
|
263
|
+
getMyShare() {
|
|
264
|
+
this.sharedListUser = this.sharedList = [];
|
|
265
|
+
this.subscriptions$.concat([
|
|
266
|
+
this.shared.getSharesByMe(this.selectedItem.entity.uid, true).subscribe((res) => {
|
|
267
|
+
this.sharedList = res;
|
|
268
|
+
if (this.sharedList.length) {
|
|
269
|
+
this.sharedList.forEach(element => {
|
|
270
|
+
this.sharedListUser.push(element.user.properties.username);
|
|
271
|
+
});
|
|
272
|
+
}
|
|
273
|
+
})
|
|
274
|
+
]);
|
|
275
|
+
}
|
|
276
|
+
ngOnDestroy() {
|
|
277
|
+
this.subscriptions$.forEach(sub => sub.unsubscribe());
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
ShareDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0, type: ShareDialogComponent, deps: [{ token: MAT_DIALOG_DATA }, { token: i1.MatDialogRef }, { token: i1.MatDialog }, { token: i2.FormBuilder }, { token: i3.SharedDocsService }, { token: i4.CustomToastrService }, { token: i5.TranslationService }, { token: i6.NuxeoService }, { token: i7.UserPreferencesService }], target: i0.ɵɵFactoryTarget.Component });
|
|
281
|
+
ShareDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.4", type: ShareDialogComponent, selector: "app-share-dialog", ngImport: i0, template: "<form [formGroup]=\"shareForm\" class=\"h-full p-5 overflow-auto\" SetRtl>\r\n\r\n <div class=\"flex flex-col justify-between h-full\">\r\n <!--Form Section-->\r\n <div class=\"add-permsion-wrapper\">\r\n <span class=\"text-gray-900 text-lg\">\r\n {{ \"share.shareDialogTitle\" | translate }}\r\n </span>\r\n <div class=\"mt-5 selectorsWrapper\">\r\n <app-select-users-by-departments\r\n formControlName=\"depAnditsUsers\"\r\n [allowMultipleUsers]= \"true\"\r\n [userLabel]=\"'share.users' | translate\"\r\n [depLabel]=\"'share.Dep' | translate\"\r\n [display]=\"'column'\">\r\n </app-select-users-by-departments>\r\n </div>\r\n <div *ngIf=\"forbiddenUsers.length\" class=\"flex\">\r\n <ng-container *ngFor=\"let p of forbiddenUsers; let i as index\">\r\n <span class=\"text-red-500 text-base\">\r\n {{p}} \r\n </span>\r\n </ng-container>\r\n <span class=\"text-red-500 text-base\">\r\n <p *ngIf=\"forbiddenUsers.length == 1\">\r\n {{ \"share.single_forbidden\" | translate }}\r\n </p>\r\n <p *ngIf=\"forbiddenUsers.length > 1\">\r\n {{ \"share.multi_forbidden\" | translate }}\r\n </p>\r\n </span>\r\n </div>\r\n <div *ngIf=\"sameCurrentUser\">\r\n <span class=\"text-red-500 text-base\">\r\n {{ \"share.shareWithLoggedInUser\" | translate }}\r\n </span>\r\n </div>\r\n <div *ngIf=\"isSharedBefore.length\" class=\"flex\">\r\n <span class=\"text-red-500 text-base\">\r\n {{ \"share.share_exists\" | translate }}\r\n <ng-container *ngFor=\"let p of isSharedBefore\">\r\n {{p}}\r\n </ng-container>\r\n {{ \"share.before\" | translate }}\r\n </span>\r\n </div>\r\n <div class=\"mt-4 rightsSelector\">\r\n <label class=\"text-base font-bold mb-0\">\r\n {{ \"share.Rights\" | translate }}\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <ng-select \r\n [items]=\"rights\" \r\n bindLabel=\"label\"\r\n bindValue=\"value\"\r\n [placeholder]=\"'permission.rightsPlaceholder' | translate\"\r\n formControlName=\"rights\"\r\n (change)=\"setRight($event)\"\r\n >\r\n </ng-select>\r\n </div>\r\n <div *ngIf=\"sharedList.length\" class=\"mt-4\">\r\n <div>\r\n <label class=\"text-base font-bold mb-0\">\r\n {{ \"share.fileUrl\" | translate }}\r\n </label>\r\n <div class=\"flex relative\">\r\n <input \r\n #fileUrl\r\n [value]=\"shareableUrl\"\r\n disabled\r\n class=\"appearance-none block w-full bg-accent-100 text-gray-700 border border-gray-200 rounded py-2.5 px-4 \r\n leading-tight focus:outline-none focus:bg-white focus:border-gray-500\"\r\n type=\"text\"\r\n >\r\n <button class=\"absolute pt-2.5 bg-accent-100\"\r\n [matTooltip] = \"'BUTTONS.COPY' | translate\"\r\n [ngClass]=\"(locale === 'en') ? 'right-2' : 'left-2'\"\r\n [cdkCopyToClipboard]=\"fileUrl.value\"\r\n (click)=\"copy()\">\r\n <mat-icon svgIcon=\"mat_solid:content_copy\" class=\"icon-size-6\"></mat-icon>\r\n </button>\r\n <div *ngIf=\"copied\" class=\"flex absolute justify-around w-24 -mt-10 border \r\n border-red-700 h-7 rounded bg-gray-200\"\r\n [ngClass]=\"(locale === 'en') ? 'right-0' : 'left-0'\">\r\n <div class=\"w-3 h-3 justify-center bg-gray-200 transform rotate-45 border\r\n mt-5 borders-color\">\r\n </div>\r\n <span class=\"absolute font-extralight\">{{ \"share.copied\" | translate }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <!--Shares Section-->\r\n <div *ngIf=\"sharedList.length\">\r\n <div class=\"flex flex-row justify-between h-7 border-b-2 border-accent-100 mt-2\">\r\n <span class=\"text-base font-bold\">\r\n {{ \"share.shares\" | translate }}\r\n </span>\r\n <button mat-icon-button *permission=\"{name: 'canRemoveShare', entity: selectedItem.entity}\"\r\n matTooltip=\"{{'share.Rm_All_shares' | translate}}\" (click)=\"openDialog('Rem_ALL_shares')\">\r\n <mat-icon [svgIcon]=\"'heroicons_outline:trash'\"\r\n [ngClass]=\"(locale === 'en') ? 'mr-2' : 'ml-2'\"></mat-icon>\r\n </button>\r\n </div>\r\n <div class=\"h-52 overflow-y-auto\">\r\n <div class=\"flex flex-row justify-between mt-2.5\">\r\n <span class=\"w-1/2 text-base font-bold\">{{\"share.shareWith\" | translate}}</span>\r\n <span class=\"w-1/4 text-base font-bold\">{{\"share.share_date\" | translate}}</span>\r\n <span class=\"w-1/4 text-base font-bold\">{{\"share.permission\" | translate}}</span>\r\n <span> </span>\r\n </div>\r\n <ng-container *ngFor=\"let d of sharedList\">\r\n <div class=\"flex flex-row justify-between mt-2.5\">\r\n <div class=\"flex flex-row w-1/2\">\r\n <div class=\"flex-0 w-8 h-8 rounded-full overflow-hidden\">\r\n <cts-avatar [user]=\"{\r\n properties: {\r\n firstName: d.user.properties?.firstName,\r\n lastName: d.user.properties?.lastName\r\n }\r\n }\">\r\n </cts-avatar>\r\n </div>\r\n <div class=\"flex flex-col -mt-2 px-2 break-all\">\r\n <span>{{d.user.fullName}}</span>\r\n <span>{{d.user.properties.email}}</span>\r\n </div>\r\n </div>\r\n <div class=\"w-1/4 mt-1.5 break-all px-2.5\">\r\n <span>{{d.sharedDate | localizedDate:\"dd MMMM yyyy\":(isArabic? 'ar-AR' : 'en-US')}}</span>\r\n </div>\r\n <div class=\"w-1/4 mt-1.5 break-all px-4\">\r\n <span>{{\"rights.\" + d.sharedMode | translate}}</span>\r\n </div>\r\n <div class=\"mt-1.5\">\r\n <button mat-icon-button *permission=\"{name: 'canRemoveShare', entity: selectedItem.entity}\"\r\n matTooltip=\"{{'share.Rm_custom_share' | translate}}\"\r\n (click)=\"openDialog('Rem_custom_share',d.user.properties.username,d.sharedMode)\">\r\n <i class=\"ms-Icon ms-Icon--ChromeClose\" aria-hidden=\"true\"\r\n [ngClass]=\"(locale === 'en') ? 'mr-2.5' : 'ml-2.5'\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <!--Buttons Section-->\r\n <div class=\"flex flex-row justify-between mt-2 py-1\">\r\n <button class=\"cancelation-button\" (click)=\"close()\">\r\n {{ \"BUTTONS.Cancel\" | translate }}\r\n </button>\r\n <button class=\"submission-button\" [disabled]=\"disabled\" (click)=\"share()\">\r\n {{ \"share.shareButton\" | translate }}\r\n </button>\r\n </div>\r\n </div>\r\n</form>", styles: [".share-dialog-wrapper .mat-dialog-container{overflow:hidden;padding:0!important}.share-dialog-wrapper .borders-color{--tw-border-opacity: 1;border-bottom-color:rgba(185,28,28,var(--tw-border-opacity))!important;border-right-color:rgba(185,28,28,var(--tw-border-opacity))!important}.share-dialog-wrapper .rightsSelector .ng-select-container .ng-value-container .ng-placeholder{font-size:12px;margin-top:3px}.share-dialog-wrapper .selectorsWrapper .dep-label,.share-dialog-wrapper .selectorsWrapper .users-label{@apply text-base font-bold mb-0;}\n"], components: [{ type: i8.SelectUsersByDepartmentsComponent, selector: "app-select-users-by-departments", inputs: ["display", "depLabel", "userLabel", "allowMultipleUsers"], outputs: ["formChanged"] }, { type: i9.NgSelectComponent, selector: "ng-select", inputs: ["markFirst", "dropdownPosition", "loading", "closeOnSelect", "hideSelected", "selectOnTab", "bufferAmount", "selectableGroup", "selectableGroupAsModel", "searchFn", "trackByFn", "clearOnBackspace", "labelForId", "inputAttrs", "readonly", "searchWhileComposing", "minTermLength", "editableSearchTerm", "keyDownFn", "multiple", "addTag", "searchable", "clearable", "isOpen", "items", "compareWith", "clearSearchOnAdd", "bindLabel", "placeholder", "notFoundText", "typeToSearchText", "addTagText", "loadingText", "clearAllText", "virtualScroll", "openOnEnter", "appendTo", "bindValue", "appearance", "maxSelectedItems", "groupBy", "groupValue", "tabIndex", "typeahead"], outputs: ["blur", "focus", "change", "open", "close", "search", "clear", "add", "remove", "scroll", "scrollToEnd"] }, { type: i10.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i11.AvatarComponent, selector: "cts-avatar", inputs: ["user"] }], directives: [{ type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i12.SetRtlDirective, selector: "[SetRtl]" }, { type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i2.FormControlName, selector: "[formControlName]", inputs: ["disabled", "formControlName", "ngModel"], outputs: ["ngModelChange"] }, { type: i13.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i13.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i14.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltipPosition", "matTooltipDisabled", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { type: i13.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i15.PermissionsDirective, selector: "[permission]", inputs: ["permission"] }], pipes: { "translate": i16.TranslatePipe, "localizedDate": i17.LocalizedDatePipe }, encapsulation: i0.ViewEncapsulation.None });
|
|
282
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0, type: ShareDialogComponent, decorators: [{
|
|
283
|
+
type: Component,
|
|
284
|
+
args: [{
|
|
285
|
+
selector: 'app-share-dialog',
|
|
286
|
+
templateUrl: './share-dialog.component.html',
|
|
287
|
+
styleUrls: ['./share-dialog.component.scss'],
|
|
288
|
+
encapsulation: ViewEncapsulation.None
|
|
289
|
+
}]
|
|
290
|
+
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
291
|
+
type: Inject,
|
|
292
|
+
args: [MAT_DIALOG_DATA]
|
|
293
|
+
}] }, { type: i1.MatDialogRef }, { type: i1.MatDialog }, { type: i2.FormBuilder }, { type: i3.SharedDocsService }, { type: i4.CustomToastrService }, { type: i5.TranslationService }, { type: i6.NuxeoService }, { type: i7.UserPreferencesService }]; } });
|
|
294
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmUtZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL251eGVvLWRldmVsb3BtZW50LWZyYW1ld29yay9zcmMvbGliL2NvbXBvbmVudHMvZmlsZS1tYW5nZXIvY29tcG9uZW50cy9zaGFyZS1kaWFsb2cvc2hhcmUtZGlhbG9nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL251eGVvLWRldmVsb3BtZW50LWZyYW1ld29yay9zcmMvbGliL2NvbXBvbmVudHMvZmlsZS1tYW5nZXIvY29tcG9uZW50cy9zaGFyZS1kaWFsb2cvc2hhcmUtZGlhbG9nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFxQixpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4RixPQUFPLEVBQWUsV0FBVyxFQUFhLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pGLE9BQU8sRUFBRSxlQUFlLEVBQTJCLE1BQU0sMEJBQTBCLENBQUM7QUFFcEYsT0FBTyxFQUFFLGFBQWEsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUNoRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBS3RELE9BQU8sRUFBMEIsb0JBQW9CLEVBQUUsTUFBTSx5REFBeUQsQ0FBQztBQUN2SCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxnRkFBZ0YsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVU3SCxNQUFNLE9BQU8sb0JBQW9CO0lBd0IvQixZQUE0QyxJQUFJLEVBQ3RDLFNBQTZDLEVBQzdDLE1BQWtCLEVBQ2xCLEVBQWUsRUFDZixNQUF5QixFQUN6QixhQUFrQyxFQUNsQyxnQkFBb0MsRUFDcEMsWUFBMEIsRUFD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QUUsQ0FBQywrQkFBK0IsQ0FBQztvQkFDNUMsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7aUJBQ3RDOzswQkF5QmMsTUFBTTsyQkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbmplY3QsIE9uRGVzdHJveSwgT25Jbml0LCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgTUFUX0RJQUxPR19EQVRBLCBNYXREaWFsb2csIE1hdERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcblxyXG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBvZiwgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IHN3aXRjaE1hcCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuaW1wb3J0IHsgQ3VzdG9tVG9hc3RyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2N1c3RvbS10b2FzdHIvc2VydmljZXMvY3VzdG9tLXRvYXN0ci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVHJhbnNsYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vQ29yZS9zZXJ2aWNlcy90cmFuc2xhdGlvbi90cmFuc2xhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTnV4ZW9TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vQ29yZS9zZXJ2aWNlcy9udXhlby9udXhlby5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVXNlclByZWZlcmVuY2VzU2VydmljZSwgVXNlclByZWZlcmVuY2VWYWx1ZXMgfSBmcm9tICcuLi8uLi8uLi8uLi9Db3JlL3NlcnZpY2VzL3VzZXIvdXNlci1wcmVmZXJlbmNlcy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29uZmlybWF0aW9uRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vY29uZmlybWF0aW9uLWRpYWxvZy9jb25maXJtYXRpb24tZGlhbG9nL2NvbmZpcm1hdGlvbi1kaWFsb2cuY29tcG9uZW50JztcclxuaW1wb3J0IHsgU2hhcmVkRG9jc1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zaGFyZWQtc2VydmljZXMvc2hhcmVkLWRvY3Muc2VydmljZSc7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtc2hhcmUtZGlhbG9nJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vc2hhcmUtZGlhbG9nLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9zaGFyZS1kaWFsb2cuY29tcG9uZW50LnNjc3MnXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTaGFyZURpYWxvZ0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuXHJcbiAgc2VsZWN0ZWRJdGVtOiBhbnk7XHJcbiAgc2VsZWN0ZWRJdGVtVHlwZTogYW55O1xyXG4gIHNoYXJlRm9ybTogRm9ybUdyb3VwO1xyXG4gIHNlbGVjdGVkVXNlcnMgPSBbXTtcclxuICBzdWJzY3JpcHRpb25zJDogU3Vic2NyaXB0aW9uW10gPSBbXTtcclxuICBteVNoYXJlZGF0YTogYW55ID0gW107XHJcbiAgc2hhcmVkTGlzdCA9IFtdO1xyXG4gIHNoYXJlZExpc3RVc2VyID0gW107XHJcbiAgZGVwVXNlcnMgPSBbXTtcclxuICBhbGxvd1VzZXJzVG9TaGFyZSA9IFtdO1xyXG4gIGZvcmJpZGRlblVzZXJzID0gW107XHJcbiAgaXNTaGFyZWRCZWZvcmUgPSBbXTtcclxuICBjdXJyZW50VXNlcjogYW55O1xyXG4gIHNhbWVDdXJyZW50VXNlciA9IGZhbHNlO1xyXG4gIGRpc2FibGVkID0gdHJ1ZTtcclxuICByaWdodHMgPSBbXTtcclxuICBjb3BpZWQgPSBmYWxzZTtcclxuICBzaGFyZWFibGVVcmwgPSAnJztcclxuICB0eXBlVG9Vcmw6IGFueTtcclxuICBpc0FyYWJpYyA9IGZhbHNlO1xyXG4gIHByaXZhdGUgb25EZXN0cm95JCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XHJcbiAgbG9jYWxlO1xyXG4gIGNvbnN0cnVjdG9yKEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZGF0YSxcclxuICAgIHByaXZhdGUgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8U2hhcmVEaWFsb2dDb21wb25lbnQ+LFxyXG4gICAgcHJpdmF0ZSBkaWFsb2cgOiBNYXREaWFsb2csXHJcbiAgICBwcml2YXRlIGZiOiBGb3JtQnVpbGRlcixcclxuICAgIHByaXZhdGUgc2hhcmVkOiBTaGFyZWREb2NzU2VydmljZSxcclxuICAgIHByaXZhdGUgdG9zdGVyU2VydmljZTogQ3VzdG9tVG9hc3RyU2VydmljZSxcclxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBudXhlb1NlcnZpY2U6IE51eGVvU2VydmljZSxcclxuICAgIHByaXZhdGUgdXNlclByZWZlcmVuY2VTZXJ2aWNlOiBVc2VyUHJlZmVyZW5jZXNTZXJ2aWNlKSB7XHJcbiAgICBpZiAodGhpcy51c2VyUHJlZmVyZW5jZVNlcnZpY2UpIHtcclxuICAgICAgdGhpcy51c2VyUHJlZmVyZW5jZVNlcnZpY2VcclxuICAgICAgICAuc2VsZWN0KFVzZXJQcmVmZXJlbmNlVmFsdWVzLkxvY2FsZSlcclxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kkKSlcclxuICAgICAgICAuc3Vic2NyaWJlKChsb2NhbGUpID0+IHtcclxuICAgICAgICAgIHRoaXMubG9jYWxlID0gbG9jYWxlO1xyXG4gICAgICAgICAgKHRoaXMubG9jYWxlID09PSAnZW4nKSA/IHRoaXMuaXNBcmFiaWMgPSBmYWxzZSA6IHRoaXMuaXNBcmFiaWMgPSB0cnVlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5yaWdodHMgPSBbXHJcbiAgICAgIHtcclxuICAgICAgICBsYWJlbDogKHRoaXMubG9jYWxlID09PSAnZW4nKSA/IFwiUmVhZFwiIDogXCLZgtix2KfYodipXCIsXHJcbiAgICAgICAgdmFsdWU6IFwiUmVhZFwiXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBsYWJlbDogKHRoaXMubG9jYWxlID09PSAnZW4nKSA/IFwiUmVhZFdyaXRlXCIgOiBcItmC2LHYp9ih2Kkg2Ygg2KrYudiv2YrZhFwiLFxyXG4gICAgICAgIHZhbHVlOiBcIlJlYWRXcml0ZVwiXHJcbiAgICAgIH1cclxuICAgIF07XHJcbiAgICB0aGlzLmN1cnJlbnRVc2VyID0gdGhpcy5udXhlb1NlcnZpY2U/Lm51eGVvQ2xpZW50Py51c2VyPy5wcm9wZXJ0aWVzLnVzZXJuYW1lO1xyXG4gICAgdGhpcy5zZWxlY3RlZEl0ZW0gPSBkYXRhLnNlbGVjdGVkSXRlbTtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkSXRlbS5lbnRpdHkudHlwZSA9PT0gXCJGb2xkZXJcIiB8fCB0aGlzLnNlbGVjdGVkSXRlbS5lbnRpdHkudHlwZSA9PT0gXCJEbXNGb2xkZXJcIikge1xyXG4gICAgICB0aGlzLnNoYXJlYWJsZVVybCA9IGAke3dpbmRvdy5sb2NhdGlvbi5wcm90b2NvbH0vLyR7d2luZG93LmxvY2F0aW9uLmhvc3R9L2Rtcy9maWxlcz9pZD0ke3RoaXMuc2VsZWN0ZWRJdGVtLmVudGl0eS51aWR9YFxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1UeXBlID0gdGhpcy5zZWxlY3RlZEl0ZW0uZW50aXR5LnByb3BlcnRpZXNbJ2ZpbGU6Y29udGVudCddWydtaW1lLXR5cGUnXTtcclxuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRJdGVtVHlwZS5pbmNsdWRlcygnaW1hZ2UnKSkge1xyXG4gICAgICAgIHRoaXMudHlwZVRvVXJsID0gJ2ltYWdlJ1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRJdGVtVHlwZS5pbmNsdWRlcygndmlkZW8nKSkge1xyXG4gICAgICAgIHRoaXMudHlwZVRvVXJsID0gJ3ZpZGVvJ1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMudHlwZVRvVXJsID0gJ2ZpbGUnXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zaGFyZWFibGVVcmwgPSBgJHt3aW5kb3cubG9jYXRpb24ucHJvdG9jb2x9Ly8ke3dpbmRvdy5sb2NhdGlvbi5ob3N0fS9kbXMvc2hhcmUodmlld2VyOnZpZXcvJHt0aGlzLnR5cGVUb1VybH0vJHt0aGlzLnNlbGVjdGVkSXRlbS5lbnRpdHkudWlkfSk/bG9jYXRpb249L3NoYXJlJmZvcm1UeXBlPSR7dGhpcy5zZWxlY3RlZEl0ZW0uZW50aXR5LnR5cGV9YFxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNoYXJlRm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICBkZXBBbmRpdHNVc2VyczogbmV3IEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcclxuICAgICAgcmlnaHRzOiBuZXcgRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMucmVxdWlyZWQpLFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnNoYXJlRm9ybS5nZXQoJ2RlcEFuZGl0c1VzZXJzJykudmFsdWVDaGFuZ2VzLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICBpZiAocmVzPy51c2Vycykge1xyXG4gICAgICAgIChKU09OLnN0cmluZ2lmeSh0aGlzLnNlbGVjdGVkVXNlcnMpICE9IEpTT04uc3RyaW5naWZ5KHJlcy51c2VycykpXHJcbiAgICAgICAgICA/IHRoaXMuc2V0VXNlcihyZXMudXNlcnMpXHJcbiAgICAgICAgICA6IG51bGxcclxuICAgICAgfVxyXG4gICAgfSlcclxuICAgIHRoaXMuc2hhcmVGb3JtLnJlc2V0KCk7XHJcbiAgICB0aGlzLmdldE15U2hhcmUoKTtcclxuICB9XHJcbiAgcmVtb3ZlRnJvbUZvcmJpZGRlbkFycihldmVudCkge1xyXG4gICAgKHRoaXMuZm9yYmlkZGVuVXNlcnMuaW5jbHVkZXMoZXZlbnQubGFiZWwpKSA/XHJcbiAgICAgIHRoaXMuZm9yYmlkZGVuVXNlcnMuc3BsaWNlKHRoaXMuZm9yYmlkZGVuVXNlcnMuaW5kZXhPZihldmVudC5sYWJlbCksIDEpIDogJyc7XHJcbiAgfVxyXG4gIGNvcHkoKSB7XHJcbiAgICB0aGlzLmNvcGllZCA9IHRydWU7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5jb3BpZWQgPSBmYWxzZTtcclxuICAgIH0sIDIwMDApXHJcbiAgfVxyXG4gIHNldFVzZXIodXNlcnMpIHtcclxuICAgIHRoaXMuaXNTaGFyZWRCZWZvcmUgPSBbXTtcclxuICAgIHRoaXMuc2FtZUN1cnJlbnRVc2VyID0gZmFsc2U7XHJcbiAgICB0aGlzLnNlbGVjdGVkVXNlcnMgPSB1c2VycztcclxuICAgIHRoaXMuc2VsZWN0ZWRVc2Vycy5mb3JFYWNoKChlbGVtZW50KSA9PiB7XHJcbiAgICAgIGlmIChlbGVtZW50LnByb3BlcnRpZXMudXNlcm5hbWUgPT09IHRoaXMuY3VycmVudFVzZXIpIHtcclxuICAgICAgICB0aGlzLnNhbWVDdXJyZW50VXNlciA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuc2hhcmVkTGlzdFVzZXIuaW5jbHVkZXMoZWxlbWVudC5wcm9wZXJ0aWVzLnVzZXJuYW1lKSkge1xyXG4gICAgICAgIHRoaXMuaXNTaGFyZWRCZWZvcmUucHVzaChlbGVtZW50LnByb3BlcnRpZXMuZnVsbE5hbWUpXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuICBzZXRSaWdodChldmVudCkge1xyXG4gICAgKCF0aGlzLnNhbWVDdXJyZW50VXNlciAmJiAhdGhpcy5pc1NoYXJlZEJlZm9yZS5sZW5ndGggJiYgdGhpcy5zaGFyZUZvcm0uZ2V0KCdyaWdodHMnKS52YWx1ZSkgPyB0aGlzLmRpc2FibGVkID0gZmFsc2UgOiB0aGlzLmRpc2FibGVkID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGNsb3NlKCkge1xyXG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoKTtcclxuICB9XHJcblxyXG4gIGNoZWNrSWZDYW5WaWV3U2VjcmV0KCkge1xyXG4gICAgdGhpcy5mb3JiaWRkZW5Vc2VycyA9IFtdO1xyXG4gICAgbGV0IGFyciA9IFtdO1xyXG4gICAgdGhpcy5zZWxlY3RlZFVzZXJzLm1hcChlbGVtZW50ID0+IHtcclxuICAgICAgbGV0IGNvbnRleHQgPSB7XHJcbiAgICAgICAgdXNlcm5hbWU6IGVsZW1lbnQucHJvcGVydGllcy51c2VybmFtZSxcclxuICAgICAgICBzZWNyZWN5TGV2ZWw6IHRoaXMuc2VsZWN0ZWRJdGVtLmVudGl0eS5wcm9wZXJ0aWVzLnNlY3JlY3lMZXZlbFxyXG4gICAgICB9XHJcbiAgICAgIGFyci5wdXNoKFxyXG4gICAgICAgIHRoaXMuc2hhcmVkLmNhblNlZVNlY3JldGRvY3MoY29udGV4dCkucGlwZShcclxuICAgICAgICAgIHN3aXRjaE1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIG9mKHsgZWxlbWVudCwgLi4ucmVzIH0pXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIClcclxuICAgICAgKVxyXG4gICAgfSlcclxuICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KGFycikucGlwZShcclxuICAgICAgc3dpdGNoTWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHJlcy5mb3JFYWNoKGUgPT4ge1xyXG4gICAgICAgICAgaWYgKCFlLmNhblZpZXdTZWNyZXRGaWxlcykge1xyXG4gICAgICAgICAgICB0aGlzLmZvcmJpZGRlblVzZXJzLnB1c2goZS5lbGVtZW50LnByb3BlcnRpZXMuZnVsbE5hbWUpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgICByZXR1cm4gb2YodGhpcy5mb3JiaWRkZW5Vc2VycylcclxuICAgICAgfSkpXHJcbiAgfVxyXG4gIGRvU2hhcmUodXNlcnMpIHtcclxuICAgIGxldCBjb250ZXh0ID0ge1xyXG4gICAgICB1c2VyczogdXNlcnMsXHJcbiAgICAgIG1vZGU6IHRoaXMuc2hhcmVGb3JtLmdldCgncmlnaHRzJykudmFsdWVcclxuICAgIH1cclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucyQuY29uY2F0KFt0aGlzLnNoYXJlZC5zaGFyZURvY3VtZW50V2l0aFVzZXIoY29udGV4dCwgdGhpcy5zZWxlY3RlZEl0ZW0uZW50aXR5LnVpZCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICBpZiAocmVzKVxyXG4gICAgICAgIHRoaXMudG9zdGVyU2VydmljZS5zaG93KCdzdWNjZXNzJywgJ1RPQVNURVIuU1VDQ0VTUycsIFwiVE9BU1RFUi5zaGFyZV9Eb2Nfc3VjY2Vzc1wiKTtcclxuICAgICAgdGhpcy5kZXBVc2VycyA9IFtdO1xyXG4gICAgICB0aGlzLnNoYXJlRm9ybS5yZXNldCgpO1xyXG4gICAgICB0aGlzLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5nZXRNeVNoYXJlKCk7XHJcbiAgICB9LCBlcnIgPT4ge1xyXG4gICAgICB0aGlzLnRvc3RlclNlcnZpY2Uuc2hvdygnZXJyb3InLCAnVE9BU1RFUi5FUlJPUicsICdUT0FTVEVSLnNoYXJlX0RvY19mYWlsJyk7XHJcbiAgICB9KVxyXG4gICAgXSlcclxuICB9XHJcblxyXG4gIHNoYXJlKCkge1xyXG4gICAgaWYgKHRoaXMuc2hhcmVGb3JtLmludmFsaWQpIHtcclxuICAgICAgYWxlcnQodGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoXCJzaGFyZS5zZWxlY3RfdXNlcl90b19zaGFyZVwiKSlcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLmFsbG93VXNlcnNUb1NoYXJlID0gW107XHJcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkSXRlbS5lbnRpdHkucHJvcGVydGllcy5zZWNyZWN5TGV2ZWxcclxuICAgICAgICAmJiB0aGlzLnNlbGVjdGVkSXRlbS5lbnRpdHkucHJvcGVydGllcy5zZWNyZWN5TGV2ZWwgIT0gXCJOb3JtYWxcIikge1xyXG4gICAgICAgIHRoaXMuY2hlY2tJZkNhblZpZXdTZWNyZXQoKS5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgICAgIGlmICghcmVzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVXNlcnMuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLmFsbG93VXNlcnNUb1NoYXJlLnB1c2goZWxlbWVudC5wcm9wZXJ0aWVzLnVzZXJuYW1lKVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdGhpcy5kb1NoYXJlKHRoaXMuYWxsb3dVc2Vyc1RvU2hhcmUpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkVXNlcnMuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgICAgIHRoaXMuYWxsb3dVc2Vyc1RvU2hhcmUucHVzaChlbGVtZW50LnByb3BlcnRpZXMudXNlcm5hbWUpXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5kb1NoYXJlKHRoaXMuYWxsb3dVc2Vyc1RvU2hhcmUpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9wZW5EaWFsb2coZnVuY3Rpb25Ub0RvLCB1c2VybmFtZT8sIHNoYXJlZE1vZGU/KSB7XHJcbiAgICBsZXQgbWVzc2FnZTogYW55O1xyXG4gICAgKGZ1bmN0aW9uVG9EbyA9PT0gXCJSZW1fQUxMX3NoYXJlc1wiKSA/IG1lc3NhZ2UgPSBcImNvbmZpcm1EaWFsb2cuUmVtX0FsbF9zaGFyZXNcIlxyXG4gICAgICA6IG1lc3NhZ2UgPSBcImNvbmZpcm1EaWFsb2cuUmVtX2N1c3RvbV9zaGFyZVwiO1xyXG4gICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKENvbmZpcm1hdGlvbkRpYWxvZ0NvbXBvbmVudCAsIHtcclxuICAgICAgd2lkdGg6ICc1MTBweCcsXHJcbiAgICAgIGRhdGE6IHtcclxuICAgICAgICAgIHRpdGxlOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcImNvbmZpcm1EaWFsb2cuY29uZmlybVwiKSxcclxuICAgICAgICAgIG1lc3NhZ2U6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KG1lc3NhZ2UpLFxyXG4gICAgICAgICAgY29uZmlybUJ1dHRvbiA6IGBCVVRUT05TLlJlbW92ZWAsXHJcbiAgICAgICAgICBjYW5jZWxCdXR0b24gOiBcIkJVVFRPTlMuQ2FuY2VsXCJcclxuICAgICAgfSxcclxuICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxyXG4gICAgfSlcclxuICAgIC8vIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZnVzZUNvbmZpcm1hdGlvblNlcnZpY2Uub3BlbihcclxuICAgIC8vICAge1xyXG4gICAgLy8gICAgIGRpc21pc3NpYmxlOiB0cnVlLFxyXG4gICAgLy8gICAgIHRpdGxlOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcImNvbmZpcm1EaWFsb2cuY29uZmlybVwiKSxcclxuICAgIC8vICAgICBtZXNzYWdlOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChtZXNzYWdlKSxcclxuICAgIC8vICAgICBhY3Rpb25zOiB7XHJcbiAgICAvLyAgICAgICBjb25maXJtOiB7XHJcbiAgICAvLyAgICAgICAgIHNob3c6IHRydWUsXHJcbiAgICAvLyAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcIkJVVFRPTlMuUmVtb3ZlXCIpLFxyXG4gICAgLy8gICAgICAgICBjb2xvcjogXCJ3YXJuXCJcclxuICAgIC8vICAgICAgIH0sXHJcbiAgICAvLyAgICAgICBjYW5jZWw6IHtcclxuICAgIC8vICAgICAgICAgc2hvdzogdHJ1ZSxcclxuICAgIC8vICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KFwiQlVUVE9OUy5DYW5jZWxcIiksXHJcbiAgICAvLyAgICAgICB9XHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gICB9XHJcbiAgICAvLyApO1xyXG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgIGlmIChmdW5jdGlvblRvRG8gPT09IFwiUmVtX0FMTF9zaGFyZXNcIikge1xyXG4gICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zJC5jb25jYXQoW3RoaXMuc2hhcmVkLnJlbW92ZUFsbFNoYXJlc2ZvckRvY3ModGhpcy5zZWxlY3RlZEl0ZW0uZW50aXR5LnVpZCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy50b3N0ZXJTZXJ2aWNlLnNob3coJ3N1Y2Nlc3MnLCAnVE9BU1RFUi5TVUNDRVNTJywgXCJUT0FTVEVSLlJtX0FsbF9TaGFyZXNfc3VjY2Vzc1wiKTtcclxuICAgICAgICAgICAgICB0aGlzLmdldE15U2hhcmUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSwgZXJyID0+IHtcclxuICAgICAgICAgICAgdGhpcy50b3N0ZXJTZXJ2aWNlLnNob3coJ2Vycm9yJywgJ1RPQVNURVIuRVJST1InLCAnVE9BU1RFUi5SbV9BbGxfU2hhcmVzX2ZhaWwnKTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICBdKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBsZXQgY29udGV4dCA9IHtcclxuICAgICAgICAgICAgdXNlcjogdXNlcm5hbWUsXHJcbiAgICAgICAgICAgIG1vZGU6IHNoYXJlZE1vZGVcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucyQuY29uY2F0KFtcclxuICAgICAgICAgICAgdGhpcy5zaGFyZWQucmVtb3ZlQ3VzdG9tU2hhcmUoY29udGV4dCwgdGhpcy5zZWxlY3RlZEl0ZW0uZW50aXR5LnVpZCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChyZXMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudG9zdGVyU2VydmljZS5zaG93KCdzdWNjZXNzJywgJ1RPQVNURVIuU1VDQ0VTUycsIFwiVE9BU1RFUi5SZW1fY3VzdG9tX3NoYXJlX3N1Y2Nlc3NcIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldE15U2hhcmUoKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sIGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy50b3N0ZXJTZXJ2aWNlLnNob3coJ2Vycm9yJywgJ1RPQVNURVIuRVJST1InLCAnVE9BU1RFUi5SZW1fY3VzdG9tX3NoYXJlX2ZhaWwnKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgIF0pXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldE15U2hhcmUoKSB7XHJcbiAgICB0aGlzLnNoYXJlZExpc3RVc2VyID0gdGhpcy5zaGFyZWRMaXN0ID0gW107XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMkLmNvbmNhdChbXHJcbiAgICAgIHRoaXMuc2hhcmVkLmdldFNoYXJlc0J5TWUodGhpcy5zZWxlY3RlZEl0ZW0uZW50aXR5LnVpZCwgdHJ1ZSkuc3Vic2NyaWJlKChyZXMpID0+IHtcclxuICAgICAgICB0aGlzLnNoYXJlZExpc3QgPSByZXM7XHJcbiAgICAgICAgaWYgKHRoaXMuc2hhcmVkTGlzdC5sZW5ndGgpIHtcclxuICAgICAgICAgIHRoaXMuc2hhcmVkTGlzdC5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnNoYXJlZExpc3RVc2VyLnB1c2goZWxlbWVudC51c2VyLnByb3BlcnRpZXMudXNlcm5hbWUpXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIF0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMkLmZvckVhY2goc3ViID0+IHN1Yi51bnN1YnNjcmliZSgpKTtcclxuICB9XHJcbn1cclxuIiwiPGZvcm0gW2Zvcm1Hcm91cF09XCJzaGFyZUZvcm1cIiBjbGFzcz1cImgtZnVsbCBwLTUgb3ZlcmZsb3ctYXV0b1wiIFNldFJ0bD5cclxuXHJcbiAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wganVzdGlmeS1iZXR3ZWVuIGgtZnVsbFwiPlxyXG4gICAgPCEtLUZvcm0gU2VjdGlvbi0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImFkZC1wZXJtc2lvbi13cmFwcGVyXCI+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1ncmF5LTkwMCB0ZXh0LWxnXCI+XHJcbiAgICAgICAge3sgXCJzaGFyZS5zaGFyZURpYWxvZ1RpdGxlXCIgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgPC9zcGFuPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibXQtNSBzZWxlY3RvcnNXcmFwcGVyXCI+XHJcbiAgICAgICAgPGFwcC1zZWxlY3QtdXNlcnMtYnktZGVwYXJ0bWVudHNcclxuICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImRlcEFuZGl0c1VzZXJzXCJcclxuICAgICAgICAgIFthbGxvd011bHRpcGxlVXNlcnNdPSBcInRydWVcIlxyXG4gICAgICAgICAgW3VzZXJMYWJlbF09XCInc2hhcmUudXNlcnMnICB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICBbZGVwTGFiZWxdPVwiJ3NoYXJlLkRlcCcgIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgIFtkaXNwbGF5XT1cIidjb2x1bW4nXCI+XHJcbiAgICAgICAgPC9hcHAtc2VsZWN0LXVzZXJzLWJ5LWRlcGFydG1lbnRzPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiAqbmdJZj1cImZvcmJpZGRlblVzZXJzLmxlbmd0aFwiIGNsYXNzPVwiZmxleFwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHAgb2YgZm9yYmlkZGVuVXNlcnM7IGxldCBpIGFzIGluZGV4XCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtcmVkLTUwMCB0ZXh0LWJhc2VcIj5cclxuICAgICAgICAgICAge3twfX0mbmJzcDtcclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtcmVkLTUwMCB0ZXh0LWJhc2VcIj5cclxuICAgICAgICAgICA8cCAqbmdJZj1cImZvcmJpZGRlblVzZXJzLmxlbmd0aCA9PSAxXCI+XHJcbiAgICAgICAgICAgIHt7IFwic2hhcmUuc2luZ2xlX2ZvcmJpZGRlblwiIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgIDxwICpuZ0lmPVwiZm9yYmlkZGVuVXNlcnMubGVuZ3RoID4gMVwiPlxyXG4gICAgICAgICAgICB7eyBcInNoYXJlLm11bHRpX2ZvcmJpZGRlblwiIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgPC9wPlxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJzYW1lQ3VycmVudFVzZXJcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtcmVkLTUwMCB0ZXh0LWJhc2VcIj5cclxuICAgICAgICAgIHt7IFwic2hhcmUuc2hhcmVXaXRoTG9nZ2VkSW5Vc2VyXCIgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2ICpuZ0lmPVwiaXNTaGFyZWRCZWZvcmUubGVuZ3RoXCIgY2xhc3M9XCJmbGV4XCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtcmVkLTUwMCB0ZXh0LWJhc2VcIj5cclxuICAgICAgICAgICAge3sgXCJzaGFyZS5zaGFyZV9leGlzdHNcIiB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBwIG9mIGlzU2hhcmVkQmVmb3JlXCI+XHJcbiAgICAgICAgICAgICAge3twfX1cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIHt7IFwic2hhcmUuYmVmb3JlXCIgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtdC00IHJpZ2h0c1NlbGVjdG9yXCI+XHJcbiAgICAgICAgPGxhYmVsIGNsYXNzPVwidGV4dC1iYXNlIGZvbnQtYm9sZCBtYi0wXCI+XHJcbiAgICAgICAgICB7eyBcInNoYXJlLlJpZ2h0c1wiIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+Kjwvc3Bhbj5cclxuICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgIDxuZy1zZWxlY3QgXHJcbiAgICAgICAgICBbaXRlbXNdPVwicmlnaHRzXCIgXHJcbiAgICAgICAgICBiaW5kTGFiZWw9XCJsYWJlbFwiXHJcbiAgICAgICAgICBiaW5kVmFsdWU9XCJ2YWx1ZVwiXHJcbiAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ3Blcm1pc3Npb24ucmlnaHRzUGxhY2Vob2xkZXInIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInJpZ2h0c1wiXHJcbiAgICAgICAgICAoY2hhbmdlKT1cInNldFJpZ2h0KCRldmVudClcIlxyXG4gICAgICAgID5cclxuICAgICAgICA8L25nLXNlbGVjdD5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJzaGFyZWRMaXN0Lmxlbmd0aFwiIGNsYXNzPVwibXQtNFwiPlxyXG4gICAgICAgIDxkaXY+XHJcbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ0ZXh0LWJhc2UgZm9udC1ib2xkIG1iLTBcIj5cclxuICAgICAgICAgICAge3sgXCJzaGFyZS5maWxlVXJsXCIgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCByZWxhdGl2ZVwiPlxyXG4gICAgICAgICAgICA8aW5wdXQgXHJcbiAgICAgICAgICAgICAgI2ZpbGVVcmxcclxuICAgICAgICAgICAgICBbdmFsdWVdPVwic2hhcmVhYmxlVXJsXCJcclxuICAgICAgICAgICAgICBkaXNhYmxlZFxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiYXBwZWFyYW5jZS1ub25lIGJsb2NrIHctZnVsbCAgYmctYWNjZW50LTEwMCB0ZXh0LWdyYXktNzAwIGJvcmRlciBib3JkZXItZ3JheS0yMDAgcm91bmRlZCBweS0yLjUgcHgtNCBcclxuICAgICAgICAgICAgICBsZWFkaW5nLXRpZ2h0IGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpiZy13aGl0ZSBmb2N1czpib3JkZXItZ3JheS01MDBcIlxyXG4gICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYWJzb2x1dGUgcHQtMi41IGJnLWFjY2VudC0xMDBcIlxyXG4gICAgICAgICAgICAgIFttYXRUb29sdGlwXSA9IFwiJ0JVVFRPTlMuQ09QWScgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIihsb2NhbGUgPT09ICdlbicpICA/ICdyaWdodC0yJyA6ICdsZWZ0LTInXCJcclxuICAgICAgICAgICAgICBbY2RrQ29weVRvQ2xpcGJvYXJkXT1cImZpbGVVcmwudmFsdWVcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJjb3B5KClcIj5cclxuICAgICAgICAgICAgICA8bWF0LWljb24gc3ZnSWNvbj1cIm1hdF9zb2xpZDpjb250ZW50X2NvcHlcIiBjbGFzcz1cImljb24tc2l6ZS02XCI+PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjb3BpZWRcIiBjbGFzcz1cImZsZXggYWJzb2x1dGUganVzdGlmeS1hcm91bmQgdy0yNCAtbXQtMTAgYm9yZGVyIFxyXG4gICAgICAgICAgICBib3JkZXItcmVkLTcwMCBoLTcgcm91bmRlZCBiZy1ncmF5LTIwMFwiXHJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIihsb2NhbGUgPT09ICdlbicpICA/ICdyaWdodC0wJyA6ICdsZWZ0LTAnXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctMyBoLTMganVzdGlmeS1jZW50ZXIgYmctZ3JheS0yMDAgdHJhbnNmb3JtIHJvdGF0ZS00NSBib3JkZXJcclxuICAgICAgICAgICAgICAgbXQtNSBib3JkZXJzLWNvbG9yXCI+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhYnNvbHV0ZSBmb250LWV4dHJhbGlnaHRcIj57eyBcInNoYXJlLmNvcGllZFwiIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLVNoYXJlcyBTZWN0aW9uLS0+XHJcbiAgICA8ZGl2ICpuZ0lmPVwic2hhcmVkTGlzdC5sZW5ndGhcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cganVzdGlmeS1iZXR3ZWVuIGgtNyBib3JkZXItYi0yIGJvcmRlci1hY2NlbnQtMTAwIG10LTJcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtYmFzZSBmb250LWJvbGRcIj5cclxuICAgICAgICAgIHt7IFwic2hhcmUuc2hhcmVzXCIgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKnBlcm1pc3Npb249XCJ7bmFtZTogJ2NhblJlbW92ZVNoYXJlJywgZW50aXR5OiBzZWxlY3RlZEl0ZW0uZW50aXR5fVwiXHJcbiAgICAgICAgICBtYXRUb29sdGlwPVwie3snc2hhcmUuUm1fQWxsX3NoYXJlcycgfCB0cmFuc2xhdGV9fVwiIChjbGljayk9XCJvcGVuRGlhbG9nKCdSZW1fQUxMX3NoYXJlcycpXCI+XHJcbiAgICAgICAgICA8bWF0LWljb24gW3N2Z0ljb25dPVwiJ2hlcm9pY29uc19vdXRsaW5lOnRyYXNoJ1wiXHJcbiAgICAgICAgICBbbmdDbGFzc109XCIobG9jYWxlID09PSAnZW4nKSAgPyAnbXItMicgOiAnbWwtMidcIj48L21hdC1pY29uPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImgtNTIgb3ZlcmZsb3cteS1hdXRvXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cganVzdGlmeS1iZXR3ZWVuIG10LTIuNVwiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ3LTEvMiB0ZXh0LWJhc2UgZm9udC1ib2xkXCI+e3tcInNoYXJlLnNoYXJlV2l0aFwiIHwgdHJhbnNsYXRlfX08L3NwYW4+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInctMS80IHRleHQtYmFzZSBmb250LWJvbGRcIj57e1wic2hhcmUuc2hhcmVfZGF0ZVwiIHwgdHJhbnNsYXRlfX08L3NwYW4+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInctMS80IHRleHQtYmFzZSBmb250LWJvbGRcIj57e1wic2hhcmUucGVybWlzc2lvblwiIHwgdHJhbnNsYXRlfX08L3NwYW4+XHJcbiAgICAgICAgICA8c3Bhbj4mbmJzcDs8L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZCBvZiBzaGFyZWRMaXN0XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWJldHdlZW4gbXQtMi41XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IHctMS8yXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgtMCB3LTggaC04IHJvdW5kZWQtZnVsbCBvdmVyZmxvdy1oaWRkZW5cIj5cclxuICAgICAgICAgICAgICAgIDxjdHMtYXZhdGFyIFt1c2VyXT1cIntcclxuICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcclxuICAgICAgICAgICAgICAgICAgZmlyc3ROYW1lOiBkLnVzZXIucHJvcGVydGllcz8uZmlyc3ROYW1lLFxyXG4gICAgICAgICAgICAgICAgICBsYXN0TmFtZTogZC51c2VyLnByb3BlcnRpZXM/Lmxhc3ROYW1lXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVwiPlxyXG4gICAgICAgICAgICAgICAgPC9jdHMtYXZhdGFyPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIC1tdC0yIHB4LTIgYnJlYWstYWxsXCI+XHJcbiAgICAgICAgICAgICAgICA8c3Bhbj57e2QudXNlci5mdWxsTmFtZX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4+e3tkLnVzZXIucHJvcGVydGllcy5lbWFpbH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctMS80IG10LTEuNSBicmVhay1hbGwgcHgtMi41XCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4+e3tkLnNoYXJlZERhdGUgIHwgbG9jYWxpemVkRGF0ZTpcImRkIE1NTU0geXl5eVwiOihpc0FyYWJpYz8gJ2FyLUFSJyA6ICdlbi1VUycpfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0xLzQgbXQtMS41IGJyZWFrLWFsbCBweC00XCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4+e3tcInJpZ2h0cy5cIiArIGQuc2hhcmVkTW9kZSB8IHRyYW5zbGF0ZX19PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTEuNVwiPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uICpwZXJtaXNzaW9uPVwie25hbWU6ICdjYW5SZW1vdmVTaGFyZScsIGVudGl0eTogc2VsZWN0ZWRJdGVtLmVudGl0eX1cIlxyXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cInt7J3NoYXJlLlJtX2N1c3RvbV9zaGFyZScgfCB0cmFuc2xhdGV9fVwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib3BlbkRpYWxvZygnUmVtX2N1c3RvbV9zaGFyZScsZC51c2VyLnByb3BlcnRpZXMudXNlcm5hbWUsZC5zaGFyZWRNb2RlKVwiPlxyXG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtcy1JY29uIG1zLUljb24tLUNocm9tZUNsb3NlXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIihsb2NhbGUgPT09ICdlbicpICA/ICdtci0yLjUnIDogJ21sLTIuNSdcIj48L2k+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tQnV0dG9ucyBTZWN0aW9uLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWJldHdlZW4gbXQtMiBweS0xXCI+XHJcbiAgICAgIDxidXR0b24gY2xhc3M9XCJjYW5jZWxhdGlvbi1idXR0b25cIiAoY2xpY2spPVwiY2xvc2UoKVwiPlxyXG4gICAgICAgIHt7IFwiQlVUVE9OUy5DYW5jZWxcIiB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiBjbGFzcz1cInN1Ym1pc3Npb24tYnV0dG9uXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCIgKGNsaWNrKT1cInNoYXJlKClcIj5cclxuICAgICAgICB7eyBcInNoYXJlLnNoYXJlQnV0dG9uXCIgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9mb3JtPiJdfQ==
|