mis-crystal-design-system 18.1.11 → 18.1.13-test-1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/filter/filter-panel/filter-panel.component.mjs +4 -5
- package/esm2022/mobile-filter/mobile-filter.component.mjs +21 -8
- package/esm2022/table/table.component.mjs +66 -25
- package/fesm2022/mis-crystal-design-system-filter.mjs +3 -4
- package/fesm2022/mis-crystal-design-system-filter.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-mobile-filter.mjs +20 -7
- package/fesm2022/mis-crystal-design-system-mobile-filter.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-table.mjs +65 -24
- package/fesm2022/mis-crystal-design-system-table.mjs.map +1 -1
- package/mobile-filter/mobile-filter.component.d.ts +2 -1
- package/package.json +18 -18
- package/styles/mis-old-icon-styles.scss +5 -5
- package/table/table.component.d.ts +11 -0
|
@@ -222,7 +222,7 @@ function FilterPanelComponent_div_0_Template(rf, ctx) { if (rf & 1) {
|
|
|
222
222
|
i0.ɵɵadvance();
|
|
223
223
|
i0.ɵɵproperty("ngForOf", ctx_r1.config());
|
|
224
224
|
i0.ɵɵadvance(2);
|
|
225
|
-
i0.ɵɵproperty("name", "
|
|
225
|
+
i0.ɵɵproperty("name", "Reset")("size", "Small")("type", "Text");
|
|
226
226
|
i0.ɵɵadvance();
|
|
227
227
|
i0.ɵɵproperty("name", "Apply")("size", "Small")("type", "Solid")("disabled", ctx_r1.filterForm.invalid);
|
|
228
228
|
} }
|
|
@@ -410,8 +410,7 @@ export class FilterPanelComponent {
|
|
|
410
410
|
cfg.forEach(filter => {
|
|
411
411
|
const value = cleanData[filter.key];
|
|
412
412
|
if (filter.type === 'multiSelect' && Array.isArray(value)) {
|
|
413
|
-
|
|
414
|
-
cleanData[filter.key] = value.map((v) => v?.value || v);
|
|
413
|
+
cleanData[filter.key] = value;
|
|
415
414
|
}
|
|
416
415
|
});
|
|
417
416
|
return cleanData;
|
|
@@ -513,7 +512,7 @@ export class FilterPanelComponent {
|
|
|
513
512
|
}
|
|
514
513
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(FilterPanelComponent, [{
|
|
515
514
|
type: Component,
|
|
516
|
-
args: [{ selector: 'mis-filter-panel', animations: [slideFromRight], template: "<div class=\"filter-panel-container\" *ngIf=\"show()\" @slideFromRight>\n <div class=\"panel-header\">\n <span>Filters</span>\n <svg class=\"close-icon\" (click)=\"closePanel()\" width=\"25\" height=\"25\" viewBox=\"0 0 25 25\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g id=\"ic-navigation-cancel-24\">\n <path id=\"Union\" fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M8.60468 6.64355C8.09036 6.12923 7.25649 6.12923 6.74218 6.64355C6.22787 7.15786 6.22787 7.99173 6.74218 8.50604L10.4938 12.2576L6.7431 16.0083C6.22879 16.5226 6.22879 17.3564 6.7431 17.8708C7.25742 18.3851 8.09129 18.3851 8.60560 17.8708L12.3562 14.1201L16.1068 17.8707C16.6211 18.3850 17.4550 18.3850 17.9693 17.8707C18.4836 17.3564 18.4836 16.5225 17.9693 16.0082L14.2187 12.2576L17.9702 8.50613C18.4845 7.99181 18.4845 7.15794 17.9702 6.64363C17.4559 6.12932 16.6220 6.12932 16.1077 6.64363L12.3562 10.3951L8.60468 6.64355Z\" fill=\"#181F33\" />\n </g>\n </svg>\n </div>\n \n <div class=\"horizontal-divider first\"></div>\n \n <div class=\"filters\" [formGroup]=\"filterForm\">\n <ng-container *ngFor=\"let filter of config(); let last = last\">\n <div class=\"filter\" *ngIf=\"!filter.hidden\">\n <span class=\"filter-title\">{{filter.title}}</span>\n <ng-container *ngIf=\"filter.type === 'multiSelect'\">\n <div class=\"multiselect-filter\">\n <mis-multi-select-dropdown class=\"no-padding\" [label]=\"filter.placeholder || 'Select'\" [selectedItems]=\"filterForm.get(filter.key)?.value || []\" (onChange)=\"handleSelect($event, filter.key, filter)\" [data]=\"filter.options\" [searchEnabled]=\"true\"\n [showSelectedCount]=\"true\" [enableSelectAll]=\"true\"\n [hideApplyButton]=\"false\" width=\"100%\" height=\"44px\"></mis-multi-select-dropdown>\n </div>\n </ng-container>\n <ng-container *ngIf=\"filter.type === 'select'\">\n <div class=\"multiselect-filter\">\n <mis-dropdown [data]=\"filter.options\" [searchEnabled]=\"true\" width=\"100%\" height=\"44px\"\n (onChange)=\"handleSelect($event, filter.key, filter)\" [selectedItem]=\"filterForm.get(filter.key)?.value\">\n </mis-dropdown>\n </div>\n </ng-container>\n <ng-container *ngIf=\"filter.type === 'checkbox'\">\n <div class=\"checkbox-row\">\n <div *ngFor=\"let option of filter.options\" class=\"checkbox-container\">\n <mis-checkbox [type]=\"'Default'\" [checked]=\"filterForm.get(filter.key)?.value?.includes(option.value)\" (valueChange)=\"handleCheckbox($event, filter.key, option.value, filter)\"></mis-checkbox>\n <span class=\"checkbox-label\">{{option.label}}</span>\n </div>\n </div>\n </ng-container>\n <ng-container *ngIf=\"filter.type === 'datePicker'\">\n <mis-input type=\"rounded\">\n <input misTzDp misInput type=\"text\" readonly class=\"mis-input\" [dpConfig]=\"filter.datePickerConfig\" [placeholder]=\"filterForm.get(filter.key)?.value || filter.placeholder || 'Select'\" [value]=\"filterForm.get(filter.key)?.value || filter.placeholder || 'Select'\" (dateChange)=\"onDateChange($event, filter.key, filter)\" [selectedDate]=\"filterForm.get(filter.key)?.value\" [positionX]=\"'end'\" [offsetX]=\"-10\">\n </mis-input>\n </ng-container>\n <ng-container *ngIf=\"filter.type === 'dateRangePicker'\">\n <mis-input type=\"rounded\">\n <input misTzDrp misInput type=\"text\" class=\"mis-input\" readonly\n [placeholder]=\"(!dateRangeSelectedDates().startDate && !dateRangeSelectedDates().endDate) ? (filter.placeholder || 'Select') : dateRangeSelectedDates().startDate + ' - ' + dateRangeSelectedDates().endDate\"\n [value]=\"(!dateRangeSelectedDates().startDate && !dateRangeSelectedDates().endDate) ? (filter.placeholder || 'Select') : dateRangeSelectedDates().startDate + ' - ' + dateRangeSelectedDates().endDate\" [positionX]=\"'start'\"\n [positionY]=\"'top'\" [selectedDates]=\"dateRangeSelectedDates()\" (dateChange)=\"onDateChange($event, filter.key, filter)\"\n [dpConfig]=\"filter.dateRangePickerConfig\" />\n </mis-input>\n </ng-container>\n <ng-container *ngIf=\"filter.type === 'text'\">\n <mis-input type=\"rounded\">\n <input misInput type=\"text\" class=\"input\" [placeholder]=\"filter.placeholder || 'Type here'\" [formControlName]=\"filter.key\">\n </mis-input>\n </ng-container>\n <ng-container *ngIf=\"filter.type === 'number'\">\n <mis-input type=\"rounded\">\n <input misInput type=\"number\" class=\"input\" [placeholder]=\"filter.placeholder || 'Type here'\" [formControlName]=\"filter.key\">\n </mis-input>\n </ng-container>\n <ng-container *ngIf=\"filter.type === 'range'\">\n <div class=\"range-container\" [formGroup]=\"filterForm.get(filter.key)\">\n <div class=\"range-inner-container\">\n <span>{{ filter?.options?.[0]?.label || 'Min' }}</span>\n <input\n misInput\n type=\"number\"\n class=\"input\"\n [placeholder]=\"filter.placeholder || 'Type here'\"\n formControlName=\"min\"\n />\n </div>\n <div class=\"range-inner-container\">\n <span>{{ filter?.options?.[1]?.label || 'Max' }}</span>\n <input\n misInput\n type=\"number\"\n class=\"input\"\n [placeholder]=\"filter.placeholder || 'Type here'\"\n formControlName=\"max\"\n [min]=\"filterForm.get(filter.key)?.get('min')?.value || 0\"\n />\n </div>\n </div>\n </ng-container>\n <div class=\"horizontal-divider\" *ngIf=\"!last\"></div>\n </div>\n </ng-container>\n </div>\n \n <div class=\"actions\">\n <mis-button [name]=\"'Clear All'\" [size]=\"'Small'\" [type]=\"'Text'\" (click)=\"resetFilters()\"></mis-button>\n <mis-button [name]=\"'Apply'\" [size]=\"'Small'\" [type]=\"'Solid'\" (click)=\"applyFilters()\" [disabled]=\"filterForm.invalid\"></mis-button>\n </div>\n </div>", styles: [":root{--pmry-200: #99BAF7;--pmry-100: #CBDDFB;--pmry-500: #0937B2;--pmry-400: #3C68D0;--pmry-600: #062A99;--pmry-700: #041F80;--pmry-300: #638FE7;--pmry-800: #021567;--pmry-900: #010F55;--sec-d-purple: #40447F;--sec-maroon: #6B034E;--sec-mud-red: #B23600;--sec-orange: #ED711C;--sec-purple: #815FD5;--sec-teal: #10ADAE;--sec-yellow: #D4900C;--sec-green: #547F40;--sec-bright-green: #27D22E;--sec-dark-teal: #035F6B;--sec-chocolate: #7C2F33;--sec-rube-pink: #C13D6D;--sec-cerulean: #0087B2;--sem-error: #B00020;--sem-info: #0091FF;--sem-warning: #FF9D00;--sem-success: #38AF49;--grey-bg-1: #FAFAFA;--grey-bg: #F5F5F5;--grey-seperators: #E0E0E0;--grey-disabled: #C8CDD3;--grey-hover: #F5F7FC;--grey-pressed: #E6EBF7;--grey-row: #F5F7FC;--dec-light-yellow: #F4E7C3;--dec-light-purple: #DACFF9;--dec-light-green: #E4F5E9;--dec-light-green2: #F1FFF3;--dec-light-pink: #FAE1EA;--dec-: #F4CBC1;--dec-lt-orange: #FAEFED;--dec-light-blue: #CFECF9;--dec-row-selection: #F1FDF8;--dec-row-selection2: #F2FBFF;--dec-row-lines: #D3E1E9;--text-white: #FFFFFF;--text-muted: #6A737D;--text-black: #181F33;--MR-solid-blue2:#C8D5F6;--MR-solid-purple:#C9C3FB;--MR-solid-orange:#EEAC9F;--MR-solid-green:#ACDADA;--MR-solid-brown:#E8C8AF;--MR-solid-yellow:#FFEFC7;--MR-solid-blue:#BBE6FF;--MR-solid-pink:#FFC6F2;--tr-hover:#F0F3FA;--tr-pressed:#DAE1F3;--brand-primary: #0937B2;--brand-primary-light: #3C68D0;--brand-primary-dark: #062A99;--brand-primary-darker: #041F80;--brand-primary-lighter: #638FE7;--brand-primary-lightest: #CBDDFB;--brand-primary-hover: #F0F3FA;--brand-primary-active: #DAE1F3;--brand-secondary: #ED711C;--brand-secondary-light: #F09E65;--brand-secondary-dark: #B23600;--brand-secondary-lighter: #FFC6F2;--brand-accent: #10ADAE;--brand-accent-light: #16CBBC;--brand-accent-dark: #035F6B;--brand-accent-lighter: #ACDADA;--brand-success: #38AF49;--brand-success-light: #4CAF50;--brand-success-dark: #216531;--brand-success-lighter: #E4F5E9;--brand-success-lightest: #F1FFF3;--brand-error: #B00020;--brand-error-light: #F04E4E;--brand-error-dark: #A60060;--brand-error-lighter: #FAE1EA;--brand-error-lightest: #FDF2F2;--brand-warning: #FF9D00;--brand-warning-light: #D4900C;--brand-warning-dark: #624000;--brand-warning-lighter: #F4E7C3;--brand-warning-lightest: #FAEFED;--brand-info: #0091FF;--brand-info-light: #35A1FF;--brand-info-dark: #0087B2;--brand-info-lighter: #CFECF9;--text-primary: #181F33;--text-secondary: #6A737D;--text-tertiary: #929DAB;--text-disabled: #929DAB;--text-primary-87: rgba(24, 31, 51, .87);--text-primary-60: rgba(24, 31, 51, .6);--text-primary-38: rgba(24, 31, 51, .38);--text-primary-12: rgba(24, 31, 51, .12);--bg-primary: #FFFFFF;--bg-secondary: #FAFAFA;--bg-tertiary: #F5F5F5;--bg-overlay: rgba(0, 0, 0, .32);--bg-overlay-light: rgba(0, 0, 0, .12);--bg-overlay-lighter: rgba(0, 0, 0, .08);--bg-overlay-lightest: rgba(0, 0, 0, .04);--border-primary: #E0E0E0;--border-secondary: #D6DCE2;--border-tertiary: #C8CDD3;--border-light: #F1F4F8;--border-primary-12: rgba(0, 0, 0, .12);--border-primary-08: rgba(0, 0, 0, .08);--border-primary-06: rgba(0, 0, 0, .06);--shadow-primary: rgba(0, 0, 0, .12);--shadow-secondary: rgba(0, 0, 0, .08);--shadow-tertiary: rgba(0, 0, 0, .04);--shadow-light: rgba(0, 0, 0, .06);--status-available: #929DAB;--status-unavailable: #CCD3DA;--status-hotseat: #857BFF;--status-multiteam: #10ADAE;--status-selected: #10ADAE;--status-upcoming: #D4900C;--status-room: #38AF49;--status-room-booked: #B23600;--status-room-unavailable: #181F33;--team-color-1: #F8C52E;--team-color-2: #FA8E20;--team-color-3: #987CDD;--team-color-4: #16CBBC;--team-color-5: #E65010;--team-color-6: #A60060;--team-color-7: #ED323B;--team-color-8: #35A1FF;--team-color-9: #80D348}.filter-panel-container{display:flex;flex-direction:column;height:100%;max-width:100%;min-width:20rem;position:absolute;right:0;background:var(--bg-primary, #FFFFFF);top:0;z-index:999;box-shadow:0 0 5px #000000a6;transition:all .3s ease}.filter-panel-container .panel-header{display:flex;flex-direction:row;justify-content:space-between;align-items:center;font-weight:700;margin:0 1rem;flex-basis:5%}.filter-panel-container .panel-header span{font-size:1.25rem}.filter-panel-container .panel-header .close-icon{cursor:pointer;border-radius:50%;transform:scale(1.4);padding:.3rem;transition:all .3s ease}.filter-panel-container .panel-header .close-icon:hover{background:var(--bg-tertiary, #F5F5F5)}.filter-panel-container .panel-header .close-icon:active{background:var(--border-primary, #E0E0E0)}.filter-panel-container .mat-divider.horizontal{margin:1rem}.filters{display:flex;flex-direction:column;flex:1;row-gap:.5rem;overflow:auto;padding:0 1rem}.filters .filter{display:flex;flex-direction:column}.filters .filter .filter-title{color:var(--text-secondary, #6A737D);font-size:.875rem;font-weight:700;line-height:20px;letter-spacing:.25px}.filters .filter .checkbox-row{display:flex;flex-direction:row;justify-content:space-between;align-items:center;padding:.8rem 0}.filters .filter .checkbox-row .checkbox-container{display:flex;flex-direction:row;align-items:center;gap:.5rem}.filters .filter .checkbox-row .checkbox-label{display:block;width:8rem}.filters .filter .checkbox-row ::ng-deep .mat-checkbox-inner-container{width:20px;height:20px}.filters .filter .checkbox-row ::ng-deep .mat-checkbox-frame{border-radius:5px}.filters .filter .multiselect-filter,.filters .filter mis-input{padding:.7rem 0}.horizontal-divider{display:block;width:100%;height:1px;margin:.5rem 0;background:var(--border-primary, #E0E0E0)}.first{margin-top:0}.actions{display:flex;flex-direction:row;justify-content:end;align-items:center;gap:1rem;border-top:1px solid var(--border-primary, #E0E0E0);flex-basis:4%;padding:.5rem}.actions button{font-weight:700;border-radius:.5rem;width:6rem}.no-padding ::ng-deep .container{padding:0!important}.range-container{display:flex;justify-content:space-between;padding:.8rem 0}.range-container .range-inner-container{display:flex;flex-direction:column}.range-container .range-inner-container input{height:2.2rem;outline:none;border-radius:.375rem;border:1px solid var(--border-primary, #E0E0E0);width:8rem;padding:0 .5rem}.range-container .range-inner-container span{margin-bottom:.2rem}input.ng-invalid.ng-touched{border:1px solid var(--brand-error, #B00020);background-color:var(--brand-error-lightest, #FDF2F2)}\n"] }]
|
|
515
|
+
args: [{ selector: 'mis-filter-panel', animations: [slideFromRight], template: "<div class=\"filter-panel-container\" *ngIf=\"show()\" @slideFromRight>\n <div class=\"panel-header\">\n <span>Filters</span>\n <svg class=\"close-icon\" (click)=\"closePanel()\" width=\"25\" height=\"25\" viewBox=\"0 0 25 25\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g id=\"ic-navigation-cancel-24\">\n <path id=\"Union\" fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M8.60468 6.64355C8.09036 6.12923 7.25649 6.12923 6.74218 6.64355C6.22787 7.15786 6.22787 7.99173 6.74218 8.50604L10.4938 12.2576L6.7431 16.0083C6.22879 16.5226 6.22879 17.3564 6.7431 17.8708C7.25742 18.3851 8.09129 18.3851 8.60560 17.8708L12.3562 14.1201L16.1068 17.8707C16.6211 18.3850 17.4550 18.3850 17.9693 17.8707C18.4836 17.3564 18.4836 16.5225 17.9693 16.0082L14.2187 12.2576L17.9702 8.50613C18.4845 7.99181 18.4845 7.15794 17.9702 6.64363C17.4559 6.12932 16.6220 6.12932 16.1077 6.64363L12.3562 10.3951L8.60468 6.64355Z\" fill=\"#181F33\" />\n </g>\n </svg>\n </div>\n \n <div class=\"horizontal-divider first\"></div>\n \n <div class=\"filters\" [formGroup]=\"filterForm\">\n <ng-container *ngFor=\"let filter of config(); let last = last\">\n <div class=\"filter\" *ngIf=\"!filter.hidden\">\n <span class=\"filter-title\">{{filter.title}}</span>\n <ng-container *ngIf=\"filter.type === 'multiSelect'\">\n <div class=\"multiselect-filter\">\n <mis-multi-select-dropdown class=\"no-padding\" [label]=\"filter.placeholder || 'Select'\" [selectedItems]=\"filterForm.get(filter.key)?.value || []\" (onChange)=\"handleSelect($event, filter.key, filter)\" [data]=\"filter.options\" [searchEnabled]=\"true\"\n [showSelectedCount]=\"true\" [enableSelectAll]=\"true\"\n [hideApplyButton]=\"false\" width=\"100%\" height=\"44px\"></mis-multi-select-dropdown>\n </div>\n </ng-container>\n <ng-container *ngIf=\"filter.type === 'select'\">\n <div class=\"multiselect-filter\">\n <mis-dropdown [data]=\"filter.options\" [searchEnabled]=\"true\" width=\"100%\" height=\"44px\"\n (onChange)=\"handleSelect($event, filter.key, filter)\" [selectedItem]=\"filterForm.get(filter.key)?.value\">\n </mis-dropdown>\n </div>\n </ng-container>\n <ng-container *ngIf=\"filter.type === 'checkbox'\">\n <div class=\"checkbox-row\">\n <div *ngFor=\"let option of filter.options\" class=\"checkbox-container\">\n <mis-checkbox [type]=\"'Default'\" [checked]=\"filterForm.get(filter.key)?.value?.includes(option.value)\" (valueChange)=\"handleCheckbox($event, filter.key, option.value, filter)\"></mis-checkbox>\n <span class=\"checkbox-label\">{{option.label}}</span>\n </div>\n </div>\n </ng-container>\n <ng-container *ngIf=\"filter.type === 'datePicker'\">\n <mis-input type=\"rounded\">\n <input misTzDp misInput type=\"text\" readonly class=\"mis-input\" [dpConfig]=\"filter.datePickerConfig\" [placeholder]=\"filterForm.get(filter.key)?.value || filter.placeholder || 'Select'\" [value]=\"filterForm.get(filter.key)?.value || filter.placeholder || 'Select'\" (dateChange)=\"onDateChange($event, filter.key, filter)\" [selectedDate]=\"filterForm.get(filter.key)?.value\" [positionX]=\"'end'\" [offsetX]=\"-10\">\n </mis-input>\n </ng-container>\n <ng-container *ngIf=\"filter.type === 'dateRangePicker'\">\n <mis-input type=\"rounded\">\n <input misTzDrp misInput type=\"text\" class=\"mis-input\" readonly\n [placeholder]=\"(!dateRangeSelectedDates().startDate && !dateRangeSelectedDates().endDate) ? (filter.placeholder || 'Select') : dateRangeSelectedDates().startDate + ' - ' + dateRangeSelectedDates().endDate\"\n [value]=\"(!dateRangeSelectedDates().startDate && !dateRangeSelectedDates().endDate) ? (filter.placeholder || 'Select') : dateRangeSelectedDates().startDate + ' - ' + dateRangeSelectedDates().endDate\" [positionX]=\"'start'\"\n [positionY]=\"'top'\" [selectedDates]=\"dateRangeSelectedDates()\" (dateChange)=\"onDateChange($event, filter.key, filter)\"\n [dpConfig]=\"filter.dateRangePickerConfig\" />\n </mis-input>\n </ng-container>\n <ng-container *ngIf=\"filter.type === 'text'\">\n <mis-input type=\"rounded\">\n <input misInput type=\"text\" class=\"input\" [placeholder]=\"filter.placeholder || 'Type here'\" [formControlName]=\"filter.key\">\n </mis-input>\n </ng-container>\n <ng-container *ngIf=\"filter.type === 'number'\">\n <mis-input type=\"rounded\">\n <input misInput type=\"number\" class=\"input\" [placeholder]=\"filter.placeholder || 'Type here'\" [formControlName]=\"filter.key\">\n </mis-input>\n </ng-container>\n <ng-container *ngIf=\"filter.type === 'range'\">\n <div class=\"range-container\" [formGroup]=\"filterForm.get(filter.key)\">\n <div class=\"range-inner-container\">\n <span>{{ filter?.options?.[0]?.label || 'Min' }}</span>\n <input\n misInput\n type=\"number\"\n class=\"input\"\n [placeholder]=\"filter.placeholder || 'Type here'\"\n formControlName=\"min\"\n />\n </div>\n <div class=\"range-inner-container\">\n <span>{{ filter?.options?.[1]?.label || 'Max' }}</span>\n <input\n misInput\n type=\"number\"\n class=\"input\"\n [placeholder]=\"filter.placeholder || 'Type here'\"\n formControlName=\"max\"\n [min]=\"filterForm.get(filter.key)?.get('min')?.value || 0\"\n />\n </div>\n </div>\n </ng-container>\n <div class=\"horizontal-divider\" *ngIf=\"!last\"></div>\n </div>\n </ng-container>\n </div>\n \n <div class=\"actions\">\n <mis-button [name]=\"'Reset'\" [size]=\"'Small'\" [type]=\"'Text'\" (click)=\"resetFilters()\"></mis-button>\n <mis-button [name]=\"'Apply'\" [size]=\"'Small'\" [type]=\"'Solid'\" (click)=\"applyFilters()\" [disabled]=\"filterForm.invalid\"></mis-button>\n </div>\n </div>", styles: [":root{--pmry-200: #99BAF7;--pmry-100: #CBDDFB;--pmry-500: #0937B2;--pmry-400: #3C68D0;--pmry-600: #062A99;--pmry-700: #041F80;--pmry-300: #638FE7;--pmry-800: #021567;--pmry-900: #010F55;--sec-d-purple: #40447F;--sec-maroon: #6B034E;--sec-mud-red: #B23600;--sec-orange: #ED711C;--sec-purple: #815FD5;--sec-teal: #10ADAE;--sec-yellow: #D4900C;--sec-green: #547F40;--sec-bright-green: #27D22E;--sec-dark-teal: #035F6B;--sec-chocolate: #7C2F33;--sec-rube-pink: #C13D6D;--sec-cerulean: #0087B2;--sem-error: #B00020;--sem-info: #0091FF;--sem-warning: #FF9D00;--sem-success: #38AF49;--grey-bg-1: #FAFAFA;--grey-bg: #F5F5F5;--grey-seperators: #E0E0E0;--grey-disabled: #C8CDD3;--grey-hover: #F5F7FC;--grey-pressed: #E6EBF7;--grey-row: #F5F7FC;--dec-light-yellow: #F4E7C3;--dec-light-purple: #DACFF9;--dec-light-green: #E4F5E9;--dec-light-green2: #F1FFF3;--dec-light-pink: #FAE1EA;--dec-: #F4CBC1;--dec-lt-orange: #FAEFED;--dec-light-blue: #CFECF9;--dec-row-selection: #F1FDF8;--dec-row-selection2: #F2FBFF;--dec-row-lines: #D3E1E9;--text-white: #FFFFFF;--text-muted: #6A737D;--text-black: #181F33;--MR-solid-blue2:#C8D5F6;--MR-solid-purple:#C9C3FB;--MR-solid-orange:#EEAC9F;--MR-solid-green:#ACDADA;--MR-solid-brown:#E8C8AF;--MR-solid-yellow:#FFEFC7;--MR-solid-blue:#BBE6FF;--MR-solid-pink:#FFC6F2;--tr-hover:#F0F3FA;--tr-pressed:#DAE1F3;--brand-primary: #0937B2;--brand-primary-light: #3C68D0;--brand-primary-dark: #062A99;--brand-primary-darker: #041F80;--brand-primary-lighter: #638FE7;--brand-primary-lightest: #CBDDFB;--brand-primary-hover: #F0F3FA;--brand-primary-active: #DAE1F3;--brand-secondary: #ED711C;--brand-secondary-light: #F09E65;--brand-secondary-dark: #B23600;--brand-secondary-lighter: #FFC6F2;--brand-accent: #10ADAE;--brand-accent-light: #16CBBC;--brand-accent-dark: #035F6B;--brand-accent-lighter: #ACDADA;--brand-success: #38AF49;--brand-success-light: #4CAF50;--brand-success-dark: #216531;--brand-success-lighter: #E4F5E9;--brand-success-lightest: #F1FFF3;--brand-error: #B00020;--brand-error-light: #F04E4E;--brand-error-dark: #A60060;--brand-error-lighter: #FAE1EA;--brand-error-lightest: #FDF2F2;--brand-warning: #FF9D00;--brand-warning-light: #D4900C;--brand-warning-dark: #624000;--brand-warning-lighter: #F4E7C3;--brand-warning-lightest: #FAEFED;--brand-info: #0091FF;--brand-info-light: #35A1FF;--brand-info-dark: #0087B2;--brand-info-lighter: #CFECF9;--text-primary: #181F33;--text-secondary: #6A737D;--text-tertiary: #929DAB;--text-disabled: #929DAB;--text-primary-87: rgba(24, 31, 51, .87);--text-primary-60: rgba(24, 31, 51, .6);--text-primary-38: rgba(24, 31, 51, .38);--text-primary-12: rgba(24, 31, 51, .12);--bg-primary: #FFFFFF;--bg-secondary: #FAFAFA;--bg-tertiary: #F5F5F5;--bg-overlay: rgba(0, 0, 0, .32);--bg-overlay-light: rgba(0, 0, 0, .12);--bg-overlay-lighter: rgba(0, 0, 0, .08);--bg-overlay-lightest: rgba(0, 0, 0, .04);--border-primary: #E0E0E0;--border-secondary: #D6DCE2;--border-tertiary: #C8CDD3;--border-light: #F1F4F8;--border-primary-12: rgba(0, 0, 0, .12);--border-primary-08: rgba(0, 0, 0, .08);--border-primary-06: rgba(0, 0, 0, .06);--shadow-primary: rgba(0, 0, 0, .12);--shadow-secondary: rgba(0, 0, 0, .08);--shadow-tertiary: rgba(0, 0, 0, .04);--shadow-light: rgba(0, 0, 0, .06);--status-available: #929DAB;--status-unavailable: #CCD3DA;--status-hotseat: #857BFF;--status-multiteam: #10ADAE;--status-selected: #10ADAE;--status-upcoming: #D4900C;--status-room: #38AF49;--status-room-booked: #B23600;--status-room-unavailable: #181F33;--team-color-1: #F8C52E;--team-color-2: #FA8E20;--team-color-3: #987CDD;--team-color-4: #16CBBC;--team-color-5: #E65010;--team-color-6: #A60060;--team-color-7: #ED323B;--team-color-8: #35A1FF;--team-color-9: #80D348}.filter-panel-container{display:flex;flex-direction:column;height:100%;max-width:100%;min-width:20rem;position:absolute;right:0;background:var(--bg-primary, #FFFFFF);top:0;z-index:999;box-shadow:0 0 5px #000000a6;transition:all .3s ease}.filter-panel-container .panel-header{display:flex;flex-direction:row;justify-content:space-between;align-items:center;font-weight:700;margin:0 1rem;flex-basis:5%}.filter-panel-container .panel-header span{font-size:1.25rem}.filter-panel-container .panel-header .close-icon{cursor:pointer;border-radius:50%;transform:scale(1.4);padding:.3rem;transition:all .3s ease}.filter-panel-container .panel-header .close-icon:hover{background:var(--bg-tertiary, #F5F5F5)}.filter-panel-container .panel-header .close-icon:active{background:var(--border-primary, #E0E0E0)}.filter-panel-container .mat-divider.horizontal{margin:1rem}.filters{display:flex;flex-direction:column;flex:1;row-gap:.5rem;overflow:auto;padding:0 1rem}.filters .filter{display:flex;flex-direction:column}.filters .filter .filter-title{color:var(--text-secondary, #6A737D);font-size:.875rem;font-weight:700;line-height:20px;letter-spacing:.25px}.filters .filter .checkbox-row{display:flex;flex-direction:row;justify-content:space-between;align-items:center;padding:.8rem 0}.filters .filter .checkbox-row .checkbox-container{display:flex;flex-direction:row;align-items:center;gap:.5rem}.filters .filter .checkbox-row .checkbox-label{display:block;width:8rem}.filters .filter .checkbox-row ::ng-deep .mat-checkbox-inner-container{width:20px;height:20px}.filters .filter .checkbox-row ::ng-deep .mat-checkbox-frame{border-radius:5px}.filters .filter .multiselect-filter,.filters .filter mis-input{padding:.7rem 0}.horizontal-divider{display:block;width:100%;height:1px;margin:.5rem 0;background:var(--border-primary, #E0E0E0)}.first{margin-top:0}.actions{display:flex;flex-direction:row;justify-content:end;align-items:center;gap:1rem;border-top:1px solid var(--border-primary, #E0E0E0);flex-basis:4%;padding:.5rem}.actions button{font-weight:700;border-radius:.5rem;width:6rem}.no-padding ::ng-deep .container{padding:0!important}.range-container{display:flex;justify-content:space-between;padding:.8rem 0}.range-container .range-inner-container{display:flex;flex-direction:column}.range-container .range-inner-container input{height:2.2rem;outline:none;border-radius:.375rem;border:1px solid var(--border-primary, #E0E0E0);width:8rem;padding:0 .5rem}.range-container .range-inner-container span{margin-bottom:.2rem}input.ng-invalid.ng-touched{border:1px solid var(--brand-error, #B00020);background-color:var(--brand-error-lightest, #FDF2F2)}\n"] }]
|
|
517
516
|
}], () => [{ type: i1.HasValuePipe }], null); })();
|
|
518
517
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(FilterPanelComponent, { className: "FilterPanelComponent" }); })();
|
|
519
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLXBhbmVsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21pcy1jb21wb25lbnRzL2ZpbHRlci9maWx0ZXItcGFuZWwvZmlsdGVyLXBhbmVsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21pcy1jb21wb25lbnRzL2ZpbHRlci9maWx0ZXItcGFuZWwvZmlsdGVyLXBhbmVsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBR1QsTUFBTSxFQUNOLE1BQU0sRUFDTixRQUFRLEVBQ1IsS0FBSyxFQUNMLE1BQU0sRUFFUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBa0QsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4RyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sOEJBQThCLENBQUM7Ozs7Ozs7Ozs7Ozs7OztJQ0c5Qyw2QkFBb0Q7SUFFNUMsQUFESiwrQkFBZ0Msb0NBRzZCO0lBRndGLHFTQUFZLHFEQUF3QyxLQUFDO0lBRzFNLEFBRDZELGlCQUE0QixFQUNuRjs7Ozs7O0lBSDRDLGVBQXdDO0lBRWxGLEFBRDJCLEFBQTNCLEFBRDJOLEFBQXhCLEFBQWhILEFBQXpDLHlEQUF3QyxrSUFBMEQsMkJBQThFLHVCQUF1QiwyQkFDdk4seUJBQXlCLDBCQUMxQjs7OztJQUdyQyw2QkFBK0M7SUFFdkMsQUFESiwrQkFBZ0MsdUJBRXFGO0lBQXpHLHdSQUFZLHFEQUF3QyxLQUFDO0lBRWpFLEFBREksaUJBQWUsRUFDYjs7Ozs7O0lBSFksZUFBdUI7SUFDeUIsQUFEeEIsQUFBeEIsd0NBQXVCLHVCQUF1QixpR0FDb0Q7Ozs7SUFPNUcsQUFESiwrQkFBc0UsdUJBQzhHO0lBQXpFLGdVQUFlLHdFQUF3RCxLQUFDO0lBQUMsaUJBQWU7SUFDL0wsZ0NBQTZCO0lBQUEsWUFBZ0I7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QyxDQUFDLGNBQWMsQ0FBQzs7aUZBRWpCLG9CQUFvQjtjQU5oQyxTQUFTOzJCQUNFLGtCQUFrQixjQUdoQixDQUFDLGNBQWMsQ0FBQzs7a0ZBRWpCLG9CQUFvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgT25Jbml0LFxuICBPbkRlc3Ryb3ksXG4gIGVmZmVjdCxcbiAgc2lnbmFsLFxuICBjb21wdXRlZCxcbiAgaW5wdXQsXG4gIG91dHB1dCxcbiAgV3JpdGFibGVTaWduYWxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBBYnN0cmFjdENvbnRyb2wsIFZhbGlkYXRvckZuLCBWYWxpZGF0aW9uRXJyb3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBzbGlkZUZyb21SaWdodCB9IGZyb20gJy4uL2FuaW1hdGlvbnMvc2xpZGVGcm9tUmlnaHQnO1xuaW1wb3J0IHsgSURhdGVQaWNrZXJDb25maWcgfSBmcm9tICdtaXMtY3J5c3RhbC1kZXNpZ24tc3lzdGVtL2RhdGVwaWNrZXJfdjInO1xuaW1wb3J0IHsgSVJTZWxlY3RlZERhdGVzQ29uZmlnIH0gZnJvbSAnbWlzLWNyeXN0YWwtZGVzaWduLXN5c3RlbS9zcGVjaWZpY2RhdGVwaWNrZXInO1xuaW1wb3J0IHsgSURhdGVQaWNrZXJDb25maWcgYXMgSURhdGVSYW5nZVBpY2tlckNvbmZpZyB9IGZyb20gJ21pcy1jcnlzdGFsLWRlc2lnbi1zeXN0ZW0vZGF0ZXJhbmdlcGlja2VyX3YyJztcbmltcG9ydCB7IEhhc1ZhbHVlUGlwZSB9IGZyb20gJy4uL2hhcy12YWx1ZS5waXBlJztcblxuZXhwb3J0IGludGVyZmFjZSBGaWx0ZXJPcHRpb24ge1xuICBsYWJlbDogc3RyaW5nO1xuICB2YWx1ZTogc3RyaW5nO1xuICBkYXRhPzogYW55W107XG59XG5cbmV4cG9ydCB0eXBlIEZpbHRlclR5cGUgPVxuICB8ICdtdWx0aVNlbGVjdCdcbiAgfCAnc2VsZWN0J1xuICB8ICdkYXRlUGlja2VyJ1xuICB8ICdkYXRlUmFuZ2VQaWNrZXInXG4gIHwgJ2NoZWNrYm94J1xuICB8ICdyYWRpbydcbiAgfCAndGV4dCdcbiAgfCAnbnVtYmVyJ1xuICB8ICdyYW5nZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmlsdGVyUGFuZWxDb25maWcge1xuICBrZXk6IHN0cmluZztcbiAgdGl0bGU6IHN0cmluZztcbiAgdHlwZTogRmlsdGVyVHlwZTtcbiAgb3B0aW9ucz86IEZpbHRlck9wdGlvbltdO1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgaGlkZGVuPzogYm9vbGVhbjtcbiAgZGF0ZVBpY2tlckNvbmZpZz86IElEYXRlUGlja2VyQ29uZmlnO1xuICBkYXRlUmFuZ2VQaWNrZXJDb25maWc/OiBJRGF0ZVJhbmdlUGlja2VyQ29uZmlnO1xuICBvbkNoYW5nZT86IChldmVudDogYW55LCBjb25maWc/OiBGaWx0ZXJQYW5lbENvbmZpZ1tdLCBmb3JtVmFsdWU/OiBhbnkpID0+IHZvaWQ7XG4gIGRlZmF1bHRWYWx1ZT86IGFueTtcbiAgc2VsZWN0ZWRWYWx1ZT86IGFueTtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbWlzLWZpbHRlci1wYW5lbCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9maWx0ZXItcGFuZWwuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9maWx0ZXItcGFuZWwuY29tcG9uZW50LnNjc3MnXSxcbiAgYW5pbWF0aW9uczogW3NsaWRlRnJvbVJpZ2h0XVxufSlcbmV4cG9ydCBjbGFzcyBGaWx0ZXJQYW5lbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSBpc0luaXRpYWxpemVkID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBoYXNWYWx1ZTogSGFzVmFsdWVQaXBlKSB7XG4gICAgLy8gRWZmZWN0IHRvIHJlYWN0IHRvIGNvbmZpZyBjaGFuZ2VzIC0gbXVzdCBhbGxvdyBzaWduYWwgd3JpdGVzIHNpbmNlIHdlIHVwZGF0ZSBpbnRlcm5hbCBzaWduYWxzXG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGNmZyA9IHRoaXMuY29uZmlnKCk7XG4gICAgICAgIGlmIChjZmcgJiYgQXJyYXkuaXNBcnJheShjZmcpICYmIGNmZy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgLy8gT25seSBpbml0aWFsaXplIGZvcm0gaWYgbm90IGFscmVhZHkgZG9uZSwgb3IgaWYgY29uZmlnIHN0cnVjdHVyZSBjaGFuZ2VkXG4gICAgICAgICAgaWYgKCF0aGlzLmlzSW5pdGlhbGl6ZWQgfHwgdGhpcy5oYXNDb25maWdDaGFuZ2VkKGNmZykpIHtcbiAgICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZUZvcm1Db250cm9scyhjZmcpO1xuICAgICAgICAgICAgdGhpcy5pc0luaXRpYWxpemVkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gQWx3YXlzIGNoZWNrIGZvciBzZWxlY3RlZFZhbHVlIGNoYW5nZXNcbiAgICAgICAgICB0aGlzLnNldEZpbHRlclZhbHVlKGNmZyk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignRmlsdGVyUGFuZWw6IEVycm9yIGluIGNvbmZpZyBlZmZlY3QnLCBlcnJvcik7XG4gICAgICB9XG4gICAgfSwgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9KTtcbiAgfVxuXG4gIC8qIC0tLSBzaWduYWwtYmFzZWQgSW5wdXRzIC8gT3V0cHV0cyAtLS0gKi9cbiAgcHVibGljIHNob3cgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIHB1YmxpYyBjb25maWcgPSBpbnB1dC5yZXF1aXJlZDxGaWx0ZXJQYW5lbENvbmZpZ1tdPigpO1xuICBwdWJsaWMgZW1pdEZpbHRlcnNBZnRlclNldHRpbmdOZXdWYWx1ZXMgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG5cbiAgcHVibGljIG9uQ2xvc2UgPSBvdXRwdXQ8dm9pZD4oKTtcbiAgcHVibGljIG9uQXBwbHkgPSBvdXRwdXQ8eyBmaWx0ZXJEYXRhOiBhbnk7IGZpbHRlckNvdW50OiBudW1iZXIgfT4oKTtcblxuICAvKiAtLS0gZm9ybSArIGludGVybmFsIHN0YXRlIC0tLSAqL1xuICBmaWx0ZXJGb3JtOiBGb3JtR3JvdXAgPSBuZXcgRm9ybUdyb3VwKHt9KTtcbiAgcHJpdmF0ZSBmb3JtU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuXG4gIC8vIGtlZXAgYSBzaWduYWwgc25hcHNob3Qgb2YgZm9ybSB2YWx1ZSBzbyBjb21wdXRlZCBjYW4gcmVhY3RcbiAgcHJpdmF0ZSBfZm9ybVZhbHVlU2lnbmFsOiBXcml0YWJsZVNpZ25hbDxSZWNvcmQ8c3RyaW5nLCBhbnk+PiA9IHNpZ25hbCh7fSk7XG5cbiAgLy8gbGFzdCBhcHBsaWVkIHNuYXBzaG90IChzaWduYWwgc28gdGVtcGxhdGUvbG9naWMgY2FuIHJlYWQgcmVsaWFibHkpXG4gIHB1YmxpYyBsYXN0QXBwbGllZERhdGE6IFdyaXRhYmxlU2lnbmFsPFJlY29yZDxzdHJpbmcsIGFueT4gfCBudWxsPiA9IHNpZ25hbChudWxsKTtcblxuICAvLyBkYXRlIHJhbmdlIHJlYWRhYmxlIGZvciB0ZW1wbGF0ZVxuICBwdWJsaWMgZGF0ZVJhbmdlU2VsZWN0ZWREYXRlczogV3JpdGFibGVTaWduYWw8SVJTZWxlY3RlZERhdGVzQ29uZmlnPiA9IHNpZ25hbCh7XG4gICAgc3RhcnREYXRlOiAnJyxcbiAgICBlbmREYXRlOiAnJ1xuICB9KTtcblxuICAvKiBjb21wdXRlZCBmaWx0ZXJDb3VudCAqL1xuICBwdWJsaWMgZmlsdGVyQ291bnQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgZm9ybVZhbHVlID0gdGhpcy5fZm9ybVZhbHVlU2lnbmFsKCk7XG4gICAgY29uc3QgY2ZnID0gdGhpcy5jb25maWcoKTtcbiAgICBsZXQgY291bnQgPSAwO1xuXG4gICAgZm9yIChjb25zdCBmaWx0ZXIgb2YgY2ZnKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGZvcm1WYWx1ZVtmaWx0ZXIua2V5XTtcblxuICAgICAgaWYgKGZpbHRlci50eXBlID09PSAncmFuZ2UnKSB7XG4gICAgICAgIGlmICh2YWx1ZSAmJiAodmFsdWUubWluICE9PSBudWxsIHx8IHZhbHVlLm1heCAhPT0gbnVsbCkpIHtcbiAgICAgICAgICBjb3VudCsrO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoZmlsdGVyLnR5cGUgPT09ICdtdWx0aVNlbGVjdCcgfHwgZmlsdGVyLnR5cGUgPT09ICdjaGVja2JveCcpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb3VudCsrO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5oYXNWYWx1ZS50cmFuc2Zvcm0odmFsdWUpKSB7XG4gICAgICAgIGNvdW50Kys7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvdW50O1xuICB9KTtcblxuICAvKiAtLS0gTGlmZWN5Y2xlIC0tLSAqL1xuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAvLyBzdWJzY3JpYmUgZm9ybSBjaGFuZ2VzIHNvIGNvbXB1dGVkL2ZpbHRlckNvdW50IHVwZGF0ZVxuICAgIHRoaXMuc3Vic2NyaWJlRm9ybUNoYW5nZXMoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZm9ybVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIC8qIC0tLSBGb3JtIGluaXQgJiBoZWxwZXJzIC0tLSAqL1xuICBpbml0aWFsaXplRm9ybUNvbnRyb2xzKGNvbmZpZzogRmlsdGVyUGFuZWxDb25maWdbXSk6IHZvaWQge1xuICAgIC8vIGJ1aWxkIGEgZnJlc2ggZm9ybSB0byBtYXRjaCBjb25maWdcbiAgICBjb25zdCBuZXdGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XG5cbiAgICBjb25zdCByYW5nZVZhbGlkYXRvcjogVmFsaWRhdG9yRm4gPSAoZ3JvdXA6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgIGNvbnN0IG1pbiA9IChncm91cC5nZXQoJ21pbicpIGFzIEZvcm1Db250cm9sKT8udmFsdWU7XG4gICAgICBjb25zdCBtYXggPSAoZ3JvdXAuZ2V0KCdtYXgnKSBhcyBGb3JtQ29udHJvbCk/LnZhbHVlO1xuICAgICAgaWYgKG1pbiAhPT0gbnVsbCAmJiBtYXggIT09IG51bGwgJiYgbWluID4gbWF4KSB7XG4gICAgICAgIHJldHVybiB7IHJhbmdlRXJyb3I6ICdNaW4gdmFsdWUgc2hvdWxkIGJlIGxlc3MgdGhhbiBtYXggdmFsdWUnIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuXG4gICAgZm9yIChjb25zdCBmaWx0ZXIgb2YgY29uZmlnKSB7XG4gICAgICBsZXQgY29udHJvbDogQWJzdHJhY3RDb250cm9sO1xuXG4gICAgICBzd2l0Y2ggKGZpbHRlci50eXBlKSB7XG4gICAgICAgIGNhc2UgJ3JhbmdlJzpcbiAgICAgICAgICBjb250cm9sID0gbmV3IEZvcm1Hcm91cChcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbWluOiBuZXcgRm9ybUNvbnRyb2wobnVsbCksXG4gICAgICAgICAgICAgIG1heDogbmV3IEZvcm1Db250cm9sKG51bGwpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeyB2YWxpZGF0b3JzOiByYW5nZVZhbGlkYXRvciB9XG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdtdWx0aVNlbGVjdCc6XG4gICAgICAgIGNhc2UgJ2NoZWNrYm94JzpcbiAgICAgICAgICBjb250cm9sID0gbmV3IEZvcm1Db250cm9sKEFycmF5LmlzQXJyYXkoZmlsdGVyLmRlZmF1bHRWYWx1ZSkgPyBmaWx0ZXIuZGVmYXVsdFZhbHVlIDogW10pO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ3NlbGVjdCc6XG4gICAgICAgICAgY29udHJvbCA9IG5ldyBGb3JtQ29udHJvbChmaWx0ZXIuZGVmYXVsdFZhbHVlID8/ICcnKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woZmlsdGVyLmRlZmF1bHRWYWx1ZSA/PyBudWxsKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuaGFzVmFsdWUudHJhbnNmb3JtKGZpbHRlci5kZWZhdWx0VmFsdWUpKSB7XG4gICAgICAgIGNvbnRyb2wuc2V0VmFsdWUoZmlsdGVyLmRlZmF1bHRWYWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIG5ld0Zvcm0uYWRkQ29udHJvbChmaWx0ZXIua2V5LCBjb250cm9sKTtcbiAgICB9XG5cbiAgICAvLyByZXBsYWNlIGZvcm0gc2FmZWx5XG4gICAgLy8gcHJlc2VydmUgc3Vic2NyaXB0aW9uIHNvIHZhbHVlQ2hhbmdlcyBjb250aW51ZXMgdG8gdXBkYXRlIF9mb3JtVmFsdWVTaWduYWxcbiAgICB0aGlzLmZpbHRlckZvcm0gPSBuZXdGb3JtO1xuICAgIC8vIHVwZGF0ZSBzaWduYWwgc25hcHNob3QgaW1tZWRpYXRlbHlcbiAgICB0aGlzLl9mb3JtVmFsdWVTaWduYWwuc2V0KHsgLi4udGhpcy5maWx0ZXJGb3JtLnZhbHVlIH0pO1xuXG4gICAgLy8gcmUtc3Vic2NyaWJlIHRvIG5ldyBmb3JtJ3MgdmFsdWVDaGFuZ2VzXG4gICAgdGhpcy5zdWJzY3JpYmVGb3JtQ2hhbmdlcygpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdWJzY3JpYmVGb3JtQ2hhbmdlcygpOiB2b2lkIHtcbiAgICAvLyB1bnN1YnNjcmliZSBwcmV2aW91cyBzdWJzY3JpcHRpb24gaWYgYW55XG4gICAgdGhpcy5mb3JtU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuXG4gICAgLy8gc3Vic2NyaWJlIHRvIHZhbHVlQ2hhbmdlczsgc2V0IHNuYXBzaG90IHNpZ25hbFxuICAgIHRoaXMuZm9ybVN1YnNjcmlwdGlvbiA9IHRoaXMuZmlsdGVyRm9ybS52YWx1ZUNoYW5nZXM/LnN1YnNjcmliZSgodmFsdWUpID0+IHtcbiAgICAgIHRoaXMuX2Zvcm1WYWx1ZVNpZ25hbC5zZXQoeyAuLi52YWx1ZSB9KTtcbiAgICB9KTtcblxuICAgIC8vIGFsc28gc2V0IGluaXRpYWwgc25hcHNob3QgaW4gY2FzZSB2YWx1ZUNoYW5nZXMgZG9lc24ndCBlbWl0IGltbWVkaWF0ZWx5XG4gICAgdGhpcy5fZm9ybVZhbHVlU2lnbmFsLnNldCh7IC4uLnRoaXMuZmlsdGVyRm9ybS52YWx1ZSB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q29udHJvbChrZXk6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmZpbHRlckZvcm0uZ2V0KGtleSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgY29uZmlnIHN0cnVjdHVyZSBoYXMgY2hhbmdlZCAobmV3IGtleXMgb3IgcmVtb3ZlZCBrZXlzKVxuICAgKiBVc2VkIHRvIGRldGVybWluZSBpZiBmb3JtIG5lZWRzIHRvIGJlIHJlYnVpbHRcbiAgICovXG4gIHByaXZhdGUgaGFzQ29uZmlnQ2hhbmdlZChuZXdDb25maWc6IEZpbHRlclBhbmVsQ29uZmlnW10pOiBib29sZWFuIHtcbiAgICBjb25zdCBjdXJyZW50S2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuZmlsdGVyRm9ybS5jb250cm9scykuc29ydCgpO1xuICAgIGNvbnN0IG5ld0tleXMgPSBuZXdDb25maWcubWFwKGYgPT4gZi5rZXkpLnNvcnQoKTtcbiAgICBcbiAgICBpZiAoY3VycmVudEtleXMubGVuZ3RoICE9PSBuZXdLZXlzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIFxuICAgIHJldHVybiBjdXJyZW50S2V5cy5zb21lKChrZXksIGluZGV4KSA9PiBrZXkgIT09IG5ld0tleXNbaW5kZXhdKTtcbiAgfVxuXG4gIC8qIC0tLSBBY3Rpb25zIC8gVUkgaGFuZGxlcnMgLS0tICovXG4gIGNsb3NlUGFuZWwoKTogdm9pZCB7XG4gICAgY29uc3QgbGFzdCA9IHRoaXMubGFzdEFwcGxpZWREYXRhKCk7XG4gICAgaWYgKGxhc3QpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIHByZWZlciBzZXRWYWx1ZSAoZW5zdXJlcyBzaGFwZSBtYXRjaGVzKTsgZmFsbGJhY2sgdG8gcGF0Y2hWYWx1ZVxuICAgICAgICB0aGlzLmZpbHRlckZvcm0uc2V0VmFsdWUobGFzdCk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgdGhpcy5maWx0ZXJGb3JtLnBhdGNoVmFsdWUobGFzdCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2xlYXJGb3JtVmFsdWVzKCk7XG4gICAgfVxuXG4gICAgLy8gZW1pdCBjbG9zZSBldmVudFxuICAgIHRoaXMub25DbG9zZS5lbWl0KCk7XG4gIH1cblxuICBhcHBseUZpbHRlcnMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZmlsdGVyRm9ybS5pbnZhbGlkKSB7XG4gICAgICB0aGlzLmZpbHRlckZvcm0ubWFya0FsbEFzVG91Y2hlZCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgXG4gICAgLy8gQ3JlYXRlIGEgY29weSBvZiB0aGUgZm9ybSB2YWx1ZVxuICAgIGNvbnN0IHNuYXBzaG90ID0geyAuLi50aGlzLmZpbHRlckZvcm0udmFsdWUgfTtcbiAgXG4gICAgLy8gT1BUSU9OQUw6IE1hcCBvYmplY3RzIGJhY2sgdG8gdmFsdWVzIGZvciB0aGUgT3V0cHV0IGVtaXNzaW9uIFxuICAgIC8vIHNvIHRoZSBwYXJlbnQgcmVjZWl2ZXMgY2xlYW4gZGF0YSAoWydMT0dJTiddIGluc3RlYWQgb2YgW3tsYWJlbDouLi4sIHZhbHVlOiAnTE9HSU4nfV0pXG4gICAgY29uc3QgY2xlYW5TbmFwc2hvdCA9IHRoaXMubWFwVmFsdWVzRm9yRW1pc3Npb24oc25hcHNob3QpO1xuICBcbiAgICB0aGlzLmxhc3RBcHBsaWVkRGF0YS5zZXQoc25hcHNob3QpOyAvLyBLZWVwIG9iamVjdHMgZm9yIFVJIHN0YXRlXG4gIFxuICAgIHRoaXMub25BcHBseS5lbWl0KHtcbiAgICAgIGZpbHRlckRhdGE6IGNsZWFuU25hcHNob3QsIC8vIEVtaXQgdmFsdWVzXG4gICAgICBmaWx0ZXJDb3VudDogdGhpcy5maWx0ZXJDb3VudCgpXG4gICAgfSk7XG4gIFxuICAgIHRoaXMuY2xvc2VQYW5lbCgpO1xuICB9XG4gIFxuICAvLyBIZWxwZXIgdG8gY2xlYW4gdXAgZGF0YSBiZWZvcmUgZW1pdHRpbmdcbiAgcHJpdmF0ZSBtYXBWYWx1ZXNGb3JFbWlzc2lvbihmb3JtVmFsdWU6IGFueSk6IGFueSB7XG4gICAgY29uc3QgY2xlYW5EYXRhID0geyAuLi5mb3JtVmFsdWUgfTtcbiAgICBjb25zdCBjZmcgPSB0aGlzLmNvbmZpZygpO1xuICBcbiAgICBjZmcuZm9yRWFjaChmaWx0ZXIgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSBjbGVhbkRhdGFbZmlsdGVyLmtleV07XG4gICAgICBpZiAoZmlsdGVyLnR5cGUgPT09ICdtdWx0aVNlbGVjdCcgJiYgQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgLy8gQ29udmVydCBbe3ZhbHVlOiAnWCcsIC4uLn1dIGJhY2sgdG8gWydYJ11cbiAgICAgICAgY2xlYW5EYXRhW2ZpbHRlci5rZXldID0gdmFsdWUubWFwKCh2OiBhbnkpID0+IHY/LnZhbHVlIHx8IHYpO1xuICAgICAgfVxuICAgIH0pO1xuICBcbiAgICByZXR1cm4gY2xlYW5EYXRhO1xuICB9XG4gIFxuICBcblxuICByZXNldEZpbHRlcnMoKTogdm9pZCB7XG4gICAgdGhpcy5jbGVhckZvcm1WYWx1ZXMoKTtcbiAgICAvLyBjYWxsIGFwcGx5RmlsdGVycyB0byBtYWludGFpbiBwcmV2aW91cyBiZWhhdmlvciAodmFsaWRhdGlvbiArIGVtaXQpXG4gICAgdGhpcy5hcHBseUZpbHRlcnMoKTtcbiAgfVxuXG4gIC8qIC0tLSBWYWx1ZSBzZXR0ZXJzIC0tLSAqL1xuLy8gZmlsdGVyLXBhbmVsLmNvbXBvbmVudC50c1xuXG5oYW5kbGVTZWxlY3QoZXZlbnQ6IGFueSwgZmlsdGVyS2V5OiBzdHJpbmcsIGZpbHRlcjogRmlsdGVyUGFuZWxDb25maWcpOiB2b2lkIHtcbiAgY29uc3QgY3RybCA9IHRoaXMuZ2V0Q29udHJvbChmaWx0ZXJLZXkpO1xuICBcbiAgLy8gRklYOiBEbyBub3Qgc3RyaXAgdGhlIHZhbHVlIGhlcmUuIFN0b3JlIHRoZSBmdWxsIG9iamVjdCBzbyB0aGUgVUkgXG4gIC8vIGNhbiBtYXRjaCBpdCBhZ2FpbnN0IHRoZSBkYXRhIGxpc3Qgd2hlbiByZS1yZW5kZXJpbmcuXG4gIGxldCB2YWx1ZVRvU2V0ID0gZXZlbnQ7XG5cbiAgLyogLy8gQ09NTUVOVEVEIE9VVCBPUiBSRU1PVkVEIFRISVMgQkxPQ0tcbiAgaWYgKGZpbHRlci50eXBlID09PSAnbXVsdGlTZWxlY3QnICYmIEFycmF5LmlzQXJyYXkoZXZlbnQpKSB7XG4gICAgaWYgKGV2ZW50Lmxlbmd0aCA+IDAgJiYgdHlwZW9mIGV2ZW50WzBdID09PSAnb2JqZWN0JyAmJiAndmFsdWUnIGluIGV2ZW50WzBdKSB7XG4gICAgICB2YWx1ZVRvU2V0ID0gZXZlbnQubWFwKChpdGVtOiBhbnkpID0+IGl0ZW0udmFsdWUgfHwgaXRlbSk7XG4gICAgfVxuICB9XG4gICovXG4gIFxuICBjdHJsPy5zZXRWYWx1ZSh2YWx1ZVRvU2V0KTtcblxuICBpZiAoZmlsdGVyLm9uQ2hhbmdlKSB7XG4gICAgZmlsdGVyLm9uQ2hhbmdlKGV2ZW50LCB0aGlzLmNvbmZpZygpLCB0aGlzLmZpbHRlckZvcm0udmFsdWUpO1xuICB9XG59XG5cblxuXG4gIGhhbmRsZUNoZWNrYm94KGV2ZW50OiBhbnksIGZpbHRlcktleTogc3RyaW5nLCBjaGVja2JveFZhbHVlOiBzdHJpbmcsIGZpbHRlcjogRmlsdGVyUGFuZWxDb25maWcpOiB2b2lkIHtcbiAgICBjb25zdCBjdHJsID0gdGhpcy5nZXRDb250cm9sKGZpbHRlcktleSk7XG4gICAgY29uc3QgY3VycmVudCA9IEFycmF5LmlzQXJyYXkoY3RybD8udmFsdWUpID8gWy4uLmN0cmwudmFsdWVdIDogW107XG4gICAgaWYgKGV2ZW50Py52YWx1ZSkge1xuICAgICAgY3RybD8uc2V0VmFsdWUoWy4uLmN1cnJlbnQsIGNoZWNrYm94VmFsdWVdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY3RybD8uc2V0VmFsdWUoY3VycmVudC5maWx0ZXIoKHYpID0+IHYgIT09IGNoZWNrYm94VmFsdWUpKTtcbiAgICB9XG5cbiAgICBpZiAoZmlsdGVyLm9uQ2hhbmdlKSB7XG4gICAgICBmaWx0ZXIub25DaGFuZ2UoZXZlbnQsIHRoaXMuY29uZmlnKCksIHRoaXMuZmlsdGVyRm9ybS52YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgb25EYXRlQ2hhbmdlKGV2ZW50OiBhbnksIGZpbHRlcktleTogc3RyaW5nLCBmaWx0ZXI6IEZpbHRlclBhbmVsQ29uZmlnKTogdm9pZCB7XG4gICAgY29uc3QgY3RybCA9IHRoaXMuZ2V0Q29udHJvbChmaWx0ZXJLZXkpO1xuICAgIGN0cmw/LnNldFZhbHVlKGV2ZW50KTtcblxuICAgIGlmIChldmVudCAmJiB0eXBlb2YgZXZlbnQgPT09ICdvYmplY3QnICYmICdzdGFydERhdGUnIGluIGV2ZW50ICYmICdlbmREYXRlJyBpbiBldmVudCkge1xuICAgICAgdGhpcy5kYXRlUmFuZ2VTZWxlY3RlZERhdGVzLnNldCh7XG4gICAgICAgIHN0YXJ0RGF0ZTogZXZlbnQuc3RhcnREYXRlLFxuICAgICAgICBlbmREYXRlOiBldmVudC5lbmREYXRlXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKiAtLS0gQ2xlYXIgLyBTZXQgdmFsdWVzIGhlbHBlcnMgLS0tICovXG4gIGNsZWFyRm9ybVZhbHVlcygpOiB2b2lkIHtcbiAgICBjb25zdCByZXNldHM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcblxuICAgIGZvciAoY29uc3QgZmlsdGVyIG9mIHRoaXMuY29uZmlnKCkpIHtcbiAgICAgIGxldCBkZWZhdWx0VmFsdWU6IGFueSA9IGZpbHRlci5kZWZhdWx0VmFsdWUgPz8gbnVsbDtcbiAgICAgIGlmIChmaWx0ZXIudHlwZSA9PT0gJ211bHRpU2VsZWN0JyB8fCBmaWx0ZXIudHlwZSA9PT0gJ2NoZWNrYm94Jykge1xuICAgICAgICBkZWZhdWx0VmFsdWUgPSBmaWx0ZXIuZGVmYXVsdFZhbHVlID8/IFtdO1xuICAgICAgfVxuICAgICAgaWYgKGZpbHRlci50eXBlID09PSAncmFuZ2UnKSB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZSA9IGZpbHRlci5kZWZhdWx0VmFsdWUgPz8geyBtaW46IG51bGwsIG1heDogbnVsbCB9O1xuICAgICAgfVxuICAgICAgcmVzZXRzW2ZpbHRlci5rZXldID0gZGVmYXVsdFZhbHVlO1xuICAgIH1cblxuICAgIC8vIHBhdGNoIHRvIGF2b2lkIHNoYXBlIG1pc21hdGNoIGVycm9yc1xuICAgIHRoaXMuZmlsdGVyRm9ybS5wYXRjaFZhbHVlKHJlc2V0cyk7XG4gICAgdGhpcy5fZm9ybVZhbHVlU2lnbmFsLnNldCh7IC4uLnRoaXMuZmlsdGVyRm9ybS52YWx1ZSB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBsaWVzIGZpbHRlci5zZWxlY3RlZFZhbHVlIHdoZW4gcGFyZW50IHByb3ZpZGVzIHNlbGVjdGVkVmFsdWUuXG4gICAqIENhbGxlZCBieSB0aGUgY29uZmlnIGVmZmVjdCAoc28gcnVucyBvbiBpbml0aWFsIGxvYWQgYW5kIG9uIGNvbmZpZyBjaGFuZ2VzKS5cbiAgICovXG4gIHNldEZpbHRlclZhbHVlKGNvbmZpZzogRmlsdGVyUGFuZWxDb25maWdbXSk6IHZvaWQge1xuICAgIGxldCBhbnlWYWx1ZVNldCA9IGZhbHNlO1xuXG4gICAgZm9yIChjb25zdCBmaWx0ZXIgb2YgY29uZmlnKSB7XG4gICAgICBpZiAodGhpcy5oYXNWYWx1ZS50cmFuc2Zvcm0oZmlsdGVyPy5zZWxlY3RlZFZhbHVlKSkge1xuICAgICAgICBjb25zdCBjdHJsID0gdGhpcy5nZXRDb250cm9sKGZpbHRlci5rZXkpO1xuICAgICAgICBpZiAoY3RybCkge1xuICAgICAgICAgIGN0cmwuc2V0VmFsdWUoZmlsdGVyLnNlbGVjdGVkVmFsdWUpO1xuICAgICAgICAgIGFueVZhbHVlU2V0ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChhbnlWYWx1ZVNldCAmJiB0aGlzLmVtaXRGaWx0ZXJzQWZ0ZXJTZXR0aW5nTmV3VmFsdWVzKCkpIHtcbiAgICAgIC8vIHJlc3BlY3QgdGhlIHBhcmVudCBmbGFnIOKAlCBhcHBseSBhbmQgZW1pdFxuICAgICAgdGhpcy5hcHBseUZpbHRlcnMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gbWFrZSBzdXJlIG91ciBzbmFwc2hvdCBzaWduYWwgaXMgZnJlc2hcbiAgICAgIHRoaXMuX2Zvcm1WYWx1ZVNpZ25hbC5zZXQoeyAuLi50aGlzLmZpbHRlckZvcm0udmFsdWUgfSk7XG4gICAgfVxuICB9XG59IiwiPGRpdiBjbGFzcz1cImZpbHRlci1wYW5lbC1jb250YWluZXJcIiAqbmdJZj1cInNob3coKVwiIEBzbGlkZUZyb21SaWdodD5cbiAgICA8ZGl2IGNsYXNzPVwicGFuZWwtaGVhZGVyXCI+XG4gICAgICAgIDxzcGFuPkZpbHRlcnM8L3NwYW4+XG4gICAgICAgIDxzdmcgY2xhc3M9XCJjbG9zZS1pY29uXCIgKGNsaWNrKT1cImNsb3NlUGFuZWwoKVwiIHdpZHRoPVwiMjVcIiBoZWlnaHQ9XCIyNVwiIHZpZXdCb3g9XCIwIDAgMjUgMjVcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgIDxnIGlkPVwiaWMtbmF2aWdhdGlvbi1jYW5jZWwtMjRcIj5cbiAgICAgICAgICAgICAgICA8cGF0aCBpZD1cIlVuaW9uXCIgZmlsbC1ydWxlPVwiZXZlbm9kZFwiIGNsaXAtcnVsZT1cImV2ZW5vZGRcIiBkPVwiTTguNjA0NjggNi42NDM1NUM4LjA5MDM2IDYuMTI5MjMgNy4yNTY0OSA2LjEyOTIzIDYuNzQyMTggNi42NDM1NUM2LjIyNzg3IDcuMTU3ODYgNi4yMjc4NyA3Ljk5MTczIDYuNzQyMTggOC41MDYwNEwxMC40OTM4IDEyLjI1NzZMNi43NDMxIDE2LjAwODNDNi4yMjg3OSAxNi41MjI2IDYuMjI4NzkgMTcuMzU2NCA2Ljc0MzEgMTcuODcwOEM3LjI1NzQyIDE4LjM4NTEgOC4wOTEyOSAxOC4zODUxIDguNjA1NjAgMTcuODcwOEwxMi4zNTYyIDE0LjEyMDFMMTYuMTA2OCAxNy44NzA3QzE2LjYyMTEgMTguMzg1MCAxNy40NTUwIDE4LjM4NTAgMTcuOTY5MyAxNy44NzA3QzE4LjQ4MzYgMTcuMzU2NCAxOC40ODM2IDE2LjUyMjUgMTcuOTY5MyAxNi4wMDgyTDE0LjIxODcgMTIuMjU3NkwxNy45NzAyIDguNTA2MTNDMTguNDg0NSA3Ljk5MTgxIDE4LjQ4NDUgNy4xNTc5NCAxNy45NzAyIDYuNjQzNjNDMTcuNDU1OSA2LjEyOTMyIDE2LjYyMjAgNi4xMjkzMiAxNi4xMDc3IDYuNjQzNjNMMTIuMzU2MiAxMC4zOTUxTDguNjA0NjggNi42NDM1NVpcIiBmaWxsPVwiIzE4MUYzM1wiIC8+XG4gICAgICAgICAgICA8L2c+XG4gICAgICAgIDwvc3ZnPlxuICAgIDwvZGl2PlxuICBcbiAgICA8ZGl2IGNsYXNzPVwiaG9yaXpvbnRhbC1kaXZpZGVyIGZpcnN0XCI+PC9kaXY+XG4gIFxuICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXJzXCIgW2Zvcm1Hcm91cF09XCJmaWx0ZXJGb3JtXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGZpbHRlciBvZiBjb25maWcoKTsgbGV0IGxhc3QgPSBsYXN0XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyXCIgKm5nSWY9XCIhZmlsdGVyLmhpZGRlblwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmlsdGVyLXRpdGxlXCI+e3tmaWx0ZXIudGl0bGV9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmlsdGVyLnR5cGUgPT09ICdtdWx0aVNlbGVjdCdcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm11bHRpc2VsZWN0LWZpbHRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1pcy1tdWx0aS1zZWxlY3QtZHJvcGRvd24gY2xhc3M9XCJuby1wYWRkaW5nXCIgW2xhYmVsXT1cImZpbHRlci5wbGFjZWhvbGRlciB8fCAnU2VsZWN0J1wiIFtzZWxlY3RlZEl0ZW1zXT1cImZpbHRlckZvcm0uZ2V0KGZpbHRlci5rZXkpPy52YWx1ZSB8fCBbXVwiIChvbkNoYW5nZSk9XCJoYW5kbGVTZWxlY3QoJGV2ZW50LCBmaWx0ZXIua2V5LCBmaWx0ZXIpXCIgW2RhdGFdPVwiZmlsdGVyLm9wdGlvbnNcIiBbc2VhcmNoRW5hYmxlZF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd1NlbGVjdGVkQ291bnRdPVwidHJ1ZVwiIFtlbmFibGVTZWxlY3RBbGxdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hpZGVBcHBseUJ1dHRvbl09XCJmYWxzZVwiIHdpZHRoPVwiMTAwJVwiIGhlaWdodD1cIjQ0cHhcIj48L21pcy1tdWx0aS1zZWxlY3QtZHJvcGRvd24+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmaWx0ZXIudHlwZSA9PT0gJ3NlbGVjdCdcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm11bHRpc2VsZWN0LWZpbHRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1pcy1kcm9wZG93biBbZGF0YV09XCJmaWx0ZXIub3B0aW9uc1wiIFtzZWFyY2hFbmFibGVkXT1cInRydWVcIiB3aWR0aD1cIjEwMCVcIiBoZWlnaHQ9XCI0NHB4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uQ2hhbmdlKT1cImhhbmRsZVNlbGVjdCgkZXZlbnQsIGZpbHRlci5rZXksIGZpbHRlcilcIiBbc2VsZWN0ZWRJdGVtXT1cImZpbHRlckZvcm0uZ2V0KGZpbHRlci5rZXkpPy52YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9taXMtZHJvcGRvd24+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmaWx0ZXIudHlwZSA9PT0gJ2NoZWNrYm94J1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3gtcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgZmlsdGVyLm9wdGlvbnNcIiBjbGFzcz1cImNoZWNrYm94LWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtaXMtY2hlY2tib3ggW3R5cGVdPVwiJ0RlZmF1bHQnXCIgW2NoZWNrZWRdPVwiZmlsdGVyRm9ybS5nZXQoZmlsdGVyLmtleSk/LnZhbHVlPy5pbmNsdWRlcyhvcHRpb24udmFsdWUpXCIgKHZhbHVlQ2hhbmdlKT1cImhhbmRsZUNoZWNrYm94KCRldmVudCwgZmlsdGVyLmtleSwgb3B0aW9uLnZhbHVlLCBmaWx0ZXIpXCI+PC9taXMtY2hlY2tib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGVja2JveC1sYWJlbFwiPnt7b3B0aW9uLmxhYmVsfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpbHRlci50eXBlID09PSAnZGF0ZVBpY2tlcidcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1pcy1pbnB1dCB0eXBlPVwicm91bmRlZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1pc1R6RHAgbWlzSW5wdXQgdHlwZT1cInRleHRcIiByZWFkb25seSBjbGFzcz1cIm1pcy1pbnB1dFwiIFtkcENvbmZpZ109XCJmaWx0ZXIuZGF0ZVBpY2tlckNvbmZpZ1wiIFtwbGFjZWhvbGRlcl09XCJmaWx0ZXJGb3JtLmdldChmaWx0ZXIua2V5KT8udmFsdWUgfHwgZmlsdGVyLnBsYWNlaG9sZGVyIHx8ICdTZWxlY3QnXCIgW3ZhbHVlXT1cImZpbHRlckZvcm0uZ2V0KGZpbHRlci5rZXkpPy52YWx1ZSB8fCBmaWx0ZXIucGxhY2Vob2xkZXIgfHwgJ1NlbGVjdCdcIiAoZGF0ZUNoYW5nZSk9XCJvbkRhdGVDaGFuZ2UoJGV2ZW50LCBmaWx0ZXIua2V5LCBmaWx0ZXIpXCIgW3NlbGVjdGVkRGF0ZV09XCJmaWx0ZXJGb3JtLmdldChmaWx0ZXIua2V5KT8udmFsdWVcIiBbcG9zaXRpb25YXT1cIidlbmQnXCIgW29mZnNldFhdPVwiLTEwXCI+XG4gICAgICAgICAgICAgICAgICAgIDwvbWlzLWlucHV0PlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmaWx0ZXIudHlwZSA9PT0gJ2RhdGVSYW5nZVBpY2tlcidcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1pcy1pbnB1dCB0eXBlPVwicm91bmRlZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1pc1R6RHJwIG1pc0lucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJtaXMtaW5wdXRcIiByZWFkb25seVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCIoIWRhdGVSYW5nZVNlbGVjdGVkRGF0ZXMoKS5zdGFydERhdGUgJiYgIWRhdGVSYW5nZVNlbGVjdGVkRGF0ZXMoKS5lbmREYXRlKSA/IChmaWx0ZXIucGxhY2Vob2xkZXIgfHwgJ1NlbGVjdCcpIDogZGF0ZVJhbmdlU2VsZWN0ZWREYXRlcygpLnN0YXJ0RGF0ZSArICcgLSAnICsgZGF0ZVJhbmdlU2VsZWN0ZWREYXRlcygpLmVuZERhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCIoIWRhdGVSYW5nZVNlbGVjdGVkRGF0ZXMoKS5zdGFydERhdGUgJiYgIWRhdGVSYW5nZVNlbGVjdGVkRGF0ZXMoKS5lbmREYXRlKSA/IChmaWx0ZXIucGxhY2Vob2xkZXIgfHwgJ1NlbGVjdCcpIDogZGF0ZVJhbmdlU2VsZWN0ZWREYXRlcygpLnN0YXJ0RGF0ZSArICcgLSAnICsgZGF0ZVJhbmdlU2VsZWN0ZWREYXRlcygpLmVuZERhdGVcIiBbcG9zaXRpb25YXT1cIidzdGFydCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwb3NpdGlvblldPVwiJ3RvcCdcIiBbc2VsZWN0ZWREYXRlc109XCJkYXRlUmFuZ2VTZWxlY3RlZERhdGVzKClcIiAoZGF0ZUNoYW5nZSk9XCJvbkRhdGVDaGFuZ2UoJGV2ZW50LCBmaWx0ZXIua2V5LCBmaWx0ZXIpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZHBDb25maWddPVwiZmlsdGVyLmRhdGVSYW5nZVBpY2tlckNvbmZpZ1wiIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvbWlzLWlucHV0PlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmaWx0ZXIudHlwZSA9PT0gJ3RleHQnXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtaXMtaW5wdXQgdHlwZT1cInJvdW5kZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtaXNJbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiaW5wdXRcIiBbcGxhY2Vob2xkZXJdPVwiZmlsdGVyLnBsYWNlaG9sZGVyIHx8ICdUeXBlIGhlcmUnXCIgW2Zvcm1Db250cm9sTmFtZV09XCJmaWx0ZXIua2V5XCI+XG4gICAgICAgICAgICAgICAgICAgIDwvbWlzLWlucHV0PlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmaWx0ZXIudHlwZSA9PT0gJ251bWJlcidcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1pcy1pbnB1dCB0eXBlPVwicm91bmRlZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1pc0lucHV0IHR5cGU9XCJudW1iZXJcIiBjbGFzcz1cImlucHV0XCIgW3BsYWNlaG9sZGVyXT1cImZpbHRlci5wbGFjZWhvbGRlciB8fCAnVHlwZSBoZXJlJ1wiIFtmb3JtQ29udHJvbE5hbWVdPVwiZmlsdGVyLmtleVwiPlxuICAgICAgICAgICAgICAgICAgICA8L21pcy1pbnB1dD5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmlsdGVyLnR5cGUgPT09ICdyYW5nZSdcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJhbmdlLWNvbnRhaW5lclwiIFtmb3JtR3JvdXBdPVwiZmlsdGVyRm9ybS5nZXQoZmlsdGVyLmtleSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyYW5nZS1pbm5lci1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBmaWx0ZXI/Lm9wdGlvbnM/LlswXT8ubGFiZWwgfHwgJ01pbicgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pc0lucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImlucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImZpbHRlci5wbGFjZWhvbGRlciB8fCAnVHlwZSBoZXJlJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm1pblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJhbmdlLWlubmVyLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGZpbHRlcj8ub3B0aW9ucz8uWzFdPy5sYWJlbCB8fCAnTWF4JyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWlzSW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZmlsdGVyLnBsYWNlaG9sZGVyIHx8ICdUeXBlIGhlcmUnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibWF4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21pbl09XCJmaWx0ZXJGb3JtLmdldChmaWx0ZXIua2V5KT8uZ2V0KCdtaW4nKT8udmFsdWUgfHwgMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaG9yaXpvbnRhbC1kaXZpZGVyXCIgKm5nSWY9XCIhbGFzdFwiPjwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICBcbiAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uc1wiPlxuICAgICAgICA8bWlzLWJ1dHRvbiBbbmFtZV09XCInQ2xlYXIgQWxsJ1wiIFtzaXplXT1cIidTbWFsbCdcIiBbdHlwZV09XCInVGV4dCdcIiAoY2xpY2spPVwicmVzZXRGaWx0ZXJzKClcIj48L21pcy1idXR0b24+XG4gICAgICAgIDxtaXMtYnV0dG9uIFtuYW1lXT1cIidBcHBseSdcIiBbc2l6ZV09XCInU21hbGwnXCIgW3R5cGVdPVwiJ1NvbGlkJ1wiIChjbGljayk9XCJhcHBseUZpbHRlcnMoKVwiIFtkaXNhYmxlZF09XCJmaWx0ZXJGb3JtLmludmFsaWRcIj48L21pcy1idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PiJdfQ==
|
|
518
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLXBhbmVsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21pcy1jb21wb25lbnRzL2ZpbHRlci9maWx0ZXItcGFuZWwvZmlsdGVyLXBhbmVsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21pcy1jb21wb25lbnRzL2ZpbHRlci9maWx0ZXItcGFuZWwvZmlsdGVyLXBhbmVsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBR1QsTUFBTSxFQUNOLE1BQU0sRUFDTixRQUFRLEVBQ1IsS0FBSyxFQUNMLE1BQU0sRUFFUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBa0QsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4RyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sOEJBQThCLENBQUM7Ozs7Ozs7Ozs7Ozs7OztJQ0c5Qyw2QkFBb0Q7SUFFNUMsQUFESiwrQkFBZ0Msb0NBRzZCO0lBRndGLHFTQUFZLHFEQUF3QyxLQUFDO0lBRzFNLEFBRDZELGlCQUE0QixFQUNuRjs7Ozs7O0lBSDRDLGVBQXdDO0lBRWxGLEFBRDJCLEFBQTNCLEFBRDJOLEFBQXhCLEFBQWhILEFBQXpDLHlEQUF3QyxrSUFBMEQsMkJBQThFLHVCQUF1QiwyQkFDdk4seUJBQXlCLDBCQUMxQjs7OztJQUdyQyw2QkFBK0M7SUFFdkMsQUFESiwrQkFBZ0MsdUJBRXFGO0lBQXpHLHdSQUFZLHFEQUF3QyxLQUFDO0lBRWpFLEFBREksaUJBQWUsRUFDYjs7Ozs7O0lBSFksZUFBdUI7SUFDeUIsQUFEeEIsQUFBeEIsd0NBQXVCLHVCQUF1QixpR0FDb0Q7Ozs7SUFPNUcsQUFESiwrQkFBc0UsdUJBQzhHO0lBQXpFLGdVQUFlLHdFQUF3RCxLQUFDO0lBQUMsaUJBQWU7SUFDL0wsZ0NBQTZCO0lBQUEsWUFBZ0I7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LG9CQUFvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgT25Jbml0LFxuICBPbkRlc3Ryb3ksXG4gIGVmZmVjdCxcbiAgc2lnbmFsLFxuICBjb21wdXRlZCxcbiAgaW5wdXQsXG4gIG91dHB1dCxcbiAgV3JpdGFibGVTaWduYWxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBBYnN0cmFjdENvbnRyb2wsIFZhbGlkYXRvckZuLCBWYWxpZGF0aW9uRXJyb3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBzbGlkZUZyb21SaWdodCB9IGZyb20gJy4uL2FuaW1hdGlvbnMvc2xpZGVGcm9tUmlnaHQnO1xuaW1wb3J0IHsgSURhdGVQaWNrZXJDb25maWcgfSBmcm9tICdtaXMtY3J5c3RhbC1kZXNpZ24tc3lzdGVtL2RhdGVwaWNrZXJfdjInO1xuaW1wb3J0IHsgSVJTZWxlY3RlZERhdGVzQ29uZmlnIH0gZnJvbSAnbWlzLWNyeXN0YWwtZGVzaWduLXN5c3RlbS9zcGVjaWZpY2RhdGVwaWNrZXInO1xuaW1wb3J0IHsgSURhdGVQaWNrZXJDb25maWcgYXMgSURhdGVSYW5nZVBpY2tlckNvbmZpZyB9IGZyb20gJ21pcy1jcnlzdGFsLWRlc2lnbi1zeXN0ZW0vZGF0ZXJhbmdlcGlja2VyX3YyJztcbmltcG9ydCB7IEhhc1ZhbHVlUGlwZSB9IGZyb20gJy4uL2hhcy12YWx1ZS5waXBlJztcblxuZXhwb3J0IGludGVyZmFjZSBGaWx0ZXJPcHRpb24ge1xuICBsYWJlbDogc3RyaW5nO1xuICB2YWx1ZTogc3RyaW5nO1xuICBkYXRhPzogYW55W107XG59XG5cbmV4cG9ydCB0eXBlIEZpbHRlclR5cGUgPVxuICB8ICdtdWx0aVNlbGVjdCdcbiAgfCAnc2VsZWN0J1xuICB8ICdkYXRlUGlja2VyJ1xuICB8ICdkYXRlUmFuZ2VQaWNrZXInXG4gIHwgJ2NoZWNrYm94J1xuICB8ICdyYWRpbydcbiAgfCAndGV4dCdcbiAgfCAnbnVtYmVyJ1xuICB8ICdyYW5nZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmlsdGVyUGFuZWxDb25maWcge1xuICBrZXk6IHN0cmluZztcbiAgdGl0bGU6IHN0cmluZztcbiAgdHlwZTogRmlsdGVyVHlwZTtcbiAgb3B0aW9ucz86IEZpbHRlck9wdGlvbltdO1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgaGlkZGVuPzogYm9vbGVhbjtcbiAgZGF0ZVBpY2tlckNvbmZpZz86IElEYXRlUGlja2VyQ29uZmlnO1xuICBkYXRlUmFuZ2VQaWNrZXJDb25maWc/OiBJRGF0ZVJhbmdlUGlja2VyQ29uZmlnO1xuICBvbkNoYW5nZT86IChldmVudDogYW55LCBjb25maWc/OiBGaWx0ZXJQYW5lbENvbmZpZ1tdLCBmb3JtVmFsdWU/OiBhbnkpID0+IHZvaWQ7XG4gIGRlZmF1bHRWYWx1ZT86IGFueTtcbiAgc2VsZWN0ZWRWYWx1ZT86IGFueTtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbWlzLWZpbHRlci1wYW5lbCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9maWx0ZXItcGFuZWwuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9maWx0ZXItcGFuZWwuY29tcG9uZW50LnNjc3MnXSxcbiAgYW5pbWF0aW9uczogW3NsaWRlRnJvbVJpZ2h0XVxufSlcbmV4cG9ydCBjbGFzcyBGaWx0ZXJQYW5lbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSBpc0luaXRpYWxpemVkID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBoYXNWYWx1ZTogSGFzVmFsdWVQaXBlKSB7XG4gICAgLy8gRWZmZWN0IHRvIHJlYWN0IHRvIGNvbmZpZyBjaGFuZ2VzIC0gbXVzdCBhbGxvdyBzaWduYWwgd3JpdGVzIHNpbmNlIHdlIHVwZGF0ZSBpbnRlcm5hbCBzaWduYWxzXG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGNmZyA9IHRoaXMuY29uZmlnKCk7XG4gICAgICAgIGlmIChjZmcgJiYgQXJyYXkuaXNBcnJheShjZmcpICYmIGNmZy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgLy8gT25seSBpbml0aWFsaXplIGZvcm0gaWYgbm90IGFscmVhZHkgZG9uZSwgb3IgaWYgY29uZmlnIHN0cnVjdHVyZSBjaGFuZ2VkXG4gICAgICAgICAgaWYgKCF0aGlzLmlzSW5pdGlhbGl6ZWQgfHwgdGhpcy5oYXNDb25maWdDaGFuZ2VkKGNmZykpIHtcbiAgICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZUZvcm1Db250cm9scyhjZmcpO1xuICAgICAgICAgICAgdGhpcy5pc0luaXRpYWxpemVkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gQWx3YXlzIGNoZWNrIGZvciBzZWxlY3RlZFZhbHVlIGNoYW5nZXNcbiAgICAgICAgICB0aGlzLnNldEZpbHRlclZhbHVlKGNmZyk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignRmlsdGVyUGFuZWw6IEVycm9yIGluIGNvbmZpZyBlZmZlY3QnLCBlcnJvcik7XG4gICAgICB9XG4gICAgfSwgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9KTtcbiAgfVxuXG4gIC8qIC0tLSBzaWduYWwtYmFzZWQgSW5wdXRzIC8gT3V0cHV0cyAtLS0gKi9cbiAgcHVibGljIHNob3cgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIHB1YmxpYyBjb25maWcgPSBpbnB1dC5yZXF1aXJlZDxGaWx0ZXJQYW5lbENvbmZpZ1tdPigpO1xuICBwdWJsaWMgZW1pdEZpbHRlcnNBZnRlclNldHRpbmdOZXdWYWx1ZXMgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG5cbiAgcHVibGljIG9uQ2xvc2UgPSBvdXRwdXQ8dm9pZD4oKTtcbiAgcHVibGljIG9uQXBwbHkgPSBvdXRwdXQ8eyBmaWx0ZXJEYXRhOiBhbnk7IGZpbHRlckNvdW50OiBudW1iZXIgfT4oKTtcblxuICAvKiAtLS0gZm9ybSArIGludGVybmFsIHN0YXRlIC0tLSAqL1xuICBmaWx0ZXJGb3JtOiBGb3JtR3JvdXAgPSBuZXcgRm9ybUdyb3VwKHt9KTtcbiAgcHJpdmF0ZSBmb3JtU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuXG4gIC8vIGtlZXAgYSBzaWduYWwgc25hcHNob3Qgb2YgZm9ybSB2YWx1ZSBzbyBjb21wdXRlZCBjYW4gcmVhY3RcbiAgcHJpdmF0ZSBfZm9ybVZhbHVlU2lnbmFsOiBXcml0YWJsZVNpZ25hbDxSZWNvcmQ8c3RyaW5nLCBhbnk+PiA9IHNpZ25hbCh7fSk7XG5cbiAgLy8gbGFzdCBhcHBsaWVkIHNuYXBzaG90IChzaWduYWwgc28gdGVtcGxhdGUvbG9naWMgY2FuIHJlYWQgcmVsaWFibHkpXG4gIHB1YmxpYyBsYXN0QXBwbGllZERhdGE6IFdyaXRhYmxlU2lnbmFsPFJlY29yZDxzdHJpbmcsIGFueT4gfCBudWxsPiA9IHNpZ25hbChudWxsKTtcblxuICAvLyBkYXRlIHJhbmdlIHJlYWRhYmxlIGZvciB0ZW1wbGF0ZVxuICBwdWJsaWMgZGF0ZVJhbmdlU2VsZWN0ZWREYXRlczogV3JpdGFibGVTaWduYWw8SVJTZWxlY3RlZERhdGVzQ29uZmlnPiA9IHNpZ25hbCh7XG4gICAgc3RhcnREYXRlOiAnJyxcbiAgICBlbmREYXRlOiAnJ1xuICB9KTtcblxuICAvKiBjb21wdXRlZCBmaWx0ZXJDb3VudCAqL1xuICBwdWJsaWMgZmlsdGVyQ291bnQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgZm9ybVZhbHVlID0gdGhpcy5fZm9ybVZhbHVlU2lnbmFsKCk7XG4gICAgY29uc3QgY2ZnID0gdGhpcy5jb25maWcoKTtcbiAgICBsZXQgY291bnQgPSAwO1xuXG4gICAgZm9yIChjb25zdCBmaWx0ZXIgb2YgY2ZnKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGZvcm1WYWx1ZVtmaWx0ZXIua2V5XTtcblxuICAgICAgaWYgKGZpbHRlci50eXBlID09PSAncmFuZ2UnKSB7XG4gICAgICAgIGlmICh2YWx1ZSAmJiAodmFsdWUubWluICE9PSBudWxsIHx8IHZhbHVlLm1heCAhPT0gbnVsbCkpIHtcbiAgICAgICAgICBjb3VudCsrO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoZmlsdGVyLnR5cGUgPT09ICdtdWx0aVNlbGVjdCcgfHwgZmlsdGVyLnR5cGUgPT09ICdjaGVja2JveCcpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb3VudCsrO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5oYXNWYWx1ZS50cmFuc2Zvcm0odmFsdWUpKSB7XG4gICAgICAgIGNvdW50Kys7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvdW50O1xuICB9KTtcblxuICAvKiAtLS0gTGlmZWN5Y2xlIC0tLSAqL1xuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAvLyBzdWJzY3JpYmUgZm9ybSBjaGFuZ2VzIHNvIGNvbXB1dGVkL2ZpbHRlckNvdW50IHVwZGF0ZVxuICAgIHRoaXMuc3Vic2NyaWJlRm9ybUNoYW5nZXMoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZm9ybVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIC8qIC0tLSBGb3JtIGluaXQgJiBoZWxwZXJzIC0tLSAqL1xuICBpbml0aWFsaXplRm9ybUNvbnRyb2xzKGNvbmZpZzogRmlsdGVyUGFuZWxDb25maWdbXSk6IHZvaWQge1xuICAgIC8vIGJ1aWxkIGEgZnJlc2ggZm9ybSB0byBtYXRjaCBjb25maWdcbiAgICBjb25zdCBuZXdGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XG5cbiAgICBjb25zdCByYW5nZVZhbGlkYXRvcjogVmFsaWRhdG9yRm4gPSAoZ3JvdXA6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgIGNvbnN0IG1pbiA9IChncm91cC5nZXQoJ21pbicpIGFzIEZvcm1Db250cm9sKT8udmFsdWU7XG4gICAgICBjb25zdCBtYXggPSAoZ3JvdXAuZ2V0KCdtYXgnKSBhcyBGb3JtQ29udHJvbCk/LnZhbHVlO1xuICAgICAgaWYgKG1pbiAhPT0gbnVsbCAmJiBtYXggIT09IG51bGwgJiYgbWluID4gbWF4KSB7XG4gICAgICAgIHJldHVybiB7IHJhbmdlRXJyb3I6ICdNaW4gdmFsdWUgc2hvdWxkIGJlIGxlc3MgdGhhbiBtYXggdmFsdWUnIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuXG4gICAgZm9yIChjb25zdCBmaWx0ZXIgb2YgY29uZmlnKSB7XG4gICAgICBsZXQgY29udHJvbDogQWJzdHJhY3RDb250cm9sO1xuXG4gICAgICBzd2l0Y2ggKGZpbHRlci50eXBlKSB7XG4gICAgICAgIGNhc2UgJ3JhbmdlJzpcbiAgICAgICAgICBjb250cm9sID0gbmV3IEZvcm1Hcm91cChcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbWluOiBuZXcgRm9ybUNvbnRyb2wobnVsbCksXG4gICAgICAgICAgICAgIG1heDogbmV3IEZvcm1Db250cm9sKG51bGwpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeyB2YWxpZGF0b3JzOiByYW5nZVZhbGlkYXRvciB9XG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdtdWx0aVNlbGVjdCc6XG4gICAgICAgIGNhc2UgJ2NoZWNrYm94JzpcbiAgICAgICAgICBjb250cm9sID0gbmV3IEZvcm1Db250cm9sKEFycmF5LmlzQXJyYXkoZmlsdGVyLmRlZmF1bHRWYWx1ZSkgPyBmaWx0ZXIuZGVmYXVsdFZhbHVlIDogW10pO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ3NlbGVjdCc6XG4gICAgICAgICAgY29udHJvbCA9IG5ldyBGb3JtQ29udHJvbChmaWx0ZXIuZGVmYXVsdFZhbHVlID8/ICcnKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woZmlsdGVyLmRlZmF1bHRWYWx1ZSA/PyBudWxsKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuaGFzVmFsdWUudHJhbnNmb3JtKGZpbHRlci5kZWZhdWx0VmFsdWUpKSB7XG4gICAgICAgIGNvbnRyb2wuc2V0VmFsdWUoZmlsdGVyLmRlZmF1bHRWYWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIG5ld0Zvcm0uYWRkQ29udHJvbChmaWx0ZXIua2V5LCBjb250cm9sKTtcbiAgICB9XG5cbiAgICAvLyByZXBsYWNlIGZvcm0gc2FmZWx5XG4gICAgLy8gcHJlc2VydmUgc3Vic2NyaXB0aW9uIHNvIHZhbHVlQ2hhbmdlcyBjb250aW51ZXMgdG8gdXBkYXRlIF9mb3JtVmFsdWVTaWduYWxcbiAgICB0aGlzLmZpbHRlckZvcm0gPSBuZXdGb3JtO1xuICAgIC8vIHVwZGF0ZSBzaWduYWwgc25hcHNob3QgaW1tZWRpYXRlbHlcbiAgICB0aGlzLl9mb3JtVmFsdWVTaWduYWwuc2V0KHsgLi4udGhpcy5maWx0ZXJGb3JtLnZhbHVlIH0pO1xuXG4gICAgLy8gcmUtc3Vic2NyaWJlIHRvIG5ldyBmb3JtJ3MgdmFsdWVDaGFuZ2VzXG4gICAgdGhpcy5zdWJzY3JpYmVGb3JtQ2hhbmdlcygpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdWJzY3JpYmVGb3JtQ2hhbmdlcygpOiB2b2lkIHtcbiAgICAvLyB1bnN1YnNjcmliZSBwcmV2aW91cyBzdWJzY3JpcHRpb24gaWYgYW55XG4gICAgdGhpcy5mb3JtU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuXG4gICAgLy8gc3Vic2NyaWJlIHRvIHZhbHVlQ2hhbmdlczsgc2V0IHNuYXBzaG90IHNpZ25hbFxuICAgIHRoaXMuZm9ybVN1YnNjcmlwdGlvbiA9IHRoaXMuZmlsdGVyRm9ybS52YWx1ZUNoYW5nZXM/LnN1YnNjcmliZSgodmFsdWUpID0+IHtcbiAgICAgIHRoaXMuX2Zvcm1WYWx1ZVNpZ25hbC5zZXQoeyAuLi52YWx1ZSB9KTtcbiAgICB9KTtcblxuICAgIC8vIGFsc28gc2V0IGluaXRpYWwgc25hcHNob3QgaW4gY2FzZSB2YWx1ZUNoYW5nZXMgZG9lc24ndCBlbWl0IGltbWVkaWF0ZWx5XG4gICAgdGhpcy5fZm9ybVZhbHVlU2lnbmFsLnNldCh7IC4uLnRoaXMuZmlsdGVyRm9ybS52YWx1ZSB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q29udHJvbChrZXk6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmZpbHRlckZvcm0uZ2V0KGtleSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgY29uZmlnIHN0cnVjdHVyZSBoYXMgY2hhbmdlZCAobmV3IGtleXMgb3IgcmVtb3ZlZCBrZXlzKVxuICAgKiBVc2VkIHRvIGRldGVybWluZSBpZiBmb3JtIG5lZWRzIHRvIGJlIHJlYnVpbHRcbiAgICovXG4gIHByaXZhdGUgaGFzQ29uZmlnQ2hhbmdlZChuZXdDb25maWc6IEZpbHRlclBhbmVsQ29uZmlnW10pOiBib29sZWFuIHtcbiAgICBjb25zdCBjdXJyZW50S2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuZmlsdGVyRm9ybS5jb250cm9scykuc29ydCgpO1xuICAgIGNvbnN0IG5ld0tleXMgPSBuZXdDb25maWcubWFwKGYgPT4gZi5rZXkpLnNvcnQoKTtcbiAgICBcbiAgICBpZiAoY3VycmVudEtleXMubGVuZ3RoICE9PSBuZXdLZXlzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIFxuICAgIHJldHVybiBjdXJyZW50S2V5cy5zb21lKChrZXksIGluZGV4KSA9PiBrZXkgIT09IG5ld0tleXNbaW5kZXhdKTtcbiAgfVxuXG4gIC8qIC0tLSBBY3Rpb25zIC8gVUkgaGFuZGxlcnMgLS0tICovXG4gIGNsb3NlUGFuZWwoKTogdm9pZCB7XG4gICAgY29uc3QgbGFzdCA9IHRoaXMubGFzdEFwcGxpZWREYXRhKCk7XG4gICAgaWYgKGxhc3QpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIHByZWZlciBzZXRWYWx1ZSAoZW5zdXJlcyBzaGFwZSBtYXRjaGVzKTsgZmFsbGJhY2sgdG8gcGF0Y2hWYWx1ZVxuICAgICAgICB0aGlzLmZpbHRlckZvcm0uc2V0VmFsdWUobGFzdCk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgdGhpcy5maWx0ZXJGb3JtLnBhdGNoVmFsdWUobGFzdCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2xlYXJGb3JtVmFsdWVzKCk7XG4gICAgfVxuXG4gICAgLy8gZW1pdCBjbG9zZSBldmVudFxuICAgIHRoaXMub25DbG9zZS5lbWl0KCk7XG4gIH1cblxuICBhcHBseUZpbHRlcnMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZmlsdGVyRm9ybS5pbnZhbGlkKSB7XG4gICAgICB0aGlzLmZpbHRlckZvcm0ubWFya0FsbEFzVG91Y2hlZCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgXG4gICAgLy8gQ3JlYXRlIGEgY29weSBvZiB0aGUgZm9ybSB2YWx1ZVxuICAgIGNvbnN0IHNuYXBzaG90ID0geyAuLi50aGlzLmZpbHRlckZvcm0udmFsdWUgfTtcbiAgXG4gICAgLy8gT1BUSU9OQUw6IE1hcCBvYmplY3RzIGJhY2sgdG8gdmFsdWVzIGZvciB0aGUgT3V0cHV0IGVtaXNzaW9uIFxuICAgIC8vIHNvIHRoZSBwYXJlbnQgcmVjZWl2ZXMgY2xlYW4gZGF0YSAoWydMT0dJTiddIGluc3RlYWQgb2YgW3tsYWJlbDouLi4sIHZhbHVlOiAnTE9HSU4nfV0pXG4gICAgY29uc3QgY2xlYW5TbmFwc2hvdCA9IHRoaXMubWFwVmFsdWVzRm9yRW1pc3Npb24oc25hcHNob3QpO1xuICBcbiAgICB0aGlzLmxhc3RBcHBsaWVkRGF0YS5zZXQoc25hcHNob3QpOyAvLyBLZWVwIG9iamVjdHMgZm9yIFVJIHN0YXRlXG4gIFxuICAgIHRoaXMub25BcHBseS5lbWl0KHtcbiAgICAgIGZpbHRlckRhdGE6IGNsZWFuU25hcHNob3QsIC8vIEVtaXQgdmFsdWVzXG4gICAgICBmaWx0ZXJDb3VudDogdGhpcy5maWx0ZXJDb3VudCgpXG4gICAgfSk7XG4gIFxuICAgIHRoaXMuY2xvc2VQYW5lbCgpO1xuICB9XG4gIFxuICAvLyBIZWxwZXIgdG8gY2xlYW4gdXAgZGF0YSBiZWZvcmUgZW1pdHRpbmdcbiAgcHJpdmF0ZSBtYXBWYWx1ZXNGb3JFbWlzc2lvbihmb3JtVmFsdWU6IGFueSk6IGFueSB7XG4gICAgY29uc3QgY2xlYW5EYXRhID0geyAuLi5mb3JtVmFsdWUgfTtcbiAgICBjb25zdCBjZmcgPSB0aGlzLmNvbmZpZygpO1xuICBcbiAgICBjZmcuZm9yRWFjaChmaWx0ZXIgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSBjbGVhbkRhdGFbZmlsdGVyLmtleV07XG4gIFxuICAgICAgaWYgKGZpbHRlci50eXBlID09PSAnbXVsdGlTZWxlY3QnICYmIEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIGNsZWFuRGF0YVtmaWx0ZXIua2V5XSA9IHZhbHVlOyBcbiAgICAgIH1cbiAgICB9KTtcbiAgXG4gICAgcmV0dXJuIGNsZWFuRGF0YTtcbiAgfVxuICBcbiAgXG4gIFxuXG4gIHJlc2V0RmlsdGVycygpOiB2b2lkIHtcbiAgICB0aGlzLmNsZWFyRm9ybVZhbHVlcygpO1xuICAgIC8vIGNhbGwgYXBwbHlGaWx0ZXJzIHRvIG1haW50YWluIHByZXZpb3VzIGJlaGF2aW9yICh2YWxpZGF0aW9uICsgZW1pdClcbiAgICB0aGlzLmFwcGx5RmlsdGVycygpO1xuICB9XG5cbiAgLyogLS0tIFZhbHVlIHNldHRlcnMgLS0tICovXG4vLyBmaWx0ZXItcGFuZWwuY29tcG9uZW50LnRzXG5cbmhhbmRsZVNlbGVjdChldmVudDogYW55LCBmaWx0ZXJLZXk6IHN0cmluZywgZmlsdGVyOiBGaWx0ZXJQYW5lbENvbmZpZyk6IHZvaWQge1xuICBjb25zdCBjdHJsID0gdGhpcy5nZXRDb250cm9sKGZpbHRlcktleSk7XG4gIFxuICAvLyBGSVg6IERvIG5vdCBzdHJpcCB0aGUgdmFsdWUgaGVyZS4gU3RvcmUgdGhlIGZ1bGwgb2JqZWN0IHNvIHRoZSBVSSBcbiAgLy8gY2FuIG1hdGNoIGl0IGFnYWluc3QgdGhlIGRhdGEgbGlzdCB3aGVuIHJlLXJlbmRlcmluZy5cbiAgbGV0IHZhbHVlVG9TZXQgPSBldmVudDtcblxuICAvKiAvLyBDT01NRU5URUQgT1VUIE9SIFJFTU9WRUQgVEhJUyBCTE9DS1xuICBpZiAoZmlsdGVyLnR5cGUgPT09ICdtdWx0aVNlbGVjdCcgJiYgQXJyYXkuaXNBcnJheShldmVudCkpIHtcbiAgICBpZiAoZXZlbnQubGVuZ3RoID4gMCAmJiB0eXBlb2YgZXZlbnRbMF0gPT09ICdvYmplY3QnICYmICd2YWx1ZScgaW4gZXZlbnRbMF0pIHtcbiAgICAgIHZhbHVlVG9TZXQgPSBldmVudC5tYXAoKGl0ZW06IGFueSkgPT4gaXRlbS52YWx1ZSB8fCBpdGVtKTtcbiAgICB9XG4gIH1cbiAgKi9cbiAgXG4gIGN0cmw/LnNldFZhbHVlKHZhbHVlVG9TZXQpO1xuXG4gIGlmIChmaWx0ZXIub25DaGFuZ2UpIHtcbiAgICBmaWx0ZXIub25DaGFuZ2UoZXZlbnQsIHRoaXMuY29uZmlnKCksIHRoaXMuZmlsdGVyRm9ybS52YWx1ZSk7XG4gIH1cbn1cblxuXG5cbiAgaGFuZGxlQ2hlY2tib3goZXZlbnQ6IGFueSwgZmlsdGVyS2V5OiBzdHJpbmcsIGNoZWNrYm94VmFsdWU6IHN0cmluZywgZmlsdGVyOiBGaWx0ZXJQYW5lbENvbmZpZyk6IHZvaWQge1xuICAgIGNvbnN0IGN0cmwgPSB0aGlzLmdldENvbnRyb2woZmlsdGVyS2V5KTtcbiAgICBjb25zdCBjdXJyZW50ID0gQXJyYXkuaXNBcnJheShjdHJsPy52YWx1ZSkgPyBbLi4uY3RybC52YWx1ZV0gOiBbXTtcbiAgICBpZiAoZXZlbnQ/LnZhbHVlKSB7XG4gICAgICBjdHJsPy5zZXRWYWx1ZShbLi4uY3VycmVudCwgY2hlY2tib3hWYWx1ZV0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdHJsPy5zZXRWYWx1ZShjdXJyZW50LmZpbHRlcigodikgPT4gdiAhPT0gY2hlY2tib3hWYWx1ZSkpO1xuICAgIH1cblxuICAgIGlmIChmaWx0ZXIub25DaGFuZ2UpIHtcbiAgICAgIGZpbHRlci5vbkNoYW5nZShldmVudCwgdGhpcy5jb25maWcoKSwgdGhpcy5maWx0ZXJGb3JtLnZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBvbkRhdGVDaGFuZ2UoZXZlbnQ6IGFueSwgZmlsdGVyS2V5OiBzdHJpbmcsIGZpbHRlcjogRmlsdGVyUGFuZWxDb25maWcpOiB2b2lkIHtcbiAgICBjb25zdCBjdHJsID0gdGhpcy5nZXRDb250cm9sKGZpbHRlcktleSk7XG4gICAgY3RybD8uc2V0VmFsdWUoZXZlbnQpO1xuXG4gICAgaWYgKGV2ZW50ICYmIHR5cGVvZiBldmVudCA9PT0gJ29iamVjdCcgJiYgJ3N0YXJ0RGF0ZScgaW4gZXZlbnQgJiYgJ2VuZERhdGUnIGluIGV2ZW50KSB7XG4gICAgICB0aGlzLmRhdGVSYW5nZVNlbGVjdGVkRGF0ZXMuc2V0KHtcbiAgICAgICAgc3RhcnREYXRlOiBldmVudC5zdGFydERhdGUsXG4gICAgICAgIGVuZERhdGU6IGV2ZW50LmVuZERhdGVcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qIC0tLSBDbGVhciAvIFNldCB2YWx1ZXMgaGVscGVycyAtLS0gKi9cbiAgY2xlYXJGb3JtVmFsdWVzKCk6IHZvaWQge1xuICAgIGNvbnN0IHJlc2V0czogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuXG4gICAgZm9yIChjb25zdCBmaWx0ZXIgb2YgdGhpcy5jb25maWcoKSkge1xuICAgICAgbGV0IGRlZmF1bHRWYWx1ZTogYW55ID0gZmlsdGVyLmRlZmF1bHRWYWx1ZSA/PyBudWxsO1xuICAgICAgaWYgKGZpbHRlci50eXBlID09PSAnbXVsdGlTZWxlY3QnIHx8IGZpbHRlci50eXBlID09PSAnY2hlY2tib3gnKSB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZSA9IGZpbHRlci5kZWZhdWx0VmFsdWUgPz8gW107XG4gICAgICB9XG4gICAgICBpZiAoZmlsdGVyLnR5cGUgPT09ICdyYW5nZScpIHtcbiAgICAgICAgZGVmYXVsdFZhbHVlID0gZmlsdGVyLmRlZmF1bHRWYWx1ZSA/PyB7IG1pbjogbnVsbCwgbWF4OiBudWxsIH07XG4gICAgICB9XG4gICAgICByZXNldHNbZmlsdGVyLmtleV0gPSBkZWZhdWx0VmFsdWU7XG4gICAgfVxuXG4gICAgLy8gcGF0Y2ggdG8gYXZvaWQgc2hhcGUgbWlzbWF0Y2ggZXJyb3JzXG4gICAgdGhpcy5maWx0ZXJGb3JtLnBhdGNoVmFsdWUocmVzZXRzKTtcbiAgICB0aGlzLl9mb3JtVmFsdWVTaWduYWwuc2V0KHsgLi4udGhpcy5maWx0ZXJGb3JtLnZhbHVlIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcGxpZXMgZmlsdGVyLnNlbGVjdGVkVmFsdWUgd2hlbiBwYXJlbnQgcHJvdmlkZXMgc2VsZWN0ZWRWYWx1ZS5cbiAgICogQ2FsbGVkIGJ5IHRoZSBjb25maWcgZWZmZWN0IChzbyBydW5zIG9uIGluaXRpYWwgbG9hZCBhbmQgb24gY29uZmlnIGNoYW5nZXMpLlxuICAgKi9cbiAgc2V0RmlsdGVyVmFsdWUoY29uZmlnOiBGaWx0ZXJQYW5lbENvbmZpZ1tdKTogdm9pZCB7XG4gICAgbGV0IGFueVZhbHVlU2V0ID0gZmFsc2U7XG5cbiAgICBmb3IgKGNvbnN0IGZpbHRlciBvZiBjb25maWcpIHtcbiAgICAgIGlmICh0aGlzLmhhc1ZhbHVlLnRyYW5zZm9ybShmaWx0ZXI/LnNlbGVjdGVkVmFsdWUpKSB7XG4gICAgICAgIGNvbnN0IGN0cmwgPSB0aGlzLmdldENvbnRyb2woZmlsdGVyLmtleSk7XG4gICAgICAgIGlmIChjdHJsKSB7XG4gICAgICAgICAgY3RybC5zZXRWYWx1ZShmaWx0ZXIuc2VsZWN0ZWRWYWx1ZSk7XG4gICAgICAgICAgYW55VmFsdWVTZXQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGFueVZhbHVlU2V0ICYmIHRoaXMuZW1pdEZpbHRlcnNBZnRlclNldHRpbmdOZXdWYWx1ZXMoKSkge1xuICAgICAgLy8gcmVzcGVjdCB0aGUgcGFyZW50IGZsYWcg4oCUIGFwcGx5IGFuZCBlbWl0XG4gICAgICB0aGlzLmFwcGx5RmlsdGVycygpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBtYWtlIHN1cmUgb3VyIHNuYXBzaG90IHNpZ25hbCBpcyBmcmVzaFxuICAgICAgdGhpcy5fZm9ybVZhbHVlU2lnbmFsLnNldCh7IC4uLnRoaXMuZmlsdGVyRm9ybS52YWx1ZSB9KTtcbiAgICB9XG4gIH1cbn0iLCI8ZGl2IGNsYXNzPVwiZmlsdGVyLXBhbmVsLWNvbnRhaW5lclwiICpuZ0lmPVwic2hvdygpXCIgQHNsaWRlRnJvbVJpZ2h0PlxuICAgIDxkaXYgY2xhc3M9XCJwYW5lbC1oZWFkZXJcIj5cbiAgICAgICAgPHNwYW4+RmlsdGVyczwvc3Bhbj5cbiAgICAgICAgPHN2ZyBjbGFzcz1cImNsb3NlLWljb25cIiAoY2xpY2spPVwiY2xvc2VQYW5lbCgpXCIgd2lkdGg9XCIyNVwiIGhlaWdodD1cIjI1XCIgdmlld0JveD1cIjAgMCAyNSAyNVwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgPGcgaWQ9XCJpYy1uYXZpZ2F0aW9uLWNhbmNlbC0yNFwiPlxuICAgICAgICAgICAgICAgIDxwYXRoIGlkPVwiVW5pb25cIiBmaWxsLXJ1bGU9XCJldmVub2RkXCIgY2xpcC1ydWxlPVwiZXZlbm9kZFwiIGQ9XCJNOC42MDQ2OCA2LjY0MzU1QzguMDkwMzYgNi4xMjkyMyA3LjI1NjQ5IDYuMTI5MjMgNi43NDIxOCA2LjY0MzU1QzYuMjI3ODcgNy4xNTc4NiA2LjIyNzg3IDcuOTkxNzMgNi43NDIxOCA4LjUwNjA0TDEwLjQ5MzggMTIuMjU3Nkw2Ljc0MzEgMTYuMDA4M0M2LjIyODc5IDE2LjUyMjYgNi4yMjg3OSAxNy4zNTY0IDYuNzQzMSAxNy44NzA4QzcuMjU3NDIgMTguMzg1MSA4LjA5MTI5IDE4LjM4NTEgOC42MDU2MCAxNy44NzA4TDEyLjM1NjIgMTQuMTIwMUwxNi4xMDY4IDE3Ljg3MDdDMTYuNjIxMSAxOC4zODUwIDE3LjQ1NTAgMTguMzg1MCAxNy45NjkzIDE3Ljg3MDdDMTguNDgzNiAxNy4zNTY0IDE4LjQ4MzYgMTYuNTIyNSAxNy45NjkzIDE2LjAwODJMMTQuMjE4NyAxMi4yNTc2TDE3Ljk3MDIgOC41MDYxM0MxOC40ODQ1IDcuOTkxODEgMTguNDg0NSA3LjE1Nzk0IDE3Ljk3MDIgNi42NDM2M0MxNy40NTU5IDYuMTI5MzIgMTYuNjIyMCA2LjEyOTMyIDE2LjEwNzcgNi42NDM2M0wxMi4zNTYyIDEwLjM5NTFMOC42MDQ2OCA2LjY0MzU1WlwiIGZpbGw9XCIjMTgxRjMzXCIgLz5cbiAgICAgICAgICAgIDwvZz5cbiAgICAgICAgPC9zdmc+XG4gICAgPC9kaXY+XG4gIFxuICAgIDxkaXYgY2xhc3M9XCJob3Jpem9udGFsLWRpdmlkZXIgZmlyc3RcIj48L2Rpdj5cbiAgXG4gICAgPGRpdiBjbGFzcz1cImZpbHRlcnNcIiBbZm9ybUdyb3VwXT1cImZpbHRlckZvcm1cIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZmlsdGVyIG9mIGNvbmZpZygpOyBsZXQgbGFzdCA9IGxhc3RcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXJcIiAqbmdJZj1cIiFmaWx0ZXIuaGlkZGVuXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWx0ZXItdGl0bGVcIj57e2ZpbHRlci50aXRsZX19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmaWx0ZXIudHlwZSA9PT0gJ211bHRpU2VsZWN0J1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXVsdGlzZWxlY3QtZmlsdGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWlzLW11bHRpLXNlbGVjdC1kcm9wZG93biBjbGFzcz1cIm5vLXBhZGRpbmdcIiBbbGFiZWxdPVwiZmlsdGVyLnBsYWNlaG9sZGVyIHx8ICdTZWxlY3QnXCIgW3NlbGVjdGVkSXRlbXNdPVwiZmlsdGVyRm9ybS5nZXQoZmlsdGVyLmtleSk/LnZhbHVlIHx8IFtdXCIgKG9uQ2hhbmdlKT1cImhhbmRsZVNlbGVjdCgkZXZlbnQsIGZpbHRlci5rZXksIGZpbHRlcilcIiBbZGF0YV09XCJmaWx0ZXIub3B0aW9uc1wiIFtzZWFyY2hFbmFibGVkXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93U2VsZWN0ZWRDb3VudF09XCJ0cnVlXCIgW2VuYWJsZVNlbGVjdEFsbF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGlkZUFwcGx5QnV0dG9uXT1cImZhbHNlXCIgd2lkdGg9XCIxMDAlXCIgaGVpZ2h0PVwiNDRweFwiPjwvbWlzLW11bHRpLXNlbGVjdC1kcm9wZG93bj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpbHRlci50eXBlID09PSAnc2VsZWN0J1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXVsdGlzZWxlY3QtZmlsdGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWlzLWRyb3Bkb3duIFtkYXRhXT1cImZpbHRlci5vcHRpb25zXCIgW3NlYXJjaEVuYWJsZWRdPVwidHJ1ZVwiIHdpZHRoPVwiMTAwJVwiIGhlaWdodD1cIjQ0cHhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25DaGFuZ2UpPVwiaGFuZGxlU2VsZWN0KCRldmVudCwgZmlsdGVyLmtleSwgZmlsdGVyKVwiIFtzZWxlY3RlZEl0ZW1dPVwiZmlsdGVyRm9ybS5nZXQoZmlsdGVyLmtleSk/LnZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21pcy1kcm9wZG93bj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpbHRlci50eXBlID09PSAnY2hlY2tib3gnXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveC1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBmaWx0ZXIub3B0aW9uc1wiIGNsYXNzPVwiY2hlY2tib3gtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1pcy1jaGVja2JveCBbdHlwZV09XCInRGVmYXVsdCdcIiBbY2hlY2tlZF09XCJmaWx0ZXJGb3JtLmdldChmaWx0ZXIua2V5KT8udmFsdWU/LmluY2x1ZGVzKG9wdGlvbi52YWx1ZSlcIiAodmFsdWVDaGFuZ2UpPVwiaGFuZGxlQ2hlY2tib3goJGV2ZW50LCBmaWx0ZXIua2V5LCBvcHRpb24udmFsdWUsIGZpbHRlcilcIj48L21pcy1jaGVja2JveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoZWNrYm94LWxhYmVsXCI+e3tvcHRpb24ubGFiZWx9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmlsdGVyLnR5cGUgPT09ICdkYXRlUGlja2VyJ1wiPlxuICAgICAgICAgICAgICAgICAgICA8bWlzLWlucHV0IHR5cGU9XCJyb3VuZGVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWlzVHpEcCBtaXNJbnB1dCB0eXBlPVwidGV4dFwiIHJlYWRvbmx5IGNsYXNzPVwibWlzLWlucHV0XCIgW2RwQ29uZmlnXT1cImZpbHRlci5kYXRlUGlja2VyQ29uZmlnXCIgW3BsYWNlaG9sZGVyXT1cImZpbHRlckZvcm0uZ2V0KGZpbHRlci5rZXkpPy52YWx1ZSB8fCBmaWx0ZXIucGxhY2Vob2xkZXIgfHwgJ1NlbGVjdCdcIiBbdmFsdWVdPVwiZmlsdGVyRm9ybS5nZXQoZmlsdGVyLmtleSk/LnZhbHVlIHx8IGZpbHRlci5wbGFjZWhvbGRlciB8fCAnU2VsZWN0J1wiIChkYXRlQ2hhbmdlKT1cIm9uRGF0ZUNoYW5nZSgkZXZlbnQsIGZpbHRlci5rZXksIGZpbHRlcilcIiBbc2VsZWN0ZWREYXRlXT1cImZpbHRlckZvcm0uZ2V0KGZpbHRlci5rZXkpPy52YWx1ZVwiIFtwb3NpdGlvblhdPVwiJ2VuZCdcIiBbb2Zmc2V0WF09XCItMTBcIj5cbiAgICAgICAgICAgICAgICAgICAgPC9taXMtaW5wdXQ+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpbHRlci50eXBlID09PSAnZGF0ZVJhbmdlUGlja2VyJ1wiPlxuICAgICAgICAgICAgICAgICAgICA8bWlzLWlucHV0IHR5cGU9XCJyb3VuZGVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWlzVHpEcnAgbWlzSW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cIm1pcy1pbnB1dFwiIHJlYWRvbmx5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIighZGF0ZVJhbmdlU2VsZWN0ZWREYXRlcygpLnN0YXJ0RGF0ZSAmJiAhZGF0ZVJhbmdlU2VsZWN0ZWREYXRlcygpLmVuZERhdGUpID8gKGZpbHRlci5wbGFjZWhvbGRlciB8fCAnU2VsZWN0JykgOiBkYXRlUmFuZ2VTZWxlY3RlZERhdGVzKCkuc3RhcnREYXRlICsgJyAtICcgKyBkYXRlUmFuZ2VTZWxlY3RlZERhdGVzKCkuZW5kRGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cIighZGF0ZVJhbmdlU2VsZWN0ZWREYXRlcygpLnN0YXJ0RGF0ZSAmJiAhZGF0ZVJhbmdlU2VsZWN0ZWREYXRlcygpLmVuZERhdGUpID8gKGZpbHRlci5wbGFjZWhvbGRlciB8fCAnU2VsZWN0JykgOiBkYXRlUmFuZ2VTZWxlY3RlZERhdGVzKCkuc3RhcnREYXRlICsgJyAtICcgKyBkYXRlUmFuZ2VTZWxlY3RlZERhdGVzKCkuZW5kRGF0ZVwiIFtwb3NpdGlvblhdPVwiJ3N0YXJ0J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Bvc2l0aW9uWV09XCIndG9wJ1wiIFtzZWxlY3RlZERhdGVzXT1cImRhdGVSYW5nZVNlbGVjdGVkRGF0ZXMoKVwiIChkYXRlQ2hhbmdlKT1cIm9uRGF0ZUNoYW5nZSgkZXZlbnQsIGZpbHRlci5rZXksIGZpbHRlcilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkcENvbmZpZ109XCJmaWx0ZXIuZGF0ZVJhbmdlUGlja2VyQ29uZmlnXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9taXMtaW5wdXQ+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpbHRlci50eXBlID09PSAndGV4dCdcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1pcy1pbnB1dCB0eXBlPVwicm91bmRlZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1pc0lucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJpbnB1dFwiIFtwbGFjZWhvbGRlcl09XCJmaWx0ZXIucGxhY2Vob2xkZXIgfHwgJ1R5cGUgaGVyZSdcIiBbZm9ybUNvbnRyb2xOYW1lXT1cImZpbHRlci5rZXlcIj5cbiAgICAgICAgICAgICAgICAgICAgPC9taXMtaW5wdXQ+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpbHRlci50eXBlID09PSAnbnVtYmVyJ1wiPlxuICAgICAgICAgICAgICAgICAgICA8bWlzLWlucHV0IHR5cGU9XCJyb3VuZGVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWlzSW5wdXQgdHlwZT1cIm51bWJlclwiIGNsYXNzPVwiaW5wdXRcIiBbcGxhY2Vob2xkZXJdPVwiZmlsdGVyLnBsYWNlaG9sZGVyIHx8ICdUeXBlIGhlcmUnXCIgW2Zvcm1Db250cm9sTmFtZV09XCJmaWx0ZXIua2V5XCI+XG4gICAgICAgICAgICAgICAgICAgIDwvbWlzLWlucHV0PlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmaWx0ZXIudHlwZSA9PT0gJ3JhbmdlJ1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmFuZ2UtY29udGFpbmVyXCIgW2Zvcm1Hcm91cF09XCJmaWx0ZXJGb3JtLmdldChmaWx0ZXIua2V5KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJhbmdlLWlubmVyLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGZpbHRlcj8ub3B0aW9ucz8uWzBdPy5sYWJlbCB8fCAnTWluJyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWlzSW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZmlsdGVyLnBsYWNlaG9sZGVyIHx8ICdUeXBlIGhlcmUnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibWluXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmFuZ2UtaW5uZXItY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgZmlsdGVyPy5vcHRpb25zPy5bMV0/LmxhYmVsIHx8ICdNYXgnIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaXNJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpbnB1dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJmaWx0ZXIucGxhY2Vob2xkZXIgfHwgJ1R5cGUgaGVyZSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJtYXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWluXT1cImZpbHRlckZvcm0uZ2V0KGZpbHRlci5rZXkpPy5nZXQoJ21pbicpPy52YWx1ZSB8fCAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJob3Jpem9udGFsLWRpdmlkZXJcIiAqbmdJZj1cIiFsYXN0XCI+PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIFxuICAgIDxkaXYgY2xhc3M9XCJhY3Rpb25zXCI+XG4gICAgICAgIDxtaXMtYnV0dG9uIFtuYW1lXT1cIidSZXNldCdcIiBbc2l6ZV09XCInU21hbGwnXCIgW3R5cGVdPVwiJ1RleHQnXCIgKGNsaWNrKT1cInJlc2V0RmlsdGVycygpXCI+PC9taXMtYnV0dG9uPlxuICAgICAgICA8bWlzLWJ1dHRvbiBbbmFtZV09XCInQXBwbHknXCIgW3NpemVdPVwiJ1NtYWxsJ1wiIFt0eXBlXT1cIidTb2xpZCdcIiAoY2xpY2spPVwiYXBwbHlGaWx0ZXJzKClcIiBbZGlzYWJsZWRdPVwiZmlsdGVyRm9ybS5pbnZhbGlkXCI+PC9taXMtYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj4iXX0=
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Component, input, output,
|
|
1
|
+
import { Component, input, output, signal, effect } from '@angular/core';
|
|
2
2
|
import * as i0 from "@angular/core";
|
|
3
3
|
import * as i1 from "@angular/common";
|
|
4
4
|
import * as i2 from "mis-crystal-design-system/button";
|
|
@@ -91,13 +91,14 @@ export class MobileFilterComponent {
|
|
|
91
91
|
this.applyFilters = output();
|
|
92
92
|
// This internal signal holds the state of the selected item.
|
|
93
93
|
// It is writable and can be updated from within the component's template.
|
|
94
|
-
this.selectedItem = signal(
|
|
94
|
+
this.selectedItem = signal('');
|
|
95
95
|
// Use a computed signal for the filter options to maintain reactivity.
|
|
96
|
-
this.localFilterOptions =
|
|
97
|
-
// This effect
|
|
96
|
+
this.localFilterOptions = signal({});
|
|
97
|
+
// This effect handles both initialization and subsequent changes of the inputs.
|
|
98
98
|
effect(() => {
|
|
99
99
|
this.selectedItem.set(this.currentSelectedItem());
|
|
100
|
-
|
|
100
|
+
this.localFilterOptions.set(structuredClone(this.filterOptions()));
|
|
101
|
+
}, { allowSignalWrites: true });
|
|
101
102
|
}
|
|
102
103
|
// Rest of your component methods...
|
|
103
104
|
originalOrder() {
|
|
@@ -123,10 +124,22 @@ export class MobileFilterComponent {
|
|
|
123
124
|
};
|
|
124
125
|
});
|
|
125
126
|
currentFilter.noOfSelectedItems = newNoOfSelectedItems;
|
|
127
|
+
this.localFilterOptions.set(updatedOptions);
|
|
126
128
|
}
|
|
127
129
|
onApply() {
|
|
128
130
|
this.applyFilters.emit(this.localFilterOptions());
|
|
129
131
|
}
|
|
132
|
+
onClearFilters() {
|
|
133
|
+
if (Object.keys(this.filterOptions()).length > 0) {
|
|
134
|
+
Object.keys(this.filterOptions()).forEach(key => {
|
|
135
|
+
this.filterOptions()[key].options.forEach(option => {
|
|
136
|
+
option.selected = false;
|
|
137
|
+
});
|
|
138
|
+
this.filterOptions()[key].noOfSelectedItems = 0;
|
|
139
|
+
});
|
|
140
|
+
this.clearFilters.emit();
|
|
141
|
+
}
|
|
142
|
+
}
|
|
130
143
|
static { this.ɵfac = function MobileFilterComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || MobileFilterComponent)(); }; }
|
|
131
144
|
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: MobileFilterComponent, selectors: [["mis-mobile-filter"]], inputs: { currentSelectedItem: [1, "currentSelectedItem"], filterOptions: [1, "filterOptions"], backIcon: [1, "backIcon"], headerName: [1, "headerName"], applyBtnName: [1, "applyBtnName"], clearBtnName: [1, "clearBtnName"] }, outputs: { closeFilters: "closeFilters", clearFilters: "clearFilters", applyFilters: "applyFilters" }, decls: 20, vars: 10, consts: [[1, "filters-container"], [1, "head", "display-flex"], ["tabindex", "0", "aria-label", "Close Filters Arrow", "alt", "", 3, "click", "keyup.enter", "src"], [1, "body", "display-flex"], [1, "filters"], [4, "ngFor", "ngForOf"], [1, "filter-options-container"], [1, "filter-options-title"], [1, "filter-options"], [1, "footer", "display-flex"], ["mis-button", "", "size", "md", "type", "text", 3, "click"], ["mis-button", "", "size", "md", "type", "primary", 3, "click"], ["tabindex", "0", 1, "filter", "display-flex", 3, "click", "keyup.enter"], [1, "filterName", 3, "ngStyle"], ["class", "selectedNumber", 4, "ngIf"], ["class", "highlightor", 4, "ngIf"], [1, "selectedNumber"], [1, "highlightor"], ["tabindex", "0", 1, "filter-option", "display-flex", 3, "click", "keyup.enter"], [3, "checked", 4, "ngIf"], ["type", "radio", 3, "checked", 4, "ngIf"], [3, "ngStyle"], [3, "checked"], ["type", "radio", 3, "checked"]], template: function MobileFilterComponent_Template(rf, ctx) { if (rf & 1) {
|
|
132
145
|
i0.ɵɵelementStart(0, "div", 0)(1, "div", 1)(2, "img", 2);
|
|
@@ -146,7 +159,7 @@ export class MobileFilterComponent {
|
|
|
146
159
|
i0.ɵɵtemplate(14, MobileFilterComponent_ng_container_14_Template, 6, 6, "ng-container", 5);
|
|
147
160
|
i0.ɵɵelementEnd()()();
|
|
148
161
|
i0.ɵɵelementStart(15, "div", 9)(16, "button", 10);
|
|
149
|
-
i0.ɵɵlistener("click", function MobileFilterComponent_Template_button_click_16_listener() { return ctx.
|
|
162
|
+
i0.ɵɵlistener("click", function MobileFilterComponent_Template_button_click_16_listener() { return ctx.onClearFilters(); });
|
|
150
163
|
i0.ɵɵtext(17);
|
|
151
164
|
i0.ɵɵelementEnd();
|
|
152
165
|
i0.ɵɵelementStart(18, "button", 11);
|
|
@@ -174,7 +187,7 @@ export class MobileFilterComponent {
|
|
|
174
187
|
}
|
|
175
188
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MobileFilterComponent, [{
|
|
176
189
|
type: Component,
|
|
177
|
-
args: [{ selector: 'mis-mobile-filter', template: "<div class=\"filters-container\">\n <div class=\"head display-flex\">\n <img\n tabindex=\"0\"\n (click)=\"closeFilters.emit();\"\n (keyup.enter)=\"closeFilters.emit();\"\n aria-label=\"Close Filters Arrow\"\n [src]=\"backIcon()\" alt=\"\">\n <span>{{headerName()}}</span>\n </div>\n <div class=\"body display-flex\">\n <div class=\"filters\">\n <ng-container *ngFor=\"let filter of localFilterOptions() | keyvalue : originalOrder\">\n <div class=\"filter display-flex\"\n tabindex=\"0\"\n (click)=\"selectedItem.set(filter.key)\"\n (keyup.enter)=\"selectedItem.set(filter.key)\"\n >\n <span class=\"filterName\" [ngStyle]=\"{'color': filter.key === selectedItem() ? '#0937B2' : '#181F33'}\">{{ localFilterOptions()![filter.key]?.name }}</span>\n <span class=\"selectedNumber\" *ngIf=\"localFilterOptions()![filter.key]['multiSelect'] && localFilterOptions()![filter.key]['noOfSelectedItems']! > 0\">{{ localFilterOptions()![filter.key]['noOfSelectedItems'] }}</span>\n <div class=\"highlightor\" *ngIf=\"filter.key === selectedItem()\"></div>\n </div>\n </ng-container>\n </div>\n <div class=\"filter-options-container\">\n <div class=\"filter-options-title\">\n <span>{{ localFilterOptions()![selectedItem()]?.name }}</span>\n </div>\n <div class=\"filter-options\">\n <ng-container *ngFor=\"let option of localFilterOptions()![selectedItem()]?.options; let i = index\">\n <div class=\"filter-option display-flex\"\n tabindex=\"0\"\n (click)=\"toggleFilter(option.value, option.selected)\"\n (keyup.enter)=\"toggleFilter(option.value, option.selected)\"\n >\n <mis-checkbox\n [attr.aria-label]=\"(option.selected ? 'Selected' : 'Unselected') + ' checkbox ' + option.label\"\n *ngIf=\"localFilterOptions()![selectedItem()]!.multiSelect\"\n [checked]=\"option.selected\">\n </mis-checkbox>\n <input\n type=\"radio\"\n [attr.aria-label]=\"(option.selected ? 'Selected' : 'Unselected') + ' radioButton ' + option.label\"\n *ngIf=\"!localFilterOptions()![selectedItem()]!.multiSelect\"\n [checked]=\"option.selected\">\n <span [ngStyle]=\"{'color': option.selected ? '#181F33' : '#6A737D'}\">{{ option.label }}</span>\n </div>\n </ng-container>\n </div>\n </div>\n </div>\n <div class=\"footer display-flex\">\n <button\n mis-button\n size=\"md\"\n type=\"text\"\n (click)=\"
|
|
190
|
+
args: [{ selector: 'mis-mobile-filter', template: "<div class=\"filters-container\">\n <div class=\"head display-flex\">\n <img\n tabindex=\"0\"\n (click)=\"closeFilters.emit();\"\n (keyup.enter)=\"closeFilters.emit();\"\n aria-label=\"Close Filters Arrow\"\n [src]=\"backIcon()\" alt=\"\">\n <span>{{headerName()}}</span>\n </div>\n <div class=\"body display-flex\">\n <div class=\"filters\">\n <ng-container *ngFor=\"let filter of localFilterOptions() | keyvalue : originalOrder\">\n <div class=\"filter display-flex\"\n tabindex=\"0\"\n (click)=\"selectedItem.set(filter.key)\"\n (keyup.enter)=\"selectedItem.set(filter.key)\"\n >\n <span class=\"filterName\" [ngStyle]=\"{'color': filter.key === selectedItem() ? '#0937B2' : '#181F33'}\">{{ localFilterOptions()![filter.key]?.name }}</span>\n <span class=\"selectedNumber\" *ngIf=\"localFilterOptions()![filter.key]['multiSelect'] && localFilterOptions()![filter.key]['noOfSelectedItems']! > 0\">{{ localFilterOptions()![filter.key]['noOfSelectedItems'] }}</span>\n <div class=\"highlightor\" *ngIf=\"filter.key === selectedItem()\"></div>\n </div>\n </ng-container>\n </div>\n <div class=\"filter-options-container\">\n <div class=\"filter-options-title\">\n <span>{{ localFilterOptions()![selectedItem()]?.name }}</span>\n </div>\n <div class=\"filter-options\">\n <ng-container *ngFor=\"let option of localFilterOptions()![selectedItem()]?.options; let i = index\">\n <div class=\"filter-option display-flex\"\n tabindex=\"0\"\n (click)=\"toggleFilter(option.value, option.selected)\"\n (keyup.enter)=\"toggleFilter(option.value, option.selected)\"\n >\n <mis-checkbox\n [attr.aria-label]=\"(option.selected ? 'Selected' : 'Unselected') + ' checkbox ' + option.label\"\n *ngIf=\"localFilterOptions()![selectedItem()]!.multiSelect\"\n [checked]=\"option.selected\">\n </mis-checkbox>\n <input\n type=\"radio\"\n [attr.aria-label]=\"(option.selected ? 'Selected' : 'Unselected') + ' radioButton ' + option.label\"\n *ngIf=\"!localFilterOptions()![selectedItem()]!.multiSelect\"\n [checked]=\"option.selected\">\n <span [ngStyle]=\"{'color': option.selected ? '#181F33' : '#6A737D'}\">{{ option.label }}</span>\n </div>\n </ng-container>\n </div>\n </div>\n </div>\n <div class=\"footer display-flex\">\n <button\n mis-button\n size=\"md\"\n type=\"text\"\n (click)=\"onClearFilters()\">\n {{clearBtnName()}}\n </button>\n <button\n mis-button\n size=\"md\"\n type=\"primary\"\n (click)=\"onApply()\">\n {{applyBtnName()}}\n </button>\n </div>\n</div>\n\n", styles: [":root{--pmry-200: #99BAF7;--pmry-100: #CBDDFB;--pmry-500: #0937B2;--pmry-400: #3C68D0;--pmry-600: #062A99;--pmry-700: #041F80;--pmry-300: #638FE7;--pmry-800: #021567;--pmry-900: #010F55;--sec-d-purple: #40447F;--sec-maroon: #6B034E;--sec-mud-red: #B23600;--sec-orange: #ED711C;--sec-purple: #815FD5;--sec-teal: #10ADAE;--sec-yellow: #D4900C;--sec-green: #547F40;--sec-bright-green: #27D22E;--sec-dark-teal: #035F6B;--sec-chocolate: #7C2F33;--sec-rube-pink: #C13D6D;--sec-cerulean: #0087B2;--sem-error: #B00020;--sem-info: #0091FF;--sem-warning: #FF9D00;--sem-success: #38AF49;--grey-bg-1: #FAFAFA;--grey-bg: #F5F5F5;--grey-seperators: #E0E0E0;--grey-disabled: #C8CDD3;--grey-hover: #F5F7FC;--grey-pressed: #E6EBF7;--grey-row: #F5F7FC;--dec-light-yellow: #F4E7C3;--dec-light-purple: #DACFF9;--dec-light-green: #E4F5E9;--dec-light-green2: #F1FFF3;--dec-light-pink: #FAE1EA;--dec-: #F4CBC1;--dec-lt-orange: #FAEFED;--dec-light-blue: #CFECF9;--dec-row-selection: #F1FDF8;--dec-row-selection2: #F2FBFF;--dec-row-lines: #D3E1E9;--text-white: #FFFFFF;--text-muted: #6A737D;--text-black: #181F33;--MR-solid-blue2:#C8D5F6;--MR-solid-purple:#C9C3FB;--MR-solid-orange:#EEAC9F;--MR-solid-green:#ACDADA;--MR-solid-brown:#E8C8AF;--MR-solid-yellow:#FFEFC7;--MR-solid-blue:#BBE6FF;--MR-solid-pink:#FFC6F2;--tr-hover:#F0F3FA;--tr-pressed:#DAE1F3;--brand-primary: #0937B2;--brand-primary-light: #3C68D0;--brand-primary-dark: #062A99;--brand-primary-darker: #041F80;--brand-primary-lighter: #638FE7;--brand-primary-lightest: #CBDDFB;--brand-primary-hover: #F0F3FA;--brand-primary-active: #DAE1F3;--brand-secondary: #ED711C;--brand-secondary-light: #F09E65;--brand-secondary-dark: #B23600;--brand-secondary-lighter: #FFC6F2;--brand-accent: #10ADAE;--brand-accent-light: #16CBBC;--brand-accent-dark: #035F6B;--brand-accent-lighter: #ACDADA;--brand-success: #38AF49;--brand-success-light: #4CAF50;--brand-success-dark: #216531;--brand-success-lighter: #E4F5E9;--brand-success-lightest: #F1FFF3;--brand-error: #B00020;--brand-error-light: #F04E4E;--brand-error-dark: #A60060;--brand-error-lighter: #FAE1EA;--brand-error-lightest: #FDF2F2;--brand-warning: #FF9D00;--brand-warning-light: #D4900C;--brand-warning-dark: #624000;--brand-warning-lighter: #F4E7C3;--brand-warning-lightest: #FAEFED;--brand-info: #0091FF;--brand-info-light: #35A1FF;--brand-info-dark: #0087B2;--brand-info-lighter: #CFECF9;--text-primary: #181F33;--text-secondary: #6A737D;--text-tertiary: #929DAB;--text-disabled: #929DAB;--text-primary-87: rgba(24, 31, 51, .87);--text-primary-60: rgba(24, 31, 51, .6);--text-primary-38: rgba(24, 31, 51, .38);--text-primary-12: rgba(24, 31, 51, .12);--bg-primary: #FFFFFF;--bg-secondary: #FAFAFA;--bg-tertiary: #F5F5F5;--bg-overlay: rgba(0, 0, 0, .32);--bg-overlay-light: rgba(0, 0, 0, .12);--bg-overlay-lighter: rgba(0, 0, 0, .08);--bg-overlay-lightest: rgba(0, 0, 0, .04);--border-primary: #E0E0E0;--border-secondary: #D6DCE2;--border-tertiary: #C8CDD3;--border-light: #F1F4F8;--border-primary-12: rgba(0, 0, 0, .12);--border-primary-08: rgba(0, 0, 0, .08);--border-primary-06: rgba(0, 0, 0, .06);--shadow-primary: rgba(0, 0, 0, .12);--shadow-secondary: rgba(0, 0, 0, .08);--shadow-tertiary: rgba(0, 0, 0, .04);--shadow-light: rgba(0, 0, 0, .06);--status-available: #929DAB;--status-unavailable: #CCD3DA;--status-hotseat: #857BFF;--status-multiteam: #10ADAE;--status-selected: #10ADAE;--status-upcoming: #D4900C;--status-room: #38AF49;--status-room-booked: #B23600;--status-room-unavailable: #181F33;--team-color-1: #F8C52E;--team-color-2: #FA8E20;--team-color-3: #987CDD;--team-color-4: #16CBBC;--team-color-5: #E65010;--team-color-6: #A60060;--team-color-7: #ED323B;--team-color-8: #35A1FF;--team-color-9: #80D348}.display-flex{display:flex}.filters-container{position:absolute;inset:0;background-color:var(--bg-primary, #FFFFFF);cursor:default}.filters-container *{font-family:Lato}.filters-container .head{height:56px;border-bottom:1px solid var(--border-primary, #E0E0E0);justify-content:flex-start;align-items:center;padding:0 16px;gap:12px}.filters-container .head img{cursor:pointer}.filters-container .head span{font-weight:700;font-size:17px;line-height:24px;letter-spacing:.2px}.filters-container .body{height:calc(100vh - 129px)}.filters-container .body .filters{width:120px;border-right:1px solid var(--border-primary, #E0E0E0);flex-shrink:0}.filters-container .body .filters .filter{height:56px;padding:0 16px;border-bottom:1px solid var(--border-primary, #E0E0E0);align-items:center;font-size:15px;justify-content:space-between;position:relative}.filters-container .body .filters .filter .filterName{color:var(--text-secondary, #6A737D);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.filters-container .body .filters .filter .selectedNumber{background-color:var(--bg-tertiary, #F5F5F5);height:24px;width:auto;font-size:14px;min-width:24px;border-radius:50%;text-align:center;line-height:24px;padding:0 8px}.filters-container .body .filters .filter .highlightor{position:absolute;left:0;height:100%;width:4px;background-color:var(--brand-primary, #0937B2)}.filters-container .body .filter-options-container{padding:16px 16px 0 12px;width:calc(100% - 56px);overflow-x:hidden}.filters-container .body .filter-options-container *{color:var(--text-primary, #181F33)}.filters-container .body .filter-options-container .filter-options-title{text-transform:uppercase;font-size:12px;line-height:16px;letter-spacing:.25px}.filters-container .body .filter-options-container .filter-options-title span{color:var(--text-secondary, #6A737D)}.filters-container .body .filter-options-container .filter-options{margin-top:16px;overflow-y:scroll;height:calc(100% - 32px)}.filters-container .body .filter-options-container .filter-options .filter-option{height:48px;border-bottom:1px solid var(--border-primary, #E0E0E0);align-items:center;padding-left:16px;gap:13px;font-size:15px}.filters-container .body .filter-options-container .filter-options .filter-option span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.filters-container .body .filter-options-container .filter-options .filter-option input[type=radio]{accent-color:var(--brand-primary, #0937B2);width:20px;height:20px}.filters-container .footer{height:73px;border-top:1px solid var(--border-primary, #E0E0E0);padding:0 16px;align-items:center;justify-content:space-between}.filters-container .footer button{width:160px}\n"] }]
|
|
178
191
|
}], () => [], null); })();
|
|
179
192
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MobileFilterComponent, { className: "MobileFilterComponent" }); })();
|
|
180
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9iaWxlLWZpbHRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9taXMtY29tcG9uZW50cy9tb2JpbGUtZmlsdGVyL21vYmlsZS1maWx0ZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vcHJvamVjdHMvbWlzLWNvbXBvbmVudHMvbW9iaWxlLWZpbHRlci9tb2JpbGUtZmlsdGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7OztJQ21CL0QsZ0NBQXFKO0lBQUEsWUFBNEQ7SUFBQSxpQkFBTzs7OztJQUFuRSxjQUE0RDtJQUE1RCxxRkFBNEQ7OztJQUNqTiwwQkFBcUU7Ozs7SUFSN0UsNkJBQXFGO0lBQ2pGLCtCQUlLO0lBREQsQUFEQSxtTkFBUyxzQ0FBNEIsS0FBQyxrTkFDdkIsc0NBQTRCLEtBQUM7SUFFNUMsZ0NBQXNHO0lBQUEsWUFBNkM7SUFBQSxpQkFBTztJQUUxSixBQURBLHdGQUFxSix5RUFDdEY7SUFDbkUsaUJBQU07Ozs7OztJQUh1QixlQUE0RTtJQUE1RSxxSEFBNEU7SUFBQyxjQUE2QztJQUE3QywwR0FBNkM7SUFDckgsY0FBcUg7SUFBckgsdUpBQXFIO0lBQ3pILGNBQW1DO0lBQW5DLDhEQUFtQzs7O0lBZXpELG1DQUllOzs7SUFEWCw0Q0FBMkI7Ozs7SUFFL0IsNEJBSWdDOzs7SUFBNUIsNENBQTJCOzs7OztJQWZ2Qyw2QkFBbUc7SUFDL0YsK0JBSUs7SUFERCxBQURBLG9OQUFTLHdEQUEyQyxLQUFDLG1OQUN0Qyx3REFBMkMsS0FBQztJQU8zRCxBQUxBLHlHQUdnQyw4RUFNQTtJQUNoQyxnQ0FBcUU7SUFBQSxZQUFrQjtJQUMzRixBQUQyRixpQkFBTyxFQUM1Rjs7Ozs7SUFU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QU1HO1lBRjFCLEFBREEsK0ZBQVMsdUJBQW1CLElBQUUsOEZBQ2YsdUJBQW1CLElBQUU7WUFIeEMsaUJBSzhCO1lBQzlCLDRCQUFNO1lBQUEsWUFBZ0I7WUFDMUIsQUFEMEIsaUJBQU8sRUFDM0I7WUFFRixBQURKLDhCQUErQixhQUNOO1lBQ2pCLHdGQUFxRjs7WUFXekYsaUJBQU07WUFHRSxBQURKLEFBREosOEJBQXNDLGNBQ0EsWUFDeEI7WUFBQSxhQUFpRDtZQUMzRCxBQUQyRCxpQkFBTyxFQUM1RDtZQUNOLCtCQUE0QjtZQUN4QiwwRkFBbUc7WUFxQi9HLEFBREksQUFESSxpQkFBTSxFQUNKLEVBQ0o7WUFFRixBQURKLCtCQUFpQyxrQkFLSztZQUE5QixtR0FBUyx1QkFBbUIsSUFBQztZQUM3QixhQUNKO1lBQUEsaUJBQVM7WUFDVCxtQ0FJd0I7WUFBcEIsbUdBQVMsYUFBUyxJQUFDO1lBQ25CLGFBQ0o7WUFFUixBQURJLEFBREksaUJBQVMsRUFDUCxFQUNKOzs7O1lBNURNLGVBQWtCO1lBQWxCLHNEQUFrQjtZQUNoQixlQUFnQjtZQUFoQixzQ0FBZ0I7WUFJZSxlQUFrRDtZQUFsRCwyRkFBa0Q7WUFjekUsZUFBaUQ7WUFBakQsNEdBQWlEO1lBR3RCLGVBQW1EO1lBQW5ELG1IQUFtRDtZQTRCeEYsZUFDSjtZQURJLG1EQUNKO1lBTUksZUFDSjtZQURJLG1EQUNKOzs7aUZEMURLLHFCQUFxQjtjQUxqQyxTQUFTOzJCQUNFLG1CQUFtQjs7a0ZBSWxCLHFCQUFxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgaW5wdXQsIG91dHB1dCwgY29tcHV0ZWQsIHNpZ25hbCwgZWZmZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ21pcy1tb2JpbGUtZmlsdGVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL21vYmlsZS1maWx0ZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9tb2JpbGUtZmlsdGVyLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgTW9iaWxlRmlsdGVyQ29tcG9uZW50IHtcblxuICAvLyBUaGUgaW5wdXQgc2lnbmFsIGlzIHJlYWQtb25seS4gSXRzIHZhbHVlIGNhbiBvbmx5IGJlIHNldCBieSB0aGUgcGFyZW50IGNvbXBvbmVudC5cbiAgcHVibGljIHJlYWRvbmx5IGN1cnJlbnRTZWxlY3RlZEl0ZW0gPSBpbnB1dDxzdHJpbmc+KCdTb3J0Jyk7XG4gIHB1YmxpYyByZWFkb25seSBmaWx0ZXJPcHRpb25zID0gaW5wdXQucmVxdWlyZWQ8SUZpbHRlck9wdGlvbnM+KCk7XG4gIHB1YmxpYyByZWFkb25seSBiYWNrSWNvbiA9IGlucHV0PHN0cmluZz4oJycpO1xuICBwdWJsaWMgcmVhZG9ubHkgaGVhZGVyTmFtZSA9IGlucHV0PHN0cmluZz4oJ0ZpbHRlcnMnKTtcbiAgcHVibGljIHJlYWRvbmx5IGFwcGx5QnRuTmFtZSA9IGlucHV0PHN0cmluZz4oJ0FwcGx5Jyk7XG4gIHB1YmxpYyByZWFkb25seSBjbGVhckJ0bk5hbWUgPSBpbnB1dDxzdHJpbmc+KCdDbGVhciBGaWx0ZXJzJyk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGNsb3NlRmlsdGVycyA9IG91dHB1dDx2b2lkPigpO1xuICBwdWJsaWMgcmVhZG9ubHkgY2xlYXJGaWx0ZXJzID0gb3V0cHV0PHZvaWQ+KCk7XG4gIHB1YmxpYyByZWFkb25seSBhcHBseUZpbHRlcnMgPSBvdXRwdXQ8SUZpbHRlck9wdGlvbnM+KCk7XG5cbiAgLy8gVGhpcyBpbnRlcm5hbCBzaWduYWwgaG9sZHMgdGhlIHN0YXRlIG9mIHRoZSBzZWxlY3RlZCBpdGVtLlxuICAvLyBJdCBpcyB3cml0YWJsZSBhbmQgY2FuIGJlIHVwZGF0ZWQgZnJvbSB3aXRoaW4gdGhlIGNvbXBvbmVudCdzIHRlbXBsYXRlLlxuICBwdWJsaWMgcmVhZG9ubHkgc2VsZWN0ZWRJdGVtID0gc2lnbmFsPHN0cmluZz4odGhpcy5jdXJyZW50U2VsZWN0ZWRJdGVtKCkpO1xuXG4gIC8vIFVzZSBhIGNvbXB1dGVkIHNpZ25hbCBmb3IgdGhlIGZpbHRlciBvcHRpb25zIHRvIG1haW50YWluIHJlYWN0aXZpdHkuXG4gIHB1YmxpYyByZWFkb25seSBsb2NhbEZpbHRlck9wdGlvbnMgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmZpbHRlck9wdGlvbnMoKSk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgLy8gVGhpcyBlZmZlY3QgZW5zdXJlcyB0aGF0IGlmIHRoZSBwYXJlbnQgY2hhbmdlcyB0aGUgaW5wdXQsIG91ciBpbnRlcm5hbCBzaWduYWwgaXMgYWxzbyB1cGRhdGVkLlxuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbS5zZXQodGhpcy5jdXJyZW50U2VsZWN0ZWRJdGVtKCkpO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gUmVzdCBvZiB5b3VyIGNvbXBvbmVudCBtZXRob2RzLi4uXG4gIHB1YmxpYyBvcmlnaW5hbE9yZGVyKCkge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgcHVibGljIHRvZ2dsZUZpbHRlcihkYXRhOiBhbnksIGlzU2VsZWN0ZWRJdGVtOiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3QgdXBkYXRlZE9wdGlvbnMgPSBzdHJ1Y3R1cmVkQ2xvbmUodGhpcy5sb2NhbEZpbHRlck9wdGlvbnMoKSk7XG4gICAgY29uc3QgY3VycmVudEtleSA9IHRoaXMuc2VsZWN0ZWRJdGVtKCk7XG4gICAgY29uc3QgY3VycmVudEZpbHRlciA9IHVwZGF0ZWRPcHRpb25zW2N1cnJlbnRLZXldO1xuXG4gICAgaWYgKCFjdXJyZW50RmlsdGVyKSByZXR1cm47XG5cbiAgICBjb25zdCBpc011bHRpU2VsZWN0ID0gY3VycmVudEZpbHRlci5tdWx0aVNlbGVjdDtcbiAgICBsZXQgbmV3Tm9PZlNlbGVjdGVkSXRlbXMgPSAwO1xuXG4gICAgY3VycmVudEZpbHRlci5vcHRpb25zID0gY3VycmVudEZpbHRlci5vcHRpb25zLm1hcChvcHRpb24gPT4ge1xuICAgICAgY29uc3QgaXNTZWxlY3RlZFZhbHVlID0gb3B0aW9uLnZhbHVlID09PSBkYXRhO1xuICAgICAgY29uc3QgbmV3U2VsZWN0ZWRTdGF0ZSA9IGlzU2VsZWN0ZWRWYWx1ZSA/IChpc011bHRpU2VsZWN0ID8gIW9wdGlvbi5zZWxlY3RlZCA6IHRydWUpIDogKGlzTXVsdGlTZWxlY3QgPyBvcHRpb24uc2VsZWN0ZWQgOiBmYWxzZSk7XG5cbiAgICAgIGlmIChuZXdTZWxlY3RlZFN0YXRlKSB7XG4gICAgICAgIG5ld05vT2ZTZWxlY3RlZEl0ZW1zKys7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLm9wdGlvbixcbiAgICAgICAgc2VsZWN0ZWQ6IG5ld1NlbGVjdGVkU3RhdGVcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICBjdXJyZW50RmlsdGVyLm5vT2ZTZWxlY3RlZEl0ZW1zID0gbmV3Tm9PZlNlbGVjdGVkSXRlbXM7XG4gIH1cblxuICBwdWJsaWMgb25BcHBseSgpOiB2b2lkIHtcbiAgICB0aGlzLmFwcGx5RmlsdGVycy5lbWl0KHRoaXMubG9jYWxGaWx0ZXJPcHRpb25zKCkpO1xuICB9XG4gIFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElGaWx0ZXJPcHRpb25zIHtcbiAgW2ZpbHRlck5hbWU6IHN0cmluZ106IHtcbiAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgIG9wdGlvbnM6IHtsYWJlbDogc3RyaW5nLCB2YWx1ZTogc3RyaW5nLCBzZWxlY3RlZDogYm9vbGVhbiwgY2FwYWNpdGllcz86IG51bWJlcltdLCBhbWVuaXRpZXM/OiBzdHJpbmdbXX1bXSwgICAgLy8gY2FwYWNpdGllcyAmIGFtZW5pdGllcyBhcmUgZm9yIGZsb29yXG4gICAgICBtdWx0aVNlbGVjdDogYm9vbGVhbixcbiAgICAgIG5vT2ZTZWxlY3RlZEl0ZW1zPzogbnVtYmVyXG4gIH1cbn1cblxuXG4iLCI8ZGl2IGNsYXNzPVwiZmlsdGVycy1jb250YWluZXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwiaGVhZCBkaXNwbGF5LWZsZXhcIj5cbiAgICAgICAgPGltZ1xuICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgIChjbGljayk9XCJjbG9zZUZpbHRlcnMuZW1pdCgpO1wiXG4gICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwiY2xvc2VGaWx0ZXJzLmVtaXQoKTtcIlxuICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkNsb3NlIEZpbHRlcnMgQXJyb3dcIlxuICAgICAgICAgICAgW3NyY109XCJiYWNrSWNvbigpXCIgYWx0PVwiXCI+XG4gICAgICAgIDxzcGFuPnt7aGVhZGVyTmFtZSgpfX08L3NwYW4+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImJvZHkgZGlzcGxheS1mbGV4XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXJzXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBmaWx0ZXIgb2YgbG9jYWxGaWx0ZXJPcHRpb25zKCkgfCBrZXl2YWx1ZSA6IG9yaWdpbmFsT3JkZXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyIGRpc3BsYXktZmxleFwiXG4gICAgICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RlZEl0ZW0uc2V0KGZpbHRlci5rZXkpXCJcbiAgICAgICAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cInNlbGVjdGVkSXRlbS5zZXQoZmlsdGVyLmtleSlcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmlsdGVyTmFtZVwiIFtuZ1N0eWxlXT1cInsnY29sb3InOiBmaWx0ZXIua2V5ID09PSBzZWxlY3RlZEl0ZW0oKSA/ICcjMDkzN0IyJyA6ICcjMTgxRjMzJ31cIj57eyBsb2NhbEZpbHRlck9wdGlvbnMoKSFbZmlsdGVyLmtleV0/Lm5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2VsZWN0ZWROdW1iZXJcIiAqbmdJZj1cImxvY2FsRmlsdGVyT3B0aW9ucygpIVtmaWx0ZXIua2V5XVsnbXVsdGlTZWxlY3QnXSAmJiBsb2NhbEZpbHRlck9wdGlvbnMoKSFbZmlsdGVyLmtleV1bJ25vT2ZTZWxlY3RlZEl0ZW1zJ10hID4gMFwiPnt7IGxvY2FsRmlsdGVyT3B0aW9ucygpIVtmaWx0ZXIua2V5XVsnbm9PZlNlbGVjdGVkSXRlbXMnXSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhpZ2hsaWdodG9yXCIgKm5nSWY9XCJmaWx0ZXIua2V5ID09PSBzZWxlY3RlZEl0ZW0oKVwiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyLW9wdGlvbnMtY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyLW9wdGlvbnMtdGl0bGVcIj5cbiAgICAgICAgICAgICAgICA8c3Bhbj57eyBsb2NhbEZpbHRlck9wdGlvbnMoKSFbc2VsZWN0ZWRJdGVtKCldPy5uYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyLW9wdGlvbnNcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgbG9jYWxGaWx0ZXJPcHRpb25zKCkhW3NlbGVjdGVkSXRlbSgpXT8ub3B0aW9uczsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyLW9wdGlvbiBkaXNwbGF5LWZsZXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVGaWx0ZXIob3B0aW9uLnZhbHVlLCBvcHRpb24uc2VsZWN0ZWQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJ0b2dnbGVGaWx0ZXIob3B0aW9uLnZhbHVlLCBvcHRpb24uc2VsZWN0ZWQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtaXMtY2hlY2tib3hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIihvcHRpb24uc2VsZWN0ZWQgPyAnU2VsZWN0ZWQnIDogJ1Vuc2VsZWN0ZWQnKSArICcgY2hlY2tib3ggJyArIG9wdGlvbi5sYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJsb2NhbEZpbHRlck9wdGlvbnMoKSFbc2VsZWN0ZWRJdGVtKCldIS5tdWx0aVNlbGVjdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwib3B0aW9uLnNlbGVjdGVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21pcy1jaGVja2JveD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCIob3B0aW9uLnNlbGVjdGVkID8gJ1NlbGVjdGVkJyA6ICdVbnNlbGVjdGVkJykgKyAnIHJhZGlvQnV0dG9uICcgKyBvcHRpb24ubGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWxvY2FsRmlsdGVyT3B0aW9ucygpIVtzZWxlY3RlZEl0ZW0oKV0hLm11bHRpU2VsZWN0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJvcHRpb24uc2VsZWN0ZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtuZ1N0eWxlXT1cInsnY29sb3InOiBvcHRpb24uc2VsZWN0ZWQgPyAnIzE4MUYzMycgOiAnIzZBNzM3RCd9XCI+e3sgb3B0aW9uLmxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZm9vdGVyIGRpc3BsYXktZmxleFwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBtaXMtYnV0dG9uXG4gICAgICAgICAgICBzaXplPVwibWRcIlxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImNsZWFyRmlsdGVycy5lbWl0KClcIj5cbiAgICAgICAgICAgIHt7Y2xlYXJCdG5OYW1lKCl9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgbWlzLWJ1dHRvblxuICAgICAgICAgICAgc2l6ZT1cIm1kXCJcbiAgICAgICAgICAgIHR5cGU9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgIChjbGljayk9XCJvbkFwcGx5KClcIj5cbiAgICAgICAgICAgIHt7YXBwbHlCdG5OYW1lKCl9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuXG4iXX0=
|
|
193
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9iaWxlLWZpbHRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9taXMtY29tcG9uZW50cy9tb2JpbGUtZmlsdGVyL21vYmlsZS1maWx0ZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vcHJvamVjdHMvbWlzLWNvbXBvbmVudHMvbW9iaWxlLWZpbHRlci9tb2JpbGUtZmlsdGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBWSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7O0lDbUIvRCxnQ0FBcUo7SUFBQSxZQUE0RDtJQUFBLGlCQUFPOzs7O0lBQW5FLGNBQTREO0lBQTVELHFGQUE0RDs7O0lBQ2pOLDBCQUFxRTs7OztJQVI3RSw2QkFBcUY7SUFDakYsK0JBSUs7SUFERCxBQURBLG1OQUFTLHNDQUE0QixLQUFDLGtOQUN2QixzQ0FBNEIsS0FBQztJQUU1QyxnQ0FBc0c7SUFBQSxZQUE2QztJQUFBLGlCQUFPO0lBRTFKLEFBREEsd0ZBQXFKLHlFQUN0RjtJQUNuRSxpQkFBTTs7Ozs7O0lBSHVCLGVBQTRFO0lBQTVFLHFIQUE0RTtJQUFDLGNBQTZDO0lBQTdDLDBHQUE2QztJQUNySCxjQUFxSDtJQUFySCx1SkFBcUg7SUFDekgsY0FBbUM7SUFBbkMsOERBQW1DOzs7SUFlekQsbUNBSWU7OztJQURYLDRDQUEyQjs7OztJQUUvQiw0QkFJZ0M7OztJQUE1Qiw0Q0FBMkI7Ozs7O0lBZnZDLDZCQUFtRztJQUMvRiwrQkFJSztJQURELEFBREEsb05BQVMsd0RBQTJDLEtBQUMsbU5BQ3RDLHdEQUEyQyxLQUFDO0lBTzNELEFBTEEseUdBR2dDLDhFQU1BO0lBQ2hDLGdDQUFxRTtJQUFBLFlBQWtCO0lBQzNGLEFBRDJGLGlCQUFPLEVBQzVGOzs7OztJQVRHLGVBQXdEO0lB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b0JBQWdCLElBQUM7WUFDMUIsYUFDSjtZQUFBLGlCQUFTO1lBQ1QsbUNBSXdCO1lBQXBCLG1HQUFTLGFBQVMsSUFBQztZQUNuQixhQUNKO1lBRVIsQUFESSxBQURJLGlCQUFTLEVBQ1AsRUFDSjs7OztZQTVETSxlQUFrQjtZQUFsQixzREFBa0I7WUFDaEIsZUFBZ0I7WUFBaEIsc0NBQWdCO1lBSWUsZUFBa0Q7WUFBbEQsMkZBQWtEO1lBY3pFLGVBQWlEO1lBQWpELDRHQUFpRDtZQUd0QixlQUFtRDtZQUFuRCxtSEFBbUQ7WUE0QnhGLGVBQ0o7WUFESSxtREFDSjtZQU1JLGVBQ0o7WUFESSxtREFDSjs7O2lGRDFESyxxQkFBcUI7Y0FMakMsU0FBUzsyQkFDRSxtQkFBbUI7O2tGQUlsQixxQkFBcUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGlucHV0LCBvdXRwdXQsIGNvbXB1dGVkLCBzaWduYWwsIGVmZmVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdtaXMtbW9iaWxlLWZpbHRlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9tb2JpbGUtZmlsdGVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbW9iaWxlLWZpbHRlci5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIE1vYmlsZUZpbHRlckNvbXBvbmVudCB7XG5cbiAgLy8gVGhlIGlucHV0IHNpZ25hbCBpcyByZWFkLW9ubHkuIEl0cyB2YWx1ZSBjYW4gb25seSBiZSBzZXQgYnkgdGhlIHBhcmVudCBjb21wb25lbnQuXG4gIHB1YmxpYyByZWFkb25seSBjdXJyZW50U2VsZWN0ZWRJdGVtID0gaW5wdXQ8c3RyaW5nPignU29ydCcpO1xuICBwdWJsaWMgcmVhZG9ubHkgZmlsdGVyT3B0aW9ucyA9IGlucHV0LnJlcXVpcmVkPElGaWx0ZXJPcHRpb25zPigpO1xuICBwdWJsaWMgcmVhZG9ubHkgYmFja0ljb24gPSBpbnB1dDxzdHJpbmc+KCcnKTtcbiAgcHVibGljIHJlYWRvbmx5IGhlYWRlck5hbWUgPSBpbnB1dDxzdHJpbmc+KCdGaWx0ZXJzJyk7XG4gIHB1YmxpYyByZWFkb25seSBhcHBseUJ0bk5hbWUgPSBpbnB1dDxzdHJpbmc+KCdBcHBseScpO1xuICBwdWJsaWMgcmVhZG9ubHkgY2xlYXJCdG5OYW1lID0gaW5wdXQ8c3RyaW5nPignQ2xlYXIgRmlsdGVycycpO1xuXG4gIHB1YmxpYyByZWFkb25seSBjbG9zZUZpbHRlcnMgPSBvdXRwdXQ8dm9pZD4oKTtcbiAgcHVibGljIHJlYWRvbmx5IGNsZWFyRmlsdGVycyA9IG91dHB1dDx2b2lkPigpO1xuICBwdWJsaWMgcmVhZG9ubHkgYXBwbHlGaWx0ZXJzID0gb3V0cHV0PElGaWx0ZXJPcHRpb25zPigpO1xuXG4gIC8vIFRoaXMgaW50ZXJuYWwgc2lnbmFsIGhvbGRzIHRoZSBzdGF0ZSBvZiB0aGUgc2VsZWN0ZWQgaXRlbS5cbiAgLy8gSXQgaXMgd3JpdGFibGUgYW5kIGNhbiBiZSB1cGRhdGVkIGZyb20gd2l0aGluIHRoZSBjb21wb25lbnQncyB0ZW1wbGF0ZS5cbiAgcHVibGljIHJlYWRvbmx5IHNlbGVjdGVkSXRlbSA9IHNpZ25hbDxzdHJpbmc+KCcnKTtcbiAgLy8gVXNlIGEgY29tcHV0ZWQgc2lnbmFsIGZvciB0aGUgZmlsdGVyIG9wdGlvbnMgdG8gbWFpbnRhaW4gcmVhY3Rpdml0eS5cbiAgcHVibGljIHJlYWRvbmx5IGxvY2FsRmlsdGVyT3B0aW9ucyA9IHNpZ25hbDxJRmlsdGVyT3B0aW9ucz4oe30pO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgICAgLy8gVGhpcyBlZmZlY3QgaGFuZGxlcyBib3RoIGluaXRpYWxpemF0aW9uIGFuZCBzdWJzZXF1ZW50IGNoYW5nZXMgb2YgdGhlIGlucHV0cy5cbiAgICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW0uc2V0KHRoaXMuY3VycmVudFNlbGVjdGVkSXRlbSgpKTsgXG4gICAgICAgICAgdGhpcy5sb2NhbEZpbHRlck9wdGlvbnMuc2V0KHN0cnVjdHVyZWRDbG9uZSh0aGlzLmZpbHRlck9wdGlvbnMoKSkpO1xuICAgICAgICAgIFxuICAgICAgfSwgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9KTtcbiAgfVxuXG4gIC8vIFJlc3Qgb2YgeW91ciBjb21wb25lbnQgbWV0aG9kcy4uLlxuICBwdWJsaWMgb3JpZ2luYWxPcmRlcigpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG5wdWJsaWMgdG9nZ2xlRmlsdGVyKGRhdGE6IGFueSwgaXNTZWxlY3RlZEl0ZW06IGJvb2xlYW4pOiB2b2lkIHtcbiAgY29uc3QgdXBkYXRlZE9wdGlvbnMgPSBzdHJ1Y3R1cmVkQ2xvbmUodGhpcy5sb2NhbEZpbHRlck9wdGlvbnMoKSk7XG4gIGNvbnN0IGN1cnJlbnRLZXkgPSB0aGlzLnNlbGVjdGVkSXRlbSgpO1xuICBjb25zdCBjdXJyZW50RmlsdGVyID0gdXBkYXRlZE9wdGlvbnNbY3VycmVudEtleV07XG5cbiAgaWYgKCFjdXJyZW50RmlsdGVyKSByZXR1cm47XG5cbiAgY29uc3QgaXNNdWx0aVNlbGVjdCA9IGN1cnJlbnRGaWx0ZXIubXVsdGlTZWxlY3Q7XG4gIGxldCBuZXdOb09mU2VsZWN0ZWRJdGVtcyA9IDA7XG5cbiAgY3VycmVudEZpbHRlci5vcHRpb25zID0gY3VycmVudEZpbHRlci5vcHRpb25zLm1hcChvcHRpb24gPT4ge1xuICAgIGNvbnN0IGlzU2VsZWN0ZWRWYWx1ZSA9IG9wdGlvbi52YWx1ZSA9PT0gZGF0YTtcbiAgICBjb25zdCBuZXdTZWxlY3RlZFN0YXRlID0gaXNTZWxlY3RlZFZhbHVlID8gKGlzTXVsdGlTZWxlY3QgPyAhb3B0aW9uLnNlbGVjdGVkIDogdHJ1ZSkgOiAoaXNNdWx0aVNlbGVjdCA/IG9wdGlvbi5zZWxlY3RlZCA6IGZhbHNlKTtcblxuICAgIGlmIChuZXdTZWxlY3RlZFN0YXRlKSB7XG4gICAgICBuZXdOb09mU2VsZWN0ZWRJdGVtcysrO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAuLi5vcHRpb24sXG4gICAgICBzZWxlY3RlZDogbmV3U2VsZWN0ZWRTdGF0ZVxuICAgIH07XG4gIH0pO1xuXG4gIGN1cnJlbnRGaWx0ZXIubm9PZlNlbGVjdGVkSXRlbXMgPSBuZXdOb09mU2VsZWN0ZWRJdGVtcztcbiAgdGhpcy5sb2NhbEZpbHRlck9wdGlvbnMuc2V0KHVwZGF0ZWRPcHRpb25zKTsgXG59XG5cbiAgcHVibGljIG9uQXBwbHkoKTogdm9pZCB7XG4gICAgdGhpcy5hcHBseUZpbHRlcnMuZW1pdCh0aGlzLmxvY2FsRmlsdGVyT3B0aW9ucygpKTtcbiAgfVxuXG4gIG9uQ2xlYXJGaWx0ZXJzKCk6IHZvaWR7XG4gICAgaWYoT2JqZWN0LmtleXModGhpcy5maWx0ZXJPcHRpb25zKCkpLmxlbmd0aCA+IDApIHtcbiAgICAgIE9iamVjdC5rZXlzKHRoaXMuZmlsdGVyT3B0aW9ucygpKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgIHRoaXMuZmlsdGVyT3B0aW9ucygpW2tleV0ub3B0aW9ucy5mb3JFYWNoKG9wdGlvbiA9PiB7XG4gICAgICAgICAgb3B0aW9uLnNlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmZpbHRlck9wdGlvbnMoKVtrZXldLm5vT2ZTZWxlY3RlZEl0ZW1zID0gMDtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5jbGVhckZpbHRlcnMuZW1pdCgpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElGaWx0ZXJPcHRpb25zIHtcbiAgW2ZpbHRlck5hbWU6IHN0cmluZ106IHtcbiAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgIG9wdGlvbnM6IHtsYWJlbDogc3RyaW5nLCB2YWx1ZTogc3RyaW5nLCBzZWxlY3RlZDogYm9vbGVhbiwgY2FwYWNpdGllcz86IG51bWJlcltdLCBhbWVuaXRpZXM/OiBzdHJpbmdbXX1bXSwgICAgLy8gY2FwYWNpdGllcyAmIGFtZW5pdGllcyBhcmUgZm9yIGZsb29yXG4gICAgICBtdWx0aVNlbGVjdDogYm9vbGVhbixcbiAgICAgIG5vT2ZTZWxlY3RlZEl0ZW1zPzogbnVtYmVyXG4gIH1cbn1cblxuXG4iLCI8ZGl2IGNsYXNzPVwiZmlsdGVycy1jb250YWluZXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwiaGVhZCBkaXNwbGF5LWZsZXhcIj5cbiAgICAgICAgPGltZ1xuICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgIChjbGljayk9XCJjbG9zZUZpbHRlcnMuZW1pdCgpO1wiXG4gICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwiY2xvc2VGaWx0ZXJzLmVtaXQoKTtcIlxuICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkNsb3NlIEZpbHRlcnMgQXJyb3dcIlxuICAgICAgICAgICAgW3NyY109XCJiYWNrSWNvbigpXCIgYWx0PVwiXCI+XG4gICAgICAgIDxzcGFuPnt7aGVhZGVyTmFtZSgpfX08L3NwYW4+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImJvZHkgZGlzcGxheS1mbGV4XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXJzXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBmaWx0ZXIgb2YgbG9jYWxGaWx0ZXJPcHRpb25zKCkgfCBrZXl2YWx1ZSA6IG9yaWdpbmFsT3JkZXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyIGRpc3BsYXktZmxleFwiXG4gICAgICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RlZEl0ZW0uc2V0KGZpbHRlci5rZXkpXCJcbiAgICAgICAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cInNlbGVjdGVkSXRlbS5zZXQoZmlsdGVyLmtleSlcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmlsdGVyTmFtZVwiIFtuZ1N0eWxlXT1cInsnY29sb3InOiBmaWx0ZXIua2V5ID09PSBzZWxlY3RlZEl0ZW0oKSA/ICcjMDkzN0IyJyA6ICcjMTgxRjMzJ31cIj57eyBsb2NhbEZpbHRlck9wdGlvbnMoKSFbZmlsdGVyLmtleV0/Lm5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2VsZWN0ZWROdW1iZXJcIiAqbmdJZj1cImxvY2FsRmlsdGVyT3B0aW9ucygpIVtmaWx0ZXIua2V5XVsnbXVsdGlTZWxlY3QnXSAmJiBsb2NhbEZpbHRlck9wdGlvbnMoKSFbZmlsdGVyLmtleV1bJ25vT2ZTZWxlY3RlZEl0ZW1zJ10hID4gMFwiPnt7IGxvY2FsRmlsdGVyT3B0aW9ucygpIVtmaWx0ZXIua2V5XVsnbm9PZlNlbGVjdGVkSXRlbXMnXSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhpZ2hsaWdodG9yXCIgKm5nSWY9XCJmaWx0ZXIua2V5ID09PSBzZWxlY3RlZEl0ZW0oKVwiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyLW9wdGlvbnMtY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyLW9wdGlvbnMtdGl0bGVcIj5cbiAgICAgICAgICAgICAgICA8c3Bhbj57eyBsb2NhbEZpbHRlck9wdGlvbnMoKSFbc2VsZWN0ZWRJdGVtKCldPy5uYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyLW9wdGlvbnNcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgbG9jYWxGaWx0ZXJPcHRpb25zKCkhW3NlbGVjdGVkSXRlbSgpXT8ub3B0aW9uczsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyLW9wdGlvbiBkaXNwbGF5LWZsZXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVGaWx0ZXIob3B0aW9uLnZhbHVlLCBvcHRpb24uc2VsZWN0ZWQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJ0b2dnbGVGaWx0ZXIob3B0aW9uLnZhbHVlLCBvcHRpb24uc2VsZWN0ZWQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtaXMtY2hlY2tib3hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIihvcHRpb24uc2VsZWN0ZWQgPyAnU2VsZWN0ZWQnIDogJ1Vuc2VsZWN0ZWQnKSArICcgY2hlY2tib3ggJyArIG9wdGlvbi5sYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJsb2NhbEZpbHRlck9wdGlvbnMoKSFbc2VsZWN0ZWRJdGVtKCldIS5tdWx0aVNlbGVjdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwib3B0aW9uLnNlbGVjdGVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21pcy1jaGVja2JveD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCIob3B0aW9uLnNlbGVjdGVkID8gJ1NlbGVjdGVkJyA6ICdVbnNlbGVjdGVkJykgKyAnIHJhZGlvQnV0dG9uICcgKyBvcHRpb24ubGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWxvY2FsRmlsdGVyT3B0aW9ucygpIVtzZWxlY3RlZEl0ZW0oKV0hLm11bHRpU2VsZWN0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJvcHRpb24uc2VsZWN0ZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtuZ1N0eWxlXT1cInsnY29sb3InOiBvcHRpb24uc2VsZWN0ZWQgPyAnIzE4MUYzMycgOiAnIzZBNzM3RCd9XCI+e3sgb3B0aW9uLmxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZm9vdGVyIGRpc3BsYXktZmxleFwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBtaXMtYnV0dG9uXG4gICAgICAgICAgICBzaXplPVwibWRcIlxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2xlYXJGaWx0ZXJzKClcIj5cbiAgICAgICAgICAgIHt7Y2xlYXJCdG5OYW1lKCl9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgbWlzLWJ1dHRvblxuICAgICAgICAgICAgc2l6ZT1cIm1kXCJcbiAgICAgICAgICAgIHR5cGU9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgIChjbGljayk9XCJvbkFwcGx5KClcIj5cbiAgICAgICAgICAgIHt7YXBwbHlCdG5OYW1lKCl9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuXG4iXX0=
|