ontimize-web-ngx
Version:
Ontimize Web framework using Angular 15
201 lines • 27.3 kB
JavaScript
import { BehaviorSubject } from 'rxjs';
import { Util } from '../../../util/util';
import { Codes } from '../../../util/codes';
export class OColumn {
constructor() {
this._editing = false;
this.multilineSubject = new BehaviorSubject(this.multiline);
this.isMultiline = this.multilineSubject.asObservable();
}
get editing() {
return this._editing;
}
set editing(val) {
if (this.type === 'boolean' && this.editor && this.editor.autoCommit) {
this._editing = false;
}
this._editing = this.editor != null && val;
this.editor.setEditingRowClass(this._editing);
}
setDefaultProperties(args) {
this.type = 'string';
this.className = 'o-column-' + (this.type) + ' ';
this.orderable = args.orderable;
this.resizable = args.resizable;
this.groupable = args.groupable;
this.searchable = !(this.type === 'date' && args.pageable);
this.searching = true;
this.name = this.attr;
this.title = this.attr;
this.multiline = false;
}
setColumnProperties(column) {
this.title = Util.isDefined(column.title) ? column.title : column.attr;
this.definition = column;
this.multiline = column.multiline;
if (Util.isDefined(column.minWidth)) {
this.minWidth = column.minWidth;
}
if (Util.isDefined(column.maxWidth)) {
this.maxWidth = column.maxWidth;
}
if (Util.isDefined(column.orderable)) {
this.orderable = column.orderable;
}
if (Util.isDefined(column.resizable)) {
this.resizable = column.resizable;
}
if (Util.isDefined(column.searchable)) {
this.searchable = column.searchable;
}
if (Util.isDefined(column.groupable)) {
this.groupable = column.groupable;
}
if (Util.isDefined(column.renderer)) {
this.renderer = column.renderer;
}
if (Util.isDefined(column.editor)) {
this.editor = column.editor;
}
if (Util.isDefined(column.type)) {
this.type = column.type;
this.className = 'o-column-' + (this.type) + ' ';
}
if (Util.isDefined(column.type)) {
this.sqlType = column.getSQLType();
}
if (Util.isDefined(column.class)) {
this.className = Util.isDefined(this.className) ? (this.className + ' ' + column.class) : column.class;
}
if (Util.isDefined(column.operation) || Util.isDefined(column.functionOperation)) {
this.calculate = column.operation ? column.operation : column.functionOperation;
}
if (Util.isDefined(column.tooltip) && column.tooltip) {
this.tooltip = {
value: column.tooltipValue,
function: column.tooltipFunction
};
}
if (Util.isDefined(column.filterExpressionFunction)) {
this.filterExpressionFunction = column.filterExpressionFunction;
}
}
set searchable(val) {
this._searchable = val;
this.searching = val;
}
get searchable() {
return this._searchable;
}
set multiline(val) {
val = Util.parseBoolean(String(val));
this._multiline = val;
this.multilineSubject.next(this._multiline);
}
get multiline() {
return this._multiline;
}
hasTooltip() {
return Util.isDefined(this.tooltip);
}
getTooltip(rowData) {
if (!this.hasTooltip()) {
return undefined;
}
let tooltip;
if (Util.isDefined(this.tooltip.value)) {
tooltip = this.tooltip.value;
}
else if (Util.isDefined(this.tooltip.function)) {
try {
tooltip = this.tooltip.function(rowData);
}
catch (e) {
console.warn('o-table-column tooltip-function didnt worked');
}
}
else {
tooltip = Util.isDefined(this.renderer) ? this.renderer.getTooltip(rowData[this.name], rowData) : rowData[this.name];
}
return tooltip;
}
getMinWidth() {
if (Util.isDefined(this.width)) {
return this.width;
}
return this.minWidth;
}
getMinWidthValue() {
return Util.extractPixelsValue(this.minWidth, Codes.DEFAULT_COLUMN_MIN_WIDTH);
}
getMaxWidthValue() {
const value = Util.extractPixelsValue(this.maxWidth);
return value ? value : undefined;
}
setRenderWidth(horizontalScrolled, clientWidth) {
if (Util.isDefined(this.width)) {
return;
}
const defaultWidth = (horizontalScrolled) ? undefined : 'auto';
this.width = Util.isDefined(this.DOMWidth) ? (this.getDOMWidth(clientWidth) + 'px') : defaultWidth;
}
getDOMWidth(val) {
let DOMWidth;
const pxVal = Util.extractPixelsValue(val);
if (Util.isDefined(pxVal)) {
DOMWidth = pxVal;
const minValue = this.getMinWidthValue();
if (Util.isDefined(minValue) && pxVal > 0 && pxVal < minValue) {
DOMWidth = minValue;
}
if (Util.isDefined(this.maxWidth)) {
const maxValue = Util.extractPixelsValue(this.maxWidth);
if (Util.isDefined(maxValue) && pxVal > maxValue) {
DOMWidth = maxValue;
}
}
}
return DOMWidth;
}
set width(val) {
let widthVal = val;
let DOMWidth = this.getDOMWidth(val);
const pxVal = Util.extractPixelsValue(DOMWidth);
if (Util.isDefined(pxVal)) {
this.DOMWidth = pxVal;
widthVal = pxVal + 'px';
}
this._width = widthVal;
}
get width() {
return this._width;
}
getWidthToStore() {
return this._width;
}
setWidth(val) {
this.width = val + 'px';
this.DOMWidth = val;
}
getTitleAlignClass() {
if (Util.isDefined(this.definition)) {
return this.definition.titleAlign || Codes.COLUMN_TITLE_ALIGN_CENTER;
}
return Codes.COLUMN_TITLE_ALIGN_CENTER;
}
getFilterValue(cellValue, rowValue) {
if (this.renderer) {
return this.renderer.getFilter(cellValue, rowValue);
}
else {
return [cellValue];
}
}
useCustomFilterFunction() {
return this.searching && this.visible && this.renderer != null && this.renderer.filterFunction != null;
}
useQuickfilterFunction() {
return this.searching && this.visible && !(this.renderer != null && this.renderer.filterFunction != null);
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby1jb2x1bW4uY2xhc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vbnRpbWl6ZS13ZWItbmd4L3NyYy9saWIvY29tcG9uZW50cy90YWJsZS9jb2x1bW4vby1jb2x1bW4uY2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQVFuRCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFMUMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRTVDLE1BQU0sT0FBTyxPQUFPO0lBQXBCO1FBY1ksYUFBUSxHQUFZLEtBQUssQ0FBQztRQVk1QixxQkFBZ0IsR0FBNkIsSUFBSSxlQUFlLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2xGLGdCQUFXLEdBQXdCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQW1PakYsQ0FBQztJQWhPQyxJQUFJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUVELElBQUksT0FBTyxDQUFDLEdBQVk7UUFDdEIsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFO1lBQ3BFLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1NBQ3ZCO1FBQ0QsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksSUFBSSxHQUFHLENBQUM7UUFDM0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDL0MsQ0FBQztJQUVELG9CQUFvQixDQUFDLElBQVM7UUFDNUIsSUFBSSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUM7UUFDckIsSUFBSSxDQUFDLFNBQVMsR0FBRyxXQUFXLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQ2pELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUNoQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDaEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssTUFBTSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUV0QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDdEIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0lBQ3pCLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxNQUE2QztRQUMvRCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBQ3ZFLElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQztRQUVsQyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ25DLElBQUksQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQztTQUNqQztRQUNELElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDbkMsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDO1NBQ2pDO1FBQ0QsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUNwQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUM7U0FDbkM7UUFDRCxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQ3BDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQztTQUNuQztRQUVELElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEVBQUU7WUFDckMsSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDO1NBQ3JDO1FBRUQsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUNwQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUM7U0FDbkM7UUFDRCxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ25DLElBQUksQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQztTQUNqQztRQUNELElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDakMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO1NBQzdCO1FBQ0QsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUMvQixJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7WUFDeEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxXQUFXLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO1NBQ2xEO1FBRUQsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUMvQixJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQztTQUNwQztRQUVELElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDaEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLEdBQUcsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7U0FDeEc7UUFFRCxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLEVBQUU7WUFDaEYsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUM7U0FDakY7UUFFRCxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLEVBQUU7WUFDcEQsSUFBSSxDQUFDLE9BQU8sR0FBRztnQkFDYixLQUFLLEVBQUUsTUFBTSxDQUFDLFlBQVk7Z0JBQzFCLFFBQVEsRUFBRSxNQUFNLENBQUMsZUFBZTthQUNqQyxDQUFDO1NBQ0g7UUFDRCxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLHdCQUF3QixDQUFDLEVBQUU7WUFDbkQsSUFBSSxDQUFDLHdCQUF3QixHQUFHLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQztTQUNqRTtJQUNILENBQUM7SUFFRCxJQUFJLFVBQVUsQ0FBQyxHQUFZO1FBQ3pCLElBQUksQ0FBQyxXQUFXLEdBQUcsR0FBRyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxJQUFJLFVBQVU7UUFDWixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUIsQ0FBQztJQUVELElBQUksU0FBUyxDQUFDLEdBQVk7UUFDeEIsR0FBRyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDckMsSUFBSSxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUM7UUFDdEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVELElBQUksU0FBUztRQUNYLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUN6QixDQUFDO0lBRUQsVUFBVTtRQUNSLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVELFVBQVUsQ0FBQyxPQUFZO1FBQ3JCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUU7WUFDdEIsT0FBTyxTQUFTLENBQUM7U0FDbEI7UUFDRCxJQUFJLE9BQU8sQ0FBQztRQUNaLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3RDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztTQUM5QjthQUFNLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ2hELElBQUk7Z0JBQ0YsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQzFDO1lBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ1YsT0FBTyxDQUFDLElBQUksQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDO2FBQzlEO1NBQ0Y7YUFBTTtZQUNMLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUN0SDtRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUM5QixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7U0FDbkI7UUFDRCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUVELGdCQUFnQjtRQUNkLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLHdCQUF3QixDQUFDLENBQUM7SUFDaEYsQ0FBQztJQUVELGdCQUFnQjtRQUNkLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDckQsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ25DLENBQUM7SUFFRCxjQUFjLENBQUMsa0JBQTJCLEVBQUUsV0FBbUI7UUFDN0QsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUM5QixPQUFPO1NBQ1I7UUFFRCxNQUFNLFlBQVksR0FBRyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO1FBQy9ELElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDO0lBQ3JHLENBQUM7SUFFRCxXQUFXLENBQUMsR0FBUTtRQUNsQixJQUFJLFFBQVEsQ0FBQztRQUNiLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUUzQyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDekIsUUFBUSxHQUFHLEtBQUssQ0FBQztZQUNqQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUN6QyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxHQUFHLENBQUMsSUFBSSxLQUFLLEdBQUcsUUFBUSxFQUFFO2dCQUM3RCxRQUFRLEdBQUcsUUFBUSxDQUFDO2FBQ3JCO1lBRUQsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDakMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDeEQsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssR0FBRyxRQUFRLEVBQUU7b0JBQ2hELFFBQVEsR0FBRyxRQUFRLENBQUM7aUJBQ3JCO2FBQ0Y7U0FFRjtRQUNELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxJQUFJLEtBQUssQ0FBQyxHQUFXO1FBQ25CLElBQUksUUFBUSxHQUFHLEdBQUcsQ0FBQztRQUNuQixJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3JDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNoRCxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDekIsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7WUFDdEIsUUFBUSxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUM7U0FDekI7UUFFRCxJQUFJLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQztJQUN6QixDQUFDO0lBRUQsSUFBSSxLQUFLO1FBQ1AsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3JCLENBQUM7SUFHRCxlQUFlO1FBQ2IsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxRQUFRLENBQUMsR0FBVztRQUNsQixJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUM7UUFDeEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUM7SUFDdEIsQ0FBQztJQUVELGtCQUFrQjtRQUNoQixJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQ25DLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDO1NBQ3RFO1FBRUQsT0FBTyxLQUFLLENBQUMseUJBQXlCLENBQUM7SUFDekMsQ0FBQztJQUVELGNBQWMsQ0FBQyxTQUFjLEVBQUUsUUFBYztRQUMzQyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDakIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUM7U0FDckQ7YUFBTTtZQUNMLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUNwQjtJQUNILENBQUM7SUFFRCx1QkFBdUI7UUFDckIsT0FBTyxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDO0lBQ3pHLENBQUM7SUFFRCxzQkFBc0I7UUFDcEIsT0FBTyxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxDQUFDO0lBQzVHLENBQUM7Q0FFRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBPVGFibGVDb2x1bW5DYWxjdWxhdGVkIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJmYWNlcy9vLXRhYmxlLWNvbHVtbi1jYWxjdWxhdGVkLmludGVyZmFjZSc7XG5pbXBvcnQgeyBPVGFibGVDb2x1bW4gfSBmcm9tICcuLi8uLi8uLi9pbnRlcmZhY2VzL28tdGFibGUtY29sdW1uLmludGVyZmFjZSc7XG5pbXBvcnQgeyBFeHByZXNzaW9uIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvZXhwcmVzc2lvbi50eXBlJztcbmltcG9ydCB7IE9wZXJhdG9yRnVuY3Rpb24gfSBmcm9tICcuLi8uLi8uLi90eXBlcy9vcGVyYXRpb24tZnVuY3Rpb24udHlwZSc7XG5pbXBvcnQgeyBPQ29sdW1uQWdncmVnYXRlIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvdGFibGUvby1jb2x1bW4tYWdncmVnYXRlLnR5cGUnO1xuaW1wb3J0IHsgT0NvbHVtblRvb2x0aXAgfSBmcm9tICcuLi8uLi8uLi90eXBlcy90YWJsZS9vLWNvbHVtbi10b29sdGlwLnR5cGUnO1xuaW1wb3J0IHsgVXRpbCB9IGZyb20gJy4uLy4uLy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQgeyBPQmFzZVRhYmxlQ2VsbFJlbmRlcmVyIH0gZnJvbSAnLi9jZWxsLXJlbmRlcmVyL28tYmFzZS10YWJsZS1jZWxsLXJlbmRlcmVyLmNsYXNzJztcbmltcG9ydCB7IENvZGVzIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9jb2Rlcyc7XG5cbmV4cG9ydCBjbGFzcyBPQ29sdW1uIHtcbiAgYXR0cjogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIHR5cGU6IHN0cmluZztcbiAgc3FsVHlwZTogbnVtYmVyO1xuICBjbGFzc05hbWU6IHN0cmluZztcbiAgb3JkZXJhYmxlOiBib29sZWFuO1xuICBncm91cGFibGU6IGJvb2xlYW47XG4gIF9zZWFyY2hhYmxlOiBib29sZWFuO1xuICBzZWFyY2hpbmc6IGJvb2xlYW47IC8vIHRoaXMgY29sdW1uIGlzIHVzZWQgdG8gZmlsdGVyIGluIHF1aWNrZmlsdGVyXG4gIHZpc2libGU6IGJvb2xlYW47XG4gIHJlbmRlcmVyOiBPQmFzZVRhYmxlQ2VsbFJlbmRlcmVyO1xuICBlZGl0b3I6IGFueTtcbiAgcHJvdGVjdGVkIF9lZGl0aW5nOiBib29sZWFuID0gZmFsc2U7XG4gIF93aWR0aDogc3RyaW5nO1xuICBtaW5XaWR0aDogc3RyaW5nO1xuICBtYXhXaWR0aDogc3RyaW5nO1xuICBhZ2dyZWdhdGU6IE9Db2x1bW5BZ2dyZWdhdGU7XG4gIGNhbGN1bGF0ZTogc3RyaW5nIHwgT3BlcmF0b3JGdW5jdGlvbjtcbiAgZGVmaW5pdGlvbjogT1RhYmxlQ29sdW1uO1xuICB0b29sdGlwOiBPQ29sdW1uVG9vbHRpcDtcbiAgcmVzaXphYmxlOiBib29sZWFuO1xuICBET01XaWR0aDogbnVtYmVyO1xuICBmaWx0ZXJFeHByZXNzaW9uRnVuY3Rpb246IChjb2x1bW5BdHRyOiBzdHJpbmcsIHF1aWNrRmlsdGVyPzogc3RyaW5nKSA9PiBFeHByZXNzaW9uO1xuXG4gIHByaXZhdGUgbXVsdGlsaW5lU3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdCh0aGlzLm11bHRpbGluZSk7XG4gIHB1YmxpYyBpc011bHRpbGluZTogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMubXVsdGlsaW5lU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgcHJpdmF0ZSBfbXVsdGlsaW5lOiBib29sZWFuO1xuXG4gIGdldCBlZGl0aW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9lZGl0aW5nO1xuICB9XG5cbiAgc2V0IGVkaXRpbmcodmFsOiBib29sZWFuKSB7XG4gICAgaWYgKHRoaXMudHlwZSA9PT0gJ2Jvb2xlYW4nICYmIHRoaXMuZWRpdG9yICYmIHRoaXMuZWRpdG9yLmF1dG9Db21taXQpIHtcbiAgICAgIHRoaXMuX2VkaXRpbmcgPSBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5fZWRpdGluZyA9IHRoaXMuZWRpdG9yICE9IG51bGwgJiYgdmFsO1xuICAgIHRoaXMuZWRpdG9yLnNldEVkaXRpbmdSb3dDbGFzcyh0aGlzLl9lZGl0aW5nKVxuICB9XG5cbiAgc2V0RGVmYXVsdFByb3BlcnRpZXMoYXJnczogYW55KSB7XG4gICAgdGhpcy50eXBlID0gJ3N0cmluZyc7XG4gICAgdGhpcy5jbGFzc05hbWUgPSAnby1jb2x1bW4tJyArICh0aGlzLnR5cGUpICsgJyAnO1xuICAgIHRoaXMub3JkZXJhYmxlID0gYXJncy5vcmRlcmFibGU7XG4gICAgdGhpcy5yZXNpemFibGUgPSBhcmdzLnJlc2l6YWJsZTtcbiAgICB0aGlzLmdyb3VwYWJsZSA9IGFyZ3MuZ3JvdXBhYmxlO1xuICAgIHRoaXMuc2VhcmNoYWJsZSA9ICEodGhpcy50eXBlID09PSAnZGF0ZScgJiYgYXJncy5wYWdlYWJsZSk7XG4gICAgdGhpcy5zZWFyY2hpbmcgPSB0cnVlO1xuICAgIC8vIGNvbHVtbiB3aXRob3V0ICdhdHRyJyBzaG91bGQgY29udGFpbiBvbmx5IHJlbmRlcmVycyB0aGF0IGRvIG5vdCBkZXBlbmQgb24gY2VsbCBkYXRhLCBidXQgcm93IGRhdGEgKGUuZy4gYWN0aW9ucylcbiAgICB0aGlzLm5hbWUgPSB0aGlzLmF0dHI7XG4gICAgdGhpcy50aXRsZSA9IHRoaXMuYXR0cjtcbiAgICB0aGlzLm11bHRpbGluZSA9IGZhbHNlO1xuICB9XG5cbiAgc2V0Q29sdW1uUHJvcGVydGllcyhjb2x1bW46IE9UYWJsZUNvbHVtbiAmIE9UYWJsZUNvbHVtbkNhbGN1bGF0ZWQpIHtcbiAgICB0aGlzLnRpdGxlID0gVXRpbC5pc0RlZmluZWQoY29sdW1uLnRpdGxlKSA/IGNvbHVtbi50aXRsZSA6IGNvbHVtbi5hdHRyO1xuICAgIHRoaXMuZGVmaW5pdGlvbiA9IGNvbHVtbjtcbiAgICB0aGlzLm11bHRpbGluZSA9IGNvbHVtbi5tdWx0aWxpbmU7XG5cbiAgICBpZiAoVXRpbC5pc0RlZmluZWQoY29sdW1uLm1pbldpZHRoKSkge1xuICAgICAgdGhpcy5taW5XaWR0aCA9IGNvbHVtbi5taW5XaWR0aDtcbiAgICB9XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKGNvbHVtbi5tYXhXaWR0aCkpIHtcbiAgICAgIHRoaXMubWF4V2lkdGggPSBjb2x1bW4ubWF4V2lkdGg7XG4gICAgfVxuICAgIGlmIChVdGlsLmlzRGVmaW5lZChjb2x1bW4ub3JkZXJhYmxlKSkge1xuICAgICAgdGhpcy5vcmRlcmFibGUgPSBjb2x1bW4ub3JkZXJhYmxlO1xuICAgIH1cbiAgICBpZiAoVXRpbC5pc0RlZmluZWQoY29sdW1uLnJlc2l6YWJsZSkpIHtcbiAgICAgIHRoaXMucmVzaXphYmxlID0gY29sdW1uLnJlc2l6YWJsZTtcbiAgICB9XG5cbiAgICBpZiAoVXRpbC5pc0RlZmluZWQoY29sdW1uLnNlYXJjaGFibGUpKSB7XG4gICAgICB0aGlzLnNlYXJjaGFibGUgPSBjb2x1bW4uc2VhcmNoYWJsZTtcbiAgICB9XG5cbiAgICBpZiAoVXRpbC5pc0RlZmluZWQoY29sdW1uLmdyb3VwYWJsZSkpIHtcbiAgICAgIHRoaXMuZ3JvdXBhYmxlID0gY29sdW1uLmdyb3VwYWJsZTtcbiAgICB9XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKGNvbHVtbi5yZW5kZXJlcikpIHtcbiAgICAgIHRoaXMucmVuZGVyZXIgPSBjb2x1bW4ucmVuZGVyZXI7XG4gICAgfVxuICAgIGlmIChVdGlsLmlzRGVmaW5lZChjb2x1bW4uZWRpdG9yKSkge1xuICAgICAgdGhpcy5lZGl0b3IgPSBjb2x1bW4uZWRpdG9yO1xuICAgIH1cbiAgICBpZiAoVXRpbC5pc0RlZmluZWQoY29sdW1uLnR5cGUpKSB7XG4gICAgICB0aGlzLnR5cGUgPSBjb2x1bW4udHlwZTtcbiAgICAgIHRoaXMuY2xhc3NOYW1lID0gJ28tY29sdW1uLScgKyAodGhpcy50eXBlKSArICcgJztcbiAgICB9XG5cbiAgICBpZiAoVXRpbC5pc0RlZmluZWQoY29sdW1uLnR5cGUpKSB7XG4gICAgICB0aGlzLnNxbFR5cGUgPSBjb2x1bW4uZ2V0U1FMVHlwZSgpO1xuICAgIH1cblxuICAgIGlmIChVdGlsLmlzRGVmaW5lZChjb2x1bW4uY2xhc3MpKSB7XG4gICAgICB0aGlzLmNsYXNzTmFtZSA9IFV0aWwuaXNEZWZpbmVkKHRoaXMuY2xhc3NOYW1lKSA/ICh0aGlzLmNsYXNzTmFtZSArICcgJyArIGNvbHVtbi5jbGFzcykgOiBjb2x1bW4uY2xhc3M7XG4gICAgfVxuICAgIC8vIGlmIChjb2x1bW4gaW5zdGFuY2VvZiBPVGFibGVDb2x1bW5DYWxjdWxhdGVkQ29tcG9uZW50KSB7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKGNvbHVtbi5vcGVyYXRpb24pIHx8IFV0aWwuaXNEZWZpbmVkKGNvbHVtbi5mdW5jdGlvbk9wZXJhdGlvbikpIHtcbiAgICAgIHRoaXMuY2FsY3VsYXRlID0gY29sdW1uLm9wZXJhdGlvbiA/IGNvbHVtbi5vcGVyYXRpb24gOiBjb2x1bW4uZnVuY3Rpb25PcGVyYXRpb247XG4gICAgfVxuICAgIC8vIH1cbiAgICBpZiAoVXRpbC5pc0RlZmluZWQoY29sdW1uLnRvb2x0aXApICYmIGNvbHVtbi50b29sdGlwKSB7XG4gICAgICB0aGlzLnRvb2x0aXAgPSB7XG4gICAgICAgIHZhbHVlOiBjb2x1bW4udG9vbHRpcFZhbHVlLFxuICAgICAgICBmdW5jdGlvbjogY29sdW1uLnRvb2x0aXBGdW5jdGlvblxuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKGNvbHVtbi5maWx0ZXJFeHByZXNzaW9uRnVuY3Rpb24pKSB7XG4gICAgICB0aGlzLmZpbHRlckV4cHJlc3Npb25GdW5jdGlvbiA9IGNvbHVtbi5maWx0ZXJFeHByZXNzaW9uRnVuY3Rpb247XG4gICAgfVxuICB9XG5cbiAgc2V0IHNlYXJjaGFibGUodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5fc2VhcmNoYWJsZSA9IHZhbDtcbiAgICB0aGlzLnNlYXJjaGluZyA9IHZhbDtcbiAgfVxuXG4gIGdldCBzZWFyY2hhYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9zZWFyY2hhYmxlO1xuICB9XG5cbiAgc2V0IG11bHRpbGluZSh2YWw6IGJvb2xlYW4pIHtcbiAgICB2YWwgPSBVdGlsLnBhcnNlQm9vbGVhbihTdHJpbmcodmFsKSk7XG4gICAgdGhpcy5fbXVsdGlsaW5lID0gdmFsO1xuICAgIHRoaXMubXVsdGlsaW5lU3ViamVjdC5uZXh0KHRoaXMuX211bHRpbGluZSk7XG4gIH1cblxuICBnZXQgbXVsdGlsaW5lKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9tdWx0aWxpbmU7XG4gIH1cblxuICBoYXNUb29sdGlwKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBVdGlsLmlzRGVmaW5lZCh0aGlzLnRvb2x0aXApO1xuICB9XG5cbiAgZ2V0VG9vbHRpcChyb3dEYXRhOiBhbnkpOiBhbnkge1xuICAgIGlmICghdGhpcy5oYXNUb29sdGlwKCkpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGxldCB0b29sdGlwO1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZCh0aGlzLnRvb2x0aXAudmFsdWUpKSB7XG4gICAgICB0b29sdGlwID0gdGhpcy50b29sdGlwLnZhbHVlO1xuICAgIH0gZWxzZSBpZiAoVXRpbC5pc0RlZmluZWQodGhpcy50b29sdGlwLmZ1bmN0aW9uKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdG9vbHRpcCA9IHRoaXMudG9vbHRpcC5mdW5jdGlvbihyb3dEYXRhKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdvLXRhYmxlLWNvbHVtbiB0b29sdGlwLWZ1bmN0aW9uIGRpZG50IHdvcmtlZCcpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0b29sdGlwID0gVXRpbC5pc0RlZmluZWQodGhpcy5yZW5kZXJlcikgPyB0aGlzLnJlbmRlcmVyLmdldFRvb2x0aXAocm93RGF0YVt0aGlzLm5hbWVdLCByb3dEYXRhKSA6IHJvd0RhdGFbdGhpcy5uYW1lXTtcbiAgICB9XG4gICAgcmV0dXJuIHRvb2x0aXA7XG4gIH1cblxuICBnZXRNaW5XaWR0aCgpIHtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQodGhpcy53aWR0aCkpIHtcbiAgICAgIHJldHVybiB0aGlzLndpZHRoO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5taW5XaWR0aDtcbiAgfVxuXG4gIGdldE1pbldpZHRoVmFsdWUoKSB7XG4gICAgcmV0dXJuIFV0aWwuZXh0cmFjdFBpeGVsc1ZhbHVlKHRoaXMubWluV2lkdGgsIENvZGVzLkRFRkFVTFRfQ09MVU1OX01JTl9XSURUSCk7XG4gIH1cblxuICBnZXRNYXhXaWR0aFZhbHVlKCkge1xuICAgIGNvbnN0IHZhbHVlID0gVXRpbC5leHRyYWN0UGl4ZWxzVmFsdWUodGhpcy5tYXhXaWR0aCk7XG4gICAgcmV0dXJuIHZhbHVlID8gdmFsdWUgOiB1bmRlZmluZWQ7XG4gIH1cblxuICBzZXRSZW5kZXJXaWR0aChob3Jpem9udGFsU2Nyb2xsZWQ6IGJvb2xlYW4sIGNsaWVudFdpZHRoOiBudW1iZXIpIHtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQodGhpcy53aWR0aCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBkZWZhdWx0V2lkdGggPSAoaG9yaXpvbnRhbFNjcm9sbGVkKSA/IHVuZGVmaW5lZCA6ICdhdXRvJztcbiAgICB0aGlzLndpZHRoID0gVXRpbC5pc0RlZmluZWQodGhpcy5ET01XaWR0aCkgPyAodGhpcy5nZXRET01XaWR0aChjbGllbnRXaWR0aCkgKyAncHgnKSA6IGRlZmF1bHRXaWR0aDtcbiAgfVxuXG4gIGdldERPTVdpZHRoKHZhbDogYW55KTogbnVtYmVyIHtcbiAgICBsZXQgRE9NV2lkdGg7XG4gICAgY29uc3QgcHhWYWwgPSBVdGlsLmV4dHJhY3RQaXhlbHNWYWx1ZSh2YWwpO1xuXG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKHB4VmFsKSkge1xuICAgICAgRE9NV2lkdGggPSBweFZhbDtcbiAgICAgIGNvbnN0IG1pblZhbHVlID0gdGhpcy5nZXRNaW5XaWR0aFZhbHVlKCk7XG4gICAgICBpZiAoVXRpbC5pc0RlZmluZWQobWluVmFsdWUpICYmIHB4VmFsID4gMCAmJiBweFZhbCA8IG1pblZhbHVlKSB7XG4gICAgICAgIERPTVdpZHRoID0gbWluVmFsdWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChVdGlsLmlzRGVmaW5lZCh0aGlzLm1heFdpZHRoKSkge1xuICAgICAgICBjb25zdCBtYXhWYWx1ZSA9IFV0aWwuZXh0cmFjdFBpeGVsc1ZhbHVlKHRoaXMubWF4V2lkdGgpO1xuICAgICAgICBpZiAoVXRpbC5pc0RlZmluZWQobWF4VmFsdWUpICYmIHB4VmFsID4gbWF4VmFsdWUpIHtcbiAgICAgICAgICBET01XaWR0aCA9IG1heFZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICB9XG4gICAgcmV0dXJuIERPTVdpZHRoO1xuICB9XG5cbiAgc2V0IHdpZHRoKHZhbDogc3RyaW5nKSB7XG4gICAgbGV0IHdpZHRoVmFsID0gdmFsO1xuICAgIGxldCBET01XaWR0aCA9IHRoaXMuZ2V0RE9NV2lkdGgodmFsKTtcbiAgICBjb25zdCBweFZhbCA9IFV0aWwuZXh0cmFjdFBpeGVsc1ZhbHVlKERPTVdpZHRoKTtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQocHhWYWwpKSB7XG4gICAgICB0aGlzLkRPTVdpZHRoID0gcHhWYWw7XG4gICAgICB3aWR0aFZhbCA9IHB4VmFsICsgJ3B4JztcbiAgICB9XG5cbiAgICB0aGlzLl93aWR0aCA9IHdpZHRoVmFsO1xuICB9XG5cbiAgZ2V0IHdpZHRoKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3dpZHRoO1xuICB9XG5cblxuICBnZXRXaWR0aFRvU3RvcmUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5fd2lkdGg7XG4gIH1cblxuICBzZXRXaWR0aCh2YWw6IG51bWJlcikge1xuICAgIHRoaXMud2lkdGggPSB2YWwgKyAncHgnO1xuICAgIHRoaXMuRE9NV2lkdGggPSB2YWw7XG4gIH1cblxuICBnZXRUaXRsZUFsaWduQ2xhc3MoKSB7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKHRoaXMuZGVmaW5pdGlvbikpIHtcbiAgICAgIHJldHVybiB0aGlzLmRlZmluaXRpb24udGl0bGVBbGlnbiB8fCBDb2Rlcy5DT0xVTU5fVElUTEVfQUxJR05fQ0VOVEVSO1xuICAgIH1cbiAgICAvLyBkZWZhdWx0IHRpdGxlIGFsaWduXG4gICAgcmV0dXJuIENvZGVzLkNPTFVNTl9USVRMRV9BTElHTl9DRU5URVI7XG4gIH1cblxuICBnZXRGaWx0ZXJWYWx1ZShjZWxsVmFsdWU6IGFueSwgcm93VmFsdWU/OiBhbnkpOiBhbnlbXSB7XG4gICAgaWYgKHRoaXMucmVuZGVyZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlbmRlcmVyLmdldEZpbHRlcihjZWxsVmFsdWUsIHJvd1ZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFtjZWxsVmFsdWVdO1xuICAgIH1cbiAgfVxuXG4gIHVzZUN1c3RvbUZpbHRlckZ1bmN0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNlYXJjaGluZyAmJiB0aGlzLnZpc2libGUgJiYgdGhpcy5yZW5kZXJlciAhPSBudWxsICYmIHRoaXMucmVuZGVyZXIuZmlsdGVyRnVuY3Rpb24gIT0gbnVsbDtcbiAgfVxuXG4gIHVzZVF1aWNrZmlsdGVyRnVuY3Rpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2VhcmNoaW5nICYmIHRoaXMudmlzaWJsZSAmJiAhKHRoaXMucmVuZGVyZXIgIT0gbnVsbCAmJiB0aGlzLnJlbmRlcmVyLmZpbHRlckZ1bmN0aW9uICE9IG51bGwpO1xuICB9XG5cbn1cbiJdfQ==