fx-form-builder-wrapper 2.0.7 → 2.0.10
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.
|
@@ -435,19 +435,41 @@ export class UploaderComponent extends FxBaseComponent {
|
|
|
435
435
|
detectFileType(file) {
|
|
436
436
|
const mime = (file.type || '').toLowerCase();
|
|
437
437
|
const name = (file.name || '').toLowerCase();
|
|
438
|
-
|
|
438
|
+
// Images
|
|
439
|
+
if (mime.startsWith('image/') || /\.(png|jpe?g|gif|webp|bmp|svg)$/i.test(name)) {
|
|
439
440
|
return 'image';
|
|
440
|
-
|
|
441
|
+
}
|
|
442
|
+
// CSV
|
|
443
|
+
if (mime === 'text/csv' || name.endsWith('.csv')) {
|
|
441
444
|
return 'csv';
|
|
442
|
-
|
|
445
|
+
}
|
|
446
|
+
// Text files
|
|
447
|
+
if (mime === 'text/plain' || name.endsWith('.txt')) {
|
|
443
448
|
return 'text';
|
|
449
|
+
}
|
|
450
|
+
// PDF
|
|
451
|
+
if (mime === 'application/pdf' || name.endsWith('.pdf')) {
|
|
452
|
+
return 'pdf';
|
|
453
|
+
}
|
|
454
|
+
// Excel
|
|
455
|
+
if (mime === 'application/vnd.ms-excel' ||
|
|
456
|
+
mime === 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' ||
|
|
457
|
+
/\.(xls|xlsx)$/i.test(name)) {
|
|
458
|
+
return 'excel';
|
|
459
|
+
}
|
|
460
|
+
// Word
|
|
461
|
+
if (mime === 'application/msword' ||
|
|
462
|
+
mime === 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' ||
|
|
463
|
+
/\.(doc|docx)$/i.test(name)) {
|
|
464
|
+
return 'word';
|
|
465
|
+
}
|
|
444
466
|
return 'other';
|
|
445
467
|
}
|
|
446
468
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UploaderComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.FxBuilderWrapperService }], target: i0.ɵɵFactoryTarget.Component });
|
|
447
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: UploaderComponent, isStandalone: true, selector: "fx-uploader", usesInheritance: true, ngImport: i0, template: "<fx-component [fxData]=\"fxData\">\r\n <div class=\"custom-upload flex flex-row items-center gap-2 p-2 pb-0 rounded-sm\">\r\n <div class=\"flex flex-col justify-center items-center\" (click)=\"fileInput.click()\">\r\n <div>\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"29\" height=\"28\" viewBox=\"0 0 29 28\" fill=\"none\">\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\r\n d=\"M14.001 3.00195C11.5322 3.00195 9.16722 3.86956 7.23641 5.38414L7.23598 4.59695C7.23598 4.52473 7.22175 4.45321 7.19411 4.38648C7.16647 4.31975 7.12596 4.25912 7.07489 4.20804C7.02381 4.15697 6.96318 4.11646 6.89645 4.08882C6.82972 4.06118 6.7582 4.04695 6.68598 4.04695C6.61375 4.04695 6.54223 4.06118 6.4755 4.08882C6.40877 4.11646 6.34814 4.15697 6.29707 4.20804C6.24599 4.25912 6.20548 4.31975 6.17784 4.38648C6.1502 4.45321 6.13598 4.52473 6.13598 4.59695L6.13642 6.68652C6.13643 6.83239 6.19438 6.97228 6.29752 7.07542C6.40067 7.17856 6.54055 7.23651 6.68642 7.23652H8.77598C8.8482 7.23652 8.91972 7.2223 8.98645 7.19466C9.05318 7.16702 9.11381 7.12651 9.16489 7.07543C9.21596 7.02436 9.25647 6.96373 9.28411 6.897C9.31175 6.83027 9.32598 6.75875 9.32598 6.68652C9.32598 6.6143 9.31175 6.54278 9.28411 6.47605C9.25647 6.40932 9.21596 6.34869 9.16489 6.29761C9.11381 6.24654 9.05318 6.20603 8.98645 6.17839C8.91972 6.15075 8.8482 6.13652 8.77598 6.13652H8.0584C9.7702 4.84387 11.8399 4.10195 14.001 4.10195C19.4751 4.10195 23.901 8.52782 23.901 14.002C23.901 19.4761 19.4751 23.902 14.001 23.902C8.52684 23.902 4.10098 19.4761 4.10098 14.002C4.10098 12.6381 4.38263 11.2888 4.92855 10.0389C4.98691 9.90532 4.98982 9.75399 4.93665 9.61822C4.88347 9.48246 4.77855 9.37336 4.64496 9.31492C4.57877 9.28596 4.50753 9.27032 4.4353 9.2689C4.36306 9.26747 4.29126 9.2803 4.22398 9.30663C4.15671 9.33297 4.09528 9.3723 4.04321 9.42238C3.99114 9.47247 3.94944 9.53232 3.92051 9.59852C3.31393 10.9872 3.00098 12.4866 3.00098 14.002C3.00098 20.0706 7.93236 25.002 14.001 25.002C20.0696 25.002 25.001 20.0706 25.001 14.002C25.001 7.93334 20.0696 3.00195 14.001 3.00195Z\"\r\n fill=\"#F3A041\" />\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\r\n d=\"M13.9988 6.13965C9.6616 6.13965 6.13379 9.66746 6.13379 14.0046C6.13379 18.3418 9.6616 21.8696 13.9988 21.8696C18.336 21.8696 21.8638 18.3418 21.8638 14.0046C21.8638 9.66746 18.336 6.13965 13.9988 6.13965ZM13.9988 8.22965C14.1447 8.22965 14.2846 8.28759 14.3877 8.39074C14.4908 8.49388 14.5488 8.63378 14.5488 8.77965V13.7769L17.5227 16.7508C17.6258 16.8539 17.6837 16.9938 17.6837 17.1396C17.6837 17.2855 17.6258 17.4254 17.5227 17.5285C17.4195 17.6316 17.2796 17.6896 17.1338 17.6896C16.9879 17.6896 16.8481 17.6316 16.7449 17.5285L13.6099 14.3935C13.5068 14.2904 13.4488 14.1505 13.4488 14.0046V8.77965C13.4488 8.63378 13.5067 8.49388 13.6099 8.39074C13.713 8.28759 13.8529 8.22965 13.9988 8.22965Z\"\r\n fill=\"#F3A041\" />\r\n <rect width=\"28.56\" height=\"28\" rx=\"1.51479\" fill=\"#F3A041\" />\r\n <path\r\n d=\"M15.068 22.7391V17.6708H18.4968L14.2108 12.6025L9.9248 17.6708H13.3536V22.7391H9.06759V22.6969C8.92358 22.7053 8.78643 22.7391 8.63899 22.7391C6.93391 22.7391 5.29866 22.0717 4.09298 20.8835C2.8873 19.6954 2.20996 18.084 2.20996 16.4037C2.20996 13.1532 4.70443 10.5042 7.90523 10.141C8.18585 8.6953 8.96892 7.39118 10.1197 6.45292C11.2706 5.51465 12.7172 5.00089 14.2108 5C15.7047 5.00082 17.1515 5.51452 18.3026 6.45277C19.4537 7.39101 20.2371 8.69516 20.5181 10.141C23.7189 10.5042 26.21 13.1532 26.21 16.4037C26.21 18.084 25.5326 19.6954 24.3269 20.8835C23.1213 22.0717 21.486 22.7391 19.7809 22.7391C19.6369 22.7391 19.4981 22.7053 19.3523 22.6969V22.7391H15.068Z\"\r\n fill=\"white\" />\r\n </svg>\r\n </div>\r\n <a type=\"button\" (click)=\"fileInput.click()\" class=\"text-base cursor-pointer\">\r\n {{ setting('upload-text') }}\r\n </a>\r\n </div>\r\n <!-- <input #fileInput type=\"file\" [multiple]=\"setting('multiple-upload')\" (change)=\"onFileSelected($event)\" hidden />\r\n <div class=\"separator\"></div>\r\n <div class=\"file-list flex items-center gap-4 flex-wrap\">\r\n <ng-container *ngIf=\"uploadedFiles?.length\">\r\n <div *ngFor=\"let file of uploadedFiles; let i = index\" \r\n class=\"flex flex-col items-center justify-center\" (click)=\"deleteFile(i)\">\r\n <div class=\"relative\">\r\n <div class=\"close_icon cursor-pointer\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_6837_29683)\">\r\n <rect width=\"18\" height=\"18\" rx=\"9\" fill=\"#F3A041\" />\r\n <mask id=\"mask0_6837_29683\" style=\"mask-type:alpha\" maskUnits=\"userSpaceOnUse\" x=\"4\" y=\"4\" width=\"24\"\r\n height=\"24\">\r\n <rect x=\"4\" y=\"4\" width=\"24\" height=\"24\" fill=\"#D9D9D9\" />\r\n </mask>\r\n <g mask=\"url(#mask0_6837_29683)\">\r\n <path\r\n d=\"M8.2045 8.99815L5.81802 6.61167L6.61351 5.81617L9 8.20266L11.3865 5.81617L12.182 6.61167L9.7955 8.99815L12.182 11.3846L11.3865 12.1801L9 9.79365L6.61351 12.1801L5.81802 11.3846L8.2045 8.99815Z\"\r\n fill=\"white\" />\r\n </g>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_6837_29683\">\r\n <rect width=\"18\" height=\"18\" rx=\"9\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </div>\r\n <img class=\"file-thumbnail\" style=\"border-radius: 4px\" [src]=\"file?.result\" alt=\"\" />\r\n <div class=\"flex flex-col w-full\">\r\n <label class=\"font-semibold text-sm mb-1\">Title</label>\r\n <input [(ngModel)]=\"file.title\"\r\n name=\"title{{i}}\"\r\n (ngModelChange)=\"onMetaChange()\"\r\n placeholder=\"Enter title\"\r\n class=\"border border-orange-300 rounded px-3 py-2 mb-3 w-full outline-none focus:ring focus:ring-orange-200\" />\r\n \r\n <label class=\"font-semibold text-sm mb-1\">Notes</label>\r\n <textarea [(ngModel)]=\"file.notes\"\r\n name=\"notes{{i}}\"\r\n (ngModelChange)=\"onMetaChange()\"\r\n placeholder=\"Enter notes\"\r\n class=\"border border-orange-300 rounded px-3 py-2 w-full outline-none focus:ring focus:ring-orange-200\"\r\n rows=\"2\"></textarea>\r\n </div>\r\n \r\n\r\n </div>\r\n\r\n <p>{{file?.name}}</p>\r\n </div>\r\n </ng-container>\r\n </div> -->\r\n\r\n <input #fileInput\r\n type=\"file\"\r\n [multiple]=\"setting('multiple-upload')\"\r\n (change)=\"onFileSelected($event)\"\r\n hidden />\r\n\r\n<div class=\"separator\"></div>\r\n\r\n<div class=\"file-list flex items-center gap-6 flex-wrap\" *ngIf=\"false\">\r\n <ng-container *ngIf=\"uploadedFiles?.length\">\r\n <div *ngFor=\"let file of uploadedFiles; let i = index\"\r\n class=\"flex flex-col items-center justify-center\">\r\n\r\n <div class=\"relative p-3 border rounded-lg shadow-sm bg-white w-64\">\r\n <!-- Close icon -->\r\n <div class=\"close_icon cursor-pointer absolute top-2 right-2\" (click)=\"deleteFile(i)\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <rect width=\"18\" height=\"18\" rx=\"9\" fill=\"#F3A041\" />\r\n <path d=\"M8.2 9l-2.4-2.4.8-.8L9 8.2l2.4-2.4.8.8L9.8 9l2.4 2.4-.8.8L9 9.8l-2.4 2.4-.8-.8L8.2 9z\"\r\n fill=\"white\"/>\r\n </svg>\r\n </div>\r\n\r\n <!-- Thumbnail -->\r\n <ng-container *ngIf=\"file.type === 'image'; else nonImageThumb\">\r\n <img class=\"file-thumbnail w-full h-32 object-cover rounded mb-3\"\r\n [src]=\"file?.result\"\r\n alt=\"preview\" />\r\n </ng-container>\r\n\r\n <ng-template #nonImageThumb>\r\n <div class=\"file-thumbnail flex items-center justify-center border rounded mb-3 w-full h-32 bg-gray-50\">\r\n <ng-container [ngSwitch]=\"file.type\">\r\n <!-- CSV -->\r\n <svg *ngSwitchCase=\"'csv'\" xmlns=\"http://www.w3.org/2000/svg\" width=\"48\" height=\"48\" viewBox=\"0 0 48 48\" fill=\"none\">\r\n <rect x=\"8\" y=\"6\" width=\"28\" height=\"36\" rx=\"3\" stroke=\"#22c55e\" stroke-width=\"2\"/>\r\n <path d=\"M28 6v8a2 2 0 0 0 2 2h6\" stroke=\"#22c55e\" stroke-width=\"2\"/>\r\n <text x=\"14\" y=\"34\" font-size=\"10\" font-family=\"monospace\" fill=\"#22c55e\">CSV</text>\r\n </svg>\r\n\r\n <!-- TEXT -->\r\n <svg *ngSwitchCase=\"'text'\" xmlns=\"http://www.w3.org/2000/svg\" width=\"48\" height=\"48\" viewBox=\"0 0 48 48\" fill=\"none\">\r\n <rect x=\"8\" y=\"6\" width=\"28\" height=\"36\" rx=\"3\" stroke=\"#3b82f6\" stroke-width=\"2\"/>\r\n <path d=\"M28 6v8a2 2 0 0 0 2 2h6\" stroke=\"#3b82f6\" stroke-width=\"2\"/>\r\n <path d=\"M14 24h20M14 29h20M14 34h12\" stroke=\"#3b82f6\" stroke-width=\"2\" stroke-linecap=\"round\"/>\r\n </svg>\r\n\r\n <!-- Generic -->\r\n <svg *ngSwitchDefault xmlns=\"http://www.w3.org/2000/svg\" width=\"48\" height=\"48\" viewBox=\"0 0 48 48\" fill=\"none\">\r\n <rect x=\"8\" y=\"6\" width=\"28\" height=\"36\" rx=\"3\" stroke=\"#9ca3af\" stroke-width=\"2\"/>\r\n <path d=\"M28 6v8a2 2 0 0 0 2 2h6\" stroke=\"#9ca3af\" stroke-width=\"2\"/>\r\n <path d=\"M16 30h16\" stroke=\"#9ca3af\" stroke-width=\"2\" stroke-linecap=\"round\"/>\r\n </svg>\r\n </ng-container>\r\n </div>\r\n </ng-template>\r\n\r\n <!-- Metadata -->\r\n <div class=\"flex flex-col w-full\">\r\n <label class=\"font-semibold text-sm mb-1\">Title</label>\r\n <input [(ngModel)]=\"file.title\"\r\n name=\"title{{i}}\"\r\n (ngModelChange)=\"onMetaChange()\"\r\n placeholder=\"Enter title\"\r\n class=\"border border-orange-300 rounded px-3 py-2 mb-3 w-full outline-none focus:ring focus:ring-orange-200\" />\r\n\r\n <label class=\"font-semibold text-sm mb-1\">Notes</label>\r\n <textarea [(ngModel)]=\"file.notes\"\r\n name=\"notes{{i}}\"\r\n (ngModelChange)=\"onMetaChange()\"\r\n placeholder=\"Enter notes\"\r\n class=\"border border-orange-300 rounded px-3 py-2 w-full outline-none focus:ring focus:ring-orange-200\"\r\n rows=\"2\"></textarea>\r\n\r\n <label class=\"font-semibold text-sm mt-3 mb-1\">Category</label>\r\n <select [(ngModel)]=\"file.category\"\r\n name=\"category{{i}}\"\r\n (ngModelChange)=\"onMetaChange()\"\r\n placeholder=\"Select Category\"\r\n class=\"border border-orange-300 rounded px-3 py-2 w-full outline-none focus:ring focus:ring-orange-200\">\r\n <option *ngFor=\"let c of categories\" [ngValue]=\"c\">{{ c }}</option>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <p class=\"mt-2 text-sm text-gray-600\">{{ file?.name }}</p>\r\n </div>\r\n </ng-container>\r\n</div>\r\n\r\n<div class=\"file-list flex items-center gap-8 flex-wrap\">\r\n <ng-container *ngIf=\"uploadedFiles?.length\">\r\n <div *ngFor=\"let file of uploadedFiles; let i = index\"\r\n class=\"relative p-3 border rounded-lg shadow-sm bg-white w-[500px] flex\">\r\n\r\n <!-- Close icon -->\r\n <div class=\"close_icon cursor-pointer absolute top-2 right-2\" (click)=\"deleteFile(i)\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <rect width=\"18\" height=\"18\" rx=\"9\" fill=\"#F3A041\" />\r\n <path d=\"M8.2 9l-2.4-2.4.8-.8L9 8.2l2.4-2.4.8.8L9.8 9l2.4 2.4-.8.8L9 9.8l-2.4 2.4-.8-.8L8.2 9z\"\r\n fill=\"white\"/>\r\n </svg>\r\n </div>\r\n\r\n <!-- Thumbnail on left -->\r\n <div class=\"w-28 h-28 flex-shrink-0\">\r\n <ng-container *ngIf=\"file.type === 'image'; else nonImageThumb\">\r\n <img class=\"file-thumbnail w-full h-full object-cover rounded\"\r\n [src]=\"file?.result\"\r\n alt=\"preview\" />\r\n </ng-container>\r\n\r\n <ng-template #nonImageThumb>\r\n <div class=\"file-thumbnail flex items-center justify-center border rounded w-full h-full bg-gray-50\">\r\n <ng-container [ngSwitch]=\"file.type\">\r\n <!-- CSV -->\r\n <svg *ngSwitchCase=\"'csv'\" xmlns=\"http://www.w3.org/2000/svg\" width=\"48\" height=\"48\" viewBox=\"0 0 48 48\" fill=\"none\">\r\n <rect x=\"8\" y=\"6\" width=\"28\" height=\"36\" rx=\"3\" stroke=\"#22c55e\" stroke-width=\"2\"/>\r\n <path d=\"M28 6v8a2 2 0 0 0 2 2h6\" stroke=\"#22c55e\" stroke-width=\"2\"/>\r\n <text x=\"14\" y=\"34\" font-size=\"10\" font-family=\"monospace\" fill=\"#22c55e\">CSV</text>\r\n </svg>\r\n <!-- TEXT -->\r\n <svg *ngSwitchCase=\"'text'\" xmlns=\"http://www.w3.org/2000/svg\" width=\"48\" height=\"48\" viewBox=\"0 0 48 48\" fill=\"none\">\r\n <rect x=\"8\" y=\"6\" width=\"28\" height=\"36\" rx=\"3\" stroke=\"#3b82f6\" stroke-width=\"2\"/>\r\n <path d=\"M28 6v8a2 2 0 0 0 2 2h6\" stroke=\"#3b82f6\" stroke-width=\"2\"/>\r\n <path d=\"M14 24h20M14 29h20M14 34h12\" stroke=\"#3b82f6\" stroke-width=\"2\" stroke-linecap=\"round\"/>\r\n </svg>\r\n <!-- Generic -->\r\n <svg *ngSwitchDefault xmlns=\"http://www.w3.org/2000/svg\" width=\"48\" height=\"48\" viewBox=\"0 0 48 48\" fill=\"none\">\r\n <rect x=\"8\" y=\"6\" width=\"28\" height=\"36\" rx=\"3\" stroke=\"#9ca3af\" stroke-width=\"2\"/>\r\n <path d=\"M28 6v8a2 2 0 0 0 2 2h6\" stroke=\"#9ca3af\" stroke-width=\"2\"/>\r\n <path d=\"M16 30h16\" stroke=\"#9ca3af\" stroke-width=\"2\" stroke-linecap=\"round\"/>\r\n </svg>\r\n </ng-container>\r\n </div>\r\n </ng-template>\r\n </div>\r\n\r\n <!-- Metadata on right -->\r\n <div class=\"flex flex-col flex-1 ml-4\">\r\n <!-- Title -->\r\n <label class=\"font-semibold text-sm mb-1\">Title</label>\r\n <input [(ngModel)]=\"file.title\"\r\n name=\"title{{i}}\"\r\n (ngModelChange)=\"onMetaChange()\"\r\n placeholder=\"Enter title\"\r\n class=\"border border-orange-300 rounded px-3 py-2 mb-3 w-full outline-none focus:ring focus:ring-orange-200\" />\r\n\r\n <!-- Notes -->\r\n <label class=\"font-semibold text-sm mb-1\">Notes</label>\r\n <textarea [(ngModel)]=\"file.notes\"\r\n name=\"notes{{i}}\"\r\n (ngModelChange)=\"onMetaChange()\"\r\n placeholder=\"Enter notes\"\r\n class=\"border border-orange-300 rounded px-3 py-2 mb-3 w-full outline-none focus:ring focus:ring-orange-200\"\r\n rows=\"2\"></textarea>\r\n\r\n <!-- Category -->\r\n <label class=\"font-semibold text-sm mb-1\">Category</label>\r\n <select [(ngModel)]=\"file.category\"\r\n name=\"category{{i}}\"\r\n (ngModelChange)=\"onMetaChange()\"\r\n class=\"border border-orange-300 rounded px-3 py-2 w-full outline-none focus:ring focus:ring-orange-200\">\r\n <option value=\"\">Select Category</option>\r\n <option *ngFor=\"let c of categories\" [ngValue]=\"c\">{{ c }}</option>\r\n </select>\r\n </div>\r\n </div>\r\n </ng-container>\r\n</div>\r\n\r\n\r\n\r\n </div>\r\n</fx-component>", styles: [".custom-upload{border:1px solid #ccc}.custom-upload a{color:#000}.custom-upload .file-list .file-thumbnail{width:234px;height:234px;border:1px solid #ccc;background-color:#fff;padding:4px}.custom-upload .separator{height:56px;width:2px;background-color:#ccc;margin:10px}.close_icon{position:absolute;top:-8px;right:-8px}[type=checkbox]{padding:12px}[type=checkbox]:checked{background-color:#f3a041!important;padding:12px;background-size:1em 1em!important}.gap-8{gap:8px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i2.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "component", type: FxComponent, selector: "fx-component", inputs: ["fxData"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3.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: i3.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }] });
|
|
469
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: UploaderComponent, isStandalone: true, selector: "fx-uploader", usesInheritance: true, ngImport: i0, template: "<fx-component [fxData]=\"fxData\">\r\n <div class=\"custom-upload flex flex-col items-start justify-center gap-2 p-2 pb-0 rounded-sm\">\r\n <div class=\"flex gap-8 items-center\">\r\n <p class=\"text-base\">Patient Images</p>\r\n <div class=\"flex justify-center items-center gap-2 upload\" (click)=\"fileInput.click()\">\r\n <div>\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"29\" height=\"28\" viewBox=\"0 0 29 28\" fill=\"none\">\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\r\n d=\"M14.001 3.00195C11.5322 3.00195 9.16722 3.86956 7.23641 5.38414L7.23598 4.59695C7.23598 4.52473 7.22175 4.45321 7.19411 4.38648C7.16647 4.31975 7.12596 4.25912 7.07489 4.20804C7.02381 4.15697 6.96318 4.11646 6.89645 4.08882C6.82972 4.06118 6.7582 4.04695 6.68598 4.04695C6.61375 4.04695 6.54223 4.06118 6.4755 4.08882C6.40877 4.11646 6.34814 4.15697 6.29707 4.20804C6.24599 4.25912 6.20548 4.31975 6.17784 4.38648C6.1502 4.45321 6.13598 4.52473 6.13598 4.59695L6.13642 6.68652C6.13643 6.83239 6.19438 6.97228 6.29752 7.07542C6.40067 7.17856 6.54055 7.23651 6.68642 7.23652H8.77598C8.8482 7.23652 8.91972 7.2223 8.98645 7.19466C9.05318 7.16702 9.11381 7.12651 9.16489 7.07543C9.21596 7.02436 9.25647 6.96373 9.28411 6.897C9.31175 6.83027 9.32598 6.75875 9.32598 6.68652C9.32598 6.6143 9.31175 6.54278 9.28411 6.47605C9.25647 6.40932 9.21596 6.34869 9.16489 6.29761C9.11381 6.24654 9.05318 6.20603 8.98645 6.17839C8.91972 6.15075 8.8482 6.13652 8.77598 6.13652H8.0584C9.7702 4.84387 11.8399 4.10195 14.001 4.10195C19.4751 4.10195 23.901 8.52782 23.901 14.002C23.901 19.4761 19.4751 23.902 14.001 23.902C8.52684 23.902 4.10098 19.4761 4.10098 14.002C4.10098 12.6381 4.38263 11.2888 4.92855 10.0389C4.98691 9.90532 4.98982 9.75399 4.93665 9.61822C4.88347 9.48246 4.77855 9.37336 4.64496 9.31492C4.57877 9.28596 4.50753 9.27032 4.4353 9.2689C4.36306 9.26747 4.29126 9.2803 4.22398 9.30663C4.15671 9.33297 4.09528 9.3723 4.04321 9.42238C3.99114 9.47247 3.94944 9.53232 3.92051 9.59852C3.31393 10.9872 3.00098 12.4866 3.00098 14.002C3.00098 20.0706 7.93236 25.002 14.001 25.002C20.0696 25.002 25.001 20.0706 25.001 14.002C25.001 7.93334 20.0696 3.00195 14.001 3.00195Z\"\r\n fill=\"#F3A041\" />\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\r\n d=\"M13.9988 6.13965C9.6616 6.13965 6.13379 9.66746 6.13379 14.0046C6.13379 18.3418 9.6616 21.8696 13.9988 21.8696C18.336 21.8696 21.8638 18.3418 21.8638 14.0046C21.8638 9.66746 18.336 6.13965 13.9988 6.13965ZM13.9988 8.22965C14.1447 8.22965 14.2846 8.28759 14.3877 8.39074C14.4908 8.49388 14.5488 8.63378 14.5488 8.77965V13.7769L17.5227 16.7508C17.6258 16.8539 17.6837 16.9938 17.6837 17.1396C17.6837 17.2855 17.6258 17.4254 17.5227 17.5285C17.4195 17.6316 17.2796 17.6896 17.1338 17.6896C16.9879 17.6896 16.8481 17.6316 16.7449 17.5285L13.6099 14.3935C13.5068 14.2904 13.4488 14.1505 13.4488 14.0046V8.77965C13.4488 8.63378 13.5067 8.49388 13.6099 8.39074C13.713 8.28759 13.8529 8.22965 13.9988 8.22965Z\"\r\n fill=\"#F3A041\" />\r\n <rect width=\"28.56\" height=\"28\" rx=\"1.51479\" fill=\"#999999\" />\r\n <path\r\n d=\"M15.068 22.7391V17.6708H18.4968L14.2108 12.6025L9.9248 17.6708H13.3536V22.7391H9.06759V22.6969C8.92358 22.7053 8.78643 22.7391 8.63899 22.7391C6.93391 22.7391 5.29866 22.0717 4.09298 20.8835C2.8873 19.6954 2.20996 18.084 2.20996 16.4037C2.20996 13.1532 4.70443 10.5042 7.90523 10.141C8.18585 8.6953 8.96892 7.39118 10.1197 6.45292C11.2706 5.51465 12.7172 5.00089 14.2108 5C15.7047 5.00082 17.1515 5.51452 18.3026 6.45277C19.4537 7.39101 20.2371 8.69516 20.5181 10.141C23.7189 10.5042 26.21 13.1532 26.21 16.4037C26.21 18.084 25.5326 19.6954 24.3269 20.8835C23.1213 22.0717 21.486 22.7391 19.7809 22.7391C19.6369 22.7391 19.4981 22.7053 19.3523 22.6969V22.7391H15.068Z\"\r\n fill=\"white\" />\r\n </svg>\r\n </div>\r\n <a type=\"button\" (click)=\"fileInput.click()\" class=\"text-base cursor-pointer\">\r\n {{ setting('upload-text') }}\r\n </a>\r\n </div>\r\n </div>\r\n <!-- <input #fileInput type=\"file\" [multiple]=\"setting('multiple-upload')\" (change)=\"onFileSelected($event)\" hidden />\r\n <div class=\"separator\"></div>\r\n <div class=\"file-list flex items-center gap-4 flex-wrap\">\r\n <ng-container *ngIf=\"uploadedFiles?.length\">\r\n <div *ngFor=\"let file of uploadedFiles; let i = index\" \r\n class=\"flex flex-col items-center justify-center\" (click)=\"deleteFile(i)\">\r\n <div class=\"relative\">\r\n <div class=\"close_icon cursor-pointer\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_6837_29683)\">\r\n <rect width=\"18\" height=\"18\" rx=\"9\" fill=\"#F3A041\" />\r\n <mask id=\"mask0_6837_29683\" style=\"mask-type:alpha\" maskUnits=\"userSpaceOnUse\" x=\"4\" y=\"4\" width=\"24\"\r\n height=\"24\">\r\n <rect x=\"4\" y=\"4\" width=\"24\" height=\"24\" fill=\"#D9D9D9\" />\r\n </mask>\r\n <g mask=\"url(#mask0_6837_29683)\">\r\n <path\r\n d=\"M8.2045 8.99815L5.81802 6.61167L6.61351 5.81617L9 8.20266L11.3865 5.81617L12.182 6.61167L9.7955 8.99815L12.182 11.3846L11.3865 12.1801L9 9.79365L6.61351 12.1801L5.81802 11.3846L8.2045 8.99815Z\"\r\n fill=\"white\" />\r\n </g>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_6837_29683\">\r\n <rect width=\"18\" height=\"18\" rx=\"9\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </div>\r\n <img class=\"file-thumbnail\" style=\"border-radius: 4px\" [src]=\"file?.result\" alt=\"\" />\r\n <div class=\"flex flex-col w-full\">\r\n <label class=\"font-semibold text-sm mb-1\">Title</label>\r\n <input [(ngModel)]=\"file.title\"\r\n name=\"title{{i}}\"\r\n (ngModelChange)=\"onMetaChange()\"\r\n placeholder=\"Enter title\"\r\n class=\"border border-orange-300 rounded px-3 py-2 mb-3 w-full outline-none focus:ring focus:ring-orange-200\" />\r\n \r\n <label class=\"font-semibold text-sm mb-1\">Notes</label>\r\n <textarea [(ngModel)]=\"file.notes\"\r\n name=\"notes{{i}}\"\r\n (ngModelChange)=\"onMetaChange()\"\r\n placeholder=\"Enter notes\"\r\n class=\"border border-orange-300 rounded px-3 py-2 w-full outline-none focus:ring focus:ring-orange-200\"\r\n rows=\"2\"></textarea>\r\n </div>\r\n \r\n\r\n </div>\r\n\r\n <p>{{file?.name}}</p>\r\n </div>\r\n </ng-container>\r\n </div> -->\r\n\r\n <input #fileInput\r\n type=\"file\"\r\n [multiple]=\"setting('multiple-upload')\"\r\n (change)=\"onFileSelected($event)\"\r\n accept=\".csv,.pdf,.xls,.xlsx,.doc,.docx,.txt,image/*\"\r\n hidden />\r\n\r\n<!-- <div class=\"separator\"></div> -->\r\n\r\n<div class=\"file-list flex items-center gap-6 flex-wrap\" *ngIf=\"false\">\r\n <ng-container *ngIf=\"uploadedFiles?.length\">\r\n <div *ngFor=\"let file of uploadedFiles; let i = index\"\r\n class=\"flex flex-col items-center justify-center\">\r\n\r\n <div class=\"input-container p-3 border rounded-lg shadow-sm bg-white w-64\">\r\n <!-- Close icon -->\r\n <div class=\"close_icon cursor-pointer absolute top-2 right-2\" (click)=\"deleteFile(i)\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <rect width=\"18\" height=\"18\" rx=\"9\" fill=\"#F3A041\" />\r\n <path d=\"M8.2 9l-2.4-2.4.8-.8L9 8.2l2.4-2.4.8.8L9.8 9l2.4 2.4-.8.8L9 9.8l-2.4 2.4-.8-.8L8.2 9z\"\r\n fill=\"white\"/>\r\n </svg>\r\n </div>\r\n\r\n <!-- Thumbnail -->\r\n <ng-container *ngIf=\"file.type === 'image'; else nonImageThumb\">\r\n <img class=\"file-thumbnail w-full h-32 object-cover rounded mb-3\"\r\n [src]=\"file?.result\"\r\n alt=\"preview\" />\r\n </ng-container>\r\n\r\n <ng-template #nonImageThumb>\r\n <div class=\"file-thumbnail flex items-center justify-center border rounded mb-3 w-full h-32 bg-gray-50\">\r\n <ng-container [ngSwitch]=\"file.type\">\r\n <!-- CSV -->\r\n <svg *ngSwitchCase=\"'csv'\" xmlns=\"http://www.w3.org/2000/svg\" width=\"48\" height=\"48\" viewBox=\"0 0 48 48\" fill=\"none\">\r\n <rect x=\"8\" y=\"6\" width=\"28\" height=\"36\" rx=\"3\" stroke=\"#22c55e\" stroke-width=\"2\"/>\r\n <path d=\"M28 6v8a2 2 0 0 0 2 2h6\" stroke=\"#22c55e\" stroke-width=\"2\"/>\r\n <text x=\"14\" y=\"34\" font-size=\"10\" font-family=\"monospace\" fill=\"#22c55e\">CSV</text>\r\n </svg>\r\n\r\n <!-- TEXT -->\r\n <svg *ngSwitchCase=\"'text'\" xmlns=\"http://www.w3.org/2000/svg\" width=\"48\" height=\"48\" viewBox=\"0 0 48 48\" fill=\"none\">\r\n <rect x=\"8\" y=\"6\" width=\"28\" height=\"36\" rx=\"3\" stroke=\"#3b82f6\" stroke-width=\"2\"/>\r\n <path d=\"M28 6v8a2 2 0 0 0 2 2h6\" stroke=\"#3b82f6\" stroke-width=\"2\"/>\r\n <path d=\"M14 24h20M14 29h20M14 34h12\" stroke=\"#3b82f6\" stroke-width=\"2\" stroke-linecap=\"round\"/>\r\n </svg>\r\n\r\n <!-- Generic -->\r\n <svg *ngSwitchDefault xmlns=\"http://www.w3.org/2000/svg\" width=\"48\" height=\"48\" viewBox=\"0 0 48 48\" fill=\"none\">\r\n <rect x=\"8\" y=\"6\" width=\"28\" height=\"36\" rx=\"3\" stroke=\"#9ca3af\" stroke-width=\"2\"/>\r\n <path d=\"M28 6v8a2 2 0 0 0 2 2h6\" stroke=\"#9ca3af\" stroke-width=\"2\"/>\r\n <path d=\"M16 30h16\" stroke=\"#9ca3af\" stroke-width=\"2\" stroke-linecap=\"round\"/>\r\n </svg>\r\n </ng-container>\r\n </div>\r\n </ng-template>\r\n\r\n <!-- Metadata -->\r\n <div class=\"flex flex-col w-full\">\r\n <div class=\"input-container\">\r\n <label class=\"font-semibold text-sm mb-1 input-title\">Title</label>\r\n <input [(ngModel)]=\"file.title\" name=\"title{{i}}\" (ngModelChange)=\"onMetaChange()\" placeholder=\"Enter title\"\r\n class=\"border border-orange-300 rounded px-3 py-2 mb-3 w-full outline-none focus:ring focus:ring-orange-200\" />\r\n </div>\r\n \r\n <div>\r\n <label class=\"font-semibold text-sm mb-1 input-title\">Notes</label>\r\n <textarea [(ngModel)]=\"file.notes\" name=\"notes{{i}}\" (ngModelChange)=\"onMetaChange()\" placeholder=\"Enter notes\"\r\n class=\"border border-orange-300 rounded px-3 py-2 w-full outline-none focus:ring focus:ring-orange-200\"\r\n rows=\"2\"></textarea>\r\n </div>\r\n \r\n <div>\r\n <label class=\"font-semibold text-sm mt-3 mb-1 input-title\">Category</label>\r\n <select [(ngModel)]=\"file.category\" name=\"category{{i}}\" (ngModelChange)=\"onMetaChange()\"\r\n placeholder=\"Select Category\"\r\n class=\"border border-orange-300 rounded px-3 py-2 w-full outline-none focus:ring focus:ring-orange-200\">\r\n <option *ngFor=\"let c of categories\" [ngValue]=\"c\">{{ c }}</option>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <p class=\"mt-2 text-sm text-gray-600\">{{ file?.name }}</p>\r\n </div>\r\n </ng-container>\r\n</div>\r\n\r\n<div class=\"file-list flex items-center gap-8 flex-wrap\">\r\n <ng-container *ngIf=\"uploadedFiles?.length\">\r\n <div *ngFor=\"let file of uploadedFiles; let i = index\"\r\n class=\"input-container p-3 border rounded-lg shadow-sm bg-white w-[500px] flex\">\r\n\r\n <!-- Close icon -->\r\n <div class=\"close_icon cursor-pointer absolute top-2 right-2\" (click)=\"deleteFile(i)\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <rect width=\"18\" height=\"18\" rx=\"9\" fill=\"#F3A041\" />\r\n <path d=\"M8.2 9l-2.4-2.4.8-.8L9 8.2l2.4-2.4.8.8L9.8 9l2.4 2.4-.8.8L9 9.8l-2.4 2.4-.8-.8L8.2 9z\"\r\n fill=\"white\"/>\r\n </svg>\r\n </div>\r\n\r\n <!-- Thumbnail on left -->\r\n <div class=\"w-28 h-28 flex-shrink-0\">\r\n <ng-container *ngIf=\"file.type === 'image'; else nonImageThumb\">\r\n <img class=\"file-thumbnail w-full h-full object-cover rounded\"\r\n [src]=\"file?.result\"\r\n alt=\"preview\" />\r\n </ng-container>\r\n\r\n <ng-template #nonImageThumb>\r\n <div class=\"file-thumbnail flex items-center justify-center border rounded w-full h-full bg-gray-50\">\r\n <ng-container [ngSwitch]=\"file.type\">\r\n <!-- CSV -->\r\n <!-- <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"48\" height=\"48\" viewBox=\"0 0 48 48\" fill=\"none\">\r\n <rect x=\"8\" y=\"6\" width=\"28\" height=\"36\" rx=\"3\" stroke=\"#22c55e\" stroke-width=\"2\"/>\r\n <path d=\"M28 6v8a2 2 0 0 0 2 2h6\" stroke=\"#22c55e\" stroke-width=\"2\"/>\r\n <text x=\"14\" y=\"34\" font-size=\"10\" font-family=\"monospace\" fill=\"#22c55e\">CSV</text>\r\n </svg> -->\r\n\r\n <svg *ngSwitchCase=\"'csv'\" width=\"180px\" height=\"180px\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n<path d=\"M11.1757 1.17574C11.0632 1.06321 10.9106 1 10.7515 1H3.6C3.26863 1 3 1.26863 3 1.6V14.4C3 14.7314 3.26863 15 3.6 15H13.4C13.7314 15 14 14.7314 14 14.4V4.24853C14 4.0894 13.9368 3.93679 13.8243 3.82426L11.1757 1.17574Z\" fill=\"#F4F4F4\"/>\r\n<path d=\"M15 12.7C15 12.8657 14.8657 13 14.7 13H2.3C2.13431 13 2 12.8657 2 12.7V9.3C2 9.13431 2.13431 9 2.3 9H14.7C14.8657 9 15 9.13431 15 9.3V12.7Z\" fill=\"#23A761\"/>\r\n<path d=\"M11 1L12.5 2.5L14 4H11.2C11.0895 4 11 3.91046 11 3.8V1Z\" fill=\"#D9D9D9\"/>\r\n<path d=\"M6.94076 10.3433C6.85939 10.3433 6.78716 10.3588 6.72408 10.3899C6.66191 10.42 6.60934 10.464 6.56637 10.5216C6.52432 10.5793 6.49232 10.6489 6.47038 10.7305C6.44844 10.8122 6.43747 10.904 6.43747 11.006C6.43747 11.1435 6.45484 11.261 6.48958 11.3586C6.52523 11.4553 6.58009 11.5294 6.65414 11.5808C6.7282 11.6314 6.82373 11.6567 6.94076 11.6567C7.02212 11.6567 7.10349 11.6478 7.18486 11.6301C7.26714 11.6123 7.35628 11.587 7.45228 11.5542V11.9002C7.36359 11.9357 7.27628 11.961 7.19035 11.976C7.10441 11.992 7.00795 12 6.90099 12C6.69437 12 6.52432 11.9587 6.39084 11.8762C6.25827 11.7929 6.15999 11.6766 6.096 11.5276C6.032 11.3777 6 11.2029 6 11.0033C6 10.8561 6.02057 10.7212 6.06171 10.5988C6.10285 10.4764 6.16319 10.3704 6.24273 10.2808C6.32227 10.1912 6.42055 10.122 6.53758 10.0732C6.6546 10.0244 6.78899 10 6.94076 10C7.04041 10 7.14006 10.0124 7.23971 10.0373C7.34028 10.0612 7.43628 10.0945 7.5277 10.1371L7.39057 10.4724C7.3156 10.4378 7.24017 10.4076 7.16429 10.3819C7.08841 10.3562 7.0139 10.3433 6.94076 10.3433Z\" fill=\"white\"/>\r\n<path d=\"M9.06363 11.4331C9.06363 11.5485 9.03483 11.6487 8.97724 11.7339C8.91964 11.819 8.83553 11.8847 8.7249 11.9308C8.61519 11.9769 8.48172 12 8.32447 12C8.25498 12 8.18687 11.9956 8.12013 11.9867C8.05431 11.9778 7.99077 11.965 7.92951 11.9481C7.86917 11.9304 7.81157 11.9086 7.75672 11.8829V11.4997C7.8518 11.5405 7.95054 11.5773 8.05293 11.6101C8.15533 11.6429 8.25681 11.6593 8.35738 11.6593C8.42686 11.6593 8.48263 11.6505 8.52468 11.6327C8.56765 11.615 8.59874 11.5906 8.61794 11.5595C8.63714 11.5285 8.64674 11.493 8.64674 11.4531C8.64674 11.4043 8.62982 11.3626 8.596 11.328C8.56217 11.2934 8.51554 11.261 8.45612 11.2309C8.3976 11.2007 8.33132 11.1683 8.25727 11.1337C8.21064 11.1124 8.1599 11.0867 8.10505 11.0566C8.05019 11.0255 7.99808 10.9878 7.94871 10.9434C7.89934 10.8991 7.85866 10.8454 7.82666 10.7824C7.79558 10.7186 7.78003 10.6423 7.78003 10.5536C7.78003 10.4373 7.80746 10.338 7.86231 10.2555C7.91717 10.173 7.99534 10.11 8.09682 10.0665C8.19921 10.0222 8.31989 10 8.45886 10C8.56308 10 8.66228 10.012 8.75645 10.0359C8.85153 10.059 8.95072 10.0927 9.05403 10.1371L8.9169 10.4578C8.82456 10.4214 8.74182 10.3934 8.66868 10.3739C8.59554 10.3535 8.52103 10.3433 8.44515 10.3433C8.39212 10.3433 8.34686 10.3517 8.30938 10.3686C8.2719 10.3846 8.24355 10.4076 8.22436 10.4378C8.20516 10.4671 8.19556 10.5012 8.19556 10.5403C8.19556 10.5864 8.20927 10.6254 8.2367 10.6574C8.26504 10.6884 8.30709 10.7186 8.36286 10.7478C8.41955 10.7771 8.48994 10.8113 8.57405 10.8503C8.67645 10.8973 8.76376 10.9466 8.83598 10.998C8.90912 11.0486 8.96535 11.1084 9.00466 11.1776C9.04398 11.246 9.06363 11.3311 9.06363 11.4331Z\" fill=\"white\"/>\r\n<path d=\"M11 10.0279L10.3184 11.9734H9.85491L9.17471 10.0279H9.60395L9.98108 11.1856C9.98748 11.2051 9.99799 11.242 10.0126 11.2961C10.0272 11.3493 10.0419 11.4061 10.0565 11.4664C10.072 11.5258 10.0826 11.5751 10.088 11.6141C10.0935 11.5751 10.1031 11.5258 10.1168 11.4664C10.1315 11.407 10.1456 11.3506 10.1594 11.2974C10.174 11.2433 10.1845 11.206 10.1909 11.1856L10.5708 10.0279H11Z\" fill=\"white\"/>\r\n<rect x=\"5\" y=\"7\" width=\"3\" height=\"1\" rx=\"0.2\" fill=\"#CCCCCC\"/>\r\n<rect x=\"5\" y=\"5\" width=\"3\" height=\"1\" rx=\"0.2\" fill=\"#CCCCCC\"/>\r\n<rect x=\"9\" y=\"7\" width=\"3\" height=\"1\" rx=\"0.2\" fill=\"#CCCCCC\"/>\r\n<rect x=\"9\" y=\"5\" width=\"3\" height=\"1\" rx=\"0.2\" fill=\"#CCCCCC\"/>\r\n</svg>\r\n\r\n <!-- TEXT -->\r\n <!-- <svg *ngSwitchCase=\"'text'\" xmlns=\"http://www.w3.org/2000/svg\" width=\"48\" height=\"48\" viewBox=\"0 0 48 48\" fill=\"none\">\r\n <rect x=\"8\" y=\"6\" width=\"28\" height=\"36\" rx=\"3\" stroke=\"#3b82f6\" stroke-width=\"2\"/>\r\n <path d=\"M28 6v8a2 2 0 0 0 2 2h6\" stroke=\"#3b82f6\" stroke-width=\"2\"/>\r\n <path d=\"M14 24h20M14 29h20M14 34h12\" stroke=\"#3b82f6\" stroke-width=\"2\" stroke-linecap=\"round\"/>\r\n </svg> -->\r\n <!-- <svg width=\"180px\" height=\"180px\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n<path d=\"M11.1757 1.17574C11.0632 1.06321 10.9106 1 10.7515 1H3.6C3.26863 1 3 1.26863 3 1.6V14.4C3 14.7314 3.26863 15 3.6 15H13.4C13.7314 15 14 14.7314 14 14.4V4.24853C14 4.0894 13.9368 3.93679 13.8243 3.82426L11.1757 1.17574Z\" fill=\"#F4F4F4\"/>\r\n<path d=\"M15 12.7C15 12.8657 14.8657 13 14.7 13H2.3C2.13431 13 2 12.8657 2 12.7V9.3C2 9.13431 2.13431 9 2.3 9H14.7C14.8657 9 15 9.13431 15 9.3V12.7Z\" fill=\"#DD2025\"/>\r\n<path d=\"M11 1L12.5 2.5L14 4H11.2C11.0895 4 11 3.91046 11 3.8V1Z\" fill=\"#D9D9D9\"/>\r\n<path d=\"M6.6084 9.96038C6.87161 9.96038 7.06366 10.0171 7.18457 10.1306C7.30548 10.2431 7.36593 10.3984 7.36593 10.5965C7.36593 10.6858 7.35245 10.7714 7.32547 10.8532C7.2985 10.9342 7.25432 11.0062 7.19294 11.0695C7.13249 11.1327 7.05157 11.1829 6.9502 11.2201C6.84882 11.2564 6.72373 11.2746 6.57492 11.2746H6.38937V12H5.95689V9.96038H6.6084ZM6.58608 10.3147H6.38937V10.9202H6.53167C6.61258 10.9202 6.6828 10.9095 6.74233 10.8881C6.80185 10.8667 6.84789 10.8332 6.88044 10.7877C6.91299 10.7421 6.92927 10.6835 6.92927 10.6119C6.92927 10.5114 6.90137 10.437 6.84556 10.3887C6.78976 10.3394 6.70326 10.3147 6.58608 10.3147ZM9.44322 10.9607C9.44322 11.1904 9.39904 11.3824 9.31069 11.5368C9.22326 11.6903 9.09631 11.8061 8.92983 11.8842C8.76335 11.9614 8.56292 12 8.32854 12H7.75098V9.96038H8.39132C8.60524 9.96038 8.79078 9.99851 8.94796 10.0748C9.10514 10.1501 9.22698 10.2622 9.31348 10.411C9.39997 10.5589 9.44322 10.7421 9.44322 10.9607ZM8.994 10.9718C8.994 10.8211 8.97168 10.6975 8.92704 10.6007C8.88332 10.5031 8.81822 10.431 8.73172 10.3845C8.64616 10.338 8.54013 10.3147 8.41364 10.3147H8.18345V11.6429H8.369C8.58012 11.6429 8.73684 11.5866 8.83915 11.4741C8.94238 11.3615 8.994 11.1941 8.994 10.9718ZM10.2914 12H9.86593V9.96038H11.035V10.3147H10.2914V10.8407H10.9834V11.1936H10.2914V12Z\" fill=\"white\"/>\r\n<rect x=\"5\" y=\"5\" width=\"7\" height=\"0.5\" rx=\"0.25\" fill=\"#CCCCCC\"/>\r\n<rect x=\"5\" y=\"6\" width=\"7\" height=\"0.5\" rx=\"0.25\" fill=\"#CCCCCC\"/>\r\n<rect x=\"5\" y=\"7\" width=\"7\" height=\"0.5\" rx=\"0.25\" fill=\"#CCCCCC\"/>\r\n</svg> -->\r\n\r\n<svg *ngSwitchCase=\"'text'\" width=\"180px\" height=\"180px\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n<path d=\"M11.1757 1.17574C11.0632 1.06321 10.9106 1 10.7515 1H3.6C3.26863 1 3 1.26863 3 1.6V14.4C3 14.7314 3.26863 15 3.6 15H13.4C13.7314 15 14 14.7314 14 14.4V4.24853C14 4.0894 13.9368 3.93679 13.8243 3.82426L11.1757 1.17574Z\" fill=\"#F4F4F4\"/>\r\n<path d=\"M15 12.7C15 12.8657 14.8657 13 14.7 13H2.3C2.13431 13 2 12.8657 2 12.7V9.3C2 9.13431 2.13431 9 2.3 9H14.7C14.8657 9 15 9.13431 15 9.3V12.7Z\" fill=\"#1F5EBB\"/>\r\n<path d=\"M11 1L12.5 2.5L14 4H11.2C11.0895 4 11 3.91046 11 3.8V1Z\" fill=\"#D9D9D9\"/>\r\n<path d=\"M7.04353 12H6.61105V10.3203H6.0572V9.96038H7.59738V10.3203H7.04353V12ZM9.56027 12H9.06641L8.59208 11.2285L8.11775 12H7.65458L8.33119 10.9481L7.69782 9.96038H8.17494L8.6144 10.6942L9.04548 9.96038H9.51144L8.87109 10.9718L9.56027 12ZM10.6038 12H10.1713V10.3203H9.61747V9.96038H11.1576V10.3203H10.6038V12Z\" fill=\"white\"/>\r\n<rect x=\"5\" y=\"5\" width=\"7\" height=\"0.5\" rx=\"0.25\" fill=\"#CCCCCC\"/>\r\n<rect x=\"5\" y=\"6\" width=\"7\" height=\"0.5\" rx=\"0.25\" fill=\"#CCCCCC\"/>\r\n<rect x=\"5\" y=\"7\" width=\"7\" height=\"0.5\" rx=\"0.25\" fill=\"#CCCCCC\"/>\r\n</svg>\r\n\r\n\r\n <!-- Generic -->\r\n <!-- <svg *ngSwitchDefault xmlns=\"http://www.w3.org/2000/svg\" width=\"48\" height=\"48\" viewBox=\"0 0 48 48\" fill=\"none\">\r\n <rect x=\"8\" y=\"6\" width=\"28\" height=\"36\" rx=\"3\" stroke=\"#9ca3af\" stroke-width=\"2\"/>\r\n <path d=\"M28 6v8a2 2 0 0 0 2 2h6\" stroke=\"#9ca3af\" stroke-width=\"2\"/>\r\n <path d=\"M16 30h16\" stroke=\"#9ca3af\" stroke-width=\"2\" stroke-linecap=\"round\"/>\r\n </svg> -->\r\n <svg *ngSwitchDefault width=\"180px\" height=\"180px\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n<path d=\"M11.1757 1.17574C11.0632 1.06321 10.9106 1 10.7515 1H3.6C3.26863 1 3 1.26863 3 1.6V14.4C3 14.7314 3.26863 15 3.6 15H13.4C13.7314 15 14 14.7314 14 14.4V4.24853C14 4.0894 13.9368 3.93679 13.8243 3.82426L11.1757 1.17574Z\" fill=\"#F4F4F4\"/>\r\n<path d=\"M15 12.7C15 12.8657 14.8657 13 14.7 13H2.3C2.13431 13 2 12.8657 2 12.7V9.3C2 9.13431 2.13431 9 2.3 9H14.7C14.8657 9 15 9.13431 15 9.3V12.7Z\" fill=\"#DD2025\"/>\r\n<path d=\"M11 1L12.5 2.5L14 4H11.2C11.0895 4 11 3.91046 11 3.8V1Z\" fill=\"#D9D9D9\"/>\r\n<path d=\"M6.6084 9.96038C6.87161 9.96038 7.06366 10.0171 7.18457 10.1306C7.30548 10.2431 7.36593 10.3984 7.36593 10.5965C7.36593 10.6858 7.35245 10.7714 7.32547 10.8532C7.2985 10.9342 7.25432 11.0062 7.19294 11.0695C7.13249 11.1327 7.05157 11.1829 6.9502 11.2201C6.84882 11.2564 6.72373 11.2746 6.57492 11.2746H6.38937V12H5.95689V9.96038H6.6084ZM6.58608 10.3147H6.38937V10.9202H6.53167C6.61258 10.9202 6.6828 10.9095 6.74233 10.8881C6.80185 10.8667 6.84789 10.8332 6.88044 10.7877C6.91299 10.7421 6.92927 10.6835 6.92927 10.6119C6.92927 10.5114 6.90137 10.437 6.84556 10.3887C6.78976 10.3394 6.70326 10.3147 6.58608 10.3147ZM9.44322 10.9607C9.44322 11.1904 9.39904 11.3824 9.31069 11.5368C9.22326 11.6903 9.09631 11.8061 8.92983 11.8842C8.76335 11.9614 8.56292 12 8.32854 12H7.75098V9.96038H8.39132C8.60524 9.96038 8.79078 9.99851 8.94796 10.0748C9.10514 10.1501 9.22698 10.2622 9.31348 10.411C9.39997 10.5589 9.44322 10.7421 9.44322 10.9607ZM8.994 10.9718C8.994 10.8211 8.97168 10.6975 8.92704 10.6007C8.88332 10.5031 8.81822 10.431 8.73172 10.3845C8.64616 10.338 8.54013 10.3147 8.41364 10.3147H8.18345V11.6429H8.369C8.58012 11.6429 8.73684 11.5866 8.83915 11.4741C8.94238 11.3615 8.994 11.1941 8.994 10.9718ZM10.2914 12H9.86593V9.96038H11.035V10.3147H10.2914V10.8407H10.9834V11.1936H10.2914V12Z\" fill=\"white\"/>\r\n<rect x=\"5\" y=\"5\" width=\"7\" height=\"0.5\" rx=\"0.25\" fill=\"#CCCCCC\"/>\r\n<rect x=\"5\" y=\"6\" width=\"7\" height=\"0.5\" rx=\"0.25\" fill=\"#CCCCCC\"/>\r\n<rect x=\"5\" y=\"7\" width=\"7\" height=\"0.5\" rx=\"0.25\" fill=\"#CCCCCC\"/>\r\n</svg>\r\n </ng-container>\r\n </div>\r\n </ng-template>\r\n </div>\r\n\r\n <!-- Metadata on right -->\r\n <div class=\"flex flex-col flex-1 ml-4\">\r\n <!-- Title -->\r\n <div class=\"input-container\">\r\n <label class=\"font-semibold text-sm mb-1 input-title\">Title</label>\r\n <input [(ngModel)]=\"file.title\"\r\n name=\"title{{i}}\"\r\n (ngModelChange)=\"onMetaChange()\"\r\n placeholder=\"Enter title\"\r\n class=\"border border-orange-300 rounded px-3 py-2 mb-3 w-full outline-none focus:ring focus:ring-orange-200\" />\r\n\r\n </div>\r\n <!-- Notes -->\r\n <div class=\"input-container\">\r\n <label class=\"font-semibold text-sm mb-1 input-title\">Notes</label>\r\n <textarea [(ngModel)]=\"file.notes\"\r\n name=\"notes{{i}}\"\r\n (ngModelChange)=\"onMetaChange()\"\r\n placeholder=\"Enter notes\"\r\n class=\"border border-orange-300 rounded px-3 py-2 mb-3 w-full outline-none focus:ring focus:ring-orange-200\"\r\n rows=\"2\"></textarea>\r\n\r\n </div>\r\n <!-- Category -->\r\n <div class=\"input-container\">\r\n <label class=\"font-semibold text-sm mb-1 input-title\">Category</label>\r\n <select [(ngModel)]=\"file.category\"\r\n name=\"category{{i}}\"\r\n (ngModelChange)=\"onMetaChange()\"\r\n class=\"border border-orange-300 rounded px-3 py-2 w-full outline-none focus:ring focus:ring-orange-200\">\r\n <option value=\"\">Select Category</option>\r\n <option *ngFor=\"let c of categories\" [ngValue]=\"c\">{{ c }}</option>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n</div>\r\n\r\n\r\n\r\n </div>\r\n</fx-component>", styles: [".custom-upload{border:1px solid #ccc}.custom-upload a{color:#fff}.custom-upload .file-list .file-thumbnail{width:234px;height:171px;border:1px solid #ccc;background-color:#fff;padding:4px}.custom-upload .separator{height:56px;width:2px;background-color:#ccc;margin:10px}.custom-upload .upload{background-color:#999;padding:2px 12px 2px 6px;border-radius:4px;margin-left:40px}.close_icon{position:absolute;top:-8px;right:-8px}[type=checkbox]{padding:12px}[type=checkbox]:checked{background-color:#f3a041!important;padding:12px;background-size:1em 1em!important}.gap-8{gap:8px}.input-title{position:absolute;bottom:auto;right:auto;left:1rem;top:-9px;padding:0rem .25rem;font-weight:600;border-radius:.25rem;z-index:1;color:#454545;background-color:#fff}.input-container{position:relative;inset:auto;z-index:auto}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i2.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "component", type: FxComponent, selector: "fx-component", inputs: ["fxData"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3.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: i3.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }] });
|
|
448
470
|
}
|
|
449
471
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UploaderComponent, decorators: [{
|
|
450
472
|
type: Component,
|
|
451
|
-
args: [{ selector: 'fx-uploader', standalone: true, imports: [CommonModule, FxComponent, FormsModule, ReactiveFormsModule], template: "<fx-component [fxData]=\"fxData\">\r\n <div class=\"custom-upload flex flex-row items-center gap-2 p-2 pb-0 rounded-sm\">\r\n <div class=\"flex flex-col justify-center items-center\" (click)=\"fileInput.click()\">\r\n <div>\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"29\" height=\"28\" viewBox=\"0 0 29 28\" fill=\"none\">\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\r\n d=\"M14.001 3.00195C11.5322 3.00195 9.16722 3.86956 7.23641 5.38414L7.23598 4.59695C7.23598 4.52473 7.22175 4.45321 7.19411 4.38648C7.16647 4.31975 7.12596 4.25912 7.07489 4.20804C7.02381 4.15697 6.96318 4.11646 6.89645 4.08882C6.82972 4.06118 6.7582 4.04695 6.68598 4.04695C6.61375 4.04695 6.54223 4.06118 6.4755 4.08882C6.40877 4.11646 6.34814 4.15697 6.29707 4.20804C6.24599 4.25912 6.20548 4.31975 6.17784 4.38648C6.1502 4.45321 6.13598 4.52473 6.13598 4.59695L6.13642 6.68652C6.13643 6.83239 6.19438 6.97228 6.29752 7.07542C6.40067 7.17856 6.54055 7.23651 6.68642 7.23652H8.77598C8.8482 7.23652 8.91972 7.2223 8.98645 7.19466C9.05318 7.16702 9.11381 7.12651 9.16489 7.07543C9.21596 7.02436 9.25647 6.96373 9.28411 6.897C9.31175 6.83027 9.32598 6.75875 9.32598 6.68652C9.32598 6.6143 9.31175 6.54278 9.28411 6.47605C9.25647 6.40932 9.21596 6.34869 9.16489 6.29761C9.11381 6.24654 9.05318 6.20603 8.98645 6.17839C8.91972 6.15075 8.8482 6.13652 8.77598 6.13652H8.0584C9.7702 4.84387 11.8399 4.10195 14.001 4.10195C19.4751 4.10195 23.901 8.52782 23.901 14.002C23.901 19.4761 19.4751 23.902 14.001 23.902C8.52684 23.902 4.10098 19.4761 4.10098 14.002C4.10098 12.6381 4.38263 11.2888 4.92855 10.0389C4.98691 9.90532 4.98982 9.75399 4.93665 9.61822C4.88347 9.48246 4.77855 9.37336 4.64496 9.31492C4.57877 9.28596 4.50753 9.27032 4.4353 9.2689C4.36306 9.26747 4.29126 9.2803 4.22398 9.30663C4.15671 9.33297 4.09528 9.3723 4.04321 9.42238C3.99114 9.47247 3.94944 9.53232 3.92051 9.59852C3.31393 10.9872 3.00098 12.4866 3.00098 14.002C3.00098 20.0706 7.93236 25.002 14.001 25.002C20.0696 25.002 25.001 20.0706 25.001 14.002C25.001 7.93334 20.0696 3.00195 14.001 3.00195Z\"\r\n fill=\"#F3A041\" />\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\r\n d=\"M13.9988 6.13965C9.6616 6.13965 6.13379 9.66746 6.13379 14.0046C6.13379 18.3418 9.6616 21.8696 13.9988 21.8696C18.336 21.8696 21.8638 18.3418 21.8638 14.0046C21.8638 9.66746 18.336 6.13965 13.9988 6.13965ZM13.9988 8.22965C14.1447 8.22965 14.2846 8.28759 14.3877 8.39074C14.4908 8.49388 14.5488 8.63378 14.5488 8.77965V13.7769L17.5227 16.7508C17.6258 16.8539 17.6837 16.9938 17.6837 17.1396C17.6837 17.2855 17.6258 17.4254 17.5227 17.5285C17.4195 17.6316 17.2796 17.6896 17.1338 17.6896C16.9879 17.6896 16.8481 17.6316 16.7449 17.5285L13.6099 14.3935C13.5068 14.2904 13.4488 14.1505 13.4488 14.0046V8.77965C13.4488 8.63378 13.5067 8.49388 13.6099 8.39074C13.713 8.28759 13.8529 8.22965 13.9988 8.22965Z\"\r\n fill=\"#F3A041\" />\r\n <rect width=\"28.56\" height=\"28\" rx=\"1.51479\" fill=\"#F3A041\" />\r\n <path\r\n d=\"M15.068 22.7391V17.6708H18.4968L14.2108 12.6025L9.9248 17.6708H13.3536V22.7391H9.06759V22.6969C8.92358 22.7053 8.78643 22.7391 8.63899 22.7391C6.93391 22.7391 5.29866 22.0717 4.09298 20.8835C2.8873 19.6954 2.20996 18.084 2.20996 16.4037C2.20996 13.1532 4.70443 10.5042 7.90523 10.141C8.18585 8.6953 8.96892 7.39118 10.1197 6.45292C11.2706 5.51465 12.7172 5.00089 14.2108 5C15.7047 5.00082 17.1515 5.51452 18.3026 6.45277C19.4537 7.39101 20.2371 8.69516 20.5181 10.141C23.7189 10.5042 26.21 13.1532 26.21 16.4037C26.21 18.084 25.5326 19.6954 24.3269 20.8835C23.1213 22.0717 21.486 22.7391 19.7809 22.7391C19.6369 22.7391 19.4981 22.7053 19.3523 22.6969V22.7391H15.068Z\"\r\n fill=\"white\" />\r\n </svg>\r\n </div>\r\n <a type=\"button\" (click)=\"fileInput.click()\" class=\"text-base cursor-pointer\">\r\n {{ setting('upload-text') }}\r\n </a>\r\n </div>\r\n <!-- <input #fileInput type=\"file\" [multiple]=\"setting('multiple-upload')\" (change)=\"onFileSelected($event)\" hidden />\r\n <div class=\"separator\"></div>\r\n <div class=\"file-list flex items-center gap-4 flex-wrap\">\r\n <ng-container *ngIf=\"uploadedFiles?.length\">\r\n <div *ngFor=\"let file of uploadedFiles; let i = index\" \r\n class=\"flex flex-col items-center justify-center\" (click)=\"deleteFile(i)\">\r\n <div class=\"relative\">\r\n <div class=\"close_icon cursor-pointer\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_6837_29683)\">\r\n <rect width=\"18\" height=\"18\" rx=\"9\" fill=\"#F3A041\" />\r\n <mask id=\"mask0_6837_29683\" style=\"mask-type:alpha\" maskUnits=\"userSpaceOnUse\" x=\"4\" y=\"4\" width=\"24\"\r\n height=\"24\">\r\n <rect x=\"4\" y=\"4\" width=\"24\" height=\"24\" fill=\"#D9D9D9\" />\r\n </mask>\r\n <g mask=\"url(#mask0_6837_29683)\">\r\n <path\r\n d=\"M8.2045 8.99815L5.81802 6.61167L6.61351 5.81617L9 8.20266L11.3865 5.81617L12.182 6.61167L9.7955 8.99815L12.182 11.3846L11.3865 12.1801L9 9.79365L6.61351 12.1801L5.81802 11.3846L8.2045 8.99815Z\"\r\n fill=\"white\" />\r\n </g>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_6837_29683\">\r\n <rect width=\"18\" height=\"18\" rx=\"9\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </div>\r\n <img class=\"file-thumbnail\" style=\"border-radius: 4px\" [src]=\"file?.result\" alt=\"\" />\r\n <div class=\"flex flex-col w-full\">\r\n <label class=\"font-semibold text-sm mb-1\">Title</label>\r\n <input [(ngModel)]=\"file.title\"\r\n name=\"title{{i}}\"\r\n (ngModelChange)=\"onMetaChange()\"\r\n placeholder=\"Enter title\"\r\n class=\"border border-orange-300 rounded px-3 py-2 mb-3 w-full outline-none focus:ring focus:ring-orange-200\" />\r\n \r\n <label class=\"font-semibold text-sm mb-1\">Notes</label>\r\n <textarea [(ngModel)]=\"file.notes\"\r\n name=\"notes{{i}}\"\r\n (ngModelChange)=\"onMetaChange()\"\r\n placeholder=\"Enter notes\"\r\n class=\"border border-orange-300 rounded px-3 py-2 w-full outline-none focus:ring focus:ring-orange-200\"\r\n rows=\"2\"></textarea>\r\n </div>\r\n \r\n\r\n </div>\r\n\r\n <p>{{file?.name}}</p>\r\n </div>\r\n </ng-container>\r\n </div> -->\r\n\r\n <input #fileInput\r\n type=\"file\"\r\n [multiple]=\"setting('multiple-upload')\"\r\n (change)=\"onFileSelected($event)\"\r\n hidden />\r\n\r\n<div class=\"separator\"></div>\r\n\r\n<div class=\"file-list flex items-center gap-6 flex-wrap\" *ngIf=\"false\">\r\n <ng-container *ngIf=\"uploadedFiles?.length\">\r\n <div *ngFor=\"let file of uploadedFiles; let i = index\"\r\n class=\"flex flex-col items-center justify-center\">\r\n\r\n <div class=\"relative p-3 border rounded-lg shadow-sm bg-white w-64\">\r\n <!-- Close icon -->\r\n <div class=\"close_icon cursor-pointer absolute top-2 right-2\" (click)=\"deleteFile(i)\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <rect width=\"18\" height=\"18\" rx=\"9\" fill=\"#F3A041\" />\r\n <path d=\"M8.2 9l-2.4-2.4.8-.8L9 8.2l2.4-2.4.8.8L9.8 9l2.4 2.4-.8.8L9 9.8l-2.4 2.4-.8-.8L8.2 9z\"\r\n fill=\"white\"/>\r\n </svg>\r\n </div>\r\n\r\n <!-- Thumbnail -->\r\n <ng-container *ngIf=\"file.type === 'image'; else nonImageThumb\">\r\n <img class=\"file-thumbnail w-full h-32 object-cover rounded mb-3\"\r\n [src]=\"file?.result\"\r\n alt=\"preview\" />\r\n </ng-container>\r\n\r\n <ng-template #nonImageThumb>\r\n <div class=\"file-thumbnail flex items-center justify-center border rounded mb-3 w-full h-32 bg-gray-50\">\r\n <ng-container [ngSwitch]=\"file.type\">\r\n <!-- CSV -->\r\n <svg *ngSwitchCase=\"'csv'\" xmlns=\"http://www.w3.org/2000/svg\" width=\"48\" height=\"48\" viewBox=\"0 0 48 48\" fill=\"none\">\r\n <rect x=\"8\" y=\"6\" width=\"28\" height=\"36\" rx=\"3\" stroke=\"#22c55e\" stroke-width=\"2\"/>\r\n <path d=\"M28 6v8a2 2 0 0 0 2 2h6\" stroke=\"#22c55e\" stroke-width=\"2\"/>\r\n <text x=\"14\" y=\"34\" font-size=\"10\" font-family=\"monospace\" fill=\"#22c55e\">CSV</text>\r\n </svg>\r\n\r\n <!-- TEXT -->\r\n <svg *ngSwitchCase=\"'text'\" xmlns=\"http://www.w3.org/2000/svg\" width=\"48\" height=\"48\" viewBox=\"0 0 48 48\" fill=\"none\">\r\n <rect x=\"8\" y=\"6\" width=\"28\" height=\"36\" rx=\"3\" stroke=\"#3b82f6\" stroke-width=\"2\"/>\r\n <path d=\"M28 6v8a2 2 0 0 0 2 2h6\" stroke=\"#3b82f6\" stroke-width=\"2\"/>\r\n <path d=\"M14 24h20M14 29h20M14 34h12\" stroke=\"#3b82f6\" stroke-width=\"2\" stroke-linecap=\"round\"/>\r\n </svg>\r\n\r\n <!-- Generic -->\r\n <svg *ngSwitchDefault xmlns=\"http://www.w3.org/2000/svg\" width=\"48\" height=\"48\" viewBox=\"0 0 48 48\" fill=\"none\">\r\n <rect x=\"8\" y=\"6\" width=\"28\" height=\"36\" rx=\"3\" stroke=\"#9ca3af\" stroke-width=\"2\"/>\r\n <path d=\"M28 6v8a2 2 0 0 0 2 2h6\" stroke=\"#9ca3af\" stroke-width=\"2\"/>\r\n <path d=\"M16 30h16\" stroke=\"#9ca3af\" stroke-width=\"2\" stroke-linecap=\"round\"/>\r\n </svg>\r\n </ng-container>\r\n </div>\r\n </ng-template>\r\n\r\n <!-- Metadata -->\r\n <div class=\"flex flex-col w-full\">\r\n <label class=\"font-semibold text-sm mb-1\">Title</label>\r\n <input [(ngModel)]=\"file.title\"\r\n name=\"title{{i}}\"\r\n (ngModelChange)=\"onMetaChange()\"\r\n placeholder=\"Enter title\"\r\n class=\"border border-orange-300 rounded px-3 py-2 mb-3 w-full outline-none focus:ring focus:ring-orange-200\" />\r\n\r\n <label class=\"font-semibold text-sm mb-1\">Notes</label>\r\n <textarea [(ngModel)]=\"file.notes\"\r\n name=\"notes{{i}}\"\r\n (ngModelChange)=\"onMetaChange()\"\r\n placeholder=\"Enter notes\"\r\n class=\"border border-orange-300 rounded px-3 py-2 w-full outline-none focus:ring focus:ring-orange-200\"\r\n rows=\"2\"></textarea>\r\n\r\n <label class=\"font-semibold text-sm mt-3 mb-1\">Category</label>\r\n <select [(ngModel)]=\"file.category\"\r\n name=\"category{{i}}\"\r\n (ngModelChange)=\"onMetaChange()\"\r\n placeholder=\"Select Category\"\r\n class=\"border border-orange-300 rounded px-3 py-2 w-full outline-none focus:ring focus:ring-orange-200\">\r\n <option *ngFor=\"let c of categories\" [ngValue]=\"c\">{{ c }}</option>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <p class=\"mt-2 text-sm text-gray-600\">{{ file?.name }}</p>\r\n </div>\r\n </ng-container>\r\n</div>\r\n\r\n<div class=\"file-list flex items-center gap-8 flex-wrap\">\r\n <ng-container *ngIf=\"uploadedFiles?.length\">\r\n <div *ngFor=\"let file of uploadedFiles; let i = index\"\r\n class=\"relative p-3 border rounded-lg shadow-sm bg-white w-[500px] flex\">\r\n\r\n <!-- Close icon -->\r\n <div class=\"close_icon cursor-pointer absolute top-2 right-2\" (click)=\"deleteFile(i)\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <rect width=\"18\" height=\"18\" rx=\"9\" fill=\"#F3A041\" />\r\n <path d=\"M8.2 9l-2.4-2.4.8-.8L9 8.2l2.4-2.4.8.8L9.8 9l2.4 2.4-.8.8L9 9.8l-2.4 2.4-.8-.8L8.2 9z\"\r\n fill=\"white\"/>\r\n </svg>\r\n </div>\r\n\r\n <!-- Thumbnail on left -->\r\n <div class=\"w-28 h-28 flex-shrink-0\">\r\n <ng-container *ngIf=\"file.type === 'image'; else nonImageThumb\">\r\n <img class=\"file-thumbnail w-full h-full object-cover rounded\"\r\n [src]=\"file?.result\"\r\n alt=\"preview\" />\r\n </ng-container>\r\n\r\n <ng-template #nonImageThumb>\r\n <div class=\"file-thumbnail flex items-center justify-center border rounded w-full h-full bg-gray-50\">\r\n <ng-container [ngSwitch]=\"file.type\">\r\n <!-- CSV -->\r\n <svg *ngSwitchCase=\"'csv'\" xmlns=\"http://www.w3.org/2000/svg\" width=\"48\" height=\"48\" viewBox=\"0 0 48 48\" fill=\"none\">\r\n <rect x=\"8\" y=\"6\" width=\"28\" height=\"36\" rx=\"3\" stroke=\"#22c55e\" stroke-width=\"2\"/>\r\n <path d=\"M28 6v8a2 2 0 0 0 2 2h6\" stroke=\"#22c55e\" stroke-width=\"2\"/>\r\n <text x=\"14\" y=\"34\" font-size=\"10\" font-family=\"monospace\" fill=\"#22c55e\">CSV</text>\r\n </svg>\r\n <!-- TEXT -->\r\n <svg *ngSwitchCase=\"'text'\" xmlns=\"http://www.w3.org/2000/svg\" width=\"48\" height=\"48\" viewBox=\"0 0 48 48\" fill=\"none\">\r\n <rect x=\"8\" y=\"6\" width=\"28\" height=\"36\" rx=\"3\" stroke=\"#3b82f6\" stroke-width=\"2\"/>\r\n <path d=\"M28 6v8a2 2 0 0 0 2 2h6\" stroke=\"#3b82f6\" stroke-width=\"2\"/>\r\n <path d=\"M14 24h20M14 29h20M14 34h12\" stroke=\"#3b82f6\" stroke-width=\"2\" stroke-linecap=\"round\"/>\r\n </svg>\r\n <!-- Generic -->\r\n <svg *ngSwitchDefault xmlns=\"http://www.w3.org/2000/svg\" width=\"48\" height=\"48\" viewBox=\"0 0 48 48\" fill=\"none\">\r\n <rect x=\"8\" y=\"6\" width=\"28\" height=\"36\" rx=\"3\" stroke=\"#9ca3af\" stroke-width=\"2\"/>\r\n <path d=\"M28 6v8a2 2 0 0 0 2 2h6\" stroke=\"#9ca3af\" stroke-width=\"2\"/>\r\n <path d=\"M16 30h16\" stroke=\"#9ca3af\" stroke-width=\"2\" stroke-linecap=\"round\"/>\r\n </svg>\r\n </ng-container>\r\n </div>\r\n </ng-template>\r\n </div>\r\n\r\n <!-- Metadata on right -->\r\n <div class=\"flex flex-col flex-1 ml-4\">\r\n <!-- Title -->\r\n <label class=\"font-semibold text-sm mb-1\">Title</label>\r\n <input [(ngModel)]=\"file.title\"\r\n name=\"title{{i}}\"\r\n (ngModelChange)=\"onMetaChange()\"\r\n placeholder=\"Enter title\"\r\n class=\"border border-orange-300 rounded px-3 py-2 mb-3 w-full outline-none focus:ring focus:ring-orange-200\" />\r\n\r\n <!-- Notes -->\r\n <label class=\"font-semibold text-sm mb-1\">Notes</label>\r\n <textarea [(ngModel)]=\"file.notes\"\r\n name=\"notes{{i}}\"\r\n (ngModelChange)=\"onMetaChange()\"\r\n placeholder=\"Enter notes\"\r\n class=\"border border-orange-300 rounded px-3 py-2 mb-3 w-full outline-none focus:ring focus:ring-orange-200\"\r\n rows=\"2\"></textarea>\r\n\r\n <!-- Category -->\r\n <label class=\"font-semibold text-sm mb-1\">Category</label>\r\n <select [(ngModel)]=\"file.category\"\r\n name=\"category{{i}}\"\r\n (ngModelChange)=\"onMetaChange()\"\r\n class=\"border border-orange-300 rounded px-3 py-2 w-full outline-none focus:ring focus:ring-orange-200\">\r\n <option value=\"\">Select Category</option>\r\n <option *ngFor=\"let c of categories\" [ngValue]=\"c\">{{ c }}</option>\r\n </select>\r\n </div>\r\n </div>\r\n </ng-container>\r\n</div>\r\n\r\n\r\n\r\n </div>\r\n</fx-component>", styles: [".custom-upload{border:1px solid #ccc}.custom-upload a{color:#000}.custom-upload .file-list .file-thumbnail{width:234px;height:234px;border:1px solid #ccc;background-color:#fff;padding:4px}.custom-upload .separator{height:56px;width:2px;background-color:#ccc;margin:10px}.close_icon{position:absolute;top:-8px;right:-8px}[type=checkbox]{padding:12px}[type=checkbox]:checked{background-color:#f3a041!important;padding:12px;background-size:1em 1em!important}.gap-8{gap:8px}\n"] }]
|
|
473
|
+
args: [{ selector: 'fx-uploader', standalone: true, imports: [CommonModule, FxComponent, FormsModule, ReactiveFormsModule], template: "<fx-component [fxData]=\"fxData\">\r\n <div class=\"custom-upload flex flex-col items-start justify-center gap-2 p-2 pb-0 rounded-sm\">\r\n <div class=\"flex gap-8 items-center\">\r\n <p class=\"text-base\">Patient Images</p>\r\n <div class=\"flex justify-center items-center gap-2 upload\" (click)=\"fileInput.click()\">\r\n <div>\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"29\" height=\"28\" viewBox=\"0 0 29 28\" fill=\"none\">\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\r\n d=\"M14.001 3.00195C11.5322 3.00195 9.16722 3.86956 7.23641 5.38414L7.23598 4.59695C7.23598 4.52473 7.22175 4.45321 7.19411 4.38648C7.16647 4.31975 7.12596 4.25912 7.07489 4.20804C7.02381 4.15697 6.96318 4.11646 6.89645 4.08882C6.82972 4.06118 6.7582 4.04695 6.68598 4.04695C6.61375 4.04695 6.54223 4.06118 6.4755 4.08882C6.40877 4.11646 6.34814 4.15697 6.29707 4.20804C6.24599 4.25912 6.20548 4.31975 6.17784 4.38648C6.1502 4.45321 6.13598 4.52473 6.13598 4.59695L6.13642 6.68652C6.13643 6.83239 6.19438 6.97228 6.29752 7.07542C6.40067 7.17856 6.54055 7.23651 6.68642 7.23652H8.77598C8.8482 7.23652 8.91972 7.2223 8.98645 7.19466C9.05318 7.16702 9.11381 7.12651 9.16489 7.07543C9.21596 7.02436 9.25647 6.96373 9.28411 6.897C9.31175 6.83027 9.32598 6.75875 9.32598 6.68652C9.32598 6.6143 9.31175 6.54278 9.28411 6.47605C9.25647 6.40932 9.21596 6.34869 9.16489 6.29761C9.11381 6.24654 9.05318 6.20603 8.98645 6.17839C8.91972 6.15075 8.8482 6.13652 8.77598 6.13652H8.0584C9.7702 4.84387 11.8399 4.10195 14.001 4.10195C19.4751 4.10195 23.901 8.52782 23.901 14.002C23.901 19.4761 19.4751 23.902 14.001 23.902C8.52684 23.902 4.10098 19.4761 4.10098 14.002C4.10098 12.6381 4.38263 11.2888 4.92855 10.0389C4.98691 9.90532 4.98982 9.75399 4.93665 9.61822C4.88347 9.48246 4.77855 9.37336 4.64496 9.31492C4.57877 9.28596 4.50753 9.27032 4.4353 9.2689C4.36306 9.26747 4.29126 9.2803 4.22398 9.30663C4.15671 9.33297 4.09528 9.3723 4.04321 9.42238C3.99114 9.47247 3.94944 9.53232 3.92051 9.59852C3.31393 10.9872 3.00098 12.4866 3.00098 14.002C3.00098 20.0706 7.93236 25.002 14.001 25.002C20.0696 25.002 25.001 20.0706 25.001 14.002C25.001 7.93334 20.0696 3.00195 14.001 3.00195Z\"\r\n fill=\"#F3A041\" />\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\r\n d=\"M13.9988 6.13965C9.6616 6.13965 6.13379 9.66746 6.13379 14.0046C6.13379 18.3418 9.6616 21.8696 13.9988 21.8696C18.336 21.8696 21.8638 18.3418 21.8638 14.0046C21.8638 9.66746 18.336 6.13965 13.9988 6.13965ZM13.9988 8.22965C14.1447 8.22965 14.2846 8.28759 14.3877 8.39074C14.4908 8.49388 14.5488 8.63378 14.5488 8.77965V13.7769L17.5227 16.7508C17.6258 16.8539 17.6837 16.9938 17.6837 17.1396C17.6837 17.2855 17.6258 17.4254 17.5227 17.5285C17.4195 17.6316 17.2796 17.6896 17.1338 17.6896C16.9879 17.6896 16.8481 17.6316 16.7449 17.5285L13.6099 14.3935C13.5068 14.2904 13.4488 14.1505 13.4488 14.0046V8.77965C13.4488 8.63378 13.5067 8.49388 13.6099 8.39074C13.713 8.28759 13.8529 8.22965 13.9988 8.22965Z\"\r\n fill=\"#F3A041\" />\r\n <rect width=\"28.56\" height=\"28\" rx=\"1.51479\" fill=\"#999999\" />\r\n <path\r\n d=\"M15.068 22.7391V17.6708H18.4968L14.2108 12.6025L9.9248 17.6708H13.3536V22.7391H9.06759V22.6969C8.92358 22.7053 8.78643 22.7391 8.63899 22.7391C6.93391 22.7391 5.29866 22.0717 4.09298 20.8835C2.8873 19.6954 2.20996 18.084 2.20996 16.4037C2.20996 13.1532 4.70443 10.5042 7.90523 10.141C8.18585 8.6953 8.96892 7.39118 10.1197 6.45292C11.2706 5.51465 12.7172 5.00089 14.2108 5C15.7047 5.00082 17.1515 5.51452 18.3026 6.45277C19.4537 7.39101 20.2371 8.69516 20.5181 10.141C23.7189 10.5042 26.21 13.1532 26.21 16.4037C26.21 18.084 25.5326 19.6954 24.3269 20.8835C23.1213 22.0717 21.486 22.7391 19.7809 22.7391C19.6369 22.7391 19.4981 22.7053 19.3523 22.6969V22.7391H15.068Z\"\r\n fill=\"white\" />\r\n </svg>\r\n </div>\r\n <a type=\"button\" (click)=\"fileInput.click()\" class=\"text-base cursor-pointer\">\r\n {{ setting('upload-text') }}\r\n </a>\r\n </div>\r\n </div>\r\n <!-- <input #fileInput type=\"file\" [multiple]=\"setting('multiple-upload')\" (change)=\"onFileSelected($event)\" hidden />\r\n <div class=\"separator\"></div>\r\n <div class=\"file-list flex items-center gap-4 flex-wrap\">\r\n <ng-container *ngIf=\"uploadedFiles?.length\">\r\n <div *ngFor=\"let file of uploadedFiles; let i = index\" \r\n class=\"flex flex-col items-center justify-center\" (click)=\"deleteFile(i)\">\r\n <div class=\"relative\">\r\n <div class=\"close_icon cursor-pointer\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_6837_29683)\">\r\n <rect width=\"18\" height=\"18\" rx=\"9\" fill=\"#F3A041\" />\r\n <mask id=\"mask0_6837_29683\" style=\"mask-type:alpha\" maskUnits=\"userSpaceOnUse\" x=\"4\" y=\"4\" width=\"24\"\r\n height=\"24\">\r\n <rect x=\"4\" y=\"4\" width=\"24\" height=\"24\" fill=\"#D9D9D9\" />\r\n </mask>\r\n <g mask=\"url(#mask0_6837_29683)\">\r\n <path\r\n d=\"M8.2045 8.99815L5.81802 6.61167L6.61351 5.81617L9 8.20266L11.3865 5.81617L12.182 6.61167L9.7955 8.99815L12.182 11.3846L11.3865 12.1801L9 9.79365L6.61351 12.1801L5.81802 11.3846L8.2045 8.99815Z\"\r\n fill=\"white\" />\r\n </g>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_6837_29683\">\r\n <rect width=\"18\" height=\"18\" rx=\"9\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </div>\r\n <img class=\"file-thumbnail\" style=\"border-radius: 4px\" [src]=\"file?.result\" alt=\"\" />\r\n <div class=\"flex flex-col w-full\">\r\n <label class=\"font-semibold text-sm mb-1\">Title</label>\r\n <input [(ngModel)]=\"file.title\"\r\n name=\"title{{i}}\"\r\n (ngModelChange)=\"onMetaChange()\"\r\n placeholder=\"Enter title\"\r\n class=\"border border-orange-300 rounded px-3 py-2 mb-3 w-full outline-none focus:ring focus:ring-orange-200\" />\r\n \r\n <label class=\"font-semibold text-sm mb-1\">Notes</label>\r\n <textarea [(ngModel)]=\"file.notes\"\r\n name=\"notes{{i}}\"\r\n (ngModelChange)=\"onMetaChange()\"\r\n placeholder=\"Enter notes\"\r\n class=\"border border-orange-300 rounded px-3 py-2 w-full outline-none focus:ring focus:ring-orange-200\"\r\n rows=\"2\"></textarea>\r\n </div>\r\n \r\n\r\n </div>\r\n\r\n <p>{{file?.name}}</p>\r\n </div>\r\n </ng-container>\r\n </div> -->\r\n\r\n <input #fileInput\r\n type=\"file\"\r\n [multiple]=\"setting('multiple-upload')\"\r\n (change)=\"onFileSelected($event)\"\r\n accept=\".csv,.pdf,.xls,.xlsx,.doc,.docx,.txt,image/*\"\r\n hidden />\r\n\r\n<!-- <div class=\"separator\"></div> -->\r\n\r\n<div class=\"file-list flex items-center gap-6 flex-wrap\" *ngIf=\"false\">\r\n <ng-container *ngIf=\"uploadedFiles?.length\">\r\n <div *ngFor=\"let file of uploadedFiles; let i = index\"\r\n class=\"flex flex-col items-center justify-center\">\r\n\r\n <div class=\"input-container p-3 border rounded-lg shadow-sm bg-white w-64\">\r\n <!-- Close icon -->\r\n <div class=\"close_icon cursor-pointer absolute top-2 right-2\" (click)=\"deleteFile(i)\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <rect width=\"18\" height=\"18\" rx=\"9\" fill=\"#F3A041\" />\r\n <path d=\"M8.2 9l-2.4-2.4.8-.8L9 8.2l2.4-2.4.8.8L9.8 9l2.4 2.4-.8.8L9 9.8l-2.4 2.4-.8-.8L8.2 9z\"\r\n fill=\"white\"/>\r\n </svg>\r\n </div>\r\n\r\n <!-- Thumbnail -->\r\n <ng-container *ngIf=\"file.type === 'image'; else nonImageThumb\">\r\n <img class=\"file-thumbnail w-full h-32 object-cover rounded mb-3\"\r\n [src]=\"file?.result\"\r\n alt=\"preview\" />\r\n </ng-container>\r\n\r\n <ng-template #nonImageThumb>\r\n <div class=\"file-thumbnail flex items-center justify-center border rounded mb-3 w-full h-32 bg-gray-50\">\r\n <ng-container [ngSwitch]=\"file.type\">\r\n <!-- CSV -->\r\n <svg *ngSwitchCase=\"'csv'\" xmlns=\"http://www.w3.org/2000/svg\" width=\"48\" height=\"48\" viewBox=\"0 0 48 48\" fill=\"none\">\r\n <rect x=\"8\" y=\"6\" width=\"28\" height=\"36\" rx=\"3\" stroke=\"#22c55e\" stroke-width=\"2\"/>\r\n <path d=\"M28 6v8a2 2 0 0 0 2 2h6\" stroke=\"#22c55e\" stroke-width=\"2\"/>\r\n <text x=\"14\" y=\"34\" font-size=\"10\" font-family=\"monospace\" fill=\"#22c55e\">CSV</text>\r\n </svg>\r\n\r\n <!-- TEXT -->\r\n <svg *ngSwitchCase=\"'text'\" xmlns=\"http://www.w3.org/2000/svg\" width=\"48\" height=\"48\" viewBox=\"0 0 48 48\" fill=\"none\">\r\n <rect x=\"8\" y=\"6\" width=\"28\" height=\"36\" rx=\"3\" stroke=\"#3b82f6\" stroke-width=\"2\"/>\r\n <path d=\"M28 6v8a2 2 0 0 0 2 2h6\" stroke=\"#3b82f6\" stroke-width=\"2\"/>\r\n <path d=\"M14 24h20M14 29h20M14 34h12\" stroke=\"#3b82f6\" stroke-width=\"2\" stroke-linecap=\"round\"/>\r\n </svg>\r\n\r\n <!-- Generic -->\r\n <svg *ngSwitchDefault xmlns=\"http://www.w3.org/2000/svg\" width=\"48\" height=\"48\" viewBox=\"0 0 48 48\" fill=\"none\">\r\n <rect x=\"8\" y=\"6\" width=\"28\" height=\"36\" rx=\"3\" stroke=\"#9ca3af\" stroke-width=\"2\"/>\r\n <path d=\"M28 6v8a2 2 0 0 0 2 2h6\" stroke=\"#9ca3af\" stroke-width=\"2\"/>\r\n <path d=\"M16 30h16\" stroke=\"#9ca3af\" stroke-width=\"2\" stroke-linecap=\"round\"/>\r\n </svg>\r\n </ng-container>\r\n </div>\r\n </ng-template>\r\n\r\n <!-- Metadata -->\r\n <div class=\"flex flex-col w-full\">\r\n <div class=\"input-container\">\r\n <label class=\"font-semibold text-sm mb-1 input-title\">Title</label>\r\n <input [(ngModel)]=\"file.title\" name=\"title{{i}}\" (ngModelChange)=\"onMetaChange()\" placeholder=\"Enter title\"\r\n class=\"border border-orange-300 rounded px-3 py-2 mb-3 w-full outline-none focus:ring focus:ring-orange-200\" />\r\n </div>\r\n \r\n <div>\r\n <label class=\"font-semibold text-sm mb-1 input-title\">Notes</label>\r\n <textarea [(ngModel)]=\"file.notes\" name=\"notes{{i}}\" (ngModelChange)=\"onMetaChange()\" placeholder=\"Enter notes\"\r\n class=\"border border-orange-300 rounded px-3 py-2 w-full outline-none focus:ring focus:ring-orange-200\"\r\n rows=\"2\"></textarea>\r\n </div>\r\n \r\n <div>\r\n <label class=\"font-semibold text-sm mt-3 mb-1 input-title\">Category</label>\r\n <select [(ngModel)]=\"file.category\" name=\"category{{i}}\" (ngModelChange)=\"onMetaChange()\"\r\n placeholder=\"Select Category\"\r\n class=\"border border-orange-300 rounded px-3 py-2 w-full outline-none focus:ring focus:ring-orange-200\">\r\n <option *ngFor=\"let c of categories\" [ngValue]=\"c\">{{ c }}</option>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <p class=\"mt-2 text-sm text-gray-600\">{{ file?.name }}</p>\r\n </div>\r\n </ng-container>\r\n</div>\r\n\r\n<div class=\"file-list flex items-center gap-8 flex-wrap\">\r\n <ng-container *ngIf=\"uploadedFiles?.length\">\r\n <div *ngFor=\"let file of uploadedFiles; let i = index\"\r\n class=\"input-container p-3 border rounded-lg shadow-sm bg-white w-[500px] flex\">\r\n\r\n <!-- Close icon -->\r\n <div class=\"close_icon cursor-pointer absolute top-2 right-2\" (click)=\"deleteFile(i)\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <rect width=\"18\" height=\"18\" rx=\"9\" fill=\"#F3A041\" />\r\n <path d=\"M8.2 9l-2.4-2.4.8-.8L9 8.2l2.4-2.4.8.8L9.8 9l2.4 2.4-.8.8L9 9.8l-2.4 2.4-.8-.8L8.2 9z\"\r\n fill=\"white\"/>\r\n </svg>\r\n </div>\r\n\r\n <!-- Thumbnail on left -->\r\n <div class=\"w-28 h-28 flex-shrink-0\">\r\n <ng-container *ngIf=\"file.type === 'image'; else nonImageThumb\">\r\n <img class=\"file-thumbnail w-full h-full object-cover rounded\"\r\n [src]=\"file?.result\"\r\n alt=\"preview\" />\r\n </ng-container>\r\n\r\n <ng-template #nonImageThumb>\r\n <div class=\"file-thumbnail flex items-center justify-center border rounded w-full h-full bg-gray-50\">\r\n <ng-container [ngSwitch]=\"file.type\">\r\n <!-- CSV -->\r\n <!-- <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"48\" height=\"48\" viewBox=\"0 0 48 48\" fill=\"none\">\r\n <rect x=\"8\" y=\"6\" width=\"28\" height=\"36\" rx=\"3\" stroke=\"#22c55e\" stroke-width=\"2\"/>\r\n <path d=\"M28 6v8a2 2 0 0 0 2 2h6\" stroke=\"#22c55e\" stroke-width=\"2\"/>\r\n <text x=\"14\" y=\"34\" font-size=\"10\" font-family=\"monospace\" fill=\"#22c55e\">CSV</text>\r\n </svg> -->\r\n\r\n <svg *ngSwitchCase=\"'csv'\" width=\"180px\" height=\"180px\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n<path d=\"M11.1757 1.17574C11.0632 1.06321 10.9106 1 10.7515 1H3.6C3.26863 1 3 1.26863 3 1.6V14.4C3 14.7314 3.26863 15 3.6 15H13.4C13.7314 15 14 14.7314 14 14.4V4.24853C14 4.0894 13.9368 3.93679 13.8243 3.82426L11.1757 1.17574Z\" fill=\"#F4F4F4\"/>\r\n<path d=\"M15 12.7C15 12.8657 14.8657 13 14.7 13H2.3C2.13431 13 2 12.8657 2 12.7V9.3C2 9.13431 2.13431 9 2.3 9H14.7C14.8657 9 15 9.13431 15 9.3V12.7Z\" fill=\"#23A761\"/>\r\n<path d=\"M11 1L12.5 2.5L14 4H11.2C11.0895 4 11 3.91046 11 3.8V1Z\" fill=\"#D9D9D9\"/>\r\n<path d=\"M6.94076 10.3433C6.85939 10.3433 6.78716 10.3588 6.72408 10.3899C6.66191 10.42 6.60934 10.464 6.56637 10.5216C6.52432 10.5793 6.49232 10.6489 6.47038 10.7305C6.44844 10.8122 6.43747 10.904 6.43747 11.006C6.43747 11.1435 6.45484 11.261 6.48958 11.3586C6.52523 11.4553 6.58009 11.5294 6.65414 11.5808C6.7282 11.6314 6.82373 11.6567 6.94076 11.6567C7.02212 11.6567 7.10349 11.6478 7.18486 11.6301C7.26714 11.6123 7.35628 11.587 7.45228 11.5542V11.9002C7.36359 11.9357 7.27628 11.961 7.19035 11.976C7.10441 11.992 7.00795 12 6.90099 12C6.69437 12 6.52432 11.9587 6.39084 11.8762C6.25827 11.7929 6.15999 11.6766 6.096 11.5276C6.032 11.3777 6 11.2029 6 11.0033C6 10.8561 6.02057 10.7212 6.06171 10.5988C6.10285 10.4764 6.16319 10.3704 6.24273 10.2808C6.32227 10.1912 6.42055 10.122 6.53758 10.0732C6.6546 10.0244 6.78899 10 6.94076 10C7.04041 10 7.14006 10.0124 7.23971 10.0373C7.34028 10.0612 7.43628 10.0945 7.5277 10.1371L7.39057 10.4724C7.3156 10.4378 7.24017 10.4076 7.16429 10.3819C7.08841 10.3562 7.0139 10.3433 6.94076 10.3433Z\" fill=\"white\"/>\r\n<path d=\"M9.06363 11.4331C9.06363 11.5485 9.03483 11.6487 8.97724 11.7339C8.91964 11.819 8.83553 11.8847 8.7249 11.9308C8.61519 11.9769 8.48172 12 8.32447 12C8.25498 12 8.18687 11.9956 8.12013 11.9867C8.05431 11.9778 7.99077 11.965 7.92951 11.9481C7.86917 11.9304 7.81157 11.9086 7.75672 11.8829V11.4997C7.8518 11.5405 7.95054 11.5773 8.05293 11.6101C8.15533 11.6429 8.25681 11.6593 8.35738 11.6593C8.42686 11.6593 8.48263 11.6505 8.52468 11.6327C8.56765 11.615 8.59874 11.5906 8.61794 11.5595C8.63714 11.5285 8.64674 11.493 8.64674 11.4531C8.64674 11.4043 8.62982 11.3626 8.596 11.328C8.56217 11.2934 8.51554 11.261 8.45612 11.2309C8.3976 11.2007 8.33132 11.1683 8.25727 11.1337C8.21064 11.1124 8.1599 11.0867 8.10505 11.0566C8.05019 11.0255 7.99808 10.9878 7.94871 10.9434C7.89934 10.8991 7.85866 10.8454 7.82666 10.7824C7.79558 10.7186 7.78003 10.6423 7.78003 10.5536C7.78003 10.4373 7.80746 10.338 7.86231 10.2555C7.91717 10.173 7.99534 10.11 8.09682 10.0665C8.19921 10.0222 8.31989 10 8.45886 10C8.56308 10 8.66228 10.012 8.75645 10.0359C8.85153 10.059 8.95072 10.0927 9.05403 10.1371L8.9169 10.4578C8.82456 10.4214 8.74182 10.3934 8.66868 10.3739C8.59554 10.3535 8.52103 10.3433 8.44515 10.3433C8.39212 10.3433 8.34686 10.3517 8.30938 10.3686C8.2719 10.3846 8.24355 10.4076 8.22436 10.4378C8.20516 10.4671 8.19556 10.5012 8.19556 10.5403C8.19556 10.5864 8.20927 10.6254 8.2367 10.6574C8.26504 10.6884 8.30709 10.7186 8.36286 10.7478C8.41955 10.7771 8.48994 10.8113 8.57405 10.8503C8.67645 10.8973 8.76376 10.9466 8.83598 10.998C8.90912 11.0486 8.96535 11.1084 9.00466 11.1776C9.04398 11.246 9.06363 11.3311 9.06363 11.4331Z\" fill=\"white\"/>\r\n<path d=\"M11 10.0279L10.3184 11.9734H9.85491L9.17471 10.0279H9.60395L9.98108 11.1856C9.98748 11.2051 9.99799 11.242 10.0126 11.2961C10.0272 11.3493 10.0419 11.4061 10.0565 11.4664C10.072 11.5258 10.0826 11.5751 10.088 11.6141C10.0935 11.5751 10.1031 11.5258 10.1168 11.4664C10.1315 11.407 10.1456 11.3506 10.1594 11.2974C10.174 11.2433 10.1845 11.206 10.1909 11.1856L10.5708 10.0279H11Z\" fill=\"white\"/>\r\n<rect x=\"5\" y=\"7\" width=\"3\" height=\"1\" rx=\"0.2\" fill=\"#CCCCCC\"/>\r\n<rect x=\"5\" y=\"5\" width=\"3\" height=\"1\" rx=\"0.2\" fill=\"#CCCCCC\"/>\r\n<rect x=\"9\" y=\"7\" width=\"3\" height=\"1\" rx=\"0.2\" fill=\"#CCCCCC\"/>\r\n<rect x=\"9\" y=\"5\" width=\"3\" height=\"1\" rx=\"0.2\" fill=\"#CCCCCC\"/>\r\n</svg>\r\n\r\n <!-- TEXT -->\r\n <!-- <svg *ngSwitchCase=\"'text'\" xmlns=\"http://www.w3.org/2000/svg\" width=\"48\" height=\"48\" viewBox=\"0 0 48 48\" fill=\"none\">\r\n <rect x=\"8\" y=\"6\" width=\"28\" height=\"36\" rx=\"3\" stroke=\"#3b82f6\" stroke-width=\"2\"/>\r\n <path d=\"M28 6v8a2 2 0 0 0 2 2h6\" stroke=\"#3b82f6\" stroke-width=\"2\"/>\r\n <path d=\"M14 24h20M14 29h20M14 34h12\" stroke=\"#3b82f6\" stroke-width=\"2\" stroke-linecap=\"round\"/>\r\n </svg> -->\r\n <!-- <svg width=\"180px\" height=\"180px\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n<path d=\"M11.1757 1.17574C11.0632 1.06321 10.9106 1 10.7515 1H3.6C3.26863 1 3 1.26863 3 1.6V14.4C3 14.7314 3.26863 15 3.6 15H13.4C13.7314 15 14 14.7314 14 14.4V4.24853C14 4.0894 13.9368 3.93679 13.8243 3.82426L11.1757 1.17574Z\" fill=\"#F4F4F4\"/>\r\n<path d=\"M15 12.7C15 12.8657 14.8657 13 14.7 13H2.3C2.13431 13 2 12.8657 2 12.7V9.3C2 9.13431 2.13431 9 2.3 9H14.7C14.8657 9 15 9.13431 15 9.3V12.7Z\" fill=\"#DD2025\"/>\r\n<path d=\"M11 1L12.5 2.5L14 4H11.2C11.0895 4 11 3.91046 11 3.8V1Z\" fill=\"#D9D9D9\"/>\r\n<path d=\"M6.6084 9.96038C6.87161 9.96038 7.06366 10.0171 7.18457 10.1306C7.30548 10.2431 7.36593 10.3984 7.36593 10.5965C7.36593 10.6858 7.35245 10.7714 7.32547 10.8532C7.2985 10.9342 7.25432 11.0062 7.19294 11.0695C7.13249 11.1327 7.05157 11.1829 6.9502 11.2201C6.84882 11.2564 6.72373 11.2746 6.57492 11.2746H6.38937V12H5.95689V9.96038H6.6084ZM6.58608 10.3147H6.38937V10.9202H6.53167C6.61258 10.9202 6.6828 10.9095 6.74233 10.8881C6.80185 10.8667 6.84789 10.8332 6.88044 10.7877C6.91299 10.7421 6.92927 10.6835 6.92927 10.6119C6.92927 10.5114 6.90137 10.437 6.84556 10.3887C6.78976 10.3394 6.70326 10.3147 6.58608 10.3147ZM9.44322 10.9607C9.44322 11.1904 9.39904 11.3824 9.31069 11.5368C9.22326 11.6903 9.09631 11.8061 8.92983 11.8842C8.76335 11.9614 8.56292 12 8.32854 12H7.75098V9.96038H8.39132C8.60524 9.96038 8.79078 9.99851 8.94796 10.0748C9.10514 10.1501 9.22698 10.2622 9.31348 10.411C9.39997 10.5589 9.44322 10.7421 9.44322 10.9607ZM8.994 10.9718C8.994 10.8211 8.97168 10.6975 8.92704 10.6007C8.88332 10.5031 8.81822 10.431 8.73172 10.3845C8.64616 10.338 8.54013 10.3147 8.41364 10.3147H8.18345V11.6429H8.369C8.58012 11.6429 8.73684 11.5866 8.83915 11.4741C8.94238 11.3615 8.994 11.1941 8.994 10.9718ZM10.2914 12H9.86593V9.96038H11.035V10.3147H10.2914V10.8407H10.9834V11.1936H10.2914V12Z\" fill=\"white\"/>\r\n<rect x=\"5\" y=\"5\" width=\"7\" height=\"0.5\" rx=\"0.25\" fill=\"#CCCCCC\"/>\r\n<rect x=\"5\" y=\"6\" width=\"7\" height=\"0.5\" rx=\"0.25\" fill=\"#CCCCCC\"/>\r\n<rect x=\"5\" y=\"7\" width=\"7\" height=\"0.5\" rx=\"0.25\" fill=\"#CCCCCC\"/>\r\n</svg> -->\r\n\r\n<svg *ngSwitchCase=\"'text'\" width=\"180px\" height=\"180px\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n<path d=\"M11.1757 1.17574C11.0632 1.06321 10.9106 1 10.7515 1H3.6C3.26863 1 3 1.26863 3 1.6V14.4C3 14.7314 3.26863 15 3.6 15H13.4C13.7314 15 14 14.7314 14 14.4V4.24853C14 4.0894 13.9368 3.93679 13.8243 3.82426L11.1757 1.17574Z\" fill=\"#F4F4F4\"/>\r\n<path d=\"M15 12.7C15 12.8657 14.8657 13 14.7 13H2.3C2.13431 13 2 12.8657 2 12.7V9.3C2 9.13431 2.13431 9 2.3 9H14.7C14.8657 9 15 9.13431 15 9.3V12.7Z\" fill=\"#1F5EBB\"/>\r\n<path d=\"M11 1L12.5 2.5L14 4H11.2C11.0895 4 11 3.91046 11 3.8V1Z\" fill=\"#D9D9D9\"/>\r\n<path d=\"M7.04353 12H6.61105V10.3203H6.0572V9.96038H7.59738V10.3203H7.04353V12ZM9.56027 12H9.06641L8.59208 11.2285L8.11775 12H7.65458L8.33119 10.9481L7.69782 9.96038H8.17494L8.6144 10.6942L9.04548 9.96038H9.51144L8.87109 10.9718L9.56027 12ZM10.6038 12H10.1713V10.3203H9.61747V9.96038H11.1576V10.3203H10.6038V12Z\" fill=\"white\"/>\r\n<rect x=\"5\" y=\"5\" width=\"7\" height=\"0.5\" rx=\"0.25\" fill=\"#CCCCCC\"/>\r\n<rect x=\"5\" y=\"6\" width=\"7\" height=\"0.5\" rx=\"0.25\" fill=\"#CCCCCC\"/>\r\n<rect x=\"5\" y=\"7\" width=\"7\" height=\"0.5\" rx=\"0.25\" fill=\"#CCCCCC\"/>\r\n</svg>\r\n\r\n\r\n <!-- Generic -->\r\n <!-- <svg *ngSwitchDefault xmlns=\"http://www.w3.org/2000/svg\" width=\"48\" height=\"48\" viewBox=\"0 0 48 48\" fill=\"none\">\r\n <rect x=\"8\" y=\"6\" width=\"28\" height=\"36\" rx=\"3\" stroke=\"#9ca3af\" stroke-width=\"2\"/>\r\n <path d=\"M28 6v8a2 2 0 0 0 2 2h6\" stroke=\"#9ca3af\" stroke-width=\"2\"/>\r\n <path d=\"M16 30h16\" stroke=\"#9ca3af\" stroke-width=\"2\" stroke-linecap=\"round\"/>\r\n </svg> -->\r\n <svg *ngSwitchDefault width=\"180px\" height=\"180px\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n<path d=\"M11.1757 1.17574C11.0632 1.06321 10.9106 1 10.7515 1H3.6C3.26863 1 3 1.26863 3 1.6V14.4C3 14.7314 3.26863 15 3.6 15H13.4C13.7314 15 14 14.7314 14 14.4V4.24853C14 4.0894 13.9368 3.93679 13.8243 3.82426L11.1757 1.17574Z\" fill=\"#F4F4F4\"/>\r\n<path d=\"M15 12.7C15 12.8657 14.8657 13 14.7 13H2.3C2.13431 13 2 12.8657 2 12.7V9.3C2 9.13431 2.13431 9 2.3 9H14.7C14.8657 9 15 9.13431 15 9.3V12.7Z\" fill=\"#DD2025\"/>\r\n<path d=\"M11 1L12.5 2.5L14 4H11.2C11.0895 4 11 3.91046 11 3.8V1Z\" fill=\"#D9D9D9\"/>\r\n<path d=\"M6.6084 9.96038C6.87161 9.96038 7.06366 10.0171 7.18457 10.1306C7.30548 10.2431 7.36593 10.3984 7.36593 10.5965C7.36593 10.6858 7.35245 10.7714 7.32547 10.8532C7.2985 10.9342 7.25432 11.0062 7.19294 11.0695C7.13249 11.1327 7.05157 11.1829 6.9502 11.2201C6.84882 11.2564 6.72373 11.2746 6.57492 11.2746H6.38937V12H5.95689V9.96038H6.6084ZM6.58608 10.3147H6.38937V10.9202H6.53167C6.61258 10.9202 6.6828 10.9095 6.74233 10.8881C6.80185 10.8667 6.84789 10.8332 6.88044 10.7877C6.91299 10.7421 6.92927 10.6835 6.92927 10.6119C6.92927 10.5114 6.90137 10.437 6.84556 10.3887C6.78976 10.3394 6.70326 10.3147 6.58608 10.3147ZM9.44322 10.9607C9.44322 11.1904 9.39904 11.3824 9.31069 11.5368C9.22326 11.6903 9.09631 11.8061 8.92983 11.8842C8.76335 11.9614 8.56292 12 8.32854 12H7.75098V9.96038H8.39132C8.60524 9.96038 8.79078 9.99851 8.94796 10.0748C9.10514 10.1501 9.22698 10.2622 9.31348 10.411C9.39997 10.5589 9.44322 10.7421 9.44322 10.9607ZM8.994 10.9718C8.994 10.8211 8.97168 10.6975 8.92704 10.6007C8.88332 10.5031 8.81822 10.431 8.73172 10.3845C8.64616 10.338 8.54013 10.3147 8.41364 10.3147H8.18345V11.6429H8.369C8.58012 11.6429 8.73684 11.5866 8.83915 11.4741C8.94238 11.3615 8.994 11.1941 8.994 10.9718ZM10.2914 12H9.86593V9.96038H11.035V10.3147H10.2914V10.8407H10.9834V11.1936H10.2914V12Z\" fill=\"white\"/>\r\n<rect x=\"5\" y=\"5\" width=\"7\" height=\"0.5\" rx=\"0.25\" fill=\"#CCCCCC\"/>\r\n<rect x=\"5\" y=\"6\" width=\"7\" height=\"0.5\" rx=\"0.25\" fill=\"#CCCCCC\"/>\r\n<rect x=\"5\" y=\"7\" width=\"7\" height=\"0.5\" rx=\"0.25\" fill=\"#CCCCCC\"/>\r\n</svg>\r\n </ng-container>\r\n </div>\r\n </ng-template>\r\n </div>\r\n\r\n <!-- Metadata on right -->\r\n <div class=\"flex flex-col flex-1 ml-4\">\r\n <!-- Title -->\r\n <div class=\"input-container\">\r\n <label class=\"font-semibold text-sm mb-1 input-title\">Title</label>\r\n <input [(ngModel)]=\"file.title\"\r\n name=\"title{{i}}\"\r\n (ngModelChange)=\"onMetaChange()\"\r\n placeholder=\"Enter title\"\r\n class=\"border border-orange-300 rounded px-3 py-2 mb-3 w-full outline-none focus:ring focus:ring-orange-200\" />\r\n\r\n </div>\r\n <!-- Notes -->\r\n <div class=\"input-container\">\r\n <label class=\"font-semibold text-sm mb-1 input-title\">Notes</label>\r\n <textarea [(ngModel)]=\"file.notes\"\r\n name=\"notes{{i}}\"\r\n (ngModelChange)=\"onMetaChange()\"\r\n placeholder=\"Enter notes\"\r\n class=\"border border-orange-300 rounded px-3 py-2 mb-3 w-full outline-none focus:ring focus:ring-orange-200\"\r\n rows=\"2\"></textarea>\r\n\r\n </div>\r\n <!-- Category -->\r\n <div class=\"input-container\">\r\n <label class=\"font-semibold text-sm mb-1 input-title\">Category</label>\r\n <select [(ngModel)]=\"file.category\"\r\n name=\"category{{i}}\"\r\n (ngModelChange)=\"onMetaChange()\"\r\n class=\"border border-orange-300 rounded px-3 py-2 w-full outline-none focus:ring focus:ring-orange-200\">\r\n <option value=\"\">Select Category</option>\r\n <option *ngFor=\"let c of categories\" [ngValue]=\"c\">{{ c }}</option>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n</div>\r\n\r\n\r\n\r\n </div>\r\n</fx-component>", styles: [".custom-upload{border:1px solid #ccc}.custom-upload a{color:#fff}.custom-upload .file-list .file-thumbnail{width:234px;height:171px;border:1px solid #ccc;background-color:#fff;padding:4px}.custom-upload .separator{height:56px;width:2px;background-color:#ccc;margin:10px}.custom-upload .upload{background-color:#999;padding:2px 12px 2px 6px;border-radius:4px;margin-left:40px}.close_icon{position:absolute;top:-8px;right:-8px}[type=checkbox]{padding:12px}[type=checkbox]:checked{background-color:#f3a041!important;padding:12px;background-size:1em 1em!important}.gap-8{gap:8px}.input-title{position:absolute;bottom:auto;right:auto;left:1rem;top:-9px;padding:0rem .25rem;font-weight:600;border-radius:.25rem;z-index:1;color:#454545;background-color:#fff}.input-container{position:relative;inset:auto;z-index:auto}\n"] }]
|
|
452
474
|
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.FxBuilderWrapperService }] });
|
|
453
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZngtYnVpbGRlci13cmFwcGVyL3NyYy9saWIvY29tcG9uZW50cy91cGxvYWRlci91cGxvYWRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9meC1idWlsZGVyLXdyYXBwZXIvc3JjL2xpYi9jb21wb25lbnRzL3VwbG9hZGVyL3VwbG9hZGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFvQyxTQUFTLEVBQUUsTUFBTSxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUN2RyxPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBc0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRyxPQUFPLEVBQUUsZUFBZSxFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQWEsZUFBZSxFQUFnQixrQkFBa0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRWxKLE9BQU8sRUFBNkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNyRSxPQUFPLEVBQUUsRUFBRSxJQUFJLE1BQU0sRUFBQyxNQUFNLE1BQU0sQ0FBQzs7Ozs7QUFTbkMsTUFBTSxPQUFPLGlCQUFrQixTQUFRLGVBQWU7SUFnQmhDO0lBQStCO0lBZm5ELHVEQUF1RDtJQUNoRCxpQkFBaUIsR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO0lBQ3RDLGFBQWEsR0FBZSxFQUFFLENBQUM7SUFDL0IsYUFBYSxHQUFRO1FBQzFCLGFBQWEsRUFBRSxFQUFFO1FBQ2pCLFlBQVksRUFBRSxFQUFFO0tBQ2pCLENBQUM7SUFDRixVQUFVLEdBQUc7UUFDWCxhQUFhO1FBQ2IsV0FBVztRQUNYLFFBQVE7UUFDUixTQUFTO0tBQ1YsQ0FBQztJQUNNLFFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBVyxDQUFDO0lBQ2xDLElBQUksR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDbEMsWUFBb0IsR0FBc0IsRUFBUyx1QkFBZ0Q7UUFDakcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBRFEsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFBUyw0QkFBdUIsR0FBdkIsdUJBQXVCLENBQXlCO1FBRWpHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFDLEVBQUU7WUFDOUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUN6QyxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFNRCxjQUFjLEdBQStELEVBQUUsQ0FBQztJQUNoRixZQUFZLEdBQVUsRUFBRSxDQUFDO0lBQ3pCLDRCQUE0QjtJQUM1Qiw0Q0FBNEM7SUFDNUMsc0NBQXNDO0lBQ3RDLHVDQUF1QztJQUN2QyxnQ0FBZ0M7SUFFaEMsK0RBQStEO0lBRS9ELGdFQUFnRTtJQUNoRSxrRUFBa0U7SUFDbEUsd0NBQXdDO0lBQ3hDLFlBQVk7SUFDWixVQUFVO0lBRVYsMkVBQTJFO0lBQzNFLHlEQUF5RDtJQUV6RCwwQ0FBMEM7SUFDMUMsdUJBQXVCO0lBQ3ZCLGdGQUFnRjtJQUNoRiwrREFBK0Q7SUFDL0QsaUJBQWlCO0lBQ2pCLHlDQUF5QztJQUN6QyxjQUFjO0lBQ2QsY0FBYztJQUVkLHFDQUFxQztJQUNyQywrQ0FBK0M7SUFDL0MsK0NBQStDO0lBQy9DLDhFQUE4RTtJQUM5RSwwQkFBMEI7SUFDMUIsNkJBQTZCO0lBQzdCLHFCQUFxQjtJQUNyQixpRUFBaUU7SUFDakUsZ0ZBQWdGO0lBQ2hGLGlCQUFpQjtJQUNqQixnQ0FBZ0M7SUFDaEMsa0ZBQWtGO0lBQ2xGLGdCQUFnQjtJQUNoQixnQkFBZ0I7SUFDaEIsWUFBWTtJQUNaLFVBQVU7SUFDVixVQUFVO0lBQ1YsSUFBSTtJQUVKLHFCQUFxQjtJQUNyQiw0Q0FBNEM7SUFDNUMsc0NBQXNDO0lBQ3RDLHVDQUF1QztJQUN2QyxnQ0FBZ0M7SUFFaEMsK0RBQStEO0lBRS9ELGdFQUFnRTtJQUNoRSxrRUFBa0U7SUFDbEUsd0NBQXdDO0lBQ3hDLFlBQVk7SUFDWixVQUFVO0lBRVYsMkVBQTJFO0lBQzNFLDBGQUEwRjtJQUUxRiwwQ0FBMEM7SUFDMUMsdUJBQXVCO0lBQ3ZCLGdGQUFnRjtJQUNoRix1Q0FBdUM7SUFDdkMseUVBQXlFO0lBQ3pFLG1DQUFtQztJQUNuQyxvQkFBb0I7SUFDcEIsaUJBQWlCO0lBQ2pCLHlDQUF5QztJQUN6QyxjQUFjO0lBQ2QsY0FBYztJQUVkLHFDQUFxQztJQUNyQywrQ0FBK0M7SUFDL0MscUNBQXFDO0lBQ3JDLDJEQUEyRDtJQUMzRCxnQ0FBZ0M7SUFDaEMsOEJBQThCO0lBQzlCLGlEQUFpRDtJQUNqRCxzQ0FBc0M7SUFDdEMscUJBQXFCO0lBRXJCLDRFQUE0RTtJQUM1RSxxRUFBcUU7SUFDckUsaUJBQWlCO0lBQ2pCLGdDQUFnQztJQUNoQyxrRkFBa0Y7SUFDbEYsZ0JBQWdCO0lBQ2hCLGdCQUFnQjtJQUNoQixZQUFZO0lBQ1osVUFBVTtJQUNWLFVBQVU7SUFDVixJQUFJO0lBRU4sdUJBQXVCO0lBQ3ZCLDhDQUE4QztJQUM5Qyx3Q0FBd0M7SUFDeEMseUNBQXlDO0lBQ3pDLGtDQUFrQztJQUVsQyxvRUFBb0U7SUFFcEUsc0VBQXNFO0lBQ3RFLGtFQUFrRTtJQUNsRSxvRUFBb0U7SUFDcEUsNkNBQTZDO0lBQzdDLGNBQWM7SUFDZCxZQUFZO0lBRVosZ0ZBQWdGO0lBQ2hGLHlIQUF5SDtJQUV6SCxtREFBbUQ7SUFDbkQsb0NBQW9DO0lBQ3BDLDBHQUEwRztJQUMxRyw0Q0FBNEM7SUFDNUMseUVBQXlFO0lBQ3pFLDJGQUEyRjtJQUMzRix5QkFBeUI7SUFDekIsc0JBQXNCO0lBQ3RCLDhDQUE4QztJQUM5QyxtQkFBbUI7SUFDbkIsbUJBQW1CO0lBRW5CLHVIQUF1SDtJQUV2SCx1Q0FBdUM7SUFDdkMsdUJBQXVCO0lBQ3ZCLDZGQUE2RjtJQUM3RiwrQkFBK0I7SUFDL0IsNERBQTREO0lBQzVELHNFQUFzRTtJQUN0RSwyRUFBMkU7SUFDM0UsMENBQTBDO0lBQzFDLFlBQVk7SUFDWixTQUFTO0lBQ1QsaUNBQWlDO0lBQ2pDLE1BQU07SUFDTixNQUFNO0lBR04sMkNBQTJDO0lBQzNDLGlEQUFpRDtJQUNqRCx1Q0FBdUM7SUFDdkMsNkRBQTZEO0lBQzdELGtDQUFrQztJQUNsQyxnQ0FBZ0M7SUFDaEMsbURBQW1EO0lBQ25ELHlDQUF5QztJQUN6Qyx1Q0FBdUM7SUFDdkMsOEJBQThCO0lBQzlCLHVCQUF1QjtJQUV2Qiw4RUFBOEU7SUFDOUUseUVBQXlFO0lBQ3pFLHVFQUF1RTtJQUN2RSxtQkFBbUI7SUFDbkIsa0NBQWtDO0lBQ2xDLG9GQUFvRjtJQUNwRixrQkFBa0I7SUFDbEIsa0JBQWtCO0lBQ2xCLGNBQWM7SUFDZCxZQUFZO0lBQ1osWUFBWTtJQUNaLE1BQU07SUFFSixxQkFBcUI7SUFDckIsNENBQTRDO0lBQzVDLHNDQUFzQztJQUN0Qyx1Q0FBdUM7SUFDdkMsZ0NBQWdDO0lBRWhDLHdHQUF3RztJQUV4Ryw4RUFBOEU7SUFDOUUsMEZBQTBGO0lBRTFGLDJDQUEyQztJQUMzQyxzREFBc0Q7SUFDdEQsK0JBQStCO0lBQy9CLHdGQUF3RjtJQUN4Rix1Q0FBdUM7SUFDdkMsb0VBQW9FO0lBQ3BFLDhCQUE4QjtJQUM5QixvQkFBb0I7SUFDcEIsaUJBQWlCO0lBQ2pCLHlDQUF5QztJQUN6QyxjQUFjO0lBQ2QsY0FBYztJQUVkLHlDQUF5QztJQUN6QywrQ0FBK0M7SUFDL0MscUNBQXFDO0lBQ3JDLDJEQUEyRDtJQUMzRCxnQ0FBZ0M7SUFDaEMsOEJBQThCO0lBQzlCLGlEQUFpRDtJQUNqRCxzQ0FBc0M7SUFDdEMscUJBQXFCO0lBRXJCLDRFQUE0RTtJQUM1RSx1RUFBdUU7SUFDdkUscUVBQXFFO0lBQ3JFLGlCQUFpQjtJQUNqQixnQ0FBZ0M7SUFDaEMsa0ZBQWtGO0lBQ2xGLGdCQUFnQjtJQUNoQixnQkFBZ0I7SUFDaEIsWUFBWTtJQUNaLFVBQVU7SUFDVixVQUFVO0lBQ1YsSUFBSTtJQUdKLHdDQUF3QztJQUN4QyxvREFBb0Q7SUFDcEQsdUJBQXVCO0lBQ3ZCLHNEQUFzRDtJQUN0RCxxQ0FBcUM7SUFDckMseUNBQXlDO0lBQ3pDLCtCQUErQjtJQUMvQixvQ0FBb0M7SUFDcEMsd0JBQXdCO0lBQ3hCLHNDQUFzQztJQUN0Qyw4QkFBOEI7SUFDOUIseUJBQXlCO0lBQ3pCLGFBQWE7SUFDYiwrREFBK0Q7SUFDL0QsK0NBQStDO0lBQy9DLFVBQVU7SUFDVixvQ0FBb0M7SUFDcEMsUUFBUTtJQUNSLE1BQU07SUFDTixJQUFJO0lBRUosaUNBQWlDO0lBQ2pDLG9EQUFvRDtJQUNwRCx1QkFBdUI7SUFDdkIscURBQXFEO0lBQ3JELHFDQUFxQztJQUNyQyx5Q0FBeUM7SUFFekMsK0JBQStCO0lBQy9CLDRCQUE0QjtJQUM1QiwwQkFBMEI7SUFDMUIsd0JBQXdCO0lBQ3hCLCtCQUErQjtJQUMvQixzQ0FBc0M7SUFDdEMsNkJBQTZCO0lBQzdCLHVCQUF1QjtJQUN2Qix1QkFBdUI7SUFDdkIsMEJBQTBCO0lBQzFCLDZDQUE2QztJQUM3QyxhQUFhO0lBRWIsNENBQTRDO0lBQzVDLGlFQUFpRTtJQUNqRSwrREFBK0Q7SUFDL0QsV0FBVztJQUVYLG9DQUFvQztJQUNwQyxRQUFRO0lBQ1IsTUFBTTtJQUNOLElBQUk7SUFFTix1QkFBdUI7SUFDdkIsNENBQTRDO0lBQzVDLHNDQUFzQztJQUN0Qyx1Q0FBdUM7SUFDdkMsZ0NBQWdDO0lBRWhDLCtEQUErRDtJQUcvRCxnRUFBZ0U7SUFDaEUsa0VBQWtFO0lBQ2xFLDJDQUEyQztJQUMzQyxZQUFZO0lBQ1osVUFBVTtJQUVWLDhFQUE4RTtJQUM5RSxpQ0FBaUM7SUFDakMsa0RBQWtEO0lBQ2xELHFDQUFxQztJQUNyQyxxR0FBcUc7SUFFckcsdUJBQXVCO0lBQ3ZCLDhCQUE4QjtJQUM5QixxREFBcUQ7SUFDckQsc0RBQXNEO0lBQ3RELDJGQUEyRjtJQUMzRiwyQ0FBMkM7SUFDM0MsNkNBQTZDO0lBQzdDLDZDQUE2QztJQUM3QyxtREFBbUQ7SUFDbkQscURBQXFEO0lBQ3JELGlCQUFpQjtJQUNqQixnQkFBZ0I7SUFFaEIsc0NBQXNDO0lBQ3RDLHdFQUF3RTtJQUN4RSxtRUFBbUU7SUFDbkUsaUVBQWlFO0lBQ2pFLFlBQVk7SUFDWixVQUFVO0lBQ1YsVUFBVTtJQUNWLElBQUk7SUFFSixRQUFRO1FBQ04sSUFBSSxDQUFDLHVCQUF1QixDQUFDLFVBQVU7YUFDcEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDOUIsU0FBUyxDQUFDLENBQUMsU0FBYyxFQUFFLEVBQUU7WUFDNUIsSUFBSSxDQUFDLFNBQVM7Z0JBQUUsT0FBTztZQUV2QixNQUFNLGdCQUFnQixHQUE2QixFQUFFLENBQUM7WUFHekQsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztnQkFDeEQsSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFLLEtBQWEsRUFBRSxhQUFhLEVBQUUsQ0FBQztvQkFDOUQsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEdBQUksS0FBYSxDQUFDLGFBQWEsQ0FBQztnQkFDdkQsQ0FBQztZQUNILENBQUM7WUFFSyxLQUFLLE1BQU0sQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUM7Z0JBQ3BFLE1BQU0sU0FBUyxHQUFHLEtBQUs7cUJBQ3BCLE1BQU0sQ0FBQyxDQUFDLE9BQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztxQkFDbkMsR0FBRyxDQUFDLENBQUMsT0FBWSxFQUFFLEVBQUU7b0JBQ3BCLE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUM7b0JBQzNDLE1BQU0sUUFBUSxHQUFHLGNBQWMsRUFBRSxRQUFRLElBQUksRUFBRSxDQUFDO29CQUNoRCxNQUFNLE9BQU8sR0FBRyxjQUFjLEVBQUUsT0FBTyxJQUFJLEVBQUUsQ0FBQztvQkFDOUMsTUFBTSxVQUFVLEdBQUcsY0FBYyxFQUFFLFVBQVUsQ0FBQztvQkFDOUMsTUFBTSxJQUFJLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FBQztvQkFFM0Isc0NBQXNDO29CQUN0QyxvRUFBb0U7b0JBRXBFLE9BQU87d0JBQ0wsRUFBRSxFQUFFLE1BQU0sRUFBRTt3QkFDWixJQUFJLEVBQUUsSUFBSSxFQUF5QixnQkFBZ0I7d0JBQ25ELFdBQVcsRUFBRSxjQUFjLEVBQVEsb0JBQW9CO3dCQUN2RCxNQUFNLEVBQUUsSUFBSSxLQUFLLE9BQU87NEJBQ3RCLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFRLHlDQUF5Qzs0QkFDL0QsQ0FBQyxDQUFDLElBQUk7d0JBQ1IsSUFBSSxFQUFFLFFBQVE7d0JBQ2QsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLElBQUksRUFBRTt3QkFDM0IsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLElBQUksRUFBRTt3QkFDM0IsUUFBUSxFQUFFLE9BQU8sRUFBRSxRQUFRLElBQUksRUFBRTt3QkFDakMsSUFBSSxFQUFFLElBQUksRUFBcUIsZ0JBQWdCO3FCQUNoRCxDQUFDO2dCQUNKLENBQUMsQ0FBQyxDQUFDO2dCQUVMLElBQUksU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztvQkFDekIsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxHQUFHLFNBQVMsQ0FBQyxDQUFDO29CQUMzRCxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO29CQUN0RCxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDdEQsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFJQyxjQUFjLENBQUMsS0FBWTtRQUMzQixNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBMEIsQ0FBQztRQUMvQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUs7WUFBRSxPQUFPO1FBRXpCLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNyQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRTNDLE1BQU0sT0FBTyxHQUFRO2dCQUNuQixFQUFFLEVBQUUsTUFBTSxFQUFFO2dCQUNaLElBQUksRUFBRSxJQUFJO2dCQUNWLFdBQVcsRUFBRSxJQUFJO2dCQUNqQixNQUFNLEVBQUUsSUFBSSxFQUFXLGlDQUFpQztnQkFDeEQsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO2dCQUNmLEtBQUssRUFBRSxFQUFFO2dCQUNULEtBQUssRUFBRSxFQUFFO2dCQUNULFFBQVEsRUFBRSxFQUFFO2dCQUNaLElBQUksRUFBRSxRQUFRLEVBQVMseUJBQXlCO2FBQ2pELENBQUM7WUFFRixJQUFJLFFBQVEsS0FBSyxPQUFPLEVBQUUsQ0FBQztnQkFDekIsTUFBTSxNQUFNLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQztnQkFDaEMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsRUFBRTtvQkFDbEIsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQztvQkFDbEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBQ2pDLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7b0JBQ3RELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUN0RCxDQUFDLENBQUM7Z0JBQ0YsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLDJCQUEyQjtZQUN6RCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sNEJBQTRCO2dCQUM1QixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDakMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztnQkFDdEQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDdEQsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUdDLFlBQVk7UUFDVixJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO1FBQ3RELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFHRCx3Q0FBd0M7SUFDeEMsNkVBQTZFO0lBQzdFLElBQUk7SUFFSixvQ0FBb0M7SUFDcEMsK0RBQStEO0lBRS9ELHVCQUF1QjtJQUN2QiwyQ0FBMkM7SUFDM0MsNkJBQTZCO0lBQzdCLCtCQUErQjtJQUMvQixnREFBZ0Q7SUFDaEQsNkNBQTZDO0lBQzdDLFNBQVM7SUFDVCwyREFBMkQ7SUFDM0QsTUFBTTtJQUNOLElBQUk7SUFFSixVQUFVLENBQUMsS0FBYTtRQUN0QixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLFdBQVc7WUFBRSxPQUFPO1FBRXpCLDBEQUEwRDtRQUMxRCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLElBQUksRUFBRSxhQUFhLEVBQUUsRUFBRSxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsQ0FBQztRQUVuRixpREFBaUQ7UUFDakQsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxXQUFXLENBQUMsQ0FBQztRQUV4RCxtRUFBbUU7UUFDbkUsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQztRQUV0RSx1QkFBdUI7UUFDdkIsSUFBSSxDQUFDLGFBQWEsR0FBRztZQUNuQixHQUFHLElBQUksQ0FBQyxhQUFhO1lBQ3JCLGFBQWEsRUFBRSxJQUFJLENBQUMsYUFBYTtZQUNqQyxZQUFZLEVBQUUsSUFBSSxDQUFDLFlBQVk7U0FDaEMsQ0FBQztRQUVGLHlDQUF5QztRQUN6QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBSVMsUUFBUTtRQUNoQixPQUFPO1lBQ0wsSUFBSSxlQUFlLENBQUMsRUFBRSxHQUFHLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBQyxDQUFDO1lBQ3ZGLElBQUksZUFBZSxDQUFDLEVBQUMsR0FBRyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sRUFBRSxpQkFBaUIsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFDLEVBQUUsQ0FBQyxFQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBQyxFQUFFLEVBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQztTQUM3SixDQUFDO0lBQ0osQ0FBQztJQUVTLFdBQVc7UUFDbkIsT0FBTyxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFQyxjQUFjLENBQUMsSUFBVTtRQUN6QixNQUFNLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDN0MsTUFBTSxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBRTdDLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxrQ0FBa0MsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQUUsT0FBTyxPQUFPLENBQUM7UUFDL0YsSUFBSSxJQUFJLEtBQUssVUFBVSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDL0QsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLHdDQUF3QyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7WUFBRSxPQUFPLE1BQU0sQ0FBQztRQUNuRyxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO3dHQXBmVSxpQkFBaUI7NEZBQWpCLGlCQUFpQiw4RkNoQjlCLDJtZ0JBeVBlLGloQkQ3T0gsWUFBWSw0Z0JBQUUsV0FBVyw0RUFBRSxXQUFXLHlnQ0FBRSxtQkFBbUI7OzRGQUkxRCxpQkFBaUI7a0JBUDdCLFNBQVM7K0JBQ0UsYUFBYSxjQUNYLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgaW5qZWN0LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIFVudHlwZWRGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgRnhCYXNlQ29tcG9uZW50LCBGeENvbXBvbmVudCwgRnhTZWxlY3RTZXR0aW5nLCBGeFNldHRpbmcsIEZ4U3RyaW5nU2V0dGluZywgRnhWYWxpZGF0aW9uLCBGeFZhbGlkYXRvclNlcnZpY2UgfSBmcm9tICdAaW5zdGFudHN5cy1sYWJzL2Z4JztcclxuaW1wb3J0IHsgRnhCdWlsZGVyV3JhcHBlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9meC1idWlsZGVyLXdyYXBwZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IGZvcmtKb2luLCBtYXAsIE9ic2VydmFibGUsIFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyB2NCBhcyB1dWlkdjR9IGZyb20gJ3V1aWQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdmeC11cGxvYWRlcicsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBGeENvbXBvbmVudCwgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGVdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi91cGxvYWRlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL3VwbG9hZGVyLmNvbXBvbmVudC5jc3MnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBVcGxvYWRlckNvbXBvbmVudCBleHRlbmRzIEZ4QmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdHtcclxuICAvLyBwdWJsaWMgdXBsb2FkRmlsZUNvbnRyb2wgPSBuZXcgVW50eXBlZEZvcm1Db250cm9sKCk7XHJcbiAgcHVibGljIHVwbG9hZEZpbGVDb250cm9sID0gbmV3IEZvcm1Db250cm9sKCk7XHJcbiAgcHVibGljIHVwbG9hZGVkRmlsZXM6IEFycmF5PGFueT4gPSBbXTtcclxuICBwdWJsaWMgZm9ybWF0dGVkRGF0YTogYW55ID0ge1xyXG4gICAgdXBsb2FkZWRGaWxlczogW10sXHJcbiAgICBkZWxldGVkRmlsZXM6IFtdXHJcbiAgfTtcclxuICBjYXRlZ29yaWVzID0gW1xyXG4gICAgJ09yYWwgSW1hZ2VzJyxcclxuICAgICdQYXN0IERvY3MnLFxyXG4gICAgJ1gtUmF5cycsXHJcbiAgICAnUHJvZmlsZScsXHJcbiAgXTtcclxuICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8Qm9vbGVhbj4oKTtcclxuICBwcml2YXRlIGh0dHAgPSBpbmplY3QoSHR0cENsaWVudCk7XHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLHByaXZhdGUgZnhCdWlsZGVyV3JhcHBlclNlcnZpY2U6IEZ4QnVpbGRlcldyYXBwZXJTZXJ2aWNlKSB7XHJcbiAgICBzdXBlcihjZHIpXHJcbiAgICB0aGlzLm9uSW5pdC5zdWJzY3JpYmUoKGZ4RGF0YSk9PntcclxuICAgICAgdGhpcy5fcmVnaXN0ZXIodGhpcy51cGxvYWRGaWxlQ29udHJvbCk7XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcblxyXG5cclxuXHJcblxyXG4gIHVwbG9hZGVkSW1hZ2VzOiB7IFtrZXk6IHN0cmluZ106IHsgcmVzdWx0OiBzdHJpbmcsIGZpbGU6IEZpbGUgfCBudWxsIH1bXSB9ID0ge307XHJcbiAgZGVsZXRlZEZpbGVzOiBhbnlbXSA9IFtdO1xyXG4gIC8vIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAvLyAgIHRoaXMuZnhCdWlsZGVyV3JhcHBlclNlcnZpY2UudmFyaWFibGVzJFxyXG4gIC8vICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgLy8gICAgIC5zdWJzY3JpYmUoKHZhcmlhYmxlczogYW55KSA9PiB7XHJcbiAgLy8gICAgICAgaWYgKCF2YXJpYWJsZXMpIHJldHVybjtcclxuICBcclxuICAvLyAgICAgICBjb25zdCB1cGxvYWRlZEZpbGVzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZ1tdIH0gPSB7fTtcclxuICBcclxuICAvLyAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh2YXJpYWJsZXMpKSB7XHJcbiAgLy8gICAgICAgICBpZiAoa2V5LmluY2x1ZGVzKCd1cGxvYWRlcicpICYmIEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XHJcbiAgLy8gICAgICAgICAgIHVwbG9hZGVkRmlsZXNba2V5XSA9IHZhbHVlO1xyXG4gIC8vICAgICAgICAgfVxyXG4gIC8vICAgICAgIH1cclxuICBcclxuICAvLyAgICAgICBmb3IgKGNvbnN0IFt1cGxvYWRlcktleSwgdXJsc10gb2YgT2JqZWN0LmVudHJpZXModXBsb2FkZWRGaWxlcykpIHtcclxuICAvLyAgICAgICAgIGNvbnN0IGltYWdlRmV0Y2hlczogT2JzZXJ2YWJsZTxzdHJpbmc+W10gPSBbXTtcclxuICBcclxuICAvLyAgICAgICAgIHVybHMuZm9yRWFjaCgodXJsOiBzdHJpbmcpID0+IHtcclxuICAvLyAgICAgICAgICAgaWYgKHVybCkge1xyXG4gIC8vICAgICAgICAgICAgIGNvbnN0IGltYWdlJCA9IHRoaXMuaHR0cC5nZXQodXJsLCB7IHJlc3BvbnNlVHlwZTogJ2Jsb2InIH0pLnBpcGUoXHJcbiAgLy8gICAgICAgICAgICAgICBtYXAoKGJsb2I6IEJsb2IpID0+IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYikpXHJcbiAgLy8gICAgICAgICAgICAgKTtcclxuICAvLyAgICAgICAgICAgICBpbWFnZUZldGNoZXMucHVzaChpbWFnZSQpO1xyXG4gIC8vICAgICAgICAgICB9XHJcbiAgLy8gICAgICAgICB9KTtcclxuICBcclxuICAvLyAgICAgICAgIGlmIChpbWFnZUZldGNoZXMubGVuZ3RoKSB7XHJcbiAgLy8gICAgICAgICAgIGZvcmtKb2luKGltYWdlRmV0Y2hlcykuc3Vic2NyaWJlKHtcclxuICAvLyAgICAgICAgICAgICBuZXh0OiAoaW1hZ2VVcmxzOiBzdHJpbmdbXSkgPT4ge1xyXG4gIC8vICAgICAgICAgICAgICAgdGhpcy51cGxvYWRlZEltYWdlc1t1cGxvYWRlcktleV0gPSBpbWFnZVVybHMubWFwKHJlc3VsdCA9PiAoe1xyXG4gIC8vICAgICAgICAgICAgICAgICByZXN1bHQsXHJcbiAgLy8gICAgICAgICAgICAgICAgIGZpbGU6IG51bGxcclxuICAvLyAgICAgICAgICAgICAgIH0pKTtcclxuICAvLyAgICAgICAgICAgICAgIC8vIHRoaXMudXBsb2FkZWRGaWxlcyA9IFsuLi50aGlzLnVwbG9hZGVkSW1hZ2VzXVxyXG4gIC8vICAgICAgICAgICAgICAgdGhpcy51cGxvYWRlZEZpbGVzID0gT2JqZWN0LnZhbHVlcyh0aGlzLnVwbG9hZGVkSW1hZ2VzKS5mbGF0KCk7XHJcbiAgLy8gICAgICAgICAgICAgfSxcclxuICAvLyAgICAgICAgICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gIC8vICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIGZldGNoIGltYWdlcyBmb3IgJHt1cGxvYWRlcktleX06YCwgZXJyKTtcclxuICAvLyAgICAgICAgICAgICB9XHJcbiAgLy8gICAgICAgICAgIH0pO1xyXG4gIC8vICAgICAgICAgfVxyXG4gIC8vICAgICAgIH1cclxuICAvLyAgICAgfSk7XHJcbiAgLy8gfVxyXG4gIFxyXG4gIC8vIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gIC8vICAgdGhpcy5meEJ1aWxkZXJXcmFwcGVyU2VydmljZS52YXJpYWJsZXMkXHJcbiAgLy8gICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAvLyAgICAgLnN1YnNjcmliZSgodmFyaWFibGVzOiBhbnkpID0+IHtcclxuICAvLyAgICAgICBpZiAoIXZhcmlhYmxlcykgcmV0dXJuO1xyXG5cclxuICAvLyAgICAgICBjb25zdCB1cGxvYWRlZEZpbGVzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZ1tdIH0gPSB7fTtcclxuXHJcbiAgLy8gICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModmFyaWFibGVzKSkge1xyXG4gIC8vICAgICAgICAgaWYgKGtleS5pbmNsdWRlcygndXBsb2FkZXInKSAmJiBBcnJheS5pc0FycmF5KHZhbHVlKSkge1xyXG4gIC8vICAgICAgICAgICB1cGxvYWRlZEZpbGVzW2tleV0gPSB2YWx1ZTtcclxuICAvLyAgICAgICAgIH1cclxuICAvLyAgICAgICB9XHJcblxyXG4gIC8vICAgICAgIGZvciAoY29uc3QgW3VwbG9hZGVyS2V5LCB1cmxzXSBvZiBPYmplY3QuZW50cmllcyh1cGxvYWRlZEZpbGVzKSkge1xyXG4gIC8vICAgICAgICAgY29uc3QgaW1hZ2VGZXRjaGVzOiBPYnNlcnZhYmxlPHsgcmVzdWx0OiBzdHJpbmcsIG9yaWdpbmFsVXJsOiBzdHJpbmcgfT5bXSA9IFtdO1xyXG5cclxuICAvLyAgICAgICAgIHVybHMuZm9yRWFjaCgodXJsOiBzdHJpbmcpID0+IHtcclxuICAvLyAgICAgICAgICAgaWYgKHVybCkge1xyXG4gIC8vICAgICAgICAgICAgIGNvbnN0IGltYWdlJCA9IHRoaXMuaHR0cC5nZXQodXJsLCB7IHJlc3BvbnNlVHlwZTogJ2Jsb2InIH0pLnBpcGUoXHJcbiAgLy8gICAgICAgICAgICAgICBtYXAoKGJsb2I6IEJsb2IpID0+ICh7XHJcbiAgLy8gICAgICAgICAgICAgICAgIHJlc3VsdDogVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKSwgLy8ganVzdCBmb3IgcHJldmlld1xyXG4gIC8vICAgICAgICAgICAgICAgICBvcmlnaW5hbFVybDogdXJsXHJcbiAgLy8gICAgICAgICAgICAgICB9KSlcclxuICAvLyAgICAgICAgICAgICApO1xyXG4gIC8vICAgICAgICAgICAgIGltYWdlRmV0Y2hlcy5wdXNoKGltYWdlJCk7XHJcbiAgLy8gICAgICAgICAgIH1cclxuICAvLyAgICAgICAgIH0pO1xyXG5cclxuICAvLyAgICAgICAgIGlmIChpbWFnZUZldGNoZXMubGVuZ3RoKSB7XHJcbiAgLy8gICAgICAgICAgIGZvcmtKb2luKGltYWdlRmV0Y2hlcykuc3Vic2NyaWJlKHtcclxuICAvLyAgICAgICAgICAgICBuZXh0OiAoaW1hZ2VEYXRhKSA9PiB7XHJcbiAgLy8gICAgICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWQgPSBpbWFnZURhdGEubWFwKGl0ZW0gPT4gKHtcclxuICAvLyAgICAgICAgICAgICAgICAgaWQ6IHV1aWR2NCgpLFxyXG4gIC8vICAgICAgICAgICAgICAgICBmaWxlOiBudWxsLFxyXG4gIC8vICAgICAgICAgICAgICAgICBvcmlnaW5hbFVybDogaXRlbS5vcmlnaW5hbFVybCxcclxuICAvLyAgICAgICAgICAgICAgICAgcmVzdWx0OiBpdGVtLnJlc3VsdFxyXG4gIC8vICAgICAgICAgICAgICAgfSkpO1xyXG5cclxuICAvLyAgICAgICAgICAgICAgIHRoaXMudXBsb2FkZWRGaWxlcyA9IFsuLi50aGlzLnVwbG9hZGVkRmlsZXMsIC4uLmZvcm1hdHRlZF07XHJcbiAgLy8gICAgICAgICAgICAgICB0aGlzLnVwbG9hZEZpbGVDb250cm9sLnNldFZhbHVlKHRoaXMudXBsb2FkZWRGaWxlcyk7XHJcbiAgLy8gICAgICAgICAgICAgfSxcclxuICAvLyAgICAgICAgICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gIC8vICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIGZldGNoIGltYWdlcyBmb3IgJHt1cGxvYWRlcktleX06YCwgZXJyKTtcclxuICAvLyAgICAgICAgICAgICB9XHJcbiAgLy8gICAgICAgICAgIH0pO1xyXG4gIC8vICAgICAgICAgfVxyXG4gIC8vICAgICAgIH1cclxuICAvLyAgICAgfSk7XHJcbiAgLy8gfVxyXG5cclxuLy8gICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuLy8gICAgIHRoaXMuZnhCdWlsZGVyV3JhcHBlclNlcnZpY2UudmFyaWFibGVzJFxyXG4vLyAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbi8vICAgICAgIC5zdWJzY3JpYmUoKHZhcmlhYmxlczogYW55KSA9PiB7XHJcbi8vICAgICAgICAgaWYgKCF2YXJpYWJsZXMpIHJldHVybjtcclxuICBcclxuLy8gICAgICAgICBjb25zdCB1cGxvYWRlZEZpbGVzTWFwOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZ1tdIH0gPSB7fTtcclxuICBcclxuLy8gICAgICAgICAvLyBFeHRyYWN0IHVwbG9hZGVyIGtleXMgYW5kIHRoZWlyIGNvcnJlc3BvbmRpbmcgVVJMIGFycmF5c1xyXG4vLyAgICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHZhcmlhYmxlcykpIHtcclxuLy8gICAgICAgICAgIGlmIChrZXkuaW5jbHVkZXMoJ3VwbG9hZGVyJykgJiYgQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcclxuLy8gICAgICAgICAgICAgdXBsb2FkZWRGaWxlc01hcFtrZXldID0gdmFsdWU7XHJcbi8vICAgICAgICAgICB9XHJcbi8vICAgICAgICAgfVxyXG4gIFxyXG4vLyAgICAgICAgIGZvciAoY29uc3QgW3VwbG9hZGVyS2V5LCB1cmxzXSBvZiBPYmplY3QuZW50cmllcyh1cGxvYWRlZEZpbGVzTWFwKSkge1xyXG4vLyAgICAgICAgICAgLy8gY29uc3QgaW1hZ2VGZXRjaGVzOiBPYnNlcnZhYmxlPHsgcmVzdWx0OiBzdHJpbmc7IG9yaWdpbmFsVXJsOiBhbnk7IHRpdGxlOnN0cmluZyA7IG5vdGVzOnN0cmluZyB9PltdID0gW107XHJcbiAgXHJcbi8vICAgICAgICAgICAvLyB1cmxzLmZvckVhY2goKG9yaWdpbmFsVXJsOmFueSkgPT4ge1xyXG4vLyAgICAgICAgICAgLy8gICBpZiAob3JpZ2luYWxVcmwpIHtcclxuLy8gICAgICAgICAgIC8vICAgICBjb25zdCBpbWFnZSQgPSB0aGlzLmh0dHAuZ2V0KG9yaWdpbmFsVXJsPy5vcmlnaW5hbFVybCwgeyByZXNwb25zZVR5cGU6ICdibG9iJyB9KS5waXBlKFxyXG4vLyAgICAgICAgICAgLy8gICAgICAgbWFwKChibG9iOiBCbG9iKSA9PiAoe1xyXG4vLyAgICAgICAgICAgLy8gICAgICAgICByZXN1bHQ6IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYiksIC8vIGZvciBwcmV2aWV3XHJcbi8vICAgICAgICAgICAvLyAgICAgICAgIG9yaWdpbmFsVXJsOiBvcmlnaW5hbFVybD8ub3JpZ2luYWxVcmwgICAgICAgICAgLy8gcHJlc2VydmUgb3JpZ2luYWxcclxuLy8gICAgICAgICAgIC8vICAgICAgIH0pKVxyXG4vLyAgICAgICAgICAgLy8gICAgICk7XHJcbi8vICAgICAgICAgICAvLyAgICAgaW1hZ2VGZXRjaGVzLnB1c2goaW1hZ2UkKTtcclxuLy8gICAgICAgICAgIC8vICAgfVxyXG4vLyAgICAgICAgICAgLy8gfSk7XHJcblxyXG4vLyAgICAgICAgICAgY29uc3QgaW1hZ2VGZXRjaGVzOiBPYnNlcnZhYmxlPHsgcmVzdWx0OiBzdHJpbmc7IG9yaWdpbmFsVXJsOiBhbnk7IHRpdGxlOiBzdHJpbmc7IG5vdGVzOiBzdHJpbmcgfT5bXSA9IFtdO1xyXG5cclxuLy8gdXJscy5mb3JFYWNoKChvcmlnaW5hbFVybDogYW55KSA9PiB7XHJcbi8vICAgaWYgKG9yaWdpbmFsVXJsKSB7XHJcbi8vICAgICBjb25zdCBpbWFnZSQgPSB0aGlzLmh0dHAuZ2V0KG9yaWdpbmFsVXJsPy5vcmlnaW5hbFVybCwgeyByZXNwb25zZVR5cGU6ICdibG9iJyB9KS5waXBlKFxyXG4vLyAgICAgICBtYXAoKGJsb2I6IEJsb2IpID0+ICh7XHJcbi8vICAgICAgICAgcmVzdWx0OiBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpLCAvLyBmb3IgcHJldmlld1xyXG4vLyAgICAgICAgIG9yaWdpbmFsVXJsOiBvcmlnaW5hbFVybD8ub3JpZ2luYWxVcmwsIC8vIHByZXNlcnZlIG9yaWdpbmFsXHJcbi8vICAgICAgICAgdGl0bGU6IG9yaWdpbmFsVXJsPy50aXRsZSB8fCAnJywgLy8gZGVmYXVsdCBlbXB0eSBpZiBub3QgcHJlc2VudFxyXG4vLyAgICAgICAgIG5vdGVzOiBvcmlnaW5hbFVybD8ubm90ZXMgfHwgJydcclxuLy8gICAgICAgfSkpXHJcbi8vICAgICApO1xyXG4vLyAgICAgaW1hZ2VGZXRjaGVzLnB1c2goaW1hZ2UkKTtcclxuLy8gICB9XHJcbi8vIH0pO1xyXG5cclxuICBcclxuLy8gICAgICAgICAgIGlmIChpbWFnZUZldGNoZXMubGVuZ3RoID4gMCkge1xyXG4vLyAgICAgICAgICAgICBmb3JrSm9pbihpbWFnZUZldGNoZXMpLnN1YnNjcmliZSh7XHJcbi8vICAgICAgICAgICAgICAgbmV4dDogKGltYWdlRGF0YSkgPT4ge1xyXG4vLyAgICAgICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkID0gaW1hZ2VEYXRhLm1hcChpdGVtID0+ICh7XHJcbi8vICAgICAgICAgICAgICAgICAgIGlkOiB1dWlkdjQoKSxcclxuLy8gICAgICAgICAgICAgICAgICAgZmlsZTogbnVsbCxcclxuLy8gICAgICAgICAgICAgICAgICAgb3JpZ2luYWxVcmw6IGl0ZW0ub3JpZ2luYWxVcmwsXHJcbi8vICAgICAgICAgICAgICAgICAgIHJlc3VsdDogaXRlbS5yZXN1bHQsXHJcbi8vICAgICAgICAgICAgICAgICAgIHRpdGxlOiBpdGVtLnRpdGxlLFxyXG4vLyAgICAgICAgICAgICAgICAgICBub3RlczogJydcclxuLy8gICAgICAgICAgICAgICAgIH0pKTtcclxuICBcclxuLy8gICAgICAgICAgICAgICAgIHRoaXMudXBsb2FkZWRGaWxlcyA9IFsuLi50aGlzLnVwbG9hZGVkRmlsZXMsIC4uLmZvcm1hdHRlZF07XHJcbi8vICAgICAgICAgICAgICAgICB0aGlzLmZvcm1hdHRlZERhdGEudXBsb2FkZWRGaWxlcyA9IHRoaXMudXBsb2FkZWRGaWxlcztcclxuLy8gICAgICAgICAgICAgICAgIHRoaXMudXBsb2FkRmlsZUNvbnRyb2wuc2V0VmFsdWUodGhpcy5mb3JtYXR0ZWREYXRhKTtcclxuLy8gICAgICAgICAgICAgICB9LFxyXG4vLyAgICAgICAgICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbi8vICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gZmV0Y2ggaW1hZ2VzIGZvciAke3VwbG9hZGVyS2V5fTpgLCBlcnIpO1xyXG4vLyAgICAgICAgICAgICAgIH1cclxuLy8gICAgICAgICAgICAgfSk7XHJcbi8vICAgICAgICAgICB9XHJcbi8vICAgICAgICAgfVxyXG4vLyAgICAgICB9KTtcclxuLy8gICB9XHJcbiAgXHJcbiAgLy8gbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgLy8gICB0aGlzLmZ4QnVpbGRlcldyYXBwZXJTZXJ2aWNlLnZhcmlhYmxlcyRcclxuICAvLyAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gIC8vICAgICAuc3Vic2NyaWJlKCh2YXJpYWJsZXM6IGFueSkgPT4ge1xyXG4gIC8vICAgICAgIGlmICghdmFyaWFibGVzKSByZXR1cm47XHJcbiAgXHJcbiAgLy8gICAgICAgY29uc3QgdXBsb2FkZWRGaWxlc01hcDogeyBba2V5OiBzdHJpbmddOiB7IG9yaWdpbmFsVXJsOiBzdHJpbmcgfVtdIH0gPSB2YXJpYWJsZXMudXBsb2FkZWRGaWxlcztcclxuICBcclxuICAvLyAgICAgICBmb3IgKGNvbnN0IFt1cGxvYWRlcktleSwgdXJsc10gb2YgT2JqZWN0LmVudHJpZXModXBsb2FkZWRGaWxlc01hcCkpIHtcclxuICAvLyAgICAgICAgIGNvbnN0IGltYWdlRmV0Y2hlczogT2JzZXJ2YWJsZTx7IHJlc3VsdDogc3RyaW5nOyBvcmlnaW5hbFVybDogc3RyaW5nIH0+W10gPSBbXTtcclxuICBcclxuICAvLyAgICAgICAgIHVybHMuZm9yRWFjaCgoZmlsZU9iajogYW55KSA9PiB7XHJcbiAgLy8gICAgICAgICAgIGNvbnN0IG9yaWdpbmFsVXJsID0gZmlsZU9iaj8ub3JpZ2luYWxVcmw7XHJcbiAgLy8gICAgICAgICAgIGlmIChvcmlnaW5hbFVybCkge1xyXG4gIC8vICAgICAgICAgICAgIGNvbnN0IGltYWdlJCA9IHRoaXMuaHR0cC5nZXQob3JpZ2luYWxVcmwsIHsgcmVzcG9uc2VUeXBlOiAnYmxvYicgfSkucGlwZShcclxuICAvLyAgICAgICAgICAgICAgIG1hcCgoYmxvYjogQmxvYikgPT4gKHtcclxuICAvLyAgICAgICAgICAgICAgICAgcmVzdWx0OiBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpLCAvLyBmb3IgcHJldmlld1xyXG4gIC8vICAgICAgICAgICAgICAgICBvcmlnaW5hbFVybFxyXG4gIC8vICAgICAgICAgICAgICAgfSkpXHJcbiAgLy8gICAgICAgICAgICAgKTtcclxuICAvLyAgICAgICAgICAgICBpbWFnZUZldGNoZXMucHVzaChpbWFnZSQpO1xyXG4gIC8vICAgICAgICAgICB9XHJcbiAgLy8gICAgICAgICB9KTtcclxuICBcclxuICAvLyAgICAgICAgIGlmIChpbWFnZUZldGNoZXMubGVuZ3RoID4gMCkge1xyXG4gIC8vICAgICAgICAgICBmb3JrSm9pbihpbWFnZUZldGNoZXMpLnN1YnNjcmliZSh7XHJcbiAgLy8gICAgICAgICAgICAgbmV4dDogKGltYWdlRGF0YSkgPT4ge1xyXG4gIC8vICAgICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkID0gaW1hZ2VEYXRhLm1hcChpdGVtID0+ICh7XHJcbiAgLy8gICAgICAgICAgICAgICAgIGlkOiB1dWlkdjQoKSxcclxuICAvLyAgICAgICAgICAgICAgICAgZmlsZTogbnVsbCxcclxuICAvLyAgICAgICAgICAgICAgICAgb3JpZ2luYWxVcmw6IGl0ZW0ub3JpZ2luYWxVcmwsXHJcbiAgLy8gICAgICAgICAgICAgICAgIHJlc3VsdDogaXRlbS5yZXN1bHRcclxuICAvLyAgICAgICAgICAgICAgIH0pKTtcclxuICBcclxuICAvLyAgICAgICAgICAgICAgIHRoaXMudXBsb2FkZWRGaWxlcyA9IFsuLi50aGlzLnVwbG9hZGVkRmlsZXMsIC4uLmZvcm1hdHRlZF07XHJcbiAgLy8gICAgICAgICAgICAgICB0aGlzLmZvcm1hdHRlZERhdGEudXBsb2FkZWRGaWxlcyA9IHRoaXMudXBsb2FkZWRGaWxlcztcclxuICAvLyAgICAgICAgICAgICAgIHRoaXMudXBsb2FkRmlsZUNvbnRyb2wuc2V0VmFsdWUodGhpcy5mb3JtYXR0ZWREYXRhKTtcclxuICAvLyAgICAgICAgICAgICB9LFxyXG4gIC8vICAgICAgICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgLy8gICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gZmV0Y2ggaW1hZ2VzIGZvciAke3VwbG9hZGVyS2V5fTpgLCBlcnIpO1xyXG4gIC8vICAgICAgICAgICAgIH1cclxuICAvLyAgICAgICAgICAgfSk7XHJcbiAgLy8gICAgICAgICB9XHJcbiAgLy8gICAgICAgfVxyXG4gIC8vICAgICB9KTtcclxuICAvLyB9XHJcbiAgXHJcblxyXG4gIC8vIHB1YmxpYyBvbkZpbGVTZWxlY3RlZChldmVudDogRXZlbnQpIHtcclxuICAvLyAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XHJcbiAgLy8gICBpZiAoaW5wdXQuZmlsZXMpIHtcclxuICAvLyAgICAgZm9yKGxldCBpID0gMDsgaSA8IGlucHV0Py5maWxlcz8ubGVuZ3RoOyBpKyspIHtcclxuICAvLyAgICAgICBjb25zdCBmaWxlID0gaW5wdXQuZmlsZXNbaV07XHJcbiAgLy8gICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuICAvLyAgICAgICByZWFkZXIub25sb2FkID0gZSA9PiB7XHJcbiAgLy8gICAgICAgICB0aGlzLnVwbG9hZGVkRmlsZXMucHVzaCh7XHJcbiAgLy8gICAgICAgICAgIGZpbGU6IGZpbGUsXHJcbiAgLy8gICAgICAgICAgIHJlc3VsdDogZS50YXJnZXQ/LnJlc3VsdCxcclxuICAvLyAgICAgICAgICAgbmFtZTogZmlsZT8ubmFtZSxcclxuICAvLyAgICAgICAgICAgaWQ6IHV1aWR2NCgpXHJcbiAgLy8gICAgICAgICB9KVxyXG4gIC8vICAgICAgICAgdGhpcy51cGxvYWRGaWxlQ29udHJvbC5zZXRWYWx1ZSh0aGlzLnVwbG9hZGVkRmlsZXMpO1xyXG4gIC8vICAgICAgICAgY29uc29sZS5sb2codGhpcy51cGxvYWRGaWxlQ29udHJvbCk7XHJcbiAgLy8gICAgICAgfVxyXG4gIC8vICAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpO1xyXG4gIC8vICAgICB9XHJcbiAgLy8gICB9XHJcbiAgLy8gfVxyXG5cclxuICAvLyBvbkZpbGVTZWxlY3RlZChldmVudDogRXZlbnQpIHtcclxuICAvLyAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XHJcbiAgLy8gICBpZiAoaW5wdXQuZmlsZXMpIHtcclxuICAvLyAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dC5maWxlcy5sZW5ndGg7IGkrKykge1xyXG4gIC8vICAgICAgIGNvbnN0IGZpbGUgPSBpbnB1dC5maWxlc1tpXTtcclxuICAvLyAgICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG5cclxuICAvLyAgICAgICByZWFkZXIub25sb2FkID0gZSA9PiB7XHJcbiAgLy8gICAgICAgICBjb25zdCBuZXdGaWxlID0ge1xyXG4gIC8vICAgICAgICAgICBpZDogdXVpZHY0KCksXHJcbiAgLy8gICAgICAgICAgIGZpbGU6IGZpbGUsXHJcbiAgLy8gICAgICAgICAgIG9yaWdpbmFsVXJsOiBudWxsLFxyXG4gIC8vICAgICAgICAgICByZXN1bHQ6IGUudGFyZ2V0Py5yZXN1bHQsXHJcbiAgLy8gICAgICAgICAgIG5hbWU6IGZpbGUubmFtZSxcclxuICAvLyAgICAgICAgICAgdGl0bGU6ICcnLFxyXG4gIC8vICAgICAgICAgICBub3RlczogJycsXHJcbiAgLy8gICAgICAgICAgIGNhdGVnb3J5OiAnJyxcclxuICAvLyAgICAgICAgICAgdHlwZTogdGhpcy5kZXRlY3RGaWxlVHlwZShmaWxlKSxcclxuICAvLyAgICAgICAgIH07XHJcblxyXG4gIC8vICAgICAgICAgdGhpcy51cGxvYWRlZEZpbGVzLnB1c2gobmV3RmlsZSk7XHJcbiAgLy8gICAgICAgICB0aGlzLmZvcm1hdHRlZERhdGEudXBsb2FkZWRGaWxlcyA9IHRoaXMudXBsb2FkZWRGaWxlcztcclxuICAvLyAgICAgICAgIHRoaXMudXBsb2FkRmlsZUNvbnRyb2wuc2V0VmFsdWUodGhpcy5mb3JtYXR0ZWREYXRhKTtcclxuICAvLyAgICAgICB9O1xyXG5cclxuICAvLyAgICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTtcclxuICAvLyAgICAgfVxyXG4gIC8vICAgfVxyXG4gIC8vIH1cclxuXHJcbi8vICAgbmdPbkluaXQoKTogdm9pZCB7XHJcbi8vICAgdGhpcy5meEJ1aWxkZXJXcmFwcGVyU2VydmljZS52YXJpYWJsZXMkXHJcbi8vICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbi8vICAgICAuc3Vic2NyaWJlKCh2YXJpYWJsZXM6IGFueSkgPT4ge1xyXG4vLyAgICAgICBpZiAoIXZhcmlhYmxlcykgcmV0dXJuO1xyXG5cclxuLy8gICAgICAgY29uc3QgdXBsb2FkZWRGaWxlc01hcDogeyBba2V5OiBzdHJpbmddOiBhbnlbXSB9ID0ge307XHJcblxyXG4gICAgIFxyXG4vLyAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh2YXJpYWJsZXMpKSB7XHJcbi8vICAgICAgICAgaWYgKGtleS5pbmNsdWRlcygndXBsb2FkZXInKSAmJiBBcnJheS5pc0FycmF5KHZhbHVlKSkge1xyXG4vLyAgICAgICAgICAgdXBsb2FkZWRGaWxlc01hcFtrZXldID0gdmFsdWU7XHJcbi8vICAgICAgICAgfVxyXG4vLyAgICAgICB9XHJcblxyXG4vLyAgICAgICBmb3IgKGNvbnN0IFt1cGxvYWRlcktleSwgdXJsc10gb2YgT2JqZWN0LmVudHJpZXModXBsb2FkZWRGaWxlc01hcCkpIHtcclxuLy8gICAgICAgICBjb25zdCBmb3JtYXR0ZWQgPSB1cmxzXHJcbi8vICAgICAgICAgICAuZmlsdGVyKChmaWxlT2JqOiBhbnkpID0+ICEhZmlsZU9iaikgXHJcbi8vICAgICAgICAgICAubWFwKChmaWxlT2JqOiBhbnkpID0+IHtcclxuLy8gICAgICAgICAgICAgLy8gY29uc3QgZmlsZVR5cGUgPSB0aGlzLmRldGVjdEZpbGVUeXBlRnJvbVVybChmaWxlT2JqPy5vcmlnaW5hbFVybCB8fCBmaWxlT2JqPy5uYW1lKTtcclxuXHJcbi8vICAgICAgICAgICAgIHJldHVybiB7XHJcbi8vICAgICAgICAgICAgICAgaWQ6IHV1aWR2NCgpLFxyXG4vLyAgICAgICAgICAgICAgIGZpbGU6IG51bGwsICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4vLyAgICAgICAgICAgICAgIG9yaWdpbmFsVXJsOiBmaWxlT2JqLm9yaWdpbmFsVXJsLCAgICBcclxuLy8gICAgICAgICAgICAgICByZXN1bHQ6IGZpbGVPYmo/LnR5cGUgPT09ICdpbWFnZScgPyBmaWxlT2JqLm9yaWdpbmFsVXJsLnByZXZpZXdVcmwgOiBudWxsLFxyXG4vLyAgICAgICAgICAgICAgIG5hbWU6IGZpbGVPYmo/Lm5hbWUgfHwgJycsXHJcbi8vICAgICAgICAgICAgICAgdGl0bGU6IGZpbGVPYmo/LnRpdGxlIHx8ICcnLFxyXG4vLyAgICAgICAgICAgICAgIG5vdGVzOiBmaWxlT2JqPy5ub3RlcyB8fCAnJyxcclxuLy8gICAgICAgICAgICAgICBjYXRlZ29yeTogZmlsZU9iaj8uY2F0ZWdvcnkgfHwgJycsXHJcbi8vICAgICAgICAgICAgICAgdHlwZTogZmlsZU9iaj8udHlwZSwgICAgICAgICAgICAgICAgXHJcbi8vICAgICAgICAgICAgIH07XHJcbi8vICAgICAgICAgICB9KTtcclxuXHJcbi8vICAgICAgICAgaWYgKGZvcm1hdHRlZC5sZW5ndGggPiAwKSB7XHJcbi8vICAgICAgICAgICB0aGlzLnVwbG9hZGVkRmlsZXMgPSBbLi4udGhpcy51cGxvYWRlZEZpbGVzLCAuLi5mb3JtYXR0ZWRdO1xyXG4vLyAgICAgICAgICAgdGhpcy5mb3JtYXR0ZWREYXRhLnVwbG9hZGVkRmlsZXMgPSB0aGlzLnVwbG9hZGVkRmlsZXM7XHJcbi8vICAgICAgICAgICB0aGlzLnVwbG9hZEZpbGVDb250cm9sLnNldFZhbHVlKHRoaXMuZm9ybWF0dGVkRGF0YSk7XHJcbi8vICAgICAgICAgfVxyXG4vLyAgICAgICB9XHJcbi8vICAgICB9KTtcclxuLy8gfVxyXG5cclxubmdPbkluaXQoKTogdm9pZCB7XHJcbiAgdGhpcy5meEJ1aWxkZXJXcmFwcGVyU2VydmljZS52YXJpYWJsZXMkXHJcbiAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAuc3Vic2NyaWJlKCh2YXJpYWJsZXM6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoIXZhcmlhYmxlcykgcmV0dXJuO1xyXG5cclxuICAgICAgY29uc3QgdXBsb2FkZWRGaWxlc01hcDogeyBba2V5OiBzdHJpbmddOiBhbnlbXSB9ID0ge307XHJcblxyXG4gICAgICBcclxuICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModmFyaWFibGVzKSkge1xyXG4gIGlmIChrZXkuaW5jbHVkZXMoJ3VwbG9hZGVyJykgJiYgKHZhbHVlIGFzIGFueSk/LnVwbG9hZGVkRmlsZXMpIHtcclxuICAgIHVwbG9hZGVkRmlsZXNNYXBba2V5XSA9ICh2YWx1ZSBhcyBhbnkpLnVwbG9hZGVkRmlsZXM7XHJcbiAgfVxyXG59XHJcblxyXG4gICAgICBmb3IgKGNvbnN0IFt1cGxvYWRlcktleSwgZmlsZXNdIG9mIE9iamVjdC5lbnRyaWVzKHVwbG9hZGVkRmlsZXNNYXApKSB7XHJcbiAgICAgICAgY29uc3QgZm9ybWF0dGVkID0gZmlsZXNcclxuICAgICAgICAgIC5maWx0ZXIoKGZpbGVPYmo6IGFueSkgPT4gISFmaWxlT2JqKVxyXG4gICAgICAgICAgLm1hcCgoZmlsZU9iajogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsVXJsT2JqID0gZmlsZU9iai5vcmlnaW5hbFVybDtcclxuICAgICAgICAgICAgY29uc3QgZmlsZU5hbWUgPSBvcmlnaW5hbFVybE9iaj8uZmlsZU5hbWUgfHwgJyc7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGVVcmwgPSBvcmlnaW5hbFVybE9iaj8uZmlsZVVybCB8fCAnJztcclxuICAgICAgICAgICAgY29uc3QgcHJldmlld1VybCA9IG9yaWdpbmFsVXJsT2JqPy5wcmV2aWV3VXJsO1xyXG4gICAgICAgICAgICBjb25zdCB0eXBlID0gZmlsZU9iaj8udHlwZTtcclxuXHJcbiAgICAgICAgICAgIC8vIGRldGVjdCB0eXBlIGJhc2VkIG9uIGZpbGUgZXh0ZW5zaW9uXHJcbiAgICAgICAgICAgIC8vIGNvbnN0IGZpbGVUeXBlID0gdGhpcy5kZXRlY3RGaWxlVHlwZUZyb21VcmwoZmlsZU5hbWUgfHwgZmlsZVVybCk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgIGlkOiB1dWlkdjQoKSxcclxuICAgICAgICAgICAgICBmaWxlOiBudWxsLCAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vdGhpbmcgbG9jYWxcclxuICAgICAgICAgICAgICBvcmlnaW5hbFVybDogb3JpZ2luYWxVcmxPYmosICAgICAgIC8vIGtlZXAgd2hvbGUgb2JqZWN0XHJcbiAgICAgICAgICAgICAgcmVzdWx0OiB0eXBlID09PSAnaW1hZ2UnXHJcbiAgICAgICAgICAgICAgICA/IChwcmV2aWV3VXJsKSAgICAgICAgLy8gcHJlZmVyIHByZXZpZXdVcmwsIGZhbGxiYWNrIHRvIGZpbGVVcmxcclxuICAgICAgICAgICAgICAgIDogbnVsbCxcclxuICAgICAgICAgICAgICBuYW1lOiBmaWxlTmFtZSxcclxuICAgICAgICAgICAgICB0aXRsZTogZmlsZU9iaj8udGl0bGUgfHwgJycsXHJcbiAgICAgICAgICAgICAgbm90ZXM6IGZpbGVPYmo/Lm5vdGVzIHx8ICcnLFxyXG4gICAgICAgICAgICAgIGNhdGVnb3J5OiBmaWxlT2JqPy5jYXRlZ29yeSB8fCAnJyxcclxuICAgICAgICAgICAgICB0eXBlOiB0eXBlLCAgICAgICAgICAgICAgICAgICAgLy8gY29tcHV0ZWQgdHlwZVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmIChmb3JtYXR0ZWQubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgdGhpcy51cGxvYWRlZEZpbGVzID0gWy4uLnRoaXMudXBsb2FkZWRGaWxlcywgLi4uZm9ybWF0dGVkXTtcclxuICAgICAgICAgIHRoaXMuZm9ybWF0dGVkRGF0YS51cGxvYWRlZEZpbGVzID0gdGhpcy51cGxvYWRlZEZpbGVzO1xyXG4gICAgICAgICAgdGhpcy51cGxvYWRGaWxlQ29udHJvbC5zZXRWYWx1ZSh0aGlzLmZvcm1hdHRlZERhdGEpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbn1cclxuXHJcblxyXG5cclxuICBvbkZpbGVTZWxlY3RlZChldmVudDogRXZlbnQpIHtcclxuICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xyXG4gIGlmICghaW5wdXQuZmlsZXMpIHJldHVybjtcclxuXHJcbiAgQXJyYXkuZnJvbShpbnB1dC5maWxlcykuZm9yRWFjaChmaWxlID0+IHtcclxuICAgIGNvbnN0IGZpbGVUeXBlID0gdGhpcy5kZXRlY3RGaWxlVHlwZShmaWxlKTtcclxuXHJcbiAgICBjb25zdCBuZXdGaWxlOiBhbnkgPSB7XHJcbiAgICAgIGlkOiB1dWlkdjQoKSxcclxuICAgICAgZmlsZTogZmlsZSxcclxuICAgICAgb3JpZ2luYWxVcmw6IG51bGwsXHJcbiAgICAgIHJlc3VsdDogbnVsbCwgICAgICAgICAgLy8gd2lsbCBiZSBmaWxsZWQgZm9yIGltYWdlcyBvbmx5XHJcbiAgICAgIG5hbWU6IGZpbGUubmFtZSxcclxuICAgICAgdGl0bGU6ICcnLFxyXG4gICAgICBub3RlczogJycsXHJcbiAgICAgIGNhdGVnb3J5OiAnJyxcclxuICAgICAgdHlwZTogZmlsZVR5cGUsICAgICAgICAvLyA8LS0ga2VlcCBkZXRlY3RlZCB0eXBlXHJcbiAgICB9O1xyXG5cclxuICAgIGlmIChmaWxlVHlwZSA9PT0gJ2ltYWdlJykge1xyXG4gICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG4gICAgICByZWFkZXIub25sb2FkID0gZSA9PiB7XHJcbiAgICAgICAgbmV3RmlsZS5yZXN1bHQgPSBlLnRhcmdldD8ucmVzdWx0O1xyXG4gICAgICAgIHRoaXMudXBsb2FkZWRGaWxlcy5wdXNoKG5ld0ZpbGUpO1xyXG4gICAgICAgIHRoaXMuZm9ybWF0dGVkRGF0YS51cGxvYWRlZEZpbGVzID0gdGhpcy51cGxvYWRlZEZpbGVzO1xyXG4gICAgICAgIHRoaXMudXBsb2FkRmlsZUNvbnRyb2wuc2V0VmFsdWUodGhpcy5mb3JtYXR0ZWREYXRhKTtcclxuICAgICAgfTtcclxuICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7IC8vIG9ubHkgaW1hZ2VzIG5lZWQgcHJldmlld1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gbm9uLWltYWdlIOKGkiBwdXNoIGRpcmVjdGx5XHJcbiAgICAgIHRoaXMudXBsb2FkZWRGaWxlcy5wdXNoKG5ld0ZpbGUpO1xyXG4gICAgICB0aGlzLmZvcm1hdHRlZERhdGEudXBsb2FkZWRGaWxlcyA9IHRoaXMudXBsb2FkZWRGaWxlcztcclxuICAgICAgdGhpcy51cGxvYWRGaWxlQ29udHJvbC5zZXRWYWx1ZSh0aGlzLmZvcm1hdHRlZERhdGEpO1xyXG4gICAgfVxyXG4gIH0pO1xyXG59XHJcblxyXG5cclxuICBvbk1ldGFDaGFuZ2UoKSB7XHJcbiAgICB0aGlzLmZvcm1hdHRlZERhdGEudXBsb2FkZWRGaWxlcyA9IHRoaXMudXBsb2FkZWRGaWxlcztcclxuICAgIHRoaXMudXBsb2FkRmlsZUNvbnRyb2wuc2V0VmFsdWUodGhpcy5mb3JtYXR0ZWREYXRhKTtcclxuICB9XHJcblxyXG5cclxuICAvLyBwdWJsaWMgZGVsZXRlRmlsZShpZDogc3RyaW5nKTogdm9pZCB7XHJcbiAgLy8gICB0aGlzLnVwbG9hZGVkRmlsZXMgPSB0aGlzLnVwbG9hZGVkRmlsZXMuZmlsdGVyKGZpbGUgPT4gZmlsZT8uaWQgIT09IGlkKTtcclxuICAvLyB9XHJcblxyXG4gIC8vIGRlbGV0ZUZpbGUoaW5kZXg6IG51bWJlcik6IHZvaWQge1xyXG4gIC8vICAgY29uc3QgW2RlbGV0ZWRGaWxlXSA9IHRoaXMudXBsb2FkZWRGaWxlcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gIFxyXG4gIC8vICAgaWYgKGRlbGV0ZWRGaWxlKSB7XHJcbiAgLy8gICAgIHRoaXMuZGVsZXRlZEZpbGVzLnB1c2goZGVsZXRlZEZpbGUpO1xyXG4gIC8vICAgICB0aGlzLmZvcm1hdHRlZERhdGEgPSB7XHJcbiAgLy8gICAgICAgLi4udGhpcy5mb3JtYXR0ZWREYXRhLFxyXG4gIC8vICAgICAgIHVwbG9hZGVkRmlsZXM6IFsuLi50aGlzLnVwbG9hZGVkRmlsZXNdLFxyXG4gIC8vICAgICAgIGRlbGV0ZWRGaWxlczogWy4uLnRoaXMuZGVsZXRlZEZpbGVzXVxyXG4gIC8vICAgICB9O1xyXG4gIC8vICAgICB0aGlzLnVwbG9hZEZpbGVDb250cm9sLnNldFZhbHVlKHRoaXMuZm9ybWF0dGVkRGF0YSk7XHJcbiAgLy8gICB9XHJcbiAgLy8gfVxyXG5cclxuICBkZWxldGVGaWxlKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGNvbnN0IGRlbGV0ZWRGaWxlID0gdGhpcy51cGxvYWRlZEZpbGVzPy5baW5kZXhdO1xyXG4gICAgaWYgKCFkZWxldGVkRmlsZSkgcmV0dXJuO1xyXG4gIFxyXG4gICAgLy8gRW5zdXJlIGZvcm1hdHRlZERhdGEgZXhpc3RzIGFuZCBpbml0aWFsaXplIGlmIHVuZGVmaW5lZFxyXG4gICAgdGhpcy5mb3JtYXR0ZWREYXRhID0gdGhpcy5mb3JtYXR0ZWREYXRhIHx8IHsgdXBsb2FkZWRGaWxlczogW10sIGRlbGV0ZWRGaWxlczogW10gfTtcclxuICBcclxuICAgIC8vIEFkZCB0aGUgZGVsZXRlZCBmaWxlIHRvIHRoZSBkZWxldGVkRmlsZXMgYXJyYXlcclxuICAgIHRoaXMuZGVsZXRlZEZpbGVzID0gWy4uLnRoaXMuZGVsZXRlZEZpbGVzLCBkZWxldGVkRmlsZV07XHJcbiAgXHJcbiAgICAvLyBSZW1vdmUgdGhlIGZpbGUgZnJvbSB1cGxvYWRlZEZpbGVzIHVzaW5nIGZpbHRlciBmb3IgaW1tdXRhYmlsaXR5XHJcbiAgICB0aGlzLnVwbG9hZGVkRmlsZXMgPSB0aGlzLnVwbG9hZGVkRmlsZXMuZmlsdGVyKChfLCBpKSA9PiBpICE9PSBpbmRleCk7XHJcbiAgXHJcbiAgICAvLyBVcGRhdGUgZm9ybWF0dGVkRGF0YVxyXG4gICAgdGhpcy5mb3JtYXR0ZWREYXRhID0ge1xyXG4gICAgICAuLi50aGlzLmZvcm1hdHRlZERhdGEsXHJcbiAgICAgIHVwbG9hZGVkRmlsZXM6IHRoaXMudXBsb2FkZWRGaWxlcyxcclxuICAgICAgZGVsZXRlZEZpbGVzOiB0aGlzLmRlbGV0ZWRGaWxlc1xyXG4gICAgfTtcclxuICBcclxuICAgIC8vIFNldCB0aGUgdmFsdWUgb2YgdGhlIHVwbG9hZEZpbGVDb250cm9sXHJcbiAgICB0aGlzLnVwbG9hZEZpbGVDb250cm9sLnNldFZhbHVlKHRoaXMuZm9ybWF0dGVkRGF0YSk7XHJcbiAgfVxyXG4gIFxyXG4gIFxyXG5cclxuICBwcm90ZWN0ZWQgc2V0dGluZ3MoKTogRnhTZXR0aW5nW10ge1xyXG4gICAgcmV0dXJuIFtcclxuICAgICAgbmV3IEZ4U3RyaW5nU2V0dGluZyh7IGtleTogJ3VwbG9hZC10ZXh0JywgJHRpdGxlOiAnVXBsb2FkIFRleHQnLCB2YWx1ZTogJ1VwbG9hZCBGaWxlJ30pLFxyXG4gICAgICBuZXcgRnhTZWxlY3RTZXR0aW5nKHtrZXk6ICdtdWx0aXBsZS11cGxvYWQnLCAkdGl0bGU6ICdNdWx0aXBsZSBVcGxvYWQnLCB2YWx1ZTogZmFsc2V9LCBbe29wdGlvbjogJ0VuYWJsZScsIHZhbHVlOiB0cnVlfSwge29wdGlvbjogJ0Rpc2FibGUnLCB2YWx1ZTogZmFsc2V9XSlcclxuICAgIF07XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgdmFsaWRhdGlvbnMoKTogRnhWYWxpZGF0aW9uW10ge1xyXG4gICAgcmV0dXJuIFtGeFZhbGlkYXRvclNlcnZpY2UucmVxdWlyZWRdO1xyXG4gIH1cclxuXHJcbiAgICBkZXRlY3RGaWxlVHlwZShmaWxlOiBGaWxlKTogJ2ltYWdlJyB8ICdjc3YnIHwgJ3RleHQnIHwgJ290aGVyJyB7XHJcbiAgICBjb25zdCBtaW1lID0gKGZpbGUudHlwZSB8fCAnJykudG9Mb3dlckNhc2UoKTtcclxuICAgIGNvbnN0IG5hbWUgPSAoZmlsZS5uYW1lIHx8ICcnKS50b0xvd2VyQ2FzZSgpO1xyXG5cclxuICAgIGlmIChtaW1lLnN0YXJ0c1dpdGgoJ2ltYWdlLycpIHx8IC9cXC4ocG5nfGpwZT9nfGdpZnx3ZWJwfGJtcHxzdmcpJC9pLnRlc3QobmFtZSkpIHJldHVybiAnaW1hZ2UnO1xyXG4gICAgaWYgKG1pbWUgPT09ICd0ZXh0L2NzdicgfHwgbmFtZS5lbmRzV2l0aCgnLmNzdicpKSByZXR1cm4gJ2Nzdic7XHJcbiAgICBpZiAobWltZS5zdGFydHNXaXRoKCd0ZXh0LycpIHx8IC9cXC4odHh0fG1kfHJ0Znxsb2d8anNvbnx4bWx8eWFtbHx5bWwpJC9pLnRlc3QobmFtZSkpIHJldHVybiAndGV4dCc7XHJcbiAgICByZXR1cm4gJ290aGVyJztcclxuICB9XHJcblxyXG59XHJcbiIsIjxmeC1jb21wb25lbnQgW2Z4RGF0YV09XCJmeERhdGFcIj5cclxuICA8ZGl2IGNsYXNzPVwiY3VzdG9tLXVwbG9hZCBmbGV4IGZsZXgtcm93IGl0ZW1zLWNlbnRlciBnYXAtMiBwLTIgcGItMCByb3VuZGVkLXNtXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBqdXN0aWZ5LWNlbnRlciBpdGVtcy1jZW50ZXJcIiAoY2xpY2spPVwiZmlsZUlucHV0LmNsaWNrKClcIj5cclxuICAgICAgPGRpdj5cclxuICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjI5XCIgaGVpZ2h0PVwiMjhcIiB2aWV3Qm94PVwiMCAwIDI5IDI4XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgIDxwYXRoIGZpbGwtcnVsZT1cImV2ZW5vZGRcIiBjbGlwLXJ1bGU9XCJldmVub2RkXCJcclxuICAgICAgICAgICAgZD1cIk0xNC4wMDEgMy4wMDE5NUMxMS41MzIyIDMuMDAxOTUgOS4xNjcyMiAzLjg2OTU2IDcuMjM2NDEgNS4zODQxNEw3LjIzNTk4IDQuNTk2OTVDNy4yMzU5OCA0LjUyNDczIDcuMjIxNzUgNC40NTMyMSA3LjE5NDExIDQuMzg2NDhDNy4xNjY0NyA0LjMxOTc1IDcuMTI1OTYgNC4yNTkxMiA3LjA3NDg5IDQuMjA4MDRDNy4wMjM4MSA0LjE1Njk3IDYuOTYzMTggNC4xMTY0NiA2Ljg5NjQ1IDQuMDg4ODJDNi44Mjk3MiA0LjA2MTE4IDYuNzU4MiA0LjA0Njk1IDYuNjg1OTggNC4wNDY5NUM2LjYxMzc1IDQuMDQ2OTUgNi41NDIyMyA0LjA2MTE4IDYuNDc1NSA0LjA4ODgyQzYuNDA4NzcgNC4xMTY0NiA2LjM0ODE0IDQuMTU2OTcgNi4yOTcwNyA0LjIwODA0QzYuMjQ1OTkgNC4yNTkxMiA2LjIwNTQ4IDQuMzE5NzUgNi4xNzc4NCA0LjM4NjQ4QzYuMTUwMiA0LjQ1MzIxIDYuMTM1OTggNC41MjQ3MyA2LjEzNTk4IDQuNTk2OTVMNi4xMzY0MiA2LjY4NjUyQzYuMTM2NDMgNi44MzIzOSA2LjE5NDM4IDYuOTcyMjggNi4yOTc1MiA3LjA3NTQyQzYuNDAwNjcgNy4xNzg1NiA2LjU0MDU1IDcuMjM2NTEgNi42ODY0MiA3LjIzNjUySDguNzc1OThDOC44NDgyIDcuMjM2NTIgOC45MTk3MiA3LjIyMjMgOC45ODY0NSA3LjE5NDY2QzkuMDUzMTggNy4xNjcwMiA5LjExMzgxIDcuMTI2NTEgOS4xNjQ4OSA3LjA3NTQzQzkuMjE1OTYgNy4wMjQzNiA5LjI1NjQ3IDYuOTYzNzMgOS4yODQxMSA2Ljg5N0M5LjMxMTc1IDYuODMwMjcgOS4zMjU5OCA2Ljc1ODc1IDkuMzI1OTggNi42ODY1MkM5LjMyNTk4IDYuNjE0MyA5LjMxMTc1IDYuNTQyNzggOS4yODQxMSA2LjQ3NjA1QzkuMjU2NDcgNi40MDkzMiA5LjIxNTk2IDYuMzQ4NjkgOS4xNjQ4OSA2LjI5NzYxQzkuMTEzODEgNi4yNDY1NCA5LjA1MzE4IDYuMjA2MDMgOC45ODY0NSA2LjE3ODM5QzguOTE5NzIgNi4xNTA3NSA4Ljg0ODIgNi4xMzY1MiA4Ljc3NTk4IDYuMTM2NTJIOC4wNTg0QzkuNzcwMiA0Ljg0Mzg3IDExLjgzOTkgNC4xMDE5NSAxNC4wMDEgNC4xMDE5NUMxOS40NzUxIDQuMTAxOTUgMjMuOTAxIDguNTI3ODIgMjMuOTAxIDE0LjAwMkMyMy45MDEgMTkuNDc2MSAxOS40NzUxIDIzLjkwMiAxNC4wMDEgMjMuOTAyQzguNTI2ODQgMjMuOTAyIDQuMTAwOTggMTkuNDc2MSA0LjEwMDk4IDE0LjAwMkM0LjEwMDk4IDEyLjYzODEgNC4zODI2MyAxMS4yODg4IDQuOTI4NTUgMTAuMDM4OUM0Ljk4NjkxIDkuOTA1MzIgNC45ODk4MiA5Ljc1Mzk5IDQuOTM2NjUgOS42MTgyMkM0Ljg4MzQ3IDkuNDgyNDYgNC43Nzg1NSA5LjM3MzM2IDQuNjQ0OTYgOS4zMTQ5MkM0LjU3ODc3IDkuMjg1OTYgNC41MDc1MyA5LjI3MDMyIDQuNDM1MyA5LjI2ODlDNC4zNjMwNiA5LjI2NzQ3IDQuMjkxMjYgOS4yODAzIDQuMjIzOTggOS4zMDY2M0M0LjE1NjcxIDkuMzMyOTcgNC4wOTUyOCA5LjM3MjMgNC4wNDMyMSA5LjQyMjM4QzMuOTkxMTQgOS40NzI0NyAzLjk0OTQ0IDkuNTMyMzIgMy45MjA1MSA5LjU5ODUyQzMuMzEzOTMgMTAuOTg3MiAzLjAwMDk4IDEyLjQ4NjYgMy4wMDA5OCAxNC4wMDJDMy4wMDA5OCAyMC4wNzA2IDcuOTMyMzYgMjUuMDAyIDE0LjAwMSAyNS4wMDJDMjAuMDY5NiAyNS4wMDIgMjUuMDAxIDIwLjA3MDYgMjUuMDAxIDE0LjAwMkMyNS4wMDEgNy45MzMzNCAyMC4wNjk2IDMuMDAxOTUgMTQuMDAxIDMuMDAxOTVaXCJcclxuICAgICAgICAgICAgZmlsbD1cIiNGM0EwNDFcIiAvPlxyXG4gICAgICAgICAgPHBhdGggZmlsbC1ydWxlPVwiZXZlbm9kZFwiIGNsaXAtcnVsZT1cImV2ZW5vZGRcIlxyXG4gICAgICAgICAgICBkPVwiTTEzLjk5ODggNi4xMzk2NUM5LjY2MTYgNi4xMzk2NSA2LjEzMzc5IDkuNjY3NDYgNi4xMzM3OSAxNC4wMDQ2QzYuMTMzNzkgMTguMzQxOCA5LjY2MTYgMjEuODY5NiAxMy45OTg4IDIxLjg2OTZDMTguMzM2IDIxLjg2OTYgMjEuODYzOCAxOC4zNDE4IDIxLjg2MzggMTQuMDA0NkMyMS44NjM4IDkuNjY3NDYgMTguMzM2IDYuMTM5NjUgMTMuOTk4OCA2LjEzOTY1Wk0xMy45OTg4IDguMjI5NjVDMTQuMTQ0NyA4LjIyOTY1IDE0LjI4NDYgOC4yODc1OSAxNC4zODc3IDguMzkwNzRDMTQuNDkwOCA4LjQ5Mzg4IDE0LjU0ODggOC42MzM3OCAxNC41NDg4IDguNzc5NjVWMTMuNzc2OUwxNy41MjI3IDE2Ljc1MDhDMTcuNjI1OCAxNi44NTM5IDE3LjY4MzcgMTYuOTkzOCAxNy42ODM3IDE3LjEzOTZDMTcuNjgzNyAxNy4yODU1IDE3LjYyNTggMTcuNDI1NCAxNy41MjI3IDE3LjUyODVDMTcuNDE5NSAxNy42MzE2IDE3LjI3OTYgMTcuNjg5NiAxNy4xMzM4IDE3LjY4OTZDMTYuOTg3OSAxNy42ODk2IDE2Ljg0ODEgMTcuNjMxNiAxNi43NDQ5IDE3LjUyODVMMTMuNjA5OSAxNC4zOTM1QzEzLjUwNjggMTQuMjkwNCAxMy40NDg4IDE0LjE1MDUgMTMuNDQ4OCAxNC4wMDQ2VjguNzc5NjVDMTMuNDQ4OCA4LjYzMzc4IDEzLjUwNjcgOC40OTM4OCAxMy42MDk5IDguMzkwNzRDMTMuNzEzIDguMjg3NTkgMTMuODUyOSA4LjIyOTY1IDEzLjk5ODggOC4yMjk2NVpcIlxyXG4gICAgICAgICAgICBmaWxsPVwiI0YzQTA0MVwiIC8+XHJcbiAgICAgICAgICA8cmVjdCB3aWR0aD1cIjI4LjU2XCIgaGVpZ2h0PVwiMjhcIiByeD1cIjEuNTE0NzlcIiBmaWxsPVwiI0YzQTA0MVwiIC8+XHJcbiAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICBkPVwiTTE1LjA2OCAyMi43MzkxVjE3LjY3MDhIMTguNDk2OEwxNC4yMTA4IDEyLjYwMjVMOS45MjQ4IDE3LjY3MDhIMTMuMzUzNlYyMi43MzkxSDkuMDY3NTlWMjIuNjk2OUM4LjkyMzU4IDIyLjcwNTMgOC43ODY0MyAyMi43MzkxIDguNjM4OTkgMjIuNzM5MUM2LjkzMzkxIDIyLjczOTEgNS4yOTg2NiAyMi4wNzE3IDQuMDkyOTggMjAuODgzNUMyLjg4NzMgMTkuNjk1NCAyLjIwOTk2IDE4LjA4NCAyLjIwOTk2IDE2LjQwMzdDMi4yMDk5NiAxMy4xNTMyIDQuNzA0NDMgMTAuNTA0MiA3LjkwNTIzIDEwLjE0MUM4LjE4NTg1IDguNjk1MyA4Ljk2ODkyIDcuMzkxMTggMTAuMTE5NyA2LjQ1MjkyQzExLjI3MDYgNS41MTQ2NSAxMi43MTcyIDUuMDAwODkgMTQuMjEwOCA1QzE1LjcwNDcgNS4wMDA4MiAxNy4xNTE1IDUuNTE0NTIgMTguMzAyNiA2LjQ1Mjc3QzE5LjQ1MzcgNy4zOTEwMSAyMC4yMzcxIDguNjk1MTYgMjAuNTE4MSAxMC4xNDFDMjMuNzE4OSAxMC41MDQyIDI2LjIxIDEzLjE1MzIgMjYuMjEgMTYuNDAzN0MyNi4yMSAxOC4wODQgMjUuNTMyNiAxOS42OTU0IDI0LjMyNjkgMjAuODgzNUMyMy4xMjEzIDIyLjA3MTcgMjEuNDg2IDIyLjczOTEgMTkuNzgwOSAyMi43MzkxQzE5LjYzNjkgMjIuNzM5MSAxOS40OTgxIDIyLjcwNTMgMTkuMzUyMyAyMi42OTY5VjIyLjczOTFIMTUuMDY4WlwiXHJcbiAgICAgICAgICAgIGZpbGw9XCJ3aGl0ZVwiIC8+XHJcbiAgICAgICAgPC9zdmc+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8YSB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImZpbGVJbnB1dC5jbGljaygpXCIgY2xhc3M9XCJ0ZXh0LWJhc2UgY3Vyc29yLXBvaW50ZXJcIj5cclxuICAgICAgICB7eyBzZXR0aW5nKCd1cGxvYWQtdGV4dCcpIH19XHJcbiAgICAgIDwvYT5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLSA8aW5wdXQgI2ZpbGVJbnB1dCB0eXBlPVwiZmlsZVwiIFttdWx0aXBsZV09XCJzZXR0aW5nKCdtdWx0aXBsZS11cGxvYWQnKVwiIChjaGFuZ2UpPVwib25GaWxlU2VsZWN0ZWQoJGV2ZW50KVwiIGhpZGRlbiAvPlxyXG4gICAgPGRpdiBjbGFzcz1cInNlcGFyYXRvclwiPjwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImZpbGUtbGlzdCBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtNCBmbGV4LXdyYXBcIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInVwbG9hZGVkRmlsZXM/Lmxlbmd0aFwiPlxyXG4gICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGZpbGUgb2YgdXBsb2FkZWRGaWxlczsgbGV0IGkgPSBpbmRleFwiIFxyXG4gICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlclwiIChjbGljayk9XCJkZWxldGVGaWxlKGkpXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVsYXRpdmVcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNsb3NlX2ljb24gY3Vyc29yLXBvaW50ZXJcIj5cclxuICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiMThcIiB2aWV3Qm94PVwiMCAwIDE4IDE4XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfNjgzN18yOTY4MylcIj5cclxuICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjE4XCIgcng9XCI5XCIgZmlsbD1cIiNGM0EwNDFcIiAvPlxyXG4gICAgICAgICAgICAgICAgICA8bWFzayBpZD1cIm1hc2swXzY4MzdfMjk2ODNcIiBzdHlsZT1cIm1hc2stdHlwZTphbHBoYVwiIG1hc2tVbml0cz1cInVzZXJTcGFjZU9uVXNlXCIgeD1cIjRcIiB5PVwiNFwiIHdpZHRoPVwiMjRcIlxyXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjI0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHJlY3QgeD1cIjRcIiB5PVwiNFwiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIGZpbGw9XCIjRDlEOUQ5XCIgLz5cclxuICAgICAgICAgICAgICAgICAgPC9tYXNrPlxyXG4gICAgICAgICAgICAgICAgICA8ZyBtYXNrPVwidXJsKCNtYXNrMF82ODM3XzI5NjgzKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICBkPVwiTTguMjA0NSA4Ljk5ODE1TDUuODE4MDIgNi42MTE2N0w2LjYxMzUxIDUuODE2MTdMOSA4LjIwMjY2TDExLjM4NjUgNS44MTYxN0wxMi4xODIgNi42MTE2N0w5Ljc5NTUgOC45OTgxNUwxMi4xODIgMTEuMzg0NkwxMS4zODY1IDEyLjE4MDFMOSA5Ljc5MzY1TDYuNjEzNTEgMTIuMTgwMUw1LjgxODAyIDExLjM4NDZMOC4yMDQ1IDguOTk4MTVaXCJcclxuICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJ3aGl0ZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF82ODM3XzI5NjgzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjE4XCIgcng9XCI5XCIgZmlsbD1cIndoaXRlXCIgLz5cclxuICAgICAgICAgICAgICAgICAgPC9jbGlwUGF0aD5cclxuICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJmaWxlLXRodW1ibmFpbFwiIHN0eWxlPVwiYm9yZGVyLXJhZGl1czogNHB4XCIgW3NyY109XCJmaWxlPy5yZXN1bHRcIiBhbHQ9XCJcIiAvPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCB3LWZ1bGxcIj5cclxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb250LXNlbWlib2xkIHRleHQtc20gbWItMVwiPlRpdGxlPC9sYWJlbD5cclxuICAgICAgICAgICAgICA8aW5wdXQgWyhuZ01vZGVsKV09XCJmaWxlLnRpdGxlXCJcclxuICAgICAgICAgICAgICAgICAgICAgbmFtZT1cInRpdGxle3tpfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbk1ldGFDaGFuZ2UoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRW50ZXIgdGl0bGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJvcmRlciBib3JkZXItb3JhbmdlLTMwMCByb3VuZGVkIHB4LTMgcHktMiBtYi0zIHctZnVsbCBvdXRsaW5lLW5vbmUgZm9jdXM6cmluZyBmb2N1czpyaW5nLW9yYW5nZS0yMDBcIiAvPlxyXG4gICAgICAgICAgXHJcbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9udC1zZW1pYm9sZCB0ZXh0LXNtIG1iLTFcIj5Ob3RlczwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPHRleHRhcmVhIFsobmdNb2RlbCldPVwiZmlsZS5ub3Rlc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJub3Rlc3t7aX19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25NZXRhQ2hhbmdlKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkVudGVyIG5vdGVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJib3JkZXIgYm9yZGVyLW9yYW5nZS0zMDAgcm91bmRlZCBweC0zIHB5LTIgdy1mdWxsIG91dGxpbmUtbm9uZSBmb2N1czpyaW5nIGZvY3VzOnJpbmctb3JhbmdlLTIwMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvd3M9XCIyXCI+PC90ZXh0YXJlYT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICBcclxuXHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8cD57e2ZpbGU/Lm5hbWV9fTwvcD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj4gLS0+XHJcblxyXG4gICAgPGlucHV0ICNmaWxlSW5wdXRcclxuICAgICAgIHR5cGU9XCJmaWxlXCJcclxuICAgICAgIFttdWx0aXBsZV09XCJzZXR0aW5nKCdtdWx0aXBsZS11cGxvYWQnKVwiXHJcbiAgICAgICAoY2hhbmdlKT1cIm9uRmlsZVNlbGVjdGVkKCRldmVudClcIlxyXG4gICAgICAgaGlkZGVuIC8+XHJcblxyXG48ZGl2IGNsYXNzPVwic2VwYXJhdG9yXCI+PC9kaXY+XHJcblxyXG48ZGl2IGNsYXNzPVwiZmlsZS1saXN0IGZsZXggaXRlbXMtY2VudGVyIGdhcC02IGZsZXgtd3JhcFwiICpuZ0lmPVwiZmFsc2VcIj5cclxuICA8bmctY29udGFpbmVyICpuZ0lmPVwidXBsb2FkZWRGaWxlcz8ubGVuZ3RoXCI+XHJcbiAgICA8ZGl2ICpuZ0Zvcj1cImxldCBmaWxlIG9mIHVwbG9hZGVkRmlsZXM7IGxldCBpID0gaW5kZXhcIlxyXG4gICAgICAgICBjbGFzcz1cImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyXCI+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwicmVsYXRpdmUgcC0zIGJvcmRlciByb3VuZGVkLWxnIHNoYWRvdy1zbSBiZy13aGl0ZSB3LTY0XCI+XHJcbiAgICAgICAgPCEtLSBDbG9zZSBpY29uIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjbG9zZV9pY29uIGN1cnNvci1wb2ludGVyIGFic29sdXRlIHRvcC0yIHJpZ2h0LTJcIiAoY2xpY2spPVwiZGVsZXRlRmlsZShpKVwiPlxyXG4gICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjE4XCIgdmlld0JveD1cIjAgMCAxOCAxOFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxOFwiIHJ4PVwiOVwiIGZpbGw9XCIjRjNBMDQxXCIgLz5cclxuICAgICAgICAgICAgPHBhdGggZD1cIk04LjIgOWwtMi40LTIuNC44LS44TDkgOC4ybDIuNC0yLjQuOC44TDkuOCA5bDIuNCAyLjQtLjguOEw5IDkuOGwtMi40IDIuNC0uOC0uOEw4LjIgOXpcIlxyXG4gICAgICAgICAgICAgICAgICBmaWxsPVwid2hpdGVcIi8+XHJcbiAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPCEtLSBUaHVtYm5haWwgLS0+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpbGUudHlwZSA9PT0gJ2ltYWdlJzsgZWxzZSBub25JbWFnZVRodW1iXCI+XHJcbiAgICAgICAgICA8aW1nIGNsYXNzPVwiZmlsZS10aHVtYm5haWwgdy1mdWxsIGgtMzIgb2JqZWN0LWNvdmVyIHJvdW5kZWQgbWItM1wiXHJcbiAgICAgICAgICAgICAgIFtzcmNdPVwiZmlsZT8ucmVzdWx0XCJcclxuICAgICAgICAgICAgICAgYWx0PVwicHJldmlld1wiIC8+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9uSW1hZ2VUaHVtYj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWxlLXRodW1ibmFpbCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBib3JkZXIgcm91bmRlZCBtYi0zIHctZnVsbCBoLTMyIGJnLWdyYXktNTBcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiZmlsZS50eXBlXCI+XHJcbiAgICAgICAgICAgICAgPCEtLSBDU1YgLS0+XHJcbiAgICAgICAgICAgICAgPHN2ZyAqbmdTd2l0Y2hDYXNlPVwiJ2NzdidcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCI0OFwiIGhlaWdodD1cIjQ4XCIgdmlld0JveD1cIjAgMCA0OCA0OFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICA8cmVjdCB4PVwiOFwiIHk9XCI2XCIgd2lkdGg9XCIyOFwiIGhlaWdodD1cIjM2XCIgcng9XCIzXCIgc3Ryb2tlPVwiIzIyYzU1ZVwiIHN0cm9rZS13aWR0aD1cIjJcIi8+XHJcbiAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTI4IDZ2OGEyIDIgMCAwIDAgMiAyaDZcIiBzdHJva2U9XCIjMjJjNTVlXCIgc3Ryb2tlLXdpZHRoPVwiMlwiLz5cclxuICAgICAgICAgICAgICAgIDx0ZXh0IHg9XCIxNFwiIHk9XCIzNFwiIGZvbnQtc2l6ZT1cIjEwXCIgZm9udC1mYW1pbHk9XCJtb25vc3BhY2VcIiBmaWxsPVwiIzIyYzU1ZVwiPkNTVjwvdGV4dD5cclxuICAgICAgICAgICAgICA8L3N2Zz5cclxuXHJcbiAgICAgICAgICAgICAgPCEtLSBURVhUIC0tPlxyXG4gICAgICAgICAgICAgIDxzdmcgKm5nU3dpdGNoQ2FzZT1cIid0ZXh0J1wiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjQ4XCIgaGVpZ2h0PVwiNDhcIiB2aWV3Qm94PVwiMCAwIDQ4IDQ4XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgIDxyZWN0IHg9XCI4XCIgeT1cIjZcIiB3aWR0aD1cIjI4XCIgaGVpZ2h0PVwiMzZcIiByeD1cIjNcIiBzdHJva2U9XCIjM2I4MmY2XCIgc3Ryb2tlLXdpZHRoPVwiMlwiLz5cclxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMjggNnY4YTIgMiAwIDAgMCAyIDJoNlwiIHN0cm9rZT1cIiMzYjgyZjZcIiBzdHJva2Utd2lkdGg9XCIyXCIvPlxyXG4gICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xNCAyNGgyME0xNCAyOWgyME0xNCAzNGgxMlwiIHN0cm9rZT1cIiMzYjgyZjZcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiLz5cclxuICAgICAgICAgICAgICA8L3N2Zz5cclxuXHJcbiAgICAgICAgICAgICAgPCEtLSBHZW5lcmljIC0tPlxyXG4gICAgICAgICAgICAgIDxzdmcgKm5nU3dpdGNoRGVmYXVsdCB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCI0OFwiIGhlaWdodD1cIjQ4XCIgdmlld0JveD1cIjAgMCA0OCA0OFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICA8cmVjdCB4PVwiOFwiIHk9XCI2XCIgd2lkdGg9XCIyOFwiIGhlaWdodD1cIjM2XCIgcng9XCIzXCIgc3Ryb2tlPVwiIzljYTNhZlwiIHN0cm9rZS13aWR0aD1cIjJcIi8+XHJcbiAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTI4IDZ2OGEyIDIgMCAwIDAgMiAyaDZcIiBzdHJva2U9XCIjOWNhM2FmXCIgc3Ryb2tlLXdpZHRoPVwiMlwiLz5cclxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTYgMzBoMTZcIiBzdHJva2U9XCIjOWNhM2FmXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIi8+XHJcbiAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgPCEtLSBNZXRhZGF0YSAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCB3LWZ1bGxcIj5cclxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvbnQtc2VtaWJvbGQgdGV4dC1zbSBtYi0xXCI+VGl0bGU8L2xhYmVsPlxyXG4gICAgICAgICAgPGlucHV0IFsobmdNb2RlbCldPVwiZmlsZS50aXRsZVwiXHJcbiAgICAgICAgICAgICAgICAgbmFtZT1cInRpdGxle3tpfX1cIlxyXG4gICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uTWV0YUNoYW5nZSgpXCJcclxuICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkVudGVyIHRpdGxlXCJcclxuICAgICAgICAgICAgICAgICBjbGFzcz1cImJvcmRlciBib3JkZXItb3JhbmdlLTMwMCByb3VuZGVkIHB4LTMgcHktMiBtYi0zIHctZnVsbCBvdXRsaW5lLW5vbmUgZm9jdXM6cmluZyBmb2N1czpyaW5nLW9yYW5nZS0yMDBcIiAvPlxyXG5cclxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvbnQtc2VtaWJvbGQgdGV4dC1zbSBtYi0xXCI+Tm90ZXM8L2xhYmVsPlxyXG4gICAgICAgICAgPHRleHRhcmVhIFsobmdNb2RlbCldPVwiZmlsZS5ub3Rlc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZT1cIm5vdGVze3tpfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uTWV0YUNoYW5nZSgpXCJcclxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkVudGVyIG5vdGVzXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJvcmRlciBib3JkZXItb3JhbmdlLTMwMCByb3VuZGVkIHB4LTMgcHktMiB3LWZ1bGwgb3V0bGluZS1ub25lIGZvY3VzOnJpbmcgZm9jdXM6cmluZy1vcmFuZ2UtMjAwXCJcclxuICAgICAgICAgICAgICAgICAgICByb3dzPVwiMlwiPjwvdGV4dGFyZWE+XHJcblxyXG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9udC1zZW1pYm9sZCB0ZXh0LXNtIG10LTMgbWItMVwiPkNhdGVnb3J5PC9sYWJlbD5cclxuICAgICAgICAgIDxzZWxlY3QgWyhuZ01vZGVsKV09XCJmaWxlLmNhdGVnb3J5XCJcclxuICAgICAgICAgICAgICAgICAgbmFtZT1cImNhdGVnb3J5e3tpfX1cIlxyXG4gICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbk1ldGFDaGFuZ2UoKVwiXHJcbiAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjdCBDYXRlZ29yeVwiXHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYm9yZGVyIGJvcmRlci1vcmFuZ2UtMzAwIHJvdW5kZWQgcHgtMyBweS0yIHctZnVsbCBvdXRsaW5lLW5vbmUgZm9jdXM6cmluZyBmb2N1czpyaW5nLW9yYW5nZS0yMDBcIj5cclxuICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgYyBvZiBjYXRlZ29yaWVzXCIgW25nVmFsdWVdPVwiY1wiPnt7IGMgfX08L29wdGlvbj5cclxuICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxwIGNsYXNzPVwibXQtMiB0ZXh0LXNtIHRleHQtZ3JheS02MDBcIj57eyBmaWxlPy5uYW1lIH19PC9wPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcbjwvZGl2PlxyXG5cclxuPGRpdiBjbGFzcz1cImZpbGUtbGlzdCBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtOCBmbGV4LXdyYXBcIj5cclxuICA8bmctY29udGFpbmVyICpuZ0lmPVwidXBsb2FkZWRGaWxlcz8ubGVuZ3RoXCI+XHJcbiAgICA8ZGl2ICpuZ0Zvcj1cImxldCBmaWxlIG9mIHVwbG9hZGVkRmlsZXM7IGxldCBpID0gaW5kZXhcIlxyXG4gICAgICAgICBjbGFzcz1cInJlbGF0aXZlIHAtMyBib3JkZXIgcm91bmRlZC1sZyBzaGFkb3ctc20gYmctd2hpdGUgdy1bNTAwcHhdIGZsZXhcIj5cclxuXHJcbiAgICAgIDwhLS0gQ2xvc2UgaWNvbiAtLT5cclxuICAgICAgPGRpdiBjbGFzcz1cImNsb3NlX2ljb24gY3Vyc29yLXBvaW50ZXIgYWJzb2x1dGUgdG9wLTIgcmlnaHQtMlwiIChjbGljayk9XCJkZWxldGVGaWxlKGkpXCI+XHJcbiAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjE4XCIgdmlld0JveD1cIjAgMCAxOCAxOFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICA8cmVjdCB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiMThcIiByeD1cIjlcIiBmaWxsPVwiI0YzQTA0MVwiIC8+XHJcbiAgICAgICAgICA8cGF0aCBkPVwiTTguMiA5bC0yLjQtMi40LjgtLjhMOSA4LjJsMi40LTIuNC44LjhMOS44IDlsMi40IDIuNC0uOC44TDkgOS44bC0yLjQgMi40LS44LS44TDguMiA5elwiXHJcbiAgICAgICAgICAgICAgICBmaWxsPVwid2hpdGVcIi8+XHJcbiAgICAgICAgPC9zdmc+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPCEtLSBUaHVtYm5haWwgb24gbGVmdCAtLT5cclxuICAgICAgPGRpdiBjbGFzcz1cInctMjggaC0yOCBmbGV4LXNocmluay0wXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpbGUudHlwZSA9PT0gJ2ltYWdlJzsgZWxzZSBub25JbWFnZVRodW1iXCI+XHJcbiAgICAgICAgICA8aW1nIGNsYXNzPVwiZmlsZS10aHVtYm5haWwgdy1mdWxsIGgtZnVsbCBvYmplY3QtY292ZXIgcm91bmRlZFwiXHJcbiAgICAgICAgICAgICAgIFtzcmNdPVwiZmlsZT8ucmVzdWx0XCJcclxuICAgICAgICAgICAgICAgYWx0PVwicHJldmlld1wiIC8+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9uSW1hZ2VUaHVtYj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWxlLXRodW1ibmFpbCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBib3JkZXIgcm91bmRlZCB3LWZ1bGwgaC1mdWxsIGJnLWdyYXktNTBcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiZmlsZS50eXBlXCI+XHJcbiAgICAgICAgICAgICAgPCEtLSBDU1YgLS0+XHJcbiAgICAgICAgICAgICAgPHN2ZyAqbmdTd2l0Y2hDYXNlPVwiJ2NzdidcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCI0OFwiIGhlaWdodD1cIjQ4XCIgdmlld0JveD1cIjAgMCA0OCA0OFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICA8cmVjdCB4PVwiOFwiIHk9XCI2XCIgd2lkdGg9XCIyOFwiIGhlaWdodD1cIjM2XCIgcng9XCIzXCIgc3Ryb2tlPVwiIzIyYzU1ZVwiIHN0cm9rZS13aWR0aD1cIjJcIi8+XHJcbiAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTI4IDZ2OGEyIDIgMCAwIDAgMiAyaDZcIiBzdHJva2U9XCIjMjJjNTVlXCIgc3Ryb2tlLXdpZHRoPVwiMlwiLz5cclxuICAgICAgICAgICAgICAgIDx0ZXh0IHg9XCIxNFwiIHk9XCIzNFwiIGZvbnQtc2l6ZT1cIjEwXCIgZm9udC1mYW1pbHk9XCJtb25vc3BhY2VcIiBmaWxsPVwiIzIyYzU1ZVwiPkNTVjwvdGV4dD5cclxuICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICA8IS0tIFRFWFQgLS0+XHJcbiAgICAgICAgICAgICAgPHN2ZyAqbmdTd2l0Y2hDYXNlPVwiJ3RleHQnXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiNDhcIiBoZWlnaHQ9XCI0OFwiIHZpZXdCb3g9XCIwIDAgNDggNDhcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgPHJlY3QgeD1cIjhcIiB5PVwiNlwiIHdpZHRoPVwiMjhcIiBoZWlnaHQ9XCIzNlwiIHJ4PVwiM1wiIHN0cm9rZT1cIiMzYjgyZjZcIiBzdHJva2Utd2lkdGg9XCIyXCIvPlxyXG4gICAgICAgICAgICAgICAgPHBhdGggZD1cIk0yOCA2djhhMiAyIDAgMCAwIDIgMmg2XCIgc3Ryb2tlPVwiIzNiODJmNlwiIHN0cm9rZS13aWR0aD1cIjJcIi8+XHJcbiAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE0IDI0aDIwTTE0IDI5aDIwTTE0IDM0aDEyXCIgc3Ryb2tlPVwiIzNiODJmNlwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIvPlxyXG4gICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgIDwhLS0gR2VuZXJpYyAtLT5cclxuICAgICAgICAgICAgICA8c3ZnICpuZ1N3aXRjaERlZmF1bHQgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiNDhcIiBoZWlnaHQ9XCI0OFwiIHZpZXdCb3g9XCIwIDAgNDggNDhcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgPHJlY3QgeD1cIjhcIiB5PVwiNlwiIHdpZHRoPVwiMjhcIiBoZWlnaHQ9XCIzNlwiIHJ4PVwiM1wiIHN0cm9rZT1cIiM5Y2EzYWZcIiBzdHJva2Utd2lkdGg9XCIyXCIvPlxyXG4gICAgICAgICAgICAgICAgPHBhdGggZD1cIk0yOCA2djhhMiAyIDAgMCAwIDIgMmg2XCIgc3Ryb2tlPVwiIzljYTNhZlwiIHN0cm9rZS13aWR0aD1cIjJcIi8+XHJcbiAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE2IDMwaDE2XCIgc3Ryb2tlPVwiIzljYTNhZlwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIvPlxyXG4gICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPCEtLSBNZXRhZGF0YSBvbiByaWdodCAtLT5cclxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgZmxleC0xIG1sLTRcIj5cclxuICAgICAgICA8IS0tIFRpdGxlIC0tPlxyXG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImZvbnQtc2VtaWJvbGQgdGV4dC1zbSBtYi0xXCI+VGl0bGU8L2xhYmVsPlxyXG4gICAgICAgIDxpbnB1dCBbKG5nTW9kZWwpXT1cImZpbGUudGl0bGVcIlxyXG4gICAgICAgICAgICAgICBuYW1lPVwidGl0bGV7e2l9fVwiXHJcbiAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uTWV0YUNoYW5nZSgpXCJcclxuICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJFbnRlciB0aXRsZVwiXHJcbiAgICAgICAgICAgICAgIGNsYXNzPVwiYm9yZGVyIGJvcmRlci1vcmFuZ2UtMzAwIHJvdW5kZWQgcHgtMyBweS0yIG1iLTMgdy1mdWxsIG91dGxpbmUtbm9uZSBmb2N1czpyaW5nIGZvY3VzOnJpbmctb3JhbmdlLTIwMFwiIC8+XHJcblxyXG4gICAgICAgIDwhLS0gTm90ZXMgLS0+XHJcbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9udC1zZW1pYm9sZCB0ZXh0LXNtIG1iLTFcIj5Ob3RlczwvbGFiZWw+XHJcbiAgICAgICAgPHRleHRhcmVhIFsobmdNb2RlbCldPVwiZmlsZS5ub3Rlc1wiXHJcbiAgICAgICAgICAgICAgICAgIG5hbWU9XCJub3Rlc3t7aX19XCJcclxuICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25NZXRhQ2hhbmdlKClcIlxyXG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkVudGVyIG5vdGVzXCJcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJib3JkZXIgYm9yZGVyLW9yYW5nZS0zMDAgcm91bmRlZCBweC0zIHB5LTIgbWItMyB3LWZ1bGwgb3V0bGluZS1ub25lIGZvY3VzOnJpbmcgZm9jdXM6cmluZy1vcmFuZ2UtMjAwXCJcclxuICAgICAgICAgICAgICAgICAgcm93cz1cIjJcIj48L3RleHRhcmVhPlxyXG5cclxuICAgICAgICA8IS0tIENhdGVnb3J5IC0tPlxyXG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImZvbnQtc2VtaWJvbGQgdGV4dC1zbSBtYi0xXCI+Q2F0ZWdvcnk8L2xhYmVsPlxyXG4gICAgICAgIDxzZWxlY3QgWyhuZ01vZGVsKV09XCJmaWxlLmNhdGVnb3J5XCJcclxuICAgICAgICAgICAgICAgIG5hbWU9XCJjYXRlZ29yeXt7aX19XCJcclxuICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uTWV0YUNoYW5nZSgpXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYm9yZGVyIGJvcmRlci1vcmFuZ2UtMzAwIHJvdW5kZWQgcHgtMyBweS0yIHctZnVsbCBvdXRsaW5lLW5vbmUgZm9jdXM6cmluZyBmb2N1czpyaW5nLW9yYW5nZS0yMDBcIj5cclxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJcIj5TZWxlY3QgQ2F0ZWdvcnk8L29wdGlvbj5cclxuICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IGMgb2YgY2F0ZWdvcmllc1wiIFtuZ1ZhbHVlXT1cImNcIj57eyBjIH19PC9vcHRpb24+XHJcbiAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcbjwvZGl2PlxyXG5cclxuXHJcblxyXG4gIDwvZGl2PlxyXG48L2Z4LWNvbXBvbmVudD4iXX0=
|
|
475
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZngtYnVpbGRlci13cmFwcGVyL3NyYy9saWIvY29tcG9uZW50cy91cGxvYWRlci91cGxvYWRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9meC1idWlsZGVyLXdyYXBwZXIvc3JjL2xpYi9jb21wb25lbnRzL3VwbG9hZGVyL3VwbG9hZGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFvQyxTQUFTLEVBQUUsTUFBTSxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUN2RyxPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBc0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRyxPQUFPLEVBQUUsZUFBZSxFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQWEsZUFBZSxFQUFnQixrQkFBa0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRWxKLE9BQU8sRUFBNkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNyRSxPQUFPLEVBQUUsRUFBRSxJQUFJLE1BQU0sRUFBQyxNQUFNLE1BQU0sQ0FBQzs7Ozs7QUFTbkMsTUFBTSxPQUFPLGlCQUFrQixTQUFRLGVBQWU7SUFnQmhDO0lBQStCO0lBZm5ELHVEQUF1RDtJQUNoRCxpQkFBaUIsR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO0lBQ3RDLGFBQWEsR0FBZSxFQUFFLENBQUM7SUFDL0IsYUFBYSxHQUFRO1FBQzFCLGFBQWEsRUFBRSxFQUFFO1FBQ2pCLFlBQVksRUFBRSxFQUFFO0tBQ2pCLENBQUM7SUFDRixVQUFVLEdBQUc7UUFD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QixTQUFTOytCQUNFLGFBQWEsY0FDWCxJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIGluamVjdCwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBVbnR5cGVkRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEZ4QmFzZUNvbXBvbmVudCwgRnhDb21wb25lbnQsIEZ4U2VsZWN0U2V0dGluZywgRnhTZXR0aW5nLCBGeFN0cmluZ1NldHRpbmcsIEZ4VmFsaWRhdGlvbiwgRnhWYWxpZGF0b3JTZXJ2aWNlIH0gZnJvbSAnQGluc3RhbnRzeXMtbGFicy9meCc7XHJcbmltcG9ydCB7IEZ4QnVpbGRlcldyYXBwZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vZngtYnVpbGRlci13cmFwcGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBmb3JrSm9pbiwgbWFwLCBPYnNlcnZhYmxlLCBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgdjQgYXMgdXVpZHY0fSBmcm9tICd1dWlkJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZngtdXBsb2FkZXInLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRnhDb21wb25lbnQsIEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vdXBsb2FkZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi91cGxvYWRlci5jb21wb25lbnQuY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgVXBsb2FkZXJDb21wb25lbnQgZXh0ZW5kcyBGeEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXR7XHJcbiAgLy8gcHVibGljIHVwbG9hZEZpbGVDb250cm9sID0gbmV3IFVudHlwZWRGb3JtQ29udHJvbCgpO1xyXG4gIHB1YmxpYyB1cGxvYWRGaWxlQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgpO1xyXG4gIHB1YmxpYyB1cGxvYWRlZEZpbGVzOiBBcnJheTxhbnk+ID0gW107XHJcbiAgcHVibGljIGZvcm1hdHRlZERhdGE6IGFueSA9IHtcclxuICAgIHVwbG9hZGVkRmlsZXM6IFtdLFxyXG4gICAgZGVsZXRlZEZpbGVzOiBbXVxyXG4gIH07XHJcbiAgY2F0ZWdvcmllcyA9IFtcclxuICAgICdPcmFsIEltYWdlcycsXHJcbiAgICAnUGFzdCBEb2NzJyxcclxuICAgICdYLVJheXMnLFxyXG4gICAgJ1Byb2ZpbGUnLFxyXG4gIF07XHJcbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PEJvb2xlYW4+KCk7XHJcbiAgcHJpdmF0ZSBodHRwID0gaW5qZWN0KEh0dHBDbGllbnQpO1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixwcml2YXRlIGZ4QnVpbGRlcldyYXBwZXJTZXJ2aWNlOiBGeEJ1aWxkZXJXcmFwcGVyU2VydmljZSkge1xyXG4gICAgc3VwZXIoY2RyKVxyXG4gICAgdGhpcy5vbkluaXQuc3Vic2NyaWJlKChmeERhdGEpPT57XHJcbiAgICAgIHRoaXMuX3JlZ2lzdGVyKHRoaXMudXBsb2FkRmlsZUNvbnRyb2wpO1xyXG4gICAgfSlcclxuICB9XHJcblxyXG5cclxuXHJcblxyXG5cclxuICB1cGxvYWRlZEltYWdlczogeyBba2V5OiBzdHJpbmddOiB7IHJlc3VsdDogc3RyaW5nLCBmaWxlOiBGaWxlIHwgbnVsbCB9W10gfSA9IHt9O1xyXG4gIGRlbGV0ZWRGaWxlczogYW55W10gPSBbXTtcclxuICAvLyBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgLy8gICB0aGlzLmZ4QnVpbGRlcldyYXBwZXJTZXJ2aWNlLnZhcmlhYmxlcyRcclxuICAvLyAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gIC8vICAgICAuc3Vic2NyaWJlKCh2YXJpYWJsZXM6IGFueSkgPT4ge1xyXG4gIC8vICAgICAgIGlmICghdmFyaWFibGVzKSByZXR1cm47XHJcbiAgXHJcbiAgLy8gICAgICAgY29uc3QgdXBsb2FkZWRGaWxlczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmdbXSB9ID0ge307XHJcbiAgXHJcbiAgLy8gICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModmFyaWFibGVzKSkge1xyXG4gIC8vICAgICAgICAgaWYgKGtleS5pbmNsdWRlcygndXBsb2FkZXInKSAmJiBBcnJheS5pc0FycmF5KHZhbHVlKSkge1xyXG4gIC8vICAgICAgICAgICB1cGxvYWRlZEZpbGVzW2tleV0gPSB2YWx1ZTtcclxuICAvLyAgICAgICAgIH1cclxuICAvLyAgICAgICB9XHJcbiAgXHJcbiAgLy8gICAgICAgZm9yIChjb25zdCBbdXBsb2FkZXJLZXksIHVybHNdIG9mIE9iamVjdC5lbnRyaWVzKHVwbG9hZGVkRmlsZXMpKSB7XHJcbiAgLy8gICAgICAgICBjb25zdCBpbWFnZUZldGNoZXM6IE9ic2VydmFibGU8c3RyaW5nPltdID0gW107XHJcbiAgXHJcbiAgLy8gICAgICAgICB1cmxzLmZvckVhY2goKHVybDogc3RyaW5nKSA9PiB7XHJcbiAgLy8gICAgICAgICAgIGlmICh1cmwpIHtcclxuICAvLyAgICAgICAgICAgICBjb25zdCBpbWFnZSQgPSB0aGlzLmh0dHAuZ2V0KHVybCwgeyByZXNwb25zZVR5cGU6ICdibG9iJyB9KS5waXBlKFxyXG4gIC8vICAgICAgICAgICAgICAgbWFwKChibG9iOiBCbG9iKSA9PiBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpKVxyXG4gIC8vICAgICAgICAgICAgICk7XHJcbiAgLy8gICAgICAgICAgICAgaW1hZ2VGZXRjaGVzLnB1c2goaW1hZ2UkKTtcclxuICAvLyAgICAgICAgICAgfVxyXG4gIC8vICAgICAgICAgfSk7XHJcbiAgXHJcbiAgLy8gICAgICAgICBpZiAoaW1hZ2VGZXRjaGVzLmxlbmd0aCkge1xyXG4gIC8vICAgICAgICAgICBmb3JrSm9pbihpbWFnZUZldGNoZXMpLnN1YnNjcmliZSh7XHJcbiAgLy8gICAgICAgICAgICAgbmV4dDogKGltYWdlVXJsczogc3RyaW5nW10pID0+IHtcclxuICAvLyAgICAgICAgICAgICAgIHRoaXMudXBsb2FkZWRJbWFnZXNbdXBsb2FkZXJLZXldID0gaW1hZ2VVcmxzLm1hcChyZXN1bHQgPT4gKHtcclxuICAvLyAgICAgICAgICAgICAgICAgcmVzdWx0LFxyXG4gIC8vICAgICAgICAgICAgICAgICBmaWxlOiBudWxsXHJcbiAgLy8gICAgICAgICAgICAgICB9KSk7XHJcbiAgLy8gICAgICAgICAgICAgICAvLyB0aGlzLnVwbG9hZGVkRmlsZXMgPSBbLi4udGhpcy51cGxvYWRlZEltYWdlc11cclxuICAvLyAgICAgICAgICAgICAgIHRoaXMudXBsb2FkZWRGaWxlcyA9IE9iamVjdC52YWx1ZXModGhpcy51cGxvYWRlZEltYWdlcykuZmxhdCgpO1xyXG4gIC8vICAgICAgICAgICAgIH0sXHJcbiAgLy8gICAgICAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAvLyAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEZhaWxlZCB0byBmZXRjaCBpbWFnZXMgZm9yICR7dXBsb2FkZXJLZXl9OmAsIGVycik7XHJcbiAgLy8gICAgICAgICAgICAgfVxyXG4gIC8vICAgICAgICAgICB9KTtcclxuICAvLyAgICAgICAgIH1cclxuICAvLyAgICAgICB9XHJcbiAgLy8gICAgIH0pO1xyXG4gIC8vIH1cclxuICBcclxuICAvLyBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAvLyAgIHRoaXMuZnhCdWlsZGVyV3JhcHBlclNlcnZpY2UudmFyaWFibGVzJFxyXG4gIC8vICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgLy8gICAgIC5zdWJzY3JpYmUoKHZhcmlhYmxlczogYW55KSA9PiB7XHJcbiAgLy8gICAgICAgaWYgKCF2YXJpYWJsZXMpIHJldHVybjtcclxuXHJcbiAgLy8gICAgICAgY29uc3QgdXBsb2FkZWRGaWxlczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmdbXSB9ID0ge307XHJcblxyXG4gIC8vICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHZhcmlhYmxlcykpIHtcclxuICAvLyAgICAgICAgIGlmIChrZXkuaW5jbHVkZXMoJ3VwbG9hZGVyJykgJiYgQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcclxuICAvLyAgICAgICAgICAgdXBsb2FkZWRGaWxlc1trZXldID0gdmFsdWU7XHJcbiAgLy8gICAgICAgICB9XHJcbiAgLy8gICAgICAgfVxyXG5cclxuICAvLyAgICAgICBmb3IgKGNvbnN0IFt1cGxvYWRlcktleSwgdXJsc10gb2YgT2JqZWN0LmVudHJpZXModXBsb2FkZWRGaWxlcykpIHtcclxuICAvLyAgICAgICAgIGNvbnN0IGltYWdlRmV0Y2hlczogT2JzZXJ2YWJsZTx7IHJlc3VsdDogc3RyaW5nLCBvcmlnaW5hbFVybDogc3RyaW5nIH0+W10gPSBbXTtcclxuXHJcbiAgLy8gICAgICAgICB1cmxzLmZvckVhY2goKHVybDogc3RyaW5nKSA9PiB7XHJcbiAgLy8gICAgICAgICAgIGlmICh1cmwpIHtcclxuICAvLyAgICAgICAgICAgICBjb25zdCBpbWFnZSQgPSB0aGlzLmh0dHAuZ2V0KHVybCwgeyByZXNwb25zZVR5cGU6ICdibG9iJyB9KS5waXBlKFxyXG4gIC8vICAgICAgICAgICAgICAgbWFwKChibG9iOiBCbG9iKSA9PiAoe1xyXG4gIC8vICAgICAgICAgICAgICAgICByZXN1bHQ6IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYiksIC8vIGp1c3QgZm9yIHByZXZpZXdcclxuICAvLyAgICAgICAgICAgICAgICAgb3JpZ2luYWxVcmw6IHVybFxyXG4gIC8vICAgICAgICAgICAgICAgfSkpXHJcbiAgLy8gICAgICAgICAgICAgKTtcclxuICAvLyAgICAgICAgICAgICBpbWFnZUZldGNoZXMucHVzaChpbWFnZSQpO1xyXG4gIC8vICAgICAgICAgICB9XHJcbiAgLy8gICAgICAgICB9KTtcclxuXHJcbiAgLy8gICAgICAgICBpZiAoaW1hZ2VGZXRjaGVzLmxlbmd0aCkge1xyXG4gIC8vICAgICAgICAgICBmb3JrSm9pbihpbWFnZUZldGNoZXMpLnN1YnNjcmliZSh7XHJcbiAgLy8gICAgICAgICAgICAgbmV4dDogKGltYWdlRGF0YSkgPT4ge1xyXG4gIC8vICAgICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkID0gaW1hZ2VEYXRhLm1hcChpdGVtID0+ICh7XHJcbiAgLy8gICAgICAgICAgICAgICAgIGlkOiB1dWlkdjQoKSxcclxuICAvLyAgICAgICAgICAgICAgICAgZmlsZTogbnVsbCxcclxuICAvLyAgICAgICAgICAgICAgICAgb3JpZ2luYWxVcmw6IGl0ZW0ub3JpZ2luYWxVcmwsXHJcbiAgLy8gICAgICAgICAgICAgICAgIHJlc3VsdDogaXRlbS5yZXN1bHRcclxuICAvLyAgICAgICAgICAgICAgIH0pKTtcclxuXHJcbiAgLy8gICAgICAgICAgICAgICB0aGlzLnVwbG9hZGVkRmlsZXMgPSBbLi4udGhpcy51cGxvYWRlZEZpbGVzLCAuLi5mb3JtYXR0ZWRdO1xyXG4gIC8vICAgICAgICAgICAgICAgdGhpcy51cGxvYWRGaWxlQ29udHJvbC5zZXRWYWx1ZSh0aGlzLnVwbG9hZGVkRmlsZXMpO1xyXG4gIC8vICAgICAgICAgICAgIH0sXHJcbiAgLy8gICAgICAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAvLyAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEZhaWxlZCB0byBmZXRjaCBpbWFnZXMgZm9yICR7dXBsb2FkZXJLZXl9OmAsIGVycik7XHJcbiAgLy8gICAgICAgICAgICAgfVxyXG4gIC8vICAgICAgICAgICB9KTtcclxuICAvLyAgICAgICAgIH1cclxuICAvLyAgICAgICB9XHJcbiAgLy8gICAgIH0pO1xyXG4gIC8vIH1cclxuXHJcbi8vICAgbmdPbkluaXQoKTogdm9pZCB7XHJcbi8vICAgICB0aGlzLmZ4QnVpbGRlcldyYXBwZXJTZXJ2aWNlLnZhcmlhYmxlcyRcclxuLy8gICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4vLyAgICAgICAuc3Vic2NyaWJlKCh2YXJpYWJsZXM6IGFueSkgPT4ge1xyXG4vLyAgICAgICAgIGlmICghdmFyaWFibGVzKSByZXR1cm47XHJcbiAgXHJcbi8vICAgICAgICAgY29uc3QgdXBsb2FkZWRGaWxlc01hcDogeyBba2V5OiBzdHJpbmddOiBzdHJpbmdbXSB9ID0ge307XHJcbiAgXHJcbi8vICAgICAgICAgLy8gRXh0cmFjdCB1cGxvYWRlciBrZXlzIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIFVSTCBhcnJheXNcclxuLy8gICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh2YXJpYWJsZXMpKSB7XHJcbi8vICAgICAgICAgICBpZiAoa2V5LmluY2x1ZGVzKCd1cGxvYWRlcicpICYmIEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XHJcbi8vICAgICAgICAgICAgIHVwbG9hZGVkRmlsZXNNYXBba2V5XSA9IHZhbHVlO1xyXG4vLyAgICAgICAgICAgfVxyXG4vLyAgICAgICAgIH1cclxuICBcclxuLy8gICAgICAgICBmb3IgKGNvbnN0IFt1cGxvYWRlcktleSwgdXJsc10gb2YgT2JqZWN0LmVudHJpZXModXBsb2FkZWRGaWxlc01hcCkpIHtcclxuLy8gICAgICAgICAgIC8vIGNvbnN0IGltYWdlRmV0Y2hlczogT2JzZXJ2YWJsZTx7IHJlc3VsdDogc3RyaW5nOyBvcmlnaW5hbFVybDogYW55OyB0aXRsZTpzdHJpbmcgOyBub3RlczpzdHJpbmcgfT5bXSA9IFtdO1xyXG4gIFxyXG4vLyAgICAgICAgICAgLy8gdXJscy5mb3JFYWNoKChvcmlnaW5hbFVybDphbnkpID0+IHtcclxuLy8gICAgICAgICAgIC8vICAgaWYgKG9yaWdpbmFsVXJsKSB7XHJcbi8vICAgICAgICAgICAvLyAgICAgY29uc3QgaW1hZ2UkID0gdGhpcy5odHRwLmdldChvcmlnaW5hbFVybD8ub3JpZ2luYWxVcmwsIHsgcmVzcG9uc2VUeXBlOiAnYmxvYicgfSkucGlwZShcclxuLy8gICAgICAgICAgIC8vICAgICAgIG1hcCgoYmxvYjogQmxvYikgPT4gKHtcclxuLy8gICAgICAgICAgIC8vICAgICAgICAgcmVzdWx0OiBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpLCAvLyBmb3IgcHJldmlld1xyXG4vLyAgICAgICAgICAgLy8gICAgICAgICBvcmlnaW5hbFVybDogb3JpZ2luYWxVcmw/Lm9yaWdpbmFsVXJsICAgICAgICAgIC8vIHByZXNlcnZlIG9yaWdpbmFsXHJcbi8vICAgICAgICAgICAvLyAgICAgICB9KSlcclxuLy8gICAgICAgICAgIC8vICAgICApO1xyXG4vLyAgICAgICAgICAgLy8gICAgIGltYWdlRmV0Y2hlcy5wdXNoKGltYWdlJCk7XHJcbi8vICAgICAgICAgICAvLyAgIH1cclxuLy8gICAgICAgICAgIC8vIH0pO1xyXG5cclxuLy8gICAgICAgICAgIGNvbnN0IGltYWdlRmV0Y2hlczogT2JzZXJ2YWJsZTx7IHJlc3VsdDogc3RyaW5nOyBvcmlnaW5hbFVybDogYW55OyB0aXRsZTogc3RyaW5nOyBub3Rlczogc3RyaW5nIH0+W10gPSBbXTtcclxuXHJcbi8vIHVybHMuZm9yRWFjaCgob3JpZ2luYWxVcmw6IGFueSkgPT4ge1xyXG4vLyAgIGlmIChvcmlnaW5hbFVybCkge1xyXG4vLyAgICAgY29uc3QgaW1hZ2UkID0gdGhpcy5odHRwLmdldChvcmlnaW5hbFVybD8ub3JpZ2luYWxVcmwsIHsgcmVzcG9uc2VUeXBlOiAnYmxvYicgfSkucGlwZShcclxuLy8gICAgICAgbWFwKChibG9iOiBCbG9iKSA9PiAoe1xyXG4vLyAgICAgICAgIHJlc3VsdDogVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKSwgLy8gZm9yIHByZXZpZXdcclxuLy8gICAgICAgICBvcmlnaW5hbFVybDogb3JpZ2luYWxVcmw/Lm9yaWdpbmFsVXJsLCAvLyBwcmVzZXJ2ZSBvcmlnaW5hbFxyXG4vLyAgICAgICAgIHRpdGxlOiBvcmlnaW5hbFVybD8udGl0bGUgfHwgJycsIC8vIGRlZmF1bHQgZW1wdHkgaWYgbm90IHByZXNlbnRcclxuLy8gICAgICAgICBub3Rlczogb3JpZ2luYWxVcmw/Lm5vdGVzIHx8ICcnXHJcbi8vICAgICAgIH0pKVxyXG4vLyAgICAgKTtcclxuLy8gICAgIGltYWdlRmV0Y2hlcy5wdXNoKGltYWdlJCk7XHJcbi8vICAgfVxyXG4vLyB9KTtcclxuXHJcbiAgXHJcbi8vICAgICAgICAgICBpZiAoaW1hZ2VGZXRjaGVzLmxlbmd0aCA+IDApIHtcclxuLy8gICAgICAgICAgICAgZm9ya0pvaW4oaW1hZ2VGZXRjaGVzKS5zdWJzY3JpYmUoe1xyXG4vLyAgICAgICAgICAgICAgIG5leHQ6IChpbWFnZURhdGEpID0+IHtcclxuLy8gICAgICAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZCA9IGltYWdlRGF0YS5tYXAoaXRlbSA9PiAoe1xyXG4vLyAgICAgICAgICAgICAgICAgICBpZDogdXVpZHY0KCksXHJcbi8vICAgICAgICAgICAgICAgICAgIGZpbGU6IG51bGwsXHJcbi8vICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsVXJsOiBpdGVtLm9yaWdpbmFsVXJsLFxyXG4vLyAgICAgICAgICAgICAgICAgICByZXN1bHQ6IGl0ZW0ucmVzdWx0LFxyXG4vLyAgICAgICAgICAgICAgICAgICB0aXRsZTogaXRlbS50aXRsZSxcclxuLy8gICAgICAgICAgICAgICAgICAgbm90ZXM6ICcnXHJcbi8vICAgICAgICAgICAgICAgICB9KSk7XHJcbiAgXHJcbi8vICAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZGVkRmlsZXMgPSBbLi4udGhpcy51cGxvYWRlZEZpbGVzLCAuLi5mb3JtYXR0ZWRdO1xyXG4vLyAgICAgICAgICAgICAgICAgdGhpcy5mb3JtYXR0ZWREYXRhLnVwbG9hZGVkRmlsZXMgPSB0aGlzLnVwbG9hZGVkRmlsZXM7XHJcbi8vICAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZEZpbGVDb250cm9sLnNldFZhbHVlKHRoaXMuZm9ybWF0dGVkRGF0YSk7XHJcbi8vICAgICAgICAgICAgICAgfSxcclxuLy8gICAgICAgICAgICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4vLyAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIGZldGNoIGltYWdlcyBmb3IgJHt1cGxvYWRlcktleX06YCwgZXJyKTtcclxuLy8gICAgICAgICAgICAgICB9XHJcbi8vICAgICAgICAgICAgIH0pO1xyXG4vLyAgICAgICAgICAgfVxyXG4vLyAgICAgICAgIH1cclxuLy8gICAgICAgfSk7XHJcbi8vICAgfVxyXG4gIFxyXG4gIC8vIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gIC8vICAgdGhpcy5meEJ1aWxkZXJXcmFwcGVyU2VydmljZS52YXJpYWJsZXMkXHJcbiAgLy8gICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAvLyAgICAgLnN1YnNjcmliZSgodmFyaWFibGVzOiBhbnkpID0+IHtcclxuICAvLyAgICAgICBpZiAoIXZhcmlhYmxlcykgcmV0dXJuO1xyXG4gIFxyXG4gIC8vICAgICAgIGNvbnN0IHVwbG9hZGVkRmlsZXNNYXA6IHsgW2tleTogc3RyaW5nXTogeyBvcmlnaW5hbFVybDogc3RyaW5nIH1bXSB9ID0gdmFyaWFibGVzLnVwbG9hZGVkRmlsZXM7XHJcbiAgXHJcbiAgLy8gICAgICAgZm9yIChjb25zdCBbdXBsb2FkZXJLZXksIHVybHNdIG9mIE9iamVjdC5lbnRyaWVzKHVwbG9hZGVkRmlsZXNNYXApKSB7XHJcbiAgLy8gICAgICAgICBjb25zdCBpbWFnZUZldGNoZXM6IE9ic2VydmFibGU8eyByZXN1bHQ6IHN0cmluZzsgb3JpZ2luYWxVcmw6IHN0cmluZyB9PltdID0gW107XHJcbiAgXHJcbiAgLy8gICAgICAgICB1cmxzLmZvckVhY2goKGZpbGVPYmo6IGFueSkgPT4ge1xyXG4gIC8vICAgICAgICAgICBjb25zdCBvcmlnaW5hbFVybCA9IGZpbGVPYmo/Lm9yaWdpbmFsVXJsO1xyXG4gIC8vICAgICAgICAgICBpZiAob3JpZ2luYWxVcmwpIHtcclxuICAvLyAgICAgICAgICAgICBjb25zdCBpbWFnZSQgPSB0aGlzLmh0dHAuZ2V0KG9yaWdpbmFsVXJsLCB7IHJlc3BvbnNlVHlwZTogJ2Jsb2InIH0pLnBpcGUoXHJcbiAgLy8gICAgICAgICAgICAgICBtYXAoKGJsb2I6IEJsb2IpID0+ICh7XHJcbiAgLy8gICAgICAgICAgICAgICAgIHJlc3VsdDogVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKSwgLy8gZm9yIHByZXZpZXdcclxuICAvLyAgICAgICAgICAgICAgICAgb3JpZ2luYWxVcmxcclxuICAvLyAgICAgICAgICAgICAgIH0pKVxyXG4gIC8vICAgICAgICAgICAgICk7XHJcbiAgLy8gICAgICAgICAgICAgaW1hZ2VGZXRjaGVzLnB1c2goaW1hZ2UkKTtcclxuICAvLyAgICAgICAgICAgfVxyXG4gIC8vICAgICAgICAgfSk7XHJcbiAgXHJcbiAgLy8gICAgICAgICBpZiAoaW1hZ2VGZXRjaGVzLmxlbmd0aCA+IDApIHtcclxuICAvLyAgICAgICAgICAgZm9ya0pvaW4oaW1hZ2VGZXRjaGVzKS5zdWJzY3JpYmUoe1xyXG4gIC8vICAgICAgICAgICAgIG5leHQ6IChpbWFnZURhdGEpID0+IHtcclxuICAvLyAgICAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZCA9IGltYWdlRGF0YS5tYXAoaXRlbSA9PiAoe1xyXG4gIC8vICAgICAgICAgICAgICAgICBpZDogdXVpZHY0KCksXHJcbiAgLy8gICAgICAgICAgICAgICAgIGZpbGU6IG51bGwsXHJcbiAgLy8gICAgICAgICAgICAgICAgIG9yaWdpbmFsVXJsOiBpdGVtLm9yaWdpbmFsVXJsLFxyXG4gIC8vICAgICAgICAgICAgICAgICByZXN1bHQ6IGl0ZW0ucmVzdWx0XHJcbiAgLy8gICAgICAgICAgICAgICB9KSk7XHJcbiAgXHJcbiAgLy8gICAgICAgICAgICAgICB0aGlzLnVwbG9hZGVkRmlsZXMgPSBbLi4udGhpcy51cGxvYWRlZEZpbGVzLCAuLi5mb3JtYXR0ZWRdO1xyXG4gIC8vICAgICAgICAgICAgICAgdGhpcy5mb3JtYXR0ZWREYXRhLnVwbG9hZGVkRmlsZXMgPSB0aGlzLnVwbG9hZGVkRmlsZXM7XHJcbiAgLy8gICAgICAgICAgICAgICB0aGlzLnVwbG9hZEZpbGVDb250cm9sLnNldFZhbHVlKHRoaXMuZm9ybWF0dGVkRGF0YSk7XHJcbiAgLy8gICAgICAgICAgICAgfSxcclxuICAvLyAgICAgICAgICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gIC8vICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIGZldGNoIGltYWdlcyBmb3IgJHt1cGxvYWRlcktleX06YCwgZXJyKTtcclxuICAvLyAgICAgICAgICAgICB9XHJcbiAgLy8gICAgICAgICAgIH0pO1xyXG4gIC8vICAgICAgICAgfVxyXG4gIC8vICAgICAgIH1cclxuICAvLyAgICAgfSk7XHJcbiAgLy8gfVxyXG4gIFxyXG5cclxuICAvLyBwdWJsaWMgb25GaWxlU2VsZWN0ZWQoZXZlbnQ6IEV2ZW50KSB7XHJcbiAgLy8gICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xyXG4gIC8vICAgaWYgKGlucHV0LmZpbGVzKSB7XHJcbiAgLy8gICAgIGZvcihsZXQgaSA9IDA7IGkgPCBpbnB1dD8uZmlsZXM/Lmxlbmd0aDsgaSsrKSB7XHJcbiAgLy8gICAgICAgY29uc3QgZmlsZSA9IGlucHV0LmZpbGVzW2ldO1xyXG4gIC8vICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcbiAgLy8gICAgICAgcmVhZGVyLm9ubG9hZCA9IGUgPT4ge1xyXG4gIC8vICAgICAgICAgdGhpcy51cGxvYWRlZEZpbGVzLnB1c2goe1xyXG4gIC8vICAgICAgICAgICBmaWxlOiBmaWxlLFxyXG4gIC8vICAgICAgICAgICByZXN1bHQ6IGUudGFyZ2V0Py5yZXN1bHQsXHJcbiAgLy8gICAgICAgICAgIG5hbWU6IGZpbGU/Lm5hbWUsXHJcbiAgLy8gICAgICAgICAgIGlkOiB1dWlkdjQoKVxyXG4gIC8vICAgICAgICAgfSlcclxuICAvLyAgICAgICAgIHRoaXMudXBsb2FkRmlsZUNvbnRyb2wuc2V0VmFsdWUodGhpcy51cGxvYWRlZEZpbGVzKTtcclxuICAvLyAgICAgICAgIGNvbnNvbGUubG9nKHRoaXMudXBsb2FkRmlsZUNvbnRyb2wpO1xyXG4gIC8vICAgICAgIH1cclxuICAvLyAgICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTtcclxuICAvLyAgICAgfVxyXG4gIC8vICAgfVxyXG4gIC8vIH1cclxuXHJcbiAgLy8gb25GaWxlU2VsZWN0ZWQoZXZlbnQ6IEV2ZW50KSB7XHJcbiAgLy8gICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xyXG4gIC8vICAgaWYgKGlucHV0LmZpbGVzKSB7XHJcbiAgLy8gICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5wdXQuZmlsZXMubGVuZ3RoOyBpKyspIHtcclxuICAvLyAgICAgICBjb25zdCBmaWxlID0gaW5wdXQuZmlsZXNbaV07XHJcbiAgLy8gICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuXHJcbiAgLy8gICAgICAgcmVhZGVyLm9ubG9hZCA9IGUgPT4ge1xyXG4gIC8vICAgICAgICAgY29uc3QgbmV3RmlsZSA9IHtcclxuICAvLyAgICAgICAgICAgaWQ6IHV1aWR2NCgpLFxyXG4gIC8vICAgICAgICAgICBmaWxlOiBmaWxlLFxyXG4gIC8vICAgICAgICAgICBvcmlnaW5hbFVybDogbnVsbCxcclxuICAvLyAgICAgICAgICAgcmVzdWx0OiBlLnRhcmdldD8ucmVzdWx0LFxyXG4gIC8vICAgICAgICAgICBuYW1lOiBmaWxlLm5hbWUsXHJcbiAgLy8gICAgICAgICAgIHRpdGxlOiAnJyxcclxuICAvLyAgICAgICAgICAgbm90ZXM6ICcnLFxyXG4gIC8vICAgICAgICAgICBjYXRlZ29yeTogJycsXHJcbiAgLy8gICAgICAgICAgIHR5cGU6IHRoaXMuZGV0ZWN0RmlsZVR5cGUoZmlsZSksXHJcbiAgLy8gICAgICAgICB9O1xyXG5cclxuICAvLyAgICAgICAgIHRoaXMudXBsb2FkZWRGaWxlcy5wdXNoKG5ld0ZpbGUpO1xyXG4gIC8vICAgICAgICAgdGhpcy5mb3JtYXR0ZWREYXRhLnVwbG9hZGVkRmlsZXMgPSB0aGlzLnVwbG9hZGVkRmlsZXM7XHJcbiAgLy8gICAgICAgICB0aGlzLnVwbG9hZEZpbGVDb250cm9sLnNldFZhbHVlKHRoaXMuZm9ybWF0dGVkRGF0YSk7XHJcbiAgLy8gICAgICAgfTtcclxuXHJcbiAgLy8gICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XHJcbiAgLy8gICAgIH1cclxuICAvLyAgIH1cclxuICAvLyB9XHJcblxyXG4vLyAgIG5nT25Jbml0KCk6IHZvaWQge1xyXG4vLyAgIHRoaXMuZnhCdWlsZGVyV3JhcHBlclNlcnZpY2UudmFyaWFibGVzJFxyXG4vLyAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4vLyAgICAgLnN1YnNjcmliZSgodmFyaWFibGVzOiBhbnkpID0+IHtcclxuLy8gICAgICAgaWYgKCF2YXJpYWJsZXMpIHJldHVybjtcclxuXHJcbi8vICAgICAgIGNvbnN0IHVwbG9hZGVkRmlsZXNNYXA6IHsgW2tleTogc3RyaW5nXTogYW55W10gfSA9IHt9O1xyXG5cclxuICAgICBcclxuLy8gICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModmFyaWFibGVzKSkge1xyXG4vLyAgICAgICAgIGlmIChrZXkuaW5jbHVkZXMoJ3VwbG9hZGVyJykgJiYgQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcclxuLy8gICAgICAgICAgIHVwbG9hZGVkRmlsZXNNYXBba2V5XSA9IHZhbHVlO1xyXG4vLyAgICAgICAgIH1cclxuLy8gICAgICAgfVxyXG5cclxuLy8gICAgICAgZm9yIChjb25zdCBbdXBsb2FkZXJLZXksIHVybHNdIG9mIE9iamVjdC5lbnRyaWVzKHVwbG9hZGVkRmlsZXNNYXApKSB7XHJcbi8vICAgICAgICAgY29uc3QgZm9ybWF0dGVkID0gdXJsc1xyXG4vLyAgICAgICAgICAgLmZpbHRlcigoZmlsZU9iajogYW55KSA9PiAhIWZpbGVPYmopIFxyXG4vLyAgICAgICAgICAgLm1hcCgoZmlsZU9iajogYW55KSA9PiB7XHJcbi8vICAgICAgICAgICAgIC8vIGNvbnN0IGZpbGVUeXBlID0gdGhpcy5kZXRlY3RGaWxlVHlwZUZyb21VcmwoZmlsZU9iaj8ub3JpZ2luYWxVcmwgfHwgZmlsZU9iaj8ubmFtZSk7XHJcblxyXG4vLyAgICAgICAgICAgICByZXR1cm4ge1xyXG4vLyAgICAgICAgICAgICAgIGlkOiB1dWlkdjQoKSxcclxuLy8gICAgICAgICAgICAgICBmaWxlOiBudWxsLCAgICAgICAgICAgICAgICAgICAgICAgICBcclxuLy8gICAgICAgICAgICAgICBvcmlnaW5hbFVybDogZmlsZU9iai5vcmlnaW5hbFVybCwgICAgXHJcbi8vICAgICAgICAgICAgICAgcmVzdWx0OiBmaWxlT2JqPy50eXBlID09PSAnaW1hZ2UnID8gZmlsZU9iai5vcmlnaW5hbFVybC5wcmV2aWV3VXJsIDogbnVsbCxcclxuLy8gICAgICAgICAgICAgICBuYW1lOiBmaWxlT2JqPy5uYW1lIHx8ICcnLFxyXG4vLyAgICAgICAgICAgICAgIHRpdGxlOiBmaWxlT2JqPy50aXRsZSB8fCAnJyxcclxuLy8gICAgICAgICAgICAgICBub3RlczogZmlsZU9iaj8ubm90ZXMgfHwgJycsXHJcbi8vICAgICAgICAgICAgICAgY2F0ZWdvcnk6IGZpbGVPYmo/LmNhdGVnb3J5IHx8ICcnLFxyXG4vLyAgICAgICAgICAgICAgIHR5cGU6IGZpbGVPYmo/LnR5cGUsICAgICAgICAgICAgICAgIFxyXG4vLyAgICAgICAgICAgICB9O1xyXG4vLyAgICAgICAgICAgfSk7XHJcblxyXG4vLyAgICAgICAgIGlmIChmb3JtYXR0ZWQubGVuZ3RoID4gMCkge1xyXG4vLyAgICAgICAgICAgdGhpcy51cGxvYWRlZEZpbGVzID0gWy4uLnRoaXMudXBsb2FkZWRGaWxlcywgLi4uZm9ybWF0dGVkXTtcclxuLy8gICAgICAgICAgIHRoaXMuZm9ybWF0dGVkRGF0YS51cGxvYWRlZEZpbGVzID0gdGhpcy51cGxvYWRlZEZpbGVzO1xyXG4vLyAgICAgICAgICAgdGhpcy51cGxvYWRGaWxlQ29udHJvbC5zZXRWYWx1ZSh0aGlzLmZvcm1hdHRlZERhdGEpO1xyXG4vLyAgICAgICAgIH1cclxuLy8gICAgICAgfVxyXG4vLyAgICAgfSk7XHJcbi8vIH1cclxuXHJcbm5nT25Jbml0KCk6IHZvaWQge1xyXG4gIHRoaXMuZnhCdWlsZGVyV3JhcHBlclNlcnZpY2UudmFyaWFibGVzJFxyXG4gICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgLnN1YnNjcmliZSgodmFyaWFibGVzOiBhbnkpID0+IHtcclxuICAgICAgaWYgKCF2YXJpYWJsZXMpIHJldHVybjtcclxuXHJcbiAgICAgIGNvbnN0IHVwbG9hZGVkRmlsZXNNYXA6IHsgW2tleTogc3RyaW5nXTogYW55W10gfSA9IHt9O1xyXG5cclxuICAgICAgXHJcbiAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHZhcmlhYmxlcykpIHtcclxuICBpZiAoa2V5LmluY2x1ZGVzKCd1cGxvYWRlcicpICYmICh2YWx1ZSBhcyBhbnkpPy51cGxvYWRlZEZpbGVzKSB7XHJcbiAgICB1cGxvYWRlZEZpbGVzTWFwW2tleV0gPSAodmFsdWUgYXMgYW55KS51cGxvYWRlZEZpbGVzO1xyXG4gIH1cclxufVxyXG5cclxuICAgICAgZm9yIChjb25zdCBbdXBsb2FkZXJLZXksIGZpbGVzXSBvZiBPYmplY3QuZW50cmllcyh1cGxvYWRlZEZpbGVzTWFwKSkge1xyXG4gICAgICAgIGNvbnN0IGZvcm1hdHRlZCA9IGZpbGVzXHJcbiAgICAgICAgICAuZmlsdGVyKChmaWxlT2JqOiBhbnkpID0+ICEhZmlsZU9iailcclxuICAgICAgICAgIC5tYXAoKGZpbGVPYmo6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbFVybE9iaiA9IGZpbGVPYmoub3JpZ2luYWxVcmw7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGVOYW1lID0gb3JpZ2luYWxVcmxPYmo/LmZpbGVOYW1lIHx8ICcnO1xyXG4gICAgICAgICAgICBjb25zdCBmaWxlVXJsID0gb3JpZ2luYWxVcmxPYmo/LmZpbGVVcmwgfHwgJyc7XHJcbiAgICAgICAgICAgIGNvbnN0IHByZXZpZXdVcmwgPSBvcmlnaW5hbFVybE9iaj8ucHJldmlld1VybDtcclxuICAgICAgICAgICAgY29uc3QgdHlwZSA9IGZpbGVPYmo/LnR5cGU7XHJcblxyXG4gICAgICAgICAgICAvLyBkZXRlY3QgdHlwZSBiYXNlZCBvbiBmaWxlIGV4dGVuc2lvblxyXG4gICAgICAgICAgICAvLyBjb25zdCBmaWxlVHlwZSA9IHRoaXMuZGV0ZWN0RmlsZVR5cGVGcm9tVXJsKGZpbGVOYW1lIHx8IGZpbGVVcmwpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICBpZDogdXVpZHY0KCksXHJcbiAgICAgICAgICAgICAgZmlsZTogbnVsbCwgICAgICAgICAgICAgICAgICAgICAgICAvLyBub3RoaW5nIGxvY2FsXHJcbiAgICAgICAgICAgICAgb3JpZ2luYWxVcmw6IG9yaWdpbmFsVXJsT2JqLCAgICAgICAvLyBrZWVwIHdob2xlIG9iamVjdFxyXG4gICAgICAgICAgICAgIHJlc3VsdDogdHlwZSA9PT0gJ2ltYWdlJ1xyXG4gICAgICAgICAgICAgICAgPyAocHJldmlld1VybCkgICAgICAgIC8vIHByZWZlciBwcmV2aWV3VXJsLCBmYWxsYmFjayB0byBmaWxlVXJsXHJcbiAgICAgICAgICAgICAgICA6IG51bGwsXHJcbiAgICAgICAgICAgICAgbmFtZTogZmlsZU5hbWUsXHJcbiAgICAgICAgICAgICAgdGl0bGU6IGZpbGVPYmo/LnRpdGxlIHx8ICcnLFxyXG4gICAgICAgICAgICAgIG5vdGVzOiBmaWxlT2JqPy5ub3RlcyB8fCAnJyxcclxuICAgICAgICAgICAgICBjYXRlZ29yeTogZmlsZU9iaj8uY2F0ZWdvcnkgfHwgJycsXHJcbiAgICAgICAgICAgICAgdHlwZTogdHlwZSwgICAgICAgICAgICAgICAgICAgIC8vIGNvbXB1dGVkIHR5cGVcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAoZm9ybWF0dGVkLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIHRoaXMudXBsb2FkZWRGaWxlcyA9IFsuLi50aGlzLnVwbG9hZGVkRmlsZXMsIC4uLmZvcm1hdHRlZF07XHJcbiAgICAgICAgICB0aGlzLmZvcm1hdHRlZERhdGEudXBsb2FkZWRGaWxlcyA9IHRoaXMudXBsb2FkZWRGaWxlcztcclxuICAgICAgICAgIHRoaXMudXBsb2FkRmlsZUNvbnRyb2wuc2V0VmFsdWUodGhpcy5mb3JtYXR0ZWREYXRhKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG59XHJcblxyXG5cclxuXHJcbiAgb25GaWxlU2VsZWN0ZWQoZXZlbnQ6IEV2ZW50KSB7XHJcbiAgY29uc3QgaW5wdXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcclxuICBpZiAoIWlucHV0LmZpbGVzKSByZXR1cm47XHJcblxyXG4gIEFycmF5LmZyb20oaW5wdXQuZmlsZXMpLmZvckVhY2goZmlsZSA9PiB7XHJcbiAgICBjb25zdCBmaWxlVHlwZSA9IHRoaXMuZGV0ZWN0RmlsZVR5cGUoZmlsZSk7XHJcblxyXG4gICAgY29uc3QgbmV3RmlsZTogYW55ID0ge1xyXG4gICAgICBpZDogdXVpZHY0KCksXHJcbiAgICAgIGZpbGU6IGZpbGUsXHJcbiAgICAgIG9yaWdpbmFsVXJsOiBudWxsLFxyXG4gICAgICByZXN1bHQ6IG51bGwsICAgICAgICAgIC8vIHdpbGwgYmUgZmlsbGVkIGZvciBpbWFnZXMgb25seVxyXG4gICAgICBuYW1lOiBmaWxlLm5hbWUsXHJcbiAgICAgIHRpdGxlOiAnJyxcclxuICAgICAgbm90ZXM6ICcnLFxyXG4gICAgICBjYXRlZ29yeTogJycsXHJcbiAgICAgIHR5cGU6IGZpbGVUeXBlLCAgICAgICAgLy8gPC0tIGtlZXAgZGV0ZWN0ZWQgdHlwZVxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAoZmlsZVR5cGUgPT09ICdpbWFnZScpIHtcclxuICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuICAgICAgcmVhZGVyLm9ubG9hZCA9IGUgPT4ge1xyXG4gICAgICAgIG5ld0ZpbGUucmVzdWx0ID0gZS50YXJnZXQ/LnJlc3VsdDtcclxuICAgICAgICB0aGlzLnVwbG9hZGVkRmlsZXMucHVzaChuZXdGaWxlKTtcclxuICAgICAgICB0aGlzLmZvcm1hdHRlZERhdGEudXBsb2FkZWRGaWxlcyA9IHRoaXMudXBsb2FkZWRGaWxlcztcclxuICAgICAgICB0aGlzLnVwbG9hZEZpbGVDb250cm9sLnNldFZhbHVlKHRoaXMuZm9ybWF0dGVkRGF0YSk7XHJcbiAgICAgIH07XHJcbiAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpOyAvLyBvbmx5IGltYWdlcyBuZWVkIHByZXZpZXdcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIG5vbi1pbWFnZSDihpIgcHVzaCBkaXJlY3RseVxyXG4gICAgICB0aGlzLnVwbG9hZGVkRmlsZXMucHVzaChuZXdGaWxlKTtcclxuICAgICAgdGhpcy5mb3JtYXR0ZWREYXRhLnVwbG9hZGVkRmlsZXMgPSB0aGlzLnVwbG9hZGVkRmlsZXM7XHJcbiAgICAgIHRoaXMudXBsb2FkRmlsZUNvbnRyb2wuc2V0VmFsdWUodGhpcy5mb3JtYXR0ZWREYXRhKTtcclxuICAgIH1cclxuICB9KTtcclxufVxyXG5cclxuXHJcbiAgb25NZXRhQ2hhbmdlKCkge1xyXG4gICAgdGhpcy5mb3JtYXR0ZWREYXRhLnVwbG9hZGVkRmlsZXMgPSB0aGlzLnVwbG9hZGVkRmlsZXM7XHJcbiAgICB0aGlzLnVwbG9hZEZpbGVDb250cm9sLnNldFZhbHVlKHRoaXMuZm9ybWF0dGVkRGF0YSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gcHVibGljIGRlbGV0ZUZpbGUoaWQ6IHN0cmluZyk6IHZvaWQge1xyXG4gIC8vICAgdGhpcy51cGxvYWRlZEZpbGVzID0gdGhpcy51cGxvYWRlZEZpbGVzLmZpbHRlcihmaWxlID0+IGZpbGU/LmlkICE9PSBpZCk7XHJcbiAgLy8gfVxyXG5cclxuICAvLyBkZWxldGVGaWxlKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcclxuICAvLyAgIGNvbnN0IFtkZWxldGVkRmlsZV0gPSB0aGlzLnVwbG9hZGVkRmlsZXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICBcclxuICAvLyAgIGlmIChkZWxldGVkRmlsZSkge1xyXG4gIC8vICAgICB0aGlzLmRlbGV0ZWRGaWxlcy5wdXNoKGRlbGV0ZWRGaWxlKTtcclxuICAvLyAgICAgdGhpcy5mb3JtYXR0ZWREYXRhID0ge1xyXG4gIC8vICAgICAgIC4uLnRoaXMuZm9ybWF0dGVkRGF0YSxcclxuICAvLyAgICAgICB1cGxvYWRlZEZpbGVzOiBbLi4udGhpcy51cGxvYWRlZEZpbGVzXSxcclxuICAvLyAgICAgICBkZWxldGVkRmlsZXM6IFsuLi50aGlzLmRlbGV0ZWRGaWxlc11cclxuICAvLyAgICAgfTtcclxuICAvLyAgICAgdGhpcy51cGxvYWRGaWxlQ29udHJvbC5zZXRWYWx1ZSh0aGlzLmZvcm1hdHRlZERhdGEpO1xyXG4gIC8vICAgfVxyXG4gIC8vIH1cclxuXHJcbiAgZGVsZXRlRmlsZShpbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBjb25zdCBkZWxldGVkRmlsZSA9IHRoaXMudXBsb2FkZWRGaWxlcz8uW2luZGV4XTtcclxuICAgIGlmICghZGVsZXRlZEZpbGUpIHJldHVybjtcclxuICBcclxuICAgIC8vIEVuc3VyZSBmb3JtYXR0ZWREYXRhIGV4aXN0cyBhbmQgaW5pdGlhbGl6ZSBpZiB1bmRlZmluZWRcclxuICAgIHRoaXMuZm9ybWF0dGVkRGF0YSA9IHRoaXMuZm9ybWF0dGVkRGF0YSB8fCB7IHVwbG9hZGVkRmlsZXM6IFtdLCBkZWxldGVkRmlsZXM6IFtdIH07XHJcbiAgXHJcbiAgICAvLyBBZGQgdGhlIGRlbGV0ZWQgZmlsZSB0byB0aGUgZGVsZXRlZEZpbGVzIGFycmF5XHJcbiAgICB0aGlzLmRlbGV0ZWRGaWxlcyA9IFsuLi50aGlzLmRlbGV0ZWRGaWxlcywgZGVsZXRlZEZpbGVdO1xyXG4gIFxyXG4gICAgLy8gUmVtb3ZlIHRoZSBmaWxlIGZyb20gdXBsb2FkZWRGaWxlcyB1c2luZyBmaWx0ZXIgZm9yIGltbXV0YWJpbGl0eVxyXG4gICAgdGhpcy51cGxvYWRlZEZpbGVzID0gdGhpcy51cGxvYWRlZEZpbGVzLmZpbHRlcigoXywgaSkgPT4gaSAhPT0gaW5kZXgpO1xyXG4gIFxyXG4gICAgLy8gVXBkYXRlIGZvcm1hdHRlZERhdGFcclxuICAgIHRoaXMuZm9ybWF0dGVkRGF0YSA9IHtcclxuICAgICAgLi4udGhpcy5mb3JtYXR0ZWREYXRhLFxyXG4gICAgICB1cGxvYWRlZEZpbGVzOiB0aGlzLnVwbG9hZGVkRmlsZXMsXHJcbiAgICAgIGRlbGV0ZWRGaWxlczogdGhpcy5kZWxldGVkRmlsZXNcclxuICAgIH07XHJcbiAgXHJcbiAgICAvLyBTZXQgdGhlIHZhbHVlIG9mIHRoZSB1cGxvYWRGaWxlQ29udHJvbFxyXG4gICAgdGhpcy51cGxvYWRGaWxlQ29udHJvbC5zZXRWYWx1ZSh0aGlzLmZvcm1hdHRlZERhdGEpO1xyXG4gIH1cclxuICBcclxuICBcclxuXHJcbiAgcHJvdGVjdGVkIHNldHRpbmdzKCk6IEZ4U2V0dGluZ1tdIHtcclxuICAgIHJldHVybiBbXHJcbiAgICAgIG5ldyBGeFN0cmluZ1NldHRpbmcoeyBrZXk6ICd1cGxvYWQtdGV4dCcsICR0aXRsZTogJ1VwbG9hZCBUZXh0JywgdmFsdWU6ICdVcGxvYWQgRmlsZSd9KSxcclxuICAgICAgbmV3IEZ4U2VsZWN0U2V0dGluZyh7a2V5OiAnbXVsdGlwbGUtdXBsb2FkJywgJHRpdGxlOiAnTXVsdGlwbGUgVXBsb2FkJywgdmFsdWU6IGZhbHNlfSwgW3tvcHRpb246ICdFbmFibGUnLCB2YWx1ZTogdHJ1ZX0sIHtvcHRpb246ICdEaXNhYmxlJywgdmFsdWU6IGZhbHNlfV0pXHJcbiAgICBdO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHZhbGlkYXRpb25zKCk6IEZ4VmFsaWRhdGlvbltdIHtcclxuICAgIHJldHVybiBbRnhWYWxpZGF0b3JTZXJ2aWNlLnJlcXVpcmVkXTtcclxuICB9XHJcblxyXG5kZXRlY3RGaWxlVHlwZShmaWxlOiBGaWxlKTogJ2ltYWdlJyB8ICdjc3YnIHwgJ3RleHQnIHwgJ3BkZicgfCAnZXhjZWwnIHwgJ3dvcmQnIHwgJ290aGVyJyB7XHJcbiAgY29uc3QgbWltZSA9IChmaWxlLnR5cGUgfHwgJycpLnRvTG93ZXJDYXNlKCk7XHJcbiAgY29uc3QgbmFtZSA9IChmaWxlLm5hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCk7XHJcblxyXG4gIC8vIEltYWdlc1xyXG4gIGlmIChtaW1lLnN0YXJ0c1dpdGgoJ2ltYWdlLycpIHx8IC9cXC4ocG5nfGpwZT9nfGdpZnx3ZWJwfGJtcHxzdmcpJC9pLnRlc3QobmFtZSkpIHtcclxuICAgIHJldHVybiAnaW1hZ2UnO1xyXG4gIH1cclxuXHJcbiAgLy8gQ1NWXHJcbiAgaWYgKG1pbWUgPT09ICd0ZXh0L2NzdicgfHwgbmFtZS5lbmRzV2l0aCgnLmNzdicpKSB7XHJcbiAgICByZXR1cm4gJ2Nzdic7XHJcbiAgfVxyXG5cclxuICAvLyBUZXh0IGZpbGVzXHJcbiAgaWYgKG1pbWUgPT09ICd0ZXh0L3BsYWluJyB8fCBuYW1lLmVuZHNXaXRoKCcudHh0JykpIHtcclxuICAgIHJldHVybiAndGV4dCc7XHJcbiAgfVxyXG5cclxuICAvLyBQREZcclxuICBpZiAobWltZSA9PT0gJ2FwcGxpY2F0aW9uL3BkZicgfHwgbmFtZS5lbmRzV2l0aCgnLnBkZicpKSB7XHJcbiAgICByZXR1cm4gJ3BkZic7XHJcbiAgfVxyXG5cclxuICAvLyBFeGNlbFxyXG4gIGlmIChcclxuICAgIG1pbWUgPT09ICdhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwnIHx8XHJcbiAgICBtaW1lID09PSAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQnIHx8XHJcbiAgICAvXFwuKHhsc3x4bHN4KSQvaS50ZXN0KG5hbWUpXHJcbiAgKSB7XHJcbiAgICByZXR1cm4gJ2V4Y2VsJztcclxuICB9XHJcblxyXG4gIC8vIFdvcmRcclxuICBpZiAoXHJcbiAgICBtaW1lID09PSAnYXBwbGljYXRpb24vbXN3b3JkJyB8fFxyXG4gICAgbWltZSA9PT0gJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC53b3JkcHJvY2Vzc2luZ21sLmRvY3VtZW50JyB8fFxyXG4gICAgL1xcLihkb2N8ZG9jeCkkL2kudGVzdChuYW1lKVxyXG4gICkge1xyXG4gICAgcmV0dXJuICd3b3JkJztcclxuICB9XHJcblxyXG4gIHJldHVybiAnb3RoZXInO1xyXG59XHJcblxyXG5cclxufVxyXG4iLCI8ZngtY29tcG9uZW50IFtmeERhdGFdPVwiZnhEYXRhXCI+XHJcbiAgPGRpdiBjbGFzcz1cImN1c3RvbS11cGxvYWQgZmxleCBmbGV4LWNvbCBpdGVtcy1zdGFydCBqdXN0aWZ5LWNlbnRlciBnYXAtMiBwLTIgcGItMCByb3VuZGVkLXNtXCI+XHJcbiAgIDxkaXYgY2xhc3M9XCJmbGV4IGdhcC04IGl0ZW1zLWNlbnRlclwiPlxyXG4gICAgPHAgY2xhc3M9XCJ0ZXh0LWJhc2VcIj5QYXRpZW50IEltYWdlczwvcD5cclxuICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNlbnRlciBpdGVtcy1jZW50ZXIgZ2FwLTIgdXBsb2FkXCIgKGNsaWNrKT1cImZpbGVJbnB1dC5jbGljaygpXCI+XHJcbiAgICAgIDxkaXY+XHJcbiAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyOVwiIGhlaWdodD1cIjI4XCIgdmlld0JveD1cIjAgMCAyOSAyOFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICA8cGF0aCBmaWxsLXJ1bGU9XCJldmVub2RkXCIgY2xpcC1ydWxlPVwiZXZlbm9kZFwiXHJcbiAgICAgICAgICAgIGQ9XCJNMTQuMDAxIDMuMDAxOTVDMTEuNTMyMiAzLjAwMTk1IDkuMTY3MjIgMy44Njk1NiA3LjIzNjQxIDUuMzg0MTRMNy4yMzU5OCA0LjU5Njk1QzcuMjM1OTggNC41MjQ3MyA3LjIyMTc1IDQuNDUzMjEgNy4xOTQxMSA0LjM4NjQ4QzcuMTY2NDcgNC4zMTk3NSA3LjEyNTk2IDQuMjU5MTIgNy4wNzQ4OSA0LjIwODA0QzcuMDIzODEgNC4xNTY5NyA2Ljk2MzE4IDQuMTE2NDYgNi44OTY0NSA0LjA4ODgyQzYuODI5NzIgNC4wNjExOCA2Ljc1ODIgNC4wNDY5NSA2LjY4NTk4IDQuMDQ2OTVDNi42MTM3NSA0LjA0Njk1IDYuNTQyMjMgNC4wNjExOCA2LjQ3NTUgNC4wODg4MkM2LjQwODc3IDQuMTE2NDYgNi4zNDgxNCA0LjE1Njk3IDYuMjk3MDcgNC4yMDgwNEM2LjI0NTk5IDQuMjU5MTIgNi4yMDU0OCA0LjMxOTc1IDYuMTc3ODQgNC4zODY0OEM2LjE1MDIgNC40NTMyMSA2LjEzNTk4IDQuNTI0NzMgNi4xMzU5OCA0LjU5Njk1TDYuMTM2NDIgNi42ODY1MkM2LjEzNjQzIDYuODMyMzkgNi4xOTQzOCA2Ljk3MjI4IDYuMjk3NTIgNy4wNzU0MkM2LjQwMDY3IDcuMTc4NTYgNi41NDA1NSA3LjIzNjUxIDYuNjg2NDIgNy4yMzY1Mkg4Ljc3NTk4QzguODQ4MiA3LjIzNjUyIDguOTE5NzIgNy4yMjIzIDguOTg2NDUgNy4xOTQ2NkM5LjA1MzE4IDcuMTY3MDIgOS4xMTM4MSA3LjEyNjUxIDkuMTY0ODkgNy4wNzU0M0M5LjIxNTk2IDcuMDI0MzYgOS4yNTY0NyA2Ljk2MzczIDkuMjg0MTEgNi44OTdDOS4zMTE3NSA2LjgzMDI3IDkuMzI1OTggNi43NTg3NSA5LjMyNTk4IDYuNjg2NTJDOS4zMjU5OCA2LjYxNDMgOS4zMTE3NSA2LjU0Mjc4IDkuMjg0MTEgNi40NzYwNUM5LjI1NjQ3IDYuNDA5MzIgOS4yMTU5NiA2LjM0ODY5IDkuMTY0ODkgNi4yOTc2MUM5LjExMzgxIDYuMjQ2NTQgOS4wNTMxOCA2LjIwNjAzIDguOTg2NDUgNi4xNzgzOUM4LjkxOTcyIDYuMTUwNzUgOC44NDgyIDYuMTM2NTIgOC43NzU5OCA2LjEzNjUySDguMDU4NEM5Ljc3MDIgNC44NDM4NyAxMS44Mzk5IDQuMTAxOTUgMTQuMDAxIDQuMTAxOTVDMTkuNDc1MSA0LjEwMTk1IDIzLjkwMSA4LjUyNzgyIDIzLjkwMSAxNC4wMDJDMjMuOTAxIDE5LjQ3NjEgMTkuNDc1MSAyMy45MDIgMTQuMDAxIDIzLjkwMkM4LjUyNjg0IDIzLjkwMiA0LjEwMDk4IDE5LjQ3NjEgNC4xMDA5OCAxNC4wMDJDNC4xMDA5OCAxMi42MzgxIDQuMzgyNjMgMTEuMjg4OCA0LjkyODU1IDEwLjAzODlDNC45ODY5MSA5LjkwNTMyIDQuOTg5ODIgOS43NTM5OSA0LjkzNjY1IDkuNjE4MjJDNC44ODM0NyA5LjQ4MjQ2IDQuNzc4NTUgOS4zNzMzNiA0LjY0NDk2IDkuMzE0OTJDNC41Nzg3NyA5LjI4NTk2IDQuNTA3NTMgOS4yNzAzMiA0LjQzNTMgOS4yNjg5QzQuMzYzMDYgOS4yNjc0NyA0LjI5MTI2IDkuMjgwMyA0LjIyMzk4IDkuMzA2NjNDNC4xNTY3MSA5LjMzMjk3IDQuMDk1MjggOS4zNzIzIDQuMDQzMjEgOS40MjIzOEMzLjk5MTE0IDkuNDcyNDcgMy45NDk0NCA5LjUzMjMyIDMuOTIwNTEgOS41OTg1MkMzLjMxMzkzIDEwLjk4NzIgMy4wMDA5OCAxMi40ODY2IDMuMDAwOTggMTQuMDAyQzMuMDAwOTggMjAuMDcwNiA3LjkzMjM2IDI1LjAwMiAxNC4wMDEgMjUuMDAyQzIwLjA2OTYgMjUuMDAyIDI1LjAwMSAyMC4wNzA2IDI1LjAwMSAxNC4wMDJDMjUuMDAxIDcuOTMzMzQgMjAuMDY5NiAzLjAwMTk1IDE0LjAwMSAzLjAwMTk1WlwiXHJcbiAgICAgICAgICAgIGZpbGw9XCIjRjNBMDQxXCIgLz5cclxuICAgICAgICAgIDxwYXRoIGZpbGwtcnVsZT1cImV2ZW5vZGRcIiBjbGlwLXJ1bGU9XCJldmVub2RkXCJcclxuICAgICAgICAgICAgZD1cIk0xMy45OTg4IDYuMTM5NjVDOS42NjE2IDYuMTM5NjUgNi4xMzM3OSA5LjY2NzQ2IDYuMTMzNzkgMTQuMDA0NkM2LjEzMzc5IDE4LjM0MTggOS42NjE2IDIxLjg2OTYgMTMuOTk4OCAyMS44Njk2QzE4LjMzNiAyMS44Njk2IDIxLjg2MzggMTguMzQxOCAyMS44NjM4IDE0LjAwNDZDMjEuODYzOCA5LjY2NzQ2IDE4LjMzNiA2LjEzOTY1IDEzLjk5ODggNi4xMzk2NVpNMTMuOTk4OCA4LjIyOTY1QzE0LjE0NDcgOC4yMjk2NSAxNC4yODQ2IDguMjg3NTkgMTQuMzg3NyA4LjM5MDc0QzE0LjQ5MDggOC40OTM4OCAxNC41NDg4IDguNjMzNzggMTQuNTQ4OCA4Ljc3OTY1VjEzLjc3NjlMMTcuNTIyNyAxNi43NTA4QzE3LjYyNTggMTYuODUzOSAxNy42ODM3IDE2Ljk5MzggMTcuNjgzNyAxNy4xMzk2QzE3LjY4MzcgMTcuMjg1NSAxNy42MjU4IDE3LjQyNTQgMTcuNTIyNyAxNy41Mjg1QzE3LjQxOTUgMTcuNjMxNiAxNy4yNzk2IDE3LjY4OTYgMTcuMTMzOCAxNy42ODk2QzE2Ljk4NzkgMTcuNjg5NiAxNi44NDgxIDE3LjYzMTYgMTYuNzQ0OSAxNy41Mjg1TDEzLjYwOTkgMTQuMzkzNUMxMy41MDY4IDE0LjI5MDQgMTMuNDQ4OCAxNC4xNTA1IDEzLjQ0ODggMTQuMDA0NlY4Ljc3OTY1QzEzLjQ0ODggOC42MzM3OCAxMy41MDY3IDguNDkzODggMTMuNjA5OSA4LjM5MDc0QzEzLjcxMyA4LjI4NzU5IDEzLjg1MjkgOC4yMjk2NSAxMy45OTg4IDguMjI5NjVaXCJcclxuICAgICAgICAgICAgZmlsbD1cIiNGM0EwNDFcIiAvPlxyXG4gICAgICAgICAgPHJlY3Qgd2lkdGg9XCIyOC41NlwiIGhlaWdodD1cIjI4XCIgcng9XCIxLjUxNDc5XCIgZmlsbD1cIiM5OTk5OTlcIiAvPlxyXG4gICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgZD1cIk0xNS4wNjggMjIuNzM5MVYxNy42NzA4SDE4LjQ5NjhMMTQuMjEwOCAxMi42MDI1TDkuOTI0OCAxNy42NzA4SDEzLjM1MzZWMjIuNzM5MUg5LjA2NzU5VjIyLjY5NjlDOC45MjM1OCAyMi43MDUzIDguNzg2NDMgMjIuNzM5MSA4LjYzODk5IDIyLjczOTFDNi45MzM5MSAyMi43MzkxIDUuMjk4NjYgMjIuMDcxNyA0LjA5Mjk4IDIwLjg4MzVDMi44ODczIDE5LjY5NTQgMi4yMDk5NiAxOC4wODQgMi4yMDk5NiAxNi40MDM3QzIuMjA5OTYgMTMuMTUzMiA0LjcwNDQzIDEwLjUwNDIgNy45MDUyMyAxMC4xNDFDOC4xODU4NSA4LjY5NTMgOC45Njg5MiA3LjM5MTE4IDEwLjExOTcgNi40NTI5MkMxMS4yNzA2IDUuNTE0NjUgMTIuNzE3MiA1LjAwMDg5IDE0LjIxMDggNUMxNS43MDQ3IDUuMDAwODIgMTcuMTUxNSA1LjUxNDUyIDE4LjMwMjYgNi40NTI3N0MxOS40NTM3IDcuMzkxMDEgMjAuMjM3MSA4LjY5NTE2IDIwLjUxODEgMTAuMTQxQzIzLjcxODkgMTAuNTA0MiAyNi4yMSAxMy4xNTMyIDI2LjIxIDE2LjQwMzdDMjYuMjEgMTguMDg0IDI1LjUzMjYgMTkuNjk1NCAyNC4zMjY5IDIwLjg4MzVDMjMuMTIxMyAyMi4wNzE3IDIxLjQ4NiAyMi43MzkxIDE5Ljc4MDkgMjIuNzM5MUMxOS42MzY5IDIyLjczOTEgMTkuNDk4MSAyMi43MDUzIDE5LjM1MjMgMjIuNjk2OVYyMi43MzkxSDE1LjA2OFpcIlxyXG4gICAgICAgICAgICBmaWxsPVwid2hpdGVcIiAvPlxyXG4gICAgICAgIDwvc3ZnPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGEgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJmaWxlSW5wdXQuY2xpY2soKVwiIGNsYXNzPVwidGV4dC1iYXNlIGN1cnNvci1wb2ludGVyXCI+XHJcbiAgICAgICAge3sgc2V0dGluZygndXBsb2FkLXRleHQnKSB9fVxyXG4gICAgICA8L2E+XHJcbiAgICA8L2Rpdj5cclxuICAgPC9kaXY+XHJcbiAgICA8IS0tIDxpbnB1dCAjZmlsZUlucHV0IHR5cGU9XCJmaWxlXCIgW211bHRpcGxlXT1cInNldHRpbmcoJ211bHRpcGxlLXVwbG9hZCcpXCIgKGNoYW5nZSk9XCJvbkZpbGVTZWxlY3RlZCgkZXZlbnQpXCIgaGlkZGVuIC8+XHJcbiAgICA8ZGl2IGNsYXNzPVwic2VwYXJhdG9yXCI+PC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZmlsZS1saXN0IGZsZXggaXRlbXMtY2VudGVyIGdhcC00IGZsZXgtd3JhcFwiPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidXBsb2FkZWRGaWxlcz8ubGVuZ3RoXCI+XHJcbiAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgZmlsZSBvZiB1cGxvYWRlZEZpbGVzOyBsZXQgaSA9IGluZGV4XCIgXHJcbiAgICAgICAgICBjbGFzcz1cImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyXCIgKGNsaWNrKT1cImRlbGV0ZUZpbGUoaSlcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZWxhdGl2ZVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2xvc2VfaWNvbiBjdXJzb3ItcG9pbnRlclwiPlxyXG4gICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxOFwiIHZpZXdCb3g9XCIwIDAgMTggMThcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgPGcgY2xpcC1wYXRoPVwidXJsKCNjbGlwMF82ODM3XzI5NjgzKVwiPlxyXG4gICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiMThcIiByeD1cIjlcIiBmaWxsPVwiI0YzQTA0MVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXNrIGlkPVwibWFzazBfNjgzN18yOTY4M1wiIHN0eWxlPVwibWFzay10eXBlOmFscGhhXCIgbWFza1VuaXRzPVwidXNlclNwYWNlT25Vc2VcIiB4PVwiNFwiIHk9XCI0XCIgd2lkdGg9XCIyNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiMjRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiNFwiIHk9XCI0XCIgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgZmlsbD1cIiNEOUQ5RDlcIiAvPlxyXG4gICAgICAgICAgICAgICAgICA8L21hc2s+XHJcbiAgICAgICAgICAgICAgICAgIDxnIG1hc2s9XCJ1cmwoI21hc2swXzY4MzdfMjk2ODMpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOC4yMDQ1IDguOTk4MTVMNS44MTgwMiA2LjYxMTY3TDYuNjEzNTEgNS44MTYxN0w5IDguMjAyNjZMMTEuMzg2NSA1LjgxNjE3TDEyLjE4MiA2LjYxMTY3TDkuNzk1NSA4Ljk5ODE1TDEyLjE4MiAxMS4zODQ2TDExLjM4NjUgMTIuMTgwMUw5IDkuNzkzNjVMNi42MTM1MSAxMi4xODAxTDUuODE4MDIgMTEuMzg0Nkw4LjIwNDUgOC45OTgxNVpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIndoaXRlXCIgLz5cclxuICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzY4MzdfMjk2ODNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiMThcIiByeD1cIjlcIiBmaWxsPVwid2hpdGVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxyXG4gICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGltZyBjbGFzcz1cImZpbGUtdGh1bWJuYWlsXCIgc3R5bGU9XCJib3JkZXItcmFkaXVzOiA0cHhcIiBbc3JjXT1cImZpbGU/LnJlc3VsdFwiIGFsdD1cIlwiIC8+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIHctZnVsbFwiPlxyXG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvbnQtc2VtaWJvbGQgdGV4dC1zbSBtYi0xXCI+VGl0bGU8L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCBbKG5nTW9kZWwpXT1cImZpbGUudGl0bGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICBuYW1lPVwidGl0bGV7e2l9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uTWV0YUNoYW5nZSgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJFbnRlciB0aXRsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYm9yZGVyIGJvcmRlci1vcmFuZ2UtMzAwIHJvdW5kZWQgcHgtMyBweS0yIG1iLTMgdy1mdWxsIG91dGxpbmUtbm9uZSBmb2N1czpyaW5nIGZvY3VzOnJpbmctb3JhbmdlLTIwMFwiIC8+XHJcbiAgICAgICAgICBcclxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb250LXNlbWlib2xkIHRleHQtc20gbWItMVwiPk5vdGVzPC9sYWJlbD5cclxuICAgICAgICAgICAgICA8dGV4dGFyZWEgWyhuZ01vZGVsKV09XCJmaWxlLm5vdGVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cIm5vdGVze3tpfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbk1ldGFDaGFuZ2UoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRW50ZXIgbm90ZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJvcmRlciBib3JkZXItb3JhbmdlLTMwMCByb3VuZGVkIHB4LTMgcHktMiB3LWZ1bGwgb3V0bGluZS1ub25lIGZvY3VzOnJpbmcgZm9jdXM6cmluZy1vcmFuZ2UtMjAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcm93cz1cIjJcIj48L3RleHRhcmVhPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIFxyXG5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDxwPnt7ZmlsZT8ubmFtZX19PC9wPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvZGl2PiAtLT5cclxuXHJcbiAgICA8aW5wdXQgI2ZpbGVJbnB1dFxyXG4gICAgICAgdHlwZT1cImZpbGVcIlxyXG4gICAgICAgW211bHRpcGxlXT1cInNldHRpbmcoJ211bHRpcGxlLXVwbG9hZCcpXCJcclxuICAgICAgIChjaGFuZ2UpPVwib25GaWxlU2VsZWN0ZWQoJGV2ZW50KVwiXHJcbiAgICAgICAgYWNjZXB0PVwiLmNzdiwucGRmLC54bHMsLnhsc3gsLmRvYywuZG9jeCwudHh0LGltYWdlLypcIlxyXG4gICAgICAgaGlkZGVuIC8+XHJcblxyXG48IS0tIDxkaXYgY2xhc3M9XCJzZXBhcmF0b3JcIj48L2Rpdj4gLS0+XHJcblxyXG48ZGl2IGNsYXNzPVwiZmlsZS1saXN0IGZsZXggaXRlbXMtY2VudGVyIGdhcC02IGZsZXgtd3JhcFwiICpuZ0lmPVwiZmFsc2VcIj5cclxuICA8bmctY29udGFpbmVyICpuZ0lmPVwidXBsb2FkZWRGaWxlcz8ubGVuZ3RoXCI+XHJcbiAgICA8ZGl2ICpuZ0Zvcj1cImxldCBmaWxlIG9mIHVwbG9hZGVkRmlsZXM7IGxldCBpID0gaW5kZXhcIlxyXG4gICAgICAgICBjbGFzcz1cImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyXCI+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtY29udGFpbmVyIHAtMyBib3JkZXIgcm91bmRlZC1sZyBzaGFkb3ctc20gYmctd2hpdGUgdy02NFwiPlxyXG4gICAgICAgIDwhLS0gQ2xvc2UgaWNvbiAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2xvc2VfaWNvbiBjdXJzb3ItcG9pbnRlciBhYnNvbHV0ZSB0b3AtMiByaWdodC0yXCIgKGNsaWNrKT1cImRlbGV0ZUZpbGUoaSlcIj5cclxuICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxOFwiIHZpZXdCb3g9XCIwIDAgMTggMThcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiMThcIiByeD1cIjlcIiBmaWxsPVwiI0YzQTA0MVwiIC8+XHJcbiAgICAgICAgICAgIDxwYXRoIGQ9XCJNOC4yIDlsLTIuNC0yLjQuOC0uOEw5IDguMmwyLjQtMi40LjguOEw5LjggOWwyLjQgMi40LS44LjhMOSA5LjhsLTIuNCAyLjQtLjgtLjhMOC4yIDl6XCJcclxuICAgICAgICAgICAgICAgICAgZmlsbD1cIndoaXRlXCIvPlxyXG4gICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwhLS0gVGh1bWJuYWlsIC0tPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmaWxlLnR5cGUgPT09ICdpbWFnZSc7IGVsc2Ugbm9uSW1hZ2VUaHVtYlwiPlxyXG4gICAgICAgICAgPGltZyBjbGFzcz1cImZpbGUtdGh1bWJuYWlsIHctZnVsbCBoLTMyIG9iamVjdC1jb3ZlciByb3VuZGVkIG1iLTNcIlxyXG4gICAgICAgICAgICAgICBbc3JjXT1cImZpbGU/LnJlc3VsdFwiXHJcbiAgICAgICAgICAgICAgIGFsdD1cInByZXZpZXdcIiAvPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICA8bmctdGVtcGxhdGUgI25vbkltYWdlVGh1bWI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsZS10aHVtYm5haWwgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYm9yZGVyIHJvdW5kZWQgbWItMyB3LWZ1bGwgaC0zMiBiZy1ncmF5LTUwXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImZpbGUudHlwZVwiPlxyXG4gICAgICAgICAgICAgIDwhLS0gQ1NWIC0tPlxyXG4gICAgICAgICAgICAgIDxzdmcgKm5nU3dpdGNoQ2FzZT1cIidjc3YnXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiNDhcIiBoZWlnaHQ9XCI0OFwiIHZpZXdCb3g9XCIwIDAgNDggNDhcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgPHJlY3QgeD1cIjhcIiB5PVwiNlwiIHdpZHRoPVwiMjhcIiBoZWlnaHQ9XCIzNlwiIHJ4PVwiM1wiIHN0cm9rZT1cIiMyMmM1NWVcIiBzdHJva2Utd2lkdGg9XCIyXCIvPlxyXG4gICAgICAgICAgICAgICAgPHBhdGggZD1cIk0yOCA2djhhMiAyIDAgMCAwIDIgMmg2XCIgc3Ryb2tlPVwiIzIyYzU1ZVwiIHN0cm9rZS13aWR0aD1cIjJcIi8+XHJcbiAgICAgICAgICAgICAgICA8dGV4dCB4PVwiMTRcIiB5PVwiMzRcIiBmb250LXNpemU9XCIxMFwiIGZvbnQtZmFtaWx5PVwibW9ub3NwYWNlXCIgZmlsbD1cIiMyMmM1NWVcIj5DU1Y8L3RleHQ+XHJcbiAgICAgICAgICAgICAgPC9zdmc+XHJcblxyXG4gICAgICAgICAgICAgIDwhLS0gVEVYVCAtLT5cclxuICAgICAgICAgICAgICA8c3ZnICpuZ1N3aXRjaENhc2U9XCIndGV4dCdcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCI0OFwiIGhlaWdodD1cIjQ4XCIgdmlld0JveD1cIjAgMCA0OCA0OFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICA8cmVjdCB4PVwiOFwiIHk9XCI2XCIgd2lkdGg9XCIyOFwiIGhlaWdodD1cIjM2XCIgcng9XCIzXCIgc3Ryb2tlPVwiIzNiODJmNlwiIHN0cm9rZS13aWR0aD1cIjJcIi8+XHJcbiAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTI4IDZ2OGEyIDIgMCAwIDAgMiAyaDZcIiBzdHJva2U9XCIjM2I4MmY2XCIgc3Ryb2tlLXdpZHRoPVwiMlwiLz5cclxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTQgMjRoMjBNMTQgMjloMjBNMTQgMzRoMTJcIiBzdHJva2U9XCIjM2I4MmY2XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIi8+XHJcbiAgICAgICAgICAgICAgPC9zdmc+XHJcblxyXG4gICAgICAgICAgICAgIDwhLS0gR2VuZXJpYyAtLT5cclxuICAgICAgICAgICAgICA8c3ZnICpuZ1N3aXRjaERlZmF1bHQgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiNDhcIiBoZWlnaHQ9XCI0OFwiIHZpZXdCb3g9XCIwIDAgNDggNDhcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgPHJlY3QgeD1cIjhcIiB5PVwiNlwiIHdpZHRoPVwiMjhcIiBoZWlnaHQ9XCIzNlwiIHJ4PVwiM1wiIHN0cm9rZT1cIiM5Y2EzYWZcIiBzdHJva2Utd2lkdGg9XCIyXCIvPlxyXG4gICAgICAgICAgICAgICAgPHBhdGggZD1cIk0yOCA2djhhMiAyIDAgMCAwIDIgMmg2XCIgc3Ryb2tlPVwiIzljYTNhZlwiIHN0cm9rZS13aWR0aD1cIjJcIi8+XHJcbiAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE2IDMwaDE2XCIgc3Ryb2tlPVwiIzljYTNhZlwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIvPlxyXG4gICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgIDwhLS0gTWV0YWRhdGEgLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgdy1mdWxsXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvbnQtc2VtaWJvbGQgdGV4dC1zbSBtYi0xIGlucHV0LXRpdGxlXCI+VGl0bGU8L2xhYmVsPlxyXG4gICAgICAgICAgICA8aW5wdXQgWyhuZ01vZGVsKV09XCJmaWxlLnRpdGxlXCIgbmFtZT1cInRpdGxle3tpfX1cIiAobmdNb2RlbENoYW5nZSk9XCJvbk1ldGFDaGFuZ2UoKVwiIHBsYWNlaG9sZGVyPVwiRW50ZXIgdGl0bGVcIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiYm9yZGVyIGJvcmRlci1vcmFuZ2UtMzAwIHJvdW5kZWQgcHgtMyBweS0yIG1iLTMgdy1mdWxsIG91dGxpbmUtbm9uZSBmb2N1czpyaW5nIGZvY3VzOnJpbmctb3JhbmdlLTIwMFwiIC8+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICBcclxuICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvbnQtc2VtaWJvbGQgdGV4dC1zbSBtYi0xIGlucHV0LXRpdGxlXCI+Tm90ZXM8L2xhYmVsPlxyXG4gICAgICAgICAgICA8dGV4dGFyZWEgWyhuZ01vZGVsKV09XCJmaWxlLm5vdGVzXCIgbmFtZT1cIm5vdGVze3tpfX1cIiAobmdNb2RlbENoYW5nZSk9XCJvbk1ldGFDaGFuZ2UoKVwiIHBsYWNlaG9sZGVyPVwiRW50ZXIgbm90ZXNcIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiYm9yZGVyIGJvcmRlci1vcmFuZ2UtMzAwIHJvdW5kZWQgcHgtMyBweS0yIHctZnVsbCBvdXRsaW5lLW5vbmUgZm9jdXM6cmluZyBmb2N1czpyaW5nLW9yYW5nZS0yMDBcIlxyXG4gICAgICAgICAgICAgIHJvd3M9XCIyXCI+PC90ZXh0YXJlYT5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIFxyXG4gICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9udC1zZW1pYm9sZCB0ZXh0LXNtIG10LTMgbWItMSBpbnB1dC10aXRsZVwiPkNhdGVnb3J5PC9sYWJlbD5cclxuICAgICAgICAgICAgPHNlbGVjdCBbKG5nTW9kZWwpXT1cImZpbGUuY2F0ZWdvcnlcIiBuYW1lPVwiY2F0ZWdvcnl7e2l9fVwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uTWV0YUNoYW5nZSgpXCJcclxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjdCBDYXRlZ29yeVwiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJib3JkZXIgYm9yZGVyLW9yYW5nZS0zMDAgcm91bmRlZCBweC0zIHB5LTIgdy1mdWxsIG91dGxpbmUtbm9uZSBmb2N1czpyaW5nIGZvY3VzOnJpbmctb3JhbmdlLTIwMFwiPlxyXG4gICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IGMgb2YgY2F0ZWdvcmllc1wiIFtuZ1ZhbHVlXT1cImNcIj57eyBjIH19PC9vcHRpb24+XHJcbiAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPHAgY2xhc3M9XCJtdC0yIHRleHQtc20gdGV4dC1ncmF5LTYwMFwiPnt7IGZpbGU/Lm5hbWUgfX08L3A+XHJcbiAgICA8L2Rpdj5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuPC9kaXY+XHJcblxyXG48ZGl2IGNsYXNzPVwiZmlsZS1saXN0IGZsZXggaXRlbXMtY2VudGVyIGdhcC04IGZsZXgtd3JhcFwiPlxyXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJ1cGxvYWRlZEZpbGVzPy5sZW5ndGhcIj5cclxuICAgIDxkaXYgKm5nRm9yPVwibGV0IGZpbGUgb2YgdXBsb2FkZWRGaWxlczsgbGV0IGkgPSBpbmRleFwiXHJcbiAgICAgICAgIGNsYXNzPVwiaW5wdXQtY29udGFpbmVyIHAtMyBib3JkZXIgcm91bmRlZC1sZyBzaGFkb3ctc20gYmctd2hpdGUgdy1bNTAwcHhdIGZsZXhcIj5cclxuXHJcbiAgICAgIDwhLS0gQ2xvc2UgaWNvbiAtLT5cclxuICAgICAgPGRpdiBjbGFzcz1cImNsb3NlX2ljb24gY3Vyc29yLXBvaW50ZXIgYWJzb2x1dGUgdG9wLTIgcmlnaHQtMlwiIChjbGljayk9XCJkZWxldGVGaWxlKGkpXCI+XHJcbiAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjE4XCIgdmlld0JveD1cIjAgMCAxOCAxOFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICA8cmVjdCB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiMThcIiByeD1cIjlcIiBmaWxsPVwiI0YzQTA0MVwiIC8+XHJcbiAgICAgICAgICA8cGF0aCBkPVwiTTguMiA5bC0yLjQtMi40LjgtLjhMOSA4LjJsMi40LTIuNC44LjhMOS44IDlsMi40IDIuNC0uOC44TDkgOS44bC0yLjQgMi40LS44LS44TDguMiA5elwiXHJcbiAgICAgICAgICAgICAgICBmaWxsPVwid2hpdGVcIi8+XHJcbiAgICAgICAgPC9zdmc+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPCEtLSBUaHVtYm5haWwgb24gbGVmdCAtLT5cclxuICAgICAgPGRpdiBjbGFzcz1cInctMjggaC0yOCBmbGV4LXNocmluay0wXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpbGUudHlwZSA9PT0gJ2ltYWdlJzsgZWxzZSBub25JbWFnZVRodW1iXCI+XHJcbiAgICAgICAgICA8aW1nIGNsYXNzPVwiZmlsZS10aHVtYm5haWwgdy1mdWxsIGgtZnVsbCBvYmplY3QtY292ZXIgcm91bmRlZFwiXHJcbiAgICAgICAgICAgICAgIFtzcmNdPVwiZmlsZT8ucmVzdWx0XCJcclxuICAgICAgICAgICAgICAgYWx0PVwicHJldmlld1wiIC8+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9uSW1hZ2VUaHVtYj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWxlLXRodW1ibmFpbCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBib3JkZXIgcm91bmRlZCB3LWZ1bGwgaC1mdWxsIGJnLWdyYXktNTBcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiZmlsZS50eXBlXCI+XHJcbiAgICAgICAgICAgICAgPCEtLSBDU1YgLS0+XHJcbiAgICAgICAgICAgICAgPCEtLSA8c3ZnICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCI0OFwiIGhlaWdodD1cIjQ4XCIgdmlld0JveD1cIjAgMCA0OCA0OFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICA8cmVjdCB4PVwiOFwiIHk9XCI2XCIgd2lkdGg9XCIyOFwiIGhlaWdodD1cIjM2XCIgcng9XCIzXCIgc3Ryb2tlPVwiIzIyYzU1ZVwiIHN0cm9rZS13aWR0aD1cIjJcIi8+XHJcbiAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTI4IDZ2OGEyIDIgMCAwIDAgMiAyaDZcIiBzdHJva2U9XCIjMjJjNTVlXCIgc3Ryb2tlLXdpZHRoPVwiMlwiLz5cclxuICAgICAgICAgICAgICAgIDx0ZXh0IHg9XCIxNFwiIHk9XCIzNFwiIGZvbnQtc2l6ZT1cIjEwXCIgZm9udC1mYW1pbHk9XCJtb25vc3BhY2VcIiBmaWxsPVwiIzIyYzU1ZVwiPkNTVjwvdGV4dD5cclxuICAgICAgICAgICAgICA8L3N2Zz4gLS0+XHJcblxyXG4gICAgICAgICAgICAgIDxzdmcgKm5nU3dpdGNoQ2FzZT1cIidjc3YnXCIgd2lkdGg9XCIxODBweFwiIGhlaWdodD1cIjE4MHB4XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG48cGF0aCBkPVwiTTExLjE3NTcgMS4xNzU3NEMxMS4wNjMyIDEuMDYzMjEgMTAuOTEwNiAxIDEwLjc1MTUgMUgzLjZDMy4yNjg2MyAxIDMgMS4yNjg2MyAzIDEuNlYxNC40QzMgMTQuNzMxNCAzLjI2ODYzIDE1IDMuNiAxNUgxMy40QzEzLjczMTQgMTUgMTQgMTQuNzMxNCAxNCAxNC40VjQuMjQ4NTNDMTQgNC4wODk0IDEzLjkzNjggMy45MzY3OSAxMy44MjQzIDMuODI0MjZMMTEuMTc1NyAxLjE3NTc0WlwiIGZpbGw9XCIjRjRGNEY0XCIvPlxyXG48cGF0aCBkPVwiTTE1IDEyLjdDMTUgMTIuODY1NyAxNC44NjU3IDEzIDE0LjcgMTNIMi4zQzIuMTM0MzEgMTMgMiAxMi44NjU3IDIgMTIuN1Y5LjNDMiA5LjEzNDMxIDIuMTM0MzEgOSAyLjMgOUgxNC43QzE0Ljg2NTcgOSAxNSA5LjEzNDMxIDE1IDkuM1YxMi43WlwiIGZpbGw9XCIjMjNBNzYxXCIvPlxyXG48cGF0aCBkPVwiTTExIDFMMTIuNSAyLjVMMTQgNEgxMS4yQzExLjA4OTUgNCAxMSAzLjkxMDQ2IDExIDMuOFYxWlwiIGZpbGw9XCIjRDlEOUQ5XCIvPlxyXG48cGF0aCBkPVwiTTYuOTQwNzYgMTAuMzQzM0M2Ljg1OTM5IDEwLjM0MzMgNi43ODcxNiAxMC4zNTg4IDYuNzI0MDggMTAuMzg5OUM2LjY2MTkxIDEwLjQyIDYuNjA5MzQgMTAuNDY0IDYuNTY2MzcgMTAuNTIxNkM2LjUyNDMyIDEwLjU3OTMgNi40OTIzMiAxMC42NDg5IDYuNDcwMzggMTAuNzMwNUM2LjQ0ODQ0IDEwLjgxMjIgNi40Mzc0NyAxMC45MDQgNi40Mzc0NyAxMS4wMDZDNi40Mzc0NyAxMS4xNDM1IDYuNDU0ODQgMTEuMjYxIDYuNDg5NTggMTEuMzU4NkM2LjUyNTIzIDExLjQ1NTMgNi41ODAwOSAxMS41Mjk0IDYuNjU0MTQgMTEuNTgwOEM2LjcyODIgMTEuNjMxNCA2LjgyMzczIDExLjY1NjcgNi45NDA3NiAxMS42NTY3QzcuMDIyMTIgMTEuNjU2NyA3LjEwMzQ5IDExLjY0NzggNy4xODQ4NiAxMS42MzAxQzcuMjY3MTQgMTEuNjEyMyA3LjM1NjI4IDExLjU4NyA3LjQ1MjI4IDExLjU1NDJWMTEuOTAwMkM3LjM2MzU5IDExLjkzNTcgNy4yNzYyOCAxMS45NjEgNy4xOTAzNSAxMS45NzZDNy4xMDQ0MSAxMS45OTIgNy4wMDc5NSAxMiA2LjkwMDk5IDEyQzYuNjk0MzcgMTIgNi41MjQzMiAxMS45NTg3IDYuMzkwODQgMTEuODc2MkM2LjI1ODI3IDExLjc5MjkgNi4xNTk5OSAxMS42NzY2IDYuMDk2IDExLjUyNzZDNi4wMzIgMTEuMzc3NyA2IDExLjIwMjkgNiAxMS4wMDMzQzYgMTAuODU2MSA2LjAyMDU3IDEwLjcyMTIgNi4wNjE3MSAxMC41OTg4QzYuMTAyODUgMTAuNDc2NCA2LjE2MzE5IDEwLjM3MDQgNi4yNDI3MyAxMC4yODA4QzYuMzIyMjcgMTAuMTkxMiA2LjQyMDU1IDEwLjEyMiA2LjUzNzU4IDEwLjA3MzJDNi42NTQ2IDEwLjAyNDQgNi43ODg5OSAxMCA2Ljk0MDc2IDEwQzcuMDQwNDEgMTAgNy4xNDAwNiAxMC4wMTI0IDcuMjM5NzEgMTAuMDM3M0M3LjM0MDI4IDEwLjA2MTIgNy40MzYyOCAxMC4wOTQ1IDcuNTI3NyAxMC4xMzcxTDcuMzkwNTcgMTAuNDcyNEM3LjMxNTYgMTAuNDM3OCA3LjI0MDE3IDEwLjQwNzYgNy4xNjQyOSAxMC4zODE5QzcuMDg4NDEgMTAuMzU2MiA3LjAxMzkgMTAuMzQzMyA2Ljk0MDc2IDEwLjM0MzNaXCIgZmlsbD1cIndoaXRlXCIvPlxyXG48cGF0aCBkPVwiTTkuMDYzNjMgMTEuNDMzMUM5LjA2MzYzIDExLjU0ODUgOS4wMzQ4MyAxMS42NDg3IDguOTc3MjQgMTEuNzMzOUM4LjkxOTY0IDExLjgxOSA4LjgzNTUzIDExLjg4NDcgOC43MjQ5IDExLjkzMDhDOC42MTUxOSAxMS45NzY5IDguNDgxNzIgMTIgOC4zMjQ0NyAxMkM4LjI1NDk4IDEyIDguMTg2ODcgMTEuOTk1NiA4LjEyMDEzIDExLjk4NjdDOC4wNTQzMSAxMS45Nzc4IDcuOTkwNzcgMTEuOTY1IDcuOTI5NTEgMTEuOTQ4MUM3Ljg2OTE3IDExLjkzMDQgNy44MTE1NyAxMS45MDg2IDcuNzU2NzIgMTEuODgyOVYxMS40OTk3QzcuODUxOCAxMS41NDA1IDcuOTUwNTQgMTEuNTc3MyA4LjA1MjkzIDExLjYxMDFDOC4xNTUzMyAxMS42NDI5IDguMjU2ODEgMTEuNjU5MyA4LjM1NzM4IDExLjY1OTNDOC40MjY4NiAxMS42NTkzIDguNDgyNjMgMTEuNjUwNSA4LjUyNDY4IDExLjYzMjdDOC41Njc2NSAxMS42MTUgOC41OTg3NCAxMS41OTA2IDguNjE3OTQgMTEuNTU5NUM4LjYzNzE0IDExLjUyODUgOC42NDY3NCAxMS40OTMgOC42NDY3NCAxMS40NTMxQzguNjQ2NzQgMTEuNDA0MyA4LjYyOTgyIDExLjM2MjYgOC41OTYgMTEuMzI4QzguNTYyMTcgMTEuMjkzNCA4LjUxNTU0IDExLjI2MSA4LjQ1NjEyIDExLjIzMDlDOC4zOTc2IDExLjIwMDcgOC4zMzEzMiAxMS4xNjgzIDguMjU3MjcgMTEuMTMzN0M4LjIxMDY0IDExLjExMjQgOC4xNTk5IDExLjA4NjcgOC4xMDUwNSAxMS4wNTY2QzguMDUwMTkgMTEuMDI1NSA3Ljk5ODA4IDEwLjk4NzggNy45NDg3MSAxMC45NDM0QzcuODk5MzQgMTAuODk5MSA3Ljg1ODY2IDEwLjg0NTQgNy44MjY2NiAxMC43ODI0QzcuNzk1NTggMTAuNzE4NiA3Ljc4MDAzIDEwLjY0MjMgNy43ODAwMyAxMC41NTM2QzcuNzgwMDMgMTAuNDM3MyA3LjgwNzQ2IDEwLjMzOCA3Ljg2MjMxIDEwLjI1NTVDNy45MTcxNyAxMC4xNzMgNy45OTUzNCAxMC4xMSA4LjA5NjgyIDEwLjA2NjVDOC4xOTkyMSAxMC4wMjIyIDguMzE5ODkgMTAgOC40NTg4NiAxMEM4LjU2MzA4IDEwIDguNjYyMjggMTAuMDEyIDguNzU2NDUgMTAuMDM1OUM4Ljg1MTUzIDEwLjA1OSA4Ljk1MDcyIDEwLjA5MjcgOS4wNTQwMyAxMC4xMzcxTDguOTE2OSAxMC40NTc4QzguODI0NTYgMTAuNDIxNCA4Ljc0MTgyIDEwLjM5MzQgOC42Njg2OCAxMC4zNzM5QzguNTk1NTQgMTAuMzUzNSA4LjUyMTAzIDEwLjM0MzMgOC40NDUxNSAxMC4zNDMzQzguMzkyMTIgMTAuMzQzMyA4LjM0Njg2IDEwLjM1MTcgOC4zMDkzOCAxMC4zNjg2QzguMjcxOSAxMC4zODQ2IDguMjQzNTUgMTAuNDA3NiA4LjIyNDM2IDEwLjQzNzhDOC4yMDUxNiAxMC40NjcxIDguMTk1NTYgMTAuNTAxMiA4LjE5NTU2IDEwLjU0MDNDOC4xOTU1NiAxMC41ODY0IDguMjA5MjcgMTAuNjI1NCA4LjIzNjcgMTAuNjU3NEM4LjI2NTA0IDEwLjY4ODQgOC4zMDcwOSAxMC43MTg2IDguMzYyODYgMTAuNzQ3OEM4LjQxOTU1IDEwLjc3NzEgOC40ODk5NCAxMC44MTEzIDguNTc0MDUgMTAuODUwM0M4LjY3NjQ1IDEwLjg5NzMgOC43NjM3NiAxMC45NDY2IDguODM1OTggMTAuOTk4QzguOTA5MTIgMTEuMDQ4NiA4Ljk2NTM1IDExLjEwODQgOS4wMDQ2NiAxMS4xNzc2QzkuMDQzOTggMTEuMjQ2IDkuMDYzNjMgMTEuMzMxMSA5LjA2MzYzIDExLjQzMzFaXCIgZmlsbD1cIndoaXRlXCIvPlxyXG48cGF0aCBkPVwiTTExIDEwLjAyNzlMMTAuMzE4NCAxMS45NzM0SDkuODU0OTFMOS4xNzQ3MSAxMC4wMjc5SDkuNjAzOTVMOS45ODEwOCAxMS4xODU2QzkuOTg3NDggMTEuMjA1MSA5Ljk5Nzk5IDExLjI0MiAxMC4wMTI2IDExLjI5NjFDMTAuMDI3MiAxMS4zNDkzIDEwLjA0MTkgMTEuNDA2MSAxMC4wNTY1IDExLjQ2NjRDMTAuMDcyIDExLjUyNTggMTAuMDgyNiAxMS41NzUxIDEwLjA4OCAxMS42MTQxQzEwLjA5MzUgMTEuNTc1MSAxMC4xMDMxIDExLjUyNTggMTAuMTE2OCAxMS40NjY0QzEwLjEzMTUgMTEuNDA3IDEwLjE0NTYgMTEuMzUwNiAxMC4xNTk0IDExLjI5NzRDMTAuMTc0IDExLjI0MzMgMTAuMTg0NSAxMS4yMDYgMTAuMTkwOSAxMS4xODU2TDEwLjU3MDggMTAuMDI3OUgxMVpcIiBmaWxsPVwid2hpdGVcIi8+XHJcbjxyZWN0IHg9XCI1XCIgeT1cIjdcIiB3aWR0aD1cIjNcIiBoZWlnaHQ9XCIxXCIgcng9XCIwLjJcIiBmaWxsPVwiI0NDQ0NDQ1wiLz5cclxuPHJlY3QgeD1cIjVcIiB5PVwiNVwiIHdpZHRoPVwiM1wiIGhlaWdodD1cIjFcIiByeD1cIjAuMlwiIGZpbGw9XCIjQ0NDQ0NDXCIvPlxyXG48cmVjdCB4PVwiOVwiIHk9XCI3XCIgd2lkdGg9XCIzXCIgaGVpZ2h0PVwiMVwiIHJ4PVwiMC4yXCIgZmlsbD1cIiNDQ0NDQ0NcIi8+XHJcbjxyZWN0IHg9XCI5XCIgeT1cIjVcIiB3aWR0aD1cIjNcIiBoZWlnaHQ9XCIxXCIgcng9XCIwLjJcIiBmaWxsPVwiI0NDQ0NDQ1wiLz5cclxuPC9zdmc+XHJcblxyXG4gICAgICAgICAgICAgIDwhLS0gVEVYVCAtLT5cclxuICAgICAgICAgICAgICA8IS0tIDxzdmcgKm5nU3dpdGNoQ2FzZT1cIid0ZXh0J1wiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjQ4XCIgaGVpZ2h0PVwiNDhcIiB2aWV3Qm94PVwiMCAwIDQ4IDQ4XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgIDxyZWN0IHg9XCI4XCIgeT1cIjZcIiB3aWR0aD1cIjI4XCIgaGVpZ2h0PVwiMzZcIiByeD1cIjNcIiBzdHJva2U9XCIjM2I4MmY2XCIgc3Ryb2tlLXdpZHRoPVwiMlwiLz5cclxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMjggNnY4YTIgMiAwIDAgMCAyIDJoNlwiIHN0cm9rZT1cIiMzYjgyZjZcIiBzdHJva2Utd2lkdGg9XCIyXCIvPlxyXG4gICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xNCAyNGgyME0xNCAyOWgyME0xNCAzNGgxMlwiIHN0cm9rZT1cIiMzYjgyZjZcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiLz5cclxuICAgICAgICAgICAgICA8L3N2Zz4gLS0+XHJcbiAgICAgICAgICAgICAgPCEtLSA8c3ZnICB3aWR0aD1cIjE4MHB4XCIgaGVpZ2h0PVwiMTgwcHhcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbjxwYXRoIGQ9XCJNMTEuMTc1NyAxLjE3NTc0QzExLjA2MzIgMS4wNjMyMSAxMC45MTA2IDEgMTAuNzUxNSAxSDMuNkMzLjI2ODYzIDEgMyAxLjI2ODYzIDMgMS42VjE0LjRDMyAxNC43MzE0IDMuMjY4NjMgMTUgMy42IDE1SDEzLjRDMTMuNzMxNCAxNSAxNCAxNC43MzE0IDE0IDE0LjRWNC4yNDg1M0MxNCA0LjA4OTQgMTMuOTM2OCAzLjkzNjc5IDEzLjgyNDMgMy44MjQyNkwxMS4xNzU3IDEuMTc1NzRaXCIgZmlsbD1cIiNGNEY0RjRcIi8+XHJcbjxwYXRoIGQ9XCJNMTUgMTIuN0MxNSAxMi44NjU3IDE0Ljg2NTcgMTMgMTQuNyAxM0gyLjNDMi4xMzQzMSAxMyAyIDEyLjg2NTcgMiAxMi43VjkuM0MyIDkuMTM0MzEgMi4xMzQzMSA5IDIuMyA5SDE0LjdDMTQuODY1NyA5IDE1IDkuMTM0MzEgMTUgOS4zVjEyLjdaXCIgZmlsbD1cIiNERDIwMjVcIi8+XHJcbjxwYXRoIGQ9XCJNMTEgMUwxMi41IDIuNUwxNCA0SDExLjJDMTEuMDg5NSA0IDExIDMuOTEwNDYgMTEgMy44VjFaXCIgZmlsbD1cIiNEOUQ5RDlcIi8+XHJcbjxwYXRoIGQ9XCJNNi42MDg0IDkuOTYwMzhDNi44NzE2MSA5Ljk2MDM4IDcuMDYzNjYgMTAuMDE3MSA3LjE4NDU3IDEwLjEzMDZDNy4zMDU0OCAxMC4yNDMxIDcuMzY1OTMgMTAuMzk4NCA3LjM2NTkzIDEwLjU5NjVDNy4zNjU5MyAxMC42ODU4IDcuMzUyNDUgMTAuNzcxNCA3LjMyNTQ3IDEwLjg1MzJDNy4yOTg1IDEwLjkzNDIgNy4yNTQzMiAxMS4wMDYyIDcuMTkyOTQgMTEuMDY5NUM3LjEzMjQ5IDExLjEzMjcgNy4wNTE1NyAxMS4xODI5IDYuOTUwMiAxMS4yMjAxQzYuODQ4ODIgMTEuMjU2NCA2LjcyMzczIDExLjI3NDYgNi41NzQ5MiAxMS4yNzQ2SDYuMzg5MzdWMTJINS45NTY4OVY5Ljk2MDM4SDYuNjA4NFpNNi41ODYwOCAxMC4zMTQ3SDYuMzg5MzdWMTAuOTIwMkg2LjUzMTY3QzYuNjEyNTggMTAuOTIwMiA2LjY4MjggMTAuOTA5NSA2Ljc0MjMzIDEwLjg4ODFDNi44MDE4NSAxMC44NjY3IDYuODQ3ODkgMTAuODMzMiA2Ljg4MDQ0IDEwLjc4NzdDNi45MTI5OSAxMC43NDIxIDYuOTI5MjcgMTAuNjgzNSA2LjkyOTI3IDEwLjYxMTlDNi45MjkyNyAxMC41MTE0IDYuOTAxMzcgMTAuNDM3IDYuODQ1NTYgMTAuMzg4N0M2Ljc4OTc2IDEwLjMzOTQgNi43MDMyNiAxMC4zMTQ3IDYuNTg2MDggMTAuMzE0N1pNOS40NDMyMiAxMC45NjA3QzkuNDQzMjIgMTEuMTkwNCA5LjM5OTA0IDExLjM4MjQgOS4zMTA2OSAxMS41MzY4QzkuMjIzMjYgMTEuNjkwMyA5LjA5NjMxIDExLjgwNjEgOC45Mjk4MyAxMS44ODQyQzguNzYzMzUgMTEuOTYxNCA4LjU2MjkyIDEyIDguMzI4NTQgMTJINy43NTA5OFY5Ljk2MDM4SDguMzkxMzJDOC42MDUyNCA5Ljk2MDM4IDguNzkwNzggOS45OTg1MSA4Ljk0Nzk2IDEwLjA3NDhDOS4xMDUxNCAxMC4xNTAxIDkuMjI2OTggMTAuMjYyMiA5LjMxMzQ4IDEwLjQxMUM5LjM5OTk3IDEwLjU1ODkgOS40NDMyMiAxMC43NDIxIDkuNDQzMjIgMTAuOTYwN1pNOC45OTQgMTAuOTcxOEM4Ljk5NCAxMC44MjExIDguOTcxNjggMTAuNjk3NSA4LjkyNzA0IDEwLjYwMDdDOC44ODMzMiAxMC41MDMxIDguODE4MjIgMTAuNDMxIDguNzMxNzIgMTAuMzg0NUM4LjY0NjE2IDEwLjMzOCA4LjU0MDEzIDEwLjMxNDcgOC40MTM2NCAxMC4zMTQ3SDguMTgzNDVWMTEuNjQyOUg4LjM2OUM4LjU4MDEyIDExLjY0MjkgOC43MzY4NCAxMS41ODY2IDguODM5MTUgMTEuNDc0MUM4Ljk0MjM4IDExLjM2MTUgOC45OTQgMTEuMTk0MSA4Ljk5NCAxMC45NzE4Wk0xMC4yOTE0IDEySDkuODY1OTNWOS45NjAzOEgxMS4wMzVWMTAuMzE0N0gxMC4yOTE0VjEwLjg0MDdIMTAuOTgzNFYxMS4xOTM2SDEwLjI5MTRWMTJaXCIgZmlsbD1cIndoaXRlXCIvPlxyXG48cmVjdCB4PVwiNVwiIHk9XCI1XCIgd2lkdGg9XCI3XCIgaGVpZ2h0PVwiMC41XCIgcng9XCIwLjI1XCIgZmlsbD1cIiNDQ0NDQ0NcIi8+XHJcbjxyZWN0IHg9XCI1XCIgeT1cIjZcIiB3aWR0aD1cIjdcIiBoZWlnaHQ9XCIwLjVcIiByeD1cIjAuMjVcIiBmaWxsPVwiI0NDQ0NDQ1wiLz5cclxuPHJlY3QgeD1cIjVcIiB5PVwiN1wiIHdpZHRoPVwiN1wiIGhlaWdodD1cIjAuNVwiIHJ4PVwiMC4yNVwiIGZpbGw9XCIjQ0NDQ0NDXCIvPlxyXG48L3N2Zz4gLS0+XHJcblxyXG48c3ZnICpuZ1N3aXRjaENhc2U9XCIndGV4dCdcIiB3aWR0aD1cIjE4MHB4XCIgaGVpZ2h0PVwiMTgwcHhcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbjxwYXRoIGQ9XCJNMTEuMTc1NyAxLjE3NTc0QzExLjA2MzIgMS4wNjMyMSAxMC45MTA2IDEgMTAuNzUxNSAxSDMuNkMzLjI2ODYzIDEgMyAxLjI2ODYzIDMgMS42VjE0LjRDMyAxNC43MzE0IDMuMjY4NjMgMTUgMy42IDE1SDEzLjRDMTMuNzMxNCAxNSAxNCAxNC43MzE0IDE0IDE0LjRWNC4yNDg1M0MxNCA0LjA4OTQgMTMuOTM2OCAzLjkzNjc5IDEzLjgyNDMgMy44MjQyNkwxMS4xNzU3IDEuMTc1NzRaXCIgZmlsbD1cIiNGNEY0RjRcIi8+XHJcbjxwYXRoIGQ9XCJNMTUgMTIuN0MxNSAxMi44NjU3IDE0Ljg2NTcgMTMgMTQuNyAxM0gyLjNDMi4xMzQzMSAxMyAyIDEyLjg2NTcgMiAxMi43VjkuM0MyIDkuMTM0MzEgMi4xMzQzMSA5IDIuMyA5SDE0LjdDMTQuODY1NyA5IDE1IDkuMTM0MzEgMTUgOS4zVjEyLjdaXCIgZmlsbD1cIiMxRjVFQkJcIi8+XHJcbjxwYXRoIGQ9XCJNMTEgMUwxMi41IDIuNUwxNCA0SDExLjJDMTEuMDg5NSA0IDExIDMuOTEwNDYgMTEgMy44VjFaXCIgZmlsbD1cIiNEOUQ5RDlcIi8+XHJcbjxwYXRoIGQ9XCJNNy4wNDM1MyAxMkg2LjYxMTA1VjEwLjMyMDNINi4wNTcyVjkuOTYwMzhINy41OTczOFYxMC4zMjAzSDcuMDQzNTNWMTJaTTkuNTYwMjcgMTJIOS4wNjY0MUw4LjU5MjA4IDExLjIyODVMOC4xMTc3NSAxMkg3LjY1NDU4TDguMzMxMTkgMTAuOTQ4MUw3LjY5NzgyIDkuOTYwMzhIOC4xNzQ5NEw4LjYxNDQgMTAuNjk0Mkw5LjA0NTQ4IDkuOTYwMzhIOS41MTE0NEw4Ljg3MTA5IDEwLjk3MThMOS41NjAyNyAxMlpNMTAuNjAzOCAxMkgxMC4xNzEzVjEwLjMyMDNIOS42MTc0N1Y5Ljk2MDM4SDExLjE1NzZWMTAuMzIwM0gxMC42MDM4VjEyWlwiIGZpbGw9XCJ3aGl0ZVwiLz5cclxuPHJlY3QgeD1cIjVcIiB5PVwiNVwiIHdpZHRoPVwiN1wiIGhlaWdodD1cIjAuNVwiIHJ4PVwiMC4yNVwiIGZpbGw9XCIjQ0NDQ0NDXCIvPlxyXG48cmVjdCB4PVwiNVwiIHk9XCI2XCIgd2lkdGg9XCI3XCIgaGVpZ2h0PVwiMC41XCIgcng9XCIwLjI1XCIgZmlsbD1cIiNDQ0NDQ0NcIi8+XHJcbjxyZWN0IHg9XCI1XCIgeT1cIjdcIiB3aWR0aD1cIjdcIiBoZWlnaHQ9XCIwLjVcIiByeD1cIjAuMjVcIiBmaWxsPVwiI0NDQ0NDQ1wiLz5cclxuPC9zdmc+XHJcblxyXG5cclxuICAgICAgICAgICAgICA8IS0tIEdlbmVyaWMgLS0+XHJcbiAgICAgICAgICAgICAgPCEtLSA8c3ZnICpuZ1N3aXRjaERlZmF1bHQgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiNDhcIiBoZWlnaHQ9XCI0OFwiIHZpZXdCb3g9XCIwIDAgNDggNDhcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgPHJlY3QgeD1cIjhcIiB5PVwiNlwiIHdpZHRoPVwiMjhcIiBoZWlnaHQ9XCIzNlwiIHJ4PVwiM1wiIHN0cm9rZT1cIiM5Y2EzYWZcIiBzdHJva2Utd2lkdGg9XCIyXCIvPlxyXG4gICAgICAgICAgICAgICAgPHBhdGggZD1cIk0yOCA2djhhMiAyIDAgMCAwIDIgMmg2XCIgc3Ryb2tlPVwiIzljYTNhZlwiIHN0cm9rZS13aWR0aD1cIjJcIi8+XHJcbiAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE2IDMwaDE2XCIgc3Ryb2tlPVwiIzljYTNhZlwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIvPlxyXG4gICAgICAgICAgICAgIDwvc3ZnPiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgICpuZ1N3aXRjaERlZmF1bHQgd2lkdGg9XCIxODBweFwiIGhlaWdodD1cIjE4MHB4XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG48cGF0aCBkPVwiTTExLjE3NTcgMS4xNzU3NEMxMS4wNjMyIDEuMDYzMjEgMTAuOTEwNiAxIDEwLjc1MTUgMUgzLjZDMy4yNjg2MyAxIDMgMS4yNjg2MyAzIDEuNlYxNC40QzMgMTQuNzMxNCAzLjI2ODYzIDE1IDMuNiAxNUgxMy40QzEzLjczMTQgMTUgMTQgMTQuNzMxNCAxNCAxNC40VjQuMjQ4NTNDMTQgNC4wODk0IDEzLjkzNjggMy45MzY3OSAxMy44MjQzIDMuODI0MjZMMTEuMTc1NyAxLjE3NTc0WlwiIGZpbGw9XCIjRjRGNEY0XCIvPlxyXG48cGF0aCBkPVwiTTE1IDEyLjdDMTUgMTIuODY1NyAxNC44NjU3IDEzIDE0LjcgMTNIMi4zQzIuMTM0MzEgMTMgMiAxMi44NjU3IDIgMTIuN1Y5LjNDMiA5LjEzNDMxIDIuMTM0MzEgOSAyLjMgOUgxNC43QzE0Ljg2NTcgOSAxNSA5LjEzNDMxIDE1IDkuM1YxMi43WlwiIGZpbGw9XCIjREQyMDI1XCIvPlxyXG48cGF0aCBkPVwiTTExIDFMMTIuNSAyLjVMMTQgNEgxMS4yQzExLjA4OTUgNCAxMSAzLjkxMDQ2IDExIDMuOFYxWlwiIGZpbGw9XCIjRDlEOUQ5XCIvPlxyXG48cGF0aCBkPVwiTTYuNjA4NCA5Ljk2MDM4QzYuODcxNjEgOS45NjAzOCA3LjA2MzY2IDEwLjAxNzEgNy4xODQ1NyAxMC4xMzA2QzcuMzA1NDggMTAuMjQzMSA3LjM2NTkzIDEwLjM5ODQgNy4zNjU5MyAxMC41OTY1QzcuMzY1OTMgMTAuNjg1OCA3LjM1MjQ1IDEwLjc3MTQgNy4zMjU0NyAxMC44NTMyQzcuMjk4NSAxMC45MzQyIDcuMjU0MzIgMTEuMDA2MiA3LjE5Mjk0IDExLjA2OTVDNy4xMzI0OSAxMS4xMzI3IDcuMDUxNTcgMTEuMTgyOSA2Ljk1MDIgMTEuMjIwMUM2Ljg0ODgyIDExLjI1NjQgNi43MjM3MyAxMS4yNzQ2IDYuNTc0OTIgMTEuMjc0Nkg2LjM4OTM3VjEySDUuOTU2ODlWOS45NjAzOEg2LjYwODRaTTYuNTg2MDggMTAuMzE0N0g2LjM4OTM3VjEwLjkyMDJINi41MzE2N0M2LjYxMjU4IDEwLjkyMDIgNi42ODI4IDEwLjkwOTUgNi43NDIzMyAxMC44ODgxQzYuODAxODUgMTAuODY2NyA2Ljg0Nzg5IDEwLjgzMzIgNi44ODA0NCAxMC43ODc3QzYuOTEyOTkgMTAuNzQyMSA2LjkyOTI3IDEwLjY4MzUgNi45MjkyNyAxMC42MTE5QzYuOTI5MjcgMTAuNTExNCA2LjkwMTM3IDEwLjQzNyA2Ljg0NTU2IDEwLjM4ODdDNi43ODk3NiAxMC4zMzk0IDYuNzAzMjYgMTAuMzE0NyA2LjU4NjA4IDEwLjMxNDdaTTkuNDQzMjIgMTAuOTYwN0M5LjQ0MzIyIDExLjE5MDQgOS4zOTkwNCAxMS4zODI0IDkuMzEwNjkgMTEuNTM2OEM5LjIyMzI2IDExLjY5MDMgOS4wOTYzMSAxMS44MDYxIDguOTI5ODMgMTEuODg0MkM4Ljc2MzM1IDExLjk2MTQgOC41NjI5MiAxMiA4LjMyODU0IDEySDcuNzUwOThWOS45NjAzOEg4LjM5MTMyQzguNjA1MjQgOS45NjAzOCA4Ljc5MDc4IDkuOTk4NTEgOC45NDc5NiAxMC4wNzQ4QzkuMTA1MTQgMTAuMTUwMSA5LjIyNjk4IDEwLjI2MjIgOS4zMTM0OCAxMC40MTFDOS4zOTk5NyAxMC41NTg5IDkuNDQzMjIgMTAuNzQyMSA5LjQ0MzIyIDEwLjk2MDdaTTguOTk0IDEwLjk3MThDOC45OTQgMTAuODIxMSA4Ljk3MTY4IDEwLjY5NzUgOC45MjcwNCAxMC42MDA3QzguODgzMzIgMTAuNTAzMSA4LjgxODIyIDEwLjQzMSA4LjczMTcyIDEwLjM4NDVDOC42NDYxNiAxMC4zMzggOC41NDAxMyAxMC4zMTQ3IDguNDEzNjQgMTAuMzE0N0g4LjE4MzQ1VjExLjY0MjlIOC4zNjlDOC41ODAxMiAxMS42NDI5IDguNzM2ODQgMTEuNTg2NiA4LjgzOTE1IDExLjQ3NDFDOC45NDIzOCAxMS4zNjE1IDguOTk0IDExLjE5NDEgOC45OTQgMTAuOTcxOFpNMTAuMjkxNCAxMkg5Ljg2NTkzVjkuOTYwMzhIMTEuMDM1VjEwLjMxNDdIMTAuMjkxNFYxMC44NDA3SDEwLjk4MzRWMTEuMTkzNkgxMC4yOTE0VjEyWlwiIGZpbGw9XCJ3aGl0ZVwiLz5cclxuPHJlY3QgeD1cIjVcIiB5PVwiNVwiIHdpZHRoPVwiN1wiIGhlaWdodD1cIjAuNVwiIHJ4PVwiMC4yNVwiIGZpbGw9XCIjQ0NDQ0NDXCIvPlxyXG48cmVjdCB4PVwiNVwiIHk9XCI2XCIgd2lkdGg9XCI3XCIgaGVpZ2h0PVwiMC41XCIgcng9XCIwLjI1XCIgZmlsbD1cIiNDQ0NDQ0NcIi8+XHJcbjxyZWN0IHg9XCI1XCIgeT1cIjdcIiB3aWR0aD1cIjdcIiBoZWlnaHQ9XCIwLjVcIiByeD1cIjAuMjVcIiBmaWxsPVwiI0NDQ0NDQ1wiLz5cclxuPC9zdmc+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8IS0tIE1ldGFkYXRhIG9uIHJpZ2h0IC0tPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBmbGV4LTEgbWwtNFwiPlxyXG4gICAgICAgIDwhLS0gVGl0bGUgLS0+XHJcbiAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtY29udGFpbmVyXCI+XHJcbiAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvbnQtc2VtaWJvbGQgdGV4dC1zbSBtYi0xIGlucHV0LXRpdGxlXCI+VGl0bGU8L2xhYmVsPlxyXG4gICAgICAgIDxpbnB1dCBbKG5nTW9kZWwpXT1cImZpbGUudGl0bGVcIlxyXG4gICAgICAgICAgICAgICBuYW1lPVwidGl0bGV7e2l9fVwiXHJcbiAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uTWV0YUNoYW5nZSgpXCJcclxuICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJFbnRlciB0aXRsZVwiXHJcbiAgICAgICAgICAgICAgIGNsYXNzPVwiYm9yZGVyIGJvcmRlci1vcmFuZ2UtMzAwIHJvdW5kZWQgcHgtMyBweS0yIG1iLTMgdy1mdWxsIG91dGxpbmUtbm9uZSBmb2N1czpyaW5nIGZvY3VzOnJpbmctb3JhbmdlLTIwMFwiIC8+XHJcblxyXG4gICAgICAgPC9kaXY+XHJcbiAgICAgICAgPCEtLSBOb3RlcyAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtY29udGFpbmVyXCI+XHJcbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9udC1zZW1pYm9sZCB0ZXh0LXNtIG1iLTEgaW5wdXQtdGl0bGVcIj5Ob3RlczwvbGFiZWw+XHJcbiAgICAgICAgPHRleHRhcmVhIFsobmdNb2RlbCldPVwiZmlsZS5ub3Rlc1wiXHJcbiAgICAgICAgICAgICAgICAgIG5hbWU9XCJub3Rlc3t7aX19XCJcclxuICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25NZXRhQ2hhbmdlKClcIlxyXG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkVudGVyIG5vdGVzXCJcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJib3JkZXIgYm9yZGVyLW9yYW5nZS0zMDAgcm91bmRlZCBweC0zIHB5LTIgbWItMyB3LWZ1bGwgb3V0bGluZS1ub25lIGZvY3VzOnJpbmcgZm9jdXM6cmluZy1vcmFuZ2UtMjAwXCJcclxuICAgICAgICAgICAgICAgICAgcm93cz1cIjJcIj48L3RleHRhcmVhPlxyXG5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8IS0tIENhdGVnb3J5IC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1jb250YWluZXJcIj5cclxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb250LXNlbWlib2xkIHRleHQtc20gbWItMSBpbnB1dC10aXRsZVwiPkNhdGVnb3J5PC9sYWJlbD5cclxuICAgICAgICA8c2VsZWN0IFsobmdNb2RlbCldPVwiZmlsZS5jYXRlZ29yeVwiXHJcbiAgICAgICAgICAgICAgICBuYW1lPVwiY2F0ZWdvcnl7e2l9fVwiXHJcbiAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbk1ldGFDaGFuZ2UoKVwiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImJvcmRlciBib3JkZXItb3JhbmdlLTMwMCByb3VuZGVkIHB4LTMgcHktMiB3LWZ1bGwgb3V0bGluZS1ub25lIGZvY3VzOnJpbmcgZm9jdXM6cmluZy1vcmFuZ2UtMjAwXCI+XHJcbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCI+U2VsZWN0IENhdGVnb3J5PC9vcHRpb24+XHJcbiAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBjIG9mIGNhdGVnb3JpZXNcIiBbbmdWYWx1ZV09XCJjXCI+e3sgYyB9fTwvb3B0aW9uPlxyXG4gICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG48L2Rpdj5cclxuXHJcblxyXG5cclxuICA8L2Rpdj5cclxuPC9meC1jb21wb25lbnQ+Il19
|