@churchillliving/se-ui-toolkit 6.53.430 → 6.53.431
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/bundles/churchillliving-se-ui-toolkit.umd.js +4 -3
- package/bundles/churchillliving-se-ui-toolkit.umd.js.map +1 -1
- package/churchillliving-se-ui-toolkit.metadata.json +1 -1
- package/esm2015/lib/components/base/grid/grid.component.js +4 -3
- package/esm2015/lib/components/shared/global-filters/global-filters.component.js +2 -2
- package/fesm2015/churchillliving-se-ui-toolkit.js +4 -3
- package/fesm2015/churchillliving-se-ui-toolkit.js.map +1 -1
- package/package.json +1 -1
|
@@ -447,7 +447,7 @@ export class SeGlobalFilterComponent {
|
|
|
447
447
|
SeGlobalFilterComponent.decorators = [
|
|
448
448
|
{ type: Component, args: [{
|
|
449
449
|
selector: 'se-global-filters',
|
|
450
|
-
template: "<div class=\"global-filters-component-wrapper-div\">\n <div\n [class]=\"globalFilter.hidden ? 'globalFilterHidden' : globalFilter.column ? 'p-col-' + globalFilter.column : 'p-col-3'\"\n *ngFor=\"let globalFilter of globalFilters\"\n >\n <div [ngSwitch]=\"globalFilter.type\">\n <!-- Calender control -->\n <span [hidden]=\"globalFilter.hidden\">\n <div class=\"global-filters-filter-div\" *ngSwitchCase=\"fiterTypes.CALENDAR\">\n <label class=\"global-filters-label\" for=\"basic\">{{ globalFilter.displayText }}\n <span *ngIf=\"globalFilter.requiredField\" class=\"required-star\">*</span>\n </label>\n <div class=\"p-d-flex p-ai-center\">\n <p-calendar\n [class]=\"globalFilter.errorMessage ? 'ng-invalid ng-dirty ' + globalFilter.displayText: 'p-flex-grow-1 p-mr-2 grow-1 ' + globalFilter.displayText\"\n [placeholder]=\"'Select-Date'\"\n [(ngModel)]=\"globalFilter.value\"\n (keyup.enter)=\"applyFilters()\"\n (onSelect)=\"selectDate(globalFilter, true)\"\n [inputId]=\"globalFilter.field\"\n [dateFormat]=\"calendarFormat\"\n (onClose)=\"onFocusOutEvent(globalFilter)\"\n appendTo=\"body\"\n [showButtonBar]=\"true\"\n [disabled]=\"globalFilter.disabled\"\n (keyup)=\"calendarFocusEvent(globalFilter)\"\n >\n </p-calendar>\n <span *ngIf=\"globalFilter.filtering\">\n <se-filter-menu [globalFilter]=\"globalFilter\"></se-filter-menu>\n </span>\n </div>\n <span *ngIf=\"globalFilter.errorMessage && globalFilter.errorMessage.length > 0\" class=\"error\">{{\n globalFilter.errorMessage\n }}</span>\n </div>\n </span>\n\n <!-- Calender Range -->\n <span [hidden]=\"globalFilter.hidden\">\n <div\n class=\"global-filters-filter-div\"\n *ngSwitchCase=\"fiterTypes.CALENDAR_RANGE\"\n >\n <label class=\"\" for=\"basic\">{{ globalFilter.displayText }}\n <span *ngIf=\"globalFilter.requiredField\" class=\"required-star\">*</span>\n </label>\n <div class=\"p-d-flex p-ai-center\">\n <button\n pButton\n type=\"button\"\n [disabled]=\"globalFilter.disabled\" \n class=\"custom-btn\"\n (click)=\"showPrevious(globalFilter)\"\n label=\"Previous {{\n globalFilter.dayRange ? globalFilter.dayRange : 'Week'\n }} <<\"\n >\n <!-- [ngStyle]=\"{ background: globalFilter.color ? globalFilter.color : ''}\" -->\n </button>\n <label class=\"global-filters-label\"\n >\n <span [class]=\"globalFilter.errorMessage ? 'ng-invalid ng-dirty' : ''\"></span>\n <span *ngIf=\"globalFilter.prefix===true || globalFilter.prefix===undefined\">\n {{ globalFilter.labelText ? globalFilter.labelText : '' }}\n </span>\n {{\n startDate\n | date\n : (globalFilter.format ? globalFilter.format : 'MM/dd/yyyy')\n }}\n to\n {{\n endDate\n | date\n : (globalFilter.format ? globalFilter.format : 'MM/dd/yyyy')\n }}\n <span *ngIf=\"globalFilter.prefix===false\">\n {{ globalFilter.labelText ? globalFilter.labelText : ''}}\n </span></label\n >\n <button\n pButton\n type=\"button\"\n [disabled]=\"globalFilter.disabled\" \n class=\"custom-btn\"\n (click)=\"showNext(globalFilter)\"\n label=\"Next {{\n globalFilter.dayRange ? globalFilter.dayRange : 'Week'\n }} >>\"\n >\n <!-- [ngStyle]=\"{ background: globalFilter.color ? globalFilter.color : ''}\" -->\n </button>\n </div>\n <span *ngIf=\"globalFilter.errorMessage && globalFilter.errorMessage.length > 0\" class=\"error\">{{\n globalFilter.errorMessage\n }}</span>\n </div>\n </span>\n\n <!-- Checkbox Control -->\n <span [hidden]=\"globalFilter.hidden\">\n <div class=\"global-filters-filter-div\" *ngSwitchCase=\"fiterTypes.CHECKBOX\">\n <label class=\"\" for=\"basic\">{{ globalFilter.displayText }}\n <span *ngIf=\"globalFilter.requiredField\" class=\"required-star\">*</span>\n </label>\n <p-checkbox\n [class]=\"globalFilter.errorMessage ? 'ng-invalid ng-dirty': 'p-d-flex p-ai-center'\"\n [binary]=\"true\"\n (keyup.enter)=\"applyFilters()\"\n [(ngModel)]=\"globalFilter.value\"\n [disabled]=\"globalFilter.disabled\"\n (onChange)=\"onFocusOutEvent(globalFilter)\"\n (click)=\"onFocusOutEvent(globalFilter)\"\n ></p-checkbox>\n <span *ngIf=\"globalFilter.errorMessage && globalFilter.errorMessage.length > 0\" class=\"error\">{{\n globalFilter.errorMessage\n }}</span>\n </div>\n </span>\n\n <!-- Spacer Control -->\n <span *ngIf=\"!globalFilter.hidden\">\n <div\n class=\"global-filters-filter-div\"\n *ngSwitchCase=\"fiterTypes.SPACER\"\n >\n <span\n [class]=\"\n globalFilter.column\n ? 'p-col-' + globalFilter.column\n : ''\n \"\n ></span>\n </div>\n </span>\n\n <!-- Dropdown Control -->\n <span [hidden]=\"globalFilter.hidden\">\n <div class=\"global-filters-filter-div\" *ngSwitchCase=\"fiterTypes.DROPDOWN\">\n <label class=\"global-filters-label\" for=\"basic\">{{ globalFilter.displayText }}\n <span *ngIf=\"globalFilter.requiredField\" class=\"required-star\">*</span>\n </label>\n <p-dropdown\n [class]=\"globalFilter.errorMessage ? 'ng-invalid ng-dirty' : ''\"\n [(ngModel)]=\"globalFilter.value\"\n [name]=\"globalFilter.displayText\"\n [showClear]=\"true\"\n [styleClass]=\"globalFilter.field\"\n (keyup.Tab)=\"tabFocusEvent(globalFilter)\"\n [placeholder]=\"globalFilter.displayText\"\n [options]=\"globalFilter.data || []\"\n [optionLabel]=\"globalFilter.optionLabel\"\n [optionValue]=\"globalFilter.optionValue\"\n [filter]=\"globalFilter.allowSearch\"\n (onChange)=\"onFocusOutEvent(globalFilter)\"\n (keyup.enter)=\"applyFilters()\"\n [disabled]=\"globalFilter.disabled\"\n ></p-dropdown>\n <span *ngIf=\"globalFilter.errorMessage && globalFilter.errorMessage.length > 0\" class=\"error\">{{\n globalFilter.errorMessage\n }}</span>\n </div>\n </span>\n\n <!-- Input control -->\n <span [hidden]=\"globalFilter.hidden\">\n <div class=\"global-filters-filter-div\" *ngSwitchCase=\"fiterTypes.INPUT\">\n <label class=\"\" for=\"basic\">{{ globalFilter.displayText }}\n <span *ngIf=\"globalFilter.requiredField\" class=\"required-star\">*</span>\n </label>\n <div class=\"\">\n <input\n type=\"text\"\n pInputText\n [(ngModel)]=\"globalFilter.value\"\n [class]=\"globalFilter.errorMessage ? 'ng-invalid ng-dirty' : ''\"\n (keyup.enter)=\"applyFilters()\"\n (blur)=\"onFocusOutEvent(globalFilter)\"\n [disabled]=\"globalFilter.disabled\"\n class=\"form-control\"\n />\n <span *ngIf=\"globalFilter.filtering\">\n <se-filter-menu [globalFilter]=\"globalFilter\"></se-filter-menu>\n </span>\n </div>\n <span *ngIf=\"globalFilter.errorMessage && globalFilter.errorMessage.length > 0\" class=\"error\">{{\n globalFilter.errorMessage\n }}</span>\n </div>\n </span>\n\n <!-- NumericInput control -->\n <span [hidden]=\"globalFilter.hidden\">\n <div\n class=\"global-filters-filter-div\"\n *ngSwitchCase=\"fiterTypes.NUMERICINPUT\"\n >\n <label class=\"global-filters-label\" for=\"basic\">{{ globalFilter.displayText }}\n <span *ngIf=\"globalFilter.requiredField\" class=\"required-star\">*</span>\n </label>\n <div class=\"p-d-flex flex-nowrap align-items-center\">\n <input\n type=\"number\"\n pInputText\n [(ngModel)]=\"globalFilter.value\"\n [class]=\"globalFilter.errorMessage ? 'ng-invalid ng-dirty' : ''\"\n (keyup.enter)=\"applyFilters()\"\n (blur)=\"onFocusOutEvent(globalFilter)\"\n [disabled]=\"globalFilter.disabled\"\n class=\"form-control\"\n />\n <span *ngIf=\"globalFilter.filtering\">\n <se-filter-menu [globalFilter]=\"globalFilter\"></se-filter-menu>\n </span>\n </div>\n <span *ngIf=\"globalFilter.errorMessage && globalFilter.errorMessage.length > 0\" class=\"error\">{{\n globalFilter.errorMessage\n }}</span>\n </div>\n </span>\n \n <!-- Date Range Control -->\n <span [hidden]=\"globalFilter.hidden\">\n <div class=\"global-filters-filter-div\" *ngSwitchCase=\"fiterTypes.DATE_RANGE\">\n <label for=\"basic\">{{ globalFilter.displayText }}\n <span *ngIf=\"globalFilter.requiredField\" class=\"required-star\">*</span>\n </label>\n <div class=\"p-d-flex p-ai-center\">\n <p-calendar \n #rangeCalendar\n [showButtonBar]=\"true\"\n\n [inputId]=\"globalFilter.displayText\"\n [class]=\"globalFilter.errorMessage ? 'ng-invalid ng-dirty ' + globalFilter.displayText : 'p-flex-grow-1 p-mr-2 grow-1 ' + globalFilter.displayText\"\n [(ngModel)]=\"globalFilter.value\" \n selectionMode=\"range\" \n appendTo=\"body\"\n (onSelect)=\"selectDate(globalFilter, true)\"\n [dateFormat]=\"calendarFormat\"\n (onClose)=\"onFocusOutEvent(globalFilter)\"\n (onClickOutside)=\"setDateRangeFilterValue(globalFilter)\"\n (onBlur)=\"setDateRangeFilterValue(globalFilter)\"\n (keyup)=\"calendarFocusEvent(globalFilter, $event)\"\n (onClearClick)=\"clearDateRangeValue(globalFilter)\"\n [disabled]=\"globalFilter.disabled\"\n (keyup.enter)=\"applyFilters(true, globalFilter)\"\n \n ></p-calendar>\n <!-- todayButtonStyleClass=\"p-d-none\"\n clearButtonStyleClass=\"p-ml-auto\" -->\n <span *ngIf=\"globalFilter.filtering\">\n <se-filter-menu [globalFilter]=\"globalFilter\"></se-filter-menu>\n </span>\n </div>\n <span *ngIf=\"globalFilter.errorMessage && globalFilter.errorMessage.length > 0\" class=\"error\">{{\n globalFilter.errorMessage\n }}</span>\n </div>\n </span>\n\n <!-- Numeric Range control -->\n <span [hidden]=\"globalFilter.hidden\">\n <div\n class=\"global-filters-filter-div\"\n *ngSwitchCase=\"fiterTypes.NUMERIC_RANGE\"\n >\n <label for=\"basic\">{{ globalFilter.displayText }}\n <span *ngIf=\"globalFilter.requiredField\" class=\"required-star\">*</span>\n </label>\n <div class=\"p-d-flex\">\n <div class=\"p-d-flex flex-nowrap align-items-center p-mr-2\">\n <p-inputNumber\n [showButtons]=\"false\"\n [(ngModel)]=\"globalFilter.value\"\n [minFractionDigits]=\"globalFilter?.format?.type === 'decimal' ? globalFilter.format?.formatParams?.digitsInfo ? globalFilter.format?.formatParams?.digitsInfo : '2' : '0'\"\n [maxFractionDigits]=\"globalFilter?.format?.type === 'decimal' ? globalFilter.format?.formatParams?.digitsInfo ? globalFilter.format?.formatParams?.digitsInfo : '2' : '0'\"\n (onBlur)=\"setNumericRangeValueFrom(globalFilter)\"\n (keyup.enter)=\"setNumericRangeValueFrom(globalFilter,true)\"\n [class]=\"globalFilter.errorMessage ? 'ng-invalid ng-dirty' : 'flex-grow-1 grow-1 input-number'\"\n [disabled]=\"globalFilter.disabled\"\n >\n </p-inputNumber>\n <span *ngIf=\"globalFilter.errorMessage && globalFilter.errorMessage.length > 0\" class=\"error\">{{\n globalFilter.errorMessage\n }}</span>\n </div>\n <span class=\"to-numeric\">To</span>\n <div class=\"p-d-flex flex-nowrap align-items-center\">\n <p-inputNumber\n [showButtons]=\"false\"\n [(ngModel)]=\"globalFilter.valueTwo\"\n [minFractionDigits]=\"globalFilter?.format?.type === 'decimal' ? globalFilter.format?.formatParams?.digitsInfo ? globalFilter.format?.formatParams?.digitsInfo : '2' : '0'\"\n [maxFractionDigits]=\"globalFilter?.format?.type === 'decimal' ? globalFilter.format?.formatParams?.digitsInfo ? globalFilter.format?.formatParams?.digitsInfo : '2' : '0'\"\n [class]=\"globalFilter.errorMessage ? 'ng-invalid ng-dirty' : 'flex-grow-1 p-mr-2 grow-1 input-number'\"\n (onBlur)=\"setNumericRangeValueTwo(globalFilter)\"\n (keyup.enter)=\"setNumericRangeValueTwo(globalFilter,true)\"\n [disabled]=\"globalFilter.disabled\"\n >\n </p-inputNumber>\n <span *ngIf=\"globalFilter.filtering\">\n <se-filter-menu [globalFilter]=\"globalFilter\"></se-filter-menu>\n </span>\n </div>\n </div>\n <span *ngIf=\"globalFilter.errorMessage && globalFilter.errorMessage.length > 0\" class=\"error\">{{\n globalFilter.errorMessage\n }}</span>\n </div>\n </span>\n\n <!-- MultiSelect control -->\n <span [hidden]=\"globalFilter.hidden\">\n <div\n class=\"global-filters-filter-div\"\n *ngSwitchCase=\"fiterTypes.MULTISELECT\"\n >\n <label class=\"\" for=\"basic\">{{ globalFilter.displayText }}\n <span *ngIf=\"globalFilter.requiredField\" class=\"required-star\">*</span>\n </label>\n <p-multiSelect\n [class]=\"globalFilter.errorMessage ? 'ng-invalid ng-dirty' : ''\"\n [(ngModel)]=\"globalFilter.value\"\n [options]=\"globalFilter.data\"\n optionLabel=\"label\"\n (keyup.enter)=\"applyFilters()\"\n (onChange)=\"onFocusOutEvent(globalFilter)\"\n optionValue=\"value\"\n [appendTo]=\"'body'\"\n [disabled]=\"globalFilter.disabled\"\n ></p-multiSelect>\n <span *ngIf=\"globalFilter.errorMessage && globalFilter.errorMessage.length > 0\" class=\"error\">{{\n globalFilter.errorMessage\n }}</span>\n </div>\n </span>\n\n <!-- Lookup Control Field -->\n <span [hidden]=\"globalFilter.hidden\">\n <div\n class=\"global-filters-filter-div\"\n *ngSwitchCase=\"fiterTypes.LOOKUP_INPUT\"\n >\n <label class=\"global-filters-label\" for=\"basic\">{{ globalFilter.displayText }}\n <span *ngIf=\"globalFilter.requiredField\" class=\"required-star\">*</span>\n </label>\n <div> \n <input\n [class]=\"globalFilter.errorMessage ? 'ng-invalid ng-dirty' : ''\"\n [id]=\"globalFilter.field\"\n type=\"text\"\n pInputText\n [(ngModel)]=\"globalFilter?.valueTwo?.text ? globalFilter.valueTwo.text : globalFilter.value\"\n (blur)=\"onFocusOutEvent(globalFilter)\"\n [name]=\"globalFilter.field\"\n (keyup.enter)=\"applyFilters()\"\n (click)=\"selectLookupField(globalFilter)\"\n [disabled]=\"globalFilter.disabled\"\n class=\"form-control\"\n />\n <span class=\"p-input-icon-right global-filter\">\n <i class=\"pi pi-chevron-right lookup-input-icon global-filter\"></i>\n </span>\n </div>\n <span *ngIf=\"globalFilter.errorMessage && globalFilter.errorMessage.length > 0\" class=\"error\">{{\n globalFilter.errorMessage\n }}</span>\n </div>\n </span>\n </div>\n </div>\n</div>\n\n<!-- Apply button -->\n\n<button\n*ngIf=\"searchGlobalFilterBtn\"\npButton\ntype=\"button\"\nicon=\"pi pi-search\"\nid=\"globalSearchbtn\"\n(click)=\"applyFilters()\"\nclass=\"global-search align-globalFilter-btn global-btn\"\n></button>\n\n<!-- Close button -->\n<button\n*ngIf=\"clearGlobalFilterBtn\"\npButton\nid=\"clearGlobalFilterBtn\"\ntype=\"button\"\nicon=\"pi pi-replay\"\n(click)=\"clearFilters()\"\n[class]=\"hideClearFilterBtn ? 'align-globalFilter-btn' : 'hide-Global-clear-filter-button'\"\n></button>\n",
|
|
450
|
+
template: "<div class=\"global-filters-component-wrapper-div\">\n <div\n [class]=\"globalFilter.hidden ? 'globalFilterHidden' : globalFilter.column ? 'p-col-' + globalFilter.column : 'p-col-3'\"\n *ngFor=\"let globalFilter of globalFilters\"\n >\n <div [ngSwitch]=\"globalFilter.type\">\n <!-- Calender control -->\n <span [hidden]=\"globalFilter.hidden\">\n <div class=\"global-filters-filter-div\" *ngSwitchCase=\"fiterTypes.CALENDAR\">\n <label class=\"global-filters-label\" for=\"basic\">{{ globalFilter.displayText }}\n <span *ngIf=\"globalFilter.requiredField\" class=\"required-star\">*</span>\n </label>\n <div class=\"p-d-flex p-ai-center\">\n <p-calendar\n [class]=\"globalFilter.errorMessage ? 'ng-invalid ng-dirty ' + globalFilter.displayText: 'p-flex-grow-1 p-mr-2 grow-1 ' + globalFilter.displayText\"\n [placeholder]=\"'Select-Date'\"\n [(ngModel)]=\"globalFilter.value\"\n (keyup.enter)=\"applyFilters()\"\n (onSelect)=\"selectDate(globalFilter, true)\"\n [inputId]=\"globalFilter.field\"\n [dateFormat]=\"calendarFormat\"\n (onClose)=\"onFocusOutEvent(globalFilter)\"\n appendTo=\"body\"\n [showButtonBar]=\"true\"\n [disabled]=\"globalFilter.disabled\"\n (keyup)=\"calendarFocusEvent(globalFilter)\"\n >\n </p-calendar>\n <span *ngIf=\"globalFilter.filtering\">\n <se-filter-menu [globalFilter]=\"globalFilter\"></se-filter-menu>\n </span>\n </div>\n <span *ngIf=\"globalFilter.errorMessage && globalFilter.errorMessage.length > 0\" class=\"error\">{{\n globalFilter.errorMessage\n }}</span>\n </div>\n </span>\n\n <!-- Calender Range -->\n <span [hidden]=\"globalFilter.hidden\">\n <div\n class=\"global-filters-filter-div\"\n *ngSwitchCase=\"fiterTypes.CALENDAR_RANGE\"\n >\n <label class=\"\" for=\"basic\">{{ globalFilter.displayText }}\n <span *ngIf=\"globalFilter.requiredField\" class=\"required-star\">*</span>\n </label>\n <div class=\"p-d-flex p-ai-center\">\n <button\n pButton\n type=\"button\"\n [disabled]=\"globalFilter.disabled\" \n class=\"custom-btn\"\n (click)=\"showPrevious(globalFilter)\"\n label=\"Previous {{\n globalFilter.dayRange ? globalFilter.dayRange : 'Week'\n }} <<\"\n >\n <!-- [ngStyle]=\"{ background: globalFilter.color ? globalFilter.color : ''}\" -->\n </button>\n <label class=\"global-filters-label\"\n >\n <span [class]=\"globalFilter.errorMessage ? 'ng-invalid ng-dirty' : ''\"></span>\n <span *ngIf=\"globalFilter.prefix===true || globalFilter.prefix===undefined\">\n {{ globalFilter.labelText ? globalFilter.labelText : '' }}\n </span>\n {{\n startDate\n | date\n : (globalFilter.format ? globalFilter.format : 'MM/dd/yyyy')\n }}\n to\n {{\n endDate\n | date\n : (globalFilter.format ? globalFilter.format : 'MM/dd/yyyy')\n }}\n <span *ngIf=\"globalFilter.prefix===false\">\n {{ globalFilter.labelText ? globalFilter.labelText : ''}}\n </span></label\n >\n <button\n pButton\n type=\"button\"\n [disabled]=\"globalFilter.disabled\" \n class=\"custom-btn\"\n (click)=\"showNext(globalFilter)\"\n label=\"Next {{\n globalFilter.dayRange ? globalFilter.dayRange : 'Week'\n }} >>\"\n >\n <!-- [ngStyle]=\"{ background: globalFilter.color ? globalFilter.color : ''}\" -->\n </button>\n </div>\n <span *ngIf=\"globalFilter.errorMessage && globalFilter.errorMessage.length > 0\" class=\"error\">{{\n globalFilter.errorMessage\n }}</span>\n </div>\n </span>\n\n <!-- Checkbox Control -->\n <span [hidden]=\"globalFilter.hidden\">\n <div class=\"global-filters-filter-div\" *ngSwitchCase=\"fiterTypes.CHECKBOX\">\n <label class=\"\" for=\"basic\">{{ globalFilter.displayText }}\n <span *ngIf=\"globalFilter.requiredField\" class=\"required-star\">*</span>\n </label>\n <p-checkbox\n [class]=\"globalFilter.errorMessage ? 'ng-invalid ng-dirty': 'p-d-flex p-ai-center'\"\n [binary]=\"true\"\n (keyup.enter)=\"applyFilters()\"\n [(ngModel)]=\"globalFilter.value\"\n [disabled]=\"globalFilter.disabled\"\n (onChange)=\"onFocusOutEvent(globalFilter)\"\n (click)=\"onFocusOutEvent(globalFilter)\"\n ></p-checkbox>\n <span *ngIf=\"globalFilter.errorMessage && globalFilter.errorMessage.length > 0\" class=\"error\">{{\n globalFilter.errorMessage\n }}</span>\n </div>\n </span>\n\n <!-- Spacer Control -->\n <span *ngIf=\"!globalFilter.hidden\">\n <div\n class=\"global-filters-filter-div\"\n *ngSwitchCase=\"fiterTypes.SPACER\"\n >\n <span\n [class]=\"\n globalFilter.column\n ? 'p-col-' + globalFilter.column\n : ''\n \"\n ></span>\n </div>\n </span>\n\n <!-- Dropdown Control -->\n <span [hidden]=\"globalFilter.hidden\">\n <div class=\"global-filters-filter-div\" *ngSwitchCase=\"fiterTypes.DROPDOWN\">\n <label class=\"global-filters-label\" for=\"basic\">{{ globalFilter.displayText }}\n <span *ngIf=\"globalFilter.requiredField\" class=\"required-star\">*</span>\n </label>\n <p-dropdown\n [class]=\"globalFilter.errorMessage ? 'ng-invalid ng-dirty' : ''\"\n [(ngModel)]=\"globalFilter.value\"\n [name]=\"globalFilter.displayText\"\n [showClear]=\"true\"\n [styleClass]=\"globalFilter.field\"\n (keyup.Tab)=\"tabFocusEvent(globalFilter)\"\n [placeholder]=\"globalFilter.displayText\"\n [options]=\"globalFilter.data || []\"\n [optionLabel]=\"globalFilter.optionLabel\"\n [optionValue]=\"globalFilter.optionValue\"\n [filter]=\"globalFilter.allowSearch\"\n (onChange)=\"onFocusOutEvent(globalFilter)\"\n (keyup.enter)=\"applyFilters()\"\n [disabled]=\"globalFilter.disabled\"\n ></p-dropdown>\n <span *ngIf=\"globalFilter.errorMessage && globalFilter.errorMessage.length > 0\" class=\"error\">{{\n globalFilter.errorMessage\n }}</span>\n </div>\n </span>\n\n <!-- Input control -->\n <span [hidden]=\"globalFilter.hidden\">\n <div class=\"global-filters-filter-div\" *ngSwitchCase=\"fiterTypes.INPUT\">\n <label class=\"\" for=\"basic\">{{ globalFilter.displayText }}\n <span *ngIf=\"globalFilter.requiredField\" class=\"required-star\">*</span>\n </label>\n <div class=\"\">\n <input\n type=\"text\"\n pInputText\n [(ngModel)]=\"globalFilter.value\"\n [class]=\"globalFilter.errorMessage ? 'ng-invalid ng-dirty' : ''\"\n (keyup.enter)=\"applyFilters()\"\n (blur)=\"onFocusOutEvent(globalFilter)\"\n [disabled]=\"globalFilter.disabled\"\n class=\"form-control\"\n />\n <span *ngIf=\"globalFilter.filtering\">\n <se-filter-menu [globalFilter]=\"globalFilter\"></se-filter-menu>\n </span>\n </div>\n <span *ngIf=\"globalFilter.errorMessage && globalFilter.errorMessage.length > 0\" class=\"error\">{{\n globalFilter.errorMessage\n }}</span>\n </div>\n </span>\n\n <!-- NumericInput control -->\n <span [hidden]=\"globalFilter.hidden\">\n <div\n class=\"global-filters-filter-div\"\n *ngSwitchCase=\"fiterTypes.NUMERICINPUT\"\n >\n <label class=\"global-filters-label\" for=\"basic\">{{ globalFilter.displayText }}\n <span *ngIf=\"globalFilter.requiredField\" class=\"required-star\">*</span>\n </label>\n <div class=\"p-d-flex flex-nowrap align-items-center\">\n <input\n type=\"number\"\n pInputText\n [(ngModel)]=\"globalFilter.value\"\n [class]=\"globalFilter.errorMessage ? 'ng-invalid ng-dirty' : ''\"\n (keyup.enter)=\"applyFilters()\"\n (blur)=\"onFocusOutEvent(globalFilter)\"\n [disabled]=\"globalFilter.disabled\"\n class=\"form-control\"\n />\n <span *ngIf=\"globalFilter.filtering\">\n <se-filter-menu [globalFilter]=\"globalFilter\"></se-filter-menu>\n </span>\n </div>\n <span *ngIf=\"globalFilter.errorMessage && globalFilter.errorMessage.length > 0\" class=\"error\">{{\n globalFilter.errorMessage\n }}</span>\n </div>\n </span>\n \n <!-- Date Range Control -->\n <span [hidden]=\"globalFilter.hidden\">\n <div class=\"global-filters-filter-div\" *ngSwitchCase=\"fiterTypes.DATE_RANGE\">\n <label for=\"basic\">{{ globalFilter.displayText }}\n <span *ngIf=\"globalFilter.requiredField\" class=\"required-star\">*</span>\n </label>\n <div class=\"p-d-flex p-ai-center\">\n <p-calendar \n #rangeCalendar\n [showButtonBar]=\"true\"\n\n [inputId]=\"globalFilter.displayText\"\n [class]=\"globalFilter.errorMessage ? 'ng-invalid ng-dirty ' + globalFilter.displayText : 'p-flex-grow-1 p-mr-2 grow-1 ' + globalFilter.displayText\"\n [(ngModel)]=\"globalFilter.value\" \n selectionMode=\"range\" \n appendTo=\"body\"\n (onSelect)=\"selectDate(globalFilter, true)\"\n [dateFormat]=\"calendarFormat\"\n (onClose)=\"onFocusOutEvent(globalFilter)\"\n (onClickOutside)=\"setDateRangeFilterValue(globalFilter)\"\n (onBlur)=\"setDateRangeFilterValue(globalFilter)\"\n (keyup)=\"calendarFocusEvent(globalFilter, $event)\"\n (onClearClick)=\"clearDateRangeValue(globalFilter)\"\n [disabled]=\"globalFilter.disabled\"\n (keyup.enter)=\"applyFilters(true, globalFilter)\"\n \n ></p-calendar>\n <!-- todayButtonStyleClass=\"p-d-none\"\n clearButtonStyleClass=\"p-ml-auto\" -->\n <span *ngIf=\"globalFilter.filtering\">\n <se-filter-menu [globalFilter]=\"globalFilter\"></se-filter-menu>\n </span>\n </div>\n <span *ngIf=\"globalFilter.errorMessage && globalFilter.errorMessage.length > 0\" class=\"error\">{{\n globalFilter.errorMessage\n }}</span>\n </div>\n </span>\n\n <!-- Numeric Range control -->\n <span [hidden]=\"globalFilter.hidden\">\n <div\n class=\"global-filters-filter-div\"\n *ngSwitchCase=\"fiterTypes.NUMERIC_RANGE\"\n >\n <label for=\"basic\">{{ globalFilter.displayText }}\n <span *ngIf=\"globalFilter.requiredField\" class=\"required-star\">*</span>\n </label>\n <div class=\"p-d-flex\">\n <div class=\"p-d-flex flex-nowrap align-items-center p-mr-2\">\n <p-inputNumber\n [showButtons]=\"false\"\n [(ngModel)]=\"globalFilter.value\"\n [minFractionDigits]=\"globalFilter?.format?.type === 'decimal' ? globalFilter.format?.formatParams?.digitsInfo ? globalFilter.format?.formatParams?.digitsInfo : '2' : '0'\"\n [maxFractionDigits]=\"globalFilter?.format?.type === 'decimal' ? globalFilter.format?.formatParams?.digitsInfo ? globalFilter.format?.formatParams?.digitsInfo : '2' : '0'\"\n (onBlur)=\"setNumericRangeValueFrom(globalFilter)\"\n (keyup.enter)=\"setNumericRangeValueFrom(globalFilter,true)\"\n [class]=\"globalFilter.errorMessage ? 'ng-invalid ng-dirty' : 'flex-grow-1 grow-1 input-number'\"\n [disabled]=\"globalFilter.disabled\"\n >\n </p-inputNumber>\n <span *ngIf=\"globalFilter.errorMessage && globalFilter.errorMessage.length > 0\" class=\"error\">{{\n globalFilter.errorMessage\n }}</span>\n </div>\n <span class=\"to-numeric p-mr-2\">To</span>\n <div class=\"p-d-flex flex-nowrap align-items-center\">\n <p-inputNumber\n [showButtons]=\"false\"\n [(ngModel)]=\"globalFilter.valueTwo\"\n [minFractionDigits]=\"globalFilter?.format?.type === 'decimal' ? globalFilter.format?.formatParams?.digitsInfo ? globalFilter.format?.formatParams?.digitsInfo : '2' : '0'\"\n [maxFractionDigits]=\"globalFilter?.format?.type === 'decimal' ? globalFilter.format?.formatParams?.digitsInfo ? globalFilter.format?.formatParams?.digitsInfo : '2' : '0'\"\n [class]=\"globalFilter.errorMessage ? 'ng-invalid ng-dirty' : 'flex-grow-1 p-mr-2 grow-1 input-number'\"\n (onBlur)=\"setNumericRangeValueTwo(globalFilter)\"\n (keyup.enter)=\"setNumericRangeValueTwo(globalFilter,true)\"\n [disabled]=\"globalFilter.disabled\"\n >\n </p-inputNumber>\n <span *ngIf=\"globalFilter.filtering\">\n <se-filter-menu [globalFilter]=\"globalFilter\"></se-filter-menu>\n </span>\n </div>\n </div>\n <span *ngIf=\"globalFilter.errorMessage && globalFilter.errorMessage.length > 0\" class=\"error\">{{\n globalFilter.errorMessage\n }}</span>\n </div>\n </span>\n\n <!-- MultiSelect control -->\n <span [hidden]=\"globalFilter.hidden\">\n <div\n class=\"global-filters-filter-div\"\n *ngSwitchCase=\"fiterTypes.MULTISELECT\"\n >\n <label class=\"\" for=\"basic\">{{ globalFilter.displayText }}\n <span *ngIf=\"globalFilter.requiredField\" class=\"required-star\">*</span>\n </label>\n <p-multiSelect\n [class]=\"globalFilter.errorMessage ? 'ng-invalid ng-dirty' : ''\"\n [(ngModel)]=\"globalFilter.value\"\n [options]=\"globalFilter.data\"\n optionLabel=\"label\"\n (keyup.enter)=\"applyFilters()\"\n (onChange)=\"onFocusOutEvent(globalFilter)\"\n optionValue=\"value\"\n [appendTo]=\"'body'\"\n [disabled]=\"globalFilter.disabled\"\n ></p-multiSelect>\n <span *ngIf=\"globalFilter.errorMessage && globalFilter.errorMessage.length > 0\" class=\"error\">{{\n globalFilter.errorMessage\n }}</span>\n </div>\n </span>\n\n <!-- Lookup Control Field -->\n <span [hidden]=\"globalFilter.hidden\">\n <div\n class=\"global-filters-filter-div\"\n *ngSwitchCase=\"fiterTypes.LOOKUP_INPUT\"\n >\n <label class=\"global-filters-label\" for=\"basic\">{{ globalFilter.displayText }}\n <span *ngIf=\"globalFilter.requiredField\" class=\"required-star\">*</span>\n </label>\n <div> \n <input\n [class]=\"globalFilter.errorMessage ? 'ng-invalid ng-dirty' : ''\"\n [id]=\"globalFilter.field\"\n type=\"text\"\n pInputText\n [(ngModel)]=\"globalFilter?.valueTwo?.text ? globalFilter.valueTwo.text : globalFilter.value\"\n (blur)=\"onFocusOutEvent(globalFilter)\"\n [name]=\"globalFilter.field\"\n (keyup.enter)=\"applyFilters()\"\n (click)=\"selectLookupField(globalFilter)\"\n [disabled]=\"globalFilter.disabled\"\n class=\"form-control lookup-input\"\n />\n <span class=\"p-input-icon-right global-filter\">\n <i class=\"pi pi-chevron-right lookup-input-icon global-filter\"></i>\n </span>\n </div>\n <span *ngIf=\"globalFilter.errorMessage && globalFilter.errorMessage.length > 0\" class=\"error\">{{\n globalFilter.errorMessage\n }}</span>\n </div>\n </span>\n </div>\n </div>\n</div>\n\n<!-- Apply button -->\n\n<button\n*ngIf=\"searchGlobalFilterBtn\"\npButton\ntype=\"button\"\nicon=\"pi pi-search\"\nid=\"globalSearchbtn\"\n(click)=\"applyFilters()\"\nclass=\"global-search align-globalFilter-btn global-btn\"\n></button>\n\n<!-- Close button -->\n<button\n*ngIf=\"clearGlobalFilterBtn\"\npButton\nid=\"clearGlobalFilterBtn\"\ntype=\"button\"\nicon=\"pi pi-replay\"\n(click)=\"clearFilters()\"\n[class]=\"hideClearFilterBtn ? 'align-globalFilter-btn' : 'hide-Global-clear-filter-button'\"\n></button>\n",
|
|
451
451
|
styles: [":host ::ng-deep .input-number .p-inputnumber-button-group{visibility:hidden}:host ::ng-deep .input-number:hover .p-inputnumber-button-group{visibility:visible}.error{color:red}.hide-Global-clear-filter-button{display:none}\n"]
|
|
452
452
|
},] }
|
|
453
453
|
];
|
|
@@ -469,4 +469,4 @@ SeGlobalFilterComponent.propDecorators = {
|
|
|
469
469
|
filtersApplied: [{ type: Output }],
|
|
470
470
|
activeTestMode: [{ type: Input }]
|
|
471
471
|
};
|
|
472
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2xvYmFsLWZpbHRlcnMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2UtdWktdG9vbGtpdC9zcmMvbGliL2NvbXBvbmVudHMvc2hhcmVkL2dsb2JhbC1maWx0ZXJzL2dsb2JhbC1maWx0ZXJzLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxRQUFRLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoSCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsbUJBQW1CLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDN0YsT0FBTyxFQUVMLHFCQUFxQixFQUNyQixlQUFlLEVBRWYsU0FBUyxFQUNULGdCQUFnQixHQUNqQixNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUMvRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFPN0QsTUFBTSxPQUFPLHVCQUF1QjtJQW1CbEMsWUFDUyxRQUFrQixFQUNOLEdBQXFCLEVBQ3JCLE1BQTJCLEVBQ3RDLFdBQXdCLEVBQ3pCLGFBQTRCLEVBQzNCLFlBQTBCLEVBQzFCLEVBQWM7UUFOZixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ04sUUFBRyxHQUFILEdBQUcsQ0FBa0I7UUFDckIsV0FBTSxHQUFOLE1BQU0sQ0FBcUI7UUFDdEMsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDekIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDM0IsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQXhCZixrQkFBYSxH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O1lBQ1QsTUFBQSxRQUFRLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsMENBQUUsS0FBSyxFQUFFLENBQUM7U0FDdEQ7SUFDSCxDQUFDO0lBQ0QsYUFBYSxDQUFDLFlBQWlCO1FBQzdCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FDbkQsR0FBRyxHQUFDLFlBQVksQ0FBQyxLQUFLLENBQ3ZCLENBQUM7UUFDRixJQUFJLFNBQVMsRUFBRTtZQUNiLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUNuQjtJQUNILENBQUM7OztZQWpnQkYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxtQkFBbUI7Z0JBQzdCLHNsaUJBQThDOzthQUUvQzs7OztZQWxCUSxRQUFRO1lBRVIsZ0JBQWdCLHVCQXNDcEIsUUFBUTtZQXRDYyxtQkFBbUIsdUJBdUN6QyxRQUFRO1lBN0JKLFdBQVc7WUFWNEIsYUFBYTtZQVNwRCxZQUFZO1lBVkQsVUFBVTs7O3lCQW1CM0IsU0FBUyxTQUFDLGVBQWU7NEJBQ3pCLEtBQUs7b0NBQ0wsS0FBSzttQ0FDTCxLQUFLOzZCQUNMLE1BQU07NkJBQ04sS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPcHRpb25hbCwgT3V0cHV0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IER5bmFtaWNEaWFsb2dSZWYsIER5bmFtaWNEaWFsb2dDb25maWcsIERpYWxvZ1NlcnZpY2UgfSBmcm9tICdwcmltZW5nL2R5bmFtaWNkaWFsb2cnO1xuaW1wb3J0IHtcbiAgSUdsb2JhbEZpbHRlcixcbiAgR3JpZEZpbHRlckNvbnRyb2xUeXBlLFxuICBFR3JpZENvbHVtblR5cGUsXG4gIGFkZEdsb2JhbEZpbHRlcixcbiAgRURheVJhbmdlLFxuICBFRmlsdGVyVmFsaWRhdG9yLFxufSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZ3JpZC5tb2RlbCc7XG5pbXBvcnQgeyBBbGVydFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9hbGVydC5zZXJ2aWNlJztcbmltcG9ydCB7IEdyaWRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZ3JpZC5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2UtZ2xvYmFsLWZpbHRlcnMnLFxuICB0ZW1wbGF0ZVVybDogJy4vZ2xvYmFsLWZpbHRlcnMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9nbG9iYWwtZmlsdGVycy5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBTZUdsb2JhbEZpbHRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBWaWV3Q2hpbGQoJ3JhbmdlQ2FsZW5kYXInKSBkYXRlUGlja2VyOiBhbnk7XG4gIEBJbnB1dCgpIGdsb2JhbEZpbHRlcnM6IElHbG9iYWxGaWx0ZXJbXSA9IFtdO1xuICBASW5wdXQoKSBzZWFyY2hHbG9iYWxGaWx0ZXJCdG46IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKSBjbGVhckdsb2JhbEZpbHRlckJ0bjogYm9vbGVhbiA9IHRydWU7XG4gIEBPdXRwdXQoKSBmaWx0ZXJzQXBwbGllZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBJbnB1dCgpIHNldCBhY3RpdmVUZXN0TW9kZSAodmFsOmFueSkgeyBpZih2YWwgPT09IHRydWUpIHsgZGVidWdnZXIgfX1cblxuICBwdWJsaWMgZml0ZXJUeXBlcyA9IEdyaWRGaWx0ZXJDb250cm9sVHlwZTtcbiAgcHVibGljIGNvbHVtblR5cGUgPSBFR3JpZENvbHVtblR5cGU7XG4gIHB1YmxpYyBzaG93RGlhbG9nOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBzdGFydERhdGU6IERhdGU7XG4gIHB1YmxpYyBlbmREYXRlOiBEYXRlO1xuXG4gIHNob3dJbnB1dDogYm9vbGVhbiA9IGZhbHNlO1xuICBmaWx0ZXI6IGFueSA9ICcnO1xuICBoaWRlQ2xlYXJGaWx0ZXJCdG46IGJvb2xlYW4gPSB0cnVlO1xuICBjYWxlbmRhckZvcm1hdDpzdHJpbmcgPSAnbW0vZGQveXknO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBkYXRlcGlwZTogRGF0ZVBpcGUsXG4gICAgQE9wdGlvbmFsKCkgcHVibGljIHJlZjogRHluYW1pY0RpYWxvZ1JlZixcbiAgICBAT3B0aW9uYWwoKSBwdWJsaWMgY29uZmlnOiBEeW5hbWljRGlhbG9nQ29uZmlnLFxuICAgIHByaXZhdGUgZ3JpZFNlcnZpY2U6IEdyaWRTZXJ2aWNlLFxuICAgIHB1YmxpYyBkaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWxlcnRTZXJ2aWNlOiBBbGVydFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBlbDogRWxlbWVudFJlZixcbiAgKSB7IH1cblxuICAvKipcbiAgICogQXNzaWdubWVudCBvZiBzZWxlY3RlZCBjb2x1bW5zIG9uIHBhZ2UgbG9hZFxuICAgKi9cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYodGhpcy5jb25maWcgJiYgdGhpcy5jb25maWcuZGF0YSl7XG4gICAgICB0aGlzLnNob3dEaWFsb2cgPSB0aGlzLmNvbmZpZy5kYXRhLm9wZW5EaWFsb2c7XG4gICAgICBpZih0aGlzLmNvbmZpZy5kYXRhLmdsb2JhbEZpbHRlcnMpe1xuICAgICAgICB0aGlzLmdsb2JhbEZpbHRlcnMgPSB0aGlzLmNvbmZpZz8uZGF0YS5nbG9iYWxGaWx0ZXJzIGFzIElHbG9iYWxGaWx0ZXJbXTtcbiAgICAgIH1cbiAgICAgXG4gICAgICAvLyBzZXQgQnkgRGVmdWFsdCBDYWxlbmRlciBSYW5nZVxuICAgICAgdGhpcy5zZXREZWZ1YWx0Q2FsZW5kYXJSYW5nZShmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgLy8gc3BsaXRpbmcgZGF0ZSByYW5nZSB2YWx1ZSBhbmQgYXNzaWduIHRvIHZhbHVlIGFuZCB2YWx1ZVR3byBpbiBEYXRlX1JhbmdlIENvbnRyb2xcbiAgICAgIGNvbnN0IGRhdGVSYW5nZUZpbHRlciA9IHRoaXMuZ2xvYmFsRmlsdGVycy5maWx0ZXIoKGZpbHRlcik9PiBmaWx0ZXIudHlwZSA9PT0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLkRBVEVfUkFOR0UpOyBcbiAgICAgIGRhdGVSYW5nZUZpbHRlcj8uZm9yRWFjaCgoZGF0ZVJhbmdlKT0+e1xuICAgICAgaWYoZGF0ZVJhbmdlLnZhbHVlICYmIGRhdGVSYW5nZS52YWx1ZVR3byl7XG4gICAgICAgIGlmKHR5cGVvZihkYXRlUmFuZ2UudmFsdWUpPT09J29iamVjdCcpe1xuICAgICAgICAgIGRhdGVSYW5nZS52YWx1ZT1kYXRlUmFuZ2UudmFsdWUudG9Mb2NhbGVEYXRlU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYodHlwZW9mKGRhdGVSYW5nZS52YWx1ZVR3byk9PT0nb2JqZWN0Jyl7XG4gICAgICAgICAgZGF0ZVJhbmdlLnZhbHVlVHdvPWRhdGVSYW5nZS52YWx1ZVR3by50b0xvY2FsZURhdGVTdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgICBkYXRlUmFuZ2UudmFsdWUgPSAoZGF0ZVJhbmdlLnZhbHVlICsgXCItXCIgKyBkYXRlUmFuZ2UudmFsdWVUd28pPy50b1N0cmluZygpPy5zcGxpdCgnLScpOyBcbiAgICAgICAgdGhpcy5zZXREYXRlUmFuZ2VGaWx0ZXJWYWx1ZShkYXRlUmFuZ2UpO1xuICAgICAgfSBlbHNlIGlmKGRhdGVSYW5nZS52YWx1ZSAmJiAhZGF0ZVJhbmdlLnZhbHVlVHdvKXtcbiAgICAgICAgdGhpcy5tYXRjaFNhbWVGaWVsZHMoZGF0ZVJhbmdlLmZyb21GaWVsZCxkYXRlUmFuZ2UudmFsdWUsJ2d0ZScpO1xuICAgICAgfSBlbHNlIGlmKCFkYXRlUmFuZ2UudmFsdWUgJiYgZGF0ZVJhbmdlLnZhbHVlVHdvKXtcbiAgICAgICAgdGhpcy5tYXRjaFNhbWVGaWVsZHMoZGF0ZVJhbmdlLmZyb21GaWVsZCxkYXRlUmFuZ2UudmFsdWVUd28sJ2d0ZScpO1xuICAgICAgfVxuICAgICAgfSlcbiAgICAgIC8vIEZpbHRyaW5nIE51bWVyaWMgUmFuZ2UgY29udHJvbHMgb24gZ2xvYmFsIGZpbHRlciBcbiAgICAgIGNvbnN0IG51bWVyUmFuZ2VGaWx0ZXIgPSB0aGlzLmdsb2JhbEZpbHRlcnMuZmlsdGVyKChmaWx0ZXIpPT4gZmlsdGVyLnR5cGUgPT09IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5OVU1FUklDX1JBTkdFKTtcbiAgICAgIG51bWVyUmFuZ2VGaWx0ZXIuZm9yRWFjaCgobnVtZXJpY1JhbmdlKSA9PntcbiAgICAgICAgaWYobnVtZXJpY1JhbmdlKXtcbiAgICAgICAgdGhpcy5zZXROdW1lcmljUmFuZ2VWYWx1ZUZyb20obnVtZXJpY1JhbmdlKTtcbiAgICAgICAgdGhpcy5zZXROdW1lcmljUmFuZ2VWYWx1ZVR3byhudW1lcmljUmFuZ2UpO1xuICAgICAgfVxuICAgICAgfSlcbiAgICAgIGlmKCEodGhpcy5nbG9iYWxGaWx0ZXJzLnNvbWUoKGZpbHRlcik9PiBmaWx0ZXIudHlwZSA9PT0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLkNBTEVOREFSX1JBTkdFKSkgJiZcbiAgICAgICAodGhpcy5nbG9iYWxGaWx0ZXJzLnNvbWUoKGZpbHRlcik9PiBmaWx0ZXIudmFsdWUpKVxuICAgICAgICl7XG4gICAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzKGZhbHNlKTtcbiAgICAgIH1cbiAgICB9LCA1MDApO1xuICB9XG5cbiAgc2V0RGF0ZVJhbmdlRmlsdGVyVmFsdWUoZGF0ZVJhbmdlKXtcbiAgICBpZihkYXRlUmFuZ2U/LnZhbHVlPy5sZW5ndGggPiAxKXtcbiAgICAgIGRhdGVSYW5nZS52YWx1ZVswXSA9IG5ldyBEYXRlKGRhdGVSYW5nZS52YWx1ZVswXSk7XG4gICAgICBkYXRlUmFuZ2UudmFsdWVbMV0gPSBuZXcgRGF0ZShkYXRlUmFuZ2UudmFsdWVbMV0pO1xuICAgICAgdGhpcy5zZWxlY3REYXRlKGRhdGVSYW5nZSwgZmFsc2UpO1xuICAgIH1cbiAgfVxuICBcbiAgLy8gY2hhbmdlIGNhbGVuZGFyIGZvcm1hdCBvbiBydW4gdGltZSBpZiB1c2VyIHR5cGUgZGF0ZSBvbiB0aGUgY2FsZW5kYXIgZmllbGQuXG4gIGNhbGVuZGFyRm9jdXNFdmVudChnbG9iYWxGaWx0ZXI6SUdsb2JhbEZpbHRlciwgZXZlbnQ/OiBhbnkpe1xuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShnbG9iYWxGaWx0ZXIuZGlzcGxheVRleHQpWzBdPy5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsIChhOiBhbnkpID0+IHtcbiAgICAgIGxldCB5ZWFyID0gYT8udGFyZ2V0Py52YWx1ZT8udG9TdHJpbmcoKT8uc3BsaXQoJy8nKVsyXTtcbiAgICAgIHllYXIgPSB5ZWFyPy50b1N0cmluZygpLnNwbGl0KFwiIFwiKVswXTtcbiAgICAgIGlmKHllYXI/Lmxlbmd0aCA9PT0gNCl7XG4gICAgICAgIHRoaXMuY2FsZW5kYXJGb3JtYXQgPSAnbW0vZGQveXknO1xuICAgICAgICBpZihnbG9iYWxGaWx0ZXIudHlwZSA9PT0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLkNBTEVOREFSKXtcbiAgICAgICAgICBnbG9iYWxGaWx0ZXIudmFsdWUgPSBuZXcgRGF0ZShhLnRhcmdldC52YWx1ZSkudG9Mb2NhbGVEYXRlU3RyaW5nKFwiZW4tVVNcIik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZih5ZWFyPy5sZW5ndGgpe1xuICAgICAgICB0aGlzLmNhbGVuZGFyRm9ybWF0ID0gJ21tL2RkL3knO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGxldCB5ZWFyVmFsdWUgPSBldmVudD8udGFyZ2V0Py52YWx1ZT8udG9TdHJpbmcoKT8uc3BsaXQoJy8nKVs0XTtcbiAgICBpZigoIWdsb2JhbEZpbHRlci52YWx1ZSB8fCB5ZWFyVmFsdWUgPT0gdW5kZWZpbmVkIHx8IHllYXJWYWx1ZT8udG9TdHJpbmcoKT8ubGVuZ3RoID09PSAxKSAmJiBnbG9iYWxGaWx0ZXIudHlwZSA9PT0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLkRBVEVfUkFOR0Upe1xuICAgICAgdGhpcy5zZXREYXRlUmFuZ2VWYWx1ZShnbG9iYWxGaWx0ZXIsIHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIGNoZWNrRmlsdGVyVmFsaWRhdGlvbihyZW1vdmVFcnJvcjpib29sZWFuID0gZmFsc2UpOmJvb2xlYW57XG4gICAgbGV0IHZhbGlkOmJvb2xlYW4gPSBmYWxzZTtcbiAgICBpZih0aGlzLmdsb2JhbEZpbHRlcnMgJiYgdGhpcy5nbG9iYWxGaWx0ZXJzLmxlbmd0aCA+IDApe1xuICAgICAgdGhpcy5nbG9iYWxGaWx0ZXJzLmZvckVhY2goKGZpbHRlcik9PntcbiAgICAgICAgaWYoZmlsdGVyLnZhbGlkYXRpb25zICYmIGZpbHRlci52YWxpZGF0aW9ucy5sZW5ndGggPiAwICYmIGZpbHRlci52YWxpZGF0aW9uc1swXS50eXBlID09PSBFRmlsdGVyVmFsaWRhdG9yLlJFUVVJUkVEICYmICFmaWx0ZXIudmFsdWUgJiYgIXJlbW92ZUVycm9yKXtcbiAgICAgICAgICB2YWxpZCA9IHRydWU7XG4gICAgICAgICAgZmlsdGVyLmVycm9yTWVzc2FnZSA9IGZpbHRlci5kaXNwbGF5VGV4dCtcIiBpcyByZXF1aXJlZFwiO1xuICAgICAgICAgIGZpbHRlci5yZXF1aXJlZEZpZWxkID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmaWx0ZXIuZXJyb3JNZXNzYWdlID0gJyc7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICAgIHJldHVybiB2YWxpZDtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKCl7XG4gICAgdGhpcy5jaGVja0ZpbHRlclZhbGlkYXRpb24oKTtcbiAgICB0aGlzLmdsb2JhbEZpbHRlcnM/LmZvckVhY2goKGZpbHRlcik9PntcbiAgICAgIGlmKGZpbHRlci52YWx1ZSAmJiAoZmlsdGVyLmhpZGRlbiA9PT0gZmFsc2UgfHwgZmlsdGVyLmhpZGRlbiA9PT0gdW5kZWZpbmVkKSl7XG4gICAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzRXZlbnQoZmlsdGVyKTtcbiAgICAgIH1cbiAgICAgfSlcbiAgICAvLyBzZXQgQnkgRGVmdWFsdCBDYWxlbmRlciBSYW5nZVxuICAgIHRoaXMuc2V0RGVmdWFsdENhbGVuZGFyUmFuZ2UoZmFsc2UpO1xuICAgIGNvbnN0IGdpcmRDbGVhckZpbHRlckJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFxuICAgICAgJ2NsZWFyR3JpZEZpbHRlclZhbHVlc0J1dHRvbidcbiAgICApO1xuICAgIGlmKGdpcmRDbGVhckZpbHRlckJ0bil7XG4gICAgICBpZihnaXJkQ2xlYXJGaWx0ZXJCdG4uY2xhc3NMaXN0LmNvbnRhaW5zKCdoaWRlLWNsZWFyLWZpbHRlci1idXR0b24nKSl7XG4gICAgICAgIHRoaXMuaGlkZUNsZWFyRmlsdGVyQnRuID0gdHJ1ZTtcbiAgICAgIH1lbHNle1xuICAgICAgICB0aGlzLmhpZGVDbGVhckZpbHRlckJ0biA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1lbHNle1xuICAgICAgdGhpcy5oaWRlQ2xlYXJGaWx0ZXJCdG4gPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHNldE51bWVyaWNSYW5nZVZhbHVlVHdvKGdsb2JhbEZpbHRlcjogSUdsb2JhbEZpbHRlciwgc2VuZFJlcXVlc3Q6Ym9vbGVhbiA9IGZhbHNlKXtcbiAgICBpZihnbG9iYWxGaWx0ZXIudG9GaWVsZCl7XG4gICAgICB0aGlzLm1hdGNoU2FtZUZpZWxkcyhnbG9iYWxGaWx0ZXIudG9GaWVsZCwgZ2xvYmFsRmlsdGVyLnZhbHVlVHdvLCdsdGUnLCBnbG9iYWxGaWx0ZXIpO1xuICAgIH1cbiAgICBpZihzZW5kUmVxdWVzdCl7XG4gICAgICB0aGlzLmFwcGx5RmlsdGVycygpO1xuICAgIH1cbiAgfVxuXG4gIG1hdGNoU2FtZUZpZWxkcyhmaWVsZDogc3RyaW5nLHZhbHVlOmFueSwgb3BlcmF0b3I6c3RyaW5nLCBudW1lclJhbmdlRmlsdGVyOiBhbnkgPSB7fSl7XG4gICAgICBpZihmaWVsZCl7XG4gICAgICAgIGlmKG51bWVyUmFuZ2VGaWx0ZXIgJiYgbnVtZXJSYW5nZUZpbHRlcj8uZm9ybWF0Py50eXBlID09PSAnZGVjaW1hbCcgJiYgdmFsdWUpe1xuICAgICAgICAgIGNvbnN0IGRpZ2l0SW5mbyA9IG51bWVyUmFuZ2VGaWx0ZXI/LmZvcm1hdD8uZm9ybWF0UGFyYW1zPy5kaWdpdHNJbmZvO1xuICAgICAgICAgIGlmKGRpZ2l0SW5mbyl7XG4gICAgICAgICAgICB2YWx1ZSA9IHBhcnNlRmxvYXQodmFsdWUpPy50b0ZpeGVkKGRpZ2l0SW5mbyk7XG4gICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICB2YWx1ZSA9IHBhcnNlRmxvYXQodmFsdWUpPy50b0ZpeGVkKDIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuZ2xvYmFsRmlsdGVycy5maW5kSW5kZXgoKGZpbHRlcik9PiBmaWVsZCA9PT0gZmlsdGVyLmZpZWxkKTtcbiAgICAgICAgaWYoaW5kZXggPiAtMSl7XG4gICAgICAgICAgdGhpcy5nbG9iYWxGaWx0ZXJzW2luZGV4XSA9IHtmaWVsZDogZmllbGQsIG1hdGNoTW9kZTonYW5kJywgb3BlcmF0b3I6IG9wZXJhdG9yLCB2YWx1ZTogdmFsdWV9OyAgICAgICBcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmdsb2JhbEZpbHRlcnMucHVzaCh7ZmllbGQ6IGZpZWxkLCBtYXRjaE1vZGU6J2FuZCcsIG9wZXJhdG9yOiBvcGVyYXRvciwgdmFsdWU6IHZhbHVlfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgfVxuXG4gIHNldE51bWVyaWNSYW5nZVZhbHVlRnJvbShnbG9iYWxGaWx0ZXI6IElHbG9iYWxGaWx0ZXIsIHNlbmRSZXF1ZXN0OmJvb2xlYW4gPSBmYWxzZSkge1xuICAgICBpZihnbG9iYWxGaWx0ZXIudHlwZSA9PT0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLk5VTUVSSUNfUkFOR0UgJiYgZ2xvYmFsRmlsdGVyLmZyb21GaWVsZCl7IFxuICAgICAgdGhpcy5tYXRjaFNhbWVGaWVsZHMoZ2xvYmFsRmlsdGVyLmZyb21GaWVsZCxnbG9iYWxGaWx0ZXIudmFsdWUsJ2d0ZScsIGdsb2JhbEZpbHRlcik7XG4gICAgICBpZihzZW5kUmVxdWVzdCl7XG4gICAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzKCk7XG4gICAgICB9XG4gICAgIH1cbiAgXG4gIH1cblxuICBzZXREYXRlUmFuZ2VWYWx1ZShnbG9iYWxGaWx0ZXI6IGFueSwgY2xlYXJWYWx1ZTogYm9vbGVhbiA9ZmFsc2UpIHtcbiAgICBpZihnbG9iYWxGaWx0ZXIudmFsdWU/Lmxlbmd0aCA+IDApe1xuICAgICAgY29uc3QgZnJvbURhdGVWYWx1ZSA9IHRoaXMuZGF0ZXBpcGUudHJhbnNmb3JtKFxuICAgICAgICBnbG9iYWxGaWx0ZXIudmFsdWVbMF0sXG4gICAgICAgIGdsb2JhbEZpbHRlci5mb3JtYXQgPyBnbG9iYWxGaWx0ZXIuZm9ybWF0IDogJ01NL2RkL3l5eXknXG4gICAgICApO1xuICAgICAgY29uc3QgdG9EYXRlVmFsdWUgPSB0aGlzLmRhdGVwaXBlLnRyYW5zZm9ybShcbiAgICAgICAgZ2xvYmFsRmlsdGVyLnZhbHVlWzFdLFxuICAgICAgICBnbG9iYWxGaWx0ZXIuZm9ybWF0ID8gZ2xvYmFsRmlsdGVyLmZvcm1hdCA6ICdNTS9kZC95eXl5J1xuICAgICAgKTtcbiAgICAgIGlmIChmcm9tRGF0ZVZhbHVlICYmIHRvRGF0ZVZhbHVlICYmIGdsb2JhbEZpbHRlci5mcm9tRmllbGQgJiYgZ2xvYmFsRmlsdGVyLnRvRmllbGQpIHtcbiAgICAgICAgdGhpcy5tYXRjaFNhbWVGaWVsZHMoZ2xvYmFsRmlsdGVyLmZyb21GaWVsZCxmcm9tRGF0ZVZhbHVlLCdndGUnKTtcbiAgICAgICAgdGhpcy5tYXRjaFNhbWVGaWVsZHMoZ2xvYmFsRmlsdGVyLnRvRmllbGQsdG9EYXRlVmFsdWUsJ2x0ZScpO1xuICAgICAgfVxuICAgIH1lbHNlIGlmKGNsZWFyVmFsdWUpe1xuICAgICAgdGhpcy5tYXRjaFNhbWVGaWVsZHMoZ2xvYmFsRmlsdGVyLmZyb21GaWVsZCwgbnVsbCwgJ2d0ZScpO1xuICAgICAgdGhpcy5tYXRjaFNhbWVGaWVsZHMoZ2xvYmFsRmlsdGVyLnRvRmllbGQsIG51bGwsICdsdGUnKTtcbiAgICB9XG4gIH1cblxuXG4gIG9uRm9jdXNPdXRFdmVudChnbG9iYWxGaWx0ZXI6IElHbG9iYWxGaWx0ZXIpe1xuICAgIGlmIChnbG9iYWxGaWx0ZXIgJiYgZ2xvYmFsRmlsdGVyLm9uRm9jdXNPdXQpIHtcbiAgICAgIGdsb2JhbEZpbHRlci5vbkZvY3VzT3V0KGdsb2JhbEZpbHRlcik7XG4gICAgfVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2FwcGx5RmlsdGVyJywgSlNPTi5zdHJpbmdpZnkoZmFsc2UpKTtcbiAgICAgIHRoaXMuZ3JpZFNlcnZpY2UuYXBwbHlGaWx0ZXJFdmVudCA9IGZhbHNlO1xuICAgICAgdGhpcy5maWx0ZXJzQXBwbGllZC5lbWl0KHRoaXMuZ2xvYmFsRmlsdGVycyk7XG4gICAgICB9LGdsb2JhbEZpbHRlci50eXBlID09PSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuTE9PS1VQX0lOUFVUID8gIDI1MCA6IDApO1xuICB9XG5cbiAgYXBwbHlGaWx0ZXJzRXZlbnQoZ2xvYmFsRmlsdGVyOiBJR2xvYmFsRmlsdGVyKXtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdhcHBseUZpbHRlcicsIEpTT04uc3RyaW5naWZ5KGZhbHNlKSk7XG4gICAgICB0aGlzLmdyaWRTZXJ2aWNlLmFwcGx5RmlsdGVyRXZlbnQgPSBmYWxzZTtcbiAgICAgIHRoaXMuZmlsdGVyc0FwcGxpZWQuZW1pdCh0aGlzLmdsb2JhbEZpbHRlcnMpO1xuICAgIH0sZ2xvYmFsRmlsdGVyLnR5cGUgPT09IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5MT09LVVBfSU5QVVQgPyAgMjUwIDogMCk7XG4gIH1cblxuICAvKipcbiAgICogQXBwbHkgc2VsZWN0ZWQgZmlsdGVyc1xuICAgKi9cbiAgYXBwbHlGaWx0ZXJzKGZpbHRlckV2ZW50OiBib29sZWFuPSB0cnVlLCBnbG9iYWxGaWx0ZXI6YW55ID0ge30pIHtcbiAgICBpZihnbG9iYWxGaWx0ZXIudHlwZSA9PT0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLkRBVEVfUkFOR0Upe1xuICAgICAgdGhpcy5zZXREYXRlUmFuZ2VGaWx0ZXJWYWx1ZShnbG9iYWxGaWx0ZXIpO1xuICAgIH0gXG4gICAgdGhpcy5ncmlkU2VydmljZS5hcHBseUZpbHRlckV2ZW50ID0gZmlsdGVyRXZlbnQ7XG4gICAgY29uc3QgZ2xvYmFsRmlsdGVycyA9IHRoaXMuZ2xvYmFsRmlsdGVycy5maWx0ZXIoKHgpID0+IHguZmllbGQpO1xuICAgIGNvbnN0IGluZGV4ID0gZ2xvYmFsRmlsdGVycy5maW5kSW5kZXgoKGZpbHRlcik9PiBmaWx0ZXIuZmllbGQgJiYgZmlsdGVyLnR5cGUgPT09IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5EQVRFX1JBTkdFIClcbiAgICBpZihpbmRleCA+IC0xKXtcbiAgICAgIGdsb2JhbEZpbHRlcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2FwcGx5RmlsdGVyJywgSlNPTi5zdHJpbmdpZnkodHJ1ZSkpO1xuICAgIGlmICh0aGlzLnNob3dEaWFsb2cpIHtcbiAgICAgIHRoaXMucmVmLmNsb3NlKGdsb2JhbEZpbHRlcnMpO1xuICAgIH0gZWxzZSBcbiAgICBpZighdGhpcy5jaGVja0ZpbHRlclZhbGlkYXRpb24oKSl7XG4gICAgICB0aGlzLmNoZWNrRmlsdGVyVmFsaWRhdGlvbih0cnVlKTtcbiAgICAgIHRoaXMuZmlsdGVyc0FwcGxpZWQuZW1pdChnbG9iYWxGaWx0ZXJzKTtcbiAgICB9XG4gIH1cblxuICAvLyBzZXQgQnkgRGVmdWFsdCBDYWxlbmRlciBSYW5nZSBcbiAgc2V0RGVmdWFsdENhbGVuZGFyUmFuZ2UoY2hlY2s6IGJvb2xlYW4gPSB0cnVlKXtcbiAgICBpZih0aGlzLmdsb2JhbEZpbHRlcnMgJiYgdGhpcy5nbG9iYWxGaWx0ZXJzLmxlbmd0aCA+IDApe1xuICAgICAgdGhpcy5nbG9iYWxGaWx0ZXJzLmZvckVhY2goKGZpbHRlcik9PntcbiAgICAgICAgaWYoZmlsdGVyLnR5cGUgPT09IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5DQUxFTkRBUl9SQU5HRSl7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNob3dOZXh0KGZpbHRlciwgY2hlY2spO1xuICAgICAgICAgIH0sIDEwMCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHNob3dOZXh0KGZpbHRlcjogSUdsb2JhbEZpbHRlciwgY2hlY2s6IGJvb2xlYW4gPSB0cnVlKTogc3RyaW5nIHtcbiAgICBsZXQgbmV4dFZhbHVlOiBzdHJpbmc7XG4gICAgbGV0IGRheVJhbmdlOiBFRGF5UmFuZ2UgPSBmaWx0ZXIuZGF5UmFuZ2VcbiAgICAgID8gZmlsdGVyLmRheVJhbmdlXG4gICAgICA6IEVEYXlSYW5nZS5XRUVLO1xuICAgIHN3aXRjaCAoZGF5UmFuZ2UpIHtcbiAgICAgIGNhc2UgRURheVJhbmdlLkRBWTpcbiAgICAgICAgbmV4dFZhbHVlID0gdGhpcy5zZXREYXlGaWx0ZXIoZmlsdGVyLCB0cnVlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVEYXlSYW5nZS5NT05USDpcbiAgICAgICAgbmV4dFZhbHVlID0gdGhpcy5zZXRNb250aEZpbHRlcihmaWx0ZXIsIHRydWUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRURheVJhbmdlLllFQVI6XG4gICAgICAgIG5leHRWYWx1ZSA9IHRoaXMuc2V0WWVhckZpbHRlcihmaWx0ZXIsIHRydWUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIC8vIHdlZWtcbiAgICAgICAgbmV4dFZhbHVlID0gdGhpcy5zZXRXZWVrRmlsdGVyKGZpbHRlciwgdHJ1ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnYXBwbHlGaWx0ZXInLCBKU09OLnN0cmluZ2lmeSh0cnVlKSk7XG4gICAgdGhpcy5ncmlkU2VydmljZS5hcHBseUZpbHRlckV2ZW50ID0gY2hlY2s7XG4gICAgdGhpcy5maWx0ZXJzQXBwbGllZC5lbWl0KHRoaXMuZ2xvYmFsRmlsdGVycyk7XG4gICAgcmV0dXJuIG5leHRWYWx1ZTtcbiAgfVxuXG4gIHNob3dQcmV2aW91cyhmaWx0ZXI6IElHbG9iYWxGaWx0ZXIpOiBzdHJpbmcge1xuICAgIGxldCBwcmV2aW91c1ZhbHVlOiBzdHJpbmc7XG4gICAgbGV0IGRheVJhbmdlOiBFRGF5UmFuZ2UgPSBmaWx0ZXIuZGF5UmFuZ2VcbiAgICAgID8gZmlsdGVyLmRheVJhbmdlXG4gICAgICA6IEVEYXlSYW5nZS5XRUVLO1xuICAgIHN3aXRjaCAoZGF5UmFuZ2UpIHtcbiAgICAgIGNhc2UgRURheVJhbmdlLkRBWTpcbiAgICAgICAgcHJldmlvdXNWYWx1ZSA9IHRoaXMuc2V0RGF5RmlsdGVyKGZpbHRlciwgZmFsc2UpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRURheVJhbmdlLk1PTlRIOlxuICAgICAgICBwcmV2aW91c1ZhbHVlID0gdGhpcy5zZXRNb250aEZpbHRlcihmaWx0ZXIsIGZhbHNlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVEYXlSYW5nZS5ZRUFSOlxuICAgICAgICBwcmV2aW91c1ZhbHVlID0gdGhpcy5zZXRZZWFyRmlsdGVyKGZpbHRlciwgZmFsc2UpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIC8vIHdlZWtcbiAgICAgICAgcHJldmlvdXNWYWx1ZSA9IHRoaXMuc2V0V2Vla0ZpbHRlcihmaWx0ZXIsIGZhbHNlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHRoaXMuZ3JpZFNlcnZpY2UuYXBwbHlGaWx0ZXJFdmVudCA9IHRydWU7XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2FwcGx5RmlsdGVyJywgSlNPTi5zdHJpbmdpZnkodHJ1ZSkpO1xuICAgIHRoaXMuZmlsdGVyc0FwcGxpZWQuZW1pdCh0aGlzLmdsb2JhbEZpbHRlcnMpO1xuICAgIHJldHVybiBwcmV2aW91c1ZhbHVlO1xuICB9XG5cbiAgc2V0Q2FsZW5kYXJSYW5nZUZpbHRlclZhbHVlKGZpbHRlcjogSUdsb2JhbEZpbHRlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIChmaWx0ZXIudmFsdWUgPVxuICAgICAgdGhpcy5kYXRlcGlwZS50cmFuc2Zvcm0oXG4gICAgICAgIHRoaXMuc3RhcnREYXRlLFxuICAgICAgICBmaWx0ZXIuZm9ybWF0ID8gZmlsdGVyLmZvcm1hdCA6ICdNTS9kZC95eXl5J1xuICAgICAgKSArXG4gICAgICAnfCcgK1xuICAgICAgdGhpcy5kYXRlcGlwZS50cmFuc2Zvcm0oXG4gICAgICAgIHRoaXMuZW5kRGF0ZSxcbiAgICAgICAgZmlsdGVyLmZvcm1hdCA/IGZpbHRlci5mb3JtYXQgOiAnTU0vZGQveXl5eSdcbiAgICAgICkpO1xuICB9XG5cbiAgc2V0RGF0ZVZhbHVlKGZpbHRlcjogYW55KSB7XG4gICAgbGV0IHZhbHVlOiBEYXRlO1xuICAgIGlmIChmaWx0ZXIudmFsdWUpIHtcbiAgICAgIHZhbHVlID0gbmV3IERhdGUoZmlsdGVyLnZhbHVlLnNwbGl0KCd8JylbMF0pO1xuICAgICAgcmV0dXJuIG5ldyBEYXRlKHZhbHVlLnNldE1vbnRoKHZhbHVlLmdldE1vbnRoKCkpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5ldyBEYXRlKCk7XG4gICAgfVxuICB9XG5cbiAgc2V0RGF5RmlsdGVyKGZpbHRlcjogSUdsb2JhbEZpbHRlciwgaXNOZXh0OiBib29sZWFuKTogc3RyaW5nIHtcbiAgICB2YXIgY3VycmVudERhdGUgPSB0aGlzLnNldERhdGVWYWx1ZShmaWx0ZXIpO1xuXG4gICAgaWYgKGlzTmV4dCkge1xuICAgICAgdGhpcy5zdGFydERhdGUgPSB0aGlzLnN0YXJ0RGF0ZVxuICAgICAgICA/IG5ldyBEYXRlKFxuICAgICAgICAgICAgdGhpcy5zdGFydERhdGUuZ2V0RnVsbFllYXIoKSxcbiAgICAgICAgICAgIHRoaXMuc3RhcnREYXRlLmdldE1vbnRoKCksXG4gICAgICAgICAgICB0aGlzLnN0YXJ0RGF0ZS5nZXREYXRlKCkgKyAxXG4gICAgICAgICAgKVxuICAgICAgICA6IGN1cnJlbnREYXRlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnN0YXJ0RGF0ZSA9IHRoaXMuc3RhcnREYXRlXG4gICAgICAgID8gbmV3IERhdGUoXG4gICAgICAgICAgICB0aGlzLnN0YXJ0RGF0ZS5nZXRGdWxsWWVhcigpLFxuICAgICAgICAgICAgdGhpcy5zdGFydERhdGUuZ2V0TW9udGgoKSxcbiAgICAgICAgICAgIHRoaXMuc3RhcnREYXRlLmdldERhdGUoKSAtIDFcbiAgICAgICAgICApXG4gICAgICAgIDogY3VycmVudERhdGU7XG4gICAgfVxuXG4gICAgdGhpcy5lbmREYXRlID0gbmV3IERhdGUoXG4gICAgICB0aGlzLnN0YXJ0RGF0ZS5nZXRGdWxsWWVhcigpLFxuICAgICAgdGhpcy5zdGFydERhdGUuZ2V0TW9udGgoKSxcbiAgICAgIHRoaXMuc3RhcnREYXRlLmdldERhdGUoKSArIDFcbiAgICApO1xuXG4gICAgcmV0dXJuIHRoaXMuc2V0Q2FsZW5kYXJSYW5nZUZpbHRlclZhbHVlKGZpbHRlcik7XG4gIH1cblxuICBzZXRZZWFyRmlsdGVyKGZpbHRlcjogSUdsb2JhbEZpbHRlciwgaXNOZXh0OiBib29sZWFuKTogc3RyaW5nIHtcbiAgICB2YXIgY3VycmVudERhdGUgPSB0aGlzLnNldERhdGVWYWx1ZShmaWx0ZXIpO1xuICAgIHZhciBmaXJzdERhdGVPZlllYXIgPSBuZXcgRGF0ZShjdXJyZW50RGF0ZS5nZXRGdWxsWWVhcigpLCAwLCAxKTtcblxuICAgIGlmIChpc05leHQpIHtcbiAgICAgIHRoaXMuc3RhcnREYXRlID0gdGhpcy5zdGFydERhdGVcbiAgICAgICAgPyBuZXcgRGF0ZSh0aGlzLnN0YXJ0RGF0ZS5nZXRGdWxsWWVhcigpICsgMSwgMCwgMSlcbiAgICAgICAgOiBmaXJzdERhdGVPZlllYXI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc3RhcnREYXRlID0gdGhpcy5zdGFydERhdGVcbiAgICAgICAgPyBuZXcgRGF0ZSh0aGlzLnN0YXJ0RGF0ZS5nZXRGdWxsWWVhcigpIC0gMSwgMCwgMSlcbiAgICAgICAgOiBmaXJzdERhdGVPZlllYXI7XG4gICAgfVxuXG4gICAgdGhpcy5lbmREYXRlID0gbmV3IERhdGUodGhpcy5zdGFydERhdGUuZ2V0RnVsbFllYXIoKSwgMTEsIDMxKTtcblxuICAgIHJldHVybiB0aGlzLnNldENhbGVuZGFyUmFuZ2VGaWx0ZXJWYWx1ZShmaWx0ZXIpO1xuICB9XG5cbiAgc2V0TW9udGhGaWx0ZXIoZmlsdGVyOiBJR2xvYmFsRmlsdGVyLCBpc05leHQ6IGJvb2xlYW4pOiBzdHJpbmcge1xuICAgIHZhciBjdXJyZW50RGF0ZSA9IHRoaXMuc2V0RGF0ZVZhbHVlKGZpbHRlcik7XG4gICAgdmFyIGZpcnN0RGF0ZU9mTW9udGggPSBuZXcgRGF0ZShcbiAgICAgIGN1cnJlbnREYXRlLmdldEZ1bGxZZWFyKCksXG4gICAgICBjdXJyZW50RGF0ZS5nZXRNb250aCgpLFxuICAgICAgMVxuICAgICk7XG5cbiAgICBpZiAoaXNOZXh0KSB7XG4gICAgICB0aGlzLnN0YXJ0RGF0ZSA9IHRoaXMuc3RhcnREYXRlXG4gICAgICAgID8gbmV3IERhdGUoXG4gICAgICAgICAgICB0aGlzLnN0YXJ0RGF0ZS5nZXRGdWxsWWVhcigpLFxuICAgICAgICAgICAgdGhpcy5zdGFydERhdGUuZ2V0TW9udGgoKSArIDEsXG4gICAgICAgICAgICAxXG4gICAgICAgICAgKVxuICAgICAgICA6IGZpcnN0RGF0ZU9mTW9udGg7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc3RhcnREYXRlID0gdGhpcy5zdGFydERhdGVcbiAgICAgICAgPyBuZXcgRGF0ZShcbiAgICAgICAgICAgIHRoaXMuc3RhcnREYXRlLmdldEZ1bGxZZWFyKCksXG4gICAgICAgICAgICB0aGlzLnN0YXJ0RGF0ZS5nZXRNb250aCgpIC0gMSxcbiAgICAgICAgICAgIDFcbiAgICAgICAgICApXG4gICAgICAgIDogZmlyc3REYXRlT2ZNb250aDtcbiAgICB9XG5cbiAgICB0aGlzLmVuZERhdGUgPSBuZXcgRGF0ZShcbiAgICAgIHRoaXMuc3RhcnREYXRlLmdldEZ1bGxZZWFyKCksXG4gICAgICB0aGlzLnN0YXJ0RGF0ZS5nZXRNb250aCgpICsgMSxcbiAgICAgIDBcbiAgICApO1xuXG4gICAgcmV0dXJuIHRoaXMuc2V0Q2FsZW5kYXJSYW5nZUZpbHRlclZhbHVlKGZpbHRlcik7XG4gIH1cblxuICBzZXRXZWVrRmlsdGVyKGZpbHRlcjogSUdsb2JhbEZpbHRlciwgaXNOZXh0OiBib29sZWFuKTogc3RyaW5nIHtcbiAgICBsZXQgY3VycmVudERhdGUgPSB0aGlzLnNldERhdGVWYWx1ZShmaWx0ZXIpO1xuICAgIGxldCBmaXJzdERheSA9IG5ldyBEYXRlKGN1cnJlbnREYXRlLnNldERhdGUoZmlsdGVyLnZhbHVlID8gY3VycmVudERhdGUuZ2V0RGF0ZSgpIDogY3VycmVudERhdGUuZ2V0RGF0ZSgpIC0gY3VycmVudERhdGUuZ2V0RGF5KCkgKyAxKSk7XG4gICAgbGV0IHdlZWtTZWNvbmRzID0gNyAqIDI0ICogNjAgKiA2MCAqIDEwMDA7XG5cbiAgICBpZiAoaXNOZXh0KSB7XG4gICAgICB0aGlzLnN0YXJ0RGF0ZSA9IHRoaXMuc3RhcnREYXRlXG4gICAgICAgID8gbmV3IERhdGUodGhpcy5zdGFydERhdGUuZ2V0VGltZSgpICsgd2Vla1NlY29uZHMpXG4gICAgICAgIDogbmV3IERhdGUoZmlyc3REYXkuZ2V0VGltZSgpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdGFydERhdGUgPSB0aGlzLnN0YXJ0RGF0ZVxuICAgICAgICA/IG5ldyBEYXRlKHRoaXMuc3RhcnREYXRlLmdldFRpbWUoKSAtIHdlZWtTZWNvbmRzKVxuICAgICAgICA6IG5ldyBEYXRlKGZpcnN0RGF5LmdldFRpbWUoKSAtIHdlZWtTZWNvbmRzKTtcbiAgICB9XG5cbiAgICB0aGlzLmVuZERhdGUgPSBuZXcgRGF0ZSh0aGlzLnN0YXJ0RGF0ZS5nZXRUaW1lKCkgKyA2ICogMjQgKiA2MCAqIDYwICogMTAwMCk7XG5cbiAgICByZXR1cm4gdGhpcy5zZXRDYWxlbmRhclJhbmdlRmlsdGVyVmFsdWUoZmlsdGVyKTtcbiAgfVxuXG4gICAgLyoqXG4gICAqIG9wZW4gZGlhbG9nIG9uIGxvb2t1cENvbnRyb2wgZmllbGRcbiAgICovXG4gICAgIHNlbGVjdExvb2t1cEZpZWxkKGdsb2JhbEZpbHRlcnM6IElHbG9iYWxGaWx0ZXIpIHsgICAgICAgXG4gICAgICB0aGlzLmdyaWRTZXJ2aWNlLnNldExvb2tVcEZpbHRlcihnbG9iYWxGaWx0ZXJzLCB0aGlzLmRpYWxvZ1NlcnZpY2UsIHRydWUpO1xuICAgIH1cblxuICAvKipcbiAgICogQ2xlYXIgYWxsIGZpbHRlciB2YWx1ZXNcbiAgICovXG4gIGNsZWFyRmlsdGVycygpIHtcbiAgICB0aGlzLmdsb2JhbEZpbHRlcnMubWFwKChpdGVtOiBhbnkpID0+IChpdGVtLnZhbHVlID0gbnVsbCkpO1xuICAgIGNvbnN0IGNsZWFyR3JpZEZpbHRlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjbGVhckdyaWRGaWx0ZXJWYWx1ZXNCdXR0b24nKVxuICAgIGlmKGNsZWFyR3JpZEZpbHRlcil7XG4gICAgICBjbGVhckdyaWRGaWx0ZXIuY2xpY2soKTtcbiAgICB9XG4gIH1cblxuICAgLyoqXG4gICAqIENsZWFyIHZhbHVlcyBvZiBEYXRlIFJhbmdlIEZpbHRlclxuICAgKi9cbiAgICBjbGVhckRhdGVSYW5nZVZhbHVlKGZpbHRlcjogYW55KXtcbiAgICAgIHRoaXMuc2V0RGF0ZVJhbmdlVmFsdWUoZmlsdGVyLCB0cnVlKVxuICAgIH1cblxuICAvKipcbiAgICogQ2xvc2UgZGlhbG9nIHdpdGhvdXQgYXBwbHlpbmcgZmlsdGVyc1xuICAgKi9cbiAgY2FuY2VsKCkge1xuICAgIHRoaXMuY2xlYXJGaWx0ZXJzKCk7XG4gICAgdGhpcy5yZWYuY2xvc2UoKTtcbiAgfVxuICByYW5nZURhdGVjbG9zZShnbG9iYWxGaWx0ZXI6IGFueSkge1xuICAgIHRoaXMuZGF0ZVBpY2tlci5oaWRlT3ZlcmxheSgpO1xuICAgIHRoaXMuZGF0ZVBpY2tlci5vdmVybGF5VmlzaWJsZSA9IGZhbHNlO1xuICAgIHRoaXMuZGF0ZVBpY2tlci5kYXRlcGlja2VyQ2xpY2sgPSB0cnVlO1xuICAgIGNvbnN0IGlkOiBhbnkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChnbG9iYWxGaWx0ZXIuZGlzcGxheVRleHQpO1xuICAgIGlkLmZvY3VzKCk7XG4gICAgdGhpcy5kYXRlUGlja2VyLm92ZXJsYXlWaXNpYmxlID0gZmFsc2U7XG4gICAgdGhpcy5kYXRlUGlja2VyLmRhdGVwaWNrZXJDbGljayA9IHRydWU7XG5cbiAgfVxuXG4gIGZpbHRlcklucHV0KCkge1xuICAgIHRoaXMuc2hvd0lucHV0ID0gIXRoaXMuc2hvd0lucHV0O1xuICB9XG5cbiAgLyoqXG4gICAqIEZvY3VzZWQgdGhlIGNhbGVuZGVyIGlucHV0XG4gICAqL1xuICBzZWxlY3REYXRlKGdsb2JhbEZpbHRlcjogYW55LCBmb2N1c2VkOiBib29sZWFuID0gZmFsc2Upe1xuICAgIGlmKGdsb2JhbEZpbHRlci52YWx1ZT8ubGVuZ3RoID4gMSAmJiBnbG9iYWxGaWx0ZXIudmFsdWVbMV0gIT09IG51bGwpe1xuICAgICAgdGhpcy5zZXREYXRlUmFuZ2VWYWx1ZShnbG9iYWxGaWx0ZXIpO1xuICAgICAgaWYoZm9jdXNlZCA9PXRydWUpe1xuICAgICAgdGhpcy5yYW5nZURhdGVjbG9zZShnbG9iYWxGaWx0ZXIpOyBcbiAgICAgIH1cbiAgICB9XG4gICAgaWYoZm9jdXNlZCl7XG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChnbG9iYWxGaWx0ZXIuZmllbGQpPy5mb2N1cygpO1xuICAgIH1cbiAgfVxuICB0YWJGb2N1c0V2ZW50KGdsb2JhbEZpbHRlcjogYW55KSB7XG4gICAgY29uc3QgY2xhc3NOYW1lID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAnLicrZ2xvYmFsRmlsdGVyLmZpZWxkXG4gICAgKTtcbiAgICBpZiAoY2xhc3NOYW1lKSB7XG4gICAgICBjbGFzc05hbWUuY2xpY2soKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
472
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2xvYmFsLWZpbHRlcnMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2UtdWktdG9vbGtpdC9zcmMvbGliL2NvbXBvbmVudHMvc2hhcmVkL2dsb2JhbC1maWx0ZXJzL2dsb2JhbC1maWx0ZXJzLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxRQUFRLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoSCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsbUJBQW1CLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDN0YsT0FBTyxFQUVMLHFCQUFxQixFQUNyQixlQUFlLEVBRWYsU0FBUyxFQUNULGdCQUFnQixHQUNqQixNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUMvRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFPN0QsTUFBTSxPQUFPLHVCQUF1QjtJQW1CbEMsWUFDUyxRQUFrQixFQUNOLEdBQXFCLEVBQ3JCLE1BQTJCLEVBQ3RDLFdBQXdCLEVBQ3pCLGFBQTRCLEVBQzNCLFlBQTBCLEVBQzFCLEVBQWM7UUFOZixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ04sUUFBRyxHQUFILEdBQUcsQ0FBa0I7UUFDckIsV0FBTSxHQUFOLE1BQU0sQ0FBcUI7UUFDdEMsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDekIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDM0IsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQXhCZixrQkFBYSxHQUFvQixFQUFFLENBQUM7UUFDcEMsMEJBQXFCLEdBQVksSUFBSSxDQUFDO1FBQ3RDLHlCQUFvQixHQUFZLElBQUksQ0FBQztRQUNwQyxtQkFBYyxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBRzFELGVBQVUsR0FBRyxxQkFBcUIsQ0FBQztRQUNuQyxlQUFVLEdBQUcsZUFBZSxDQUFDO1FBQzdCLGVBQVUsR0FBWSxLQUFLLENBQUM7UUFJbkMsY0FBUyxHQUFZLEtBQUssQ0FBQztRQUMzQixXQUFNLEdBQVEsRUFBRSxDQUFDO1FBQ2pCLHVCQUFrQixHQUFZLElBQUksQ0FBQztRQUNuQyxtQkFBYyxHQUFVLFVBQVUsQ0FBQztJQVUvQixDQUFDO0lBckJMLElBQWEsY0FBYyxDQUFFLEdBQU8sSUFBSSxJQUFHLEdBQUcsS0FBSyxJQUFJLEVBQUU7UUFBRSxRQUFRLENBQUE7S0FBRSxDQUFBLENBQUM7SUF1QnRFOztPQUVHO0lBQ0gsUUFBUTs7UUFDTixJQUFHLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUM7WUFDakMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7WUFDOUMsSUFBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUM7Z0JBQ2hDLElBQUksQ0FBQyxhQUFhLEdBQUcsTUFBQSxJQUFJLENBQUMsTUFBTSwwQ0FBRSxJQUFJLENBQUMsYUFBZ0MsQ0FBQzthQUN6RTtZQUVELGdDQUFnQztZQUNoQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDckM7SUFDSCxDQUFDO0lBRUQsZUFBZTtRQUNiLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxtRkFBbUY7WUFDbkYsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUsscUJBQXFCLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDL0csZUFBZSxhQUFmLGVBQWUsdUJBQWYsZUFBZSxDQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVMsRUFBQyxFQUFFOztnQkFDdEMsSUFBRyxTQUFTLENBQUMsS0FBSyxJQUFJLFNBQVMsQ0FBQyxRQUFRLEVBQUM7b0JBQ3ZDLElBQUcsT0FBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsS0FBRyxRQUFRLEVBQUM7d0JBQ3BDLFNBQVMsQ0FBQyxLQUFLLEdBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO3FCQUN0RDtvQkFDRCxJQUFHLE9BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEtBQUcsUUFBUSxFQUFDO3dCQUN2QyxTQUFTLENBQUMsUUFBUSxHQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztxQkFDNUQ7b0JBQ0QsU0FBUyxDQUFDLEtBQUssR0FBRyxNQUFBLE1BQUEsQ0FBQyxTQUFTLENBQUMsS0FBSyxHQUFHLEdBQUcsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLDBDQUFFLFFBQVEsRUFBRSwwQ0FBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ3ZGLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztpQkFDekM7cUJBQU0sSUFBRyxTQUFTLENBQUMsS0FBSyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBQztvQkFDL0MsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUMsS0FBSyxDQUFDLENBQUM7aUJBQ2pFO3FCQUFNLElBQUcsQ0FBQyxTQUFTLENBQUMsS0FBSyxJQUFJLFNBQVMsQ0FBQyxRQUFRLEVBQUM7b0JBQy9DLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBQyxTQUFTLENBQUMsUUFBUSxFQUFDLEtBQUssQ0FBQyxDQUFDO2lCQUNwRTtZQUNELENBQUMsQ0FBQyxDQUFBO1lBQ0Ysb0RBQW9EO1lBQ3BELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUsscUJBQXFCLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDbkgsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUMsWUFBWSxFQUFFLEVBQUU7Z0JBQ3hDLElBQUcsWUFBWSxFQUFDO29CQUNoQixJQUFJLENBQUMsd0JBQXdCLENBQUMsWUFBWSxDQUFDLENBQUM7b0JBQzVDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxZQUFZLENBQUMsQ0FBQztpQkFDNUM7WUFDRCxDQUFDLENBQUMsQ0FBQTtZQUNGLElBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLHFCQUFxQixDQUFDLGNBQWMsQ0FBQyxDQUFDO2dCQUM3RixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsRUFDakQ7Z0JBQ0EsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUMxQjtRQUNILENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNWLENBQUM7SUFFRCx1QkFBdUIsQ0FBQyxTQUFTOztRQUMvQixJQUFHLENBQUEsTUFBQSxTQUFTLGFBQVQsU0FBUyx1QkFBVCxTQUFTLENBQUUsS0FBSywwQ0FBRSxNQUFNLElBQUcsQ0FBQyxFQUFDO1lBQzlCLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2xELFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2xELElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQ25DO0lBQ0gsQ0FBQztJQUVELDhFQUE4RTtJQUM5RSxrQkFBa0IsQ0FBQyxZQUEwQixFQUFFLEtBQVc7O1FBQ3RELE1BQUEsUUFBUSxDQUFDLHNCQUFzQixDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsMENBQUUsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBTSxFQUFFLEVBQUU7O1lBQ25HLElBQUksSUFBSSxHQUFHLE1BQUEsTUFBQSxNQUFBLENBQUMsYUFBRCxDQUFDLHVCQUFELENBQUMsQ0FBRSxNQUFNLDBDQUFFLEtBQUssMENBQUUsUUFBUSxFQUFFLDBDQUFFLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDdkQsSUFBSSxHQUFHLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxRQUFRLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUN0QyxJQUFHLENBQUEsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLE1BQU0sTUFBSyxDQUFDLEVBQUM7Z0JBQ3BCLElBQUksQ0FBQyxjQUFjLEdBQUcsVUFBVSxDQUFDO2dCQUNqQyxJQUFHLFlBQVksQ0FBQyxJQUFJLEtBQUsscUJBQXFCLENBQUMsUUFBUSxFQUFDO29CQUN0RCxZQUFZLENBQUMsS0FBSyxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUM7aUJBQzNFO2FBQ0Y7aUJBQU0sSUFBRyxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsTUFBTSxFQUFDO2dCQUNyQixJQUFJLENBQUMsY0FBYyxHQUFHLFNBQVMsQ0FBQzthQUNqQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxTQUFTLEdBQUcsTUFBQSxNQUFBLE1BQUEsS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLE1BQU0sMENBQUUsS0FBSywwQ0FBRSxRQUFRLEVBQUUsMENBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNoRSxJQUFHLENBQUMsQ0FBQyxZQUFZLENBQUMsS0FBSyxJQUFJLFNBQVMsSUFBSSxTQUFTLElBQUksQ0FBQSxNQUFBLFNBQVMsYUFBVCxTQUFTLHVCQUFULFNBQVMsQ0FBRSxRQUFRLEVBQUUsMENBQUUsTUFBTSxNQUFLLENBQUMsQ0FBQyxJQUFJLFlBQVksQ0FBQyxJQUFJLEtBQUsscUJBQXFCLENBQUMsVUFBVSxFQUFDO1lBQ2xKLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDNUM7SUFDSCxDQUFDO0lBRUQscUJBQXFCLENBQUMsY0FBc0IsS0FBSztRQUMvQyxJQUFJLEtBQUssR0FBVyxLQUFLLENBQUM7UUFDMUIsSUFBRyxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBQztZQUNyRCxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBQyxFQUFFO2dCQUNuQyxJQUFHLE1BQU0sQ0FBQyxXQUFXLElBQUksTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLGdCQUFnQixDQUFDLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksQ0FBQyxXQUFXLEVBQUM7b0JBQ2xKLEtBQUssR0FBRyxJQUFJLENBQUM7b0JBQ2IsTUFBTSxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUMsV0FBVyxHQUFDLGNBQWMsQ0FBQztvQkFDeEQsTUFBTSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7aUJBQzdCO3FCQUFNO29CQUNMLE1BQU0sQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO2lCQUMxQjtZQUNILENBQUMsQ0FBQyxDQUFBO1NBQ0g7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxXQUFXOztRQUNULElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQzdCLE1BQUEsSUFBSSxDQUFDLGFBQWEsMENBQUUsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFDLEVBQUU7WUFDcEMsSUFBRyxNQUFNLENBQUMsS0FBSyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sS0FBSyxLQUFLLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxTQUFTLENBQUMsRUFBQztnQkFDMUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQ2hDO1FBQ0YsQ0FBQyxDQUFDLENBQUE7UUFDSCxnQ0FBZ0M7UUFDaEMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BDLE1BQU0sa0JBQWtCLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FDaEQsNkJBQTZCLENBQzlCLENBQUM7UUFDRixJQUFHLGtCQUFrQixFQUFDO1lBQ3BCLElBQUcsa0JBQWtCLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQywwQkFBMEIsQ0FBQyxFQUFDO2dCQUNuRSxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDO2FBQ2hDO2lCQUFJO2dCQUNILElBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUM7YUFDakM7U0FDRjthQUFJO1lBQ0gsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQztTQUNoQztJQUNILENBQUM7SUFFRCx1QkFBdUIsQ0FBQyxZQUEyQixFQUFFLGNBQXNCLEtBQUs7UUFDOUUsSUFBRyxZQUFZLENBQUMsT0FBTyxFQUFDO1lBQ3RCLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxZQUFZLENBQUMsUUFBUSxFQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQztTQUN2RjtRQUNELElBQUcsV0FBVyxFQUFDO1lBQ2IsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1NBQ3JCO0lBQ0gsQ0FBQztJQUVELGVBQWUsQ0FBQyxLQUFhLEVBQUMsS0FBUyxFQUFFLFFBQWUsRUFBRSxtQkFBd0IsRUFBRTs7UUFDaEYsSUFBRyxLQUFLLEVBQUM7WUFDUCxJQUFHLGdCQUFnQixJQUFJLENBQUEsTUFBQSxnQkFBZ0IsYUFBaEIsZ0JBQWdCLHVCQUFoQixnQkFBZ0IsQ0FBRSxNQUFNLDBDQUFFLElBQUksTUFBSyxTQUFTLElBQUksS0FBSyxFQUFDO2dCQUMzRSxNQUFNLFNBQVMsR0FBRyxNQUFBLE1BQUEsZ0JBQWdCLGFBQWhCLGdCQUFnQix1QkFBaEIsZ0JBQWdCLENBQUUsTUFBTSwwQ0FBRSxZQUFZLDBDQUFFLFVBQVUsQ0FBQztnQkFDckUsSUFBRyxTQUFTLEVBQUM7b0JBQ1gsS0FBSyxHQUFHLE1BQUEsVUFBVSxDQUFDLEtBQUssQ0FBQywwQ0FBRSxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7aUJBQy9DO3FCQUFJO29CQUNILEtBQUssR0FBRyxNQUFBLFVBQVUsQ0FBQyxLQUFLLENBQUMsMENBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUN2QzthQUNGO1lBQ0QsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEVBQUMsRUFBRSxDQUFDLEtBQUssS0FBSyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDOUUsSUFBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEVBQUM7Z0JBQ1osSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUMsQ0FBQzthQUMvRjtpQkFBTTtnQkFDTCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFDO2FBQzVGO1NBQ0Y7SUFDTCxDQUFDO0lBRUQsd0JBQXdCLENBQUMsWUFBMkIsRUFBRSxjQUFzQixLQUFLO1FBQzlFLElBQUcsWUFBWSxDQUFDLElBQUksS0FBSyxxQkFBcUIsQ0FBQyxhQUFhLElBQUksWUFBWSxDQUFDLFNBQVMsRUFBQztZQUN0RixJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUMsWUFBWSxDQUFDLEtBQUssRUFBQyxLQUFLLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFDcEYsSUFBRyxXQUFXLEVBQUM7Z0JBQ2IsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO2FBQ3JCO1NBQ0Q7SUFFSixDQUFDO0lBRUQsaUJBQWlCLENBQUMsWUFBaUIsRUFBRSxhQUFxQixLQUFLOztRQUM3RCxJQUFHLENBQUEsTUFBQSxZQUFZLENBQUMsS0FBSywwQ0FBRSxNQUFNLElBQUcsQ0FBQyxFQUFDO1lBQ2hDLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUMzQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUNyQixZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQ3pELENBQUM7WUFDRixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FDekMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDckIsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUN6RCxDQUFDO1lBQ0YsSUFBSSxhQUFhLElBQUksV0FBVyxJQUFJLFlBQVksQ0FBQyxTQUFTLElBQUksWUFBWSxDQUFDLE9BQU8sRUFBRTtnQkFDbEYsSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFDLGFBQWEsRUFBQyxLQUFLLENBQUMsQ0FBQztnQkFDakUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFDLFdBQVcsRUFBQyxLQUFLLENBQUMsQ0FBQzthQUM5RDtTQUNGO2FBQUssSUFBRyxVQUFVLEVBQUM7WUFDbEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztZQUMxRCxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQ3pEO0lBQ0gsQ0FBQztJQUdELGVBQWUsQ0FBQyxZQUEyQjtRQUN6QyxJQUFJLFlBQVksSUFBSSxZQUFZLENBQUMsVUFBVSxFQUFFO1lBQzNDLFlBQVksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDdkM7UUFDRCxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsWUFBWSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQzNELElBQUksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO1lBQzFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUM3QyxDQUFDLEVBQUMsWUFBWSxDQUFDLElBQUksS0FBSyxxQkFBcUIsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUVELGlCQUFpQixDQUFDLFlBQTJCO1FBQzNDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxZQUFZLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDM0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7WUFDMUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQy9DLENBQUMsRUFBQyxZQUFZLENBQUMsSUFBSSxLQUFLLHFCQUFxQixDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBRUQ7O09BRUc7SUFDSCxZQUFZLENBQUMsY0FBc0IsSUFBSSxFQUFFLGVBQW1CLEVBQUU7UUFDNUQsSUFBRyxZQUFZLENBQUMsSUFBSSxLQUFLLHFCQUFxQixDQUFDLFVBQVUsRUFBQztZQUN4RCxJQUFJLENBQUMsdUJBQXVCLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDNUM7UUFDRCxJQUFJLENBQUMsV0FBVyxDQUFDLGdCQUFnQixHQUFHLFdBQVcsQ0FBQztRQUNoRCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hFLE1BQU0sS0FBSyxHQUFHLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEVBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDLElBQUksS0FBSyxxQkFBcUIsQ0FBQyxVQUFVLENBQUUsQ0FBQTtRQUNuSCxJQUFHLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBQztZQUNaLGFBQWEsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ2hDO1FBQ0QsWUFBWSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzFELElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNuQixJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztTQUMvQjthQUNELElBQUcsQ0FBQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsRUFBQztZQUMvQixJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDakMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7U0FDekM7SUFDSCxDQUFDO0lBRUQsaUNBQWlDO0lBQ2pDLHVCQUF1QixDQUFDLFFBQWlCLElBQUk7UUFDM0MsSUFBRyxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBQztZQUNyRCxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBQyxFQUFFO2dCQUNuQyxJQUFHLE1BQU0sQ0FBQyxJQUFJLEtBQUsscUJBQXFCLENBQUMsY0FBYyxFQUFDO29CQUN0RCxVQUFVLENBQUMsR0FBRyxFQUFFO3dCQUNkLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO29CQUMvQixDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7aUJBQ1Q7WUFDSCxDQUFDLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQztJQUVELFFBQVEsQ0FBQyxNQUFxQixFQUFFLFFBQWlCLElBQUk7UUFDbkQsSUFBSSxTQUFpQixDQUFDO1FBQ3RCLElBQUksUUFBUSxHQUFjLE1BQU0sQ0FBQyxRQUFRO1lBQ3ZDLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUTtZQUNqQixDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQztRQUNuQixRQUFRLFFBQVEsRUFBRTtZQUNoQixLQUFLLFNBQVMsQ0FBQyxHQUFHO2dCQUNoQixTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQzVDLE1BQU07WUFDUixLQUFLLFNBQVMsQ0FBQyxLQUFLO2dCQUNsQixTQUFTLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQzlDLE1BQU07WUFDUixLQUFLLFNBQVMsQ0FBQyxJQUFJO2dCQUNqQixTQUFTLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQzdDLE1BQU07WUFDUjtnQkFDRSxPQUFPO2dCQUNQLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDN0MsTUFBTTtTQUNUO1FBQ0QsWUFBWSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzFELElBQUksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO1FBQzFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUM3QyxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRUQsWUFBWSxDQUFDLE1BQXFCO1FBQ2hDLElBQUksYUFBcUIsQ0FBQztRQUMxQixJQUFJLFFBQVEsR0FBYyxNQUFNLENBQUMsUUFBUTtZQUN2QyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVE7WUFDakIsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUM7UUFDbkIsUUFBUSxRQUFRLEVBQUU7WUFDaEIsS0FBSyxTQUFTLENBQUMsR0FBRztnQkFDaEIsYUFBYSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUNqRCxNQUFNO1lBQ1IsS0FBSyxTQUFTLENBQUMsS0FBSztnQkFDbEIsYUFBYSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUNuRCxNQUFNO1lBQ1IsS0FBSyxTQUFTLENBQUMsSUFBSTtnQkFDakIsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUNsRCxNQUFNO1lBQ1I7Z0JBQ0UsT0FBTztnQkFDUCxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ2xELE1BQU07U0FDVDtRQUNELElBQUksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO1FBQ3pDLFlBQVksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUMxRCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDN0MsT0FBTyxhQUFhLENBQUM7SUFDdkIsQ0FBQztJQUVELDJCQUEyQixDQUFDLE1BQXFCO1FBQy9DLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSztZQUNsQixJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FDckIsSUFBSSxDQUFDLFNBQVMsRUFDZCxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQzdDO2dCQUNELEdBQUc7Z0JBQ0gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQ3JCLElBQUksQ0FBQyxPQUFPLEVBQ1osTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUM3QyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsWUFBWSxDQUFDLE1BQVc7UUFDdEIsSUFBSSxLQUFXLENBQUM7UUFDaEIsSUFBSSxNQUFNLENBQUMsS0FBSyxFQUFFO1lBQ2hCLEtBQUssR0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzdDLE9BQU8sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ25EO2FBQU07WUFDTCxPQUFPLElBQUksSUFBSSxFQUFFLENBQUM7U0FDbkI7SUFDSCxDQUFDO0lBRUQsWUFBWSxDQUFDLE1BQXFCLEVBQUUsTUFBZTtRQUNqRCxJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTVDLElBQUksTUFBTSxFQUFFO1lBQ1YsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUztnQkFDN0IsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUNOLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLEVBQzVCLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLEVBQ3pCLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUM3QjtnQkFDSCxDQUFDLENBQUMsV0FBVyxDQUFDO1NBQ2pCO2FBQU07WUFDTCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTO2dCQUM3QixDQUFDLENBQUMsSUFBSSxJQUFJLENBQ04sSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsRUFDNUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsRUFDekIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQzdCO2dCQUNILENBQUMsQ0FBQyxXQUFXLENBQUM7U0FDakI7UUFFRCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksSUFBSSxDQUNyQixJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxFQUM1QixJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxFQUN6QixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FDN0IsQ0FBQztRQUVGLE9BQU8sSUFBSSxDQUFDLDJCQUEyQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRCxhQUFhLENBQUMsTUFBcUIsRUFBRSxNQUFlO1FBQ2xELElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDNUMsSUFBSSxlQUFlLEdBQUcsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUVoRSxJQUFJLE1BQU0sRUFBRTtZQUNWLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVM7Z0JBQzdCLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNsRCxDQUFDLENBQUMsZUFBZSxDQUFDO1NBQ3JCO2FBQU07WUFDTCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTO2dCQUM3QixDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDbEQsQ0FBQyxDQUFDLGVBQWUsQ0FBQztTQUNyQjtRQUVELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFOUQsT0FBTyxJQUFJLENBQUMsMkJBQTJCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVELGNBQWMsQ0FBQyxNQUFxQixFQUFFLE1BQWU7UUFDbkQsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM1QyxJQUFJLGdCQUFnQixHQUFHLElBQUksSUFBSSxDQUM3QixXQUFXLENBQUMsV0FBVyxFQUFFLEVBQ3pCLFdBQVcsQ0FBQyxRQUFRLEVBQUUsRUFDdEIsQ0FBQyxDQUNGLENBQUM7UUFFRixJQUFJLE1BQU0sRUFBRTtZQUNWLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVM7Z0JBQzdCLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FDTixJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxFQUM1QixJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsRUFDN0IsQ0FBQyxDQUNGO2dCQUNILENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQztTQUN0QjthQUFNO1lBQ0wsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUztnQkFDN0IsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUNOLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLEVBQzVCLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxFQUM3QixDQUFDLENBQ0Y7Z0JBQ0gsQ0FBQyxDQUFDLGdCQUFnQixDQUFDO1NBQ3RCO1FBRUQsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLElBQUksQ0FDckIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsRUFDNUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLEVBQzdCLENBQUMsQ0FDRixDQUFDO1FBRUYsT0FBTyxJQUFJLENBQUMsMkJBQTJCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVELGFBQWEsQ0FBQyxNQUFxQixFQUFFLE1BQWU7UUFDbEQsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM1QyxJQUFJLFFBQVEsR0FBRyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxHQUFHLFdBQVcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RJLElBQUksV0FBVyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7UUFFMUMsSUFBSSxNQUFNLEVBQUU7WUFDVixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTO2dCQUM3QixDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsR0FBRyxXQUFXLENBQUM7Z0JBQ2xELENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztTQUNsQzthQUFNO1lBQ0wsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUztnQkFDN0IsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLEdBQUcsV0FBVyxDQUFDO2dCQUNsRCxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxHQUFHLFdBQVcsQ0FBQyxDQUFDO1NBQ2hEO1FBRUQsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUU1RSxPQUFPLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUM7O0tBRUM7SUFDQSxpQkFBaUIsQ0FBQyxhQUE0QjtRQUM3QyxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBRUg7O09BRUc7SUFDSCxZQUFZO1FBQ1YsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzNELE1BQU0sZUFBZSxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsNkJBQTZCLENBQUMsQ0FBQTtRQUM5RSxJQUFHLGVBQWUsRUFBQztZQUNqQixlQUFlLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDekI7SUFDSCxDQUFDO0lBRUE7O01BRUU7SUFDRCxtQkFBbUIsQ0FBQyxNQUFXO1FBQzdCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUE7SUFDdEMsQ0FBQztJQUVIOztPQUVHO0lBQ0gsTUFBTTtRQUNKLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFDRCxjQUFjLENBQUMsWUFBaUI7UUFDOUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUM5QixJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7UUFDdkMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1FBQ3ZDLE1BQU0sRUFBRSxHQUFRLFFBQVEsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2xFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNYLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztRQUN2QyxJQUFJLENBQUMsVUFBVSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7SUFFekMsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUNuQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxVQUFVLENBQUMsWUFBaUIsRUFBRSxVQUFtQixLQUFLOztRQUNwRCxJQUFHLENBQUEsTUFBQSxZQUFZLENBQUMsS0FBSywwQ0FBRSxNQUFNLElBQUcsQ0FBQyxJQUFJLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFDO1lBQ2xFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNyQyxJQUFHLE9BQU8sSUFBRyxJQUFJLEVBQUM7Z0JBQ2xCLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUM7YUFDakM7U0FDRjtRQUNELElBQUcsT0FBTyxFQUFDO1lBQ1QsTUFBQSxRQUFRLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsMENBQUUsS0FBSyxFQUFFLENBQUM7U0FDdEQ7SUFDSCxDQUFDO0lBQ0QsYUFBYSxDQUFDLFlBQWlCO1FBQzdCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FDbkQsR0FBRyxHQUFDLFlBQVksQ0FBQyxLQUFLLENBQ3ZCLENBQUM7UUFDRixJQUFJLFNBQVMsRUFBRTtZQUNiLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUNuQjtJQUNILENBQUM7OztZQWpnQkYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxtQkFBbUI7Z0JBQzdCLDBtaUJBQThDOzthQUUvQzs7OztZQWxCUSxRQUFRO1lBRVIsZ0JBQWdCLHVCQXNDcEIsUUFBUTtZQXRDYyxtQkFBbUIsdUJBdUN6QyxRQUFRO1lBN0JKLFdBQVc7WUFWNEIsYUFBYTtZQVNwRCxZQUFZO1lBVkQsVUFBVTs7O3lCQW1CM0IsU0FBUyxTQUFDLGVBQWU7NEJBQ3pCLEtBQUs7b0NBQ0wsS0FBSzttQ0FDTCxLQUFLOzZCQUNMLE1BQU07NkJBQ04sS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPcHRpb25hbCwgT3V0cHV0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IER5bmFtaWNEaWFsb2dSZWYsIER5bmFtaWNEaWFsb2dDb25maWcsIERpYWxvZ1NlcnZpY2UgfSBmcm9tICdwcmltZW5nL2R5bmFtaWNkaWFsb2cnO1xuaW1wb3J0IHtcbiAgSUdsb2JhbEZpbHRlcixcbiAgR3JpZEZpbHRlckNvbnRyb2xUeXBlLFxuICBFR3JpZENvbHVtblR5cGUsXG4gIGFkZEdsb2JhbEZpbHRlcixcbiAgRURheVJhbmdlLFxuICBFRmlsdGVyVmFsaWRhdG9yLFxufSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZ3JpZC5tb2RlbCc7XG5pbXBvcnQgeyBBbGVydFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9hbGVydC5zZXJ2aWNlJztcbmltcG9ydCB7IEdyaWRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZ3JpZC5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2UtZ2xvYmFsLWZpbHRlcnMnLFxuICB0ZW1wbGF0ZVVybDogJy4vZ2xvYmFsLWZpbHRlcnMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9nbG9iYWwtZmlsdGVycy5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBTZUdsb2JhbEZpbHRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBWaWV3Q2hpbGQoJ3JhbmdlQ2FsZW5kYXInKSBkYXRlUGlja2VyOiBhbnk7XG4gIEBJbnB1dCgpIGdsb2JhbEZpbHRlcnM6IElHbG9iYWxGaWx0ZXJbXSA9IFtdO1xuICBASW5wdXQoKSBzZWFyY2hHbG9iYWxGaWx0ZXJCdG46IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKSBjbGVhckdsb2JhbEZpbHRlckJ0bjogYm9vbGVhbiA9IHRydWU7XG4gIEBPdXRwdXQoKSBmaWx0ZXJzQXBwbGllZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBJbnB1dCgpIHNldCBhY3RpdmVUZXN0TW9kZSAodmFsOmFueSkgeyBpZih2YWwgPT09IHRydWUpIHsgZGVidWdnZXIgfX1cblxuICBwdWJsaWMgZml0ZXJUeXBlcyA9IEdyaWRGaWx0ZXJDb250cm9sVHlwZTtcbiAgcHVibGljIGNvbHVtblR5cGUgPSBFR3JpZENvbHVtblR5cGU7XG4gIHB1YmxpYyBzaG93RGlhbG9nOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBzdGFydERhdGU6IERhdGU7XG4gIHB1YmxpYyBlbmREYXRlOiBEYXRlO1xuXG4gIHNob3dJbnB1dDogYm9vbGVhbiA9IGZhbHNlO1xuICBmaWx0ZXI6IGFueSA9ICcnO1xuICBoaWRlQ2xlYXJGaWx0ZXJCdG46IGJvb2xlYW4gPSB0cnVlO1xuICBjYWxlbmRhckZvcm1hdDpzdHJpbmcgPSAnbW0vZGQveXknO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBkYXRlcGlwZTogRGF0ZVBpcGUsXG4gICAgQE9wdGlvbmFsKCkgcHVibGljIHJlZjogRHluYW1pY0RpYWxvZ1JlZixcbiAgICBAT3B0aW9uYWwoKSBwdWJsaWMgY29uZmlnOiBEeW5hbWljRGlhbG9nQ29uZmlnLFxuICAgIHByaXZhdGUgZ3JpZFNlcnZpY2U6IEdyaWRTZXJ2aWNlLFxuICAgIHB1YmxpYyBkaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWxlcnRTZXJ2aWNlOiBBbGVydFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBlbDogRWxlbWVudFJlZixcbiAgKSB7IH1cblxuICAvKipcbiAgICogQXNzaWdubWVudCBvZiBzZWxlY3RlZCBjb2x1bW5zIG9uIHBhZ2UgbG9hZFxuICAgKi9cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYodGhpcy5jb25maWcgJiYgdGhpcy5jb25maWcuZGF0YSl7XG4gICAgICB0aGlzLnNob3dEaWFsb2cgPSB0aGlzLmNvbmZpZy5kYXRhLm9wZW5EaWFsb2c7XG4gICAgICBpZih0aGlzLmNvbmZpZy5kYXRhLmdsb2JhbEZpbHRlcnMpe1xuICAgICAgICB0aGlzLmdsb2JhbEZpbHRlcnMgPSB0aGlzLmNvbmZpZz8uZGF0YS5nbG9iYWxGaWx0ZXJzIGFzIElHbG9iYWxGaWx0ZXJbXTtcbiAgICAgIH1cbiAgICAgXG4gICAgICAvLyBzZXQgQnkgRGVmdWFsdCBDYWxlbmRlciBSYW5nZVxuICAgICAgdGhpcy5zZXREZWZ1YWx0Q2FsZW5kYXJSYW5nZShmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgLy8gc3BsaXRpbmcgZGF0ZSByYW5nZSB2YWx1ZSBhbmQgYXNzaWduIHRvIHZhbHVlIGFuZCB2YWx1ZVR3byBpbiBEYXRlX1JhbmdlIENvbnRyb2xcbiAgICAgIGNvbnN0IGRhdGVSYW5nZUZpbHRlciA9IHRoaXMuZ2xvYmFsRmlsdGVycy5maWx0ZXIoKGZpbHRlcik9PiBmaWx0ZXIudHlwZSA9PT0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLkRBVEVfUkFOR0UpOyBcbiAgICAgIGRhdGVSYW5nZUZpbHRlcj8uZm9yRWFjaCgoZGF0ZVJhbmdlKT0+e1xuICAgICAgaWYoZGF0ZVJhbmdlLnZhbHVlICYmIGRhdGVSYW5nZS52YWx1ZVR3byl7XG4gICAgICAgIGlmKHR5cGVvZihkYXRlUmFuZ2UudmFsdWUpPT09J29iamVjdCcpe1xuICAgICAgICAgIGRhdGVSYW5nZS52YWx1ZT1kYXRlUmFuZ2UudmFsdWUudG9Mb2NhbGVEYXRlU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYodHlwZW9mKGRhdGVSYW5nZS52YWx1ZVR3byk9PT0nb2JqZWN0Jyl7XG4gICAgICAgICAgZGF0ZVJhbmdlLnZhbHVlVHdvPWRhdGVSYW5nZS52YWx1ZVR3by50b0xvY2FsZURhdGVTdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgICBkYXRlUmFuZ2UudmFsdWUgPSAoZGF0ZVJhbmdlLnZhbHVlICsgXCItXCIgKyBkYXRlUmFuZ2UudmFsdWVUd28pPy50b1N0cmluZygpPy5zcGxpdCgnLScpOyBcbiAgICAgICAgdGhpcy5zZXREYXRlUmFuZ2VGaWx0ZXJWYWx1ZShkYXRlUmFuZ2UpO1xuICAgICAgfSBlbHNlIGlmKGRhdGVSYW5nZS52YWx1ZSAmJiAhZGF0ZVJhbmdlLnZhbHVlVHdvKXtcbiAgICAgICAgdGhpcy5tYXRjaFNhbWVGaWVsZHMoZGF0ZVJhbmdlLmZyb21GaWVsZCxkYXRlUmFuZ2UudmFsdWUsJ2d0ZScpO1xuICAgICAgfSBlbHNlIGlmKCFkYXRlUmFuZ2UudmFsdWUgJiYgZGF0ZVJhbmdlLnZhbHVlVHdvKXtcbiAgICAgICAgdGhpcy5tYXRjaFNhbWVGaWVsZHMoZGF0ZVJhbmdlLmZyb21GaWVsZCxkYXRlUmFuZ2UudmFsdWVUd28sJ2d0ZScpO1xuICAgICAgfVxuICAgICAgfSlcbiAgICAgIC8vIEZpbHRyaW5nIE51bWVyaWMgUmFuZ2UgY29udHJvbHMgb24gZ2xvYmFsIGZpbHRlciBcbiAgICAgIGNvbnN0IG51bWVyUmFuZ2VGaWx0ZXIgPSB0aGlzLmdsb2JhbEZpbHRlcnMuZmlsdGVyKChmaWx0ZXIpPT4gZmlsdGVyLnR5cGUgPT09IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5OVU1FUklDX1JBTkdFKTtcbiAgICAgIG51bWVyUmFuZ2VGaWx0ZXIuZm9yRWFjaCgobnVtZXJpY1JhbmdlKSA9PntcbiAgICAgICAgaWYobnVtZXJpY1JhbmdlKXtcbiAgICAgICAgdGhpcy5zZXROdW1lcmljUmFuZ2VWYWx1ZUZyb20obnVtZXJpY1JhbmdlKTtcbiAgICAgICAgdGhpcy5zZXROdW1lcmljUmFuZ2VWYWx1ZVR3byhudW1lcmljUmFuZ2UpO1xuICAgICAgfVxuICAgICAgfSlcbiAgICAgIGlmKCEodGhpcy5nbG9iYWxGaWx0ZXJzLnNvbWUoKGZpbHRlcik9PiBmaWx0ZXIudHlwZSA9PT0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLkNBTEVOREFSX1JBTkdFKSkgJiZcbiAgICAgICAodGhpcy5nbG9iYWxGaWx0ZXJzLnNvbWUoKGZpbHRlcik9PiBmaWx0ZXIudmFsdWUpKVxuICAgICAgICl7XG4gICAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzKGZhbHNlKTtcbiAgICAgIH1cbiAgICB9LCA1MDApO1xuICB9XG5cbiAgc2V0RGF0ZVJhbmdlRmlsdGVyVmFsdWUoZGF0ZVJhbmdlKXtcbiAgICBpZihkYXRlUmFuZ2U/LnZhbHVlPy5sZW5ndGggPiAxKXtcbiAgICAgIGRhdGVSYW5nZS52YWx1ZVswXSA9IG5ldyBEYXRlKGRhdGVSYW5nZS52YWx1ZVswXSk7XG4gICAgICBkYXRlUmFuZ2UudmFsdWVbMV0gPSBuZXcgRGF0ZShkYXRlUmFuZ2UudmFsdWVbMV0pO1xuICAgICAgdGhpcy5zZWxlY3REYXRlKGRhdGVSYW5nZSwgZmFsc2UpO1xuICAgIH1cbiAgfVxuICBcbiAgLy8gY2hhbmdlIGNhbGVuZGFyIGZvcm1hdCBvbiBydW4gdGltZSBpZiB1c2VyIHR5cGUgZGF0ZSBvbiB0aGUgY2FsZW5kYXIgZmllbGQuXG4gIGNhbGVuZGFyRm9jdXNFdmVudChnbG9iYWxGaWx0ZXI6SUdsb2JhbEZpbHRlciwgZXZlbnQ/OiBhbnkpe1xuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShnbG9iYWxGaWx0ZXIuZGlzcGxheVRleHQpWzBdPy5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsIChhOiBhbnkpID0+IHtcbiAgICAgIGxldCB5ZWFyID0gYT8udGFyZ2V0Py52YWx1ZT8udG9TdHJpbmcoKT8uc3BsaXQoJy8nKVsyXTtcbiAgICAgIHllYXIgPSB5ZWFyPy50b1N0cmluZygpLnNwbGl0KFwiIFwiKVswXTtcbiAgICAgIGlmKHllYXI/Lmxlbmd0aCA9PT0gNCl7XG4gICAgICAgIHRoaXMuY2FsZW5kYXJGb3JtYXQgPSAnbW0vZGQveXknO1xuICAgICAgICBpZihnbG9iYWxGaWx0ZXIudHlwZSA9PT0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLkNBTEVOREFSKXtcbiAgICAgICAgICBnbG9iYWxGaWx0ZXIudmFsdWUgPSBuZXcgRGF0ZShhLnRhcmdldC52YWx1ZSkudG9Mb2NhbGVEYXRlU3RyaW5nKFwiZW4tVVNcIik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZih5ZWFyPy5sZW5ndGgpe1xuICAgICAgICB0aGlzLmNhbGVuZGFyRm9ybWF0ID0gJ21tL2RkL3knO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGxldCB5ZWFyVmFsdWUgPSBldmVudD8udGFyZ2V0Py52YWx1ZT8udG9TdHJpbmcoKT8uc3BsaXQoJy8nKVs0XTtcbiAgICBpZigoIWdsb2JhbEZpbHRlci52YWx1ZSB8fCB5ZWFyVmFsdWUgPT0gdW5kZWZpbmVkIHx8IHllYXJWYWx1ZT8udG9TdHJpbmcoKT8ubGVuZ3RoID09PSAxKSAmJiBnbG9iYWxGaWx0ZXIudHlwZSA9PT0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLkRBVEVfUkFOR0Upe1xuICAgICAgdGhpcy5zZXREYXRlUmFuZ2VWYWx1ZShnbG9iYWxGaWx0ZXIsIHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIGNoZWNrRmlsdGVyVmFsaWRhdGlvbihyZW1vdmVFcnJvcjpib29sZWFuID0gZmFsc2UpOmJvb2xlYW57XG4gICAgbGV0IHZhbGlkOmJvb2xlYW4gPSBmYWxzZTtcbiAgICBpZih0aGlzLmdsb2JhbEZpbHRlcnMgJiYgdGhpcy5nbG9iYWxGaWx0ZXJzLmxlbmd0aCA+IDApe1xuICAgICAgdGhpcy5nbG9iYWxGaWx0ZXJzLmZvckVhY2goKGZpbHRlcik9PntcbiAgICAgICAgaWYoZmlsdGVyLnZhbGlkYXRpb25zICYmIGZpbHRlci52YWxpZGF0aW9ucy5sZW5ndGggPiAwICYmIGZpbHRlci52YWxpZGF0aW9uc1swXS50eXBlID09PSBFRmlsdGVyVmFsaWRhdG9yLlJFUVVJUkVEICYmICFmaWx0ZXIudmFsdWUgJiYgIXJlbW92ZUVycm9yKXtcbiAgICAgICAgICB2YWxpZCA9IHRydWU7XG4gICAgICAgICAgZmlsdGVyLmVycm9yTWVzc2FnZSA9IGZpbHRlci5kaXNwbGF5VGV4dCtcIiBpcyByZXF1aXJlZFwiO1xuICAgICAgICAgIGZpbHRlci5yZXF1aXJlZEZpZWxkID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmaWx0ZXIuZXJyb3JNZXNzYWdlID0gJyc7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICAgIHJldHVybiB2YWxpZDtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKCl7XG4gICAgdGhpcy5jaGVja0ZpbHRlclZhbGlkYXRpb24oKTtcbiAgICB0aGlzLmdsb2JhbEZpbHRlcnM/LmZvckVhY2goKGZpbHRlcik9PntcbiAgICAgIGlmKGZpbHRlci52YWx1ZSAmJiAoZmlsdGVyLmhpZGRlbiA9PT0gZmFsc2UgfHwgZmlsdGVyLmhpZGRlbiA9PT0gdW5kZWZpbmVkKSl7XG4gICAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzRXZlbnQoZmlsdGVyKTtcbiAgICAgIH1cbiAgICAgfSlcbiAgICAvLyBzZXQgQnkgRGVmdWFsdCBDYWxlbmRlciBSYW5nZVxuICAgIHRoaXMuc2V0RGVmdWFsdENhbGVuZGFyUmFuZ2UoZmFsc2UpO1xuICAgIGNvbnN0IGdpcmRDbGVhckZpbHRlckJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFxuICAgICAgJ2NsZWFyR3JpZEZpbHRlclZhbHVlc0J1dHRvbidcbiAgICApO1xuICAgIGlmKGdpcmRDbGVhckZpbHRlckJ0bil7XG4gICAgICBpZihnaXJkQ2xlYXJGaWx0ZXJCdG4uY2xhc3NMaXN0LmNvbnRhaW5zKCdoaWRlLWNsZWFyLWZpbHRlci1idXR0b24nKSl7XG4gICAgICAgIHRoaXMuaGlkZUNsZWFyRmlsdGVyQnRuID0gdHJ1ZTtcbiAgICAgIH1lbHNle1xuICAgICAgICB0aGlzLmhpZGVDbGVhckZpbHRlckJ0biA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1lbHNle1xuICAgICAgdGhpcy5oaWRlQ2xlYXJGaWx0ZXJCdG4gPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHNldE51bWVyaWNSYW5nZVZhbHVlVHdvKGdsb2JhbEZpbHRlcjogSUdsb2JhbEZpbHRlciwgc2VuZFJlcXVlc3Q6Ym9vbGVhbiA9IGZhbHNlKXtcbiAgICBpZihnbG9iYWxGaWx0ZXIudG9GaWVsZCl7XG4gICAgICB0aGlzLm1hdGNoU2FtZUZpZWxkcyhnbG9iYWxGaWx0ZXIudG9GaWVsZCwgZ2xvYmFsRmlsdGVyLnZhbHVlVHdvLCdsdGUnLCBnbG9iYWxGaWx0ZXIpO1xuICAgIH1cbiAgICBpZihzZW5kUmVxdWVzdCl7XG4gICAgICB0aGlzLmFwcGx5RmlsdGVycygpO1xuICAgIH1cbiAgfVxuXG4gIG1hdGNoU2FtZUZpZWxkcyhmaWVsZDogc3RyaW5nLHZhbHVlOmFueSwgb3BlcmF0b3I6c3RyaW5nLCBudW1lclJhbmdlRmlsdGVyOiBhbnkgPSB7fSl7XG4gICAgICBpZihmaWVsZCl7XG4gICAgICAgIGlmKG51bWVyUmFuZ2VGaWx0ZXIgJiYgbnVtZXJSYW5nZUZpbHRlcj8uZm9ybWF0Py50eXBlID09PSAnZGVjaW1hbCcgJiYgdmFsdWUpe1xuICAgICAgICAgIGNvbnN0IGRpZ2l0SW5mbyA9IG51bWVyUmFuZ2VGaWx0ZXI/LmZvcm1hdD8uZm9ybWF0UGFyYW1zPy5kaWdpdHNJbmZvO1xuICAgICAgICAgIGlmKGRpZ2l0SW5mbyl7XG4gICAgICAgICAgICB2YWx1ZSA9IHBhcnNlRmxvYXQodmFsdWUpPy50b0ZpeGVkKGRpZ2l0SW5mbyk7XG4gICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICB2YWx1ZSA9IHBhcnNlRmxvYXQodmFsdWUpPy50b0ZpeGVkKDIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuZ2xvYmFsRmlsdGVycy5maW5kSW5kZXgoKGZpbHRlcik9PiBmaWVsZCA9PT0gZmlsdGVyLmZpZWxkKTtcbiAgICAgICAgaWYoaW5kZXggPiAtMSl7XG4gICAgICAgICAgdGhpcy5nbG9iYWxGaWx0ZXJzW2luZGV4XSA9IHtmaWVsZDogZmllbGQsIG1hdGNoTW9kZTonYW5kJywgb3BlcmF0b3I6IG9wZXJhdG9yLCB2YWx1ZTogdmFsdWV9OyAgICAgICBcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmdsb2JhbEZpbHRlcnMucHVzaCh7ZmllbGQ6IGZpZWxkLCBtYXRjaE1vZGU6J2FuZCcsIG9wZXJhdG9yOiBvcGVyYXRvciwgdmFsdWU6IHZhbHVlfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgfVxuXG4gIHNldE51bWVyaWNSYW5nZVZhbHVlRnJvbShnbG9iYWxGaWx0ZXI6IElHbG9iYWxGaWx0ZXIsIHNlbmRSZXF1ZXN0OmJvb2xlYW4gPSBmYWxzZSkge1xuICAgICBpZihnbG9iYWxGaWx0ZXIudHlwZSA9PT0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLk5VTUVSSUNfUkFOR0UgJiYgZ2xvYmFsRmlsdGVyLmZyb21GaWVsZCl7IFxuICAgICAgdGhpcy5tYXRjaFNhbWVGaWVsZHMoZ2xvYmFsRmlsdGVyLmZyb21GaWVsZCxnbG9iYWxGaWx0ZXIudmFsdWUsJ2d0ZScsIGdsb2JhbEZpbHRlcik7XG4gICAgICBpZihzZW5kUmVxdWVzdCl7XG4gICAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzKCk7XG4gICAgICB9XG4gICAgIH1cbiAgXG4gIH1cblxuICBzZXREYXRlUmFuZ2VWYWx1ZShnbG9iYWxGaWx0ZXI6IGFueSwgY2xlYXJWYWx1ZTogYm9vbGVhbiA9ZmFsc2UpIHtcbiAgICBpZihnbG9iYWxGaWx0ZXIudmFsdWU/Lmxlbmd0aCA+IDApe1xuICAgICAgY29uc3QgZnJvbURhdGVWYWx1ZSA9IHRoaXMuZGF0ZXBpcGUudHJhbnNmb3JtKFxuICAgICAgICBnbG9iYWxGaWx0ZXIudmFsdWVbMF0sXG4gICAgICAgIGdsb2JhbEZpbHRlci5mb3JtYXQgPyBnbG9iYWxGaWx0ZXIuZm9ybWF0IDogJ01NL2RkL3l5eXknXG4gICAgICApO1xuICAgICAgY29uc3QgdG9EYXRlVmFsdWUgPSB0aGlzLmRhdGVwaXBlLnRyYW5zZm9ybShcbiAgICAgICAgZ2xvYmFsRmlsdGVyLnZhbHVlWzFdLFxuICAgICAgICBnbG9iYWxGaWx0ZXIuZm9ybWF0ID8gZ2xvYmFsRmlsdGVyLmZvcm1hdCA6ICdNTS9kZC95eXl5J1xuICAgICAgKTtcbiAgICAgIGlmIChmcm9tRGF0ZVZhbHVlICYmIHRvRGF0ZVZhbHVlICYmIGdsb2JhbEZpbHRlci5mcm9tRmllbGQgJiYgZ2xvYmFsRmlsdGVyLnRvRmllbGQpIHtcbiAgICAgICAgdGhpcy5tYXRjaFNhbWVGaWVsZHMoZ2xvYmFsRmlsdGVyLmZyb21GaWVsZCxmcm9tRGF0ZVZhbHVlLCdndGUnKTtcbiAgICAgICAgdGhpcy5tYXRjaFNhbWVGaWVsZHMoZ2xvYmFsRmlsdGVyLnRvRmllbGQsdG9EYXRlVmFsdWUsJ2x0ZScpO1xuICAgICAgfVxuICAgIH1lbHNlIGlmKGNsZWFyVmFsdWUpe1xuICAgICAgdGhpcy5tYXRjaFNhbWVGaWVsZHMoZ2xvYmFsRmlsdGVyLmZyb21GaWVsZCwgbnVsbCwgJ2d0ZScpO1xuICAgICAgdGhpcy5tYXRjaFNhbWVGaWVsZHMoZ2xvYmFsRmlsdGVyLnRvRmllbGQsIG51bGwsICdsdGUnKTtcbiAgICB9XG4gIH1cblxuXG4gIG9uRm9jdXNPdXRFdmVudChnbG9iYWxGaWx0ZXI6IElHbG9iYWxGaWx0ZXIpe1xuICAgIGlmIChnbG9iYWxGaWx0ZXIgJiYgZ2xvYmFsRmlsdGVyLm9uRm9jdXNPdXQpIHtcbiAgICAgIGdsb2JhbEZpbHRlci5vbkZvY3VzT3V0KGdsb2JhbEZpbHRlcik7XG4gICAgfVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2FwcGx5RmlsdGVyJywgSlNPTi5zdHJpbmdpZnkoZmFsc2UpKTtcbiAgICAgIHRoaXMuZ3JpZFNlcnZpY2UuYXBwbHlGaWx0ZXJFdmVudCA9IGZhbHNlO1xuICAgICAgdGhpcy5maWx0ZXJzQXBwbGllZC5lbWl0KHRoaXMuZ2xvYmFsRmlsdGVycyk7XG4gICAgICB9LGdsb2JhbEZpbHRlci50eXBlID09PSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuTE9PS1VQX0lOUFVUID8gIDI1MCA6IDApO1xuICB9XG5cbiAgYXBwbHlGaWx0ZXJzRXZlbnQoZ2xvYmFsRmlsdGVyOiBJR2xvYmFsRmlsdGVyKXtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdhcHBseUZpbHRlcicsIEpTT04uc3RyaW5naWZ5KGZhbHNlKSk7XG4gICAgICB0aGlzLmdyaWRTZXJ2aWNlLmFwcGx5RmlsdGVyRXZlbnQgPSBmYWxzZTtcbiAgICAgIHRoaXMuZmlsdGVyc0FwcGxpZWQuZW1pdCh0aGlzLmdsb2JhbEZpbHRlcnMpO1xuICAgIH0sZ2xvYmFsRmlsdGVyLnR5cGUgPT09IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5MT09LVVBfSU5QVVQgPyAgMjUwIDogMCk7XG4gIH1cblxuICAvKipcbiAgICogQXBwbHkgc2VsZWN0ZWQgZmlsdGVyc1xuICAgKi9cbiAgYXBwbHlGaWx0ZXJzKGZpbHRlckV2ZW50OiBib29sZWFuPSB0cnVlLCBnbG9iYWxGaWx0ZXI6YW55ID0ge30pIHtcbiAgICBpZihnbG9iYWxGaWx0ZXIudHlwZSA9PT0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLkRBVEVfUkFOR0Upe1xuICAgICAgdGhpcy5zZXREYXRlUmFuZ2VGaWx0ZXJWYWx1ZShnbG9iYWxGaWx0ZXIpO1xuICAgIH0gXG4gICAgdGhpcy5ncmlkU2VydmljZS5hcHBseUZpbHRlckV2ZW50ID0gZmlsdGVyRXZlbnQ7XG4gICAgY29uc3QgZ2xvYmFsRmlsdGVycyA9IHRoaXMuZ2xvYmFsRmlsdGVycy5maWx0ZXIoKHgpID0+IHguZmllbGQpO1xuICAgIGNvbnN0IGluZGV4ID0gZ2xvYmFsRmlsdGVycy5maW5kSW5kZXgoKGZpbHRlcik9PiBmaWx0ZXIuZmllbGQgJiYgZmlsdGVyLnR5cGUgPT09IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5EQVRFX1JBTkdFIClcbiAgICBpZihpbmRleCA+IC0xKXtcbiAgICAgIGdsb2JhbEZpbHRlcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2FwcGx5RmlsdGVyJywgSlNPTi5zdHJpbmdpZnkodHJ1ZSkpO1xuICAgIGlmICh0aGlzLnNob3dEaWFsb2cpIHtcbiAgICAgIHRoaXMucmVmLmNsb3NlKGdsb2JhbEZpbHRlcnMpO1xuICAgIH0gZWxzZSBcbiAgICBpZighdGhpcy5jaGVja0ZpbHRlclZhbGlkYXRpb24oKSl7XG4gICAgICB0aGlzLmNoZWNrRmlsdGVyVmFsaWRhdGlvbih0cnVlKTtcbiAgICAgIHRoaXMuZmlsdGVyc0FwcGxpZWQuZW1pdChnbG9iYWxGaWx0ZXJzKTtcbiAgICB9XG4gIH1cblxuICAvLyBzZXQgQnkgRGVmdWFsdCBDYWxlbmRlciBSYW5nZSBcbiAgc2V0RGVmdWFsdENhbGVuZGFyUmFuZ2UoY2hlY2s6IGJvb2xlYW4gPSB0cnVlKXtcbiAgICBpZih0aGlzLmdsb2JhbEZpbHRlcnMgJiYgdGhpcy5nbG9iYWxGaWx0ZXJzLmxlbmd0aCA+IDApe1xuICAgICAgdGhpcy5nbG9iYWxGaWx0ZXJzLmZvckVhY2goKGZpbHRlcik9PntcbiAgICAgICAgaWYoZmlsdGVyLnR5cGUgPT09IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5DQUxFTkRBUl9SQU5HRSl7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNob3dOZXh0KGZpbHRlciwgY2hlY2spO1xuICAgICAgICAgIH0sIDEwMCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHNob3dOZXh0KGZpbHRlcjogSUdsb2JhbEZpbHRlciwgY2hlY2s6IGJvb2xlYW4gPSB0cnVlKTogc3RyaW5nIHtcbiAgICBsZXQgbmV4dFZhbHVlOiBzdHJpbmc7XG4gICAgbGV0IGRheVJhbmdlOiBFRGF5UmFuZ2UgPSBmaWx0ZXIuZGF5UmFuZ2VcbiAgICAgID8gZmlsdGVyLmRheVJhbmdlXG4gICAgICA6IEVEYXlSYW5nZS5XRUVLO1xuICAgIHN3aXRjaCAoZGF5UmFuZ2UpIHtcbiAgICAgIGNhc2UgRURheVJhbmdlLkRBWTpcbiAgICAgICAgbmV4dFZhbHVlID0gdGhpcy5zZXREYXlGaWx0ZXIoZmlsdGVyLCB0cnVlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVEYXlSYW5nZS5NT05USDpcbiAgICAgICAgbmV4dFZhbHVlID0gdGhpcy5zZXRNb250aEZpbHRlcihmaWx0ZXIsIHRydWUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRURheVJhbmdlLllFQVI6XG4gICAgICAgIG5leHRWYWx1ZSA9IHRoaXMuc2V0WWVhckZpbHRlcihmaWx0ZXIsIHRydWUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIC8vIHdlZWtcbiAgICAgICAgbmV4dFZhbHVlID0gdGhpcy5zZXRXZWVrRmlsdGVyKGZpbHRlciwgdHJ1ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnYXBwbHlGaWx0ZXInLCBKU09OLnN0cmluZ2lmeSh0cnVlKSk7XG4gICAgdGhpcy5ncmlkU2VydmljZS5hcHBseUZpbHRlckV2ZW50ID0gY2hlY2s7XG4gICAgdGhpcy5maWx0ZXJzQXBwbGllZC5lbWl0KHRoaXMuZ2xvYmFsRmlsdGVycyk7XG4gICAgcmV0dXJuIG5leHRWYWx1ZTtcbiAgfVxuXG4gIHNob3dQcmV2aW91cyhmaWx0ZXI6IElHbG9iYWxGaWx0ZXIpOiBzdHJpbmcge1xuICAgIGxldCBwcmV2aW91c1ZhbHVlOiBzdHJpbmc7XG4gICAgbGV0IGRheVJhbmdlOiBFRGF5UmFuZ2UgPSBmaWx0ZXIuZGF5UmFuZ2VcbiAgICAgID8gZmlsdGVyLmRheVJhbmdlXG4gICAgICA6IEVEYXlSYW5nZS5XRUVLO1xuICAgIHN3aXRjaCAoZGF5UmFuZ2UpIHtcbiAgICAgIGNhc2UgRURheVJhbmdlLkRBWTpcbiAgICAgICAgcHJldmlvdXNWYWx1ZSA9IHRoaXMuc2V0RGF5RmlsdGVyKGZpbHRlciwgZmFsc2UpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRURheVJhbmdlLk1PTlRIOlxuICAgICAgICBwcmV2aW91c1ZhbHVlID0gdGhpcy5zZXRNb250aEZpbHRlcihmaWx0ZXIsIGZhbHNlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVEYXlSYW5nZS5ZRUFSOlxuICAgICAgICBwcmV2aW91c1ZhbHVlID0gdGhpcy5zZXRZZWFyRmlsdGVyKGZpbHRlciwgZmFsc2UpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIC8vIHdlZWtcbiAgICAgICAgcHJldmlvdXNWYWx1ZSA9IHRoaXMuc2V0V2Vla0ZpbHRlcihmaWx0ZXIsIGZhbHNlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHRoaXMuZ3JpZFNlcnZpY2UuYXBwbHlGaWx0ZXJFdmVudCA9IHRydWU7XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2FwcGx5RmlsdGVyJywgSlNPTi5zdHJpbmdpZnkodHJ1ZSkpO1xuICAgIHRoaXMuZmlsdGVyc0FwcGxpZWQuZW1pdCh0aGlzLmdsb2JhbEZpbHRlcnMpO1xuICAgIHJldHVybiBwcmV2aW91c1ZhbHVlO1xuICB9XG5cbiAgc2V0Q2FsZW5kYXJSYW5nZUZpbHRlclZhbHVlKGZpbHRlcjogSUdsb2JhbEZpbHRlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIChmaWx0ZXIudmFsdWUgPVxuICAgICAgdGhpcy5kYXRlcGlwZS50cmFuc2Zvcm0oXG4gICAgICAgIHRoaXMuc3RhcnREYXRlLFxuICAgICAgICBmaWx0ZXIuZm9ybWF0ID8gZmlsdGVyLmZvcm1hdCA6ICdNTS9kZC95eXl5J1xuICAgICAgKSArXG4gICAgICAnfCcgK1xuICAgICAgdGhpcy5kYXRlcGlwZS50cmFuc2Zvcm0oXG4gICAgICAgIHRoaXMuZW5kRGF0ZSxcbiAgICAgICAgZmlsdGVyLmZvcm1hdCA/IGZpbHRlci5mb3JtYXQgOiAnTU0vZGQveXl5eSdcbiAgICAgICkpO1xuICB9XG5cbiAgc2V0RGF0ZVZhbHVlKGZpbHRlcjogYW55KSB7XG4gICAgbGV0IHZhbHVlOiBEYXRlO1xuICAgIGlmIChmaWx0ZXIudmFsdWUpIHtcbiAgICAgIHZhbHVlID0gbmV3IERhdGUoZmlsdGVyLnZhbHVlLnNwbGl0KCd8JylbMF0pO1xuICAgICAgcmV0dXJuIG5ldyBEYXRlKHZhbHVlLnNldE1vbnRoKHZhbHVlLmdldE1vbnRoKCkpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5ldyBEYXRlKCk7XG4gICAgfVxuICB9XG5cbiAgc2V0RGF5RmlsdGVyKGZpbHRlcjogSUdsb2JhbEZpbHRlciwgaXNOZXh0OiBib29sZWFuKTogc3RyaW5nIHtcbiAgICB2YXIgY3VycmVudERhdGUgPSB0aGlzLnNldERhdGVWYWx1ZShmaWx0ZXIpO1xuXG4gICAgaWYgKGlzTmV4dCkge1xuICAgICAgdGhpcy5zdGFydERhdGUgPSB0aGlzLnN0YXJ0RGF0ZVxuICAgICAgICA/IG5ldyBEYXRlKFxuICAgICAgICAgICAgdGhpcy5zdGFydERhdGUuZ2V0RnVsbFllYXIoKSxcbiAgICAgICAgICAgIHRoaXMuc3RhcnREYXRlLmdldE1vbnRoKCksXG4gICAgICAgICAgICB0aGlzLnN0YXJ0RGF0ZS5nZXREYXRlKCkgKyAxXG4gICAgICAgICAgKVxuICAgICAgICA6IGN1cnJlbnREYXRlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnN0YXJ0RGF0ZSA9IHRoaXMuc3RhcnREYXRlXG4gICAgICAgID8gbmV3IERhdGUoXG4gICAgICAgICAgICB0aGlzLnN0YXJ0RGF0ZS5nZXRGdWxsWWVhcigpLFxuICAgICAgICAgICAgdGhpcy5zdGFydERhdGUuZ2V0TW9udGgoKSxcbiAgICAgICAgICAgIHRoaXMuc3RhcnREYXRlLmdldERhdGUoKSAtIDFcbiAgICAgICAgICApXG4gICAgICAgIDogY3VycmVudERhdGU7XG4gICAgfVxuXG4gICAgdGhpcy5lbmREYXRlID0gbmV3IERhdGUoXG4gICAgICB0aGlzLnN0YXJ0RGF0ZS5nZXRGdWxsWWVhcigpLFxuICAgICAgdGhpcy5zdGFydERhdGUuZ2V0TW9udGgoKSxcbiAgICAgIHRoaXMuc3RhcnREYXRlLmdldERhdGUoKSArIDFcbiAgICApO1xuXG4gICAgcmV0dXJuIHRoaXMuc2V0Q2FsZW5kYXJSYW5nZUZpbHRlclZhbHVlKGZpbHRlcik7XG4gIH1cblxuICBzZXRZZWFyRmlsdGVyKGZpbHRlcjogSUdsb2JhbEZpbHRlciwgaXNOZXh0OiBib29sZWFuKTogc3RyaW5nIHtcbiAgICB2YXIgY3VycmVudERhdGUgPSB0aGlzLnNldERhdGVWYWx1ZShmaWx0ZXIpO1xuICAgIHZhciBmaXJzdERhdGVPZlllYXIgPSBuZXcgRGF0ZShjdXJyZW50RGF0ZS5nZXRGdWxsWWVhcigpLCAwLCAxKTtcblxuICAgIGlmIChpc05leHQpIHtcbiAgICAgIHRoaXMuc3RhcnREYXRlID0gdGhpcy5zdGFydERhdGVcbiAgICAgICAgPyBuZXcgRGF0ZSh0aGlzLnN0YXJ0RGF0ZS5nZXRGdWxsWWVhcigpICsgMSwgMCwgMSlcbiAgICAgICAgOiBmaXJzdERhdGVPZlllYXI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc3RhcnREYXRlID0gdGhpcy5zdGFydERhdGVcbiAgICAgICAgPyBuZXcgRGF0ZSh0aGlzLnN0YXJ0RGF0ZS5nZXRGdWxsWWVhcigpIC0gMSwgMCwgMSlcbiAgICAgICAgOiBmaXJzdERhdGVPZlllYXI7XG4gICAgfVxuXG4gICAgdGhpcy5lbmREYXRlID0gbmV3IERhdGUodGhpcy5zdGFydERhdGUuZ2V0RnVsbFllYXIoKSwgMTEsIDMxKTtcblxuICAgIHJldHVybiB0aGlzLnNldENhbGVuZGFyUmFuZ2VGaWx0ZXJWYWx1ZShmaWx0ZXIpO1xuICB9XG5cbiAgc2V0TW9udGhGaWx0ZXIoZmlsdGVyOiBJR2xvYmFsRmlsdGVyLCBpc05leHQ6IGJvb2xlYW4pOiBzdHJpbmcge1xuICAgIHZhciBjdXJyZW50RGF0ZSA9IHRoaXMuc2V0RGF0ZVZhbHVlKGZpbHRlcik7XG4gICAgdmFyIGZpcnN0RGF0ZU9mTW9udGggPSBuZXcgRGF0ZShcbiAgICAgIGN1cnJlbnREYXRlLmdldEZ1bGxZZWFyKCksXG4gICAgICBjdXJyZW50RGF0ZS5nZXRNb250aCgpLFxuICAgICAgMVxuICAgICk7XG5cbiAgICBpZiAoaXNOZXh0KSB7XG4gICAgICB0aGlzLnN0YXJ0RGF0ZSA9IHRoaXMuc3RhcnREYXRlXG4gICAgICAgID8gbmV3IERhdGUoXG4gICAgICAgICAgICB0aGlzLnN0YXJ0RGF0ZS5nZXRGdWxsWWVhcigpLFxuICAgICAgICAgICAgdGhpcy5zdGFydERhdGUuZ2V0TW9udGgoKSArIDEsXG4gICAgICAgICAgICAxXG4gICAgICAgICAgKVxuICAgICAgICA6IGZpcnN0RGF0ZU9mTW9udGg7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc3RhcnREYXRlID0gdGhpcy5zdGFydERhdGVcbiAgICAgICAgPyBuZXcgRGF0ZShcbiAgICAgICAgICAgIHRoaXMuc3RhcnREYXRlLmdldEZ1bGxZZWFyKCksXG4gICAgICAgICAgICB0aGlzLnN0YXJ0RGF0ZS5nZXRNb250aCgpIC0gMSxcbiAgICAgICAgICAgIDFcbiAgICAgICAgICApXG4gICAgICAgIDogZmlyc3REYXRlT2ZNb250aDtcbiAgICB9XG5cbiAgICB0aGlzLmVuZERhdGUgPSBuZXcgRGF0ZShcbiAgICAgIHRoaXMuc3RhcnREYXRlLmdldEZ1bGxZZWFyKCksXG4gICAgICB0aGlzLnN0YXJ0RGF0ZS5nZXRNb250aCgpICsgMSxcbiAgICAgIDBcbiAgICApO1xuXG4gICAgcmV0dXJuIHRoaXMuc2V0Q2FsZW5kYXJSYW5nZUZpbHRlclZhbHVlKGZpbHRlcik7XG4gIH1cblxuICBzZXRXZWVrRmlsdGVyKGZpbHRlcjogSUdsb2JhbEZpbHRlciwgaXNOZXh0OiBib29sZWFuKTogc3RyaW5nIHtcbiAgICBsZXQgY3VycmVudERhdGUgPSB0aGlzLnNldERhdGVWYWx1ZShmaWx0ZXIpO1xuICAgIGxldCBmaXJzdERheSA9IG5ldyBEYXRlKGN1cnJlbnREYXRlLnNldERhdGUoZmlsdGVyLnZhbHVlID8gY3VycmVudERhdGUuZ2V0RGF0ZSgpIDogY3VycmVudERhdGUuZ2V0RGF0ZSgpIC0gY3VycmVudERhdGUuZ2V0RGF5KCkgKyAxKSk7XG4gICAgbGV0IHdlZWtTZWNvbmRzID0gNyAqIDI0ICogNjAgKiA2MCAqIDEwMDA7XG5cbiAgICBpZiAoaXNOZXh0KSB7XG4gICAgICB0aGlzLnN0YXJ0RGF0ZSA9IHRoaXMuc3RhcnREYXRlXG4gICAgICAgID8gbmV3IERhdGUodGhpcy5zdGFydERhdGUuZ2V0VGltZSgpICsgd2Vla1NlY29uZHMpXG4gICAgICAgIDogbmV3IERhdGUoZmlyc3REYXkuZ2V0VGltZSgpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdGFydERhdGUgPSB0aGlzLnN0YXJ0RGF0ZVxuICAgICAgICA/IG5ldyBEYXRlKHRoaXMuc3RhcnREYXRlLmdldFRpbWUoKSAtIHdlZWtTZWNvbmRzKVxuICAgICAgICA6IG5ldyBEYXRlKGZpcnN0RGF5LmdldFRpbWUoKSAtIHdlZWtTZWNvbmRzKTtcbiAgICB9XG5cbiAgICB0aGlzLmVuZERhdGUgPSBuZXcgRGF0ZSh0aGlzLnN0YXJ0RGF0ZS5nZXRUaW1lKCkgKyA2ICogMjQgKiA2MCAqIDYwICogMTAwMCk7XG5cbiAgICByZXR1cm4gdGhpcy5zZXRDYWxlbmRhclJhbmdlRmlsdGVyVmFsdWUoZmlsdGVyKTtcbiAgfVxuXG4gICAgLyoqXG4gICAqIG9wZW4gZGlhbG9nIG9uIGxvb2t1cENvbnRyb2wgZmllbGRcbiAgICovXG4gICAgIHNlbGVjdExvb2t1cEZpZWxkKGdsb2JhbEZpbHRlcnM6IElHbG9iYWxGaWx0ZXIpIHsgICAgICAgXG4gICAgICB0aGlzLmdyaWRTZXJ2aWNlLnNldExvb2tVcEZpbHRlcihnbG9iYWxGaWx0ZXJzLCB0aGlzLmRpYWxvZ1NlcnZpY2UsIHRydWUpO1xuICAgIH1cblxuICAvKipcbiAgICogQ2xlYXIgYWxsIGZpbHRlciB2YWx1ZXNcbiAgICovXG4gIGNsZWFyRmlsdGVycygpIHtcbiAgICB0aGlzLmdsb2JhbEZpbHRlcnMubWFwKChpdGVtOiBhbnkpID0+IChpdGVtLnZhbHVlID0gbnVsbCkpO1xuICAgIGNvbnN0IGNsZWFyR3JpZEZpbHRlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjbGVhckdyaWRGaWx0ZXJWYWx1ZXNCdXR0b24nKVxuICAgIGlmKGNsZWFyR3JpZEZpbHRlcil7XG4gICAgICBjbGVhckdyaWRGaWx0ZXIuY2xpY2soKTtcbiAgICB9XG4gIH1cblxuICAgLyoqXG4gICAqIENsZWFyIHZhbHVlcyBvZiBEYXRlIFJhbmdlIEZpbHRlclxuICAgKi9cbiAgICBjbGVhckRhdGVSYW5nZVZhbHVlKGZpbHRlcjogYW55KXtcbiAgICAgIHRoaXMuc2V0RGF0ZVJhbmdlVmFsdWUoZmlsdGVyLCB0cnVlKVxuICAgIH1cblxuICAvKipcbiAgICogQ2xvc2UgZGlhbG9nIHdpdGhvdXQgYXBwbHlpbmcgZmlsdGVyc1xuICAgKi9cbiAgY2FuY2VsKCkge1xuICAgIHRoaXMuY2xlYXJGaWx0ZXJzKCk7XG4gICAgdGhpcy5yZWYuY2xvc2UoKTtcbiAgfVxuICByYW5nZURhdGVjbG9zZShnbG9iYWxGaWx0ZXI6IGFueSkge1xuICAgIHRoaXMuZGF0ZVBpY2tlci5oaWRlT3ZlcmxheSgpO1xuICAgIHRoaXMuZGF0ZVBpY2tlci5vdmVybGF5VmlzaWJsZSA9IGZhbHNlO1xuICAgIHRoaXMuZGF0ZVBpY2tlci5kYXRlcGlja2VyQ2xpY2sgPSB0cnVlO1xuICAgIGNvbnN0IGlkOiBhbnkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChnbG9iYWxGaWx0ZXIuZGlzcGxheVRleHQpO1xuICAgIGlkLmZvY3VzKCk7XG4gICAgdGhpcy5kYXRlUGlja2VyLm92ZXJsYXlWaXNpYmxlID0gZmFsc2U7XG4gICAgdGhpcy5kYXRlUGlja2VyLmRhdGVwaWNrZXJDbGljayA9IHRydWU7XG5cbiAgfVxuXG4gIGZpbHRlcklucHV0KCkge1xuICAgIHRoaXMuc2hvd0lucHV0ID0gIXRoaXMuc2hvd0lucHV0O1xuICB9XG5cbiAgLyoqXG4gICAqIEZvY3VzZWQgdGhlIGNhbGVuZGVyIGlucHV0XG4gICAqL1xuICBzZWxlY3REYXRlKGdsb2JhbEZpbHRlcjogYW55LCBmb2N1c2VkOiBib29sZWFuID0gZmFsc2Upe1xuICAgIGlmKGdsb2JhbEZpbHRlci52YWx1ZT8ubGVuZ3RoID4gMSAmJiBnbG9iYWxGaWx0ZXIudmFsdWVbMV0gIT09IG51bGwpe1xuICAgICAgdGhpcy5zZXREYXRlUmFuZ2VWYWx1ZShnbG9iYWxGaWx0ZXIpO1xuICAgICAgaWYoZm9jdXNlZCA9PXRydWUpe1xuICAgICAgdGhpcy5yYW5nZURhdGVjbG9zZShnbG9iYWxGaWx0ZXIpOyBcbiAgICAgIH1cbiAgICB9XG4gICAgaWYoZm9jdXNlZCl7XG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChnbG9iYWxGaWx0ZXIuZmllbGQpPy5mb2N1cygpO1xuICAgIH1cbiAgfVxuICB0YWJGb2N1c0V2ZW50KGdsb2JhbEZpbHRlcjogYW55KSB7XG4gICAgY29uc3QgY2xhc3NOYW1lID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAnLicrZ2xvYmFsRmlsdGVyLmZpZWxkXG4gICAgKTtcbiAgICBpZiAoY2xhc3NOYW1lKSB7XG4gICAgICBjbGFzc05hbWUuY2xpY2soKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -4438,7 +4438,8 @@ class GridComponent {
|
|
|
4438
4438
|
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
|
|
4439
4439
|
delete selectedRow[column.field + '-data'];
|
|
4440
4440
|
delete selectedRow[column.field + '_secondType'];
|
|
4441
|
-
if (column.type === EGridColumnType.LOOKUP_INPUT && ((_a = selectedRow[column.field + '_obj']) === null || _a === void 0 ? void 0 : _a.text)
|
|
4441
|
+
if (column.type === EGridColumnType.LOOKUP_INPUT && ((_a = selectedRow[column.field + '_obj']) === null || _a === void 0 ? void 0 : _a.text) &&
|
|
4442
|
+
(column.allowSave === true || column.allowSave === undefined)) {
|
|
4442
4443
|
lookupInfo[column.field] = selectedRow[column.field + '_obj'].text;
|
|
4443
4444
|
}
|
|
4444
4445
|
if (column.formatter) {
|
|
@@ -4616,7 +4617,7 @@ class GridComponent {
|
|
|
4616
4617
|
selectedRow[column.field] = automCompleteTempData;
|
|
4617
4618
|
}
|
|
4618
4619
|
else if (column.type === EGridColumnType.LOOKUP_INPUT &&
|
|
4619
|
-
selectedRow[column.field]) {
|
|
4620
|
+
selectedRow[column.field] && (column.allowSave === true || column.allowSave === undefined)) {
|
|
4620
4621
|
// set LOOKUP_INPUT data after save row
|
|
4621
4622
|
if (lookupInfo[column.field]) {
|
|
4622
4623
|
selectedRow[column.field] = lookupInfo[column.field];
|
|
@@ -9314,7 +9315,7 @@ class SeGlobalFilterComponent {
|
|
|
9314
9315
|
SeGlobalFilterComponent.decorators = [
|
|
9315
9316
|
{ type: Component, args: [{
|
|
9316
9317
|
selector: 'se-global-filters',
|
|
9317
|
-
template: "<div class=\"global-filters-component-wrapper-div\">\n <div\n [class]=\"globalFilter.hidden ? 'globalFilterHidden' : globalFilter.column ? 'p-col-' + globalFilter.column : 'p-col-3'\"\n *ngFor=\"let globalFilter of globalFilters\"\n >\n <div [ngSwitch]=\"globalFilter.type\">\n <!-- Calender control -->\n <span [hidden]=\"globalFilter.hidden\">\n <div class=\"global-filters-filter-div\" *ngSwitchCase=\"fiterTypes.CALENDAR\">\n <label class=\"global-filters-label\" for=\"basic\">{{ globalFilter.displayText }}\n <span *ngIf=\"globalFilter.requiredField\" class=\"required-star\">*</span>\n </label>\n <div class=\"p-d-flex p-ai-center\">\n <p-calendar\n [class]=\"globalFilter.errorMessage ? 'ng-invalid ng-dirty ' + globalFilter.displayText: 'p-flex-grow-1 p-mr-2 grow-1 ' + globalFilter.displayText\"\n [placeholder]=\"'Select-Date'\"\n [(ngModel)]=\"globalFilter.value\"\n (keyup.enter)=\"applyFilters()\"\n (onSelect)=\"selectDate(globalFilter, true)\"\n [inputId]=\"globalFilter.field\"\n [dateFormat]=\"calendarFormat\"\n (onClose)=\"onFocusOutEvent(globalFilter)\"\n appendTo=\"body\"\n [showButtonBar]=\"true\"\n [disabled]=\"globalFilter.disabled\"\n (keyup)=\"calendarFocusEvent(globalFilter)\"\n >\n </p-calendar>\n <span *ngIf=\"globalFilter.filtering\">\n <se-filter-menu [globalFilter]=\"globalFilter\"></se-filter-menu>\n </span>\n </div>\n <span *ngIf=\"globalFilter.errorMessage && globalFilter.errorMessage.length > 0\" class=\"error\">{{\n globalFilter.errorMessage\n }}</span>\n </div>\n </span>\n\n <!-- Calender Range -->\n <span [hidden]=\"globalFilter.hidden\">\n <div\n class=\"global-filters-filter-div\"\n *ngSwitchCase=\"fiterTypes.CALENDAR_RANGE\"\n >\n <label class=\"\" for=\"basic\">{{ globalFilter.displayText }}\n <span *ngIf=\"globalFilter.requiredField\" class=\"required-star\">*</span>\n </label>\n <div class=\"p-d-flex p-ai-center\">\n <button\n pButton\n type=\"button\"\n [disabled]=\"globalFilter.disabled\" \n class=\"custom-btn\"\n (click)=\"showPrevious(globalFilter)\"\n label=\"Previous {{\n globalFilter.dayRange ? globalFilter.dayRange : 'Week'\n }} <<\"\n >\n <!-- [ngStyle]=\"{ background: globalFilter.color ? globalFilter.color : ''}\" -->\n </button>\n <label class=\"global-filters-label\"\n >\n <span [class]=\"globalFilter.errorMessage ? 'ng-invalid ng-dirty' : ''\"></span>\n <span *ngIf=\"globalFilter.prefix===true || globalFilter.prefix===undefined\">\n {{ globalFilter.labelText ? globalFilter.labelText : '' }}\n </span>\n {{\n startDate\n | date\n : (globalFilter.format ? globalFilter.format : 'MM/dd/yyyy')\n }}\n to\n {{\n endDate\n | date\n : (globalFilter.format ? globalFilter.format : 'MM/dd/yyyy')\n }}\n <span *ngIf=\"globalFilter.prefix===false\">\n {{ globalFilter.labelText ? globalFilter.labelText : ''}}\n </span></label\n >\n <button\n pButton\n type=\"button\"\n [disabled]=\"globalFilter.disabled\" \n class=\"custom-btn\"\n (click)=\"showNext(globalFilter)\"\n label=\"Next {{\n globalFilter.dayRange ? globalFilter.dayRange : 'Week'\n }} >>\"\n >\n <!-- [ngStyle]=\"{ background: globalFilter.color ? globalFilter.color : ''}\" -->\n </button>\n </div>\n <span *ngIf=\"globalFilter.errorMessage && globalFilter.errorMessage.length > 0\" class=\"error\">{{\n globalFilter.errorMessage\n }}</span>\n </div>\n </span>\n\n <!-- Checkbox Control -->\n <span [hidden]=\"globalFilter.hidden\">\n <div class=\"global-filters-filter-div\" *ngSwitchCase=\"fiterTypes.CHECKBOX\">\n <label class=\"\" for=\"basic\">{{ globalFilter.displayText }}\n <span *ngIf=\"globalFilter.requiredField\" class=\"required-star\">*</span>\n </label>\n <p-checkbox\n [class]=\"globalFilter.errorMessage ? 'ng-invalid ng-dirty': 'p-d-flex p-ai-center'\"\n [binary]=\"true\"\n (keyup.enter)=\"applyFilters()\"\n [(ngModel)]=\"globalFilter.value\"\n [disabled]=\"globalFilter.disabled\"\n (onChange)=\"onFocusOutEvent(globalFilter)\"\n (click)=\"onFocusOutEvent(globalFilter)\"\n ></p-checkbox>\n <span *ngIf=\"globalFilter.errorMessage && globalFilter.errorMessage.length > 0\" class=\"error\">{{\n globalFilter.errorMessage\n }}</span>\n </div>\n </span>\n\n <!-- Spacer Control -->\n <span *ngIf=\"!globalFilter.hidden\">\n <div\n class=\"global-filters-filter-div\"\n *ngSwitchCase=\"fiterTypes.SPACER\"\n >\n <span\n [class]=\"\n globalFilter.column\n ? 'p-col-' + globalFilter.column\n : ''\n \"\n ></span>\n </div>\n </span>\n\n <!-- Dropdown Control -->\n <span [hidden]=\"globalFilter.hidden\">\n <div class=\"global-filters-filter-div\" *ngSwitchCase=\"fiterTypes.DROPDOWN\">\n <label class=\"global-filters-label\" for=\"basic\">{{ globalFilter.displayText }}\n <span *ngIf=\"globalFilter.requiredField\" class=\"required-star\">*</span>\n </label>\n <p-dropdown\n [class]=\"globalFilter.errorMessage ? 'ng-invalid ng-dirty' : ''\"\n [(ngModel)]=\"globalFilter.value\"\n [name]=\"globalFilter.displayText\"\n [showClear]=\"true\"\n [styleClass]=\"globalFilter.field\"\n (keyup.Tab)=\"tabFocusEvent(globalFilter)\"\n [placeholder]=\"globalFilter.displayText\"\n [options]=\"globalFilter.data || []\"\n [optionLabel]=\"globalFilter.optionLabel\"\n [optionValue]=\"globalFilter.optionValue\"\n [filter]=\"globalFilter.allowSearch\"\n (onChange)=\"onFocusOutEvent(globalFilter)\"\n (keyup.enter)=\"applyFilters()\"\n [disabled]=\"globalFilter.disabled\"\n ></p-dropdown>\n <span *ngIf=\"globalFilter.errorMessage && globalFilter.errorMessage.length > 0\" class=\"error\">{{\n globalFilter.errorMessage\n }}</span>\n </div>\n </span>\n\n <!-- Input control -->\n <span [hidden]=\"globalFilter.hidden\">\n <div class=\"global-filters-filter-div\" *ngSwitchCase=\"fiterTypes.INPUT\">\n <label class=\"\" for=\"basic\">{{ globalFilter.displayText }}\n <span *ngIf=\"globalFilter.requiredField\" class=\"required-star\">*</span>\n </label>\n <div class=\"\">\n <input\n type=\"text\"\n pInputText\n [(ngModel)]=\"globalFilter.value\"\n [class]=\"globalFilter.errorMessage ? 'ng-invalid ng-dirty' : ''\"\n (keyup.enter)=\"applyFilters()\"\n (blur)=\"onFocusOutEvent(globalFilter)\"\n [disabled]=\"globalFilter.disabled\"\n class=\"form-control\"\n />\n <span *ngIf=\"globalFilter.filtering\">\n <se-filter-menu [globalFilter]=\"globalFilter\"></se-filter-menu>\n </span>\n </div>\n <span *ngIf=\"globalFilter.errorMessage && globalFilter.errorMessage.length > 0\" class=\"error\">{{\n globalFilter.errorMessage\n }}</span>\n </div>\n </span>\n\n <!-- NumericInput control -->\n <span [hidden]=\"globalFilter.hidden\">\n <div\n class=\"global-filters-filter-div\"\n *ngSwitchCase=\"fiterTypes.NUMERICINPUT\"\n >\n <label class=\"global-filters-label\" for=\"basic\">{{ globalFilter.displayText }}\n <span *ngIf=\"globalFilter.requiredField\" class=\"required-star\">*</span>\n </label>\n <div class=\"p-d-flex flex-nowrap align-items-center\">\n <input\n type=\"number\"\n pInputText\n [(ngModel)]=\"globalFilter.value\"\n [class]=\"globalFilter.errorMessage ? 'ng-invalid ng-dirty' : ''\"\n (keyup.enter)=\"applyFilters()\"\n (blur)=\"onFocusOutEvent(globalFilter)\"\n [disabled]=\"globalFilter.disabled\"\n class=\"form-control\"\n />\n <span *ngIf=\"globalFilter.filtering\">\n <se-filter-menu [globalFilter]=\"globalFilter\"></se-filter-menu>\n </span>\n </div>\n <span *ngIf=\"globalFilter.errorMessage && globalFilter.errorMessage.length > 0\" class=\"error\">{{\n globalFilter.errorMessage\n }}</span>\n </div>\n </span>\n \n <!-- Date Range Control -->\n <span [hidden]=\"globalFilter.hidden\">\n <div class=\"global-filters-filter-div\" *ngSwitchCase=\"fiterTypes.DATE_RANGE\">\n <label for=\"basic\">{{ globalFilter.displayText }}\n <span *ngIf=\"globalFilter.requiredField\" class=\"required-star\">*</span>\n </label>\n <div class=\"p-d-flex p-ai-center\">\n <p-calendar \n #rangeCalendar\n [showButtonBar]=\"true\"\n\n [inputId]=\"globalFilter.displayText\"\n [class]=\"globalFilter.errorMessage ? 'ng-invalid ng-dirty ' + globalFilter.displayText : 'p-flex-grow-1 p-mr-2 grow-1 ' + globalFilter.displayText\"\n [(ngModel)]=\"globalFilter.value\" \n selectionMode=\"range\" \n appendTo=\"body\"\n (onSelect)=\"selectDate(globalFilter, true)\"\n [dateFormat]=\"calendarFormat\"\n (onClose)=\"onFocusOutEvent(globalFilter)\"\n (onClickOutside)=\"setDateRangeFilterValue(globalFilter)\"\n (onBlur)=\"setDateRangeFilterValue(globalFilter)\"\n (keyup)=\"calendarFocusEvent(globalFilter, $event)\"\n (onClearClick)=\"clearDateRangeValue(globalFilter)\"\n [disabled]=\"globalFilter.disabled\"\n (keyup.enter)=\"applyFilters(true, globalFilter)\"\n \n ></p-calendar>\n <!-- todayButtonStyleClass=\"p-d-none\"\n clearButtonStyleClass=\"p-ml-auto\" -->\n <span *ngIf=\"globalFilter.filtering\">\n <se-filter-menu [globalFilter]=\"globalFilter\"></se-filter-menu>\n </span>\n </div>\n <span *ngIf=\"globalFilter.errorMessage && globalFilter.errorMessage.length > 0\" class=\"error\">{{\n globalFilter.errorMessage\n }}</span>\n </div>\n </span>\n\n <!-- Numeric Range control -->\n <span [hidden]=\"globalFilter.hidden\">\n <div\n class=\"global-filters-filter-div\"\n *ngSwitchCase=\"fiterTypes.NUMERIC_RANGE\"\n >\n <label for=\"basic\">{{ globalFilter.displayText }}\n <span *ngIf=\"globalFilter.requiredField\" class=\"required-star\">*</span>\n </label>\n <div class=\"p-d-flex\">\n <div class=\"p-d-flex flex-nowrap align-items-center p-mr-2\">\n <p-inputNumber\n [showButtons]=\"false\"\n [(ngModel)]=\"globalFilter.value\"\n [minFractionDigits]=\"globalFilter?.format?.type === 'decimal' ? globalFilter.format?.formatParams?.digitsInfo ? globalFilter.format?.formatParams?.digitsInfo : '2' : '0'\"\n [maxFractionDigits]=\"globalFilter?.format?.type === 'decimal' ? globalFilter.format?.formatParams?.digitsInfo ? globalFilter.format?.formatParams?.digitsInfo : '2' : '0'\"\n (onBlur)=\"setNumericRangeValueFrom(globalFilter)\"\n (keyup.enter)=\"setNumericRangeValueFrom(globalFilter,true)\"\n [class]=\"globalFilter.errorMessage ? 'ng-invalid ng-dirty' : 'flex-grow-1 grow-1 input-number'\"\n [disabled]=\"globalFilter.disabled\"\n >\n </p-inputNumber>\n <span *ngIf=\"globalFilter.errorMessage && globalFilter.errorMessage.length > 0\" class=\"error\">{{\n globalFilter.errorMessage\n }}</span>\n </div>\n <span class=\"to-numeric\">To</span>\n <div class=\"p-d-flex flex-nowrap align-items-center\">\n <p-inputNumber\n [showButtons]=\"false\"\n [(ngModel)]=\"globalFilter.valueTwo\"\n [minFractionDigits]=\"globalFilter?.format?.type === 'decimal' ? globalFilter.format?.formatParams?.digitsInfo ? globalFilter.format?.formatParams?.digitsInfo : '2' : '0'\"\n [maxFractionDigits]=\"globalFilter?.format?.type === 'decimal' ? globalFilter.format?.formatParams?.digitsInfo ? globalFilter.format?.formatParams?.digitsInfo : '2' : '0'\"\n [class]=\"globalFilter.errorMessage ? 'ng-invalid ng-dirty' : 'flex-grow-1 p-mr-2 grow-1 input-number'\"\n (onBlur)=\"setNumericRangeValueTwo(globalFilter)\"\n (keyup.enter)=\"setNumericRangeValueTwo(globalFilter,true)\"\n [disabled]=\"globalFilter.disabled\"\n >\n </p-inputNumber>\n <span *ngIf=\"globalFilter.filtering\">\n <se-filter-menu [globalFilter]=\"globalFilter\"></se-filter-menu>\n </span>\n </div>\n </div>\n <span *ngIf=\"globalFilter.errorMessage && globalFilter.errorMessage.length > 0\" class=\"error\">{{\n globalFilter.errorMessage\n }}</span>\n </div>\n </span>\n\n <!-- MultiSelect control -->\n <span [hidden]=\"globalFilter.hidden\">\n <div\n class=\"global-filters-filter-div\"\n *ngSwitchCase=\"fiterTypes.MULTISELECT\"\n >\n <label class=\"\" for=\"basic\">{{ globalFilter.displayText }}\n <span *ngIf=\"globalFilter.requiredField\" class=\"required-star\">*</span>\n </label>\n <p-multiSelect\n [class]=\"globalFilter.errorMessage ? 'ng-invalid ng-dirty' : ''\"\n [(ngModel)]=\"globalFilter.value\"\n [options]=\"globalFilter.data\"\n optionLabel=\"label\"\n (keyup.enter)=\"applyFilters()\"\n (onChange)=\"onFocusOutEvent(globalFilter)\"\n optionValue=\"value\"\n [appendTo]=\"'body'\"\n [disabled]=\"globalFilter.disabled\"\n ></p-multiSelect>\n <span *ngIf=\"globalFilter.errorMessage && globalFilter.errorMessage.length > 0\" class=\"error\">{{\n globalFilter.errorMessage\n }}</span>\n </div>\n </span>\n\n <!-- Lookup Control Field -->\n <span [hidden]=\"globalFilter.hidden\">\n <div\n class=\"global-filters-filter-div\"\n *ngSwitchCase=\"fiterTypes.LOOKUP_INPUT\"\n >\n <label class=\"global-filters-label\" for=\"basic\">{{ globalFilter.displayText }}\n <span *ngIf=\"globalFilter.requiredField\" class=\"required-star\">*</span>\n </label>\n <div> \n <input\n [class]=\"globalFilter.errorMessage ? 'ng-invalid ng-dirty' : ''\"\n [id]=\"globalFilter.field\"\n type=\"text\"\n pInputText\n [(ngModel)]=\"globalFilter?.valueTwo?.text ? globalFilter.valueTwo.text : globalFilter.value\"\n (blur)=\"onFocusOutEvent(globalFilter)\"\n [name]=\"globalFilter.field\"\n (keyup.enter)=\"applyFilters()\"\n (click)=\"selectLookupField(globalFilter)\"\n [disabled]=\"globalFilter.disabled\"\n class=\"form-control\"\n />\n <span class=\"p-input-icon-right global-filter\">\n <i class=\"pi pi-chevron-right lookup-input-icon global-filter\"></i>\n </span>\n </div>\n <span *ngIf=\"globalFilter.errorMessage && globalFilter.errorMessage.length > 0\" class=\"error\">{{\n globalFilter.errorMessage\n }}</span>\n </div>\n </span>\n </div>\n </div>\n</div>\n\n<!-- Apply button -->\n\n<button\n*ngIf=\"searchGlobalFilterBtn\"\npButton\ntype=\"button\"\nicon=\"pi pi-search\"\nid=\"globalSearchbtn\"\n(click)=\"applyFilters()\"\nclass=\"global-search align-globalFilter-btn global-btn\"\n></button>\n\n<!-- Close button -->\n<button\n*ngIf=\"clearGlobalFilterBtn\"\npButton\nid=\"clearGlobalFilterBtn\"\ntype=\"button\"\nicon=\"pi pi-replay\"\n(click)=\"clearFilters()\"\n[class]=\"hideClearFilterBtn ? 'align-globalFilter-btn' : 'hide-Global-clear-filter-button'\"\n></button>\n",
|
|
9318
|
+
template: "<div class=\"global-filters-component-wrapper-div\">\n <div\n [class]=\"globalFilter.hidden ? 'globalFilterHidden' : globalFilter.column ? 'p-col-' + globalFilter.column : 'p-col-3'\"\n *ngFor=\"let globalFilter of globalFilters\"\n >\n <div [ngSwitch]=\"globalFilter.type\">\n <!-- Calender control -->\n <span [hidden]=\"globalFilter.hidden\">\n <div class=\"global-filters-filter-div\" *ngSwitchCase=\"fiterTypes.CALENDAR\">\n <label class=\"global-filters-label\" for=\"basic\">{{ globalFilter.displayText }}\n <span *ngIf=\"globalFilter.requiredField\" class=\"required-star\">*</span>\n </label>\n <div class=\"p-d-flex p-ai-center\">\n <p-calendar\n [class]=\"globalFilter.errorMessage ? 'ng-invalid ng-dirty ' + globalFilter.displayText: 'p-flex-grow-1 p-mr-2 grow-1 ' + globalFilter.displayText\"\n [placeholder]=\"'Select-Date'\"\n [(ngModel)]=\"globalFilter.value\"\n (keyup.enter)=\"applyFilters()\"\n (onSelect)=\"selectDate(globalFilter, true)\"\n [inputId]=\"globalFilter.field\"\n [dateFormat]=\"calendarFormat\"\n (onClose)=\"onFocusOutEvent(globalFilter)\"\n appendTo=\"body\"\n [showButtonBar]=\"true\"\n [disabled]=\"globalFilter.disabled\"\n (keyup)=\"calendarFocusEvent(globalFilter)\"\n >\n </p-calendar>\n <span *ngIf=\"globalFilter.filtering\">\n <se-filter-menu [globalFilter]=\"globalFilter\"></se-filter-menu>\n </span>\n </div>\n <span *ngIf=\"globalFilter.errorMessage && globalFilter.errorMessage.length > 0\" class=\"error\">{{\n globalFilter.errorMessage\n }}</span>\n </div>\n </span>\n\n <!-- Calender Range -->\n <span [hidden]=\"globalFilter.hidden\">\n <div\n class=\"global-filters-filter-div\"\n *ngSwitchCase=\"fiterTypes.CALENDAR_RANGE\"\n >\n <label class=\"\" for=\"basic\">{{ globalFilter.displayText }}\n <span *ngIf=\"globalFilter.requiredField\" class=\"required-star\">*</span>\n </label>\n <div class=\"p-d-flex p-ai-center\">\n <button\n pButton\n type=\"button\"\n [disabled]=\"globalFilter.disabled\" \n class=\"custom-btn\"\n (click)=\"showPrevious(globalFilter)\"\n label=\"Previous {{\n globalFilter.dayRange ? globalFilter.dayRange : 'Week'\n }} <<\"\n >\n <!-- [ngStyle]=\"{ background: globalFilter.color ? globalFilter.color : ''}\" -->\n </button>\n <label class=\"global-filters-label\"\n >\n <span [class]=\"globalFilter.errorMessage ? 'ng-invalid ng-dirty' : ''\"></span>\n <span *ngIf=\"globalFilter.prefix===true || globalFilter.prefix===undefined\">\n {{ globalFilter.labelText ? globalFilter.labelText : '' }}\n </span>\n {{\n startDate\n | date\n : (globalFilter.format ? globalFilter.format : 'MM/dd/yyyy')\n }}\n to\n {{\n endDate\n | date\n : (globalFilter.format ? globalFilter.format : 'MM/dd/yyyy')\n }}\n <span *ngIf=\"globalFilter.prefix===false\">\n {{ globalFilter.labelText ? globalFilter.labelText : ''}}\n </span></label\n >\n <button\n pButton\n type=\"button\"\n [disabled]=\"globalFilter.disabled\" \n class=\"custom-btn\"\n (click)=\"showNext(globalFilter)\"\n label=\"Next {{\n globalFilter.dayRange ? globalFilter.dayRange : 'Week'\n }} >>\"\n >\n <!-- [ngStyle]=\"{ background: globalFilter.color ? globalFilter.color : ''}\" -->\n </button>\n </div>\n <span *ngIf=\"globalFilter.errorMessage && globalFilter.errorMessage.length > 0\" class=\"error\">{{\n globalFilter.errorMessage\n }}</span>\n </div>\n </span>\n\n <!-- Checkbox Control -->\n <span [hidden]=\"globalFilter.hidden\">\n <div class=\"global-filters-filter-div\" *ngSwitchCase=\"fiterTypes.CHECKBOX\">\n <label class=\"\" for=\"basic\">{{ globalFilter.displayText }}\n <span *ngIf=\"globalFilter.requiredField\" class=\"required-star\">*</span>\n </label>\n <p-checkbox\n [class]=\"globalFilter.errorMessage ? 'ng-invalid ng-dirty': 'p-d-flex p-ai-center'\"\n [binary]=\"true\"\n (keyup.enter)=\"applyFilters()\"\n [(ngModel)]=\"globalFilter.value\"\n [disabled]=\"globalFilter.disabled\"\n (onChange)=\"onFocusOutEvent(globalFilter)\"\n (click)=\"onFocusOutEvent(globalFilter)\"\n ></p-checkbox>\n <span *ngIf=\"globalFilter.errorMessage && globalFilter.errorMessage.length > 0\" class=\"error\">{{\n globalFilter.errorMessage\n }}</span>\n </div>\n </span>\n\n <!-- Spacer Control -->\n <span *ngIf=\"!globalFilter.hidden\">\n <div\n class=\"global-filters-filter-div\"\n *ngSwitchCase=\"fiterTypes.SPACER\"\n >\n <span\n [class]=\"\n globalFilter.column\n ? 'p-col-' + globalFilter.column\n : ''\n \"\n ></span>\n </div>\n </span>\n\n <!-- Dropdown Control -->\n <span [hidden]=\"globalFilter.hidden\">\n <div class=\"global-filters-filter-div\" *ngSwitchCase=\"fiterTypes.DROPDOWN\">\n <label class=\"global-filters-label\" for=\"basic\">{{ globalFilter.displayText }}\n <span *ngIf=\"globalFilter.requiredField\" class=\"required-star\">*</span>\n </label>\n <p-dropdown\n [class]=\"globalFilter.errorMessage ? 'ng-invalid ng-dirty' : ''\"\n [(ngModel)]=\"globalFilter.value\"\n [name]=\"globalFilter.displayText\"\n [showClear]=\"true\"\n [styleClass]=\"globalFilter.field\"\n (keyup.Tab)=\"tabFocusEvent(globalFilter)\"\n [placeholder]=\"globalFilter.displayText\"\n [options]=\"globalFilter.data || []\"\n [optionLabel]=\"globalFilter.optionLabel\"\n [optionValue]=\"globalFilter.optionValue\"\n [filter]=\"globalFilter.allowSearch\"\n (onChange)=\"onFocusOutEvent(globalFilter)\"\n (keyup.enter)=\"applyFilters()\"\n [disabled]=\"globalFilter.disabled\"\n ></p-dropdown>\n <span *ngIf=\"globalFilter.errorMessage && globalFilter.errorMessage.length > 0\" class=\"error\">{{\n globalFilter.errorMessage\n }}</span>\n </div>\n </span>\n\n <!-- Input control -->\n <span [hidden]=\"globalFilter.hidden\">\n <div class=\"global-filters-filter-div\" *ngSwitchCase=\"fiterTypes.INPUT\">\n <label class=\"\" for=\"basic\">{{ globalFilter.displayText }}\n <span *ngIf=\"globalFilter.requiredField\" class=\"required-star\">*</span>\n </label>\n <div class=\"\">\n <input\n type=\"text\"\n pInputText\n [(ngModel)]=\"globalFilter.value\"\n [class]=\"globalFilter.errorMessage ? 'ng-invalid ng-dirty' : ''\"\n (keyup.enter)=\"applyFilters()\"\n (blur)=\"onFocusOutEvent(globalFilter)\"\n [disabled]=\"globalFilter.disabled\"\n class=\"form-control\"\n />\n <span *ngIf=\"globalFilter.filtering\">\n <se-filter-menu [globalFilter]=\"globalFilter\"></se-filter-menu>\n </span>\n </div>\n <span *ngIf=\"globalFilter.errorMessage && globalFilter.errorMessage.length > 0\" class=\"error\">{{\n globalFilter.errorMessage\n }}</span>\n </div>\n </span>\n\n <!-- NumericInput control -->\n <span [hidden]=\"globalFilter.hidden\">\n <div\n class=\"global-filters-filter-div\"\n *ngSwitchCase=\"fiterTypes.NUMERICINPUT\"\n >\n <label class=\"global-filters-label\" for=\"basic\">{{ globalFilter.displayText }}\n <span *ngIf=\"globalFilter.requiredField\" class=\"required-star\">*</span>\n </label>\n <div class=\"p-d-flex flex-nowrap align-items-center\">\n <input\n type=\"number\"\n pInputText\n [(ngModel)]=\"globalFilter.value\"\n [class]=\"globalFilter.errorMessage ? 'ng-invalid ng-dirty' : ''\"\n (keyup.enter)=\"applyFilters()\"\n (blur)=\"onFocusOutEvent(globalFilter)\"\n [disabled]=\"globalFilter.disabled\"\n class=\"form-control\"\n />\n <span *ngIf=\"globalFilter.filtering\">\n <se-filter-menu [globalFilter]=\"globalFilter\"></se-filter-menu>\n </span>\n </div>\n <span *ngIf=\"globalFilter.errorMessage && globalFilter.errorMessage.length > 0\" class=\"error\">{{\n globalFilter.errorMessage\n }}</span>\n </div>\n </span>\n \n <!-- Date Range Control -->\n <span [hidden]=\"globalFilter.hidden\">\n <div class=\"global-filters-filter-div\" *ngSwitchCase=\"fiterTypes.DATE_RANGE\">\n <label for=\"basic\">{{ globalFilter.displayText }}\n <span *ngIf=\"globalFilter.requiredField\" class=\"required-star\">*</span>\n </label>\n <div class=\"p-d-flex p-ai-center\">\n <p-calendar \n #rangeCalendar\n [showButtonBar]=\"true\"\n\n [inputId]=\"globalFilter.displayText\"\n [class]=\"globalFilter.errorMessage ? 'ng-invalid ng-dirty ' + globalFilter.displayText : 'p-flex-grow-1 p-mr-2 grow-1 ' + globalFilter.displayText\"\n [(ngModel)]=\"globalFilter.value\" \n selectionMode=\"range\" \n appendTo=\"body\"\n (onSelect)=\"selectDate(globalFilter, true)\"\n [dateFormat]=\"calendarFormat\"\n (onClose)=\"onFocusOutEvent(globalFilter)\"\n (onClickOutside)=\"setDateRangeFilterValue(globalFilter)\"\n (onBlur)=\"setDateRangeFilterValue(globalFilter)\"\n (keyup)=\"calendarFocusEvent(globalFilter, $event)\"\n (onClearClick)=\"clearDateRangeValue(globalFilter)\"\n [disabled]=\"globalFilter.disabled\"\n (keyup.enter)=\"applyFilters(true, globalFilter)\"\n \n ></p-calendar>\n <!-- todayButtonStyleClass=\"p-d-none\"\n clearButtonStyleClass=\"p-ml-auto\" -->\n <span *ngIf=\"globalFilter.filtering\">\n <se-filter-menu [globalFilter]=\"globalFilter\"></se-filter-menu>\n </span>\n </div>\n <span *ngIf=\"globalFilter.errorMessage && globalFilter.errorMessage.length > 0\" class=\"error\">{{\n globalFilter.errorMessage\n }}</span>\n </div>\n </span>\n\n <!-- Numeric Range control -->\n <span [hidden]=\"globalFilter.hidden\">\n <div\n class=\"global-filters-filter-div\"\n *ngSwitchCase=\"fiterTypes.NUMERIC_RANGE\"\n >\n <label for=\"basic\">{{ globalFilter.displayText }}\n <span *ngIf=\"globalFilter.requiredField\" class=\"required-star\">*</span>\n </label>\n <div class=\"p-d-flex\">\n <div class=\"p-d-flex flex-nowrap align-items-center p-mr-2\">\n <p-inputNumber\n [showButtons]=\"false\"\n [(ngModel)]=\"globalFilter.value\"\n [minFractionDigits]=\"globalFilter?.format?.type === 'decimal' ? globalFilter.format?.formatParams?.digitsInfo ? globalFilter.format?.formatParams?.digitsInfo : '2' : '0'\"\n [maxFractionDigits]=\"globalFilter?.format?.type === 'decimal' ? globalFilter.format?.formatParams?.digitsInfo ? globalFilter.format?.formatParams?.digitsInfo : '2' : '0'\"\n (onBlur)=\"setNumericRangeValueFrom(globalFilter)\"\n (keyup.enter)=\"setNumericRangeValueFrom(globalFilter,true)\"\n [class]=\"globalFilter.errorMessage ? 'ng-invalid ng-dirty' : 'flex-grow-1 grow-1 input-number'\"\n [disabled]=\"globalFilter.disabled\"\n >\n </p-inputNumber>\n <span *ngIf=\"globalFilter.errorMessage && globalFilter.errorMessage.length > 0\" class=\"error\">{{\n globalFilter.errorMessage\n }}</span>\n </div>\n <span class=\"to-numeric p-mr-2\">To</span>\n <div class=\"p-d-flex flex-nowrap align-items-center\">\n <p-inputNumber\n [showButtons]=\"false\"\n [(ngModel)]=\"globalFilter.valueTwo\"\n [minFractionDigits]=\"globalFilter?.format?.type === 'decimal' ? globalFilter.format?.formatParams?.digitsInfo ? globalFilter.format?.formatParams?.digitsInfo : '2' : '0'\"\n [maxFractionDigits]=\"globalFilter?.format?.type === 'decimal' ? globalFilter.format?.formatParams?.digitsInfo ? globalFilter.format?.formatParams?.digitsInfo : '2' : '0'\"\n [class]=\"globalFilter.errorMessage ? 'ng-invalid ng-dirty' : 'flex-grow-1 p-mr-2 grow-1 input-number'\"\n (onBlur)=\"setNumericRangeValueTwo(globalFilter)\"\n (keyup.enter)=\"setNumericRangeValueTwo(globalFilter,true)\"\n [disabled]=\"globalFilter.disabled\"\n >\n </p-inputNumber>\n <span *ngIf=\"globalFilter.filtering\">\n <se-filter-menu [globalFilter]=\"globalFilter\"></se-filter-menu>\n </span>\n </div>\n </div>\n <span *ngIf=\"globalFilter.errorMessage && globalFilter.errorMessage.length > 0\" class=\"error\">{{\n globalFilter.errorMessage\n }}</span>\n </div>\n </span>\n\n <!-- MultiSelect control -->\n <span [hidden]=\"globalFilter.hidden\">\n <div\n class=\"global-filters-filter-div\"\n *ngSwitchCase=\"fiterTypes.MULTISELECT\"\n >\n <label class=\"\" for=\"basic\">{{ globalFilter.displayText }}\n <span *ngIf=\"globalFilter.requiredField\" class=\"required-star\">*</span>\n </label>\n <p-multiSelect\n [class]=\"globalFilter.errorMessage ? 'ng-invalid ng-dirty' : ''\"\n [(ngModel)]=\"globalFilter.value\"\n [options]=\"globalFilter.data\"\n optionLabel=\"label\"\n (keyup.enter)=\"applyFilters()\"\n (onChange)=\"onFocusOutEvent(globalFilter)\"\n optionValue=\"value\"\n [appendTo]=\"'body'\"\n [disabled]=\"globalFilter.disabled\"\n ></p-multiSelect>\n <span *ngIf=\"globalFilter.errorMessage && globalFilter.errorMessage.length > 0\" class=\"error\">{{\n globalFilter.errorMessage\n }}</span>\n </div>\n </span>\n\n <!-- Lookup Control Field -->\n <span [hidden]=\"globalFilter.hidden\">\n <div\n class=\"global-filters-filter-div\"\n *ngSwitchCase=\"fiterTypes.LOOKUP_INPUT\"\n >\n <label class=\"global-filters-label\" for=\"basic\">{{ globalFilter.displayText }}\n <span *ngIf=\"globalFilter.requiredField\" class=\"required-star\">*</span>\n </label>\n <div> \n <input\n [class]=\"globalFilter.errorMessage ? 'ng-invalid ng-dirty' : ''\"\n [id]=\"globalFilter.field\"\n type=\"text\"\n pInputText\n [(ngModel)]=\"globalFilter?.valueTwo?.text ? globalFilter.valueTwo.text : globalFilter.value\"\n (blur)=\"onFocusOutEvent(globalFilter)\"\n [name]=\"globalFilter.field\"\n (keyup.enter)=\"applyFilters()\"\n (click)=\"selectLookupField(globalFilter)\"\n [disabled]=\"globalFilter.disabled\"\n class=\"form-control lookup-input\"\n />\n <span class=\"p-input-icon-right global-filter\">\n <i class=\"pi pi-chevron-right lookup-input-icon global-filter\"></i>\n </span>\n </div>\n <span *ngIf=\"globalFilter.errorMessage && globalFilter.errorMessage.length > 0\" class=\"error\">{{\n globalFilter.errorMessage\n }}</span>\n </div>\n </span>\n </div>\n </div>\n</div>\n\n<!-- Apply button -->\n\n<button\n*ngIf=\"searchGlobalFilterBtn\"\npButton\ntype=\"button\"\nicon=\"pi pi-search\"\nid=\"globalSearchbtn\"\n(click)=\"applyFilters()\"\nclass=\"global-search align-globalFilter-btn global-btn\"\n></button>\n\n<!-- Close button -->\n<button\n*ngIf=\"clearGlobalFilterBtn\"\npButton\nid=\"clearGlobalFilterBtn\"\ntype=\"button\"\nicon=\"pi pi-replay\"\n(click)=\"clearFilters()\"\n[class]=\"hideClearFilterBtn ? 'align-globalFilter-btn' : 'hide-Global-clear-filter-button'\"\n></button>\n",
|
|
9318
9319
|
styles: [":host ::ng-deep .input-number .p-inputnumber-button-group{visibility:hidden}:host ::ng-deep .input-number:hover .p-inputnumber-button-group{visibility:visible}.error{color:red}.hide-Global-clear-filter-button{display:none}\n"]
|
|
9319
9320
|
},] }
|
|
9320
9321
|
];
|