nuxeo-development-framework 5.8.0 → 5.8.2
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 +1794 -156
- package/bundles/nuxeo-development-framework.umd.js.map +1 -1
- package/esm2015/lib/components/documents/components/document-scan/document-scan.component.js +1 -1
- package/esm2015/lib/components/ndf-scanner/index.js +3 -0
- package/esm2015/lib/components/ndf-scanner/ndf-scanner.component.js +966 -0
- package/esm2015/lib/components/ndf-scanner/ndf-scanner.module.js +23 -0
- package/esm2015/lib/components/ndf-uploader/components/bottom-sheet/ndf-uploader-bottom-sheet.component.js +124 -0
- package/esm2015/lib/components/ndf-uploader/components/index.js +2 -0
- package/esm2015/lib/components/ndf-uploader/config/index.js +2 -0
- package/esm2015/lib/components/ndf-uploader/config/uploader.config.js +10 -0
- package/esm2015/lib/components/ndf-uploader/constant/file-content.js +6 -0
- package/esm2015/lib/components/ndf-uploader/constant/index.js +2 -0
- package/esm2015/lib/components/ndf-uploader/helpers/index.js +2 -0
- package/esm2015/lib/components/ndf-uploader/helpers/uploader.helper.js +100 -0
- package/esm2015/lib/components/ndf-uploader/index.js +6 -0
- package/esm2015/lib/components/ndf-uploader/models/batch.model.js +2 -0
- package/esm2015/lib/components/ndf-uploader/models/index.js +4 -0
- package/esm2015/lib/components/ndf-uploader/models/ndf-file.model.js +20 -0
- package/esm2015/lib/components/ndf-uploader/models/provider.model.js +2 -0
- package/esm2015/lib/components/ndf-uploader/ndf-uploader-bottom-sheet.service.js +72 -0
- package/esm2015/lib/components/ndf-uploader/ndf-uploader.module.js +53 -0
- package/esm2015/lib/components/ndf-uploader/ndf-uploader.service.js +241 -0
- package/esm2015/lib/components/ndf-uploader/providers/index.js +3 -0
- package/esm2015/lib/components/ndf-uploader/providers/nuxeo-provider.service.js +32 -0
- package/esm2015/lib/components/ndf-uploader/providers/s3-provider.service.js +26 -0
- package/esm2015/public-api.js +3 -1
- package/fesm2015/nuxeo-development-framework.js +1633 -51
- package/fesm2015/nuxeo-development-framework.js.map +1 -1
- package/lib/components/ndf-scanner/index.d.ts +2 -0
- package/lib/components/ndf-scanner/ndf-scanner.component.d.ts +104 -0
- package/lib/components/ndf-scanner/ndf-scanner.module.d.ts +13 -0
- package/lib/components/ndf-uploader/components/bottom-sheet/ndf-uploader-bottom-sheet.component.d.ts +27 -0
- package/lib/components/ndf-uploader/components/index.d.ts +1 -0
- package/lib/components/ndf-uploader/config/index.d.ts +1 -0
- package/lib/components/ndf-uploader/config/uploader.config.d.ts +9 -0
- package/lib/components/ndf-uploader/constant/file-content.d.ts +5 -0
- package/lib/components/ndf-uploader/constant/index.d.ts +1 -0
- package/lib/components/ndf-uploader/helpers/index.d.ts +1 -0
- package/lib/components/ndf-uploader/helpers/uploader.helper.d.ts +10 -0
- package/lib/components/ndf-uploader/index.d.ts +5 -0
- package/lib/components/ndf-uploader/models/batch.model.d.ts +28 -0
- package/lib/components/ndf-uploader/models/index.d.ts +3 -0
- package/lib/components/ndf-uploader/models/ndf-file.model.d.ts +46 -0
- package/lib/components/ndf-uploader/models/provider.model.d.ts +7 -0
- package/lib/components/ndf-uploader/ndf-uploader-bottom-sheet.service.d.ts +30 -0
- package/lib/components/ndf-uploader/ndf-uploader.module.d.ts +16 -0
- package/lib/components/ndf-uploader/ndf-uploader.service.d.ts +25 -0
- package/lib/components/ndf-uploader/providers/index.d.ts +2 -0
- package/lib/components/ndf-uploader/providers/nuxeo-provider.service.d.ts +13 -0
- package/lib/components/ndf-uploader/providers/s3-provider.service.d.ts +13 -0
- package/package.json +1 -1
- package/public-api.d.ts +2 -0
|
@@ -0,0 +1,966 @@
|
|
|
1
|
+
import { Component, EventEmitter, Inject, Input, Output, ViewEncapsulation } from '@angular/core';
|
|
2
|
+
import { APP_BASE_HREF } from '@angular/common';
|
|
3
|
+
import Dynamsoft from 'dwt';
|
|
4
|
+
import { Subject } from 'rxjs';
|
|
5
|
+
import { distinctUntilChanged, takeUntil } from 'rxjs/operators';
|
|
6
|
+
import { FileEventType } from '../ndf-uploader';
|
|
7
|
+
import { EnvManager } from '../../core/env';
|
|
8
|
+
import * as i0 from "@angular/core";
|
|
9
|
+
import * as i1 from "@ngx-translate/core";
|
|
10
|
+
import * as i2 from "../documents/services/documents.service";
|
|
11
|
+
import * as i3 from "../ndf-uploader";
|
|
12
|
+
import * as i4 from "@angular/common";
|
|
13
|
+
import * as i5 from "@angular/material/icon";
|
|
14
|
+
import * as i6 from "@angular/material/progress-spinner";
|
|
15
|
+
import * as i7 from "@angular/material/tooltip";
|
|
16
|
+
export class NdfScannerComponent {
|
|
17
|
+
constructor(translate, documentsService, uploaderService, datePipe, baseHref) {
|
|
18
|
+
this.translate = translate;
|
|
19
|
+
this.documentsService = documentsService;
|
|
20
|
+
this.uploaderService = uploaderService;
|
|
21
|
+
this.datePipe = datePipe;
|
|
22
|
+
this.baseHref = baseHref;
|
|
23
|
+
this.useStoredFile = false;
|
|
24
|
+
this.hideUploadButton = false;
|
|
25
|
+
this.loading = false;
|
|
26
|
+
/** Event emitted when a batch is uploaded */
|
|
27
|
+
this.file = new EventEmitter();
|
|
28
|
+
this.destroy$ = new Subject();
|
|
29
|
+
this.DWTSourceCount = 0;
|
|
30
|
+
this.filename = '';
|
|
31
|
+
this.containerId = 'dwtcontrolContainer';
|
|
32
|
+
this.bWASM = Dynamsoft.Lib.env.bMobile || Dynamsoft.DWT.UseLocalService;
|
|
33
|
+
this._strTempStr = '';
|
|
34
|
+
this.re = /^\d+$/;
|
|
35
|
+
this.strre = /^[\s\w]+$/;
|
|
36
|
+
this.refloat = /^\d+\.*\d*$/i;
|
|
37
|
+
// --------------------------------------------------------------------------------------
|
|
38
|
+
// ************************** Dynamic Web TWAIN Events***********************************
|
|
39
|
+
// --------------------------------------------------------------------------------------
|
|
40
|
+
this.Dynamsoft_OnPostTransfer = () => {
|
|
41
|
+
this.updatePageInfo();
|
|
42
|
+
};
|
|
43
|
+
this.Dynamsoft_OnPostLoadfunction = (path, name, type) => {
|
|
44
|
+
this.updatePageInfo();
|
|
45
|
+
};
|
|
46
|
+
this.Dynamsoft_OnPostAllTransfers = () => {
|
|
47
|
+
this.DWObject.CloseSource();
|
|
48
|
+
this.updatePageInfo();
|
|
49
|
+
this.checkErrorString();
|
|
50
|
+
};
|
|
51
|
+
this.Dynamsoft_OnMouseClick = (index) => {
|
|
52
|
+
this.updatePageInfo();
|
|
53
|
+
};
|
|
54
|
+
this.Dynamsoft_OnMouseRightClick = (index) => {
|
|
55
|
+
// To add
|
|
56
|
+
};
|
|
57
|
+
this.Dynamsoft_OnImageAreaSelected = (index, left, top, right, bottom) => {
|
|
58
|
+
this._iLeft = left;
|
|
59
|
+
this._iTop = top;
|
|
60
|
+
this._iRight = right;
|
|
61
|
+
this._iBottom = bottom;
|
|
62
|
+
};
|
|
63
|
+
this.Dynamsoft_OnImageAreaDeselected = (index) => {
|
|
64
|
+
this._iLeft = 0;
|
|
65
|
+
this._iTop = 0;
|
|
66
|
+
this._iRight = 0;
|
|
67
|
+
this._iBottom = 0;
|
|
68
|
+
};
|
|
69
|
+
this.Dynamsoft_OnTopImageInTheViewChanged = (index) => {
|
|
70
|
+
this._iLeft = 0;
|
|
71
|
+
this._iTop = 0;
|
|
72
|
+
this._iRight = 0;
|
|
73
|
+
this._iBottom = 0;
|
|
74
|
+
this.DWObject.CurrentImageIndexInBuffer = index;
|
|
75
|
+
this.updatePageInfo();
|
|
76
|
+
};
|
|
77
|
+
this.Dynamsoft_OnGetFilePath = (bSave, count, index, path, name) => { };
|
|
78
|
+
}
|
|
79
|
+
ngOnChanges() {
|
|
80
|
+
if (this.loading) {
|
|
81
|
+
this.showLoader();
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
this.hideLoader();
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
showLoader() {
|
|
88
|
+
document.getElementById('dwtcontrolContainer').style.display = 'none';
|
|
89
|
+
document.getElementById('loader').style.display = '';
|
|
90
|
+
}
|
|
91
|
+
hideLoader() {
|
|
92
|
+
document.getElementById('loader').style.display = 'none';
|
|
93
|
+
document.getElementById('dwtcontrolContainer').style.display = '';
|
|
94
|
+
}
|
|
95
|
+
ngOnInit() {
|
|
96
|
+
this.hideLoader();
|
|
97
|
+
Dynamsoft.DWT.ResourcesPath = this.baseHref + '/assets/dwt-resources';
|
|
98
|
+
///
|
|
99
|
+
Dynamsoft.DWT.AutoLoad = true;
|
|
100
|
+
///
|
|
101
|
+
// const width = window.outerWidth * 0.3;
|
|
102
|
+
// const height = window.outerHeight * 0.3;
|
|
103
|
+
Dynamsoft.DWT.Containers = [
|
|
104
|
+
{
|
|
105
|
+
WebTwainId: 'DWTObject',
|
|
106
|
+
ContainerId: 'dwtcontrolContainer',
|
|
107
|
+
Width: '100%',
|
|
108
|
+
Height: '100%'
|
|
109
|
+
}
|
|
110
|
+
];
|
|
111
|
+
Dynamsoft.DWT.ProductKey = EnvManager.environment.dynamsoftProductKey;
|
|
112
|
+
// Dynamsoft.DWT.Trial = false;
|
|
113
|
+
// Dynamsoft.DWT.Debug = false; // only for debugger output
|
|
114
|
+
///
|
|
115
|
+
Dynamsoft.DWT.IfAddMD5InUploadHeader = false;
|
|
116
|
+
///
|
|
117
|
+
Dynamsoft.DWT.IfConfineMaskWithinTheViewer = false;
|
|
118
|
+
Dynamsoft.MSG = {
|
|
119
|
+
ConvertingToBase64: this.translate.instant('scanner.ConvertingToBase64'),
|
|
120
|
+
ConvertingToBlob: this.translate.instant('scanner.ConvertingToBlob'),
|
|
121
|
+
Downloading: this.translate.instant('scanner.Downloading'),
|
|
122
|
+
Encoding: this.translate.instant('scanner.Encoding'),
|
|
123
|
+
Err_BrowserNotSupportWasm: this.translate.instant('scanner.Err_BrowserNotSupportWasm'),
|
|
124
|
+
Init_AllJsLoaded: Dynamsoft.MSG.Init_AllJsLoaded,
|
|
125
|
+
Init_CheckDWT: Dynamsoft.MSG.Init_CheckDWT,
|
|
126
|
+
Init_CheckDWTVersion: Dynamsoft.MSG.Init_CheckDWTVersion,
|
|
127
|
+
Init_CheckingLicense: Dynamsoft.MSG.Init_CheckingLicense,
|
|
128
|
+
Init_CompilingWasm: Dynamsoft.MSG.Init_CompilingWasm,
|
|
129
|
+
Init_ConfiguringDWT: Dynamsoft.MSG.Init_ConfiguringDWT,
|
|
130
|
+
Init_CreatingDWT: Dynamsoft.MSG.Init_CreatingDWT,
|
|
131
|
+
Init_DownloadingWasm: Dynamsoft.MSG.Init_DownloadingWasm,
|
|
132
|
+
Init_FireBeforeInitEvt: Dynamsoft.MSG.Init_FireBeforeInitEvt,
|
|
133
|
+
Init_GetLicenseInfoForDWT: Dynamsoft.MSG.Init_GetLicenseInfoForDWT,
|
|
134
|
+
Init_InitActiveX: Dynamsoft.MSG.Init_InitActiveX,
|
|
135
|
+
Init_InitDynamsoftService: Dynamsoft.MSG.Init_InitDynamsoftService,
|
|
136
|
+
Init_InitH5: Dynamsoft.MSG.Init_InitH5,
|
|
137
|
+
Init_InitWasm: Dynamsoft.MSG.Init_InitWasm,
|
|
138
|
+
Init_LoadingViewerJs: Dynamsoft.MSG.Init_LoadingViewerJs,
|
|
139
|
+
Init_LookingLicense: Dynamsoft.MSG.Init_LookingLicense,
|
|
140
|
+
Init_SetLicenseForDWT: Dynamsoft.MSG.Init_SetLicenseForDWT,
|
|
141
|
+
Loading: this.translate.instant('scanner.Loading'),
|
|
142
|
+
LoadingPdf: this.translate.instant('scanner.LoadingPdf'),
|
|
143
|
+
LoadingTiff: this.translate.instant('scanner.LoadingTiff'),
|
|
144
|
+
SavingPdf: this.translate.instant('scanner.SavingPdf'),
|
|
145
|
+
SavingTiff: this.translate.instant('scanner.SavingTiff'),
|
|
146
|
+
Uploading: this.translate.instant('scanner.Uploading')
|
|
147
|
+
};
|
|
148
|
+
Dynamsoft.DWT.CustomizableDisplayInfo = {
|
|
149
|
+
errorMessages: this.translate.instant('scanner.errorMessages'),
|
|
150
|
+
// launch
|
|
151
|
+
generalMessages: this.translate.instant('scanner.generalMessages'),
|
|
152
|
+
customProgressText: this.translate.instant('scanner.customProgressText'),
|
|
153
|
+
// image editor
|
|
154
|
+
buttons: this.translate.instant('scanner.buttons'),
|
|
155
|
+
dialogText: this.translate.instant('scanner.dialogText')
|
|
156
|
+
};
|
|
157
|
+
Dynamsoft.DWT.OnWebTwainReady = () => {
|
|
158
|
+
this.pageonload();
|
|
159
|
+
this.Dynamsoft_OnReady();
|
|
160
|
+
};
|
|
161
|
+
Dynamsoft.DWT.Load();
|
|
162
|
+
// this.onMinimizingSubscription = this.DocumentScanService.onMinimizing.subscribe((res) => {
|
|
163
|
+
// this.convertToBlobForSaving();
|
|
164
|
+
// });
|
|
165
|
+
}
|
|
166
|
+
ngAfterViewInit() {
|
|
167
|
+
this.pageonload();
|
|
168
|
+
// if (this.useStoredFile) {
|
|
169
|
+
// if (this.DocumentScanService.storedFile) {
|
|
170
|
+
// setTimeout(() => {
|
|
171
|
+
// this.setStoredFileToScanner(this.DocumentScanService.storedFile);
|
|
172
|
+
// }, 2000);
|
|
173
|
+
// }
|
|
174
|
+
// }
|
|
175
|
+
}
|
|
176
|
+
setStoredFileToScanner(result) {
|
|
177
|
+
this.DWObject.LoadImageFromBinary(result, function () {
|
|
178
|
+
console.log('success');
|
|
179
|
+
}, function (errorCode, errorString) {
|
|
180
|
+
console.log(errorString);
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
pageonload() {
|
|
184
|
+
this.HideLoadImageForLinux();
|
|
185
|
+
const twainsource = document.getElementById('source');
|
|
186
|
+
if (twainsource) {
|
|
187
|
+
twainsource.options.length = 0;
|
|
188
|
+
twainsource.options.add(new Option(this.translate.instant('scanner.pleaseWait'), '0'));
|
|
189
|
+
twainsource.options[0].selected = true;
|
|
190
|
+
}
|
|
191
|
+
this.initiateInputs();
|
|
192
|
+
}
|
|
193
|
+
HideLoadImageForLinux() {
|
|
194
|
+
const o = document.getElementById('liLoadImage');
|
|
195
|
+
if (o) {
|
|
196
|
+
if (Dynamsoft.Lib.env.bLinux) {
|
|
197
|
+
o.style.display = 'none';
|
|
198
|
+
}
|
|
199
|
+
else {
|
|
200
|
+
o.style.display = '';
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
initiateInputs() {
|
|
205
|
+
const allinputs = document.getElementsByTagName('input');
|
|
206
|
+
for (let i = 0; i < allinputs.length; i++) {
|
|
207
|
+
if (allinputs[i].type === 'checkbox') {
|
|
208
|
+
allinputs[i].checked = false;
|
|
209
|
+
}
|
|
210
|
+
else if (allinputs[i].type === 'text') {
|
|
211
|
+
allinputs[i].value = '';
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
if (Dynamsoft.Lib.env.bIE === true && this.isWin64()) {
|
|
215
|
+
let o = document.getElementById('samplesource64bit');
|
|
216
|
+
if (o) {
|
|
217
|
+
o.style.display = 'inline';
|
|
218
|
+
}
|
|
219
|
+
o = document.getElementById('samplesource32bit');
|
|
220
|
+
if (o) {
|
|
221
|
+
o.style.display = 'none';
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
isWin64() {
|
|
226
|
+
// return (
|
|
227
|
+
// navigator.platform.indexOf('Win') !== -1 &&
|
|
228
|
+
// navigator.userAgent.indexOf('x64') !== -1
|
|
229
|
+
// );
|
|
230
|
+
return /Windows NT.*x64/.test(navigator.userAgent);
|
|
231
|
+
}
|
|
232
|
+
initDllForChangeImageSize() {
|
|
233
|
+
const vInterpolationMethod = document.getElementById('InterpolationMethod');
|
|
234
|
+
vInterpolationMethod.options.length = 0;
|
|
235
|
+
vInterpolationMethod.options.add(new Option('NearestNeighbor', '1'));
|
|
236
|
+
vInterpolationMethod.options.add(new Option('Bilinear', '2'));
|
|
237
|
+
vInterpolationMethod.options.add(new Option('Bicubic', '3'));
|
|
238
|
+
}
|
|
239
|
+
setDefaultValue() {
|
|
240
|
+
const vGray = document.getElementById('Gray');
|
|
241
|
+
if (vGray) {
|
|
242
|
+
vGray.checked = true;
|
|
243
|
+
}
|
|
244
|
+
const varImgTypepng2 = document.getElementById('imgTypepng2');
|
|
245
|
+
if (varImgTypepng2) {
|
|
246
|
+
varImgTypepng2.checked = true;
|
|
247
|
+
}
|
|
248
|
+
const varImgTypepng = document.getElementById('imgTypepng');
|
|
249
|
+
if (varImgTypepng) {
|
|
250
|
+
varImgTypepng.checked = true;
|
|
251
|
+
}
|
|
252
|
+
const _strDefaultSaveImageName = 'WebTWAINImage';
|
|
253
|
+
const _txtFileNameforSave = document.getElementById('txt_fileNameforSave');
|
|
254
|
+
if (_txtFileNameforSave) {
|
|
255
|
+
_txtFileNameforSave.value = _strDefaultSaveImageName;
|
|
256
|
+
}
|
|
257
|
+
const _txtFileName = document.getElementById('txt_fileName');
|
|
258
|
+
if (_txtFileName) {
|
|
259
|
+
_txtFileName.value = _strDefaultSaveImageName;
|
|
260
|
+
}
|
|
261
|
+
const _chkMultiPageTIFF_save = document.getElementById('MultiPageTIFF_save');
|
|
262
|
+
if (_chkMultiPageTIFF_save) {
|
|
263
|
+
_chkMultiPageTIFF_save.disabled = true;
|
|
264
|
+
}
|
|
265
|
+
const _chkMultiPagePDF_save = document.getElementById('MultiPagePDF_save');
|
|
266
|
+
if (_chkMultiPagePDF_save) {
|
|
267
|
+
_chkMultiPagePDF_save.disabled = true;
|
|
268
|
+
}
|
|
269
|
+
const _chkMultiPageTIFF = document.getElementById('MultiPageTIFF');
|
|
270
|
+
if (_chkMultiPageTIFF) {
|
|
271
|
+
_chkMultiPageTIFF.disabled = true;
|
|
272
|
+
}
|
|
273
|
+
const _chkMultiPagePDF = document.getElementById('MultiPagePDF');
|
|
274
|
+
if (_chkMultiPagePDF) {
|
|
275
|
+
_chkMultiPagePDF.disabled = true;
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
// Check if the control is fully loaded.
|
|
279
|
+
Dynamsoft_OnReady() {
|
|
280
|
+
const liNoScanner = document.getElementById('pNoScanner');
|
|
281
|
+
// If the ErrorCode is 0, it means everything is fine for the control. It is fully loaded.
|
|
282
|
+
this.DWObject = Dynamsoft.DWT.GetWebTwain('dwtcontrolContainer');
|
|
283
|
+
if (this.DWObject) {
|
|
284
|
+
if (this.DWObject.ErrorCode === 0) {
|
|
285
|
+
this.DWObject.LogLevel = 0;
|
|
286
|
+
this.DWObject.IfAllowLocalCache = true;
|
|
287
|
+
this.DWObject.ImageCaptureDriverType = 4;
|
|
288
|
+
this.setDefaultValue();
|
|
289
|
+
this.DWObject.RegisterEvent('OnTopImageInTheViewChanged', this.Dynamsoft_OnTopImageInTheViewChanged);
|
|
290
|
+
this.DWObject.RegisterEvent('OnMouseClick', this.Dynamsoft_OnMouseClick);
|
|
291
|
+
let twainsource = document.getElementById('source');
|
|
292
|
+
if (!twainsource) {
|
|
293
|
+
twainsource = document.getElementById('webcamsource');
|
|
294
|
+
}
|
|
295
|
+
const vCount = this.DWObject.SourceCount;
|
|
296
|
+
this.DWTSourceCount = vCount;
|
|
297
|
+
if (twainsource) {
|
|
298
|
+
twainsource.options.length = 0;
|
|
299
|
+
for (let i = 0; i < vCount; i++) {
|
|
300
|
+
twainsource.options.add(new Option(this.DWObject.GetSourceNameItems(i), i.toString()));
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
// If source list need to be displayed, fill in the source items.
|
|
304
|
+
if (vCount === 0) {
|
|
305
|
+
if (liNoScanner) {
|
|
306
|
+
if (Dynamsoft.Lib.env.bWin) {
|
|
307
|
+
liNoScanner.style.display = 'block';
|
|
308
|
+
liNoScanner.style.textAlign = 'center';
|
|
309
|
+
}
|
|
310
|
+
else {
|
|
311
|
+
liNoScanner.style.display = 'none';
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
if (vCount > 0) {
|
|
316
|
+
this.source_onchange();
|
|
317
|
+
}
|
|
318
|
+
if (Dynamsoft.Lib.env.bWin) {
|
|
319
|
+
this.DWObject.MouseShape = false;
|
|
320
|
+
}
|
|
321
|
+
const btnScan = document.getElementById('btnScan');
|
|
322
|
+
if (btnScan) {
|
|
323
|
+
if (vCount === 0) {
|
|
324
|
+
btnScan.disabled = true;
|
|
325
|
+
}
|
|
326
|
+
else {
|
|
327
|
+
btnScan.disabled = false;
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
if (!Dynamsoft.Lib.env.bWin && vCount > 0) {
|
|
331
|
+
if (document.getElementById('lblShowUI')) {
|
|
332
|
+
document.getElementById('lblShowUI').style.display = 'none';
|
|
333
|
+
}
|
|
334
|
+
if (document.getElementById('ShowUI')) {
|
|
335
|
+
document.getElementById('ShowUI').style.display = 'none';
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
else {
|
|
339
|
+
if (document.getElementById('lblShowUI')) {
|
|
340
|
+
document.getElementById('lblShowUI').style.display = '';
|
|
341
|
+
}
|
|
342
|
+
if (document.getElementById('ShowUI')) {
|
|
343
|
+
document.getElementById('ShowUI').style.display = '';
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
this.initDllForChangeImageSize();
|
|
347
|
+
this._iLeft = 0;
|
|
348
|
+
this._iTop = 0;
|
|
349
|
+
this._iRight = 0;
|
|
350
|
+
this._iBottom = 0;
|
|
351
|
+
for (let i = 0; i < document.links.length; i++) {
|
|
352
|
+
if (document.links[i].className === 'ShowtblLoadImage') {
|
|
353
|
+
document.links[i].onclick = this.showtblLoadImage_onclick;
|
|
354
|
+
}
|
|
355
|
+
if (document.links[i].className === 'ClosetblLoadImage') {
|
|
356
|
+
document.links[i].onclick = this.closetblLoadImage_onclick;
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
if (vCount === 0) {
|
|
360
|
+
if (Dynamsoft.Lib.env.bWin) {
|
|
361
|
+
if (document.getElementById('aNoScanner') && window['bDWTOnlineDemo']) {
|
|
362
|
+
if (document.getElementById('div_ScanImage').style.display === '') {
|
|
363
|
+
this.showtblLoadImage_onclick();
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
if (document.getElementById('Resolution')) {
|
|
367
|
+
document.getElementById('Resolution').style.display = 'none';
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
else {
|
|
372
|
+
const divBlank = document.getElementById('divBlank');
|
|
373
|
+
if (divBlank) {
|
|
374
|
+
divBlank.style.display = 'none';
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
this.updatePageInfo();
|
|
378
|
+
const ua = navigator.userAgent.toLowerCase();
|
|
379
|
+
if (!ua.indexOf('msie 6.0')) {
|
|
380
|
+
}
|
|
381
|
+
this.DWObject.RegisterEvent('OnPostTransfer', this.Dynamsoft_OnPostTransfer);
|
|
382
|
+
this.DWObject.RegisterEvent('OnPostLoad', this.Dynamsoft_OnPostLoadfunction);
|
|
383
|
+
this.DWObject.RegisterEvent('OnPostAllTransfers', this.Dynamsoft_OnPostAllTransfers);
|
|
384
|
+
this.DWObject.RegisterEvent('OnImageAreaSelected', this.Dynamsoft_OnImageAreaSelected);
|
|
385
|
+
this.DWObject.RegisterEvent('OnImageAreaDeSelected', this.Dynamsoft_OnImageAreaDeselected);
|
|
386
|
+
this.DWObject.RegisterEvent('OnGetFilePath', this.Dynamsoft_OnGetFilePath);
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
showtblLoadImage_onclick() {
|
|
391
|
+
switch (document.getElementById('tblLoadImage').style.visibility) {
|
|
392
|
+
case 'hidden':
|
|
393
|
+
document.getElementById('tblLoadImage').style.visibility = 'visible';
|
|
394
|
+
document.getElementById('Resolution').style.visibility = 'hidden';
|
|
395
|
+
break;
|
|
396
|
+
case 'visible':
|
|
397
|
+
document.getElementById('tblLoadImage').style.visibility = 'hidden';
|
|
398
|
+
document.getElementById('Resolution').style.visibility = 'visible';
|
|
399
|
+
break;
|
|
400
|
+
default:
|
|
401
|
+
break;
|
|
402
|
+
}
|
|
403
|
+
if (document.getElementById('pNoScanner')) {
|
|
404
|
+
// document.getElementById("tblLoadImage").style.top = ds_gettop(document.getElementById("pNoScanner")) + pNoScanner.offsetHeight + "px";
|
|
405
|
+
// document.getElementById("tblLoadImage").style.left = ds_getleft(document.getElementById("pNoScanner")) + 0 + "px";
|
|
406
|
+
}
|
|
407
|
+
return false;
|
|
408
|
+
}
|
|
409
|
+
closetblLoadImage_onclick() {
|
|
410
|
+
document.getElementById('tblLoadImage').style.visibility = 'hidden';
|
|
411
|
+
document.getElementById('Resolution').style.visibility = 'visible';
|
|
412
|
+
return false;
|
|
413
|
+
}
|
|
414
|
+
// --------------------------------------------------------------------------------------
|
|
415
|
+
// ************************** Used a lot *****************************
|
|
416
|
+
// --------------------------------------------------------------------------------------
|
|
417
|
+
updatePageInfo() {
|
|
418
|
+
const totalImage = document.getElementById('DW_TotalImage');
|
|
419
|
+
const currentImage = document.getElementById('DW_CurrentImage');
|
|
420
|
+
if (totalImage) {
|
|
421
|
+
totalImage.value = this.DWObject.HowManyImagesInBuffer;
|
|
422
|
+
}
|
|
423
|
+
if (currentImage) {
|
|
424
|
+
currentImage.value = this.DWObject.CurrentImageIndexInBuffer + 1;
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
appendMessage(strMessage) {
|
|
428
|
+
this._strTempStr += strMessage;
|
|
429
|
+
const _divMessageContainer = document.getElementById('DWTemessage');
|
|
430
|
+
if (_divMessageContainer) {
|
|
431
|
+
_divMessageContainer.innerHTML = this._strTempStr;
|
|
432
|
+
_divMessageContainer.scrollTop = _divMessageContainer.scrollHeight;
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
checkIfImagesInBuffer() {
|
|
436
|
+
if (this.DWObject.HowManyImagesInBuffer === 0) {
|
|
437
|
+
this.appendMessage('There is no image in buffer.<br />');
|
|
438
|
+
return false;
|
|
439
|
+
}
|
|
440
|
+
else {
|
|
441
|
+
return true;
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
checkErrorString() {
|
|
445
|
+
return this.checkErrorStringWithErrorCode(this.DWObject.ErrorCode, this.DWObject.ErrorString);
|
|
446
|
+
}
|
|
447
|
+
checkErrorStringWithErrorCode(errorCode, errorString, responseString = null) {
|
|
448
|
+
if (errorCode === 0) {
|
|
449
|
+
this.appendMessage("<span style='color:#cE5E04'><b>" + errorString + '</b></span><br />');
|
|
450
|
+
return true;
|
|
451
|
+
}
|
|
452
|
+
if (errorCode === -2115) {
|
|
453
|
+
// Cancel file dialog
|
|
454
|
+
return true;
|
|
455
|
+
}
|
|
456
|
+
else {
|
|
457
|
+
if (errorCode === -2003) {
|
|
458
|
+
const ErrorMessageWin = window.open('', 'ErrorMessage', 'height=500,width=750,top=0,left=0,toolbar=no,menubar=no,scrollbars=no, resizable=no,location=no, status=no');
|
|
459
|
+
ErrorMessageWin.document.writeln(responseString); // this.DWObject.HTTPPostResponseString);
|
|
460
|
+
}
|
|
461
|
+
this.appendMessage("<span style='color:#cE5E04'><b>" + errorString + '</b></span><br />');
|
|
462
|
+
return false;
|
|
463
|
+
}
|
|
464
|
+
}
|
|
465
|
+
// --------------------------------------------------------------------------------------
|
|
466
|
+
// ************************** Used a lot *****************************
|
|
467
|
+
// --------------------------------------------------------------------------------------
|
|
468
|
+
ds_getleft(el) {
|
|
469
|
+
let tmp = el.offsetLeft;
|
|
470
|
+
el = el.offsetParent;
|
|
471
|
+
while (el) {
|
|
472
|
+
tmp += el.offsetLeft;
|
|
473
|
+
el = el.offsetParent;
|
|
474
|
+
}
|
|
475
|
+
return tmp;
|
|
476
|
+
}
|
|
477
|
+
ds_gettop(el) {
|
|
478
|
+
let tmp = el.offsetTop;
|
|
479
|
+
el = el.offsetParent;
|
|
480
|
+
while (el) {
|
|
481
|
+
tmp += el.offsetTop;
|
|
482
|
+
el = el.offsetParent;
|
|
483
|
+
}
|
|
484
|
+
return tmp;
|
|
485
|
+
}
|
|
486
|
+
Over_Out_DemoImage(obj, url) {
|
|
487
|
+
obj.src = url;
|
|
488
|
+
}
|
|
489
|
+
source_onchange() {
|
|
490
|
+
if (document.getElementById('divTwainType')) {
|
|
491
|
+
document.getElementById('divTwainType').style.display = '';
|
|
492
|
+
}
|
|
493
|
+
if (document.getElementById('source')) {
|
|
494
|
+
const cIndex = document.getElementById('source').selectedIndex;
|
|
495
|
+
if (Dynamsoft.Lib.env.bMac) {
|
|
496
|
+
const strSourceName = this.DWObject.GetSourceNameItems(cIndex);
|
|
497
|
+
if (strSourceName.indexOf('ICA') === 0) {
|
|
498
|
+
if (document.getElementById('lblShowUI')) {
|
|
499
|
+
document.getElementById('lblShowUI').style.display = 'none';
|
|
500
|
+
}
|
|
501
|
+
if (document.getElementById('ShowUI')) {
|
|
502
|
+
document.getElementById('ShowUI').style.display = 'none';
|
|
503
|
+
}
|
|
504
|
+
}
|
|
505
|
+
else {
|
|
506
|
+
if (document.getElementById('lblShowUI')) {
|
|
507
|
+
document.getElementById('lblShowUI').style.display = '';
|
|
508
|
+
}
|
|
509
|
+
if (document.getElementById('ShowUI')) {
|
|
510
|
+
document.getElementById('ShowUI').style.display = '';
|
|
511
|
+
}
|
|
512
|
+
}
|
|
513
|
+
}
|
|
514
|
+
else {
|
|
515
|
+
this.DWObject.SelectSourceByIndex(cIndex);
|
|
516
|
+
}
|
|
517
|
+
}
|
|
518
|
+
}
|
|
519
|
+
mediaType_onchange() {
|
|
520
|
+
const MediaType = document.getElementById('MediaType');
|
|
521
|
+
if (MediaType && MediaType.options.length > 0) {
|
|
522
|
+
const valueMediaType = MediaType.options[MediaType.selectedIndex].text;
|
|
523
|
+
if (valueMediaType !== '') {
|
|
524
|
+
if (!this.DWObject.Addon.Webcam.SetMediaType(valueMediaType)) {
|
|
525
|
+
this.appendMessage('<b>Error setting MediaType value: </b>');
|
|
526
|
+
this.appendMessage("<span style='color:#cE5E04'><b>" + this.DWObject.ErrorString + '</b></span><br />');
|
|
527
|
+
return;
|
|
528
|
+
}
|
|
529
|
+
}
|
|
530
|
+
}
|
|
531
|
+
const ResolutionWebcam = document.getElementById('ResolutionWebcam');
|
|
532
|
+
if (ResolutionWebcam) {
|
|
533
|
+
ResolutionWebcam.options.length = 0;
|
|
534
|
+
const aryResolution = this.DWObject.Addon.Webcam.GetResolution();
|
|
535
|
+
const countResolution = aryResolution.GetCount();
|
|
536
|
+
for (let i = 0; i < countResolution; i++) {
|
|
537
|
+
const value = aryResolution.Get(i);
|
|
538
|
+
ResolutionWebcam.options.add(new Option(value, value));
|
|
539
|
+
}
|
|
540
|
+
}
|
|
541
|
+
}
|
|
542
|
+
/*-----------------Acquire Image---------------------*/
|
|
543
|
+
acquireImage() {
|
|
544
|
+
const cIndex = document.getElementById('source').selectedIndex;
|
|
545
|
+
if (cIndex < 0) {
|
|
546
|
+
return;
|
|
547
|
+
}
|
|
548
|
+
this.DWObject.SelectSourceByIndex(cIndex);
|
|
549
|
+
this.DWObject.CloseSource();
|
|
550
|
+
this.DWObject.OpenSource();
|
|
551
|
+
this.DWObject.IfShowUI = document.getElementById('ShowUI').checked;
|
|
552
|
+
let i;
|
|
553
|
+
for (i = 0; i < 3; i++) {
|
|
554
|
+
if (document.getElementsByName('PixelType').item(i).checked === true) {
|
|
555
|
+
this.DWObject.PixelType = i;
|
|
556
|
+
}
|
|
557
|
+
}
|
|
558
|
+
if (this.DWObject.ErrorCode !== 0) {
|
|
559
|
+
this.appendMessage('<b>Error setting PixelType value: </b>');
|
|
560
|
+
this.appendMessage("<span style='color:#cE5E04'><b>" + this.DWObject.ErrorString + '</b></span><br />');
|
|
561
|
+
}
|
|
562
|
+
this.DWObject.Resolution = document.getElementById('Resolution').value;
|
|
563
|
+
if (this.DWObject.ErrorCode !== 0) {
|
|
564
|
+
this.appendMessage('<b>Error setting Resolution value: </b>');
|
|
565
|
+
this.appendMessage("<span style='color:#cE5E04'><b>" + this.DWObject.ErrorString + '</b></span><br />');
|
|
566
|
+
}
|
|
567
|
+
const bADFChecked = document.getElementById('ADF').checked;
|
|
568
|
+
this.DWObject.IfFeederEnabled = bADFChecked;
|
|
569
|
+
if (bADFChecked === true && this.DWObject.ErrorCode !== 0) {
|
|
570
|
+
this.appendMessage('<b>Error setting ADF value: </b>');
|
|
571
|
+
this.appendMessage("<span style='color:#cE5E04'><b>" + this.DWObject.ErrorString + '</b></span><br />');
|
|
572
|
+
}
|
|
573
|
+
const bDuplexChecked = document.getElementById('Duplex').checked;
|
|
574
|
+
this.DWObject.IfDuplexEnabled = bDuplexChecked;
|
|
575
|
+
if (bDuplexChecked === true && this.DWObject.ErrorCode !== 0) {
|
|
576
|
+
this.appendMessage('<b>Error setting Duplex value: </b>');
|
|
577
|
+
this.appendMessage("<span style='color:#cE5E04'><b>" + this.DWObject.ErrorString + '</b></span><br />');
|
|
578
|
+
}
|
|
579
|
+
if (Dynamsoft.Lib.env.bWin || (!Dynamsoft.Lib.env.bWin && this.DWObject.ImageCaptureDriverType === 0)) {
|
|
580
|
+
this.appendMessage('Pixel Type: ' + this.DWObject.PixelType + '<br />Resolution: ' + this.DWObject.Resolution + '<br />');
|
|
581
|
+
}
|
|
582
|
+
this.DWObject.IfDisableSourceAfterAcquire = true;
|
|
583
|
+
this.DWObject.AcquireImage();
|
|
584
|
+
}
|
|
585
|
+
/*-----------------Load Image---------------------*/
|
|
586
|
+
btnLoadImagesOrPDFs_onclick() {
|
|
587
|
+
const OnPDFSuccess = () => {
|
|
588
|
+
this.appendMessage('Loaded an image successfully.<br/>');
|
|
589
|
+
this.updatePageInfo();
|
|
590
|
+
};
|
|
591
|
+
const OnPDFFailure = (errorCode, errorString) => {
|
|
592
|
+
this.checkErrorStringWithErrorCode(errorCode, errorString);
|
|
593
|
+
};
|
|
594
|
+
this.DWObject.IfShowFileDialog = true;
|
|
595
|
+
this.DWObject.Addon.PDF.SetResolution(200);
|
|
596
|
+
this.DWObject.Addon.PDF.SetConvertMode(Dynamsoft.DWT.EnumDWT_ConvertMode.CM_RENDERALL);
|
|
597
|
+
this.DWObject.LoadImageEx('', Dynamsoft.DWT.EnumDWT_ImageType.IT_ALL, OnPDFSuccess, OnPDFFailure);
|
|
598
|
+
}
|
|
599
|
+
// --------------------------------------------------------------------------------------
|
|
600
|
+
// ************************** Edit Image ******************************
|
|
601
|
+
// --------------------------------------------------------------------------------------
|
|
602
|
+
btnShowImageEditor_onclick() {
|
|
603
|
+
if (!this.checkIfImagesInBuffer()) {
|
|
604
|
+
return;
|
|
605
|
+
}
|
|
606
|
+
this.DWObject.ShowImageEditor();
|
|
607
|
+
}
|
|
608
|
+
btnRotateRight_onclick() {
|
|
609
|
+
if (!this.checkIfImagesInBuffer()) {
|
|
610
|
+
return;
|
|
611
|
+
}
|
|
612
|
+
this.DWObject.RotateRight(this.DWObject.CurrentImageIndexInBuffer);
|
|
613
|
+
this.appendMessage('<b>Rotate right: </b>');
|
|
614
|
+
if (this.checkErrorString()) {
|
|
615
|
+
return;
|
|
616
|
+
}
|
|
617
|
+
}
|
|
618
|
+
btnRotateLeft_onclick() {
|
|
619
|
+
if (!this.checkIfImagesInBuffer()) {
|
|
620
|
+
return;
|
|
621
|
+
}
|
|
622
|
+
this.DWObject.RotateLeft(this.DWObject.CurrentImageIndexInBuffer);
|
|
623
|
+
this.appendMessage('<b>Rotate left: </b>');
|
|
624
|
+
if (this.checkErrorString()) {
|
|
625
|
+
return;
|
|
626
|
+
}
|
|
627
|
+
}
|
|
628
|
+
btnRotate180_onclick() {
|
|
629
|
+
if (!this.checkIfImagesInBuffer()) {
|
|
630
|
+
return;
|
|
631
|
+
}
|
|
632
|
+
this.DWObject.Rotate(this.DWObject.CurrentImageIndexInBuffer, 180, true);
|
|
633
|
+
this.appendMessage('<b>Rotate 180: </b>');
|
|
634
|
+
if (this.checkErrorString()) {
|
|
635
|
+
return;
|
|
636
|
+
}
|
|
637
|
+
}
|
|
638
|
+
btnMirror_onclick() {
|
|
639
|
+
if (!this.checkIfImagesInBuffer()) {
|
|
640
|
+
return;
|
|
641
|
+
}
|
|
642
|
+
this.DWObject.Mirror(this.DWObject.CurrentImageIndexInBuffer);
|
|
643
|
+
this.appendMessage('<b>Mirror: </b>');
|
|
644
|
+
if (this.checkErrorString()) {
|
|
645
|
+
return;
|
|
646
|
+
}
|
|
647
|
+
}
|
|
648
|
+
btnFlip_onclick() {
|
|
649
|
+
if (!this.checkIfImagesInBuffer()) {
|
|
650
|
+
return;
|
|
651
|
+
}
|
|
652
|
+
this.DWObject.Flip(this.DWObject.CurrentImageIndexInBuffer);
|
|
653
|
+
this.appendMessage('<b>Flip: </b>');
|
|
654
|
+
if (this.checkErrorString()) {
|
|
655
|
+
return;
|
|
656
|
+
}
|
|
657
|
+
}
|
|
658
|
+
/*----------------------Crop Method---------------------*/
|
|
659
|
+
btnCrop_onclick() {
|
|
660
|
+
if (!this.checkIfImagesInBuffer()) {
|
|
661
|
+
return;
|
|
662
|
+
}
|
|
663
|
+
if (this._iLeft !== 0 || this._iTop !== 0 || this._iRight !== 0 || this._iBottom !== 0) {
|
|
664
|
+
this.DWObject.Crop(this.DWObject.CurrentImageIndexInBuffer, this._iLeft, this._iTop, this._iRight, this._iBottom);
|
|
665
|
+
this._iLeft = 0;
|
|
666
|
+
this._iTop = 0;
|
|
667
|
+
this._iRight = 0;
|
|
668
|
+
this._iBottom = 0;
|
|
669
|
+
this.appendMessage('<b>Crop: </b>');
|
|
670
|
+
if (this.checkErrorString()) {
|
|
671
|
+
return;
|
|
672
|
+
}
|
|
673
|
+
return;
|
|
674
|
+
}
|
|
675
|
+
else {
|
|
676
|
+
this.appendMessage("<b>Crop: </b>failed. Please first select the area you'd like to crop.<br />");
|
|
677
|
+
}
|
|
678
|
+
}
|
|
679
|
+
/*----------------Change Image Size--------------------*/
|
|
680
|
+
btnChangeImageSize_onclick() {
|
|
681
|
+
if (!this.checkIfImagesInBuffer()) {
|
|
682
|
+
return;
|
|
683
|
+
}
|
|
684
|
+
switch (document.getElementById('ImgSizeEditor').style.visibility) {
|
|
685
|
+
case 'visible':
|
|
686
|
+
document.getElementById('ImgSizeEditor').style.visibility = 'hidden';
|
|
687
|
+
break;
|
|
688
|
+
case 'hidden':
|
|
689
|
+
document.getElementById('ImgSizeEditor').style.visibility = 'visible';
|
|
690
|
+
break;
|
|
691
|
+
default:
|
|
692
|
+
break;
|
|
693
|
+
}
|
|
694
|
+
// document.getElementById("ImgSizeEditor").style.top = ds_gettop(document.getElementById("btnChangeImageSize")) + document.getElementById("btnChangeImageSize").offsetHeight + 15 + "px";
|
|
695
|
+
// document.getElementById("ImgSizeEditor").style.left = ds_getleft(document.getElementById("btnChangeImageSize")) - 14 + "px";
|
|
696
|
+
const iWidth = this.DWObject.GetImageWidth(this.DWObject.CurrentImageIndexInBuffer);
|
|
697
|
+
if (iWidth !== -1) {
|
|
698
|
+
document.getElementById('img_width').value = iWidth;
|
|
699
|
+
}
|
|
700
|
+
const iHeight = this.DWObject.GetImageHeight(this.DWObject.CurrentImageIndexInBuffer);
|
|
701
|
+
if (iHeight !== -1) {
|
|
702
|
+
document.getElementById('img_height').value = iHeight;
|
|
703
|
+
}
|
|
704
|
+
}
|
|
705
|
+
btnCancelChange_onclick() {
|
|
706
|
+
document.getElementById('ImgSizeEditor').style.visibility = 'hidden';
|
|
707
|
+
}
|
|
708
|
+
btnChangeImageSizeOK_onclick() {
|
|
709
|
+
document.getElementById('img_height').className = '';
|
|
710
|
+
document.getElementById('img_width').className = '';
|
|
711
|
+
if (!this.re.test(document.getElementById('img_height').value)) {
|
|
712
|
+
document.getElementById('img_height').className += ' invalid';
|
|
713
|
+
document.getElementById('img_height').focus();
|
|
714
|
+
this.appendMessage('Please input a valid <b>height</b>.<br />');
|
|
715
|
+
return;
|
|
716
|
+
}
|
|
717
|
+
if (!this.re.test(document.getElementById('img_width').value)) {
|
|
718
|
+
document.getElementById('img_width').className += ' invalid';
|
|
719
|
+
document.getElementById('img_width').focus();
|
|
720
|
+
this.appendMessage('Please input a valid <b>width</b>.<br />');
|
|
721
|
+
return;
|
|
722
|
+
}
|
|
723
|
+
this.DWObject.ChangeImageSize(this.DWObject.CurrentImageIndexInBuffer, document.getElementById('img_width').value, document.getElementById('img_height').value, document.getElementById('InterpolationMethod').selectedIndex + 1);
|
|
724
|
+
this.appendMessage('<b>Change Image Size: </b>');
|
|
725
|
+
if (this.checkErrorString()) {
|
|
726
|
+
document.getElementById('ImgSizeEditor').style.visibility = 'hidden';
|
|
727
|
+
return;
|
|
728
|
+
}
|
|
729
|
+
}
|
|
730
|
+
// --------------------------------------------------------------------------------------
|
|
731
|
+
// ************************** Save Image***********************************
|
|
732
|
+
// --------------------------------------------------------------------------------------
|
|
733
|
+
btnSave_onclick() {
|
|
734
|
+
if (!this.checkIfImagesInBuffer()) {
|
|
735
|
+
return;
|
|
736
|
+
}
|
|
737
|
+
const strimgType_save = 'pdf';
|
|
738
|
+
this.DWObject.IfShowFileDialog = true;
|
|
739
|
+
const _txtFileNameforSave = document.getElementById('txt_fileName');
|
|
740
|
+
if (_txtFileNameforSave) {
|
|
741
|
+
_txtFileNameforSave.className = '';
|
|
742
|
+
}
|
|
743
|
+
let bSave = false;
|
|
744
|
+
const strFilePath = _txtFileNameforSave.value + '.' + strimgType_save;
|
|
745
|
+
const OnSuccess = () => {
|
|
746
|
+
this.appendMessage('<b>Save Image: </b>');
|
|
747
|
+
this.checkErrorStringWithErrorCode(0, 'Successful.');
|
|
748
|
+
};
|
|
749
|
+
const OnFailure = (errorCode, errorString) => {
|
|
750
|
+
this.checkErrorStringWithErrorCode(errorCode, errorString);
|
|
751
|
+
};
|
|
752
|
+
bSave = this.DWObject.SaveAllAsPDF(strFilePath, OnSuccess, OnFailure);
|
|
753
|
+
if (bSave) {
|
|
754
|
+
this.appendMessage('<b>Save Image: </b>');
|
|
755
|
+
}
|
|
756
|
+
if (this.checkErrorString()) {
|
|
757
|
+
return;
|
|
758
|
+
}
|
|
759
|
+
}
|
|
760
|
+
// --------------------------------------------------------------------------------------
|
|
761
|
+
// ************************** Upload Image***********************************
|
|
762
|
+
// --------------------------------------------------------------------------------------
|
|
763
|
+
makeid(length) {
|
|
764
|
+
let result = '';
|
|
765
|
+
const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
|
|
766
|
+
const charactersLength = characters.length;
|
|
767
|
+
for (let i = 0; i < length; i++) {
|
|
768
|
+
result += characters.charAt(Math.floor(Math.random() * charactersLength));
|
|
769
|
+
}
|
|
770
|
+
return result;
|
|
771
|
+
}
|
|
772
|
+
convertToBlob() {
|
|
773
|
+
var _a;
|
|
774
|
+
// this.DocumentScanService.uploadStart.emit(true);
|
|
775
|
+
const pages = [];
|
|
776
|
+
for (let index = 0; index < ((_a = this.DWObject) === null || _a === void 0 ? void 0 : _a.HowManyImagesInBuffer); index++) {
|
|
777
|
+
pages.push(index);
|
|
778
|
+
}
|
|
779
|
+
this.DWObject.ConvertToBlob(pages, Dynamsoft.DWT.EnumDWT_ImageType.IT_PDF, (result, indices, type) => {
|
|
780
|
+
result.lastModifiedDate = new Date();
|
|
781
|
+
result.name = 'scan-' + this.datePipe.transform(result.lastModifiedDate, 'dd-MM-yyyy') + '.pdf';
|
|
782
|
+
this.uploaderService
|
|
783
|
+
.upload([result])
|
|
784
|
+
.pipe(takeUntil(this.destroy$), distinctUntilChanged())
|
|
785
|
+
.subscribe((event) => {
|
|
786
|
+
if (event.type == FileEventType.Complete) {
|
|
787
|
+
this.file.next(event.data[0]);
|
|
788
|
+
}
|
|
789
|
+
});
|
|
790
|
+
}, (errorCode, errorString) => {
|
|
791
|
+
console.log(errorString);
|
|
792
|
+
// this.DocumentScanService.uploadStart.emit(false);
|
|
793
|
+
});
|
|
794
|
+
}
|
|
795
|
+
convertToBlobForSaving() {
|
|
796
|
+
var _a;
|
|
797
|
+
const pages = [];
|
|
798
|
+
for (let index = 0; index < ((_a = this.DWObject) === null || _a === void 0 ? void 0 : _a.HowManyImagesInBuffer); index++) {
|
|
799
|
+
pages.push(index);
|
|
800
|
+
}
|
|
801
|
+
this.DWObject.ConvertToBlob(pages, Dynamsoft.DWT.EnumDWT_ImageType.IT_PDF, (result, indices, type) => {
|
|
802
|
+
result.lastModifiedDate = new Date();
|
|
803
|
+
result.name = 'scan-' + this.datePipe.transform(result.lastModifiedDate, 'dd-MM-yyyy') + '.pdf';
|
|
804
|
+
// this.DocumentScanService.storedFile = result;
|
|
805
|
+
this.onMinimizingSubscription ? this.onMinimizingSubscription.unsubscribe() : '';
|
|
806
|
+
}, (errorCode, errorString) => {
|
|
807
|
+
console.log(errorString);
|
|
808
|
+
});
|
|
809
|
+
}
|
|
810
|
+
// --------------------------------------------------------------------------------------
|
|
811
|
+
// ************************** Navigator functions***********************************
|
|
812
|
+
// --------------------------------------------------------------------------------------
|
|
813
|
+
btnFirstImage_onclick() {
|
|
814
|
+
if (!this.checkIfImagesInBuffer()) {
|
|
815
|
+
return;
|
|
816
|
+
}
|
|
817
|
+
this.DWObject.CurrentImageIndexInBuffer = 0;
|
|
818
|
+
this.updatePageInfo();
|
|
819
|
+
}
|
|
820
|
+
btnPreImage_wheel() {
|
|
821
|
+
if (this.DWObject.HowManyImagesInBuffer !== 0) {
|
|
822
|
+
this.btnPreImage_onclick();
|
|
823
|
+
}
|
|
824
|
+
}
|
|
825
|
+
btnNextImage_wheel() {
|
|
826
|
+
if (this.DWObject.HowManyImagesInBuffer !== 0) {
|
|
827
|
+
this.btnNextImage_onclick();
|
|
828
|
+
}
|
|
829
|
+
}
|
|
830
|
+
btnPreImage_onclick() {
|
|
831
|
+
if (!this.checkIfImagesInBuffer()) {
|
|
832
|
+
return;
|
|
833
|
+
}
|
|
834
|
+
else if (this.DWObject.CurrentImageIndexInBuffer === 0) {
|
|
835
|
+
return;
|
|
836
|
+
}
|
|
837
|
+
this.DWObject.CurrentImageIndexInBuffer = this.DWObject.CurrentImageIndexInBuffer - 1;
|
|
838
|
+
this.updatePageInfo();
|
|
839
|
+
}
|
|
840
|
+
btnNextImage_onclick() {
|
|
841
|
+
if (!this.checkIfImagesInBuffer()) {
|
|
842
|
+
return;
|
|
843
|
+
}
|
|
844
|
+
else if (this.DWObject.CurrentImageIndexInBuffer === this.DWObject.HowManyImagesInBuffer - 1) {
|
|
845
|
+
return;
|
|
846
|
+
}
|
|
847
|
+
this.DWObject.CurrentImageIndexInBuffer = this.DWObject.CurrentImageIndexInBuffer + 1;
|
|
848
|
+
this.updatePageInfo();
|
|
849
|
+
}
|
|
850
|
+
btnLastImage_onclick() {
|
|
851
|
+
if (!this.checkIfImagesInBuffer()) {
|
|
852
|
+
return;
|
|
853
|
+
}
|
|
854
|
+
this.DWObject.CurrentImageIndexInBuffer = this.DWObject.HowManyImagesInBuffer - 1;
|
|
855
|
+
this.updatePageInfo();
|
|
856
|
+
}
|
|
857
|
+
btnRemoveCurrentImage_onclick() {
|
|
858
|
+
if (!this.checkIfImagesInBuffer()) {
|
|
859
|
+
return;
|
|
860
|
+
}
|
|
861
|
+
this.DWObject.RemoveAllSelectedImages();
|
|
862
|
+
if (this.DWObject.HowManyImagesInBuffer === 0) {
|
|
863
|
+
document.getElementById('DW_TotalImage').value = this.DWObject.HowManyImagesInBuffer;
|
|
864
|
+
document.getElementById('DW_CurrentImage').value = '';
|
|
865
|
+
return;
|
|
866
|
+
}
|
|
867
|
+
else {
|
|
868
|
+
this.updatePageInfo();
|
|
869
|
+
}
|
|
870
|
+
}
|
|
871
|
+
btnRemoveAllImages_onclick() {
|
|
872
|
+
if (!this.checkIfImagesInBuffer()) {
|
|
873
|
+
return;
|
|
874
|
+
}
|
|
875
|
+
this.DWObject.RemoveAllImages();
|
|
876
|
+
document.getElementById('DW_TotalImage').value = '0';
|
|
877
|
+
document.getElementById('DW_CurrentImage').value = '';
|
|
878
|
+
}
|
|
879
|
+
setlPreviewMode() {
|
|
880
|
+
const varNum = parseInt((document.getElementById('DW_PreviewMode').selectedIndex + 1).toString(), 10);
|
|
881
|
+
const btnCrop = document.getElementById('btnCrop');
|
|
882
|
+
if (btnCrop) {
|
|
883
|
+
let tmpstr = btnCrop.src;
|
|
884
|
+
if (varNum > 1) {
|
|
885
|
+
tmpstr = tmpstr.replace('Crop.', 'Crop_gray.');
|
|
886
|
+
btnCrop.src = tmpstr;
|
|
887
|
+
btnCrop.onclick = function () { };
|
|
888
|
+
}
|
|
889
|
+
else {
|
|
890
|
+
tmpstr = tmpstr.replace('Crop_gray.', 'Crop.');
|
|
891
|
+
btnCrop.src = tmpstr;
|
|
892
|
+
btnCrop.onclick = () => {
|
|
893
|
+
this.btnCrop_onclick();
|
|
894
|
+
};
|
|
895
|
+
}
|
|
896
|
+
}
|
|
897
|
+
this.DWObject.SetViewMode(varNum, varNum);
|
|
898
|
+
if (Dynamsoft.Lib.env.bMac || Dynamsoft.Lib.env.bLinux) {
|
|
899
|
+
return;
|
|
900
|
+
}
|
|
901
|
+
else if (document.getElementById('DW_PreviewMode').selectedIndex !== 0) {
|
|
902
|
+
this.DWObject.MouseShape = true;
|
|
903
|
+
}
|
|
904
|
+
else {
|
|
905
|
+
this.DWObject.MouseShape = false;
|
|
906
|
+
}
|
|
907
|
+
}
|
|
908
|
+
// --------------------------------------------------------------------------------------
|
|
909
|
+
// *********************************radio response***************************************
|
|
910
|
+
// --------------------------------------------------------------------------------------
|
|
911
|
+
rdTIFF_onclick() {
|
|
912
|
+
const _chkMultiPageTIFF = document.getElementById('MultiPageTIFF');
|
|
913
|
+
_chkMultiPageTIFF.disabled = false;
|
|
914
|
+
_chkMultiPageTIFF.checked = false;
|
|
915
|
+
const _chkMultiPagePDF = document.getElementById('MultiPagePDF');
|
|
916
|
+
_chkMultiPagePDF.checked = false;
|
|
917
|
+
_chkMultiPagePDF.disabled = true;
|
|
918
|
+
}
|
|
919
|
+
rdPDF_onclick() {
|
|
920
|
+
const _chkMultiPageTIFF = document.getElementById('MultiPageTIFF');
|
|
921
|
+
_chkMultiPageTIFF.checked = false;
|
|
922
|
+
_chkMultiPageTIFF.disabled = true;
|
|
923
|
+
const _chkMultiPagePDF = document.getElementById('MultiPagePDF');
|
|
924
|
+
_chkMultiPagePDF.disabled = false;
|
|
925
|
+
_chkMultiPagePDF.checked = true;
|
|
926
|
+
}
|
|
927
|
+
rd_onclick() {
|
|
928
|
+
const _chkMultiPageTIFF = document.getElementById('MultiPageTIFF');
|
|
929
|
+
_chkMultiPageTIFF.checked = false;
|
|
930
|
+
_chkMultiPageTIFF.disabled = true;
|
|
931
|
+
const _chkMultiPagePDF = document.getElementById('MultiPagePDF');
|
|
932
|
+
_chkMultiPagePDF.checked = false;
|
|
933
|
+
_chkMultiPagePDF.disabled = true;
|
|
934
|
+
}
|
|
935
|
+
Dynamsoft_OnMouseDoubleClick() {
|
|
936
|
+
return;
|
|
937
|
+
}
|
|
938
|
+
ngOnDestroy() {
|
|
939
|
+
this.destroy$.next();
|
|
940
|
+
this.destroy$.complete();
|
|
941
|
+
}
|
|
942
|
+
}
|
|
943
|
+
NdfScannerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: NdfScannerComponent, deps: [{ token: i1.TranslateService }, { token: i2.DocumentsService }, { token: i3.NdfUploaderService }, { token: i4.DatePipe }, { token: APP_BASE_HREF }], target: i0.ɵɵFactoryTarget.Component });
|
|
944
|
+
NdfScannerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: NdfScannerComponent, selector: "ndf-scanner", inputs: { useStoredFile: "useStoredFile", hideUploadButton: "hideUploadButton", loading: "loading" }, outputs: { file: "file" }, host: { classAttribute: "ndf-scanner" }, usesOnChanges: true, ngImport: i0, template: "<div id=\"DWTcontainer\" class=\"h-full\">\r\n\t<div id=\"DWTcontainerTop\">\r\n\t\t<div id=\"divEdit\">\r\n\t\t\t<ul class=\"operateGrp\">\r\n\t\t\t\t<li clss=\"flex items-center justify-center leading-none w-15 h-15\">\r\n\t\t\t\t\t<mat-icon\r\n\t\t\t\t\t\t[matTooltip]=\"'scanner.showImageEditor' | translate\"\r\n\t\t\t\t\t\t(click)=\"btnShowImageEditor_onclick()\"\r\n\t\t\t\t\t\tclass=\"filter-icon cursor-pointer\"\r\n\t\t\t\t\t\t[svgIcon]=\"'icons:Editor'\"\r\n\t\t\t\t\t></mat-icon>\r\n\t\t\t\t</li>\r\n\t\t\t\t<li clss=\"flex items-center justify-center leading-none w-15 h-15\">\r\n\t\t\t\t\t<mat-icon\r\n\t\t\t\t\t\t[matTooltip]=\"'scanner.rotateLeft' | translate\"\r\n\t\t\t\t\t\t(click)=\"btnRotateLeft_onclick()\"\r\n\t\t\t\t\t\tclass=\"filter-icon cursor-pointer\"\r\n\t\t\t\t\t\t[svgIcon]=\"'icons:Rotate-Left'\"\r\n\t\t\t\t\t></mat-icon>\r\n\t\t\t\t</li>\r\n\t\t\t\t<li clss=\"flex items-center justify-center leading-none w-15 h-15\">\r\n\t\t\t\t\t<mat-icon\r\n\t\t\t\t\t\t[matTooltip]=\"'scanner.rotateRight' | translate\"\r\n\t\t\t\t\t\t(click)=\"btnRotateRight_onclick()\"\r\n\t\t\t\t\t\tclass=\"filter-icon cursor-pointer\"\r\n\t\t\t\t\t\t[svgIcon]=\"'icons:Rotate-Right'\"\r\n\t\t\t\t\t></mat-icon>\r\n\t\t\t\t</li>\r\n\t\t\t\t<li clss=\"flex items-center justify-center leading-none w-15 h-15\">\r\n\t\t\t\t\t<mat-icon\r\n\t\t\t\t\t\t[matTooltip]=\"'scanner.rotate180' | translate\"\r\n\t\t\t\t\t\t(click)=\"btnRotate180_onclick()\"\r\n\t\t\t\t\t\tclass=\"filter-icon cursor-pointer\"\r\n\t\t\t\t\t\t[svgIcon]=\"'icons:Rotate-180'\"\r\n\t\t\t\t\t></mat-icon>\r\n\t\t\t\t</li>\r\n\t\t\t\t<li clss=\"flex items-center justify-center leading-none w-15 h-15\">\r\n\t\t\t\t\t<mat-icon\r\n\t\t\t\t\t\t[matTooltip]=\"'scanner.mirror' | translate\"\r\n\t\t\t\t\t\t(click)=\"btnMirror_onclick()\"\r\n\t\t\t\t\t\tclass=\"filter-icon cursor-pointer\"\r\n\t\t\t\t\t\t[svgIcon]=\"'icons:flip-horizontal'\"\r\n\t\t\t\t\t></mat-icon>\r\n\t\t\t\t</li>\r\n\t\t\t\t<li clss=\"flex items-center justify-center leading-none w-15 h-15\">\r\n\t\t\t\t\t<mat-icon\r\n\t\t\t\t\t\t[matTooltip]=\"'scanner.flip' | translate\"\r\n\t\t\t\t\t\t(click)=\"btnFlip_onclick()\"\r\n\t\t\t\t\t\tclass=\"filter-icon cursor-pointer\"\r\n\t\t\t\t\t\t[svgIcon]=\"'icons:flip-vertical'\"\r\n\t\t\t\t\t></mat-icon>\r\n\t\t\t\t</li>\r\n\t\t\t\t<li clss=\"flex items-center justify-center leading-none w-15 h-15\">\r\n\t\t\t\t\t<mat-icon\r\n\t\t\t\t\t\t[matTooltip]=\"'scanner.removeSelected' | translate\"\r\n\t\t\t\t\t\t(click)=\"btnRemoveCurrentImage_onclick()\"\r\n\t\t\t\t\t\tclass=\"filter-icon cursor-pointer\"\r\n\t\t\t\t\t\t[svgIcon]=\"'icons:RemoveImages'\"\r\n\t\t\t\t\t></mat-icon>\r\n\t\t\t\t</li>\r\n\t\t\t\t<li clss=\"flex items-center justify-center leading-none w-15 h-15\">\r\n\t\t\t\t\t<mat-icon\r\n\t\t\t\t\t\t[matTooltip]=\"'scanner.removeAll' | translate\"\r\n\t\t\t\t\t\t(click)=\"btnRemoveAllImages_onclick()\"\r\n\t\t\t\t\t\tclass=\"filter-icon cursor-pointer\"\r\n\t\t\t\t\t\t[svgIcon]=\"'icons:RemoveAllImages'\"\r\n\t\t\t\t\t></mat-icon>\r\n\t\t\t\t</li>\r\n\t\t\t\t<li clss=\"flex items-center justify-center leading-none w-15 h-15\">\r\n\t\t\t\t\t<mat-icon\r\n\t\t\t\t\t\t[matTooltip]=\"'scanner.resize' | translate\"\r\n\t\t\t\t\t\t(click)=\"btnChangeImageSize_onclick()\"\r\n\t\t\t\t\t\tclass=\"filter-icon cursor-pointer\"\r\n\t\t\t\t\t\t[svgIcon]=\"'icons:changeSize'\"\r\n\t\t\t\t\t></mat-icon>\r\n\t\t\t\t</li>\r\n\t\t\t\t<li clss=\"flex items-center justify-center leading-none w-15 h-15\">\r\n\t\t\t\t\t<mat-icon\r\n\t\t\t\t\t\t[matTooltip]=\"'scanner.crop' | translate\"\r\n\t\t\t\t\t\t(click)=\"btnCrop_onclick()\"\r\n\t\t\t\t\t\tclass=\"filter-icon cursor-pointer\"\r\n\t\t\t\t\t\t[svgIcon]=\"'icons:crop'\"\r\n\t\t\t\t\t></mat-icon>\r\n\t\t\t\t</li>\r\n\t\t\t</ul>\r\n\t\t\t<div id=\"ImgSizeEditor\" style=\"visibility: hidden\">\r\n\t\t\t\t<ul>\r\n\t\t\t\t\t<li>\r\n\t\t\t\t\t\t<label for=\"img_height\"\r\n\t\t\t\t\t\t\t>{{ 'scanner.newHeight' | translate }} :\r\n\t\t\t\t\t\t\t<input type=\"text\" id=\"img_height\" style=\"width: 50%\" size=\"10\" />\r\n\t\t\t\t\t\t\t{{ 'scanner.pixel' | translate }}</label\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t</li>\r\n\t\t\t\t\t<li>\r\n\t\t\t\t\t\t<label for=\"img_width\"\r\n\t\t\t\t\t\t\t>{{ 'scanner.newWidth' | translate }} : \r\n\t\t\t\t\t\t\t<input type=\"text\" id=\"img_width\" style=\"width: 50%\" size=\"10\" />\r\n\t\t\t\t\t\t\t{{ 'scanner.pixel' | translate }}</label\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t</li>\r\n\t\t\t\t\t<li>\r\n\t\t\t\t\t\t{{ 'scanner.InterpolationMethod' | translate }}:\r\n\t\t\t\t\t\t<select size=\"1\" id=\"InterpolationMethod\">\r\n\t\t\t\t\t\t\t<option value=\"\"></option>\r\n\t\t\t\t\t\t</select>\r\n\t\t\t\t\t</li>\r\n\t\t\t\t\t<li style=\"text-align: center\">\r\n\t\t\t\t\t\t<input type=\"button\" value=\" OK \" id=\"btnChangeImageSizeOK\" (click)=\"btnChangeImageSizeOK_onclick()\" />\r\n\t\t\t\t\t\t<input type=\"button\" value=\" Cancel \" id=\"btnCancelChange\" (click)=\"btnCancelChange_onclick()\" />\r\n\t\t\t\t\t</li>\r\n\t\t\t\t</ul>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t\t<div id=\"dwtcontrolContainer\"></div>\r\n\t\t<div class=\"w-full\" id=\"loader\">\r\n\t\t\t<div class=\"flex items-center justify-center h-full\">\r\n\t\t\t\t<mat-spinner></mat-spinner>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t\t<div id=\"btnGroupBtm\">\r\n\t\t\t<div class=\"ct-lt\">\r\n\t\t\t\t{{ 'scanner.page' | translate }}:\r\n\t\t\t\t<input id=\"DW_btnFirstImage\" (click)=\"btnFirstImage_onclick()\" type=\"button\" value=\" |< \" /> \r\n\t\t\t\t<input id=\"DW_btnPreImage\" (click)=\"btnPreImage_onclick()\" type=\"button\" value=\" < \" /> \r\n\t\t\t\t<input type=\"text\" size=\"2\" id=\"DW_CurrentImage\" readonly=\"readonly\" />\r\n\t\t\t\t/\r\n\t\t\t\t<input type=\"text\" size=\"2\" id=\"DW_TotalImage\" readonly=\"readonly\" /> \r\n\t\t\t\t<input id=\"DW_btnNextImage\" (click)=\"btnNextImage_onclick()\" type=\"button\" value=\"> \" /> \r\n\t\t\t\t<input id=\"DW_btnLastImage\" (click)=\"btnLastImage_onclick()\" type=\"button\" value=\">| \" />\r\n\t\t\t</div>\r\n\t\t\t<div class=\"ct-rt\">\r\n\t\t\t\t{{ 'scanner.preview' | translate }}:\r\n\t\t\t\t<select size=\"1\" id=\"DW_PreviewMode\" (change)=\"setlPreviewMode()\">\r\n\t\t\t\t\t<option value=\"0\">1X1</option>\r\n\t\t\t\t\t<option value=\"1\">2X2</option>\r\n\t\t\t\t\t<option value=\"2\">3X3</option>\r\n\t\t\t\t\t<option value=\"3\">4X4</option>\r\n\t\t\t\t\t<option value=\"4\">5X5</option></select\r\n\t\t\t\t><br />\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</div>\r\n\t<div id=\"ScanWrapper\">\r\n\t\t<div id=\"divScanner\" class=\"divinput\">\r\n\t\t\t<div id=\"div_ScanImage\" class=\"divTableStyle\">\r\n\t\t\t\t<ul id=\"ulScaneImageHIDE\">\r\n\t\t\t\t\t<li>\r\n\t\t\t\t\t\t<label for=\"source\">\r\n\t\t\t\t\t\t\t<p>{{ 'scanner.source' | translate }}:</p>\r\n\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t<select size=\"1\" id=\"source\" style=\"position: relative\" (change)=\"source_onchange()\">\r\n\t\t\t\t\t\t\t<option value=\"\"></option>\r\n\t\t\t\t\t\t</select>\r\n\t\t\t\t\t</li>\r\n\t\t\t\t\t<li style=\"display: none\" id=\"pNoScanner\">\r\n\t\t\t\t\t\t<a href=\"javascript: void(0)\" class=\"ShowtblLoadImage\" style=\"color: #fe8e14\" id=\"aNoScanner\"\r\n\t\t\t\t\t\t\t>(No TWAIN compatible drivers detected)</a\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t</li>\r\n\t\t\t\t\t<li id=\"divProductDetail\">\r\n\t\t\t\t\t\t<ul id=\"divTwainType\">\r\n\t\t\t\t\t\t\t<li>\r\n\t\t\t\t\t\t\t\t<label id=\"lblShowUI\" for=\"ShowUI\">\r\n\t\t\t\t\t\t\t\t\t<input type=\"checkbox\" id=\"ShowUI\" />{{ 'scanner.ShowUI' | translate }} </label\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<label for=\"ADF\"> <input type=\"checkbox\" id=\"ADF\" />{{ 'scanner.AutoFeeder' | translate }} </label>\r\n\t\t\t\t\t\t\t\t<label for=\"Duplex\"> <input type=\"checkbox\" id=\"Duplex\" />{{ 'scanner.Duplex' | translate }}</label>\r\n\t\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t\t<li>\r\n\t\t\t\t\t\t\t\t{{ 'scanner.PixelType' | translate }}:\r\n\t\t\t\t\t\t\t\t<label for=\"BW\" style=\"margin-left: 5px\">\r\n\t\t\t\t\t\t\t\t\t<input type=\"radio\" id=\"BW\" name=\"PixelType\" />{{ 'scanner.B&W' | translate }}</label\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<label for=\"Gray\">\r\n\t\t\t\t\t\t\t\t\t<input type=\"radio\" id=\"Gray\" name=\"PixelType\" />{{ 'scanner.Gray' | translate }}</label\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<label for=\"RGB\">\r\n\t\t\t\t\t\t\t\t\t<input type=\"radio\" id=\"RGB\" name=\"PixelType\" />{{ 'scanner.Color' | translate }}</label\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t\t<li>\r\n\t\t\t\t\t\t\t\t<span>{{ 'scanner.Resolution' | translate }}: </span\r\n\t\t\t\t\t\t\t\t><select size=\"1\" id=\"Resolution\">\r\n\t\t\t\t\t\t\t\t\t<option value=\"100\">100</option>\r\n\t\t\t\t\t\t\t\t\t<option value=\"150\">150</option>\r\n\t\t\t\t\t\t\t\t\t<option value=\"200\">200</option>\r\n\t\t\t\t\t\t\t\t\t<option value=\"300\" selected>300</option>\r\n\t\t\t\t\t\t\t\t</select>\r\n\t\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t</ul>\r\n\t\t\t\t\t</li>\r\n\r\n\t\t\t\t\t<div class=\"flex justify-between items-center\">\r\n\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\tid=\"btnScan\"\r\n\t\t\t\t\t\t\tdisabled=\"disabled\"\r\n\t\t\t\t\t\t\t(click)=\"acquireImage()\"\r\n\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\tclass=\"action-btn action-btn_2\"\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<i class=\"bi bi-upc-upload icon\"></i>\r\n\t\t\t\t\t\t\t<span> {{ 'scanner.scanFile' | translate }}</span>\r\n\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t(click)=\"btnLoadImagesOrPDFs_onclick()\"\r\n\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\tclass=\"action-btn action-btn_1 flex items-center justify-center gap-x-2\"\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<i class=\"bi bi-upload icon\"></i>\r\n\t\t\t\t\t\t\t<span> {{ 'scanner.loadFile' | translate }}</span>\r\n\t\t\t\t\t\t</button>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</ul>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t\t<div class=\"flex justify-end mx-3\">\r\n\t\t\t<button\r\n\t\t\t\tclass=\"btn save-button\"\r\n\t\t\t\t[ngClass]=\"{ 'hide-upload-button': hideUploadButton }\"\r\n\t\t\t\t#scannerUploadButton\r\n\t\t\t\tid=\"scannerUploadButton\"\r\n\t\t\t\t[disabled]=\"DWObject?.HowManyImagesInBuffer === 0\"\r\n\t\t\t\tcolor=\"primary\"\r\n\t\t\t\t(click)=\"convertToBlob()\"\r\n\t\t\t>\r\n\t\t\t\t{{ 'scanner.saveFile' | translate }}\r\n\t\t\t</button>\r\n\t\t</div>\r\n\t</div>\r\n</div>\r\n", styles: [".ndf-scanner img{vertical-align:middle;border:0}.ndf-scanner p{margin:0;padding:0}.ndf-scanner a:link,.ndf-scanner a:visited{color:#606060;text-decoration:none}.ndf-scanner a:hover{color:#fe8e14}.ndf-scanner input{font:normal 12px verdana;color:#444}.ndf-scanner input.invalid{background-color:#ff9;border:2px red inset}.ndf-scanner a img{border:none}.ndf-scanner a img:hover{border:none}.ndf-scanner ul{list-style:none;padding-left:0;margin:0}.ndf-scanner .container{width:980px;margin:0 auto}.ndf-scanner .container:after,.ndf-scanner .clearfix:after{content:\"\";display:table;clear:both}.ndf-scanner .tc{text-align:center}.ndf-scanner .btnOrg{padding:0 15px;height:30px;line-height:28px;font-size:14px;color:#fff;background:#50a8e1;border:none;outline:none;cursor:pointer;border-radius:5px;-webkit-border-radius:5px;-moz-border-right-colors:5px;transition:all .2s ease-in-out}.ndf-scanner .btnOrg:hover{background:#61c2ec}.ndf-scanner .d-btn{display:inline-block;padding:0 25px;height:36px;line-height:30px;color:#fe8e14;font-size:14px;text-align:center;cursor:pointer;border:solid 2px #fe8e14;border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-o-border-radius:5px;transition:all .2s ease-in-out}.ndf-scanner .d-btn:link,.ndf-scanner .d-btn:visited{color:#fe8e14}.ndf-scanner .d-btn:hover{color:#ffae38;border:solid 2px #ffae38}.ndf-scanner .d-btn.lgBtn{height:46px;line-height:40px}.ndf-scanner .d-btn.mdBtn{height:42px;line-height:36px}.ndf-scanner .d-btn.smBtn{height:38px;line-height:32px}.ndf-scanner .d-btn.bgOrange{background:#fe8e14;color:#fff}.ndf-scanner .d-btn.bgOrange:hover{background:#ffae38}.ndf-scanner .d-btn.bgBlue{border-color:#50a8e1;background:#50a8e1;color:#fff}.ndf-scanner .d-btn.bgBlue:hover{border-color:#61c2ec;background:#61c2ec}.ndf-scanner #dwtScanDemo{width:980px;margin:0 auto}.ndf-scanner #dwtScanDemo .ct-top{padding:0 0 15px}.ndf-scanner #dwtScanDemo .ct-top .title{font-size:18px;line-height:27px;color:#444}.ndf-scanner #dwtScanDemo .ct-top .desc{margin:0 15px 0 30px;font-size:14px;line-height:24px;color:#aaa}.ndf-scanner #DWTcontainer{display:flex;justify-content:space-between;flex-direction:row}.ndf-scanner #DWTcontainerTop{position:relative;float:left;flex:1;margin:0 10px;height:auto;border-radius:4px;border:3px solid #ccc;display:flex;justify-content:space-between;flex-direction:row;overflow:hidden}.ndf-scanner .ds-dwt-container-box>div{border:none!important}.ndf-scanner #divEdit{float:left;margin:0;padding:0;width:60px;background:#fff;border-right:1px solid #ccc}.ndf-scanner #divEdit .operateGrp li{margin:0;width:60px;height:57px;line-height:52px;border-bottom:solid 1px #ccc;text-align:center}.ndf-scanner #divEdit .operateGrp li:nth-last-child(2){height:58px}.ndf-scanner #divEdit .operateGrp li:last-child{height:56px}.ndf-scanner #divEdit .operateGrp li>img{cursor:pointer}.ndf-scanner #Crop{padding:10px 5px 5px;text-align:center;border-collapse:collapse;border:3px solid #ce5e04;position:absolute;height:80px;z-index:1;background-color:#f0f0f0;width:250px}.ndf-scanner #ImgSizeEditor{padding:10px 15px;position:absolute;z-index:1;top:513px;left:-1px;height:auto;width:320px;font-size:14px;color:#606060;text-align:left;background-color:#f5f5f5;border-collapse:collapse;border:1px solid #ccc;box-shadow:4px 4px 18px #ccc;-webkit-box-shadow:4px 4px 18px #ccc;-moz-box-shadow:4px 4px 18px #ccc}.ndf-scanner #ImgSizeEditor li{margin-bottom:5px}.ndf-scanner #ImgSizeEditor input{background:#fff;border:solid 1px #ccc}.ndf-scanner #ImgSizeEditor input[type=text]{padding-left:3px}.ndf-scanner #ImgSizeEditor input[type=button]{padding:5px;margin:6px 5px 0}.ndf-scanner #dwtcontrolContainer{float:left;width:100%;height:calc(100% - 58px)}.ndf-scanner #dwtcontrolContainer .dynamsoft-dwt-container-box>div{border:none!important}.ndf-scanner #dwt-NonInstallContainerID{float:left;width:560px;height:590px}.ndf-scanner #DWTcontainerTop #btnGroupBtm{position:absolute;bottom:0;padding:15px;width:calc(100% - 60px);height:58px;background:#f5f5f5;border-top:1px solid #ccc;font-size:14px;color:#606060;vertical-align:bottom;display:flex;justify-content:space-between;flex-direction:row;align-items:center;box-sizing:border-box;left:60px}.ndf-scanner #btnGroupBtm .ct-lt{float:left}.ndf-scanner #btnGroupBtm .ct-lt input{padding:0;margin-right:6px;width:25px;height:20px;font-size:10px;background:var(--input-field-bg, #f5f5f5);border:solid 1px var(--border-color, #bbbcc0);color:var(--input-field-color, #606060);outline:none;cursor:pointer}.ndf-scanner #btnGroupBtm .ct-lt input[type=text]{height:20px;font-size:12px;border:none;cursor:default}.ndf-scanner #btnGroupBtm .ct-lt #DW_btnFirstImage{margin-left:5px}.ndf-scanner #btnGroupBtm .ct-lt #DW_CurrentImage{margin:0 0 0 -13px;text-align:right}.ndf-scanner #btnGroupBtm .ct-lt #DW_TotalImage{margin:0 -7px 0 0;text-align:left}.ndf-scanner #btnGroupBtm .ct-rt{float:right}.ndf-scanner #DW_PreviewMode{padding:0 5px;margin-left:5px;height:26px;border:solid 1px #d8d8d8;color:#444;outline:none;border-radius:5px;cursor:pointer}.ndf-scanner #ScanWrapper{border-radius:4px;width:315px;height:570px;box-sizing:border-box}.ndf-scanner div.divinput{font-size:14px;color:#606060;line-height:24px;margin-bottom:20px}.ndf-scanner .divType,.ndf-scanner #ScanWrapper .toggle{padding-left:20px;height:38px;line-height:36px;font-size:14px;color:#444;background:#eee;border-bottom:1px solid #ccc;cursor:pointer}.ndf-scanner #ScanWrapper .toggle{cursor:default}.ndf-scanner .mark_arrow{display:block;float:right;margin:15px 20px 0 0;width:12px;height:8px}.ndf-scanner .divTableStyle{border:3px solid #ccc;border-radius:5px;padding:10px}.ndf-scanner .divTableStyle input[type=radio],.ndf-scanner .divTableStyle input[type=checkbox]{margin:0 5px!important;height:13px;display:inline-block}.ndf-scanner #ScanWrapper select,.ndf-scanner #divUpload input[type=text]{margin-top:3px;margin-bottom:6px;height:26px;border:solid 1px #ccc;border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;outline:none}.ndf-scanner #ScanWrapper input[type=checkbox],.ndf-scanner #ScanWrapper input[type=radio]{margin:0 3px 0 0}.ndf-scanner #divScanner{border-bottom:none}.ndf-scanner #PCollapse{list-style:none inside none;margin-left:0;padding-left:0}.ndf-scanner select#source{margin-top:3px;padding-left:3px;width:100%;font-size:12px;border:solid 1px #ccc;border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;outline:none}.ndf-scanner select#Resolution{margin-left:3px;width:192px;height:26px}.ndf-scanner #divProductDetail li{margin-top:8px}.ndf-scanner #divProductDetail li:first-child{margin-top:3px}.ndf-scanner #divProductDetail li label{display:inline-block;margin:0 4px;font-size:12px}.ndf-scanner #divProductDetail li label:last-child{margin:0}.ndf-scanner #divProductDetail li label input{width:15px;height:15px;vertical-align:middle}.ndf-scanner #div_LoadLocalImage input[type=button]{margin:15px 0;width:90px;height:30px}.ndf-scanner #div_ScanImage{position:relative}.ndf-scanner #tblLoadImage{position:absolute;top:102px;z-index:1;padding:30px 22px;width:275px;height:128px;font-size:14px;line-height:30px;text-align:left;border:1px solid #fe8e14;background-color:#f5f5f5}.ndf-scanner #tblLoadImage>a{position:absolute;top:15px;right:15px;line-height:normal;text-decoration:none}.ndf-scanner #tblLoadImage a{color:#50a8e1}.ndf-scanner #tblLoadImage a:hover{color:#61c2ec}.ndf-scanner #divUpload input[type=text]{width:100%;padding-left:5px}.ndf-scanner #divUpload li label{display:inline-block;margin:0 8px 0 0;font-size:12px}.ndf-scanner #divUpload li img{margin-right:2px}.ndf-scanner #divUpload li label:last-child{margin-right:0}.ndf-scanner #divUpload li input{width:15px;height:15px;vertical-align:middle}.ndf-scanner #divUpload li:nth-child(3){margin:5px 0 8px}.ndf-scanner #divUpload li{padding:0 20px}.ndf-scanner #divUpload li:nth-child(2){padding-top:12px}.ndf-scanner #divUpload input[type=button]{margin:14px 0 20px}.ndf-scanner #divUpload #btnSave,.ndf-scanner #divUpload #btnUpload{padding:0;width:115px;height:30px;margin-right:15px;cursor:pointer}.ndf-scanner #divUpload #btnUpload{width:138px;margin-right:0}.ndf-scanner #DWTcontainerBtm{position:relative;float:left;width:980px}.ndf-scanner #DWTemessageContainer{float:left}.ndf-scanner #DWTemessageContainer input[type=text]{border:solid 1px #ccc;padding-left:3px}.ndf-scanner #DWTemessageContainer input[type=button]{cursor:pointer;margin:0 3px;outline:none}.ndf-scanner #DWTdivMsg{padding:5px 0 0;font-size:14px;color:#444}.ndf-scanner #DWTemessage{padding:6px 0 0 8px;margin-top:3px;width:632px;height:160px;border:solid 1px #ccc;overflow-y:scroll;background:#fff}.ndf-scanner #divNoteMessage{float:right;padding:10px 15px;margin-top:34px;width:315px;height:160px;font-size:12px;line-height:20px;border:1px solid #ccc;background:#e7f2fd;color:#606060}.ndf-scanner #divNoteMessage p{margin:0;color:#444}.ndf-scanner .ds-dialog-wrap,.ndf-scanner .ds-dialog-wrap div{box-sizing:content-box!important}.ndf-scanner .ds-dialog-wrap:before,.ndf-scanner .ds-dialog-wrap div:before,.ndf-scanner .ds-dialog-wrap:after,.ndf-scanner .ds-dialog-wrap div:after{box-sizing:content-box!important}.ndf-scanner .ks-overlay{position:absolute;left:-9999px;top:-9999px}.ndf-scanner .ks-ext-close{padding:0 20px;position:absolute;right:-5px;top:5px}.ndf-scanner .ks-ext-close,.ndf-scanner .ks-ext-close:link{color:#22a;text-decoration:none;cursor:pointer}.ndf-scanner .ks-ext-mask{background:#999;filter:alpha(opacity=70);-moz-opacity:.7;opacity:.7}.ndf-scanner .D-dailog .ks-ext-close .ks-ext-close-x{height:8px}.ndf-scanner .D-dailog .ks-ext-close,.ndf-scanner .D-dailog .ks-ext-close:hover{background:none;border:none}.ndf-scanner .D-dailog{position:absolute;left:-9999px;top:-99999px;margin:100px auto;padding:0;width:392px;height:262px;background-color:#f1f2f2}.ndf-scanner .D-dailog .D-dailog-body{width:350px;height:200px;position:relative;top:5px;left:5px;margin:0;background-color:#fff;border:1px solid #e7e7e7;padding:15px}.ndf-scanner .D-dailog .D-dailog-body-Mac{width:350px;height:235px;position:relative;top:5px;left:5px;margin:0;background-color:#fff;border:1px solid #e7e7e7;padding:15px}.ndf-scanner .D-dailog .D-dailog-body-NotAllowed{color:#444;line-height:1.8;width:350px;height:185px;position:relative;top:5px;left:5px;margin:0;background-color:#fff;border:1px solid #e7e7e7;padding:15px}.ndf-scanner .D-dailog .D-dailog-body-Scan{width:380px;height:240px;position:relative;top:5px;left:5px;margin:0;background-color:#fff;border:1px solid #e7e7e7;padding:15px}.ndf-scanner .D-dailog .D-dailog-body-Scan-sample{width:380px;height:200px;position:relative;top:5px;left:5px;margin:0;background-color:#fff;border:1px solid #e7e7e7;padding:15px}.ndf-scanner .D-dailog a{text-decoration:none}.ndf-scanner .link{text-decoration:underline}.ndf-scanner .D-dailog ul{margin:10px 0 10px 20px;list-style-type:disc}.ndf-scanner .red{color:red;margin-left:5px}.ndf-scanner #message{position:fixed;top:0px;left:0px;width:100%;z-index:105;text-align:center;font-weight:bold;font-size:100%;padding:10px 0;color:#239210;background-color:#e0f0d6;border:1px solid #54d33f;box-shadow:0 0 10px #3a3a3a}.ndf-scanner #MessageBody a{color:#6a9962;font-size:14px}.ndf-scanner #message span{text-align:center;width:95%;float:left}.ndf-scanner #MessageBoy a:hover{text-decoration:underline}.ndf-scanner .close-notify{white-space:nowrap;float:right;margin-right:10px;color:#fff;text-decoration:none;border:2px #fff solid;padding-left:3px;padding-right:3px}.ndf-scanner .close-notify a{color:#fff}.ndf-scanner .DWTPage{margin:0 auto}.hide-upload-button{opacity:0!important}app-scanner input[type=checkbox]{appearance:none;-webkit-appearance:none;width:20px!important;height:20px!important;border:2px solid var(--main-color)!important;background-color:var(--wrapper-bg)!important;cursor:pointer;border-radius:4px;position:relative;transition:background-color .3s}app-scanner input[type=checkbox]:checked{background-color:var(--main-color)!important;border-color:var(--main-color)!important}app-scanner input[type=checkbox]:checked:after{content:\"\";position:absolute;top:2px;left:6px;width:5px;border:solid var(--checkbox-inner-color, #fff);height:10px;border-width:0 2px 2px 0;transform:rotate(45deg)}app-scanner input[type=radio]{appearance:none;-webkit-appearance:none;width:20px!important;height:20px!important;border:2px solid var(--radio-border, var(--main-color))!important;background-color:var(--radio-bg, var(--wrapper-bg))!important;border-radius:50%;cursor:pointer;position:relative;transition:background-color .3s ease}app-scanner input[type=radio]:checked{background-color:var(--main-color)!important;border-color:var(--main-color)!important}app-scanner input[type=radio]:checked:after{content:\"\";position:absolute;top:4px;left:4px;width:8px;height:8px;background-color:var(--radio-inner-color, #fff)!important;border-radius:50%}app-scanner .mat-icon{color:var(--scanner-icon-color, #161616)}\n"], components: [{ type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i6.MatSpinner, selector: "mat-spinner", inputs: ["color"] }], directives: [{ type: i7.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltipPosition", "matTooltipDisabled", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], pipes: { "translate": i1.TranslatePipe }, encapsulation: i0.ViewEncapsulation.None });
|
|
945
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: NdfScannerComponent, decorators: [{
|
|
946
|
+
type: Component,
|
|
947
|
+
args: [{
|
|
948
|
+
selector: 'ndf-scanner',
|
|
949
|
+
templateUrl: './ndf-scanner.component.html',
|
|
950
|
+
styleUrls: ['./ndf-scanner.component.scss'],
|
|
951
|
+
host: { class: 'ndf-scanner' },
|
|
952
|
+
encapsulation: ViewEncapsulation.None
|
|
953
|
+
}]
|
|
954
|
+
}], ctorParameters: function () { return [{ type: i1.TranslateService }, { type: i2.DocumentsService }, { type: i3.NdfUploaderService }, { type: i4.DatePipe }, { type: undefined, decorators: [{
|
|
955
|
+
type: Inject,
|
|
956
|
+
args: [APP_BASE_HREF]
|
|
957
|
+
}] }]; }, propDecorators: { useStoredFile: [{
|
|
958
|
+
type: Input
|
|
959
|
+
}], hideUploadButton: [{
|
|
960
|
+
type: Input
|
|
961
|
+
}], loading: [{
|
|
962
|
+
type: Input
|
|
963
|
+
}], file: [{
|
|
964
|
+
type: Output
|
|
965
|
+
}] } });
|
|
966
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmRmLXNjYW5uZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnV4ZW8tZGV2ZWxvcG1lbnQtZnJhbWV3b3JrL3NyYy9saWIvY29tcG9uZW50cy9uZGYtc2Nhbm5lci9uZGYtc2Nhbm5lci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9udXhlby1kZXZlbG9wbWVudC1mcmFtZXdvcmsvc3JjL2xpYi9jb21wb25lbnRzL25kZi1zY2FubmVyL25kZi1zY2FubmVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTixTQUFTLEVBQ1QsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBSUwsTUFBTSxFQUNOLGlCQUFpQixFQUNqQixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsYUFBYSxFQUFZLE1BQU0saUJBQWlCLENBQUM7QUFDMUQsT0FBTyxTQUFTLE1BQU0sS0FBSyxDQUFDO0FBQzVCLE9BQU8sRUFBRSxPQUFPLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVqRSxPQUFPLEVBQUUsYUFBYSxFQUFzQixNQUFNLGlCQUFpQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7O0FBUzVDLE1BQU0sT0FBTyxtQkFBbUI7SUF5Qi9CLFlBQ1EsU0FBMkIsRUFDM0IsZ0JBQWtDLEVBQ3hCLGVBQW1DLEVBQzdDLFFBQWtCLEVBQ00sUUFBZ0I7UUFKeEMsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFDM0IscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUN4QixvQkFBZSxHQUFmLGVBQWUsQ0FBb0I7UUFDN0MsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNNLGFBQVEsR0FB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QUUsYUFBYTtvQkFDdkIsV0FBVyxFQUFFLDhCQUE4QjtvQkFDM0MsU0FBUyxFQUFFLENBQUMsOEJBQThCLENBQUM7b0JBQzNDLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUU7b0JBQzlCLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO2lCQUNyQzs7MEJBK0JFLE1BQU07MkJBQUMsYUFBYTs0Q0EzQmIsYUFBYTtzQkFBckIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUdOLElBQUk7c0JBREgsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcblx0QWZ0ZXJWaWV3SW5pdCxcclxuXHRDb21wb25lbnQsXHJcblx0RXZlbnRFbWl0dGVyLFxyXG5cdEluamVjdCxcclxuXHRJbnB1dCxcclxuXHRPbkNoYW5nZXMsXHJcblx0T25EZXN0cm95LFxyXG5cdE9uSW5pdCxcclxuXHRPdXRwdXQsXHJcblx0Vmlld0VuY2Fwc3VsYXRpb25cclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5pbXBvcnQgeyBBUFBfQkFTRV9IUkVGLCBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCBEeW5hbXNvZnQgZnJvbSAnZHd0JztcclxuaW1wb3J0IHsgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IERvY3VtZW50c1NlcnZpY2UgfSBmcm9tICcuLi9kb2N1bWVudHMvc2VydmljZXMvZG9jdW1lbnRzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBGaWxlRXZlbnRUeXBlLCBOZGZVcGxvYWRlclNlcnZpY2UgfSBmcm9tICcuLi9uZGYtdXBsb2FkZXInO1xyXG5pbXBvcnQgeyBFbnZNYW5hZ2VyIH0gZnJvbSAnLi4vLi4vY29yZS9lbnYnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcblx0c2VsZWN0b3I6ICduZGYtc2Nhbm5lcicsXHJcblx0dGVtcGxhdGVVcmw6ICcuL25kZi1zY2FubmVyLmNvbXBvbmVudC5odG1sJyxcclxuXHRzdHlsZVVybHM6IFsnLi9uZGYtc2Nhbm5lci5jb21wb25lbnQuc2NzcyddLFxyXG5cdGhvc3Q6IHsgY2xhc3M6ICduZGYtc2Nhbm5lcicgfSxcclxuXHRlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOZGZTY2FubmVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCB7XHJcblx0dXBsb2FkZWRGaWxlO1xyXG5cdG9uTWluaW1pemluZ1N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG5cdEBJbnB1dCgpIHVzZVN0b3JlZEZpbGUgPSBmYWxzZTtcclxuXHRASW5wdXQoKSBoaWRlVXBsb2FkQnV0dG9uID0gZmFsc2U7XHJcblx0QElucHV0KCkgbG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cdC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gYSBiYXRjaCBpcyB1cGxvYWRlZCAqL1xyXG5cdEBPdXRwdXQoKVxyXG5cdGZpbGU6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cdHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG5cdERXT2JqZWN0O1xyXG5cdHNlbGVjdFNvdXJjZXM6IEhUTUxTZWxlY3RFbGVtZW50O1xyXG5cdERXVFNvdXJjZUNvdW50ID0gMDtcclxuXHRmaWxlbmFtZSA9ICcnO1xyXG5cdGNvbnRhaW5lcklkID0gJ2R3dGNvbnRyb2xDb250YWluZXInO1xyXG5cdGJXQVNNID0gRHluYW1zb2Z0LkxpYi5lbnYuYk1vYmlsZSB8fCBEeW5hbXNvZnQuRFdULlVzZUxvY2FsU2VydmljZTtcclxuXHRfaUxlZnQ7XHJcblx0X2lUb3A7XHJcblx0X2lSaWdodDtcclxuXHRfaUJvdHRvbTtcclxuXHRfc3RyVGVtcFN0ciA9ICcnO1xyXG5cdHJlID0gL15cXGQrJC87XHJcblx0c3RycmUgPSAvXltcXHNcXHddKyQvO1xyXG5cdHJlZmxvYXQgPSAvXlxcZCtcXC4qXFxkKiQvaTtcclxuXHRpbm5lckhUTUw6IHN0cmluZztcclxuXHRjb25zdHJ1Y3RvcihcclxuXHRcdHB1YmxpYyB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXHJcblx0XHRwdWJsaWMgZG9jdW1lbnRzU2VydmljZTogRG9jdW1lbnRzU2VydmljZSxcclxuXHRcdHByaXZhdGUgcmVhZG9ubHkgdXBsb2FkZXJTZXJ2aWNlOiBOZGZVcGxvYWRlclNlcnZpY2UsXHJcblx0XHRwdWJsaWMgZGF0ZVBpcGU6IERhdGVQaXBlLFxyXG5cdFx0QEluamVjdChBUFBfQkFTRV9IUkVGKSBwcml2YXRlIGJhc2VIcmVmOiBzdHJpbmdcclxuXHQpIHt9XHJcblx0bmdPbkNoYW5nZXMoKTogdm9pZCB7XHJcblx0XHRpZiAodGhpcy5sb2FkaW5nKSB7XHJcblx0XHRcdHRoaXMuc2hvd0xvYWRlcigpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy5oaWRlTG9hZGVyKCk7XHJcblx0XHR9XHJcblx0fVxyXG5cdHNob3dMb2FkZXIoKSB7XHJcblx0XHRkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHd0Y29udHJvbENvbnRhaW5lcicpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcblx0XHRkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbG9hZGVyJykuc3R5bGUuZGlzcGxheSA9ICcnO1xyXG5cdH1cclxuXHJcblx0aGlkZUxvYWRlcigpIHtcclxuXHRcdGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsb2FkZXInKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG5cdFx0ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R3dGNvbnRyb2xDb250YWluZXInKS5zdHlsZS5kaXNwbGF5ID0gJyc7XHJcblx0fVxyXG5cdG5nT25Jbml0KCk6IHZvaWQge1xyXG5cdFx0dGhpcy5oaWRlTG9hZGVyKCk7XHJcblx0XHREeW5hbXNvZnQuRFdULlJlc291cmNlc1BhdGggPSB0aGlzLmJhc2VIcmVmICsgJy9hc3NldHMvZHd0LXJlc291cmNlcyc7XHJcblx0XHQvLy9cclxuXHRcdER5bmFtc29mdC5EV1QuQXV0b0xvYWQgPSB0cnVlO1xyXG5cdFx0Ly8vXHJcblx0XHQvLyBjb25zdCB3aWR0aCA9IHdpbmRvdy5vdXRlcldpZHRoICogMC4zO1xyXG5cdFx0Ly8gY29uc3QgaGVpZ2h0ID0gd2luZG93Lm91dGVySGVpZ2h0ICogMC4zO1xyXG5cdFx0RHluYW1zb2Z0LkRXVC5Db250YWluZXJzID0gW1xyXG5cdFx0XHR7XHJcblx0XHRcdFx0V2ViVHdhaW5JZDogJ0RXVE9iamVjdCcsXHJcblx0XHRcdFx0Q29udGFpbmVySWQ6ICdkd3Rjb250cm9sQ29udGFpbmVyJyxcclxuXHRcdFx0XHRXaWR0aDogJzEwMCUnLFxyXG5cdFx0XHRcdEhlaWdodDogJzEwMCUnXHJcblx0XHRcdH1cclxuXHRcdF07XHJcblxyXG5cdFx0RHluYW1zb2Z0LkRXVC5Qcm9kdWN0S2V5ID0gRW52TWFuYWdlci5lbnZpcm9ubWVudC5keW5hbXNvZnRQcm9kdWN0S2V5O1xyXG5cdFx0Ly8gRHluYW1zb2Z0LkRXVC5UcmlhbCA9IGZhbHNlO1xyXG5cdFx0Ly8gRHluYW1zb2Z0LkRXVC5EZWJ1ZyA9IGZhbHNlOyAvLyBvbmx5IGZvciBkZWJ1Z2dlciBvdXRwdXRcclxuXHJcblx0XHQvLy9cclxuXHRcdER5bmFtc29mdC5EV1QuSWZBZGRNRDVJblVwbG9hZEhlYWRlciA9IGZhbHNlO1xyXG5cclxuXHRcdC8vL1xyXG5cdFx0RHluYW1zb2Z0LkRXVC5JZkNvbmZpbmVNYXNrV2l0aGluVGhlVmlld2VyID0gZmFsc2U7XHJcblx0XHREeW5hbXNvZnQuTVNHID0ge1xyXG5cdFx0XHRDb252ZXJ0aW5nVG9CYXNlNjQ6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ3NjYW5uZXIuQ29udmVydGluZ1RvQmFzZTY0JyksXHJcblx0XHRcdENvbnZlcnRpbmdUb0Jsb2I6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ3NjYW5uZXIuQ29udmVydGluZ1RvQmxvYicpLFxyXG5cdFx0XHREb3dubG9hZGluZzogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnc2Nhbm5lci5Eb3dubG9hZGluZycpLFxyXG5cdFx0XHRFbmNvZGluZzogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnc2Nhbm5lci5FbmNvZGluZycpLFxyXG5cdFx0XHRFcnJfQnJvd3Nlck5vdFN1cHBvcnRXYXNtOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdzY2FubmVyLkVycl9Ccm93c2VyTm90U3VwcG9ydFdhc20nKSxcclxuXHRcdFx0SW5pdF9BbGxKc0xvYWRlZDogRHluYW1zb2Z0Lk1TRy5Jbml0X0FsbEpzTG9hZGVkLFxyXG5cdFx0XHRJbml0X0NoZWNrRFdUOiBEeW5hbXNvZnQuTVNHLkluaXRfQ2hlY2tEV1QsXHJcblx0XHRcdEluaXRfQ2hlY2tEV1RWZXJzaW9uOiBEeW5hbXNvZnQuTVNHLkluaXRfQ2hlY2tEV1RWZXJzaW9uLFxyXG5cdFx0XHRJbml0X0NoZWNraW5nTGljZW5zZTogRHluYW1zb2Z0Lk1TRy5Jbml0X0NoZWNraW5nTGljZW5zZSxcclxuXHRcdFx0SW5pdF9Db21waWxpbmdXYXNtOiBEeW5hbXNvZnQuTVNHLkluaXRfQ29tcGlsaW5nV2FzbSxcclxuXHRcdFx0SW5pdF9Db25maWd1cmluZ0RXVDogRHluYW1zb2Z0Lk1TRy5Jbml0X0NvbmZpZ3VyaW5nRFdULFxyXG5cdFx0XHRJbml0X0NyZWF0aW5nRFdUOiBEeW5hbXNvZnQuTVNHLkluaXRfQ3JlYXRpbmdEV1QsXHJcblx0XHRcdEluaXRfRG93bmxvYWRpbmdXYXNtOiBEeW5hbXNvZnQuTVNHLkluaXRfRG93bmxvYWRpbmdXYXNtLFxyXG5cdFx0XHRJbml0X0ZpcmVCZWZvcmVJbml0RXZ0OiBEeW5hbXNvZnQuTVNHLkluaXRfRmlyZUJlZm9yZUluaXRFdnQsXHJcblx0XHRcdEluaXRfR2V0TGljZW5zZUluZm9Gb3JEV1Q6IER5bmFtc29mdC5NU0cuSW5pdF9HZXRMaWNlbnNlSW5mb0ZvckRXVCxcclxuXHRcdFx0SW5pdF9Jbml0QWN0aXZlWDogRHluYW1zb2Z0Lk1TRy5Jbml0X0luaXRBY3RpdmVYLFxyXG5cdFx0XHRJbml0X0luaXREeW5hbXNvZnRTZXJ2aWNlOiBEeW5hbXNvZnQuTVNHLkluaXRfSW5pdER5bmFtc29mdFNlcnZpY2UsXHJcblx0XHRcdEluaXRfSW5pdEg1OiBEeW5hbXNvZnQuTVNHLkluaXRfSW5pdEg1LFxyXG5cdFx0XHRJbml0X0luaXRXYXNtOiBEeW5hbXNvZnQuTVNHLkluaXRfSW5pdFdhc20sXHJcblx0XHRcdEluaXRfTG9hZGluZ1ZpZXdlckpzOiBEeW5hbXNvZnQuTVNHLkluaXRfTG9hZGluZ1ZpZXdlckpzLFxyXG5cdFx0XHRJbml0X0xvb2tpbmdMaWNlbnNlOiBEeW5hbXNvZnQuTVNHLkluaXRfTG9va2luZ0xpY2Vuc2UsXHJcblx0XHRcdEluaXRfU2V0TGljZW5zZUZvckRXVDogRHluYW1zb2Z0Lk1TRy5Jbml0X1NldExpY2Vuc2VGb3JEV1QsXHJcblx0XHRcdExvYWRpbmc6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ3NjYW5uZXIuTG9hZGluZycpLFxyXG5cdFx0XHRMb2FkaW5nUGRmOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdzY2FubmVyLkxvYWRpbmdQZGYnKSxcclxuXHRcdFx0TG9hZGluZ1RpZmY6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ3NjYW5uZXIuTG9hZGluZ1RpZmYnKSxcclxuXHRcdFx0U2F2aW5nUGRmOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdzY2FubmVyLlNhdmluZ1BkZicpLFxyXG5cdFx0XHRTYXZpbmdUaWZmOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdzY2FubmVyLlNhdmluZ1RpZmYnKSxcclxuXHRcdFx0VXBsb2FkaW5nOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdzY2FubmVyLlVwbG9hZGluZycpXHJcblx0XHR9O1xyXG5cdFx0RHluYW1zb2Z0LkRXVC5DdXN0b21pemFibGVEaXNwbGF5SW5mbyA9IHtcclxuXHRcdFx0ZXJyb3JNZXNzYWdlczogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnc2Nhbm5lci5lcnJvck1lc3NhZ2VzJyksXHJcblxyXG5cdFx0XHQvLyBsYXVuY2hcclxuXHRcdFx0Z2VuZXJhbE1lc3NhZ2VzOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdzY2FubmVyLmdlbmVyYWxNZXNzYWdlcycpLFxyXG5cclxuXHRcdFx0Y3VzdG9tUHJvZ3Jlc3NUZXh0OiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdzY2FubmVyLmN1c3RvbVByb2dyZXNzVGV4dCcpLFxyXG5cclxuXHRcdFx0Ly8gaW1hZ2UgZWRpdG9yXHJcblx0XHRcdGJ1dHRvbnM6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ3NjYW5uZXIuYnV0dG9ucycpLFxyXG5cclxuXHRcdFx0ZGlhbG9nVGV4dDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnc2Nhbm5lci5kaWFsb2dUZXh0JylcclxuXHRcdH07XHJcblx0XHREeW5hbXNvZnQuRFdULk9uV2ViVHdhaW5SZWFkeSA9ICgpOiBhbnkgPT4ge1xyXG5cdFx0XHR0aGlzLnBhZ2VvbmxvYWQoKTtcclxuXHRcdFx0dGhpcy5EeW5hbXNvZnRfT25SZWFkeSgpO1xyXG5cdFx0fTtcclxuXHRcdER5bmFtc29mdC5EV1QuTG9hZCgpO1xyXG5cclxuXHRcdC8vIHRoaXMub25NaW5pbWl6aW5nU3Vic2NyaXB0aW9uID0gdGhpcy5Eb2N1bWVudFNjYW5TZXJ2aWNlLm9uTWluaW1pemluZy5zdWJzY3JpYmUoKHJlcykgPT4ge1xyXG5cdFx0Ly8gXHR0aGlzLmNvbnZlcnRUb0Jsb2JGb3JTYXZpbmcoKTtcclxuXHRcdC8vIH0pO1xyXG5cdH1cclxuXHRuZ0FmdGVyVmlld0luaXQoKSB7XHJcblx0XHR0aGlzLnBhZ2VvbmxvYWQoKTtcclxuXHRcdC8vIGlmICh0aGlzLnVzZVN0b3JlZEZpbGUpIHtcclxuXHRcdC8vIFx0aWYgKHRoaXMuRG9jdW1lbnRTY2FuU2VydmljZS5zdG9yZWRGaWxlKSB7XHJcblx0XHQvLyBcdFx0c2V0VGltZW91dCgoKSA9PiB7XHJcblx0XHQvLyBcdFx0XHR0aGlzLnNldFN0b3JlZEZpbGVUb1NjYW5uZXIodGhpcy5Eb2N1bWVudFNjYW5TZXJ2aWNlLnN0b3JlZEZpbGUpO1xyXG5cdFx0Ly8gXHRcdH0sIDIwMDApO1xyXG5cdFx0Ly8gXHR9XHJcblx0XHQvLyB9XHJcblx0fVxyXG5cclxuXHRzZXRTdG9yZWRGaWxlVG9TY2FubmVyKHJlc3VsdCkge1xyXG5cdFx0dGhpcy5EV09iamVjdC5Mb2FkSW1hZ2VGcm9tQmluYXJ5KFxyXG5cdFx0XHRyZXN1bHQsXHJcblx0XHRcdGZ1bmN0aW9uICgpIHtcclxuXHRcdFx0XHRjb25zb2xlLmxvZygnc3VjY2VzcycpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRmdW5jdGlvbiAoZXJyb3JDb2RlLCBlcnJvclN0cmluZykge1xyXG5cdFx0XHRcdGNvbnNvbGUubG9nKGVycm9yU3RyaW5nKTtcclxuXHRcdFx0fVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdHBhZ2VvbmxvYWQoKSB7XHJcblx0XHR0aGlzLkhpZGVMb2FkSW1hZ2VGb3JMaW51eCgpO1xyXG5cdFx0Y29uc3QgdHdhaW5zb3VyY2U6IGFueSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzb3VyY2UnKTtcclxuXHRcdGlmICh0d2FpbnNvdXJjZSkge1xyXG5cdFx0XHR0d2FpbnNvdXJjZS5vcHRpb25zLmxlbmd0aCA9IDA7XHJcblx0XHRcdHR3YWluc291cmNlLm9wdGlvbnMuYWRkKG5ldyBPcHRpb24odGhpcy50cmFuc2xhdGUuaW5zdGFudCgnc2Nhbm5lci5wbGVhc2VXYWl0JyksICcwJykpO1xyXG5cdFx0XHR0d2FpbnNvdXJjZS5vcHRpb25zWzBdLnNlbGVjdGVkID0gdHJ1ZTtcclxuXHRcdH1cclxuXHJcblx0XHR0aGlzLmluaXRpYXRlSW5wdXRzKCk7XHJcblx0fVxyXG5cclxuXHRIaWRlTG9hZEltYWdlRm9yTGludXgoKSB7XHJcblx0XHRjb25zdCBvID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xpTG9hZEltYWdlJyk7XHJcblx0XHRpZiAobykge1xyXG5cdFx0XHRpZiAoRHluYW1zb2Z0LkxpYi5lbnYuYkxpbnV4KSB7XHJcblx0XHRcdFx0by5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdG8uc3R5bGUuZGlzcGxheSA9ICcnO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRpbml0aWF0ZUlucHV0cygpIHtcclxuXHRcdGNvbnN0IGFsbGlucHV0cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbnB1dCcpO1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhbGxpbnB1dHMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0aWYgKGFsbGlucHV0c1tpXS50eXBlID09PSAnY2hlY2tib3gnKSB7XHJcblx0XHRcdFx0YWxsaW5wdXRzW2ldLmNoZWNrZWQgPSBmYWxzZTtcclxuXHRcdFx0fSBlbHNlIGlmIChhbGxpbnB1dHNbaV0udHlwZSA9PT0gJ3RleHQnKSB7XHJcblx0XHRcdFx0YWxsaW5wdXRzW2ldLnZhbHVlID0gJyc7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRpZiAoRHluYW1zb2Z0LkxpYi5lbnYuYklFID09PSB0cnVlICYmIHRoaXMuaXNXaW42NCgpKSB7XHJcblx0XHRcdGxldCBvID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NhbXBsZXNvdXJjZTY0Yml0Jyk7XHJcblx0XHRcdGlmIChvKSB7XHJcblx0XHRcdFx0by5zdHlsZS5kaXNwbGF5ID0gJ2lubGluZSc7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdG8gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2FtcGxlc291cmNlMzJiaXQnKTtcclxuXHRcdFx0aWYgKG8pIHtcclxuXHRcdFx0XHRvLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblx0aXNXaW42NCgpIHtcclxuXHRcdC8vIHJldHVybiAoXHJcblx0XHQvLyBcdG5hdmlnYXRvci5wbGF0Zm9ybS5pbmRleE9mKCdXaW4nKSAhPT0gLTEgJiZcclxuXHRcdC8vIFx0bmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCd4NjQnKSAhPT0gLTFcclxuXHRcdC8vICk7XHJcblx0XHRyZXR1cm4gL1dpbmRvd3MgTlQuKng2NC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcclxuXHR9XHJcblx0aW5pdERsbEZvckNoYW5nZUltYWdlU2l6ZSgpIHtcclxuXHRcdGNvbnN0IHZJbnRlcnBvbGF0aW9uTWV0aG9kOiBhbnkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnSW50ZXJwb2xhdGlvbk1ldGhvZCcpO1xyXG5cdFx0dkludGVycG9sYXRpb25NZXRob2Qub3B0aW9ucy5sZW5ndGggPSAwO1xyXG5cdFx0dkludGVycG9sYXRpb25NZXRob2Qub3B0aW9ucy5hZGQobmV3IE9wdGlvbignTmVhcmVzdE5laWdoYm9yJywgJzEnKSk7XHJcblx0XHR2SW50ZXJwb2xhdGlvbk1ldGhvZC5vcHRpb25zLmFkZChuZXcgT3B0aW9uKCdCaWxpbmVhcicsICcyJykpO1xyXG5cdFx0dkludGVycG9sYXRpb25NZXRob2Qub3B0aW9ucy5hZGQobmV3IE9wdGlvbignQmljdWJpYycsICczJykpO1xyXG5cdH1cclxuXHJcblx0c2V0RGVmYXVsdFZhbHVlKCkge1xyXG5cdFx0Y29uc3QgdkdyYXk6IGFueSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdHcmF5Jyk7XHJcblx0XHRpZiAodkdyYXkpIHtcclxuXHRcdFx0dkdyYXkuY2hlY2tlZCA9IHRydWU7XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgdmFySW1nVHlwZXBuZzI6IGFueSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbWdUeXBlcG5nMicpO1xyXG5cdFx0aWYgKHZhckltZ1R5cGVwbmcyKSB7XHJcblx0XHRcdHZhckltZ1R5cGVwbmcyLmNoZWNrZWQgPSB0cnVlO1xyXG5cdFx0fVxyXG5cdFx0Y29uc3QgdmFySW1nVHlwZXBuZzogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ltZ1R5cGVwbmcnKTtcclxuXHRcdGlmICh2YXJJbWdUeXBlcG5nKSB7XHJcblx0XHRcdHZhckltZ1R5cGVwbmcuY2hlY2tlZCA9IHRydWU7XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgX3N0ckRlZmF1bHRTYXZlSW1hZ2VOYW1lID0gJ1dlYlRXQUlOSW1hZ2UnO1xyXG5cdFx0Y29uc3QgX3R4dEZpbGVOYW1lZm9yU2F2ZTogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3R4dF9maWxlTmFtZWZvclNhdmUnKTtcclxuXHRcdGlmIChfdHh0RmlsZU5hbWVmb3JTYXZlKSB7XHJcblx0XHRcdF90eHRGaWxlTmFtZWZvclNhdmUudmFsdWUgPSBfc3RyRGVmYXVsdFNhdmVJbWFnZU5hbWU7XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgX3R4dEZpbGVOYW1lOiBhbnkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndHh0X2ZpbGVOYW1lJyk7XHJcblx0XHRpZiAoX3R4dEZpbGVOYW1lKSB7XHJcblx0XHRcdF90eHRGaWxlTmFtZS52YWx1ZSA9IF9zdHJEZWZhdWx0U2F2ZUltYWdlTmFtZTtcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCBfY2hrTXVsdGlQYWdlVElGRl9zYXZlOiBhbnkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnTXVsdGlQYWdlVElGRl9zYXZlJyk7XHJcblx0XHRpZiAoX2Noa011bHRpUGFnZVRJRkZfc2F2ZSkge1xyXG5cdFx0XHRfY2hrTXVsdGlQYWdlVElGRl9zYXZlLmRpc2FibGVkID0gdHJ1ZTtcclxuXHRcdH1cclxuXHRcdGNvbnN0IF9jaGtNdWx0aVBhZ2VQREZfc2F2ZTogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ011bHRpUGFnZVBERl9zYXZlJyk7XHJcblx0XHRpZiAoX2Noa011bHRpUGFnZVBERl9zYXZlKSB7XHJcblx0XHRcdF9jaGtNdWx0aVBhZ2VQREZfc2F2ZS5kaXNhYmxlZCA9IHRydWU7XHJcblx0XHR9XHJcblx0XHRjb25zdCBfY2hrTXVsdGlQYWdlVElGRjogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ011bHRpUGFnZVRJRkYnKTtcclxuXHRcdGlmIChfY2hrTXVsdGlQYWdlVElGRikge1xyXG5cdFx0XHRfY2hrTXVsdGlQYWdlVElGRi5kaXNhYmxlZCA9IHRydWU7XHJcblx0XHR9XHJcblx0XHRjb25zdCBfY2hrTXVsdGlQYWdlUERGOiBhbnkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnTXVsdGlQYWdlUERGJyk7XHJcblx0XHRpZiAoX2Noa011bHRpUGFnZVBERikge1xyXG5cdFx0XHRfY2hrTXVsdGlQYWdlUERGLmRpc2FibGVkID0gdHJ1ZTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8vIENoZWNrIGlmIHRoZSBjb250cm9sIGlzIGZ1bGx5IGxvYWRlZC5cclxuXHREeW5hbXNvZnRfT25SZWFkeSgpIHtcclxuXHRcdGNvbnN0IGxpTm9TY2FubmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BOb1NjYW5uZXInKTtcclxuXHRcdC8vIElmIHRoZSBFcnJvckNvZGUgaXMgMCwgaXQgbWVhbnMgZXZlcnl0aGluZyBpcyBmaW5lIGZvciB0aGUgY29udHJvbC4gSXQgaXMgZnVsbHkgbG9hZGVkLlxyXG5cdFx0dGhpcy5EV09iamVjdCA9IER5bmFtc29mdC5EV1QuR2V0V2ViVHdhaW4oJ2R3dGNvbnRyb2xDb250YWluZXInKTtcclxuXHRcdGlmICh0aGlzLkRXT2JqZWN0KSB7XHJcblx0XHRcdGlmICh0aGlzLkRXT2JqZWN0LkVycm9yQ29kZSA9PT0gMCkge1xyXG5cdFx0XHRcdHRoaXMuRFdPYmplY3QuTG9nTGV2ZWwgPSAwO1xyXG5cdFx0XHRcdHRoaXMuRFdPYmplY3QuSWZBbGxvd0xvY2FsQ2FjaGUgPSB0cnVlO1xyXG5cdFx0XHRcdHRoaXMuRFdPYmplY3QuSW1hZ2VDYXB0dXJlRHJpdmVyVHlwZSA9IDQ7XHJcblx0XHRcdFx0dGhpcy5zZXREZWZhdWx0VmFsdWUoKTtcclxuXHJcblx0XHRcdFx0dGhpcy5EV09iamVjdC5SZWdpc3RlckV2ZW50KCdPblRvcEltYWdlSW5UaGVWaWV3Q2hhbmdlZCcsIHRoaXMuRHluYW1zb2Z0X09uVG9wSW1hZ2VJblRoZVZpZXdDaGFuZ2VkKTtcclxuXHRcdFx0XHR0aGlzLkRXT2JqZWN0LlJlZ2lzdGVyRXZlbnQoJ09uTW91c2VDbGljaycsIHRoaXMuRHluYW1zb2Z0X09uTW91c2VDbGljayk7XHJcblxyXG5cdFx0XHRcdGxldCB0d2FpbnNvdXJjZTogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NvdXJjZScpO1xyXG5cdFx0XHRcdGlmICghdHdhaW5zb3VyY2UpIHtcclxuXHRcdFx0XHRcdHR3YWluc291cmNlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3dlYmNhbXNvdXJjZScpO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Y29uc3QgdkNvdW50ID0gdGhpcy5EV09iamVjdC5Tb3VyY2VDb3VudDtcclxuXHRcdFx0XHR0aGlzLkRXVFNvdXJjZUNvdW50ID0gdkNvdW50O1xyXG5cclxuXHRcdFx0XHRpZiAodHdhaW5zb3VyY2UpIHtcclxuXHRcdFx0XHRcdHR3YWluc291cmNlLm9wdGlvbnMubGVuZ3RoID0gMDtcclxuXHRcdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdkNvdW50OyBpKyspIHtcclxuXHRcdFx0XHRcdFx0dHdhaW5zb3VyY2Uub3B0aW9ucy5hZGQobmV3IE9wdGlvbih0aGlzLkRXT2JqZWN0LkdldFNvdXJjZU5hbWVJdGVtcyhpKSwgaS50b1N0cmluZygpKSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvLyBJZiBzb3VyY2UgbGlzdCBuZWVkIHRvIGJlIGRpc3BsYXllZCwgZmlsbCBpbiB0aGUgc291cmNlIGl0ZW1zLlxyXG5cdFx0XHRcdGlmICh2Q291bnQgPT09IDApIHtcclxuXHRcdFx0XHRcdGlmIChsaU5vU2Nhbm5lcikge1xyXG5cdFx0XHRcdFx0XHRpZiAoRHluYW1zb2Z0LkxpYi5lbnYuYldpbikge1xyXG5cdFx0XHRcdFx0XHRcdGxpTm9TY2FubmVyLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG5cdFx0XHRcdFx0XHRcdGxpTm9TY2FubmVyLnN0eWxlLnRleHRBbGlnbiA9ICdjZW50ZXInO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdGxpTm9TY2FubmVyLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGlmICh2Q291bnQgPiAwKSB7XHJcblx0XHRcdFx0XHR0aGlzLnNvdXJjZV9vbmNoYW5nZSgpO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0aWYgKER5bmFtc29mdC5MaWIuZW52LmJXaW4pIHtcclxuXHRcdFx0XHRcdHRoaXMuRFdPYmplY3QuTW91c2VTaGFwZSA9IGZhbHNlO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Y29uc3QgYnRuU2NhbjogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2J0blNjYW4nKTtcclxuXHRcdFx0XHRpZiAoYnRuU2Nhbikge1xyXG5cdFx0XHRcdFx0aWYgKHZDb3VudCA9PT0gMCkge1xyXG5cdFx0XHRcdFx0XHRidG5TY2FuLmRpc2FibGVkID0gdHJ1ZTtcclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdGJ0blNjYW4uZGlzYWJsZWQgPSBmYWxzZTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGlmICghRHluYW1zb2Z0LkxpYi5lbnYuYldpbiAmJiB2Q291bnQgPiAwKSB7XHJcblx0XHRcdFx0XHRpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xibFNob3dVSScpKSB7XHJcblx0XHRcdFx0XHRcdGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsYmxTaG93VUknKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0aWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdTaG93VUknKSkge1xyXG5cdFx0XHRcdFx0XHRkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnU2hvd1VJJykuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0aWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsYmxTaG93VUknKSkge1xyXG5cdFx0XHRcdFx0XHRkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGJsU2hvd1VJJykuc3R5bGUuZGlzcGxheSA9ICcnO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0aWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdTaG93VUknKSkge1xyXG5cdFx0XHRcdFx0XHRkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnU2hvd1VJJykuc3R5bGUuZGlzcGxheSA9ICcnO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0dGhpcy5pbml0RGxsRm9yQ2hhbmdlSW1hZ2VTaXplKCk7XHJcblxyXG5cdFx0XHRcdHRoaXMuX2lMZWZ0ID0gMDtcclxuXHRcdFx0XHR0aGlzLl9pVG9wID0gMDtcclxuXHRcdFx0XHR0aGlzLl9pUmlnaHQgPSAwO1xyXG5cdFx0XHRcdHRoaXMuX2lCb3R0b20gPSAwO1xyXG5cclxuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGRvY3VtZW50LmxpbmtzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0XHRpZiAoZG9jdW1lbnQubGlua3NbaV0uY2xhc3NOYW1lID09PSAnU2hvd3RibExvYWRJbWFnZScpIHtcclxuXHRcdFx0XHRcdFx0ZG9jdW1lbnQubGlua3NbaV0ub25jbGljayA9IHRoaXMuc2hvd3RibExvYWRJbWFnZV9vbmNsaWNrO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0aWYgKGRvY3VtZW50LmxpbmtzW2ldLmNsYXNzTmFtZSA9PT0gJ0Nsb3NldGJsTG9hZEltYWdlJykge1xyXG5cdFx0XHRcdFx0XHRkb2N1bWVudC5saW5rc1tpXS5vbmNsaWNrID0gdGhpcy5jbG9zZXRibExvYWRJbWFnZV9vbmNsaWNrO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZiAodkNvdW50ID09PSAwKSB7XHJcblx0XHRcdFx0XHRpZiAoRHluYW1zb2Z0LkxpYi5lbnYuYldpbikge1xyXG5cdFx0XHRcdFx0XHRpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FOb1NjYW5uZXInKSAmJiB3aW5kb3dbJ2JEV1RPbmxpbmVEZW1vJ10pIHtcclxuXHRcdFx0XHRcdFx0XHRpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Rpdl9TY2FuSW1hZ2UnKS5zdHlsZS5kaXNwbGF5ID09PSAnJykge1xyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5zaG93dGJsTG9hZEltYWdlX29uY2xpY2soKTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0aWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdSZXNvbHV0aW9uJykpIHtcclxuXHRcdFx0XHRcdFx0XHRkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnUmVzb2x1dGlvbicpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0Y29uc3QgZGl2QmxhbmsgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGl2QmxhbmsnKTtcclxuXHRcdFx0XHRcdGlmIChkaXZCbGFuaykge1xyXG5cdFx0XHRcdFx0XHRkaXZCbGFuay5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0dGhpcy51cGRhdGVQYWdlSW5mbygpO1xyXG5cdFx0XHRcdGNvbnN0IHVhID0gbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpO1xyXG5cdFx0XHRcdGlmICghdWEuaW5kZXhPZignbXNpZSA2LjAnKSkge1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0dGhpcy5EV09iamVjdC5SZWdpc3RlckV2ZW50KCdPblBvc3RUcmFuc2ZlcicsIHRoaXMuRHluYW1zb2Z0X09uUG9zdFRyYW5zZmVyKTtcclxuXHRcdFx0XHR0aGlzLkRXT2JqZWN0LlJlZ2lzdGVyRXZlbnQoJ09uUG9zdExvYWQnLCB0aGlzLkR5bmFtc29mdF9PblBvc3RMb2FkZnVuY3Rpb24pO1xyXG5cdFx0XHRcdHRoaXMuRFdPYmplY3QuUmVnaXN0ZXJFdmVudCgnT25Qb3N0QWxsVHJhbnNmZXJzJywgdGhpcy5EeW5hbXNvZnRfT25Qb3N0QWxsVHJhbnNmZXJzKTtcclxuXHRcdFx0XHR0aGlzLkRXT2JqZWN0LlJlZ2lzdGVyRXZlbnQoJ09uSW1hZ2VBcmVhU2VsZWN0ZWQnLCB0aGlzLkR5bmFtc29mdF9PbkltYWdlQXJlYVNlbGVjdGVkKTtcclxuXHRcdFx0XHR0aGlzLkRXT2JqZWN0LlJlZ2lzdGVyRXZlbnQoJ09uSW1hZ2VBcmVhRGVTZWxlY3RlZCcsIHRoaXMuRHluYW1zb2Z0X09uSW1hZ2VBcmVhRGVzZWxlY3RlZCk7XHJcblx0XHRcdFx0dGhpcy5EV09iamVjdC5SZWdpc3RlckV2ZW50KCdPbkdldEZpbGVQYXRoJywgdGhpcy5EeW5hbXNvZnRfT25HZXRGaWxlUGF0aCk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHNob3d0YmxMb2FkSW1hZ2Vfb25jbGljaygpIHtcclxuXHRcdHN3aXRjaCAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RibExvYWRJbWFnZScpLnN0eWxlLnZpc2liaWxpdHkpIHtcclxuXHRcdFx0Y2FzZSAnaGlkZGVuJzpcclxuXHRcdFx0XHRkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGJsTG9hZEltYWdlJykuc3R5bGUudmlzaWJpbGl0eSA9ICd2aXNpYmxlJztcclxuXHRcdFx0XHRkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnUmVzb2x1dGlvbicpLnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJztcclxuXHRcdFx0XHRicmVhaztcclxuXHRcdFx0Y2FzZSAndmlzaWJsZSc6XHJcblx0XHRcdFx0ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RibExvYWRJbWFnZScpLnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJztcclxuXHRcdFx0XHRkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnUmVzb2x1dGlvbicpLnN0eWxlLnZpc2liaWxpdHkgPSAndmlzaWJsZSc7XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHR9XHJcblx0XHRpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BOb1NjYW5uZXInKSkge1xyXG5cdFx0XHQvLyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInRibExvYWRJbWFnZVwiKS5zdHlsZS50b3AgPSBkc19nZXR0b3AoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJwTm9TY2FubmVyXCIpKSArIHBOb1NjYW5uZXIub2Zmc2V0SGVpZ2h0ICsgXCJweFwiO1xyXG5cdFx0XHQvLyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInRibExvYWRJbWFnZVwiKS5zdHlsZS5sZWZ0ID0gZHNfZ2V0bGVmdChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInBOb1NjYW5uZXJcIikpICsgMCArIFwicHhcIjtcclxuXHRcdH1cclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHR9XHJcblxyXG5cdGNsb3NldGJsTG9hZEltYWdlX29uY2xpY2soKSB7XHJcblx0XHRkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGJsTG9hZEltYWdlJykuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xyXG5cdFx0ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ1Jlc29sdXRpb24nKS5zdHlsZS52aXNpYmlsaXR5ID0gJ3Zpc2libGUnO1xyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxuXHJcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHQvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKiBVc2VkIGEgbG90ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHR1cGRhdGVQYWdlSW5mbygpIHtcclxuXHRcdGNvbnN0IHRvdGFsSW1hZ2U6IGFueSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdEV19Ub3RhbEltYWdlJyk7XHJcblx0XHRjb25zdCBjdXJyZW50SW1hZ2U6IGFueSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdEV19DdXJyZW50SW1hZ2UnKTtcclxuXHRcdGlmICh0b3RhbEltYWdlKSB7XHJcblx0XHRcdHRvdGFsSW1hZ2UudmFsdWUgPSB0aGlzLkRXT2JqZWN0Lkhvd01hbnlJbWFnZXNJbkJ1ZmZlcjtcclxuXHRcdH1cclxuXHRcdGlmIChjdXJyZW50SW1hZ2UpIHtcclxuXHRcdFx0Y3VycmVudEltYWdlLnZhbHVlID0gdGhpcy5EV09iamVjdC5DdXJyZW50SW1hZ2VJbmRleEluQnVmZmVyICsgMTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGFwcGVuZE1lc3NhZ2Uoc3RyTWVzc2FnZSkge1xyXG5cdFx0dGhpcy5fc3RyVGVtcFN0ciArPSBzdHJNZXNzYWdlO1xyXG5cdFx0Y29uc3QgX2Rpdk1lc3NhZ2VDb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnRFdUZW1lc3NhZ2UnKTtcclxuXHRcdGlmIChfZGl2TWVzc2FnZUNvbnRhaW5lcikge1xyXG5cdFx0XHRfZGl2TWVzc2FnZUNvbnRhaW5lci5pbm5lckhUTUwgPSB0aGlzLl9zdHJUZW1wU3RyO1xyXG5cdFx0XHRfZGl2TWVzc2FnZUNvbnRhaW5lci5zY3JvbGxUb3AgPSBfZGl2TWVzc2FnZUNvbnRhaW5lci5zY3JvbGxIZWlnaHQ7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRjaGVja0lmSW1hZ2VzSW5CdWZmZXIoKSB7XHJcblx0XHRpZiAodGhpcy5EV09iamVjdC5Ib3dNYW55SW1hZ2VzSW5CdWZmZXIgPT09IDApIHtcclxuXHRcdFx0dGhpcy5hcHBlbmRNZXNzYWdlKCdUaGVyZSBpcyBubyBpbWFnZSBpbiBidWZmZXIuPGJyIC8+Jyk7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Y2hlY2tFcnJvclN0cmluZygpIHtcclxuXHRcdHJldHVybiB0aGlzLmNoZWNrRXJyb3JTdHJpbmdXaXRoRXJyb3JDb2RlKHRoaXMuRFdPYmplY3QuRXJyb3JDb2RlLCB0aGlzLkRXT2JqZWN0LkVycm9yU3RyaW5nKTtcclxuXHR9XHJcblxyXG5cdGNoZWNrRXJyb3JTdHJpbmdXaXRoRXJyb3JDb2RlKGVycm9yQ29kZSwgZXJyb3JTdHJpbmcsIHJlc3BvbnNlU3RyaW5nID0gbnVsbCkge1xyXG5cdFx0aWYgKGVycm9yQ29kZSA9PT0gMCkge1xyXG5cdFx0XHR0aGlzLmFwcGVuZE1lc3NhZ2UoXCI8c3BhbiBzdHlsZT0nY29sb3I6I2NFNUUwNCc+PGI+XCIgKyBlcnJvclN0cmluZyArICc8L2I+PC9zcGFuPjxiciAvPicpO1xyXG5cclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9XHJcblx0XHRpZiAoZXJyb3JDb2RlID09PSAtMjExNSkge1xyXG5cdFx0XHQvLyBDYW5jZWwgZmlsZSBkaWFsb2dcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRpZiAoZXJyb3JDb2RlID09PSAtMjAwMykge1xyXG5cdFx0XHRcdGNvbnN0IEVycm9yTWVzc2FnZVdpbiA9IHdpbmRvdy5vcGVuKFxyXG5cdFx0XHRcdFx0JycsXHJcblx0XHRcdFx0XHQnRXJyb3JNZXNzYWdlJyxcclxuXHRcdFx0XHRcdCdoZWlnaHQ9NTAwLHdpZHRoPTc1MCx0b3A9MCxsZWZ0PTAsdG9vbGJhcj1ubyxtZW51YmFyPW5vLHNjcm9sbGJhcnM9bm8sIHJlc2l6YWJsZT1ubyxsb2NhdGlvbj1ubywgc3RhdHVzPW5vJ1xyXG5cdFx0XHRcdCk7XHJcblx0XHRcdFx0RXJyb3JNZXNzYWdlV2luLmRvY3VtZW50LndyaXRlbG4ocmVzcG9uc2VTdHJpbmcpOyAvLyB0aGlzLkRXT2JqZWN0LkhUVFBQb3N0UmVzcG9uc2VTdHJpbmcpO1xyXG5cdFx0XHR9XHJcblx0XHRcdHRoaXMuYXBwZW5kTWVzc2FnZShcIjxzcGFuIHN0eWxlPSdjb2xvcjojY0U1RTA0Jz48Yj5cIiArIGVycm9yU3RyaW5nICsgJzwvYj48L3NwYW4+PGJyIC8+Jyk7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHR9XHJcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHQvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKiBVc2VkIGEgbG90ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHRkc19nZXRsZWZ0KGVsKSB7XHJcblx0XHRsZXQgdG1wID0gZWwub2Zmc2V0TGVmdDtcclxuXHRcdGVsID0gZWwub2Zmc2V0UGFyZW50O1xyXG5cdFx0d2hpbGUgKGVsKSB7XHJcblx0XHRcdHRtcCArPSBlbC5vZmZzZXRMZWZ0O1xyXG5cdFx0XHRlbCA9IGVsLm9mZnNldFBhcmVudDtcclxuXHRcdH1cclxuXHRcdHJldHVybiB0bXA7XHJcblx0fVxyXG5cdGRzX2dldHRvcChlbCkge1xyXG5cdFx0bGV0IHRtcCA9IGVsLm9mZnNldFRvcDtcclxuXHRcdGVsID0gZWwub2Zmc2V0UGFyZW50O1xyXG5cdFx0d2hpbGUgKGVsKSB7XHJcblx0XHRcdHRtcCArPSBlbC5vZmZzZXRUb3A7XHJcblx0XHRcdGVsID0gZWwub2Zmc2V0UGFyZW50O1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHRtcDtcclxuXHR9XHJcblxyXG5cdE92ZXJfT3V0X0RlbW9JbWFnZShvYmosIHVybCkge1xyXG5cdFx0b2JqLnNyYyA9IHVybDtcclxuXHR9XHJcblx0c291cmNlX29uY2hhbmdlKCkge1xyXG5cdFx0aWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkaXZUd2FpblR5cGUnKSkge1xyXG5cdFx0XHRkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGl2VHdhaW5UeXBlJykuc3R5bGUuZGlzcGxheSA9ICcnO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc291cmNlJykpIHtcclxuXHRcdFx0Y29uc3QgY0luZGV4ID0gKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzb3VyY2UnKSBhcyBIVE1MU2VsZWN0RWxlbWVudCkuc2VsZWN0ZWRJbmRleDtcclxuXHRcdFx0aWYgKER5bmFtc29mdC5MaWIuZW52LmJNYWMpIHtcclxuXHRcdFx0XHRjb25zdCBzdHJTb3VyY2VOYW1lID0gdGhpcy5EV09iamVjdC5HZXRTb3VyY2VOYW1lSXRlbXMoY0luZGV4KTtcclxuXHRcdFx0XHRpZiAoc3RyU291cmNlTmFtZS5pbmRleE9mKCdJQ0EnKSA9PT0gMCkge1xyXG5cdFx0XHRcdFx0aWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsYmxTaG93VUknKSkge1xyXG5cdFx0XHRcdFx0XHRkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGJsU2hvd1VJJykuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnU2hvd1VJJykpIHtcclxuXHRcdFx0XHRcdFx0ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ1Nob3dVSScpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGJsU2hvd1VJJykpIHtcclxuXHRcdFx0XHRcdFx0ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xibFNob3dVSScpLnN0eWxlLmRpc3BsYXkgPSAnJztcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnU2hvd1VJJykpIHtcclxuXHRcdFx0XHRcdFx0ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ1Nob3dVSScpLnN0eWxlLmRpc3BsYXkgPSAnJztcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0dGhpcy5EV09iamVjdC5TZWxlY3RTb3VyY2VCeUluZGV4KGNJbmRleCk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdG1lZGlhVHlwZV9vbmNoYW5nZSgpIHtcclxuXHRcdGNvbnN0IE1lZGlhVHlwZTogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ01lZGlhVHlwZScpO1xyXG5cdFx0aWYgKE1lZGlhVHlwZSAmJiBNZWRpYVR5cGUub3B0aW9ucy5sZW5ndGggPiAwKSB7XHJcblx0XHRcdGNvbnN0IHZhbHVlTWVkaWFUeXBlID0gTWVkaWFUeXBlLm9wdGlvbnNbTWVkaWFUeXBlLnNlbGVjdGVkSW5kZXhdLnRleHQ7XHJcblx0XHRcdGlmICh2YWx1ZU1lZGlhVHlwZSAhPT0gJycpIHtcclxuXHRcdFx0XHRpZiAoIXRoaXMuRFdPYmplY3QuQWRkb24uV2ViY2FtLlNldE1lZGlhVHlwZSh2YWx1ZU1lZGlhVHlwZSkpIHtcclxuXHRcdFx0XHRcdHRoaXMuYXBwZW5kTWVzc2FnZSgnPGI+RXJyb3Igc2V0dGluZyBNZWRpYVR5cGUgdmFsdWU6IDwvYj4nKTtcclxuXHRcdFx0XHRcdHRoaXMuYXBwZW5kTWVzc2FnZShcIjxzcGFuIHN0eWxlPSdjb2xvcjojY0U1RTA0Jz48Yj5cIiArIHRoaXMuRFdPYmplY3QuRXJyb3JTdHJpbmcgKyAnPC9iPjwvc3Bhbj48YnIgLz4nKTtcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCBSZXNvbHV0aW9uV2ViY2FtOiBhbnkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnUmVzb2x1dGlvbldlYmNhbScpO1xyXG5cdFx0aWYgKFJlc29sdXRpb25XZWJjYW0pIHtcclxuXHRcdFx0UmVzb2x1dGlvbldlYmNhbS5vcHRpb25zLmxlbmd0aCA9IDA7XHJcblx0XHRcdGNvbnN0IGFyeVJlc29sdXRpb24gPSB0aGlzLkRXT2JqZWN0LkFkZG9uLldlYmNhbS5HZXRSZXNvbHV0aW9uKCk7XHJcblx0XHRcdGNvbnN0IGNvdW50UmVzb2x1dGlvbiA9IGFyeVJlc29sdXRpb24uR2V0Q291bnQoKTtcclxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudFJlc29sdXRpb247IGkrKykge1xyXG5cdFx0XHRcdGNvbnN0IHZhbHVlID0gYXJ5UmVzb2x1dGlvbi5HZXQoaSk7XHJcblx0XHRcdFx0UmVzb2x1dGlvbldlYmNhbS5vcHRpb25zLmFkZChuZXcgT3B0aW9uKHZhbHVlLCB2YWx1ZSkpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKi0tLS0tLS0tLS0tLS0tLS0tQWNxdWlyZSBJbWFnZS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXHJcblxyXG5cdGFjcXVpcmVJbWFnZSgpIHtcclxuXHRcdGNvbnN0IGNJbmRleCA9IChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc291cmNlJykgYXMgSFRNTFNlbGVjdEVsZW1lbnQpLnNlbGVjdGVkSW5kZXg7XHJcblx0XHRpZiAoY0luZGV4IDwgMCkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0dGhpcy5EV09iamVjdC5TZWxlY3RTb3VyY2VCeUluZGV4KGNJbmRleCk7XHJcblx0XHR0aGlzLkRXT2JqZWN0LkNsb3NlU291cmNlKCk7XHJcblx0XHR0aGlzLkRXT2JqZWN0Lk9wZW5Tb3VyY2UoKTtcclxuXHRcdHRoaXMuRFdPYmplY3QuSWZTaG93VUkgPSAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ1Nob3dVSScpIGFzIEhUTUxJbnB1dEVsZW1lbnQpLmNoZWNrZWQ7XHJcblxyXG5cdFx0bGV0IGk7XHJcblx0XHRmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7XHJcblx0XHRcdGlmICgoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoJ1BpeGVsVHlwZScpLml0ZW0oaSkgYXMgSFRNTElucHV0RWxlbWVudCkuY2hlY2tlZCA9PT0gdHJ1ZSkge1xyXG5cdFx0XHRcdHRoaXMuRFdPYmplY3QuUGl4ZWxUeXBlID0gaTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYgKHRoaXMuRFdPYmplY3QuRXJyb3JDb2RlICE9PSAwKSB7XHJcblx0XHRcdHRoaXMuYXBwZW5kTWVzc2FnZSgnPGI+RXJyb3Igc2V0dGluZyBQaXhlbFR5cGUgdmFsdWU6IDwvYj4nKTtcclxuXHRcdFx0dGhpcy5hcHBlbmRNZXNzYWdlKFwiPHNwYW4gc3R5bGU9J2NvbG9yOiNjRTVFMDQnPjxiPlwiICsgdGhpcy5EV09iamVjdC5FcnJvclN0cmluZyArICc8L2I+PC9zcGFuPjxiciAvPicpO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5EV09iamVjdC5SZXNvbHV0aW9uID0gKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdSZXNvbHV0aW9uJykgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWU7XHJcblx0XHRpZiAodGhpcy5EV09iamVjdC5FcnJvckNvZGUgIT09IDApIHtcclxuXHRcdFx0dGhpcy5hcHBlbmRNZXNzYWdlKCc8Yj5FcnJvciBzZXR0aW5nIFJlc29sdXRpb24gdmFsdWU6IDwvYj4nKTtcclxuXHRcdFx0dGhpcy5hcHBlbmRNZXNzYWdlKFwiPHNwYW4gc3R5bGU9J2NvbG9yOiNjRTVFMDQnPjxiPlwiICsgdGhpcy5EV09iamVjdC5FcnJvclN0cmluZyArICc8L2I+PC9zcGFuPjxiciAvPicpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IGJBREZDaGVja2VkID0gKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdBREYnKSBhcyBIVE1MSW5wdXRFbGVtZW50KS5jaGVja2VkO1xyXG5cdFx0dGhpcy5EV09iamVjdC5JZkZlZWRlckVuYWJsZWQgPSBiQURGQ2hlY2tlZDtcclxuXHRcdGlmIChiQURGQ2hlY2tlZCA9PT0gdHJ1ZSAmJiB0aGlzLkRXT2JqZWN0LkVycm9yQ29kZSAhPT0gMCkge1xyXG5cdFx0XHR0aGlzLmFwcGVuZE1lc3NhZ2UoJzxiPkVycm9yIHNldHRpbmcgQURGIHZhbHVlOiA8L2I+Jyk7XHJcblx0XHRcdHRoaXMuYXBwZW5kTWVzc2FnZShcIjxzcGFuIHN0eWxlPSdjb2xvcjojY0U1RTA0Jz48Yj5cIiArIHRoaXMuRFdPYmplY3QuRXJyb3JTdHJpbmcgKyAnPC9iPjwvc3Bhbj48YnIgLz4nKTtcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCBiRHVwbGV4Q2hlY2tlZCA9IChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnRHVwbGV4JykgYXMgSFRNTElucHV0RWxlbWVudCkuY2hlY2tlZDtcclxuXHRcdHRoaXMuRFdPYmplY3QuSWZEdXBsZXhFbmFibGVkID0gYkR1cGxleENoZWNrZWQ7XHJcblx0XHRpZiAoYkR1cGxleENoZWNrZWQgPT09IHRydWUgJiYgdGhpcy5EV09iamVjdC5FcnJvckNvZGUgIT09IDApIHtcclxuXHRcdFx0dGhpcy5hcHBlbmRNZXNzYWdlKCc8Yj5FcnJvciBzZXR0aW5nIER1cGxleCB2YWx1ZTogPC9iPicpO1xyXG5cdFx0XHR0aGlzLmFwcGVuZE1lc3NhZ2UoXCI8c3BhbiBzdHlsZT0nY29sb3I6I2NFNUUwNCc+PGI+XCIgKyB0aGlzLkRXT2JqZWN0LkVycm9yU3RyaW5nICsgJzwvYj48L3NwYW4+PGJyIC8+Jyk7XHJcblx0XHR9XHJcblx0XHRpZiAoRHluYW1zb2Z0LkxpYi5lbnYuYldpbiB8fCAoIUR5bmFtc29mdC5MaWIuZW52LmJXaW4gJiYgdGhpcy5EV09iamVjdC5JbWFnZUNhcHR1cmVEcml2ZXJUeXBlID09PSAwKSkge1xyXG5cdFx0XHR0aGlzLmFwcGVuZE1lc3NhZ2UoXHJcblx0XHRcdFx0J1BpeGVsIFR5cGU6ICcgKyB0aGlzLkRXT2JqZWN0LlBpeGVsVHlwZSArICc8YnIgLz5SZXNvbHV0aW9uOiAnICsgdGhpcy5EV09iamVjdC5SZXNvbHV0aW9uICsgJzxiciAvPidcclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHRcdHRoaXMuRFdPYmplY3QuSWZEaXNhYmxlU291cmNlQWZ0ZXJBY3F1aXJlID0gdHJ1ZTtcclxuXHRcdHRoaXMuRFdPYmplY3QuQWNxdWlyZUltYWdlKCk7XHJcblx0fVxyXG5cclxuXHQvKi0tLS0tLS0tLS0tLS0tLS0tTG9hZCBJbWFnZS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXHJcblx0YnRuTG9hZEltYWdlc09yUERGc19vbmNsaWNrKCkge1xyXG5cdFx0Y29uc3QgT25QREZTdWNjZXNzID0gKCkgPT4ge1xyXG5cdFx0XHR0aGlzLmFwcGVuZE1lc3NhZ2UoJ0xvYWRlZCBhbiBpbWFnZSBzdWNjZXNzZnVsbHkuPGJyLz4nKTtcclxuXHRcdFx0dGhpcy51cGRhdGVQYWdlSW5mbygpO1xyXG5cdFx0fTtcclxuXHJcblx0XHRjb25zdCBPblBERkZhaWx1cmUgPSAoZXJyb3JDb2RlLCBlcnJvclN0cmluZykgPT4ge1xyXG5cdFx0XHR0aGlzLmNoZWNrRXJyb3JTdHJpbmdXaXRoRXJyb3JDb2RlKGVycm9yQ29kZSwgZXJyb3JTdHJpbmcpO1xyXG5cdFx0fTtcclxuXHJcblx0XHR0aGlzLkRXT2JqZWN0LklmU2hvd0ZpbGVEaWFsb2cgPSB0cnVlO1xyXG5cdFx0dGhpcy5EV09iamVjdC5BZGRvbi5QREYuU2V0UmVzb2x1dGlvbigyMDApO1xyXG5cdFx0dGhpcy5EV09iamVjdC5BZGRvbi5QREYuU2V0Q29udmVydE1vZGUoRHluYW1zb2Z0LkRXVC5FbnVtRFdUX0NvbnZlcnRNb2RlLkNNX1JFTkRFUkFMTCk7XHJcblx0XHR0aGlzLkRXT2JqZWN0LkxvYWRJbWFnZUV4KCcnLCBEeW5hbXNvZnQuRFdULkVudW1EV1RfSW1hZ2VUeXBlLklUX0FMTCwgT25QREZTdWNjZXNzLCBPblBERkZhaWx1cmUpO1xyXG5cdH1cclxuXHJcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHQvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKiBFZGl0IEltYWdlICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5cclxuXHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cdGJ0blNob3dJbWFnZUVkaXRvcl9vbmNsaWNrKCkge1xyXG5cdFx0aWYgKCF0aGlzLmNoZWNrSWZJbWFnZXNJbkJ1ZmZlcigpKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRcdHRoaXMuRFdPYmplY3QuU2hvd0ltYWdlRWRpdG9yKCk7XHJcblx0fVxyXG5cclxuXHRidG5Sb3RhdGVSaWdodF9vbmNsaWNrKCkge1xyXG5cdFx0aWYgKCF0aGlzLmNoZWNrSWZJbWFnZXNJbkJ1ZmZlcigpKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRcdHRoaXMuRFdPYmplY3QuUm90YXRlUmlnaHQodGhpcy5EV09iamVjdC5DdXJyZW50SW1hZ2VJbmRleEluQnVmZmVyKTtcclxuXHRcdHRoaXMuYXBwZW5kTWVzc2FnZSgnPGI+Um90YXRlIHJpZ2h0OiA8L2I+Jyk7XHJcblx0XHRpZiAodGhpcy5jaGVja0Vycm9yU3RyaW5nKCkpIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdH1cclxuXHRidG5Sb3RhdGVMZWZ0X29uY2xpY2soKSB7XHJcblx0XHRpZiAoIXRoaXMuY2hlY2tJZkltYWdlc0luQnVmZmVyKCkpIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5EV09iamVjdC5Sb3RhdGVMZWZ0KHRoaXMuRFdPYmplY3QuQ3VycmVudEltYWdlSW5kZXhJbkJ1ZmZlcik7XHJcblx0XHR0aGlzLmFwcGVuZE1lc3NhZ2UoJzxiPlJvdGF0ZSBsZWZ0OiA8L2I+Jyk7XHJcblx0XHRpZiAodGhpcy5jaGVja0Vycm9yU3RyaW5nKCkpIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0YnRuUm90YXRlMTgwX29uY2xpY2soKSB7XHJcblx0XHRpZiAoIXRoaXMuY2hlY2tJZkltYWdlc0luQnVmZmVyKCkpIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5EV09iamVjdC5Sb3RhdGUodGhpcy5EV09iamVjdC5DdXJyZW50SW1hZ2VJbmRleEluQnVmZmVyLCAxODAsIHRydWUpO1xyXG5cdFx0dGhpcy5hcHBlbmRNZXNzYWdlKCc8Yj5Sb3RhdGUgMTgwOiA8L2I+Jyk7XHJcblx0XHRpZiAodGhpcy5jaGVja0Vycm9yU3RyaW5nKCkpIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0YnRuTWlycm9yX29uY2xpY2soKSB7XHJcblx0XHRpZiAoIXRoaXMuY2hlY2tJZkltYWdlc0luQnVmZmVyKCkpIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5EV09iamVjdC5NaXJyb3IodGhpcy5EV09iamVjdC5DdXJyZW50SW1hZ2VJbmRleEluQnVmZmVyKTtcclxuXHRcdHRoaXMuYXBwZW5kTWVzc2FnZSgnPGI+TWlycm9yOiA8L2I+Jyk7XHJcblx0XHRpZiAodGhpcy5jaGVja0Vycm9yU3RyaW5nKCkpIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdH1cclxuXHRidG5GbGlwX29uY2xpY2soKSB7XHJcblx0XHRpZiAoIXRoaXMuY2hlY2tJZkltYWdlc0luQnVmZmVyKCkpIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5EV09iamVjdC5GbGlwKHRoaXMuRFdPYmplY3QuQ3VycmVudEltYWdlSW5kZXhJbkJ1ZmZlcik7XHJcblx0XHR0aGlzLmFwcGVuZE1lc3NhZ2UoJzxiPkZsaXA6IDwvYj4nKTtcclxuXHRcdGlmICh0aGlzLmNoZWNrRXJyb3JTdHJpbmcoKSkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS1Dcm9wIE1ldGhvZC0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXHJcblx0YnRuQ3JvcF9vbmNsaWNrKCkge1xyXG5cdFx0aWYgKCF0aGlzLmNoZWNrSWZJbWFnZXNJbkJ1ZmZlcigpKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRcdGlmICh0aGlzLl9pTGVmdCAhPT0gMCB8fCB0aGlzLl9pVG9wICE9PSAwIHx8IHRoaXMuX2lSaWdodCAhPT0gMCB8fCB0aGlzLl9pQm90dG9tICE9PSAwKSB7XHJcblx0XHRcdHRoaXMuRFdPYmplY3QuQ3JvcCh0aGlzLkRXT2JqZWN0LkN1cnJlbnRJbWFnZUluZGV4SW5CdWZmZXIsIHRoaXMuX2lMZWZ0LCB0aGlzLl9pVG9wLCB0aGlzLl9pUmlnaHQsIHRoaXMuX2lCb3R0b20pO1xyXG5cdFx0XHR0aGlzLl9pTGVmdCA9IDA7XHJcblx0XHRcdHRoaXMuX2lUb3AgPSAwO1xyXG5cdFx0XHR0aGlzLl9pUmlnaHQgPSAwO1xyXG5cdFx0XHR0aGlzLl9pQm90dG9tID0gMDtcclxuXHRcdFx0dGhpcy5hcHBlbmRNZXNzYWdlKCc8Yj5Dcm9wOiA8L2I+Jyk7XHJcblx0XHRcdGlmICh0aGlzLmNoZWNrRXJyb3JTdHJpbmcoKSkge1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0aGlzLmFwcGVuZE1lc3NhZ2UoXCI8Yj5Dcm9wOiA8L2I+ZmFpbGVkLiBQbGVhc2UgZmlyc3Qgc2VsZWN0IHRoZSBhcmVhIHlvdSdkIGxpa2UgdG8gY3JvcC48YnIgLz5cIik7XHJcblx0XHR9XHJcblx0fVxyXG5cdC8qLS0tLS0tLS0tLS0tLS0tLUNoYW5nZSBJbWFnZSBTaXplLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xyXG5cdGJ0bkNoYW5nZUltYWdlU2l6ZV9vbmNsaWNrKCkge1xyXG5cdFx0aWYgKCF0aGlzLmNoZWNrSWZJbWFnZXNJbkJ1ZmZlcigpKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRcdHN3aXRjaCAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ0ltZ1NpemVFZGl0b3InKS5zdHlsZS52aXNpYmlsaXR5KSB7XHJcblx0XHRcdGNhc2UgJ3Zpc2libGUnOlxyXG5cdFx0XHRcdGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdJbWdTaXplRWRpdG9yJykuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xyXG5cdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRjYXNlICdoaWRkZW4nOlxyXG5cdFx0XHRcdGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdJbWdTaXplRWRpdG9yJykuc3R5bGUudmlzaWJpbGl0eSA9ICd2aXNpYmxlJztcclxuXHRcdFx0XHRicmVhaztcclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRicmVhaztcclxuXHRcdH1cclxuXHRcdC8vIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiSW1nU2l6ZUVkaXRvclwiKS5zdHlsZS50b3AgPSBkc19nZXR0b3AoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJidG5DaGFuZ2VJbWFnZVNpemVcIikpICsgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJidG5DaGFuZ2VJbWFnZVNpemVcIikub2Zmc2V0SGVpZ2h0ICsgMTUgKyBcInB4XCI7XHJcblx0XHQvLyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIkltZ1NpemVFZGl0b3JcIikuc3R5bGUubGVmdCA9IGRzX2dldGxlZnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJidG5DaGFuZ2VJbWFnZVNpemVcIikpIC0gMTQgKyBcInB4XCI7XHJcblxyXG5cdFx0Y29uc3QgaVdpZHRoID0gdGhpcy5EV09iamVjdC5HZXRJbWFnZVdpZHRoKHRoaXMuRFdPYmplY3QuQ3VycmVudEltYWdlSW5kZXhJbkJ1ZmZlcik7XHJcblx0XHRpZiAoaVdpZHRoICE9PSAtMSkge1xyXG5cdFx0XHQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ltZ193aWR0aCcpIGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlID0gaVdpZHRoO1xyXG5cdFx0fVxyXG5cdFx0Y29uc3QgaUhlaWdodCA9IHRoaXMuRFdPYmplY3QuR2V0SW1hZ2VIZWlnaHQodGhpcy5EV09iamVjdC5DdXJyZW50SW1hZ2VJbmRleEluQnVmZmVyKTtcclxuXHRcdGlmIChpSGVpZ2h0ICE9PSAtMSkge1xyXG5cdFx0XHQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ltZ19oZWlnaHQnKSBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZSA9IGlIZWlnaHQ7XHJcblx0XHR9XHJcblx0fVxyXG5cdGJ0bkNhbmNlbENoYW5nZV9vbmNsaWNrKCkge1xyXG5cdFx0ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ0ltZ1NpemVFZGl0b3InKS5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XHJcblx0fVxyXG5cclxuXHRidG5DaGFuZ2VJbWFnZVNpemVPS19vbmNsaWNrKCkge1xyXG5cdFx0ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ltZ19oZWlnaHQnKS5jbGFzc05hbWUgPSAnJztcclxuXHRcdGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbWdfd2lkdGgnKS5jbGFzc05hbWUgPSAnJztcclxuXHRcdGlmICghdGhpcy5yZS50ZXN0KChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW1nX2hlaWdodCcpIGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlKSkge1xyXG5cdFx0XHRkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW1nX2hlaWdodCcpLmNsYXNzTmFtZSArPSAnIGludmFsaWQnO1xyXG5cdFx0XHRkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW1nX2hlaWdodCcpLmZvY3VzKCk7XHJcblx0XHRcdHRoaXMuYXBwZW5kTWVzc2FnZSgnUGxlYXNlIGlucHV0IGEgdmFsaWQgPGI+aGVpZ2h0PC9iPi48YnIgLz4nKTtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0aWYgKCF0aGlzLnJlLnRlc3QoKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbWdfd2lkdGgnKSBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZSkpIHtcclxuXHRcdFx0ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ltZ193aWR0aCcpLmNsYXNzTmFtZSArPSAnIGludmFsaWQnO1xyXG5cdFx0XHRkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW1nX3dpZHRoJykuZm9jdXMoKTtcclxuXHRcdFx0dGhpcy5hcHBlbmRNZXNzYWdlKCdQbGVhc2UgaW5wdXQgYSB2YWxpZCA8Yj53aWR0aDwvYj4uPGJyIC8+Jyk7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRcdHRoaXMuRFdPYmplY3QuQ2hhbmdlSW1hZ2VTaXplKFxyXG5cdFx0XHR0aGlzLkRXT2JqZWN0LkN1cnJlbnRJbWFnZUluZGV4SW5CdWZmZXIsXHJcblx0XHRcdChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW1nX3dpZHRoJykgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWUsXHJcblx0XHRcdChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW1nX2hlaWdodCcpIGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlLFxyXG5cdFx0XHQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ0ludGVycG9sYXRpb25NZXRob2QnKSBhcyBIVE1MU2VsZWN0RWxlbWVudCkuc2VsZWN0ZWRJbmRleCArIDFcclxuXHRcdCk7XHJcblx0XHR0aGlzLmFwcGVuZE1lc3NhZ2UoJzxiPkNoYW5nZSBJbWFnZSBTaXplOiA8L2I+Jyk7XHJcblx0XHRpZiAodGhpcy5jaGVja0Vycm9yU3RyaW5nKCkpIHtcclxuXHRcdFx0ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ0ltZ1NpemVFZGl0b3InKS5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHR9XHJcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHQvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKiBTYXZlIEltYWdlKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuXHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHRidG5TYXZlX29uY2xpY2soKSB7XHJcblx0XHRpZiAoIXRoaXMuY2hlY2tJZkltYWdlc0luQnVmZmVyKCkpIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0Y29uc3Qgc3RyaW1nVHlwZV9zYXZlID0gJ3BkZic7XHJcblxyXG5cdFx0dGhpcy5EV09iamVjdC5JZlNob3dGaWxlRGlhbG9nID0gdHJ1ZTtcclxuXHRcdGNvbnN0IF90eHRGaWxlTmFtZWZvclNhdmU6IGFueSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0eHRfZmlsZU5hbWUnKTtcclxuXHRcdGlmIChfdHh0RmlsZU5hbWVmb3JTYXZlKSB7XHJcblx0XHRcdF90eHRGaWxlTmFtZWZvclNhdmUuY2xhc3NOYW1lID0gJyc7XHJcblx0XHR9XHJcblx0XHRsZXQgYlNhdmU6IGFueSA9IGZhbHNlO1xyXG5cclxuXHRcdGNvbnN0IHN0ckZpbGVQYXRoID0gX3R4dEZpbGVOYW1lZm9yU2F2ZS52YWx1ZSArICcuJyArIHN0cmltZ1R5cGVfc2F2ZTtcclxuXHJcblx0XHRjb25zdCBPblN1Y2Nlc3MgPSAoKSA9PiB7XHJcblx0XHRcdHRoaXMuYXBwZW5kTWVzc2FnZSgnPGI+U2F2ZSBJbWFnZTogPC9iPicpO1xyXG5cdFx0XHR0aGlzLmNoZWNrRXJyb3JTdHJpbmdXaXRoRXJyb3JDb2RlKDAsICdTdWNjZXNzZnVsLicpO1xyXG5cdFx0fTtcclxuXHJcblx0XHRjb25zdCBPbkZhaWx1cmUgPSAoZXJyb3JDb2RlLCBlcnJvclN0cmluZykgPT4ge1xyXG5cdFx0XHR0aGlzLmNoZWNrRXJyb3JTdHJpbmdXaXRoRXJyb3JDb2RlKGVycm9yQ29kZSwgZXJyb3JTdHJpbmcpO1xyXG5cdFx0fTtcclxuXHJcblx0XHRiU2F2ZSA9IHRoaXMuRFdPYmplY3QuU2F2ZUFsbEFzUERGKHN0ckZpbGVQYXRoLCBPblN1Y2Nlc3MsIE9uRmFpbHVyZSk7XHJcblxyXG5cdFx0aWYgKGJTYXZlKSB7XHJcblx0XHRcdHRoaXMuYXBwZW5kTWVzc2FnZSgnPGI+U2F2ZSBJbWFnZTogPC9iPicpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKHRoaXMuY2hlY2tFcnJvclN0cmluZygpKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHR9XHJcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHQvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKiBVcGxvYWQgSW1hZ2UqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblx0bWFrZWlkKGxlbmd0aCkge1xyXG5cdFx0bGV0IHJlc3VsdCA9ICcnO1xyXG5cdFx0Y29uc3QgY2hhcmFjdGVycyA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSc7XHJcblx0XHRjb25zdCBjaGFyYWN0ZXJzTGVuZ3RoID0gY2hhcmFjdGVycy5sZW5ndGg7XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdHJlc3VsdCArPSBjaGFyYWN0ZXJzLmNoYXJBdChNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBjaGFyYWN0ZXJzTGVuZ3RoKSk7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0Y29udmVydFRvQmxvYigpIHtcclxuXHRcdC8vIHRoaXMuRG9jdW1lbnRTY2FuU2VydmljZS51cGxvYWRTdGFydC5lbWl0KHRydWUpO1xyXG5cdFx0Y29uc3QgcGFnZXMgPSBbXTtcclxuXHRcdGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLkRXT2JqZWN0Py5Ib3dNYW55SW1hZ2VzSW5CdWZmZXI7IGluZGV4KyspIHtcclxuXHRcdFx0cGFnZXMucHVzaChpbmRleCk7XHJcblx0XHR9XHJcblx0XHR0aGlzLkRXT2JqZWN0LkNvbnZlcnRUb0Jsb2IoXHJcblx0XHRcdHBhZ2VzLFxyXG5cdFx0XHREeW5hbXNvZnQuRFdULkVudW1EV1RfSW1hZ2VUeXBlLklUX1BERixcclxuXHRcdFx0KHJlc3VsdCwgaW5kaWNlcywgdHlwZSkgPT4ge1xyXG5cdFx0XHRcdHJlc3VsdC5sYXN0TW9kaWZpZWREYXRlID0gbmV3IERhdGUoKTtcclxuXHRcdFx0XHRyZXN1bHQubmFtZSA9ICdzY2FuLScgKyB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShyZXN1bHQubGFzdE1vZGlmaWVkRGF0ZSwgJ2RkLU1NLXl5eXknKSArICcucGRmJztcclxuXHRcdFx0XHR0aGlzLnVwbG9hZGVyU2VydmljZVxyXG5cdFx0XHRcdFx0LnVwbG9hZChbcmVzdWx0XSlcclxuXHRcdFx0XHRcdC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSwgZGlzdGluY3RVbnRpbENoYW5nZWQoKSlcclxuXHRcdFx0XHRcdC5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XHJcblx0XHRcdFx0XHRcdGlmIChldmVudC50eXBlID09IEZpbGVFdmVudFR5cGUuQ29tcGxldGUpIHtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmZpbGUubmV4dChldmVudC5kYXRhWzBdKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdH0sXHJcblx0XHRcdChlcnJvckNvZGUsIGVycm9yU3RyaW5nKSA9PiB7XHJcblx0XHRcdFx0Y29uc29sZS5sb2coZXJyb3JTdHJpbmcpO1xyXG5cdFx0XHRcdC8vIHRoaXMuRG9jdW1lbnRTY2FuU2VydmljZS51cGxvYWRTdGFydC5lbWl0KGZhbHNlKTtcclxuXHRcdFx0fVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGNvbnZlcnRUb0Jsb2JGb3JTYXZpbmcoKSB7XHJcblx0XHRjb25zdCBwYWdlcyA9IFtdO1xyXG5cdFx0Zm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMuRFdPYmplY3Q/Lkhvd01hbnlJbWFnZXNJbkJ1ZmZlcjsgaW5kZXgrKykge1xyXG5cdFx0XHRwYWdlcy5wdXNoKGluZGV4KTtcclxuXHRcdH1cclxuXHRcdHRoaXMuRFdPYmplY3QuQ29udmVydFRvQmxvYihcclxuXHRcdFx0cGFnZXMsXHJcblx0XHRcdER5bmFtc29mdC5EV1QuRW51bURXVF9JbWFnZVR5cGUuSVRfUERGLFxyXG5cdFx0XHQocmVzdWx0LCBpbmRpY2VzLCB0eXBlKSA9PiB7XHJcblx0XHRcdFx0cmVzdWx0Lmxhc3RNb2RpZmllZERhdGUgPSBuZXcgRGF0ZSgpO1xyXG5cdFx0XHRcdHJlc3VsdC5uYW1lID0gJ3NjYW4tJyArIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHJlc3VsdC5sYXN0TW9kaWZpZWREYXRlLCAnZGQtTU0teXl5eScpICsgJy5wZGYnO1xyXG5cdFx0XHRcdC8vIHRoaXMuRG9jdW1lbnRTY2FuU2VydmljZS5zdG9yZWRGaWxlID0gcmVzdWx0O1xyXG5cdFx0XHRcdHRoaXMub25NaW5pbWl6aW5nU3Vic2NyaXB0aW9uID8gdGhpcy5vbk1pbmltaXppbmdTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSA6ICcnO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHQoZXJyb3JDb2RlLCBlcnJvclN0cmluZykgPT4ge1xyXG5cdFx0XHRcdGNvbnNvbGUubG9nKGVycm9yU3RyaW5nKTtcclxuXHRcdFx0fVxyXG5cdFx0KTtcclxuXHR9XHJcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHQvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKiBOYXZpZ2F0b3IgZnVuY3Rpb25zKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuXHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHRidG5GaXJzdEltYWdlX29uY2xpY2soKSB7XHJcblx0XHRpZiAoIXRoaXMuY2hlY2tJZkltYWdlc0luQnVmZmVyKCkpIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5EV09iamVjdC5DdXJyZW50SW1hZ2VJbmRleEluQnVmZmVyID0gMDtcclxuXHRcdHRoaXMudXBkYXRlUGFnZUluZm8oKTtcclxuXHR9XHJcblxyXG5cdGJ0blByZUltYWdlX3doZWVsKCkge1xyXG5cdFx0aWYgKHRoaXMuRFdPYmplY3QuSG93TWFueUltYWdlc0luQnVmZmVyICE9PSAwKSB7XHJcblx0XHRcdHRoaXMuYnRuUHJlSW1hZ2Vfb25jbGljaygpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0YnRuTmV4dEltYWdlX3doZWVsKCkge1xyXG5cdFx0aWYgKHRoaXMuRFdPYmplY3QuSG93TWFueUltYWdlc0luQnVmZmVyICE9PSAwKSB7XHJcblx0XHRcdHRoaXMuYnRuTmV4dEltYWdlX29uY2xpY2soKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGJ0blByZUltYWdlX29uY2xpY2soKSB7XHJcblx0XHRpZiAoIXRoaXMuY2hlY2tJZkltYWdlc0luQnVmZmVyKCkpIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fSBlbHNlIGlmICh0aGlzLkRXT2JqZWN0LkN1cnJlbnRJbWFnZUluZGV4SW5CdWZmZXIgPT09IDApIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5EV09iamVjdC5DdXJyZW50SW1hZ2VJbmRleEluQnVmZmVyID0gdGhpcy5EV09iamVjdC5DdXJyZW50SW1hZ2VJbmRleEluQnVmZmVyIC0gMTtcclxuXHRcdHRoaXMudXBkYXRlUGFnZUluZm8oKTtcclxuXHR9XHJcblx0YnRuTmV4dEltYWdlX29uY2xpY2soKSB7XHJcblx0XHRpZiAoIXRoaXMuY2hlY2tJZkltYWdlc0luQnVmZmVyKCkpIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fSBlbHNlIGlmICh0aGlzLkRXT2JqZWN0LkN1cnJlbnRJbWFnZUluZGV4SW5CdWZmZXIgPT09IHRoaXMuRFdPYmplY3QuSG93TWFueUltYWdlc0luQnVmZmVyIC0gMSkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHR0aGlzLkRXT2JqZWN0LkN1cnJlbnRJbWFnZUluZGV4SW5CdWZmZXIgPSB0aGlzLkRXT2JqZWN0LkN1cnJlbnRJbWFnZUluZGV4SW5CdWZmZXIgKyAxO1xyXG5cdFx0dGhpcy51cGRhdGVQYWdlSW5mbygpO1xyXG5cdH1cclxuXHJcblx0YnRuTGFzdEltYWdlX29uY2xpY2soKSB7XHJcblx0XHRpZiAoIXRoaXMuY2hlY2tJZkltYWdlc0luQnVmZmVyKCkpIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5EV09iamVjdC5DdXJyZW50SW1hZ2VJbmRleEluQnVmZmVyID0gdGhpcy5EV09iamVjdC5Ib3dNYW55SW1hZ2VzSW5CdWZmZXIgLSAxO1xyXG5cdFx0dGhpcy51cGRhdGVQYWdlSW5mbygpO1xyXG5cdH1cclxuXHJcblx0YnRuUmVtb3ZlQ3VycmVudEltYWdlX29uY2xpY2soKSB7XHJcblx0XHRpZiAoIXRoaXMuY2hlY2tJZkltYWdlc0luQnVmZmVyKCkpIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5EV09iamVjdC5SZW1vdmVBbGxTZWxlY3RlZEltYWdlcygpO1xyXG5cdFx0aWYgKHRoaXMuRFdPYmplY3QuSG93TWFueUltYWdlc0luQnVmZmVyID09PSAwKSB7XHJcblx0XHRcdChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnRFdfVG90YWxJbWFnZScpIGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlID0gdGhpcy5EV09iamVjdC5Ib3dNYW55SW1hZ2VzSW5CdWZmZXI7XHJcblx0XHRcdChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnRFdfQ3VycmVudEltYWdlJykgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWUgPSAnJztcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy51cGRhdGVQYWdlSW5mbygpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0YnRuUmVtb3ZlQWxsSW1hZ2VzX29uY2xpY2soKSB7XHJcblx0XHRpZiAoIXRoaXMuY2hlY2tJZkltYWdlc0luQnVmZmVyKCkpIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5EV09iamVjdC5SZW1vdmVBbGxJbWFnZXMoKTtcclxuXHRcdChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnRFdfVG90YWxJbWFnZScpIGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlID0gJzAnO1xyXG5cdFx0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdEV19DdXJyZW50SW1hZ2UnKSBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZSA9ICcnO1xyXG5cdH1cclxuXHRzZXRsUHJldmlld01vZGUoKSB7XHJcblx0XHRjb25zdCB2YXJOdW0gPSBwYXJzZUludChcclxuXHRcdFx0KChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnRFdfUHJldmlld01vZGUnKSBhcyBIVE1MU2VsZWN0RWxlbWVudCkuc2VsZWN0ZWRJbmRleCArIDEpLnRvU3RyaW5nKCksXHJcblx0XHRcdDEwXHJcblx0XHQpO1xyXG5cdFx0Y29uc3QgYnRuQ3JvcDogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2J0bkNyb3AnKTtcclxuXHRcdGlmIChidG5Dcm9wKSB7XHJcblx0XHRcdGxldCB0bXBzdHIgPSBidG5Dcm9wLnNyYztcclxuXHRcdFx0aWYgKHZhck51bSA+IDEpIHtcclxuXHRcdFx0XHR0bXBzdHIgPSB0bXBzdHIucmVwbGFjZSgnQ3JvcC4nLCAnQ3JvcF9ncmF5LicpO1xyXG5cdFx0XHRcdGJ0bkNyb3Auc3JjID0gdG1wc3RyO1xyXG5cdFx0XHRcdGJ0bkNyb3Aub25jbGljayA9IGZ1bmN0aW9uICgpIHt9O1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHRtcHN0ciA9IHRtcHN0ci5yZXBsYWNlKCdDcm9wX2dyYXkuJywgJ0Nyb3AuJyk7XHJcblx0XHRcdFx0YnRuQ3JvcC5zcmMgPSB0bXBzdHI7XHJcblx0XHRcdFx0YnRuQ3JvcC5vbmNsaWNrID0gKCkgPT4ge1xyXG5cdFx0XHRcdFx0dGhpcy5idG5Dcm9wX29uY2xpY2soKTtcclxuXHRcdFx0XHR9O1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0dGhpcy5EV09iamVjdC5TZXRWaWV3TW9kZSh2YXJOdW0sIHZhck51bSk7XHJcblx0XHRpZiAoRHluYW1zb2Z0LkxpYi5lbnYuYk1hYyB8fCBEeW5hbXNvZnQuTGliLmVudi5iTGludXgpIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fSBlbHNlIGlmICgoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ0RXX1ByZXZpZXdNb2RlJykgYXMgSFRNTFNlbGVjdEVsZW1lbnQpLnNlbGVjdGVkSW5kZXggIT09IDApIHtcclxuXHRcdFx0dGhpcy5EV09iamVjdC5Nb3VzZVNoYXBlID0gdHJ1ZTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMuRFdPYmplY3QuTW91c2VTaGFwZSA9IGZhbHNlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHQvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipyYWRpbyByZXNwb25zZSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblx0cmRUSUZGX29uY2xpY2soKSB7XHJcblx0XHRjb25zdCBfY2hrTXVsdGlQYWdlVElGRjogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ011bHRpUGFnZVRJRkYnKTtcclxuXHRcdF9jaGtNdWx0aVBhZ2VUSUZGLmRpc2FibGVkID0gZmFsc2U7XHJcblx0XHRfY2hrTXVsdGlQYWdlVElGRi5jaGVja2VkID0gZmFsc2U7XHJcblxyXG5cdFx0Y29uc3QgX2Noa011bHRpUGFnZVBERjogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ011bHRpUGFnZVBERicpO1xyXG5cdFx0X2Noa011bHRpUGFnZVBERi5jaGVja2VkID0gZmFsc2U7XHJcblx0XHRfY2hrTXVsdGlQYWdlUERGLmRpc2FibGVkID0gdHJ1ZTtcclxuXHR9XHJcblxyXG5cdHJkUERGX29uY2xpY2soKSB7XHJcblx0XHRjb25zdCBfY2hrTXVsdGlQYWdlVElGRjogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ011bHRpUGFnZVRJRkYnKTtcclxuXHRcdF9jaGtNdWx0aVBhZ2VUSUZGLmNoZWNrZWQgPSBmYWxzZTtcclxuXHRcdF9jaGtNdWx0aVBhZ2VUSUZGLmRpc2FibGVkID0gdHJ1ZTtcclxuXHJcblx0XHRjb25zdCBfY2hrTXVsdGlQYWdlUERGOiBhbnkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnTXVsdGlQYWdlUERGJyk7XHJcblx0XHRfY2hrTXVsdGlQYWdlUERGLmRpc2FibGVkID0gZmFsc2U7XHJcblx0XHRfY2hrTXVsdGlQYWdlUERGLmNoZWNrZWQgPSB0cnVlO1xyXG5cdH1cclxuXHJcblx0cmRfb25jbGljaygpIHtcclxuXHRcdGNvbnN0IF9jaGtNdWx0aVBhZ2VUSUZGOiBhbnkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnTXVsdGlQYWdlVElGRicpO1xyXG5cdFx0X2Noa011bHRpUGFnZVRJRkYuY2hlY2tlZCA9IGZhbHNlO1xyXG5cdFx0X2Noa011bHRpUGFnZVRJRkYuZGlzYWJsZWQgPSB0cnVlO1xyXG5cclxuXHRcdGNvbnN0IF9jaGtNdWx0aVBhZ2VQREY6IGFueSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdNdWx0aVBhZ2VQREYnKTtcclxuXHRcdF9jaGtNdWx0aVBhZ2VQREYuY2hlY2tlZCA9IGZhbHNlO1xyXG5cdFx0X2Noa011bHRpUGFnZVBERi5kaXNhYmxlZCA9IHRydWU7XHJcblx0fVxyXG5cclxuXHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cdC8vICoqKioqKioqKioqKioqKioqKioqKioqKioqIER5bmFtaWMgV2ViIFRXQUlOIEV2ZW50cyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblx0RHluYW1zb2Z0X09uUG9zdFRyYW5zZmVyID0gKCkgPT4ge1xyXG5cdFx0dGhpcy51cGRhdGVQYWdlSW5mbygpO1xyXG5cdH07XHJcblxyXG5cdER5bmFtc29mdF9PblBvc3RMb2FkZnVuY3Rpb24gPSAocGF0aCwgbmFtZSwgdHlwZSkgPT4ge1xyXG5cdFx0dGhpcy51cGRhdGVQYWdlSW5mbygpO1xyXG5cdH07XHJcblxyXG5cdER5bmFtc29mdF9PblBvc3RBbGxUcmFuc2ZlcnMgPSAoKSA9PiB7XHJcblx0XHR0aGlzLkRXT2JqZWN0LkNsb3NlU291cmNlKCk7XHJcblx0XHR0aGlzLnVwZGF0ZVBhZ2VJbmZvKCk7XHJcblx0XHR0aGlzLmNoZWNrRXJyb3JTdHJpbmcoKTtcclxuXHR9O1xyXG5cclxuXHREeW5hbXNvZnRfT25Nb3VzZUNsaWNrID0gKGluZGV4KSA9PiB7XHJcblx0XHR0aGlzLnVwZGF0ZVBhZ2VJbmZvKCk7XHJcblx0fTtcclxuXHJcblx0RHluYW1zb2Z0X09uTW91c2VSaWdodENsaWNrID0gKGluZGV4KSA9PiB7XHJcblx0XHQvLyBUbyBhZGRcclxuXHR9O1xyXG5cclxuXHREeW5hbXNvZnRfT25JbWFnZUFyZWFTZWxlY3RlZCA9IChpbmRleCwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tKSA9PiB7XHJcblx0XHR0aGlzLl9pTGVmdCA9IGxlZnQ7XHJcblx0XHR0aGlzLl9pVG9wID0gdG9wO1xyXG5cdFx0dGhpcy5faVJpZ2h0ID0gcmlnaHQ7XHJcblx0XHR0aGlzLl9pQm90dG9tID0gYm90dG9tO1xyXG5cdH07XHJcblxyXG5cdER5bmFtc29mdF9PbkltYWdlQXJlYURlc2VsZWN0ZWQgPSAoaW5kZXgpID0+IHtcclxuXHRcdHRoaXMuX2lMZWZ0ID0gMDtcclxuXHRcdHRoaXMuX2lUb3AgPSAwO1xyXG5cdFx0dGhpcy5faVJpZ2h0ID0gMDtcclxuXHRcdHRoaXMuX2lCb3R0b20gPSAwO1xyXG5cdH07XHJcblxyXG5cdER5bmFtc29mdF9Pbk1vdXNlRG91YmxlQ2xpY2soKSB7XHJcblx0XHRyZXR1cm47XHJcblx0fVxyXG5cclxuXHREeW5hbXNvZnRfT25Ub3BJbWFnZUluVGhlVmlld0NoYW5nZWQgPSAoaW5kZXgpID0+IHtcclxuXHRcdHRoaXMuX2lMZWZ0ID0gMDtcclxuXHRcdHRoaXMuX2lUb3AgPSAwO1xyXG5cdFx0dGhpcy5faVJpZ2h0ID0gMDtcclxuXHRcdHRoaXMuX2lCb3R0b20gPSAwO1xyXG5cdFx0dGhpcy5EV09iamVjdC5DdXJyZW50SW1hZ2VJbmRleEluQnVmZmVyID0gaW5kZXg7XHJcblx0XHR0aGlzLnVwZGF0ZVBhZ2VJbmZvKCk7XHJcblx0fTtcclxuXHJcblx0RHluYW1zb2Z0X09uR2V0RmlsZVBhdGggPSAoYlNhdmUsIGNvdW50LCBpbmRleCwgcGF0aCwgbmFtZSkgPT4ge307XHJcblx0bmdPbkRlc3Ryb3koKSB7XHJcblx0XHR0aGlzLmRlc3Ryb3kkLm5leHQoKTtcclxuXHRcdHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcclxuXHR9XHJcbn1cclxuIiwiPGRpdiBpZD1cIkRXVGNvbnRhaW5lclwiIGNsYXNzPVwiaC1mdWxsXCI+XHJcblx0PGRpdiBpZD1cIkRXVGNvbnRhaW5lclRvcFwiPlxyXG5cdFx0PGRpdiBpZD1cImRpdkVkaXRcIj5cclxuXHRcdFx0PHVsIGNsYXNzPVwib3BlcmF0ZUdycFwiPlxyXG5cdFx0XHRcdDxsaSBjbHNzPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgbGVhZGluZy1ub25lIHctMTUgaC0xNVwiPlxyXG5cdFx0XHRcdFx0PG1hdC1pY29uXHJcblx0XHRcdFx0XHRcdFttYXRUb29sdGlwXT1cIidzY2FubmVyLnNob3dJbWFnZUVkaXRvcicgfCB0cmFuc2xhdGVcIlxyXG5cdFx0XHRcdFx0XHQoY2xpY2spPVwiYnRuU2hvd0ltYWdlRWRpdG9yX29uY2xpY2soKVwiXHJcblx0XHRcdFx0XHRcdGNsYXNzPVwiZmlsdGVyLWljb24gY3Vyc29yLXBvaW50ZXJcIlxyXG5cdFx0XHRcdFx0XHRbc3ZnSWNvbl09XCInaWNvbnM6RWRpdG9yJ1wiXHJcblx0XHRcdFx0XHQ+PC9tYXQtaWNvbj5cclxuXHRcdFx0XHQ8L2xpPlxyXG5cdFx0XHRcdDxsaSBjbHNzPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgbGVhZGluZy1ub25lIHctMTUgaC0xNVwiPlxyXG5cdFx0XHRcdFx0PG1hdC1pY29uXHJcblx0XHRcdFx0XHRcdFttYXRUb29sdGlwXT1cIidzY2FubmVyLnJvdGF0ZUxlZnQnIHwgdHJhbnNsYXRlXCJcclxuXHRcdFx0XHRcdFx0KGNsaWNrKT1cImJ0blJvdGF0ZUxlZnRfb25jbGljaygpXCJcclxuXHRcdFx0XHRcdFx0Y2xhc3M9XCJmaWx0ZXItaWNvbiBjdXJzb3ItcG9pbnRlclwiXHJcblx0XHRcdFx0XHRcdFtzdmdJY29uXT1cIidpY29uczpSb3RhdGUtTGVmdCdcIlxyXG5cdFx0XHRcdFx0PjwvbWF0LWljb24+XHJcblx0XHRcdFx0PC9saT5cclxuXHRcdFx0XHQ8bGkgY2xzcz1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGxlYWRpbmctbm9uZSB3LTE1IGgtMTVcIj5cclxuXHRcdFx0XHRcdDxtYXQtaWNvblxyXG5cdFx0XHRcdFx0XHRbbWF0VG9vbHRpcF09XCInc2Nhbm5lci5yb3RhdGVSaWdodCcgfCB0cmFuc2xhdGVcIlxyXG5cdFx0XHRcdFx0XHQoY2xpY2spPVwiYnRuUm90YXRlUmlnaHRfb25jbGljaygpXCJcclxuXHRcdFx0XHRcdFx0Y2xhc3M9XCJmaWx0ZXItaWNvbiBjdXJzb3ItcG9pbnRlclwiXHJcblx0XHRcdFx0XHRcdFtzdmdJY29uXT1cIidpY29uczpSb3RhdGUtUmlnaHQnXCJcclxuXHRcdFx0XHRcdD48L21hdC1pY29uPlxyXG5cdFx0XHRcdDwvbGk+XHJcblx0XHRcdFx0PGxpIGNsc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBsZWFkaW5nLW5vbmUgdy0xNSBoLTE1XCI+XHJcblx0XHRcdFx0XHQ8bWF0LWljb25cclxuXHRcdFx0XHRcdFx0W21hdFRvb2x0aXBdPVwiJ3NjYW5uZXIucm90YXRlMTgwJyB8IHRyYW5zbGF0ZVwiXHJcblx0XHRcdFx0XHRcdChjbGljayk9XCJidG5Sb3RhdGUxODBfb25jbGljaygpXCJcclxuXHRcdFx0XHRcdFx0Y2xhc3M9XCJmaWx0ZXItaWNvbiBjdXJzb3ItcG9pbnRlclwiXHJcblx0XHRcdFx0XHRcdFtzdmdJY29uXT1cIidpY29uczpSb3RhdGUtMTgwJ1wiXHJcblx0XHRcdFx0XHQ+PC9tYXQtaWNvbj5cclxuXHRcdFx0XHQ8L2xpPlxyXG5cdFx0XHRcdDxsaSBjbHNzPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgbGVhZGluZy1ub25lIHctMTUgaC0xNVwiPlxyXG5cdFx0XHRcdFx0PG1hdC1pY29uXHJcblx0XHRcdFx0XHRcdFttYXRUb29sdGlwXT1cIidzY2FubmVyLm1pcnJvcicgfCB0cmFuc2xhdGVcIlxyXG5cdFx0XHRcdFx0XHQoY2xpY2spPVwiYnRuTWlycm9yX29uY2xpY2soKVwiXHJcblx0XHRcdFx0XHRcdGNsYXNzPVwiZmlsdGVyLWljb24gY3Vyc29yLXBvaW50ZXJcIlxyXG5cdFx0XHRcdFx0XHRbc3ZnSWNvbl09XCInaWNvbnM6ZmxpcC1ob3Jpem9udGFsJ1wiXHJcblx0XHRcdFx0XHQ+PC9tYXQtaWNvbj5cclxuXHRcdFx0XHQ8L2xpPlxyXG5cdFx0XHRcdDxsaSBjbHNzPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgbGVhZGluZy1ub25lIHctMTUgaC0xNVwiPlxyXG5cdFx0XHRcdFx0PG1hdC1pY29uXHJcblx0XHRcdFx0XHRcdFttYXRUb29sdGlwXT1cIidzY2FubmVyLmZsaXAnIHwgdHJhbnNsYXRlXCJcclxuXHRcdFx0XHRcdFx0KGNsaWNrKT1cImJ0bkZsaXBfb25jbGljaygpXCJcclxuXHRcdFx0XHRcdFx0Y2xhc3M9XCJmaWx0ZXItaWNvbiBjdXJzb3ItcG9pbnRlclwiXHJcblx0XHRcdFx0XHRcdFtzdmdJY29uXT1cIidpY29uczpmbGlwLXZlcnRpY2FsJ1wiXHJcblx0XHRcdFx0XHQ+PC9tYXQtaWNvbj5cclxuXHRcdFx0XHQ8L2xpPlxyXG5cdFx0XHRcdDxsaSBjbHNzPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgbGVhZGluZy1ub25lIHctMTUgaC0xNVwiPlxyXG5cdFx0XHRcdFx0PG1hdC1pY29uXHJcblx0XHRcdFx0XHRcdFttYXRUb29sdGlwXT1cIidzY2FubmVyLnJlbW92ZVNlbGVjdGVkJyB8IHRyYW5zbGF0ZVwiXHJcblx0XHRcdFx0XHRcdChjbGljayk9XCJidG5SZW1vdmVDdXJyZW50SW1hZ2Vfb25jbGljaygpXCJcclxuXHRcdFx0XHRcdFx0Y2xhc3M9XCJmaWx0ZXItaWNvbiBjdXJzb3ItcG9pbnRlclwiXHJcblx0XHRcdFx0XHRcdFtzdmdJY29uXT1cIidpY29uczpSZW1vdmVJbWFnZXMnXCJcclxuXHRcdFx0XHRcdD48L21hdC1pY29uPlxyXG5cdFx0XHRcdDwvbGk+XHJcblx0XHRcdFx0PGxpIGNsc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBsZWFkaW5nLW5vbmUgdy0xNSBoLTE1XCI+XHJcblx0XHRcdFx0XHQ8bWF0LWljb25cclxuXHRcdFx0XHRcdFx0W21hdFRvb2x0aXBdPVwiJ3NjYW5uZXIucmVtb3ZlQWxsJyB8IHRyYW5zbGF0ZVwiXHJcblx0XHRcdFx0XHRcdChjbGljayk9XCJidG5SZW1vdmVBbGxJbWFnZXNfb25jbGljaygpXCJcclxuXHRcdFx0XHRcdFx0Y2xhc3M9XCJmaWx0ZXItaWNvbiBjdXJzb3ItcG9pbnRlclwiXHJcblx0XHRcdFx0XHRcdFtzdmdJY29uXT1cIidpY29uczpSZW1vdmVBbGxJbWFnZXMnXCJcclxuXHRcdFx0XHRcdD48L21hdC1pY29uPlxyXG5cdFx0XHRcdDwvbGk+XHJcblx0XHRcdFx0PGxpIGNsc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBsZWFkaW5nLW5vbmUgdy0xNSBoLTE1XCI+XHJcblx0XHRcdFx0XHQ8bWF0LWljb25cclxuXHRcdFx0XHRcdFx0W21hdFRvb2x0aXBdPVwiJ3NjYW5uZXIucmVzaXplJyB8IHRyYW5zbGF0ZVwiXHJcblx0XHRcdFx0XHRcdChjbGljayk9XCJidG5DaGFuZ2VJbWFnZVNpemVfb25jbGljaygpXCJcclxuXHRcdFx0XHRcdFx0Y2xhc3M9XCJmaWx0ZXItaWNvbiBjdXJzb3ItcG9pbnRlclwiXHJcblx0XHRcdFx0XHRcdFtzdmdJY29uXT1cIidpY29uczpjaGFuZ2VTaXplJ1wiXHJcblx0XHRcdFx0XHQ+PC9tYXQtaWNvbj5cclxuXHRcdFx0XHQ8L2xpPlxyXG5cdFx0XHRcdDxsaSBjbHNzPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgbGVhZGluZy1ub25lIHctMTUgaC0xNVwiPlxyXG5cdFx0XHRcdFx0PG1hdC1pY29uXHJcblx0XHRcdFx0XHRcdFttYXRUb29sdGlwXT1cIidzY2FubmVyLmNyb3AnIHwgdHJhbnNsYXRlXCJcclxuXHRcdFx0XHRcdFx0KGNsaWNrKT1cImJ0bkNyb3Bfb25jbGljaygpXCJcclxuXHRcdFx0XHRcdFx0Y2xhc3M9XCJmaWx0ZXItaWNvbiBjdXJzb3ItcG9pbnRlclwiXHJcblx0XHRcdFx0XHRcdFtzdmdJY29uXT1cIidpY29uczpjcm9wJ1wiXHJcblx0XHRcdFx0XHQ+PC9tYXQtaWNvbj5cclxuXHRcdFx0XHQ8L2xpPlxyXG5cdFx0XHQ8L3VsPlxyXG5cdFx0XHQ8ZGl2IGlkPVwiSW1nU2l6ZUVkaXRvclwiIHN0eWxlPVwidmlzaWJpbGl0eTogaGlkZGVuXCI+XHJcblx0XHRcdFx0PHVsPlxyXG5cdFx0XHRcdFx0PGxpPlxyXG5cdFx0XHRcdFx0XHQ8bGFiZWwgZm9yPVwiaW1nX2hlaWdodFwiXHJcblx0XHRcdFx0XHRcdFx0Pnt7ICdzY2FubmVyLm5ld0hlaWdodCcgfCB0cmFuc2xhdGUgfX0gOlxyXG5cdFx0XHRcdFx0XHRcdDxpbnB1dCB0eXBlPVwidGV4dFwiIGlkPVwiaW1nX2hlaWdodFwiIHN0eWxlPVwid2lkdGg6IDUwJVwiIHNpemU9XCIxMFwiIC8+XHJcblx0XHRcdFx0XHRcdFx0e3sgJ3NjYW5uZXIucGl4ZWwnIHwgdHJhbnNsYXRlIH19PC9sYWJlbFxyXG5cdFx0XHRcdFx0XHQ+XHJcblx0XHRcdFx0XHQ8L2xpPlxyXG5cdFx0XHRcdFx0PGxpPlxyXG5cdFx0XHRcdFx0XHQ8bGFiZWwgZm9yPVwiaW1nX3dpZHRoXCJcclxuXHRcdFx0XHRcdFx0XHQ+e3sgJ3NjYW5uZXIubmV3V2lkdGgnIHwgdHJhbnNsYXRlIH19IDombmJzcDtcclxuXHRcdFx0XHRcdFx0XHQ8aW5wdXQgdHlwZT1cInRleHRcIiBpZD1cImltZ193aWR0aFwiIHN0eWxlPVwid2lkdGg6IDUwJVwiIHNpemU9XCIxMFwiIC8+XHJcblx0XHRcdFx0XHRcdFx0e3sgJ3NjYW5uZXIucGl4ZWwnIHwgdHJhbnNsYXRlIH19PC9sYWJlbFxyXG5cdFx0XHRcdFx0XHQ+XHJcblx0XHRcdFx0XHQ8L2xpPlxyXG5cdFx0XHRcdFx0PGxpPlxyXG5cdFx0XHRcdFx0XHR7eyAnc2Nhbm5lci5JbnRlcnBvbGF0aW9uTWV0aG9kJyB8IHRyYW5zbGF0ZSB9fTpcclxuXHRcdFx0XHRcdFx0PHNlbGVjdCBzaXplPVwiMVwiIGlkPVwiSW50ZXJwb2xhdGlvbk1ldGhvZFwiPlxyXG5cdFx0XHRcdFx0XHRcdDxvcHRpb24gdmFsdWU9XCJcIj48L29wdGlvbj5cclxuXHRcdFx0XHRcdFx0PC9zZWxlY3Q+XHJcblx0XHRcdFx0XHQ8L2xpPlxyXG5cdFx0XHRcdFx0PGxpIHN0eWxlPVwidGV4dC1hbGlnbjogY2VudGVyXCI+XHJcblx0XHRcdFx0XHRcdDxpbnB1dCB0eXBlPVwiYnV0dG9uXCIgdmFsdWU9XCIgICBPSyAgIFwiIGlkPVwiYnRuQ2hhbmdlSW1hZ2VTaXplT0tcIiAoY2xpY2spPVwiYnRuQ2hhbmdlSW1hZ2VTaXplT0tfb25jbGljaygpXCIgLz5cclxuXHRcdFx0XHRcdFx0PGlucHV0IHR5cGU9XCJidXR0b25cIiB2YWx1ZT1cIiBDYW5jZWwgXCIgaWQ9XCJidG5DYW5jZWxDaGFuZ2VcIiAoY2xpY2spPVwiYnRuQ2FuY2VsQ2hhbmdlX29uY2xpY2soKVwiIC8+XHJcblx0XHRcdFx0XHQ8L2xpPlxyXG5cdFx0XHRcdDwvdWw+XHJcblx0XHRcdDwvZGl2PlxyXG5cdFx0PC9kaXY+XHJcblx0XHQ8ZGl2IGlkPVwiZHd0Y29udHJvbENvbnRhaW5lclwiPjwvZGl2PlxyXG5cdFx0PGRpdiBjbGFzcz1cInctZnVsbFwiIGlkPVwibG9hZGVyXCI+XHJcblx0XHRcdDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBoLWZ1bGxcIj5cclxuXHRcdFx0XHQ8bWF0LXNwaW5uZXI+PC9tYXQtc3Bpbm5lcj5cclxuXHRcdFx0PC9kaXY+XHJcblx0XHQ8L2Rpdj5cclxuXHRcdDxkaXYgaWQ9XCJidG5Hcm91cEJ0bVwiPlxyXG5cdFx0XHQ8ZGl2IGNsYXNzPVwiY3QtbHRcIj5cclxuXHRcdFx0XHR7eyAnc2Nhbm5lci5wYWdlJyB8IHRyYW5zbGF0ZSB9fTpcclxuXHRcdFx0XHQ8aW5wdXQgaWQ9XCJEV19idG5GaXJzdEltYWdlXCIgKGNsaWNrKT1cImJ0bkZpcnN0SW1hZ2Vfb25jbGljaygpXCIgdHlwZT1cImJ1dHRvblwiIHZhbHVlPVwiIHw8IFwiIC8+Jm5ic3A7XHJcblx0XHRcdFx0PGlucHV0IGlkPVwiRFdfYnRuUHJlSW1hZ2VcIiAoY2xpY2spPVwiYnRuUHJlSW1hZ2Vfb25jbGljaygpXCIgdHlwZT1cImJ1dHRvblwiIHZhbHVlPVwiIDwgXCIgLz4mbmJzcDsmbmJzcDtcclxuXHRcdFx0XHQ8aW5wdXQgdHlwZT1cInRleHRcIiBzaXplPVwiMlwiIGlkPVwiRFdfQ3VycmVudEltYWdlXCIgcmVhZG9ubHk9XCJyZWFkb25seVwiIC8+XHJcblx0XHRcdFx0L1xyXG5cdFx0XHRcdDxpbnB1dCB0eXBlPVwidGV4dFwiIHNpemU9XCIyXCIgaWQ9XCJEV19Ub3RhbEltYWdlXCIgcmVhZG9ubHk9XCJyZWFkb25seVwiIC8+Jm5ic3A7Jm5ic3A7XHJcblx0XHRcdFx0PGlucHV0IGlkPVwiRFdfYnRuTmV4dEltYWdlXCIgKGNsaWNrKT1cImJ0bk5leHRJbWFnZV9vbmNsaWNrKClcIiB0eXBlPVwiYnV0dG9uXCIgdmFsdWU9XCI+IFwiIC8+Jm5ic3A7XHJcblx0XHRcdFx0PGlucHV0IGlkPVwiRFdfYnRuTGFzdEltYWdlXCIgKGNsaWNrKT1cImJ0bkxhc3RJbWFnZV9vbmNsaWNrKClcIiB0eXBlPVwiYnV0dG9uXCIgdmFsdWU9XCI+fCBcIiAvPlxyXG5cdFx0XHQ8L2Rpdj5cclxuXHRcdFx0PGRpdiBjbGFzcz1cImN0LXJ0XCI+XHJcblx0XHRcdFx0e3sgJ3NjYW5uZXIucHJldmlldycgfCB0cmFuc2xhdGUgfX06XHJcblx0XHRcdFx0PHNlbGVjdCBzaXplPVwiMVwiIGlkPVwiRFdfUHJldmlld01vZGVcIiAoY2hhbmdlKT1cInNldGxQcmV2aWV3TW9kZSgpXCI+XHJcblx0XHRcdFx0XHQ8b3B0aW9uIHZhbHVlPVwiMFwiPjFYMTwvb3B0aW9uPlxyXG5cdFx0XHRcdFx0PG9wdGlvbiB2YWx1ZT1cIjFcIj4yWDI8L29wdGlvbj5cclxuXHRcdFx0XHRcdDxvcHRpb24gdmFsdWU9XCIyXCI+M1gzPC9vcHRpb24+XHJcblx0XHRcdFx0XHQ8b3B0aW9uIHZhbHVlPVwiM1wiPjRYNDwvb3B0aW9uPlxyXG5cdFx0XHRcdFx0PG9wdGlvbiB2YWx1ZT1cIjRcIj41WDU8L29wdGlvbj48L3NlbGVjdFxyXG5cdFx0XHRcdD48YnIgLz5cclxuXHRcdFx0PC9kaXY+XHJcblx0XHQ8L2Rpdj5cclxuXHQ8L2Rpdj5cclxuXHQ8ZGl2IGlkPVwiU2NhbldyYXBwZXJcIj5cclxuXHRcdDxkaXYgaWQ9XCJkaXZTY2FubmVyXCIgY2xhc3M9XCJkaXZpbnB1dFwiPlxyXG5cdFx0XHQ8ZGl2IGlkPVwiZGl2X1NjYW5JbWFnZVwiIGNsYXNzPVwiZGl2VGFibGVTdHlsZVwiPlxyXG5cdFx0XHRcdDx1bCBpZD1cInVsU2NhbmVJbWFnZUhJREVcIj5cclxuXHRcdFx0XHRcdDxsaT5cclxuXHRcdFx0XHRcdFx0PGxhYmVsIGZvcj1cInNvdXJjZVwiPlxyXG5cdFx0XHRcdFx0XHRcdDxwPnt7ICdzY2FubmVyLnNvdXJjZScgfCB0cmFuc2xhdGUgfX06PC9wPlxyXG5cdFx0XHRcdFx0XHQ8L2xhYmVsPlxyXG5cdFx0XHRcdFx0XHQ8c2VsZWN0IHNpemU9XCIxXCIgaWQ9XCJzb3VyY2VcIiBzdHlsZT1cInBvc2l0aW9uOiByZWxhdGl2ZVwiIChjaGFuZ2UpPVwic291cmNlX29uY2hhbmdlKClcIj5cclxuXHRcdFx0XHRcdFx0XHQ8b3B0aW9uIHZhbHVlPVwiXCI+PC9vcHRpb24+XHJcblx0XHRcdFx0XHRcdDwvc2VsZWN0PlxyXG5cdFx0XHRcdFx0PC9saT5cclxuXHRcdFx0XHRcdDxsaSBzdHlsZT1cImRpc3BsYXk6IG5vbmVcIiBpZD1cInBOb1NjYW5uZXJcIj5cclxuXHRcdFx0XHRcdFx0PGEgaHJlZj1cImphdmFzY3JpcHQ6IHZvaWQoMClcIiBjbGFzcz1cIlNob3d0YmxMb2FkSW1hZ2VcIiBzdHlsZT1cImNvbG9yOiAjZmU4ZTE0XCIgaWQ9XCJhTm9TY2FubmVyXCJcclxuXHRcdFx0XHRcdFx0XHQ+KE5vIFRXQUlOIGNvbXBhdGlibGUgZHJpdmVycyBkZXRlY3RlZCk8L2FcclxuXHRcdFx0XHRcdFx0PlxyXG5cdFx0XHRcdFx0PC9saT5cclxuXHRcdFx0XHRcdDxsaSBpZD1cImRpdlByb2R1Y3REZXRhaWxcIj5cclxuXHRcdFx0XHRcdFx0PHVsIGlkPVwiZGl2VHdhaW5UeXBlXCI+XHJcblx0XHRcdFx0XHRcdFx0PGxpPlxyXG5cdFx0XHRcdFx0XHRcdFx0PGxhYmVsIGlkPVwibGJsU2hvd1VJXCIgZm9yPVwiU2hvd1VJXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBpZD1cIlNob3dVSVwiIC8+e3sgJ3NjYW5uZXIuU2hvd1VJJyB8IHRyYW5zbGF0ZSB9fSZuYnNwOzwvbGFiZWxcclxuXHRcdFx0XHRcdFx0XHRcdD5cclxuXHRcdFx0XHRcdFx0XHRcdDxsYWJlbCBmb3I9XCJBREZcIj4gPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGlkPVwiQURGXCIgLz57eyAnc2Nhbm5lci5BdXRvRmVlZGVyJyB8IHRyYW5zbGF0ZSB9fSZuYnNwOzwvbGFiZWw+XHJcblx0XHRcdFx0XHRcdFx0XHQ8bGFiZWwgZm9yPVwiRHVwbGV4XCI+IDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBpZD1cIkR1cGxleFwiIC8+e3sgJ3NjYW5uZXIuRHVwbGV4JyB8IHRyYW5zbGF0ZSB9fTwvbGFiZWw+XHJcblx0XHRcdFx0XHRcdFx0PC9saT5cclxuXHRcdFx0XHRcdFx0XHQ8bGk+XHJcblx0XHRcdFx0XHRcdFx0XHR7eyAnc2Nhbm5lci5QaXhlbFR5cGUnIHwgdHJhbnNsYXRlIH19OlxyXG5cdFx0XHRcdFx0XHRcdFx0PGxhYmVsIGZvcj1cIkJXXCIgc3R5bGU9XCJtYXJnaW4tbGVmdDogNXB4XCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxpbnB1dCB0eXBlPVwicmFkaW9cIiBpZD1cIkJXXCIgbmFtZT1cIlBpeGVsVHlwZVwiIC8+e3sgJ3NjYW5uZXIuQiZXJyB8IHRyYW5zbGF0ZSB9fTwvbGFiZWxcclxuXHRcdFx0XHRcdFx0XHRcdD5cclxuXHRcdFx0XHRcdFx0XHRcdDxsYWJlbCBmb3I9XCJHcmF5XCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxpbnB1dCB0eXBlPVwicmFkaW9cIiBpZD1cIkdyYXlcIiBuYW1lPVwiUGl4ZWxUeXBlXCIgLz57eyAnc2Nhbm5lci5HcmF5JyB8IHRyYW5zbGF0ZSB9fTwvbGFiZWxcclxuXHRcdFx0XHRcdFx0XHRcdD5cclxuXHRcdFx0XHRcdFx0XHRcdDxsYWJlbCBmb3I9XCJSR0JcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PGlucHV0IHR5cGU9XCJyYWRpb1wiIGlkPVwiUkdCXCIgbmFtZT1cIlBpeGVsVHlwZVwiIC8+e3sgJ3NjYW5uZXIuQ29sb3InIHwgdHJhbnNsYXRlIH19PC9sYWJlbFxyXG5cdFx0XHRcdFx0XHRcdFx0PlxyXG5cdFx0XHRcdFx0XHRcdDwvbGk+XHJcblx0XHRcdFx0XHRcdFx0PGxpPlxyXG5cdFx0XHRcdFx0XHRcdFx0PHNwYW4+e3sgJ3NjYW5uZXIuUmVzb2x1dGlvbicgfCB0cmFuc2xhdGUgfX06Jm5ic3A7PC9zcGFuXHJcblx0XHRcdFx0XHRcdFx0XHQ+PHNlbGVjdCBzaXplPVwiMVwiIGlkPVwiUmVzb2x1dGlvblwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8b3B0aW9uIHZhbHVlPVwiMTAwXCI+MTAwPC9vcHRpb24+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxvcHRpb24gdmFsdWU9XCIxNTBcIj4xNTA8L29wdGlvbj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PG9wdGlvbiB2YWx1ZT1cIjIwMFwiPjIwMDwvb3B0aW9uPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8b3B0aW9uIHZhbHVlPVwiMzAwXCIgc2VsZWN0ZWQ+MzAwPC9vcHRpb24+XHJcblx0XHRcdFx0XHRcdFx0XHQ8L3NlbGVjdD5cclxuXHRcdFx0XHRcdFx0XHQ8L2xpPlxyXG5cdFx0XHRcdFx0XHQ8L3VsPlxyXG5cdFx0XHRcdFx0PC9saT5cclxuXHJcblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyXCI+XHJcblx0XHRcdFx0XHRcdDxidXR0b25cclxuXHRcdFx0XHRcdFx0XHRpZD1cImJ0blNjYW5cIlxyXG5cdFx0XHRcdFx0XHRcdGRpc2FibGVkPVwiZGlzYWJsZWRcIlxyXG5cdFx0XHRcdFx0XHRcdChjbGljayk9XCJhY3F1aXJlSW1hZ2UoKVwiXHJcblx0XHRcdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiXHJcblx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJhY3Rpb24tYnRuIGFjdGlvbi1idG5fMlwiXHJcblx0XHRcdFx0XHRcdD5cclxuXHRcdFx0XHRcdFx0XHQ8aSBjbGFzcz1cImJpIGJpLXVwYy11cGxvYWQgaWNvblwiPjwvaT5cclxuXHRcdFx0XHRcdFx0XHQ8c3Bhbj4ge3sgJ3NjYW5uZXIuc2NhbkZpbGUnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHQ8L2J1dHRvbj5cclxuXHRcdFx0XHRcdFx0PGJ1dHRvblxyXG5cdFx0XHRcdFx0XHRcdChjbGljayk9XCJidG5Mb2FkSW1hZ2VzT3JQREZzX29uY2xpY2soKVwiXHJcblx0XHRcdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiXHJcblx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJhY3Rpb24tYnRuIGFjdGlvbi1idG5fMSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAteC0yXCJcclxuXHRcdFx0XHRcdFx0PlxyXG5cdFx0XHRcdFx0XHRcdDxpIGNsYXNzPVwiYmkgYmktdXBsb2FkIGljb25cIj48L2k+XHJcblx0XHRcdFx0XHRcdFx0PHNwYW4+IHt7ICdzY2FubmVyLmxvYWRGaWxlJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cclxuXHRcdFx0XHRcdFx0PC9idXR0b24+XHJcblx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHQ8L3VsPlxyXG5cdFx0XHQ8L2Rpdj5cclxuXHRcdDwvZGl2PlxyXG5cdFx0PGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1lbmQgbXgtM1wiPlxyXG5cdFx0XHQ8YnV0dG9uXHJcblx0XHRcdFx0Y2xhc3M9XCJidG4gc2F2ZS1idXR0b25cIlxyXG5cdFx0XHRcdFtuZ0NsYXNzXT1cInsgJ2hpZGUtdXBsb2FkLWJ1dHRvbic6IGhpZGVVcGxvYWRCdXR0b24gfVwiXHJcblx0XHRcdFx0I3NjYW5uZXJVcGxvYWRCdXR0b25cclxuXHRcdFx0XHRpZD1cInNjYW5uZXJVcGxvYWRCdXR0b25cIlxyXG5cdFx0XHRcdFtkaXNhYmxlZF09XCJEV09iamVjdD8uSG93TWFueUltYWdlc0luQnVmZmVyID09PSAwXCJcclxuXHRcdFx0XHRjb2xvcj1cInByaW1hcnlcIlxyXG5cdFx0XHRcdChjbGljayk9XCJjb252ZXJ0VG9CbG9iKClcIlxyXG5cdFx0XHQ+XHJcblx0XHRcdFx0e3sgJ3NjYW5uZXIuc2F2ZUZpbGUnIHwgdHJhbnNsYXRlIH19XHJcblx0XHRcdDwvYnV0dG9uPlxyXG5cdFx0PC9kaXY+XHJcblx0PC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
|