upload-attachment.component.js
57.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
import { AppConfigService } from '../app-config/app-config.service';
import { Http } from '@angular/http';
import { Request } from '../_services/request.service';
import { Common } from '../_services/common.service';
import { NgForm } from '@angular/forms';
import { HttpClient, HttpEventType, HttpHeaders, HttpRequest, HttpResponse } from '@angular/common/http';
import { Observable } from 'rxjs';
import QrCode from 'qrcode-reader';
import * as _ from 'lodash';
export class UploadAttachmentComponent {
/**
* @param {?} appConfigService
* @param {?} request
* @param {?} common
* @param {?} http
* @param {?} _http
*/
constructor(appConfigService, request, common, http, _http) {
this.appConfigService = appConfigService;
this.request = request;
this.common = common;
this.http = http;
this._http = _http;
this.upLoadType = [
{ title: "File", type: 1 },
// {title:"Scan",type:2},
{ title: "Link", type: 3 },
{ title: "QR Code", type: 4 }
];
this.systemId = '0';
this.RelatedAgency = 'SOC';
this.RecordId = '0';
this.Subject = '-';
this.TypeId = '0';
this.onlyImage = false;
this.uploaded = new EventEmitter();
// @ViewChild('myModal') myModal;
this.fileList = [];
this.fileNameLink = '';
this.fileNameLinkError = '';
this.QrCodeFileName = '';
this.fileNameQr = '';
this.fileNameLinkQr = '';
this.fileNameQrError = '';
this.filter = {};
this.uploadHeaders = {
"Authorization": "Basic " + btoa("APPSOC:123456")
};
this.isLoading = false;
this.isDisabled = false;
this.createAuthorizationHeader = (headers) => {
};
this.beforeUpload = (file, _fileList) => {
return new Observable((observer) => {
/** @type {?} */
let whitelist = [
'application/pdf',
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
'application/vnd.ms-excel',
'application/vnd.msexcel',
'application/csv',
'text/csv',
'application/msword',
'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
'application/vnd.ms-powerpoint',
'application/vnd.openxmlformats-officedocument.presentationml.slideshow',
'application/vnd.openxmlformats-officedocument.presentationml.presentation',
'text/plain',
'text/comma-separated-values',
'text/anytext',
'image/png',
'image/jpeg',
'image/gif',
'image/bmp'
];
/** @type {?} */
const isWhitelist = (file && whitelist.indexOf(file.type) > -1);
if (!isWhitelist) {
setTimeout(() => {
this.fileList = [{
uid: '999',
name: 'สามารถอัพโหลดได้เฉพาะไฟล์ pdf , png , jpeg ,gif , text , word , excel , powerpoint',
status: 'error',
response: 'สามารถอัพโหลดได้เฉพาะไฟล์ pdf , png , jpeg ,gif , text , word , excel , powerpoint',
url: null
}];
}, 50);
observer.complete();
return;
}
/** @type {?} */
const isLt30M = /** @type {?} */ ((file.size)) / 1024 / 1024 < 30;
if (!isLt30M) {
this.fileList = [{
uid: '999',
name: 'File must smaller than 30MB!',
status: 'error',
response: 'File must smaller than 30MB!',
url: null
}];
observer.complete();
return;
}
observer.next(isWhitelist && isLt30M);
observer.complete();
});
};
this.customReq = (item) => {
/** @type {?} */
const formData = new FormData();
// tslint:disable-next-line:no-any
formData.append('FileData', /** @type {?} */ (item.file));
formData.append('SystemId', '' + this.systemId);
formData.append('RelatedAgency', this.RelatedAgency);
formData.append('RecordId', this.RecordId);
formData.append('Subject', this.Subject);
formData.append('TypeId', this.TypeId);
/** @type {?} */
let headers = new HttpHeaders();
headers = headers.set('Authorization', 'Basic ' + btoa('APPSOC:123456'));
/** @type {?} */
let req = new HttpRequest('POST', item.action, formData, {
reportProgress: true,
headers: headers
});
// req.headers.set('Authorization', 'Basic ' + btoa('APPSOC:123456'));
return this.http.request(req).subscribe((event) => {
if (event.type === HttpEventType.UploadProgress) {
if (event.total > 0) {
(/** @type {?} */ (event)).percent = event.loaded / event.total * 100;
}
// console.log("onProgress", event , this.fileList);
item.onProgress(event, item.file);
}
else if (event instanceof HttpResponse) {
// console.log("event.body", event.body , this.fileList);
if (this.fileList && this.fileList.length > 1) {
this.fileList = [this.fileList[this.fileList.length - 1]];
}
// let res = JSON.parse(event.body);
// this.isDisabled = true;
this.isDisabled = false;
this.uploaded.emit(event.body);
item.onSuccess(event.body, item.file, event);
}
}, (err) => {
console.log(err);
item.onError(err, item.file);
});
};
this.config = appConfigService.getConfig();
this.url = _.get(this.config, 'apiServers.alfresco.url') || "https://portal-uat.soc.go.th/api/mfec/Alfresco";
this.uploadUrl = _.get(this.config, 'apiServers.alfresco.uploadUrl') || 'https://portal-uat.soc.go.th/microservice-api/gen-processed-file/upload-link-server';
// || "http://127.0.0.1:5500/microservice-api/gen-processed-file/upload-link-server";
}
/**
* @return {?}
*/
ngOnInit() {
console.log('form', this.form);
this.qr = new QrCode();
this.qr.callback = (err, result) => {
console.log('callback');
this.fileNameQrError = '';
/** @type {?} */
var span = document.querySelector('span') || document.createElement('span');
if (result) {
console.log(result.result);
if (result.result) {
this.fileNameLinkQr = result.result;
this.uploadLinkQr();
}
// span.textContent = 'view console';
}
else {
// span.textContent = 'Error! See error message in console!';
console.error(err);
this.fileNameQrError = this.QrCodeFileName;
this.QrCodeFileName = '';
}
// preview.appendChild(span);
};
}
/**
* @return {?}
*/
uploadLinkQr() {
this.isLoading = true;
this.fileNameQrError = '';
this._http.post(this.uploadUrl, {
SystemId: '' + this.systemId,
RelatedAgency: this.RelatedAgency,
RecordId: this.RecordId,
Subject: this.Subject,
TypeId: this.TypeId,
link: this.fileNameLinkQr
}).map((res) => {
return res.json();
})
.toPromise().then(res => {
console.log(res);
this.isLoading = false;
if (res.resultCode === 20000 && res.data && res.data.file) {
this.fileNameLinkQr = '';
// this.isDisabled = true;
this.isDisabled = false;
console.log('res.data', res.data.file);
this.fileNameQr = res.data.file.fileName;
this.uploaded.emit(res.data.file);
this.fileNameLink = '';
this.fileNameLinkError = '';
}
else {
this.fileNameQrError = this.fileNameLinkQr;
}
}).catch((err) => {
this.uploaded.emit({});
this.isLoading = false;
this.fileNameQrError = this.fileNameLinkQr;
console.log(err);
});
}
/**
* @return {?}
*/
btnUpload() {
this.isLoading = true;
this.fileNameLinkError = '';
this._http.post(this.uploadUrl, {
SystemId: '' + this.systemId,
RelatedAgency: this.RelatedAgency,
RecordId: this.RecordId,
Subject: this.Subject,
TypeId: this.TypeId,
link: this.filter.link
}).map((res) => {
return res.json();
})
.toPromise().then(res => {
console.log(res);
this.isLoading = false;
if (res.resultCode === 20000 && res.data && res.data.file) {
this.filter = {};
// this.isDisabled = true;
this.isDisabled = false;
console.log('res.data', res.data.file);
this.fileNameLink = res.data.file.fileName;
this.uploaded.emit(res.data.file);
this.QrCodeFileName = '';
this.fileNameQr = '';
this.fileNameLinkQr = '';
this.fileNameQrError = '';
}
else {
this.fileNameLinkError = this.filter.link;
}
}).catch((err) => {
this.uploaded.emit({});
this.isLoading = false;
this.fileNameLinkError = this.filter.link;
console.log(err);
});
}
/**
* @return {?}
*/
onQrCodeChange() {
/** @type {?} */
let fullPath = document.getElementById('file-upload')['value'];
if (fullPath) {
/** @type {?} */
var startIndex = (fullPath.indexOf('\\') >= 0 ? fullPath.lastIndexOf('\\') : fullPath.lastIndexOf('/'));
/** @type {?} */
var filename = fullPath.substring(startIndex);
if (filename.indexOf('\\') === 0 || filename.indexOf('/') === 0) {
filename = filename.substring(1);
}
this.QrCodeFileName = filename;
}
else {
this.QrCodeFileName = '';
}
this.fileNameLinkQr = '';
/** @type {?} */
var upload = document.getElementById('file-upload');
/** @type {?} */
var preview = document.getElementById('preview');
/** @type {?} */
let files_ = document.getElementById('file-upload')['files'];
// console.log('files_',files_)
if (files_)
for (var i = 0; i < files_.length; i++) {
/** @type {?} */
var file = files_[i];
/** @type {?} */
var imageType = /^image\//;
if (!imageType.test(file.type)) {
this.QrCodeFileName = '';
this.fileNameQrError = 'File type not valid';
console.log('File type not valid');
}
else {
/** @type {?} */
var reader = new FileReader();
/** @type {?} */
let self = this;
reader.addEventListener('load', function () {
/** @type {?} */
var img = document.querySelector('img') || document.createElement('img');
img.src = this.result;
// preview.appendChild(img);
// Analyse code
self.qr.decode(this.result);
}.bind(reader), false);
reader.readAsDataURL(file);
}
}
// console.log("onQrCodeChange",jsqrcode)
}
/**
* @param {?} file
* @return {?}
*/
onUploaded(file) {
console.log("file", file);
/** @type {?} */
let res = JSON.parse(file.request.response);
this.uploaded.emit(res);
}
/**
* @param {?} e
* @return {?}
*/
onSelected(e) {
console.log("e", e);
console.log('form', this.form);
this.form.ngSubmit.emit();
}
/**
* @param {?} data
* @return {?}
*/
onChange(data) {
data.fileList = [data.file];
// console.log("onChange",data);
if (data.fileList === 0) {
this.isDisabled = false;
}
}
/**
* @return {?}
*/
clearValue() {
this.isDisabled = false;
console.log("clearValue");
this.fileList = [];
this.fileNameLink = '';
this.fileNameLinkError = '';
this.QrCodeFileName = '';
this.fileNameQr = '';
this.fileNameLinkQr = '';
this.fileNameQrError = '';
}
}
UploadAttachmentComponent.decorators = [
{ type: Component, args: [{
selector: 'upload-attachment',
template: "<!--<p-tabView>-->\n <!--<p-tabPanel header=\"File\">-->\n <!--<dx-file-uploader selectButtonText=\"\u0E40\u0E25\u0E37\u0E2D\u0E01\u0E44\u0E1F\u0E25\u0E4C\" labelText=\"\" accept=\"*\" uploadMode=\"useForm\" uploadMethod=\"POST\"-->\n <!--multiple=\"true\" uploadMode=\"instantly\" labelText=\"\u0E2B\u0E23\u0E37\u0E2D\u0E27\u0E32\u0E07\u0E44\u0E1F\u0E25\u0E4C\u0E17\u0E35\u0E48\u0E19\u0E35\u0E48\" uploadUrl=\"https://filemanager-dot-smartrms-api.appspot.com/api/http/upload\"-->\n <!-->-->\n <!--</dx-file-uploader>-->\n <!--</p-tabPanel>-->\n <!--<p-tabPanel header=\"Link\">-->\n <!--Content 2-->\n <!--</p-tabPanel>-->\n <!--<p-tabPanel header=\"QR Code\">-->\n <!--Content 3-->\n <!--</p-tabPanel>-->\n<!--</p-tabView>-->\n<!-- [disabled]=\"isDisabled\" -->\n<dx-tab-panel\n #tabPanel\n [items]=\"upLoadType\"\n [selectedIndex]=\"0\"\n [loop]=\"false\"\n [animationEnabled]=\"false\"\n [swipeEnabled]=\"false\"\n itemTemplate=\"itemTemplate\"\n>\n <!--<div *dxTemplate=\"let type of upLoadType\">-->\n <!--<span>{{type.name.toUpperCase()}}</span>-->\n <!--</div>-->\n <div *dxTemplate=\"let item of 'itemTemplate'\">\n <div class=\"tabpanel-item\">\n <div *ngIf=\"item.type === 1\">\n <div class=\"col-sm-12\" style=\"text-align: center\">\n <br>\n <!--<form #f=\"ngForm\" action=\"https://203.154.32.126:2585/api/mfec/Alfresco\" method=\"post\" enctype=\"multipart/form-data\">-->\n <!--<input type=\"hidden\" name=\"SystemId\" [value]=\"11\">-->\n <!--<input type=\"hidden\" name=\"RelatedAgency\" [value]=\"11\">-->\n <!--<input type=\"hidden\" name=\"RecordId\" [value]=\"11\">-->\n <!--<input type=\"hidden\" name=\"Subject\" [value]=\"11\">-->\n <!--<input type=\"hidden\" name=\"TypeId\" [value]=\"11\">-->\n <!--<dx-file-uploader [uploadHeaders]=\"uploadHeaders\" selectButtonText=\"\u0E40\u0E25\u0E37\u0E2D\u0E01\u0E44\u0E1F\u0E25\u0E4C\" labelText=\"\" accept=\"*\" uploadMode=\"useForm\" (onValueChanged)=\"onSelected($event)\"-->\n <!--labelText=\"\u0E2B\u0E23\u0E37\u0E2D\u0E27\u0E32\u0E07\u0E44\u0E1F\u0E25\u0E4C\u0E17\u0E35\u0E48\u0E19\u0E35\u0E48\">-->\n <!--</dx-file-uploader>-->\n <!--<input type=\"submit\">-->\n <!--</form>-->\n <nz-upload *ngIf=\"!onlyImage\" nzType=\"drag\"\n [nzAction]=\"url\"\n [nzCustomRequest]=\"customReq\"\n [nzMultiple]=\"false\"\n [(nzFileList)]=\"fileList\"\n (nzChange)=\"onChange($event)\"\n [nzShowButton]=\"fileList.length === 0\"\n [nzBeforeUpload]=\"beforeUpload\">\n <!--<nz-upload nzType=\"drag\"-->\n <!--nzAction=\"https://203.154.32.126:2585/api/mfec/Alfresco\"-->\n <!-->-->\n <a nz-button>\n <i nz-icon type=\"upload\"></i><span>Click to Upload</span>\n </a>\n </nz-upload>\n <nz-upload *ngIf=\"onlyImage\" nzType=\"drag\"\n [nzAction]=\"url\"\n [nzCustomRequest]=\"customReq\"\n [nzMultiple]=\"false\"\n nzFileType=\"image/png,image/jpeg,image/gif,image/bmp\"\n [(nzFileList)]=\"fileList\"\n (nzChange)=\"onChange($event)\"\n [nzBeforeUpload]=\"beforeUpload\">\n <!--<nz-upload nzType=\"drag\"-->\n <!--nzAction=\"https://203.154.32.126:2585/api/mfec/Alfresco\"-->\n <!-->-->\n <a nz-button>\n <i nz-icon type=\"upload\"></i><span>Click to Upload</span>\n </a>\n </nz-upload>\n <br>\n </div>\n </div>\n <div *ngIf=\"item.type === 2\">\n <div class=\"col-sm-10\" style=\"text-align: center\">\n <br>\n <br>\n </div>\n </div>\n <div *ngIf=\"item.type === 3\">\n <div class=\"col-sm-12\" style=\"text-align: center\">\n <div class=\"row\" *ngIf=\"!uploadUrl\" >\n <br>\n <br>\n </div>\n <div class=\"row\" *ngIf=\"uploadUrl\" style=\"height: 100px;\">\n <div class=\"col-sm-12\" style=\"padding: 50px;\">\n <div class=\"input-group\">\n <input type=\"text\" class=\"form-control m-input\" placeholder=\"\" [(ngModel)]=\"filter.link\">\n <span class=\"input-group-btn add-bt\">\n <button type=\"button\" class=\"btn btn-success btn-md\" (click)=\"btnUpload()\" style=\"margin: 0px 0px;\" [disabled]=\"isLoading\">\n Upload\n </button>\n </span>\n </div>\n\n <div class=\"ant-upload-list-item ant-upload-list-item-done\" *ngIf=\"fileNameLink\">\n <div class=\"ant-upload-list-item-info\">\n <i nz-icon=\"\" class=\"anticon ng-tns-c8-0 anticon-paper-clip\" style=\"position: absolute;left: 0px;\"></i>\n <span class=\"ant-upload-list-item-name ng-tns-c8-0 \" >{{fileNameLink}}</span>\n <!-- <i type=\"close\" class=\"anticon ng-tns-c8-0 anticon-close ng-star-inserted\" ></i> -->\n </div>\n </div>\n <div class=\"ant-upload-list-item ant-upload-list-item-done ant-upload-list-item-error\" *ngIf=\"fileNameLinkError\">\n <div class=\"ant-upload-list-item-info\">\n <i nz-icon=\"\" class=\"anticon ng-tns-c8-0 anticon-paper-clip\" style=\"position: absolute;left: 0px;\"></i>\n <span class=\"ant-upload-list-item-name ng-tns-c8-0 \" >{{fileNameLinkError}}</span>\n <i type=\"close\" class=\"anticon ng-tns-c8-0 anticon-close\" (click)=\"fileNameLinkError = ''\" ></i>\n </div>\n </div>\n\n\n </div>\n </div>\n </div>\n </div>\n <div *ngIf=\"item.type === 4\">\n <div class=\"col-sm-12\" style=\"text-align: center\">\n <div class=\"row\" *ngIf=\"!uploadUrl\" >\n <br>\n <br>\n </div>\n\n <div class=\"row\" *ngIf=\"uploadUrl\" style=\"height: 100px;\">\n <div class=\"col-sm-12\" style=\"padding: 50px;\">\n <div id=\"preview\"></div>\n <div class=\"input-group\">\n <label for=\"file-upload\" class=\"custom-file-upload\"\n style=\"background-color: #2b3a4a !important;display: inline-block;color: #f5f9e2 !important;padding: 7px 14px;cursor: pointer;\">\n Upload\n </label>\n <!-- -->\n <span style=\"padding: 10px;\"> <i *ngIf=\"isLoading\" class=\"fa fa-spinner fa-spin\" aria-hidden=\"true\" ></i> {{QrCodeFileName}}</span>\n <input id=\"file-upload\" type=\"file\" style=\" display: none;\" (change)=\"onQrCodeChange()\" accept=\"image/*\"/>\n </div>\n\n <div class=\"ant-upload-list-item ant-upload-list-item-done\" *ngIf=\"fileNameQr\">\n <div class=\"ant-upload-list-item-info\">\n <i nz-icon=\"\" class=\"anticon ng-tns-c8-0 anticon-paper-clip\" style=\"position: absolute;left: 0px;\"></i>\n <span class=\"ant-upload-list-item-name ng-tns-c8-0 \" >{{fileNameQr}}</span>\n <!-- <i type=\"close\" class=\"anticon ng-tns-c8-0 anticon-close ng-star-inserted\" ></i> -->\n </div>\n </div>\n <div class=\"ant-upload-list-item ant-upload-list-item-done ant-upload-list-item-error\" *ngIf=\"fileNameQrError\">\n <div class=\"ant-upload-list-item-info\">\n <i nz-icon=\"\" class=\"anticon ng-tns-c8-0 anticon-paper-clip\" style=\"position: absolute;left: 0px;\"></i>\n <span class=\"ant-upload-list-item-name ng-tns-c8-0 \" >{{fileNameQrError}}</span>\n <i type=\"close\" class=\"anticon ng-tns-c8-0 anticon-close\" (click)=\"fileNameQrError = ''\" ></i>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</dx-tab-panel>\n"
}] }
];
/** @nocollapse */
UploadAttachmentComponent.ctorParameters = () => [
{ type: AppConfigService },
{ type: Request },
{ type: Common },
{ type: HttpClient },
{ type: Http }
];
UploadAttachmentComponent.propDecorators = {
form: [{ type: ViewChild, args: ['f',] }],
upLoadType: [{ type: Input }],
systemId: [{ type: Input }],
RelatedAgency: [{ type: Input }],
RecordId: [{ type: Input }],
Subject: [{ type: Input }],
TypeId: [{ type: Input }],
onlyImage: [{ type: Input }],
uploaded: [{ type: Output }]
};
if (false) {
/** @type {?} */
UploadAttachmentComponent.prototype.form;
/** @type {?} */
UploadAttachmentComponent.prototype.upLoadType;
/** @type {?} */
UploadAttachmentComponent.prototype.systemId;
/** @type {?} */
UploadAttachmentComponent.prototype.RelatedAgency;
/** @type {?} */
UploadAttachmentComponent.prototype.RecordId;
/** @type {?} */
UploadAttachmentComponent.prototype.Subject;
/** @type {?} */
UploadAttachmentComponent.prototype.TypeId;
/** @type {?} */
UploadAttachmentComponent.prototype.onlyImage;
/** @type {?} */
UploadAttachmentComponent.prototype.uploaded;
/** @type {?} */
UploadAttachmentComponent.prototype.fileList;
/** @type {?} */
UploadAttachmentComponent.prototype.fileNameLink;
/** @type {?} */
UploadAttachmentComponent.prototype.fileNameLinkError;
/** @type {?} */
UploadAttachmentComponent.prototype.QrCodeFileName;
/** @type {?} */
UploadAttachmentComponent.prototype.fileNameQr;
/** @type {?} */
UploadAttachmentComponent.prototype.fileNameLinkQr;
/** @type {?} */
UploadAttachmentComponent.prototype.fileNameQrError;
/** @type {?} */
UploadAttachmentComponent.prototype.filter;
/** @type {?} */
UploadAttachmentComponent.prototype.uploadHeaders;
/** @type {?} */
UploadAttachmentComponent.prototype.config;
/** @type {?} */
UploadAttachmentComponent.prototype.url;
/** @type {?} */
UploadAttachmentComponent.prototype.uploadUrl;
/** @type {?} */
UploadAttachmentComponent.prototype.qr;
/** @type {?} */
UploadAttachmentComponent.prototype.isLoading;
/** @type {?} */
UploadAttachmentComponent.prototype.isDisabled;
/** @type {?} */
UploadAttachmentComponent.prototype.createAuthorizationHeader;
/** @type {?} */
UploadAttachmentComponent.prototype.beforeUpload;
/** @type {?} */
UploadAttachmentComponent.prototype.customReq;
/** @type {?} */
UploadAttachmentComponent.prototype.appConfigService;
/** @type {?} */
UploadAttachmentComponent.prototype.request;
/** @type {?} */
UploadAttachmentComponent.prototype.common;
/** @type {?} */
UploadAttachmentComponent.prototype.http;
/** @type {?} */
UploadAttachmentComponent.prototype._http;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLWF0dGFjaG1lbnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vc29jLWFwcC1saWJyYXJ5LyIsInNvdXJjZXMiOlsibGliL3VwbG9hZC1hdHRhY2htZW50L3VwbG9hZC1hdHRhY2htZW50LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ25HLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLGtDQUFrQyxDQUFDO0FBQ2xFLE9BQU8sRUFBQyxJQUFJLEVBQXFELE1BQU0sZUFBZSxDQUFDO0FBQ3ZGLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQUNyRCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFDbkQsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRXRDLE9BQU8sRUFBQyxVQUFVLEVBQWEsYUFBYSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFtQixNQUFNLHNCQUFzQixDQUFDO0FBRXBJLE9BQU8sRUFBQyxVQUFVLEVBQVksTUFBTSxNQUFNLENBQUM7QUFDM0MsT0FBTyxNQUFNLE1BQU0sZUFBZSxDQUFDO0FBR25DLE9BQU8sS0FBSyxDQUFDLE1BQU0sUUFBUSxDQUFDO0FBTTVCLE1BQU07Ozs7Ozs7O0lBa0NGLFlBQW9CLGdCQUFrQyxFQUFVLE9BQWdCLEVBQVMsTUFBYyxFQUFVLElBQWdCLEVBQVMsS0FBVztRQUFqSSxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQVUsWUFBTyxHQUFQLE9BQU8sQ0FBUztRQUFTLFdBQU0sR0FBTixNQUFNLENBQVE7UUFBVSxTQUFJLEdBQUosSUFBSSxDQUFZO1FBQVMsVUFBSyxHQUFMLEtBQUssQ0FBTTswQkFoQzFIO1lBQ3ZCLEVB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QixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztTQUMzQjtLQUNKOzs7O0lBRU0sVUFBVTtRQUNiLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUE7UUFDekIsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQTtRQUV4QixJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQzs7OztZQWhWakMsU0FBUyxTQUFDO2dCQUNQLFFBQVEsRUFBRSxtQkFBbUI7Z0JBQzdCLHl6U0FBaUQ7YUFDcEQ7Ozs7WUFqQk8sZ0JBQWdCO1lBRWhCLE9BQU87WUFDUCxNQUFNO1lBR04sVUFBVTtZQUxWLElBQUk7OzttQkFrQlAsU0FBUyxTQUFDLEdBQUc7eUJBQ2IsS0FBSzt1QkFLTCxLQUFLOzRCQUNMLEtBQUs7dUJBQ0wsS0FBSztzQkFDTCxLQUFLO3FCQUNMLEtBQUs7d0JBQ0wsS0FBSzt1QkFDTCxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0FwcENvbmZpZ1NlcnZpY2V9IGZyb20gJy4uL2FwcC1jb25maWcvYXBwLWNvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7SHR0cCwgSGVhZGVycywgUmVzcG9uc2UsIFVSTFNlYXJjaFBhcmFtcywgUmVxdWVzdE9wdGlvbnN9IGZyb20gJ0Bhbmd1bGFyL2h0dHAnO1xuaW1wb3J0IHtSZXF1ZXN0fSBmcm9tICcuLi9fc2VydmljZXMvcmVxdWVzdC5zZXJ2aWNlJztcbmltcG9ydCB7Q29tbW9ufSBmcm9tICcuLi9fc2VydmljZXMvY29tbW9uLnNlcnZpY2UnO1xuaW1wb3J0IHtOZ0Zvcm19IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7VXBsb2FkWEhSQXJnc30gZnJvbSAnbmctem9ycm8tYW50ZCc7XG5pbXBvcnQge0h0dHBDbGllbnQsIEh0dHBFdmVudCwgSHR0cEV2ZW50VHlwZSwgSHR0cEhlYWRlcnMsIEh0dHBSZXF1ZXN0LCBIdHRwUmVzcG9uc2UsSHR0cEVycm9yUmVzcG9uc2V9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7U3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzL1J4JztcbmltcG9ydCB7T2JzZXJ2YWJsZSx0aHJvd0Vycm9yfSBmcm9tICdyeGpzJztcbmltcG9ydCBRckNvZGUgZnJvbSAncXJjb2RlLXJlYWRlcic7Ly9saWJzL3FyY29kZVxuLy8gaW1wb3J0IHsgTnpNZXNzYWdlU2VydmljZSB9IGZyb20gJ25nLXpvcnJvLWFudGQvbWVzc2FnZSc7XG5pbXBvcnQgeyBVcGxvYWRGaWxlIH0gZnJvbSAnbmctem9ycm8tYW50ZC91cGxvYWQnO1xuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3VwbG9hZC1hdHRhY2htZW50JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vdXBsb2FkLWF0dGFjaG1lbnQuY29tcG9uZW50Lmh0bWwnLFxufSlcbmV4cG9ydCBjbGFzcyBVcGxvYWRBdHRhY2htZW50Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICBAVmlld0NoaWxkKCdmJykgZm9ybTogTmdGb3JtO1xuICAgIEBJbnB1dCgpIHVwTG9hZFR5cGU6IGFueSA9IFtcbiAgICAgICAge3RpdGxlOiBcIkZpbGVcIiwgdHlwZTogMX0sXG4gICAgICAgIC8vIHt0aXRsZTpcIlNjYW5cIix0eXBlOjJ9LFxuICAgICAgICB7dGl0bGU6IFwiTGlua1wiLCB0eXBlOiAzfSxcbiAgICAgICAge3RpdGxlOiBcIlFSIENvZGVcIiwgdHlwZTogNH1dO1xuICAgIEBJbnB1dCgpIHN5c3RlbUlkOiBhbnkgPSAnMCc7XG4gICAgQElucHV0KCkgUmVsYXRlZEFnZW5jeTogYW55ID0gJ1NPQyc7XG4gICAgQElucHV0KCkgUmVjb3JkSWQ6IGFueSA9ICcwJztcbiAgICBASW5wdXQoKSBTdWJqZWN0OiBhbnkgPSAnLSc7XG4gICAgQElucHV0KCkgVHlwZUlkOiBhbnkgPSAnMCc7XG4gICAgQElucHV0KCkgb25seUltYWdlOiBib29sZWFuID0gZmFsc2U7XG4gICAgQE91dHB1dCgpIHVwbG9hZGVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIC8vIEBWaWV3Q2hpbGQoJ215TW9kYWwnKSBteU1vZGFsO1xuICAgIGZpbGVMaXN0OiBhbnkgPSBbXTtcbiAgICBmaWxlTmFtZUxpbmsgPSAnJztcbiAgICBmaWxlTmFtZUxpbmtFcnJvciA9ICcnO1xuICAgIFFyQ29kZUZpbGVOYW1lID0gJydcbiAgICBmaWxlTmFtZVFyID0gJyc7XG4gICAgZmlsZU5hbWVMaW5rUXIgPSAnJztcbiAgICBmaWxlTmFtZVFyRXJyb3IgPSAnJztcbiAgICBmaWx0ZXI6IGFueSA9IHt9XG4gICAgdXBsb2FkSGVhZGVyczogYW55ID0ge1xuICAgICAgICBcIkF1dGhvcml6YXRpb25cIjogXCJCYXNpYyBcIiArIGJ0b2EoXCJBUFBTT0M6MTIzNDU2XCIpXG4gICAgfTtcbiAgICAvLyB2YWx1ZTphbnkgPSBbXTtcbiAgICBjb25maWc7XG4gICAgdXJsO1xuICAgIHVwbG9hZFVybDtcbiAgICBxcjtcbiAgICBpc0xvYWRpbmcgPSBmYWxzZTtcbiAgICBpc0Rpc2FibGVkID0gZmFsc2U7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGFwcENvbmZpZ1NlcnZpY2U6IEFwcENvbmZpZ1NlcnZpY2UsIHByaXZhdGUgcmVxdWVzdDogUmVxdWVzdCwgcHVibGljIGNvbW1vbjogQ29tbW9uLCBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsIHB1YmxpYyBfaHR0cDogSHR0cCwpIHtcbiAgICAgICAgdGhpcy5jb25maWcgPSBhcHBDb25maWdTZXJ2aWNlLmdldENvbmZpZygpO1xuICAgICAgICB0aGlzLnVybCA9IF8uZ2V0KHRoaXMuY29uZmlnLCAnYXBpU2VydmVycy5hbGZyZXNjby51cmwnKSB8fCBcImh0dHBzOi8vcG9ydGFsLXVhdC5zb2MuZ28udGgvYXBpL21mZWMvQWxmcmVzY29cIjtcbiAgICAgICAgdGhpcy51cGxvYWRVcmwgPSBfLmdldCh0aGlzLmNvbmZpZywgJ2FwaVNlcnZlcnMuYWxmcmVzY28udXBsb2FkVXJsJykgfHwgJ2h0dHBzOi8vcG9ydGFsLXVhdC5zb2MuZ28udGgvbWljcm9zZXJ2aWNlLWFwaS9nZW4tcHJvY2Vzc2VkLWZpbGUvdXBsb2FkLWxpbmstc2VydmVyJ1xuICAgICAgICAvLyB8fCBcImh0dHA6Ly8xMjcuMC4wLjE6NTUwMC9taWNyb3NlcnZpY2UtYXBpL2dlbi1wcm9jZXNzZWQtZmlsZS91cGxvYWQtbGluay1zZXJ2ZXJcIjtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ2Zvcm0nLCB0aGlzLmZvcm0pO1xuICAgICAgICB0aGlzLnFyID0gbmV3IFFyQ29kZSgpO1xuICAgICAgICB0aGlzLnFyLmNhbGxiYWNrID0gKGVyciwgcmVzdWx0KSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnY2FsbGJhY2snKVxuICAgICAgICAgICAgdGhpcy5maWxlTmFtZVFyRXJyb3IgPSAnJztcbiAgICAgICAgICAgIHZhciBzcGFuID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcignc3BhbicpIHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcbiAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHQucmVzdWx0KVxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQucmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsZU5hbWVMaW5rUXIgPSByZXN1bHQucmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZExpbmtRcigpXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gc3Bhbi50ZXh0Q29udGVudCA9ICd2aWV3IGNvbnNvbGUnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gc3Bhbi50ZXh0Q29udGVudCA9ICdFcnJvciEgU2VlIGVycm9yIG1lc3NhZ2UgaW4gY29uc29sZSEnO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuZmlsZU5hbWVRckVycm9yID0gdGhpcy5RckNvZGVGaWxlTmFtZVxuICAgICAgICAgICAgICAgIHRoaXMuUXJDb2RlRmlsZU5hbWUgPSAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHByZXZpZXcuYXBwZW5kQ2hpbGQoc3Bhbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB1cGxvYWRMaW5rUXIoKSB7XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5maWxlTmFtZVFyRXJyb3IgPSAnJztcbiAgICAgICAgdGhpcy5faHR0cC5wb3N0KHRoaXMudXBsb2FkVXJsLCB7XG4gICAgICAgICAgICBTeXN0ZW1JZDogJycgKyB0aGlzLnN5c3RlbUlkLFxuICAgICAgICAgICAgUmVsYXRlZEFnZW5jeTogdGhpcy5SZWxhdGVkQWdlbmN5LFxuICAgICAgICAgICAgUmVjb3JkSWQ6IHRoaXMuUmVjb3JkSWQsXG4gICAgICAgICAgICBTdWJqZWN0OiB0aGlzLlN1YmplY3QsXG4gICAgICAgICAgICBUeXBlSWQ6IHRoaXMuVHlwZUlkLFxuICAgICAgICAgICAgbGluazogdGhpcy5maWxlTmFtZUxpbmtRclxuICAgICAgICB9KS5tYXAoKHJlczogUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgIHJldHVybiByZXMuanNvbigpO1xuICAgICAgICB9KVxuICAgICAgICAgICAgLnRvUHJvbWlzZSgpLnRoZW4ocmVzID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlcylcbiAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2VcblxuICAgICAgICAgICAgaWYgKHJlcy5yZXN1bHRDb2RlID09PSAyMDAwMCAmJiByZXMuZGF0YSAmJiByZXMuZGF0YS5maWxlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5maWxlTmFtZUxpbmtRciA9ICcnO1xuICAgICAgICAgICAgICAgIC8vIHRoaXMuaXNEaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0Rpc2FibGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ3Jlcy5kYXRhJywgcmVzLmRhdGEuZmlsZSlcbiAgICAgICAgICAgICAgICB0aGlzLmZpbGVOYW1lUXIgPSByZXMuZGF0YS5maWxlLmZpbGVOYW1lXG4gICAgICAgICAgICAgICAgdGhpcy51cGxvYWRlZC5lbWl0KHJlcy5kYXRhLmZpbGUpO1xuICAgICAgICAgICAgICAgIHRoaXMuZmlsZU5hbWVMaW5rID0gJyc7XG4gICAgICAgICAgICAgICAgdGhpcy5maWxlTmFtZUxpbmtFcnJvciA9ICcnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpbGVOYW1lUXJFcnJvciA9IHRoaXMuZmlsZU5hbWVMaW5rUXJcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgdGhpcy51cGxvYWRlZC5lbWl0KHt9KTtcbiAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2VcbiAgICAgICAgICAgIHRoaXMuZmlsZU5hbWVRckVycm9yID0gdGhpcy5maWxlTmFtZUxpbmtRclxuICAgICAgICAgICAgY29uc29sZS5sb2coZXJyKVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIGJ0blVwbG9hZCgpIHtcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLmZpbGVOYW1lTGlua0Vycm9yID0gJyc7XG4gICAgICAgIHRoaXMuX2h0dHAucG9zdCh0aGlzLnVwbG9hZFVybCwge1xuICAgICAgICAgICAgU3lzdGVtSWQ6ICcnICsgdGhpcy5zeXN0ZW1JZCxcbiAgICAgICAgICAgIFJlbGF0ZWRBZ2VuY3k6IHRoaXMuUmVsYXRlZEFnZW5jeSxcbiAgICAgICAgICAgIFJlY29yZElkOiB0aGlzLlJlY29yZElkLFxuICAgICAgICAgICAgU3ViamVjdDogdGhpcy5TdWJqZWN0LFxuICAgICAgICAgICAgVHlwZUlkOiB0aGlzLlR5cGVJZCxcbiAgICAgICAgICAgIGxpbms6IHRoaXMuZmlsdGVyLmxpbmtcbiAgICAgICAgfSkubWFwKChyZXM6IFJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gcmVzLmpzb24oKTtcbiAgICAgICAgfSlcbiAgICAgICAgICAgIC50b1Byb21pc2UoKS50aGVuKHJlcyA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhyZXMpXG4gICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlXG5cbiAgICAgICAgICAgIGlmIChyZXMucmVzdWx0Q29kZSA9PT0gMjAwMDAgJiYgcmVzLmRhdGEgJiYgcmVzLmRhdGEuZmlsZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyID0ge307XG4gICAgICAgICAgICAgICAgLy8gdGhpcy5pc0Rpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmlzRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygncmVzLmRhdGEnLCByZXMuZGF0YS5maWxlKVxuICAgICAgICAgICAgICAgIHRoaXMuZmlsZU5hbWVMaW5rID0gcmVzLmRhdGEuZmlsZS5maWxlTmFtZVxuICAgICAgICAgICAgICAgIHRoaXMudXBsb2FkZWQuZW1pdChyZXMuZGF0YS5maWxlKTtcbiAgICAgICAgICAgICAgICB0aGlzLlFyQ29kZUZpbGVOYW1lID0gJydcbiAgICAgICAgICAgICAgICB0aGlzLmZpbGVOYW1lUXIgPSAnJztcbiAgICAgICAgICAgICAgICB0aGlzLmZpbGVOYW1lTGlua1FyID0gJyc7XG4gICAgICAgICAgICAgICAgdGhpcy5maWxlTmFtZVFyRXJyb3IgPSAnJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5maWxlTmFtZUxpbmtFcnJvciA9IHRoaXMuZmlsdGVyLmxpbmtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgdGhpcy51cGxvYWRlZC5lbWl0KHt9KTtcbiAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2VcbiAgICAgICAgICAgIHRoaXMuZmlsZU5hbWVMaW5rRXJyb3IgPSB0aGlzLmZpbHRlci5saW5rXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlcnIpXG4gICAgICAgIH0pXG5cbiAgICB9XG5cbiAgICBvblFyQ29kZUNoYW5nZSgpIHtcbiAgICAgICAgbGV0IGZ1bGxQYXRoID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpbGUtdXBsb2FkJylbJ3ZhbHVlJ107XG4gICAgICAgIGlmIChmdWxsUGF0aCkge1xuICAgICAgICAgICAgdmFyIHN0YXJ0SW5kZXggPSAoZnVsbFBhdGguaW5kZXhPZignXFxcXCcpID49IDAgPyBmdWxsUGF0aC5sYXN0SW5kZXhPZignXFxcXCcpIDogZnVsbFBhdGgubGFzdEluZGV4T2YoJy8nKSk7XG4gICAgICAgICAgICB2YXIgZmlsZW5hbWUgPSBmdWxsUGF0aC5zdWJzdHJpbmcoc3RhcnRJbmRleCk7XG4gICAgICAgICAgICBpZiAoZmlsZW5hbWUuaW5kZXhPZignXFxcXCcpID09PSAwIHx8IGZpbGVuYW1lLmluZGV4T2YoJy8nKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGZpbGVuYW1lID0gZmlsZW5hbWUuc3Vic3RyaW5nKDEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLlFyQ29kZUZpbGVOYW1lID0gZmlsZW5hbWVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuUXJDb2RlRmlsZU5hbWUgPSAnJ1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmlsZU5hbWVMaW5rUXIgPSAnJztcblxuICAgICAgICB2YXIgdXBsb2FkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpbGUtdXBsb2FkJyk7XG4gICAgICAgIHZhciBwcmV2aWV3ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ByZXZpZXcnKTtcblxuICAgICAgICBsZXQgZmlsZXNfID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpbGUtdXBsb2FkJylbJ2ZpbGVzJ107XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdmaWxlc18nLGZpbGVzXylcbiAgICAgICAgaWYgKGZpbGVzXylcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZmlsZXNfLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGZpbGUgPSBmaWxlc19baV07XG4gICAgICAgICAgICAgICAgdmFyIGltYWdlVHlwZSA9IC9eaW1hZ2VcXC8vO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFpbWFnZVR5cGUudGVzdChmaWxlLnR5cGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuUXJDb2RlRmlsZU5hbWUgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maWxlTmFtZVFyRXJyb3IgPSAnRmlsZSB0eXBlIG5vdCB2YWxpZCc7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdGaWxlIHR5cGUgbm90IHZhbGlkJylcbiAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgIC8vIFJlYWQgZmlsZVxuICAgICAgICAgICAgICAgICAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgICAgICAgICAgICAgICBsZXQgc2VsZiA9IHRoaXM7XG4gICAgICAgICAgICAgICAgICByZWFkZXIuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAvLyBTaG93IGFzIHByZXZpZXcgaW1hZ2VcbiAgICAgICAgICAgICAgICAgICAgICB2YXIgaW1nID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaW1nJykgfHwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7XG4gICAgICAgICAgICAgICAgICAgICAgaW1nLnNyYyA9IHRoaXMucmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICAgIC8vIHByZXZpZXcuYXBwZW5kQ2hpbGQoaW1nKTtcblxuICAgICAgICAgICAgICAgICAgICAgIC8vIEFuYWx5c2UgY29kZVxuICAgICAgICAgICAgICAgICAgICAgIHNlbGYucXIuZGVjb2RlKHRoaXMucmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgIH0uYmluZChyZWFkZXIpLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTtcbiAgICAgICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJvblFyQ29kZUNoYW5nZVwiLGpzcXJjb2RlKVxuICAgIH1cblxuXG4gICAgb25VcGxvYWRlZChmaWxlKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiZmlsZVwiLCBmaWxlKTtcbiAgICAgICAgbGV0IHJlcyA9IEpTT04ucGFyc2UoZmlsZS5yZXF1ZXN0LnJlc3BvbnNlKTtcbiAgICAgICAgdGhpcy51cGxvYWRlZC5lbWl0KHJlcyk7XG4gICAgfVxuXG4gICAgb25TZWxlY3RlZChlKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiZVwiLCBlKTtcbiAgICAgICAgY29uc29sZS5sb2coJ2Zvcm0nLCB0aGlzLmZvcm0pO1xuICAgICAgICB0aGlzLmZvcm0ubmdTdWJtaXQuZW1pdCgpO1xuICAgIH1cblxuICAgIGNyZWF0ZUF1dGhvcml6YXRpb25IZWFkZXIgPSAoaGVhZGVyczogSHR0cEhlYWRlcnMpID0+IHtcbiAgICB9XG5cbiAgICBiZWZvcmVVcGxvYWQgPSAoZmlsZTphbnksIF9maWxlTGlzdDphbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKChvYnNlcnZlcjogYW55KSA9PiB7XG4gICAgICAgICAgbGV0IHdoaXRlbGlzdCA9IFtcbiAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL3BkZicsXG4gICAgICAgICAgICAgICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldCcsXG4gICAgICAgICAgICAgICdhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwnLFxuICAgICAgICAgICAgICAnYXBwbGljYXRpb24vdm5kLm1zZXhjZWwnLFxuICAgICAgICAgICAgICAnYXBwbGljYXRpb24vY3N2JyxcbiAgICAgICAgICAgICAgJ3RleHQvY3N2JyxcbiAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL21zd29yZCcsXG4gICAgICAgICAgICAgICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC5kb2N1bWVudCcsXG4gICAgICAgICAgICAgICdhcHBsaWNhdGlvbi92bmQubXMtcG93ZXJwb2ludCcsXG4gICAgICAgICAgICAgICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQucHJlc2VudGF0aW9ubWwuc2xpZGVzaG93JyxcbiAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5wcmVzZW50YXRpb25tbC5wcmVzZW50YXRpb24nLFxuICAgICAgICAgICAgICAndGV4dC9wbGFpbicsXG4gICAgICAgICAgICAgICd0ZXh0L2NvbW1hLXNlcGFyYXRlZC12YWx1ZXMnLFxuICAgICAgICAgICAgICAndGV4dC9hbnl0ZXh0JyxcbiAgICAgICAgICAgICAgJ2ltYWdlL3BuZycsXG4gICAgICAgICAgICAgICdpbWFnZS9qcGVnJyxcbiAgICAgICAgICAgICAgJ2ltYWdlL2dpZicsXG4gICAgICAgICAgICAgICdpbWFnZS9ibXAnXG5cbiAgICAgICAgICAgIF07XG4gICAgICAgICAgY29uc3QgaXNXaGl0ZWxpc3QgPSAoZmlsZSAmJiB3aGl0ZWxpc3QuaW5kZXhPZihmaWxlLnR5cGUpID4gLTEpXG4gICAgICAgICAgaWYoIWlzV2hpdGVsaXN0KXtcbiAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5maWxlTGlzdCA9IFsge1xuICAgICAgICAgICAgICAgICAgICAgIHVpZDogJzk5OScsXG4gICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ+C4quC4suC4oeC4suC4o+C4luC4reC4seC4nuC5guC4q+C4peC4lOC5hOC4lOC5ieC5gOC4ieC4nuC4suC4sOC5hOC4n+C4peC5jCAgcGRmICwgcG5nICAsIGpwZWcgICxnaWYgLCB0ZXh0ICwgd29yZCAsIGV4Y2VsICwgcG93ZXJwb2ludCcsXG4gICAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiAnZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlOiAn4Liq4Liy4Lih4Liy4Lij4LiW4Lit4Lix4Lie4LmC4Lir4Lil4LiU4LmE4LiU4LmJ4LmA4LiJ4Lie4Liy4Liw4LmE4Lif4Lil4LmMICBwZGYgLCBwbmcgICwganBlZyAgLGdpZiAsIHRleHQgLCB3b3JkICwgZXhjZWwgLCBwb3dlcnBvaW50JyxcbiAgICAgICAgICAgICAgICAgICAgICB1cmw6IG51bGxcbiAgICAgICAgICAgICAgICAgICAgfV1cbiAgICAgICAgICAgICAgfSwgNTApO1xuICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgaXNMdDMwTSA9IGZpbGUuc2l6ZSEgLyAxMDI0IC8gMTAyNCA8IDMwO1xuICAgICAgICAgIGlmICghaXNMdDMwTSkge1xuICAgICAgICAgICAgdGhpcy5maWxlTGlzdCA9IFsge1xuICAgICAgICAgICAgICAgICAgdWlkOiAnOTk5JyxcbiAgICAgICAgICAgICAgICAgIG5hbWU6ICdGaWxlIG11c3Qgc21hbGxlciB0aGFuIDMwTUIhJyxcbiAgICAgICAgICAgICAgICAgIHN0YXR1czogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICAgIHJlc3BvbnNlOiAnRmlsZSBtdXN0IHNtYWxsZXIgdGhhbiAzME1CIScsXG4gICAgICAgICAgICAgICAgICB1cmw6IG51bGxcbiAgICAgICAgICAgICAgICB9XVxuICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBvYnNlcnZlci5uZXh0KGlzV2hpdGVsaXN0ICYmIGlzTHQzME0pO1xuICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgIGN1c3RvbVJlcSA9IChpdGVtOiBVcGxvYWRYSFJBcmdzKSA9PiB7XG5cbiAgICAgICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWFueVxuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ0ZpbGVEYXRhJywgaXRlbS5maWxlIGFzIGFueSk7XG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZCgnU3lzdGVtSWQnLCAnJyArIHRoaXMuc3lzdGVtSWQpO1xuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ1JlbGF0ZWRBZ2VuY3knLCB0aGlzLlJlbGF0ZWRBZ2VuY3kpO1xuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ1JlY29yZElkJywgdGhpcy5SZWNvcmRJZCk7XG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZCgnU3ViamVjdCcsIHRoaXMuU3ViamVjdCk7XG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZCgnVHlwZUlkJywgdGhpcy5UeXBlSWQpO1xuICAgICAgICBsZXQgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpO1xuICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ0F1dGhvcml6YXRpb24nLCAnQmFzaWMgJyArIGJ0b2EoJ0FQUFNPQzoxMjM0NTYnKSk7XG4gICAgICAgIGxldCByZXEgPSBuZXcgSHR0cFJlcXVlc3QoJ1BPU1QnLCBpdGVtLmFjdGlvbiwgZm9ybURhdGEsIHtcbiAgICAgICAgICAgIHJlcG9ydFByb2dyZXNzOiB0cnVlLFxuICAgICAgICAgICAgaGVhZGVyczogaGVhZGVyc1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gcmVxLmhlYWRlcnMuc2V0KCdBdXRob3JpemF0aW9uJywgJ0Jhc2ljICcgKyBidG9hKCdBUFBTT0M6MTIzNDU2JykpO1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnJlcXVlc3QocmVxKS5zdWJzY3JpYmUoXG4gICAgICAgICAgICAoZXZlbnQ6IEh0dHBFdmVudDx7fT4pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZXZlbnQudHlwZSA9PT0gSHR0cEV2ZW50VHlwZS5VcGxvYWRQcm9ncmVzcykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXZlbnQudG90YWwgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAoZXZlbnQgYXMgYW55KS5wZXJjZW50ID0gZXZlbnQubG9hZGVkIC8gZXZlbnQudG90YWwgKiAxMDA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJvblByb2dyZXNzXCIsIGV2ZW50ICwgdGhpcy5maWxlTGlzdCk7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW0ub25Qcm9ncmVzcyhldmVudCwgaXRlbS5maWxlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50IGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiZXZlbnQuYm9keVwiLCBldmVudC5ib2R5ICwgdGhpcy5maWxlTGlzdCk7XG4gICAgICAgICAgICAgICAgICAgIGlmKHRoaXMuZmlsZUxpc3QgJiYgdGhpcy5maWxlTGlzdC5sZW5ndGggPiAxKXtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbGVMaXN0ID0gW3RoaXMuZmlsZUxpc3RbdGhpcy5maWxlTGlzdC5sZW5ndGgtMV1dXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gbGV0IHJlcyA9IEpTT04ucGFyc2UoZXZlbnQuYm9keSk7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMuaXNEaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNEaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZGVkLmVtaXQoZXZlbnQuYm9keSk7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW0ub25TdWNjZXNzKGV2ZW50LmJvZHksIGl0ZW0uZmlsZSwgZXZlbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIChlcnIpID0+IHtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcblxuICAgICAgICAgICAgICAgIGl0ZW0ub25FcnJvcihlcnIsIGl0ZW0uZmlsZSk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvbkNoYW5nZShkYXRhKSB7XG4gICAgICAgIGRhdGEuZmlsZUxpc3QgPSBbZGF0YS5maWxlXTtcblxuICAgICAgICAvLyBjb25zb2xlLmxvZyhcIm9uQ2hhbmdlXCIsZGF0YSk7XG5cbiAgICAgICAgaWYoZGF0YS5maWxlTGlzdCA9PT0gMCl7XG4gICAgICAgICAgICB0aGlzLmlzRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBjbGVhclZhbHVlKCkge1xuICAgICAgICB0aGlzLmlzRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgY29uc29sZS5sb2coXCJjbGVhclZhbHVlXCIpXG4gICAgICAgIHRoaXMuZmlsZUxpc3QgPSBbXTtcbiAgICAgICAgdGhpcy5maWxlTmFtZUxpbmsgPSAnJztcbiAgICAgICAgdGhpcy5maWxlTmFtZUxpbmtFcnJvciA9ICcnO1xuICAgICAgICB0aGlzLlFyQ29kZUZpbGVOYW1lID0gJydcblxuICAgICAgICB0aGlzLmZpbGVOYW1lUXIgPSAnJztcbiAgICAgICAgdGhpcy5maWxlTmFtZUxpbmtRciA9ICcnO1xuICAgICAgICB0aGlzLmZpbGVOYW1lUXJFcnJvciA9ICcnO1xuICAgIH1cbn1cbiJdfQ==