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        <!--&gt;-->\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                               <!--&gt;-->\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                        <!--&gt;-->\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==