com.phloxui
Version:
PhloxUI Ng2+ Framework
540 lines (539 loc) • 38.3 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
import * as tslib_1 from "tslib";
import { Component, ElementRef, Input, Output, Type, EventEmitter, ViewChild } from '@angular/core';
import { ComponentWrapper } from '../../ComponentWrapper.component';
import { NeedFocusService } from '../../../service/NeedFocusService.service';
import { AbstractSimpleDropdown } from './AbstractSimpleDropdown';
import { Option } from '../../../decorator/Option.decorator';
import { I18N } from '../../../decorator/I18N.decorator';
import { PhloxAppInfoService } from '../../../service/PhloxAppInfoService.service';
var /** @type {?} */ TYPE_NAME = "phx-component-dropdown";
var ComponentDropdownList = /** @class */ (function (_super) {
tslib_1.__extends(ComponentDropdownList, _super);
function ComponentDropdownList(needFocusService, elementRef, phloxAppInfoService) {
return _super.call(this, needFocusService, elementRef, phloxAppInfoService) || this;
}
/**
* @return {?}
*/
ComponentDropdownList.prototype.ngOnInit = /**
* @return {?}
*/
function () {
var _this = this;
_super.prototype.ngOnInit.call(this);
if (this.changeEvent !== null && this.changeEvent !== undefined) {
this.changeEvent.subscribe(function ($event) {
var /** @type {?} */ sItem = $event.detail.data.newValue;
if (_this.dropdownLabel !== null && typeof _this.dropdownLabel !== 'undefined') {
var /** @type {?} */ sItems = [];
sItems.push(sItem);
_this.dropdownLabel.setData(sItems);
}
});
}
if (this.defaultIdx !== null && this.defaultIdx !== undefined) {
this.setSelectedIndex(this.defaultIdx);
}
};
/**
* @param {?} inputValue
* @param {?} results
* @return {?}
*/
ComponentDropdownList.prototype.onValidationEnd = /**
* @param {?} inputValue
* @param {?} results
* @return {?}
*/
function (inputValue, results) {
};
/**
* @param {?} data
* @param {?} inputVal
* @return {?}
*/
ComponentDropdownList.prototype.onDataChange = /**
* @param {?} data
* @param {?} inputVal
* @return {?}
*/
function (data, inputVal) {
};
/**
* @param {?} oldValue
* @param {?} inputVal
* @param {?=} data
* @return {?}
*/
ComponentDropdownList.prototype.onDataChangePrevented = /**
* @param {?} oldValue
* @param {?} inputVal
* @param {?=} data
* @return {?}
*/
function (oldValue, inputVal, data) {
this._setData(oldValue, true, null, false);
};
// Override
/**
* @param {?} $event
* @return {?}
*/
ComponentDropdownList.prototype.doFocus = /**
* @param {?} $event
* @return {?}
*/
function ($event) {
if ($(this.elementRef.nativeElement).find(".dropdown > button:focus").length <= 0) {
$(this.elementRef.nativeElement).find(".dropdown > button").focus();
}
};
// Override
/**
* @param {?} $event
* @return {?}
*/
ComponentDropdownList.prototype.doBlur = /**
* @param {?} $event
* @return {?}
*/
function ($event) {
if ($(this.elementRef.nativeElement).find(".dropdown > button:focus").length > 0) {
$(this.elementRef.nativeElement).find(".dropdown > button").blur();
}
};
// Override
/**
* @return {?}
*/
ComponentDropdownList.prototype.getDropdownPopupSelector = /**
* @return {?}
*/
function () {
return '.menu';
};
/**
* @param {?} data
* @return {?}
*/
ComponentDropdownList.prototype.selfSaveData = /**
* @param {?} data
* @return {?}
*/
function (data) {
};
/**
* @return {?}
*/
ComponentDropdownList.prototype.selfResetData = /**
* @return {?}
*/
function () {
};
/**
* @return {?}
*/
ComponentDropdownList.prototype.getComponentType = /**
* @return {?}
*/
function () {
return this.componentType;
};
/**
* @param {?} type
* @return {?}
*/
ComponentDropdownList.prototype.setComponentType = /**
* @param {?} type
* @return {?}
*/
function (type) {
this.componentType = type;
};
/**
* @return {?}
*/
ComponentDropdownList.prototype.getComponentModel = /**
* @return {?}
*/
function () {
return this.componentModel;
};
/**
* @param {?} model
* @return {?}
*/
ComponentDropdownList.prototype.setComponentModel = /**
* @param {?} model
* @return {?}
*/
function (model) {
this.componentModel = model;
};
/**
* @return {?}
*/
ComponentDropdownList.prototype.getComponentHandler = /**
* @return {?}
*/
function () {
return this.componentHandler;
};
/**
* @param {?} handler
* @return {?}
*/
ComponentDropdownList.prototype.setComponentHandler = /**
* @param {?} handler
* @return {?}
*/
function (handler) {
this.componentHandler = handler;
};
ComponentDropdownList.TYPE_NAME = TYPE_NAME;
ComponentDropdownList.decorators = [
{ type: Component, args: [{
moduleId: module.id,
selector: TYPE_NAME,
template: "<div class=\"phx-component-dropdown\" [style.width]=\"getWidth()\" [style.height]=\"getHeight()\">\n\t<div class=\"dropdown\">\n\t\t<button type=\"button\" [disabled]=\"isDisabled()\" (click)=\"click($event)\" (focusin)=\"onFocusing($event)\" (blur)=\"onLostFocusing($event)\">\n\t\t\t<div class=\"label-side\">\n\t\t\t\t<phx-component-wrapper #dropdownLabel [type]=\"getComponentType()\" [model]=\"getComponentModel()\" [data]=\"getSelectedItem()\"></phx-component-wrapper>\n\t\t\t</div>\n\t\t\t<div class=\"arrow-side\">\n\t\t\t\t<div class=\"flex-center\">\n\t\t\t\t\t<div class=\"down-triangle\"></div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</button>\n\t</div>\n\t<ul class=\"menu\" [class.show]=\"isShow()\" [style.width]=\"getDropdownWidth()\" [style.max-height]=\"getDropdownHeight()\">\n\t\t<li *ngFor=\"let item of getItems(); let i = index;\" (click)=\"onSelectItemClicked($event, i)\">\n\t\t\t<phx-component-wrapper [type]=\"getComponentType()\" [model]=\"getComponentModel()\" [handler]=\"getComponentHandler()\" [data]=\"item\"></phx-component-wrapper>\n\t\t</li>\n\t</ul>\n</div>\n"
},] },
];
/** @nocollapse */
ComponentDropdownList.ctorParameters = function () { return [
{ type: NeedFocusService, },
{ type: ElementRef, },
{ type: PhloxAppInfoService, },
]; };
ComponentDropdownList.propDecorators = {
"dataParent": [{ type: Input },],
"ignoreParentData": [{ type: Input },],
"data": [{ type: Input },],
"ignoreParentDisabled": [{ type: Input },],
"delegateHistory": [{ type: Input },],
"onDisabled": [{ type: Input },],
"onEnabled": [{ type: Input },],
"loadingEnabled": [{ type: Input },],
"i18nKey": [{ type: Input },],
"bypass": [{ type: Input, args: ['i18nBypass',] },],
"options": [{ type: Input },],
"disabled": [{ type: Input },],
"field": [{ type: Input },],
"name": [{ type: Input },],
"typeOfData": [{ type: Input },],
"readOnly": [{ type: Input },],
"help": [{ type: Input },],
"dataComparator": [{ type: Input },],
"items": [{ type: Input },],
"width": [{ type: Input },],
"height": [{ type: Input },],
"dropdownWidth": [{ type: Input },],
"dropdownHeight": [{ type: Input },],
"defaultIdx": [{ type: Input },],
"componentType": [{ type: Input, args: ['type',] },],
"componentModel": [{ type: Input, args: ['model',] },],
"componentHandler": [{ type: Input, args: ['handler',] },],
"loadEvent": [{ type: Output, args: ['phxLoad',] },],
"startValidateEvent": [{ type: Output, args: ['phxStartValidate',] },],
"endValidateEvent": [{ type: Output, args: ['phxEndValidate',] },],
"beforeFocusEvent": [{ type: Output, args: ['phxBeforeFocus',] },],
"focusEvent": [{ type: Output, args: ['phxFocus',] },],
"beforeLostFocusEvent": [{ type: Output, args: ['phxBeforeLostFocus',] },],
"lostFocusEvent": [{ type: Output, args: ['phxLostFocus',] },],
"beforeChangeEvent": [{ type: Output, args: ['phxBeforeChange',] },],
"changeEvent": [{ type: Output, args: ['phxChange',] },],
"beforeSelectEvent": [{ type: Output, args: ['phxBeforeSelect',] },],
"selectEvent": [{ type: Output, args: ['phxSelect',] },],
"beforeClickEvent": [{ type: Output, args: ['phxBeforeClick',] },],
"clickEvent": [{ type: Output, args: ['phxClick',] },],
"beforeShowEvent": [{ type: Output, args: ['phxBeforeShow',] },],
"showEvent": [{ type: Output, args: ['phxShow',] },],
"beforeHideEvent": [{ type: Output, args: ['phxBeforeHide',] },],
"hideEvent": [{ type: Output, args: ['phxHide',] },],
"dropdownLabel": [{ type: ViewChild, args: ['dropdownLabel',] },],
};
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Object)
], ComponentDropdownList.prototype, "dataParent", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], ComponentDropdownList.prototype, "ignoreParentData", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Object)
], ComponentDropdownList.prototype, "data", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], ComponentDropdownList.prototype, "ignoreParentDisabled", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], ComponentDropdownList.prototype, "delegateHistory", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Function)
], ComponentDropdownList.prototype, "onDisabled", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Function)
], ComponentDropdownList.prototype, "onEnabled", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], ComponentDropdownList.prototype, "loadingEnabled", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", String)
], ComponentDropdownList.prototype, "i18nKey", void 0);
tslib_1.__decorate([
Option('i18nBypass'),
tslib_1.__metadata("design:type", Boolean)
], ComponentDropdownList.prototype, "bypass", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], ComponentDropdownList.prototype, "disabled", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", String)
], ComponentDropdownList.prototype, "field", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", String)
], ComponentDropdownList.prototype, "name", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", String)
], ComponentDropdownList.prototype, "typeOfData", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], ComponentDropdownList.prototype, "readOnly", void 0);
tslib_1.__decorate([
I18N(),
Option(),
tslib_1.__metadata("design:type", Object)
], ComponentDropdownList.prototype, "help", void 0);
tslib_1.__decorate([
Option('comparator'),
tslib_1.__metadata("design:type", Object)
], ComponentDropdownList.prototype, "dataComparator", void 0);
tslib_1.__decorate([
I18N(),
Option(),
tslib_1.__metadata("design:type", Array)
], ComponentDropdownList.prototype, "items", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", String)
], ComponentDropdownList.prototype, "width", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", String)
], ComponentDropdownList.prototype, "height", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", String)
], ComponentDropdownList.prototype, "dropdownWidth", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", String)
], ComponentDropdownList.prototype, "dropdownHeight", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Number)
], ComponentDropdownList.prototype, "defaultIdx", void 0);
tslib_1.__decorate([
Option('type'),
tslib_1.__metadata("design:type", Type)
], ComponentDropdownList.prototype, "componentType", void 0);
tslib_1.__decorate([
I18N('model'),
Option('model'),
tslib_1.__metadata("design:type", Object)
], ComponentDropdownList.prototype, "componentModel", void 0);
tslib_1.__decorate([
Option('handler'),
tslib_1.__metadata("design:type", Function)
], ComponentDropdownList.prototype, "componentHandler", void 0);
tslib_1.__decorate([
Option('load'),
tslib_1.__metadata("design:type", EventEmitter)
], ComponentDropdownList.prototype, "loadEvent", void 0);
tslib_1.__decorate([
Option('startValidate'),
tslib_1.__metadata("design:type", EventEmitter)
], ComponentDropdownList.prototype, "startValidateEvent", void 0);
tslib_1.__decorate([
Option('endValidate'),
tslib_1.__metadata("design:type", EventEmitter)
], ComponentDropdownList.prototype, "endValidateEvent", void 0);
tslib_1.__decorate([
Option('beforeFocus'),
tslib_1.__metadata("design:type", EventEmitter)
], ComponentDropdownList.prototype, "beforeFocusEvent", void 0);
tslib_1.__decorate([
Option('focus'),
tslib_1.__metadata("design:type", EventEmitter)
], ComponentDropdownList.prototype, "focusEvent", void 0);
tslib_1.__decorate([
Option('beforeLostFocus'),
tslib_1.__metadata("design:type", EventEmitter)
], ComponentDropdownList.prototype, "beforeLostFocusEvent", void 0);
tslib_1.__decorate([
Option('lostFocus'),
tslib_1.__metadata("design:type", EventEmitter)
], ComponentDropdownList.prototype, "lostFocusEvent", void 0);
tslib_1.__decorate([
Option('beforeChange'),
tslib_1.__metadata("design:type", EventEmitter)
], ComponentDropdownList.prototype, "beforeChangeEvent", void 0);
tslib_1.__decorate([
Option('change'),
tslib_1.__metadata("design:type", EventEmitter)
], ComponentDropdownList.prototype, "changeEvent", void 0);
tslib_1.__decorate([
Option('beforeSelect'),
tslib_1.__metadata("design:type", EventEmitter)
], ComponentDropdownList.prototype, "beforeSelectEvent", void 0);
tslib_1.__decorate([
Option('select'),
tslib_1.__metadata("design:type", EventEmitter)
], ComponentDropdownList.prototype, "selectEvent", void 0);
tslib_1.__decorate([
Option('beforeClick'),
tslib_1.__metadata("design:type", EventEmitter)
], ComponentDropdownList.prototype, "beforeClickEvent", void 0);
tslib_1.__decorate([
Option('click'),
tslib_1.__metadata("design:type", EventEmitter)
], ComponentDropdownList.prototype, "clickEvent", void 0);
tslib_1.__decorate([
Option('beforeShow'),
tslib_1.__metadata("design:type", EventEmitter)
], ComponentDropdownList.prototype, "beforeShowEvent", void 0);
tslib_1.__decorate([
Option('show'),
tslib_1.__metadata("design:type", EventEmitter)
], ComponentDropdownList.prototype, "showEvent", void 0);
tslib_1.__decorate([
Option('beforeHide'),
tslib_1.__metadata("design:type", EventEmitter)
], ComponentDropdownList.prototype, "beforeHideEvent", void 0);
tslib_1.__decorate([
Option('hide'),
tslib_1.__metadata("design:type", EventEmitter)
], ComponentDropdownList.prototype, "hideEvent", void 0);
return ComponentDropdownList;
}(AbstractSimpleDropdown));
export { ComponentDropdownList };
function ComponentDropdownList_tsickle_Closure_declarations() {
/** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */
ComponentDropdownList.decorators;
/**
* @nocollapse
* @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}
*/
ComponentDropdownList.ctorParameters;
/** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */
ComponentDropdownList.propDecorators;
/** @type {?} */
ComponentDropdownList.TYPE_NAME;
/** @type {?} */
ComponentDropdownList.prototype.dataParent;
/** @type {?} */
ComponentDropdownList.prototype.ignoreParentData;
/** @type {?} */
ComponentDropdownList.prototype.data;
/** @type {?} */
ComponentDropdownList.prototype.ignoreParentDisabled;
/** @type {?} */
ComponentDropdownList.prototype.delegateHistory;
/** @type {?} */
ComponentDropdownList.prototype.onDisabled;
/** @type {?} */
ComponentDropdownList.prototype.onEnabled;
/** @type {?} */
ComponentDropdownList.prototype.loadingEnabled;
/** @type {?} */
ComponentDropdownList.prototype.i18nKey;
/** @type {?} */
ComponentDropdownList.prototype.bypass;
/** @type {?} */
ComponentDropdownList.prototype.options;
/** @type {?} */
ComponentDropdownList.prototype.disabled;
/** @type {?} */
ComponentDropdownList.prototype.field;
/** @type {?} */
ComponentDropdownList.prototype.name;
/** @type {?} */
ComponentDropdownList.prototype.typeOfData;
/** @type {?} */
ComponentDropdownList.prototype.readOnly;
/** @type {?} */
ComponentDropdownList.prototype.help;
/** @type {?} */
ComponentDropdownList.prototype.dataComparator;
/** @type {?} */
ComponentDropdownList.prototype.items;
/** @type {?} */
ComponentDropdownList.prototype.width;
/** @type {?} */
ComponentDropdownList.prototype.height;
/** @type {?} */
ComponentDropdownList.prototype.dropdownWidth;
/** @type {?} */
ComponentDropdownList.prototype.dropdownHeight;
/** @type {?} */
ComponentDropdownList.prototype.defaultIdx;
/** @type {?} */
ComponentDropdownList.prototype.componentType;
/** @type {?} */
ComponentDropdownList.prototype.componentModel;
/** @type {?} */
ComponentDropdownList.prototype.componentHandler;
/** @type {?} */
ComponentDropdownList.prototype.loadEvent;
/** @type {?} */
ComponentDropdownList.prototype.startValidateEvent;
/** @type {?} */
ComponentDropdownList.prototype.endValidateEvent;
/** @type {?} */
ComponentDropdownList.prototype.beforeFocusEvent;
/** @type {?} */
ComponentDropdownList.prototype.focusEvent;
/** @type {?} */
ComponentDropdownList.prototype.beforeLostFocusEvent;
/** @type {?} */
ComponentDropdownList.prototype.lostFocusEvent;
/** @type {?} */
ComponentDropdownList.prototype.beforeChangeEvent;
/** @type {?} */
ComponentDropdownList.prototype.changeEvent;
/** @type {?} */
ComponentDropdownList.prototype.beforeSelectEvent;
/** @type {?} */
ComponentDropdownList.prototype.selectEvent;
/** @type {?} */
ComponentDropdownList.prototype.beforeClickEvent;
/** @type {?} */
ComponentDropdownList.prototype.clickEvent;
/** @type {?} */
ComponentDropdownList.prototype.beforeShowEvent;
/** @type {?} */
ComponentDropdownList.prototype.showEvent;
/** @type {?} */
ComponentDropdownList.prototype.beforeHideEvent;
/** @type {?} */
ComponentDropdownList.prototype.hideEvent;
/** @type {?} */
ComponentDropdownList.prototype.dropdownLabel;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tcG9uZW50RHJvcGRvd25MaXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2NvbS5waGxveHVpLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudC9kYXRhdmlldy9pbnB1dC9Db21wb25lbnREcm9wZG93bkxpc3QuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxVQUFVLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1RyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUdwRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUU3RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUdsRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDN0QsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3pELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBSW5GLHFCQUFNLFNBQVMsR0FBVyx3QkFBd0IsQ0FBQzs7SUEwQlIsaURBQXNCO0lBOEovRCwrQkFBWSxnQkFBa0MsRUFBRSxVQUFzQixFQUFFLG1CQUF3QztlQUM5RyxrQkFBTSxnQkFBZ0IsRUFBRSxVQUFVLEVBQUUsbUJBQW1CLENBQUM7S0FDekQ7Ozs7SUFFTSx3Q0FBUTs7Ozs7UUFDYixpQkFBTSxRQUFRLFdBQUUsQ0FBQztRQUVqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFDaEUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsVUFBQyxNQUFXO2dCQUNyQyxxQkFBSSxL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QUFZOzs7UUFHbEMsTUFBTSxDQUFDLGNBQWMsQ0FBQzswQ0FDTSxZQUFZOzs7UUFFeEMsTUFBTSxDQUFDLFFBQVEsQ0FBQzswQ0FDTSxZQUFZOzs7UUFJbEMsTUFBTSxDQUFDLGFBQWEsQ0FBQzswQ0FDTSxZQUFZOzs7UUFFdkMsTUFBTSxDQUFDLE9BQU8sQ0FBQzswQ0FDTSxZQUFZOzs7UUFFakMsTUFBTSxDQUFDLFlBQVksQ0FBQzswQ0FDTSxZQUFZOzs7UUFFdEMsTUFBTSxDQUFDLE1BQU0sQ0FBQzswQ0FDTSxZQUFZOzs7UUFFaEMsTUFBTSxDQUFDLFlBQVksQ0FBQzswQ0FDTSxZQUFZOzs7UUFFdEMsTUFBTSxDQUFDLE1BQU0sQ0FBQzswQ0FDTSxZQUFZOztnQ0FsTW5DO0VBeUMyQyxzQkFBc0I7U0FBcEQscUJBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIEVsZW1lbnRSZWYsIElucHV0LCBPdXRwdXQsIFR5cGUsIEV2ZW50RW1pdHRlciwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21wb25lbnRXcmFwcGVyIH0gZnJvbSAnLi4vLi4vQ29tcG9uZW50V3JhcHBlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgSU5lZWRGb2N1cyB9IGZyb20gJy4uLy4uL0lOZWVkRm9jdXMnO1xuaW1wb3J0IHsgSURhdGFDb21wYXJhdG9yIH0gZnJvbSAnLi4vLi4vSURhdGFDb21wYXJhdG9yJztcbmltcG9ydCB7IE5lZWRGb2N1c1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlL05lZWRGb2N1c1NlcnZpY2Uuc2VydmljZSc7XG5pbXBvcnQgeyBJU2VsZWN0SXRlbU1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWwvSVNlbGVjdEl0ZW1Nb2RlbCc7XG5pbXBvcnQgeyBBYnN0cmFjdFNpbXBsZURyb3Bkb3duIH0gZnJvbSAnLi9BYnN0cmFjdFNpbXBsZURyb3Bkb3duJztcbmltcG9ydCB7IElIYXNEYXRhIH0gZnJvbSAnLi4vLi4vSUhhc0RhdGEnO1xuaW1wb3J0IHsgVmFsaWRhdGlvblJlc3VsdCB9IGZyb20gJy4uLy4uL21vZGVsL1ZhbGlkYXRpb25SZXN1bHQnO1xuaW1wb3J0IHsgT3B0aW9uIH0gZnJvbSAnLi4vLi4vLi4vZGVjb3JhdG9yL09wdGlvbi5kZWNvcmF0b3InO1xuaW1wb3J0IHsgSTE4TiB9IGZyb20gJy4uLy4uLy4uL2RlY29yYXRvci9JMThOLmRlY29yYXRvcic7XG5pbXBvcnQgeyBQaGxveEFwcEluZm9TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZS9QaGxveEFwcEluZm9TZXJ2aWNlLnNlcnZpY2UnO1xuXG5kZWNsYXJlIHZhciAkOiBhbnk7XG5cbmNvbnN0IFRZUEVfTkFNRTogc3RyaW5nID0gXCJwaHgtY29tcG9uZW50LWRyb3Bkb3duXCI7XG5cbkBDb21wb25lbnQoe1xuICBtb2R1bGVJZDogbW9kdWxlLmlkLFxuICBzZWxlY3RvcjogVFlQRV9OQU1FLFxuICB0ZW1wbGF0ZTogYDxkaXYgY2xhc3M9XCJwaHgtY29tcG9uZW50LWRyb3Bkb3duXCIgW3N0eWxlLndpZHRoXT1cImdldFdpZHRoKClcIiBbc3R5bGUuaGVpZ2h0XT1cImdldEhlaWdodCgpXCI+XG5cdDxkaXYgY2xhc3M9XCJkcm9wZG93blwiPlxuXHRcdDxidXR0b24gdHlwZT1cImJ1dHRvblwiIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVkKClcIiAoY2xpY2spPVwiY2xpY2soJGV2ZW50KVwiIChmb2N1c2luKT1cIm9uRm9jdXNpbmcoJGV2ZW50KVwiIChibHVyKT1cIm9uTG9zdEZvY3VzaW5nKCRldmVudClcIj5cblx0XHRcdDxkaXYgY2xhc3M9XCJsYWJlbC1zaWRlXCI+XG5cdFx0XHRcdDxwaHgtY29tcG9uZW50LXdyYXBwZXIgI2Ryb3Bkb3duTGFiZWwgW3R5cGVdPVwiZ2V0Q29tcG9uZW50VHlwZSgpXCIgW21vZGVsXT1cImdldENvbXBvbmVudE1vZGVsKClcIiBbZGF0YV09XCJnZXRTZWxlY3RlZEl0ZW0oKVwiPjwvcGh4LWNvbXBvbmVudC13cmFwcGVyPlxuXHRcdFx0PC9kaXY+XG5cdFx0XHQ8ZGl2IGNsYXNzPVwiYXJyb3ctc2lkZVwiPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZmxleC1jZW50ZXJcIj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZG93bi10cmlhbmdsZVwiPjwvZGl2PlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdDwvZGl2PlxuXHRcdDwvYnV0dG9uPlxuXHQ8L2Rpdj5cblx0PHVsIGNsYXNzPVwibWVudVwiIFtjbGFzcy5zaG93XT1cImlzU2hvdygpXCIgW3N0eWxlLndpZHRoXT1cImdldERyb3Bkb3duV2lkdGgoKVwiIFtzdHlsZS5tYXgtaGVpZ2h0XT1cImdldERyb3Bkb3duSGVpZ2h0KClcIj5cblx0XHQ8bGkgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZ2V0SXRlbXMoKTsgbGV0IGkgPSBpbmRleDtcIiAoY2xpY2spPVwib25TZWxlY3RJdGVtQ2xpY2tlZCgkZXZlbnQsIGkpXCI+XG5cdFx0XHQ8cGh4LWNvbXBvbmVudC13cmFwcGVyIFt0eXBlXT1cImdldENvbXBvbmVudFR5cGUoKVwiIFttb2RlbF09XCJnZXRDb21wb25lbnRNb2RlbCgpXCIgW2hhbmRsZXJdPVwiZ2V0Q29tcG9uZW50SGFuZGxlcigpXCIgW2RhdGFdPVwiaXRlbVwiPjwvcGh4LWNvbXBvbmVudC13cmFwcGVyPlxuXHRcdDwvbGk+XG5cdDwvdWw+XG48L2Rpdj5cbmBcbn0pXG5leHBvcnQgY2xhc3MgQ29tcG9uZW50RHJvcGRvd25MaXN0IGV4dGVuZHMgQWJzdHJhY3RTaW1wbGVEcm9wZG93biBpbXBsZW1lbnRzIE9uSW5pdCwgSU5lZWRGb2N1cyB7XG5cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBUWVBFX05BTUU6IHN0cmluZyA9IFRZUEVfTkFNRTtcblxuICAvLyBSZS1kZWNsYXJlIGZpZWxkIHRvIGRlY2xhcmUgbmcgQElucHV0LlxuICAvLyAtLS0gZnJvbSBBYnN0cmFjdEhhc0RhdGFcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByb3RlY3RlZCBkYXRhUGFyZW50OiBJSGFzRGF0YTtcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByb3RlY3RlZCBpZ25vcmVQYXJlbnREYXRhOiBib29sZWFuO1xuICBASW5wdXQoKVxuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIGRhdGE6IGFueTtcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByb3RlY3RlZCBpZ25vcmVQYXJlbnREaXNhYmxlZDogYm9vbGVhbjtcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByb3RlY3RlZCBkZWxlZ2F0ZUhpc3Rvcnk6IGJvb2xlYW47XG4gIEBJbnB1dCgpXG4gIEBPcHRpb24oKVxuICBwcm90ZWN0ZWQgb25EaXNhYmxlZDogRnVuY3Rpb247XG4gIEBJbnB1dCgpXG4gIEBPcHRpb24oKVxuICBwcm90ZWN0ZWQgb25FbmFibGVkOiBGdW5jdGlvbjtcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByb3RlY3RlZCBsb2FkaW5nRW5hYmxlZDogYm9vbGVhbjtcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByb3RlY3RlZCBpMThuS2V5OiBzdHJpbmc7XG4gIEBJbnB1dCgnaTE4bkJ5cGFzcycpXG4gIEBPcHRpb24oJ2kxOG5CeXBhc3MnKVxuICBwcm90ZWN0ZWQgYnlwYXNzOiBib29sZWFuO1xuICBASW5wdXQoKVxuICBwcm90ZWN0ZWQgb3B0aW9uczogYW55O1xuICBASW5wdXQoKVxuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIGRpc2FibGVkOiBib29sZWFuO1xuICAvLyAtLS0gZnJvbSBBYnN0cmFjdERhdGFWaWV3XG4gIEBJbnB1dCgpXG4gIEBPcHRpb24oKVxuICBwcm90ZWN0ZWQgZmllbGQ6IHN0cmluZztcbiAgLy8gLS0tIGZyb20gQWJzdHJhY3RJbnB1dERhdGFWaWV3XG4gIEBJbnB1dCgpXG4gIEBPcHRpb24oKVxuICBwcm90ZWN0ZWQgbmFtZTogc3RyaW5nO1xuICBASW5wdXQoKVxuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIHR5cGVPZkRhdGE6IHN0cmluZztcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByb3RlY3RlZCByZWFkT25seTogYm9vbGVhbjtcbiAgQElucHV0KClcbiAgQEkxOE4oKVxuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIGhlbHA6IGFueTtcbiAgLy8gLS0tIGZyb20gQWJzdHJhY3RTZWxlY3RJdGVtc1xuICBASW5wdXQoKVxuICBAT3B0aW9uKCdjb21wYXJhdG9yJylcbiAgcHJvdGVjdGVkIGRhdGFDb21wYXJhdG9yOiBJRGF0YUNvbXBhcmF0b3I8YW55PjtcbiAgQElucHV0KClcbiAgQEkxOE4oKVxuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIGl0ZW1zOiBJU2VsZWN0SXRlbU1vZGVsW107XG4gIC8vIC0tLSBmcm9tIEFic3RyYWN0U2VsZWN0T25lSXRlbVxuICAvLyAtLS0gZnJvbSBBYnN0cmFjdFNpbXBsZURyb3Bkb3duXG4gIEBJbnB1dCgpXG4gIEBPcHRpb24oKVxuICBwcm90ZWN0ZWQgd2lkdGg6IHN0cmluZztcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByb3RlY3RlZCBoZWlnaHQ6IHN0cmluZztcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByb3RlY3RlZCBkcm9wZG93bldpZHRoOiBzdHJpbmc7XG4gIEBJbnB1dCgpXG4gIEBPcHRpb24oKVxuICBwcm90ZWN0ZWQgZHJvcGRvd25IZWlnaHQ6IHN0cmluZztcbiAgLy8gLS0tIHNlbGZcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByb3RlY3RlZCBkZWZhdWx0SWR4OiBudW1iZXI7XG4gIEBJbnB1dCgndHlwZScpXG4gIEBPcHRpb24oJ3R5cGUnKVxuICBwcm90ZWN0ZWQgY29tcG9uZW50VHlwZTogVHlwZTxhbnk+O1xuICBASW5wdXQoJ21vZGVsJylcbiAgQEkxOE4oJ21vZGVsJylcbiAgQE9wdGlvbignbW9kZWwnKVxuICBwcm90ZWN0ZWQgY29tcG9uZW50TW9kZWw6IGFueTtcbiAgQElucHV0KCdoYW5kbGVyJylcbiAgQE9wdGlvbignaGFuZGxlcicpXG4gIHByb3RlY3RlZCBjb21wb25lbnRIYW5kbGVyOiBGdW5jdGlvbjtcblxuICAvLyBSZS1kZWNsYXJlIGZpZWxkIHRvIGRlY2xhcmUgbmcgQE91dHB1dC5cbiAgLy8gLS0tIGZyb20gQWJzdHJhY3RIYXNEYXRhXG4gIEBPdXRwdXQoJ3BoeExvYWQnKVxuICBAT3B0aW9uKCdsb2FkJylcbiAgcHJvdGVjdGVkIGxvYWRFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XG4gIC8vIC0tLSBmcm9tIEFic3RyYWN0RGF0YVZpZXdcbiAgLy8gLS0tIGZyb20gQWJzdHJhY3RJbnB1dERhdGFWaWV3XG4gIEBPdXRwdXQoJ3BoeFN0YXJ0VmFsaWRhdGUnKVxuICBAT3B0aW9uKCdzdGFydFZhbGlkYXRlJylcbiAgcHJvdGVjdGVkIHN0YXJ0VmFsaWRhdGVFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPdXRwdXQoJ3BoeEVuZFZhbGlkYXRlJylcbiAgQE9wdGlvbignZW5kVmFsaWRhdGUnKVxuICBwcm90ZWN0ZWQgZW5kVmFsaWRhdGVFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPdXRwdXQoJ3BoeEJlZm9yZUZvY3VzJylcbiAgQE9wdGlvbignYmVmb3JlRm9jdXMnKVxuICBwcm90ZWN0ZWQgYmVmb3JlRm9jdXNFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPdXRwdXQoJ3BoeEZvY3VzJylcbiAgQE9wdGlvbignZm9jdXMnKVxuICBwcm90ZWN0ZWQgZm9jdXNFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPdXRwdXQoJ3BoeEJlZm9yZUxvc3RGb2N1cycpXG4gIEBPcHRpb24oJ2JlZm9yZUxvc3RGb2N1cycpXG4gIHByb3RlY3RlZCBiZWZvcmVMb3N0Rm9jdXNFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPdXRwdXQoJ3BoeExvc3RGb2N1cycpXG4gIEBPcHRpb24oJ2xvc3RGb2N1cycpXG4gIHByb3RlY3RlZCBsb3N0Rm9jdXNFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPdXRwdXQoJ3BoeEJlZm9yZUNoYW5nZScpXG4gIEBPcHRpb24oJ2JlZm9yZUNoYW5nZScpXG4gIHByb3RlY3RlZCBiZWZvcmVDaGFuZ2VFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPdXRwdXQoJ3BoeENoYW5nZScpXG4gIEBPcHRpb24oJ2NoYW5nZScpXG4gIHByb3RlY3RlZCBjaGFuZ2VFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XG4gIC8vIC0tLSBmcm9tIEFic3RyYWN0U2VsZWN0SXRlbXNcbiAgQE91dHB1dCgncGh4QmVmb3JlU2VsZWN0JylcbiAgQE9wdGlvbignYmVmb3JlU2VsZWN0JylcbiAgcHJvdGVjdGVkIGJlZm9yZVNlbGVjdEV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgQE91dHB1dCgncGh4U2VsZWN0JylcbiAgQE9wdGlvbignc2VsZWN0JylcbiAgcHJvdGVjdGVkIHNlbGVjdEV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgLy8gLS0tIGZyb20gQWJzdHJhY3RTZWxlY3RPbmVJdGVtXG4gIC8vIC0tLSBmcm9tIEFic3RyYWN0U2ltcGxlRHJvcGRvd25cbiAgQE91dHB1dCgncGh4QmVmb3JlQ2xpY2snKVxuICBAT3B0aW9uKCdiZWZvcmVDbGljaycpXG4gIHByb3RlY3RlZCBiZWZvcmVDbGlja0V2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgQE91dHB1dCgncGh4Q2xpY2snKVxuICBAT3B0aW9uKCdjbGljaycpXG4gIHByb3RlY3RlZCBjbGlja0V2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgQE91dHB1dCgncGh4QmVmb3JlU2hvdycpXG4gIEBPcHRpb24oJ2JlZm9yZVNob3cnKVxuICBwcm90ZWN0ZWQgYmVmb3JlU2hvd0V2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgQE91dHB1dCgncGh4U2hvdycpXG4gIEBPcHRpb24oJ3Nob3cnKVxuICBwcm90ZWN0ZWQgc2hvd0V2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgQE91dHB1dCgncGh4QmVmb3JlSGlkZScpXG4gIEBPcHRpb24oJ2JlZm9yZUhpZGUnKVxuICBwcm90ZWN0ZWQgYmVmb3JlSGlkZUV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgQE91dHB1dCgncGh4SGlkZScpXG4gIEBPcHRpb24oJ2hpZGUnKVxuICBwcm90ZWN0ZWQgaGlkZUV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcblxuICBAVmlld0NoaWxkKCdkcm9wZG93bkxhYmVsJylcbiAgcHJpdmF0ZSBkcm9wZG93bkxhYmVsOiBDb21wb25lbnRXcmFwcGVyO1xuXG4gIGNvbnN0cnVjdG9yKG5lZWRGb2N1c1NlcnZpY2U6IE5lZWRGb2N1c1NlcnZpY2UsIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsIHBobG94QXBwSW5mb1NlcnZpY2U6IFBobG94QXBwSW5mb1NlcnZpY2UpIHtcbiAgICBzdXBlcihuZWVkRm9jdXNTZXJ2aWNlLCBlbGVtZW50UmVmLCBwaGxveEFwcEluZm9TZXJ2aWNlKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xuXG4gICAgaWYgKHRoaXMuY2hhbmdlRXZlbnQgIT09IG51bGwgJiYgdGhpcy5jaGFuZ2VFdmVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmNoYW5nZUV2ZW50LnN1YnNjcmliZSgoJGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgbGV0IHNJdGVtID0gJGV2ZW50LmRldGFpbC5kYXRhLm5ld1ZhbHVlO1xuXG4gICAgICAgIGlmICh0aGlzLmRyb3Bkb3duTGFiZWwgIT09IG51bGwgJiYgdHlwZW9mIHRoaXMuZHJvcGRvd25MYWJlbCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICBsZXQgc0l0ZW1zID0gW107XG4gICAgICAgICAgc0l0ZW1zLnB1c2goc0l0ZW0pO1xuICAgICAgICAgIHRoaXMuZHJvcGRvd25MYWJlbC5zZXREYXRhKHNJdGVtcyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmRlZmF1bHRJZHggIT09IG51bGwgJiYgdGhpcy5kZWZhdWx0SWR4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuc2V0U2VsZWN0ZWRJbmRleCh0aGlzLmRlZmF1bHRJZHgpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBvblZhbGlkYXRpb25FbmQoaW5wdXRWYWx1ZTogYW55LCByZXN1bHRzOiBWYWxpZGF0aW9uUmVzdWx0W10pOiB2b2lkIHtcbiAgfVxuXG4gIHByb3RlY3RlZCBvbkRhdGFDaGFuZ2UoZGF0YTogYW55LCBpbnB1dFZhbDogYW55KTogdm9pZCB7XG4gIH1cblxuICBwcm90ZWN0ZWQgb25EYXRhQ2hhbmdlUHJldmVudGVkKG9sZFZhbHVlOiBhbnksIGlucHV0VmFsOiBhbnksIGRhdGE/OiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLl9zZXREYXRhKG9sZFZhbHVlLCB0cnVlLCBudWxsLCBmYWxzZSk7XG4gIH1cblxuICAvLyBPdmVycmlkZVxuICBwcm90ZWN0ZWQgZG9Gb2N1cygkZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKCQodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpLmZpbmQoXCIuZHJvcGRvd24gPiBidXR0b246Zm9jdXNcIikubGVuZ3RoIDw9IDApIHtcbiAgICAgICQodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpLmZpbmQoXCIuZHJvcGRvd24gPiBidXR0b25cIikuZm9jdXMoKTtcbiAgICB9XG4gIH1cblxuICAvLyBPdmVycmlkZVxuICBwcm90ZWN0ZWQgZG9CbHVyKCRldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoJCh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCkuZmluZChcIi5kcm9wZG93biA+IGJ1dHRvbjpmb2N1c1wiKS5sZW5ndGggPiAwKSB7XG4gICAgICAkKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KS5maW5kKFwiLmRyb3Bkb3duID4gYnV0dG9uXCIpLmJsdXIoKTtcbiAgICB9XG4gIH1cblxuICAvLyBPdmVycmlkZVxuICBwcm90ZWN0ZWQgZ2V0RHJvcGRvd25Qb3B1cFNlbGVjdG9yKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICcubWVudSc7XG4gIH1cblxuICBwdWJsaWMgc2VsZlNhdmVEYXRhKGRhdGE6IGFueSk6IHZvaWQge1xuXG4gIH1cblxuICBwdWJsaWMgc2VsZlJlc2V0RGF0YSgpOiB2b2lkIHtcblxuICB9XG5cbiAgcHVibGljIGdldENvbXBvbmVudFR5cGUoKTogVHlwZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5jb21wb25lbnRUeXBlO1xuICB9XG5cbiAgcHVibGljIHNldENvbXBvbmVudFR5cGUodHlwZTogVHlwZTxhbnk+KTogdm9pZCB7XG4gICAgdGhpcy5jb21wb25lbnRUeXBlID0gdHlwZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDb21wb25lbnRNb2RlbCgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmNvbXBvbmVudE1vZGVsO1xuICB9XG5cbiAgcHVibGljIHNldENvbXBvbmVudE1vZGVsKG1vZGVsOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLmNvbXBvbmVudE1vZGVsID0gbW9kZWw7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q29tcG9uZW50SGFuZGxlcigpOiBGdW5jdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuY29tcG9uZW50SGFuZGxlcjtcbiAgfVxuXG4gIHB1YmxpYyBzZXRDb21wb25lbnRIYW5kbGVyKGhhbmRsZXI6IEZ1bmN0aW9uKTogdm9pZCB7XG4gICAgdGhpcy5jb21wb25lbnRIYW5kbGVyID0gaGFuZGxlcjtcbiAgfVxuXG59XG4iXX0=