ngx-obelisco-example
Version:
Componentes funcionales y reutilizables para Angular.
67 lines • 19.7 kB
JavaScript
import { Component, EventEmitter, Input, Output } from '@angular/core';
import * as i0 from "@angular/core";
import * as i1 from "@angular/common";
export class ODropdownSelectionComponent {
constructor() {
this.dataTarget = 'dropdown';
this.isSelectionMultiple = false;
this.isAnimatedIconLeft = false;
this.isAnimatedIconRight = false;
this.dropSelectItems = [];
this.isBordered = true;
this.customClasses = '';
this.selectedItemChange = new EventEmitter();
this.selectedItems = [];
this.selectedItem = {};
}
onRadioSelectionChange(item, index) {
this.selectedItem = item;
this.selectedItemChange.emit(item);
this.selectedIndex = index + 1;
this.activeIndex = index;
}
onCheckboxSelectionChange(item) {
const itemIndex = this.selectedItems.findIndex((selectedItem) => selectedItem.id === item.id);
if (itemIndex !== -1) {
this.selectedItems.splice(itemIndex, 1);
}
else {
this.selectedItems.push(item);
}
this.selectedCheckboxCount = this.selectedItems.length;
this.selectedItemChange.emit(this.selectedItems);
}
}
ODropdownSelectionComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ODropdownSelectionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
ODropdownSelectionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ODropdownSelectionComponent, selector: "o-dropdown-selection", inputs: { dataTarget: "dataTarget", title: "title", isSelectionMultiple: "isSelectionMultiple", iconLeft: "iconLeft", iconRight: "iconRight", isAnimatedIconLeft: "isAnimatedIconLeft", isAnimatedIconRight: "isAnimatedIconRight", dropSelectItems: "dropSelectItems", isBordered: "isBordered", size: "size", customClasses: "customClasses", ariaLabel: "ariaLabel" }, outputs: { selectedItemChange: "selectedItemChange" }, ngImport: i0, template: "<div class=\"dropdown dropdown-form\">\r\n <button\r\n type=\"button\"\r\n class=\"btn btn-dropdown\"\r\n [class.btn-dropdown-border]=\"isBordered\"\r\n [class.btn-dropdown-sm]=\"size == 'sm'\"\r\n [class.btn-dropdown-lg]=\"size == 'lg'\"\r\n data-toggle=\"collapse\"\r\n [attr.data-target]=\"'#' + dataTarget\"\r\n [attr.aria-controls]=\"dataTarget\"\r\n aria-expanded=\"false\"\r\n [attr.aria-label]=\"ariaLabel\"\r\n [ngClass]=\"customClasses\"\r\n >\r\n <ng-container *ngIf=\"iconLeft\">\r\n <i *ngIf=\"iconLeft.includes('bx')\" class=\"{{ iconLeft }}\" [class.btn-dropdown-icon]=\"isAnimatedIconLeft\"></i>\r\n <span\r\n *ngIf=\"!iconLeft.includes('bx')\"\r\n class=\"material-icons-round\"\r\n aria-hidden=\"true\"\r\n [class.btn-dropdown-icon]=\"isAnimatedIconLeft\"\r\n >{{ iconLeft }}</span\r\n >\r\n </ng-container>\r\n <span class=\"btn-dropdown-text\" *ngIf=\"isSelectionMultiple\"\r\n >{{ title }} {{ selectedCheckboxCount ? '(' + selectedCheckboxCount + ')' : '' }}</span\r\n >\r\n <span class=\"btn-dropdown-text\" *ngIf=\"!isSelectionMultiple\">\r\n {{ selectedItem!.text ? selectedItem!.text : title }}</span\r\n >\r\n <ng-container *ngIf=\"iconRight\">\r\n <i *ngIf=\"iconRight.includes('bx')\" class=\"{{ iconRight }}\" [class.btn-dropdown-icon]=\"isAnimatedIconRight\"></i>\r\n <span\r\n *ngIf=\"!iconRight.includes('bx')\"\r\n class=\"material-icons-round\"\r\n aria-hidden=\"true\"\r\n [class.btn-dropdown-icon]=\"isAnimatedIconRight\"\r\n >{{ iconRight }}</span\r\n >\r\n </ng-container>\r\n </button>\r\n <div class=\"dropdown-menu dropdown-body collapse\" [id]=\"dataTarget\">\r\n <ng-container *ngIf=\"!isSelectionMultiple\">\r\n <div class=\"custom-control custom-radio\" *ngFor=\"let item of dropSelectItems; let i = index\">\r\n <label class=\"btn btn-chip\" [class.active]=\"i === activeIndex\" [ngClass]=\"item.customClasses\">\r\n <input\r\n class=\"btn-check\"\r\n type=\"radio\"\r\n [id]=\"item.id\"\r\n [name]=\"item.name\"\r\n [value]=\"item.value\"\r\n (change)=\"onRadioSelectionChange(item, i)\"\r\n />\r\n <span class=\"btn-chip-text\">{{ item.text }}</span>\r\n <span class=\"material-icons-round\" aria-hidden=\"true\">done</span>\r\n </label>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"isSelectionMultiple\">\r\n <div\r\n class=\"custom-control custom-checkbox\"\r\n [class.disabled]=\"item.isDisabled\"\r\n *ngFor=\"let item of dropSelectItems\"\r\n [ngClass]=\"item.customClasses\"\r\n >\r\n <input\r\n class=\"custom-control-input\"\r\n type=\"checkbox\"\r\n [id]=\"item.id\"\r\n [name]=\"item.name\"\r\n [value]=\"item.value\"\r\n [disabled]=\"item.isDisabled\"\r\n (change)=\"onCheckboxSelectionChange(item)\"\r\n />\r\n <label class=\"custom-control-label\" [for]=\"item.id\"> {{ item.text }}</label>\r\n </div>\r\n </ng-container>\r\n </div>\r\n</div>\r\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ODropdownSelectionComponent, decorators: [{
type: Component,
args: [{ selector: 'o-dropdown-selection', template: "<div class=\"dropdown dropdown-form\">\r\n <button\r\n type=\"button\"\r\n class=\"btn btn-dropdown\"\r\n [class.btn-dropdown-border]=\"isBordered\"\r\n [class.btn-dropdown-sm]=\"size == 'sm'\"\r\n [class.btn-dropdown-lg]=\"size == 'lg'\"\r\n data-toggle=\"collapse\"\r\n [attr.data-target]=\"'#' + dataTarget\"\r\n [attr.aria-controls]=\"dataTarget\"\r\n aria-expanded=\"false\"\r\n [attr.aria-label]=\"ariaLabel\"\r\n [ngClass]=\"customClasses\"\r\n >\r\n <ng-container *ngIf=\"iconLeft\">\r\n <i *ngIf=\"iconLeft.includes('bx')\" class=\"{{ iconLeft }}\" [class.btn-dropdown-icon]=\"isAnimatedIconLeft\"></i>\r\n <span\r\n *ngIf=\"!iconLeft.includes('bx')\"\r\n class=\"material-icons-round\"\r\n aria-hidden=\"true\"\r\n [class.btn-dropdown-icon]=\"isAnimatedIconLeft\"\r\n >{{ iconLeft }}</span\r\n >\r\n </ng-container>\r\n <span class=\"btn-dropdown-text\" *ngIf=\"isSelectionMultiple\"\r\n >{{ title }} {{ selectedCheckboxCount ? '(' + selectedCheckboxCount + ')' : '' }}</span\r\n >\r\n <span class=\"btn-dropdown-text\" *ngIf=\"!isSelectionMultiple\">\r\n {{ selectedItem!.text ? selectedItem!.text : title }}</span\r\n >\r\n <ng-container *ngIf=\"iconRight\">\r\n <i *ngIf=\"iconRight.includes('bx')\" class=\"{{ iconRight }}\" [class.btn-dropdown-icon]=\"isAnimatedIconRight\"></i>\r\n <span\r\n *ngIf=\"!iconRight.includes('bx')\"\r\n class=\"material-icons-round\"\r\n aria-hidden=\"true\"\r\n [class.btn-dropdown-icon]=\"isAnimatedIconRight\"\r\n >{{ iconRight }}</span\r\n >\r\n </ng-container>\r\n </button>\r\n <div class=\"dropdown-menu dropdown-body collapse\" [id]=\"dataTarget\">\r\n <ng-container *ngIf=\"!isSelectionMultiple\">\r\n <div class=\"custom-control custom-radio\" *ngFor=\"let item of dropSelectItems; let i = index\">\r\n <label class=\"btn btn-chip\" [class.active]=\"i === activeIndex\" [ngClass]=\"item.customClasses\">\r\n <input\r\n class=\"btn-check\"\r\n type=\"radio\"\r\n [id]=\"item.id\"\r\n [name]=\"item.name\"\r\n [value]=\"item.value\"\r\n (change)=\"onRadioSelectionChange(item, i)\"\r\n />\r\n <span class=\"btn-chip-text\">{{ item.text }}</span>\r\n <span class=\"material-icons-round\" aria-hidden=\"true\">done</span>\r\n </label>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"isSelectionMultiple\">\r\n <div\r\n class=\"custom-control custom-checkbox\"\r\n [class.disabled]=\"item.isDisabled\"\r\n *ngFor=\"let item of dropSelectItems\"\r\n [ngClass]=\"item.customClasses\"\r\n >\r\n <input\r\n class=\"custom-control-input\"\r\n type=\"checkbox\"\r\n [id]=\"item.id\"\r\n [name]=\"item.name\"\r\n [value]=\"item.value\"\r\n [disabled]=\"item.isDisabled\"\r\n (change)=\"onCheckboxSelectionChange(item)\"\r\n />\r\n <label class=\"custom-control-label\" [for]=\"item.id\"> {{ item.text }}</label>\r\n </div>\r\n </ng-container>\r\n </div>\r\n</div>\r\n" }]
}], ctorParameters: function () { return []; }, propDecorators: { dataTarget: [{
type: Input
}], title: [{
type: Input
}], isSelectionMultiple: [{
type: Input
}], iconLeft: [{
type: Input
}], iconRight: [{
type: Input
}], isAnimatedIconLeft: [{
type: Input
}], isAnimatedIconRight: [{
type: Input
}], dropSelectItems: [{
type: Input
}], isBordered: [{
type: Input
}], size: [{
type: Input
}], customClasses: [{
type: Input
}], ariaLabel: [{
type: Input
}], selectedItemChange: [{
type: Output
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby1kcm9wZG93bi1zZWxlY3Rpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW9iZWxpc2NvL2Ryb3Bkb3duL28tZHJvcGRvd24tc2VsZWN0aW9uL28tZHJvcGRvd24tc2VsZWN0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1vYmVsaXNjby9kcm9wZG93bi9vLWRyb3Bkb3duLXNlbGVjdGlvbi9vLWRyb3Bkb3duLXNlbGVjdGlvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7QUFRdkUsTUFBTSxPQUFPLDJCQUEyQjtJQXdCdEM7UUF2QmdCLGVBQVUsR0FBVyxVQUFVLENBQUM7UUFFaEMsd0JBQW1CLEdBQVksS0FBSyxDQUFDO1FBR3JDLHVCQUFrQixHQUFZLEtBQUssQ0FBQztRQUNwQyx3QkFBbUIsR0FBWSxLQUFLLENBQUM7UUFDckMsb0JBQWUsR0FBNEIsRUFBRSxDQUFDO1FBQzlDLGVBQVUsR0FBWSxJQUFJLENBQUM7UUFFM0Isa0JBQWEsR0FBVyxFQUFFLENBQUM7UUFHMUIsdUJBQWtCLEdBQ2pDLElBQUksWUFBWSxFQUFFLENBQUM7UUFHZCxrQkFBYSxHQUE0QixFQUFFLENBQUM7UUFPakQsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVNLHNCQUFzQixDQUFDLElBQTJCLEVBQUUsS0FBYTtRQUN0RSxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztRQUN6QixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25DLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQztRQUMvQixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztJQUMzQixDQUFDO0lBRU0seUJBQXlCLENBQUMsSUFBMkI7UUFDMUQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRTlGLElBQUksU0FBUyxLQUFLLENBQUMsQ0FBQyxFQUFFO1lBQ3BCLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUN6QzthQUFNO1lBQ0wsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDL0I7UUFFRCxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUM7UUFDdkQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDbkQsQ0FBQzs7d0hBOUNVLDJCQUEyQjs0R0FBM0IsMkJBQTJCLDZkQ1J4Qyw4ckdBZ0ZBOzJGRHhFYSwyQkFBMkI7a0JBTHZDLFNBQVM7K0JBQ0Usc0JBQXNCOzBFQUtoQixVQUFVO3NCQUF6QixLQUFLO2dCQUNVLEtBQUs7c0JBQXBCLEtBQUs7Z0JBQ1UsbUJBQW1CO3NCQUFsQyxLQUFLO2dCQUNVLFFBQVE7c0JBQXZCLEtBQUs7Z0JBQ1UsU0FBUztzQkFBeEIsS0FBSztnQkFDVSxrQkFBa0I7c0JBQWpDLEtBQUs7Z0JBQ1UsbUJBQW1CO3NCQUFsQyxLQUFLO2dCQUNVLGVBQWU7c0JBQTlCLEtBQUs7Z0JBQ1UsVUFBVTtzQkFBekIsS0FBSztnQkFDVSxJQUFJO3NCQUFuQixLQUFLO2dCQUNVLGFBQWE7c0JBQTVCLEtBQUs7Z0JBQ1UsU0FBUztzQkFBeEIsS0FBSztnQkFFVyxrQkFBa0I7c0JBQWxDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEcm9wZG93blNlbGVjdGlvbkl0ZW0sIFNpemVzIH0gZnJvbSAnbmd4LW9iZWxpc2NvLWV4YW1wbGUvY29yZS9tb2RlbHMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdvLWRyb3Bkb3duLXNlbGVjdGlvbicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL28tZHJvcGRvd24tc2VsZWN0aW9uLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9vLWRyb3Bkb3duLXNlbGVjdGlvbi5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBPRHJvcGRvd25TZWxlY3Rpb25Db21wb25lbnQge1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBkYXRhVGFyZ2V0OiBzdHJpbmcgPSAnZHJvcGRvd24nO1xyXG4gIEBJbnB1dCgpIHB1YmxpYyB0aXRsZSE6IHN0cmluZztcclxuICBASW5wdXQoKSBwdWJsaWMgaXNTZWxlY3Rpb25NdWx0aXBsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBpY29uTGVmdCE6IHN0cmluZztcclxuICBASW5wdXQoKSBwdWJsaWMgaWNvblJpZ2h0ITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBpc0FuaW1hdGVkSWNvbkxlZnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBwdWJsaWMgaXNBbmltYXRlZEljb25SaWdodDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBkcm9wU2VsZWN0SXRlbXM6IERyb3Bkb3duU2VsZWN0aW9uSXRlbVtdID0gW107XHJcbiAgQElucHV0KCkgcHVibGljIGlzQm9yZGVyZWQ6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBzaXplITogU2l6ZXM7XHJcbiAgQElucHV0KCkgcHVibGljIGN1c3RvbUNsYXNzZXM6IHN0cmluZyA9ICcnO1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBhcmlhTGFiZWwhOiBzdHJpbmc7XHJcblxyXG4gIEBPdXRwdXQoKSBwdWJsaWMgc2VsZWN0ZWRJdGVtQ2hhbmdlOiBFdmVudEVtaXR0ZXI8RHJvcGRvd25TZWxlY3Rpb25JdGVtIHwgRHJvcGRvd25TZWxlY3Rpb25JdGVtW10+ID1cclxuICAgIG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgcHVibGljIHNlbGVjdGVkSXRlbSE6IERyb3Bkb3duU2VsZWN0aW9uSXRlbTtcclxuICBwdWJsaWMgc2VsZWN0ZWRJdGVtczogRHJvcGRvd25TZWxlY3Rpb25JdGVtW10gPSBbXTtcclxuXHJcbiAgcHVibGljIHNlbGVjdGVkSW5kZXghOiBudW1iZXI7XHJcbiAgcHVibGljIGFjdGl2ZUluZGV4ITogbnVtYmVyO1xyXG4gIHB1YmxpYyBzZWxlY3RlZENoZWNrYm94Q291bnQhOiBudW1iZXI7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgdGhpcy5zZWxlY3RlZEl0ZW0gPSB7fTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvblJhZGlvU2VsZWN0aW9uQ2hhbmdlKGl0ZW06IERyb3Bkb3duU2VsZWN0aW9uSXRlbSwgaW5kZXg6IG51bWJlcikge1xyXG4gICAgdGhpcy5zZWxlY3RlZEl0ZW0gPSBpdGVtO1xyXG4gICAgdGhpcy5zZWxlY3RlZEl0ZW1DaGFuZ2UuZW1pdChpdGVtKTtcclxuICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IGluZGV4ICsgMTtcclxuICAgIHRoaXMuYWN0aXZlSW5kZXggPSBpbmRleDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbkNoZWNrYm94U2VsZWN0aW9uQ2hhbmdlKGl0ZW06IERyb3Bkb3duU2VsZWN0aW9uSXRlbSkge1xyXG4gICAgY29uc3QgaXRlbUluZGV4ID0gdGhpcy5zZWxlY3RlZEl0ZW1zLmZpbmRJbmRleCgoc2VsZWN0ZWRJdGVtKSA9PiBzZWxlY3RlZEl0ZW0uaWQgPT09IGl0ZW0uaWQpO1xyXG5cclxuICAgIGlmIChpdGVtSW5kZXggIT09IC0xKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5zcGxpY2UoaXRlbUluZGV4LCAxKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5wdXNoKGl0ZW0pO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2VsZWN0ZWRDaGVja2JveENvdW50ID0gdGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aDtcclxuICAgIHRoaXMuc2VsZWN0ZWRJdGVtQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZEl0ZW1zKTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImRyb3Bkb3duIGRyb3Bkb3duLWZvcm1cIj5cclxuICA8YnV0dG9uXHJcbiAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgIGNsYXNzPVwiYnRuIGJ0bi1kcm9wZG93blwiXHJcbiAgICBbY2xhc3MuYnRuLWRyb3Bkb3duLWJvcmRlcl09XCJpc0JvcmRlcmVkXCJcclxuICAgIFtjbGFzcy5idG4tZHJvcGRvd24tc21dPVwic2l6ZSA9PSAnc20nXCJcclxuICAgIFtjbGFzcy5idG4tZHJvcGRvd24tbGddPVwic2l6ZSA9PSAnbGcnXCJcclxuICAgIGRhdGEtdG9nZ2xlPVwiY29sbGFwc2VcIlxyXG4gICAgW2F0dHIuZGF0YS10YXJnZXRdPVwiJyMnICsgZGF0YVRhcmdldFwiXHJcbiAgICBbYXR0ci5hcmlhLWNvbnRyb2xzXT1cImRhdGFUYXJnZXRcIlxyXG4gICAgYXJpYS1leHBhbmRlZD1cImZhbHNlXCJcclxuICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiYXJpYUxhYmVsXCJcclxuICAgIFtuZ0NsYXNzXT1cImN1c3RvbUNsYXNzZXNcIlxyXG4gID5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpY29uTGVmdFwiPlxyXG4gICAgICA8aSAqbmdJZj1cImljb25MZWZ0LmluY2x1ZGVzKCdieCcpXCIgY2xhc3M9XCJ7eyBpY29uTGVmdCB9fVwiIFtjbGFzcy5idG4tZHJvcGRvd24taWNvbl09XCJpc0FuaW1hdGVkSWNvbkxlZnRcIj48L2k+XHJcbiAgICAgIDxzcGFuXHJcbiAgICAgICAgKm5nSWY9XCIhaWNvbkxlZnQuaW5jbHVkZXMoJ2J4JylcIlxyXG4gICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtcm91bmRcIlxyXG4gICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXHJcbiAgICAgICAgW2NsYXNzLmJ0bi1kcm9wZG93bi1pY29uXT1cImlzQW5pbWF0ZWRJY29uTGVmdFwiXHJcbiAgICAgICAgPnt7IGljb25MZWZ0IH19PC9zcGFuXHJcbiAgICAgID5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPHNwYW4gY2xhc3M9XCJidG4tZHJvcGRvd24tdGV4dFwiICpuZ0lmPVwiaXNTZWxlY3Rpb25NdWx0aXBsZVwiXHJcbiAgICAgID57eyB0aXRsZSB9fSB7eyBzZWxlY3RlZENoZWNrYm94Q291bnQgPyAnKCcgKyBzZWxlY3RlZENoZWNrYm94Q291bnQgKyAnKScgOiAnJyB9fTwvc3BhblxyXG4gICAgPlxyXG4gICAgPHNwYW4gY2xhc3M9XCJidG4tZHJvcGRvd24tdGV4dFwiICpuZ0lmPVwiIWlzU2VsZWN0aW9uTXVsdGlwbGVcIj5cclxuICAgICAge3sgc2VsZWN0ZWRJdGVtIS50ZXh0ID8gc2VsZWN0ZWRJdGVtIS50ZXh0IDogdGl0bGUgfX08L3NwYW5cclxuICAgID5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpY29uUmlnaHRcIj5cclxuICAgICAgPGkgKm5nSWY9XCJpY29uUmlnaHQuaW5jbHVkZXMoJ2J4JylcIiBjbGFzcz1cInt7IGljb25SaWdodCB9fVwiIFtjbGFzcy5idG4tZHJvcGRvd24taWNvbl09XCJpc0FuaW1hdGVkSWNvblJpZ2h0XCI+PC9pPlxyXG4gICAgICA8c3BhblxyXG4gICAgICAgICpuZ0lmPVwiIWljb25SaWdodC5pbmNsdWRlcygnYngnKVwiXHJcbiAgICAgICAgY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1yb3VuZFwiXHJcbiAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcclxuICAgICAgICBbY2xhc3MuYnRuLWRyb3Bkb3duLWljb25dPVwiaXNBbmltYXRlZEljb25SaWdodFwiXHJcbiAgICAgICAgPnt7IGljb25SaWdodCB9fTwvc3BhblxyXG4gICAgICA+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICA8L2J1dHRvbj5cclxuICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tbWVudSBkcm9wZG93bi1ib2R5IGNvbGxhcHNlXCIgW2lkXT1cImRhdGFUYXJnZXRcIj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNTZWxlY3Rpb25NdWx0aXBsZVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY3VzdG9tLWNvbnRyb2wgY3VzdG9tLXJhZGlvXCIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZHJvcFNlbGVjdEl0ZW1zOyBsZXQgaSA9IGluZGV4XCI+XHJcbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiYnRuIGJ0bi1jaGlwXCIgW2NsYXNzLmFjdGl2ZV09XCJpID09PSBhY3RpdmVJbmRleFwiIFtuZ0NsYXNzXT1cIml0ZW0uY3VzdG9tQ2xhc3Nlc1wiPlxyXG4gICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgIGNsYXNzPVwiYnRuLWNoZWNrXCJcclxuICAgICAgICAgICAgdHlwZT1cInJhZGlvXCJcclxuICAgICAgICAgICAgW2lkXT1cIml0ZW0uaWRcIlxyXG4gICAgICAgICAgICBbbmFtZV09XCJpdGVtLm5hbWVcIlxyXG4gICAgICAgICAgICBbdmFsdWVdPVwiaXRlbS52YWx1ZVwiXHJcbiAgICAgICAgICAgIChjaGFuZ2UpPVwib25SYWRpb1NlbGVjdGlvbkNoYW5nZShpdGVtLCBpKVwiXHJcbiAgICAgICAgICAvPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJidG4tY2hpcC10ZXh0XCI+e3sgaXRlbS50ZXh0IH19PC9zcGFuPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1yb3VuZFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPmRvbmU8L3NwYW4+XHJcbiAgICAgICAgPC9sYWJlbD5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNTZWxlY3Rpb25NdWx0aXBsZVwiPlxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgY2xhc3M9XCJjdXN0b20tY29udHJvbCBjdXN0b20tY2hlY2tib3hcIlxyXG4gICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJpdGVtLmlzRGlzYWJsZWRcIlxyXG4gICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGRyb3BTZWxlY3RJdGVtc1wiXHJcbiAgICAgICAgW25nQ2xhc3NdPVwiaXRlbS5jdXN0b21DbGFzc2VzXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgY2xhc3M9XCJjdXN0b20tY29udHJvbC1pbnB1dFwiXHJcbiAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxyXG4gICAgICAgICAgW2lkXT1cIml0ZW0uaWRcIlxyXG4gICAgICAgICAgW25hbWVdPVwiaXRlbS5uYW1lXCJcclxuICAgICAgICAgIFt2YWx1ZV09XCJpdGVtLnZhbHVlXCJcclxuICAgICAgICAgIFtkaXNhYmxlZF09XCJpdGVtLmlzRGlzYWJsZWRcIlxyXG4gICAgICAgICAgKGNoYW5nZSk9XCJvbkNoZWNrYm94U2VsZWN0aW9uQ2hhbmdlKGl0ZW0pXCJcclxuICAgICAgICAvPlxyXG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImN1c3RvbS1jb250cm9sLWxhYmVsXCIgW2Zvcl09XCJpdGVtLmlkXCI+IHt7IGl0ZW0udGV4dCB9fTwvbGFiZWw+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=