UNPKG

com.phloxui

Version:

PhloxUI Ng2+ Framework

520 lines (519 loc) 37.7 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ import * as tslib_1 from "tslib"; import { EventEmitter } from '@angular/core'; import { ACTIVATE_EVENT, DEACTIVATE_EVENT, ENABLE_EVENT, DISABLE_EVENT } from '../share/CustomEventType'; import { AbstractHasOptions } from '../share/AbstractHasOptions'; import { Option } from '../decorator/Option.decorator'; import { EventUtils } from '../share/utils/EventUtils'; // unsupported: template constraints. /** * @abstract * @template T */ var AbstractAccordion = /** @class */ (function (_super) { tslib_1.__extends(AbstractAccordion, _super); function AbstractAccordion(elementRef) { var _this = _super.call(this) || this; _this.elementRef = elementRef; _this.itemStatus = []; _this.fixedHeight = true; _this.autoInit = false; _this.multipleExpand = true; _this.activateEvent = new EventEmitter(); _this.deactivateEvent = new EventEmitter(); _this.enableEvent = new EventEmitter(); _this.disableEvent = new EventEmitter(); return _this; } /** * @return {?} */ AbstractAccordion.prototype.ngOnInit = /** * @return {?} */ function () { this.setAccordionItems(this.items); if (this.autoInit !== null && typeof this.autoInit !== 'undefined') { if (this.autoInit) { this.init(); } } }; /** * @param {?} item * @return {?} */ AbstractAccordion.prototype.generateItemStatus = /** * @param {?} item * @return {?} */ function (item) { var /** @type {?} */ result = { active: false, enable: false }; if (item !== null && typeof item !== 'undefined') { result.active = item.active; result.enable = item.enable; } return result; }; /** * @param {?} index * @param {?=} exceptIndex * @return {?} */ AbstractAccordion.prototype.collapseItem = /** * @param {?} index * @param {?=} exceptIndex * @return {?} */ function (index, exceptIndex) { if (index !== null && typeof index !== 'undefined') { if (exceptIndex !== null && exceptIndex !== undefined) { if (index === exceptIndex) { return; } } var /** @type {?} */ item = this.getAccordionItem(index); if (item !== null) { if (item.active) { item.active = false; // update status var /** @type {?} */ status_1 = this.itemStatus[index]; status_1.active = false; } this.onAccordionDeactived(index, item); } } }; /** * @param {?} index * @return {?} */ AbstractAccordion.prototype.activate = /** * @param {?} index * @return {?} */ function (index) { if (this.items !== null && typeof this.items !== 'undefined') { var /** @type {?} */ item = this.getAccordionItem(index); if (item !== null) { if (!item.active) { item.active = true; // update status var /** @type {?} */ status_2 = this.itemStatus[index]; status_2.active = true; if (!this.multipleExpand) { this.collapseItemAllExceptIndex(index); } // emit event var /** @type {?} */ data = { item: item, index: index }; var /** @type {?} */ ev = EventUtils.newCustomEvent(ACTIVATE_EVENT, this, data, null); this.activateEvent.emit(ev); this.onAccordionActived(index, item); return true; } } } return false; }; /** * @param {?} index * @return {?} */ AbstractAccordion.prototype.deactivate = /** * @param {?} index * @return {?} */ function (index) { if (this.items !== null && typeof this.items !== 'undefined') { var /** @type {?} */ item = this.getAccordionItem(index); if (item !== null) { if (item.active) { item.active = false; // update status var /** @type {?} */ status_3 = this.itemStatus[index]; status_3.active = false; // emit event var /** @type {?} */ data = { item: item, index: index }; var /** @type {?} */ ev = EventUtils.newCustomEvent(DEACTIVATE_EVENT, this, data, null); this.deactivateEvent.emit(ev); this.onAccordionDeactived(index, item); return true; } } } return false; }; /** * @param {?} index * @return {?} */ AbstractAccordion.prototype.enable = /** * @param {?} index * @return {?} */ function (index) { if (this.items !== null && typeof this.items !== 'undefined') { var /** @type {?} */ item = this.getAccordionItem(index); if (item !== null) { if (!item.enable) { item.enable = true; // update status var /** @type {?} */ status_4 = this.itemStatus[index]; status_4.enable = true; // emit event var /** @type {?} */ data = { item: item, index: index }; var /** @type {?} */ ev = EventUtils.newCustomEvent(ENABLE_EVENT, this, data, null); this.enableEvent.emit(ev); this.onAccordionEnabled(index, item); return true; } } } return false; }; /** * @param {?} index * @return {?} */ AbstractAccordion.prototype.disable = /** * @param {?} index * @return {?} */ function (index) { if (this.items !== null && typeof this.items !== 'undefined') { var /** @type {?} */ item = this.getAccordionItem(index); if (item !== null) { if (item.enable) { // auto call deactivate this.deactivate(index); item.enable = false; // update status var /** @type {?} */ status_5 = this.itemStatus[index]; status_5.enable = false; // emit event var /** @type {?} */ data = { item: item, index: index }; var /** @type {?} */ ev = EventUtils.newCustomEvent(DISABLE_EVENT, this, data, null); this.disableEvent.emit(ev); this.onAccordionDisabled(index, item); return true; } } } return false; }; /** * @param {?} items * @return {?} */ AbstractAccordion.prototype.setAccordionItems = /** * @param {?} items * @return {?} */ function (items) { this.items = items; this.itemStatus = []; if (this.items !== null && typeof this.items !== 'undefined') { try { for (var _a = tslib_1.__values(this.items), _b = _a.next(); !_b.done; _b = _a.next()) { var item = _b.value; // change status if (!item.enable) { item.active = false; } var /** @type {?} */ wrapItem = this.generateItemStatus(item); this.itemStatus.push(wrapItem); } } catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { if (_b && !_b.done && (_c = _a.return)) _c.call(_a); } finally { if (e_1) throw e_1.error; } } } var e_1, _c; }; /** * @return {?} */ AbstractAccordion.prototype.getAccordionItems = /** * @return {?} */ function () { return this.items; }; /** * @param {?} index * @return {?} */ AbstractAccordion.prototype.getAccordionItem = /** * @param {?} index * @return {?} */ function (index) { if (this.items !== null && typeof this.items !== 'undefined') { if (index < this.items.length) { var /** @type {?} */ item = this.items[index]; return item; } } return null; }; /** * @param {?} index * @return {?} */ AbstractAccordion.prototype.isActive = /** * @param {?} index * @return {?} */ function (index) { if (index !== null && typeof index !== 'undefined') { if (index < this.items.length) { return this.items[index].active; } } return false; }; /** * @param {?} index * @return {?} */ AbstractAccordion.prototype.isEnable = /** * @param {?} index * @return {?} */ function (index) { if (index !== null && typeof index !== 'undefined') { if (index < this.items.length) { return this.items[index].enable; } } return false; }; /** * @param {?} item * @return {?} */ AbstractAccordion.prototype.getAccordionIndex = /** * @param {?} item * @return {?} */ function (item) { if (item !== null && item !== undefined) { var /** @type {?} */ items = this.getAccordionItems(); return items.indexOf(item); } return -1; }; /** * @param {?=} exceptIndex * @return {?} */ AbstractAccordion.prototype.collapseItemAllExceptIndex = /** * @param {?=} exceptIndex * @return {?} */ function (exceptIndex) { var /** @type {?} */ items = this.getAccordionItems(); if (items !== null && items !== undefined) { try { for (var _a = tslib_1.__values(this.items), _b = _a.next(); !_b.done; _b = _a.next()) { var item = _b.value; var /** @type {?} */ index = this.getAccordionIndex(item); this.collapseItem(index, exceptIndex); } } catch (e_2_1) { e_2 = { error: e_2_1 }; } finally { try { if (_b && !_b.done && (_c = _a.return)) _c.call(_a); } finally { if (e_2) throw e_2.error; } } } var e_2, _c; }; /** * @return {?} */ AbstractAccordion.prototype.isFixedHeight = /** * @return {?} */ function () { if (this.fixedHeight === null || typeof this.fixedHeight === 'undefined') { return false; } return this.fixedHeight; }; /** * @param {?} isFixed * @return {?} */ AbstractAccordion.prototype.setFixedHeight = /** * @param {?} isFixed * @return {?} */ function (isFixed) { this.fixedHeight = isFixed; }; /** * @return {?} */ AbstractAccordion.prototype.getActivateEvent = /** * @return {?} */ function () { return this.activateEvent; }; /** * @return {?} */ AbstractAccordion.prototype.getDeactivateEvent = /** * @return {?} */ function () { return this.deactivateEvent; }; /** * @return {?} */ AbstractAccordion.prototype.getEnableEvent = /** * @return {?} */ function () { return this.enableEvent; }; /** * @return {?} */ AbstractAccordion.prototype.getDisableEvent = /** * @return {?} */ function () { return this.disableEvent; }; /** * @param {?} isAutoInit * @return {?} */ AbstractAccordion.prototype.setAutoInit = /** * @param {?} isAutoInit * @return {?} */ function (isAutoInit) { this.autoInit = isAutoInit; }; /** * @return {?} */ AbstractAccordion.prototype.isAutoInit = /** * @return {?} */ function () { return this.autoInit; }; tslib_1.__decorate([ Option('activate'), tslib_1.__metadata("design:type", EventEmitter) ], AbstractAccordion.prototype, "activateEvent", void 0); tslib_1.__decorate([ Option('deactivate'), tslib_1.__metadata("design:type", EventEmitter) ], AbstractAccordion.prototype, "deactivateEvent", void 0); tslib_1.__decorate([ Option('enable'), tslib_1.__metadata("design:type", EventEmitter) ], AbstractAccordion.prototype, "enableEvent", void 0); tslib_1.__decorate([ Option('disable'), tslib_1.__metadata("design:type", EventEmitter) ], AbstractAccordion.prototype, "disableEvent", void 0); return AbstractAccordion; }(AbstractHasOptions)); export { AbstractAccordion }; function AbstractAccordion_tsickle_Closure_declarations() { /** @type {?} */ AbstractAccordion.prototype.itemStatus; /** @type {?} */ AbstractAccordion.prototype.items; /** @type {?} */ AbstractAccordion.prototype.fixedHeight; /** @type {?} */ AbstractAccordion.prototype.activateEvent; /** @type {?} */ AbstractAccordion.prototype.deactivateEvent; /** @type {?} */ AbstractAccordion.prototype.enableEvent; /** @type {?} */ AbstractAccordion.prototype.disableEvent; /** @type {?} */ AbstractAccordion.prototype.elementRef; /** @type {?} */ AbstractAccordion.prototype.autoInit; /** @type {?} */ AbstractAccordion.prototype.multipleExpand; /** * @abstract * @return {?} */ AbstractAccordion.prototype.init = function () { }; /** * @abstract * @param {?} index * @param {?} item * @return {?} */ AbstractAccordion.prototype.onAccordionActived = function (index, item) { }; /** * @abstract * @param {?} index * @param {?} item * @return {?} */ AbstractAccordion.prototype.onAccordionDeactived = function (index, item) { }; /** * @abstract * @param {?} index * @param {?} item * @return {?} */ AbstractAccordion.prototype.onAccordionEnabled = function (index, item) { }; /** * @abstract * @param {?} index * @param {?} item * @return {?} */ AbstractAccordion.prototype.onAccordionDisabled = function (index, item) { }; /** * @abstract * @return {?} */ AbstractAccordion.prototype.reload = function () { }; /** * @abstract * @return {?} */ AbstractAccordion.prototype.reRender = function () { }; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWJzdHJhY3RBY2NvcmRpb24uanMiLCJzb3VyY2VSb290Ijoibmc6Ly9jb20ucGhsb3h1aS8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnQvQWJzdHJhY3RBY2NvcmRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQVUsWUFBWSxFQUFjLE1BQU0sZUFBZSxDQUFDO0FBRWpFLE9BQU8sRUFBRSxjQUFjLEVBQUUsZ0JBQWdCLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7Ozs7Ozs7SUFFdUIsNkNBQWtCO0lBaUI5RiwyQkFBWSxVQUFzQjtRQUFsQyxZQUNFLGlCQUFPLFNBVVI7UUFUQyxLQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUM3QixLQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNyQixLQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUN4QixLQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztRQUN0QixLQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztRQUMzQixLQUFJLENBQUMsYUFBYSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDeEMsS0FBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzFDLEtBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUN0QyxLQUFJLENBQUMsWUFBWSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7O0tBQ3hDOzs7O0lBRU0sb0NBQVE7Ozs7UUFDYixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25DLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxJQUFJLE9BQU8sSUFBSSxDQUFDLFFBQVEsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDO1lBQ25FLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO2dCQUNsQixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7YUFDYjtTQUNGOzs7Ozs7SUFHSyw4Q0FBa0I7Ozs7Y0FBQyxJQUFPO1FBQ2hDLHFCQUFJLE1BQU0sR0FBRztZQUNYLE1BQU0sRUFBRSxLQUFLO1lBQ2IsTUFBTSxFQUFFLEtBQUs7U0FDZCxDQUFDO1FBRUYsRUFBRSxDQUFDLENBQUMsSUFBSSxLQUFLLElBQUksSUFBSSxPQUFPLElBQUksS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDO1lBQ2pELE1BQU0sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUM1QixNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7U0FDN0I7UUFFRCxNQUFNLENBQUMsTUFBTSxDQUFDOzs7Ozs7O0lBR1Isd0NBQVk7Ozs7O2NBQUMsS0FBYSxFQUFFLFdBQW9CO1FBQ3RELEVBQUUsQ0FBQyxDQUFDLEtBQUssS0FBSyxJQUFJLElBQUksT0FBTyxLQUFLLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQztZQUNuRCxFQUFFLENBQUMsQ0FBQyxXQUFXLEtBQUssSUFBSSxJQUFJLFdBQVcsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDO2dCQUN0RCxFQUFFLENBQUMsQ0FBQyxLQUFLLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQztvQkFDMUIsTUFBTSxDQUFDO2lCQUNSO2FBQ0Y7WUFFRCxxQkFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRXhDLEVBQUUsQ0FBQyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUNsQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztvQkFDaEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7O29CQUVwQixxQkFBSSxRQUFNLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDcEMsUUFBTSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7aUJBQ3ZCO2dCQUVELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7YUFDeEM7U0FDRjs7Ozs7O0lBR0ksb0NBQVE7Ozs7Y0FBQyxLQUFhO1FBQzNCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxJQUFJLE9BQU8sSUFBSSxDQUFDLEtBQUssS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDO1lBQzdELHFCQUFJLElBQUksR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDeEMsRUFBRSxDQUFDLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUM7Z0JBQ2xCLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7b0JBQ2pCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDOztvQkFFbkIscUJBQUksUUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ3BDLFFBQU0sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO29CQUVyQixFQUFFLENBQUEsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQSxDQUFDO3dCQUN2QixJQUFJLENBQUMsMEJBQTBCLENBQUMsS0FBSyxDQUFDLENBQUM7cUJBQ3hDOztvQkFHRCxxQkFBSSxJQUFJLEdBQVE7d0JBQ2QsSUFBSSxFQUFFLElBQUk7d0JBQ1YsS0FBSyxFQUFFLEtBQUs7cUJBQ2IsQ0FBQztvQkFDRixxQkFBSSxFQUFFLEdBQUcsVUFBVSxDQUFDLGNBQWMsQ0FBQyxjQUFjLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFFckUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQzVCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7b0JBRXJDLE1BQU0sQ0FBQyxJQUFJLENBQUM7aUJBQ2I7YUFDRjtTQUNGO1FBQ0QsTUFBTSxDQUFDLEtBQUssQ0FBQzs7Ozs7O0lBR1Isc0NBQVU7Ozs7Y0FBQyxLQUFhO1FBQzdCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxJQUFJLE9BQU8sSUFBSSxDQUFDLEtBQUssS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDO1lBQzdELHFCQUFJLElBQUksR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDeEMsRUFBRSxDQUFDLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUM7Z0JBQ2xCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO29CQUNoQixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQzs7b0JBRXBCLHFCQUFJLFFBQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUNwQyxRQUFNLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQzs7b0JBR3RCLHFCQUFJLElBQUksR0FBUTt3QkFDZCxJQUFJLEVBQUUsSUFBSTt3QkFDVixLQUFLLEVBQUUsS0FBSztxQkFDYixDQUFDO29CQUNGLHFCQUFJLEVBQUUsR0FBRyxVQUFVLENBQUMsY0FBYyxDQUFDLGdCQUFnQixFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7b0JBRXZFLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUM5QixJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO29CQUV2QyxNQUFNLENBQUMsSUFBSSxDQUFDO2lCQUNiO2FBQ0Y7U0FDRjtRQUNELE1BQU0sQ0FBQyxLQUFLLENBQUM7Ozs7OztJQUdSLGtDQUFNOzs7O2NBQUMsS0FBYTtRQUN6QixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksSUFBSSxPQUFPLElBQUksQ0FBQyxLQUFLLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQztZQUM3RCxxQkFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3hDLEVBQUUsQ0FBQyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUNsQixFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO29CQUNqQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQzs7b0JBRW5CLHFCQUFJLFFBQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUNwQyxRQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQzs7b0JBR3JCLHFCQUFJLElBQUksR0FBUTt3QkFDZCxJQUFJLEVBQUUsSUFBSTt3QkFDVixLQUFLLEVBQUUsS0FBSztxQkFDYixDQUFDO29CQUNGLHFCQUFJLEVBQUUsR0FBRyxVQUFVLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO29CQUVuRSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDMUIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFFckMsTUFBTSxDQUFDLElBQUksQ0FBQztpQkFDYjthQUNGO1NBQ0Y7UUFDRCxNQUFNLENBQUMsS0FBSyxDQUFDOzs7Ozs7SUFHUixtQ0FBTzs7OztjQUFDLEtBQWE7UUFDMUIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLElBQUksT0FBTyxJQUFJLENBQUMsS0FBSyxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUM7WUFDN0QscUJBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN4QyxFQUFFLENBQUMsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDbEIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7O29CQUVoQixJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUV2QixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQzs7b0JBRXBCLHFCQUFJLFFBQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUNwQyxRQUFNLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQzs7b0JBR3RCLHFCQUFJLElBQUksR0FBUTt3QkFDZCxJQUFJLEVBQUUsSUFBSTt3QkFDVixLQUFLLEVBQUUsS0FBSztxQkFDYixDQUFDO29CQUNGLHFCQUFJLEVBQUUsR0FBRyxVQUFVLENBQUMsY0FBYyxDQUFDLGFBQWEsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO29CQUVwRSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDM0IsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFFdEMsTUFBTSxDQUFDLElBQUksQ0FBQztpQkFDYjthQUNGO1NBQ0Y7UUFDRCxNQUFNLENBQUMsS0FBSyxDQUFDOzs7Ozs7SUFHUiw2Q0FBaUI7Ozs7Y0FBQyxLQUFVO1FBQ2pDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBRXJCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxJQUFJLE9BQU8sSUFBSSxDQUFDLEtBQUssS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDOztnQkFDN0QsR0FBRyxDQUFDLENBQWEsSUFBQSxLQUFBLGlCQUFBLElBQUksQ0FBQyxLQUFLLENBQUEsZ0JBQUE7b0JBQXRCLElBQUksSUFBSSxXQUFBOztvQkFFWCxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO3dCQUNqQixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztxQkFDckI7b0JBQ0QscUJBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDN0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7aUJBQ2hDOzs7Ozs7Ozs7U0FDRjs7Ozs7O0lBR0ksNkNBQWlCOzs7O1FBQ3RCLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDOzs7Ozs7SUFHYiw0Q0FBZ0I7Ozs7Y0FBQyxLQUFhO1FBQ25DLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxJQUFJLE9BQU8sSUFBSSxDQUFDLEtBQUssS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDO1lBQzdELEVBQUUsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7Z0JBQzlCLHFCQUFJLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUM3QixNQUFNLENBQUMsSUFBSSxDQUFDO2FBQ2I7U0FDRjtRQUNELE1BQU0sQ0FBQyxJQUFJLENBQUM7Ozs7OztJQUdQLG9DQUFROzs7O2NBQUMsS0FBYTtRQUMzQixFQUFFLENBQUMsQ0FBQyxLQUFLLEtBQUssSUFBSSxJQUFJLE9BQU8sS0FBSyxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUM7WUFDbkQsRUFBRSxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztnQkFDOUIsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDO2FBQ2pDO1NBQ0Y7UUFDRCxNQUFNLENBQUMsS0FBSyxDQUFDOzs7Ozs7SUFHUixvQ0FBUTs7OztjQUFDLEtBQWE7UUFDM0IsRUFBRSxDQUFDLENBQUMsS0FBSyxLQUFLLElBQUksSUFBSSxPQUFPLEtBQUssS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDO1lBQ25ELEVBQUUsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7Z0JBQzlCLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQzthQUNqQztTQUNGO1FBQ0QsTUFBTSxDQUFDLEtBQUssQ0FBQzs7Ozs7O0lBR1IsNkNBQWlCOzs7O2NBQUMsSUFBUztRQUNoQyxFQUFFLENBQUMsQ0FBQyxJQUFJLEtBQUssSUFBSSxJQUFJLElBQUksS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDO1lBQ3hDLHFCQUFJLEtBQUssR0FBVSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUU1QyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUM1QjtRQUVELE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQzs7Ozs7O0lBR0wsc0RBQTBCOzs7O2NBQUMsV0FBb0I7UUFDcEQscUJBQUksS0FBSyxHQUFVLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBRTVDLEVBQUUsQ0FBQyxDQUFDLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUM7O2dCQUMxQyxHQUFHLENBQUMsQ0FBYSxJQUFBLEtBQUEsaUJBQUEsSUFBSSxDQUFDLEtBQUssQ0FBQSxnQkFBQTtvQkFBdEIsSUFBSSxJQUFJLFdBQUE7b0JBQ1gscUJBQUksS0FBSyxHQUFXLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFFakQsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7aUJBQ3ZDOzs7Ozs7Ozs7U0FDRjs7Ozs7O0lBR0kseUNBQWE7Ozs7UUFDbEIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsS0FBSyxJQUFJLElBQUksT0FBTyxJQUFJLENBQUMsV0FBVyxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUM7WUFDekUsTUFBTSxDQUFDLEtBQUssQ0FBQztTQUNkO1FBQ0QsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7Ozs7OztJQUduQiwwQ0FBYzs7OztjQUFDLE9BQWdCO1FBQ3BDLElBQUksQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDOzs7OztJQUd0Qiw0Q0FBZ0I7Ozs7UUFDckIsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUM7Ozs7O0lBR3JCLDhDQUFrQjs7OztRQUN2QixNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQzs7Ozs7SUFHdkIsMENBQWM7Ozs7UUFDbkIsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7Ozs7O0lBR25CLDJDQUFlOzs7O1FBQ3BCLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDOzs7Ozs7SUFHcEIsdUNBQVc7Ozs7Y0FBQyxVQUFlO1FBQ2hDLElBQUksQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDOzs7OztJQUd0QixzQ0FBVTs7OztRQUNmLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDOzs7UUFoU3RCLE1BQU0sQ0FBQyxVQUFVLENBQUM7MENBQ00sWUFBWTs7O1FBQ3BDLE1BQU0sQ0FBQyxZQUFZLENBQUM7MENBQ00sWUFBWTs7O1FBQ3RDLE1BQU0sQ0FBQyxRQUFRLENBQUM7MENBQ00sWUFBWTs7O1FBQ2xDLE1BQU0sQ0FBQyxTQUFTLENBQUM7MENBQ00sWUFBWTs7NEJBbkJ0QztFQU84RSxrQkFBa0I7U0FBMUUsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT25Jbml0LCBFdmVudEVtaXR0ZXIsIEVsZW1lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjY29yZGlvbkl0ZW1Nb2RlbCB9IGZyb20gJy4vbW9kZWwvQWNjb3JkaW9uSXRlbU1vZGVsJztcbmltcG9ydCB7IEFDVElWQVRFX0VWRU5ULCBERUFDVElWQVRFX0VWRU5ULCBFTkFCTEVfRVZFTlQsIERJU0FCTEVfRVZFTlQgfSBmcm9tICcuLi9zaGFyZS9DdXN0b21FdmVudFR5cGUnO1xuaW1wb3J0IHsgQWJzdHJhY3RIYXNPcHRpb25zIH0gZnJvbSAnLi4vc2hhcmUvQWJzdHJhY3RIYXNPcHRpb25zJztcbmltcG9ydCB7IE9wdGlvbiB9IGZyb20gJy4uL2RlY29yYXRvci9PcHRpb24uZGVjb3JhdG9yJztcbmltcG9ydCB7IEV2ZW50VXRpbHMgfSBmcm9tICcuLi9zaGFyZS91dGlscy9FdmVudFV0aWxzJztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFic3RyYWN0QWNjb3JkaW9uPFQgZXh0ZW5kcyBBY2NvcmRpb25JdGVtTW9kZWw+IGV4dGVuZHMgQWJzdHJhY3RIYXNPcHRpb25zIGltcGxlbWVudHMgT25Jbml0IHtcblxuICBwcml2YXRlIGl0ZW1TdGF0dXM6IGFueVtdO1xuICBwcm90ZWN0ZWQgaXRlbXM6IFRbXTtcbiAgcHJvdGVjdGVkIGZpeGVkSGVpZ2h0OiBib29sZWFuOyAvLyBtb2RlIHRvIGZpeEhlaWdodCBvciBub3RcbiAgQE9wdGlvbignYWN0aXZhdGUnKVxuICBwcm90ZWN0ZWQgYWN0aXZhdGVFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPcHRpb24oJ2RlYWN0aXZhdGUnKVxuICBwcm90ZWN0ZWQgZGVhY3RpdmF0ZUV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgQE9wdGlvbignZW5hYmxlJylcbiAgcHJvdGVjdGVkIGVuYWJsZUV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgQE9wdGlvbignZGlzYWJsZScpXG4gIHByb3RlY3RlZCBkaXNhYmxlRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICBwcm90ZWN0ZWQgZWxlbWVudFJlZjogRWxlbWVudFJlZjtcbiAgcHJvdGVjdGVkIGF1dG9Jbml0OiBib29sZWFuO1xuICBwcm90ZWN0ZWQgbXVsdGlwbGVFeHBhbmQ6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IoZWxlbWVudFJlZjogRWxlbWVudFJlZikge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5lbGVtZW50UmVmID0gZWxlbWVudFJlZjtcbiAgICB0aGlzLml0ZW1TdGF0dXMgPSBbXTtcbiAgICB0aGlzLmZpeGVkSGVpZ2h0ID0gdHJ1ZTtcbiAgICB0aGlzLmF1dG9Jbml0ID0gZmFsc2U7XG4gICAgdGhpcy5tdWx0aXBsZUV4cGFuZCA9IHRydWU7XG4gICAgdGhpcy5hY3RpdmF0ZUV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIHRoaXMuZGVhY3RpdmF0ZUV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIHRoaXMuZW5hYmxlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgdGhpcy5kaXNhYmxlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zZXRBY2NvcmRpb25JdGVtcyh0aGlzLml0ZW1zKTtcbiAgICBpZiAodGhpcy5hdXRvSW5pdCAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5hdXRvSW5pdCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGlmICh0aGlzLmF1dG9Jbml0KSB7XG4gICAgICAgIHRoaXMuaW5pdCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2VuZXJhdGVJdGVtU3RhdHVzKGl0ZW06IFQpOiBhbnkge1xuICAgIGxldCByZXN1bHQgPSB7XG4gICAgICBhY3RpdmU6IGZhbHNlLFxuICAgICAgZW5hYmxlOiBmYWxzZVxuICAgIH07XG5cbiAgICBpZiAoaXRlbSAhPT0gbnVsbCAmJiB0eXBlb2YgaXRlbSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJlc3VsdC5hY3RpdmUgPSBpdGVtLmFjdGl2ZTtcbiAgICAgIHJlc3VsdC5lbmFibGUgPSBpdGVtLmVuYWJsZTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJpdmF0ZSBjb2xsYXBzZUl0ZW0oaW5kZXg6IG51bWJlciwgZXhjZXB0SW5kZXg/OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoaW5kZXggIT09IG51bGwgJiYgdHlwZW9mIGluZGV4ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgaWYgKGV4Y2VwdEluZGV4ICE9PSBudWxsICYmIGV4Y2VwdEluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKGluZGV4ID09PSBleGNlcHRJbmRleCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBsZXQgaXRlbSA9IHRoaXMuZ2V0QWNjb3JkaW9uSXRlbShpbmRleCk7XG5cbiAgICAgIGlmIChpdGVtICE9PSBudWxsKSB7XG4gICAgICAgIGlmIChpdGVtLmFjdGl2ZSkge1xuICAgICAgICAgIGl0ZW0uYWN0aXZlID0gZmFsc2U7XG4gICAgICAgICAgLy8gdXBkYXRlIHN0YXR1c1xuICAgICAgICAgIGxldCBzdGF0dXMgPSB0aGlzLml0ZW1TdGF0dXNbaW5kZXhdO1xuICAgICAgICAgIHN0YXR1cy5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMub25BY2NvcmRpb25EZWFjdGl2ZWQoaW5kZXgsIGl0ZW0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhY3RpdmF0ZShpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuaXRlbXMgIT09IG51bGwgJiYgdHlwZW9mIHRoaXMuaXRlbXMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBsZXQgaXRlbSA9IHRoaXMuZ2V0QWNjb3JkaW9uSXRlbShpbmRleCk7XG4gICAgICBpZiAoaXRlbSAhPT0gbnVsbCkge1xuICAgICAgICBpZiAoIWl0ZW0uYWN0aXZlKSB7XG4gICAgICAgICAgaXRlbS5hY3RpdmUgPSB0cnVlO1xuICAgICAgICAgIC8vIHVwZGF0ZSBzdGF0dXNcbiAgICAgICAgICBsZXQgc3RhdHVzID0gdGhpcy5pdGVtU3RhdHVzW2luZGV4XTtcbiAgICAgICAgICBzdGF0dXMuYWN0aXZlID0gdHJ1ZTtcblxuICAgICAgICAgIGlmKCF0aGlzLm11bHRpcGxlRXhwYW5kKXtcbiAgICAgICAgICAgIHRoaXMuY29sbGFwc2VJdGVtQWxsRXhjZXB0SW5kZXgoaW5kZXgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIGVtaXQgZXZlbnRcbiAgICAgICAgICBsZXQgZGF0YTogYW55ID0ge1xuICAgICAgICAgICAgaXRlbTogaXRlbSxcbiAgICAgICAgICAgIGluZGV4OiBpbmRleFxuICAgICAgICAgIH07XG4gICAgICAgICAgbGV0IGV2ID0gRXZlbnRVdGlscy5uZXdDdXN0b21FdmVudChBQ1RJVkFURV9FVkVOVCwgdGhpcywgZGF0YSwgbnVsbCk7XG5cbiAgICAgICAgICB0aGlzLmFjdGl2YXRlRXZlbnQuZW1pdChldik7XG4gICAgICAgICAgdGhpcy5vbkFjY29yZGlvbkFjdGl2ZWQoaW5kZXgsIGl0ZW0pO1xuXG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGRlYWN0aXZhdGUoaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLml0ZW1zICE9PSBudWxsICYmIHR5cGVvZiB0aGlzLml0ZW1zICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgbGV0IGl0ZW0gPSB0aGlzLmdldEFjY29yZGlvbkl0ZW0oaW5kZXgpO1xuICAgICAgaWYgKGl0ZW0gIT09IG51bGwpIHtcbiAgICAgICAgaWYgKGl0ZW0uYWN0aXZlKSB7XG4gICAgICAgICAgaXRlbS5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgICAvLyB1cGRhdGUgc3RhdHVzXG4gICAgICAgICAgbGV0IHN0YXR1cyA9IHRoaXMuaXRlbVN0YXR1c1tpbmRleF07XG4gICAgICAgICAgc3RhdHVzLmFjdGl2ZSA9IGZhbHNlO1xuXG4gICAgICAgICAgLy8gZW1pdCBldmVudFxuICAgICAgICAgIGxldCBkYXRhOiBhbnkgPSB7XG4gICAgICAgICAgICBpdGVtOiBpdGVtLFxuICAgICAgICAgICAgaW5kZXg6IGluZGV4XG4gICAgICAgICAgfTtcbiAgICAgICAgICBsZXQgZXYgPSBFdmVudFV0aWxzLm5ld0N1c3RvbUV2ZW50KERFQUNUSVZBVEVfRVZFTlQsIHRoaXMsIGRhdGEsIG51bGwpO1xuXG4gICAgICAgICAgdGhpcy5kZWFjdGl2YXRlRXZlbnQuZW1pdChldik7XG4gICAgICAgICAgdGhpcy5vbkFjY29yZGlvbkRlYWN0aXZlZChpbmRleCwgaXRlbSk7XG5cbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgZW5hYmxlKGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5pdGVtcyAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5pdGVtcyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGxldCBpdGVtID0gdGhpcy5nZXRBY2NvcmRpb25JdGVtKGluZGV4KTtcbiAgICAgIGlmIChpdGVtICE9PSBudWxsKSB7XG4gICAgICAgIGlmICghaXRlbS5lbmFibGUpIHtcbiAgICAgICAgICBpdGVtLmVuYWJsZSA9IHRydWU7XG4gICAgICAgICAgLy8gdXBkYXRlIHN0YXR1c1xuICAgICAgICAgIGxldCBzdGF0dXMgPSB0aGlzLml0ZW1TdGF0dXNbaW5kZXhdO1xuICAgICAgICAgIHN0YXR1cy5lbmFibGUgPSB0cnVlO1xuXG4gICAgICAgICAgLy8gZW1pdCBldmVudFxuICAgICAgICAgIGxldCBkYXRhOiBhbnkgPSB7XG4gICAgICAgICAgICBpdGVtOiBpdGVtLFxuICAgICAgICAgICAgaW5kZXg6IGluZGV4XG4gICAgICAgICAgfTtcbiAgICAgICAgICBsZXQgZXYgPSBFdmVudFV0aWxzLm5ld0N1c3RvbUV2ZW50KEVOQUJMRV9FVkVOVCwgdGhpcywgZGF0YSwgbnVsbCk7XG5cbiAgICAgICAgICB0aGlzLmVuYWJsZUV2ZW50LmVtaXQoZXYpO1xuICAgICAgICAgIHRoaXMub25BY2NvcmRpb25FbmFibGVkKGluZGV4LCBpdGVtKTtcblxuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBkaXNhYmxlKGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5pdGVtcyAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5pdGVtcyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGxldCBpdGVtID0gdGhpcy5nZXRBY2NvcmRpb25JdGVtKGluZGV4KTtcbiAgICAgIGlmIChpdGVtICE9PSBudWxsKSB7XG4gICAgICAgIGlmIChpdGVtLmVuYWJsZSkge1xuICAgICAgICAgIC8vIGF1dG8gY2FsbCBkZWFjdGl2YXRlXG4gICAgICAgICAgdGhpcy5kZWFjdGl2YXRlKGluZGV4KTtcblxuICAgICAgICAgIGl0ZW0uZW5hYmxlID0gZmFsc2U7XG4gICAgICAgICAgLy8gdXBkYXRlIHN0YXR1c1xuICAgICAgICAgIGxldCBzdGF0dXMgPSB0aGlzLml0ZW1TdGF0dXNbaW5kZXhdO1xuICAgICAgICAgIHN0YXR1cy5lbmFibGUgPSBmYWxzZTtcblxuICAgICAgICAgIC8vIGVtaXQgZXZlbnRcbiAgICAgICAgICBsZXQgZGF0YTogYW55ID0ge1xuICAgICAgICAgICAgaXRlbTogaXRlbSxcbiAgICAgICAgICAgIGluZGV4OiBpbmRleFxuICAgICAgICAgIH07XG4gICAgICAgICAgbGV0IGV2ID0gRXZlbnRVdGlscy5uZXdDdXN0b21FdmVudChESVNBQkxFX0VWRU5ULCB0aGlzLCBkYXRhLCBudWxsKTtcblxuICAgICAgICAgIHRoaXMuZGlzYWJsZUV2ZW50LmVtaXQoZXYpO1xuICAgICAgICAgIHRoaXMub25BY2NvcmRpb25EaXNhYmxlZChpbmRleCwgaXRlbSk7XG5cbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgc2V0QWNjb3JkaW9uSXRlbXMoaXRlbXM6IFRbXSk6IHZvaWQge1xuICAgIHRoaXMuaXRlbXMgPSBpdGVtcztcbiAgICB0aGlzLml0ZW1TdGF0dXMgPSBbXTtcblxuICAgIGlmICh0aGlzLml0ZW1zICE9PSBudWxsICYmIHR5cGVvZiB0aGlzLml0ZW1zICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgZm9yIChsZXQgaXRlbSBvZiB0aGlzLml0ZW1zKSB7XG4gICAgICAgIC8vIGNoYW5nZSBzdGF0dXNcbiAgICAgICAgaWYgKCFpdGVtLmVuYWJsZSkge1xuICAgICAgICAgIGl0ZW0uYWN0aXZlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHdyYXBJdGVtID0gdGhpcy5nZW5lcmF0ZUl0ZW1TdGF0dXMoaXRlbSk7XG4gICAgICAgIHRoaXMuaXRlbVN0YXR1cy5wdXNoKHdyYXBJdGVtKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0QWNjb3JkaW9uSXRlbXMoKTogVFtdIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtcztcbiAgfVxuXG4gIHB1YmxpYyBnZXRBY2NvcmRpb25JdGVtKGluZGV4OiBudW1iZXIpOiBUIHtcbiAgICBpZiAodGhpcy5pdGVtcyAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5pdGVtcyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGlmIChpbmRleCA8IHRoaXMuaXRlbXMubGVuZ3RoKSB7XG4gICAgICAgIGxldCBpdGVtID0gdGhpcy5pdGVtc1tpbmRleF07XG4gICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyBpc0FjdGl2ZShpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgaWYgKGluZGV4ICE9PSBudWxsICYmIHR5cGVvZiBpbmRleCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGlmIChpbmRleCA8IHRoaXMuaXRlbXMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLml0ZW1zW2luZGV4XS5hY3RpdmU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBpc0VuYWJsZShpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgaWYgKGluZGV4ICE9PSBudWxsICYmIHR5cGVvZiBpbmRleCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGlmIChpbmRleCA8IHRoaXMuaXRlbXMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLml0ZW1zW2luZGV4XS5lbmFibGU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRBY2NvcmRpb25JbmRleChpdGVtOiBhbnkpOiBudW1iZXIge1xuICAgIGlmIChpdGVtICE9PSBudWxsICYmIGl0ZW0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgbGV0IGl0ZW1zOiBhbnlbXSA9IHRoaXMuZ2V0QWNjb3JkaW9uSXRlbXMoKTtcblxuICAgICAgcmV0dXJuIGl0ZW1zLmluZGV4T2YoaXRlbSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIC0xO1xuICB9XG5cbiAgcHVibGljIGNvbGxhcHNlSXRlbUFsbEV4Y2VwdEluZGV4KGV4Y2VwdEluZGV4PzogbnVtYmVyKTogdm9pZCB7XG4gICAgbGV0IGl0ZW1zOiBhbnlbXSA9IHRoaXMuZ2V0QWNjb3JkaW9uSXRlbXMoKTtcblxuICAgIGlmIChpdGVtcyAhPT0gbnVsbCAmJiBpdGVtcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBmb3IgKGxldCBpdGVtIG9mIHRoaXMuaXRlbXMpIHtcbiAgICAgICAgbGV0IGluZGV4OiBudW1iZXIgPSB0aGlzLmdldEFjY29yZGlvbkluZGV4KGl0ZW0pO1xuXG4gICAgICAgIHRoaXMuY29sbGFwc2VJdGVtKGluZGV4LCBleGNlcHRJbmRleCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGlzRml4ZWRIZWlnaHQoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuZml4ZWRIZWlnaHQgPT09IG51bGwgfHwgdHlwZW9mIHRoaXMuZml4ZWRIZWlnaHQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmZpeGVkSGVpZ2h0O1xuICB9XG5cbiAgcHVibGljIHNldEZpeGVkSGVpZ2h0KGlzRml4ZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmZpeGVkSGVpZ2h0ID0gaXNGaXhlZDtcbiAgfVxuXG4gIHB1YmxpYyBnZXRBY3RpdmF0ZUV2ZW50KCk6IEV2ZW50RW1pdHRlcjxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5hY3RpdmF0ZUV2ZW50O1xuICB9XG5cbiAgcHVibGljIGdldERlYWN0aXZhdGVFdmVudCgpOiBFdmVudEVtaXR0ZXI8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuZGVhY3RpdmF0ZUV2ZW50O1xuICB9XG5cbiAgcHVibGljIGdldEVuYWJsZUV2ZW50KCk6IEV2ZW50RW1pdHRlcjxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5lbmFibGVFdmVudDtcbiAgfVxuXG4gIHB1YmxpYyBnZXREaXNhYmxlRXZlbnQoKTogRXZlbnRFbWl0dGVyPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmRpc2FibGVFdmVudDtcbiAgfVxuXG4gIHB1YmxpYyBzZXRBdXRvSW5pdChpc0F1dG9Jbml0OiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLmF1dG9Jbml0ID0gaXNBdXRvSW5pdDtcbiAgfVxuXG4gIHB1YmxpYyBpc0F1dG9Jbml0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmF1dG9Jbml0O1xuICB9XG5cbiAgcHVibGljIGFic3RyYWN0IGluaXQoKTogdm9pZDtcblxuICBwdWJsaWMgYWJzdHJhY3Qgb25BY2NvcmRpb25BY3RpdmVkKGluZGV4OiBudW1iZXIsIGl0ZW06IFQpOiB2b2lkO1xuXG4gIHB1YmxpYyBhYnN0cmFjdCBvbkFjY29yZGlvbkRlYWN0aXZlZChpbmRleDogbnVtYmVyLCBpdGVtOiBUKTogdm9pZDtcblxuICBwdWJsaWMgYWJzdHJhY3Qgb25BY2NvcmRpb25FbmFibGVkKGluZGV4OiBudW1iZXIsIGl0ZW06IFQpOiB2b2lkO1xuXG4gIHB1YmxpYyBhYnN0cmFjdCBvbkFjY29yZGlvbkRpc2FibGVkKGluZGV4OiBudW1iZXIsIGl0ZW06IFQpOiB2b2lkO1xuXG4gIHB1YmxpYyBhYnN0cmFjdCByZWxvYWQoKTogdm9pZDtcblxuICBwdWJsaWMgYWJzdHJhY3QgcmVSZW5kZXIoKTogdm9pZDtcbn1cbiJdfQ==