@rlucan/ui 14.2.6 → 17.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -24
- package/esm2022/lib/action-button/action-button.component.mjs +4 -4
- package/esm2022/lib/action-icon/action-icon.component.mjs +5 -5
- package/esm2022/lib/autocomplete/autocomplete.component.mjs +7 -7
- package/esm2022/lib/avatar/avatar.component.mjs +5 -5
- package/esm2022/lib/button/button.component.mjs +5 -5
- package/esm2022/lib/checkbox/checkbox.component.mjs +6 -6
- package/esm2022/lib/checkbox-group/checkbox-group.component.mjs +6 -6
- package/esm2022/lib/currency/currency.component.mjs +6 -6
- package/esm2022/lib/date/date.component.mjs +7 -7
- package/esm2022/lib/dialog/dialog.component.mjs +5 -5
- package/esm2022/lib/directives/force-visibility/force-visibility.directive.mjs +5 -5
- package/esm2022/lib/editor/editor.component.mjs +7 -7
- package/esm2022/lib/elements/burger/burger.component.mjs +5 -5
- package/esm2022/lib/elements/expander/expander.component.mjs +5 -5
- package/esm2022/lib/elements/validation-message/validation-message.component.mjs +6 -6
- package/esm2022/lib/file/file.component.mjs +6 -6
- package/esm2022/lib/file-uploader/ui-file-uploader.component.mjs +8 -8
- package/esm2022/lib/input/input.component.mjs +8 -8
- package/esm2022/lib/input-autocomplete/input-autocomplete.component.mjs +8 -8
- package/esm2022/lib/layouts/base/ui-base-layout.component.mjs +4 -4
- package/esm2022/lib/layouts/base/ui-base.component.mjs +5 -5
- package/esm2022/lib/layouts/simple/ui-simple-layout.component.mjs +4 -4
- package/esm2022/lib/layouts/simple/ui-simple.component.mjs +5 -5
- package/esm2022/lib/radio/radio.component.mjs +4 -4
- package/esm2022/lib/radio-group/radio-group.component.mjs +6 -6
- package/esm2022/lib/select/select.component.mjs +28 -17
- package/esm2022/lib/services/message-box.service.mjs +12 -12
- package/esm2022/lib/services/toast.service.mjs +5 -5
- package/esm2022/lib/services/ui-file.service.mjs +6 -6
- package/esm2022/lib/services/ui-translate.service.mjs +4 -4
- package/esm2022/lib/submit-button/submit-button.component.mjs +6 -6
- package/esm2022/lib/table/table.component.mjs +6 -6
- package/esm2022/lib/text-area/text-area.component.mjs +7 -7
- package/esm2022/lib/ui.module.mjs +5 -5
- package/fesm2022/rlucan-ui.mjs +187 -176
- package/fesm2022/rlucan-ui.mjs.map +1 -1
- package/lib/action-button/action-button.component.d.ts +2 -6
- package/lib/select/select.component.d.ts +4 -2
- package/package.json +14 -14
- package/src/js/editorjs.mjs +9634 -9634
|
@@ -347,21 +347,21 @@ export class UiFileUploaderComponent extends UiSimpleComponent {
|
|
|
347
347
|
console.log(f);
|
|
348
348
|
}
|
|
349
349
|
}
|
|
350
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
351
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
350
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: UiFileUploaderComponent, deps: [{ token: UI_FILESERVICE, optional: true }, { token: UI_TRANSLATESERVICE }, { token: i1.ControlContainer, host: true, optional: true, skipSelf: true }, { token: i2.UiFileService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
351
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.2", type: UiFileUploaderComponent, selector: "ui-file-uploader", inputs: { maxFiles: "maxFiles", multiple: "multiple", crop: "crop", cropRounded: "cropRounded", cropMaxWidth: "cropMaxWidth", fileSize: "fileSize", customFileMenu: "customFileMenu", addHint: "addHint", newFilePosition: "newFilePosition", templates: "templates", previewPosition: "previewPosition" }, outputs: { imageCropped: "imageCropped", fileEvent: "fileEvent" }, providers: [{
|
|
352
352
|
provide: NG_VALUE_ACCESSOR,
|
|
353
353
|
multi: true,
|
|
354
354
|
useExisting: UiFileUploaderComponent,
|
|
355
|
-
}], usesInheritance: true, ngImport: i0, template: "<div class=\"label\" *ngIf=\"label\">\r\n <div class=\"text-container\" [matTooltip]=\"required ? translateService.instant('ui.controls.validation.required') : undefined\" [matTooltipPosition]=\"'above'\">\r\n <div class=\"text\">{{label}}</div>\r\n <div *ngIf=\"required\" class=\"required\">*</div>\r\n </div>\r\n</div>\r\n\r\n<div class=\"files-container\" [ngClass]=\"{dragging: dragging, disabled: uploading || !editable}\">\r\n\r\n <div class=\"existing-files\">\r\n\r\n <div class=\"file-container\" *ngFor=\"let f of files\">\r\n\r\n <div class=\"file-menu\" (click)=\"toggleMenuVisibility(f)\" *ngIf=\"!customFileMenu && editable && !uploading\">\r\n <mat-icon>menu</mat-icon>\r\n </div>\r\n <div class=\"file-menu-container mat-elevation-z2\" [ngClass]=\"{visible: f === fileMenuOpened}\" (click)=\"menuClick()\" (mouseleave)=\"menuClick()\">\r\n <ng-container *ngIf=\"!menuTemplate\">\r\n <label class=\"menu-item\">{{ translateService.instant('ui.controls.ui-file-uploader.menu.change') }}\r\n <input *ngIf=\"!refreshAddInput\" style=\"display: none;\" type=\"file\" ngFileSelect [options]=\"uploadOptions\" (change)=\"fileChangeEvent($event, f)\"\r\n (uploadOutput)=\"onUploadOutput($event)\" [uploadInput]=\"uploadInput\">\r\n </label>\r\n <div class=\"menu-item\" (click)=\"remove(f)\">{{ translateService.instant('ui.controls.ui-file-uploader.menu.delete') }}</div>\r\n </ng-container>\r\n <ng-container *ngIf=\"menuTemplate\">\r\n <ng-template [ngTemplateOutlet]=\"menuTemplate\" [ngTemplateOutletContext]=\"{fileInput: fileInput}\"></ng-template>\r\n <ng-template #fileInput>\r\n <input style=\"display: none;\" type=\"file\" ngFileSelect [options]=\"uploadOptions\" (change)=\"fileChangeEvent($event, f)\"\r\n (uploadOutput)=\"onUploadOutput($event)\" [uploadInput]=\"uploadInput\">\r\n </ng-template>\r\n </ng-container>\r\n </div>\r\n\r\n <div *ngIf=\"crop && !cropDone(f)\" (mouseenter)=\"startCropPreview(f.$newFile.id)\" (mouseleave)=\"stopCropPreview(f.$newFile.id)\">\r\n <div class=\"crop-container\" [ngStyle]=\"ngAddStyle\">\r\n\r\n <ui-file *ngIf=\"false && files.length > 0 && !cropSourceImages\" [fileSize]=\"fileSize\" [srcData]=\"files[0].custom\" [ngClass]=\"{rounded: cropRounded}\"></ui-file>\r\n\r\n <mat-spinner *ngIf=\"!cropperImageLoaded[f.$newFile.id] && cropSourceImages[f.$newFile.id]\" [diameter]=\"75\"></mat-spinner>\r\n\r\n <image-cropper *ngIf=\"cropSourceImages[f.$newFile.id]\"\r\n [imageFile]=\"cropSourceImages[f.$newFile.id]\"\r\n [maintainAspectRatio]=\"true\"\r\n [containWithinAspectRatio]=\"false\"\r\n [aspectRatio]=\"aspectRatio\"\r\n [resizeToWidth]=\"cropMaxWidth\"\r\n [onlyScaleDown]=\"false\"\r\n [roundCropper]=\"cropRounded\"\r\n [canvasRotation]=\"canvasRotation[f.$newFile.id]\"\r\n [transform]=\"transform[f.$newFile.id]\"\r\n [alignImage]=\"'center'\"\r\n [style.display]=\"showCropper ? null : 'none'\"\r\n [format]=\"'png'\"\r\n (imageCropped)=\"onImageCropped($event, f.$newFile.id)\"\r\n (imageLoaded)=\"imageLoaded(f.$newFile.id)\"\r\n (cropperReady)=\"cropperReady($event, f.$newFile.id)\"\r\n (loadImageFailed)=\"loadImageFailed()\"\r\n ></image-cropper>\r\n\r\n <div class=\"crop-preview mat-elevation-z2\" [class]=\"previewPosition\" *ngIf=\"true || (showCropPreview[f.$newFile.id] && cropperImageLoaded[f.$newFile.id])\">\r\n <div class=\"crop-menu\">\r\n <mat-icon (click)=\"zoomCroppedImage(.1, f.$newFile.id)\">zoom_in</mat-icon>\r\n <mat-icon (click)=\"zoomCroppedImage(- .1, f.$newFile.id)\">zoom_out</mat-icon>\r\n <mat-icon (click)=\"rotateCroppedImage(-1, f.$newFile.id)\">rotate_left</mat-icon>\r\n <mat-icon (click)=\"rotateCroppedImage(1, f.$newFile.id)\">rotate_right</mat-icon>\r\n <div style=\"flex: 1 1 100%\"></div>\r\n <label class=\"menu-item\">\r\n <mat-icon>upload_file</mat-icon>\r\n <input style=\"display: none;\" type=\"file\" ngFileSelect [options]=\"uploadOptions\" (change)=\"fileChangeEvent($event, f)\"\r\n (uploadOutput)=\"onUploadOutput($event)\" [uploadInput]=\"uploadInput\">\r\n </label>\r\n <mat-icon (click)=\"remove(f)\">delete_outline</mat-icon>\r\n <div style=\"flex: 1 1 100%\"></div>\r\n <mat-icon (click)=\"cropperDone(f.$newFile.id)\">done</mat-icon>\r\n </div>\r\n <img *ngIf=\"croppedImages[f.$newFile.id]\" [src]=\"croppedImages[f.$newFile.id].objectUrl\" [ngClass]=\"{rounded: cropRounded}\"/>\r\n </div>\r\n\r\n </div>\r\n\r\n\r\n\r\n </div>\r\n\r\n <ng-container *ngIf=\"!crop || cropDone(f)\">\r\n <ng-container *ngIf=\"fileTemplate\">\r\n <ng-template [ngTemplateOutlet]=\"fileTemplate\" [ngTemplateOutletContext]=\"{file: f, fileInput: fileInput2}\"></ng-template>\r\n <ng-template #fileInput2>\r\n <input style=\"display: none;\" type=\"file\" ngFileSelect [options]=\"uploadOptions\" (change)=\"fileChangeEvent($event, f)\"\r\n (uploadOutput)=\"onUploadOutput($event)\" [uploadInput]=\"uploadInput\">\r\n </ng-template>\r\n </ng-container>\r\n\r\n <ui-file *ngIf=\"!fileTemplate\" [fileSize]=\"fileSize\" [srcData]=\"f.$newFile ? f.$newFile: f.custom\" [ngClass]=\"{rounded: crop && cropRounded}\">\r\n </ui-file>\r\n\r\n <ng-container *ngIf=\"f.$newFile\">\r\n <div *ngIf=\"f.$newFile.responseStatus && f.$newFile.responseStatus !== 200\" class=\"progress-container error\">\r\n {{ translateService.instant('ui.controls.ui-file-uploader.uploadError', f.$newFile.response) }}\r\n </div>\r\n <div *ngIf=\"!f.$newFile.responseStatus && f.$newFile.progress.status === 1\" class=\"progress-container\">\r\n <div class=\"progress\" [ngStyle]=\"{width: f.$newFile.progress.data.percentage + '%'}\"></div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n\r\n </div>\r\n\r\n <div class=\"file-container add\" ngFileDrop [options]=\"uploadOptions\" (uploadOutput)=\"onUploadOutput($event)\" [uploadInput]=\"uploadInput\" [ngClass]=\"{visible: files.length < maxFiles || maxFiles === 0}\" [ngStyle]=\"addFileTemplate ? {} : ngAddStyle\">\r\n <label>\r\n <ng-container *ngIf=\"addFileTemplate\">\r\n <ng-template [ngTemplateOutlet]=\"addFileTemplate\"></ng-template>\r\n </ng-container>\r\n <ng-container *ngIf=\"!addFileTemplate\">\r\n <div class=\"upload-image-container\"></div>\r\n <img [src]=\"addFileImgSrc\" [ngClass]=\"{'with-hint': addHint}\" />\r\n <div *ngIf=\"addHint\" class=\"add-hint\">{{addHint}}</div>\r\n </ng-container>\r\n <input style=\"display: none;\" type=\"file\" ngFileSelect [options]=\"uploadOptions\" (uploadOutput)=\"onUploadOutput($event)\" [uploadInput]=\"uploadInput\" [multiple]=\"maxFiles === 0 && multiple\">\r\n </label>\r\n </div>\r\n\r\n</div>\r\n", styles: [":host{display:flex;flex-wrap:wrap}:host .label .text{font-size:.9em;line-height:1em;padding:6px 0 4px}:host .files-container{display:flex;flex-wrap:wrap;border-style:solid}:host .files-container .existing-files{display:flex;flex-wrap:wrap}:host .files-container.dragging .add label{border:2px dashed grey;background-color:#0000001a}:host .files-container.disabled .add{opacity:.5;pointer-events:none}:host .file-container{max-width:100%;max-height:100%;position:relative;display:flex;align-items:center;justify-content:center}:host .file-container .progress-container{position:absolute;bottom:0;left:1px;right:1px;height:20%;max-height:20px;background-color:#0000001a}:host .file-container .progress-container.error{background-color:red;color:#fff;display:flex;align-items:center;justify-content:center}:host .file-container .progress-container .progress{background-color:#0000004d;height:100%}:host .file-container.add{display:flex;align-items:center;flex-direction:column;transition:opacity .25s;cursor:pointer}:host .file-container.add:not(.visible){display:none}:host .file-container.add img{max-width:100%;max-height:100%}:host .file-container.add img.with-hint{max-height:75%}:host .file-container.add .add-hint{margin-top:8px;font-size:80%;text-align:center}:host .file-container.add label{position:absolute;inset:0;cursor:pointer;z-index:10;display:flex;flex-direction:column;align-items:center;justify-content:center}:host .file-container.add .upload-image-container{display:none}:host .file-container .file-menu-container{display:none;position:absolute;left:calc(100% - 45px);top:27px;z-index:1000}:host .file-container .file-menu-container ::ng-deep .menu-item{position:relative;padding:12px 24px;cursor:pointer;display:block}:host .file-container .file-menu-container.visible{display:block}:host .file-container .file-menu{display:flex;position:absolute;flex-direction:column;align-items:center;justify-content:center;padding:12px;right:10px;top:10px;background-color:#fff9;border-radius:50%;cursor:pointer;transition:all .25s;z-index:999}:host .file-container:hover .file-menu{background-color:#fff;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}:host .file-container mat-progress-bar{position:absolute;bottom:0;height:6px;left:0;right:0;z-index:1000}:host image-cropper{padding:0}:host ui-file.rounded ::ng-deep img{border-radius:50%}:host .crop-container{display:flex;align-items:center;justify-content:center;position:relative}:host .crop-container mat-spinner{position:absolute;z-index:1}:host .crop-container .crop-preview{position:absolute;top:100%;left:0;right:0;padding:6px;border:1px solid transparent;display:flex;flex-direction:column;align-items:center;justify-content:center;z-index:1000;max-width:350px;margin-right:auto;margin-left:auto}:host .crop-container .crop-preview.left{right:calc(100% + 6px);left:unset;top:0}:host .crop-container .crop-preview.above{bottom:100%;top:unset}:host .crop-container .crop-preview .crop-menu{width:100%;flex:0 0 auto;display:flex}:host .crop-container .crop-preview .crop-menu mat-icon{margin:0 3px;width:calc(1em + 6px);height:1em;font-size:2em;cursor:pointer;user-select:none;flex:1 1 100%}:host .crop-container .crop-preview img{margin:16px 0;max-width:256px;max-height:256px}:host .crop-container .crop-preview img.rounded{border-radius:50%}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i5.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "directive", type: i6.NgFileDropDirective, selector: "[ngFileDrop]", inputs: ["options", "uploadInput"], outputs: ["uploadOutput"] }, { kind: "directive", type: i6.NgFileSelectDirective, selector: "[ngFileSelect]", inputs: ["options", "uploadInput"], outputs: ["uploadOutput"] }, { kind: "component", type: i7.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: i8.ImageCropperComponent, selector: "image-cropper", inputs: ["imageChangedEvent", "imageURL", "imageBase64", "imageFile", "imageAltText", "cropperFrameAriaLabel", "output", "format", "transform", "maintainAspectRatio", "aspectRatio", "resetCropOnAspectRatioChange", "resizeToWidth", "resizeToHeight", "cropperMinWidth", "cropperMinHeight", "cropperMaxHeight", "cropperMaxWidth", "cropperStaticWidth", "cropperStaticHeight", "canvasRotation", "initialStepSize", "roundCropper", "onlyScaleDown", "imageQuality", "autoCrop", "backgroundColor", "containWithinAspectRatio", "hideResizeSquares", "allowMoveImage", "cropper", "alignImage", "disabled", "hidden"], outputs: ["imageCropped", "startCropImage", "imageLoaded", "cropperReady", "loadImageFailed", "transformChange"] }, { kind: "component", type: i9.FileComponent, selector: "ui-file", inputs: ["fileSize", "srcOptions", "srcData", "srcUrl"] }] }); }
|
|
355
|
+
}], usesInheritance: true, ngImport: i0, template: "<div class=\"label\" *ngIf=\"label\">\r\n <div class=\"text-container\" [matTooltip]=\"required ? translateService.instant('ui.controls.validation.required') : undefined\" [matTooltipPosition]=\"'above'\">\r\n <div class=\"text\">{{label}}</div>\r\n <div *ngIf=\"required\" class=\"required\">*</div>\r\n </div>\r\n</div>\r\n\r\n<div class=\"files-container\" [ngClass]=\"{dragging: dragging, disabled: uploading || !editable}\">\r\n\r\n <div class=\"existing-files\">\r\n\r\n <div class=\"file-container\" *ngFor=\"let f of files\">\r\n\r\n <div class=\"file-menu\" (click)=\"toggleMenuVisibility(f)\" *ngIf=\"!customFileMenu && editable && !uploading\">\r\n <mat-icon>menu</mat-icon>\r\n </div>\r\n <div class=\"file-menu-container mat-elevation-z2\" [ngClass]=\"{visible: f === fileMenuOpened}\" (click)=\"menuClick()\" (mouseleave)=\"menuClick()\">\r\n <ng-container *ngIf=\"!menuTemplate\">\r\n <label class=\"menu-item\">{{ translateService.instant('ui.controls.ui-file-uploader.menu.change') }}\r\n <input *ngIf=\"!refreshAddInput\" style=\"display: none;\" type=\"file\" ngFileSelect [options]=\"uploadOptions\" (change)=\"fileChangeEvent($event, f)\"\r\n (uploadOutput)=\"onUploadOutput($event)\" [uploadInput]=\"uploadInput\">\r\n </label>\r\n <div class=\"menu-item\" (click)=\"remove(f)\">{{ translateService.instant('ui.controls.ui-file-uploader.menu.delete') }}</div>\r\n </ng-container>\r\n <ng-container *ngIf=\"menuTemplate\">\r\n <ng-template [ngTemplateOutlet]=\"menuTemplate\" [ngTemplateOutletContext]=\"{fileInput: fileInput}\"></ng-template>\r\n <ng-template #fileInput>\r\n <input style=\"display: none;\" type=\"file\" ngFileSelect [options]=\"uploadOptions\" (change)=\"fileChangeEvent($event, f)\"\r\n (uploadOutput)=\"onUploadOutput($event)\" [uploadInput]=\"uploadInput\">\r\n </ng-template>\r\n </ng-container>\r\n </div>\r\n\r\n <div *ngIf=\"crop && !cropDone(f)\" (mouseenter)=\"startCropPreview(f.$newFile.id)\" (mouseleave)=\"stopCropPreview(f.$newFile.id)\">\r\n <div class=\"crop-container\" [ngStyle]=\"ngAddStyle\">\r\n\r\n <ui-file *ngIf=\"false && files.length > 0 && !cropSourceImages\" [fileSize]=\"fileSize\" [srcData]=\"files[0].custom\" [ngClass]=\"{rounded: cropRounded}\"></ui-file>\r\n\r\n <mat-spinner *ngIf=\"!cropperImageLoaded[f.$newFile.id] && cropSourceImages[f.$newFile.id]\" [diameter]=\"75\"></mat-spinner>\r\n\r\n <image-cropper *ngIf=\"cropSourceImages[f.$newFile.id]\"\r\n [imageFile]=\"cropSourceImages[f.$newFile.id]\"\r\n [maintainAspectRatio]=\"true\"\r\n [containWithinAspectRatio]=\"false\"\r\n [aspectRatio]=\"aspectRatio\"\r\n [resizeToWidth]=\"cropMaxWidth\"\r\n [onlyScaleDown]=\"false\"\r\n [roundCropper]=\"cropRounded\"\r\n [canvasRotation]=\"canvasRotation[f.$newFile.id]\"\r\n [transform]=\"transform[f.$newFile.id]\"\r\n [alignImage]=\"'center'\"\r\n [style.display]=\"showCropper ? null : 'none'\"\r\n [format]=\"'png'\"\r\n (imageCropped)=\"onImageCropped($event, f.$newFile.id)\"\r\n (imageLoaded)=\"imageLoaded(f.$newFile.id)\"\r\n (cropperReady)=\"cropperReady($event, f.$newFile.id)\"\r\n (loadImageFailed)=\"loadImageFailed()\"\r\n ></image-cropper>\r\n\r\n <div class=\"crop-preview mat-elevation-z2\" [class]=\"previewPosition\" *ngIf=\"true || (showCropPreview[f.$newFile.id] && cropperImageLoaded[f.$newFile.id])\">\r\n <div class=\"crop-menu\">\r\n <mat-icon (click)=\"zoomCroppedImage(.1, f.$newFile.id)\">zoom_in</mat-icon>\r\n <mat-icon (click)=\"zoomCroppedImage(- .1, f.$newFile.id)\">zoom_out</mat-icon>\r\n <mat-icon (click)=\"rotateCroppedImage(-1, f.$newFile.id)\">rotate_left</mat-icon>\r\n <mat-icon (click)=\"rotateCroppedImage(1, f.$newFile.id)\">rotate_right</mat-icon>\r\n <div style=\"flex: 1 1 100%\"></div>\r\n <label class=\"menu-item\">\r\n <mat-icon>upload_file</mat-icon>\r\n <input style=\"display: none;\" type=\"file\" ngFileSelect [options]=\"uploadOptions\" (change)=\"fileChangeEvent($event, f)\"\r\n (uploadOutput)=\"onUploadOutput($event)\" [uploadInput]=\"uploadInput\">\r\n </label>\r\n <mat-icon (click)=\"remove(f)\">delete_outline</mat-icon>\r\n <div style=\"flex: 1 1 100%\"></div>\r\n <mat-icon (click)=\"cropperDone(f.$newFile.id)\">done</mat-icon>\r\n </div>\r\n <img *ngIf=\"croppedImages[f.$newFile.id]\" [src]=\"croppedImages[f.$newFile.id].objectUrl\" [ngClass]=\"{rounded: cropRounded}\"/>\r\n </div>\r\n\r\n </div>\r\n\r\n\r\n\r\n </div>\r\n\r\n <ng-container *ngIf=\"!crop || cropDone(f)\">\r\n <ng-container *ngIf=\"fileTemplate\">\r\n <ng-template [ngTemplateOutlet]=\"fileTemplate\" [ngTemplateOutletContext]=\"{file: f, fileInput: fileInput2}\"></ng-template>\r\n <ng-template #fileInput2>\r\n <input style=\"display: none;\" type=\"file\" ngFileSelect [options]=\"uploadOptions\" (change)=\"fileChangeEvent($event, f)\"\r\n (uploadOutput)=\"onUploadOutput($event)\" [uploadInput]=\"uploadInput\">\r\n </ng-template>\r\n </ng-container>\r\n\r\n <ui-file *ngIf=\"!fileTemplate\" [fileSize]=\"fileSize\" [srcData]=\"f.$newFile ? f.$newFile: f.custom\" [ngClass]=\"{rounded: crop && cropRounded}\">\r\n </ui-file>\r\n\r\n <ng-container *ngIf=\"f.$newFile\">\r\n <div *ngIf=\"f.$newFile.responseStatus && f.$newFile.responseStatus !== 200\" class=\"progress-container error\">\r\n {{ translateService.instant('ui.controls.ui-file-uploader.uploadError', f.$newFile.response) }}\r\n </div>\r\n <div *ngIf=\"!f.$newFile.responseStatus && f.$newFile.progress.status === 1\" class=\"progress-container\">\r\n <div class=\"progress\" [ngStyle]=\"{width: f.$newFile.progress.data.percentage + '%'}\"></div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n\r\n </div>\r\n\r\n <div class=\"file-container add\" ngFileDrop [options]=\"uploadOptions\" (uploadOutput)=\"onUploadOutput($event)\" [uploadInput]=\"uploadInput\" [ngClass]=\"{visible: files.length < maxFiles || maxFiles === 0}\" [ngStyle]=\"addFileTemplate ? {} : ngAddStyle\">\r\n <label>\r\n <ng-container *ngIf=\"addFileTemplate\">\r\n <ng-template [ngTemplateOutlet]=\"addFileTemplate\"></ng-template>\r\n </ng-container>\r\n <ng-container *ngIf=\"!addFileTemplate\">\r\n <div class=\"upload-image-container\"></div>\r\n <img [src]=\"addFileImgSrc\" [ngClass]=\"{'with-hint': addHint}\" />\r\n <div *ngIf=\"addHint\" class=\"add-hint\">{{addHint}}</div>\r\n </ng-container>\r\n <input style=\"display: none;\" type=\"file\" ngFileSelect [options]=\"uploadOptions\" (uploadOutput)=\"onUploadOutput($event)\" [uploadInput]=\"uploadInput\" [multiple]=\"maxFiles === 0 && multiple\">\r\n </label>\r\n </div>\r\n\r\n</div>\r\n", styles: [":host{display:flex;flex-wrap:wrap}:host .label .text{font-size:.9em;line-height:1em;padding:6px 0 4px}:host .files-container{display:flex;flex-wrap:wrap;border-style:solid}:host .files-container .existing-files{display:flex;flex-wrap:wrap}:host .files-container.dragging .add label{border:2px dashed grey;background-color:#0000001a}:host .files-container.disabled .add{opacity:.5;pointer-events:none}:host .file-container{max-width:100%;max-height:100%;position:relative;display:flex;align-items:center;justify-content:center}:host .file-container .progress-container{position:absolute;bottom:0;left:1px;right:1px;height:20%;max-height:20px;background-color:#0000001a}:host .file-container .progress-container.error{background-color:red;color:#fff;display:flex;align-items:center;justify-content:center}:host .file-container .progress-container .progress{background-color:#0000004d;height:100%}:host .file-container.add{display:flex;align-items:center;flex-direction:column;transition:opacity .25s;cursor:pointer}:host .file-container.add:not(.visible){display:none}:host .file-container.add img{max-width:100%;max-height:100%}:host .file-container.add img.with-hint{max-height:75%}:host .file-container.add .add-hint{margin-top:8px;font-size:80%;text-align:center}:host .file-container.add label{position:absolute;inset:0;cursor:pointer;z-index:10;display:flex;flex-direction:column;align-items:center;justify-content:center}:host .file-container.add .upload-image-container{display:none}:host .file-container .file-menu-container{display:none;position:absolute;left:calc(100% - 45px);top:27px;z-index:1000}:host .file-container .file-menu-container ::ng-deep .menu-item{position:relative;padding:12px 24px;cursor:pointer;display:block}:host .file-container .file-menu-container.visible{display:block}:host .file-container .file-menu{display:flex;position:absolute;flex-direction:column;align-items:center;justify-content:center;padding:12px;right:10px;top:10px;background-color:#fff9;border-radius:50%;cursor:pointer;transition:all .25s;z-index:999}:host .file-container:hover .file-menu{background-color:#fff;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}:host .file-container mat-progress-bar{position:absolute;bottom:0;height:6px;left:0;right:0;z-index:1000}:host image-cropper{padding:0}:host ui-file.rounded ::ng-deep img{border-radius:50%}:host .crop-container{display:flex;align-items:center;justify-content:center;position:relative}:host .crop-container mat-spinner{position:absolute;z-index:1}:host .crop-container .crop-preview{position:absolute;top:100%;left:0;right:0;padding:6px;border:1px solid transparent;display:flex;flex-direction:column;align-items:center;justify-content:center;z-index:1000;max-width:350px;margin-right:auto;margin-left:auto}:host .crop-container .crop-preview.left{right:calc(100% + 6px);left:unset;top:0}:host .crop-container .crop-preview.above{bottom:100%;top:unset}:host .crop-container .crop-preview .crop-menu{width:100%;flex:0 0 auto;display:flex}:host .crop-container .crop-preview .crop-menu mat-icon{margin:0 3px;width:calc(1em + 6px);height:1em;font-size:2em;cursor:pointer;-webkit-user-select:none;user-select:none;flex:1 1 100%}:host .crop-container .crop-preview img{margin:16px 0;max-width:256px;max-height:256px}:host .crop-container .crop-preview img.rounded{border-radius:50%}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i5.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: i6.NgFileDropDirective, selector: "[ngFileDrop]", inputs: ["options", "uploadInput"], outputs: ["uploadOutput"] }, { kind: "directive", type: i6.NgFileSelectDirective, selector: "[ngFileSelect]", inputs: ["options", "uploadInput"], outputs: ["uploadOutput"] }, { kind: "component", type: i7.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: i8.ImageCropperComponent, selector: "image-cropper", inputs: ["imageChangedEvent", "imageURL", "imageBase64", "imageFile", "imageAltText", "cropperFrameAriaLabel", "output", "format", "transform", "maintainAspectRatio", "aspectRatio", "resetCropOnAspectRatioChange", "resizeToWidth", "resizeToHeight", "cropperMinWidth", "cropperMinHeight", "cropperMaxHeight", "cropperMaxWidth", "cropperStaticWidth", "cropperStaticHeight", "canvasRotation", "initialStepSize", "roundCropper", "onlyScaleDown", "imageQuality", "autoCrop", "backgroundColor", "containWithinAspectRatio", "hideResizeSquares", "allowMoveImage", "cropper", "alignImage", "disabled", "hidden"], outputs: ["imageCropped", "startCropImage", "imageLoaded", "cropperReady", "loadImageFailed", "transformChange"] }, { kind: "component", type: i9.FileComponent, selector: "ui-file", inputs: ["fileSize", "srcOptions", "srcData", "srcUrl"] }] }); }
|
|
356
356
|
}
|
|
357
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
357
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: UiFileUploaderComponent, decorators: [{
|
|
358
358
|
type: Component,
|
|
359
359
|
args: [{ selector: 'ui-file-uploader', providers: [{
|
|
360
360
|
provide: NG_VALUE_ACCESSOR,
|
|
361
361
|
multi: true,
|
|
362
362
|
useExisting: UiFileUploaderComponent,
|
|
363
|
-
}], template: "<div class=\"label\" *ngIf=\"label\">\r\n <div class=\"text-container\" [matTooltip]=\"required ? translateService.instant('ui.controls.validation.required') : undefined\" [matTooltipPosition]=\"'above'\">\r\n <div class=\"text\">{{label}}</div>\r\n <div *ngIf=\"required\" class=\"required\">*</div>\r\n </div>\r\n</div>\r\n\r\n<div class=\"files-container\" [ngClass]=\"{dragging: dragging, disabled: uploading || !editable}\">\r\n\r\n <div class=\"existing-files\">\r\n\r\n <div class=\"file-container\" *ngFor=\"let f of files\">\r\n\r\n <div class=\"file-menu\" (click)=\"toggleMenuVisibility(f)\" *ngIf=\"!customFileMenu && editable && !uploading\">\r\n <mat-icon>menu</mat-icon>\r\n </div>\r\n <div class=\"file-menu-container mat-elevation-z2\" [ngClass]=\"{visible: f === fileMenuOpened}\" (click)=\"menuClick()\" (mouseleave)=\"menuClick()\">\r\n <ng-container *ngIf=\"!menuTemplate\">\r\n <label class=\"menu-item\">{{ translateService.instant('ui.controls.ui-file-uploader.menu.change') }}\r\n <input *ngIf=\"!refreshAddInput\" style=\"display: none;\" type=\"file\" ngFileSelect [options]=\"uploadOptions\" (change)=\"fileChangeEvent($event, f)\"\r\n (uploadOutput)=\"onUploadOutput($event)\" [uploadInput]=\"uploadInput\">\r\n </label>\r\n <div class=\"menu-item\" (click)=\"remove(f)\">{{ translateService.instant('ui.controls.ui-file-uploader.menu.delete') }}</div>\r\n </ng-container>\r\n <ng-container *ngIf=\"menuTemplate\">\r\n <ng-template [ngTemplateOutlet]=\"menuTemplate\" [ngTemplateOutletContext]=\"{fileInput: fileInput}\"></ng-template>\r\n <ng-template #fileInput>\r\n <input style=\"display: none;\" type=\"file\" ngFileSelect [options]=\"uploadOptions\" (change)=\"fileChangeEvent($event, f)\"\r\n (uploadOutput)=\"onUploadOutput($event)\" [uploadInput]=\"uploadInput\">\r\n </ng-template>\r\n </ng-container>\r\n </div>\r\n\r\n <div *ngIf=\"crop && !cropDone(f)\" (mouseenter)=\"startCropPreview(f.$newFile.id)\" (mouseleave)=\"stopCropPreview(f.$newFile.id)\">\r\n <div class=\"crop-container\" [ngStyle]=\"ngAddStyle\">\r\n\r\n <ui-file *ngIf=\"false && files.length > 0 && !cropSourceImages\" [fileSize]=\"fileSize\" [srcData]=\"files[0].custom\" [ngClass]=\"{rounded: cropRounded}\"></ui-file>\r\n\r\n <mat-spinner *ngIf=\"!cropperImageLoaded[f.$newFile.id] && cropSourceImages[f.$newFile.id]\" [diameter]=\"75\"></mat-spinner>\r\n\r\n <image-cropper *ngIf=\"cropSourceImages[f.$newFile.id]\"\r\n [imageFile]=\"cropSourceImages[f.$newFile.id]\"\r\n [maintainAspectRatio]=\"true\"\r\n [containWithinAspectRatio]=\"false\"\r\n [aspectRatio]=\"aspectRatio\"\r\n [resizeToWidth]=\"cropMaxWidth\"\r\n [onlyScaleDown]=\"false\"\r\n [roundCropper]=\"cropRounded\"\r\n [canvasRotation]=\"canvasRotation[f.$newFile.id]\"\r\n [transform]=\"transform[f.$newFile.id]\"\r\n [alignImage]=\"'center'\"\r\n [style.display]=\"showCropper ? null : 'none'\"\r\n [format]=\"'png'\"\r\n (imageCropped)=\"onImageCropped($event, f.$newFile.id)\"\r\n (imageLoaded)=\"imageLoaded(f.$newFile.id)\"\r\n (cropperReady)=\"cropperReady($event, f.$newFile.id)\"\r\n (loadImageFailed)=\"loadImageFailed()\"\r\n ></image-cropper>\r\n\r\n <div class=\"crop-preview mat-elevation-z2\" [class]=\"previewPosition\" *ngIf=\"true || (showCropPreview[f.$newFile.id] && cropperImageLoaded[f.$newFile.id])\">\r\n <div class=\"crop-menu\">\r\n <mat-icon (click)=\"zoomCroppedImage(.1, f.$newFile.id)\">zoom_in</mat-icon>\r\n <mat-icon (click)=\"zoomCroppedImage(- .1, f.$newFile.id)\">zoom_out</mat-icon>\r\n <mat-icon (click)=\"rotateCroppedImage(-1, f.$newFile.id)\">rotate_left</mat-icon>\r\n <mat-icon (click)=\"rotateCroppedImage(1, f.$newFile.id)\">rotate_right</mat-icon>\r\n <div style=\"flex: 1 1 100%\"></div>\r\n <label class=\"menu-item\">\r\n <mat-icon>upload_file</mat-icon>\r\n <input style=\"display: none;\" type=\"file\" ngFileSelect [options]=\"uploadOptions\" (change)=\"fileChangeEvent($event, f)\"\r\n (uploadOutput)=\"onUploadOutput($event)\" [uploadInput]=\"uploadInput\">\r\n </label>\r\n <mat-icon (click)=\"remove(f)\">delete_outline</mat-icon>\r\n <div style=\"flex: 1 1 100%\"></div>\r\n <mat-icon (click)=\"cropperDone(f.$newFile.id)\">done</mat-icon>\r\n </div>\r\n <img *ngIf=\"croppedImages[f.$newFile.id]\" [src]=\"croppedImages[f.$newFile.id].objectUrl\" [ngClass]=\"{rounded: cropRounded}\"/>\r\n </div>\r\n\r\n </div>\r\n\r\n\r\n\r\n </div>\r\n\r\n <ng-container *ngIf=\"!crop || cropDone(f)\">\r\n <ng-container *ngIf=\"fileTemplate\">\r\n <ng-template [ngTemplateOutlet]=\"fileTemplate\" [ngTemplateOutletContext]=\"{file: f, fileInput: fileInput2}\"></ng-template>\r\n <ng-template #fileInput2>\r\n <input style=\"display: none;\" type=\"file\" ngFileSelect [options]=\"uploadOptions\" (change)=\"fileChangeEvent($event, f)\"\r\n (uploadOutput)=\"onUploadOutput($event)\" [uploadInput]=\"uploadInput\">\r\n </ng-template>\r\n </ng-container>\r\n\r\n <ui-file *ngIf=\"!fileTemplate\" [fileSize]=\"fileSize\" [srcData]=\"f.$newFile ? f.$newFile: f.custom\" [ngClass]=\"{rounded: crop && cropRounded}\">\r\n </ui-file>\r\n\r\n <ng-container *ngIf=\"f.$newFile\">\r\n <div *ngIf=\"f.$newFile.responseStatus && f.$newFile.responseStatus !== 200\" class=\"progress-container error\">\r\n {{ translateService.instant('ui.controls.ui-file-uploader.uploadError', f.$newFile.response) }}\r\n </div>\r\n <div *ngIf=\"!f.$newFile.responseStatus && f.$newFile.progress.status === 1\" class=\"progress-container\">\r\n <div class=\"progress\" [ngStyle]=\"{width: f.$newFile.progress.data.percentage + '%'}\"></div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n\r\n </div>\r\n\r\n <div class=\"file-container add\" ngFileDrop [options]=\"uploadOptions\" (uploadOutput)=\"onUploadOutput($event)\" [uploadInput]=\"uploadInput\" [ngClass]=\"{visible: files.length < maxFiles || maxFiles === 0}\" [ngStyle]=\"addFileTemplate ? {} : ngAddStyle\">\r\n <label>\r\n <ng-container *ngIf=\"addFileTemplate\">\r\n <ng-template [ngTemplateOutlet]=\"addFileTemplate\"></ng-template>\r\n </ng-container>\r\n <ng-container *ngIf=\"!addFileTemplate\">\r\n <div class=\"upload-image-container\"></div>\r\n <img [src]=\"addFileImgSrc\" [ngClass]=\"{'with-hint': addHint}\" />\r\n <div *ngIf=\"addHint\" class=\"add-hint\">{{addHint}}</div>\r\n </ng-container>\r\n <input style=\"display: none;\" type=\"file\" ngFileSelect [options]=\"uploadOptions\" (uploadOutput)=\"onUploadOutput($event)\" [uploadInput]=\"uploadInput\" [multiple]=\"maxFiles === 0 && multiple\">\r\n </label>\r\n </div>\r\n\r\n</div>\r\n", styles: [":host{display:flex;flex-wrap:wrap}:host .label .text{font-size:.9em;line-height:1em;padding:6px 0 4px}:host .files-container{display:flex;flex-wrap:wrap;border-style:solid}:host .files-container .existing-files{display:flex;flex-wrap:wrap}:host .files-container.dragging .add label{border:2px dashed grey;background-color:#0000001a}:host .files-container.disabled .add{opacity:.5;pointer-events:none}:host .file-container{max-width:100%;max-height:100%;position:relative;display:flex;align-items:center;justify-content:center}:host .file-container .progress-container{position:absolute;bottom:0;left:1px;right:1px;height:20%;max-height:20px;background-color:#0000001a}:host .file-container .progress-container.error{background-color:red;color:#fff;display:flex;align-items:center;justify-content:center}:host .file-container .progress-container .progress{background-color:#0000004d;height:100%}:host .file-container.add{display:flex;align-items:center;flex-direction:column;transition:opacity .25s;cursor:pointer}:host .file-container.add:not(.visible){display:none}:host .file-container.add img{max-width:100%;max-height:100%}:host .file-container.add img.with-hint{max-height:75%}:host .file-container.add .add-hint{margin-top:8px;font-size:80%;text-align:center}:host .file-container.add label{position:absolute;inset:0;cursor:pointer;z-index:10;display:flex;flex-direction:column;align-items:center;justify-content:center}:host .file-container.add .upload-image-container{display:none}:host .file-container .file-menu-container{display:none;position:absolute;left:calc(100% - 45px);top:27px;z-index:1000}:host .file-container .file-menu-container ::ng-deep .menu-item{position:relative;padding:12px 24px;cursor:pointer;display:block}:host .file-container .file-menu-container.visible{display:block}:host .file-container .file-menu{display:flex;position:absolute;flex-direction:column;align-items:center;justify-content:center;padding:12px;right:10px;top:10px;background-color:#fff9;border-radius:50%;cursor:pointer;transition:all .25s;z-index:999}:host .file-container:hover .file-menu{background-color:#fff;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}:host .file-container mat-progress-bar{position:absolute;bottom:0;height:6px;left:0;right:0;z-index:1000}:host image-cropper{padding:0}:host ui-file.rounded ::ng-deep img{border-radius:50%}:host .crop-container{display:flex;align-items:center;justify-content:center;position:relative}:host .crop-container mat-spinner{position:absolute;z-index:1}:host .crop-container .crop-preview{position:absolute;top:100%;left:0;right:0;padding:6px;border:1px solid transparent;display:flex;flex-direction:column;align-items:center;justify-content:center;z-index:1000;max-width:350px;margin-right:auto;margin-left:auto}:host .crop-container .crop-preview.left{right:calc(100% + 6px);left:unset;top:0}:host .crop-container .crop-preview.above{bottom:100%;top:unset}:host .crop-container .crop-preview .crop-menu{width:100%;flex:0 0 auto;display:flex}:host .crop-container .crop-preview .crop-menu mat-icon{margin:0 3px;width:calc(1em + 6px);height:1em;font-size:2em;cursor:pointer;user-select:none;flex:1 1 100%}:host .crop-container .crop-preview img{margin:16px 0;max-width:256px;max-height:256px}:host .crop-container .crop-preview img.rounded{border-radius:50%}\n"] }]
|
|
364
|
-
}], ctorParameters:
|
|
363
|
+
}], template: "<div class=\"label\" *ngIf=\"label\">\r\n <div class=\"text-container\" [matTooltip]=\"required ? translateService.instant('ui.controls.validation.required') : undefined\" [matTooltipPosition]=\"'above'\">\r\n <div class=\"text\">{{label}}</div>\r\n <div *ngIf=\"required\" class=\"required\">*</div>\r\n </div>\r\n</div>\r\n\r\n<div class=\"files-container\" [ngClass]=\"{dragging: dragging, disabled: uploading || !editable}\">\r\n\r\n <div class=\"existing-files\">\r\n\r\n <div class=\"file-container\" *ngFor=\"let f of files\">\r\n\r\n <div class=\"file-menu\" (click)=\"toggleMenuVisibility(f)\" *ngIf=\"!customFileMenu && editable && !uploading\">\r\n <mat-icon>menu</mat-icon>\r\n </div>\r\n <div class=\"file-menu-container mat-elevation-z2\" [ngClass]=\"{visible: f === fileMenuOpened}\" (click)=\"menuClick()\" (mouseleave)=\"menuClick()\">\r\n <ng-container *ngIf=\"!menuTemplate\">\r\n <label class=\"menu-item\">{{ translateService.instant('ui.controls.ui-file-uploader.menu.change') }}\r\n <input *ngIf=\"!refreshAddInput\" style=\"display: none;\" type=\"file\" ngFileSelect [options]=\"uploadOptions\" (change)=\"fileChangeEvent($event, f)\"\r\n (uploadOutput)=\"onUploadOutput($event)\" [uploadInput]=\"uploadInput\">\r\n </label>\r\n <div class=\"menu-item\" (click)=\"remove(f)\">{{ translateService.instant('ui.controls.ui-file-uploader.menu.delete') }}</div>\r\n </ng-container>\r\n <ng-container *ngIf=\"menuTemplate\">\r\n <ng-template [ngTemplateOutlet]=\"menuTemplate\" [ngTemplateOutletContext]=\"{fileInput: fileInput}\"></ng-template>\r\n <ng-template #fileInput>\r\n <input style=\"display: none;\" type=\"file\" ngFileSelect [options]=\"uploadOptions\" (change)=\"fileChangeEvent($event, f)\"\r\n (uploadOutput)=\"onUploadOutput($event)\" [uploadInput]=\"uploadInput\">\r\n </ng-template>\r\n </ng-container>\r\n </div>\r\n\r\n <div *ngIf=\"crop && !cropDone(f)\" (mouseenter)=\"startCropPreview(f.$newFile.id)\" (mouseleave)=\"stopCropPreview(f.$newFile.id)\">\r\n <div class=\"crop-container\" [ngStyle]=\"ngAddStyle\">\r\n\r\n <ui-file *ngIf=\"false && files.length > 0 && !cropSourceImages\" [fileSize]=\"fileSize\" [srcData]=\"files[0].custom\" [ngClass]=\"{rounded: cropRounded}\"></ui-file>\r\n\r\n <mat-spinner *ngIf=\"!cropperImageLoaded[f.$newFile.id] && cropSourceImages[f.$newFile.id]\" [diameter]=\"75\"></mat-spinner>\r\n\r\n <image-cropper *ngIf=\"cropSourceImages[f.$newFile.id]\"\r\n [imageFile]=\"cropSourceImages[f.$newFile.id]\"\r\n [maintainAspectRatio]=\"true\"\r\n [containWithinAspectRatio]=\"false\"\r\n [aspectRatio]=\"aspectRatio\"\r\n [resizeToWidth]=\"cropMaxWidth\"\r\n [onlyScaleDown]=\"false\"\r\n [roundCropper]=\"cropRounded\"\r\n [canvasRotation]=\"canvasRotation[f.$newFile.id]\"\r\n [transform]=\"transform[f.$newFile.id]\"\r\n [alignImage]=\"'center'\"\r\n [style.display]=\"showCropper ? null : 'none'\"\r\n [format]=\"'png'\"\r\n (imageCropped)=\"onImageCropped($event, f.$newFile.id)\"\r\n (imageLoaded)=\"imageLoaded(f.$newFile.id)\"\r\n (cropperReady)=\"cropperReady($event, f.$newFile.id)\"\r\n (loadImageFailed)=\"loadImageFailed()\"\r\n ></image-cropper>\r\n\r\n <div class=\"crop-preview mat-elevation-z2\" [class]=\"previewPosition\" *ngIf=\"true || (showCropPreview[f.$newFile.id] && cropperImageLoaded[f.$newFile.id])\">\r\n <div class=\"crop-menu\">\r\n <mat-icon (click)=\"zoomCroppedImage(.1, f.$newFile.id)\">zoom_in</mat-icon>\r\n <mat-icon (click)=\"zoomCroppedImage(- .1, f.$newFile.id)\">zoom_out</mat-icon>\r\n <mat-icon (click)=\"rotateCroppedImage(-1, f.$newFile.id)\">rotate_left</mat-icon>\r\n <mat-icon (click)=\"rotateCroppedImage(1, f.$newFile.id)\">rotate_right</mat-icon>\r\n <div style=\"flex: 1 1 100%\"></div>\r\n <label class=\"menu-item\">\r\n <mat-icon>upload_file</mat-icon>\r\n <input style=\"display: none;\" type=\"file\" ngFileSelect [options]=\"uploadOptions\" (change)=\"fileChangeEvent($event, f)\"\r\n (uploadOutput)=\"onUploadOutput($event)\" [uploadInput]=\"uploadInput\">\r\n </label>\r\n <mat-icon (click)=\"remove(f)\">delete_outline</mat-icon>\r\n <div style=\"flex: 1 1 100%\"></div>\r\n <mat-icon (click)=\"cropperDone(f.$newFile.id)\">done</mat-icon>\r\n </div>\r\n <img *ngIf=\"croppedImages[f.$newFile.id]\" [src]=\"croppedImages[f.$newFile.id].objectUrl\" [ngClass]=\"{rounded: cropRounded}\"/>\r\n </div>\r\n\r\n </div>\r\n\r\n\r\n\r\n </div>\r\n\r\n <ng-container *ngIf=\"!crop || cropDone(f)\">\r\n <ng-container *ngIf=\"fileTemplate\">\r\n <ng-template [ngTemplateOutlet]=\"fileTemplate\" [ngTemplateOutletContext]=\"{file: f, fileInput: fileInput2}\"></ng-template>\r\n <ng-template #fileInput2>\r\n <input style=\"display: none;\" type=\"file\" ngFileSelect [options]=\"uploadOptions\" (change)=\"fileChangeEvent($event, f)\"\r\n (uploadOutput)=\"onUploadOutput($event)\" [uploadInput]=\"uploadInput\">\r\n </ng-template>\r\n </ng-container>\r\n\r\n <ui-file *ngIf=\"!fileTemplate\" [fileSize]=\"fileSize\" [srcData]=\"f.$newFile ? f.$newFile: f.custom\" [ngClass]=\"{rounded: crop && cropRounded}\">\r\n </ui-file>\r\n\r\n <ng-container *ngIf=\"f.$newFile\">\r\n <div *ngIf=\"f.$newFile.responseStatus && f.$newFile.responseStatus !== 200\" class=\"progress-container error\">\r\n {{ translateService.instant('ui.controls.ui-file-uploader.uploadError', f.$newFile.response) }}\r\n </div>\r\n <div *ngIf=\"!f.$newFile.responseStatus && f.$newFile.progress.status === 1\" class=\"progress-container\">\r\n <div class=\"progress\" [ngStyle]=\"{width: f.$newFile.progress.data.percentage + '%'}\"></div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n\r\n </div>\r\n\r\n <div class=\"file-container add\" ngFileDrop [options]=\"uploadOptions\" (uploadOutput)=\"onUploadOutput($event)\" [uploadInput]=\"uploadInput\" [ngClass]=\"{visible: files.length < maxFiles || maxFiles === 0}\" [ngStyle]=\"addFileTemplate ? {} : ngAddStyle\">\r\n <label>\r\n <ng-container *ngIf=\"addFileTemplate\">\r\n <ng-template [ngTemplateOutlet]=\"addFileTemplate\"></ng-template>\r\n </ng-container>\r\n <ng-container *ngIf=\"!addFileTemplate\">\r\n <div class=\"upload-image-container\"></div>\r\n <img [src]=\"addFileImgSrc\" [ngClass]=\"{'with-hint': addHint}\" />\r\n <div *ngIf=\"addHint\" class=\"add-hint\">{{addHint}}</div>\r\n </ng-container>\r\n <input style=\"display: none;\" type=\"file\" ngFileSelect [options]=\"uploadOptions\" (uploadOutput)=\"onUploadOutput($event)\" [uploadInput]=\"uploadInput\" [multiple]=\"maxFiles === 0 && multiple\">\r\n </label>\r\n </div>\r\n\r\n</div>\r\n", styles: [":host{display:flex;flex-wrap:wrap}:host .label .text{font-size:.9em;line-height:1em;padding:6px 0 4px}:host .files-container{display:flex;flex-wrap:wrap;border-style:solid}:host .files-container .existing-files{display:flex;flex-wrap:wrap}:host .files-container.dragging .add label{border:2px dashed grey;background-color:#0000001a}:host .files-container.disabled .add{opacity:.5;pointer-events:none}:host .file-container{max-width:100%;max-height:100%;position:relative;display:flex;align-items:center;justify-content:center}:host .file-container .progress-container{position:absolute;bottom:0;left:1px;right:1px;height:20%;max-height:20px;background-color:#0000001a}:host .file-container .progress-container.error{background-color:red;color:#fff;display:flex;align-items:center;justify-content:center}:host .file-container .progress-container .progress{background-color:#0000004d;height:100%}:host .file-container.add{display:flex;align-items:center;flex-direction:column;transition:opacity .25s;cursor:pointer}:host .file-container.add:not(.visible){display:none}:host .file-container.add img{max-width:100%;max-height:100%}:host .file-container.add img.with-hint{max-height:75%}:host .file-container.add .add-hint{margin-top:8px;font-size:80%;text-align:center}:host .file-container.add label{position:absolute;inset:0;cursor:pointer;z-index:10;display:flex;flex-direction:column;align-items:center;justify-content:center}:host .file-container.add .upload-image-container{display:none}:host .file-container .file-menu-container{display:none;position:absolute;left:calc(100% - 45px);top:27px;z-index:1000}:host .file-container .file-menu-container ::ng-deep .menu-item{position:relative;padding:12px 24px;cursor:pointer;display:block}:host .file-container .file-menu-container.visible{display:block}:host .file-container .file-menu{display:flex;position:absolute;flex-direction:column;align-items:center;justify-content:center;padding:12px;right:10px;top:10px;background-color:#fff9;border-radius:50%;cursor:pointer;transition:all .25s;z-index:999}:host .file-container:hover .file-menu{background-color:#fff;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}:host .file-container mat-progress-bar{position:absolute;bottom:0;height:6px;left:0;right:0;z-index:1000}:host image-cropper{padding:0}:host ui-file.rounded ::ng-deep img{border-radius:50%}:host .crop-container{display:flex;align-items:center;justify-content:center;position:relative}:host .crop-container mat-spinner{position:absolute;z-index:1}:host .crop-container .crop-preview{position:absolute;top:100%;left:0;right:0;padding:6px;border:1px solid transparent;display:flex;flex-direction:column;align-items:center;justify-content:center;z-index:1000;max-width:350px;margin-right:auto;margin-left:auto}:host .crop-container .crop-preview.left{right:calc(100% + 6px);left:unset;top:0}:host .crop-container .crop-preview.above{bottom:100%;top:unset}:host .crop-container .crop-preview .crop-menu{width:100%;flex:0 0 auto;display:flex}:host .crop-container .crop-preview .crop-menu mat-icon{margin:0 3px;width:calc(1em + 6px);height:1em;font-size:2em;cursor:pointer;-webkit-user-select:none;user-select:none;flex:1 1 100%}:host .crop-container .crop-preview img{margin:16px 0;max-width:256px;max-height:256px}:host .crop-container .crop-preview img.rounded{border-radius:50%}\n"] }]
|
|
364
|
+
}], ctorParameters: () => [{ type: undefined, decorators: [{
|
|
365
365
|
type: Optional
|
|
366
366
|
}, {
|
|
367
367
|
type: Inject,
|
|
@@ -375,7 +375,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.11", ngImpo
|
|
|
375
375
|
type: Host
|
|
376
376
|
}, {
|
|
377
377
|
type: SkipSelf
|
|
378
|
-
}] }, { type: i2.UiFileService }]
|
|
378
|
+
}] }, { type: i2.UiFileService }], propDecorators: { maxFiles: [{
|
|
379
379
|
type: Input
|
|
380
380
|
}], multiple: [{
|
|
381
381
|
type: Input
|
|
@@ -402,4 +402,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.11", ngImpo
|
|
|
402
402
|
}], fileEvent: [{
|
|
403
403
|
type: Output
|
|
404
404
|
}] } });
|
|
405
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWktZmlsZS11cGxvYWRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL2ZpbGUtdXBsb2FkZXIvdWktZmlsZS11cGxvYWRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL2ZpbGUtdXBsb2FkZXIvdWktZmlsZS11cGxvYWRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixJQUFJLEVBQ0osTUFBTSxFQUNOLEtBQUssRUFHTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFFBQVEsRUFDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQW9CLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFckUsT0FBTyxFQUEwQyxjQUFjLEVBQWlCLE1BQU0sNkJBQTZCLENBQUM7QUFFcEgsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDMUUsT0FBTyxFQUF1QixtQkFBbUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDOzs7Ozs7Ozs7OztBQTJCNUYsTUFBTSxPQUFPLHVCQUF3QixTQUFRLGlCQUFpQjtJQWM1RCxJQUFJLFlBQVk7UUFDZCxPQUFPLElBQUksQ0FBQyxTQUFTLEVBQUUsWUFBWSxDQUFDO0lBQ3RDLENBQUM7SUFFRCxJQUFJLGVBQWU7UUFDakIsT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLGVBQWUsQ0FBQztJQUN6QyxDQUFDO0lBRUQsSUFBSSxZQUFZO1FBQ2QsT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLFlBQVksQ0FBQztJQUN0QyxDQUFDO0lBd0NELFlBQXdELGlCQUFpQyxFQUN6QyxnQkFBcUMsRUFDL0IsZ0JBQWtDLEVBQ3BFLFdBQTBCO1FBRTVDLEtBQUssQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLENBQUMs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V0FBVyxFQUFFLHVCQUF1QjthQUNyQyxDQUFDLGlEQzFDSiw2N09BNEhBOzs0RkRoRmEsdUJBQXVCO2tCQVZuQyxTQUFTOytCQUNFLGtCQUFrQixhQUdqQixDQUFDOzRCQUNWLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLEtBQUssRUFBRSxJQUFJOzRCQUNYLFdBQVcseUJBQXlCO3lCQUNyQyxDQUFDOzswQkFrRVcsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxjQUFjOzswQkFDakMsTUFBTTsyQkFBQyxtQkFBbUI7OzBCQUMxQixRQUFROzswQkFBSSxJQUFJOzswQkFBSSxRQUFRO3dFQWhFaEMsUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUVHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBY0csZUFBZTtzQkFBdkIsS0FBSztnQkFFSSxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSG9zdCxcclxuICBJbmplY3QsXHJcbiAgSW5wdXQsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9uSW5pdCxcclxuICBPcHRpb25hbCxcclxuICBPdXRwdXQsXHJcbiAgU2tpcFNlbGZcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29udHJvbENvbnRhaW5lciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFVwbG9hZGVyT3B0aW9ucywgVXBsb2FkRmlsZSwgVXBsb2FkSW5wdXQsIFVwbG9hZE91dHB1dCB9IGZyb20gJ25neC11cGxvYWRlcic7XHJcbmltcG9ydCB7IElVaUZpbGVTZXJ2aWNlLCBJVWlGaWxlU2VydmljZU1lc3NhZ2VzLCBVSV9GSUxFU0VSVklDRSwgVWlGaWxlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3VpLWZpbGUuc2VydmljZSc7XHJcbmltcG9ydCB7IERpbWVuc2lvbnMsIEltYWdlQ3JvcHBlZEV2ZW50LCBJbWFnZVRyYW5zZm9ybSB9IGZyb20gJ25neC1pbWFnZS1jcm9wcGVyJztcclxuaW1wb3J0IHsgVWlTaW1wbGVDb21wb25lbnQgfSBmcm9tICcuLi9sYXlvdXRzL3NpbXBsZS91aS1zaW1wbGUuY29tcG9uZW50JztcclxuaW1wb3J0IHsgSVVpVHJhbnNsYXRlU2VydmljZSwgVUlfVFJBTlNMQVRFU0VSVklDRSB9IGZyb20gJy4uL3NlcnZpY2VzL3VpLXRyYW5zbGF0ZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgc2tpcCB9IGZyb20gJ3J4anMnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBVcGxvYWRPdXRwdXRFeCBleHRlbmRzIFVwbG9hZE91dHB1dCB7XHJcbiAgZmlsZTogVXBsb2FkRmlsZUV4O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFVwbG9hZEZpbGVFeCBleHRlbmRzIFVwbG9hZEZpbGUge1xyXG4gIGltYWdlUHJldmlldz86IGFueTtcclxuICBiYXNlNjQ/OiBhbnk7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVVpVXBsb2FkZXJVc2VyTWVzc2FnZSB7XHJcbiAgbWVzc2FnZTogSVVpRmlsZVNlcnZpY2VNZXNzYWdlcyxcclxuICBkYXRhOiBhbnlcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICd1aS1maWxlLXVwbG9hZGVyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdWktZmlsZS11cGxvYWRlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbICcuL3VpLWZpbGUtdXBsb2FkZXIuY29tcG9uZW50LnNjc3MnXSxcclxuICBwcm92aWRlcnM6IFt7XHJcbiAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICAgIG11bHRpOiB0cnVlLFxyXG4gICAgdXNlRXhpc3Rpbmc6IFVpRmlsZVVwbG9hZGVyQ29tcG9uZW50LFxyXG4gIH1dXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBVaUZpbGVVcGxvYWRlckNvbXBvbmVudCBleHRlbmRzIFVpU2ltcGxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG5cclxuICBASW5wdXQoKSBtYXhGaWxlcyA9IDE7XHJcbiAgQElucHV0KCkgbXVsdGlwbGUgPSB0cnVlO1xyXG4gIEBJbnB1dCgpIGNyb3AgPSBmYWxzZTtcclxuICBASW5wdXQoKSBjcm9wUm91bmRlZCA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGNyb3BNYXhXaWR0aDtcclxuICBASW5wdXQoKSBmaWxlU2l6ZSA9ICdkZWZhdWx0JztcclxuICBASW5wdXQoKSBjdXN0b21GaWxlTWVudSA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGFkZEhpbnQ7XHJcbiAgQElucHV0KCkgbmV3RmlsZVBvc2l0aW9uOiAnZmlyc3QnIHwgJ2xhc3QnID0gJ2xhc3QnO1xyXG5cclxuICBASW5wdXQoKSB0ZW1wbGF0ZXM6IHsgbWVudVRlbXBsYXRlPzogYW55LCBhZGRGaWxlVGVtcGxhdGU/OiBhbnksIGZpbGVUZW1wbGF0ZT86IGFueSB9ID0ge31cclxuXHJcbiAgZ2V0IG1lbnVUZW1wbGF0ZSgpIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBsYXRlcz8ubWVudVRlbXBsYXRlO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGFkZEZpbGVUZW1wbGF0ZSgpIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBsYXRlcz8uYWRkRmlsZVRlbXBsYXRlO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGZpbGVUZW1wbGF0ZSgpIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBsYXRlcz8uZmlsZVRlbXBsYXRlO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KCkgcHJldmlld1Bvc2l0aW9uOiAnbGVmdCcgfCAnYm90dG9tJyB8ICdhYm92ZScgPSAnYm90dG9tJztcclxuXHJcbiAgQE91dHB1dCgpIGltYWdlQ3JvcHBlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgZmlsZUV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxJVWlVcGxvYWRlclVzZXJNZXNzYWdlPigpO1xyXG5cclxuICB1cGxvYWRPcHRpb25zOiBVcGxvYWRlck9wdGlvbnMgPSB7XHJcbiAgICBjb25jdXJyZW5jeTogdGhpcy5maWxlU2VydmljZUNvbmZpZy5jb25jdXJyZW50VXBsb2Fkc1xyXG4gIH07XHJcblxyXG4gIHB1YmxpYyB1cGxvYWRpbmcgPSBmYWxzZTtcclxuXHJcbiAgY2hhbmdlRmlsZUluZGV4O1xyXG5cclxuICBzaG93Q3JvcHBlciA9IGZhbHNlO1xyXG4gIG1lbnVWaXNpYmxlOiBhbnk7XHJcbiAgc2hvd0Nyb3BQcmV2aWV3ID0ge307XHJcbiAgY3JvcFByZXZpZXdUaW1lb3V0cyA9IHt9O1xyXG4gIGNyb3BTb3VyY2VJbWFnZXMgPSB7fTtcclxuICBjcm9wcGVySW1hZ2VMb2FkZWQgPSB7fTtcclxuICBpbWFnZXNEb25lID0ge307XHJcbiAgdHJhbnNmb3JtOiBJbWFnZVRyYW5zZm9ybSA9IHt9O1xyXG4gIGNhbnZhc1JvdGF0aW9uID0ge31cclxuXHJcbiAgcHVibGljIGZpbGVzIDogeyBjdXN0b20/OiBhbnksICRuZXdGaWxlPzogVXBsb2FkRmlsZSB9W107XHJcblxyXG4gIHB1YmxpYyByZXNwb25zZUZpbGVzO1xyXG5cclxuICByZWZyZXNoQWRkSW5wdXQgPSBmYWxzZTtcclxuXHJcbiAgZmlsZU1lbnVPcGVuZWQ7XHJcblxyXG4gIHBhdGNoaW5nVmFsdWVzID0gZmFsc2U7XHJcblxyXG4gIGlucHV0QXJyYXkgPSBmYWxzZTtcclxuICBkcmFnZ2luZyA9IGZhbHNlO1xyXG5cclxuICB1cGxvYWRlcklkID0gTWF0aC5yb3VuZChNYXRoLnJhbmRvbSgpICogMTAwMDAwMCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKEBPcHRpb25hbCgpIEBJbmplY3QoVUlfRklMRVNFUlZJQ0UpIHByaXZhdGUgZmlsZVNlcnZpY2VDb25maWc6IElVaUZpbGVTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgIEBJbmplY3QoVUlfVFJBTlNMQVRFU0VSVklDRSkgcHVibGljIHRyYW5zbGF0ZVNlcnZpY2U6IElVaVRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgQE9wdGlvbmFsKCkgQEhvc3QoKSBAU2tpcFNlbGYoKSBwcm90ZWN0ZWQgY29udHJvbENvbnRhaW5lcjogQ29udHJvbENvbnRhaW5lcixcclxuICAgICAgICAgICAgICBwcml2YXRlIGZpbGVTZXJ2aWNlOiBVaUZpbGVTZXJ2aWNlKSB7XHJcblxyXG4gICAgc3VwZXIobnVsbCwgY29udHJvbENvbnRhaW5lcik7XHJcblxyXG4gICAgdGhpcy5maWxlU2VydmljZS51cGxvYWRTdWJzY3JpcHRpb24ubmV4dCh7YWN0aW9uOiAncmVnaXN0ZXInLCBkYXRhOiB0aGlzfSk7XHJcblxyXG4gICAgdGhpcy5maWxlU2VydmljZS51cGxvYWRTdWJzY3JpcHRpb24uc3Vic2NyaWJlKCh2OiBhbnkpID0+IHtcclxuICAgICAgc3dpdGNoICh2LmFjdGlvbikge1xyXG4gICAgICAgIGNhc2UgJ3VwbG9hZFN0YXJ0ZWQnOiB0aGlzLnVwbG9hZGluZyA9IHRydWU7IGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ3VwbG9hZEZhaWxlZCc6XHJcbiAgICAgICAgY2FzZSAndXBsb2FkU3VjY2Vzcyc6XHJcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy51cGxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgdGhpcy5wYXRjaFZhbHVlcygpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldCB1cGxvYWRJbnB1dCgpOiBFdmVudEVtaXR0ZXI8VXBsb2FkSW5wdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmZpbGVTZXJ2aWNlLnVwbG9hZElucHV0O1xyXG4gIH1cclxuXHJcbiAgY3JvcHBlZEltYWdlcyA9IHt9O1xyXG5cclxuICBnZXQgZWRpdGFibGUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jb21wb25lbnRGb3JtQ29udHJvbC5lbmFibGVkO1xyXG4gIH1cclxuXHJcbiAgZ2V0IG5nQWRkU3R5bGUoKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICB3aWR0aDogTWF0aC5hYnModGhpcy5maWxlU2VydmljZUNvbmZpZy5pbWFnZVNpemVzW3RoaXMuZmlsZVNpemVdWzBdKSArICdweCcsXHJcbiAgICAgIGhlaWdodDogTWF0aC5hYnModGhpcy5maWxlU2VydmljZUNvbmZpZy5pbWFnZVNpemVzW3RoaXMuZmlsZVNpemVdWzFdKSArICdweCcsXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgYXNwZWN0UmF0aW8oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5maWxlU2VydmljZUNvbmZpZy5pbWFnZVNpemVzW3RoaXMuZmlsZVNpemVdWzBdIC8gdGhpcy5maWxlU2VydmljZUNvbmZpZy5pbWFnZVNpemVzW3RoaXMuZmlsZVNpemVdWzFdO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGFkZEZpbGVJbWdTcmMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5maWxlU2VydmljZUNvbmZpZy5hZGRGaWxlSW1nU3JjO1xyXG4gIH1cclxuXHJcbiAgY3JvcERvbmUoZikge1xyXG4gICAgcmV0dXJuICFmLiRuZXdGaWxlIHx8IHRoaXMuaW1hZ2VzRG9uZVtmLiRuZXdGaWxlLmlkXTtcclxuICB9XHJcblxyXG4gIC8vIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gIC8vICAgc3VwZXIubmdPbkluaXQoKTtcclxuICAvLyB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5maWxlU2VydmljZS51cGxvYWRTdWJzY3JpcHRpb24ubmV4dCh7YWN0aW9uOiAnZGVzdHJveScsIGRhdGE6IHRoaXN9KTtcclxuICB9XHJcblxyXG4gIHJlbW92ZShmOiBhbnkpOiB2b2lkIHtcclxuICAgIGlmIChmLiRuZXdGaWxlKSB7XHJcbiAgICAgIHRoaXMudXBsb2FkSW5wdXQuZW1pdCh7dHlwZTogJ3JlbW92ZScsIGlkOiBmLiRuZXdGaWxlLmlkfSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmZpbGVzLnNwbGljZSh0aGlzLmZpbGVzLmluZGV4T2YoZiksIDEpO1xyXG4gICAgdGhpcy5wcmVwYXJlUmVzcG9uc2UoKTtcclxuICAgIC8vIHRoaXMub25DaGFuZ2UodGhpcy5pbnB1dEFycmF5ID8gdGhpcy5maWxlcyA6ICh0aGlzLmZpbGVzLmxlbmd0aCA+IDAgPyB0aGlzLmZpbGVzWzBdIDogbnVsbCkpO1xyXG4gICAgdGhpcy5maWxlRXZlbnQuZW1pdCh7IG1lc3NhZ2U6ICdmaWxlUmVtb3ZlZCcsIGRhdGE6IGYgfSk7XHJcbi8vICAgICB0aGlzLnBhdGNoVmFsdWVzKCk7XHJcbiAgfVxyXG5cclxuICBwYXRjaFZhbHVlcygpOiB2b2lkIHtcclxuICAgIHRoaXMucGF0Y2hpbmdWYWx1ZXMgPSB0cnVlO1xyXG4gICAgLy8gaWYgKHRoaXMuaW5wdXRBcnJheSkge1xyXG4gICAgLy8gICB0aGlzLmNvbXBvbmVudEZvcm1Db250cm9sLnNldFZhbHVlKHRoaXMuZmlsZXMubWFwKGYgPT4gZi5jdXN0b20pKTtcclxuICAgIC8vIH0gZWxzZSB7XHJcbiAgICAvLyAgIHRoaXMuY29tcG9uZW50Rm9ybUNvbnRyb2wuc2V0VmFsdWUodGhpcy5maWxlcy5sZW5ndGggPT09IDAgPyBudWxsIDogdGhpcy5maWxlc1swXS5jdXN0b20pO1xyXG4gICAgLy8gfVxyXG4gICAgdGhpcy5wYXRjaGluZ1ZhbHVlcyA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGhhc0ZpbGVzVG9VcGxvYWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gISF0aGlzLmZpbGVzLmZpbmQoZiA9PiBmLiRuZXdGaWxlICYmIGYuJG5ld0ZpbGUucHJvZ3Jlc3Muc3RhdHVzICE9PSAyKTtcclxuICB9XHJcblxyXG4gIGNhbkltYWdlUHJldmlldyh0eXBlOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0eXBlLnN0YXJ0c1dpdGgoJ2ltYWdlLycpIHx8IHR5cGUuc3RhcnRzV2l0aCgndmlkZW8vJyk7XHJcbiAgfVxyXG5cclxuICBvblVwbG9hZE91dHB1dCgkZXZlbnQ6IFVwbG9hZE91dHB1dCwgc2tpcEN1c3RvbVZhbGlkYXRpb24gPSBmYWxzZSk6IHZvaWQge1xyXG4gICAgLy8gY29uc29sZS5sb2coJGV2ZW50KTtcclxuICAgIHN3aXRjaCAoJGV2ZW50LnR5cGUpIHtcclxuICAgICAgY2FzZSAnc3RhcnQnOlxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSAnZHJhZ092ZXInOlxyXG4gICAgICAgIHRoaXMuZHJhZ2dpbmcgPSB0cnVlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdkcmFnT3V0JzpcclxuICAgICAgY2FzZSAnZHJvcCc6XHJcbiAgICAgICAgdGhpcy5kcmFnZ2luZyA9IGZhbHNlO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSAnYWRkZWRUb1F1ZXVlJzpcclxuICAgICAgICBpZiAodGhpcy5jcm9wICYmICEkZXZlbnQuZmlsZS50eXBlLnN0YXJ0c1dpdGgoJ2ltYWdlLycpKSB7XHJcbiAgICAgICAgICB0aGlzLnVwbG9hZElucHV0LmVtaXQoeyB0eXBlOiAncmVtb3ZlJywgaWQ6ICRldmVudC5maWxlLmlkIH0pO1xyXG4gICAgICAgICAgdGhpcy5maWxlRXZlbnQuZW1pdCh7IG1lc3NhZ2U6ICdjcm9wSW52YWxpZEZpbGVUeXBlJywgZGF0YTogJGV2ZW50LmZpbGUgfSk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXNraXBDdXN0b21WYWxpZGF0aW9uICYmIHRoaXMuZmlsZVNlcnZpY2VDb25maWcuZmlsZVZhbGlkYXRpb24pIHtcclxuICAgICAgICAgIHRoaXMuZmlsZVNlcnZpY2VDb25maWcuZmlsZVZhbGlkYXRpb24odGhpcy5maWxlU2l6ZSwgJGV2ZW50LmZpbGUpLnRoZW4odmFsaWQgPT4ge1xyXG4gICAgICAgICAgICBpZiAodmFsaWQpIHtcclxuICAgICAgICAgICAgICB0aGlzLm9uVXBsb2FkT3V0cHV0KCRldmVudCwgdHJ1ZSlcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLnVwbG9hZElucHV0LmVtaXQoeyB0eXBlOiAncmVtb3ZlJywgaWQ6ICRldmVudC5maWxlLmlkIH0pO1xyXG4gICAgICAgICAgICAgIC8vIHRoaXMuZmlsZUV2ZW50LmVtaXQoeyBtZXNzYWdlOiAnY3JvcEludmFsaWRGaWxlVHlwZScsIGRhdGE6ICRldmVudC5maWxlIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBsZXQgZjtcclxuICAgICAgICAgIGlmICh0aGlzLmNoYW5nZUZpbGVJbmRleCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGYgPSB0aGlzLmZpbGVzW3RoaXMuY2hhbmdlRmlsZUluZGV4XTtcclxuICAgICAgICAgICAgaWYgKGYuJG5ld0ZpbGUpIHtcclxuICAgICAgICAgICAgICB0aGlzLnVwbG9hZElucHV0LmVtaXQoeyB0eXBlOiAncmVtb3ZlJywgaWQ6IGYuJG5ld0ZpbGUuaWQgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZi4kbmV3RmlsZSA9ICRldmVudC5maWxlO1xyXG4gICAgICAgICAgICBmLmN1c3RvbSA9ICRldmVudC5maWxlO1xyXG4gICAgICAgICAgICB0aGlzLmNoYW5nZUZpbGVJbmRleCA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGYgPSB7IGN1c3RvbTogJGV2ZW50LmZpbGUsICRuZXdGaWxlOiAkZXZlbnQuZmlsZSB9O1xyXG4gICAgICAgICAgICBpZiAodGhpcy5uZXdGaWxlUG9zaXRpb24gPT09ICdsYXN0Jykge1xyXG4gICAgICAgICAgICAgIHRoaXMuZmlsZXMucHVzaChmKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLmZpbGVzLnVuc2hpZnQoZik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICh0aGlzLmNhbkltYWdlUHJldmlldygkZXZlbnQuZmlsZS50eXBlKSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5jcm9wKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5jYW52YXNSb3RhdGlvblskZXZlbnQuZmlsZS5pZF0gPSAwO1xyXG4gICAgICAgICAgICAgIHRoaXMuY3JvcFNvdXJjZUltYWdlc1skZXZlbnQuZmlsZS5pZF0gPSAkZXZlbnQuZmlsZS5uYXRpdmVGaWxlO1xyXG4gICAgICAgICAgICAgIHRoaXMuY3JvcHBlckltYWdlTG9hZGVkWyRldmVudC5maWxlLmlkXSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnByZXBhcmVSZXNwb25zZSgpO1xyXG4gICAgICAgICAgdGhpcy5maWxlRXZlbnQuZW1pdCh7IG1lc3NhZ2U6ICdmaWxlQWRkZWQnLCBkYXRhOiBmIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgJ2RvbmUnOlxyXG4gICAgICAgIGNvbnN0IGRmID0gdGhpcy5maWxlcy5maW5kKGYgPT4gZi4kbmV3RmlsZSA9PT0gJGV2ZW50LmZpbGUpO1xyXG4gICAgICAgIGlmIChkZikge1xyXG4gICAgICAgICAgaWYgKGRmLiRuZXdGaWxlLnJlc3BvbnNlU3RhdHVzID09PSAyMDApIHtcclxuICAgICAgICAgICAgdGhpcy5maWxlc1t0aGlzLmZpbGVzLmluZGV4T2YoZGYpXS5jdXN0b20gPSBkZi4kbmV3RmlsZS5yZXNwb25zZTtcclxuICAgICAgICAgICAgZGYuJG5ld0ZpbGUgPSBudWxsO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ2Vycm9yIG9uIHVwbG9hZCcsIGRmLiRldmVudCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5oYXNGaWxlc1RvVXBsb2FkKSB7XHJcbiAgICAgICAgICB0aGlzLnByZXBhcmVSZXNwb25zZShmYWxzZSk7XHJcbiAgICAgICAgICB0aGlzLmZpbGVTZXJ2aWNlLnVwbG9hZFN1YnNjcmlwdGlvbi5uZXh0KHtcclxuICAgICAgICAgICAgYWN0aW9uOiB0aGlzLmZpbGVzLmZpbmQoZiA9PiAhIWYuJG5ld0ZpbGUpID8gJ3VwbG9hZENvbnRyb2xGYWlsZWQnIDogJ3VwbG9hZENvbnRyb2xTdWNjZXNzJ1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJlcGFyZVJlc3BvbnNlKGRvZW1pdCA9IHRydWUpIHtcclxuICAgIGlmICh0aGlzLmlucHV0QXJyYXkpIHtcclxuICAgICAgaWYgKCF0aGlzLnJlc3BvbnNlRmlsZXMpIHtcclxuICAgICAgICB0aGlzLnJlc3BvbnNlRmlsZXMgPSBbXTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnJlc3BvbnNlRmlsZXMubGVuZ3RoID0gMDtcclxuICAgICAgdGhpcy5maWxlcy5mb3JFYWNoKGYgPT4gdGhpcy5yZXNwb25zZUZpbGVzLnB1c2goey4uLmYuY3VzdG9tLCAkbmV3RmlsZTogZi4kbmV3RmlsZX0pKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmZpbGVzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIHRoaXMucmVzcG9uc2VGaWxlcyA9IG51bGw7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnJlc3BvbnNlRmlsZXMpIHtcclxuICAgICAgICAgIHRoaXMucmVzcG9uc2VGaWxlcyA9IHt9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBPYmplY3Qua2V5cyh0aGlzLmZpbGVzWzBdLmN1c3RvbSkuZm9yRWFjaChrID0+IHtcclxuICAgICAgICAgIHRoaXMucmVzcG9uc2VGaWxlc1trXSA9IHRoaXMuZmlsZXNbMF0uY3VzdG9tW2tdO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMucmVzcG9uc2VGaWxlcy4kbmV3RmlsZSA9IHRoaXMuZmlsZXNbMF0uJG5ld0ZpbGU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChkb2VtaXQpIHtcclxuICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLnJlc3BvbnNlRmlsZXMpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGNvbnNvbGUubG9nKCdlbWl0JywgdGhpcy5maWxlc1sxXSwgeyAuLi50aGlzLmZpbGVzWzFdLmN1c3RvbSwgJG5ld0ZpbGU6IHRoaXMuZmlsZXNbMV0uJG5ld0ZpbGUgfSk7XHJcbiAgICAvLyB0aGlzLm9uQ2hhbmdlKHRoaXMuaW5wdXRBcnJheSA/XHJcbiAgICAvLyAgIHRoaXMuZmlsZXMubWFwKGYgPT4gKHsgLi4uZi5jdXN0b20sICRuZXdGaWxlOiBmLiRuZXdGaWxlfSkpIDpcclxuICAgIC8vICAgKHRoaXMuZmlsZXMubGVuZ3RoID4gMCA/IHsgLi4udGhpcy5maWxlc1swXS5jdXN0b20sICRuZXdGaWxlOiB0aGlzLmZpbGVzWzBdLiRuZXdGaWxlIH0gOiBudWxsKSk7XHJcbiAgICAvLyB0aGlzLm9uQ2hhbmdlKHRoaXMuaW5wdXRBcnJheSA/XHJcbiAgICAvLyAgIHRoaXMuZmlsZXMgOlxyXG4gICAgLy8gICAodGhpcy5maWxlcy5sZW5ndGggPiAwID8gdGhpcy5maWxlc1swXSA6IG51bGwpKTtcclxuICB9XHJcblxyXG4gIGJlZm9yZVNhdmUoKSB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlcywgcmVqKSA9PiB7XHJcbiAgICAgIHRoaXMuZmlsZXMuZm9yRWFjaChmID0+IHtcclxuICAgICAgICBpZiAoZi4kbmV3RmlsZSAmJiBmLiRuZXdGaWxlLnByb2dyZXNzLnN0YXR1cyA9PT0gMikge1xyXG4gICAgICAgICAgZi4kbmV3RmlsZS5wcm9ncmVzcy5zdGF0dXMgPSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5jcm9wICYmIGYuJG5ld0ZpbGUgJiYgIXRoaXMuaW1hZ2VzRG9uZVtmLiRuZXdGaWxlLmlkXSkge1xyXG4gICAgICAgICAgdGhpcy5jcm9wcGVyRG9uZShmLiRuZXdGaWxlLmlkKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHJlcygnZG9uZScpO1xyXG4gICAgICB9LCAyNTApO1xyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGZpbGVDaGFuZ2VFdmVudChldmVudDogYW55LCBmOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMuY2hhbmdlRmlsZUluZGV4ID0gdGhpcy5maWxlcy5pbmRleE9mKGYpO1xyXG4gIH1cclxuXHJcbiAgc3RhcnRDcm9wUHJldmlldyhpZCkge1xyXG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuY3JvcFByZXZpZXdUaW1lb3V0c1tpZF0pO1xyXG4gICAgdGhpcy5zaG93Q3JvcFByZXZpZXdbaWRdID0gISF0aGlzLmNyb3BTb3VyY2VJbWFnZXNbaWRdO1xyXG4gIH1cclxuXHJcbiAgc3RvcENyb3BQcmV2aWV3KGlkKSB7XHJcbiAgICB0aGlzLmNyb3BQcmV2aWV3VGltZW91dHNbaWRdID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuc2hvd0Nyb3BQcmV2aWV3W2lkXSA9IGZhbHNlO1xyXG4gICAgfSwgMjUwKTtcclxuICB9XHJcblxyXG4gIHpvb21Dcm9wcGVkSW1hZ2UoZGlyLCBpZCkge1xyXG4gICAgbGV0IHNjYWxlID0gdGhpcy50cmFuc2Zvcm1baWRdLnNjYWxlO1xyXG4gICAgc2NhbGUgKz0gZGlyO1xyXG4gICAgaWYgKHNjYWxlIDwgMC4xKSB7XHJcbiAgICAgIHNjYWxlID0gMC4xO1xyXG4gICAgfVxyXG4gICAgdGhpcy50cmFuc2Zvcm1baWRdID0ge1xyXG4gICAgICAuLi50aGlzLnRyYW5zZm9ybVtpZF0sXHJcbiAgICAgIHNjYWxlXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcm90YXRlQ3JvcHBlZEltYWdlKGRpciwgaWQpIHtcclxuICAgIHRoaXMuY2FudmFzUm90YXRpb25baWRdICs9IGRpcjtcclxuICAgIGNvbnN0IGZsaXBwZWRIID0gdGhpcy50cmFuc2Zvcm1baWRdLmZsaXBIO1xyXG4gICAgY29uc3QgZmxpcHBlZFYgPSB0aGlzLnRyYW5zZm9ybVtpZF0uZmxpcFY7XHJcbiAgICB0aGlzLnRyYW5zZm9ybVtpZF0gPSB7XHJcbiAgICAgIC4uLnRoaXMudHJhbnNmb3JtW2lkXSxcclxuICAgICAgZmxpcEg6IGZsaXBwZWRWLFxyXG4gICAgICBmbGlwVjogZmxpcHBlZEhcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBvbkltYWdlQ3JvcHBlZChldmVudDogSW1hZ2VDcm9wcGVkRXZlbnQsIGlkKSB7XHJcbiAgICB0aGlzLmNyb3BwZWRJbWFnZXNbaWRdID0gZXZlbnQ7XHJcbiAgICB0aGlzLmltYWdlQ3JvcHBlZC5lbWl0KGV2ZW50KTtcclxuICB9XHJcblxyXG4gIGltYWdlTG9hZGVkKGlkKSB7XHJcbiAgICB0aGlzLnNob3dDcm9wcGVyID0gdHJ1ZTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnRyYW5zZm9ybVtpZF0gPSB7XHJcbiAgICAgICAgc2NhbGU6IDFcclxuICAgICAgfTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY3JvcHBlclJlYWR5KHNvdXJjZUltYWdlRGltZW5zaW9uczogRGltZW5zaW9ucywgaWQpIHtcclxuICAgIHRoaXMuY3JvcHBlckltYWdlTG9hZGVkW2lkXSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBsb2FkSW1hZ2VGYWlsZWQoKSB7XHJcbiAgfVxyXG5cclxuICB0b2dnbGVNZW51VmlzaWJpbGl0eShmKSB7XHJcbiAgICB0aGlzLmZpbGVNZW51T3BlbmVkID0gZjtcclxuICB9XHJcblxyXG4gIG1lbnVDbGljaygpIHtcclxuICAgIHRoaXMuZmlsZU1lbnVPcGVuZWQgPSB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuXHJcbiAgd3JpdGVWYWx1ZShvYmo6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5pbnB1dEFycmF5ID0gb2JqIGluc3RhbmNlb2YgQXJyYXk7XHJcbiAgICBpZiAodGhpcy5pbnB1dEFycmF5KSB7XHJcbiAgICAgIHRoaXMuZmlsZXMgPSBvYmoubWFwKGYgPT4gKHsgY3VzdG9tOiBmLCAkbmV3RmlsZTogbnVsbCB9KSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmZpbGVzID0gb2JqID8gWyB7IGN1c3RvbTpvYmosICRuZXdGaWxlOiBudWxsfSBdIDogW107XHJcbiAgICB9XHJcbiAgICB0aGlzLmNyb3BTb3VyY2VJbWFnZXMgPSB7fTtcclxuICB9XHJcblxyXG4gIGNyb3BwZXJEb25lKGlkKSB7XHJcbiAgICBjb25zdCBmID0gdGhpcy5maWxlcy5maW5kKGZ4ID0+IGZ4LiRuZXdGaWxlICYmIGZ4LiRuZXdGaWxlLmlkID09PSBpZCk7XHJcbiAgICBpZiAoZikge1xyXG4gICAgICAvLyBjb25zdCB1cmwgPSB0aGlzLmNyb3BwZWRJbWFnZXNbaWRdO1xyXG4gICAgICAvLyBjb25zb2xlLmxvZyh1cmwpO1xyXG4gICAgICAvLyBmZXRjaCh1cmwpXHJcbiAgICAgIC8vICAgLnRoZW4ocmVzID0+IHJlcy5ibG9iKCkpXHJcbiAgICAgIC8vICAgLnRoZW4oYmxvYiA9PiB7XHJcbiAgICAgIC8vICAgICBmLiRuZXdGaWxlLm5hdGl2ZUZpbGUgPSBuZXcgRmlsZShbIGJsb2IgXSwgJ2Nyb3AucG5nJywge1xyXG4gICAgICAvLyAgICAgICB0eXBlOiAnaW1hZ2UvcG5nJ1xyXG4gICAgICAvLyAgICAgfSk7XHJcbiAgICAgIC8vICAgICBmLiRuZXdGaWxlLm5hbWUgPSAnY3JvcC5wbmcnO1xyXG4gICAgICAvLyAgICAgZi4kbmV3RmlsZS5zaXplID0gZi4kbmV3RmlsZS5uYXRpdmVGaWxlLnNpemU7XHJcbiAgICAgIC8vICAgICBmLiRuZXdGaWxlLnR5cGUgPSBmLiRuZXdGaWxlLm5hdGl2ZUZpbGUudHlwZTtcclxuICAgICAgLy8gICAgIHRoaXMuaW1hZ2VzRG9uZVtpZF0gPSB0cnVlO1xyXG4gICAgICAvLyAgICAgY29uc29sZS5sb2coZik7XHJcbiAgICAgIC8vICAgfSlcclxuICAgICAgY29uc3QgY3JvcHBlZEltYWdlID0gdGhpcy5jcm9wcGVkSW1hZ2VzW2lkXTtcclxuICAgICAgZi4kbmV3RmlsZS5uYXRpdmVGaWxlID0gbmV3IEZpbGUoWyBjcm9wcGVkSW1hZ2UuYmxvYiBdLCAnY3JvcC5wbmcnLCB7XHJcbiAgICAgICAgdHlwZTogJ2ltYWdlL3BuZydcclxuICAgICAgfSk7XHJcbiAgICAgIGYuJG5ld0ZpbGUubmFtZSA9ICdjcm9wLnBuZyc7XHJcbiAgICAgIGYuJG5ld0ZpbGUuc2l6ZSA9IGYuJG5ld0ZpbGUubmF0aXZlRmlsZS5zaXplO1xyXG4gICAgICBmLiRuZXdGaWxlLnR5cGUgPSBmLiRuZXdGaWxlLm5hdGl2ZUZpbGUudHlwZTtcclxuICAgICAgdGhpcy5pbWFnZXNEb25lW2lkXSA9IHRydWU7XHJcbiAgICAgIGNvbnNvbGUubG9nKGYpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwibGFiZWxcIiAqbmdJZj1cImxhYmVsXCI+XHJcbiAgPGRpdiBjbGFzcz1cInRleHQtY29udGFpbmVyXCIgW21hdFRvb2x0aXBdPVwicmVxdWlyZWQgPyB0cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ3VpLmNvbnRyb2xzLnZhbGlkYXRpb24ucmVxdWlyZWQnKSA6IHVuZGVmaW5lZFwiIFttYXRUb29sdGlwUG9zaXRpb25dPVwiJ2Fib3ZlJ1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cInRleHRcIj57e2xhYmVsfX08L2Rpdj5cclxuICAgIDxkaXYgKm5nSWY9XCJyZXF1aXJlZFwiIGNsYXNzPVwicmVxdWlyZWRcIj4qPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPGRpdiBjbGFzcz1cImZpbGVzLWNvbnRhaW5lclwiIFtuZ0NsYXNzXT1cIntkcmFnZ2luZzogZHJhZ2dpbmcsIGRpc2FibGVkOiB1cGxvYWRpbmcgfHwgIWVkaXRhYmxlfVwiPlxyXG5cclxuICA8ZGl2IGNsYXNzPVwiZXhpc3RpbmctZmlsZXNcIj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiZmlsZS1jb250YWluZXJcIiAqbmdGb3I9XCJsZXQgZiBvZiBmaWxlc1wiPlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cImZpbGUtbWVudVwiIChjbGljayk9XCJ0b2dnbGVNZW51VmlzaWJpbGl0eShmKVwiICpuZ0lmPVwiIWN1c3RvbUZpbGVNZW51ICYmIGVkaXRhYmxlICYmICF1cGxvYWRpbmdcIj5cclxuICAgICAgICA8bWF0LWljb24+bWVudTwvbWF0LWljb24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZmlsZS1tZW51LWNvbnRhaW5lciBtYXQtZWxldmF0aW9uLXoyXCIgW25nQ2xhc3NdPVwie3Zpc2libGU6IGYgPT09IGZpbGVNZW51T3BlbmVkfVwiIChjbGljayk9XCJtZW51Q2xpY2soKVwiIChtb3VzZWxlYXZlKT1cIm1lbnVDbGljaygpXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFtZW51VGVtcGxhdGVcIj5cclxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cIm1lbnUtaXRlbVwiPnt7IHRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgndWkuY29udHJvbHMudWktZmlsZS11cGxvYWRlci5tZW51LmNoYW5nZScpIH19XHJcbiAgICAgICAgICAgIDxpbnB1dCAqbmdJZj1cIiFyZWZyZXNoQWRkSW5wdXRcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCIgdHlwZT1cImZpbGVcIiBuZ0ZpbGVTZWxlY3QgW29wdGlvbnNdPVwidXBsb2FkT3B0aW9uc1wiIChjaGFuZ2UpPVwiZmlsZUNoYW5nZUV2ZW50KCRldmVudCwgZilcIlxyXG4gICAgICAgICAgICAgICAgICAgKHVwbG9hZE91dHB1dCk9XCJvblVwbG9hZE91dHB1dCgkZXZlbnQpXCIgW3VwbG9hZElucHV0XT1cInVwbG9hZElucHV0XCI+XHJcbiAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1lbnUtaXRlbVwiIChjbGljayk9XCJyZW1vdmUoZilcIj57eyB0cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ3VpLmNvbnRyb2xzLnVpLWZpbGUtdXBsb2FkZXIubWVudS5kZWxldGUnKSB9fTwvZGl2PlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtZW51VGVtcGxhdGVcIj5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJtZW51VGVtcGxhdGVcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie2ZpbGVJbnB1dDogZmlsZUlucHV0fVwiPjwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2ZpbGVJbnB1dD5cclxuICAgICAgICAgIDxpbnB1dCBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCIgdHlwZT1cImZpbGVcIiBuZ0ZpbGVTZWxlY3QgW29wdGlvbnNdPVwidXBsb2FkT3B0aW9uc1wiIChjaGFuZ2UpPVwiZmlsZUNoYW5nZUV2ZW50KCRldmVudCwgZilcIlxyXG4gICAgICAgICAgICAgICAgICh1cGxvYWRPdXRwdXQpPVwib25VcGxvYWRPdXRwdXQoJGV2ZW50KVwiIFt1cGxvYWRJbnB1dF09XCJ1cGxvYWRJbnB1dFwiPlxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2ICpuZ0lmPVwiY3JvcCAmJiAhY3JvcERvbmUoZilcIiAobW91c2VlbnRlcik9XCJzdGFydENyb3BQcmV2aWV3KGYuJG5ld0ZpbGUuaWQpXCIgKG1vdXNlbGVhdmUpPVwic3RvcENyb3BQcmV2aWV3KGYuJG5ld0ZpbGUuaWQpXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNyb3AtY29udGFpbmVyXCIgW25nU3R5bGVdPVwibmdBZGRTdHlsZVwiPlxyXG5cclxuICAgICAgICAgIDx1aS1maWxlICpuZ0lmPVwiZmFsc2UgJiYgZmlsZXMubGVuZ3RoID4gMCAmJiAhY3JvcFNvdXJjZUltYWdlc1wiIFtmaWxlU2l6ZV09XCJmaWxlU2l6ZVwiIFtzcmNEYXRhXT1cImZpbGVzWzBdLmN1c3RvbVwiIFtuZ0NsYXNzXT1cIntyb3VuZGVkOiBjcm9wUm91bmRlZH1cIj48L3VpLWZpbGU+XHJcblxyXG4gICAgICAgICAgPG1hdC1zcGlubmVyICpuZ0lmPVwiIWNyb3BwZXJJbWFnZUxvYWRlZFtmLiRuZXdGaWxlLmlkXSAmJiBjcm9wU291cmNlSW1hZ2VzW2YuJG5ld0ZpbGUuaWRdXCIgW2RpYW1ldGVyXT1cIjc1XCI+PC9tYXQtc3Bpbm5lcj5cclxuXHJcbiAgICAgICAgICA8aW1hZ2UtY3JvcHBlciAqbmdJZj1cImNyb3BTb3VyY2VJbWFnZXNbZi4kbmV3RmlsZS5pZF1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgW2ltYWdlRmlsZV09XCJjcm9wU291cmNlSW1hZ2VzW2YuJG5ld0ZpbGUuaWRdXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFttYWludGFpbkFzcGVjdFJhdGlvXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgW2NvbnRhaW5XaXRoaW5Bc3BlY3RSYXRpb109XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbYXNwZWN0UmF0aW9dPVwiYXNwZWN0UmF0aW9cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgW3Jlc2l6ZVRvV2lkdGhdPVwiY3JvcE1heFdpZHRoXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFtvbmx5U2NhbGVEb3duXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3VuZENyb3BwZXJdPVwiY3JvcFJvdW5kZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgW2NhbnZhc1JvdGF0aW9uXT1cImNhbnZhc1JvdGF0aW9uW2YuJG5ld0ZpbGUuaWRdXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFt0cmFuc2Zvcm1dPVwidHJhbnNmb3JtW2YuJG5ld0ZpbGUuaWRdXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFthbGlnbkltYWdlXT1cIidjZW50ZXInXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5kaXNwbGF5XT1cInNob3dDcm9wcGVyID8gbnVsbCA6ICdub25lJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybWF0XT1cIidwbmcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIChpbWFnZUNyb3BwZWQpPVwib25JbWFnZUNyb3BwZWQoJGV2ZW50LCBmLiRuZXdGaWxlLmlkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAoaW1hZ2VMb2FkZWQpPVwiaW1hZ2VMb2FkZWQoZi4kbmV3RmlsZS5pZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgKGNyb3BwZXJSZWFkeSk9XCJjcm9wcGVyUmVhZHkoJGV2ZW50LCBmLiRuZXdGaWxlLmlkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAobG9hZEltYWdlRmFpbGVkKT1cImxvYWRJbWFnZUZhaWxlZCgpXCJcclxuICAgICAgICAgID48L2ltYWdlLWNyb3BwZXI+XHJcblxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNyb3AtcHJldmlldyBtYXQtZWxldmF0aW9uLXoyXCIgW2NsYXNzXT1cInByZXZpZXdQb3NpdGlvblwiICpuZ0lmPVwidHJ1ZSB8fCAoc2hvd0Nyb3BQcmV2aWV3W2YuJG5ld0ZpbGUuaWRdICYmIGNyb3BwZXJJbWFnZUxvYWRlZFtmLiRuZXdGaWxlLmlkXSlcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNyb3AtbWVudVwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtaWNvbiAoY2xpY2spPVwiem9vbUNyb3BwZWRJbWFnZSguMSwgZi4kbmV3RmlsZS5pZClcIj56b29tX2luPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICA8bWF0LWljb24gKGNsaWNrKT1cInpvb21Dcm9wcGVkSW1hZ2UoLSAuMSwgZi4kbmV3RmlsZS5pZClcIj56b29tX291dDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgPG1hdC1pY29uIChjbGljayk9XCJyb3RhdGVDcm9wcGVkSW1hZ2UoLTEsIGYuJG5ld0ZpbGUuaWQpXCI+cm90YXRlX2xlZnQ8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgIDxtYXQtaWNvbiAoY2xpY2spPVwicm90YXRlQ3JvcHBlZEltYWdlKDEsIGYuJG5ld0ZpbGUuaWQpXCI+cm90YXRlX3JpZ2h0PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwiZmxleDogMSAxIDEwMCVcIj48L2Rpdj5cclxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJtZW51LWl0ZW1cIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj51cGxvYWRfZmlsZTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiIHR5cGU9XCJmaWxlXCIgbmdGaWxlU2VsZWN0IFtvcHRpb25zXT1cInVwbG9hZE9wdGlvbnNcIiAoY2hhbmdlKT1cImZpbGVDaGFuZ2VFdmVudCgkZXZlbnQsIGYpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAodXBsb2FkT3V0cHV0KT1cIm9uVXBsb2FkT3V0cHV0KCRldmVudClcIiBbdXBsb2FkSW5wdXRdPVwidXBsb2FkSW5wdXRcIj5cclxuICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDxtYXQtaWNvbiAoY2xpY2spPVwicmVtb3ZlKGYpXCI+ZGVsZXRlX291dGxpbmU8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJmbGV4OiAxIDEgMTAwJVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgIDxtYXQtaWNvbiAoY2xpY2spPVwiY3JvcHBlckRvbmUoZi4kbmV3RmlsZS5pZClcIj5kb25lPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxpbWcgKm5nSWY9XCJjcm9wcGVkSW1hZ2VzW2YuJG5ld0ZpbGUuaWRdXCIgW3NyY109XCJjcm9wcGVkSW1hZ2VzW2YuJG5ld0ZpbGUuaWRdLm9iamVjdFVybFwiIFtuZ0NsYXNzXT1cIntyb3VuZGVkOiBjcm9wUm91bmRlZH1cIi8+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuXHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjcm9wIHx8IGNyb3BEb25lKGYpXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpbGVUZW1wbGF0ZVwiPlxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImZpbGVUZW1wbGF0ZVwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ZmlsZTogZiwgZmlsZUlucHV0OiBmaWxlSW5wdXQyfVwiPjwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2ZpbGVJbnB1dDI+XHJcbiAgICAgICAgICAgIDxpbnB1dCBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCIgdHlwZT1cImZpbGVcIiBuZ0ZpbGVTZWxlY3QgW29wdGlvbnNdPVwidXBsb2FkT3B0aW9uc1wiIChjaGFuZ2UpPVwiZmlsZUNoYW5nZUV2ZW50KCRldmVudCwgZilcIlxyXG4gICAgICAgICAgICAgICAgICAgKHVwbG9hZE91dHB1dCk9XCJvblVwbG9hZE91dHB1dCgkZXZlbnQpXCIgW3VwbG9hZElucHV0XT1cInVwbG9hZElucHV0XCI+XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICA8dWktZmlsZSAqbmdJZj1cIiFmaWxlVGVtcGxhdGVcIiBbZmlsZVNpemVdPVwiZmlsZVNpemVcIiBbc3JjRGF0YV09XCJmLiRuZXdGaWxlID8gZi4kbmV3RmlsZTogZi5jdXN0b21cIiBbbmdDbGFzc109XCJ7cm91bmRlZDogY3JvcCAmJiBjcm9wUm91bmRlZH1cIj5cclxuICAgICAgICA8L3VpLWZpbGU+XHJcblxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmLiRuZXdGaWxlXCI+XHJcbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZi4kbmV3RmlsZS5yZXNwb25zZVN0YXR1cyAmJiBmLiRuZXdGaWxlLnJlc3BvbnNlU3RhdHVzICE9PSAyMDBcIiBjbGFzcz1cInByb2dyZXNzLWNvbnRhaW5lciBlcnJvclwiPlxyXG4gICAgICAgICAgICB7eyB0cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ3VpLmNvbnRyb2xzLnVpLWZpbGUtdXBsb2FkZXIudXBsb2FkRXJyb3InLCBmLiRuZXdGaWxlLnJlc3BvbnNlKSB9fVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWYuJG5ld0ZpbGUucmVzcG9uc2VTdGF0dXMgJiYgZi4kbmV3RmlsZS5wcm9ncmVzcy5zdGF0dXMgPT09IDFcIiBjbGFzcz1cInByb2dyZXNzLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZ3Jlc3NcIiBbbmdTdHlsZV09XCJ7d2lkdGg6IGYuJG5ld0ZpbGUucHJvZ3Jlc3MuZGF0YS5wZXJjZW50YWdlICsgJyUnfVwiPjwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2IGNsYXNzPVwiZmlsZS1jb250YWluZXIgYWRkXCIgbmdGaWxlRHJvcCAgW29wdGlvbnNdPVwidXBsb2FkT3B0aW9uc1wiICh1cGxvYWRPdXRwdXQpPVwib25VcGxvYWRPdXRwdXQoJGV2ZW50KVwiIFt1cGxvYWRJbnB1dF09XCJ1cGxvYWRJbnB1dFwiIFtuZ0NsYXNzXT1cInt2aXNpYmxlOiBmaWxlcy5sZW5ndGggPCBtYXhGaWxlcyB8fCBtYXhGaWxlcyA9PT0gMH1cIiBbbmdTdHlsZV09XCJhZGRGaWxlVGVtcGxhdGUgPyB7fSA6IG5nQWRkU3R5bGVcIj5cclxuICAgIDxsYWJlbD5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFkZEZpbGVUZW1wbGF0ZVwiPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJhZGRGaWxlVGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFhZGRGaWxlVGVtcGxhdGVcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidXBsb2FkLWltYWdlLWNvbnRhaW5lclwiPjwvZGl2PlxyXG4gICAgICAgIDxpbWcgW3NyY109XCJhZGRGaWxlSW1nU3JjXCIgW25nQ2xhc3NdPVwieyd3aXRoLWhpbnQnOiBhZGRIaW50fVwiIC8+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cImFkZEhpbnRcIiBjbGFzcz1cImFkZC1oaW50XCI+e3thZGRIaW50fX08L2Rpdj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDxpbnB1dCBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCIgdHlwZT1cImZpbGVcIiBuZ0ZpbGVTZWxlY3QgW29wdGlvbnNdPVwidXBsb2FkT3B0aW9uc1wiICh1cGxvYWRPdXRwdXQpPVwib25VcGxvYWRPdXRwdXQoJGV2ZW50KVwiIFt1cGxvYWRJbnB1dF09XCJ1cGxvYWRJbnB1dFwiIFttdWx0aXBsZV09XCJtYXhGaWxlcyA9PT0gMCAmJiBtdWx0aXBsZVwiPlxyXG4gICAgPC9sYWJlbD5cclxuICA8L2Rpdj5cclxuXHJcbjwvZGl2PlxyXG4iXX0=
|
|
405
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWktZmlsZS11cGxvYWRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL2ZpbGUtdXBsb2FkZXIvdWktZmlsZS11cGxvYWRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL2ZpbGUtdXBsb2FkZXIvdWktZmlsZS11cGxvYWRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixJQUFJLEVBQ0osTUFBTSxFQUNOLEtBQUssRUFHTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFFBQVEsRUFDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQW9CLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFckUsT0FBTyxFQUEwQyxjQUFjLEVBQWlCLE1BQU0sNkJBQTZCLENBQUM7QUFFcEgsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDMUUsT0FBTyxFQUF1QixtQkFBbUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDOzs7Ozs7Ozs7OztBQTJCNUYsTUFBTSxPQUFPLHVCQUF3QixTQUFRLGlCQUFpQjtJQWM1RCxJQUFJLFlBQVk7UUFDZCxPQUFPLElBQUksQ0FBQyxTQUFTLEVBQUUsWUFBWSxDQUFDO0lBQ3RDLENBQUM7SUFFRCxJQUFJLGVBQWU7UUFDakIsT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLGVBQWUsQ0FBQztJQUN6QyxDQUFDO0lBRUQsSUFBSSxZQUFZO1FBQ2QsT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLFlBQVksQ0FBQztJQUN0QyxDQUFDO0lBd0NELFlBQXdELGlCQUFpQyxFQUN6QyxnQkFBcUMsRUFDL0IsZ0JBQWtDLEVBQ3BFLFdBQTBCO1FBRTVDLEtBQUssQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLENBQUMs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dGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSG9zdCxcclxuICBJbmplY3QsXHJcbiAgSW5wdXQsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9uSW5pdCxcclxuICBPcHRpb25hbCxcclxuICBPdXRwdXQsXHJcbiAgU2tpcFNlbGZcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29udHJvbENvbnRhaW5lciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFVwbG9hZGVyT3B0aW9ucywgVXBsb2FkRmlsZSwgVXBsb2FkSW5wdXQsIFVwbG9hZE91dHB1dCB9IGZyb20gJ25neC11cGxvYWRlcic7XHJcbmltcG9ydCB7IElVaUZpbGVTZXJ2aWNlLCBJVWlGaWxlU2VydmljZU1lc3NhZ2VzLCBVSV9GSUxFU0VSVklDRSwgVWlGaWxlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3VpLWZpbGUuc2VydmljZSc7XHJcbmltcG9ydCB7IERpbWVuc2lvbnMsIEltYWdlQ3JvcHBlZEV2ZW50LCBJbWFnZVRyYW5zZm9ybSB9IGZyb20gJ25neC1pbWFnZS1jcm9wcGVyJztcclxuaW1wb3J0IHsgVWlTaW1wbGVDb21wb25lbnQgfSBmcm9tICcuLi9sYXlvdXRzL3NpbXBsZS91aS1zaW1wbGUuY29tcG9uZW50JztcclxuaW1wb3J0IHsgSVVpVHJhbnNsYXRlU2VydmljZSwgVUlfVFJBTlNMQVRFU0VSVklDRSB9IGZyb20gJy4uL3NlcnZpY2VzL3VpLXRyYW5zbGF0ZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgc2tpcCB9IGZyb20gJ3J4anMnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBVcGxvYWRPdXRwdXRFeCBleHRlbmRzIFVwbG9hZE91dHB1dCB7XHJcbiAgZmlsZTogVXBsb2FkRmlsZUV4O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFVwbG9hZEZpbGVFeCBleHRlbmRzIFVwbG9hZEZpbGUge1xyXG4gIGltYWdlUHJldmlldz86IGFueTtcclxuICBiYXNlNjQ/OiBhbnk7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVVpVXBsb2FkZXJVc2VyTWVzc2FnZSB7XHJcbiAgbWVzc2FnZTogSVVpRmlsZVNlcnZpY2VNZXNzYWdlcyxcclxuICBkYXRhOiBhbnlcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICd1aS1maWxlLXVwbG9hZGVyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdWktZmlsZS11cGxvYWRlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbICcuL3VpLWZpbGUtdXBsb2FkZXIuY29tcG9uZW50LnNjc3MnXSxcclxuICBwcm92aWRlcnM6IFt7XHJcbiAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICAgIG11bHRpOiB0cnVlLFxyXG4gICAgdXNlRXhpc3Rpbmc6IFVpRmlsZVVwbG9hZGVyQ29tcG9uZW50LFxyXG4gIH1dXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBVaUZpbGVVcGxvYWRlckNvbXBvbmVudCBleHRlbmRzIFVpU2ltcGxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG5cclxuICBASW5wdXQoKSBtYXhGaWxlcyA9IDE7XHJcbiAgQElucHV0KCkgbXVsdGlwbGUgPSB0cnVlO1xyXG4gIEBJbnB1dCgpIGNyb3AgPSBmYWxzZTtcclxuICBASW5wdXQoKSBjcm9wUm91bmRlZCA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGNyb3BNYXhXaWR0aDtcclxuICBASW5wdXQoKSBmaWxlU2l6ZSA9ICdkZWZhdWx0JztcclxuICBASW5wdXQoKSBjdXN0b21GaWxlTWVudSA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGFkZEhpbnQ7XHJcbiAgQElucHV0KCkgbmV3RmlsZVBvc2l0aW9uOiAnZmlyc3QnIHwgJ2xhc3QnID0gJ2xhc3QnO1xyXG5cclxuICBASW5wdXQoKSB0ZW1wbGF0ZXM6IHsgbWVudVRlbXBsYXRlPzogYW55LCBhZGRGaWxlVGVtcGxhdGU/OiBhbnksIGZpbGVUZW1wbGF0ZT86IGFueSB9ID0ge31cclxuXHJcbiAgZ2V0IG1lbnVUZW1wbGF0ZSgpIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBsYXRlcz8ubWVudVRlbXBsYXRlO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGFkZEZpbGVUZW1wbGF0ZSgpIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBsYXRlcz8uYWRkRmlsZVRlbXBsYXRlO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGZpbGVUZW1wbGF0ZSgpIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBsYXRlcz8uZmlsZVRlbXBsYXRlO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KCkgcHJldmlld1Bvc2l0aW9uOiAnbGVmdCcgfCAnYm90dG9tJyB8ICdhYm92ZScgPSAnYm90dG9tJztcclxuXHJcbiAgQE91dHB1dCgpIGltYWdlQ3JvcHBlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgZmlsZUV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxJVWlVcGxvYWRlclVzZXJNZXNzYWdlPigpO1xyXG5cclxuICB1cGxvYWRPcHRpb25zOiBVcGxvYWRlck9wdGlvbnMgPSB7XHJcbiAgICBjb25jdXJyZW5jeTogdGhpcy5maWxlU2VydmljZUNvbmZpZy5jb25jdXJyZW50VXBsb2Fkc1xyXG4gIH07XHJcblxyXG4gIHB1YmxpYyB1cGxvYWRpbmcgPSBmYWxzZTtcclxuXHJcbiAgY2hhbmdlRmlsZUluZGV4O1xyXG5cclxuICBzaG93Q3JvcHBlciA9IGZhbHNlO1xyXG4gIG1lbnVWaXNpYmxlOiBhbnk7XHJcbiAgc2hvd0Nyb3BQcmV2aWV3ID0ge307XHJcbiAgY3JvcFByZXZpZXdUaW1lb3V0cyA9IHt9O1xyXG4gIGNyb3BTb3VyY2VJbWFnZXMgPSB7fTtcclxuICBjcm9wcGVySW1hZ2VMb2FkZWQgPSB7fTtcclxuICBpbWFnZXNEb25lID0ge307XHJcbiAgdHJhbnNmb3JtOiBJbWFnZVRyYW5zZm9ybSA9IHt9O1xyXG4gIGNhbnZhc1JvdGF0aW9uID0ge31cclxuXHJcbiAgcHVibGljIGZpbGVzIDogeyBjdXN0b20/OiBhbnksICRuZXdGaWxlPzogVXBsb2FkRmlsZSB9W107XHJcblxyXG4gIHB1YmxpYyByZXNwb25zZUZpbGVzO1xyXG5cclxuICByZWZyZXNoQWRkSW5wdXQgPSBmYWxzZTtcclxuXHJcbiAgZmlsZU1lbnVPcGVuZWQ7XHJcblxyXG4gIHBhdGNoaW5nVmFsdWVzID0gZmFsc2U7XHJcblxyXG4gIGlucHV0QXJyYXkgPSBmYWxzZTtcclxuICBkcmFnZ2luZyA9IGZhbHNlO1xyXG5cclxuICB1cGxvYWRlcklkID0gTWF0aC5yb3VuZChNYXRoLnJhbmRvbSgpICogMTAwMDAwMCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKEBPcHRpb25hbCgpIEBJbmplY3QoVUlfRklMRVNFUlZJQ0UpIHByaXZhdGUgZmlsZVNlcnZpY2VDb25maWc6IElVaUZpbGVTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgIEBJbmplY3QoVUlfVFJBTlNMQVRFU0VSVklDRSkgcHVibGljIHRyYW5zbGF0ZVNlcnZpY2U6IElVaVRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgQE9wdGlvbmFsKCkgQEhvc3QoKSBAU2tpcFNlbGYoKSBwcm90ZWN0ZWQgY29udHJvbENvbnRhaW5lcjogQ29udHJvbENvbnRhaW5lcixcclxuICAgICAgICAgICAgICBwcml2YXRlIGZpbGVTZXJ2aWNlOiBVaUZpbGVTZXJ2aWNlKSB7XHJcblxyXG4gICAgc3VwZXIobnVsbCwgY29udHJvbENvbnRhaW5lcik7XHJcblxyXG4gICAgdGhpcy5maWxlU2VydmljZS51cGxvYWRTdWJzY3JpcHRpb24ubmV4dCh7YWN0aW9uOiAncmVnaXN0ZXInLCBkYXRhOiB0aGlzfSk7XHJcblxyXG4gICAgdGhpcy5maWxlU2VydmljZS51cGxvYWRTdWJzY3JpcHRpb24uc3Vic2NyaWJlKCh2OiBhbnkpID0+IHtcclxuICAgICAgc3dpdGNoICh2LmFjdGlvbikge1xyXG4gICAgICAgIGNhc2UgJ3VwbG9hZFN0YXJ0ZWQnOiB0aGlzLnVwbG9hZGluZyA9IHRydWU7IGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ3VwbG9hZEZhaWxlZCc6XHJcbiAgICAgICAgY2FzZSAndXBsb2FkU3VjY2Vzcyc6XHJcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy51cGxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgdGhpcy5wYXRjaFZhbHVlcygpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldCB1cGxvYWRJbnB1dCgpOiBFdmVudEVtaXR0ZXI8VXBsb2FkSW5wdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmZpbGVTZXJ2aWNlLnVwbG9hZElucHV0O1xyXG4gIH1cclxuXHJcbiAgY3JvcHBlZEltYWdlcyA9IHt9O1xyXG5cclxuICBnZXQgZWRpdGFibGUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jb21wb25lbnRGb3JtQ29udHJvbC5lbmFibGVkO1xyXG4gIH1cclxuXHJcbiAgZ2V0IG5nQWRkU3R5bGUoKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICB3aWR0aDogTWF0aC5hYnModGhpcy5maWxlU2VydmljZUNvbmZpZy5pbWFnZVNpemVzW3RoaXMuZmlsZVNpemVdWzBdKSArICdweCcsXHJcbiAgICAgIGhlaWdodDogTWF0aC5hYnModGhpcy5maWxlU2VydmljZUNvbmZpZy5pbWFnZVNpemVzW3RoaXMuZmlsZVNpemVdWzFdKSArICdweCcsXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgYXNwZWN0UmF0aW8oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5maWxlU2VydmljZUNvbmZpZy5pbWFnZVNpemVzW3RoaXMuZmlsZVNpemVdWzBdIC8gdGhpcy5maWxlU2VydmljZUNvbmZpZy5pbWFnZVNpemVzW3RoaXMuZmlsZVNpemVdWzFdO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGFkZEZpbGVJbWdTcmMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5maWxlU2VydmljZUNvbmZpZy5hZGRGaWxlSW1nU3JjO1xyXG4gIH1cclxuXHJcbiAgY3JvcERvbmUoZikge1xyXG4gICAgcmV0dXJuICFmLiRuZXdGaWxlIHx8IHRoaXMuaW1hZ2VzRG9uZVtmLiRuZXdGaWxlLmlkXTtcclxuICB9XHJcblxyXG4gIC8vIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gIC8vICAgc3VwZXIubmdPbkluaXQoKTtcclxuICAvLyB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5maWxlU2VydmljZS51cGxvYWRTdWJzY3JpcHRpb24ubmV4dCh7YWN0aW9uOiAnZGVzdHJveScsIGRhdGE6IHRoaXN9KTtcclxuICB9XHJcblxyXG4gIHJlbW92ZShmOiBhbnkpOiB2b2lkIHtcclxuICAgIGlmIChmLiRuZXdGaWxlKSB7XHJcbiAgICAgIHRoaXMudXBsb2FkSW5wdXQuZW1pdCh7dHlwZTogJ3JlbW92ZScsIGlkOiBmLiRuZXdGaWxlLmlkfSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmZpbGVzLnNwbGljZSh0aGlzLmZpbGVzLmluZGV4T2YoZiksIDEpO1xyXG4gICAgdGhpcy5wcmVwYXJlUmVzcG9uc2UoKTtcclxuICAgIC8vIHRoaXMub25DaGFuZ2UodGhpcy5pbnB1dEFycmF5ID8gdGhpcy5maWxlcyA6ICh0aGlzLmZpbGVzLmxlbmd0aCA+IDAgPyB0aGlzLmZpbGVzWzBdIDogbnVsbCkpO1xyXG4gICAgdGhpcy5maWxlRXZlbnQuZW1pdCh7IG1lc3NhZ2U6ICdmaWxlUmVtb3ZlZCcsIGRhdGE6IGYgfSk7XHJcbi8vICAgICB0aGlzLnBhdGNoVmFsdWVzKCk7XHJcbiAgfVxyXG5cclxuICBwYXRjaFZhbHVlcygpOiB2b2lkIHtcclxuICAgIHRoaXMucGF0Y2hpbmdWYWx1ZXMgPSB0cnVlO1xyXG4gICAgLy8gaWYgKHRoaXMuaW5wdXRBcnJheSkge1xyXG4gICAgLy8gICB0aGlzLmNvbXBvbmVudEZvcm1Db250cm9sLnNldFZhbHVlKHRoaXMuZmlsZXMubWFwKGYgPT4gZi5jdXN0b20pKTtcclxuICAgIC8vIH0gZWxzZSB7XHJcbiAgICAvLyAgIHRoaXMuY29tcG9uZW50Rm9ybUNvbnRyb2wuc2V0VmFsdWUodGhpcy5maWxlcy5sZW5ndGggPT09IDAgPyBudWxsIDogdGhpcy5maWxlc1swXS5jdXN0b20pO1xyXG4gICAgLy8gfVxyXG4gICAgdGhpcy5wYXRjaGluZ1ZhbHVlcyA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGhhc0ZpbGVzVG9VcGxvYWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gISF0aGlzLmZpbGVzLmZpbmQoZiA9PiBmLiRuZXdGaWxlICYmIGYuJG5ld0ZpbGUucHJvZ3Jlc3Muc3RhdHVzICE9PSAyKTtcclxuICB9XHJcblxyXG4gIGNhbkltYWdlUHJldmlldyh0eXBlOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0eXBlLnN0YXJ0c1dpdGgoJ2ltYWdlLycpIHx8IHR5cGUuc3RhcnRzV2l0aCgndmlkZW8vJyk7XHJcbiAgfVxyXG5cclxuICBvblVwbG9hZE91dHB1dCgkZXZlbnQ6IFVwbG9hZE91dHB1dCwgc2tpcEN1c3RvbVZhbGlkYXRpb24gPSBmYWxzZSk6IHZvaWQge1xyXG4gICAgLy8gY29uc29sZS5sb2coJGV2ZW50KTtcclxuICAgIHN3aXRjaCAoJGV2ZW50LnR5cGUpIHtcclxuICAgICAgY2FzZSAnc3RhcnQnOlxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSAnZHJhZ092ZXInOlxyXG4gICAgICAgIHRoaXMuZHJhZ2dpbmcgPSB0cnVlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdkcmFnT3V0JzpcclxuICAgICAgY2FzZSAnZHJvcCc6XHJcbiAgICAgICAgdGhpcy5kcmFnZ2luZyA9IGZhbHNlO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSAnYWRkZWRUb1F1ZXVlJzpcclxuICAgICAgICBpZiAodGhpcy5jcm9wICYmICEkZXZlbnQuZmlsZS50eXBlLnN0YXJ0c1dpdGgoJ2ltYWdlLycpKSB7XHJcbiAgICAgICAgICB0aGlzLnVwbG9hZElucHV0LmVtaXQoeyB0eXBlOiAncmVtb3ZlJywgaWQ6ICRldmVudC5maWxlLmlkIH0pO1xyXG4gICAgICAgICAgdGhpcy5maWxlRXZlbnQuZW1pdCh7IG1lc3NhZ2U6ICdjcm9wSW52YWxpZEZpbGVUeXBlJywgZGF0YTogJGV2ZW50LmZpbGUgfSk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXNraXBDdXN0b21WYWxpZGF0aW9uICYmIHRoaXMuZmlsZVNlcnZpY2VDb25maWcuZmlsZVZhbGlkYXRpb24pIHtcclxuICAgICAgICAgIHRoaXMuZmlsZVNlcnZpY2VDb25maWcuZmlsZVZhbGlkYXRpb24odGhpcy5maWxlU2l6ZSwgJGV2ZW50LmZpbGUpLnRoZW4odmFsaWQgPT4ge1xyXG4gICAgICAgICAgICBpZiAodmFsaWQpIHtcclxuICAgICAgICAgICAgICB0aGlzLm9uVXBsb2FkT3V0cHV0KCRldmVudCwgdHJ1ZSlcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLnVwbG9hZElucHV0LmVtaXQoeyB0eXBlOiAncmVtb3ZlJywgaWQ6ICRldmVudC5maWxlLmlkIH0pO1xyXG4gICAgICAgICAgICAgIC8vIHRoaXMuZmlsZUV2ZW50LmVtaXQoeyBtZXNzYWdlOiAnY3JvcEludmFsaWRGaWxlVHlwZScsIGRhdGE6ICRldmVudC5maWxlIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBsZXQgZjtcclxuICAgICAgICAgIGlmICh0aGlzLmNoYW5nZUZpbGVJbmRleCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGYgPSB0aGlzLmZpbGVzW3RoaXMuY2hhbmdlRmlsZUluZGV4XTtcclxuICAgICAgICAgICAgaWYgKGYuJG5ld0ZpbGUpIHtcclxuICAgICAgICAgICAgICB0aGlzLnVwbG9hZElucHV0LmVtaXQoeyB0eXBlOiAncmVtb3ZlJywgaWQ6IGYuJG5ld0ZpbGUuaWQgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZi4kbmV3RmlsZSA9ICRldmVudC5maWxlO1xyXG4gICAgICAgICAgICBmLmN1c3RvbSA9ICRldmVudC5maWxlO1xyXG4gICAgICAgICAgICB0aGlzLmNoYW5nZUZpbGVJbmRleCA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGYgPSB7IGN1c3RvbTogJGV2ZW50LmZpbGUsICRuZXdGaWxlOiAkZXZlbnQuZmlsZSB9O1xyXG4gICAgICAgICAgICBpZiAodGhpcy5uZXdGaWxlUG9zaXRpb24gPT09ICdsYXN0Jykge1xyXG4gICAgICAgICAgICAgIHRoaXMuZmlsZXMucHVzaChmKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLmZpbGVzLnVuc2hpZnQoZik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICh0aGlzLmNhbkltYWdlUHJldmlldygkZXZlbnQuZmlsZS50eXBlKSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5jcm9wKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5jYW52YXNSb3RhdGlvblskZXZlbnQuZmlsZS5pZF0gPSAwO1xyXG4gICAgICAgICAgICAgIHRoaXMuY3JvcFNvdXJjZUltYWdlc1skZXZlbnQuZmlsZS5pZF0gPSAkZXZlbnQuZmlsZS5uYXRpdmVGaWxlO1xyXG4gICAgICAgICAgICAgIHRoaXMuY3JvcHBlckltYWdlTG9hZGVkWyRldmVudC5maWxlLmlkXSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnByZXBhcmVSZXNwb25zZSgpO1xyXG4gICAgICAgICAgdGhpcy5maWxlRXZlbnQuZW1pdCh7IG1lc3NhZ2U6ICdmaWxlQWRkZWQnLCBkYXRhOiBmIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgJ2RvbmUnOlxyXG4gICAgICAgIGNvbnN0IGRmID0gdGhpcy5maWxlcy5maW5kKGYgPT4gZi4kbmV3RmlsZSA9PT0gJGV2ZW50LmZpbGUpO1xyXG4gICAgICAgIGlmIChkZikge1xyXG4gICAgICAgICAgaWYgKGRmLiRuZXdGaWxlLnJlc3BvbnNlU3RhdHVzID09PSAyMDApIHtcclxuICAgICAgICAgICAgdGhpcy5maWxlc1t0aGlzLmZpbGVzLmluZGV4T2YoZGYpXS5jdXN0b20gPSBkZi4kbmV3RmlsZS5yZXNwb25zZTtcclxuICAgICAgICAgICAgZGYuJG5ld0ZpbGUgPSBudWxsO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ2Vycm9yIG9uIHVwbG9hZCcsIGRmLiRldmVudCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5oYXNGaWxlc1RvVXBsb2FkKSB7XHJcbiAgICAgICAgICB0aGlzLnByZXBhcmVSZXNwb25zZShmYWxzZSk7XHJcbiAgICAgICAgICB0aGlzLmZpbGVTZXJ2aWNlLnVwbG9hZFN1YnNjcmlwdGlvbi5uZXh0KHtcclxuICAgICAgICAgICAgYWN0aW9uOiB0aGlzLmZpbGVzLmZpbmQoZiA9PiAhIWYuJG5ld0ZpbGUpID8gJ3VwbG9hZENvbnRyb2xGYWlsZWQnIDogJ3VwbG9hZENvbnRyb2xTdWNjZXNzJ1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJlcGFyZVJlc3BvbnNlKGRvZW1pdCA9IHRydWUpIHtcclxuICAgIGlmICh0aGlzLmlucHV0QXJyYXkpIHtcclxuICAgICAgaWYgKCF0aGlzLnJlc3BvbnNlRmlsZXMpIHtcclxuICAgICAgICB0aGlzLnJlc3BvbnNlRmlsZXMgPSBbXTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnJlc3BvbnNlRmlsZXMubGVuZ3RoID0gMDtcclxuICAgICAgdGhpcy5maWxlcy5mb3JFYWNoKGYgPT4gdGhpcy5yZXNwb25zZUZpbGVzLnB1c2goey4uLmYuY3VzdG9tLCAkbmV3RmlsZTogZi4kbmV3RmlsZX0pKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmZpbGVzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIHRoaXMucmVzcG9uc2VGaWxlcyA9IG51bGw7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnJlc3BvbnNlRmlsZXMpIHtcclxuICAgICAgICAgIHRoaXMucmVzcG9uc2VGaWxlcyA9IHt9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBPYmplY3Qua2V5cyh0aGlzLmZpbGVzWzBdLmN1c3RvbSkuZm9yRWFjaChrID0+IHtcclxuICAgICAgICAgIHRoaXMucmVzcG9uc2VGaWxlc1trXSA9IHRoaXMuZmlsZXNbMF0uY3VzdG9tW2tdO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMucmVzcG9uc2VGaWxlcy4kbmV3RmlsZSA9IHRoaXMuZmlsZXNbMF0uJG5ld0ZpbGU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChkb2VtaXQpIHtcclxuICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLnJlc3BvbnNlRmlsZXMpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGNvbnNvbGUubG9nKCdlbWl0JywgdGhpcy5maWxlc1sxXSwgeyAuLi50aGlzLmZpbGVzWzFdLmN1c3RvbSwgJG5ld0ZpbGU6IHRoaXMuZmlsZXNbMV0uJG5ld0ZpbGUgfSk7XHJcbiAgICAvLyB0aGlzLm9uQ2hhbmdlKHRoaXMuaW5wdXRBcnJheSA/XHJcbiAgICAvLyAgIHRoaXMuZmlsZXMubWFwKGYgPT4gKHsgLi4uZi5jdXN0b20sICRuZXdGaWxlOiBmLiRuZXdGaWxlfSkpIDpcclxuICAgIC8vICAgKHRoaXMuZmlsZXMubGVuZ3RoID4gMCA/IHsgLi4udGhpcy5maWxlc1swXS5jdXN0b20sICRuZXdGaWxlOiB0aGlzLmZpbGVzWzBdLiRuZXdGaWxlIH0gOiBudWxsKSk7XHJcbiAgICAvLyB0aGlzLm9uQ2hhbmdlKHRoaXMuaW5wdXRBcnJheSA/XHJcbiAgICAvLyAgIHRoaXMuZmlsZXMgOlxyXG4gICAgLy8gICAodGhpcy5maWxlcy5sZW5ndGggPiAwID8gdGhpcy5maWxlc1swXSA6IG51bGwpKTtcclxuICB9XHJcblxyXG4gIGJlZm9yZVNhdmUoKSB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlcywgcmVqKSA9PiB7XHJcbiAgICAgIHRoaXMuZmlsZXMuZm9yRWFjaChmID0+IHtcclxuICAgICAgICBpZiAoZi4kbmV3RmlsZSAmJiBmLiRuZXdGaWxlLnByb2dyZXNzLnN0YXR1cyA9PT0gMikge1xyXG4gICAgICAgICAgZi4kbmV3RmlsZS5wcm9ncmVzcy5zdGF0dXMgPSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5jcm9wICYmIGYuJG5ld0ZpbGUgJiYgIXRoaXMuaW1hZ2VzRG9uZVtmLiRuZXdGaWxlLmlkXSkge1xyXG4gICAgICAgICAgdGhpcy5jcm9wcGVyRG9uZShmLiRuZXdGaWxlLmlkKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHJlcygnZG9uZScpO1xyXG4gICAgICB9LCAyNTApO1xyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGZpbGVDaGFuZ2VFdmVudChldmVudDogYW55LCBmOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMuY2hhbmdlRmlsZUluZGV4ID0gdGhpcy5maWxlcy5pbmRleE9mKGYpO1xyXG4gIH1cclxuXHJcbiAgc3RhcnRDcm9wUHJldmlldyhpZCkge1xyXG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuY3JvcFByZXZpZXdUaW1lb3V0c1tpZF0pO1xyXG4gICAgdGhpcy5zaG93Q3JvcFByZXZpZXdbaWRdID0gISF0aGlzLmNyb3BTb3VyY2VJbWFnZXNbaWRdO1xyXG4gIH1cclxuXHJcbiAgc3RvcENyb3BQcmV2aWV3KGlkKSB7XHJcbiAgICB0aGlzLmNyb3BQcmV2aWV3VGltZW91dHNbaWRdID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuc2hvd0Nyb3BQcmV2aWV3W2lkXSA9IGZhbHNlO1xyXG4gICAgfSwgMjUwKTtcclxuICB9XHJcblxyXG4gIHpvb21Dcm9wcGVkSW1hZ2UoZGlyLCBpZCkge1xyXG4gICAgbGV0IHNjYWxlID0gdGhpcy50cmFuc2Zvcm1baWRdLnNjYWxlO1xyXG4gICAgc2NhbGUgKz0gZGlyO1xyXG4gICAgaWYgKHNjYWxlIDwgMC4xKSB7XHJcbiAgICAgIHNjYWxlID0gMC4xO1xyXG4gICAgfVxyXG4gICAgdGhpcy50cmFuc2Zvcm1baWRdID0ge1xyXG4gICAgICAuLi50aGlzLnRyYW5zZm9ybVtpZF0sXHJcbiAgICAgIHNjYWxlXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcm90YXRlQ3JvcHBlZEltYWdlKGRpciwgaWQpIHtcclxuICAgIHRoaXMuY2FudmFzUm90YXRpb25baWRdICs9IGRpcjtcclxuICAgIGNvbnN0IGZsaXBwZWRIID0gdGhpcy50cmFuc2Zvcm1baWRdLmZsaXBIO1xyXG4gICAgY29uc3QgZmxpcHBlZFYgPSB0aGlzLnRyYW5zZm9ybVtpZF0uZmxpcFY7XHJcbiAgICB0aGlzLnRyYW5zZm9ybVtpZF0gPSB7XHJcbiAgICAgIC4uLnRoaXMudHJhbnNmb3JtW2lkXSxcclxuICAgICAgZmxpcEg6IGZsaXBwZWRWLFxyXG4gICAgICBmbGlwVjogZmxpcHBlZEhcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBvbkltYWdlQ3JvcHBlZChldmVudDogSW1hZ2VDcm9wcGVkRXZlbnQsIGlkKSB7XHJcbiAgICB0aGlzLmNyb3BwZWRJbWFnZXNbaWRdID0gZXZlbnQ7XHJcbiAgICB0aGlzLmltYWdlQ3JvcHBlZC5lbWl0KGV2ZW50KTtcclxuICB9XHJcblxyXG4gIGltYWdlTG9hZGVkKGlkKSB7XHJcbiAgICB0aGlzLnNob3dDcm9wcGVyID0gdHJ1ZTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnRyYW5zZm9ybVtpZF0gPSB7XHJcbiAgICAgICAgc2NhbGU6IDFcclxuICAgICAgfTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY3JvcHBlclJlYWR5KHNvdXJjZUltYWdlRGltZW5zaW9uczogRGltZW5zaW9ucywgaWQpIHtcclxuICAgIHRoaXMuY3JvcHBlckltYWdlTG9hZGVkW2lkXSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBsb2FkSW1hZ2VGYWlsZWQoKSB7XHJcbiAgfVxyXG5cclxuICB0b2dnbGVNZW51VmlzaWJpbGl0eShmKSB7XHJcbiAgICB0aGlzLmZpbGVNZW51T3BlbmVkID0gZjtcclxuICB9XHJcblxyXG4gIG1lbnVDbGljaygpIHtcclxuICAgIHRoaXMuZmlsZU1lbnVPcGVuZWQgPSB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuXHJcbiAgd3JpdGVWYWx1ZShvYmo6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5pbnB1dEFycmF5ID0gb2JqIGluc3RhbmNlb2YgQXJyYXk7XHJcbiAgICBpZiAodGhpcy5pbnB1dEFycmF5KSB7XHJcbiAgICAgIHRoaXMuZmlsZXMgPSBvYmoubWFwKGYgPT4gKHsgY3VzdG9tOiBmLCAkbmV3RmlsZTogbnVsbCB9KSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmZpbGVzID0gb2JqID8gWyB7IGN1c3RvbTpvYmosICRuZXdGaWxlOiBudWxsfSBdIDogW107XHJcbiAgICB9XHJcbiAgICB0aGlzLmNyb3BTb3VyY2VJbWFnZXMgPSB7fTtcclxuICB9XHJcblxyXG4gIGNyb3BwZXJEb25lKGlkKSB7XHJcbiAgICBjb25zdCBmID0gdGhpcy5maWxlcy5maW5kKGZ4ID0+IGZ4LiRuZXdGaWxlICYmIGZ4LiRuZXdGaWxlLmlkID09PSBpZCk7XHJcbiAgICBpZiAoZikge1xyXG4gICAgICAvLyBjb25zdCB1cmwgPSB0aGlzLmNyb3BwZWRJbWFnZXNbaWRdO1xyXG4gICAgICAvLyBjb25zb2xlLmxvZyh1cmwpO1xyXG4gICAgICAvLyBmZXRjaCh1cmwpXHJcbiAgICAgIC8vICAgLnRoZW4ocmVzID0+IHJlcy5ibG9iKCkpXHJcbiAgICAgIC8vICAgLnRoZW4oYmxvYiA9PiB7XHJcbiAgICAgIC8vICAgICBmLiRuZXdGaWxlLm5hdGl2ZUZpbGUgPSBuZXcgRmlsZShbIGJsb2IgXSwgJ2Nyb3AucG5nJywge1xyXG4gICAgICAvLyAgICAgICB0eXBlOiAnaW1hZ2UvcG5nJ1xyXG4gICAgICAvLyAgICAgfSk7XHJcbiAgICAgIC8vICAgICBmLiRuZXdGaWxlLm5hbWUgPSAnY3JvcC5wbmcnO1xyXG4gICAgICAvLyAgICAgZi4kbmV3RmlsZS5zaXplID0gZi4kbmV3RmlsZS5uYXRpdmVGaWxlLnNpemU7XHJcbiAgICAgIC8vICAgICBmLiRuZXdGaWxlLnR5cGUgPSBmLiRuZXdGaWxlLm5hdGl2ZUZpbGUudHlwZTtcclxuICAgICAgLy8gICAgIHRoaXMuaW1hZ2VzRG9uZVtpZF0gPSB0cnVlO1xyXG4gICAgICAvLyAgICAgY29uc29sZS5sb2coZik7XHJcbiAgICAgIC8vICAgfSlcclxuICAgICAgY29uc3QgY3JvcHBlZEltYWdlID0gdGhpcy5jcm9wcGVkSW1hZ2VzW2lkXTtcclxuICAgICAgZi4kbmV3RmlsZS5uYXRpdmVGaWxlID0gbmV3IEZpbGUoWyBjcm9wcGVkSW1hZ2UuYmxvYiBdLCAnY3JvcC5wbmcnLCB7XHJcbiAgICAgICAgdHlwZTogJ2ltYWdlL3BuZydcclxuICAgICAgfSk7XHJcbiAgICAgIGYuJG5ld0ZpbGUubmFtZSA9ICdjcm9wLnBuZyc7XHJcbiAgICAgIGYuJG5ld0ZpbGUuc2l6ZSA9IGYuJG5ld0ZpbGUubmF0aXZlRmlsZS5zaXplO1xyXG4gICAgICBmLiRuZXdGaWxlLnR5cGUgPSBmLiRuZXdGaWxlLm5hdGl2ZUZpbGUudHlwZTtcclxuICAgICAgdGhpcy5pbWFnZXNEb25lW2lkXSA9IHRydWU7XHJcbiAgICAgIGNvbnNvbGUubG9nKGYpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwibGFiZWxcIiAqbmdJZj1cImxhYmVsXCI+XHJcbiAgPGRpdiBjbGFzcz1cInRleHQtY29udGFpbmVyXCIgW21hdFRvb2x0aXBdPVwicmVxdWlyZWQgPyB0cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ3VpLmNvbnRyb2xzLnZhbGlkYXRpb24ucmVxdWlyZWQnKSA6IHVuZGVmaW5lZFwiIFttYXRUb29sdGlwUG9zaXRpb25dPVwiJ2Fib3ZlJ1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cInRleHRcIj57e2xhYmVsfX08L2Rpdj5cclxuICAgIDxkaXYgKm5nSWY9XCJyZXF1aXJlZFwiIGNsYXNzPVwicmVxdWlyZWRcIj4qPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPGRpdiBjbGFzcz1cImZpbGVzLWNvbnRhaW5lclwiIFtuZ0NsYXNzXT1cIntkcmFnZ2luZzogZHJhZ2dpbmcsIGRpc2FibGVkOiB1cGxvYWRpbmcgfHwgIWVkaXRhYmxlfVwiPlxyXG5cclxuICA8ZGl2IGNsYXNzPVwiZXhpc3RpbmctZmlsZXNcIj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiZmlsZS1jb250YWluZXJcIiAqbmdGb3I9XCJsZXQgZiBvZiBmaWxlc1wiPlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cImZpbGUtbWVudVwiIChjbGljayk9XCJ0b2dnbGVNZW51VmlzaWJpbGl0eShmKVwiICpuZ0lmPVwiIWN1c3RvbUZpbGVNZW51ICYmIGVkaXRhYmxlICYmICF1cGxvYWRpbmdcIj5cclxuICAgICAgICA8bWF0LWljb24+bWVudTwvbWF0LWljb24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZmlsZS1tZW51LWNvbnRhaW5lciBtYXQtZWxldmF0aW9uLXoyXCIgW25nQ2xhc3NdPVwie3Zpc2libGU6IGYgPT09IGZpbGVNZW51T3BlbmVkfVwiIChjbGljayk9XCJtZW51Q2xpY2soKVwiIChtb3VzZWxlYXZlKT1cIm1lbnVDbGljaygpXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFtZW51VGVtcGxhdGVcIj5cclxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cIm1lbnUtaXRlbVwiPnt7IHRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgndWkuY29udHJvbHMudWktZmlsZS11cGxvYWRlci5tZW51LmNoYW5nZScpIH19XHJcbiAgICAgICAgICAgIDxpbnB1dCAqbmdJZj1cIiFyZWZyZXNoQWRkSW5wdXRcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCIgdHlwZT1cImZpbGVcIiBuZ0ZpbGVTZWxlY3QgW29wdGlvbnNdPVwidXBsb2FkT3B0aW9uc1wiIChjaGFuZ2UpPVwiZmlsZUNoYW5nZUV2ZW50KCRldmVudCwgZilcIlxyXG4gICAgICAgICAgICAgICAgICAgKHVwbG9hZE91dHB1dCk9XCJvblVwbG9hZE91dHB1dCgkZXZlbnQpXCIgW3VwbG9hZElucHV0XT1cInVwbG9hZElucHV0XCI+XHJcbiAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1lbnUtaXRlbVwiIChjbGljayk9XCJyZW1vdmUoZilcIj57eyB0cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ3VpLmNvbnRyb2xzLnVpLWZpbGUtdXBsb2FkZXIubWVudS5kZWxldGUnKSB9fTwvZGl2PlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtZW51VGVtcGxhdGVcIj5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJtZW51VGVtcGxhdGVcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie2ZpbGVJbnB1dDogZmlsZUlucHV0fVwiPjwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2ZpbGVJbnB1dD5cclxuICAgICAgICAgIDxpbnB1dCBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCIgdHlwZT1cImZpbGVcIiBuZ0ZpbGVTZWxlY3QgW29wdGlvbnNdPVwidXBsb2FkT3B0aW9uc1wiIChjaGFuZ2UpPVwiZmlsZUNoYW5nZUV2ZW50KCRldmVudCwgZilcIlxyXG4gICAgICAgICAgICAgICAgICh1cGxvYWRPdXRwdXQpPVwib25VcGxvYWRPdXRwdXQoJGV2ZW50KVwiIFt1cGxvYWRJbnB1dF09XCJ1cGxvYWRJbnB1dFwiPlxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2ICpuZ0lmPVwiY3JvcCAmJiAhY3JvcERvbmUoZilcIiAobW91c2VlbnRlcik9XCJzdGFydENyb3BQcmV2aWV3KGYuJG5ld0ZpbGUuaWQpXCIgKG1vdXNlbGVhdmUpPVwic3RvcENyb3BQcmV2aWV3KGYuJG5ld0ZpbGUuaWQpXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNyb3AtY29udGFpbmVyXCIgW25nU3R5bGVdPVwibmdBZGRTdHlsZVwiPlxyXG5cclxuICAgICAgICAgIDx1aS1maWxlICpuZ0lmPVwiZmFsc2UgJiYgZmlsZXMubGVuZ3RoID4gMCAmJiAhY3JvcFNvdXJjZUltYWdlc1wiIFtmaWxlU2l6ZV09XCJmaWxlU2l6ZVwiIFtzcmNEYXRhXT1cImZpbGVzWzBdLmN1c3RvbVwiIFtuZ0NsYXNzXT1cIntyb3VuZGVkOiBjcm9wUm91bmRlZH1cIj48L3VpLWZpbGU+XHJcblxyXG4gICAgICAgICAgPG1hdC1zcGlubmVyICpuZ0lmPVwiIWNyb3BwZXJJbWFnZUxvYWRlZFtmLiRuZXdGaWxlLmlkXSAmJiBjcm9wU291cmNlSW1hZ2VzW2YuJG5ld0ZpbGUuaWRdXCIgW2RpYW1ldGVyXT1cIjc1XCI+PC9tYXQtc3Bpbm5lcj5cclxuXHJcbiAgICAgICAgICA8aW1hZ2UtY3JvcHBlciAqbmdJZj1cImNyb3BTb3VyY2VJbWFnZXNbZi4kbmV3RmlsZS5pZF1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgW2ltYWdlRmlsZV09XCJjcm9wU291cmNlSW1hZ2VzW2YuJG5ld0ZpbGUuaWRdXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFttYWludGFpbkFzcGVjdFJhdGlvXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgW2NvbnRhaW5XaXRoaW5Bc3BlY3RSYXRpb109XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbYXNwZWN0UmF0aW9dPVwiYXNwZWN0UmF0aW9cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgW3Jlc2l6ZVRvV2lkdGhdPVwiY3JvcE1heFdpZHRoXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFtvbmx5U2NhbGVEb3duXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3VuZENyb3BwZXJdPVwiY3JvcFJvdW5kZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgW2NhbnZhc1JvdGF0aW9uXT1cImNhbnZhc1JvdGF0aW9uW2YuJG5ld0ZpbGUuaWRdXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFt0cmFuc2Zvcm1dPVwidHJhbnNmb3JtW2YuJG5ld0ZpbGUuaWRdXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFthbGlnbkltYWdlXT1cIidjZW50ZXInXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5kaXNwbGF5XT1cInNob3dDcm9wcGVyID8gbnVsbCA6ICdub25lJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybWF0XT1cIidwbmcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIChpbWFnZUNyb3BwZWQpPVwib25JbWFnZUNyb3BwZWQoJGV2ZW50LCBmLiRuZXdGaWxlLmlkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAoaW1hZ2VMb2FkZWQpPVwiaW1hZ2VMb2FkZWQoZi4kbmV3RmlsZS5pZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgKGNyb3BwZXJSZWFkeSk9XCJjcm9wcGVyUmVhZHkoJGV2ZW50LCBmLiRuZXdGaWxlLmlkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAobG9hZEltYWdlRmFpbGVkKT1cImxvYWRJbWFnZUZhaWxlZCgpXCJcclxuICAgICAgICAgID48L2ltYWdlLWNyb3BwZXI+XHJcblxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNyb3AtcHJldmlldyBtYXQtZWxldmF0aW9uLXoyXCIgW2NsYXNzXT1cInByZXZpZXdQb3NpdGlvblwiICpuZ0lmPVwidHJ1ZSB8fCAoc2hvd0Nyb3BQcmV2aWV3W2YuJG5ld0ZpbGUuaWRdICYmIGNyb3BwZXJJbWFnZUxvYWRlZFtmLiRuZXdGaWxlLmlkXSlcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNyb3AtbWVudVwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtaWNvbiAoY2xpY2spPVwiem9vbUNyb3BwZWRJbWFnZSguMSwgZi4kbmV3RmlsZS5pZClcIj56b29tX2luPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICA8bWF0LWljb24gKGNsaWNrKT1cInpvb21Dcm9wcGVkSW1hZ2UoLSAuMSwgZi4kbmV3RmlsZS5pZClcIj56b29tX291dDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgPG1hdC1pY29uIChjbGljayk9XCJyb3RhdGVDcm9wcGVkSW1hZ2UoLTEsIGYuJG5ld0ZpbGUuaWQpXCI+cm90YXRlX2xlZnQ8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgIDxtYXQtaWNvbiAoY2xpY2spPVwicm90YXRlQ3JvcHBlZEltYWdlKDEsIGYuJG5ld0ZpbGUuaWQpXCI+cm90YXRlX3JpZ2h0PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwiZmxleDogMSAxIDEwMCVcIj48L2Rpdj5cclxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJtZW51LWl0ZW1cIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj51cGxvYWRfZmlsZTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiIHR5cGU9XCJmaWxlXCIgbmdGaWxlU2VsZWN0IFtvcHRpb25zXT1cInVwbG9hZE9wdGlvbnNcIiAoY2hhbmdlKT1cImZpbGVDaGFuZ2VFdmVudCgkZXZlbnQsIGYpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAodXBsb2FkT3V0cHV0KT1cIm9uVXBsb2FkT3V0cHV0KCRldmVudClcIiBbdXBsb2FkSW5wdXRdPVwidXBsb2FkSW5wdXRcIj5cclxuICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDxtYXQtaWNvbiAoY2xpY2spPVwicmVtb3ZlKGYpXCI+ZGVsZXRlX291dGxpbmU8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJmbGV4OiAxIDEgMTAwJVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgIDxtYXQtaWNvbiAoY2xpY2spPVwiY3JvcHBlckRvbmUoZi4kbmV3RmlsZS5pZClcIj5kb25lPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxpbWcgKm5nSWY9XCJjcm9wcGVkSW1hZ2VzW2YuJG5ld0ZpbGUuaWRdXCIgW3NyY109XCJjcm9wcGVkSW1hZ2VzW2YuJG5ld0ZpbGUuaWRdLm9iamVjdFVybFwiIFtuZ0NsYXNzXT1cIntyb3VuZGVkOiBjcm9wUm91bmRlZH1cIi8+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuXHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjcm9wIHx8IGNyb3BEb25lKGYpXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpbGVUZW1wbGF0ZVwiPlxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImZpbGVUZW1wbGF0ZVwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ZmlsZTogZiwgZmlsZUlucHV0OiBmaWxlSW5wdXQyfVwiPjwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2ZpbGVJbnB1dDI+XHJcbiAgICAgICAgICAgIDxpbnB1dCBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCIgdHlwZT1cImZpbGVcIiBuZ0ZpbGVTZWxlY3QgW29wdGlvbnNdPVwidXBsb2FkT3B0aW9uc1wiIChjaGFuZ2UpPVwiZmlsZUNoYW5nZUV2ZW50KCRldmVudCwgZilcIlxyXG4gICAgICAgICAgICAgICAgICAgKHVwbG9hZE91dHB1dCk9XCJvblVwbG9hZE91dHB1dCgkZXZlbnQpXCIgW3VwbG9hZElucHV0XT1cInVwbG9hZElucHV0XCI+XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICA8dWktZmlsZSAqbmdJZj1cIiFmaWxlVGVtcGxhdGVcIiBbZmlsZVNpemVdPVwiZmlsZVNpemVcIiBbc3JjRGF0YV09XCJmLiRuZXdGaWxlID8gZi4kbmV3RmlsZTogZi5jdXN0b21cIiBbbmdDbGFzc109XCJ7cm91bmRlZDogY3JvcCAmJiBjcm9wUm91bmRlZH1cIj5cclxuICAgICAgICA8L3VpLWZpbGU+XHJcblxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmLiRuZXdGaWxlXCI+XHJcbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZi4kbmV3RmlsZS5yZXNwb25zZVN0YXR1cyAmJiBmLiRuZXdGaWxlLnJlc3BvbnNlU3RhdHVzICE9PSAyMDBcIiBjbGFzcz1cInByb2dyZXNzLWNvbnRhaW5lciBlcnJvclwiPlxyXG4gICAgICAgICAgICB7eyB0cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ3VpLmNvbnRyb2xzLnVpLWZpbGUtdXBsb2FkZXIudXBsb2FkRXJyb3InLCBmLiRuZXdGaWxlLnJlc3BvbnNlKSB9fVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWYuJG5ld0ZpbGUucmVzcG9uc2VTdGF0dXMgJiYgZi4kbmV3RmlsZS5wcm9ncmVzcy5zdGF0dXMgPT09IDFcIiBjbGFzcz1cInByb2dyZXNzLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZ3Jlc3NcIiBbbmdTdHlsZV09XCJ7d2lkdGg6IGYuJG5ld0ZpbGUucHJvZ3Jlc3MuZGF0YS5wZXJjZW50YWdlICsgJyUnfVwiPjwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2IGNsYXNzPVwiZmlsZS1jb250YWluZXIgYWRkXCIgbmdGaWxlRHJvcCAgW29wdGlvbnNdPVwidXBsb2FkT3B0aW9uc1wiICh1cGxvYWRPdXRwdXQpPVwib25VcGxvYWRPdXRwdXQoJGV2ZW50KVwiIFt1cGxvYWRJbnB1dF09XCJ1cGxvYWRJbnB1dFwiIFtuZ0NsYXNzXT1cInt2aXNpYmxlOiBmaWxlcy5sZW5ndGggPCBtYXhGaWxlcyB8fCBtYXhGaWxlcyA9PT0gMH1cIiBbbmdTdHlsZV09XCJhZGRGaWxlVGVtcGxhdGUgPyB7fSA6IG5nQWRkU3R5bGVcIj5cclxuICAgIDxsYWJlbD5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFkZEZpbGVUZW1wbGF0ZVwiPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJhZGRGaWxlVGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFhZGRGaWxlVGVtcGxhdGVcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidXBsb2FkLWltYWdlLWNvbnRhaW5lclwiPjwvZGl2PlxyXG4gICAgICAgIDxpbWcgW3NyY109XCJhZGRGaWxlSW1nU3JjXCIgW25nQ2xhc3NdPVwieyd3aXRoLWhpbnQnOiBhZGRIaW50fVwiIC8+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cImFkZEhpbnRcIiBjbGFzcz1cImFkZC1oaW50XCI+e3thZGRIaW50fX08L2Rpdj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDxpbnB1dCBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCIgdHlwZT1cImZpbGVcIiBuZ0ZpbGVTZWxlY3QgW29wdGlvbnNdPVwidXBsb2FkT3B0aW9uc1wiICh1cGxvYWRPdXRwdXQpPVwib25VcGxvYWRPdXRwdXQoJGV2ZW50KVwiIFt1cGxvYWRJbnB1dF09XCJ1cGxvYWRJbnB1dFwiIFttdWx0aXBsZV09XCJtYXhGaWxlcyA9PT0gMCAmJiBtdWx0aXBsZVwiPlxyXG4gICAgPC9sYWJlbD5cclxuICA8L2Rpdj5cclxuXHJcbjwvZGl2PlxyXG4iXX0=
|
|
@@ -195,8 +195,8 @@ export class InputComponent extends UiSimpleComponent {
|
|
|
195
195
|
// console.log(this.componentFormControl.errors, control.errors, this.parentFormControl.errors, this);
|
|
196
196
|
// return this.componentFormControl.errors;
|
|
197
197
|
}
|
|
198
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
199
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
198
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: InputComponent, deps: [{ token: i1.ControlContainer, host: true, optional: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
199
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.2", type: InputComponent, selector: "ui-input", inputs: { prefixIcon: "prefixIcon", suffixIcon: "suffixIcon", type: "type", clearButton: "clearButton", activeIcons: "activeIcons", forceHasPrefix: "forceHasPrefix", forceHasSuffix: "forceHasSuffix", textAlign: "textAlign" }, outputs: { focusChanged: "focusChanged", keyPressed: "keyPressed" }, host: { properties: { "class": "this.textAlignClass" } }, providers: [
|
|
200
200
|
{
|
|
201
201
|
provide: NG_VALUE_ACCESSOR,
|
|
202
202
|
multi: true,
|
|
@@ -207,9 +207,9 @@ export class InputComponent extends UiSimpleComponent {
|
|
|
207
207
|
multi: true,
|
|
208
208
|
useExisting: InputComponent
|
|
209
209
|
}
|
|
210
|
-
], viewQueries: [{ propertyName: "input", first: true, predicate: ["input"], descendants: true }, { propertyName: "prefix", first: true, predicate: ["prefix"], descendants: true, static: true }, { propertyName: "suffix", first: true, predicate: ["suffix"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<ui-simple-layout [ctx]=\"this\">\r\n\r\n<div class=\"control-container\" [ngClass]=\"{'has-suffix': hasSuffix, 'has-prefix': hasPrefix, 'has-clear-icon': showClearButton, 'active-icons': activeIcons, 'has-focus': hasFocus}\">\r\n <input #input [type]=\"type\" [formControl]=\"componentFormControl\" [placeholder]=\"placeholder\" (keydown)=\"onKeypressed($event)\" (focus)=\"onFocus(true)\" (blur)=\"onFocus(false)\" />\r\n <div #prefix><ng-content select=\"[slot=prefix]\"></ng-content></div>\r\n <div #suffix><ng-content select=\"[slot=suffix]\"></ng-content></div>\r\n <mat-icon *ngIf=\"prefixIcon\" class=\"prefix-icon\" [matTooltip]=\"prefixIcon.tooltip\">{{ prefixIcon.icon }}</mat-icon>\r\n <mat-icon *ngIf=\"suffixIcon\" class=\"suffix-icon\" [matTooltip]=\"suffixIcon.tooltip\">{{ suffixIcon.icon }}</mat-icon>\r\n <ui-action-icon [size]=\"'small'\" [color]=\"'warn'\" *ngIf=\"showClearButton\" (click)=\"clearValue()\" [matIcon]=\"'clear'\" class=\"clear-icon\"></ui-action-icon>\r\n</div>\r\n\r\n</ui-simple-layout>\r\n", styles: [":host{display:flex;flex-direction:column;width:100%}:host .control-container{width:100%;position:relative}:host .control-container.has-prefix ::ng-deep input,:host .control-container.has-prefix ::ng-deep textarea,:host .control-container.has-prefix ::ng-deep .mat-mdc-select-trigger{padding-left:1.8em}:host .control-container.has-suffix:not(.has-clear-icon) ::ng-deep input,:host .control-container.has-suffix:not(.has-clear-icon) ::ng-deep textarea,:host .control-container.has-suffix:not(.has-clear-icon) ::ng-deep .mat-mdc-select-trigger{padding-right:1.8em}:host .control-container.has-clear-icon:not(.has-suffix) ::ng-deep input,:host .control-container.has-clear-icon:not(.has-suffix) ::ng-deep textarea,:host .control-container.has-clear-icon:not(.has-suffix) ::ng-deep .mat-mdc-select-trigger{padding-right:1.8em}:host .control-container.has-suffix.has-clear-icon ::ng-deep input,:host .control-container.has-suffix.has-clear-icon ::ng-deep textarea,:host .control-container.has-suffix.has-clear-icon ::ng-deep .mat-mdc-select-trigger{padding-right:3.6em}:host .control-container.has-suffix.has-clear-icon ::ng-deep .clear-icon{right:1.4em!important}:host ::ng-deep [slot=suffix],:host ::ng-deep .clear-icon,:host ::ng-deep .suffix-icon{position:absolute;user-select:none;transition:color .25s;top:calc(50% - .5em);right:.2em;width:1em;height:1em;font-size:1.5em}:host ::ng-deep [slot=suffix]:not(.disabled),:host ::ng-deep .clear-icon:not(.disabled),:host ::ng-deep .suffix-icon:not(.disabled){cursor:pointer}:host ::ng-deep [slot=prefix],:host ::ng-deep .prefix-icon{position:absolute;user-select:none;transition:color .25s;top:calc(50% - .5em);left:.2em;width:1em;height:1em;font-size:1.5em}:host ::ng-deep [slot=prefix]:not(.disabled),:host ::ng-deep .prefix-icon:not(.disabled){cursor:pointer}:host ::ng-deep input,:host ::ng-deep textarea,:host ::ng-deep .mat-mdc-select-trigger,:host ::ng-deep .editor-wrapper{resize:none;width:100%;line-height:1.2em;font-size:1em;outline:none;border-style:solid;transition:border-color 333ms}:host ::ng-deep textarea.autoresize{box-sizing:content-box;width:calc(100% - 1.4em)}:host ::ng-deep ::ng-deep .mat-select-trigger,:host ::ng-deep ::ng-deep .mat-mdc-select-trigger{height:100%}:host ::ng-deep ::ng-deep .mat-select-value,:host ::ng-deep ::ng-deep .mat-mdc-select-value{vertical-align:middle}::ng-deep ui-input{display:block}\n", ":host.text-align-left ::ng-deep input{text-align:left}:host.text-align-right ::ng-deep input{text-align:right}:host.text-align-center ::ng-deep input{text-align:center}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: i5.UiSimpleLayoutComponent, selector: "ui-simple-layout", inputs: ["ctx"] }, { kind: "component", type: i6.ActionIconComponent, selector: "ui-action-icon", inputs: ["size", "color", "disabled", "busy", "matIcon"] }] }); }
|
|
210
|
+
], viewQueries: [{ propertyName: "input", first: true, predicate: ["input"], descendants: true }, { propertyName: "prefix", first: true, predicate: ["prefix"], descendants: true, static: true }, { propertyName: "suffix", first: true, predicate: ["suffix"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<ui-simple-layout [ctx]=\"this\">\r\n\r\n<div class=\"control-container\" [ngClass]=\"{'has-suffix': hasSuffix, 'has-prefix': hasPrefix, 'has-clear-icon': showClearButton, 'active-icons': activeIcons, 'has-focus': hasFocus}\">\r\n <input #input [type]=\"type\" [formControl]=\"componentFormControl\" [placeholder]=\"placeholder\" (keydown)=\"onKeypressed($event)\" (focus)=\"onFocus(true)\" (blur)=\"onFocus(false)\" />\r\n <div #prefix><ng-content select=\"[slot=prefix]\"></ng-content></div>\r\n <div #suffix><ng-content select=\"[slot=suffix]\"></ng-content></div>\r\n <mat-icon *ngIf=\"prefixIcon\" class=\"prefix-icon\" [matTooltip]=\"prefixIcon.tooltip\">{{ prefixIcon.icon }}</mat-icon>\r\n <mat-icon *ngIf=\"suffixIcon\" class=\"suffix-icon\" [matTooltip]=\"suffixIcon.tooltip\">{{ suffixIcon.icon }}</mat-icon>\r\n <ui-action-icon [size]=\"'small'\" [color]=\"'warn'\" *ngIf=\"showClearButton\" (click)=\"clearValue()\" [matIcon]=\"'clear'\" class=\"clear-icon\"></ui-action-icon>\r\n</div>\r\n\r\n</ui-simple-layout>\r\n", styles: [":host{display:flex;flex-direction:column;width:100%}:host .control-container{width:100%;position:relative}:host .control-container.has-prefix ::ng-deep input,:host .control-container.has-prefix ::ng-deep textarea,:host .control-container.has-prefix ::ng-deep .mat-mdc-select-trigger{padding-left:1.8em}:host .control-container.has-suffix:not(.has-clear-icon) ::ng-deep input,:host .control-container.has-suffix:not(.has-clear-icon) ::ng-deep textarea,:host .control-container.has-suffix:not(.has-clear-icon) ::ng-deep .mat-mdc-select-trigger{padding-right:1.8em}:host .control-container.has-clear-icon:not(.has-suffix) ::ng-deep input,:host .control-container.has-clear-icon:not(.has-suffix) ::ng-deep textarea,:host .control-container.has-clear-icon:not(.has-suffix) ::ng-deep .mat-mdc-select-trigger{padding-right:1.8em}:host .control-container.has-suffix.has-clear-icon ::ng-deep input,:host .control-container.has-suffix.has-clear-icon ::ng-deep textarea,:host .control-container.has-suffix.has-clear-icon ::ng-deep .mat-mdc-select-trigger{padding-right:3.6em}:host .control-container.has-suffix.has-clear-icon ::ng-deep .clear-icon{right:1.4em!important}:host ::ng-deep [slot=suffix],:host ::ng-deep .clear-icon,:host ::ng-deep .suffix-icon{position:absolute;-webkit-user-select:none;user-select:none;transition:color .25s;top:calc(50% - .5em);right:.2em;width:1em;height:1em;font-size:1.5em}:host ::ng-deep [slot=suffix]:not(.disabled),:host ::ng-deep .clear-icon:not(.disabled),:host ::ng-deep .suffix-icon:not(.disabled){cursor:pointer}:host ::ng-deep [slot=prefix],:host ::ng-deep .prefix-icon{position:absolute;-webkit-user-select:none;user-select:none;transition:color .25s;top:calc(50% - .5em);left:.2em;width:1em;height:1em;font-size:1.5em}:host ::ng-deep [slot=prefix]:not(.disabled),:host ::ng-deep .prefix-icon:not(.disabled){cursor:pointer}:host ::ng-deep input,:host ::ng-deep textarea,:host ::ng-deep .mat-mdc-select-trigger,:host ::ng-deep .editor-wrapper{resize:none;width:100%;line-height:1.2em;font-size:1em;outline:none;border-style:solid;transition:border-color 333ms}:host ::ng-deep textarea.autoresize{box-sizing:content-box;width:calc(100% - 1.4em)}:host ::ng-deep ::ng-deep .mat-select-trigger,:host ::ng-deep ::ng-deep .mat-mdc-select-trigger{height:100%}:host ::ng-deep ::ng-deep .mat-select-value,:host ::ng-deep ::ng-deep .mat-mdc-select-value{vertical-align:middle}::ng-deep ui-input{display:block}\n", ":host.text-align-left ::ng-deep input{text-align:left}:host.text-align-right ::ng-deep input{text-align:right}:host.text-align-center ::ng-deep input{text-align:center}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: i5.UiSimpleLayoutComponent, selector: "ui-simple-layout", inputs: ["ctx"] }, { kind: "component", type: i6.ActionIconComponent, selector: "ui-action-icon", inputs: ["size", "color", "disabled", "busy", "matIcon"] }] }); }
|
|
211
211
|
}
|
|
212
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
212
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: InputComponent, decorators: [{
|
|
213
213
|
type: Component,
|
|
214
214
|
args: [{ selector: 'ui-input', providers: [
|
|
215
215
|
{
|
|
@@ -222,14 +222,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.11", ngImpo
|
|
|
222
222
|
multi: true,
|
|
223
223
|
useExisting: InputComponent
|
|
224
224
|
}
|
|
225
|
-
], template: "<ui-simple-layout [ctx]=\"this\">\r\n\r\n<div class=\"control-container\" [ngClass]=\"{'has-suffix': hasSuffix, 'has-prefix': hasPrefix, 'has-clear-icon': showClearButton, 'active-icons': activeIcons, 'has-focus': hasFocus}\">\r\n <input #input [type]=\"type\" [formControl]=\"componentFormControl\" [placeholder]=\"placeholder\" (keydown)=\"onKeypressed($event)\" (focus)=\"onFocus(true)\" (blur)=\"onFocus(false)\" />\r\n <div #prefix><ng-content select=\"[slot=prefix]\"></ng-content></div>\r\n <div #suffix><ng-content select=\"[slot=suffix]\"></ng-content></div>\r\n <mat-icon *ngIf=\"prefixIcon\" class=\"prefix-icon\" [matTooltip]=\"prefixIcon.tooltip\">{{ prefixIcon.icon }}</mat-icon>\r\n <mat-icon *ngIf=\"suffixIcon\" class=\"suffix-icon\" [matTooltip]=\"suffixIcon.tooltip\">{{ suffixIcon.icon }}</mat-icon>\r\n <ui-action-icon [size]=\"'small'\" [color]=\"'warn'\" *ngIf=\"showClearButton\" (click)=\"clearValue()\" [matIcon]=\"'clear'\" class=\"clear-icon\"></ui-action-icon>\r\n</div>\r\n\r\n</ui-simple-layout>\r\n", styles: [":host{display:flex;flex-direction:column;width:100%}:host .control-container{width:100%;position:relative}:host .control-container.has-prefix ::ng-deep input,:host .control-container.has-prefix ::ng-deep textarea,:host .control-container.has-prefix ::ng-deep .mat-mdc-select-trigger{padding-left:1.8em}:host .control-container.has-suffix:not(.has-clear-icon) ::ng-deep input,:host .control-container.has-suffix:not(.has-clear-icon) ::ng-deep textarea,:host .control-container.has-suffix:not(.has-clear-icon) ::ng-deep .mat-mdc-select-trigger{padding-right:1.8em}:host .control-container.has-clear-icon:not(.has-suffix) ::ng-deep input,:host .control-container.has-clear-icon:not(.has-suffix) ::ng-deep textarea,:host .control-container.has-clear-icon:not(.has-suffix) ::ng-deep .mat-mdc-select-trigger{padding-right:1.8em}:host .control-container.has-suffix.has-clear-icon ::ng-deep input,:host .control-container.has-suffix.has-clear-icon ::ng-deep textarea,:host .control-container.has-suffix.has-clear-icon ::ng-deep .mat-mdc-select-trigger{padding-right:3.6em}:host .control-container.has-suffix.has-clear-icon ::ng-deep .clear-icon{right:1.4em!important}:host ::ng-deep [slot=suffix],:host ::ng-deep .clear-icon,:host ::ng-deep .suffix-icon{position:absolute;user-select:none;transition:color .25s;top:calc(50% - .5em);right:.2em;width:1em;height:1em;font-size:1.5em}:host ::ng-deep [slot=suffix]:not(.disabled),:host ::ng-deep .clear-icon:not(.disabled),:host ::ng-deep .suffix-icon:not(.disabled){cursor:pointer}:host ::ng-deep [slot=prefix],:host ::ng-deep .prefix-icon{position:absolute;user-select:none;transition:color .25s;top:calc(50% - .5em);left:.2em;width:1em;height:1em;font-size:1.5em}:host ::ng-deep [slot=prefix]:not(.disabled),:host ::ng-deep .prefix-icon:not(.disabled){cursor:pointer}:host ::ng-deep input,:host ::ng-deep textarea,:host ::ng-deep .mat-mdc-select-trigger,:host ::ng-deep .editor-wrapper{resize:none;width:100%;line-height:1.2em;font-size:1em;outline:none;border-style:solid;transition:border-color 333ms}:host ::ng-deep textarea.autoresize{box-sizing:content-box;width:calc(100% - 1.4em)}:host ::ng-deep ::ng-deep .mat-select-trigger,:host ::ng-deep ::ng-deep .mat-mdc-select-trigger{height:100%}:host ::ng-deep ::ng-deep .mat-select-value,:host ::ng-deep ::ng-deep .mat-mdc-select-value{vertical-align:middle}::ng-deep ui-input{display:block}\n", ":host.text-align-left ::ng-deep input{text-align:left}:host.text-align-right ::ng-deep input{text-align:right}:host.text-align-center ::ng-deep input{text-align:center}\n"] }]
|
|
226
|
-
}], ctorParameters:
|
|
225
|
+
], template: "<ui-simple-layout [ctx]=\"this\">\r\n\r\n<div class=\"control-container\" [ngClass]=\"{'has-suffix': hasSuffix, 'has-prefix': hasPrefix, 'has-clear-icon': showClearButton, 'active-icons': activeIcons, 'has-focus': hasFocus}\">\r\n <input #input [type]=\"type\" [formControl]=\"componentFormControl\" [placeholder]=\"placeholder\" (keydown)=\"onKeypressed($event)\" (focus)=\"onFocus(true)\" (blur)=\"onFocus(false)\" />\r\n <div #prefix><ng-content select=\"[slot=prefix]\"></ng-content></div>\r\n <div #suffix><ng-content select=\"[slot=suffix]\"></ng-content></div>\r\n <mat-icon *ngIf=\"prefixIcon\" class=\"prefix-icon\" [matTooltip]=\"prefixIcon.tooltip\">{{ prefixIcon.icon }}</mat-icon>\r\n <mat-icon *ngIf=\"suffixIcon\" class=\"suffix-icon\" [matTooltip]=\"suffixIcon.tooltip\">{{ suffixIcon.icon }}</mat-icon>\r\n <ui-action-icon [size]=\"'small'\" [color]=\"'warn'\" *ngIf=\"showClearButton\" (click)=\"clearValue()\" [matIcon]=\"'clear'\" class=\"clear-icon\"></ui-action-icon>\r\n</div>\r\n\r\n</ui-simple-layout>\r\n", styles: [":host{display:flex;flex-direction:column;width:100%}:host .control-container{width:100%;position:relative}:host .control-container.has-prefix ::ng-deep input,:host .control-container.has-prefix ::ng-deep textarea,:host .control-container.has-prefix ::ng-deep .mat-mdc-select-trigger{padding-left:1.8em}:host .control-container.has-suffix:not(.has-clear-icon) ::ng-deep input,:host .control-container.has-suffix:not(.has-clear-icon) ::ng-deep textarea,:host .control-container.has-suffix:not(.has-clear-icon) ::ng-deep .mat-mdc-select-trigger{padding-right:1.8em}:host .control-container.has-clear-icon:not(.has-suffix) ::ng-deep input,:host .control-container.has-clear-icon:not(.has-suffix) ::ng-deep textarea,:host .control-container.has-clear-icon:not(.has-suffix) ::ng-deep .mat-mdc-select-trigger{padding-right:1.8em}:host .control-container.has-suffix.has-clear-icon ::ng-deep input,:host .control-container.has-suffix.has-clear-icon ::ng-deep textarea,:host .control-container.has-suffix.has-clear-icon ::ng-deep .mat-mdc-select-trigger{padding-right:3.6em}:host .control-container.has-suffix.has-clear-icon ::ng-deep .clear-icon{right:1.4em!important}:host ::ng-deep [slot=suffix],:host ::ng-deep .clear-icon,:host ::ng-deep .suffix-icon{position:absolute;-webkit-user-select:none;user-select:none;transition:color .25s;top:calc(50% - .5em);right:.2em;width:1em;height:1em;font-size:1.5em}:host ::ng-deep [slot=suffix]:not(.disabled),:host ::ng-deep .clear-icon:not(.disabled),:host ::ng-deep .suffix-icon:not(.disabled){cursor:pointer}:host ::ng-deep [slot=prefix],:host ::ng-deep .prefix-icon{position:absolute;-webkit-user-select:none;user-select:none;transition:color .25s;top:calc(50% - .5em);left:.2em;width:1em;height:1em;font-size:1.5em}:host ::ng-deep [slot=prefix]:not(.disabled),:host ::ng-deep .prefix-icon:not(.disabled){cursor:pointer}:host ::ng-deep input,:host ::ng-deep textarea,:host ::ng-deep .mat-mdc-select-trigger,:host ::ng-deep .editor-wrapper{resize:none;width:100%;line-height:1.2em;font-size:1em;outline:none;border-style:solid;transition:border-color 333ms}:host ::ng-deep textarea.autoresize{box-sizing:content-box;width:calc(100% - 1.4em)}:host ::ng-deep ::ng-deep .mat-select-trigger,:host ::ng-deep ::ng-deep .mat-mdc-select-trigger{height:100%}:host ::ng-deep ::ng-deep .mat-select-value,:host ::ng-deep ::ng-deep .mat-mdc-select-value{vertical-align:middle}::ng-deep ui-input{display:block}\n", ":host.text-align-left ::ng-deep input{text-align:left}:host.text-align-right ::ng-deep input{text-align:right}:host.text-align-center ::ng-deep input{text-align:center}\n"] }]
|
|
226
|
+
}], ctorParameters: () => [{ type: i1.ControlContainer, decorators: [{
|
|
227
227
|
type: Optional
|
|
228
228
|
}, {
|
|
229
229
|
type: Host
|
|
230
230
|
}, {
|
|
231
231
|
type: SkipSelf
|
|
232
|
-
}] }]
|
|
232
|
+
}] }], propDecorators: { prefixIcon: [{
|
|
233
233
|
type: Input
|
|
234
234
|
}], suffixIcon: [{
|
|
235
235
|
type: Input
|
|
@@ -262,4 +262,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.11", ngImpo
|
|
|
262
262
|
}], keyPressed: [{
|
|
263
263
|
type: Output
|
|
264
264
|
}] } });
|
|
265
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWkvc3JjL2xpYi9pbnB1dC9pbnB1dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL2lucHV0L2lucHV0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsWUFBWSxFQUNaLElBQUksRUFBRSxXQUFXLEVBQ2pCLEtBQUssRUFFTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFFBQVEsRUFDUixTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFxQyxhQUFhLEVBQUUsaUJBQWlCLEVBQW9CLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkgsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7Ozs7Ozs7O0FBcUIxRSxNQUFNLE9BQU8sY0FBZSxTQUFRLGlCQUFpQjtJQWtDbkQsSUFDSSxjQUFjO1FBQ2hCLE9BQU8sY0FBYyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDeEMsQ0FBQztJQVdELElBQUksU0FBUztRQUNYLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxLQUFLLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsYUFBYSxFQUFFLFNBQVMsS0FBSyxFQUFFLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUNqSSxDQUFDO0lBRUQsSUFBSSxTQUFTO1FBQ1gsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEtBQUssRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxhQUFhLEVBQUUsU0FBUyxLQUFLLEVBQUUsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDO0lBQ2pJLENB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O2dCQUUzQixZQUFZO3NCQUFyQixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBFbGVtZW50UmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBIb3N0LCBIb3N0QmluZGluZyxcclxuICBJbnB1dCxcclxuICBPbkluaXQsXHJcbiAgT3B0aW9uYWwsXHJcbiAgT3V0cHV0LFxyXG4gIFNraXBTZWxmLFxyXG4gIFZpZXdDaGlsZFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIENvbnRyb2xDb250YWluZXIsIE5HX1ZBTElEQVRPUlMsIE5HX1ZBTFVFX0FDQ0VTU09SLCBWYWxpZGF0aW9uRXJyb3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBVaVNpbXBsZUNvbXBvbmVudCB9IGZyb20gJy4uL2xheW91dHMvc2ltcGxlL3VpLXNpbXBsZS5jb21wb25lbnQnO1xyXG5cclxudHlwZSBQcmVmaXhTdWZmaXggPSB7IGljb246IHN0cmluZywgdG9vbHRpcD86IHN0cmluZyB9O1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3VpLWlucHV0JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vaW5wdXQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWyAnLi4vbGF5b3V0cy9zaW1wbGUvdWktc2ltcGxlLWxheW91dC5jb21wb25lbnQuc2NzcycsICcuL2lucHV0LmNvbXBvbmVudC5zY3NzJyBdLFxyXG5cclxuICBwcm92aWRlcnM6IFtcclxuICAgIHtcclxuICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgbXVsdGk6IHRydWUsXHJcbiAgICB1c2VFeGlzdGluZzogSW5wdXRDb21wb25lbnRcclxuICB9LFxyXG4gIHtcclxuICAgIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXHJcbiAgICBtdWx0aTogdHJ1ZSxcclxuICAgIHVzZUV4aXN0aW5nOiBJbnB1dENvbXBvbmVudFxyXG4gIH1cclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBJbnB1dENvbXBvbmVudCBleHRlbmRzIFVpU2ltcGxlQ29tcG9uZW50XHJcbiAgaW1wbGVtZW50cyBPbkluaXQgeyAvLyB9LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7IC8vIH0sIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBWYWxpZGF0b3IgeyAvLyB9LCBBZnRlclZpZXdJbml0IHtcclxuXHJcbiAgLy8gVWlTaW1wbGVDb21wb25lbnQgPSBJbnB1dENvbXBvbmVudDtcclxuXHJcbiAgLy8gQElucHV0KCkgcGxhY2Vob2xkZXIgPSAnJztcclxuICAvLyBASW5wdXQoKSBsYWJlbDogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gIC8vIEBJbnB1dCgpIHVzZUlucHV0TWVzc2FnZXM6ICduZXZlcicgfCAnYWx3YXlzJyB8ICdvbmRlbWFuZCcgPSAnYWx3YXlzJztcclxuICAvLyBASW5wdXQoKSBoaW50OiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgLy8gQElucHV0KCkgdmFsaWRhdG9yczogVWlWYWxpZGF0b3JzIHwgdW5kZWZpbmVkO1xyXG4gIC8vIEBJbnB1dCgpIHNpemU6ICdzbWFsbCcgfCAnc21hbGxlcicgfCAnbm9ybWFsJyB8ICdsYXJnZXInIHwgJ2xhcmdlJyA9ICdub3JtYWwnO1xyXG4gIC8vIEBJbnB1dCgpIGZvcm1Db250cm9sTmFtZTtcclxuXHJcbiAgLy8gY29tcG9uZW50Rm9ybUNvbnRyb2w6IFVudHlwZWRGb3JtQ29udHJvbDtcclxuICAvL1xyXG4gIC8vIG5nQ29udHJvbDogTmdDb250cm9sO1xyXG4gIC8vXHJcbiAgLy8gQElucHV0KCkgdmFsaWRhdG9yczogVWlWYWxpZGF0b3JzIHwgdW5kZWZpbmVkO1xyXG4gIC8vIEBJbnB1dCgpIGZvcm1Db250cm9sTmFtZTtcclxuICAvL1xyXG4gIC8vIEBJbnB1dCgpIHBsYWNlaG9sZGVyID0gJyc7XHJcbiAgLy8gQElucHV0KCkgbGFiZWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICAvLyBASW5wdXQoKSB1c2VJbnB1dE1lc3NhZ2VzOiAnbmV2ZXInIHwgJ2Fsd2F5cycgfCAnb25kZW1hbmQnID0gJ2Fsd2F5cyc7XHJcbiAgLy8gQElucHV0KCkgaGludD86IHN0cmluZztcclxuICAvLyBASW5wdXQoKSBzaXplOiAnc21hbGwnIHwgJ3NtYWxsZXInIHwgJ25vcm1hbCcgfCAnbGFyZ2VyJyB8ICdsYXJnZScgPSAnbm9ybWFsJztcclxuXHJcbiAgQElucHV0KCkgcHJlZml4SWNvbjogUHJlZml4U3VmZml4O1xyXG4gIEBJbnB1dCgpIHN1ZmZpeEljb246IFByZWZpeFN1ZmZpeDtcclxuICBASW5wdXQoKSB0eXBlOiAndGV4dCcgfCAnbnVtYmVyJyB8ICdwYXNzd29yZCcgPSAndGV4dCc7XHJcbiAgQElucHV0KCkgY2xlYXJCdXR0b24gPSBmYWxzZTtcclxuICBASW5wdXQoKSBhY3RpdmVJY29ucyA9IHRydWU7XHJcbiAgQElucHV0KCkgZm9yY2VIYXNQcmVmaXggPSBmYWxzZTtcclxuICBASW5wdXQoKSBmb3JjZUhhc1N1ZmZpeCA9IGZhbHNlO1xyXG5cclxuICBASG9zdEJpbmRpbmcoJ2NsYXNzJylcclxuICBnZXQgdGV4dEFsaWduQ2xhc3MoKSB7XHJcbiAgICByZXR1cm4gYHRleHQtYWxpZ24tJHt0aGlzLnRleHRBbGlnbn1gO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KCkgdGV4dEFsaWduOiAnbGVmdCcgfCAnY2VudGVyJyB8ICdyaWdodCcgPSAnbGVmdCc7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2lucHV0JykgaW5wdXQ6IEVsZW1lbnRSZWYgfCB1bmRlZmluZWQ7XHJcbiAgQFZpZXdDaGlsZCgncHJlZml4JywgeyBzdGF0aWM6IHRydWUgfSkgcHJlZml4OiBFbGVtZW50UmVmIHwgdW5kZWZpbmVkO1xyXG4gIEBWaWV3Q2hpbGQoJ3N1ZmZpeCcsIHsgc3RhdGljOiB0cnVlIH0pIHN1ZmZpeDogRWxlbWVudFJlZiB8IHVuZGVmaW5lZDtcclxuXHJcbiAgQE91dHB1dCgpIGZvY3VzQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcclxuICBAT3V0cHV0KCkga2V5UHJlc3NlZCA9IG5ldyBFdmVudEVtaXR0ZXI8S2V5Ym9hcmRFdmVudD4oKTtcclxuXHJcbiAgZ2V0IGhhc1ByZWZpeCgpIHtcclxuICAgIHJldHVybiAodGhpcy5wcmVmaXhJY29uICYmIHRoaXMucHJlZml4SWNvbi5pY29uICE9PSAnJykgfHwgdGhpcy5wcmVmaXg/Lm5hdGl2ZUVsZW1lbnQ/LmlubmVyVGV4dCAhPT0gJycgfHwgdGhpcy5mb3JjZUhhc1ByZWZpeDtcclxuICB9XHJcblxyXG4gIGdldCBoYXNTdWZmaXgoKSB7XHJcbiAgICByZXR1cm4gKHRoaXMuc3VmZml4SWNvbiAmJiB0aGlzLnN1ZmZpeEljb24uaWNvbiAhPT0gJycpIHx8IHRoaXMuc3VmZml4Py5uYXRpdmVFbGVtZW50Py5pbm5lclRleHQgIT09ICcnIHx8IHRoaXMuZm9yY2VIYXNTdWZmaXg7XHJcbiAgfVxyXG5cclxuICAvLyBjb250cm9sID0gbmV3IEZvcm1Db250cm9sKCk7XHJcblxyXG4gIHJlcXVpcmVkID0gZmFsc2U7XHJcbiAgaGFzRm9jdXMgPSBmYWxzZTtcclxuXHJcbiAgdmFsdWU6IHN0cmluZztcclxuXHJcbiAgLy8gY29udHJvbDtcclxuXHJcblxyXG4gIC8vIG9uVG91Y2hlZCA9ICgpID0+IHt9O1xyXG4gIC8vIG9uQ2hhbmdlID0gKHZhbHVlKSA9PiB7fTtcclxuXHJcbiAgLy8gZ2V0IHNob3dJbnZhbGlkKCk6IGJvb2xlYW4ge1xyXG4gIC8vICAgcmV0dXJuIHRydWU7XHJcbiAgLy8gICAvLyByZXR1cm4gdGhpcy5jb250cm9sLnRvdWNoZWQgJiYgISF0aGlzLmNvbnRyb2wuZXJyb3JzO1xyXG4gIC8vIH1cclxuXHJcbiAgLy8gZ2V0IHZhbGlkYXRpb25NZXNzYWdlKCk6IHN0cmluZyB7XHJcbiAgLy8gICAvLyBjb25zb2xlLmxvZyh0aGlzLmNvbnRyb2w/LmVycm9ycyk7XHJcbiAgLy8gICBsZXQgZTogYW55ID0ge2NvZGU6ICdOZXpuw6Ftw6EgY2h5YmEnfTtcclxuICAvLyAgIGNvbnN0IGVycm9ycyA9IHRoaXMuY29udHJvbD8uZXJyb3JzIHx8IHt9O1xyXG4gIC8vICAgT2JqZWN0LmtleXMoZXJyb3JzKS5maW5kKGEgPT4ge1xyXG4gIC8vICAgICBlID0ge2NvZGU6IGEsIGRhdGE6IGVycm9yc1thXX07XHJcbiAgLy8gICAgIHJldHVybiB0cnVlO1xyXG4gIC8vICAgfSk7XHJcbiAgLy8gICBzd2l0Y2ggKGUuY29kZSkge1xyXG4gIC8vICAgICBjYXNlICdyZXF1aXJlZCc6XHJcbiAgLy8gICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCd1aS5jb250cm9scy52YWxpZGF0aW9uLnJlcXVpcmVkJyk7XHJcbiAgLy8gICAgIGNhc2UgJ2VtYWlsJzpcclxuICAvLyAgICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ3VpLmNvbnRyb2xzLnZhbGlkYXRpb24uZW1haWwnKTtcclxuICAvLyAgICAgY2FzZSAnbWF0RGF0ZXBpY2tlclBhcnNlJzpcclxuICAvLyAgICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ3VpLmNvbnRyb2xzLnZhbGlkYXRpb24ubWF0RGF0ZXBpY2tlclBhcnNlJyk7XHJcbiAgLy8gICAgIGNhc2UgJ21heGxlbmd0aCc6XHJcbiAgLy8gICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCd1aS5jb250cm9scy52YWxpZGF0aW9uLm1heGxlbmd0aCcsIGUuZGF0YSk7XHJcbiAgLy8gICAgIGNhc2UgJ21pbmxlbmd0aCc6XHJcbiAgLy8gICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCd1aS5jb250cm9scy52YWxpZGF0aW9uLm1pbmxlbmd0aCcsIGUuZGF0YSk7XHJcbiAgLy8gICAgIGNhc2UgJ3Bvc2l0aXZlJzpcclxuICAvLyAgICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoaXNOYU4oTnVtYmVyKGUuZGF0YSkpID8gJ3VpLmNvbnRyb2xzLnZhbGlkYXRpb24uaW52YWxpZE51bWJlcicgOiAndWkuY29udHJvbHMudmFsaWRhdGlvbi5wb3NpdGl2ZScpO1xyXG4gIC8vICAgICBjYXNlICdjdXN0b20nOlxyXG4gIC8vICAgICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChlLmRhdGEpO1xyXG4gIC8vICAgICBkZWZhdWx0OlxyXG4gIC8vICAgICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChlLmNvZGUpO1xyXG4gIC8vICAgfVxyXG4gIC8vIH1cclxuXHJcbiAgZ2V0IG1heExlblJlcXVpcmVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgICAvLyByZXR1cm4gdGhpcy5jb250cm9sLnZhbHVlICYmICh0aGlzLmNvbnRyb2wudmFsdWUubGVuZ3RoID4gKHRoaXMudmFsaWRhdG9ycz8ubWF4TGVuZ3RoIHx8IDApKTtcclxuICB9XHJcblxyXG5cclxuICBjb25zdHJ1Y3RvcihAT3B0aW9uYWwoKSBASG9zdCgpIEBTa2lwU2VsZigpIHByb3RlY3RlZCBjb250cm9sQ29udGFpbmVyOiBDb250cm9sQ29udGFpbmVyLFxyXG4gICAgLypcclxuICAgIGJ1ZCBwcmVzIEBPcHRpb25hbCgpIEBTZWxmKCkgcHVibGljIGNvbnRyb2w6IE5nQ29udHJvbCBhIGNvbnRyb2wudmFsdWVBY2Nlc3NvciA9IHRoaXMgPT4genRyYXRpbWUgYWxlIGN1c3RvbSB2YWxpZGFjaVxyXG4gICAgYW5lYm8gcHJlcyBESSBqYWtvIHByb3ZpZGVycyBhIHBhayB0aGlzLmNvbnRyb2wgPSB2aXogbmdPbkluaXQgLSBwb2t1ZCBqZWogdnViZWMgcG90cmVidWplbVxyXG5cclxuICAgICAqL1xyXG4gICAgLy8gcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXHJcbiAgIC8vIEBPcHRpb25hbCgpIEBTZWxmKCkgcHVibGljIGNvbnRyb2w6IE5nQ29udHJvbCxcclxuICAgIC8vIEBTZWxmKCkgcHJpdmF0ZSBjb250cm9sRGlyZWN0aXZlOiBOZ0NvbnRyb2wsXHJcbiAgICkge1xyXG4gICAgc3VwZXIobnVsbCwgY29udHJvbENvbnRhaW5lcik7XHJcblxyXG4gICAgLy8gdGhpcy5jb21wb25lbnRGb3JtQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgpO1xyXG4gICAgLy8gc3VwZXIoKTtcclxuICAvLyAgc3VwZXIodW5kZWZpbmVkLCAvKm5nQ29udHJvbCovIHRyYW5zbGF0ZVNlcnZpY2UpO1xyXG4gICAgLy8gc3VwZXIoY29udHJvbCk7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhjb250cm9sKTtcclxuICAgIC8vIGlmIChjb250cm9sKSB7XHJcbiAgICAvLyAgIGNvbnRyb2wudmFsdWVBY2Nlc3NvciA9IHRoaXM7XHJcbiAgICAvLyB9XHJcblxyXG4gICAgLy8gaWYgKG5nQ29udHJvbCAhPSBudWxsKSB7XHJcbiAgICAvLyAgIC8vIFNldHRpbmcgdGhlIHZhbHVlIGFjY2Vzc29yIGRpcmVjdGx5IChpbnN0ZWFkIG9mIHVzaW5nXHJcbiAgICAvLyAgIC8vIHRoZSBwcm92aWRlcnMpIHRvIGF2b2lkIHJ1bm5pbmcgaW50byBhIGNpcmN1bGFyIGltcG9ydC5cclxuICAgIC8vICAgbmdDb250cm9sLnZhbHVlQWNjZXNzb3IgPSB0aGlzO1xyXG4gICAgLy8gfVxyXG4gIH1cclxuXHJcbiAgZ2V0IHNob3dDbGVhckJ1dHRvbigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmNsZWFyQnV0dG9uICYmIHRoaXMuY29tcG9uZW50Rm9ybUNvbnRyb2w/LnZhbHVlICE9PSAnJztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcbiAgICAvLyBjb25zb2xlLmxvZygncHJvYmloYSB2dWJlYyBvbmluaXQ/Jyk7XHJcbiAgICAvLyBpZiAodGhpcy5uZ0NvbnRyb2wpIHtcclxuICAgIC8vICAgY29uc29sZS5sb2coJ2Zyb20gbmdDb250cm9sLi4uLj8/Jyk7XHJcbiAgICAvLyAgIGlmICh0aGlzLmZvcm1Db250cm9sKSB7XHJcbiAgICAvLyAgICAgdGhpcy5jb21wb25lbnRGb3JtQ29udHJvbCA9IHRoaXMuZm9ybUNvbnRyb2w7XHJcbiAgICAvLyAgIH0gZWxzZSB7XHJcbiAgICAvLyAgICAgdGhpcy5jb21wb25lbnRGb3JtQ29udHJvbCA9IHRoaXMubmdDb250cm9sLmNvbnRyb2wgYXMgVW50eXBlZEZvcm1Db250cm9sO1xyXG4gICAgLy8gICB9XHJcbiAgICAvLyAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgLy8gICAgIHRoaXMuYXBwbHlWYWxpZGF0b3JzKCk7XHJcbiAgICAvLyAgIH0pO1xyXG4gICAgLy8gfSBlbHNlIHtcclxuICAgIC8vICAgY29uc3QgY29udHJvbCA9IHRoaXMuZm9ybUNvbnRyb2xOYW1lID9cclxuICAgIC8vICAgICAodGhpcy5jb250cm9sQ29udGFpbmVyIGFzIEZvcm1Hcm91cERpcmVjdGl2ZSkuY29udHJvbC5nZXQodGhpcy5mb3JtQ29udHJvbE5hbWUpIDogdGhpcy5mb3JtQ29udHJvbDtcclxuICAgIC8vICAgdGhpcy5jb21wb25lbnRGb3JtQ29udHJvbC5zZXRWYWxpZGF0b3JzKGNvbnRyb2wudmFsaWRhdG9yKTtcclxuICAgIC8vICAgdGhpcy5jb21wb25lbnRGb3JtQ29udHJvbC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKHYgPT4gY29uc29sZS5sb2coJ29uaXRpbiBzdWInLCB2KSk7XHJcbiAgICAvLyAgIGNvbnRyb2wuX2NvbXBvbmVudEZvcm1Db250cm9sID0gdGhpcy5jb21wb25lbnRGb3JtQ29udHJvbDtcclxuICAgIC8vICAgaWYgKGNvbnRyb2wuX21hcmtBc1RvdWNoZWQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgLy8gICAgIC8vIGNvbnRyb2wuX2NvbXBvbmVudEZvcm1Db250cm9sID0gdGhpcy5jb21wb25lbnRGb3JtQ29udHJvbDtcclxuICAgIC8vICAgICBjb25zb2xlLmxvZygnb3ZlcnJpZGluZyBtYXJrQXNUb3VjaGVkIGZvcicsIHRoaXMuZm9ybUNvbnRyb2xOYW1lKTtcclxuICAgIC8vICAgICBjb250cm9sLl9tYXJrQXNUb3VjaGVkID0gY29udHJvbC5tYXJrQXNUb3VjaGVkO1xyXG4gICAgLy8gICAgIGNvbnRyb2wubWFya0FzVG91Y2hlZCA9ICh7b25seVNlbGZ9OiB7IG9ubHlTZWxmPzogYm9vbGVhbiB9ID0ge30pOiB2b2lkID0+IHtcclxuICAgIC8vICAgICAgIGNvbnNvbGUubG9nKCdtYXJraW5nIGFzIHRvdWNoZWQnLCB0aGlzLmNvbXBvbmVudEZvcm1Db250cm9sLnZhbHVlLCBjb250cm9sLnZhbHVlLCB0aGlzLnh4eC52YWx1ZSwgY29udHJvbC5fY29tcG9uZW50Rm9ybUNvbnRyb2wudmFsdWUpO1xyXG4gICAgLy8gICAgICAgY29udHJvbC5fbWFya0FzVG91Y2hlZCh7b25seVNlbGZ9KTtcclxuICAgIC8vICAgICAgIHNldFRpbWVvdXQoKCkgPT4gY29udHJvbC5fY29tcG9uZW50Rm9ybUNvbnRyb2wubWFya0FzVG91Y2hlZCgpLCAxMDAwKTtcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgIH1cclxuICAgIC8vIH1cclxuICB9XHJcblxyXG4gIGNsZWFyVmFsdWUoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNvbXBvbmVudEZvcm1Db250cm9sPy5zZXRWYWx1ZSgnJyk7XHJcbiAgICB0aGlzLmlucHV0Py5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XHJcbiAgfVxyXG5cclxuICBmb2N1cygpOiB2b2lkIHtcclxuICAgIHRoaXMuaW5wdXQ/Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuICB9XHJcblxyXG4gIG9uRm9jdXMoZm9jdXM6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmhhc0ZvY3VzID0gZm9jdXM7XHJcbiAgICAgIHRoaXMuZm9jdXNDaGFuZ2VkLmVtaXQoZm9jdXMpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBvbktleXByZXNzZWQoJGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMua2V5UHJlc3NlZC5lbWl0KCRldmVudCk7XHJcbiAgfVxyXG5cclxuICAvLyByZWdpc3Rlck9uQ2hhbmdlKG9uQ2hhbmdlOiBhbnkpOiB2b2lkIHtcclxuICAvLyAgIHRoaXMub25DaGFuZ2UgPSBvbkNoYW5nZTtcclxuICAvLyB9XHJcbiAgLy9cclxuICAvLyByZWdpc3Rlck9uVG91Y2hlZChvblRvdWNoZWQ6IGFueSk6IHZvaWQge1xyXG4gIC8vICAgdGhpcy5vblRvdWNoZWQgPSBvblRvdWNoZWQ7XHJcbiAgLy8gfVxyXG5cclxuICAvLyByZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XHJcbiAgLy8gfVxyXG5cclxuICAvLyBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAvLyAgIC8vIGlzRGlzYWJsZWQgPyB0aGlzLmNvbnRyb2wuZGlzYWJsZSgpIDogdGhpcy5jb250cm9sLmVuYWJsZSgpO1xyXG4gIC8vIH1cclxuXHJcbiAgLy8gdmFsaWRhdGUoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xyXG4gIC8vICAgLy8gdGhpcy5jb250cm9sID0gY29udHJvbDtcclxuICAvLyAgIC8vIGNvbnNvbGUubG9nKGNvbnRyb2wsIGNvbnRyb2wudmFsdWUsIGNvbnRyb2wuZXJyb3JzKTtcclxuICAvLyAgIGlmICh0aGlzLnZhbHVlID09PSAnZXJyb3InKSB7XHJcbiAgLy8gICAgIHJldHVybiB7IGN1c3RvbUVycm9yOiAnbXVqIGVycm9yJ31cclxuICAvLyAgIH0gZWxzZSB7XHJcbiAgLy8gICAgIHJldHVybiBudWxsO1xyXG4gIC8vICAgfVxyXG4gIC8vICAgLy8gY29uc29sZS5sb2coJ2N1c3RvbSB2YWxpZGF0ZScpO1xyXG4gIC8vICAgLy8gcmV0dXJuIG51bGw7XHJcbiAgLy8gfVxyXG4gIC8vXHJcbiAgLy8gd3JpdGVWYWx1ZShvYmo6IGFueSk6IHZvaWQge1xyXG4gIC8vICAgY29uc29sZS5sb2coJ3dyaXRldmFsdWU6ICcsIG9iaik7XHJcbiAgLy8gICB0aGlzLmNvbXBvbmVudEZvcm1Db250cm9sLnNldFZhbHVlKG9iaik7XHJcbiAgLy8gICAvLyB0aGlzLnZhbHVlID0gb2JqO1xyXG4gIC8vICAgLy8gdGhpcy5jb250cm9sLnNldFZhbHVlKG9iaik7XHJcbiAgLy8gfVxyXG4gIC8vXHJcbiAgLy8gcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XHJcbiAgLy8gfVxyXG4gIC8vXHJcbiAgLy8gcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xyXG4gIC8vIH1cclxuICAvL1xyXG4gIC8vIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xyXG4gIC8vIH1cclxuXHJcbiAgLy8gbW9kZWxDaGFuZ2UoJGV2ZW50OiBhbnkpIHtcclxuICAvLyAgIGNvbnNvbGUubG9nKCRldmVudCk7XHJcbiAgLy8gICB0aGlzLm9uVG91Y2hlZCgpO1xyXG4gIC8vICAgdGhpcy5vbkNoYW5nZSgkZXZlbnQpXHJcbiAgLy8gfVxyXG5cclxuICAvLyB2YWxpZGF0ZShjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XHJcbiAgLy8gICBjb25zb2xlLmxvZyh0aGlzLmxhYmVsLCAndmFsaWRhdGUnKTtcclxuICAvLyAgIHJldHVybiB0aGlzLmNvbXBvbmVudEZvcm1Db250cm9sLmVycm9ycztcclxuICAvLyAgIC8vIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgLy8gfVxyXG5cclxuICB2YWxpZGF0ZShjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XHJcbiAgICBpZiAodGhpcy5wYXJlbnRGb3JtQ29udHJvbCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5wYXJlbnRGb3JtQ29udHJvbC5fY29tcG9uZW50Rm9ybUNvbnRyb2wuZXJyb3JzO1xyXG4gICAgfVxyXG4gICAgLy8gY29uc29sZS5sb2coJ3ZhbGlkYXRlJywgdGhpcy5jb21wb25lbnRGb3JtQ29udHJvbC5lcnJvcnMpO1xyXG4gICAgLy8gLy8gdGhpcy5jb21wb25lbnRGb3JtQ29udHJvbC5zZXRFcnJvcnMoIHsgY3VzdG9tOiAneHh4JyB9KTtcclxuICAgIC8vIHRoaXMuY29tcG9uZW50Rm9ybUNvbnRyb2wuc2V0RXJyb3JzKCB0aGlzLmNvbXBvbmVudEZvcm1Db250cm9sLmVycm9ycyk7XHJcbiAgICAvLyBjb25zb2xlLmxvZygndmFsaWRhdGUgMicsIHRoaXMuY29tcG9uZW50Rm9ybUNvbnRyb2wuZXJyb3JzKTtcclxuICAgIC8vIHJldHVybiB0aGlzLmNvbXBvbmVudEZvcm1Db250cm9sLmVycm9ycztcclxuICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuY29tcG9uZW50Rm9ybUNvbnRyb2wuZXJyb3JzLCBjb250cm9sLmVycm9ycywgdGhpcy5wYXJlbnRGb3JtQ29udHJvbC5lcnJvcnMsIHRoaXMpO1xyXG4gICAgLy8gcmV0dXJuIHRoaXMuY29tcG9uZW50Rm9ybUNvbnRyb2wuZXJyb3JzO1xyXG4gIH1cclxufVxyXG5cclxuIiwiPHVpLXNpbXBsZS1sYXlvdXQgW2N0eF09XCJ0aGlzXCI+XHJcblxyXG48ZGl2IGNsYXNzPVwiY29udHJvbC1jb250YWluZXJcIiBbbmdDbGFzc109XCJ7J2hhcy1zdWZmaXgnOiBoYXNTdWZmaXgsICdoYXMtcHJlZml4JzogaGFzUHJlZml4LCAnaGFzLWNsZWFyLWljb24nOiBzaG93Q2xlYXJCdXR0b24sICdhY3RpdmUtaWNvbnMnOiBhY3RpdmVJY29ucywgJ2hhcy1mb2N1cyc6IGhhc0ZvY3VzfVwiPlxyXG4gIDxpbnB1dCAjaW5wdXQgW3R5cGVdPVwidHlwZVwiIFtmb3JtQ29udHJvbF09XCJjb21wb25lbnRGb3JtQ29udHJvbFwiIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiIChrZXlkb3duKT1cIm9uS2V5cHJlc3NlZCgkZXZlbnQpXCIgKGZvY3VzKT1cIm9uRm9jdXModHJ1ZSlcIiAoYmx1cik9XCJvbkZvY3VzKGZhbHNlKVwiIC8+XHJcbiAgPGRpdiAjcHJlZml4PjxuZy1jb250ZW50IHNlbGVjdD1cIltzbG90PXByZWZpeF1cIj48L25nLWNvbnRlbnQ+PC9kaXY+XHJcbiAgPGRpdiAjc3VmZml4PjxuZy1jb250ZW50IHNlbGVjdD1cIltzbG90PXN1ZmZpeF1cIj48L25nLWNvbnRlbnQ+PC9kaXY+XHJcbiAgPG1hdC1pY29uICpuZ0lmPVwicHJlZml4SWNvblwiIGNsYXNzPVwicHJlZml4LWljb25cIiBbbWF0VG9vbHRpcF09XCJwcmVmaXhJY29uLnRvb2x0aXBcIj57eyBwcmVmaXhJY29uLmljb24gfX08L21hdC1pY29uPlxyXG4gIDxtYXQtaWNvbiAqbmdJZj1cInN1ZmZpeEljb25cIiBjbGFzcz1cInN1ZmZpeC1pY29uXCIgW21hdFRvb2x0aXBdPVwic3VmZml4SWNvbi50b29sdGlwXCI+e3sgc3VmZml4SWNvbi5pY29uIH19PC9tYXQtaWNvbj5cclxuICA8dWktYWN0aW9uLWljb24gW3NpemVdPVwiJ3NtYWxsJ1wiIFtjb2xvcl09XCInd2FybidcIiAqbmdJZj1cInNob3dDbGVhckJ1dHRvblwiIChjbGljayk9XCJjbGVhclZhbHVlKClcIiBbbWF0SWNvbl09XCInY2xlYXInXCIgY2xhc3M9XCJjbGVhci1pY29uXCI+PC91aS1hY3Rpb24taWNvbj5cclxuPC9kaXY+XHJcblxyXG48L3VpLXNpbXBsZS1sYXlvdXQ+XHJcbiJdfQ==
|
|
265
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWkvc3JjL2xpYi9pbnB1dC9pbnB1dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL2lucHV0L2lucHV0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsWUFBWSxFQUNaLElBQUksRUFBRSxXQUFXLEVBQ2pCLEtBQUssRUFFTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFFBQVEsRUFDUixTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFxQyxhQUFhLEVBQUUsaUJBQWlCLEVBQW9CLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkgsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7Ozs7Ozs7O0FBcUIxRSxNQUFNLE9BQU8sY0FBZSxTQUFRLGlCQUFpQjtJQWtDbkQsSUFDSSxjQUFjO1FBQ2hCLE9BQU8sY0FBYyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDeEMsQ0FBQztJQVdELElBQUksU0FBUztRQUNYLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxLQUFLLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsYUFBYSxFQUFFLFNBQVMsS0FBSyxFQUFFLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUNqSSxDQUFDO0lBRUQsSUFBSSxTQUFTO1FBQ1gsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEtBQUssRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxhQUFhLEVBQUUsU0FBUyxLQUFLLEVBQUUsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDO0lBQ2pJLENB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LElBQUksRUFBRTtnQkFFM0IsWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgRWxlbWVudFJlZixcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSG9zdCwgSG9zdEJpbmRpbmcsXHJcbiAgSW5wdXQsXHJcbiAgT25Jbml0LFxyXG4gIE9wdGlvbmFsLFxyXG4gIE91dHB1dCxcclxuICBTa2lwU2VsZixcclxuICBWaWV3Q2hpbGRcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBDb250cm9sQ29udGFpbmVyLCBOR19WQUxJREFUT1JTLCBOR19WQUxVRV9BQ0NFU1NPUiwgVmFsaWRhdGlvbkVycm9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgVWlTaW1wbGVDb21wb25lbnQgfSBmcm9tICcuLi9sYXlvdXRzL3NpbXBsZS91aS1zaW1wbGUuY29tcG9uZW50JztcclxuXHJcbnR5cGUgUHJlZml4U3VmZml4ID0geyBpY29uOiBzdHJpbmcsIHRvb2x0aXA/OiBzdHJpbmcgfTtcclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICd1aS1pbnB1dCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2lucHV0LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsgJy4uL2xheW91dHMvc2ltcGxlL3VpLXNpbXBsZS1sYXlvdXQuY29tcG9uZW50LnNjc3MnLCAnLi9pbnB1dC5jb21wb25lbnQuc2NzcycgXSxcclxuXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICB7XHJcbiAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICAgIG11bHRpOiB0cnVlLFxyXG4gICAgdXNlRXhpc3Rpbmc6IElucHV0Q29tcG9uZW50XHJcbiAgfSxcclxuICB7XHJcbiAgICBwcm92aWRlOiBOR19WQUxJREFUT1JTLFxyXG4gICAgbXVsdGk6IHRydWUsXHJcbiAgICB1c2VFeGlzdGluZzogSW5wdXRDb21wb25lbnRcclxuICB9XHJcbiAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgSW5wdXRDb21wb25lbnQgZXh0ZW5kcyBVaVNpbXBsZUNvbXBvbmVudFxyXG4gIGltcGxlbWVudHMgT25Jbml0IHsgLy8gfSwgQ29udHJvbFZhbHVlQWNjZXNzb3IgeyAvLyB9LCBDb250cm9sVmFsdWVBY2Nlc3NvciwgVmFsaWRhdG9yIHsgLy8gfSwgQWZ0ZXJWaWV3SW5pdCB7XHJcblxyXG4gIC8vIFVpU2ltcGxlQ29tcG9uZW50ID0gSW5wdXRDb21wb25lbnQ7XHJcblxyXG4gIC8vIEBJbnB1dCgpIHBsYWNlaG9sZGVyID0gJyc7XHJcbiAgLy8gQElucHV0KCkgbGFiZWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICAvLyBASW5wdXQoKSB1c2VJbnB1dE1lc3NhZ2VzOiAnbmV2ZXInIHwgJ2Fsd2F5cycgfCAnb25kZW1hbmQnID0gJ2Fsd2F5cyc7XHJcbiAgLy8gQElucHV0KCkgaGludDogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gIC8vIEBJbnB1dCgpIHZhbGlkYXRvcnM6IFVpVmFsaWRhdG9ycyB8IHVuZGVmaW5lZDtcclxuICAvLyBASW5wdXQoKSBzaXplOiAnc21hbGwnIHwgJ3NtYWxsZXInIHwgJ25vcm1hbCcgfCAnbGFyZ2VyJyB8ICdsYXJnZScgPSAnbm9ybWFsJztcclxuICAvLyBASW5wdXQoKSBmb3JtQ29udHJvbE5hbWU7XHJcblxyXG4gIC8vIGNvbXBvbmVudEZvcm1Db250cm9sOiBVbnR5cGVkRm9ybUNvbnRyb2w7XHJcbiAgLy9cclxuICAvLyBuZ0NvbnRyb2w6IE5nQ29udHJvbDtcclxuICAvL1xyXG4gIC8vIEBJbnB1dCgpIHZhbGlkYXRvcnM6IFVpVmFsaWRhdG9ycyB8IHVuZGVmaW5lZDtcclxuICAvLyBASW5wdXQoKSBmb3JtQ29udHJvbE5hbWU7XHJcbiAgLy9cclxuICAvLyBASW5wdXQoKSBwbGFjZWhvbGRlciA9ICcnO1xyXG4gIC8vIEBJbnB1dCgpIGxhYmVsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgLy8gQElucHV0KCkgdXNlSW5wdXRNZXNzYWdlczogJ25ldmVyJyB8ICdhbHdheXMnIHwgJ29uZGVtYW5kJyA9ICdhbHdheXMnO1xyXG4gIC8vIEBJbnB1dCgpIGhpbnQ/OiBzdHJpbmc7XHJcbiAgLy8gQElucHV0KCkgc2l6ZTogJ3NtYWxsJyB8ICdzbWFsbGVyJyB8ICdub3JtYWwnIHwgJ2xhcmdlcicgfCAnbGFyZ2UnID0gJ25vcm1hbCc7XHJcblxyXG4gIEBJbnB1dCgpIHByZWZpeEljb246IFByZWZpeFN1ZmZpeDtcclxuICBASW5wdXQoKSBzdWZmaXhJY29uOiBQcmVmaXhTdWZmaXg7XHJcbiAgQElucHV0KCkgdHlwZTogJ3RleHQnIHwgJ251bWJlcicgfCAncGFzc3dvcmQnID0gJ3RleHQnO1xyXG4gIEBJbnB1dCgpIGNsZWFyQnV0dG9uID0gZmFsc2U7XHJcbiAgQElucHV0KCkgYWN0aXZlSWNvbnMgPSB0cnVlO1xyXG4gIEBJbnB1dCgpIGZvcmNlSGFzUHJlZml4ID0gZmFsc2U7XHJcbiAgQElucHV0KCkgZm9yY2VIYXNTdWZmaXggPSBmYWxzZTtcclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcycpXHJcbiAgZ2V0IHRleHRBbGlnbkNsYXNzKCkge1xyXG4gICAgcmV0dXJuIGB0ZXh0LWFsaWduLSR7dGhpcy50ZXh0QWxpZ259YDtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIHRleHRBbGlnbjogJ2xlZnQnIHwgJ2NlbnRlcicgfCAncmlnaHQnID0gJ2xlZnQnO1xyXG5cclxuICBAVmlld0NoaWxkKCdpbnB1dCcpIGlucHV0OiBFbGVtZW50UmVmIHwgdW5kZWZpbmVkO1xyXG4gIEBWaWV3Q2hpbGQoJ3ByZWZpeCcsIHsgc3RhdGljOiB0cnVlIH0pIHByZWZpeDogRWxlbWVudFJlZiB8IHVuZGVmaW5lZDtcclxuICBAVmlld0NoaWxkKCdzdWZmaXgnLCB7IHN0YXRpYzogdHJ1ZSB9KSBzdWZmaXg6IEVsZW1lbnRSZWYgfCB1bmRlZmluZWQ7XHJcblxyXG4gIEBPdXRwdXQoKSBmb2N1c0NoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XHJcbiAgQE91dHB1dCgpIGtleVByZXNzZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEtleWJvYXJkRXZlbnQ+KCk7XHJcblxyXG4gIGdldCBoYXNQcmVmaXgoKSB7XHJcbiAgICByZXR1cm4gKHRoaXMucHJlZml4SWNvbiAmJiB0aGlzLnByZWZpeEljb24uaWNvbiAhPT0gJycpIHx8IHRoaXMucHJlZml4Py5uYXRpdmVFbGVtZW50Py5pbm5lclRleHQgIT09ICcnIHx8IHRoaXMuZm9yY2VIYXNQcmVmaXg7XHJcbiAgfVxyXG5cclxuICBnZXQgaGFzU3VmZml4KCkge1xyXG4gICAgcmV0dXJuICh0aGlzLnN1ZmZpeEljb24gJiYgdGhpcy5zdWZmaXhJY29uLmljb24gIT09ICcnKSB8fCB0aGlzLnN1ZmZpeD8ubmF0aXZlRWxlbWVudD8uaW5uZXJUZXh0ICE9PSAnJyB8fCB0aGlzLmZvcmNlSGFzU3VmZml4O1xyXG4gIH1cclxuXHJcbiAgLy8gY29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgpO1xyXG5cclxuICByZXF1aXJlZCA9IGZhbHNlO1xyXG4gIGhhc0ZvY3VzID0gZmFsc2U7XHJcblxyXG4gIHZhbHVlOiBzdHJpbmc7XHJcblxyXG4gIC8vIGNvbnRyb2w7XHJcblxyXG5cclxuICAvLyBvblRvdWNoZWQgPSAoKSA9PiB7fTtcclxuICAvLyBvbkNoYW5nZSA9ICh2YWx1ZSkgPT4ge307XHJcblxyXG4gIC8vIGdldCBzaG93SW52YWxpZCgpOiBib29sZWFuIHtcclxuICAvLyAgIHJldHVybiB0cnVlO1xyXG4gIC8vICAgLy8gcmV0dXJuIHRoaXMuY29udHJvbC50b3VjaGVkICYmICEhdGhpcy5jb250cm9sLmVycm9ycztcclxuICAvLyB9XHJcblxyXG4gIC8vIGdldCB2YWxpZGF0aW9uTWVzc2FnZSgpOiBzdHJpbmcge1xyXG4gIC8vICAgLy8gY29uc29sZS5sb2codGhpcy5jb250cm9sPy5lcnJvcnMpO1xyXG4gIC8vICAgbGV0IGU6IGFueSA9IHtjb2RlOiAnTmV6bsOhbcOhIGNoeWJhJ307XHJcbiAgLy8gICBjb25zdCBlcnJvcnMgPSB0aGlzLmNvbnRyb2w/LmVycm9ycyB8fCB7fTtcclxuICAvLyAgIE9iamVjdC5rZXlzKGVycm9ycykuZmluZChhID0+IHtcclxuICAvLyAgICAgZSA9IHtjb2RlOiBhLCBkYXRhOiBlcnJvcnNbYV19O1xyXG4gIC8vICAgICByZXR1cm4gdHJ1ZTtcclxuICAvLyAgIH0pO1xyXG4gIC8vICAgc3dpdGNoIChlLmNvZGUpIHtcclxuICAvLyAgICAgY2FzZSAncmVxdWlyZWQnOlxyXG4gIC8vICAgICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgndWkuY29udHJvbHMudmFsaWRhdGlvbi5yZXF1aXJlZCcpO1xyXG4gIC8vICAgICBjYXNlICdlbWFpbCc6XHJcbiAgLy8gICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCd1aS5jb250cm9scy52YWxpZGF0aW9uLmVtYWlsJyk7XHJcbiAgLy8gICAgIGNhc2UgJ21hdERhdGVwaWNrZXJQYXJzZSc6XHJcbiAgLy8gICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCd1aS5jb250cm9scy52YWxpZGF0aW9uLm1hdERhdGVwaWNrZXJQYXJzZScpO1xyXG4gIC8vICAgICBjYXNlICdtYXhsZW5ndGgnOlxyXG4gIC8vICAgICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgndWkuY29udHJvbHMudmFsaWRhdGlvbi5tYXhsZW5ndGgnLCBlLmRhdGEpO1xyXG4gIC8vICAgICBjYXNlICdtaW5sZW5ndGgnOlxyXG4gIC8vICAgICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgndWkuY29udHJvbHMudmFsaWRhdGlvbi5taW5sZW5ndGgnLCBlLmRhdGEpO1xyXG4gIC8vICAgICBjYXNlICdwb3NpdGl2ZSc6XHJcbiAgLy8gICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGlzTmFOKE51bWJlcihlLmRhdGEpKSA/ICd1aS5jb250cm9scy52YWxpZGF0aW9uLmludmFsaWROdW1iZXInIDogJ3VpLmNvbnRyb2xzLnZhbGlkYXRpb24ucG9zaXRpdmUnKTtcclxuICAvLyAgICAgY2FzZSAnY3VzdG9tJzpcclxuICAvLyAgICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoZS5kYXRhKTtcclxuICAvLyAgICAgZGVmYXVsdDpcclxuICAvLyAgICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoZS5jb2RlKTtcclxuICAvLyAgIH1cclxuICAvLyB9XHJcblxyXG4gIGdldCBtYXhMZW5SZXF1aXJlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gICAgLy8gcmV0dXJuIHRoaXMuY29udHJvbC52YWx1ZSAmJiAodGhpcy5jb250cm9sLnZhbHVlLmxlbmd0aCA+ICh0aGlzLnZhbGlkYXRvcnM/Lm1heExlbmd0aCB8fCAwKSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgY29uc3RydWN0b3IoQE9wdGlvbmFsKCkgQEhvc3QoKSBAU2tpcFNlbGYoKSBwcm90ZWN0ZWQgY29udHJvbENvbnRhaW5lcjogQ29udHJvbENvbnRhaW5lcixcclxuICAgIC8qXHJcbiAgICBidWQgcHJlcyBAT3B0aW9uYWwoKSBAU2VsZigpIHB1YmxpYyBjb250cm9sOiBOZ0NvbnRyb2wgYSBjb250cm9sLnZhbHVlQWNjZXNzb3IgPSB0aGlzID0+IHp0cmF0aW1lIGFsZSBjdXN0b20gdmFsaWRhY2lcclxuICAgIGFuZWJvIHByZXMgREkgamFrbyBwcm92aWRlcnMgYSBwYWsgdGhpcy5jb250cm9sID0gdml6IG5nT25Jbml0IC0gcG9rdWQgamVqIHZ1YmVjIHBvdHJlYnVqZW1cclxuXHJcbiAgICAgKi9cclxuICAgIC8vIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yLFxyXG4gICAvLyBAT3B0aW9uYWwoKSBAU2VsZigpIHB1YmxpYyBjb250cm9sOiBOZ0NvbnRyb2wsXHJcbiAgICAvLyBAU2VsZigpIHByaXZhdGUgY29udHJvbERpcmVjdGl2ZTogTmdDb250cm9sLFxyXG4gICApIHtcclxuICAgIHN1cGVyKG51bGwsIGNvbnRyb2xDb250YWluZXIpO1xyXG5cclxuICAgIC8vIHRoaXMuY29tcG9uZW50Rm9ybUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woKTtcclxuICAgIC8vIHN1cGVyKCk7XHJcbiAgLy8gIHN1cGVyKHVuZGVmaW5lZCwgLypuZ0NvbnRyb2wqLyB0cmFuc2xhdGVTZXJ2aWNlKTtcclxuICAgIC8vIHN1cGVyKGNvbnRyb2wpO1xyXG4gICAgLy8gY29uc29sZS5sb2coY29udHJvbCk7XHJcbiAgICAvLyBpZiAoY29udHJvbCkge1xyXG4gICAgLy8gICBjb250cm9sLnZhbHVlQWNjZXNzb3IgPSB0aGlzO1xyXG4gICAgLy8gfVxyXG5cclxuICAgIC8vIGlmIChuZ0NvbnRyb2wgIT0gbnVsbCkge1xyXG4gICAgLy8gICAvLyBTZXR0aW5nIHRoZSB2YWx1ZSBhY2Nlc3NvciBkaXJlY3RseSAoaW5zdGVhZCBvZiB1c2luZ1xyXG4gICAgLy8gICAvLyB0aGUgcHJvdmlkZXJzKSB0byBhdm9pZCBydW5uaW5nIGludG8gYSBjaXJjdWxhciBpbXBvcnQuXHJcbiAgICAvLyAgIG5nQ29udHJvbC52YWx1ZUFjY2Vzc29yID0gdGhpcztcclxuICAgIC8vIH1cclxuICB9XHJcblxyXG4gIGdldCBzaG93Q2xlYXJCdXR0b24oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5jbGVhckJ1dHRvbiAmJiB0aGlzLmNvbXBvbmVudEZvcm1Db250cm9sPy52YWx1ZSAhPT0gJyc7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xyXG4gICAgLy8gY29uc29sZS5sb2coJ3Byb2JpaGEgdnViZWMgb25pbml0PycpO1xyXG4gICAgLy8gaWYgKHRoaXMubmdDb250cm9sKSB7XHJcbiAgICAvLyAgIGNvbnNvbGUubG9nKCdmcm9tIG5nQ29udHJvbC4uLi4/PycpO1xyXG4gICAgLy8gICBpZiAodGhpcy5mb3JtQ29udHJvbCkge1xyXG4gICAgLy8gICAgIHRoaXMuY29tcG9uZW50Rm9ybUNvbnRyb2wgPSB0aGlzLmZvcm1Db250cm9sO1xyXG4gICAgLy8gICB9IGVsc2Uge1xyXG4gICAgLy8gICAgIHRoaXMuY29tcG9uZW50Rm9ybUNvbnRyb2wgPSB0aGlzLm5nQ29udHJvbC5jb250cm9sIGFzIFVudHlwZWRGb3JtQ29udHJvbDtcclxuICAgIC8vICAgfVxyXG4gICAgLy8gICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgIC8vICAgICB0aGlzLmFwcGx5VmFsaWRhdG9ycygpO1xyXG4gICAgLy8gICB9KTtcclxuICAgIC8vIH0gZWxzZSB7XHJcbiAgICAvLyAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmZvcm1Db250cm9sTmFtZSA/XHJcbiAgICAvLyAgICAgKHRoaXMuY29udHJvbENvbnRhaW5lciBhcyBGb3JtR3JvdXBEaXJlY3RpdmUpLmNvbnRyb2wuZ2V0KHRoaXMuZm9ybUNvbnRyb2xOYW1lKSA6IHRoaXMuZm9ybUNvbnRyb2w7XHJcbiAgICAvLyAgIHRoaXMuY29tcG9uZW50Rm9ybUNvbnRyb2wuc2V0VmFsaWRhdG9ycyhjb250cm9sLnZhbGlkYXRvcik7XHJcbiAgICAvLyAgIHRoaXMuY29tcG9uZW50Rm9ybUNvbnRyb2wudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSh2ID0+IGNvbnNvbGUubG9nKCdvbml0aW4gc3ViJywgdikpO1xyXG4gICAgLy8gICBjb250cm9sLl9jb21wb25lbnRGb3JtQ29udHJvbCA9IHRoaXMuY29tcG9uZW50Rm9ybUNvbnRyb2w7XHJcbiAgICAvLyAgIGlmIChjb250cm9sLl9tYXJrQXNUb3VjaGVkID09PSB1bmRlZmluZWQpIHtcclxuICAgIC8vICAgICAvLyBjb250cm9sLl9jb21wb25lbnRGb3JtQ29udHJvbCA9IHRoaXMuY29tcG9uZW50Rm9ybUNvbnRyb2w7XHJcbiAgICAvLyAgICAgY29uc29sZS5sb2coJ292ZXJyaWRpbmcgbWFya0FzVG91Y2hlZCBmb3InLCB0aGlzLmZvcm1Db250cm9sTmFtZSk7XHJcbiAgICAvLyAgICAgY29udHJvbC5fbWFya0FzVG91Y2hlZCA9IGNvbnRyb2wubWFya0FzVG91Y2hlZDtcclxuICAgIC8vICAgICBjb250cm9sLm1hcmtBc1RvdWNoZWQgPSAoe29ubHlTZWxmfTogeyBvbmx5U2VsZj86IGJvb2xlYW4gfSA9IHt9KTogdm9pZCA9PiB7XHJcbiAgICAvLyAgICAgICBjb25zb2xlLmxvZygnbWFya2luZyBhcyB0b3VjaGVkJywgdGhpcy5jb21wb25lbnRGb3JtQ29udHJvbC52YWx1ZSwgY29udHJvbC52YWx1ZSwgdGhpcy54eHgudmFsdWUsIGNvbnRyb2wuX2NvbXBvbmVudEZvcm1Db250cm9sLnZhbHVlKTtcclxuICAgIC8vICAgICAgIGNvbnRyb2wuX21hcmtBc1RvdWNoZWQoe29ubHlTZWxmfSk7XHJcbiAgICAvLyAgICAgICBzZXRUaW1lb3V0KCgpID0+IGNvbnRyb2wuX2NvbXBvbmVudEZvcm1Db250cm9sLm1hcmtBc1RvdWNoZWQoKSwgMTAwMCk7XHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gICB9XHJcbiAgICAvLyB9XHJcbiAgfVxyXG5cclxuICBjbGVhclZhbHVlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5jb21wb25lbnRGb3JtQ29udHJvbD8uc2V0VmFsdWUoJycpO1xyXG4gICAgdGhpcy5pbnB1dD8ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG4gIH1cclxuXHJcbiAgZm9jdXMoKTogdm9pZCB7XHJcbiAgICB0aGlzLmlucHV0Py5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XHJcbiAgfVxyXG5cclxuICBvbkZvY3VzKGZvY3VzOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5oYXNGb2N1cyA9IGZvY3VzO1xyXG4gICAgICB0aGlzLmZvY3VzQ2hhbmdlZC5lbWl0KGZvY3VzKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb25LZXlwcmVzc2VkKCRldmVudDogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLmtleVByZXNzZWQuZW1pdCgkZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgLy8gcmVnaXN0ZXJPbkNoYW5nZShvbkNoYW5nZTogYW55KTogdm9pZCB7XHJcbiAgLy8gICB0aGlzLm9uQ2hhbmdlID0gb25DaGFuZ2U7XHJcbiAgLy8gfVxyXG4gIC8vXHJcbiAgLy8gcmVnaXN0ZXJPblRvdWNoZWQob25Ub3VjaGVkOiBhbnkpOiB2b2lkIHtcclxuICAvLyAgIHRoaXMub25Ub3VjaGVkID0gb25Ub3VjaGVkO1xyXG4gIC8vIH1cclxuXHJcbiAgLy8gcmVnaXN0ZXJPblZhbGlkYXRvckNoYW5nZShmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xyXG4gIC8vIH1cclxuXHJcbiAgLy8gc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgLy8gICAvLyBpc0Rpc2FibGVkID8gdGhpcy5jb250cm9sLmRpc2FibGUoKSA6IHRoaXMuY29udHJvbC5lbmFibGUoKTtcclxuICAvLyB9XHJcblxyXG4gIC8vIHZhbGlkYXRlKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcclxuICAvLyAgIC8vIHRoaXMuY29udHJvbCA9IGNvbnRyb2w7XHJcbiAgLy8gICAvLyBjb25zb2xlLmxvZyhjb250cm9sLCBjb250cm9sLnZhbHVlLCBjb250cm9sLmVycm9ycyk7XHJcbiAgLy8gICBpZiAodGhpcy52YWx1ZSA9PT0gJ2Vycm9yJykge1xyXG4gIC8vICAgICByZXR1cm4geyBjdXN0b21FcnJvcjogJ211aiBlcnJvcid9XHJcbiAgLy8gICB9IGVsc2Uge1xyXG4gIC8vICAgICByZXR1cm4gbnVsbDtcclxuICAvLyAgIH1cclxuICAvLyAgIC8vIGNvbnNvbGUubG9nKCdjdXN0b20gdmFsaWRhdGUnKTtcclxuICAvLyAgIC8vIHJldHVybiBudWxsO1xyXG4gIC8vIH1cclxuICAvL1xyXG4gIC8vIHdyaXRlVmFsdWUob2JqOiBhbnkpOiB2b2lkIHtcclxuICAvLyAgIGNvbnNvbGUubG9nKCd3cml0ZXZhbHVlOiAnLCBvYmopO1xyXG4gIC8vICAgdGhpcy5jb21wb25lbnRGb3JtQ29udHJvbC5zZXRWYWx1ZShvYmopO1xyXG4gIC8vICAgLy8gdGhpcy52YWx1ZSA9IG9iajtcclxuICAvLyAgIC8vIHRoaXMuY29udHJvbC5zZXRWYWx1ZShvYmopO1xyXG4gIC8vIH1cclxuICAvL1xyXG4gIC8vIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xyXG4gIC8vIH1cclxuICAvL1xyXG4gIC8vIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcclxuICAvLyB9XHJcbiAgLy9cclxuICAvLyBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAvLyB9XHJcblxyXG4gIC8vIG1vZGVsQ2hhbmdlKCRldmVudDogYW55KSB7XHJcbiAgLy8gICBjb25zb2xlLmxvZygkZXZlbnQpO1xyXG4gIC8vICAgdGhpcy5vblRvdWNoZWQoKTtcclxuICAvLyAgIHRoaXMub25DaGFuZ2UoJGV2ZW50KVxyXG4gIC8vIH1cclxuXHJcbiAgLy8gdmFsaWRhdGUoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xyXG4gIC8vICAgY29uc29sZS5sb2codGhpcy5sYWJlbCwgJ3ZhbGlkYXRlJyk7XHJcbiAgLy8gICByZXR1cm4gdGhpcy5jb21wb25lbnRGb3JtQ29udHJvbC5lcnJvcnM7XHJcbiAgLy8gICAvLyByZXR1cm4gdW5kZWZpbmVkO1xyXG4gIC8vIH1cclxuXHJcbiAgdmFsaWRhdGUoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xyXG4gICAgaWYgKHRoaXMucGFyZW50Rm9ybUNvbnRyb2wpIHtcclxuICAgICAgcmV0dXJuIHRoaXMucGFyZW50Rm9ybUNvbnRyb2wuX2NvbXBvbmVudEZvcm1Db250cm9sLmVycm9ycztcclxuICAgIH1cclxuICAgIC8vIGNvbnNvbGUubG9nKCd2YWxpZGF0ZScsIHRoaXMuY29tcG9uZW50Rm9ybUNvbnRyb2wuZXJyb3JzKTtcclxuICAgIC8vIC8vIHRoaXMuY29tcG9uZW50Rm9ybUNvbnRyb2wuc2V0RXJyb3JzKCB7IGN1c3RvbTogJ3h4eCcgfSk7XHJcbiAgICAvLyB0aGlzLmNvbXBvbmVudEZvcm1Db250cm9sLnNldEVycm9ycyggdGhpcy5jb21wb25lbnRGb3JtQ29udHJvbC5lcnJvcnMpO1xyXG4gICAgLy8gY29uc29sZS5sb2coJ3ZhbGlkYXRlIDInLCB0aGlzLmNvbXBvbmVudEZvcm1Db250cm9sLmVycm9ycyk7XHJcbiAgICAvLyByZXR1cm4gdGhpcy5jb21wb25lbnRGb3JtQ29udHJvbC5lcnJvcnM7XHJcbiAgICAvLyBjb25zb2xlLmxvZyh0aGlzLmNvbXBvbmVudEZvcm1Db250cm9sLmVycm9ycywgY29udHJvbC5lcnJvcnMsIHRoaXMucGFyZW50Rm9ybUNvbnRyb2wuZXJyb3JzLCB0aGlzKTtcclxuICAgIC8vIHJldHVybiB0aGlzLmNvbXBvbmVudEZvcm1Db250cm9sLmVycm9ycztcclxuICB9XHJcbn1cclxuXHJcbiIsIjx1aS1zaW1wbGUtbGF5b3V0IFtjdHhdPVwidGhpc1wiPlxyXG5cclxuPGRpdiBjbGFzcz1cImNvbnRyb2wtY29udGFpbmVyXCIgW25nQ2xhc3NdPVwieydoYXMtc3VmZml4JzogaGFzU3VmZml4LCAnaGFzLXByZWZpeCc6IGhhc1ByZWZpeCwgJ2hhcy1jbGVhci1pY29uJzogc2hvd0NsZWFyQnV0dG9uLCAnYWN0aXZlLWljb25zJzogYWN0aXZlSWNvbnMsICdoYXMtZm9jdXMnOiBoYXNGb2N1c31cIj5cclxuICA8aW5wdXQgI2lucHV0IFt0eXBlXT1cInR5cGVcIiBbZm9ybUNvbnRyb2xdPVwiY29tcG9uZW50Rm9ybUNvbnRyb2xcIiBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIiAoa2V5ZG93bik9XCJvbktleXByZXNzZWQoJGV2ZW50KVwiIChmb2N1cyk9XCJvbkZvY3VzKHRydWUpXCIgKGJsdXIpPVwib25Gb2N1cyhmYWxzZSlcIiAvPlxyXG4gIDxkaXYgI3ByZWZpeD48bmctY29udGVudCBzZWxlY3Q9XCJbc2xvdD1wcmVmaXhdXCI+PC9uZy1jb250ZW50PjwvZGl2PlxyXG4gIDxkaXYgI3N1ZmZpeD48bmctY29udGVudCBzZWxlY3Q9XCJbc2xvdD1zdWZmaXhdXCI+PC9uZy1jb250ZW50PjwvZGl2PlxyXG4gIDxtYXQtaWNvbiAqbmdJZj1cInByZWZpeEljb25cIiBjbGFzcz1cInByZWZpeC1pY29uXCIgW21hdFRvb2x0aXBdPVwicHJlZml4SWNvbi50b29sdGlwXCI+e3sgcHJlZml4SWNvbi5pY29uIH19PC9tYXQtaWNvbj5cclxuICA8bWF0LWljb24gKm5nSWY9XCJzdWZmaXhJY29uXCIgY2xhc3M9XCJzdWZmaXgtaWNvblwiIFttYXRUb29sdGlwXT1cInN1ZmZpeEljb24udG9vbHRpcFwiPnt7IHN1ZmZpeEljb24uaWNvbiB9fTwvbWF0LWljb24+XHJcbiAgPHVpLWFjdGlvbi1pY29uIFtzaXplXT1cIidzbWFsbCdcIiBbY29sb3JdPVwiJ3dhcm4nXCIgKm5nSWY9XCJzaG93Q2xlYXJCdXR0b25cIiAoY2xpY2spPVwiY2xlYXJWYWx1ZSgpXCIgW21hdEljb25dPVwiJ2NsZWFyJ1wiIGNsYXNzPVwiY2xlYXItaWNvblwiPjwvdWktYWN0aW9uLWljb24+XHJcbjwvZGl2PlxyXG5cclxuPC91aS1zaW1wbGUtbGF5b3V0PlxyXG4iXX0=
|