/** * @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: "\n \n \n \n \n \n \n \n \n \n \n \n \n\n\n\n \n \n \n
\n
\n
\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Click to Upload\n \n \n \n \n \n \n \n Click to Upload\n \n \n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n \n \n \n \n
\n\n
\n
\n \n {{fileNameLink}}\n \n
\n
\n
\n
\n \n {{fileNameLinkError}}\n \n
\n
\n\n\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n\n
\n
\n
\n
\n \n \n {{QrCodeFileName}}\n \n
\n\n
\n
\n \n {{fileNameQr}}\n \n
\n
\n
\n
\n \n {{fileNameQrError}}\n \n
\n
\n
\n
\n
\n
\n
\n
\n\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==