@smartbit4all/ng-client 4.5.5 → 4.5.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -106,11 +106,11 @@ export class UploadWidgetComponent {
106
106
  };
107
107
  }
108
108
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: UploadWidgetComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: COMPONENT_LIBRARY, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
109
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.11", type: UploadWidgetComponent, selector: "smart-upload-widget", inputs: { uploadDescriptor: "uploadDescriptor", isMultiple: "isMultiple", isDisabled: "isDisabled" }, outputs: { uploadFilesEvent: "uploadFilesEvent" }, viewQueries: [{ propertyName: "fileUploadPrime", first: true, predicate: ["fileUploadPrimeNg"], descendants: true }, { propertyName: "fileUploadMaterial", first: true, predicate: ["fileUploadMaterial"], descendants: true }], ngImport: i0, template: "<div class=\"sb4UploadWidget\">\r\n <!-- IMAGE TYPE WIDGET -->\r\n <ng-container *ngIf=\"widgetNeeded(uploadWidgetType.IMAGE) || widgetNeeded(uploadWidgetType.ALL)\">\r\n <photo-capture-widget\r\n [maxFileSize]=\"maxSizeMb * 1024 * 1024\"\r\n (photoCaptured)=\"uploadImage($event)\"\r\n >\r\n </photo-capture-widget>\r\n </ng-container>\r\n\r\n <!-- SOUND TYPE WIDGET -->\r\n <ng-container *ngIf=\"widgetNeeded(uploadWidgetType.SOUND) || widgetNeeded(uploadWidgetType.ALL)\">\r\n <voice-record-widget (recordingSaved)=\"uploadRecording($event)\"> </voice-record-widget>\r\n </ng-container>\r\n @if(compLib === componentLibrary.PRIMENG) {\r\n <prime-file-uploader\r\n #fileUploadPrimeNg\r\n [isMultiple]=\"isMultiple\"\r\n [autoUpload]=\"autoUpload\"\r\n [fileFormats]=\"fileFormats\"\r\n [maxSizeMb]=\"maxSizeMb\"\r\n [title]=\"uploadDescriptor?.title\"\r\n [subTitle]=\"uploadDescriptor?.description\"\r\n [isDisabled]=\"isDisabled\"\r\n (uploadFilesEvent)=\"uploadFiles($event)\"\r\n />\r\n }@else{\r\n <smartfileuploader\r\n #fileUploadMaterial\r\n [i18n]=\"i18n\"\r\n [fileFormats]=\"fileFormats\"\r\n [maxSizeMb]=\"maxSizeMb\"\r\n [uploadCallback]=\"upload.bind(this)\"\r\n [isMultiple]=\"isMultiple\"\r\n [autoUpload]=\"autoUpload\"\r\n [isDisabled]=\"isDisabled\"\r\n ></smartfileuploader>\r\n }\r\n</div>\r\n", styles: ["photo-capture-widget{width:100%;max-width:100%;overflow:hidden;display:flex;flex-direction:column;align-items:center}@media (max-width: 900px){:host{width:100%}}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.SmartfileuploaderComponent, selector: "smartfileuploader", inputs: ["uploadCallback", "fileFormats", "maxSizeMb", "i18n", "useIconButton", "isMultiple", "autoUpload", "isDisabled"] }, { kind: "component", type: i3.VoiceRecordWidgetComponent, selector: "voice-record-widget", outputs: ["recordingSaved"] }, { kind: "component", type: i4.PhotoCaptureWidgetComponent, selector: "photo-capture-widget", inputs: ["maxFileSize"], outputs: ["photoCaptured"] }, { kind: "component", type: i5.PrimeFileUploaderComponent, selector: "prime-file-uploader", inputs: ["isMultiple", "autoUpload", "maxSizeMb", "fileFormats", "title", "subTitle", "isDisabled"], outputs: ["uploadFilesEvent"] }] }); }
109
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.11", type: UploadWidgetComponent, selector: "smart-upload-widget", inputs: { uploadDescriptor: "uploadDescriptor", isMultiple: "isMultiple", isDisabled: "isDisabled" }, outputs: { uploadFilesEvent: "uploadFilesEvent" }, viewQueries: [{ propertyName: "fileUploadPrime", first: true, predicate: ["fileUploadPrimeNg"], descendants: true }, { propertyName: "fileUploadMaterial", first: true, predicate: ["fileUploadMaterial"], descendants: true }], ngImport: i0, template: "<div class=\"sb4UploadWidget\">\r\n <!-- IMAGE TYPE WIDGET -->\r\n <ng-container *ngIf=\"widgetNeeded(uploadWidgetType.IMAGE) || widgetNeeded(uploadWidgetType.ALL)\">\r\n <photo-capture-widget\r\n [maxFileSize]=\"maxSizeMb * 1024 * 1024\"\r\n (photoCaptured)=\"uploadImage($event)\"\r\n >\r\n </photo-capture-widget>\r\n </ng-container>\r\n\r\n <!-- SOUND TYPE WIDGET -->\r\n <ng-container *ngIf=\"widgetNeeded(uploadWidgetType.SOUND) || widgetNeeded(uploadWidgetType.ALL)\">\r\n <voice-record-widget (recordingSaved)=\"uploadRecording($event)\"> </voice-record-widget>\r\n </ng-container>\r\n @if (compLib === componentLibrary.PRIMENG) {\r\n <prime-file-uploader\r\n #fileUploadPrimeNg\r\n [isMultiple]=\"isMultiple\"\r\n [autoUpload]=\"autoUpload\"\r\n [fileFormats]=\"fileFormats\"\r\n [maxSizeMb]=\"maxSizeMb\"\r\n [title]=\"uploadDescriptor?.title\"\r\n [subTitle]=\"uploadDescriptor?.description\"\r\n [isDisabled]=\"isDisabled\"\r\n (uploadFilesEvent)=\"uploadFiles($event)\"\r\n />\r\n } @else {\r\n <smartfileuploader\r\n #fileUploadMaterial\r\n [i18n]=\"i18n\"\r\n [fileFormats]=\"fileFormats\"\r\n [maxSizeMb]=\"maxSizeMb\"\r\n [uploadCallback]=\"upload.bind(this)\"\r\n [isMultiple]=\"isMultiple\"\r\n [autoUpload]=\"autoUpload\"\r\n [isDisabled]=\"isDisabled\"\r\n ></smartfileuploader>\r\n }\r\n</div>\r\n", styles: ["photo-capture-widget{width:100%;max-width:100%;overflow:hidden;display:flex;flex-direction:column;align-items:center}voice-record-widget{padding:.5rem;border-bottom:1px solid #e5e7eb}voice-record-widget ::ng-deep .sb4-red,voice-record-widget ::ng-deep .sb4-primary,voice-record-widget ::ng-deep ui-action-button{border:unset!important}@media (max-width: 900px){:host{width:100%}}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.SmartfileuploaderComponent, selector: "smartfileuploader", inputs: ["uploadCallback", "fileFormats", "maxSizeMb", "i18n", "useIconButton", "isMultiple", "autoUpload", "isDisabled"] }, { kind: "component", type: i3.VoiceRecordWidgetComponent, selector: "voice-record-widget", inputs: ["openDirection"], outputs: ["recordingSaved"] }, { kind: "component", type: i4.PhotoCaptureWidgetComponent, selector: "photo-capture-widget", inputs: ["maxFileSize"], outputs: ["photoCaptured"] }, { kind: "component", type: i5.PrimeFileUploaderComponent, selector: "prime-file-uploader", inputs: ["isMultiple", "autoUpload", "maxSizeMb", "fileFormats", "title", "subTitle", "isDisabled"], outputs: ["uploadFilesEvent"] }] }); }
110
110
  }
111
111
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: UploadWidgetComponent, decorators: [{
112
112
  type: Component,
113
- args: [{ selector: 'smart-upload-widget', template: "<div class=\"sb4UploadWidget\">\r\n <!-- IMAGE TYPE WIDGET -->\r\n <ng-container *ngIf=\"widgetNeeded(uploadWidgetType.IMAGE) || widgetNeeded(uploadWidgetType.ALL)\">\r\n <photo-capture-widget\r\n [maxFileSize]=\"maxSizeMb * 1024 * 1024\"\r\n (photoCaptured)=\"uploadImage($event)\"\r\n >\r\n </photo-capture-widget>\r\n </ng-container>\r\n\r\n <!-- SOUND TYPE WIDGET -->\r\n <ng-container *ngIf=\"widgetNeeded(uploadWidgetType.SOUND) || widgetNeeded(uploadWidgetType.ALL)\">\r\n <voice-record-widget (recordingSaved)=\"uploadRecording($event)\"> </voice-record-widget>\r\n </ng-container>\r\n @if(compLib === componentLibrary.PRIMENG) {\r\n <prime-file-uploader\r\n #fileUploadPrimeNg\r\n [isMultiple]=\"isMultiple\"\r\n [autoUpload]=\"autoUpload\"\r\n [fileFormats]=\"fileFormats\"\r\n [maxSizeMb]=\"maxSizeMb\"\r\n [title]=\"uploadDescriptor?.title\"\r\n [subTitle]=\"uploadDescriptor?.description\"\r\n [isDisabled]=\"isDisabled\"\r\n (uploadFilesEvent)=\"uploadFiles($event)\"\r\n />\r\n }@else{\r\n <smartfileuploader\r\n #fileUploadMaterial\r\n [i18n]=\"i18n\"\r\n [fileFormats]=\"fileFormats\"\r\n [maxSizeMb]=\"maxSizeMb\"\r\n [uploadCallback]=\"upload.bind(this)\"\r\n [isMultiple]=\"isMultiple\"\r\n [autoUpload]=\"autoUpload\"\r\n [isDisabled]=\"isDisabled\"\r\n ></smartfileuploader>\r\n }\r\n</div>\r\n", styles: ["photo-capture-widget{width:100%;max-width:100%;overflow:hidden;display:flex;flex-direction:column;align-items:center}@media (max-width: 900px){:host{width:100%}}\n"] }]
113
+ args: [{ selector: 'smart-upload-widget', template: "<div class=\"sb4UploadWidget\">\r\n <!-- IMAGE TYPE WIDGET -->\r\n <ng-container *ngIf=\"widgetNeeded(uploadWidgetType.IMAGE) || widgetNeeded(uploadWidgetType.ALL)\">\r\n <photo-capture-widget\r\n [maxFileSize]=\"maxSizeMb * 1024 * 1024\"\r\n (photoCaptured)=\"uploadImage($event)\"\r\n >\r\n </photo-capture-widget>\r\n </ng-container>\r\n\r\n <!-- SOUND TYPE WIDGET -->\r\n <ng-container *ngIf=\"widgetNeeded(uploadWidgetType.SOUND) || widgetNeeded(uploadWidgetType.ALL)\">\r\n <voice-record-widget (recordingSaved)=\"uploadRecording($event)\"> </voice-record-widget>\r\n </ng-container>\r\n @if (compLib === componentLibrary.PRIMENG) {\r\n <prime-file-uploader\r\n #fileUploadPrimeNg\r\n [isMultiple]=\"isMultiple\"\r\n [autoUpload]=\"autoUpload\"\r\n [fileFormats]=\"fileFormats\"\r\n [maxSizeMb]=\"maxSizeMb\"\r\n [title]=\"uploadDescriptor?.title\"\r\n [subTitle]=\"uploadDescriptor?.description\"\r\n [isDisabled]=\"isDisabled\"\r\n (uploadFilesEvent)=\"uploadFiles($event)\"\r\n />\r\n } @else {\r\n <smartfileuploader\r\n #fileUploadMaterial\r\n [i18n]=\"i18n\"\r\n [fileFormats]=\"fileFormats\"\r\n [maxSizeMb]=\"maxSizeMb\"\r\n [uploadCallback]=\"upload.bind(this)\"\r\n [isMultiple]=\"isMultiple\"\r\n [autoUpload]=\"autoUpload\"\r\n [isDisabled]=\"isDisabled\"\r\n ></smartfileuploader>\r\n }\r\n</div>\r\n", styles: ["photo-capture-widget{width:100%;max-width:100%;overflow:hidden;display:flex;flex-direction:column;align-items:center}voice-record-widget{padding:.5rem;border-bottom:1px solid #e5e7eb}voice-record-widget ::ng-deep .sb4-red,voice-record-widget ::ng-deep .sb4-primary,voice-record-widget ::ng-deep ui-action-button{border:unset!important}@media (max-width: 900px){:host{width:100%}}\n"] }]
114
114
  }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i6.ComponentLibrary, decorators: [{
115
115
  type: Inject,
116
116
  args: [COMPONENT_LIBRARY]
@@ -131,4 +131,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
131
131
  }], uploadFilesEvent: [{
132
132
  type: Output
133
133
  }] } });
134
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLXdpZGdldC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi92aWV3LWNvbnRleHQvc21hcnQtdWktYWN0aW9uL2NvbXBvbmVudHMvdXBsb2FkLXdpZGdldC91cGxvYWQtd2lkZ2V0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LW5nLWNsaWVudC9zcmMvbGliL3ZpZXctY29udGV4dC9zbWFydC11aS1hY3Rpb24vY29tcG9uZW50cy91cGxvYWQtd2lkZ2V0L3VwbG9hZC13aWRnZXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFDTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQTRCLGdCQUFnQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDOzs7Ozs7OztBQVV4RixNQUFNLE9BQU8scUJBQXFCO0lBb0JoQyxZQUNVLEdBQXNCLEVBQ2dCLE9BQTBCO1FBRGhFLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ2dCLFlBQU8sR0FBUCxPQUFPLENBQW1CO1FBbEJqRSxxQkFBZ0IsR0FBOEIsSUFBSSxDQUFDLHVCQUF1QixDQUFDO1FBRTNFLGVBQVUsR0FBYSxLQUFLLENBQUM7UUFFNUIscUJBQWdCLEdBQUcsSUFBSSxZQUFZLEVBR3pDLENBQUM7UUFFTCxxQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQztRQUNwQyxxQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQztRQUVwQyxjQUFTLEdBQVcsRUFBRSxDQUFDO1FBUXJCLElBQUks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Z0JBRXRCLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBRUksZ0JBQWdCO3NCQUF6QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDb21wb25lbnQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIEluamVjdCxcclxuICBJbnB1dCxcclxuICBPcHRpb25hbCxcclxuICBPdXRwdXQsXHJcbiAgVmlld0NoaWxkLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBVaUFjdGlvblVwbG9hZERlc2NyaXB0b3IsIFVwbG9hZFdpZGdldFR5cGUgfSBmcm9tICcuLi8uLi8uLi9hcGknO1xyXG5pbXBvcnQgeyBDT01QT05FTlRfTElCUkFSWSwgQ29tcG9uZW50TGlicmFyeSB9IGZyb20gJy4uLy4uLy4uL3V0aWxpdHkvY29tcG9uZW50TGlicmFyeSc7XHJcbmltcG9ydCB7IFNtYXJ0ZmlsZXVwbG9hZGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vc21hcnQtZm9ybS9zbWFydGZpbGV1cGxvYWRlci9zbWFydGZpbGV1cGxvYWRlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBTbWFydEZpbGVVcGxvYWRlckkxOG4gfSBmcm9tICcuLi8uLi8uLi8uLi9zbWFydC1mb3JtL3NtYXJ0ZmlsZXVwbG9hZGVyL3NtYXJ0ZmlsZXVwbG9hZGVyLm1vZGVsJztcclxuaW1wb3J0IHsgUHJpbWVGaWxlVXBsb2FkZXJDb21wb25lbnQgfSBmcm9tICcuL3ByaW1lLWZpbGUtdXBsb2FkZXIvcHJpbWUtZmlsZS11cGxvYWRlci5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdzbWFydC11cGxvYWQtd2lkZ2V0JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdXBsb2FkLXdpZGdldC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL3VwbG9hZC13aWRnZXQuY29tcG9uZW50LmNzcycsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBVcGxvYWRXaWRnZXRDb21wb25lbnQge1xyXG4gIEBWaWV3Q2hpbGQoJ2ZpbGVVcGxvYWRQcmltZU5nJykgZmlsZVVwbG9hZFByaW1lITogUHJpbWVGaWxlVXBsb2FkZXJDb21wb25lbnQ7XHJcbiAgQFZpZXdDaGlsZCgnZmlsZVVwbG9hZE1hdGVyaWFsJykgZmlsZVVwbG9hZE1hdGVyaWFsITogU21hcnRmaWxldXBsb2FkZXJDb21wb25lbnQ7XHJcblxyXG4gIEBJbnB1dCgpIHVwbG9hZERlc2NyaXB0b3I/OiBVaUFjdGlvblVwbG9hZERlc2NyaXB0b3IgPSB0aGlzLmRlZmF1bHRVcGxvYWREZXNjcmlwdG9yO1xyXG4gIEBJbnB1dCgpIGlzTXVsdGlwbGUhOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGlzRGlzYWJsZWQ/OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBPdXRwdXQoKSB1cGxvYWRGaWxlc0V2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjx7XHJcbiAgICBmaWxlczogYW55W107XHJcbiAgICB1cGxvYWREZXNjcmlwdG9yPzogVWlBY3Rpb25VcGxvYWREZXNjcmlwdG9yO1xyXG4gIH0+KCk7XHJcblxyXG4gIGNvbXBvbmVudExpYnJhcnkgPSBDb21wb25lbnRMaWJyYXJ5O1xyXG4gIHVwbG9hZFdpZGdldFR5cGUgPSBVcGxvYWRXaWRnZXRUeXBlO1xyXG4gIGkxOG4/OiBTbWFydEZpbGVVcGxvYWRlckkxOG47XHJcbiAgbWF4U2l6ZU1iOiBudW1iZXIgPSAyNTtcclxuICBmaWxlRm9ybWF0cz86IHN0cmluZ1tdO1xyXG4gIGF1dG9VcGxvYWQ/OiBib29sZWFuO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIEBJbmplY3QoQ09NUE9ORU5UX0xJQlJBUlkpIEBPcHRpb25hbCgpIHB1YmxpYyBjb21wTGliPzogQ29tcG9uZW50TGlicmFyeVxyXG4gICkge1xyXG4gICAgdGhpcy5jb21wTGliID0gY29tcExpYiA/PyBDb21wb25lbnRMaWJyYXJ5LlBSSU1FTkc7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuYXV0b1VwbG9hZCA9IHRoaXMudXBsb2FkRGVzY3JpcHRvcj8uYXV0b1VwbG9hZCA/PyBmYWxzZTtcclxuICAgIHRoaXMuc2V0VXAoKTtcclxuICB9XHJcblxyXG4gIGlzTW9iaWxlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIC9pUGhvbmV8aVBhZHxpUG9kfEFuZHJvaWQvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgc2V0VXAoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLm1heFNpemVNYiA9IE51bWJlcih0aGlzLnVwbG9hZERlc2NyaXB0b3I/Lm1heFNpemUgPz8gMjUpO1xyXG4gICAgaWYgKHRoaXMudXBsb2FkRGVzY3JpcHRvcj8uZm9ybWF0cykge1xyXG4gICAgICB0aGlzLmZpbGVGb3JtYXRzID0gW3RoaXMudXBsb2FkRGVzY3JpcHRvciEuZm9ybWF0c107XHJcbiAgICB9XHJcblxyXG4gICAgLy8gZmlsZUZvcm1hdHMgPSB0aGlzLmRlc2NyaXB0b3IudXBsb2FkPy5mb3JtYXRzO1xyXG4gICAgdGhpcy5pMThuID0ge1xyXG4gICAgICBhZGRGaWxlOiB0aGlzLnVwbG9hZERlc2NyaXB0b3I/LnRpdGxlID8/ICdEb2t1bWVudHVtIGhvenrDoWFkw6FzYScsXHJcbiAgICAgIGJyb3dzZU9yRHJhZzogdGhpcy51cGxvYWREZXNjcmlwdG9yPy5kZXNjcmlwdGlvbiA/PyAndGFsbMOzesOhcyB2YWd5IGJlaMO6esOhcycsXHJcbiAgICAgIGZvcm1hdHM6IHRoaXMudXBsb2FkRGVzY3JpcHRvcj8uZm9ybWF0cyA/PyAnJyxcclxuICAgICAgbWF4U2l6ZTogYG1heC4gJHt0aGlzLm1heFNpemVNYn0gTUJgLFxyXG4gICAgICB1cGxvYWQ6IHRoaXMudXBsb2FkRGVzY3JpcHRvcj8udXBsb2FkQnV0dG9uVGl0bGUgPz8gJ0ZlbHTDtmx0w6lzJyxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICB1cGxvYWQoZmlsZXM6IGFueVtdKTogdm9pZCB7XHJcbiAgICB0aGlzLnVwbG9hZEZpbGVzRXZlbnQuZW1pdCh7XHJcbiAgICAgIGZpbGVzLFxyXG4gICAgICB1cGxvYWREZXNjcmlwdG9yOiB0aGlzLnVwbG9hZERlc2NyaXB0b3IsXHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmZpbGVVcGxvYWRNYXRlcmlhbC5maWxlcyA9IFtdO1xyXG4gIH1cclxuXHJcbiAgdXBsb2FkRmlsZXMoZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy51cGxvYWRGaWxlc0V2ZW50LmVtaXQoe1xyXG4gICAgICBmaWxlczogZXZlbnQuZmlsZXMsXHJcbiAgICAgIHVwbG9hZERlc2NyaXB0b3I6IGV2ZW50LnVwbG9hZERlc2NyaXB0b3IsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHVwbG9hZFJlY29yZGluZyhmaWxlOiBhbnkpIHtcclxuICAgIHRoaXMubG9hZEZpbGVzSW50b1dpZGdldChbZmlsZV0pO1xyXG4gIH1cclxuXHJcbiAgdXBsb2FkSW1hZ2UoZmlsZXM6IGFueSkge1xyXG4gICAgdGhpcy5sb2FkRmlsZXNJbnRvV2lkZ2V0KGZpbGVzKTtcclxuICB9XHJcblxyXG4gIGxvYWRGaWxlc0ludG9XaWRnZXQoZmlsZXM6IEZpbGVbXSkge1xyXG4gICAgaWYgKENvbXBvbmVudExpYnJhcnkuUFJJTUVORyA9PT0gdGhpcy5jb21wTGliKSB7XHJcbiAgICAgIGNvbnN0IGRhdGFUcmFuc2ZlciA9IG5ldyBEYXRhVHJhbnNmZXIoKTtcclxuICAgICAgY29uc3QgZXhpc3RpbmdGaWxlcyA9IEFycmF5LmZyb20odGhpcy5maWxlVXBsb2FkUHJpbWUuZmlsZXMpO1xyXG5cclxuICAgICAgZXhpc3RpbmdGaWxlcy5mb3JFYWNoKChmaWxlKSA9PiB7XHJcbiAgICAgICAgZGF0YVRyYW5zZmVyLml0ZW1zLmFkZChmaWxlKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuICAgICAgICBkYXRhVHJhbnNmZXIuaXRlbXMuYWRkKGZpbGUpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBmaWxlTGlzdDogRmlsZUxpc3QgPSBkYXRhVHJhbnNmZXIuZmlsZXM7XHJcblxyXG4gICAgICBjb25zdCBmYWtlRXZlbnQgPSB7XHJcbiAgICAgICAgdGFyZ2V0OiB7XHJcbiAgICAgICAgICBmaWxlczogZmlsZUxpc3QsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB0eXBlOiAnY2hhbmdlJyxcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHRoaXMuZmlsZVVwbG9hZFByaW1lLm9uRmlsZVNlbGVjdChmYWtlRXZlbnQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMuYXV0b1VwbG9hZCkge1xyXG4gICAgICAgIHRoaXMudXBsb2FkRmlsZXNFdmVudC5lbWl0KHtcclxuICAgICAgICAgIGZpbGVzOiBmaWxlcyxcclxuICAgICAgICAgIHVwbG9hZERlc2NyaXB0b3I6IHRoaXMudXBsb2FkRGVzY3JpcHRvcixcclxuICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmZpbGVVcGxvYWRNYXRlcmlhbC5maWxlcy5wdXNoKC4uLmZpbGVzKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgd2lkZ2V0TmVlZGVkKHR5cGU6IFVwbG9hZFdpZGdldFR5cGUpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnVwbG9hZERlc2NyaXB0b3I/LnVwbG9hZFdpZGdldHM/LmluY2x1ZGVzKHR5cGUpID8/IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgY2hvb3NlKGV2ZW50OiBhbnksIGNhbGxiYWNrOiBhbnkpIHtcclxuICAgIGNhbGxiYWNrKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgZGVmYXVsdFVwbG9hZERlc2NyaXB0b3IoKTogVWlBY3Rpb25VcGxvYWREZXNjcmlwdG9yIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHRpdGxlOiAnRG9rdW1lbnR1bSBob3p6w6FhZMOhc2EnLFxyXG4gICAgICBkZXNjcmlwdGlvbjogJ3RhbGzDs3rDoXMgdmFneSBiZWjDunrDoXMnLFxyXG4gICAgICBtYXhTaXplOiAnMjUnLFxyXG4gICAgICBhdXRvVXBsb2FkOiBmYWxzZSxcclxuICAgIH07XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJzYjRVcGxvYWRXaWRnZXRcIj5cclxuICA8IS0tIElNQUdFIFRZUEUgV0lER0VUIC0tPlxyXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJ3aWRnZXROZWVkZWQodXBsb2FkV2lkZ2V0VHlwZS5JTUFHRSkgfHwgd2lkZ2V0TmVlZGVkKHVwbG9hZFdpZGdldFR5cGUuQUxMKVwiPlxyXG4gICAgPHBob3RvLWNhcHR1cmUtd2lkZ2V0XHJcbiAgICAgIFttYXhGaWxlU2l6ZV09XCJtYXhTaXplTWIgKiAxMDI0ICogMTAyNFwiXHJcbiAgICAgIChwaG90b0NhcHR1cmVkKT1cInVwbG9hZEltYWdlKCRldmVudClcIlxyXG4gICAgPlxyXG4gICAgPC9waG90by1jYXB0dXJlLXdpZGdldD5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgPCEtLSBTT1VORCBUWVBFIFdJREdFVCAtLT5cclxuICA8bmctY29udGFpbmVyICpuZ0lmPVwid2lkZ2V0TmVlZGVkKHVwbG9hZFdpZGdldFR5cGUuU09VTkQpIHx8IHdpZGdldE5lZWRlZCh1cGxvYWRXaWRnZXRUeXBlLkFMTClcIj5cclxuICAgIDx2b2ljZS1yZWNvcmQtd2lkZ2V0IChyZWNvcmRpbmdTYXZlZCk9XCJ1cGxvYWRSZWNvcmRpbmcoJGV2ZW50KVwiPiA8L3ZvaWNlLXJlY29yZC13aWRnZXQ+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcbiAgQGlmKGNvbXBMaWIgPT09IGNvbXBvbmVudExpYnJhcnkuUFJJTUVORykge1xyXG4gIDxwcmltZS1maWxlLXVwbG9hZGVyXHJcbiAgICAjZmlsZVVwbG9hZFByaW1lTmdcclxuICAgIFtpc011bHRpcGxlXT1cImlzTXVsdGlwbGVcIlxyXG4gICAgW2F1dG9VcGxvYWRdPVwiYXV0b1VwbG9hZFwiXHJcbiAgICBbZmlsZUZvcm1hdHNdPVwiZmlsZUZvcm1hdHNcIlxyXG4gICAgW21heFNpemVNYl09XCJtYXhTaXplTWJcIlxyXG4gICAgW3RpdGxlXT1cInVwbG9hZERlc2NyaXB0b3I/LnRpdGxlXCJcclxuICAgIFtzdWJUaXRsZV09XCJ1cGxvYWREZXNjcmlwdG9yPy5kZXNjcmlwdGlvblwiXHJcbiAgICBbaXNEaXNhYmxlZF09XCJpc0Rpc2FibGVkXCJcclxuICAgICh1cGxvYWRGaWxlc0V2ZW50KT1cInVwbG9hZEZpbGVzKCRldmVudClcIlxyXG4gIC8+XHJcbiAgfUBlbHNle1xyXG4gIDxzbWFydGZpbGV1cGxvYWRlclxyXG4gICAgI2ZpbGVVcGxvYWRNYXRlcmlhbFxyXG4gICAgW2kxOG5dPVwiaTE4blwiXHJcbiAgICBbZmlsZUZvcm1hdHNdPVwiZmlsZUZvcm1hdHNcIlxyXG4gICAgW21heFNpemVNYl09XCJtYXhTaXplTWJcIlxyXG4gICAgW3VwbG9hZENhbGxiYWNrXT1cInVwbG9hZC5iaW5kKHRoaXMpXCJcclxuICAgIFtpc011bHRpcGxlXT1cImlzTXVsdGlwbGVcIlxyXG4gICAgW2F1dG9VcGxvYWRdPVwiYXV0b1VwbG9hZFwiXHJcbiAgICBbaXNEaXNhYmxlZF09XCJpc0Rpc2FibGVkXCJcclxuICA+PC9zbWFydGZpbGV1cGxvYWRlcj5cclxuICB9XHJcbjwvZGl2PlxyXG4iXX0=
134
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLXdpZGdldC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi92aWV3LWNvbnRleHQvc21hcnQtdWktYWN0aW9uL2NvbXBvbmVudHMvdXBsb2FkLXdpZGdldC91cGxvYWQtd2lkZ2V0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LW5nLWNsaWVudC9zcmMvbGliL3ZpZXctY29udGV4dC9zbWFydC11aS1hY3Rpb24vY29tcG9uZW50cy91cGxvYWQtd2lkZ2V0L3VwbG9hZC13aWRnZXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFDTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQTRCLGdCQUFnQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDOzs7Ozs7OztBQVV4RixNQUFNLE9BQU8scUJBQXFCO0lBb0JoQyxZQUNVLEdBQXNCLEVBQ2dCLE9BQTBCO1FBRGhFLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ2dCLFlBQU8sR0FBUCxPQUFPLENBQW1CO1FBbEJqRSxxQkFBZ0IsR0FBOEIsSUFBSSxDQUFDLHVCQUF1QixDQUFDO1FBRTNFLGVBQVUsR0FBYSxLQUFLLENBQUM7UUFFNUIscUJBQWdCLEdBQUcsSUFBSSxZQUFZLEVBR3pDLENBQUM7UUFFTCxxQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQztRQUNwQyxxQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQztRQUVwQyxjQUFTLEdBQVcsRUFBRSxDQUFDO1FBUXJCLElBQUks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Z0JBRXRCLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBRUksZ0JBQWdCO3NCQUF6QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDb21wb25lbnQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIEluamVjdCxcclxuICBJbnB1dCxcclxuICBPcHRpb25hbCxcclxuICBPdXRwdXQsXHJcbiAgVmlld0NoaWxkLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBVaUFjdGlvblVwbG9hZERlc2NyaXB0b3IsIFVwbG9hZFdpZGdldFR5cGUgfSBmcm9tICcuLi8uLi8uLi9hcGknO1xyXG5pbXBvcnQgeyBDT01QT05FTlRfTElCUkFSWSwgQ29tcG9uZW50TGlicmFyeSB9IGZyb20gJy4uLy4uLy4uL3V0aWxpdHkvY29tcG9uZW50TGlicmFyeSc7XHJcbmltcG9ydCB7IFNtYXJ0ZmlsZXVwbG9hZGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vc21hcnQtZm9ybS9zbWFydGZpbGV1cGxvYWRlci9zbWFydGZpbGV1cGxvYWRlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBTbWFydEZpbGVVcGxvYWRlckkxOG4gfSBmcm9tICcuLi8uLi8uLi8uLi9zbWFydC1mb3JtL3NtYXJ0ZmlsZXVwbG9hZGVyL3NtYXJ0ZmlsZXVwbG9hZGVyLm1vZGVsJztcclxuaW1wb3J0IHsgUHJpbWVGaWxlVXBsb2FkZXJDb21wb25lbnQgfSBmcm9tICcuL3ByaW1lLWZpbGUtdXBsb2FkZXIvcHJpbWUtZmlsZS11cGxvYWRlci5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdzbWFydC11cGxvYWQtd2lkZ2V0JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdXBsb2FkLXdpZGdldC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL3VwbG9hZC13aWRnZXQuY29tcG9uZW50LmNzcycsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBVcGxvYWRXaWRnZXRDb21wb25lbnQge1xyXG4gIEBWaWV3Q2hpbGQoJ2ZpbGVVcGxvYWRQcmltZU5nJykgZmlsZVVwbG9hZFByaW1lITogUHJpbWVGaWxlVXBsb2FkZXJDb21wb25lbnQ7XHJcbiAgQFZpZXdDaGlsZCgnZmlsZVVwbG9hZE1hdGVyaWFsJykgZmlsZVVwbG9hZE1hdGVyaWFsITogU21hcnRmaWxldXBsb2FkZXJDb21wb25lbnQ7XHJcblxyXG4gIEBJbnB1dCgpIHVwbG9hZERlc2NyaXB0b3I/OiBVaUFjdGlvblVwbG9hZERlc2NyaXB0b3IgPSB0aGlzLmRlZmF1bHRVcGxvYWREZXNjcmlwdG9yO1xyXG4gIEBJbnB1dCgpIGlzTXVsdGlwbGUhOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGlzRGlzYWJsZWQ/OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBPdXRwdXQoKSB1cGxvYWRGaWxlc0V2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjx7XHJcbiAgICBmaWxlczogYW55W107XHJcbiAgICB1cGxvYWREZXNjcmlwdG9yPzogVWlBY3Rpb25VcGxvYWREZXNjcmlwdG9yO1xyXG4gIH0+KCk7XHJcblxyXG4gIGNvbXBvbmVudExpYnJhcnkgPSBDb21wb25lbnRMaWJyYXJ5O1xyXG4gIHVwbG9hZFdpZGdldFR5cGUgPSBVcGxvYWRXaWRnZXRUeXBlO1xyXG4gIGkxOG4/OiBTbWFydEZpbGVVcGxvYWRlckkxOG47XHJcbiAgbWF4U2l6ZU1iOiBudW1iZXIgPSAyNTtcclxuICBmaWxlRm9ybWF0cz86IHN0cmluZ1tdO1xyXG4gIGF1dG9VcGxvYWQ/OiBib29sZWFuO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIEBJbmplY3QoQ09NUE9ORU5UX0xJQlJBUlkpIEBPcHRpb25hbCgpIHB1YmxpYyBjb21wTGliPzogQ29tcG9uZW50TGlicmFyeVxyXG4gICkge1xyXG4gICAgdGhpcy5jb21wTGliID0gY29tcExpYiA/PyBDb21wb25lbnRMaWJyYXJ5LlBSSU1FTkc7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuYXV0b1VwbG9hZCA9IHRoaXMudXBsb2FkRGVzY3JpcHRvcj8uYXV0b1VwbG9hZCA/PyBmYWxzZTtcclxuICAgIHRoaXMuc2V0VXAoKTtcclxuICB9XHJcblxyXG4gIGlzTW9iaWxlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIC9pUGhvbmV8aVBhZHxpUG9kfEFuZHJvaWQvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgc2V0VXAoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLm1heFNpemVNYiA9IE51bWJlcih0aGlzLnVwbG9hZERlc2NyaXB0b3I/Lm1heFNpemUgPz8gMjUpO1xyXG4gICAgaWYgKHRoaXMudXBsb2FkRGVzY3JpcHRvcj8uZm9ybWF0cykge1xyXG4gICAgICB0aGlzLmZpbGVGb3JtYXRzID0gW3RoaXMudXBsb2FkRGVzY3JpcHRvciEuZm9ybWF0c107XHJcbiAgICB9XHJcblxyXG4gICAgLy8gZmlsZUZvcm1hdHMgPSB0aGlzLmRlc2NyaXB0b3IudXBsb2FkPy5mb3JtYXRzO1xyXG4gICAgdGhpcy5pMThuID0ge1xyXG4gICAgICBhZGRGaWxlOiB0aGlzLnVwbG9hZERlc2NyaXB0b3I/LnRpdGxlID8/ICdEb2t1bWVudHVtIGhvenrDoWFkw6FzYScsXHJcbiAgICAgIGJyb3dzZU9yRHJhZzogdGhpcy51cGxvYWREZXNjcmlwdG9yPy5kZXNjcmlwdGlvbiA/PyAndGFsbMOzesOhcyB2YWd5IGJlaMO6esOhcycsXHJcbiAgICAgIGZvcm1hdHM6IHRoaXMudXBsb2FkRGVzY3JpcHRvcj8uZm9ybWF0cyA/PyAnJyxcclxuICAgICAgbWF4U2l6ZTogYG1heC4gJHt0aGlzLm1heFNpemVNYn0gTUJgLFxyXG4gICAgICB1cGxvYWQ6IHRoaXMudXBsb2FkRGVzY3JpcHRvcj8udXBsb2FkQnV0dG9uVGl0bGUgPz8gJ0ZlbHTDtmx0w6lzJyxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICB1cGxvYWQoZmlsZXM6IGFueVtdKTogdm9pZCB7XHJcbiAgICB0aGlzLnVwbG9hZEZpbGVzRXZlbnQuZW1pdCh7XHJcbiAgICAgIGZpbGVzLFxyXG4gICAgICB1cGxvYWREZXNjcmlwdG9yOiB0aGlzLnVwbG9hZERlc2NyaXB0b3IsXHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmZpbGVVcGxvYWRNYXRlcmlhbC5maWxlcyA9IFtdO1xyXG4gIH1cclxuXHJcbiAgdXBsb2FkRmlsZXMoZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy51cGxvYWRGaWxlc0V2ZW50LmVtaXQoe1xyXG4gICAgICBmaWxlczogZXZlbnQuZmlsZXMsXHJcbiAgICAgIHVwbG9hZERlc2NyaXB0b3I6IGV2ZW50LnVwbG9hZERlc2NyaXB0b3IsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHVwbG9hZFJlY29yZGluZyhmaWxlOiBhbnkpIHtcclxuICAgIHRoaXMubG9hZEZpbGVzSW50b1dpZGdldChbZmlsZV0pO1xyXG4gIH1cclxuXHJcbiAgdXBsb2FkSW1hZ2UoZmlsZXM6IGFueSkge1xyXG4gICAgdGhpcy5sb2FkRmlsZXNJbnRvV2lkZ2V0KGZpbGVzKTtcclxuICB9XHJcblxyXG4gIGxvYWRGaWxlc0ludG9XaWRnZXQoZmlsZXM6IEZpbGVbXSkge1xyXG4gICAgaWYgKENvbXBvbmVudExpYnJhcnkuUFJJTUVORyA9PT0gdGhpcy5jb21wTGliKSB7XHJcbiAgICAgIGNvbnN0IGRhdGFUcmFuc2ZlciA9IG5ldyBEYXRhVHJhbnNmZXIoKTtcclxuICAgICAgY29uc3QgZXhpc3RpbmdGaWxlcyA9IEFycmF5LmZyb20odGhpcy5maWxlVXBsb2FkUHJpbWUuZmlsZXMpO1xyXG5cclxuICAgICAgZXhpc3RpbmdGaWxlcy5mb3JFYWNoKChmaWxlKSA9PiB7XHJcbiAgICAgICAgZGF0YVRyYW5zZmVyLml0ZW1zLmFkZChmaWxlKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuICAgICAgICBkYXRhVHJhbnNmZXIuaXRlbXMuYWRkKGZpbGUpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBmaWxlTGlzdDogRmlsZUxpc3QgPSBkYXRhVHJhbnNmZXIuZmlsZXM7XHJcblxyXG4gICAgICBjb25zdCBmYWtlRXZlbnQgPSB7XHJcbiAgICAgICAgdGFyZ2V0OiB7XHJcbiAgICAgICAgICBmaWxlczogZmlsZUxpc3QsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB0eXBlOiAnY2hhbmdlJyxcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHRoaXMuZmlsZVVwbG9hZFByaW1lLm9uRmlsZVNlbGVjdChmYWtlRXZlbnQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMuYXV0b1VwbG9hZCkge1xyXG4gICAgICAgIHRoaXMudXBsb2FkRmlsZXNFdmVudC5lbWl0KHtcclxuICAgICAgICAgIGZpbGVzOiBmaWxlcyxcclxuICAgICAgICAgIHVwbG9hZERlc2NyaXB0b3I6IHRoaXMudXBsb2FkRGVzY3JpcHRvcixcclxuICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmZpbGVVcGxvYWRNYXRlcmlhbC5maWxlcy5wdXNoKC4uLmZpbGVzKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgd2lkZ2V0TmVlZGVkKHR5cGU6IFVwbG9hZFdpZGdldFR5cGUpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnVwbG9hZERlc2NyaXB0b3I/LnVwbG9hZFdpZGdldHM/LmluY2x1ZGVzKHR5cGUpID8/IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgY2hvb3NlKGV2ZW50OiBhbnksIGNhbGxiYWNrOiBhbnkpIHtcclxuICAgIGNhbGxiYWNrKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgZGVmYXVsdFVwbG9hZERlc2NyaXB0b3IoKTogVWlBY3Rpb25VcGxvYWREZXNjcmlwdG9yIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHRpdGxlOiAnRG9rdW1lbnR1bSBob3p6w6FhZMOhc2EnLFxyXG4gICAgICBkZXNjcmlwdGlvbjogJ3RhbGzDs3rDoXMgdmFneSBiZWjDunrDoXMnLFxyXG4gICAgICBtYXhTaXplOiAnMjUnLFxyXG4gICAgICBhdXRvVXBsb2FkOiBmYWxzZSxcclxuICAgIH07XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJzYjRVcGxvYWRXaWRnZXRcIj5cclxuICA8IS0tIElNQUdFIFRZUEUgV0lER0VUIC0tPlxyXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJ3aWRnZXROZWVkZWQodXBsb2FkV2lkZ2V0VHlwZS5JTUFHRSkgfHwgd2lkZ2V0TmVlZGVkKHVwbG9hZFdpZGdldFR5cGUuQUxMKVwiPlxyXG4gICAgPHBob3RvLWNhcHR1cmUtd2lkZ2V0XHJcbiAgICAgIFttYXhGaWxlU2l6ZV09XCJtYXhTaXplTWIgKiAxMDI0ICogMTAyNFwiXHJcbiAgICAgIChwaG90b0NhcHR1cmVkKT1cInVwbG9hZEltYWdlKCRldmVudClcIlxyXG4gICAgPlxyXG4gICAgPC9waG90by1jYXB0dXJlLXdpZGdldD5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgPCEtLSBTT1VORCBUWVBFIFdJREdFVCAtLT5cclxuICA8bmctY29udGFpbmVyICpuZ0lmPVwid2lkZ2V0TmVlZGVkKHVwbG9hZFdpZGdldFR5cGUuU09VTkQpIHx8IHdpZGdldE5lZWRlZCh1cGxvYWRXaWRnZXRUeXBlLkFMTClcIj5cclxuICAgIDx2b2ljZS1yZWNvcmQtd2lkZ2V0IChyZWNvcmRpbmdTYXZlZCk9XCJ1cGxvYWRSZWNvcmRpbmcoJGV2ZW50KVwiPiA8L3ZvaWNlLXJlY29yZC13aWRnZXQ+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcbiAgQGlmIChjb21wTGliID09PSBjb21wb25lbnRMaWJyYXJ5LlBSSU1FTkcpIHtcclxuICAgIDxwcmltZS1maWxlLXVwbG9hZGVyXHJcbiAgICAgICNmaWxlVXBsb2FkUHJpbWVOZ1xyXG4gICAgICBbaXNNdWx0aXBsZV09XCJpc011bHRpcGxlXCJcclxuICAgICAgW2F1dG9VcGxvYWRdPVwiYXV0b1VwbG9hZFwiXHJcbiAgICAgIFtmaWxlRm9ybWF0c109XCJmaWxlRm9ybWF0c1wiXHJcbiAgICAgIFttYXhTaXplTWJdPVwibWF4U2l6ZU1iXCJcclxuICAgICAgW3RpdGxlXT1cInVwbG9hZERlc2NyaXB0b3I/LnRpdGxlXCJcclxuICAgICAgW3N1YlRpdGxlXT1cInVwbG9hZERlc2NyaXB0b3I/LmRlc2NyaXB0aW9uXCJcclxuICAgICAgW2lzRGlzYWJsZWRdPVwiaXNEaXNhYmxlZFwiXHJcbiAgICAgICh1cGxvYWRGaWxlc0V2ZW50KT1cInVwbG9hZEZpbGVzKCRldmVudClcIlxyXG4gICAgLz5cclxuICB9IEBlbHNlIHtcclxuICAgIDxzbWFydGZpbGV1cGxvYWRlclxyXG4gICAgICAjZmlsZVVwbG9hZE1hdGVyaWFsXHJcbiAgICAgIFtpMThuXT1cImkxOG5cIlxyXG4gICAgICBbZmlsZUZvcm1hdHNdPVwiZmlsZUZvcm1hdHNcIlxyXG4gICAgICBbbWF4U2l6ZU1iXT1cIm1heFNpemVNYlwiXHJcbiAgICAgIFt1cGxvYWRDYWxsYmFja109XCJ1cGxvYWQuYmluZCh0aGlzKVwiXHJcbiAgICAgIFtpc011bHRpcGxlXT1cImlzTXVsdGlwbGVcIlxyXG4gICAgICBbYXV0b1VwbG9hZF09XCJhdXRvVXBsb2FkXCJcclxuICAgICAgW2lzRGlzYWJsZWRdPVwiaXNEaXNhYmxlZFwiXHJcbiAgICA+PC9zbWFydGZpbGV1cGxvYWRlcj5cclxuICB9XHJcbjwvZGl2PlxyXG4iXX0=
@@ -1,4 +1,4 @@
1
- import { Component, ViewChild, Inject, Optional, EventEmitter, Output, } from '@angular/core';
1
+ import { Component, ElementRef, ViewChild, Input, Inject, Optional, EventEmitter, Output, } from '@angular/core';
2
2
  import WaveSurfer from 'wavesurfer.js';
3
3
  import RecordPlugin from 'wavesurfer.js/dist/plugins/record.js';
4
4
  import { COMPONENT_LIBRARY, ComponentLibrary } from '../../../../utility/componentLibrary';
@@ -6,15 +6,18 @@ import { IconPosition, UiActionButtonType } from '../../../../api';
6
6
  import * as i0 from "@angular/core";
7
7
  import * as i1 from "@angular/common";
8
8
  import * as i2 from "../../../ui-action-button/ui-action-button.component";
9
- import * as i3 from "../../../../utility/componentLibrary";
10
9
  export class VoiceRecordWidgetComponent {
11
- constructor(compLib) {
10
+ constructor(compLib, ngZone, changeDetectorRef) {
11
+ this.ngZone = ngZone;
12
+ this.changeDetectorRef = changeDetectorRef;
13
+ this.openDirection = 'RIGHT';
12
14
  this.recordingSaved = new EventEmitter();
13
15
  this.componentLibrary = ComponentLibrary;
14
16
  this.isRecording = false;
15
17
  this.recordedBlob = null;
16
18
  this.time = '00:00';
17
19
  this.isPlaying = false;
20
+ this.isWaveformOpen = false;
18
21
  this.micButton = {
19
22
  title: '',
20
23
  type: UiActionButtonType.ICON,
@@ -55,24 +58,29 @@ export class VoiceRecordWidgetComponent {
55
58
  color: 'red',
56
59
  };
57
60
  }
58
- ngAfterViewInit() {
61
+ ngAfterViewInit() { }
62
+ get isLeftDirection() {
63
+ return this.openDirection === 'LEFT';
64
+ }
65
+ async initializeWaveSurferIfNeeded() {
66
+ if (this.wavesurfer || !this.waveformRef?.nativeElement) {
67
+ return;
68
+ }
69
+ await new Promise((resolve) => requestAnimationFrame(() => resolve()));
59
70
  let body = document.querySelector('body');
60
71
  let primaryColor = getComputedStyle(body).getPropertyValue('--primary-color').trim();
72
+ let el = this.mainButton.nativeElement.querySelector('.sb4-primary');
73
+ let remInPx = parseFloat(getComputedStyle(document.documentElement).fontSize);
74
+ let height = (el?.getBoundingClientRect().height ?? 0) - remInPx * 0.1;
75
+ this.waveformRef.nativeElement.style.padding = '0.1rem';
61
76
  this.wavesurfer = WaveSurfer.create({
62
77
  container: this.waveformRef.nativeElement,
63
78
  waveColor: primaryColor,
64
79
  progressColor: this.addAlphaToColor(primaryColor, 0.5),
65
- height: 45,
80
+ height: height,
66
81
  barWidth: 5,
67
82
  barGap: 1,
68
83
  barRadius: 5,
69
- plugins: [
70
- RecordPlugin.create({
71
- renderRecordedAudio: true,
72
- scrollingWaveform: true,
73
- mimeType: 'audio/webm',
74
- }),
75
- ],
76
84
  });
77
85
  this.wavesurfer.setVolume(1);
78
86
  this.record = this.wavesurfer.registerPlugin(RecordPlugin.create({
@@ -80,28 +88,55 @@ export class VoiceRecordWidgetComponent {
80
88
  scrollingWaveform: true,
81
89
  continuousWaveform: false,
82
90
  continuousWaveformDuration: 15,
91
+ mimeType: 'audio/webm',
83
92
  }));
84
93
  this.wavesurfer.on('dblclick', () => {
85
- this.wavesurfer.play();
86
- this.isPlaying = true;
94
+ this.updateViewState(() => {
95
+ this.wavesurfer?.play();
96
+ this.isPlaying = true;
97
+ });
87
98
  });
88
99
  this.record.on('record-end', (blob) => {
89
- this.recordedBlob = blob;
100
+ this.updateViewState(() => {
101
+ this.recordedBlob = blob;
102
+ this.isRecording = false;
103
+ });
90
104
  });
91
105
  this.record.on('record-progress', (time) => {
92
- this.updateProgress(time);
106
+ this.updateViewState(() => {
107
+ this.updateProgress(time);
108
+ });
93
109
  });
94
110
  this.wavesurfer.on('finish', () => {
95
- this.isPlaying = false;
111
+ this.updateViewState(() => {
112
+ this.isPlaying = false;
113
+ });
96
114
  });
97
115
  }
98
116
  async startRecording() {
99
117
  const confirmed = await this.checkHasRecorded();
100
- if (!confirmed)
118
+ if (!confirmed || this.isRecording)
101
119
  return;
102
- if (this.record && !this.isRecording) {
103
- this.record.startRecording();
120
+ this.updateViewState(() => {
121
+ this.isWaveformOpen = true;
104
122
  this.isRecording = true;
123
+ this.isPlaying = false;
124
+ this.recordedBlob = null;
125
+ this.time = '00:00';
126
+ });
127
+ try {
128
+ await this.initializeWaveSurferIfNeeded();
129
+ if (!this.record) {
130
+ throw new Error('Voice recorder plugin is not initialized.');
131
+ }
132
+ await this.record.startRecording();
133
+ }
134
+ catch (error) {
135
+ this.updateViewState(() => {
136
+ this.isRecording = false;
137
+ this.isWaveformOpen = !!this.recordedBlob;
138
+ });
139
+ throw error;
105
140
  }
106
141
  }
107
142
  async checkHasRecorded() {
@@ -118,26 +153,36 @@ export class VoiceRecordWidgetComponent {
118
153
  stopRecording() {
119
154
  if (this.record && this.isRecording) {
120
155
  this.record.stopRecording();
121
- this.isRecording = false;
156
+ this.updateViewState(() => {
157
+ this.isRecording = false;
158
+ });
122
159
  }
123
160
  }
124
161
  saveRecording() {
125
162
  if (this.recordedBlob) {
126
- const now = new Date();
127
- const formattedDate = now.toLocaleString('sv-SE').replace(' ', '_').replace(/:/g, '-');
128
- const fileName = `recording_${formattedDate}.webm`;
129
- const file = new File([this.recordedBlob], fileName, { type: 'audio/webm' });
163
+ let now = new Date();
164
+ let formattedDate = now.toLocaleString('sv-SE').replace(' ', '_').replace(/:/g, '-');
165
+ let fileName = `recording_${formattedDate}.webm`;
166
+ let file = new File([this.recordedBlob], fileName, { type: 'audio/webm' });
130
167
  this.recordingSaved.emit(file);
131
- this.recordedBlob = null;
132
- this.time = '00:00';
133
- this.isPlaying = false;
134
- this.wavesurfer.empty();
168
+ // Destroy completely so next recording initializes fresh
169
+ this.wavesurfer?.destroy();
170
+ this.wavesurfer = undefined;
171
+ this.record = undefined;
172
+ this.updateViewState(() => {
173
+ this.recordedBlob = null;
174
+ this.time = '00:00';
175
+ this.isPlaying = false;
176
+ this.isWaveformOpen = false;
177
+ });
135
178
  }
136
179
  }
137
180
  replayRecording() {
138
181
  if (this.recordedBlob) {
139
- this.isPlaying = !this.isPlaying;
140
- this.wavesurfer.playPause();
182
+ this.updateViewState(() => {
183
+ this.isPlaying = !this.isPlaying;
184
+ this.wavesurfer?.playPause();
185
+ });
141
186
  }
142
187
  }
143
188
  ngOnDestroy() {
@@ -166,21 +211,32 @@ export class VoiceRecordWidgetComponent {
166
211
  }
167
212
  return hexColor;
168
213
  }
169
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: VoiceRecordWidgetComponent, deps: [{ token: COMPONENT_LIBRARY, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
170
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: VoiceRecordWidgetComponent, selector: "voice-record-widget", outputs: { recordingSaved: "recordingSaved" }, viewQueries: [{ propertyName: "waveformRef", first: true, predicate: ["waveform"], descendants: true }], ngImport: i0, template: "<div class=\"recorderContainer\">\r\n <div class=\"recorderToolbar\">\r\n <!-- Start Recording -->\r\n <ui-action-button\r\n *ngIf=\"!isRecording\"\r\n [descriptor]=\"micButton\"\r\n (actionClick)=\"startRecording()\"\r\n >\r\n </ui-action-button>\r\n\r\n <!-- Stop Recording -->\r\n <ui-action-button *ngIf=\"isRecording\" [descriptor]=\"stopButton\" (actionClick)=\"stopRecording()\">\r\n </ui-action-button>\r\n\r\n <div class=\"progress\">{{ time }}</div>\r\n </div>\r\n <div class=\"waveform\" #waveform></div>\r\n <div class=\"endBar\">\r\n <!-- Save Recording -->\r\n <ui-action-button\r\n *ngIf=\"recordedBlob\"\r\n [descriptor]=\"saveButton\"\r\n (actionClick)=\"saveRecording()\"\r\n >\r\n </ui-action-button>\r\n\r\n <!-- Start Play -->\r\n <ui-action-button\r\n *ngIf=\"recordedBlob && !isPlaying\"\r\n [descriptor]=\"playButton\"\r\n (actionClick)=\"replayRecording()\"\r\n ></ui-action-button>\r\n\r\n <!-- Stop Play -->\r\n <ui-action-button\r\n *ngIf=\"recordedBlob && isPlaying\"\r\n [descriptor]=\"stopPlaybackButton\"\r\n (actionClick)=\"replayRecording()\"\r\n ></ui-action-button>\r\n </div>\r\n</div>\r\n", styles: [".recorderContainer{border:1px solid #dee2e6;background:#fff;border-radius:5px;display:flex;flex-direction:row;padding:.2rem;align-items:center}.waveform{flex:1;align-content:center;padding-right:1rem}.recorderToolbar{display:flex;flex-direction:row;gap:.2rem;padding:0 .5rem;align-items:center}.recorderToolbar ::ng-deep .p-button.p-button-icon-only{width:fit-content;padding:.2rem}.recorderToolbar ::ng-deep .mdc-button{min-width:unset;font-size:1.5rem;margin:unset}.recorderToolbar ::ng-deep .mat-mdc-button>.mat-icon{font-size:unset;width:unset;height:unset;padding:.2rem;margin:unset}.recorderToolbar ::ng-deep .p-button-text{background-color:transparent;border:unset;box-shadow:unset;padding:.2rem}.progress{align-content:center;font-size:1rem;height:100%;color:#6b7280}.recorderToolbar ::ng-deep .p-button-primary{color:var(--primary-color);border:unset}.endBar{display:flex;flex-direction:row;align-items:center;padding:unset;border-radius:5px;height:fit-content;box-shadow:0 3px 1px -2px #0003,0 2px 2px #00000024,0 1px 5px #0000001f}.endBar ::ng-deep button{background-color:transparent;border:unset;padding:.5rem;box-shadow:unset}.endBar ::ng-deep button:hover{background-color:rgba(from var(--primary-color) r g b/.1)}.endBar>:first-child ::ng-deep button{border-radius:5px;border-top-right-radius:unset;border-bottom-right-radius:unset;border-right:1px solid #dee2e6;color:var(--primary-color)}.endBar>:last-child ::ng-deep button{border-radius:5px;border-top-left-radius:unset;border-bottom-left-radius:unset;color:var(--primary-color)}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.UiActionButtonComponent, selector: "ui-action-button", inputs: ["disabled", "descriptor", "code", "addedCssClass", "addBasicClasses"], outputs: ["actionClick", "actionDoubleClick"] }] }); }
214
+ updateViewState(update) {
215
+ this.ngZone.run(() => {
216
+ update();
217
+ this.changeDetectorRef.markForCheck();
218
+ });
219
+ }
220
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: VoiceRecordWidgetComponent, deps: [{ token: COMPONENT_LIBRARY, optional: true }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
221
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.11", type: VoiceRecordWidgetComponent, selector: "voice-record-widget", inputs: { openDirection: "openDirection" }, outputs: { recordingSaved: "recordingSaved" }, viewQueries: [{ propertyName: "waveformRef", first: true, predicate: ["waveform"], descendants: true }, { propertyName: "mainButton", first: true, predicate: ["mainButton"], descendants: true, read: ElementRef }], ngImport: i0, template: "<div\r\n class=\"recorderContainer\"\r\n [class.direction-left]=\"isLeftDirection\"\r\n [class.direction-right]=\"!isLeftDirection\"\r\n [class.active]=\"isWaveformOpen || isRecording || !!recordedBlob\"\r\n [class.isRecording]=\"isRecording\"\r\n [class.hasRecording]=\"recordedBlob\"\r\n>\r\n <div class=\"recorderMain\">\r\n <div class=\"recorderToolbar\">\r\n <!-- Start Recording -->\r\n <ui-action-button\r\n class=\"mainButton\"\r\n #mainButton\r\n *ngIf=\"!isRecording\"\r\n [descriptor]=\"micButton\"\r\n (actionClick)=\"startRecording()\"\r\n >\r\n </ui-action-button>\r\n\r\n <!-- Stop Recording -->\r\n <ui-action-button\r\n class=\"mainButton\"\r\n #mainButton\r\n *ngIf=\"isRecording\"\r\n [descriptor]=\"stopButton\"\r\n (actionClick)=\"stopRecording()\"\r\n >\r\n </ui-action-button>\r\n\r\n <!-- Save Recording -->\r\n <ui-action-button\r\n class=\"mainButton\"\r\n *ngIf=\"recordedBlob\"\r\n [descriptor]=\"saveButton\"\r\n (actionClick)=\"saveRecording()\"\r\n >\r\n </ui-action-button>\r\n\r\n <!-- Start Play -->\r\n <ui-action-button\r\n class=\"mainButton\"\r\n *ngIf=\"recordedBlob && !isPlaying\"\r\n [descriptor]=\"playButton\"\r\n (actionClick)=\"replayRecording()\"\r\n ></ui-action-button>\r\n\r\n <!-- Stop Play -->\r\n <ui-action-button\r\n class=\"mainButton\"\r\n *ngIf=\"recordedBlob && isPlaying\"\r\n [descriptor]=\"stopPlaybackButton\"\r\n (actionClick)=\"replayRecording()\"\r\n ></ui-action-button>\r\n\r\n @if (isRecording) {\r\n <div class=\"progress\">{{ time }}</div>\r\n }\r\n </div>\r\n\r\n <div class=\"waveformBand\" [class.open]=\"isWaveformOpen || isRecording || !!recordedBlob\">\r\n <div class=\"waveformGrid\"></div>\r\n <div class=\"waveform\" #waveform></div>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [":host{display:block;width:100%;min-width:0}:host ::ng-deep .waveform{height:unset!important}.recorderContainer{background:#fff;display:flex;flex-direction:row;justify-content:space-between;width:100%;min-width:0;align-items:center;gap:.5rem}.active ::ng-deep .recorderToolbar{border:1px solid #e5e7eb;border-radius:.5rem}.isRecording ::ng-deep .recorderToolbar{padding-right:1rem}.recorderToolbar ::ng-deep .sb4-red,.recorderToolbar ::ng-deep .sb4-primary{border:1px solid #e5e7eb;box-shadow:unset}.active ::ng-deep .recorderToolbar ::ng-deep .sb4-red,.active ::ng-deep .recorderToolbar ::ng-deep .sb4-primary{border:unset}.mainButton ::ng-deep .sb4-red,.mainButton ::ng-deep .sb4-primary{padding:.5rem .75rem}.recorderMain{display:flex;align-items:center;min-width:0;flex:1}.direction-right .recorderMain{flex-direction:row}.direction-left .recorderMain{flex-direction:row-reverse}.waveform{width:100%;height:45px}.waveformBand{position:relative;display:grid;align-items:center;width:0;max-width:0;min-width:0;opacity:0;overflow:hidden;border-radius:5px;flex:1 1 0;transform:scaleX(.96);will-change:max-width,opacity,transform,margin;transition:max-width .22s ease,opacity .18s ease,margin .22s ease,transform .22s ease}.waveformBand.open{max-width:100%;opacity:1;transform:scaleX(1)}.direction-right .waveformBand{margin-left:0}.direction-left .waveformBand{margin-right:0}.direction-right .waveformBand.open{margin-left:.45rem}.direction-left .waveformBand.open{margin-right:.45rem}.waveformGrid{position:absolute;inset:0;border:1px solid #e5e7eb;border-radius:.5rem;background:repeating-linear-gradient(to right,rgba(148,163,184,.35) 0,rgba(148,163,184,.35) 2px,transparent 2px,transparent 8px),linear-gradient(to bottom,#94a3b814,#94a3b805);pointer-events:none}.recorderToolbar{display:flex;flex-direction:row;align-items:center}.progress{align-content:center;font-size:1rem;height:100%;color:#6b7280}.hasRecording ::ng-deep .recorderToolbar ui-action-button{border-right:1px solid #e5e7eb}.hasRecording ::ng-deep .recorderToolbar ui-action-button:last-child{border-right:unset}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.UiActionButtonComponent, selector: "ui-action-button", inputs: ["disabled", "descriptor", "code", "addedCssClass", "addBasicClasses"], outputs: ["actionClick", "actionDoubleClick"] }] }); }
171
222
  }
172
223
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: VoiceRecordWidgetComponent, decorators: [{
173
224
  type: Component,
174
- args: [{ selector: 'voice-record-widget', template: "<div class=\"recorderContainer\">\r\n <div class=\"recorderToolbar\">\r\n <!-- Start Recording -->\r\n <ui-action-button\r\n *ngIf=\"!isRecording\"\r\n [descriptor]=\"micButton\"\r\n (actionClick)=\"startRecording()\"\r\n >\r\n </ui-action-button>\r\n\r\n <!-- Stop Recording -->\r\n <ui-action-button *ngIf=\"isRecording\" [descriptor]=\"stopButton\" (actionClick)=\"stopRecording()\">\r\n </ui-action-button>\r\n\r\n <div class=\"progress\">{{ time }}</div>\r\n </div>\r\n <div class=\"waveform\" #waveform></div>\r\n <div class=\"endBar\">\r\n <!-- Save Recording -->\r\n <ui-action-button\r\n *ngIf=\"recordedBlob\"\r\n [descriptor]=\"saveButton\"\r\n (actionClick)=\"saveRecording()\"\r\n >\r\n </ui-action-button>\r\n\r\n <!-- Start Play -->\r\n <ui-action-button\r\n *ngIf=\"recordedBlob && !isPlaying\"\r\n [descriptor]=\"playButton\"\r\n (actionClick)=\"replayRecording()\"\r\n ></ui-action-button>\r\n\r\n <!-- Stop Play -->\r\n <ui-action-button\r\n *ngIf=\"recordedBlob && isPlaying\"\r\n [descriptor]=\"stopPlaybackButton\"\r\n (actionClick)=\"replayRecording()\"\r\n ></ui-action-button>\r\n </div>\r\n</div>\r\n", styles: [".recorderContainer{border:1px solid #dee2e6;background:#fff;border-radius:5px;display:flex;flex-direction:row;padding:.2rem;align-items:center}.waveform{flex:1;align-content:center;padding-right:1rem}.recorderToolbar{display:flex;flex-direction:row;gap:.2rem;padding:0 .5rem;align-items:center}.recorderToolbar ::ng-deep .p-button.p-button-icon-only{width:fit-content;padding:.2rem}.recorderToolbar ::ng-deep .mdc-button{min-width:unset;font-size:1.5rem;margin:unset}.recorderToolbar ::ng-deep .mat-mdc-button>.mat-icon{font-size:unset;width:unset;height:unset;padding:.2rem;margin:unset}.recorderToolbar ::ng-deep .p-button-text{background-color:transparent;border:unset;box-shadow:unset;padding:.2rem}.progress{align-content:center;font-size:1rem;height:100%;color:#6b7280}.recorderToolbar ::ng-deep .p-button-primary{color:var(--primary-color);border:unset}.endBar{display:flex;flex-direction:row;align-items:center;padding:unset;border-radius:5px;height:fit-content;box-shadow:0 3px 1px -2px #0003,0 2px 2px #00000024,0 1px 5px #0000001f}.endBar ::ng-deep button{background-color:transparent;border:unset;padding:.5rem;box-shadow:unset}.endBar ::ng-deep button:hover{background-color:rgba(from var(--primary-color) r g b/.1)}.endBar>:first-child ::ng-deep button{border-radius:5px;border-top-right-radius:unset;border-bottom-right-radius:unset;border-right:1px solid #dee2e6;color:var(--primary-color)}.endBar>:last-child ::ng-deep button{border-radius:5px;border-top-left-radius:unset;border-bottom-left-radius:unset;color:var(--primary-color)}\n"] }]
175
- }], ctorParameters: () => [{ type: i3.ComponentLibrary, decorators: [{
225
+ args: [{ selector: 'voice-record-widget', template: "<div\r\n class=\"recorderContainer\"\r\n [class.direction-left]=\"isLeftDirection\"\r\n [class.direction-right]=\"!isLeftDirection\"\r\n [class.active]=\"isWaveformOpen || isRecording || !!recordedBlob\"\r\n [class.isRecording]=\"isRecording\"\r\n [class.hasRecording]=\"recordedBlob\"\r\n>\r\n <div class=\"recorderMain\">\r\n <div class=\"recorderToolbar\">\r\n <!-- Start Recording -->\r\n <ui-action-button\r\n class=\"mainButton\"\r\n #mainButton\r\n *ngIf=\"!isRecording\"\r\n [descriptor]=\"micButton\"\r\n (actionClick)=\"startRecording()\"\r\n >\r\n </ui-action-button>\r\n\r\n <!-- Stop Recording -->\r\n <ui-action-button\r\n class=\"mainButton\"\r\n #mainButton\r\n *ngIf=\"isRecording\"\r\n [descriptor]=\"stopButton\"\r\n (actionClick)=\"stopRecording()\"\r\n >\r\n </ui-action-button>\r\n\r\n <!-- Save Recording -->\r\n <ui-action-button\r\n class=\"mainButton\"\r\n *ngIf=\"recordedBlob\"\r\n [descriptor]=\"saveButton\"\r\n (actionClick)=\"saveRecording()\"\r\n >\r\n </ui-action-button>\r\n\r\n <!-- Start Play -->\r\n <ui-action-button\r\n class=\"mainButton\"\r\n *ngIf=\"recordedBlob && !isPlaying\"\r\n [descriptor]=\"playButton\"\r\n (actionClick)=\"replayRecording()\"\r\n ></ui-action-button>\r\n\r\n <!-- Stop Play -->\r\n <ui-action-button\r\n class=\"mainButton\"\r\n *ngIf=\"recordedBlob && isPlaying\"\r\n [descriptor]=\"stopPlaybackButton\"\r\n (actionClick)=\"replayRecording()\"\r\n ></ui-action-button>\r\n\r\n @if (isRecording) {\r\n <div class=\"progress\">{{ time }}</div>\r\n }\r\n </div>\r\n\r\n <div class=\"waveformBand\" [class.open]=\"isWaveformOpen || isRecording || !!recordedBlob\">\r\n <div class=\"waveformGrid\"></div>\r\n <div class=\"waveform\" #waveform></div>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [":host{display:block;width:100%;min-width:0}:host ::ng-deep .waveform{height:unset!important}.recorderContainer{background:#fff;display:flex;flex-direction:row;justify-content:space-between;width:100%;min-width:0;align-items:center;gap:.5rem}.active ::ng-deep .recorderToolbar{border:1px solid #e5e7eb;border-radius:.5rem}.isRecording ::ng-deep .recorderToolbar{padding-right:1rem}.recorderToolbar ::ng-deep .sb4-red,.recorderToolbar ::ng-deep .sb4-primary{border:1px solid #e5e7eb;box-shadow:unset}.active ::ng-deep .recorderToolbar ::ng-deep .sb4-red,.active ::ng-deep .recorderToolbar ::ng-deep .sb4-primary{border:unset}.mainButton ::ng-deep .sb4-red,.mainButton ::ng-deep .sb4-primary{padding:.5rem .75rem}.recorderMain{display:flex;align-items:center;min-width:0;flex:1}.direction-right .recorderMain{flex-direction:row}.direction-left .recorderMain{flex-direction:row-reverse}.waveform{width:100%;height:45px}.waveformBand{position:relative;display:grid;align-items:center;width:0;max-width:0;min-width:0;opacity:0;overflow:hidden;border-radius:5px;flex:1 1 0;transform:scaleX(.96);will-change:max-width,opacity,transform,margin;transition:max-width .22s ease,opacity .18s ease,margin .22s ease,transform .22s ease}.waveformBand.open{max-width:100%;opacity:1;transform:scaleX(1)}.direction-right .waveformBand{margin-left:0}.direction-left .waveformBand{margin-right:0}.direction-right .waveformBand.open{margin-left:.45rem}.direction-left .waveformBand.open{margin-right:.45rem}.waveformGrid{position:absolute;inset:0;border:1px solid #e5e7eb;border-radius:.5rem;background:repeating-linear-gradient(to right,rgba(148,163,184,.35) 0,rgba(148,163,184,.35) 2px,transparent 2px,transparent 8px),linear-gradient(to bottom,#94a3b814,#94a3b805);pointer-events:none}.recorderToolbar{display:flex;flex-direction:row;align-items:center}.progress{align-content:center;font-size:1rem;height:100%;color:#6b7280}.hasRecording ::ng-deep .recorderToolbar ui-action-button{border-right:1px solid #e5e7eb}.hasRecording ::ng-deep .recorderToolbar ui-action-button:last-child{border-right:unset}\n"] }]
226
+ }], ctorParameters: () => [{ type: undefined, decorators: [{
176
227
  type: Inject,
177
228
  args: [COMPONENT_LIBRARY]
178
229
  }, {
179
230
  type: Optional
180
- }] }], propDecorators: { waveformRef: [{
231
+ }] }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }], propDecorators: { waveformRef: [{
181
232
  type: ViewChild,
182
233
  args: ['waveform']
234
+ }], mainButton: [{
235
+ type: ViewChild,
236
+ args: ['mainButton', { read: ElementRef }]
237
+ }], openDirection: [{
238
+ type: Input
183
239
  }], recordingSaved: [{
184
240
  type: Output
185
241
  }] } });
186
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidm9pY2UtcmVjb3JkLXdpZGdldC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi92aWV3LWNvbnRleHQvc21hcnQtdWktYWN0aW9uL2NvbXBvbmVudHMvdXBsb2FkLXdpZGdldC92b2ljZS1yZWNvcmQtd2lkZ2V0L3ZvaWNlLXJlY29yZC13aWRnZXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtbmctY2xpZW50L3NyYy9saWIvdmlldy1jb250ZXh0L3NtYXJ0LXVpLWFjdGlvbi9jb21wb25lbnRzL3VwbG9hZC13aWRnZXQvdm9pY2UtcmVjb3JkLXdpZGdldC92b2ljZS1yZWNvcmQtd2lkZ2V0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBR1QsU0FBUyxFQUdULE1BQU0sRUFDTixRQUFRLEVBQ1IsWUFBWSxFQUNaLE1BQU0sR0FFUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLFVBQVUsTUFBTSxlQUFlLENBQUM7QUFDdkMsT0FBTyxZQUFZLE1BQU0sc0NBQXNDLENBQUM7QUFDaEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFFM0YsT0FBTyxFQUFFLFlBQVksRUFBRSxrQkFBa0IsRUFBc0IsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7QUFPdkYsTUFBTSxPQUFPLDBCQUEwQjtJQTRDckMsWUFBbUQsT0FBMEI7UUF6Q25FLG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQU1wRCxxQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQztRQUVwQyxnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUNwQixpQkFBWSxHQUFnQixJQUFJLENBQUM7UUFDakMsU0FBSSxHQUFXLE9B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bnRSZWYsXHJcbiAgT25EZXN0cm95LFxyXG4gIFZpZXdDaGlsZCxcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIElucHV0LFxyXG4gIEluamVjdCxcclxuICBPcHRpb25hbCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgT3V0cHV0LFxyXG4gIE9uSW5pdCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IFdhdmVTdXJmZXIgZnJvbSAnd2F2ZXN1cmZlci5qcyc7XHJcbmltcG9ydCBSZWNvcmRQbHVnaW4gZnJvbSAnd2F2ZXN1cmZlci5qcy9kaXN0L3BsdWdpbnMvcmVjb3JkLmpzJztcclxuaW1wb3J0IHsgQ09NUE9ORU5UX0xJQlJBUlksIENvbXBvbmVudExpYnJhcnkgfSBmcm9tICcuLi8uLi8uLi8uLi91dGlsaXR5L2NvbXBvbmVudExpYnJhcnknO1xyXG5pbXBvcnQgeyBVaUFjdGlvbk1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vdWktYWN0aW9uLm1vZGVsJztcclxuaW1wb3J0IHsgSWNvblBvc2l0aW9uLCBVaUFjdGlvbkJ1dHRvblR5cGUsIFVpQWN0aW9uRGVzY3JpcHRvciB9IGZyb20gJy4uLy4uLy4uLy4uL2FwaSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3ZvaWNlLXJlY29yZC13aWRnZXQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi92b2ljZS1yZWNvcmQtd2lkZ2V0LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi92b2ljZS1yZWNvcmQtd2lkZ2V0LmNvbXBvbmVudC5jc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFZvaWNlUmVjb3JkV2lkZ2V0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xyXG4gIEBWaWV3Q2hpbGQoJ3dhdmVmb3JtJykgd2F2ZWZvcm1SZWYhOiBFbGVtZW50UmVmO1xyXG5cclxuICBAT3V0cHV0KCkgcmVjb3JkaW5nU2F2ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEJsb2I+KCk7XHJcblxyXG4gIHByaXZhdGUgd2F2ZXN1cmZlciE6IFdhdmVTdXJmZXI7XHJcbiAgcHJpdmF0ZSByZWNvcmQhOiBSZWNvcmRQbHVnaW47XHJcblxyXG4gIGNvbXBMaWI6IENvbXBvbmVudExpYnJhcnk7XHJcbiAgY29tcG9uZW50TGlicmFyeSA9IENvbXBvbmVudExpYnJhcnk7XHJcblxyXG4gIGlzUmVjb3JkaW5nID0gZmFsc2U7XHJcbiAgcmVjb3JkZWRCbG9iOiBCbG9iIHwgbnVsbCA9IG51bGw7XHJcbiAgdGltZTogc3RyaW5nID0gJzAwOjAwJztcclxuICBpc1BsYXlpbmcgPSBmYWxzZTtcclxuXHJcbiAgbWljQnV0dG9uOiBVaUFjdGlvbkRlc2NyaXB0b3IgPSB7XHJcbiAgICB0aXRsZTogJycsXHJcbiAgICB0eXBlOiBVaUFjdGlvbkJ1dHRvblR5cGUuSUNPTixcclxuICAgIGljb246ICdtaWNyb3Bob25lJyxcclxuICAgIGljb25Qb3NpdGlvbjogSWNvblBvc2l0aW9uLlBSRSxcclxuICAgIGNvbG9yOiAncHJpbWFyeScsXHJcbiAgfTtcclxuXHJcbiAgc3RvcEJ1dHRvbjogVWlBY3Rpb25EZXNjcmlwdG9yID0ge1xyXG4gICAgdGl0bGU6ICcnLFxyXG4gICAgdHlwZTogVWlBY3Rpb25CdXR0b25UeXBlLklDT04sXHJcbiAgICBpY29uOiAnc3RvcC1jaXJjbGUnLFxyXG4gICAgaWNvblBvc2l0aW9uOiBJY29uUG9zaXRpb24uUFJFLFxyXG4gICAgaWNvbkNvbG9yOiAncmVkJyxcclxuICAgIGNvbG9yOiAncHJpbWFyeScsXHJcbiAgfTtcclxuXHJcbiAgc2F2ZUJ1dHRvbjogVWlBY3Rpb25EZXNjcmlwdG9yID0ge1xyXG4gICAgdGl0bGU6ICcnLFxyXG4gICAgdHlwZTogVWlBY3Rpb25CdXR0b25UeXBlLklDT04sXHJcbiAgICBpY29uOiAnc2F2ZScsXHJcbiAgICBpY29uUG9zaXRpb246IEljb25Qb3NpdGlvbi5QUkUsXHJcbiAgICBjb2xvcjogJ3ByaW1hcnknLFxyXG4gIH07XHJcblxyXG4gIHBsYXlCdXR0b24hOiBVaUFjdGlvbkRlc2NyaXB0b3I7XHJcbiAgc3RvcFBsYXliYWNrQnV0dG9uITogVWlBY3Rpb25EZXNjcmlwdG9yO1xyXG5cclxuICBjb25zdHJ1Y3RvcihASW5qZWN0KENPTVBPTkVOVF9MSUJSQVJZKSBAT3B0aW9uYWwoKSBjb21wTGliPzogQ29tcG9uZW50TGlicmFyeSkge1xyXG4gICAgdGhpcy5jb21wTGliID0gY29tcExpYiA/PyBDb21wb25lbnRMaWJyYXJ5LlBSSU1FTkc7XHJcbiAgfVxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5wbGF5QnV0dG9uID0ge1xyXG4gICAgICB0aXRsZTogJycsXHJcbiAgICAgIHR5cGU6IFVpQWN0aW9uQnV0dG9uVHlwZS5JQ09OLFxyXG4gICAgICBpY29uOiB0aGlzLmNvbXBMaWIgPT09IENvbXBvbmVudExpYnJhcnkuUFJJTUVORyA/ICdwbGF5LWNpcmNsZScgOiAncGxheV9jaXJjbGUnLFxyXG4gICAgICBpY29uUG9zaXRpb246IEljb25Qb3NpdGlvbi5QUkUsXHJcbiAgICAgIGNvbG9yOiAncHJpbWFyeScsXHJcbiAgICB9O1xyXG4gICAgdGhpcy5zdG9wUGxheWJhY2tCdXR0b24gPSB7XHJcbiAgICAgIHRpdGxlOiAnJyxcclxuICAgICAgdHlwZTogVWlBY3Rpb25CdXR0b25UeXBlLklDT04sXHJcbiAgICAgIGljb246IHRoaXMuY29tcExpYiA9PT0gQ29tcG9uZW50TGlicmFyeS5QUklNRU5HID8gJ3N0b3AtY2lyY2xlJyA6ICdzdG9wX2NpcmNsZScsXHJcbiAgICAgIGljb25Qb3NpdGlvbjogSWNvblBvc2l0aW9uLlBSRSxcclxuICAgICAgY29sb3I6ICdyZWQnLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIGxldCBib2R5ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignYm9keScpO1xyXG4gICAgbGV0IHByaW1hcnlDb2xvciA9IGdldENvbXB1dGVkU3R5bGUoYm9keSEpLmdldFByb3BlcnR5VmFsdWUoJy0tcHJpbWFyeS1jb2xvcicpLnRyaW0oKTtcclxuXHJcbiAgICB0aGlzLndhdmVzdXJmZXIgPSBXYXZlU3VyZmVyLmNyZWF0ZSh7XHJcbiAgICAgIGNvbnRhaW5lcjogdGhpcy53YXZlZm9ybVJlZi5uYXRpdmVFbGVtZW50LFxyXG4gICAgICB3YXZlQ29sb3I6IHByaW1hcnlDb2xvcixcclxuICAgICAgcHJvZ3Jlc3NDb2xvcjogdGhpcy5hZGRBbHBoYVRvQ29sb3IocHJpbWFyeUNvbG9yISwgMC41KSxcclxuICAgICAgaGVpZ2h0OiA0NSxcclxuICAgICAgYmFyV2lkdGg6IDUsXHJcbiAgICAgIGJhckdhcDogMSxcclxuICAgICAgYmFyUmFkaXVzOiA1LFxyXG4gICAgICBwbHVnaW5zOiBbXHJcbiAgICAgICAgUmVjb3JkUGx1Z2luLmNyZWF0ZSh7XHJcbiAgICAgICAgICByZW5kZXJSZWNvcmRlZEF1ZGlvOiB0cnVlLFxyXG4gICAgICAgICAgc2Nyb2xsaW5nV2F2ZWZvcm06IHRydWUsXHJcbiAgICAgICAgICBtaW1lVHlwZTogJ2F1ZGlvL3dlYm0nLFxyXG4gICAgICAgIH0pLFxyXG4gICAgICBdLFxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy53YXZlc3VyZmVyLnNldFZvbHVtZSgxKTtcclxuXHJcbiAgICB0aGlzLnJlY29yZCA9IHRoaXMud2F2ZXN1cmZlci5yZWdpc3RlclBsdWdpbihcclxuICAgICAgUmVjb3JkUGx1Z2luLmNyZWF0ZSh7XHJcbiAgICAgICAgcmVuZGVyUmVjb3JkZWRBdWRpbzogdHJ1ZSxcclxuICAgICAgICBzY3JvbGxpbmdXYXZlZm9ybTogdHJ1ZSxcclxuICAgICAgICBjb250aW51b3VzV2F2ZWZvcm06IGZhbHNlLFxyXG4gICAgICAgIGNvbnRpbnVvdXNXYXZlZm9ybUR1cmF0aW9uOiAxNSxcclxuICAgICAgfSlcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy53YXZlc3VyZmVyLm9uKCdkYmxjbGljaycsICgpID0+IHtcclxuICAgICAgdGhpcy53YXZlc3VyZmVyLnBsYXkoKTtcclxuICAgICAgdGhpcy5pc1BsYXlpbmcgPSB0cnVlO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLnJlY29yZC5vbigncmVjb3JkLWVuZCcsIChibG9iOiBCbG9iKSA9PiB7XHJcbiAgICAgIHRoaXMucmVjb3JkZWRCbG9iID0gYmxvYjtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5yZWNvcmQub24oJ3JlY29yZC1wcm9ncmVzcycsICh0aW1lKSA9PiB7XHJcbiAgICAgIHRoaXMudXBkYXRlUHJvZ3Jlc3ModGltZSk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMud2F2ZXN1cmZlci5vbignZmluaXNoJywgKCkgPT4ge1xyXG4gICAgICB0aGlzLmlzUGxheWluZyA9IGZhbHNlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBzdGFydFJlY29yZGluZygpIHtcclxuICAgIGNvbnN0IGNvbmZpcm1lZCA9IGF3YWl0IHRoaXMuY2hlY2tIYXNSZWNvcmRlZCgpO1xyXG4gICAgaWYgKCFjb25maXJtZWQpIHJldHVybjtcclxuXHJcbiAgICBpZiAodGhpcy5yZWNvcmQgJiYgIXRoaXMuaXNSZWNvcmRpbmcpIHtcclxuICAgICAgdGhpcy5yZWNvcmQuc3RhcnRSZWNvcmRpbmcoKTtcclxuICAgICAgdGhpcy5pc1JlY29yZGluZyA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHByaXZhdGUgYXN5bmMgY2hlY2tIYXNSZWNvcmRlZCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGlmICh0aGlzLnJlY29yZGVkQmxvYikge1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlUHJvZ3Jlc3ModGltZTogbnVtYmVyKSB7XHJcbiAgICBsZXQgZm9ybWF0dGVkVGltZSA9IFtNYXRoLmZsb29yKCh0aW1lICUgMzYwMDAwMCkgLyA2MDAwMCksIE1hdGguZmxvb3IoKHRpbWUgJSA2MDAwMCkgLyAxMDAwKV1cclxuICAgICAgLm1hcCgodikgPT4gKHYgPCAxMCA/ICcwJyArIHYgOiB2KSlcclxuICAgICAgLmpvaW4oJzonKTtcclxuICAgIHRoaXMudGltZSA9IGZvcm1hdHRlZFRpbWU7XHJcbiAgfVxyXG5cclxuICBzdG9wUmVjb3JkaW5nKCkge1xyXG4gICAgaWYgKHRoaXMucmVjb3JkICYmIHRoaXMuaXNSZWNvcmRpbmcpIHtcclxuICAgICAgdGhpcy5yZWNvcmQuc3RvcFJlY29yZGluZygpO1xyXG4gICAgICB0aGlzLmlzUmVjb3JkaW5nID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzYXZlUmVjb3JkaW5nKCkge1xyXG4gICAgaWYgKHRoaXMucmVjb3JkZWRCbG9iKSB7XHJcbiAgICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XHJcbiAgICAgIGNvbnN0IGZvcm1hdHRlZERhdGUgPSBub3cudG9Mb2NhbGVTdHJpbmcoJ3N2LVNFJykucmVwbGFjZSgnICcsICdfJykucmVwbGFjZSgvOi9nLCAnLScpO1xyXG5cclxuICAgICAgY29uc3QgZmlsZU5hbWUgPSBgcmVjb3JkaW5nXyR7Zm9ybWF0dGVkRGF0ZX0ud2VibWA7XHJcbiAgICAgIGNvbnN0IGZpbGUgPSBuZXcgRmlsZShbdGhpcy5yZWNvcmRlZEJsb2JdLCBmaWxlTmFtZSwgeyB0eXBlOiAnYXVkaW8vd2VibScgfSk7XHJcblxyXG4gICAgICB0aGlzLnJlY29yZGluZ1NhdmVkLmVtaXQoZmlsZSk7XHJcblxyXG4gICAgICB0aGlzLnJlY29yZGVkQmxvYiA9IG51bGw7XHJcbiAgICAgIHRoaXMudGltZSA9ICcwMDowMCc7XHJcbiAgICAgIHRoaXMuaXNQbGF5aW5nID0gZmFsc2U7XHJcbiAgICAgIHRoaXMud2F2ZXN1cmZlci5lbXB0eSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVwbGF5UmVjb3JkaW5nKCkge1xyXG4gICAgaWYgKHRoaXMucmVjb3JkZWRCbG9iKSB7XHJcbiAgICAgIHRoaXMuaXNQbGF5aW5nID0gIXRoaXMuaXNQbGF5aW5nO1xyXG4gICAgICB0aGlzLndhdmVzdXJmZXIucGxheVBhdXNlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIGlmICh0aGlzLndhdmVzdXJmZXIpIHtcclxuICAgICAgdGhpcy53YXZlc3VyZmVyLmRlc3Ryb3koKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYWRkQWxwaGFUb0NvbG9yKGhleENvbG9yOiBzdHJpbmcsIGFscGhhOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgaWYgKC9eIyhbYS1mXFxkXSkoW2EtZlxcZF0pKFthLWZcXGRdKSQvaS50ZXN0KGhleENvbG9yKSkge1xyXG4gICAgICBoZXhDb2xvciA9IGhleENvbG9yLnJlcGxhY2UoXHJcbiAgICAgICAgL14jKFthLWZcXGRdKShbYS1mXFxkXSkoW2EtZlxcZF0pJC9pLFxyXG4gICAgICAgIChfLCByLCBnLCBiKSA9PiBgIyR7cn0ke3J9JHtnfSR7Z30ke2J9JHtifWBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBoZXhNYXRjaCA9IC9eIz8oW2EtZlxcZF17Mn0pKFthLWZcXGRdezJ9KShbYS1mXFxkXXsyfSkkL2kuZXhlYyhoZXhDb2xvcik7XHJcbiAgICBpZiAoaGV4TWF0Y2gpIHtcclxuICAgICAgY29uc3QgWywgciwgZywgYl0gPSBoZXhNYXRjaDtcclxuICAgICAgcmV0dXJuIGByZ2JhKCR7cGFyc2VJbnQociwgMTYpfSwgJHtwYXJzZUludChnLCAxNil9LCAke3BhcnNlSW50KGIsIDE2KX0sICR7YWxwaGF9KWA7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY3R4ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJykuZ2V0Q29udGV4dCgnMmQnKTtcclxuICAgIGlmIChjdHgpIHtcclxuICAgICAgY3R4LmZpbGxTdHlsZSA9IGhleENvbG9yO1xyXG4gICAgICBjb25zdCBwYXJzZWQgPSBjdHguZmlsbFN0eWxlO1xyXG4gICAgICBjb25zdCByZ2JNYXRjaCA9IC9ecmdiXFwoKFxcZCspLFxccyooXFxkKyksXFxzKihcXGQrKVxcKSQvLmV4ZWMocGFyc2VkKTtcclxuICAgICAgaWYgKHJnYk1hdGNoKSB7XHJcbiAgICAgICAgY29uc3QgWywgciwgZywgYl0gPSByZ2JNYXRjaDtcclxuICAgICAgICByZXR1cm4gYHJnYmEoJHtyfSwgJHtnfSwgJHtifSwgJHthbHBoYX0pYDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBoZXhDb2xvcjtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cInJlY29yZGVyQ29udGFpbmVyXCI+XHJcbiAgPGRpdiBjbGFzcz1cInJlY29yZGVyVG9vbGJhclwiPlxyXG4gICAgPCEtLSBTdGFydCBSZWNvcmRpbmcgLS0+XHJcbiAgICA8dWktYWN0aW9uLWJ1dHRvblxyXG4gICAgICAqbmdJZj1cIiFpc1JlY29yZGluZ1wiXHJcbiAgICAgIFtkZXNjcmlwdG9yXT1cIm1pY0J1dHRvblwiXHJcbiAgICAgIChhY3Rpb25DbGljayk9XCJzdGFydFJlY29yZGluZygpXCJcclxuICAgID5cclxuICAgIDwvdWktYWN0aW9uLWJ1dHRvbj5cclxuXHJcbiAgICA8IS0tIFN0b3AgUmVjb3JkaW5nIC0tPlxyXG4gICAgPHVpLWFjdGlvbi1idXR0b24gKm5nSWY9XCJpc1JlY29yZGluZ1wiIFtkZXNjcmlwdG9yXT1cInN0b3BCdXR0b25cIiAoYWN0aW9uQ2xpY2spPVwic3RvcFJlY29yZGluZygpXCI+XHJcbiAgICA8L3VpLWFjdGlvbi1idXR0b24+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cInByb2dyZXNzXCI+e3sgdGltZSB9fTwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJ3YXZlZm9ybVwiICN3YXZlZm9ybT48L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwiZW5kQmFyXCI+XHJcbiAgICA8IS0tIFNhdmUgUmVjb3JkaW5nIC0tPlxyXG4gICAgPHVpLWFjdGlvbi1idXR0b25cclxuICAgICAgKm5nSWY9XCJyZWNvcmRlZEJsb2JcIlxyXG4gICAgICBbZGVzY3JpcHRvcl09XCJzYXZlQnV0dG9uXCJcclxuICAgICAgKGFjdGlvbkNsaWNrKT1cInNhdmVSZWNvcmRpbmcoKVwiXHJcbiAgICA+XHJcbiAgICA8L3VpLWFjdGlvbi1idXR0b24+XHJcblxyXG4gICAgPCEtLSBTdGFydCBQbGF5ICAtLT5cclxuICAgIDx1aS1hY3Rpb24tYnV0dG9uXHJcbiAgICAgICpuZ0lmPVwicmVjb3JkZWRCbG9iICYmICFpc1BsYXlpbmdcIlxyXG4gICAgICBbZGVzY3JpcHRvcl09XCJwbGF5QnV0dG9uXCJcclxuICAgICAgKGFjdGlvbkNsaWNrKT1cInJlcGxheVJlY29yZGluZygpXCJcclxuICAgID48L3VpLWFjdGlvbi1idXR0b24+XHJcblxyXG4gICAgPCEtLSBTdG9wIFBsYXkgIC0tPlxyXG4gICAgPHVpLWFjdGlvbi1idXR0b25cclxuICAgICAgKm5nSWY9XCJyZWNvcmRlZEJsb2IgJiYgaXNQbGF5aW5nXCJcclxuICAgICAgW2Rlc2NyaXB0b3JdPVwic3RvcFBsYXliYWNrQnV0dG9uXCJcclxuICAgICAgKGFjdGlvbkNsaWNrKT1cInJlcGxheVJlY29yZGluZygpXCJcclxuICAgID48L3VpLWFjdGlvbi1idXR0b24+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
242
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidm9pY2UtcmVjb3JkLXdpZGdldC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi92aWV3LWNvbnRleHQvc21hcnQtdWktYWN0aW9uL2NvbXBvbmVudHMvdXBsb2FkLXdpZGdldC92b2ljZS1yZWNvcmQtd2lkZ2V0L3ZvaWNlLXJlY29yZC13aWRnZXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtbmctY2xpZW50L3NyYy9saWIvdmlldy1jb250ZXh0L3NtYXJ0LXVpLWFjdGlvbi9jb21wb25lbnRzL3VwbG9hZC13aWRnZXQvdm9pY2UtcmVjb3JkLXdpZGdldC92b2ljZS1yZWNvcmQtd2lkZ2V0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsVUFBVSxFQUVWLFNBQVMsRUFFVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFFBQVEsRUFDUixZQUFZLEVBQ1osTUFBTSxHQUdQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sVUFBVSxNQUFNLGVBQWUsQ0FBQztBQUN2QyxPQUFPLFlBQVksTUFBTSxzQ0FBc0MsQ0FBQztBQUNoRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRixPQUFPLEVBQUUsWUFBWSxFQUFFLGtCQUFrQixFQUFzQixNQUFNLGlCQUFpQixDQUFDOzs7O0FBT3ZGLE1BQU0sT0FBTywwQkFBMEI7SUFnRHJDLFlBQ3lDLE9BQXFDLEVBQzNELE1BQWMsRUFDZCxpQkFBb0M7UUFEcEMsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUEvQzlDLGtCQUFhLEdBQXFCLE9BQU8sQ0FBQztRQUV6QyxtQkFBYyxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFNcEQscUJBQWdCLEdBQUcsZ0JBQWdCLENBQUM7UUFFcEMsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFDcEIsaUJBQVksR0FBZ0IsSUFBSSxDQUFDO1FBQ2pDLFNBQUksR0FBVyxPQUFPLENBQUM7UUFDdkIsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUNsQixtQkFBYyxHQUFHLEtBQUssQ0FBQztRQUV2QixjQUFTLEdBQXVCO1lBQzlCLEtBQUssRUFBRSxFQUFFO1lBQ1QsSUFBSSxFQUFFLGtCQUFrQixDQUFDLElBQUk7WUFDN0IsSUFBSSxFQUFFLFlBQVk7WUFDbEIsWUFBWSxFQUFFLFlBQVksQ0FBQyxHQUFHO1lBQzlCLEtBQUssRUFBRSxTQUFTO1NBQ2pCLENBQUM7UUFFRixlQUFVLEdBQXVCO1lBQy9CLEtBQUssRUFBRSxFQUFFO1lBQ1QsSUFBSSxFQUFFLGtCQUFrQixDQUFDLElBQUk7WUFDN0IsSUFBSSxFQUFFLGFBQWE7WUFDbkIsWUFBWSxFQUFFLFlBQVksQ0FBQyxHQUFHO1lBQzlCLFNBQVMsRUFBRSxLQUFLO1lBQ2hCLEtBQUssRUFBRSxTQUFTO1NBQ2pCLENBQUM7UUFFRixlQUFVLEdBQXVCO1lBQy9CLEtBQUssRUFBRSxFQUFFO1lBQ1QsSUFBSSxFQUFFLGtCQUFrQixDQUFDLElBQUk7WUFDN0IsSUFBSSxFQUFFLE1BQU07WUFDWixZQUFZLEVBQUUsWUFBWSxDQUFDLEdBQUc7WUFDOUIsS0FBSyxFQUFFLFNBQVM7U0FDakIsQ0FBQztRQVVBLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxJQUFJLGdCQUFnQixDQUFDLE9BQU8sQ0FBQztJQUNyRCxDQUFDO0lBQ0QsUUFBUTtRQUNOLElBQUksQ0FBQyxVQUFVLEdBQUc7WUFDaEIsS0FBSyxFQUFFLEVBQUU7WUFDVCxJQUFJLEVBQUUsa0JBQWtCLENBQUMsSUFBSTtZQUM3QixJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sS0FBSyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsYUFBYTtZQUMvRSxZQUFZLEVBQUUsWUFBWSxDQUFDLEdBQUc7WUFDOUIsS0FBSyxFQUFFLFNBQVM7U0FDakIsQ0FBQztRQUNGLElBQUksQ0FBQyxrQkFBa0IsR0FBRztZQUN4QixLQUFLLEVBQUUsRUFBRTtZQUNULElBQUksRUFBRSxrQkFBa0IsQ0FBQyxJQUFJO1lBQzdCLElBQUksRUFBRSxJQUFJLENBQUMsT0FBTyxLQUFLLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxhQUFhO1lBQy9FLFlBQVksRUFBRSxZQUFZLENBQUMsR0FBRztZQUM5QixLQUFLLEVBQUUsS0FBSztTQUNiLENBQUM7SUFDSixDQUFDO0lBRUQsZUFBZSxLQUFJLENBQUM7SUFFcEIsSUFBSSxlQUFlO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLGFBQWEsS0FBSyxNQUFNLENBQUM7SUFDdkMsQ0FBQztJQUVPLEtBQUssQ0FBQyw0QkFBNEI7UUFDeEMsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxhQUFhLEVBQUUsQ0FBQztZQUN4RCxPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sSUFBSSxPQUFPLENBQU8sQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztRQUU3RSxJQUFJLElBQUksR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzFDLElBQUksWUFBWSxHQUFHLGdCQUFnQixDQUFDLElBQUssQ0FBQyxDQUFDLGdCQUFnQixDQUFDLGlCQUFpQixDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFdEYsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBZ0IsQ0FBQztRQUNwRixJQUFJLE9BQU8sR0FBRyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzlFLElBQUksTUFBTSxHQUFHLENBQUMsRUFBRSxFQUFFLHFCQUFxQixFQUFFLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxHQUFHLE9BQU8sR0FBRyxHQUFHLENBQUM7UUFFdkUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxRQUFRLENBQUM7UUFFeEQsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDO1lBQ2xDLFNBQVMsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWE7WUFDekMsU0FBUyxFQUFFLFlBQVk7WUFDdkIsYUFBYSxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBYSxFQUFFLEdBQUcsQ0FBQztZQUN2RCxNQUFNLEVBQUUsTUFBTTtZQUNkLFFBQVEsRUFBRSxDQUFDO1lBQ1gsTUFBTSxFQUFFLENBQUM7WUFDVCxTQUFTLEVBQUUsQ0FBQztTQUNiLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTdCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQzFDLFlBQVksQ0FBQyxNQUFNLENBQUM7WUFDbEIsbUJBQW1CLEVBQUUsSUFBSTtZQUN6QixpQkFBaUIsRUFBRSxJQUFJO1lBQ3ZCLGtCQUFrQixFQUFFLEtBQUs7WUFDekIsMEJBQTBCLEVBQUUsRUFBRTtZQUM5QixRQUFRLEVBQUUsWUFBWTtTQUN2QixDQUFDLENBQ0gsQ0FBQztRQUVGLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLFVBQVUsRUFBRSxHQUFHLEVBQUU7WUFDbEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ3hCLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUM7Z0JBQ3hCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1lBQ3hCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxJQUFVLEVBQUUsRUFBRTtZQUMxQyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsRUFBRTtnQkFDeEIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7Z0JBQ3pCLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1lBQzNCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ3pDLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxFQUFFO2dCQUN4QixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzVCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFO1lBQ2hDLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxFQUFFO2dCQUN4QixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztZQUN6QixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELEtBQUssQ0FBQyxjQUFjO1FBQ2xCLE1BQU0sU0FBUyxHQUFHLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDaEQsSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsV0FBVztZQUFFLE9BQU87UUFFM0MsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLEVBQUU7WUFDeEIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7WUFDM0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7WUFDeEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7WUFDdkIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7WUFDekIsSUFBSSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUM7UUFDdEIsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUM7WUFDSCxNQUFNLElBQUksQ0FBQyw0QkFBNEIsRUFBRSxDQUFDO1lBRTFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQUMsMkNBQTJDLENBQUMsQ0FBQztZQUMvRCxDQUFDO1lBRUQsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3JDLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ3hCLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO2dCQUN6QixJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDO1lBQzVDLENBQUMsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxLQUFLLENBQUM7UUFDZCxDQUFDO0lBQ0gsQ0FBQztJQUNPLEtBQUssQ0FBQyxnQkFBZ0I7UUFDNUIsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDeEIsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELGNBQWMsQ0FBQyxJQUFZO1FBQ3pCLElBQUksYUFBYSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsR0FBRyxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO2FBQzFGLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNsQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDYixJQUFJLENBQUMsSUFBSSxHQUFHLGFBQWEsQ0FBQztJQUM1QixDQUFDO0lBRUQsYUFBYTtRQUNYLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUM1QixJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsRUFBRTtnQkFDeEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7WUFDM0IsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQztJQUVELGFBQWE7UUFDWCxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN0QixJQUFJLEdBQUcsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3JCLElBQUksYUFBYSxHQUFHLEdBQUcsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ3JGLElBQUksUUFBUSxHQUFHLGFBQWEsYUFBYSxPQUFPLENBQUM7WUFDakQsSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUM7WUFFM0UsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFL0IseURBQXlEO1lBQ3pELElBQUksQ0FBQyxVQUFVLEVBQUUsT0FBTyxFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUM7WUFDNUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUM7WUFFeEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ3hCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO2dCQUN6QixJQUFJLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQztnQkFDcEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO1lBQzlCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ3hCLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO2dCQUNqQyxJQUFJLENBQUMsVUFBVSxFQUFFLFNBQVMsRUFBRSxDQUFDO1lBQy9CLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUM1QixDQUFDO0lBQ0gsQ0FBQztJQUVPLGVBQWUsQ0FBQyxRQUFnQixFQUFFLEtBQWE7UUFDckQsSUFBSSxpQ0FBaUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUNyRCxRQUFRLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FDekIsaUNBQWlDLEVBQ2pDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQzVDLENBQUM7UUFDSixDQUFDO1FBRUQsTUFBTSxRQUFRLEdBQUcsMkNBQTJDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzVFLElBQUksUUFBUSxFQUFFLENBQUM7WUFDYixNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQztZQUM3QixPQUFPLFFBQVEsUUFBUSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxRQUFRLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLFFBQVEsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssS0FBSyxHQUFHLENBQUM7UUFDdEYsQ0FBQztRQUVELE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzlELElBQUksR0FBRyxFQUFFLENBQUM7WUFDUixHQUFHLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQztZQUN6QixNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDO1lBQzdCLE1BQU0sUUFBUSxHQUFHLGtDQUFrQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNqRSxJQUFJLFFBQVEsRUFBRSxDQUFDO2dCQUNiLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDO2dCQUM3QixPQUFPLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssS0FBSyxHQUFHLENBQUM7WUFDNUMsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRU8sZUFBZSxDQUFDLE1BQWtCO1FBQ3hDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRTtZQUNuQixNQUFNLEVBQUUsQ0FBQztZQUNULElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN4QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7K0dBdFFVLDBCQUEwQixrQkFpRDNCLGlCQUFpQjttR0FqRGhCLDBCQUEwQixxVUFFSixVQUFVLDZCQzNCN0MsNC9EQWtFQTs7NEZEekNhLDBCQUEwQjtrQkFMdEMsU0FBUzsrQkFDRSxxQkFBcUI7OzBCQXFENUIsTUFBTTsyQkFBQyxpQkFBaUI7OzBCQUFHLFFBQVE7OEZBaERmLFdBQVc7c0JBQWpDLFNBQVM7dUJBQUMsVUFBVTtnQkFDMEIsVUFBVTtzQkFBeEQsU0FBUzt1QkFBQyxZQUFZLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUVwQyxhQUFhO3NCQUFyQixLQUFLO2dCQUVJLGNBQWM7c0JBQXZCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBFbGVtZW50UmVmLFxyXG4gIE9uRGVzdHJveSxcclxuICBWaWV3Q2hpbGQsXHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBJbnB1dCxcclxuICBJbmplY3QsXHJcbiAgT3B0aW9uYWwsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIE91dHB1dCxcclxuICBPbkluaXQsXHJcbiAgTmdab25lLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgV2F2ZVN1cmZlciBmcm9tICd3YXZlc3VyZmVyLmpzJztcclxuaW1wb3J0IFJlY29yZFBsdWdpbiBmcm9tICd3YXZlc3VyZmVyLmpzL2Rpc3QvcGx1Z2lucy9yZWNvcmQuanMnO1xyXG5pbXBvcnQgeyBDT01QT05FTlRfTElCUkFSWSwgQ29tcG9uZW50TGlicmFyeSB9IGZyb20gJy4uLy4uLy4uLy4uL3V0aWxpdHkvY29tcG9uZW50TGlicmFyeSc7XHJcbmltcG9ydCB7IEljb25Qb3NpdGlvbiwgVWlBY3Rpb25CdXR0b25UeXBlLCBVaUFjdGlvbkRlc2NyaXB0b3IgfSBmcm9tICcuLi8uLi8uLi8uLi9hcGknO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICd2b2ljZS1yZWNvcmQtd2lkZ2V0JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdm9pY2UtcmVjb3JkLXdpZGdldC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdm9pY2UtcmVjb3JkLXdpZGdldC5jb21wb25lbnQuY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBWb2ljZVJlY29yZFdpZGdldENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcclxuICBAVmlld0NoaWxkKCd3YXZlZm9ybScpIHdhdmVmb3JtUmVmITogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdtYWluQnV0dG9uJywgeyByZWFkOiBFbGVtZW50UmVmIH0pIG1haW5CdXR0b24hOiBFbGVtZW50UmVmO1xyXG5cclxuICBASW5wdXQoKSBvcGVuRGlyZWN0aW9uOiAnTEVGVCcgfCAnUklHSFQnID0gJ1JJR0hUJztcclxuXHJcbiAgQE91dHB1dCgpIHJlY29yZGluZ1NhdmVkID0gbmV3IEV2ZW50RW1pdHRlcjxCbG9iPigpO1xyXG5cclxuICBwcml2YXRlIHdhdmVzdXJmZXI/OiBXYXZlU3VyZmVyO1xyXG4gIHByaXZhdGUgcmVjb3JkPzogUmVjb3JkUGx1Z2luO1xyXG5cclxuICBjb21wTGliOiBDb21wb25lbnRMaWJyYXJ5O1xyXG4gIGNvbXBvbmVudExpYnJhcnkgPSBDb21wb25lbnRMaWJyYXJ5O1xyXG5cclxuICBpc1JlY29yZGluZyA9IGZhbHNlO1xyXG4gIHJlY29yZGVkQmxvYjogQmxvYiB8IG51bGwgPSBudWxsO1xyXG4gIHRpbWU6IHN0cmluZyA9ICcwMDowMCc7XHJcbiAgaXNQbGF5aW5nID0gZmFsc2U7XHJcbiAgaXNXYXZlZm9ybU9wZW4gPSBmYWxzZTtcclxuXHJcbiAgbWljQnV0dG9uOiBVaUFjdGlvbkRlc2NyaXB0b3IgPSB7XHJcbiAgICB0aXRsZTogJycsXHJcbiAgICB0eXBlOiBVaUFjdGlvbkJ1dHRvblR5cGUuSUNPTixcclxuICAgIGljb246ICdtaWNyb3Bob25lJyxcclxuICAgIGljb25Qb3NpdGlvbjogSWNvblBvc2l0aW9uLlBSRSxcclxuICAgIGNvbG9yOiAncHJpbWFyeScsXHJcbiAgfTtcclxuXHJcbiAgc3RvcEJ1dHRvbjogVWlBY3Rpb25EZXNjcmlwdG9yID0ge1xyXG4gICAgdGl0bGU6ICcnLFxyXG4gICAgdHlwZTogVWlBY3Rpb25CdXR0b25UeXBlLklDT04sXHJcbiAgICBpY29uOiAnc3RvcC1jaXJjbGUnLFxyXG4gICAgaWNvblBvc2l0aW9uOiBJY29uUG9zaXRpb24uUFJFLFxyXG4gICAgaWNvbkNvbG9yOiAncmVkJyxcclxuICAgIGNvbG9yOiAncHJpbWFyeScsXHJcbiAgfTtcclxuXHJcbiAgc2F2ZUJ1dHRvbjogVWlBY3Rpb25EZXNjcmlwdG9yID0ge1xyXG4gICAgdGl0bGU6ICcnLFxyXG4gICAgdHlwZTogVWlBY3Rpb25CdXR0b25UeXBlLklDT04sXHJcbiAgICBpY29uOiAnc2F2ZScsXHJcbiAgICBpY29uUG9zaXRpb246IEljb25Qb3NpdGlvbi5QUkUsXHJcbiAgICBjb2xvcjogJ3ByaW1hcnknLFxyXG4gIH07XHJcblxyXG4gIHBsYXlCdXR0b24hOiBVaUFjdGlvbkRlc2NyaXB0b3I7XHJcbiAgc3RvcFBsYXliYWNrQnV0dG9uITogVWlBY3Rpb25EZXNjcmlwdG9yO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIEBJbmplY3QoQ09NUE9ORU5UX0xJQlJBUlkpIEBPcHRpb25hbCgpIGNvbXBMaWI6IENvbXBvbmVudExpYnJhcnkgfCB1bmRlZmluZWQsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IG5nWm9uZTogTmdab25lLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWZcclxuICApIHtcclxuICAgIHRoaXMuY29tcExpYiA9IGNvbXBMaWIgPz8gQ29tcG9uZW50TGlicmFyeS5QUklNRU5HO1xyXG4gIH1cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMucGxheUJ1dHRvbiA9IHtcclxuICAgICAgdGl0bGU6ICcnLFxyXG4gICAgICB0eXBlOiBVaUFjdGlvbkJ1dHRvblR5cGUuSUNPTixcclxuICAgICAgaWNvbjogdGhpcy5jb21wTGliID09PSBDb21wb25lbnRMaWJyYXJ5LlBSSU1FTkcgPyAncGxheS1jaXJjbGUnIDogJ3BsYXlfY2lyY2xlJyxcclxuICAgICAgaWNvblBvc2l0aW9uOiBJY29uUG9zaXRpb24uUFJFLFxyXG4gICAgICBjb2xvcjogJ3ByaW1hcnknLFxyXG4gICAgfTtcclxuICAgIHRoaXMuc3RvcFBsYXliYWNrQnV0dG9uID0ge1xyXG4gICAgICB0aXRsZTogJycsXHJcbiAgICAgIHR5cGU6IFVpQWN0aW9uQnV0dG9uVHlwZS5JQ09OLFxyXG4gICAgICBpY29uOiB0aGlzLmNvbXBMaWIgPT09IENvbXBvbmVudExpYnJhcnkuUFJJTUVORyA/ICdzdG9wLWNpcmNsZScgOiAnc3RvcF9jaXJjbGUnLFxyXG4gICAgICBpY29uUG9zaXRpb246IEljb25Qb3NpdGlvbi5QUkUsXHJcbiAgICAgIGNvbG9yOiAncmVkJyxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7fVxyXG5cclxuICBnZXQgaXNMZWZ0RGlyZWN0aW9uKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMub3BlbkRpcmVjdGlvbiA9PT0gJ0xFRlQnO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBpbml0aWFsaXplV2F2ZVN1cmZlcklmTmVlZGVkKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKHRoaXMud2F2ZXN1cmZlciB8fCAhdGhpcy53YXZlZm9ybVJlZj8ubmF0aXZlRWxlbWVudCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiByZXNvbHZlKCkpKTtcclxuXHJcbiAgICBsZXQgYm9keSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2JvZHknKTtcclxuICAgIGxldCBwcmltYXJ5Q29sb3IgPSBnZXRDb21wdXRlZFN0eWxlKGJvZHkhKS5nZXRQcm9wZXJ0eVZhbHVlKCctLXByaW1hcnktY29sb3InKS50cmltKCk7XHJcblxyXG4gICAgbGV0IGVsID0gdGhpcy5tYWluQnV0dG9uLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLnNiNC1wcmltYXJ5JykgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICBsZXQgcmVtSW5QeCA9IHBhcnNlRmxvYXQoZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpLmZvbnRTaXplKTtcclxuICAgIGxldCBoZWlnaHQgPSAoZWw/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCA/PyAwKSAtIHJlbUluUHggKiAwLjE7XHJcblxyXG4gICAgdGhpcy53YXZlZm9ybVJlZi5uYXRpdmVFbGVtZW50LnN0eWxlLnBhZGRpbmcgPSAnMC4xcmVtJztcclxuXHJcbiAgICB0aGlzLndhdmVzdXJmZXIgPSBXYXZlU3VyZmVyLmNyZWF0ZSh7XHJcbiAgICAgIGNvbnRhaW5lcjogdGhpcy53YXZlZm9ybVJlZi5uYXRpdmVFbGVtZW50LFxyXG4gICAgICB3YXZlQ29sb3I6IHByaW1hcnlDb2xvcixcclxuICAgICAgcHJvZ3Jlc3NDb2xvcjogdGhpcy5hZGRBbHBoYVRvQ29sb3IocHJpbWFyeUNvbG9yISwgMC41KSxcclxuICAgICAgaGVpZ2h0OiBoZWlnaHQsXHJcbiAgICAgIGJhcldpZHRoOiA1LFxyXG4gICAgICBiYXJHYXA6IDEsXHJcbiAgICAgIGJhclJhZGl1czogNSxcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMud2F2ZXN1cmZlci5zZXRWb2x1bWUoMSk7XHJcblxyXG4gICAgdGhpcy5yZWNvcmQgPSB0aGlzLndhdmVzdXJmZXIucmVnaXN0ZXJQbHVnaW4oXHJcbiAgICAgIFJlY29yZFBsdWdpbi5jcmVhdGUoe1xyXG4gICAgICAgIHJlbmRlclJlY29yZGVkQXVkaW86IHRydWUsXHJcbiAgICAgICAgc2Nyb2xsaW5nV2F2ZWZvcm06IHRydWUsXHJcbiAgICAgICAgY29udGludW91c1dhdmVmb3JtOiBmYWxzZSxcclxuICAgICAgICBjb250aW51b3VzV2F2ZWZvcm1EdXJhdGlvbjogMTUsXHJcbiAgICAgICAgbWltZVR5cGU6ICdhdWRpby93ZWJtJyxcclxuICAgICAgfSlcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy53YXZlc3VyZmVyLm9uKCdkYmxjbGljaycsICgpID0+IHtcclxuICAgICAgdGhpcy51cGRhdGVWaWV3U3RhdGUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMud2F2ZXN1cmZlcj8ucGxheSgpO1xyXG4gICAgICAgIHRoaXMuaXNQbGF5aW5nID0gdHJ1ZTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMucmVjb3JkLm9uKCdyZWNvcmQtZW5kJywgKGJsb2I6IEJsb2IpID0+IHtcclxuICAgICAgdGhpcy51cGRhdGVWaWV3U3RhdGUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMucmVjb3JkZWRCbG9iID0gYmxvYjtcclxuICAgICAgICB0aGlzLmlzUmVjb3JkaW5nID0gZmFsc2U7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLnJlY29yZC5vbigncmVjb3JkLXByb2dyZXNzJywgKHRpbWUpID0+IHtcclxuICAgICAgdGhpcy51cGRhdGVWaWV3U3RhdGUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMudXBkYXRlUHJvZ3Jlc3ModGltZSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLndhdmVzdXJmZXIub24oJ2ZpbmlzaCcsICgpID0+IHtcclxuICAgICAgdGhpcy51cGRhdGVWaWV3U3RhdGUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuaXNQbGF5aW5nID0gZmFsc2U7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBzdGFydFJlY29yZGluZygpIHtcclxuICAgIGNvbnN0IGNvbmZpcm1lZCA9IGF3YWl0IHRoaXMuY2hlY2tIYXNSZWNvcmRlZCgpO1xyXG4gICAgaWYgKCFjb25maXJtZWQgfHwgdGhpcy5pc1JlY29yZGluZykgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMudXBkYXRlVmlld1N0YXRlKCgpID0+IHtcclxuICAgICAgdGhpcy5pc1dhdmVmb3JtT3BlbiA9IHRydWU7XHJcbiAgICAgIHRoaXMuaXNSZWNvcmRpbmcgPSB0cnVlO1xyXG4gICAgICB0aGlzLmlzUGxheWluZyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnJlY29yZGVkQmxvYiA9IG51bGw7XHJcbiAgICAgIHRoaXMudGltZSA9ICcwMDowMCc7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBhd2FpdCB0aGlzLmluaXRpYWxpemVXYXZlU3VyZmVySWZOZWVkZWQoKTtcclxuXHJcbiAgICAgIGlmICghdGhpcy5yZWNvcmQpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1ZvaWNlIHJlY29yZGVyIHBsdWdpbiBpcyBub3QgaW5pdGlhbGl6ZWQuJyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGF3YWl0IHRoaXMucmVjb3JkLnN0YXJ0UmVjb3JkaW5nKCk7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICB0aGlzLnVwZGF0ZVZpZXdTdGF0ZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5pc1JlY29yZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaXNXYXZlZm9ybU9wZW4gPSAhIXRoaXMucmVjb3JkZWRCbG9iO1xyXG4gICAgICB9KTtcclxuICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHByaXZhdGUgYXN5bmMgY2hlY2tIYXNSZWNvcmRlZCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGlmICh0aGlzLnJlY29yZGVkQmxvYikge1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlUHJvZ3Jlc3ModGltZTogbnVtYmVyKSB7XHJcbiAgICBsZXQgZm9ybWF0dGVkVGltZSA9IFtNYXRoLmZsb29yKCh0aW1lICUgMzYwMDAwMCkgLyA2MDAwMCksIE1hdGguZmxvb3IoKHRpbWUgJSA2MDAwMCkgLyAxMDAwKV1cclxuICAgICAgLm1hcCgodikgPT4gKHYgPCAxMCA/ICcwJyArIHYgOiB2KSlcclxuICAgICAgLmpvaW4oJzonKTtcclxuICAgIHRoaXMudGltZSA9IGZvcm1hdHRlZFRpbWU7XHJcbiAgfVxyXG5cclxuICBzdG9wUmVjb3JkaW5nKCkge1xyXG4gICAgaWYgKHRoaXMucmVjb3JkICYmIHRoaXMuaXNSZWNvcmRpbmcpIHtcclxuICAgICAgdGhpcy5yZWNvcmQuc3RvcFJlY29yZGluZygpO1xyXG4gICAgICB0aGlzLnVwZGF0ZVZpZXdTdGF0ZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5pc1JlY29yZGluZyA9IGZhbHNlO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNhdmVSZWNvcmRpbmcoKSB7XHJcbiAgICBpZiAodGhpcy5yZWNvcmRlZEJsb2IpIHtcclxuICAgICAgbGV0IG5vdyA9IG5ldyBEYXRlKCk7XHJcbiAgICAgIGxldCBmb3JtYXR0ZWREYXRlID0gbm93LnRvTG9jYWxlU3RyaW5nKCdzdi1TRScpLnJlcGxhY2UoJyAnLCAnXycpLnJlcGxhY2UoLzovZywgJy0nKTtcclxuICAgICAgbGV0IGZpbGVOYW1lID0gYHJlY29yZGluZ18ke2Zvcm1hdHRlZERhdGV9LndlYm1gO1xyXG4gICAgICBsZXQgZmlsZSA9IG5ldyBGaWxlKFt0aGlzLnJlY29yZGVkQmxvYl0sIGZpbGVOYW1lLCB7IHR5cGU6ICdhdWRpby93ZWJtJyB9KTtcclxuXHJcbiAgICAgIHRoaXMucmVjb3JkaW5nU2F2ZWQuZW1pdChmaWxlKTtcclxuXHJcbiAgICAgIC8vIERlc3Ryb3kgY29tcGxldGVseSBzbyBuZXh0IHJlY29yZGluZyBpbml0aWFsaXplcyBmcmVzaFxyXG4gICAgICB0aGlzLndhdmVzdXJmZXI/LmRlc3Ryb3koKTtcclxuICAgICAgdGhpcy53YXZlc3VyZmVyID0gdW5kZWZpbmVkO1xyXG4gICAgICB0aGlzLnJlY29yZCA9IHVuZGVmaW5lZDtcclxuXHJcbiAgICAgIHRoaXMudXBkYXRlVmlld1N0YXRlKCgpID0+IHtcclxuICAgICAgICB0aGlzLnJlY29yZGVkQmxvYiA9IG51bGw7XHJcbiAgICAgICAgdGhpcy50aW1lID0gJzAwOjAwJztcclxuICAgICAgICB0aGlzLmlzUGxheWluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaXNXYXZlZm9ybU9wZW4gPSBmYWxzZTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXBsYXlSZWNvcmRpbmcoKSB7XHJcbiAgICBpZiAodGhpcy5yZWNvcmRlZEJsb2IpIHtcclxuICAgICAgdGhpcy51cGRhdGVWaWV3U3RhdGUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuaXNQbGF5aW5nID0gIXRoaXMuaXNQbGF5aW5nO1xyXG4gICAgICAgIHRoaXMud2F2ZXN1cmZlcj8ucGxheVBhdXNlKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICBpZiAodGhpcy53YXZlc3VyZmVyKSB7XHJcbiAgICAgIHRoaXMud2F2ZXN1cmZlci5kZXN0cm95KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFkZEFscGhhVG9Db2xvcihoZXhDb2xvcjogc3RyaW5nLCBhbHBoYTogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIGlmICgvXiMoW2EtZlxcZF0pKFthLWZcXGRdKShbYS1mXFxkXSkkL2kudGVzdChoZXhDb2xvcikpIHtcclxuICAgICAgaGV4Q29sb3IgPSBoZXhDb2xvci5yZXBsYWNlKFxyXG4gICAgICAgIC9eIyhbYS1mXFxkXSkoW2EtZlxcZF0pKFthLWZcXGRdKSQvaSxcclxuICAgICAgICAoXywgciwgZywgYikgPT4gYCMke3J9JHtyfSR7Z30ke2d9JHtifSR7Yn1gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgaGV4TWF0Y2ggPSAvXiM/KFthLWZcXGRdezJ9KShbYS1mXFxkXXsyfSkoW2EtZlxcZF17Mn0pJC9pLmV4ZWMoaGV4Q29sb3IpO1xyXG4gICAgaWYgKGhleE1hdGNoKSB7XHJcbiAgICAgIGNvbnN0IFssIHIsIGcsIGJdID0gaGV4TWF0Y2g7XHJcbiAgICAgIHJldHVybiBgcmdiYSgke3BhcnNlSW50KHIsIDE2KX0sICR7cGFyc2VJbnQoZywgMTYpfSwgJHtwYXJzZUludChiLCAxNil9LCAke2FscGhhfSlgO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGN0eCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpLmdldENvbnRleHQoJzJkJyk7XHJcbiAgICBpZiAoY3R4KSB7XHJcbiAgICAgIGN0eC5maWxsU3R5bGUgPSBoZXhDb2xvcjtcclxuICAgICAgY29uc3QgcGFyc2VkID0gY3R4LmZpbGxTdHlsZTtcclxuICAgICAgY29uc3QgcmdiTWF0Y2ggPSAvXnJnYlxcKChcXGQrKSxcXHMqKFxcZCspLFxccyooXFxkKylcXCkkLy5leGVjKHBhcnNlZCk7XHJcbiAgICAgIGlmIChyZ2JNYXRjaCkge1xyXG4gICAgICAgIGNvbnN0IFssIHIsIGcsIGJdID0gcmdiTWF0Y2g7XHJcbiAgICAgICAgcmV0dXJuIGByZ2JhKCR7cn0sICR7Z30sICR7Yn0sICR7YWxwaGF9KWA7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaGV4Q29sb3I7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZVZpZXdTdGF0ZSh1cGRhdGU6ICgpID0+IHZvaWQpOiB2b2lkIHtcclxuICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XHJcbiAgICAgIHVwZGF0ZSgpO1xyXG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXZcclxuICBjbGFzcz1cInJlY29yZGVyQ29udGFpbmVyXCJcclxuICBbY2xhc3MuZGlyZWN0aW9uLWxlZnRdPVwiaXNMZWZ0RGlyZWN0aW9uXCJcclxuICBbY2xhc3MuZGlyZWN0aW9uLXJpZ2h0XT1cIiFpc0xlZnREaXJlY3Rpb25cIlxyXG4gIFtjbGFzcy5hY3RpdmVdPVwiaXNXYXZlZm9ybU9wZW4gfHwgaXNSZWNvcmRpbmcgfHwgISFyZWNvcmRlZEJsb2JcIlxyXG4gIFtjbGFzcy5pc1JlY29yZGluZ109XCJpc1JlY29yZGluZ1wiXHJcbiAgW2NsYXNzLmhhc1JlY29yZGluZ109XCJyZWNvcmRlZEJsb2JcIlxyXG4+XHJcbiAgPGRpdiBjbGFzcz1cInJlY29yZGVyTWFpblwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInJlY29yZGVyVG9vbGJhclwiPlxyXG4gICAgICA8IS0tIFN0YXJ0IFJlY29yZGluZyAtLT5cclxuICAgICAgPHVpLWFjdGlvbi1idXR0b25cclxuICAgICAgICBjbGFzcz1cIm1haW5CdXR0b25cIlxyXG4gICAgICAgICNtYWluQnV0dG9uXHJcbiAgICAgICAgKm5nSWY9XCIhaXNSZWNvcmRpbmdcIlxyXG4gICAgICAgIFtkZXNjcmlwdG9yXT1cIm1pY0J1dHRvblwiXHJcbiAgICAgICAgKGFjdGlvbkNsaWNrKT1cInN0YXJ0UmVjb3JkaW5nKClcIlxyXG4gICAgICA+XHJcbiAgICAgIDwvdWktYWN0aW9uLWJ1dHRvbj5cclxuXHJcbiAgICAgIDwhLS0gU3RvcCBSZWNvcmRpbmcgLS0+XHJcbiAgICAgIDx1aS1hY3Rpb24tYnV0dG9uXHJcbiAgICAgICAgY2xhc3M9XCJtYWluQnV0dG9uXCJcclxuICAgICAgICAjbWFpbkJ1dHRvblxyXG4gICAgICAgICpuZ0lmPVwiaXNSZWNvcmRpbmdcIlxyXG4gICAgICAgIFtkZXNjcmlwdG9yXT1cInN0b3BCdXR0b25cIlxyXG4gICAgICAgIChhY3Rpb25DbGljayk9XCJzdG9wUmVjb3JkaW5nKClcIlxyXG4gICAgICA+XHJcbiAgICAgIDwvdWktYWN0aW9uLWJ1dHRvbj5cclxuXHJcbiAgICAgIDwhLS0gU2F2ZSBSZWNvcmRpbmcgLS0+XHJcbiAgICAgIDx1aS1hY3Rpb24tYnV0dG9uXHJcbiAgICAgICAgY2xhc3M9XCJtYWluQnV0dG9uXCJcclxuICAgICAgICAqbmdJZj1cInJlY29yZGVkQmxvYlwiXHJcbiAgICAgICAgW2Rlc2NyaXB0b3JdPVwic2F2ZUJ1dHRvblwiXHJcbiAgICAgICAgKGFjdGlvbkNsaWNrKT1cInNhdmVSZWNvcmRpbmcoKVwiXHJcbiAgICAgID5cclxuICAgICAgPC91aS1hY3Rpb24tYnV0dG9uPlxyXG5cclxuICAgICAgPCEtLSBTdGFydCBQbGF5ICAtLT5cclxuICAgICAgPHVpLWFjdGlvbi1idXR0b25cclxuICAgICAgICBjbGFzcz1cIm1haW5CdXR0b25cIlxyXG4gICAgICAgICpuZ0lmPVwicmVjb3JkZWRCbG9iICYmICFpc1BsYXlpbmdcIlxyXG4gICAgICAgIFtkZXNjcmlwdG9yXT1cInBsYXlCdXR0b25cIlxyXG4gICAgICAgIChhY3Rpb25DbGljayk9XCJyZXBsYXlSZWNvcmRpbmcoKVwiXHJcbiAgICAgID48L3VpLWFjdGlvbi1idXR0b24+XHJcblxyXG4gICAgICA8IS0tIFN0b3AgUGxheSAgLS0+XHJcbiAgICAgIDx1aS1hY3Rpb24tYnV0dG9uXHJcbiAgICAgICAgY2xhc3M9XCJtYWluQnV0dG9uXCJcclxuICAgICAgICAqbmdJZj1cInJlY29yZGVkQmxvYiAmJiBpc1BsYXlpbmdcIlxyXG4gICAgICAgIFtkZXNjcmlwdG9yXT1cInN0b3BQbGF5YmFja0J1dHRvblwiXHJcbiAgICAgICAgKGFjdGlvbkNsaWNrKT1cInJlcGxheVJlY29yZGluZygpXCJcclxuICAgICAgPjwvdWktYWN0aW9uLWJ1dHRvbj5cclxuXHJcbiAgICAgIEBpZiAoaXNSZWNvcmRpbmcpIHtcclxuICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZ3Jlc3NcIj57eyB0aW1lIH19PC9kaXY+XHJcbiAgICAgIH1cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJ3YXZlZm9ybUJhbmRcIiBbY2xhc3Mub3Blbl09XCJpc1dhdmVmb3JtT3BlbiB8fCBpc1JlY29yZGluZyB8fCAhIXJlY29yZGVkQmxvYlwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwid2F2ZWZvcm1HcmlkXCI+PC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ3YXZlZm9ybVwiICN3YXZlZm9ybT48L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19