UNPKG

com.phloxui

Version:

PhloxUI Ng2+ Framework

929 lines (928 loc) 68.6 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ import * as tslib_1 from "tslib"; import { Component, ElementRef, Input, Output, EventEmitter } from '@angular/core'; import { I18N } from '../../../../../decorator/I18N.decorator'; import { Option } from '../../../../../decorator/Option.decorator'; import { EventUtils } from '../../../../../share/utils/EventUtils'; import { CLICK_EVENT, BEFORE_CLICK_EVENT, FOCUS_EVENT, BEFORE_FOCUS_EVENT, LOST_FOCUS_EVENT, BEFORE_LOST_FOCUS_EVENT } from '../../../../../share/CustomEventType'; import { AbstractI18NApplicable } from '../../../../../share/AbstractI18NApplicable'; import { NeedFocusService } from '../../../../../service/NeedFocusService.service'; var /** @type {?} */ TYPE_NAME = "material-button"; var /** @type {?} */ DEFAULT_BUTTON_ICON = 'favorite'; var MaterialButton = /** @class */ (function (_super) { tslib_1.__extends(MaterialButton, _super); function MaterialButton(elementRef, needFocusService) { var _this = _super.call(this) || this; _this.elementRef = elementRef; _this.needFocusService = needFocusService; _this.beforeClickEvent = new EventEmitter(); _this.clickEvent = new EventEmitter(); _this.beforeFocusEvent = new EventEmitter(); _this.focusEvent = new EventEmitter(); _this.beforeLostFocusEvent = new EventEmitter(); _this.lostFocusEvent = new EventEmitter(); _this.icon = DEFAULT_BUTTON_ICON; _this.type = "mat-button"; _this.color = "basic"; return _this; } /** * @return {?} */ MaterialButton.prototype.ngOnInit = /** * @return {?} */ function () { }; /** * @param {?} changes * @return {?} */ MaterialButton.prototype.ngOnChanges = /** * @param {?} changes * @return {?} */ function (changes) { var _this = this; setTimeout(function () { _this.initEventHandlers(); }, 20); }; /** * @param {?} styleClass * @return {?} */ MaterialButton.prototype.setStyleClass = /** * @param {?} styleClass * @return {?} */ function (styleClass) { this.styleClass = styleClass; }; /** * @return {?} */ MaterialButton.prototype.getStyleClass = /** * @return {?} */ function () { return this.styleClass; }; /** * @return {?} */ MaterialButton.prototype.isDisable = /** * @return {?} */ function () { return this.disabled; }; /** * @param {?} disable * @return {?} */ MaterialButton.prototype.setDisable = /** * @param {?} disable * @return {?} */ function (disable) { this.disabled = disable; }; /** * @return {?} */ MaterialButton.prototype.isDisableRipple = /** * @return {?} */ function () { return this.disableRipple; }; /** * @param {?} disableRipple * @return {?} */ MaterialButton.prototype.setDisableRipple = /** * @param {?} disableRipple * @return {?} */ function (disableRipple) { this.disableRipple = disableRipple; }; /** * @param {?} type * @return {?} */ MaterialButton.prototype.setType = /** * @param {?} type * @return {?} */ function (type) { this.type = type; }; /** * @return {?} */ MaterialButton.prototype.getType = /** * @return {?} */ function () { return this.type; }; /** * @return {?} */ MaterialButton.prototype.getColor = /** * @return {?} */ function () { return this.color; }; /** * @param {?} color * @return {?} */ MaterialButton.prototype.setColor = /** * @param {?} color * @return {?} */ function (color) { this.color = color; }; /** * @return {?} */ MaterialButton.prototype.getLabel = /** * @return {?} */ function () { return this.label; }; /** * @param {?} label * @return {?} */ MaterialButton.prototype.setLabel = /** * @param {?} label * @return {?} */ function (label) { this.label = label; }; /** * @return {?} */ MaterialButton.prototype.getButtonIcon = /** * @return {?} */ function () { return this.icon = this.icon === 'favorite' ? DEFAULT_BUTTON_ICON : this.icon; }; /** * @param {?} buttonIcon * @return {?} */ MaterialButton.prototype.setButtonIcon = /** * @param {?} buttonIcon * @return {?} */ function (buttonIcon) { this.icon = buttonIcon; }; /** * @param {?} $event * @param {?=} fireEvent * @return {?} */ MaterialButton.prototype.onClick = /** * @param {?} $event * @param {?=} fireEvent * @return {?} */ function ($event, fireEvent) { var _this = this; if (fireEvent === null || fireEvent === undefined) { fireEvent = true; } EventUtils.handleBrowserEvent(this, 'beforeClickEvent', $event, fireEvent, function ($event) { // doEvent }, function ($event) { // emitBeforeEvent // emitBeforeEvent _this.emitBeforeClickEvent($event); }, function ($event, result) { // emitAfterEvent // emitAfterEvent _this.emitClickEvent($event); }, function ($event) { // doPrevented }); }; /** * @param {?=} $event * @return {?} */ MaterialButton.prototype.emitBeforeClickEvent = /** * @param {?=} $event * @return {?} */ function ($event) { var /** @type {?} */ eventData = null; // emit event var /** @type {?} */ data = eventData; var /** @type {?} */ ev = EventUtils.newCustomEvent(BEFORE_CLICK_EVENT, this, data, $event); if (this.beforeClickEvent !== null && this.beforeClickEvent !== undefined) { this.beforeClickEvent.emit(ev); } }; /** * @param {?=} $event * @return {?} */ MaterialButton.prototype.emitClickEvent = /** * @param {?=} $event * @return {?} */ function ($event) { var /** @type {?} */ eventData = null; // emit event var /** @type {?} */ data = eventData; var /** @type {?} */ ev = EventUtils.newCustomEvent(CLICK_EVENT, this, data, $event); if (this.clickEvent !== null && this.clickEvent !== undefined) { this.clickEvent.emit(ev); } }; /** * @return {?} */ MaterialButton.prototype.getI18NKey = /** * @return {?} */ function () { if (this.i18nKey === null || typeof this.i18nKey === 'undefined' || this.i18nKey === '') { // lower case first charactor var /** @type {?} */ className = this.constructor.name; return className.charAt(0).toLowerCase() + className.slice(1); } return this.name; }; /** * @param {?} $event * @return {?} */ MaterialButton.prototype.onFocusing = /** * @param {?} $event * @return {?} */ function ($event) { this.needFocusService.setFocusingComponent(this, $event); }; /** * @param {?} $event * @return {?} */ MaterialButton.prototype.onLostFocusing = /** * @param {?} $event * @return {?} */ function ($event) { this.needFocusService.resetFocusingComponent($event); }; /** * @param {?} $event * @return {?} */ MaterialButton.prototype.doFocus = /** * @param {?} $event * @return {?} */ function ($event) { if (this.type === "mat-button") { if ($(this.elementRef.nativeElement).find('button.mat-button:focus').length <= 0) { $(this.elementRef.nativeElement).find('button.mat-button').focus(); } } else if (this.type === "mat-raised-button") { if ($(this.elementRef.nativeElement).find('button.mat-raised-button:focus').length <= 0) { $(this.elementRef.nativeElement).find('button.mat-raised-button').focus(); } } else if (this.type === "mat-stroked-button") { if ($(this.elementRef.nativeElement).find('button.mat-stroked-button:focus').length <= 0) { $(this.elementRef.nativeElement).find('button.mat-stroked-button').focus(); } } else if (this.type === "mat-flat-button") { if ($(this.elementRef.nativeElement).find('button.mat-flat-button:focus').length <= 0) { $(this.elementRef.nativeElement).find('button.mat-flat-button').focus(); } } else if (this.type === "mat-icon-button") { if ($(this.elementRef.nativeElement).find('button.mat-icon-button:focus').length <= 0) { $(this.elementRef.nativeElement).find('button.mat-icon-button').focus(); } } }; /** * @param {?} $event * @return {?} */ MaterialButton.prototype.doLostFocus = /** * @param {?} $event * @return {?} */ function ($event) { if (this.type === "mat-button") { if ($(this.elementRef.nativeElement).find('button.mat-button:focus').length > 0) { $(this.elementRef.nativeElement).find('button.mat-button').blur(); } } else if (this.type === "mat-raised-button") { if ($(this.elementRef.nativeElement).find('button.mat-raised-button:focus').length > 0) { $(this.elementRef.nativeElement).find('button.mat-raised-button').blur(); } } else if (this.type === "mat-stroked-button") { if ($(this.elementRef.nativeElement).find('button.mat-stroked-button:focus').length > 0) { $(this.elementRef.nativeElement).find('button.mat-stroked-button').blur(); } } else if (this.type === "mat-flat-button") { if ($(this.elementRef.nativeElement).find('button.mat-flat-button:focus').length > 0) { $(this.elementRef.nativeElement).find('button.mat-flat-button').blur(); } } else if (this.type === "mat-icon-button") { if ($(this.elementRef.nativeElement).find('button.mat-icon-button:focus').length > 0) { $(this.elementRef.nativeElement).find('button.mat-icon-button').blur(); } } }; /** * @return {?} */ MaterialButton.prototype.initEventHandlers = /** * @return {?} */ function () { var _this = this; if (this.type === "mat-button") { $(this.elementRef.nativeElement).find('button.mat-button').focus(function ($event) { _this.onFocusing($event); }); $(this.elementRef.nativeElement).find('button.mat-button').blur(function ($event) { _this.onLostFocusing($event); }); } else if (this.type === "mat-raised-button") { $(this.elementRef.nativeElement).find('button.mat-raised-button').focus(function ($event) { _this.onFocusing($event); }); $(this.elementRef.nativeElement).find('button.mat-raised-button').blur(function ($event) { _this.onLostFocusing($event); }); } else if (this.type === "mat-stroked-button") { $(this.elementRef.nativeElement).find('button.mat-stroked-button').focus(function ($event) { _this.onFocusing($event); }); $(this.elementRef.nativeElement).find('button.mat-stroked-button').blur(function ($event) { _this.onLostFocusing($event); }); } else if (this.type === "mat-flat-button") { $(this.elementRef.nativeElement).find('button.mat-flat-button').focus(function ($event) { _this.onFocusing($event); }); $(this.elementRef.nativeElement).find('button.mat-flat-button').blur(function ($event) { _this.onLostFocusing($event); }); } else if (this.type === "mat-icon-button") { $(this.elementRef.nativeElement).find('button.mat-icon-button').focus(function ($event) { _this.onFocusing($event); }); $(this.elementRef.nativeElement).find('button.mat-icon-button').blur(function ($event) { _this.onLostFocusing($event); }); } }; /** * @param {?=} $event * @return {?} */ MaterialButton.prototype.emitBeforeFocusEvent = /** * @param {?=} $event * @return {?} */ function ($event) { // emit event var /** @type {?} */ data = null; var /** @type {?} */ ev = EventUtils.newCustomEvent(BEFORE_FOCUS_EVENT, this, data, $event); if (this.beforeFocusEvent !== null && this.beforeFocusEvent !== undefined) { this.beforeFocusEvent.emit(ev); } }; /** * @param {?=} $event * @return {?} */ MaterialButton.prototype.emitBeforeLostFocusEvent = /** * @param {?=} $event * @return {?} */ function ($event) { // emit event var /** @type {?} */ data = null; var /** @type {?} */ ev = EventUtils.newCustomEvent(BEFORE_LOST_FOCUS_EVENT, this, data, $event); if (this.beforeLostFocusEvent !== null && this.beforeLostFocusEvent !== undefined) { this.beforeLostFocusEvent.emit(ev); } }; /** * @param {?} $event * @return {?} */ MaterialButton.prototype.emitLostFocusEvent = /** * @param {?} $event * @return {?} */ function ($event) { var /** @type {?} */ data = null; var /** @type {?} */ ev = EventUtils.newCustomEvent(LOST_FOCUS_EVENT, this, data, $event); if (this.lostFocusEvent !== null && this.lostFocusEvent !== undefined) { this.lostFocusEvent.emit(ev); } }; /** * @param {?} $event * @return {?} */ MaterialButton.prototype.emitFocusEvent = /** * @param {?} $event * @return {?} */ function ($event) { var /** @type {?} */ data = null; var /** @type {?} */ ev = EventUtils.newCustomEvent(FOCUS_EVENT, this, data, $event); if (this.focusEvent !== null && this.focusEvent !== undefined) { this.focusEvent.emit(ev); } }; /** * @param {?} $event * @param {?=} fireEvent * @return {?} */ MaterialButton.prototype.onLostFocus = /** * @param {?} $event * @param {?=} fireEvent * @return {?} */ function ($event, fireEvent) { var _this = this; if (fireEvent === null || fireEvent === undefined) { fireEvent = true; } EventUtils.handleBrowserEvent(this, 'beforeLostFocusEvent', $event, fireEvent, function ($event) { // doEvent // doEvent _this.doLostFocus($event); }, function ($event) { // emitBeforeEvent // emitBeforeEvent _this.emitBeforeLostFocusEvent($event); }, function ($event, result) { // emitAfterEvent // emitAfterEvent _this.emitLostFocusEvent($event); }, function ($event) { // doPrevented // Reset focus on DOM setTimeout(function () { _this.doFocus($event); }, 5); }); }; /** * @param {?} $event * @param {?=} fireEvent * @return {?} */ MaterialButton.prototype.onFocus = /** * @param {?} $event * @param {?=} fireEvent * @return {?} */ function ($event, fireEvent) { var _this = this; if (fireEvent === null || fireEvent === undefined) { fireEvent = true; } EventUtils.handleBrowserEvent(this, 'beforeFocusEvent', $event, fireEvent, function ($event) { // doEvent // doEvent _this.doFocus($event); }, function ($event) { // emitBeforeEvent // emitBeforeEvent _this.emitBeforeFocusEvent($event); }, function ($event, result) { // emitAfterEvent // emitAfterEvent _this.emitFocusEvent($event); }, function ($event) { // doPrevented // Reset focus on DOM setTimeout(function () { _this.doLostFocus($event); }, 5); }); }; /** * @return {?} */ MaterialButton.prototype.getData = /** * @return {?} */ function () { }; /** * @param {?} data * @return {?} */ MaterialButton.prototype.setData = /** * @param {?} data * @return {?} */ function (data) { }; /** * @param {?} child * @return {?} */ MaterialButton.prototype.addDataChild = /** * @param {?} child * @return {?} */ function (child) { }; /** * @param {?} child * @return {?} */ MaterialButton.prototype.removeDataChild = /** * @param {?} child * @return {?} */ function (child) { }; /** * @param {?} dataParent * @return {?} */ MaterialButton.prototype.setDataParent = /** * @param {?} dataParent * @return {?} */ function (dataParent) { if (this.dataParent !== null && typeof this.dataParent !== 'undefined') { if (typeof this.dataParent.removeDataChild === 'function') { this.dataParent.removeDataChild(this); } } this.dataParent = dataParent; if (this.dataParent !== null && typeof this.dataParent !== 'undefined') { if (typeof this.dataParent.addDataChild === 'function') { this.dataParent.addDataChild(this); } } }; /** * @return {?} */ MaterialButton.prototype.getDataParent = /** * @return {?} */ function () { return this.dataParent; }; /** * @return {?} */ MaterialButton.prototype.getDataChildren = /** * @return {?} */ function () { return; }; /** * @return {?} */ MaterialButton.prototype.isDataDirty = /** * @return {?} */ function () { return; }; /** * @return {?} */ MaterialButton.prototype.isIgnoreParentData = /** * @return {?} */ function () { return; }; /** * @param {?} ignore * @return {?} */ MaterialButton.prototype.setIgnoreParentData = /** * @param {?} ignore * @return {?} */ function (ignore) { }; /** * @param {?=} data * @return {?} */ MaterialButton.prototype.saveData = /** * @param {?=} data * @return {?} */ function (data) { }; /** * @return {?} */ MaterialButton.prototype.resetData = /** * @return {?} */ function () { }; /** * @return {?} */ MaterialButton.prototype.getBeforeClickEvent = /** * @return {?} */ function () { return this.beforeClickEvent; }; /** * @param {?} event * @return {?} */ MaterialButton.prototype.setBeforeClickEvent = /** * @param {?} event * @return {?} */ function (event) { this.beforeClickEvent = event; }; /** * @return {?} */ MaterialButton.prototype.getClickEvent = /** * @return {?} */ function () { return this.clickEvent; }; /** * @param {?} event * @return {?} */ MaterialButton.prototype.setClickEvent = /** * @param {?} event * @return {?} */ function (event) { this.clickEvent = event; }; /** * @return {?} */ MaterialButton.prototype.getBeforeFocusEvent = /** * @return {?} */ function () { return this.beforeFocusEvent; }; /** * @param {?} event * @return {?} */ MaterialButton.prototype.setBeforeFocusEvent = /** * @param {?} event * @return {?} */ function (event) { this.beforeFocusEvent = event; }; /** * @return {?} */ MaterialButton.prototype.getFocusEvent = /** * @return {?} */ function () { return this.focusEvent; }; /** * @param {?} event * @return {?} */ MaterialButton.prototype.setFocusEvent = /** * @param {?} event * @return {?} */ function (event) { this.focusEvent = event; }; /** * @return {?} */ MaterialButton.prototype.getBeforeLostFocusEvent = /** * @return {?} */ function () { return this.beforeLostFocusEvent; }; /** * @param {?} event * @return {?} */ MaterialButton.prototype.setBeforeLostFocusEvent = /** * @param {?} event * @return {?} */ function (event) { this.beforeLostFocusEvent = event; }; /** * @return {?} */ MaterialButton.prototype.getLostFocusEvent = /** * @return {?} */ function () { return this.lostFocusEvent; }; /** * @param {?} event * @return {?} */ MaterialButton.prototype.setLostFocusEvent = /** * @param {?} event * @return {?} */ function (event) { this.lostFocusEvent = event; }; MaterialButton.TYPE_NAME = TYPE_NAME; MaterialButton.decorators = [ { type: Component, args: [{ moduleId: module.id, selector: TYPE_NAME, template: "<div class=\"material-input\">\n <button [color]=\"getColor()\" [ngClass]=\"getStyleClass()\" [disableRipple]=\"isDisableRipple()\" [disabled]=\"isDisable()\" *ngIf=\"getType() === 'mat-button'\" mat-button (click)=\"onClick($event)\">{{ getLabel() }}</button>\n <button [color]=\"getColor()\" [ngClass]=\"getStyleClass()\" [disableRipple]=\"isDisableRipple()\" [disabled]=\"isDisable()\" *ngIf=\"getType() === 'mat-raised-button'\" mat-raised-button (click)=\"onClick($event)\" >{{ getLabel() }}</button>\n <button [color]=\"getColor()\" [ngClass]=\"getStyleClass()\" [disableRipple]=\"isDisableRipple()\" [disabled]=\"isDisable()\" *ngIf=\"getType() === 'mat-stroked-button'\" mat-stroked-button (click)=\"onClick($event)\" >{{ getLabel() }}</button>\n <button [color]=\"getColor()\" [ngClass]=\"getStyleClass()\" [disableRipple]=\"isDisableRipple()\" [disabled]=\"isDisable()\" *ngIf=\"getType() === 'mat-flat-button'\" mat-flat-button (click)=\"onClick($event)\" >{{ getLabel() }}</button>\n <button [color]=\"getColor()\" [ngClass]=\"getStyleClass()\" [disableRipple]=\"isDisableRipple()\" [disabled]=\"isDisable()\" *ngIf=\"getType() === 'mat-icon-button'\" mat-icon-button (click)=\"onClick($event)\" >\n <mat-icon>{{ getButtonIcon() }}</mat-icon>\n </button>\n</div>\n", },] }, ]; /** @nocollapse */ MaterialButton.ctorParameters = function () { return [ { type: ElementRef, }, { type: NeedFocusService, }, ]; }; MaterialButton.propDecorators = { "beforeClickEvent": [{ type: Output, args: ['phxBeforeClick',] },], "clickEvent": [{ type: Output, args: ['phxClick',] },], "beforeFocusEvent": [{ type: Output, args: ['phxBeforeFocus',] },], "focusEvent": [{ type: Output, args: ['phxFocus',] },], "beforeLostFocusEvent": [{ type: Output, args: ['phxBeforeLostFocus',] },], "lostFocusEvent": [{ type: Output, args: ['phxLostFocus',] },], "disableRipple": [{ type: Input },], "disabled": [{ type: Input },], "color": [{ type: Input },], "type": [{ type: Input },], "styleClass": [{ type: Input },], "name": [{ type: Input },], "icon": [{ type: Input },], "label": [{ type: Input },], }; tslib_1.__decorate([ Option('beforeClick'), tslib_1.__metadata("design:type", EventEmitter) ], MaterialButton.prototype, "beforeClickEvent", void 0); tslib_1.__decorate([ Option('click'), tslib_1.__metadata("design:type", EventEmitter) ], MaterialButton.prototype, "clickEvent", void 0); tslib_1.__decorate([ Option('beforeFocus'), tslib_1.__metadata("design:type", EventEmitter) ], MaterialButton.prototype, "beforeFocusEvent", void 0); tslib_1.__decorate([ Option('focus'), tslib_1.__metadata("design:type", EventEmitter) ], MaterialButton.prototype, "focusEvent", void 0); tslib_1.__decorate([ Option('beforeLostFocus'), tslib_1.__metadata("design:type", EventEmitter) ], MaterialButton.prototype, "beforeLostFocusEvent", void 0); tslib_1.__decorate([ Option('lostFocus'), tslib_1.__metadata("design:type", EventEmitter) ], MaterialButton.prototype, "lostFocusEvent", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Object) ], MaterialButton.prototype, "dataParent", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], MaterialButton.prototype, "disableRipple", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], MaterialButton.prototype, "disabled", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", String) ], MaterialButton.prototype, "color", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", String) ], MaterialButton.prototype, "type", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Object) ], MaterialButton.prototype, "styleClass", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", String) ], MaterialButton.prototype, "name", void 0); tslib_1.__decorate([ I18N(), Option(), tslib_1.__metadata("design:type", String) ], MaterialButton.prototype, "icon", void 0); tslib_1.__decorate([ I18N(), Option(), tslib_1.__metadata("design:type", String) ], MaterialButton.prototype, "label", void 0); return MaterialButton; }(AbstractI18NApplicable)); export { MaterialButton }; function MaterialButton_tsickle_Closure_declarations() { /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */ MaterialButton.decorators; /** * @nocollapse * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>} */ MaterialButton.ctorParameters; /** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */ MaterialButton.propDecorators; /** @type {?} */ MaterialButton.TYPE_NAME; /** @type {?} */ MaterialButton.prototype.elementRef; /** @type {?} */ MaterialButton.prototype.needFocusService; /** @type {?} */ MaterialButton.prototype.beforeClickEvent; /** @type {?} */ MaterialButton.prototype.clickEvent; /** @type {?} */ MaterialButton.prototype.beforeFocusEvent; /** @type {?} */ MaterialButton.prototype.focusEvent; /** @type {?} */ MaterialButton.prototype.beforeLostFocusEvent; /** @type {?} */ MaterialButton.prototype.lostFocusEvent; /** @type {?} */ MaterialButton.prototype.dataParent; /** @type {?} */ MaterialButton.prototype.disableRipple; /** @type {?} */ MaterialButton.prototype.disabled; /** @type {?} */ MaterialButton.prototype.color; /** @type {?} */ MaterialButton.prototype.type; /** @type {?} */ MaterialButton.prototype.styleClass; /** @type {?} */ MaterialButton.prototype.name; /** @type {?} */ MaterialButton.prototype.icon; /** @type {?} */ MaterialButton.prototype.label; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWF0ZXJpYWxCdXR0b24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vY29tLnBobG94dWkvIiwic291cmNlcyI6WyJsaWIvdGhlbWUvbWF0ZXJpYWwvY29tcG9uZW50L2RhdGF2aWV3L2lucHV0L01hdGVyaWFsQnV0dG9uLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsVUFBVSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQWlCLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDL0QsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsV0FBVyxFQUFFLGtCQUFrQixFQUFFLFdBQVcsRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ25LLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBS25GLHFCQUFNLFNBQVMsR0FBVyxpQkFBaUIsQ0FBQztBQUM1QyxxQkFBTSxtQkFBbUIsR0FBRyxVQUFVLENBQUM7O0lBZ0JILDBDQUFzQjtJQXNEeEQsd0JBQVksVUFBc0IsRUFBRSxnQkFBbUM7UUFBdkUsWUFDRSxpQkFBTyxTQWNSO1FBWkMsS0FBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7UUFDN0IsS0FBSSxDQUFDLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDO1FBQ3pDLEtBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzNDLEtBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FB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Q00sWUFBWTs7O1FBRTNDLE1BQU0sQ0FBQyxXQUFXLENBQUM7MENBQ00sWUFBWTs7O1FBRXJDLE1BQU0sRUFBRTs7OztRQUdSLE1BQU0sRUFBRTs7OztRQUdSLE1BQU0sRUFBRTs7OztRQUdSLE1BQU0sRUFBRTs7OztRQUdSLE1BQU0sRUFBRTs7OztRQUdSLE1BQU0sRUFBRTs7OztRQUdSLE1BQU0sRUFBRTs7OztRQUdSLElBQUksRUFBRTtRQUNOLE1BQU0sRUFBRTs7OztRQUdSLElBQUksRUFBRTtRQUNOLE1BQU0sRUFBRTs7O3lCQS9FWDtFQTRCb0Msc0JBQXNCO1NBQTdDLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgRWxlbWVudFJlZiwgSW5wdXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcywgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJMThOIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vZGVjb3JhdG9yL0kxOE4uZGVjb3JhdG9yJztcbmltcG9ydCB7IE9wdGlvbiB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2RlY29yYXRvci9PcHRpb24uZGVjb3JhdG9yJztcbmltcG9ydCB7IEV2ZW50VXRpbHMgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9zaGFyZS91dGlscy9FdmVudFV0aWxzJztcbmltcG9ydCB7IENMSUNLX0VWRU5ULCBCRUZPUkVfQ0xJQ0tfRVZFTlQsIEZPQ1VTX0VWRU5ULCBCRUZPUkVfRk9DVVNfRVZFTlQsIExPU1RfRk9DVVNfRVZFTlQsIEJFRk9SRV9MT1NUX0ZPQ1VTX0VWRU5UIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vc2hhcmUvQ3VzdG9tRXZlbnRUeXBlJztcbmltcG9ydCB7IEFic3RyYWN0STE4TkFwcGxpY2FibGUgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9zaGFyZS9BYnN0cmFjdEkxOE5BcHBsaWNhYmxlJztcbmltcG9ydCB7IE5lZWRGb2N1c1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9zZXJ2aWNlL05lZWRGb2N1c1NlcnZpY2Uuc2VydmljZSc7XG5pbXBvcnQgeyBJSGFzRGF0YSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2NvbXBvbmVudC9JSGFzRGF0YSc7XG5pbXBvcnQgeyBJTmVlZEZvY3VzIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vY29tcG9uZW50L0lOZWVkRm9jdXMnO1xuXG5cbmNvbnN0IFRZUEVfTkFNRTogc3RyaW5nID0gXCJtYXRlcmlhbC1idXR0b25cIjtcbmNvbnN0IERFRkFVTFRfQlVUVE9OX0lDT04gPSAnZmF2b3JpdGUnO1xuXG5AQ29tcG9uZW50KHtcbiAgbW9kdWxlSWQ6IG1vZHVsZS5pZCxcbiAgc2VsZWN0b3I6IFRZUEVfTkFNRSxcbiAgdGVtcGxhdGU6IGA8ZGl2IGNsYXNzPVwibWF0ZXJpYWwtaW5wdXRcIj5cbiAgPGJ1dHRvbiBbY29sb3JdPVwiZ2V0Q29sb3IoKVwiIFtuZ0NsYXNzXT1cImdldFN0eWxlQ2xhc3MoKVwiIFtkaXNhYmxlUmlwcGxlXT1cImlzRGlzYWJsZVJpcHBsZSgpXCIgW2Rpc2FibGVkXT1cImlzRGlzYWJsZSgpXCIgKm5nSWY9XCJnZXRUeXBlKCkgPT09ICdtYXQtYnV0dG9uJ1wiIG1hdC1idXR0b24gKGNsaWNrKT1cIm9uQ2xpY2soJGV2ZW50KVwiPnt7IGdldExhYmVsKCkgfX08L2J1dHRvbj5cbiAgPGJ1dHRvbiBbY29sb3JdPVwiZ2V0Q29sb3IoKVwiIFtuZ0NsYXNzXT1cImdldFN0eWxlQ2xhc3MoKVwiIFtkaXNhYmxlUmlwcGxlXT1cImlzRGlzYWJsZVJpcHBsZSgpXCIgW2Rpc2FibGVkXT1cImlzRGlzYWJsZSgpXCIgKm5nSWY9XCJnZXRUeXBlKCkgPT09ICdtYXQtcmFpc2VkLWJ1dHRvbidcIiBtYXQtcmFpc2VkLWJ1dHRvbiAoY2xpY2spPVwib25DbGljaygkZXZlbnQpXCIgPnt7IGdldExhYmVsKCkgfX08L2J1dHRvbj5cbiAgPGJ1dHRvbiBbY29sb3JdPVwiZ2V0Q29sb3IoKVwiIFtuZ0NsYXNzXT1cImdldFN0eWxlQ2xhc3MoKVwiIFtkaXNhYmxlUmlwcGxlXT1cImlzRGlzYWJsZVJpcHBsZSgpXCIgW2Rpc2FibGVkXT1cImlzRGlzYWJsZSgpXCIgKm5nSWY9XCJnZXRUeXBlKCkgPT09ICdtYXQtc3Ryb2tlZC1idXR0b24nXCIgbWF0LXN0cm9rZWQtYnV0dG9uIChjbGljayk9XCJvbkNsaWNrKCRldmVudClcIiA+e3sgZ2V0TGFiZWwoKSB9fTwvYnV0dG9uPlxuICA8YnV0dG9uIFtjb2xvcl09XCJnZXRDb2xvcigpXCIgW25nQ2xhc3NdPVwiZ2V0U3R5bGVDbGFzcygpXCIgW2Rpc2FibGVSaXBwbGVdPVwiaXNEaXNhYmxlUmlwcGxlKClcIiBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlKClcIiAqbmdJZj1cImdldFR5cGUoKSA9PT0gJ21hdC1mbGF0LWJ1dHRvbidcIiBtYXQtZmxhdC1idXR0b24gKGNsaWNrKT1cIm9uQ2xpY2soJGV2ZW50KVwiID57eyBnZXRMYWJlbCgpIH19PC9idXR0b24+XG4gIDxidXR0b24gW2NvbG9yXT1cImdldENvbG9yKClcIiBbbmdDbGFzc109XCJnZXRTdHlsZUNsYXNzKClcIiBbZGlzYWJsZVJpcHBsZV09XCJpc0Rpc2FibGVSaXBwbGUoKVwiIFtkaXNhYmxlZF09XCJpc0Rpc2FibGUoKVwiICpuZ0lmPVwiZ2V0VHlwZSgpID09PSAnbWF0LWljb24tYnV0dG9uJ1wiIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwib25DbGljaygkZXZlbnQpXCIgPlxuICAgIDxtYXQtaWNvbj57eyBnZXRCdXR0b25JY29uKCkgfX08L21hdC1pY29uPlxuICA8L2J1dHRvbj5cbjwvZGl2PlxuYCxcbn0pXG5leHBvcnQgY2xhc3MgTWF0ZXJpYWxCdXR0b24gZXh0ZW5kcyBBYnN0cmFjdEkxOE5BcHBsaWNhYmxlIGltcGxlbWVudHMgT25Jbml0LCBJSGFzRGF0YSwgSU5lZWRGb2N1cyB7XG4gIHByb3RlY3RlZ