nuxeo-development-framework 4.1.3 → 4.1.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 +510 -433
- package/bundles/nuxeo-development-framework.umd.js.map +1 -1
- package/esm2015/lib/components/dynamic-form/components/department-form/department-form.component.js +28 -29
- package/esm2015/lib/components/dynamic-form/dynamic-form.module.js +13 -10
- package/esm2015/lib/components/file-manger/components/add-to-collection/add-to-collection.component.js +58 -42
- package/esm2015/lib/components/file-manger/components/scan-modal/scan-modal.component.js +99 -66
- package/esm2015/lib/components/permissions/add-permissions-dialog/add-permissions-dialog.component.js +107 -90
- package/esm2015/lib/components/permissions/permissions.module.js +23 -7
- package/esm2015/lib/shared/components/nuxeo-dialog/nuxeo.dialog.js +21 -21
- package/fesm2015/nuxeo-development-framework.js +334 -259
- package/fesm2015/nuxeo-development-framework.js.map +1 -1
- package/lib/components/dynamic-form/components/department-form/department-form.component.d.ts +4 -4
- package/lib/components/dynamic-form/dynamic-form.module.d.ts +2 -1
- package/lib/components/file-manger/components/add-to-collection/add-to-collection.component.d.ts +11 -5
- package/lib/components/file-manger/components/scan-modal/scan-modal.component.d.ts +9 -8
- package/lib/components/permissions/add-permissions-dialog/add-permissions-dialog.component.d.ts +8 -6
- package/lib/components/permissions/permissions.module.d.ts +2 -1
- package/lib/shared/components/nuxeo-dialog/nuxeo.dialog.d.ts +5 -5
- package/package.json +1 -1
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { Component, Inject } from '@angular/core';
|
|
2
2
|
import { Validators } from '@angular/forms';
|
|
3
3
|
import { MAT_DIALOG_DATA } from '@angular/material/dialog';
|
|
4
|
+
import { of } from 'rxjs';
|
|
4
5
|
import * as moment from 'moment';
|
|
6
|
+
import { BaseDialogComponent } from '../../../../shared/components/base/base-dialog.component';
|
|
5
7
|
import * as i0 from "@angular/core";
|
|
6
8
|
import * as i1 from "@angular/material/dialog";
|
|
7
9
|
import * as i2 from "../../../../shared-services/upload-managment.service";
|
|
@@ -17,15 +19,17 @@ import * as i11 from "../../../../core/services/nuxeo/nuxeo.service";
|
|
|
17
19
|
import * as i12 from "../../../../shared-services/user.service";
|
|
18
20
|
import * as i13 from "../../../../configuration/app-config.service";
|
|
19
21
|
import * as i14 from "../../../documents/components/document-scan/document-scan.service";
|
|
20
|
-
import * as i15 from "
|
|
21
|
-
import * as i16 from "
|
|
22
|
-
import * as i17 from "../../../
|
|
23
|
-
import * as i18 from "../../../dynamic-
|
|
24
|
-
import * as i19 from "
|
|
25
|
-
import * as i20 from "
|
|
26
|
-
import * as i21 from "
|
|
27
|
-
|
|
28
|
-
|
|
22
|
+
import * as i15 from "../../../../shared/components/nuxeo-dialog/nuxeo.dialog";
|
|
23
|
+
import * as i16 from "@angular/material/progress-bar";
|
|
24
|
+
import * as i17 from "../../../documents/components/document-scan/document-scan.component";
|
|
25
|
+
import * as i18 from "../../../dynamic-fields-renderer/dynamic-fields-renderer/dynamic-fields-renderer.component";
|
|
26
|
+
import * as i19 from "../../../dynamic-form/components/dynamic-form/dynamic-form.component";
|
|
27
|
+
import * as i20 from "@angular/common";
|
|
28
|
+
import * as i21 from "../../../../directive/rtl/set-rtl.directive";
|
|
29
|
+
import * as i22 from "@ngx-translate/core";
|
|
30
|
+
export class ScanModalComponent extends BaseDialogComponent {
|
|
31
|
+
constructor(data, dialogRef, uploadMangmentService, dialogMangmentService, fileMangerService, tosterService, formBuilder, dynamicFormService, dateHelperService, adapter, translationService, nuxeoService, userService, appConfService, envirnoment, documentScanService, injector) {
|
|
32
|
+
super(injector);
|
|
29
33
|
this.data = data;
|
|
30
34
|
this.dialogRef = dialogRef;
|
|
31
35
|
this.uploadMangmentService = uploadMangmentService;
|
|
@@ -56,28 +60,41 @@ export class ScanModalComponent {
|
|
|
56
60
|
};
|
|
57
61
|
this.temporaryDyanmicData = {};
|
|
58
62
|
this.showRenderer = false;
|
|
59
|
-
this.isArabic = false;
|
|
60
63
|
this.showStaticForm = false;
|
|
61
64
|
this.usingExtraFields = false; // flage to switch between static form types
|
|
65
|
+
this.minimizDialog = () => {
|
|
66
|
+
this.documentScanService.onMinimizing.emit(true);
|
|
67
|
+
this.uploadMangmentService.uploadedFilesStatus.uploadedFiles.push(Object.assign({}, this.selectedFile));
|
|
68
|
+
this.removeSubscription();
|
|
69
|
+
this.dialogRef.close(true);
|
|
70
|
+
return of(null);
|
|
71
|
+
};
|
|
72
|
+
this.createDocument = () => {
|
|
73
|
+
this.documentScanService.onMinimizing.emit(true);
|
|
74
|
+
this.uploadMangmentService.uploadedFilesStatus.uploadedFiles.push(Object.assign({}, this.selectedFile));
|
|
75
|
+
this.scannerUploadButton.click();
|
|
76
|
+
this.dialogRef.close(true);
|
|
77
|
+
return of(null);
|
|
78
|
+
};
|
|
62
79
|
this.myEnvironment = this.envirnoment;
|
|
63
80
|
}
|
|
64
81
|
ngOnInit() {
|
|
65
|
-
this.langSubscription = this.translationService.isArabic.subscribe(res => {
|
|
66
|
-
this.isArabic = res;
|
|
67
|
-
});
|
|
68
82
|
this.createWhenFinishMode = false;
|
|
69
83
|
this.fileType = this.dialogMangmentService.fileType;
|
|
70
84
|
this.source = this.dialogMangmentService.addingFrom;
|
|
71
|
-
this.fileMangerService
|
|
72
|
-
|
|
73
|
-
|
|
85
|
+
this.fileMangerService
|
|
86
|
+
.getFileSchemas(this.fileType.type)
|
|
87
|
+
.subscribe((schemas) => {
|
|
88
|
+
schemas.map((item) => {
|
|
89
|
+
if (item.name === 'generaldocument') {
|
|
74
90
|
this.usingExtraFields = true;
|
|
75
91
|
}
|
|
76
92
|
});
|
|
77
93
|
this.initiatfileForm();
|
|
78
94
|
//if starting from filemnager then i have fixed file type for all attachmetn and single dynaimc form type
|
|
79
95
|
if (this.source === 'fileManger') {
|
|
80
|
-
if (this.uploadMangmentService.uploadedFilesStatus.uploadedFiles
|
|
96
|
+
if (this.uploadMangmentService.uploadedFilesStatus.uploadedFiles
|
|
97
|
+
.length > 0) {
|
|
81
98
|
setTimeout(() => {
|
|
82
99
|
this.selectedFile = Object.assign({}, this.uploadMangmentService.uploadedFilesStatus.uploadedFiles.shift());
|
|
83
100
|
this.temporaryDyanmicData = this.selectedFile.dynamicData.data;
|
|
@@ -99,20 +116,24 @@ export class ScanModalComponent {
|
|
|
99
116
|
}, 3000);
|
|
100
117
|
}
|
|
101
118
|
else {
|
|
102
|
-
this.selectedFile.dynamicForm =
|
|
119
|
+
this.selectedFile.dynamicForm =
|
|
120
|
+
this.dialogMangmentService.storedDynamicForm;
|
|
103
121
|
this.showRenderer = true;
|
|
104
122
|
this.openSubscriptions();
|
|
105
123
|
}
|
|
106
124
|
}
|
|
107
125
|
});
|
|
108
|
-
this.uploadStartSubscription =
|
|
109
|
-
this.
|
|
110
|
-
|
|
111
|
-
|
|
126
|
+
this.uploadStartSubscription =
|
|
127
|
+
this.documentScanService.uploadStart.subscribe((res) => {
|
|
128
|
+
this.uploadMangmentService.uploadedFilesStatus.uploadInProgress = res;
|
|
129
|
+
});
|
|
130
|
+
this.fileChangeSubscription = this.documentScanService.fileChange.subscribe((event) => {
|
|
112
131
|
//console.log(event);
|
|
113
132
|
this.selectedFile.file = event;
|
|
114
133
|
let payLoad = this.constructPayLoad(this.selectedFile);
|
|
115
|
-
this.fileMangerService
|
|
134
|
+
this.fileMangerService
|
|
135
|
+
.createFile(payLoad, this.fileMangerService.selectedFolderId)
|
|
136
|
+
.subscribe((res) => {
|
|
116
137
|
if (res['status'] && res['status'] === 'failed') {
|
|
117
138
|
this.uploadMangmentService.scanCreationFailed = true;
|
|
118
139
|
this.tosterService.show('error', 'TOASTER.ERROR', 'TOASTER.UPLOAD_ERROR');
|
|
@@ -120,7 +141,7 @@ export class ScanModalComponent {
|
|
|
120
141
|
}
|
|
121
142
|
else {
|
|
122
143
|
this.fileMangerService.onRefreshingFileManger.next();
|
|
123
|
-
this.tosterService.show('success', 'TOASTER.SUCCESS',
|
|
144
|
+
this.tosterService.show('success', 'TOASTER.SUCCESS', 'TOASTER.FILE_CREATED_SUCCE');
|
|
124
145
|
this.documentScanService.storedFile = {};
|
|
125
146
|
this.uploadMangmentService.resetStatus();
|
|
126
147
|
this.removeSubscription();
|
|
@@ -153,20 +174,25 @@ export class ScanModalComponent {
|
|
|
153
174
|
description: ['']
|
|
154
175
|
});
|
|
155
176
|
}
|
|
156
|
-
this.staticFormFields =
|
|
177
|
+
this.staticFormFields =
|
|
178
|
+
this.appConfService.myConfiguration.staticFormFields;
|
|
157
179
|
if (this.fileFormSubscription) {
|
|
158
180
|
this.fileFormSubscription.unsubscribe();
|
|
159
181
|
}
|
|
160
182
|
if (this.fileForm.get('departmentCode')) {
|
|
161
|
-
this.fileForm
|
|
183
|
+
this.fileForm
|
|
184
|
+
.get('departmentCode')
|
|
185
|
+
.setValue(this.userService.getUserDepartmentFromPath(this.data.path));
|
|
162
186
|
}
|
|
163
187
|
}
|
|
164
188
|
openSubscriptions() {
|
|
165
|
-
this.fileFormSubscription = this.fileForm.valueChanges.subscribe(data => {
|
|
189
|
+
this.fileFormSubscription = this.fileForm.valueChanges.subscribe((data) => {
|
|
166
190
|
this.selectedFile.staticData = data;
|
|
167
191
|
});
|
|
168
192
|
if (this.fileForm.get('agencyCategoryCode')) {
|
|
169
|
-
this.agencyCategCodeSubscription = this.fileForm
|
|
193
|
+
this.agencyCategCodeSubscription = this.fileForm
|
|
194
|
+
.get('agencyCategoryCode')
|
|
195
|
+
.valueChanges.subscribe((res) => {
|
|
170
196
|
this.fileForm.get('agencyName').setValue(null);
|
|
171
197
|
this.agencyNameFilter = {
|
|
172
198
|
category: res
|
|
@@ -174,7 +200,9 @@ export class ScanModalComponent {
|
|
|
174
200
|
});
|
|
175
201
|
}
|
|
176
202
|
if (this.fileForm.get('countryCategoryCode')) {
|
|
177
|
-
this.countryCategCodeSubscription = this.fileForm
|
|
203
|
+
this.countryCategCodeSubscription = this.fileForm
|
|
204
|
+
.get('countryCategoryCode')
|
|
205
|
+
.valueChanges.subscribe((res) => {
|
|
178
206
|
this.fileForm.get('countryName').setValue(null);
|
|
179
207
|
this.countryNameFilter = {
|
|
180
208
|
category: res
|
|
@@ -207,42 +235,34 @@ export class ScanModalComponent {
|
|
|
207
235
|
this.removeSubscription();
|
|
208
236
|
this.dialogRef.close(false);
|
|
209
237
|
}
|
|
210
|
-
minimizDialog() {
|
|
211
|
-
this.documentScanService.onMinimizing.emit(true);
|
|
212
|
-
this.uploadMangmentService.uploadedFilesStatus.uploadedFiles.push(Object.assign({}, this.selectedFile));
|
|
213
|
-
this.removeSubscription();
|
|
214
|
-
this.dialogRef.close(true);
|
|
215
|
-
}
|
|
216
238
|
removeSubscription() {
|
|
217
239
|
setTimeout(() => {
|
|
218
|
-
this.uploadStartSubscription
|
|
219
|
-
|
|
240
|
+
this.uploadStartSubscription
|
|
241
|
+
? this.uploadStartSubscription.unsubscribe()
|
|
242
|
+
: '';
|
|
243
|
+
this.fileChangeSubscription
|
|
244
|
+
? this.fileChangeSubscription.unsubscribe()
|
|
245
|
+
: '';
|
|
220
246
|
}, 2000);
|
|
221
247
|
}
|
|
222
248
|
startAddingProperties() {
|
|
223
249
|
this.uploadMangmentService.addingPropertiesMode = true;
|
|
224
250
|
}
|
|
225
|
-
createDocument() {
|
|
226
|
-
this.documentScanService.onMinimizing.emit(true);
|
|
227
|
-
this.uploadMangmentService.uploadedFilesStatus.uploadedFiles.push(Object.assign({}, this.selectedFile));
|
|
228
|
-
this.scannerUploadButton.click();
|
|
229
|
-
this.dialogRef.close(true);
|
|
230
|
-
}
|
|
231
251
|
constructPayLoad(file) {
|
|
232
252
|
let props = this.dynamicFormService.constructDynamicFormPayload(file.dynamicData.data, file.dynamicForm);
|
|
233
253
|
let staticFormData = this.mappingStaticData(file.staticData);
|
|
234
254
|
let param = {
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
255
|
+
document: {
|
|
256
|
+
type: this.fileType.type,
|
|
257
|
+
name: file.staticData.title,
|
|
258
|
+
properties: Object.assign(Object.assign(Object.assign({}, props), staticFormData), { 'file:content': {
|
|
259
|
+
'upload-batch': file.file.blob['upload-batch'],
|
|
260
|
+
'upload-fileId': file.file.blob['upload-fileId']
|
|
241
261
|
} })
|
|
242
262
|
}
|
|
243
263
|
};
|
|
244
264
|
if (file.fileType.documentCode) {
|
|
245
|
-
param[
|
|
265
|
+
param['documentTypeCode'] = file.fileType.documentCode;
|
|
246
266
|
}
|
|
247
267
|
return { params: param, originFile: file };
|
|
248
268
|
}
|
|
@@ -250,28 +270,38 @@ export class ScanModalComponent {
|
|
|
250
270
|
if (data.gdocumentDate && data.gdocumentDate !== null) {
|
|
251
271
|
moment.locale('en');
|
|
252
272
|
data['hdocumentDate'] = this.dateHelperService.gregorianToHijri(data.gdocumentDate, 'iYYYY-iMM-iDD');
|
|
253
|
-
data.gdocumentDate =
|
|
273
|
+
data.gdocumentDate =
|
|
274
|
+
moment(data.gdocumentDate).format('YYYY-MM-DDT00:00:00.000') + 'Z';
|
|
254
275
|
}
|
|
255
276
|
return this.adapter.adaptOut(data, this.staticFormFields);
|
|
256
277
|
}
|
|
257
278
|
constructDynamicFormPayload(file) {
|
|
258
279
|
var _a;
|
|
259
280
|
let updatedDynamicValues = {};
|
|
260
|
-
Object.keys((_a = file === null || file === void 0 ? void 0 : file.dynamicData) === null || _a === void 0 ? void 0 : _a.data).map(key => {
|
|
281
|
+
Object.keys((_a = file === null || file === void 0 ? void 0 : file.dynamicData) === null || _a === void 0 ? void 0 : _a.data).map((key) => {
|
|
261
282
|
let updatedKey = key.replace(':', '');
|
|
262
283
|
let prefix = file.dynamicForm.prefix[updatedKey];
|
|
263
284
|
if (prefix) {
|
|
264
|
-
// check if component is user selector to map its data from object to username or id only
|
|
265
|
-
if (file.dynamicData.data[key] &&
|
|
266
|
-
|
|
285
|
+
// check if component is user selector to map its data from object to username or id only
|
|
286
|
+
if (file.dynamicData.data[key] &&
|
|
287
|
+
file.dynamicData.data[key]['userSelector'] &&
|
|
288
|
+
file.dynamicData.data[key]['userSelector'] === true) {
|
|
289
|
+
updatedDynamicValues[prefix + ':' + updatedKey] = file.dynamicData
|
|
290
|
+
.data[key]['value']['id']
|
|
291
|
+
? file.dynamicData.data[key]['value']['id']
|
|
292
|
+
: file.dynamicData.data[key]['value']['properties']['username'];
|
|
267
293
|
}
|
|
268
294
|
else {
|
|
269
|
-
updatedDynamicValues[prefix + ':' + updatedKey] =
|
|
295
|
+
updatedDynamicValues[prefix + ':' + updatedKey] =
|
|
296
|
+
file.dynamicData.data[key];
|
|
270
297
|
}
|
|
271
298
|
}
|
|
272
299
|
else {
|
|
273
|
-
if (file.dynamicData.data[key]['userSelector'] &&
|
|
274
|
-
|
|
300
|
+
if (file.dynamicData.data[key]['userSelector'] &&
|
|
301
|
+
file.dynamicData.data[key]['userSelector'] === true) {
|
|
302
|
+
updatedDynamicValues[updatedKey] = file.dynamicData.data[key]['value']['id']
|
|
303
|
+
? file.dynamicData.data[key]['value']['id']
|
|
304
|
+
: file.dynamicData.data[key]['value']['properties']['username'];
|
|
275
305
|
}
|
|
276
306
|
else {
|
|
277
307
|
updatedDynamicValues[updatedKey] = file.dynamicData.data[key];
|
|
@@ -280,8 +310,7 @@ export class ScanModalComponent {
|
|
|
280
310
|
});
|
|
281
311
|
return updatedDynamicValues;
|
|
282
312
|
}
|
|
283
|
-
createWhenFinish() {
|
|
284
|
-
}
|
|
313
|
+
createWhenFinish() { }
|
|
285
314
|
changTabTo(tabName) {
|
|
286
315
|
this.activeTab = tabName;
|
|
287
316
|
}
|
|
@@ -290,13 +319,17 @@ export class ScanModalComponent {
|
|
|
290
319
|
}
|
|
291
320
|
ngOnDestroy() {
|
|
292
321
|
this.langSubscription ? this.langSubscription.unsubscribe() : '';
|
|
293
|
-
this.agencyCategCodeSubscription
|
|
294
|
-
|
|
322
|
+
this.agencyCategCodeSubscription
|
|
323
|
+
? this.agencyCategCodeSubscription.unsubscribe()
|
|
324
|
+
: null;
|
|
325
|
+
this.countryCategCodeSubscription
|
|
326
|
+
? this.countryCategCodeSubscription.unsubscribe()
|
|
327
|
+
: null;
|
|
295
328
|
this.fileFormSubscription ? this.fileFormSubscription.unsubscribe() : null;
|
|
296
329
|
}
|
|
297
330
|
}
|
|
298
|
-
ScanModalComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ScanModalComponent, deps: [{ token: MAT_DIALOG_DATA }, { token: i1.MatDialogRef }, { token: i2.UploadManagmentService }, { token: i3.DialogMangmentService }, { token: i4.FileManagerService }, { token: i5.CustomToastrService }, { token: i6.FormBuilder }, { token: i7.DynamicFormService }, { token: i8.DateHelperService }, { token: i9.AdapterService }, { token: i10.TranslationService }, { token: i11.NuxeoService }, { token: i12.UserService }, { token: i13.AppConfigService }, { token: 'environment' }, { token: i14.DocumentScanService }], target: i0.ɵɵFactoryTarget.Component });
|
|
299
|
-
ScanModalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: ScanModalComponent, selector: "app-scan-modal", ngImport: i0, template: "<div class=\"scanner-modal-body relative h-full\">\r\n <!-- -->\r\n <!-- tabs -->\r\n <div\r\n class=\"scanner-tabs d-flex justify-around items-center border-b-2 border-gray-200 mb-5 text-gray-900 text-lg\"\r\n >\r\n <div\r\n class=\"scanner-single-tab cursor-pointer w-1/2 text-center py-2 border-gray-900 hover:bg-gray-100\"\r\n (click)=\"changTabTo('scan')\"\r\n [ngClass]=\"{ 'font-bold border-b-4': activeTab === 'scan' }\"\r\n >\r\n {{\"CREATE.SCAN\" | translate}}\r\n </div>\r\n <div\r\n class=\"scanner-single-tab cursor-pointer w-1/2 text-center py-2 border-gray-900 hover:bg-gray-100\"\r\n (click)=\"changTabTo('form')\"\r\n [ngClass]=\"{ 'font-bold border-b-4': activeTab === 'form' }\"\r\n >\r\n {{\"CREATE.DETAILS\" | translate}}\r\n </div>\r\n </div>\r\n <div class=\"tabs-body-wrapper\">\r\n <!-- uploader indicator loading -->\r\n <div\r\n class=\"upload-loader mx-2\"\r\n *ngIf=\"uploadMangmentService.uploadedFilesStatus.uploadInProgress\"\r\n >\r\n <mat-progress-bar mode=\"indeterminate\"></mat-progress-bar>\r\n </div>\r\n\r\n <!-- scanner -->\r\n <div class=\"\" [ngClass]=\"{ 'd-none': activeTab === 'form' }\">\r\n <app-document-scan\r\n [hideUploadButton]=\"true\"\r\n [useStoredFile]=\"true\"\r\n ></app-document-scan>\r\n </div>\r\n\r\n <!-- forms and properties -->\r\n <div\r\n class=\"forms-section\"\r\n [ngClass]=\"{ 'd-none': activeTab === 'scan' }\"\r\n >\r\n <div class=\"w-2/3\">\r\n <div class=\"mb-5\">\r\n <div class=\"label-style\">\r\n {{ \"CREATE.FILE_TYPE\" | translate }}\r\n </div>\r\n <div class=\"text-base text-gray-900\">\r\n {{ isArabic ? fileType.arabicText : fileType.englishText }}\r\n </div>\r\n </div>\r\n <div class=\"file-fields mt-3\" SetRtl>\r\n <form [formGroup]=\"fileForm\" *ngIf=\"fileForm\">\r\n <div class=\"single-field mb-3\">\r\n <div class=\"label-style\">\r\n {{ \"CREATE.TITLE\" | translate\r\n }}<span class=\"text-red-500\">*</span>\r\n </div>\r\n <input\r\n class=\"field-style\"\r\n formControlName=\"title\"\r\n placeholder=\" {{ 'CREATE.TITLE' | translate }}\"\r\n />\r\n </div>\r\n <div class=\"single-field mb-3\">\r\n <div class=\"label-style\">\r\n {{ \"CREATE.DESCRIPTION\" | translate }}\r\n </div>\r\n <input\r\n class=\"field-style\"\r\n formControlName=\"description\"\r\n placeholder=\" {{\r\n 'CREATE.DESCRIPTION' | translate\r\n }}\"\r\n />\r\n </div>\r\n\r\n <!------------------ new statis form ---------------------------->\r\n <div *ngIf=\"usingExtraFields\">\r\n \r\n <app-dynamic-fields-renderer [form]=\"fileForm\" [agencyNameFilter]=\"agencyNameFilter\" [countryNameFilter]=\"countryNameFilter\"></app-dynamic-fields-renderer>\r\n\r\n <!-- <div class=\"single-field mb-3\">\r\n <div class=\"label-style\">\r\n {{ \"CREATE.DOCUMENT_SUBJECT\" | translate\r\n }}<span class=\"text-red-500\">*</span>\r\n </div>\r\n <input\r\n class=\"field-style\"\r\n formControlName=\"subject\"\r\n placeholder=\" {{\r\n 'CREATE.DOCUMENT_SUBJECT' | translate\r\n }}\"\r\n />\r\n </div>\r\n <div class=\"single-field mb-3\">\r\n <div class=\"label-style\">\r\n {{ \"CREATE.DOCUMENT_NUMBER\" | translate }}\r\n </div>\r\n <input\r\n class=\"field-style\"\r\n formControlName=\"documentNumber\"\r\n placeholder=\" {{\r\n 'CREATE.DOCUMENT_NUMBER' | translate\r\n }}\"\r\n />\r\n </div>\r\n <div class=\"single-field mb-3\">\r\n <cts-dynamic-form-hijri-dateitem\r\n formControlName=\"gdocumentDate\"\r\n label=\"CREATE.DOCUMENT_DATE\"\r\n >\r\n </cts-dynamic-form-hijri-dateitem>\r\n </div>\r\n <div class=\"single-field mb-3\">\r\n <app-dynamic-form-vocabulary-item\r\n [label]=\"'CREATE.SCRECY_LEVEL'\"\r\n [bindLabel]=\"'label'\"\r\n [bindValue]=\"'id'\"\r\n placeholder=\"{{\r\n 'VOCABULARY.SELECT_ITEM' | translate\r\n }}\"\r\n [multiple]=\"false\"\r\n [searchable]=\"false\"\r\n [closeOnSelect]=\"true\"\r\n [hideSelectedItems]=\"false\"\r\n [vocabularyType]=\"'VOC_SecrecyLevel'\"\r\n formControlName=\"secrecyLevel\"\r\n >\r\n </app-dynamic-form-vocabulary-item>\r\n </div>\r\n <div class=\"single-field mb-3\">\r\n <app-dynamic-form-vocabulary-item\r\n [label]=\"'CREATE.IMPORTANCE_LEVEL'\"\r\n [bindLabel]=\"'label'\"\r\n [bindValue]=\"'id'\"\r\n placeholder=\"{{\r\n 'VOCABULARY.SELECT_ITEM' | translate\r\n }}\"\r\n [multiple]=\"false\"\r\n [searchable]=\"false\"\r\n [closeOnSelect]=\"true\"\r\n [hideSelectedItems]=\"false\"\r\n [vocabularyType]=\"'VOC_Importance'\"\r\n formControlName=\"importanceLevel\"\r\n >\r\n </app-dynamic-form-vocabulary-item>\r\n </div>\r\n\r\n <div class=\"single-field mb-3\">\r\n <div class=\"label-style\">\r\n {{ \"CREATE.DEPARTMENT_CODE\" | translate }}\r\n </div>\r\n <app-dynamic-form-department\r\n formControlName=\"departmentCode\"\r\n [placeholder]=\"'please select department'\"\r\n [pp_departmentNestedTree]=\"\r\n 'PP_OS_Departments'\r\n \"\r\n [pp_departmentTree]=\"'PP_OS_Departments'\"\r\n [customPrefix]=\"'osdept'\"\r\n [customParentProperty]=\"\r\n 'osdepartment_parentDepartmentCode'\r\n \"\r\n [useCustomAddEditAction]=\"true\"\r\n >\r\n </app-dynamic-form-department>\r\n </div>\r\n\r\n <div class=\"single-field mb-3\">\r\n <app-translated-vocabulary-select\r\n [label]=\"'CREATE.AGENCY_CATEGORY_CODE'\"\r\n [arbBindLabel]=\"'label_ar'\"\r\n [engBindLabel]=\"'label_en'\"\r\n [bindValue]=\"'id'\"\r\n placeholder=\"{{\r\n 'VOCABULARY.SELECT_ITEM' | translate\r\n }}\"\r\n [multiple]=\"false\"\r\n [searchable]=\"true\"\r\n [closeOnSelect]=\"true\"\r\n [hideSelectedItems]=\"false\"\r\n formControlName=\"agencyCategoryCode\"\r\n [vocbularyId]=\"'VOC_AgencyCategory'\"\r\n [useFilter]=\"false\"\r\n >\r\n </app-translated-vocabulary-select>\r\n </div>\r\n\r\n <div class=\"single-field mb-3\">\r\n <app-translated-vocabulary-select\r\n [label]=\"'CREATE.AGENCY_NAME'\"\r\n [arbBindLabel]=\"'label_ar'\"\r\n [engBindLabel]=\"'label_en'\"\r\n [bindValue]=\"'id'\"\r\n placeholder=\"{{\r\n 'VOCABULARY.SELECT_ITEM' | translate\r\n }}\"\r\n [multiple]=\"false\"\r\n [searchable]=\"true\"\r\n [closeOnSelect]=\"true\"\r\n [hideSelectedItems]=\"false\"\r\n formControlName=\"agencyName\"\r\n [vocbularyId]=\"'VOC_Agency'\"\r\n [filter]=\"agencyNameFilter\"\r\n [useFilter]=\"true\"\r\n >\r\n </app-translated-vocabulary-select>\r\n </div>\r\n\r\n <div class=\"single-field mb-3\">\r\n <app-translated-vocabulary-select\r\n [label]=\"'CREATE.COUNTRY_CATEGORY_CODE'\"\r\n [arbBindLabel]=\"'label_ar'\"\r\n [engBindLabel]=\"'label_en'\"\r\n [bindValue]=\"'id'\"\r\n placeholder=\"{{\r\n 'VOCABULARY.SELECT_ITEM' | translate\r\n }}\"\r\n [multiple]=\"false\"\r\n [searchable]=\"true\"\r\n [closeOnSelect]=\"true\"\r\n [hideSelectedItems]=\"false\"\r\n formControlName=\"countryCategoryCode\"\r\n [vocbularyId]=\"'VOC_CountryCategory'\"\r\n [useFilter]=\"false\"\r\n >\r\n </app-translated-vocabulary-select>\r\n </div>\r\n\r\n <div class=\"single-field mb-3\">\r\n <app-translated-vocabulary-select\r\n [label]=\"'CREATE.COUNTRY_NAME'\"\r\n [arbBindLabel]=\"'label_ar'\"\r\n [engBindLabel]=\"'label_en'\"\r\n [bindValue]=\"'id'\"\r\n placeholder=\"{{\r\n 'VOCABULARY.SELECT_ITEM' | translate\r\n }}\"\r\n [multiple]=\"false\"\r\n [searchable]=\"true\"\r\n [closeOnSelect]=\"true\"\r\n [hideSelectedItems]=\"false\"\r\n formControlName=\"countryName\"\r\n [vocbularyId]=\"'VOC_Country'\"\r\n [filter]=\"countryNameFilter\"\r\n [useFilter]=\"true\"\r\n >\r\n </app-translated-vocabulary-select>\r\n </div>\r\n\r\n <div class=\"single-field mb-3\">\r\n <div class=\"label-style\">\r\n {{ \"CREATE.REMARKS\" | translate }}\r\n </div>\r\n <input\r\n class=\"field-style\"\r\n formControlName=\"remarks\"\r\n placeholder=\" {{\r\n 'CREATE.REMARKS' | translate\r\n }}\"\r\n />\r\n </div> -->\r\n </div>\r\n\r\n <!-- ----------------------------------------------------------- -->\r\n </form>\r\n <!-- *ngIf=\"\" -->\r\n <div\r\n class=\"dynamic-part -mx-4\"\r\n *ngIf=\"selectedFile.dynamicForm && showRenderer\"\r\n >\r\n <app-dynamic-form\r\n [form]=\"selectedFile.dynamicForm\"\r\n [data]=\"temporaryDyanmicData\"\r\n (change)=\"ondynamicFormChange($event)\"\r\n ></app-dynamic-form>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- actions and buttons -->\r\n <div\r\n class=\"w-full d-flex justify-between scanner-actions-wrapper absolute bottom-0\"\r\n >\r\n <div class=\"flex\">\r\n <button class=\"cancelation-button\" (click)=\"closeDialog()\">\r\n {{ \"BUTTONS.CANCEL\" | translate }}\r\n </button>\r\n <button class=\"cancelation-button mx-2\" (click)=\"minimizDialog()\">\r\n {{ \"BUTTONS.MINIMIZED\" | translate }}\r\n </button>\r\n </div>\r\n\r\n <!-- -->\r\n <div class=\"d-flex\">\r\n <!-- <button\r\n *ngIf=\"creationFailed\"\r\n [disabled]=\"\r\n scannerUploadButton.disabled ||\r\n !selectedFile.dynamicData.valid ||\r\n fileForm.invalid\r\n \"\r\n [ngClass]=\"{\r\n 'opacity-30 cursor-not-allowed':\r\n scannerUploadButton.disabled ||\r\n !selectedFile.dynamicData.valid ||\r\n fileForm.invalid\r\n }\"\r\n (click)=\"createDocument()\"\r\n class=\"submission-button\"\r\n >\r\n {{ \"BUTTONS.TRY_AGAIN\" | translate }}\r\n </button> -->\r\n <button\r\n (click)=\"createDocument()\"\r\n [disabled]=\"\r\n scannerUploadButton.disabled ||\r\n !selectedFile.dynamicData.valid ||\r\n fileForm.invalid\r\n \"\r\n [ngClass]=\"{\r\n 'opacity-30 cursor-not-allowed':\r\n scannerUploadButton.disabled ||\r\n !selectedFile.dynamicData.valid ||\r\n fileForm.invalid\r\n }\"\r\n class=\"submission-button\"\r\n >\r\n {{ uploadMangmentService.scanCreationFailed ? (\"BUTTONS.TRY_AGAIN\" | translate) : (\"BUTTONS.CREATE\" | translate) }}\r\n </button>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".forms-section{display:flex;justify-content:center}.tabs-body-wrapper{height:calc(100% - 125px);overflow-y:auto;overflow-x:hidden}\n"], components: [{ type: i15.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "mode", "value", "bufferValue"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { type: i16.ScanComponent, selector: "app-document-scan", inputs: ["useStoredFile", "hideUploadButton"], outputs: ["file"] }, { type: i17.DynamicFieldsRendererComponent, selector: "app-dynamic-fields-renderer", inputs: ["form", "agencyNameFilter", "countryNameFilter", "mode", "fields"] }, { type: i18.DynamicFormComponent, selector: "app-dynamic-form", inputs: ["form", "data", "readOnly"], outputs: ["change"] }], directives: [{ type: i19.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i19.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i20.SetRtlDirective, selector: "[SetRtl]" }, { type: i6.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i6.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i6.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i6.FormControlName, selector: "[formControlName]", inputs: ["disabled", "formControlName", "ngModel"], outputs: ["ngModelChange"] }], pipes: { "translate": i21.TranslatePipe } });
|
|
331
|
+
ScanModalComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ScanModalComponent, deps: [{ token: MAT_DIALOG_DATA }, { token: i1.MatDialogRef }, { token: i2.UploadManagmentService }, { token: i3.DialogMangmentService }, { token: i4.FileManagerService }, { token: i5.CustomToastrService }, { token: i6.FormBuilder }, { token: i7.DynamicFormService }, { token: i8.DateHelperService }, { token: i9.AdapterService }, { token: i10.TranslationService }, { token: i11.NuxeoService }, { token: i12.UserService }, { token: i13.AppConfigService }, { token: 'environment' }, { token: i14.DocumentScanService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
|
|
332
|
+
ScanModalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: ScanModalComponent, selector: "app-scan-modal", usesInheritance: true, ngImport: i0, template: "<ndf-nuxeo-dialog dialogTitle=\"{{ 'CREATE.SCAN' | translate }}\">\r\n\t<ng-template #contentTemplate>\r\n\t\t<div\r\n\t\t\tclass=\"scanner-tabs d-flex justify-around items-center border-b-2 border-gray-200 mb-5 text-gray-900 text-lg\"\r\n\t\t>\r\n\t\t\t<div\r\n\t\t\t\tclass=\"scanner-single-tab cursor-pointer w-1/2 text-center py-2 border-gray-900 hover:bg-gray-100\"\r\n\t\t\t\t(click)=\"changTabTo('scan')\"\r\n\t\t\t\t[ngClass]=\"{ 'font-bold border-b-4': activeTab === 'scan' }\"\r\n\t\t\t>\r\n\t\t\t\t{{ 'CREATE.SCAN' | translate }}\r\n\t\t\t</div>\r\n\t\t\t<div\r\n\t\t\t\tclass=\"scanner-single-tab cursor-pointer w-1/2 text-center py-2 border-gray-900 hover:bg-gray-100\"\r\n\t\t\t\t(click)=\"changTabTo('form')\"\r\n\t\t\t\t[ngClass]=\"{ 'font-bold border-b-4': activeTab === 'form' }\"\r\n\t\t\t>\r\n\t\t\t\t{{ 'CREATE.DETAILS' | translate }}\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t\t<div class=\"tabs-body-wrapper\">\r\n\t\t\t<!-- uploader indicator loading -->\r\n\t\t\t<div\r\n\t\t\t\tclass=\"upload-loader mx-2\"\r\n\t\t\t\t*ngIf=\"uploadMangmentService.uploadedFilesStatus.uploadInProgress\"\r\n\t\t\t>\r\n\t\t\t\t<mat-progress-bar mode=\"indeterminate\"></mat-progress-bar>\r\n\t\t\t</div>\r\n\r\n\t\t\t<!-- scanner -->\r\n\t\t\t<div class=\"\" [ngClass]=\"{ 'd-none': activeTab === 'form' }\">\r\n\t\t\t\t<app-document-scan\r\n\t\t\t\t\t[hideUploadButton]=\"true\"\r\n\t\t\t\t\t[useStoredFile]=\"true\"\r\n\t\t\t\t></app-document-scan>\r\n\t\t\t</div>\r\n\r\n\t\t\t<!-- forms and properties -->\r\n\t\t\t<div class=\"forms-section\" [ngClass]=\"{ 'd-none': activeTab === 'scan' }\">\r\n\t\t\t\t<div class=\"w-2/3\">\r\n\t\t\t\t\t<div class=\"mb-5\">\r\n\t\t\t\t\t\t<div class=\"label-style\">\r\n\t\t\t\t\t\t\t{{ 'CREATE.FILE_TYPE' | translate }}\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t<div class=\"text-base text-gray-900\">\r\n\t\t\t\t\t\t\t{{ isArabic ? fileType.arabicText : fileType.englishText }}\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div class=\"file-fields mt-3\" SetRtl>\r\n\t\t\t\t\t\t<form [formGroup]=\"fileForm\" *ngIf=\"fileForm\">\r\n\t\t\t\t\t\t\t<div class=\"single-field mb-3\">\r\n\t\t\t\t\t\t\t\t<div class=\"label-style\">\r\n\t\t\t\t\t\t\t\t\t{{ 'CREATE.TITLE' | translate\r\n\t\t\t\t\t\t\t\t\t}}<span class=\"text-red-500\">*</span>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t<input\r\n\t\t\t\t\t\t\t\t\tclass=\"field-style\"\r\n\t\t\t\t\t\t\t\t\tformControlName=\"title\"\r\n\t\t\t\t\t\t\t\t\tplaceholder=\" {{ 'CREATE.TITLE' | translate }}\"\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t<div class=\"single-field mb-3\">\r\n\t\t\t\t\t\t\t\t<div class=\"label-style\">\r\n\t\t\t\t\t\t\t\t\t{{ 'CREATE.DESCRIPTION' | translate }}\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t<input\r\n\t\t\t\t\t\t\t\t\tclass=\"field-style\"\r\n\t\t\t\t\t\t\t\t\tformControlName=\"description\"\r\n\t\t\t\t\t\t\t\t\tplaceholder=\" {{ 'CREATE.DESCRIPTION' | translate }}\"\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t\t\t<!------------------ new statis form ---------------------------->\r\n\t\t\t\t\t\t\t<div *ngIf=\"usingExtraFields\">\r\n\t\t\t\t\t\t\t\t<app-dynamic-fields-renderer\r\n\t\t\t\t\t\t\t\t\t[form]=\"fileForm\"\r\n\t\t\t\t\t\t\t\t\t[agencyNameFilter]=\"agencyNameFilter\"\r\n\t\t\t\t\t\t\t\t\t[countryNameFilter]=\"countryNameFilter\"\r\n\t\t\t\t\t\t\t\t></app-dynamic-fields-renderer>\r\n\t\t\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t\t\t<!-- ----------------------------------------------------------- -->\r\n\t\t\t\t\t\t</form>\r\n\t\t\t\t\t\t<!-- *ngIf=\"\" -->\r\n\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\tclass=\"dynamic-part -mx-4\"\r\n\t\t\t\t\t\t\t*ngIf=\"selectedFile.dynamicForm && showRenderer\"\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<app-dynamic-form\r\n\t\t\t\t\t\t\t\t[form]=\"selectedFile.dynamicForm\"\r\n\t\t\t\t\t\t\t\t[data]=\"temporaryDyanmicData\"\r\n\t\t\t\t\t\t\t\t(change)=\"ondynamicFormChange($event)\"\r\n\t\t\t\t\t\t\t></app-dynamic-form>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</ng-template>\r\n\r\n\t<ng-template #actionsTemplate let-dialog=\"dialog\">\r\n\t\t<button\r\n\t\t\t(click)=\"dialog.executeAction(createDocument)\"\r\n\t\t\t[disabled]=\"\r\n\t\t\t\tscannerUploadButton?.disabled ||\r\n\t\t\t\t!selectedFile.dynamicData.valid ||\r\n\t\t\t\tfileForm.invalid\r\n\t\t\t\"\r\n\t\t\t[ngClass]=\"{\r\n\t\t\t\t'opacity-30 cursor-not-allowed':\r\n\t\t\t\t\tscannerUploadButton?.disabled ||\r\n\t\t\t\t\t!selectedFile.dynamicData.valid ||\r\n\t\t\t\t\tfileForm.invalid\r\n\t\t\t}\"\r\n\t\t\tclass=\"submission-button\"\r\n\t\t>\r\n\t\t\t{{\r\n\t\t\t\tuploadMangmentService.scanCreationFailed\r\n\t\t\t\t\t? ('BUTTONS.TRY_AGAIN' | translate)\r\n\t\t\t\t\t: ('BUTTONS.CREATE' | translate)\r\n\t\t\t}}\r\n\t\t</button>\r\n\t\t<button\r\n\t\t\tclass=\"cancelation-button mx-2\"\r\n\t\t\t(click)=\"dialog.executeAction(minimizDialog)\"\r\n\t\t>\r\n\t\t\t{{ 'BUTTONS.MINIMIZED' | translate }}\r\n\t\t</button>\r\n\t</ng-template>\r\n</ndf-nuxeo-dialog>\r\n", styles: [".forms-section{display:flex;justify-content:center}.tabs-body-wrapper{height:calc(100% - 125px);overflow-y:auto;overflow-x:hidden}\n"], components: [{ type: i15.NdfNuxeoDialog, selector: "ndf-nuxeo-dialog", inputs: ["dialogTitle", "subTitle", "loaderMode"] }, { type: i16.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "mode", "value", "bufferValue"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { type: i17.ScanComponent, selector: "app-document-scan", inputs: ["useStoredFile", "hideUploadButton"], outputs: ["file"] }, { type: i18.DynamicFieldsRendererComponent, selector: "app-dynamic-fields-renderer", inputs: ["form", "agencyNameFilter", "countryNameFilter", "mode", "fields"] }, { type: i19.DynamicFormComponent, selector: "app-dynamic-form", inputs: ["form", "data", "readOnly"], outputs: ["change"] }], directives: [{ type: i20.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i20.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i21.SetRtlDirective, selector: "[SetRtl]" }, { type: i6.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i6.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i6.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i6.FormControlName, selector: "[formControlName]", inputs: ["disabled", "formControlName", "ngModel"], outputs: ["ngModelChange"] }], pipes: { "translate": i22.TranslatePipe } });
|
|
300
333
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ScanModalComponent, decorators: [{
|
|
301
334
|
type: Component,
|
|
302
335
|
args: [{
|
|
@@ -310,5 +343,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
|
|
|
310
343
|
}] }, { type: i1.MatDialogRef }, { type: i2.UploadManagmentService }, { type: i3.DialogMangmentService }, { type: i4.FileManagerService }, { type: i5.CustomToastrService }, { type: i6.FormBuilder }, { type: i7.DynamicFormService }, { type: i8.DateHelperService }, { type: i9.AdapterService }, { type: i10.TranslationService }, { type: i11.NuxeoService }, { type: i12.UserService }, { type: i13.AppConfigService }, { type: undefined, decorators: [{
|
|
311
344
|
type: Inject,
|
|
312
345
|
args: ['environment']
|
|
313
|
-
}] }, { type: i14.DocumentScanService }]; } });
|
|
314
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nhbi1tb2RhbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9udXhlby1kZXZlbG9wbWVudC1mcmFtZXdvcmsvc3JjL2xpYi9jb21wb25lbnRzL2ZpbGUtbWFuZ2VyL2NvbXBvbmVudHMvc2Nhbi1tb2RhbC9zY2FuLW1vZGFsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL251eGVvLWRldmVsb3BtZW50LWZyYW1ld29yay9zcmMvbGliL2NvbXBvbmVudHMvZmlsZS1tYW5nZXIvY29tcG9uZW50cy9zY2FuLW1vZGFsL3NjYW4tbW9kYWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBQ3JFLE9BQU8sRUFBMEIsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEUsT0FBTyxFQUFnQixlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQU96RSxPQUFPLEtBQUssTUFBTSxNQUFNLFFBQVEsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFjakMsTUFBTSxPQUFPLGtCQUFrQjtJQW1DN0IsWUFBNEMsSUFBSSxFQUN2QyxTQUEyQyxFQUMzQyxxQkFBNkMsRUFDN0MscUJBQTRDLEVBQzNDLGlCQUFxQyxFQUNyQyxhQUFrQyxFQUNsQyxXQUF5QixFQUN6QixrQkFBc0MsRUFDdEMsaUJBQXFDLEVBQ3JDLE9BQXdCLEVBQ3hCLGtCQUF1QyxFQUN2QyxZQUE0QixFQUM1QixXQUF5QixFQUN6QixjQUFpQyxFQUNWLFdBQVcsRUFDbEMsbUJBQXlDO1FBZlAsU0FBSSxHQUFKLElBQUksQ0FBQTtRQUN2QyxjQUFTLEdBQVQsU0FBUyxDQUFrQztRQUMzQywwQkFBcUIsR0FBckIscUJBQXFCLENBQXdCO1FBQzdDLDBCQUFxQixH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QywyQkFBMkIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDekYsSUFBSSxDQUFDLDRCQUE0QixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsNEJBQTRCLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUMzRixJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQzdFLENBQUM7O2dIQXZUVSxrQkFBa0Isa0JBbUNULGVBQWUsa2JBY3pCLGFBQWE7b0dBakRaLGtCQUFrQixzREN2Qi9CLG96aUJBZ1ZBOzRGRHpUYSxrQkFBa0I7a0JBTDlCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGdCQUFnQjtvQkFDMUIsV0FBVyxFQUFFLDZCQUE2QjtvQkFDMUMsU0FBUyxFQUFFLENBQUMsNkJBQTZCLENBQUM7aUJBQzNDOzswQkFvQ2MsTUFBTTsyQkFBQyxlQUFlOzswQkFjaEMsTUFBTTsyQkFBQyxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbmplY3QsIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE1hdERpYWxvZ1JlZiwgTUFUX0RJQUxPR19EQVRBIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgVXBsb2FkTWFuYWdtZW50U2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZC1zZXJ2aWNlcy91cGxvYWQtbWFuYWdtZW50LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEaWFsb2dNYW5nbWVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zaGFyZWQtc2VydmljZXMvZGlhbG9nLW1hbmdtZW50LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEeW5hbWljRm9ybVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zaGFyZWQtc2VydmljZXMvZHluYW1pYy1mb3JtLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBGaWxlTWFuYWdlclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zaGFyZWQtc2VydmljZXMvZmlsZS1tYW5hZ2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBVc2VyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZC1zZXJ2aWNlcy91c2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0ICogYXMgbW9tZW50IGZyb20gJ21vbWVudCc7XHJcbmltcG9ydCB7IEN1c3RvbVRvYXN0clNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9jdXN0b20tdG9hc3RyL3NlcnZpY2VzL2N1c3RvbS10b2FzdHIuc2VydmljZSc7XHJcbmltcG9ydCB7IERvY3VtZW50U2NhblNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9kb2N1bWVudHMvY29tcG9uZW50cy9kb2N1bWVudC1zY2FuL2RvY3VtZW50LXNjYW4uc2VydmljZSc7XHJcbmltcG9ydCB7IERhdGVIZWxwZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vaGlqcmktZ3JlZ29yaWFuLWRhdGVwaWNrZXIvc2VydmljZXMvZGF0ZS1oZWxwZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IEFkYXB0ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9hZGFwdGVycy9hZGFwdGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL3NlcnZpY2VzL3RyYW5zbGF0aW9uL3RyYW5zbGF0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBOdXhlb1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL3NlcnZpY2VzL251eGVvL251eGVvLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBcHBDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29uZmlndXJhdGlvbi9hcHAtY29uZmlnLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtc2Nhbi1tb2RhbCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3NjYW4tbW9kYWwuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3NjYW4tbW9kYWwuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2Nhbk1vZGFsQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBzY2FubmVyVXBsb2FkQnV0dG9uO1xyXG4gIGZpbGVUeXBlO1xyXG4gIHNvdXJjZTtcclxuICBhY3RpdmVUYWIgPSAnc2Nhbic7XHJcbiAgY3JlYXRlV2hlbkZpbmlzaE1vZGUgPSBmYWxzZTtcclxuICBteUVudmlyb25tZW50XHJcbiAgc2VsZWN0ZWRGaWxlID0ge1xyXG4gICAgc3RhdGljRGF0YSA6IHt9LFxyXG4gICAgZmlsZVR5cGU6ICcnLFxyXG4gICAgZHluYW1pY0Zvcm06ICcnLFxyXG4gICAgZHluYW1pY0RhdGE6IHtcclxuICAgICAgdmFsaWQ6IGZhbHNlLFxyXG4gICAgICBkYXRhOiB7fVxyXG4gICAgfSxcclxuICAgIGZpbGU6ICcnXHJcbiAgfTtcclxuICB0ZW1wb3JhcnlEeWFubWljRGF0YSA9IHt9O1xyXG4gIHNob3dSZW5kZXJlciA9IGZhbHNlO1xyXG5cclxuICB1cGxvYWRTdGFydFN1YnNjcmlwdGlvbiA6IFN1YnNjcmlwdGlvbjtcclxuICBmaWxlQ2hhbmdlU3Vic2NyaXB0aW9uICA6U3Vic2NyaXB0aW9uO1xyXG4gIGZpbGVGb3JtU3Vic2NyaXB0aW9uIDogU3Vic2NyaXB0aW9uO1xyXG4gIGFnZW5jeUNhdGVnQ29kZVN1YnNjcmlwdGlvbiA6IFN1YnNjcmlwdGlvbjtcclxuICBjb3VudHJ5Q2F0ZWdDb2RlU3Vic2NyaXB0aW9uIDogU3Vic2NyaXB0aW9uO1xyXG4gIGxhbmdTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcclxuXHJcbiAgaXNBcmFiaWMgPSBmYWxzZTtcclxuICBzaG93U3RhdGljRm9ybSA9IGZhbHNlXHJcbiAgdXNpbmdFeHRyYUZpZWxkcyA9IGZhbHNlOyAvLyBmbGFnZSB0byBzd2l0Y2ggYmV0d2VlbiBzdGF0aWMgZm9ybSB0eXBlc1xyXG4gIGZpbGVGb3JtIDogRm9ybUdyb3VwO1xyXG4gIHN0YXRpY0Zvcm1GaWVsZHM7XHJcbiAgYWdlbmN5TmFtZUZpbHRlciA7XHJcbiAgY291bnRyeU5hbWVGaWx0ZXI7XHJcblxyXG4gIGNvbnN0cnVjdG9yKEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZGF0YSxcclxuICAgIHB1YmxpYyBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxTY2FuTW9kYWxDb21wb25lbnQ+LFxyXG4gICAgcHVibGljIHVwbG9hZE1hbmdtZW50U2VydmljZTogVXBsb2FkTWFuYWdtZW50U2VydmljZSxcclxuICAgIHB1YmxpYyBkaWFsb2dNYW5nbWVudFNlcnZpY2U6IERpYWxvZ01hbmdtZW50U2VydmljZSxcclxuICAgIHByaXZhdGUgZmlsZU1hbmdlclNlcnZpY2U6IEZpbGVNYW5hZ2VyU2VydmljZSxcclxuICAgIHByaXZhdGUgdG9zdGVyU2VydmljZTogQ3VzdG9tVG9hc3RyU2VydmljZSxcclxuICAgIHByaXZhdGUgZm9ybUJ1aWxkZXIgOiBGb3JtQnVpbGRlcixcclxuICAgIHByaXZhdGUgZHluYW1pY0Zvcm1TZXJ2aWNlOiBEeW5hbWljRm9ybVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGRhdGVIZWxwZXJTZXJ2aWNlIDogRGF0ZUhlbHBlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGFkYXB0ZXIgOiBBZGFwdGVyU2VydmljZSxcclxuICAgIHByaXZhdGUgdHJhbnNsYXRpb25TZXJ2aWNlIDogVHJhbnNsYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBudXhlb1NlcnZpY2UgIDogTnV4ZW9TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB1c2VyU2VydmljZSA6IFVzZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhcHBDb25mU2VydmljZSA6IEFwcENvbmZpZ1NlcnZpY2UsXHJcbiAgICBASW5qZWN0KCdlbnZpcm9ubWVudCcpIHByaXZhdGUgZW52aXJub21lbnQsXHJcbiAgICBwcml2YXRlIGRvY3VtZW50U2NhblNlcnZpY2UgOiBEb2N1bWVudFNjYW5TZXJ2aWNlKSB7IFxyXG4gICAgICB0aGlzLm15RW52aXJvbm1lbnQgPSB0aGlzLmVudmlybm9tZW50XHJcbiAgICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5sYW5nU3Vic2NyaXB0aW9uPSB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS5pc0FyYWJpYy5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgdGhpcy5pc0FyYWJpYyA9IHJlcztcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuY3JlYXRlV2hlbkZpbmlzaE1vZGUgPSBmYWxzZTtcclxuICAgIHRoaXMuZmlsZVR5cGUgPSB0aGlzLmRpYWxvZ01hbmdtZW50U2VydmljZS5maWxlVHlwZTtcclxuICAgIHRoaXMuc291cmNlID0gdGhpcy5kaWFsb2dNYW5nbWVudFNlcnZpY2UuYWRkaW5nRnJvbTtcclxuXHJcbiAgICB0aGlzLmZpbGVNYW5nZXJTZXJ2aWNlLmdldEZpbGVTY2hlbWFzKHRoaXMuZmlsZVR5cGUudHlwZSkuc3Vic2NyaWJlKHNjaGVtYXMgPT4ge1xyXG4gICAgICBzY2hlbWFzLm1hcChpdGVtID0+IHtcclxuICAgICAgICBpZihpdGVtLm5hbWUgPT09IFwiZ2VuZXJhbGRvY3VtZW50XCIpe1xyXG4gICAgICAgICAgdGhpcy51c2luZ0V4dHJhRmllbGRzID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIHRoaXMuaW5pdGlhdGZpbGVGb3JtKCk7XHJcbiAgICAgICAgICAvL2lmIHN0YXJ0aW5nIGZyb20gZmlsZW1uYWdlciB0aGVuIGkgaGF2ZSBmaXhlZCBmaWxlIHR5cGUgZm9yIGFsbCBhdHRhY2htZXRuIGFuZCBzaW5nbGUgZHluYWltYyBmb3JtICB0eXBlXHJcbiAgICBpZiAodGhpcy5zb3VyY2UgPT09ICdmaWxlTWFuZ2VyJykge1xyXG4gICAgICBpZih0aGlzLnVwbG9hZE1hbmdtZW50U2VydmljZS51cGxvYWRlZEZpbGVzU3RhdHVzLnVwbG9hZGVkRmlsZXMubGVuZ3RoID4gMCl7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkRmlsZSA9IHsuLi50aGlzLnVwbG9hZE1hbmdtZW50U2VydmljZS51cGxvYWRlZEZpbGVzU3RhdHVzLnVwbG9hZGVkRmlsZXMuc2hpZnQoKX07XHJcbiAgICAgICAgICB0aGlzLnRlbXBvcmFyeUR5YW5taWNEYXRhID10aGlzLnNlbGVjdGVkRmlsZS5keW5hbWljRGF0YS5kYXRhO1xyXG4gICAgICAgICAgdGhpcy5maWxlRm9ybS5wYXRjaFZhbHVlKHRoaXMuc2VsZWN0ZWRGaWxlLnN0YXRpY0RhdGEpO1xyXG4gICAgICAgICAgaWYodGhpcy5zZWxlY3RlZEZpbGVbJ3N0YXRpY0RhdGEnXVsnYWdlbmN5Q2F0ZWdvcnlDb2RlJ10pe1xyXG4gICAgICAgICAgICB0aGlzLmFnZW5jeU5hbWVGaWx0ZXIgPSB7XHJcbiAgICAgICAgICAgICAgY2F0ZWdvcnkgOiB0aGlzLnNlbGVjdGVkRmlsZVsnc3RhdGljRGF0YSddWydhZ2VuY3lDYXRlZ29yeUNvZGUnXVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYodGhpcy5zZWxlY3RlZEZpbGVbJ3N0YXRpY0RhdGEnXVsnY291bnRyeUNhdGVnb3J5Q29kZSddKXtcclxuICAgICAgICAgICAgdGhpcy5jb3VudHJ5TmFtZUZpbHRlciA9IHtcclxuICAgICAgICAgICAgICBjYXRlZ29yeSA6IHRoaXMuc2VsZWN0ZWRGaWxlWydzdGF0aWNEYXRhJ11bJ2NvdW50cnlDYXRlZ29yeUNvZGUnXVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5vcGVuU3Vic2NyaXB0aW9ucygpO1xyXG4gICAgICAgIH0sIDIwMDApO1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zaG93UmVuZGVyZXIgPSB0cnVlO1xyXG4gICAgICAgIH0sIDMwMDApO1xyXG4gICAgICB9ZWxzZXtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGaWxlLmR5bmFtaWNGb3JtID0gdGhpcy5kaWFsb2dNYW5nbWVudFNlcnZpY2Uuc3RvcmVkRHluYW1pY0Zvcm07XHJcbiAgICAgICAgICB0aGlzLnNob3dSZW5kZXJlciA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLm9wZW5TdWJzY3JpcHRpb25zKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIH0pXHJcblxyXG4gICAgdGhpcy51cGxvYWRTdGFydFN1YnNjcmlwdGlvbiA9IHRoaXMuZG9jdW1lbnRTY2FuU2VydmljZS51cGxvYWRTdGFydC5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgdGhpcy51cGxvYWRNYW5nbWVudFNlcnZpY2UudXBsb2FkZWRGaWxlc1N0YXR1cy51cGxvYWRJblByb2dyZXNzID0gcmVzO1xyXG4gICAgfSlcclxuICAgIHRoaXMuZmlsZUNoYW5nZVN1YnNjcmlwdGlvbiA9IHRoaXMuZG9jdW1lbnRTY2FuU2VydmljZS5maWxlQ2hhbmdlLnN1YnNjcmliZShldmVudCA9PiB7XHJcbiAgICAgIC8vY29uc29sZS5sb2coZXZlbnQpO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRmlsZS5maWxlID0gZXZlbnQ7XHJcbiAgICAgIGxldCBwYXlMb2FkID0gdGhpcy5jb25zdHJ1Y3RQYXlMb2FkKHRoaXMuc2VsZWN0ZWRGaWxlKTtcclxuICAgICAgdGhpcy5maWxlTWFuZ2VyU2VydmljZS5jcmVhdGVGaWxlKHBheUxvYWQsIHRoaXMuZmlsZU1hbmdlclNlcnZpY2Uuc2VsZWN0ZWRGb2xkZXJJZCkuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgICAgaWYocmVzWydzdGF0dXMnXSAmJiByZXNbJ3N0YXR1cyddID09PSAnZmFpbGVkJyl7XHJcbiAgICAgICAgICB0aGlzLnVwbG9hZE1hbmdtZW50U2VydmljZS5zY2FuQ3JlYXRpb25GYWlsZWQgPSB0cnVlO1xyXG4gICAgICAgICB0aGlzLnRvc3RlclNlcnZpY2Uuc2hvdygnZXJyb3InICwgJ1RPQVNURVIuRVJST1InICwgJ1RPQVNURVIuVVBMT0FEX0VSUk9SJyk7XHJcbiAgICAgICAgICB0aGlzLnJlbW92ZVN1YnNjcmlwdGlvbigpO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgdGhpcy5maWxlTWFuZ2VyU2VydmljZS5vblJlZnJlc2hpbmdGaWxlTWFuZ2VyLm5leHQoKTtcclxuICAgICAgICAgIHRoaXMudG9zdGVyU2VydmljZS5zaG93KCdzdWNjZXNzJywgJ1RPQVNURVIuU1VDQ0VTUycsIFwiVE9BU1RFUi5GSUxFX0NSRUFURURfU1VDQ0VcIilcclxuICAgICAgICAgIHRoaXMuZG9jdW1lbnRTY2FuU2VydmljZS5zdG9yZWRGaWxlID0ge307XHJcbiAgICAgICAgICB0aGlzLnVwbG9hZE1hbmdtZW50U2VydmljZS5yZXNldFN0YXR1cygpO1xyXG4gICAgICAgICAgdGhpcy5yZW1vdmVTdWJzY3JpcHRpb24oKTtcclxuICAgICAgICB9XHJcbiAgICB9KVxyXG4gICAgfSlcclxuXHJcbiAgICAgdGhpcy5zY2FubmVyVXBsb2FkQnV0dG9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NjYW5uZXJVcGxvYWRCdXR0b24nKTtcclxuICB9XHJcbiAgXHJcbiAgaW5pdGlhdGZpbGVGb3JtKCl7XHJcbiAgICBpZih0aGlzLnVzaW5nRXh0cmFGaWVsZHMpe1xyXG4gICAgICB0aGlzLmZpbGVGb3JtID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XHJcbiAgICAgICAgdGl0bGUgOiBbJycgLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICAgIGRlc2NyaXB0aW9uIDogWycnXSxcclxuICAgICAgICBzdWJqZWN0IDogWycnICwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgICAgICBkb2N1bWVudE51bWJlciA6IFsnJ10sXHJcbiAgICAgICAgZ2RvY3VtZW50RGF0ZSA6IFtudWxsICwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgICAgICBzZWNyZWN5TGV2ZWwgOiBbbnVsbF0sXHJcbiAgICAgICAgaW1wb3J0YW5jZUxldmVsOltudWxsXSxcclxuICAgICAgICBkZXBhcnRtZW50Q29kZTpbJyddLFxyXG4gICAgICAgIGFnZW5jeUNhdGVnb3J5Q29kZTpbbnVsbF0sXHJcbiAgICAgICAgYWdlbmN5TmFtZTpbbnVsbF0sXHJcbiAgICAgICAgY291bnRyeUNhdGVnb3J5Q29kZTpbbnVsbF0sXHJcbiAgICAgICAgY291bnRyeU5hbWU6W251bGxdLFxyXG4gICAgICAgIHJlbWFya3M6WycnXVxyXG4gICAgICB9KVxyXG4gICAgfWVsc2V7XHJcbiAgICAgIHRoaXMuZmlsZUZvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcclxuICAgICAgICB0aXRsZSA6IFsnJyAsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXHJcbiAgICAgICAgZGVzY3JpcHRpb24gOiBbJyddXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgICB0aGlzLnN0YXRpY0Zvcm1GaWVsZHMgPSB0aGlzLmFwcENvbmZTZXJ2aWNlLm15Q29uZmlndXJhdGlvbi5zdGF0aWNGb3JtRmllbGRzO1xyXG4gICAgaWYodGhpcy5maWxlRm9ybVN1YnNjcmlwdGlvbil7XHJcbiAgICAgIHRoaXMuZmlsZUZvcm1TdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICAgIGlmKHRoaXMuZmlsZUZvcm0uZ2V0KCdkZXBhcnRtZW50Q29kZScpKXtcclxuICAgICAgdGhpcy5maWxlRm9ybS5nZXQoJ2RlcGFydG1lbnRDb2RlJykuc2V0VmFsdWUodGhpcy51c2VyU2VydmljZS5nZXRVc2VyRGVwYXJ0bWVudEZyb21QYXRoKHRoaXMuZGF0YS5wYXRoKSk7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgb3BlblN1YnNjcmlwdGlvbnMoKXtcclxuICAgIHRoaXMuZmlsZUZvcm1TdWJzY3JpcHRpb24gPSAgdGhpcy5maWxlRm9ybS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKGRhdGEgPT4ge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRmlsZS5zdGF0aWNEYXRhID0gZGF0YTtcclxuICAgIH0pXHJcblxyXG4gICAgaWYodGhpcy5maWxlRm9ybS5nZXQoJ2FnZW5jeUNhdGVnb3J5Q29kZScpKXtcclxuICAgICAgdGhpcy5hZ2VuY3lDYXRlZ0NvZGVTdWJzY3JpcHRpb24gPSAgdGhpcy5maWxlRm9ybS5nZXQoJ2FnZW5jeUNhdGVnb3J5Q29kZScpLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgICB0aGlzLmZpbGVGb3JtLmdldCgnYWdlbmN5TmFtZScpLnNldFZhbHVlKG51bGwpO1xyXG4gICAgICAgICAgICB0aGlzLmFnZW5jeU5hbWVGaWx0ZXIgPSB7XHJcbiAgICAgICAgICAgICAgY2F0ZWdvcnkgOiByZXNcclxuICAgICAgICAgICAgfTtcclxuICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBpZih0aGlzLmZpbGVGb3JtLmdldCgnY291bnRyeUNhdGVnb3J5Q29kZScpKXtcclxuICAgICAgdGhpcy5jb3VudHJ5Q2F0ZWdDb2RlU3Vic2NyaXB0aW9uID0gIHRoaXMuZmlsZUZvcm0uZ2V0KCdjb3VudHJ5Q2F0ZWdvcnlDb2RlJykudmFsdWVDaGFuZ2VzLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICAgIHRoaXMuZmlsZUZvcm0uZ2V0KCdjb3VudHJ5TmFtZScpLnNldFZhbHVlKG51bGwpO1xyXG4gICAgICAgIHRoaXMuY291bnRyeU5hbWVGaWx0ZXIgPSB7XHJcbiAgICAgICAgICBjYXRlZ29yeSA6IHJlc1xyXG4gICAgICAgIH07XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgb25VcGxvYWRpbmcoZXZlbnQpIHtcclxuICAgIHRoaXMudXBsb2FkTWFuZ21lbnRTZXJ2aWNlLnVwbG9hZGVkRmlsZXNTdGF0dXMudXBsb2FkSW5Qcm9ncmVzcyA9IGV2ZW50O1xyXG4gIH1cclxuXHJcbiAgLy8gb25TY2FubmVyU3VjY2VzcyhldmVudCkge1xyXG4gIC8vICAgLy9jb25zb2xlLmxvZyhldmVudCk7XHJcbiAgLy8gICB0aGlzLnNlbGVjdGVkRmlsZS5maWxlID0gZXZlbnQ7XHJcbiAgLy8gICBsZXQgcGF5TG9hZCA9IHRoaXMuY29uc3RydWN0UGF5TG9hZCh0aGlzLnNlbGVjdGVkRmlsZSk7XHJcbiAgLy8gICB0aGlzLmZpbGVNYW5nZXJTZXJ2aWNlLmNyZWF0ZUZpbGUocGF5TG9hZCwgdGhpcy5maWxlTWFuZ2VyU2VydmljZS5zZWxlY3RlZEZvbGRlcklkKS5zdWJzY3JpYmUocmVzID0+IHtcclxuICAvLyAgICAgdGhpcy5maWxlTWFuZ2VyU2VydmljZS5vblJlZnJlc2hpbmdGaWxlTWFuZ2VyLm5leHQoKTtcclxuICAvLyAgICAgdGhpcy50b3N0ZXJTZXJ2aWNlLnNob3coJ3N1Y2Nlc3MnLCAnVE9BU1RFUi5TVUNDRVNTJywgXCJUT0FTVEVSLkZJTEVfQ1JFQVRFRF9TVUNDRVwiKVxyXG4gIC8vICAgICB0aGlzLmRvY3VtZW50U2NhblNlcnZpY2Uuc3RvcmVkRmlsZSA9IHt9O1xyXG4gIC8vICAgICB0aGlzLnVwbG9hZE1hbmdtZW50U2VydmljZS5yZXNldFN0YXR1cygpO1xyXG4gIC8vICAgfSlcclxuICAvLyB9XHJcblxyXG4gIG9uZHluYW1pY0Zvcm1DaGFuZ2UoZHluYW1pY0RhdGEpIHtcclxuICAgIGlmIChkeW5hbWljRGF0YS5kYXRhKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKGR5bmFtaWNEYXRhLmRhdGEpXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaWxlLmR5bmFtaWNEYXRhID0geyAuLi5keW5hbWljRGF0YSB9O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2xvc2VEaWFsb2coKSB7XHJcbiAgICB0aGlzLmRvY3VtZW50U2NhblNlcnZpY2Uuc3RvcmVkRmlsZSA9IHt9O1xyXG4gICAgdGhpcy5yZW1vdmVTdWJzY3JpcHRpb24oKTtcclxuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKGZhbHNlKTtcclxuXHJcbiAgfVxyXG5cclxuICBtaW5pbWl6RGlhbG9nKCkge1xyXG4gICAgdGhpcy5kb2N1bWVudFNjYW5TZXJ2aWNlLm9uTWluaW1pemluZy5lbWl0KHRydWUpO1xyXG4gICAgdGhpcy51cGxvYWRNYW5nbWVudFNlcnZpY2UudXBsb2FkZWRGaWxlc1N0YXR1cy51cGxvYWRlZEZpbGVzLnB1c2goey4uLnRoaXMuc2VsZWN0ZWRGaWxlfSlcclxuICAgIHRoaXMucmVtb3ZlU3Vic2NyaXB0aW9uKCk7XHJcbiAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSh0cnVlKTtcclxuICB9XHJcblxyXG4gIHJlbW92ZVN1YnNjcmlwdGlvbigpe1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMudXBsb2FkU3RhcnRTdWJzY3JpcHRpb24gPyB0aGlzLnVwbG9hZFN0YXJ0U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCkgOiAnJztcclxuICAgICAgdGhpcy5maWxlQ2hhbmdlU3Vic2NyaXB0aW9uID8gdGhpcy5maWxlQ2hhbmdlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCkgOiAnJztcclxuICAgIH0sIDIwMDApO1xyXG4gIH1cclxuXHJcbiAgc3RhcnRBZGRpbmdQcm9wZXJ0aWVzKCkge1xyXG4gICAgdGhpcy51cGxvYWRNYW5nbWVudFNlcnZpY2UuYWRkaW5nUHJvcGVydGllc01vZGUgPSB0cnVlO1xyXG4gIH1cclxuXHJcblxyXG4gIGNyZWF0ZURvY3VtZW50KCkge1xyXG4gICAgdGhpcy5kb2N1bWVudFNjYW5TZXJ2aWNlLm9uTWluaW1pemluZy5lbWl0KHRydWUpO1xyXG4gICAgdGhpcy51cGxvYWRNYW5nbWVudFNlcnZpY2UudXBsb2FkZWRGaWxlc1N0YXR1cy51cGxvYWRlZEZpbGVzLnB1c2goey4uLnRoaXMuc2VsZWN0ZWRGaWxlfSk7XHJcbiAgICB0aGlzLnNjYW5uZXJVcGxvYWRCdXR0b24uY2xpY2soKTtcclxuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKHRydWUpO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0UGF5TG9hZChmaWxlKSB7XHJcbiAgICBsZXQgcHJvcHMgPSB0aGlzLmR5bmFtaWNGb3JtU2VydmljZS5jb25zdHJ1Y3REeW5hbWljRm9ybVBheWxvYWQoZmlsZS5keW5hbWljRGF0YS5kYXRhLCBmaWxlLmR5bmFtaWNGb3JtKTtcclxuICAgIGxldCBzdGF0aWNGb3JtRGF0YSA9IHRoaXMubWFwcGluZ1N0YXRpY0RhdGEoZmlsZS5zdGF0aWNEYXRhKVxyXG5cclxuICAgIGxldCBwYXJhbSA9IHtcclxuICAgICAgXCJkb2N1bWVudFwiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IHRoaXMuZmlsZVR5cGUudHlwZSxcclxuICAgICAgICBcIm5hbWVcIjogZmlsZS5zdGF0aWNEYXRhLnRpdGxlLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICAuLi5wcm9wcyxcclxuICAgICAgICAgIC4uLnN0YXRpY0Zvcm1EYXRhLFxyXG4gICAgICAgICAgXCJmaWxlOmNvbnRlbnRcIjoge1xyXG4gICAgICAgICAgICBcInVwbG9hZC1iYXRjaFwiOiBmaWxlLmZpbGUuYmxvYlsndXBsb2FkLWJhdGNoJ10sXHJcbiAgICAgICAgICAgIFwidXBsb2FkLWZpbGVJZFwiOiBmaWxlLmZpbGUuYmxvYlsndXBsb2FkLWZpbGVJZCddXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gICAgaWYgKGZpbGUuZmlsZVR5cGUuZG9jdW1lbnRDb2RlKSB7XHJcbiAgICAgIHBhcmFtW1wiZG9jdW1lbnRUeXBlQ29kZVwiXSA9IGZpbGUuZmlsZVR5cGUuZG9jdW1lbnRDb2RlXHJcbiAgICB9XHJcbiAgICByZXR1cm4ge3BhcmFtcyA6IHBhcmFtICwgb3JpZ2luRmlsZSA6IGZpbGV9O1xyXG4gIH1cclxuXHJcbiAgbWFwcGluZ1N0YXRpY0RhdGEoZGF0YSl7XHJcbiAgICBpZihkYXRhLmdkb2N1bWVudERhdGUgJiYgZGF0YS5nZG9jdW1lbnREYXRlICE9PSBudWxsKXtcclxuICAgICAgbW9tZW50LmxvY2FsZSgnZW4nKTtcclxuICAgICAgZGF0YVsnaGRvY3VtZW50RGF0ZSddID0gdGhpcy5kYXRlSGVscGVyU2VydmljZS5ncmVnb3JpYW5Ub0hpanJpKGRhdGEuZ2RvY3VtZW50RGF0ZSwnaVlZWVktaU1NLWlERCcpO1xyXG4gICAgICBkYXRhLmdkb2N1bWVudERhdGUgPSAobW9tZW50KGRhdGEuZ2RvY3VtZW50RGF0ZSkuZm9ybWF0KFwiWVlZWS1NTS1ERFQwMDowMDowMC4wMDBcIikgKyBcIlpcIilcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmFkYXB0ZXIuYWRhcHRPdXQoZGF0YSAsIHRoaXMuc3RhdGljRm9ybUZpZWxkcylcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdER5bmFtaWNGb3JtUGF5bG9hZChmaWxlKSB7XHJcbiAgICBsZXQgdXBkYXRlZER5bmFtaWNWYWx1ZXMgPSB7fVxyXG4gICAgT2JqZWN0LmtleXMoZmlsZT8uZHluYW1pY0RhdGE/LmRhdGEpLm1hcChrZXkgPT4ge1xyXG4gICAgICBsZXQgdXBkYXRlZEtleSA9IGtleS5yZXBsYWNlKCc6JywgJycpO1xyXG4gICAgICBsZXQgcHJlZml4ID0gZmlsZS5keW5hbWljRm9ybS5wcmVmaXhbdXBkYXRlZEtleV07XHJcbiAgICAgIGlmIChwcmVmaXgpIHtcclxuICAgICAgICAvLyBjaGVjayBpZiBjb21wb25lbnQgaXMgdXNlciBzZWxlY3RvciB0byBtYXAgaXRzIGRhdGEgZnJvbSBvYmplY3QgdG8gdXNlcm5hbWUgb3IgaWQgb25seSBcclxuICAgICAgICBpZihmaWxlLmR5bmFtaWNEYXRhLmRhdGFba2V5XSAmJiBmaWxlLmR5bmFtaWNEYXRhLmRhdGFba2V5XVsndXNlclNlbGVjdG9yJ10gJiYgZmlsZS5keW5hbWljRGF0YS5kYXRhW2tleV1bJ3VzZXJTZWxlY3RvciddID09PSB0cnVlKXtcclxuICAgICAgICAgICB1cGRhdGVkRHluYW1pY1ZhbHVlc1twcmVmaXggKyAnOicgKyB1cGRhdGVkS2V5XSA9IGZpbGUuZHluYW1pY0RhdGEuZGF0YVtrZXldWyd2YWx1ZSddWydpZCddID8gZmlsZS5keW5hbWljRGF0YS5kYXRhW2tleV1bJ3ZhbHVlJ11bJ2lkJ10gOiBmaWxlLmR5bmFtaWNEYXRhLmRhdGFba2V5XVsndmFsdWUnXVsncHJvcGVydGllcyddWyd1c2VybmFtZSddO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgIHVwZGF0ZWREeW5hbWljVmFsdWVzW3ByZWZpeCArICc6JyArIHVwZGF0ZWRLZXldID0gZmlsZS5keW5hbWljRGF0YS5kYXRhW2tleV1cclxuICAgICAgICB9XHJcbiAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZihmaWxlLmR5bmFtaWNEYXRhLmRhdGFba2V5XVsndXNlclNlbGVjdG9yJ10gJiYgZmlsZS5keW5hbWljRGF0YS5kYXRhW2tleV1bJ3VzZXJTZWxlY3RvciddID09PSB0cnVlKXtcclxuICAgICAgICAgICB1cGRhdGVkRHluYW1pY1ZhbHVlc1t1cGRhdGVkS2V5XSA9IGZpbGUuZHluYW1pY0RhdGEuZGF0YVtrZXldWyd2YWx1ZSddWydpZCddID8gZmlsZS5keW5hbWljRGF0YS5kYXRhW2tleV1bJ3ZhbHVlJ11bJ2lkJ10gOiBmaWxlLmR5bmFtaWNEYXRhLmRhdGFba2V5XVsndmFsdWUnXVsncHJvcGVydGllcyddWyd1c2VybmFtZSddO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgIHVwZGF0ZWREeW5hbWljVmFsdWVzW3VwZGF0ZWRLZXldID0gZmlsZS5keW5hbWljRGF0YS5kYXRhW2tleV1cclxuICAgICAgICB9XHJcbiAgICAgfVxyXG4gICAgfSlcclxuICAgIHJldHVybiB1cGRhdGVkRHluYW1pY1ZhbHVlcztcclxuICB9XHJcblxyXG4gIGNyZWF0ZVdoZW5GaW5pc2goKSB7XHJcblxyXG4gIH1cclxuXHJcbiAgY2hhbmdUYWJUbyh0YWJOYW1lKSB7XHJcbiAgICB0aGlzLmFjdGl2ZVRhYiA9IHRhYk5hbWU7XHJcbiAgfVxyXG4gIGNoZWNrVmFsaWRhdGlvbigpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCl7XHJcbiAgICB0aGlzLmxhbmdTdWJzY3JpcHRpb24gPyB0aGlzLmxhbmdTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSA6ICcnO1xyXG4gICAgdGhpcy5hZ2VuY3lDYXRlZ0NvZGVTdWJzY3JpcHRpb24gPyB0aGlzLmFnZW5jeUNhdGVnQ29kZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpIDogbnVsbDtcclxuICAgIHRoaXMuY291bnRyeUNhdGVnQ29kZVN1YnNjcmlwdGlvbiA/IHRoaXMuY291bnRyeUNhdGVnQ29kZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpIDogbnVsbDtcclxuICAgIHRoaXMuZmlsZUZvcm1TdWJzY3JpcHRpb24gPyB0aGlzLmZpbGVGb3JtU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCkgOiBudWxsO1xyXG4gIH1cclxufVxyXG5cclxuIiwiPGRpdiBjbGFzcz1cInNjYW5uZXItbW9kYWwtYm9keSByZWxhdGl2ZSBoLWZ1bGxcIj5cclxuICAgIDwhLS0gIC0tPlxyXG4gICAgPCEtLSB0YWJzIC0tPlxyXG4gICAgPGRpdlxyXG4gICAgICAgIGNsYXNzPVwic2Nhbm5lci10YWJzIGQtZmxleCBqdXN0aWZ5LWFyb3VuZCBpdGVtcy1jZW50ZXIgYm9yZGVyLWItMiBib3JkZXItZ3JheS0yMDAgbWItNSB0ZXh0LWdyYXktOTAwIHRleHQtbGdcIlxyXG4gICAgPlxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgICAgY2xhc3M9XCJzY2FubmVyLXNpbmdsZS10YWIgY3Vyc29yLXBvaW50ZXIgdy0xLzIgdGV4dC1jZW50ZXIgcHktMiBib3JkZXItZ3JheS05MDAgaG92ZXI6YmctZ3JheS0xMDBcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwiY2hhbmdUYWJUbygnc2NhbicpXCJcclxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnZm9udC1ib2xkIGJvcmRlci1iLTQnOiBhY3RpdmVUYWIgPT09ICdzY2FuJyB9XCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICAgIHt7XCJDUkVBVEUuU0NBTlwiIHwgdHJhbnNsYXRlfX1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIGNsYXNzPVwic2Nhbm5lci1zaW5nbGUtdGFiIGN1cnNvci1wb2ludGVyIHctMS8yIHRleHQtY2VudGVyIHB5LTIgYm9yZGVyLWdyYXktOTAwIGhvdmVyOmJnLWdyYXktMTAwXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cImNoYW5nVGFiVG8oJ2Zvcm0nKVwiXHJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2ZvbnQtYm9sZCBib3JkZXItYi00JzogYWN0aXZlVGFiID09PSAnZm9ybScgfVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgIHt7XCJDUkVBVEUuREVUQUlMU1wiIHwgdHJhbnNsYXRlfX1cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cInRhYnMtYm9keS13cmFwcGVyXCI+XHJcbiAgICAgICAgPCEtLSB1cGxvYWRlciBpbmRpY2F0b3IgbG9hZGluZyAtLT5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIGNsYXNzPVwidXBsb2FkLWxvYWRlciBteC0yXCJcclxuICAgICAgICAgICAgKm5nSWY9XCJ1cGxvYWRNYW5nbWVudFNlcnZpY2UudXBsb2FkZWRGaWxlc1N0YXR1cy51cGxvYWRJblByb2dyZXNzXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICAgIDxtYXQtcHJvZ3Jlc3MtYmFyIG1vZGU9XCJpbmRldGVybWluYXRlXCI+PC9tYXQtcHJvZ3Jlc3MtYmFyPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8IS0tIHNjYW5uZXIgLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIlwiIFtuZ0NsYXNzXT1cInsgJ2Qtbm9uZSc6IGFjdGl2ZVRhYiA9PT0gJ2Zvcm0nIH1cIj5cclxuICAgICAgICAgICAgPGFwcC1kb2N1bWVudC1zY2FuXHJcbiAgICAgICAgICAgICAgICBbaGlkZVVwbG9hZEJ1dHRvbl09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgIFt1c2VTdG9yZWRGaWxlXT1cInRydWVcIlxyXG4gICAgICAgICAgICA+PC9hcHAtZG9jdW1lbnQtc2Nhbj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPCEtLSBmb3JtcyBhbmQgcHJvcGVydGllcyAgLS0+XHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBjbGFzcz1cImZvcm1zLXNlY3Rpb25cIlxyXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdkLW5vbmUnOiBhY3RpdmVUYWIgPT09ICdzY2FuJyB9XCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LTIvM1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWwtc3R5bGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgXCJDUkVBVEUuRklMRV9UWVBFXCIgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1iYXNlIHRleHQtZ3JheS05MDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgaXNBcmFiaWMgPyAgZmlsZVR5cGUuYXJhYmljVGV4dCA6IGZpbGVUeXBlLmVuZ2xpc2hUZXh0IH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWxlLWZpZWxkcyBtdC0zXCIgU2V0UnRsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiZmlsZUZvcm1cIiAqbmdJZj1cImZpbGVGb3JtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaW5nbGUtZmllbGQgbWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsLXN0eWxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgXCJDUkVBVEUuVElUTEVcIiB8IHRyYW5zbGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PHNwYW4gY2xhc3M9XCJ0ZXh0LXJlZC01MDBcIj4qPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZpZWxkLXN0eWxlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJ0aXRsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCIge3sgJ0NSRUFURS5USVRMRScgfCB0cmFuc2xhdGUgfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaW5nbGUtZmllbGQgbWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsLXN0eWxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgXCJDUkVBVEUuREVTQ1JJUFRJT05cIiB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZpZWxkLXN0eWxlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJkZXNjcmlwdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCIge3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0NSRUFURS5ERVNDUklQVElPTicgfCB0cmFuc2xhdGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0tLS0tLS0tLS0tLS0tLS0tIG5ldyBzdGF0aXMgZm9ybSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInVzaW5nRXh0cmFGaWVsZHNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1keW5hbWljLWZpZWxkcy1yZW5kZXJlciBbZm9ybV09XCJmaWxlRm9ybVwiIFthZ2VuY3lOYW1lRmlsdGVyXT1cImFnZW5jeU5hbWVGaWx0ZXJcIiBbY291bnRyeU5hbWVGaWx0ZXJdPVwiY291bnRyeU5hbWVGaWx0ZXJcIj48L2FwcC1keW5hbWljLWZpZWxkcy1yZW5kZXJlcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJzaW5nbGUtZmllbGQgbWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbC1zdHlsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBcIkNSRUFURS5ET0NVTUVOVF9TVUJKRUNUXCIgfCB0cmFuc2xhdGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX08c3BhbiBjbGFzcz1cInRleHQtcmVkLTUwMFwiPio8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmllbGQtc3R5bGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJzdWJqZWN0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCIge3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDUkVBVEUuRE9DVU1FTlRfU1VCSkVDVCcgfCB0cmFuc2xhdGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaW5nbGUtZmllbGQgbWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbC1zdHlsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBcIkNSRUFURS5ET0NVTUVOVF9OVU1CRVJcIiB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZpZWxkLXN0eWxlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZG9jdW1lbnROdW1iZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIiB7e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0NSRUFURS5ET0NVTUVOVF9OVU1CRVInIHwgdHJhbnNsYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2luZ2xlLWZpZWxkIG1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y3RzLWR5bmFtaWMtZm9ybS1oaWpyaS1kYXRlaXRlbVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJnZG9jdW1lbnREYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw9XCJDUkVBVEUuRE9DVU1FTlRfREFURVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY3RzLWR5bmFtaWMtZm9ybS1oaWpyaS1kYXRlaXRlbT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNpbmdsZS1maWVsZCBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1keW5hbWljLWZvcm0tdm9jYWJ1bGFyeS1pdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInQ1JFQVRFLlNDUkVDWV9MRVZFTCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYmluZExhYmVsXT1cIidsYWJlbCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYmluZFZhbHVlXT1cIidpZCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVk9DQUJVTEFSWS5TRUxFQ1RfSVRFTScgfCB0cmFuc2xhdGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbXVsdGlwbGVdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2VhcmNoYWJsZV09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbG9zZU9uU2VsZWN0XT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGlkZVNlbGVjdGVkSXRlbXNdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdm9jYWJ1bGFyeVR5cGVdPVwiJ1ZPQ19TZWNyZWN5TGV2ZWwnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwic2VjcmVjeUxldmVsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hcHAtZHluYW1pYy1mb3JtLXZvY2FidWxhcnktaXRlbT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNpbmdsZS1maWVsZCBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1keW5hbWljLWZvcm0tdm9jYWJ1bGFyeS1pdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInQ1JFQVRFLklNUE9SVEFOQ0VfTEVWRUwnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2JpbmRMYWJlbF09XCInbGFiZWwnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2JpbmRWYWx1ZV09XCInaWQnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1ZPQ0FCVUxBUlkuU0VMRUNUX0lURU0nIHwgdHJhbnNsYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW211bHRpcGxlXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlYXJjaGFibGVdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xvc2VPblNlbGVjdF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hpZGVTZWxlY3RlZEl0ZW1zXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZvY2FidWxhcnlUeXBlXT1cIidWT0NfSW1wb3J0YW5jZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJpbXBvcnRhbmNlTGV2ZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2FwcC1keW5hbWljLWZvcm0tdm9jYWJ1bGFyeS1pdGVtPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNpbmdsZS1maWVsZCBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsLXN0eWxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwiQ1JFQVRFLkRFUEFSVE1FTlRfQ09ERVwiIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1keW5hbWljLWZvcm0tZGVwYXJ0bWVudFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJkZXBhcnRtZW50Q29kZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCIncGxlYXNlIHNlbGVjdCBkZXBhcnRtZW50J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwcF9kZXBhcnRtZW50TmVzdGVkVHJlZV09XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdQUF9PU19EZXBhcnRtZW50cydcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BwX2RlcGFydG1lbnRUcmVlXT1cIidQUF9PU19EZXBhcnRtZW50cydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY3VzdG9tUHJlZml4XT1cIidvc2RlcHQnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2N1c3RvbVBhcmVudFByb3BlcnR5XT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29zZGVwYXJ0bWVudF9wYXJlbnREZXBhcnRtZW50Q29kZSdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3VzZUN1c3RvbUFkZEVkaXRBY3Rpb25dPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYXBwLWR5bmFtaWMtZm9ybS1kZXBhcnRtZW50PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNpbmdsZS1maWVsZCBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC10cmFuc2xhdGVkLXZvY2FidWxhcnktc2VsZWN0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInQ1JFQVRFLkFHRU5DWV9DQVRFR09SWV9DT0RFJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthcmJCaW5kTGFiZWxdPVwiJ2xhYmVsX2FyJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlbmdCaW5kTGFiZWxdPVwiJ2xhYmVsX2VuJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtiaW5kVmFsdWVdPVwiJ2lkJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdWT0NBQlVMQVJZLlNFTEVDVF9JVEVNJyB8IHRyYW5zbGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttdWx0aXBsZV09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWFyY2hhYmxlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xvc2VPblNlbGVjdF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hpZGVTZWxlY3RlZEl0ZW1zXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiYWdlbmN5Q2F0ZWdvcnlDb2RlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZvY2J1bGFyeUlkXT1cIidWT0NfQWdlbmN5Q2F0ZWdvcnknXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3VzZUZpbHRlcl09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYXBwLXRyYW5zbGF0ZWQtdm9jYWJ1bGFyeS1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2luZ2xlLWZpZWxkIG1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXBwLXRyYW5zbGF0ZWQtdm9jYWJ1bGFyeS1zZWxlY3RcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidDUkVBVEUuQUdFTkNZX05BTUUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FyYkJpbmRMYWJlbF09XCInbGFiZWxfYXInXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2VuZ0JpbmRMYWJlbF09XCInbGFiZWxfZW4nXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2JpbmRWYWx1ZV09XCInaWQnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1ZPQ0FCVUxBUlkuU0VMRUNUX0lURU0nIHwgdHJhbnNsYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW211bHRpcGxlXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlYXJjaGFibGVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbG9zZU9uU2VsZWN0XT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGlkZVNlbGVjdGVkSXRlbXNdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJhZ2VuY3lOYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZvY2J1bGFyeUlkXT1cIidWT0NfQWdlbmN5J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmaWx0ZXJdPVwiYWdlbmN5TmFtZUZpbHRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt1c2VGaWx0ZXJdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYXBwLXRyYW5zbGF0ZWQtdm9jYWJ1bGFyeS1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2luZ2xlLWZpZWxkIG1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXBwLXRyYW5zbGF0ZWQtdm9jYWJ1bGFyeS1zZWxlY3RcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidDUkVBVEUuQ09VTlRSWV9DQVRFR09SWV9DT0RFJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthcmJCaW5kTGFiZWxdPVwiJ2xhYmVsX2FyJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlbmdCaW5kTGFiZWxdPVwiJ2xhYmVsX2VuJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtiaW5kVmFsdWVdPVwiJ2lkJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdWT0NBQlVMQVJZLlNFTEVDVF9JVEVNJyB8IHRyYW5zbGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttdWx0aXBsZV09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWFyY2hhYmxlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xvc2VPblNlbGVjdF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hpZGVTZWxlY3RlZEl0ZW1zXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiY291bnRyeUNhdGVnb3J5Q29kZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2b2NidWxhcnlJZF09XCInVk9DX0NvdW50cnlDYXRlZ29yeSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdXNlRmlsdGVyXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hcHAtdHJhbnNsYXRlZC12b2NhYnVsYXJ5LXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaW5nbGUtZmllbGQgbWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcHAtdHJhbnNsYXRlZC12b2NhYnVsYXJ5LXNlbGVjdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ0NSRUFURS5DT1VOVFJZX05BTUUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FyYkJpbmRMYWJlbF09XCInbGFiZWxfYXInXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2VuZ0JpbmRMYWJlbF09XCInbGFiZWxfZW4nXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2JpbmRWYWx1ZV09XCInaWQnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1ZPQ0FCVUxBUlkuU0VMRUNUX0lURU0nIHwgdHJhbnNsYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW211bHRpcGxlXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlYXJjaGFibGVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbG9zZU9uU2VsZWN0XT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGlkZVNlbGVjdGVkSXRlbXNdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJjb3VudHJ5TmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2b2NidWxhcnlJZF09XCInVk9DX0NvdW50cnknXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZpbHRlcl09XCJjb3VudHJ5TmFtZUZpbHRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt1c2VGaWx0ZXJdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYXBwLXRyYW5zbGF0ZWQtdm9jYWJ1bGFyeS1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2luZ2xlLWZpZWxkIG1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWwtc3R5bGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgXCJDUkVBVEUuUkVNQVJLU1wiIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmllbGQtc3R5bGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJyZW1hcmtzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCIge3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDUkVBVEUuUkVNQVJLUycgfCB0cmFuc2xhdGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8L2Zvcm0+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSAqbmdJZj1cIlwiIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXBhcnQgLW14LTRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInNlbGVjdGVkRmlsZS5keW5hbWljRm9ybSAmJiBzaG93UmVuZGVyZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1keW5hbWljLWZvcm1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtXT1cInNlbGVjdGVkRmlsZS5keW5hbWljRm9ybVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0YV09XCJ0ZW1wb3JhcnlEeWFubWljRGF0YVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uZHluYW1pY0Zvcm1DaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L2FwcC1keW5hbWljLWZvcm0+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0gYWN0aW9ucyBhbmQgYnV0dG9ucyAgLS0+XHJcbiAgICA8ZGl2XHJcbiAgICAgICAgY2xhc3M9XCJ3LWZ1bGwgZC1mbGV4IGp1c3RpZnktYmV0d2VlbiBzY2FubmVyLWFjdGlvbnMtd3JhcHBlciBhYnNvbHV0ZSBib3R0b20tMFwiXHJcbiAgICA+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXhcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNhbmNlbGF0aW9uLWJ1dHRvblwiIChjbGljayk9XCJjbG9zZURpYWxvZygpXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBcIkJVVFRPTlMuQ0FOQ0VMXCIgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjYW5jZWxhdGlvbi1idXR0b24gbXgtMlwiIChjbGljayk9XCJtaW5pbWl6RGlhbG9nKClcIj5cclxuICAgICAgICAgICAgICAgIHt7IFwiQlVUVE9OUy5NSU5JTUlaRURcIiB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPCEtLSAgLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiPlxyXG4gICAgICAgICAgICA8IS0tIDxidXR0b25cclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiY3JlYXRpb25GYWlsZWRcIlxyXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIlxyXG4gICAgICAgICAgICAgICAgICAgIHNjYW5uZXJVcGxvYWRCdXR0b24uZGlzYWJsZWQgfHxcclxuICAgICAgICAgICAgICAgICAgICAhc2VsZWN0ZWRGaWxlLmR5bmFtaWNEYXRhLnZhbGlkIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgZmlsZUZvcm0uaW52YWxpZFxyXG4gICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcclxuICAgICAgICAgICAgICAgICAgICAnb3BhY2l0eS0zMCBjdXJzb3Itbm90LWFsbG93ZWQnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzY2FubmVyVXBsb2FkQnV0dG9uLmRpc2FibGVkIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICFzZWxlY3RlZEZpbGUuZHluYW1pY0RhdGEudmFsaWQgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZUZvcm0uaW52YWxpZFxyXG4gICAgICAgICAgICAgICAgfVwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiY3JlYXRlRG9jdW1lbnQoKVwiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInN1Ym1pc3Npb24tYnV0dG9uXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAge3sgXCJCVVRUT05TLlRSWV9BR0FJTlwiIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPiAtLT5cclxuICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImNyZWF0ZURvY3VtZW50KClcIlxyXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIlxyXG4gICAgICAgICAgICAgICAgICAgIHNjYW5uZXJVcGxvYWRCdXR0b24uZGlzYWJsZWQgfHxcclxuICAgICAgICAgICAgICAgICAgICAhc2VsZWN0ZWRGaWxlLmR5bmFtaWNEYXRhLnZhbGlkIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgZmlsZUZvcm0uaW52YWxpZFxyXG4gICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcclxuICAgICAgICAgICAgICAgICAgICAnb3BhY2l0eS0zMCBjdXJzb3Itbm90LWFsbG93ZWQnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzY2FubmVyVXBsb2FkQnV0dG9uLmRpc2FibGVkIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICFzZWxlY3RlZEZpbGUuZHluYW1pY0RhdGEudmFsaWQgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZUZvcm0uaW52YWxpZFxyXG4gICAgICAgICAgICAgICAgfVwiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInN1Ym1pc3Npb24tYnV0dG9uXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAge3sgdXBsb2FkTWFuZ21lbnRTZXJ2aWNlLnNjYW5DcmVhdGlvbkZhaWxlZCA/ICAoXCJCVVRUT05TLlRSWV9BR0FJTlwiIHwgdHJhbnNsYXRlKSA6IChcIkJVVFRPTlMuQ1JFQVRFXCIgfCB0cmFuc2xhdGUpIH19XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
|
|
346
|
+
}] }, { type: i14.DocumentScanService }, { type: i0.Injector }]; } });
|
|
347
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nhbi1tb2RhbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9udXhlby1kZXZlbG9wbWVudC1mcmFtZXdvcmsvc3JjL2xpYi9jb21wb25lbnRzL2ZpbGUtbWFuZ2VyL2NvbXBvbmVudHMvc2Nhbi1tb2RhbC9zY2FuLW1vZGFsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL251eGVvLWRldmVsb3BtZW50LWZyYW1ld29yay9zcmMvbGliL2NvbXBvbmVudHMvZmlsZS1tYW5nZXIvY29tcG9uZW50cy9zY2FuLW1vZGFsL3NjYW4tbW9kYWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQStCLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sRUFBMEIsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEUsT0FBTyxFQUFnQixlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQU16RSxPQUFPLEVBQUUsRUFBRSxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUN4QyxPQUFPLEtBQUssTUFBTSxNQUFNLFFBQVEsQ0FBQztBQVFqQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwREFBMEQsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBUy9GLE1BQU0sT0FBTyxrQkFDWixTQUFRLG1CQUFpRDtJQW9DekQsWUFDaUMsSUFBSSxFQUM3QixTQUEyQyxFQUMzQyxxQkFBNkMsRUFDN0MscUJBQTRDLEVBQzNDLGlCQUFxQyxFQUNyQyxhQUFrQyxFQUNuQyxXQUF3QixFQUN2QixrQkFBc0MsRUFDdEMsaUJBQW9DLEVBQ3JDLE9BQXVCLEVBQ3RCLGtCQUFzQyxFQUN0QyxZQUEwQixFQUMxQixXQUF3QixFQUN4QixjQUFnQyxFQUNULFdBQVcsRUFDbEMsbUJBQXdD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LFNBQVMsR0FBRyxPQUFPLENBQUM7SUFDMUIsQ0FBQztJQUNELGVBQWU7UUFDZCxPQUFPLEtBQUssQ0FBQztJQUNkLENBQUM7SUFFRCxXQUFXO1FBQ1YsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNqRSxJQUFJLENBQUMsMkJBQTJCO1lBQy9CLENBQUMsQ0FBQyxJQUFJLENBQUMsMkJBQTJCLENBQUMsV0FBVyxFQUFFO1lBQ2hELENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDUixJQUFJLENBQUMsNEJBQTRCO1lBQ2hDLENBQUMsQ0FBQyxJQUFJLENBQUMsNEJBQTRCLENBQUMsV0FBVyxFQUFFO1lBQ2pELENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDUixJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQzVFLENBQUM7O2dIQXJYVyxrQkFBa0Isa0JBc0NyQixlQUFlLGtiQWNmLGFBQWE7b0dBcERWLGtCQUFrQiw2RUMxQi9CLHM1SkFrSUE7NEZEeEdhLGtCQUFrQjtrQkFMOUIsU0FBUzttQkFBQztvQkFDVixRQUFRLEVBQUUsZ0JBQWdCO29CQUMxQixXQUFXLEVBQUUsNkJBQTZCO29CQUMxQyxTQUFTLEVBQUUsQ0FBQyw2QkFBNkIsQ0FBQztpQkFDMUM7OzBCQXVDRSxNQUFNOzJCQUFDLGVBQWU7OzBCQWN0QixNQUFNOzJCQUFDLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEluamVjdCwgSW5qZWN0b3IsIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE1hdERpYWxvZ1JlZiwgTUFUX0RJQUxPR19EQVRBIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgVXBsb2FkTWFuYWdtZW50U2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZC1zZXJ2aWNlcy91cGxvYWQtbWFuYWdtZW50LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEaWFsb2dNYW5nbWVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zaGFyZWQtc2VydmljZXMvZGlhbG9nLW1hbmdtZW50LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEeW5hbWljRm9ybVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zaGFyZWQtc2VydmljZXMvZHluYW1pYy1mb3JtLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBGaWxlTWFuYWdlclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zaGFyZWQtc2VydmljZXMvZmlsZS1tYW5hZ2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBVc2VyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZC1zZXJ2aWNlcy91c2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBvZiwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCAqIGFzIG1vbWVudCBmcm9tICdtb21lbnQnO1xyXG5pbXBvcnQgeyBDdXN0b21Ub2FzdHJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vY3VzdG9tLXRvYXN0ci9zZXJ2aWNlcy9jdXN0b20tdG9hc3RyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEb2N1bWVudFNjYW5TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vZG9jdW1lbnRzL2NvbXBvbmVudHMvZG9jdW1lbnQtc2Nhbi9kb2N1bWVudC1zY2FuLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEYXRlSGVscGVyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2hpanJpLWdyZWdvcmlhbi1kYXRlcGlja2VyL3NlcnZpY2VzL2RhdGUtaGVscGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBZGFwdGVyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvYWRhcHRlcnMvYWRhcHRlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVHJhbnNsYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9zZXJ2aWNlcy90cmFuc2xhdGlvbi90cmFuc2xhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTnV4ZW9TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9zZXJ2aWNlcy9udXhlby9udXhlby5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQXBwQ29uZmlnU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL2NvbmZpZ3VyYXRpb24vYXBwLWNvbmZpZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQmFzZURpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZC9jb21wb25lbnRzL2Jhc2UvYmFzZS1kaWFsb2cuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRGlhbG9nQWN0aW9uVHlwZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZC9jb21wb25lbnRzL251eGVvLWRpYWxvZy9tb2RlbHMvZGlhbG9nLW9wdGlvbi5tb2RlbCc7XHJcbmltcG9ydCB7IHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG5cdHNlbGVjdG9yOiAnYXBwLXNjYW4tbW9kYWwnLFxyXG5cdHRlbXBsYXRlVXJsOiAnLi9zY2FuLW1vZGFsLmNvbXBvbmVudC5odG1sJyxcclxuXHRzdHlsZVVybHM6IFsnLi9zY2FuLW1vZGFsLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFNjYW5Nb2RhbENvbXBvbmVudFxyXG5cdGV4dGVuZHMgQmFzZURpYWxvZ0NvbXBvbmVudDxTY2FuTW9kYWxDb21wb25lbnQsIGFueSwgYW55PlxyXG5cdGltcGxlbWVudHMgT25Jbml0XHJcbntcclxuXHRzY2FubmVyVXBsb2FkQnV0dG9uO1xyXG5cdGZpbGVUeXBlO1xyXG5cdHNvdXJjZTtcclxuXHRhY3RpdmVUYWIgPSAnc2Nhbic7XHJcblx0Y3JlYXRlV2hlbkZpbmlzaE1vZGUgPSBmYWxzZTtcclxuXHRteUVudmlyb25tZW50O1xyXG5cdHNlbGVjdGVkRmlsZSA9IHtcclxuXHRcdHN0YXRpY0RhdGE6IHt9LFxyXG5cdFx0ZmlsZVR5cGU6ICcnLFxyXG5cdFx0ZHluYW1pY0Zvcm06ICcnLFxyXG5cdFx0ZHluYW1pY0RhdGE6IHtcclxuXHRcdFx0dmFsaWQ6IGZhbHNlLFxyXG5cdFx0XHRkYXRhOiB7fVxyXG5cdFx0fSxcclxuXHRcdGZpbGU6ICcnXHJcblx0fTtcclxuXHR0ZW1wb3JhcnlEeWFubWljRGF0YSA9IHt9O1xyXG5cdHNob3dSZW5kZXJlciA9IGZhbHNlO1xyXG5cclxuXHR1cGxvYWRTdGFydFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG5cdGZpbGVDaGFuZ2VTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcclxuXHRmaWxlRm9ybVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG5cdGFnZW5jeUNhdGVnQ29kZVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG5cdGNvdW50cnlDYXRlZ0NvZGVTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcclxuXHRsYW5nU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcblxyXG5cdHNob3dTdGF0aWNGb3JtID0gZmFsc2U7XHJcblx0dXNpbmdFeHRyYUZpZWxkcyA9IGZhbHNlOyAvLyBmbGFnZSB0byBzd2l0Y2ggYmV0d2VlbiBzdGF0aWMgZm9ybSB0eXBlc1xyXG5cdGZpbGVGb3JtOiBGb3JtR3JvdXA7XHJcblx0c3RhdGljRm9ybUZpZWxkcztcclxuXHRhZ2VuY3lOYW1lRmlsdGVyO1xyXG5cdGNvdW50cnlOYW1lRmlsdGVyO1xyXG5cclxuXHRjb25zdHJ1Y3RvcihcclxuXHRcdEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZGF0YSxcclxuXHRcdHB1YmxpYyBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxTY2FuTW9kYWxDb21wb25lbnQ+LFxyXG5cdFx0cHVibGljIHVwbG9hZE1hbmdtZW50U2VydmljZTogVXBsb2FkTWFuYWdtZW50U2VydmljZSxcclxuXHRcdHB1YmxpYyBkaWFsb2dNYW5nbWVudFNlcnZpY2U6IERpYWxvZ01hbmdtZW50U2VydmljZSxcclxuXHRcdHByaXZhdGUgZmlsZU1hbmdlclNlcnZpY2U6IEZpbGVNYW5hZ2VyU2VydmljZSxcclxuXHRcdHByaXZhdGUgdG9zdGVyU2VydmljZTogQ3VzdG9tVG9hc3RyU2VydmljZSxcclxuXHRcdHB1YmxpYyBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsXHJcblx0XHRwcml2YXRlIGR5bmFtaWNGb3JtU2VydmljZTogRHluYW1pY0Zvcm1TZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBkYXRlSGVscGVyU2VydmljZTogRGF0ZUhlbHBlclNlcnZpY2UsXHJcblx0XHRwdWJsaWMgYWRhcHRlcjogQWRhcHRlclNlcnZpY2UsXHJcblx0XHRwcml2YXRlIHRyYW5zbGF0aW9uU2VydmljZTogVHJhbnNsYXRpb25TZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBudXhlb1NlcnZpY2U6IE51eGVvU2VydmljZSxcclxuXHRcdHByaXZhdGUgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBhcHBDb25mU2VydmljZTogQXBwQ29uZmlnU2VydmljZSxcclxuXHRcdEBJbmplY3QoJ2Vudmlyb25tZW50JykgcHJpdmF0ZSBlbnZpcm5vbWVudCxcclxuXHRcdHByaXZhdGUgZG9jdW1lbnRTY2FuU2VydmljZTogRG9jdW1lbnRTY2FuU2VydmljZSxcclxuXHRcdGluamVjdG9yOiBJbmplY3RvclxyXG5cdCkge1xyXG5cdFx0c3VwZXIoaW5qZWN0b3IpO1xyXG5cdFx0dGhpcy5teUVudmlyb25tZW50ID0gdGhpcy5lbnZpcm5vbWVudDtcclxuXHR9XHJcblxyXG5cdG5nT25Jbml0KCk6IHZvaWQge1xyXG5cdFx0dGhpcy5jcmVhdGVXaGVuRmluaXNoTW9kZSA9IGZhbHNlO1xyXG5cdFx0dGhpcy5maWxlVHlwZSA9IHRoaXMuZGlhbG9nTWFuZ21lbnRTZXJ2aWNlLmZpbGVUeXBlO1xyXG5cdFx0dGhpcy5zb3VyY2UgPSB0aGlzLmRpYWxvZ01hbmdtZW50U2VydmljZS5hZGRpbmdGcm9tO1xyXG5cclxuXHRcdHRoaXMuZmlsZU1hbmdlclNlcnZpY2VcclxuXHRcdFx0LmdldEZpbGVTY2hlbWFzKHRoaXMuZmlsZVR5cGUudHlwZSlcclxuXHRcdFx0LnN1YnNjcmliZSgoc2NoZW1hcykgPT4ge1xyXG5cdFx0XHRcdHNjaGVtYXMubWFwKChpdGVtKSA9PiB7XHJcblx0XHRcdFx0XHRpZiAoaXRlbS5uYW1lID09PSAnZ2VuZXJhbGRvY3VtZW50Jykge1xyXG5cdFx0XHRcdFx0XHR0aGlzLnVzaW5nRXh0cmFGaWVsZHMgPSB0cnVlO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHRcdHRoaXMuaW5pdGlhdGZpbGVGb3JtKCk7XHJcblx0XHRcdFx0Ly9pZiBzdGFydGluZyBmcm9tIGZpbGVtbmFnZXIgdGhlbiBpIGhhdmUgZml4ZWQgZmlsZSB0eXBlIGZvciBhbGwgYXR0YWNobWV0biBhbmQgc2luZ2xlIGR5bmFpbWMgZm9ybSAgdHlwZVxyXG5cdFx0XHRcdGlmICh0aGlzLnNvdXJjZSA9PT0gJ2ZpbGVNYW5nZXInKSB7XHJcblx0XHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRcdHRoaXMudXBsb2FkTWFuZ21lbnRTZXJ2aWNlLnVwbG9hZGVkRmlsZXNTdGF0dXMudXBsb2FkZWRGaWxlc1xyXG5cdFx0XHRcdFx0XHRcdC5sZW5ndGggPiAwXHJcblx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5zZWxlY3RlZEZpbGUgPSB7XHJcblx0XHRcdFx0XHRcdFx0XHQuLi50aGlzLnVwbG9hZE1hbmdtZW50U2VydmljZS51cGxvYWRlZEZpbGVzU3RhdHVzLnVwbG9hZGVkRmlsZXMuc2hpZnQoKVxyXG5cdFx0XHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHRcdFx0dGhpcy50ZW1wb3JhcnlEeWFubWljRGF0YSA9IHRoaXMuc2VsZWN0ZWRGaWxlLmR5bmFtaWNEYXRhLmRhdGE7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5maWxlRm9ybS5wYXRjaFZhbHVlKHRoaXMuc2VsZWN0ZWRGaWxlLnN0YXRpY0RhdGEpO1xyXG5cdFx0XHRcdFx0XHRcdGlmICh0aGlzLnNlbGVjdGVkRmlsZVsnc3RhdGljRGF0YSddWydhZ2VuY3lDYXRlZ29yeUNvZGUnXSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5hZ2VuY3lOYW1lRmlsdGVyID0ge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRjYXRlZ29yeTpcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLnNlbGVjdGVkRmlsZVsnc3RhdGljRGF0YSddWydhZ2VuY3lDYXRlZ29yeUNvZGUnXVxyXG5cdFx0XHRcdFx0XHRcdFx0fTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0aWYgKHRoaXMuc2VsZWN0ZWRGaWxlWydzdGF0aWNEYXRhJ11bJ2NvdW50cnlDYXRlZ29yeUNvZGUnXSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5jb3VudHJ5TmFtZUZpbHRlciA9IHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0Y2F0ZWdvcnk6XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5zZWxlY3RlZEZpbGVbJ3N0YXRpY0RhdGEnXVsnY291bnRyeUNhdGVnb3J5Q29kZSddXHJcblx0XHRcdFx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR0aGlzLm9wZW5TdWJzY3JpcHRpb25zKCk7XHJcblx0XHRcdFx0XHRcdH0sIDIwMDApO1xyXG5cdFx0XHRcdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLnNob3dSZW5kZXJlciA9IHRydWU7XHJcblx0XHRcdFx0XHRcdH0sIDMwMDApO1xyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0dGhpcy5zZWxlY3RlZEZpbGUuZHluYW1pY0Zvcm0gPVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGlhbG9nTWFuZ21lbnRTZXJ2aWNlLnN0b3JlZER5bmFtaWNGb3JtO1xyXG5cdFx0XHRcdFx0XHR0aGlzLnNob3dSZW5kZXJlciA9IHRydWU7XHJcblx0XHRcdFx0XHRcdHRoaXMub3BlblN1YnNjcmlwdGlvbnMoKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cclxuXHRcdHRoaXMudXBsb2FkU3RhcnRTdWJzY3JpcHRpb24gPVxyXG5cdFx0XHR0aGlzLmRvY3VtZW50U2NhblNlcnZpY2UudXBsb2FkU3RhcnQuc3Vic2NyaWJlKChyZXMpID0+IHtcclxuXHRcdFx0XHR0aGlzLnVwbG9hZE1hbmdtZW50U2VydmljZS51cGxvYWRlZEZpbGVzU3RhdHVzLnVwbG9hZEluUHJvZ3Jlc3MgPSByZXM7XHJcblx0XHRcdH0pO1xyXG5cdFx0dGhpcy5maWxlQ2hhbmdlU3Vic2NyaXB0aW9uID0gdGhpcy5kb2N1bWVudFNjYW5TZXJ2aWNlLmZpbGVDaGFuZ2Uuc3Vic2NyaWJlKFxyXG5cdFx0XHQoZXZlbnQpID0+IHtcclxuXHRcdFx0XHQvL2NvbnNvbGUubG9nKGV2ZW50KTtcclxuXHRcdFx0XHR0aGlzLnNlbGVjdGVkRmlsZS5maWxlID0gZXZlbnQ7XHJcblx0XHRcdFx0bGV0IHBheUxvYWQgPSB0aGlzLmNvbnN0cnVjdFBheUxvYWQodGhpcy5zZWxlY3RlZEZpbGUpO1xyXG5cdFx0XHRcdHRoaXMuZmlsZU1hbmdlclNlcnZpY2VcclxuXHRcdFx0XHRcdC5jcmVhdGVGaWxlKHBheUxvYWQsIHRoaXMuZmlsZU1hbmdlclNlcnZpY2Uuc2VsZWN0ZWRGb2xkZXJJZClcclxuXHRcdFx0XHRcdC5zdWJzY3JpYmUoKHJlcykgPT4ge1xyXG5cdFx0XHRcdFx0XHRpZiAocmVzWydzdGF0dXMnXSAmJiByZXNbJ3N0YXR1cyddID09PSAnZmFpbGVkJykge1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMudXBsb2FkTWFuZ21lbnRTZXJ2aWNlLnNjYW5DcmVhdGlvbkZhaWxlZCA9IHRydWU7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy50b3N0ZXJTZXJ2aWNlLnNob3coXHJcblx0XHRcdFx0XHRcdFx0XHQnZXJyb3InLFxyXG5cdFx0XHRcdFx0XHRcdFx0J1RPQVNURVIuRVJST1InLFxyXG5cdFx0XHRcdFx0XHRcdFx0J1RPQVNURVIuVVBMT0FEX0VSUk9SJ1xyXG5cdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5yZW1vdmVTdWJzY3JpcHRpb24oKTtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmZpbGVNYW5nZXJTZXJ2aWNlLm9uUmVmcmVzaGluZ0ZpbGVNYW5nZXIubmV4dCgpO1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMudG9zdGVyU2VydmljZS5zaG93KFxyXG5cdFx0XHRcdFx0XHRcdFx0J3N1Y2Nlc3MnLFxyXG5cdFx0XHRcdFx0XHRcdFx0J1RPQVNURVIuU1VDQ0VTUycsXHJcblx0XHRcdFx0XHRcdFx0XHQnVE9BU1RFUi5GSUxFX0NSRUFURURfU1VDQ0UnXHJcblx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRvY3VtZW50U2NhblNlcnZpY2Uuc3RvcmVkRmlsZSA9IHt9O1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMudXBsb2FkTWFuZ21lbnRTZXJ2aWNlLnJlc2V0U3RhdHVzKCk7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5yZW1vdmVTdWJzY3JpcHRpb24oKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdH1cclxuXHRcdCk7XHJcblxyXG5cdFx0dGhpcy5zY2FubmVyVXBsb2FkQnV0dG9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NjYW5uZXJVcGxvYWRCdXR0b24nKTtcclxuXHR9XHJcblxyXG5cdGluaXRpYXRmaWxlRm9ybSgpIHtcclxuXHRcdGlmICh0aGlzLnVzaW5nRXh0cmFGaWVsZHMpIHtcclxuXHRcdFx0dGhpcy5maWxlRm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG5cdFx0XHRcdHRpdGxlOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXHJcblx0XHRcdFx0ZGVzY3JpcHRpb246IFsnJ10sXHJcblx0XHRcdFx0c3ViamVjdDogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG5cdFx0XHRcdGRvY3VtZW50TnVtYmVyOiBbJyddLFxyXG5cdFx0XHRcdGdkb2N1bWVudERhdGU6IFtudWxsLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG5cdFx0XHRcdHNlY3JlY3lMZXZlbDogW251bGxdLFxyXG5cdFx0XHRcdGltcG9ydGFuY2VMZXZlbDogW251bGxdLFxyXG5cdFx0XHRcdGRlcGFydG1lbnRDb2RlOiBbJyddLFxyXG5cdFx0XHRcdGFnZW5jeUNhdGVnb3J5Q29kZTogW251bGxdLFxyXG5cdFx0XHRcdGFnZW5jeU5hbWU6IFtudWxsXSxcclxuXHRcdFx0XHRjb3VudHJ5Q2F0ZWdvcnlDb2RlOiBbbnVsbF0sXHJcblx0XHRcdFx0Y291bnRyeU5hbWU6IFtudWxsXSxcclxuXHRcdFx0XHRyZW1hcmtzOiBbJyddXHJcblx0XHRcdH0pO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy5maWxlRm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG5cdFx0XHRcdHRpdGxlOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXHJcblx0XHRcdFx0ZGVzY3JpcHRpb246IFsnJ11cclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblx0XHR0aGlzLnN0YXRpY0Zvcm1GaWVsZHMgPVxyXG5cdFx0XHR0aGlzLmFwcENvbmZTZXJ2aWNlLm15Q29uZmlndXJhdGlvbi5zdGF0aWNGb3JtRmllbGRzO1xyXG5cdFx0aWYgKHRoaXMuZmlsZUZvcm1TdWJzY3JpcHRpb24pIHtcclxuXHRcdFx0dGhpcy5maWxlRm9ybVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKHRoaXMuZmlsZUZvcm0uZ2V0KCdkZXBhcnRtZW50Q29kZScpKSB7XHJcblx0XHRcdHRoaXMuZmlsZUZvcm1cclxuXHRcdFx0XHQuZ2V0KCdkZXBhcnRtZW50Q29kZScpXHJcblx0XHRcdFx0LnNldFZhbHVlKHRoaXMudXNlclNlcnZpY2UuZ2V0VXNlckRlcGFydG1lbnRGcm9tUGF0aCh0aGlzLmRhdGEucGF0aCkpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0b3BlblN1YnNjcmlwdGlvbnMoKSB7XHJcblx0XHR0aGlzLmZpbGVGb3JtU3Vic2NyaXB0aW9uID0gdGhpcy5maWxlRm9ybS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKChkYXRhKSA9PiB7XHJcblx0XHRcdHRoaXMuc2VsZWN0ZWRGaWxlLnN0YXRpY0RhdGEgPSBkYXRhO1xyXG5cdFx0fSk7XHJcblxyXG5cdFx0aWYgKHRoaXMuZmlsZUZvcm0uZ2V0KCdhZ2VuY3lDYXRlZ29yeUNvZGUnKSkge1xyXG5cdFx0XHR0aGlzLmFnZW5jeUNhdGVnQ29kZVN1YnNjcmlwdGlvbiA9IHRoaXMuZmlsZUZvcm1cclxuXHRcdFx0XHQuZ2V0KCdhZ2VuY3lDYXRlZ29yeUNvZGUnKVxyXG5cdFx0XHRcdC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKChyZXMpID0+IHtcclxuXHRcdFx0XHRcdHRoaXMuZmlsZUZvcm0uZ2V0KCdhZ2VuY3lOYW1lJykuc2V0VmFsdWUobnVsbCk7XHJcblx0XHRcdFx0XHR0aGlzLmFnZW5jeU5hbWVGaWx0ZXIgPSB7XHJcblx0XHRcdFx0XHRcdGNhdGVnb3J5OiByZXNcclxuXHRcdFx0XHRcdH07XHJcblx0XHRcdFx0fSk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRoaXMuZmlsZUZvcm0uZ2V0KCdjb3VudHJ5Q2F0ZWdvcnlDb2RlJykpIHtcclxuXHRcdFx0dGhpcy5jb3VudHJ5Q2F0ZWdDb2RlU3Vic2NyaXB0aW9uID0gdGhpcy5maWxlRm9ybVxyXG5cdFx0XHRcdC5nZXQoJ2NvdW50cnlDYXRlZ29yeUNvZGUnKVxyXG5cdFx0XHRcdC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKChyZXMpID0+IHtcclxuXHRcdFx0XHRcdHRoaXMuZmlsZUZvcm0uZ2V0KCdjb3VudHJ5TmFtZScpLnNldFZhbHVlKG51bGwpO1xyXG5cdFx0XHRcdFx0dGhpcy5jb3VudHJ5TmFtZUZpbHRlciA9IHtcclxuXHRcdFx0XHRcdFx0Y2F0ZWdvcnk6IHJlc1xyXG5cdFx0XHRcdFx0fTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdG9uVXBsb2FkaW5nKGV2ZW50KSB7XHJcblx0XHR0aGlzLnVwbG9hZE1hbmdtZW50U2VydmljZS51cGxvYWRlZEZpbGVzU3RhdHVzLnVwbG9hZEluUHJvZ3Jlc3MgPSBldmVudDtcclxuXHR9XHJcblxyXG5cdC8vIG9uU2Nhbm5lclN1Y2Nlc3MoZXZlbnQpIHtcclxuXHQvLyAgIC8vY29uc29sZS5sb2coZXZlbnQpO1xyXG5cdC8vICAgdGhpcy5zZWxlY3RlZEZpbGUuZmlsZSA9IGV2ZW50O1xyXG5cdC8vICAgbGV0IHBheUxvYWQgPSB0aGlzLmNvbnN0cnVjdFBheUxvYWQodGhpcy5zZWxlY3RlZEZpbGUpO1xyXG5cdC8vICAgdGhpcy5maWxlTWFuZ2VyU2VydmljZS5jcmVhdGVGaWxlKHBheUxvYWQsIHRoaXMuZmlsZU1hbmdlclNlcnZpY2Uuc2VsZWN0ZWRGb2xkZXJJZCkuc3Vic2NyaWJlKHJlcyA9PiB7XHJcblx0Ly8gICAgIHRoaXMuZmlsZU1hbmdlclNlcnZpY2Uub25SZWZyZXNoaW5nRmlsZU1hbmdlci5uZXh0KCk7XHJcblx0Ly8gICAgIHRoaXMudG9zdGVyU2VydmljZS5zaG93KCdzdWNjZXNzJywgJ1RPQVNURVIuU1VDQ0VTUycsIFwiVE9BU1RFUi5GSUxFX0NSRUFURURfU1VDQ0VcIilcclxuXHQvLyAgICAgdGhpcy5kb2N1bWVudFNjYW5TZXJ2aWNlLnN0b3JlZEZpbGUgPSB7fTtcclxuXHQvLyAgICAgdGhpcy51cGxvYWRNYW5nbWVudFNlcnZpY2UucmVzZXRTdGF0dXMoKTtcclxuXHQvLyAgIH0pXHJcblx0Ly8gfVxyXG5cclxuXHRvbmR5bmFtaWNGb3JtQ2hhbmdlKGR5bmFtaWNEYXRhKSB7XHJcblx0XHRpZiAoZHluYW1pY0RhdGEuZGF0YSkge1xyXG5cdFx0XHRjb25zb2xlLmxvZyhkeW5hbWljRGF0YS5kYXRhKTtcclxuXHRcdFx0dGhpcy5zZWxlY3RlZEZpbGUuZHluYW1pY0RhdGEgPSB7IC4uLmR5bmFtaWNEYXRhIH07XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRjbG9zZURpYWxvZygpIHtcclxuXHRcdHRoaXMuZG9jdW1lbnRTY2FuU2VydmljZS5zdG9yZWRGaWxlID0ge307XHJcblx0XHR0aGlzLnJlbW92ZVN1YnNjcmlwdGlvbigpO1xyXG5cdFx0dGhpcy5kaWFsb2dSZWYuY2xvc2UoZmFsc2UpO1xyXG5cdH1cclxuXHJcblx0bWluaW1pekRpYWxvZzogRGlhbG9nQWN0aW9uVHlwZSA9ICgpID0+IHtcclxuXHRcdHRoaXMuZG9jdW1lbnRTY2FuU2VydmljZS5vbk1pbmltaXppbmcuZW1pdCh0cnVlKTtcclxuXHRcdHRoaXMudXBsb2FkTWFuZ21lbnRTZXJ2aWNlLnVwbG9hZGVkRmlsZXNTdGF0dXMudXBsb2FkZWRGaWxlcy5wdXNoKHtcclxuXHRcdFx0Li4udGhpcy5zZWxlY3RlZEZpbGVcclxuXHRcdH0pO1xyXG5cdFx0dGhpcy5yZW1vdmVTdWJzY3JpcHRpb24oKTtcclxuXHRcdHRoaXMuZGlhbG9nUmVmLmNsb3NlKHRydWUpO1xyXG5cdFx0cmV0dXJuIG9mKG51bGwpO1xyXG5cdH07XHJcblxyXG5cdHJlbW92ZVN1YnNjcmlwdGlvbigpIHtcclxuXHRcdHNldFRpbWVvdXQoKCkgPT4ge1xyXG5cdFx0XHR0aGlzLnVwbG9hZFN0YXJ0U3Vic2NyaXB0aW9uXHJcblx0XHRcdFx0PyB0aGlzLnVwbG9hZFN0YXJ0U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKClcclxuXHRcdFx0XHQ6ICcnO1xyXG5cdFx0XHR0aGlzLmZpbGVDaGFuZ2VTdWJzY3JpcHRpb25cclxuXHRcdFx0XHQ/IHRoaXMuZmlsZUNoYW5nZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpXHJcblx0XHRcdFx0OiAnJztcclxuXHRcdH0sIDIwMDApO1xyXG5cdH1cclxuXHJcblx0c3RhcnRBZGRpbmdQcm9wZXJ0aWVzKCkge1xyXG5cdFx0dGhpcy51cGxvYWRNYW5nbWVudFNlcnZpY2UuYWRkaW5nUHJvcGVydGllc01vZGUgPSB0cnVlO1xyXG5cdH1cclxuXHJcblx0Y3JlYXRlRG9jdW1lbnQ6IERpYWxvZ0FjdGlvblR5cGUgPSAoKSA9PiB7XHJcblx0XHR0aGlzLmRvY3VtZW50U2NhblNlcnZpY2Uub25NaW5pbWl6aW5nLmVtaXQodHJ1ZSk7XHJcblx0XHR0aGlzLnVwbG9hZE1hbmdtZW50U2VydmljZS51cGxvYWRlZEZpbGVzU3RhdHVzLnVwbG9hZGVkRmlsZXMucHVzaCh7XHJcblx0XHRcdC4uLnRoaXMuc2VsZWN0ZWRGaWxlXHJcblx0XHR9KTtcclxuXHRcdHRoaXMuc2Nhbm5lclVwbG9hZEJ1dHRvbi5jbGljaygpO1xyXG5cdFx0dGhpcy5kaWFsb2dSZWYuY2xvc2UodHJ1ZSk7XHJcblx0XHRyZXR1cm4gb2YobnVsbCk7XHJcblx0fTtcclxuXHJcblx0Y29uc3RydWN0UGF5TG9hZChmaWxlKSB7XHJcblx0XHRsZXQgcHJvcHMgPSB0aGlzLmR5bmFtaWNGb3JtU2VydmljZS5jb25zdHJ1Y3REeW5hbWljRm9ybVBheWxvYWQoXHJcblx0XHRcdGZpbGUuZHluYW1pY0RhdGEuZGF0YSxcclxuXHRcdFx0ZmlsZS5keW5hbWljRm9ybVxyXG5cdFx0KTtcclxuXHRcdGxldCBzdGF0aWNGb3JtRGF0YSA9IHRoaXMubWFwcGluZ1N0YXRpY0RhdGEoZmlsZS5zdGF0aWNEYXRhKTtcclxuXHJcblx0XHRsZXQgcGFyYW0gPSB7XHJcblx0XHRcdGRvY3VtZW50OiB7XHJcblx0XHRcdFx0dHlwZTogdGhpcy5maWxlVHlwZS50eXBlLFxyXG5cdFx0XHRcdG5hbWU6IGZpbGUuc3RhdGljRGF0YS50aXRsZSxcclxuXHRcdFx0XHRwcm9wZXJ0aWVzOiB7XHJcblx0XHRcdFx0XHQuLi5wcm9wcyxcclxuXHRcdFx0XHRcdC4uLnN0YXRpY0Zvcm1EYXRhLFxyXG5cdFx0XHRcdFx0J2ZpbGU6Y29udGVudCc6IHtcclxuXHRcdFx0XHRcdFx0J3VwbG9hZC1iYXRjaCc6IGZpbGUuZmlsZS5ibG9iWyd1cGxvYWQtYmF0Y2gnXSxcclxuXHRcdFx0XHRcdFx0J3VwbG9hZC1maWxlSWQnOiBmaWxlLmZpbGUuYmxvYlsndXBsb2FkLWZpbGVJZCddXHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9O1xyXG5cdFx0aWYgKGZpbGUuZmlsZVR5cGUuZG9jdW1lbnRDb2RlKSB7XHJcblx0XHRcdHBhcmFtWydkb2N1bWVudFR5cGVDb2RlJ10gPSBmaWxlLmZpbGVUeXBlLmRvY3VtZW50Q29kZTtcclxuXHRcdH1cclxuXHRcdHJldHVybiB7IHBhcmFtczogcGFyYW0sIG9yaWdpbkZpbGU6IGZpbGUgfTtcclxuXHR9XHJcblxyXG5cdG1hcHBpbmdTdGF0aWNEYXRhKGRhdGEpIHtcclxuXHRcdGlmIChkYXRhLmdkb2N1bWVudERhdGUgJiYgZGF0YS5nZG9jdW1lbnREYXRlICE9PSBudWxsKSB7XHJcblx0XHRcdG1vbWVudC5sb2NhbGUoJ2VuJyk7XHJcblx0XHRcdGRhdGFbJ2hkb2N1bWVudERhdGUnXSA9IHRoaXMuZGF0ZUhlbHBlclNlcnZpY2UuZ3JlZ29yaWFuVG9IaWpyaShcclxuXHRcdFx0XHRkYXRhLmdkb2N1bWVudERhdGUsXHJcblx0XHRcdFx0J2lZWVlZLWlNTS1pREQnXHJcblx0XHRcdCk7XHJcblx0XHRcdGRhdGEuZ2RvY3VtZW50RGF0ZSA9XHJcblx0XHRcdFx0bW9tZW50KGRhdGEuZ2RvY3VtZW50RGF0ZSkuZm9ybWF0KCdZWVlZLU1NLUREVDAwOjAwOjAwLjAwMCcpICsgJ1onO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHRoaXMuYWRhcHRlci5hZGFwdE91dChkYXRhLCB0aGlzLnN0YXRpY0Zvcm1GaWVsZHMpO1xyXG5cdH1cclxuXHJcblx0Y29uc3RydWN0RHluYW1pY0Zvcm1QYXlsb2FkKGZpbGUpIHtcclxuXHRcdGxldCB1cGRhdGVkRHluYW1pY1ZhbHVlcyA9IHt9O1xyXG5cdFx0T2JqZWN0LmtleXMoZmlsZT8uZHluYW1pY0RhdGE/LmRhdGEpLm1hcCgoa2V5KSA9PiB7XHJcblx0XHRcdGxldCB1cGRhdGVkS2V5ID0ga2V5LnJlcGxhY2UoJzonLCAnJyk7XHJcblx0XHRcdGxldCBwcmVmaXggPSBmaWxlLmR5bmFtaWNGb3JtLnByZWZpeFt1cGRhdGVkS2V5XTtcclxuXHRcdFx0aWYgKHByZWZpeCkge1xyXG5cdFx0XHRcdC8vIGNoZWNrIGlmIGNvbXBvbmVudCBpcyB1c2VyIHNlbGVjdG9yIHRvIG1hcCBpdHMgZGF0YSBmcm9tIG9iamVjdCB0byB1c2VybmFtZSBvciBpZCBvbmx5XHJcblx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0ZmlsZS5keW5hbWljRGF0YS5kYXRhW2tleV0gJiZcclxuXHRcdFx0XHRcdGZpbGUuZHluYW1pY0RhdGEuZGF0YVtrZXldWyd1c2VyU2VsZWN0b3InXSAmJlxyXG5cdFx0XHRcdFx0ZmlsZS5keW5hbWljRGF0YS5kYXRhW2tleV1bJ3VzZXJTZWxlY3RvciddID09PSB0cnVlXHJcblx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHR1cGRhdGVkRHluYW1pY1ZhbHVlc1twcmVmaXggKyAnOicgKyB1cGRhdGVkS2V5XSA9IGZpbGUuZHluYW1pY0RhdGFcclxuXHRcdFx0XHRcdFx0LmRhdGFba2V5XVsndmFsdWUnXVsnaWQnXVxyXG5cdFx0XHRcdFx0XHQ/IGZpbGUuZHluYW1pY0RhdGEuZGF0YVtrZXldWyd2YWx1ZSddWydpZCddXHJcblx0XHRcdFx0XHRcdDogZmlsZS5keW5hbWljRGF0YS5kYXRhW2tleV1bJ3ZhbHVlJ11bJ3Byb3BlcnRpZXMnXVsndXNlcm5hbWUnXTtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0dXBkYXRlZER5bmFtaWNWYWx1ZXNbcHJlZml4ICsgJzonICsgdXBkYXRlZEtleV0gPVxyXG5cdFx0XHRcdFx0XHRmaWxlLmR5bmFtaWNEYXRhLmRhdGFba2V5XTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0ZmlsZS5keW5hbWljRGF0YS5kYXRhW2tleV1bJ3VzZXJTZWxlY3RvciddICYmXHJcblx0XHRcdFx0XHRmaWxlLmR5bmFtaWNEYXRhLmRhdGFba2V5XVsndXNlclNlbGVjdG9yJ10gPT09IHRydWVcclxuXHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdHVwZGF0ZWREeW5hbWljVmFsdWVzW3VwZGF0ZWRLZXldID0gZmlsZS5keW5hbWljRGF0YS5kYXRhW2tleV1bXHJcblx0XHRcdFx0XHRcdCd2YWx1ZSdcclxuXHRcdFx0XHRcdF1bJ2lkJ11cclxuXHRcdFx0XHRcdFx0PyBmaWxlLmR5bmFtaWNEYXRhLmRhdGFba2V5XVsndmFsdWUnXVsnaWQnXVxyXG5cdFx0XHRcdFx0XHQ6IGZpbGUuZHluYW1pY0RhdGEuZGF0YVtrZXldWyd2YWx1ZSddWydwcm9wZXJ0aWVzJ11bJ3VzZXJuYW1lJ107XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdHVwZGF0ZWREeW5hbWljVmFsdWVzW3VwZGF0ZWRLZXldID0gZmlsZS5keW5hbWljRGF0YS5kYXRhW2tleV07XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHRcdHJldHVybiB1cGRhdGVkRHluYW1pY1ZhbHVlcztcclxuXHR9XHJcblxyXG5cdGNyZWF0ZVdoZW5GaW5pc2goKSB7fVxyXG5cclxuXHRjaGFuZ1RhYlRvKHRhYk5hbWUpIHtcclxuXHRcdHRoaXMuYWN0aXZlVGFiID0gdGFiTmFtZTtcclxuXHR9XHJcblx0Y2hlY2tWYWxpZGF0aW9uKCkge1xyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxuXHJcblx0bmdPbkRlc3Ryb3koKSB7XHJcblx0XHR0aGlzLmxhbmdTdWJzY3JpcHRpb24gPyB0aGlzLmxhbmdTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSA6ICcnO1xyXG5cdFx0dGhpcy5hZ2VuY3lDYXRlZ0NvZGVTdWJzY3JpcHRpb25cclxuXHRcdFx0PyB0aGlzLmFnZW5jeUNhdGVnQ29kZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpXHJcblx0XHRcdDogbnVsbDtcclxuXHRcdHRoaXMuY291bnRyeUNhdGVnQ29kZVN1YnNjcmlwdGlvblxyXG5cdFx0XHQ/IHRoaXMuY291bnRyeUNhdGVnQ29kZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpXHJcblx0XHRcdDogbnVsbDtcclxuXHRcdHRoaXMuZmlsZUZvcm1TdWJzY3JpcHRpb24gPyB0aGlzLmZpbGVGb3JtU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCkgOiBudWxsO1xyXG5cdH1cclxufVxyXG4iLCI8bmRmLW51eGVvLWRpYWxvZyBkaWFsb2dUaXRsZT1cInt7ICdDUkVBVEUuU0NBTicgfCB0cmFuc2xhdGUgfX1cIj5cclxuXHQ8bmctdGVtcGxhdGUgI2NvbnRlbnRUZW1wbGF0ZT5cclxuXHRcdDxkaXZcclxuXHRcdFx0Y2xhc3M9XCJzY2FubmVyLXRhYnMgZC1mbGV4IGp1c3RpZnktYXJvdW5kIGl0ZW1zLWNlbnRlciBib3JkZXItYi0yIGJvcmRlci1ncmF5LTIwMCBtYi01IHRleHQtZ3JheS05MDAgdGV4dC1sZ1wiXHJcblx0XHQ+XHJcblx0XHRcdDxkaXZcclxuXHRcdFx0XHRjbGFzcz1cInNjYW5uZXItc2luZ2xlLXRhYiBjdXJzb3ItcG9pbnRlciB3LTEvMiB0ZXh0LWNlbnRlciBweS0yIGJvcmRlci1ncmF5LTkwMCBob3ZlcjpiZy1ncmF5LTEwMFwiXHJcblx0XHRcdFx0KGNsaWNrKT1cImNoYW5nVGFiVG8oJ3NjYW4nKVwiXHJcblx0XHRcdFx0W25nQ2xhc3NdPVwieyAnZm9udC1ib2xkIGJvcmRlci1iLTQnOiBhY3RpdmVUYWIgPT09ICdzY2FuJyB9XCJcclxuXHRcdFx0PlxyXG5cdFx0XHRcdHt7ICdDUkVBVEUuU0NBTicgfCB0cmFuc2xhdGUgfX1cclxuXHRcdFx0PC9kaXY+XHJcblx0XHRcdDxkaXZcclxuXHRcdFx0XHRjbGFzcz1cInNjYW5uZXItc2luZ2xlLXRhYiBjdXJzb3ItcG9pbnRlciB3LTEvMiB0ZXh0LWNlbnRlciBweS0yIGJvcmRlci1ncmF5LTkwMCBob3ZlcjpiZy1ncmF5LTEwMFwiXHJcblx0XHRcdFx0KGNsaWNrKT1cImNoYW5nVGFiVG8oJ2Zvcm0nKVwiXHJcblx0XHRcdFx0W25nQ2xhc3NdPVwieyAnZm9udC1ib2xkIGJvcmRlci1iLTQnOiBhY3RpdmVUYWIgPT09ICdmb3JtJyB9XCJcclxuXHRcdFx0PlxyXG5cdFx0XHRcdHt7ICdDUkVBVEUuREVUQUlMUycgfCB0cmFuc2xhdGUgfX1cclxuXHRcdFx0PC9kaXY+XHJcblx0XHQ8L2Rpdj5cclxuXHRcdDxkaXYgY2xhc3M9XCJ0YWJzLWJvZHktd3JhcHBlclwiPlxyXG5cdFx0XHQ8IS0tIHVwbG9hZGVyIGluZGljYXRvciBsb2FkaW5nIC0tPlxyXG5cdFx0XHQ8ZGl2XHJcblx0XHRcdFx0Y2xhc3M9XCJ1cGxvYWQtbG9hZGVyIG14LTJcIlxyXG5cdFx0XHRcdCpuZ0lmPVwidXBsb2FkTWFuZ21lbnRTZXJ2aWNlLnVwbG9hZGVkRmlsZXNTdGF0dXMudXBsb2FkSW5Qcm9ncmVzc1wiXHJcblx0XHRcdD5cclxuXHRcdFx0XHQ8bWF0LXByb2dyZXNzLWJhciBtb2RlPVwiaW5kZXRlcm1pbmF0ZVwiPjwvbWF0LXByb2dyZXNzLWJhcj5cclxuXHRcdFx0PC9kaXY+XHJcblxyXG5cdFx0XHQ8IS0tIHNjYW5uZXIgLS0+XHJcblx0XHRcdDxkaXYgY2xhc3M9XCJcIiBbbmdDbGFzc109XCJ7ICdkLW5vbmUnOiBhY3RpdmVUYWIgPT09ICdmb3JtJyB9XCI+XHJcblx0XHRcdFx0PGFwcC1kb2N1bWVudC1zY2FuXHJcblx0XHRcdFx0XHRbaGlkZVVwbG9hZEJ1dHRvbl09XCJ0cnVlXCJcclxuXHRcdFx0XHRcdFt1c2VTdG9yZWRGaWxlXT1cInRydWVcIlxyXG5cdFx0XHRcdD48L2FwcC1kb2N1bWVudC1zY2FuPlxyXG5cdFx0XHQ8L2Rpdj5cclxuXHJcblx0XHRcdDwhLS0gZm9ybXMgYW5kIHByb3BlcnRpZXMgIC0tPlxyXG5cdFx0XHQ8ZGl2IGNsYXNzPVwiZm9ybXMtc2VjdGlvblwiIFtuZ0NsYXNzXT1cInsgJ2Qtbm9uZSc6IGFjdGl2ZVRhYiA9PT0gJ3NjYW4nIH1cIj5cclxuXHRcdFx0XHQ8ZGl2IGNsYXNzPVwidy0yLzNcIj5cclxuXHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJtYi01XCI+XHJcblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJsYWJlbC1zdHlsZVwiPlxyXG5cdFx0XHRcdFx0XHRcdHt7ICdDUkVBVEUuRklMRV9UWVBFJyB8IHRyYW5zbGF0ZSB9fVxyXG5cdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cInRleHQtYmFzZSB0ZXh0LWdyYXktOTAwXCI+XHJcblx0XHRcdFx0XHRcdFx0e3sgaXNBcmFiaWMgPyBmaWxlVHlwZS5hcmFiaWNUZXh0IDogZmlsZVR5cGUuZW5nbGlzaFRleHQgfX1cclxuXHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJmaWxlLWZpZWxkcyBtdC0zXCIgU2V0UnRsPlxyXG5cdFx0XHRcdFx0XHQ8Zm9ybSBbZm9ybUdyb3VwXT1cImZpbGVGb3JtXCIgKm5nSWY9XCJmaWxlRm9ybVwiPlxyXG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJzaW5nbGUtZmllbGQgbWItM1wiPlxyXG5cdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImxhYmVsLXN0eWxlXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdHt7ICdDUkVBVEUuVElUTEUnIHwgdHJhbnNsYXRlXHJcblx0XHRcdFx0XHRcdFx0XHRcdH19PHNwYW4gY2xhc3M9XCJ0ZXh0LXJlZC01MDBcIj4qPC9zcGFuPlxyXG5cdFx0XHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHRcdFx0XHQ8aW5wdXRcclxuXHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJmaWVsZC1zdHlsZVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdGZvcm1Db250cm9sTmFtZT1cInRpdGxlXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0cGxhY2Vob2xkZXI9XCIge3sgJ0NSRUFURS5USVRMRScgfCB0cmFuc2xhdGUgfX1cIlxyXG5cdFx0XHRcdFx0XHRcdFx0Lz5cclxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwic2luZ2xlLWZpZWxkIG1iLTNcIj5cclxuXHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJsYWJlbC1zdHlsZVwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHR7eyAnQ1JFQVRFLkRFU0NSSVBUSU9OJyB8IHRyYW5zbGF0ZSB9fVxyXG5cdFx0XHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHRcdFx0XHQ8aW5wdXRcclxuXHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJmaWVsZC1zdHlsZVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdGZvcm1Db250cm9sTmFtZT1cImRlc2NyaXB0aW9uXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0cGxhY2Vob2xkZXI9XCIge3sgJ0NSRUFURS5ERVNDUklQVElPTicgfCB0cmFuc2xhdGUgfX1cIlxyXG5cdFx0XHRcdFx0XHRcdFx0Lz5cclxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHJcblx0XHRcdFx0XHRcdFx0PCEtLS0tLS0tLS0tLS0tLS0tLS0gbmV3IHN0YXRpcyBmb3JtICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPlxyXG5cdFx0XHRcdFx0XHRcdDxkaXYgKm5nSWY9XCJ1c2luZ0V4dHJhRmllbGRzXCI+XHJcblx0XHRcdFx0XHRcdFx0XHQ8YXBwLWR5bmFtaWMtZmllbGRzLXJlbmRlcmVyXHJcblx0XHRcdFx0XHRcdFx0XHRcdFtmb3JtXT1cImZpbGVGb3JtXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0W2FnZW5jeU5hbWVGaWx0ZXJdPVwiYWdlbmN5TmFtZUZpbHRlclwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFtjb3VudHJ5TmFtZUZpbHRlcl09XCJjb3VudHJ5TmFtZUZpbHRlclwiXHJcblx0XHRcdFx0XHRcdFx0XHQ+PC9hcHAtZHluYW1pYy1maWVsZHMtcmVuZGVyZXI+XHJcblx0XHRcdFx0XHRcdFx0PC9kaXY+XHJcblxyXG5cdFx0XHRcdFx0XHRcdDwhLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0+XHJcblx0XHRcdFx0XHRcdDwvZm9ybT5cclxuXHRcdFx0XHRcdFx0PCEtLSAqbmdJZj1cIlwiIC0tPlxyXG5cdFx0XHRcdFx0XHQ8ZGl2XHJcblx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJkeW5hbWljLXBhcnQgLW14LTRcIlxyXG5cdFx0XHRcdFx0XHRcdCpuZ0lmPVwic2VsZWN0ZWRGaWxlLmR5bmFtaWNGb3JtICYmIHNob3dSZW5kZXJlclwiXHJcblx0XHRcdFx0XHRcdD5cclxuXHRcdFx0XHRcdFx0XHQ8YXBwLWR5bmFtaWMtZm9ybVxyXG5cdFx0XHRcdFx0XHRcdFx0W2Zvcm1dPVwic2VsZWN0ZWRGaWxlLmR5bmFtaWNGb3JtXCJcclxuXHRcdFx0XHRcdFx0XHRcdFtkYXRhXT1cInRlbXBvcmFyeUR5YW5taWNEYXRhXCJcclxuXHRcdFx0XHRcdFx0XHRcdChjaGFuZ2UpPVwib25keW5hbWljRm9ybUNoYW5nZSgkZXZlbnQpXCJcclxuXHRcdFx0XHRcdFx0XHQ+PC9hcHAtZHluYW1pYy1mb3JtPlxyXG5cdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHQ8L2Rpdj5cclxuXHRcdDwvZGl2PlxyXG5cdDwvbmctdGVtcGxhdGU+XHJcblxyXG5cdDxuZy10ZW1wbGF0ZSAjYWN0aW9uc1RlbXBsYXRlIGxldC1kaWFsb2c9XCJkaWFsb2dcIj5cclxuXHRcdDxidXR0b25cclxuXHRcdFx0KGNsaWNrKT1cImRpYWxvZy5leGVjdXRlQWN0aW9uKGNyZWF0ZURvY3VtZW50KVwiXHJcblx0XHRcdFtkaXNhYmxlZF09XCJcclxuXHRcdFx0XHRzY2FubmVyVXBsb2FkQnV0dG9uPy5kaXNhYmxlZCB8fFxyXG5cdFx0XHRcdCFzZWxlY3RlZEZpbGUuZHluYW1pY0RhdGEudmFsaWQgfHxcclxuXHRcdFx0XHRmaWxlRm9ybS5pbnZhbGlkXHJcblx0XHRcdFwiXHJcblx0XHRcdFtuZ0NsYXNzXT1cIntcclxuXHRcdFx0XHQnb3BhY2l0eS0zMCBjdXJzb3Itbm90LWFsbG93ZWQnOlxyXG5cdFx0XHRcdFx0c2Nhbm5lclVwbG9hZEJ1dHRvbj8uZGlzYWJsZWQgfHxcclxuXHRcdFx0XHRcdCFzZWxlY3RlZEZpbGUuZHluYW1pY0RhdGEudmFsaWQgfHxcclxuXHRcdFx0XHRcdGZpbGVGb3JtLmludmFsaWRcclxuXHRcdFx0fVwiXHJcblx0XHRcdGNsYXNzPVwic3VibWlzc2lvbi1idXR0b25cIlxyXG5cdFx0PlxyXG5cdFx0XHR7e1xyXG5cdFx0XHRcdHVwbG9hZE1hbmdtZW50U2VydmljZS5zY2FuQ3JlYXRpb25GYWlsZWRcclxuXHRcdFx0XHRcdD8gKCdCVVRUT05TLlRSWV9BR0FJTicgfCB0cmFuc2xhdGUpXHJcblx0XHRcdFx0XHQ6ICgnQlVUVE9OUy5DUkVBVEUnIHwgdHJhbnNsYXRlKVxyXG5cdFx0XHR9fVxyXG5cdFx0PC9idXR0b24+XHJcblx0XHQ8YnV0dG9uXHJcblx0XHRcdGNsYXNzPVwiY2FuY2VsYXRpb24tYnV0dG9uIG14LTJcIlxyXG5cdFx0XHQoY2xpY2spPVwiZGlhbG9nLmV4ZWN1dGVBY3Rpb24obWluaW1pekRpYWxvZylcIlxyXG5cdFx0PlxyXG5cdFx0XHR7eyAnQlVUVE9OUy5NSU5JTUlaRUQnIHwgdHJhbnNsYXRlIH19XHJcblx0XHQ8L2J1dHRvbj5cclxuXHQ8L25nLXRlbXBsYXRlPlxyXG48L25kZi1udXhlby1kaWFsb2c+XHJcbiJdfQ==
|