UNPKG

com.phloxui

Version:

PhloxUI Ng2+ Framework

392 lines (391 loc) 30.5 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 { DialogService } from '../service/DialogService.service'; import { PhloxAppInfo } from '../component/model/PhloxAppInfo'; import { AbstractComponentDataLangSelector } from './AbstractComponentDataLangSelector'; import { Option } from '../decorator/Option.decorator'; import { I18N } from '../decorator/I18N.decorator'; import { ComponentDataLangSelectorModel } from './model/ComponentDataLangSelectorModel'; import { LanguageButtonModel } from './model/LanguageButtonModel'; var /** @type {?} */ TYPE_NAME = "phx-component-lang-selector"; var ComponentDataLangSelector = /** @class */ (function (_super) { tslib_1.__extends(ComponentDataLangSelector, _super); function ComponentDataLangSelector(elementRef, dialogService) { var _this = _super.call(this, elementRef, dialogService) || this; _this.LANGUAGE_FIELD_NAME = PhloxAppInfo.DEFAULT_LANGUAGE_FIELD_NAME; _this.OBJECT_ID_FIELD_NAME = PhloxAppInfo.DEFAULT_OBJECT_ID_FIELD_NAME; _this.dataObjects = []; return _this; } /** * @return {?} */ ComponentDataLangSelector.prototype.ngOnInit = /** * @return {?} */ function () { // We've to resolve controller from model before calling super.ngOnInit(). if (this.model !== null && typeof this.model !== 'undefined') { // Only controller is null or undefined in which that we'll use value from model. if ((this.controller === null || typeof this.controller === 'undefined')) { this.controller = this.model.controller; } } _super.prototype.ngOnInit.call(this); }; /** * @return {?} */ ComponentDataLangSelector.prototype.hasModel = /** * @return {?} */ function () { if (this.model !== null && typeof this.model !== 'undefined') { return true; } return false; }; /** * @return {?} */ ComponentDataLangSelector.prototype.getModel = /** * @return {?} */ function () { return this.model; }; /** * @param {?} model * @return {?} */ ComponentDataLangSelector.prototype.setModel = /** * @param {?} model * @return {?} */ function (model) { this.model = model; if (this.model !== null && typeof this.model !== 'undefined') { // replace controller this.controller = this.model.controller; } }; /** * @return {?} */ ComponentDataLangSelector.prototype.getLanguageFieldName = /** * @return {?} */ function () { return this.LANGUAGE_FIELD_NAME; }; /** * @return {?} */ ComponentDataLangSelector.prototype.getObjectIdFieldName = /** * @return {?} */ function () { return this.OBJECT_ID_FIELD_NAME; }; /** * @param {?} data * @return {?} */ ComponentDataLangSelector.prototype.getInstanceDefaultData = /** * @param {?} data * @return {?} */ function (data) { return data; }; /** * @param {?} data * @return {?} */ ComponentDataLangSelector.prototype.getInstanceDataLanguage = /** * @param {?} data * @return {?} */ function (data) { return data; }; /** * @param {?} data * @return {?} */ ComponentDataLangSelector.prototype.isDataLanguageDirty = /** * @param {?} data * @return {?} */ function (data) { return false; }; /** * @return {?} any as one object. */ ComponentDataLangSelector.prototype.getDefaultData = /** * @return {?} any as one object. */ function () { return this.data; }; /** * @return {?} */ ComponentDataLangSelector.prototype.getDataObjects = /** * @return {?} */ function () { return this.dataObjects; }; /** * @param {?} langCode * @return {?} */ ComponentDataLangSelector.prototype.parseLanguageButtonModel = /** * @param {?} langCode * @return {?} */ function (langCode) { var /** @type {?} */ upperCaseLang = (langCode !== null && typeof langCode !== 'undefined') ? langCode.toUpperCase() : 'N/A'; return new LanguageButtonModel('', langCode, upperCaseLang); }; /** * @param {?} data * @return {?} */ ComponentDataLangSelector.prototype.setData = /** * @param {?} data * @return {?} */ function (data) { _super.prototype.setData.call(this, data); this.dataObjects = []; this.dataObjects.push(data); }; /** * @return {?} */ ComponentDataLangSelector.prototype.getWidth = /** * @return {?} */ function () { return this.width; }; /** * @param {?} width * @return {?} */ ComponentDataLangSelector.prototype.setWidth = /** * @param {?} width * @return {?} */ function (width) { this.width = width; }; /** * @return {?} */ ComponentDataLangSelector.prototype.getHeight = /** * @return {?} */ function () { return this.height; }; /** * @param {?} height * @return {?} */ ComponentDataLangSelector.prototype.setHeight = /** * @param {?} height * @return {?} */ function (height) { this.height = height; }; ComponentDataLangSelector.TYPE_NAME = TYPE_NAME; ComponentDataLangSelector.decorators = [ { type: Component, args: [{ moduleId: module.id, selector: 'phx-component-lang-selector', template: "<div class=\"phx-component-lang-selector disabled-overlay\" [style.width]=\"getWidth()\" [style.height]=\"getHeight()\">\n\t<div class=\"wrapper left\" [class.expand]=\"!hasLanguage()\">\n\t\t<div class=\"component-pane\">\n\t\t\t<!-- default -->\n\t\t\t<div class=\"component-wrapper\" [class.show]=\"_isSelectedLanguageByIndex(null)\">\n\t\t\t\t<phx-component-wrapper *ngIf=\"hasModel()\" [type]=\"getModel().componentType\" [model]=\"getModel().componentModel\"\n\t\t\t\t\t[handler]=\"getDefaultComponentHandler()\" [data]=\"_getDefaultData()\" [dataParent]=\"this\"\n\t\t\t\t\t[options]=\"getModel().componentOptions\"></phx-component-wrapper>\n\t\t\t</div>\n\t\t\t<!-- by lang -->\n\t\t\t<ng-template ngFor let-item [ngForOf]=\"_getDataLangList()\" let-i=\"index\">\n\t\t\t\t<div class=\"component-wrapper\" [class.show]=\"_isSelectedLanguageByIndex(i)\">\n\t\t\t\t\t<phx-component-wrapper *ngIf=\"hasModel()\" [type]=\"getModel().componentType\" [model]=\"getModel().componentModel\"\n\t\t\t\t\t\t[handler]=\"getComponentHandler()\" [setting]=\"getComponentSetting(i)\" [data]=\"item\" [dataParent]=\"this\"\n\t\t\t\t\t\t[options]=\"getModel().componentOptions\"></phx-component-wrapper>\n\t\t\t\t</div>\n\t\t\t</ng-template>\n\t\t</div>\n\t</div>\n\t<div class=\"wrapper right\" [class.hide]=\"!hasLanguage()\">\n\t\t<div class=\"lang-pane\">\n\t\t\t<div class=\"language-btn default data\" [class.selected]=\"isSelectedLanguage(null)\" [class.dirty]=\"_isDataDirtyByIndex(null)\"\n\t\t\t\t(click)=\"onActionBtnClicked($event, null, null)\">\n\t\t\t\t<div class=\"table-wrapper fluid\">\n\t\t\t\t\t<div class=\"table-cell-wrapper middle\">\n\t\t\t\t\t\tDefault\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div *ngFor=\"let item of getMergedLanguageList(); let i = index\" class=\"language-btn\" [class.data]=\"_langHasDataByIndex(i)\"\n\t\t\t\t[class.dirty]=\"_isDataDirtyByIndex(i)\"\n\t\t\t\t[class.selected]=\"isSelectedLanguage(item)\" (click)=\"onActionBtnClicked($event, item, i)\">\n\t\t\t\t<div class=\"table-wrapper fluid\">\n\t\t\t\t\t<div class=\"table-cell-wrapper middle\">\n\t\t\t\t\t\t<div *ngIf=\"!_hasButtonIcon(item)\">{{item.label}}</div>\n\t\t\t\t\t\t<div *ngIf=\"_hasButtonIcon(item)\">\n\t\t\t\t\t\t\t<img src=\"{{item.iconURL}}\">\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div class=\"mocking-btn\"></div>\n\t\t</div>\n\t</div>\n</div>\n" },] }, ]; /** @nocollapse */ ComponentDataLangSelector.ctorParameters = function () { return [ { type: ElementRef, }, { type: DialogService, }, ]; }; ComponentDataLangSelector.propDecorators = { "model": [{ type: Input },], "controller": [{ type: Input },], "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 },], "help": [{ type: Input },], "width": [{ type: Input },], "height": [{ type: Input },], "loadEvent": [{ type: Output, args: ['phxLoad',] },], "langClickEvent": [{ type: Output, args: ['phxLangClick',] },], "langAddEvent": [{ type: Output, args: ['phxLangAdd',] },], "langRemoveEvent": [{ type: Output, args: ['phxLangRemove',] },], }; tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", ComponentDataLangSelectorModel) ], ComponentDataLangSelector.prototype, "model", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Object) ], ComponentDataLangSelector.prototype, "controller", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Object) ], ComponentDataLangSelector.prototype, "dataParent", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], ComponentDataLangSelector.prototype, "ignoreParentData", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Object) ], ComponentDataLangSelector.prototype, "data", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], ComponentDataLangSelector.prototype, "ignoreParentDisabled", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], ComponentDataLangSelector.prototype, "delegateHistory", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Function) ], ComponentDataLangSelector.prototype, "onDisabled", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Function) ], ComponentDataLangSelector.prototype, "onEnabled", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], ComponentDataLangSelector.prototype, "loadingEnabled", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", String) ], ComponentDataLangSelector.prototype, "i18nKey", void 0); tslib_1.__decorate([ Option('i18nBypass'), tslib_1.__metadata("design:type", Boolean) ], ComponentDataLangSelector.prototype, "bypass", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], ComponentDataLangSelector.prototype, "disabled", void 0); tslib_1.__decorate([ I18N(), Option(), tslib_1.__metadata("design:type", Object) ], ComponentDataLangSelector.prototype, "help", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", String) ], ComponentDataLangSelector.prototype, "width", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", String) ], ComponentDataLangSelector.prototype, "height", void 0); tslib_1.__decorate([ Option('load'), tslib_1.__metadata("design:type", EventEmitter) ], ComponentDataLangSelector.prototype, "loadEvent", void 0); tslib_1.__decorate([ Option('langClick'), tslib_1.__metadata("design:type", EventEmitter) ], ComponentDataLangSelector.prototype, "langClickEvent", void 0); tslib_1.__decorate([ Option('langAdd'), tslib_1.__metadata("design:type", EventEmitter) ], ComponentDataLangSelector.prototype, "langAddEvent", void 0); tslib_1.__decorate([ Option('langRemove'), tslib_1.__metadata("design:type", EventEmitter) ], ComponentDataLangSelector.prototype, "langRemoveEvent", void 0); return ComponentDataLangSelector; }(AbstractComponentDataLangSelector)); export { ComponentDataLangSelector }; function ComponentDataLangSelector_tsickle_Closure_declarations() { /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */ ComponentDataLangSelector.decorators; /** * @nocollapse * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>} */ ComponentDataLangSelector.ctorParameters; /** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */ ComponentDataLangSelector.propDecorators; /** @type {?} */ ComponentDataLangSelector.TYPE_NAME; /** @type {?} */ ComponentDataLangSelector.prototype.LANGUAGE_FIELD_NAME; /** @type {?} */ ComponentDataLangSelector.prototype.OBJECT_ID_FIELD_NAME; /** @type {?} */ ComponentDataLangSelector.prototype.dataObjects; /** @type {?} */ ComponentDataLangSelector.prototype.model; /** @type {?} */ ComponentDataLangSelector.prototype.controller; /** @type {?} */ ComponentDataLangSelector.prototype.dataParent; /** @type {?} */ ComponentDataLangSelector.prototype.ignoreParentData; /** @type {?} */ ComponentDataLangSelector.prototype.data; /** @type {?} */ ComponentDataLangSelector.prototype.ignoreParentDisabled; /** @type {?} */ ComponentDataLangSelector.prototype.delegateHistory; /** @type {?} */ ComponentDataLangSelector.prototype.onDisabled; /** @type {?} */ ComponentDataLangSelector.prototype.onEnabled; /** @type {?} */ ComponentDataLangSelector.prototype.loadingEnabled; /** @type {?} */ ComponentDataLangSelector.prototype.i18nKey; /** @type {?} */ ComponentDataLangSelector.prototype.bypass; /** @type {?} */ ComponentDataLangSelector.prototype.options; /** @type {?} */ ComponentDataLangSelector.prototype.disabled; /** @type {?} */ ComponentDataLangSelector.prototype.help; /** @type {?} */ ComponentDataLangSelector.prototype.width; /** @type {?} */ ComponentDataLangSelector.prototype.height; /** @type {?} */ ComponentDataLangSelector.prototype.loadEvent; /** @type {?} */ ComponentDataLangSelector.prototype.langClickEvent; /** @type {?} */ ComponentDataLangSelector.prototype.langAddEvent; /** @type {?} */ ComponentDataLangSelector.prototype.langRemoveEvent; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tcG9uZW50RGF0YUxhbmdTZWxlY3Rvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9jb20ucGhsb3h1aS8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnQvQ29tcG9uZW50RGF0YUxhbmdTZWxlY3Rvci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLFVBQVUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUEyQixZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEgsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUMvRCxPQUFPLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUd4RixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDdkQsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRW5ELE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ3hGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBSWxFLHFCQUFNLFNBQVMsR0FBVyw2QkFBNkIsQ0FBQzs7SUFvRFQscURBQWlDO0lBaUY5RSxtQ0FBWSxVQUFzQixFQUFFLGFBQTRCO1FBQWhFLFlBQ0Usa0JBQU0sVUFBVSxFQUFFLGFBQWEsQ0FBQyxTQUdqQztvQ0FqRnFDLFlBQVksQ0FBQywyQkFBMkI7cUNBQ3ZDLFlBQVksQ0FBQyw0QkFBNEI7UUErRTlFLEtBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDOztLQUN2Qjs7OztJQUVNLDRDQUFROzs7OztRQUViLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxJQUFJLE9BQU8sSUFBSSxDQUFDLEtBQUssS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDOztZQUU3RCxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLEtBQUssSUFBSSxJQUFJLE9BQU8sSUFBSSxDQUFDLFVBQVUsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3pFLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUM7YUFDekM7U0FDRjtRQUVELGlCQUFNLFFBQVEsV0FBRSxDQUFDOzs7OztJQUdaLDRDQUFROzs7O1FBQ2IsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLElBQUksT0FBTyxJQUFJLENBQUMsS0FBSyxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUM7WUFDN0QsTUFBTSxDQUFDLElBQUksQ0FBQztTQUNiO1FBQ0QsTUFBTSxDQUFDLEtBQUssQ0FBQzs7Ozs7SUFHUiw0Q0FBUTs7OztRQUNiLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDOzs7Ozs7SUFHYiw0Q0FBUTs7OztjQUFDLEtBQVU7UUFDeEIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFFbkIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLElBQUksT0FBTyxJQUFJLENBQUMsS0FBSyxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUM7O1lBRTdELElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUM7U0FDekM7Ozs7O0lBR0ksd0RBQW9COzs7O1FBQ3pCLE1BQU0sQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUM7Ozs7O0lBRzNCLHdEQUFvQjs7OztRQUN6QixNQUFNLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDOzs7Ozs7SUFHNUIsMERBQXNCOzs7O2NBQUMsSUFBUztRQUNyQyxNQUFNLENBQUMsSUFBSSxDQUFDOzs7Ozs7SUFHUCwyREFBdUI7Ozs7Y0FBQyxJQUFTO1FBQ3RDLE1BQU0sQ0FBQyxJQUFJLENBQUM7Ozs7OztJQUdQLHVEQUFtQjs7OztjQUFDLElBQVM7UUFDbEMsTUFBTSxDQUFDLEtBQUssQ0FBQzs7Ozs7SUFPUixrREFBYzs7OztRQUNuQixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQzs7Ozs7SUFHWixrREFBYzs7OztRQUNuQixNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQzs7Ozs7O0lBR25CLDREQUF3Qjs7OztjQUFDLFFBQWdCO1FBQzlDLHFCQUFJLGFBQWEsR0FBRyxDQUFDLFFBQVEsS0FBSyxJQUFJLElBQUksT0FBTyxRQUFRLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQzVHLE1BQU0sQ0FBQyxJQUFJLG1CQUFtQixDQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUUsYUFBYSxDQUFDLENBQUM7Ozs7OztJQUd2RCwyQ0FBTzs7OztjQUFDLElBQVM7UUFDdEIsaUJBQU0sT0FBTyxZQUFDLElBQUksQ0FBQyxDQUFDO1FBRXBCLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDOzs7OztJQUd2Qiw0Q0FBUTs7OztRQUNiLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDOzs7Ozs7SUFHYiw0Q0FBUTs7OztjQUFDLEtBQWE7UUFDM0IsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7Ozs7O0lBR2QsNkNBQVM7Ozs7UUFDZCxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQzs7Ozs7O0lBR2QsNkNBQVM7Ozs7Y0FBQyxNQUFjO1FBQzdCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDOzswQ0E5S29CLFNBQVM7O2dCQXBEckQsU0FBUyxTQUFDO29CQUNULFFBQVEsRUFBRSxNQUFNLENBQUMsRUFBRTtvQkFDbkIsUUFBUSxFQUFFLDZCQUE2QjtvQkFDdkMsUUFBUSxFQUFFLDgyRUE2Q1g7aUJBQ0E7Ozs7Z0JBakUyQixVQUFVO2dCQUM3QixhQUFhOzs7MEJBNEVuQixLQUFLOytCQUdMLEtBQUs7K0JBR0wsS0FBSztxQ0FHTCxLQUFLO3lCQUdMLEtBQUs7eUNBR0wsS0FBSztvQ0FHTCxLQUFLOytCQUdMLEtBQUs7OEJBR0wsS0FBSzttQ0FHTCxLQUFLOzRCQUdMLEtBQUs7MkJBR0wsS0FBSyxTQUFDLFlBQVk7NEJBR2xCLEtBQUs7NkJBRUwsS0FBSzt5QkFJTCxLQUFLOzBCQUtMLEtBQUs7MkJBR0wsS0FBSzs4QkFNTCxNQUFNLFNBQUMsU0FBUzttQ0FJaEIsTUFBTSxTQUFDLGNBQWM7aUNBR3JCLE1BQU0sU0FBQyxZQUFZO29DQUduQixNQUFNLFNBQUMsZUFBZTs7O1FBakV0QixNQUFNLEVBQUU7MENBQ1EsOEJBQThCOzs7UUFFOUMsTUFBTSxFQUFFOzs7O1FBR1IsTUFBTSxFQUFFOzs7O1FBR1IsTUFBTSxFQUFFOzs7O1FBR1IsTUFBTSxFQUFFOzs7O1FBR1IsTUFBTSxFQUFFOzs7O1FBR1IsTUFBTSxFQUFFOzs7O1FBR1IsTUFBTSxFQUFFOzBDQUNhLFFBQVE7OztRQUU3QixNQUFNLEVBQUU7MENBQ1ksUUFBUTs7O1FBRTVCLE1BQU0sRUFBRTs7OztRQUdSLE1BQU0sRUFBRTs7OztRQUdSLE1BQU0sQ0FBQyxZQUFZLENBQUM7Ozs7UUFLcEIsTUFBTSxFQUFFOzs7O1FBSVIsSUFBSSxFQUFFO1FBQ04sTUFBTSxFQUFFOzs7O1FBSVIsTUFBTSxFQUFFOzs7O1FBR1IsTUFBTSxFQUFFOzs7O1FBTVIsTUFBTSxDQUFDLE1BQU0sQ0FBQzswQ0FDTSxZQUFZOzs7UUFHaEMsTUFBTSxDQUFDLFdBQVcsQ0FBQzswQ0FDTSxZQUFZOzs7UUFFckMsTUFBTSxDQUFDLFNBQVMsQ0FBQzswQ0FDTSxZQUFZOzs7UUFFbkMsTUFBTSxDQUFDLFlBQVksQ0FBQzswQ0FDTSxZQUFZOztvQ0FqSnpDO0VBa0UrQyxpQ0FBaUM7U0FBbkUseUJBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIEVsZW1lbnRSZWYsIElucHV0LCBPdXRwdXQsIEhvc3RMaXN0ZW5lciwgVmlld0NoaWxkLCBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlL0RpYWxvZ1NlcnZpY2Uuc2VydmljZSc7XG5pbXBvcnQgeyBQaGxveEFwcEluZm8gfSBmcm9tICcuLi9jb21wb25lbnQvbW9kZWwvUGhsb3hBcHBJbmZvJztcbmltcG9ydCB7IEFic3RyYWN0Q29tcG9uZW50RGF0YUxhbmdTZWxlY3RvciB9IGZyb20gJy4vQWJzdHJhY3RDb21wb25lbnREYXRhTGFuZ1NlbGVjdG9yJztcbmltcG9ydCB7IElIYXNNb2RlbCB9IGZyb20gJy4vSUhhc01vZGVsJztcbmltcG9ydCB7IElIYXNEYXRhIH0gZnJvbSAnLi9JSGFzRGF0YSc7XG5pbXBvcnQgeyBPcHRpb24gfSBmcm9tICcuLi9kZWNvcmF0b3IvT3B0aW9uLmRlY29yYXRvcic7XG5pbXBvcnQgeyBJMThOIH0gZnJvbSAnLi4vZGVjb3JhdG9yL0kxOE4uZGVjb3JhdG9yJztcbmltcG9ydCB7IElEYXRhTGFuZ1NlbGVjdG9yQ29udHJvbGxlciB9IGZyb20gJy4vSURhdGFMYW5nU2VsZWN0b3JDb250cm9sbGVyJztcbmltcG9ydCB7IENvbXBvbmVudERhdGFMYW5nU2VsZWN0b3JNb2RlbCB9IGZyb20gJy4vbW9kZWwvQ29tcG9uZW50RGF0YUxhbmdTZWxlY3Rvck1vZGVsJztcbmltcG9ydCB7IExhbmd1YWdlQnV0dG9uTW9kZWwgfSBmcm9tICcuL21vZGVsL0xhbmd1YWdlQnV0dG9uTW9kZWwnO1xuXG5kZWNsYXJlIHZhciAkOiBhbnk7XG5cbmNvbnN0IFRZUEVfTkFNRTogc3RyaW5nID0gXCJwaHgtY29tcG9uZW50LWxhbmctc2VsZWN0b3JcIjtcblxuQENvbXBvbmVudCh7XG4gIG1vZHVsZUlkOiBtb2R1bGUuaWQsXG4gIHNlbGVjdG9yOiAncGh4LWNvbXBvbmVudC1sYW5nLXNlbGVjdG9yJyxcbiAgdGVtcGxhdGU6IGA8ZGl2IGNsYXNzPVwicGh4LWNvbXBvbmVudC1sYW5nLXNlbGVjdG9yIGRpc2FibGVkLW92ZXJsYXlcIiBbc3R5bGUud2lkdGhdPVwiZ2V0V2lkdGgoKVwiIFtzdHlsZS5oZWlnaHRdPVwiZ2V0SGVpZ2h0KClcIj5cblx0PGRpdiBjbGFzcz1cIndyYXBwZXIgbGVmdFwiIFtjbGFzcy5leHBhbmRdPVwiIWhhc0xhbmd1YWdlKClcIj5cblx0XHQ8ZGl2IGNsYXNzPVwiY29tcG9uZW50LXBhbmVcIj5cblx0XHRcdDwhLS0gZGVmYXVsdCAtLT5cblx0XHRcdDxkaXYgY2xhc3M9XCJjb21wb25lbnQtd3JhcHBlclwiIFtjbGFzcy5zaG93XT1cIl9pc1NlbGVjdGVkTGFuZ3VhZ2VCeUluZGV4KG51bGwpXCI+XG5cdFx0XHRcdDxwaHgtY29tcG9uZW50LXdyYXBwZXIgKm5nSWY9XCJoYXNNb2RlbCgpXCIgW3R5cGVdPVwiZ2V0TW9kZWwoKS5jb21wb25lbnRUeXBlXCIgW21vZGVsXT1cImdldE1vZGVsKCkuY29tcG9uZW50TW9kZWxcIlxuXHRcdFx0XHRcdFtoYW5kbGVyXT1cImdldERlZmF1bHRDb21wb25lbnRIYW5kbGVyKClcIiBbZGF0YV09XCJfZ2V0RGVmYXVsdERhdGEoKVwiIFtkYXRhUGFyZW50XT1cInRoaXNcIlxuXHRcdFx0XHRcdFtvcHRpb25zXT1cImdldE1vZGVsKCkuY29tcG9uZW50T3B0aW9uc1wiPjwvcGh4LWNvbXBvbmVudC13cmFwcGVyPlxuXHRcdFx0PC9kaXY+XG5cdFx0XHQ8IS0tIGJ5IGxhbmcgLS0+XG5cdFx0XHQ8bmctdGVtcGxhdGUgbmdGb3IgbGV0LWl0ZW0gW25nRm9yT2ZdPVwiX2dldERhdGFMYW5nTGlzdCgpXCIgbGV0LWk9XCJpbmRleFwiPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzPVwiY29tcG9uZW50LXdyYXBwZXJcIiBbY2xhc3Muc2hvd109XCJfaXNTZWxlY3RlZExhbmd1YWdlQnlJbmRleChpKVwiPlxuXHRcdFx0XHRcdDxwaHgtY29tcG9uZW50LXdyYXBwZXIgKm5nSWY9XCJoYXNNb2RlbCgpXCIgW3R5cGVdPVwiZ2V0TW9kZWwoKS5jb21wb25lbnRUeXBlXCIgW21vZGVsXT1cImdldE1vZGVsKCkuY29tcG9uZW50TW9kZWxcIlxuXHRcdFx0XHRcdFx0W2hhbmRsZXJdPVwiZ2V0Q29tcG9uZW50SGFuZGxlcigpXCIgW3NldHRpbmddPVwiZ2V0Q29tcG9uZW50U2V0dGluZyhpKVwiIFtkYXRhXT1cIml0ZW1cIiBbZGF0YVBhcmVudF09XCJ0aGlzXCJcblx0XHRcdFx0XHRcdFtvcHRpb25zXT1cImdldE1vZGVsKCkuY29tcG9uZW50T3B0aW9uc1wiPjwvcGh4LWNvbXBvbmVudC13cmFwcGVyPlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdDwvbmctdGVtcGxhdGU+XG5cdFx0PC9kaXY+XG5cdDwvZGl2PlxuXHQ8ZGl2IGNsYXNzPVwid3JhcHBlciByaWdodFwiIFtjbGFzcy5oaWRlXT1cIiFoYXNMYW5ndWFnZSgpXCI+XG5cdFx0PGRpdiBjbGFzcz1cImxhbmctcGFuZVwiPlxuXHRcdFx0PGRpdiBjbGFzcz1cImxhbmd1YWdlLWJ0biBkZWZhdWx0IGRhdGFcIiBbY2xhc3Muc2VsZWN0ZWRdPVwiaXNTZWxlY3RlZExhbmd1YWdlKG51bGwpXCIgW2NsYXNzLmRpcnR5XT1cIl9pc0RhdGFEaXJ0eUJ5SW5kZXgobnVsbClcIlxuXHRcdFx0XHQoY2xpY2spPVwib25BY3Rpb25CdG5DbGlja2VkKCRldmVudCwgbnVsbCwgbnVsbClcIj5cblx0XHRcdFx0PGRpdiBjbGFzcz1cInRhYmxlLXdyYXBwZXIgZmx1aWRcIj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwidGFibGUtY2VsbC13cmFwcGVyIG1pZGRsZVwiPlxuXHRcdFx0XHRcdFx0RGVmYXVsdFxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdDwvZGl2PlxuXHRcdFx0PGRpdiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBnZXRNZXJnZWRMYW5ndWFnZUxpc3QoKTsgbGV0IGkgPSBpbmRleFwiIGNsYXNzPVwibGFuZ3VhZ2UtYnRuXCIgW2NsYXNzLmRhdGFdPVwiX2xhbmdIYXNEYXRhQnlJbmRleChpKVwiXG5cdFx0XHRcdFtjbGFzcy5kaXJ0eV09XCJfaXNEYXRhRGlydHlCeUluZGV4KGkpXCJcblx0XHRcdFx0W2NsYXNzLnNlbGVjdGVkXT1cImlzU2VsZWN0ZWRMYW5ndWFnZShpdGVtKVwiIChjbGljayk9XCJvbkFjdGlvbkJ0bkNsaWNrZWQoJGV2ZW50LCBpdGVtLCBpKVwiPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzPVwidGFibGUtd3JhcHBlciBmbHVpZFwiPlxuXHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJ0YWJsZS1jZWxsLXdyYXBwZXIgbWlkZGxlXCI+XG5cdFx0XHRcdFx0XHQ8ZGl2ICpuZ0lmPVwiIV9oYXNCdXR0b25JY29uKGl0ZW0pXCI+e3tpdGVtLmxhYmVsfX08L2Rpdj5cblx0XHRcdFx0XHRcdDxkaXYgKm5nSWY9XCJfaGFzQnV0dG9uSWNvbihpdGVtKVwiPlxuXHRcdFx0XHRcdFx0XHQ8aW1nIHNyYz1cInt7aXRlbS5pY29uVVJMfX1cIj5cblx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdDwvZGl2PlxuXHRcdFx0PGRpdiBjbGFzcz1cIm1vY2tpbmctYnRuXCI+PC9kaXY+XG5cdFx0PC9kaXY+XG5cdDwvZGl2PlxuPC9kaXY+XG5gXG59KVxuZXhwb3J0IGNsYXNzIENvbXBvbmVudERhdGFMYW5nU2VsZWN0b3IgZXh0ZW5kcyBBYnN0cmFjdENvbXBvbmVudERhdGFMYW5nU2VsZWN0b3IgaW1wbGVtZW50cyBPbkluaXQsIElIYXNNb2RlbCB7XG5cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBUWVBFX05BTUU6IHN0cmluZyA9IFRZUEVfTkFNRTtcblxuICBwcml2YXRlIExBTkdVQUdFX0ZJRUxEX05BTUU6IHN0cmluZyA9IFBobG94QXBwSW5mby5ERUZBVUxUX0xBTkdVQUdFX0ZJRUxEX05BTUU7XG4gIHByaXZhdGUgT0JKRUNUX0lEX0ZJRUxEX05BTUU6IHN0cmluZyA9IFBobG94QXBwSW5mby5ERUZBVUxUX09CSkVDVF9JRF9GSUVMRF9OQU1FO1xuXG4gIHByb3RlY3RlZCBkYXRhT2JqZWN0czogYW55W107XG5cbiAgLy8gUmUtZGVjbGFyZSBmaWVsZCB0byBkZWNsYXJlIG5nIEBJbnB1dC5cbiAgLy8gLS0tIGZyb20gQWJzdHJhY3RIYXNEYXRhXG4gIEBJbnB1dCgpXG4gIEBPcHRpb24oKVxuICBwcm90ZWN0ZWQgbW9kZWw6IENvbXBvbmVudERhdGFMYW5nU2VsZWN0b3JNb2RlbDtcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByb3RlY3RlZCBjb250cm9sbGVyOiBJRGF0YUxhbmdTZWxlY3RvckNvbnRyb2xsZXI7XG4gIEBJbnB1dCgpXG4gIEBPcHRpb24oKVxuICBwcm90ZWN0ZWQgZGF0YVBhcmVudDogSUhhc0RhdGE7XG4gIEBJbnB1dCgpXG4gIEBPcHRpb24oKVxuICBwcm90ZWN0ZWQgaWdub3JlUGFyZW50RGF0YTogYm9vbGVhbjtcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByb3RlY3RlZCBkYXRhOiBhbnk7XG4gIEBJbnB1dCgpXG4gIEBPcHRpb24oKVxuICBwcm90ZWN0ZWQgaWdub3JlUGFyZW50RGlzYWJsZWQ6IGJvb2xlYW47XG4gIEBJbnB1dCgpXG4gIEBPcHRpb24oKVxuICBwcm90ZWN0ZWQgZGVsZWdhdGVIaXN0b3J5OiBib29sZWFuO1xuICBASW5wdXQoKVxuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIG9uRGlzYWJsZWQ6IEZ1bmN0aW9uO1xuICBASW5wdXQoKVxuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIG9uRW5hYmxlZDogRnVuY3Rpb247XG4gIEBJbnB1dCgpXG4gIEBPcHRpb24oKVxuICBwcm90ZWN0ZWQgbG9hZGluZ0VuYWJsZWQ6IGJvb2xlYW47XG4gIEBJbnB1dCgpXG4gIEBPcHRpb24oKVxuICBwcm90ZWN0ZWQgaTE4bktleTogc3RyaW5nO1xuICBASW5wdXQoJ2kxOG5CeXBhc3MnKVxuICBAT3B0aW9uKCdpMThuQnlwYXNzJylcbiAgcHJvdGVjdGVkIGJ5cGFzczogYm9vbGVhbjtcbiAgQElucHV0KClcbiAgcHJvdGVjdGVkIG9wdGlvbnM6IGFueTtcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByb3RlY3RlZCBkaXNhYmxlZDogYm9vbGVhbjtcbiAgLy8gLS0tIGZyb20gQWJzdHJhY3RIYXNEYXRhSGVscFxuICBASW5wdXQoKVxuICBASTE4TigpXG4gIEBPcHRpb24oKVxuICBwcm90ZWN0ZWQgaGVscDogYW55O1xuICAvLyAtLS0gc2VsZlxuICBASW5wdXQoKVxuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIHdpZHRoOiBzdHJpbmc7XG4gIEBJbnB1dCgpXG4gIEBPcHRpb24oKVxuICBwcm90ZWN0ZWQgaGVpZ2h0OiBzdHJpbmc7XG5cbiAgLy8gUmUtZGVjbGFyZSBmaWVsZCB0byBkZWNsYXJlIG5nIEBPdXRwdXQuXG4gIC8vIC0tLSBmcm9tIEFic3RyYWN0SGFzRGF0YVxuICBAT3V0cHV0KCdwaHhMb2FkJylcbiAgQE9wdGlvbignbG9hZCcpXG4gIHByb3RlY3RlZCBsb2FkRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICAvLyAtLS0gZnJvbSBBYnN0cmFjdERhdGFMYW5nU2VsZWN0b3JcbiAgQE91dHB1dCgncGh4TGFuZ0NsaWNrJylcbiAgQE9wdGlvbignbGFuZ0NsaWNrJylcbiAgcHJvdGVjdGVkIGxhbmdDbGlja0V2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgQE91dHB1dCgncGh4TGFuZ0FkZCcpXG4gIEBPcHRpb24oJ2xhbmdBZGQnKVxuICBwcm90ZWN0ZWQgbGFuZ0FkZEV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgQE91dHB1dCgncGh4TGFuZ1JlbW92ZScpXG4gIEBPcHRpb24oJ2xhbmdSZW1vdmUnKVxuICBwcm90ZWN0ZWQgbGFuZ1JlbW92ZUV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcblxuICBjb25zdHJ1Y3RvcihlbGVtZW50UmVmOiBFbGVtZW50UmVmLCBkaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlKSB7XG4gICAgc3VwZXIoZWxlbWVudFJlZiwgZGlhbG9nU2VydmljZSk7XG5cbiAgICB0aGlzLmRhdGFPYmplY3RzID0gW107XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgLy8gV2UndmUgdG8gcmVzb2x2ZSBjb250cm9sbGVyIGZyb20gbW9kZWwgYmVmb3JlIGNhbGxpbmcgc3VwZXIubmdPbkluaXQoKS5cbiAgICBpZiAodGhpcy5tb2RlbCAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5tb2RlbCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIC8vIE9ubHkgY29udHJvbGxlciBpcyBudWxsIG9yIHVuZGVmaW5lZCBpbiB3aGljaCB0aGF0IHdlJ2xsIHVzZSB2YWx1ZSBmcm9tIG1vZGVsLlxuICAgICAgaWYgKCh0aGlzLmNvbnRyb2xsZXIgPT09IG51bGwgfHwgdHlwZW9mIHRoaXMuY29udHJvbGxlciA9PT0gJ3VuZGVmaW5lZCcpKSB7XG4gICAgICAgIHRoaXMuY29udHJvbGxlciA9IHRoaXMubW9kZWwuY29udHJvbGxlcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzdXBlci5uZ09uSW5pdCgpO1xuICB9XG5cbiAgcHVibGljIGhhc01vZGVsKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLm1vZGVsICE9PSBudWxsICYmIHR5cGVvZiB0aGlzLm1vZGVsICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRNb2RlbCgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG5cbiAgcHVibGljIHNldE1vZGVsKG1vZGVsOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm1vZGVsID0gbW9kZWw7XG5cbiAgICBpZiAodGhpcy5tb2RlbCAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5tb2RlbCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIC8vIHJlcGxhY2UgY29udHJvbGxlclxuICAgICAgdGhpcy5jb250cm9sbGVyID0gdGhpcy5tb2RlbC5jb250cm9sbGVyO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRMYW5ndWFnZUZpZWxkTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLkxBTkdVQUdFX0ZJRUxEX05BTUU7XG4gIH1cblxuICBwdWJsaWMgZ2V0T2JqZWN0SWRGaWVsZE5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5PQkpFQ1RfSURfRklFTERfTkFNRTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRJbnN0YW5jZURlZmF1bHREYXRhKGRhdGE6IGFueSk6IGFueSB7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBwdWJsaWMgZ2V0SW5zdGFuY2VEYXRhTGFuZ3VhZ2UoZGF0YTogYW55KTogYW55IHtcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIHB1YmxpYyBpc0RhdGFMYW5ndWFnZURpcnR5KGRhdGE6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gZGF0YSBhcyBhbnlcbiAgICogQHJldHVybiBhbnkgYXMgb25lIG9iamVjdC5cbiAgICovXG4gIHB1YmxpYyBnZXREZWZhdWx0RGF0YSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmRhdGE7XG4gIH1cblxuICBwdWJsaWMgZ2V0RGF0YU9iamVjdHMoKTogYW55W10ge1xuICAgIHJldHVybiB0aGlzLmRhdGFPYmplY3RzO1xuICB9XG5cbiAgcHVibGljIHBhcnNlTGFuZ3VhZ2VCdXR0b25Nb2RlbChsYW5nQ29kZTogc3RyaW5nKTogTGFuZ3VhZ2VCdXR0b25Nb2RlbCB7XG4gICAgbGV0IHVwcGVyQ2FzZUxhbmcgPSAobGFuZ0NvZGUgIT09IG51bGwgJiYgdHlwZW9mIGxhbmdDb2RlICE9PSAndW5kZWZpbmVkJykgPyBsYW5nQ29kZS50b1VwcGVyQ2FzZSgpIDogJ04vQSc7XG4gICAgcmV0dXJuIG5ldyBMYW5ndWFnZUJ1dHRvbk1vZGVsKCcnLCBsYW5nQ29kZSwgdXBwZXJDYXNlTGFuZyk7XG4gIH1cblxuICBwdWJsaWMgc2V0RGF0YShkYXRhOiBhbnkpOiB2b2lkIHtcbiAgICBzdXBlci5zZXREYXRhKGRhdGEpO1xuXG4gICAgdGhpcy5kYXRhT2JqZWN0cyA9IFtdO1xuICAgIHRoaXMuZGF0YU9iamVjdHMucHVzaChkYXRhKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRXaWR0aCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLndpZHRoO1xuICB9XG5cbiAgcHVibGljIHNldFdpZHRoKHdpZHRoOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLndpZHRoID0gd2lkdGg7XG4gIH1cblxuICBwdWJsaWMgZ2V0SGVpZ2h0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaGVpZ2h0O1xuICB9XG5cbiAgcHVibGljIHNldEhlaWdodChoZWlnaHQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xuICB9XG59XG4iXX0=