UNPKG

ng-zorro-antd

Version:

An enterprise-class UI components based on Ant Design and Angular

758 lines 61.5 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import * as tslib_1 from "tslib"; import { BACKSPACE, DOWN_ARROW, ENTER, SPACE, TAB, UP_ARROW } from '@angular/cdk/keycodes'; import { Injectable } from '@angular/core'; import { combineLatest, merge, BehaviorSubject, ReplaySubject, Subject } from 'rxjs'; import { distinctUntilChanged, filter, map, share, skip, tap } from 'rxjs/operators'; import { isNotNil } from '../core/util'; import { NzOptionComponent } from './nz-option.component'; import { defaultFilterOption, NzFilterOptionPipe } from './nz-option.pipe'; var NzSelectService = /** @class */ (function () { function NzSelectService() { var _this = this; // Input params this.autoClearSearchValue = true; this.serverSearch = false; this.filterOption = defaultFilterOption; this.mode = 'default'; this.maxMultipleCount = Infinity; this.disabled = false; // tslint:disable-next-line:no-any this.compareWith = (/** * @param {?} o1 * @param {?} o2 * @return {?} */ function (o1, o2) { return o1 === o2; }); // selectedValueChanged should emit ngModelChange or not // tslint:disable-next-line:no-any this.listOfSelectedValueWithEmit$ = new BehaviorSubject({ value: [], emit: false }); // ContentChildren Change this.mapOfTemplateOption$ = new BehaviorSubject({ listOfNzOptionComponent: [], listOfNzOptionGroupComponent: [] }); // searchValue Change this.searchValueRaw$ = new BehaviorSubject(''); this.listOfFilteredOption = []; this.openRaw$ = new Subject(); this.checkRaw$ = new Subject(); this.open = false; this.clearInput$ = new Subject(); this.searchValue = ''; this.isShowNotFound = false; // open this.open$ = this.openRaw$.pipe(distinctUntilChanged(), share(), tap((/** * @return {?} */ function () { return _this.clearInput(); }))); this.activatedOption$ = new ReplaySubject(1); this.listOfSelectedValue$ = this.listOfSelectedValueWithEmit$.pipe(map((/** * @param {?} data * @return {?} */ function (data) { return data.value; }))); this.modelChange$ = this.listOfSelectedValueWithEmit$.pipe(filter((/** * @param {?} item * @return {?} */ function (item) { return item.emit; })), map((/** * @param {?} data * @return {?} */ function (data) { /** @type {?} */ var selectedList = data.value; /** @type {?} */ var modelValue = null; if (_this.isSingleMode) { if (selectedList.length) { modelValue = selectedList[0]; } } else { modelValue = selectedList; } return modelValue; }))); this.searchValue$ = this.searchValueRaw$.pipe(distinctUntilChanged(), skip(1), share(), tap((/** * @param {?} value * @return {?} */ function (value) { _this.searchValue = value; if (value) { _this.updateActivatedOption(_this.listOfFilteredOption[0]); } _this.updateListOfFilteredOption(); }))); // tslint:disable-next-line:no-any this.listOfSelectedValue = []; // flat ViewChildren this.listOfTemplateOption = []; // tag option this.listOfTagOption = []; // tag option concat template option this.listOfTagAndTemplateOption = []; // ViewChildren this.listOfNzOptionComponent = []; this.listOfNzOptionGroupComponent = []; // display in top control this.listOfCachedSelectedOption = []; // selected value or ViewChildren change this.valueOrOption$ = combineLatest(this.listOfSelectedValue$, this.mapOfTemplateOption$).pipe(tap((/** * @param {?} data * @return {?} */ function (data) { _this.listOfSelectedValue = data[0]; _this.listOfNzOptionComponent = data[1].listOfNzOptionComponent; _this.listOfNzOptionGroupComponent = data[1].listOfNzOptionGroupComponent; _this.listOfTemplateOption = _this.listOfNzOptionComponent.concat(_this.listOfNzOptionGroupComponent.reduce((/** * @param {?} pre * @param {?} cur * @return {?} */ function (pre, cur) { return tslib_1.__spread(pre, cur.listOfNzOptionComponent.toArray()); }), [])); _this.updateListOfTagOption(); _this.updateListOfFilteredOption(); _this.resetActivatedOptionIfNeeded(); _this.updateListOfCachedOption(); })), share()); this.check$ = merge(this.checkRaw$, this.valueOrOption$, this.searchValue$, this.activatedOption$, this.open$, this.modelChange$).pipe(share()); } /** * @param {?} option * @return {?} */ NzSelectService.prototype.clickOption = /** * @param {?} option * @return {?} */ function (option) { var _this = this; /** update listOfSelectedOption -> update listOfSelectedValue -> next listOfSelectedValue$ **/ if (!option.nzDisabled) { this.updateActivatedOption(option); /** @type {?} */ var listOfSelectedValue = tslib_1.__spread(this.listOfSelectedValue); if (this.isMultipleOrTags) { /** @type {?} */ var targetValue = listOfSelectedValue.find((/** * @param {?} o * @return {?} */ function (o) { return _this.compareWith(o, option.nzValue); })); if (isNotNil(targetValue)) { listOfSelectedValue.splice(listOfSelectedValue.indexOf(targetValue), 1); this.updateListOfSelectedValue(listOfSelectedValue, true); } else if (listOfSelectedValue.length < this.maxMultipleCount) { listOfSelectedValue.push(option.nzValue); this.updateListOfSelectedValue(listOfSelectedValue, true); } } else if (!this.compareWith(listOfSelectedValue[0], option.nzValue)) { listOfSelectedValue = [option.nzValue]; this.updateListOfSelectedValue(listOfSelectedValue, true); } if (this.isSingleMode) { this.setOpenState(false); } else if (this.autoClearSearchValue) { this.clearInput(); } } }; /** * @return {?} */ NzSelectService.prototype.updateListOfCachedOption = /** * @return {?} */ function () { var _this = this; if (this.isSingleMode) { /** @type {?} */ var selectedOption = this.listOfTemplateOption.find((/** * @param {?} o * @return {?} */ function (o) { return _this.compareWith(o.nzValue, _this.listOfSelectedValue[0]); })); if (isNotNil(selectedOption)) { this.listOfCachedSelectedOption = [selectedOption]; } } else { /** @type {?} */ var listOfCachedSelectedOption_1 = []; this.listOfSelectedValue.forEach((/** * @param {?} v * @return {?} */ function (v) { /** @type {?} */ var listOfMixedOption = tslib_1.__spread(_this.listOfTagAndTemplateOption, _this.listOfCachedSelectedOption); /** @type {?} */ var option = listOfMixedOption.find((/** * @param {?} o * @return {?} */ function (o) { return _this.compareWith(o.nzValue, v); })); if (option) { listOfCachedSelectedOption_1.push(option); } })); this.listOfCachedSelectedOption = listOfCachedSelectedOption_1; } }; /** * @return {?} */ NzSelectService.prototype.updateListOfTagOption = /** * @return {?} */ function () { var _this = this; if (this.isTagsMode) { /** @type {?} */ var listOfMissValue = this.listOfSelectedValue.filter((/** * @param {?} value * @return {?} */ function (value) { return !_this.listOfTemplateOption.find((/** * @param {?} o * @return {?} */ function (o) { return _this.compareWith(o.nzValue, value); })); })); this.listOfTagOption = listOfMissValue.map((/** * @param {?} value * @return {?} */ function (value) { /** @type {?} */ var nzOptionComponent = new NzOptionComponent(); nzOptionComponent.nzValue = value; nzOptionComponent.nzLabel = value; return nzOptionComponent; })); this.listOfTagAndTemplateOption = tslib_1.__spread(this.listOfTemplateOption.concat(this.listOfTagOption)); } else { this.listOfTagAndTemplateOption = tslib_1.__spread(this.listOfTemplateOption); } }; /** * @return {?} */ NzSelectService.prototype.updateAddTagOption = /** * @return {?} */ function () { var _this = this; /** @type {?} */ var isMatch = this.listOfTagAndTemplateOption.find((/** * @param {?} item * @return {?} */ function (item) { return item.nzLabel === _this.searchValue; })); if (this.isTagsMode && this.searchValue && !isMatch) { /** @type {?} */ var option = new NzOptionComponent(); option.nzValue = this.searchValue; option.nzLabel = this.searchValue; this.addedTagOption = option; this.updateActivatedOption(option); } else { this.addedTagOption = null; } }; /** * @return {?} */ NzSelectService.prototype.updateListOfFilteredOption = /** * @return {?} */ function () { this.updateAddTagOption(); /** @type {?} */ var listOfFilteredOption = new NzFilterOptionPipe().transform(this.listOfTagAndTemplateOption, this.searchValue, this.filterOption, this.serverSearch); this.listOfFilteredOption = this.addedTagOption ? tslib_1.__spread([this.addedTagOption], listOfFilteredOption) : tslib_1.__spread(listOfFilteredOption); this.isShowNotFound = !this.isTagsMode && !this.listOfFilteredOption.length; }; /** * @return {?} */ NzSelectService.prototype.clearInput = /** * @return {?} */ function () { this.clearInput$.next(); }; // tslint:disable-next-line:no-any // tslint:disable-next-line:no-any /** * @param {?} value * @param {?} emit * @return {?} */ NzSelectService.prototype.updateListOfSelectedValue = // tslint:disable-next-line:no-any /** * @param {?} value * @param {?} emit * @return {?} */ function (value, emit) { this.listOfSelectedValueWithEmit$.next({ value: value, emit: emit }); }; /** * @param {?} option * @return {?} */ NzSelectService.prototype.updateActivatedOption = /** * @param {?} option * @return {?} */ function (option) { this.activatedOption$.next(option); this.activatedOption = option; }; /** * @param {?} inputValue * @param {?} tokenSeparators * @return {?} */ NzSelectService.prototype.tokenSeparate = /** * @param {?} inputValue * @param {?} tokenSeparators * @return {?} */ function (inputValue, tokenSeparators) { // auto tokenSeparators if (inputValue && inputValue.length && tokenSeparators.length && this.isMultipleOrTags && this.includesSeparators(inputValue, tokenSeparators)) { /** @type {?} */ var listOfLabel = this.splitBySeparators(inputValue, tokenSeparators); this.updateSelectedValueByLabelList(listOfLabel); this.clearInput(); } }; /** * @param {?} str * @param {?} separators * @return {?} */ NzSelectService.prototype.includesSeparators = /** * @param {?} str * @param {?} separators * @return {?} */ function (str, separators) { // tslint:disable-next-line:prefer-for-of for (var i = 0; i < separators.length; ++i) { if (str.lastIndexOf(separators[i]) > 0) { return true; } } return false; }; /** * @param {?} str * @param {?} separators * @return {?} */ NzSelectService.prototype.splitBySeparators = /** * @param {?} str * @param {?} separators * @return {?} */ function (str, separators) { /** @type {?} */ var reg = new RegExp("[" + separators.join() + "]"); /** @type {?} */ var array = ((/** @type {?} */ (str))).split(reg).filter((/** * @param {?} token * @return {?} */ function (token) { return token; })); return Array.from(new Set(array)); }; /** * @return {?} */ NzSelectService.prototype.resetActivatedOptionIfNeeded = /** * @return {?} */ function () { var _this = this; /** @type {?} */ var resetActivatedOption = (/** * @return {?} */ function () { /** @type {?} */ var activatedOption = _this.listOfFilteredOption.find((/** * @param {?} item * @return {?} */ function (item) { return _this.compareWith(item.nzValue, _this.listOfSelectedValue[0]); })); _this.updateActivatedOption(activatedOption || null); }); if (this.activatedOption) { if (!this.listOfFilteredOption.find((/** * @param {?} item * @return {?} */ function (item) { return _this.compareWith(item.nzValue, _this.activatedOption.nzValue); })) || !this.listOfSelectedValue.find((/** * @param {?} item * @return {?} */ function (item) { return _this.compareWith(item, _this.activatedOption.nzValue); }))) { resetActivatedOption(); } } else { resetActivatedOption(); } }; /** * @param {?} listOfNzOptionComponent * @param {?} listOfNzOptionGroupComponent * @return {?} */ NzSelectService.prototype.updateTemplateOption = /** * @param {?} listOfNzOptionComponent * @param {?} listOfNzOptionGroupComponent * @return {?} */ function (listOfNzOptionComponent, listOfNzOptionGroupComponent) { this.mapOfTemplateOption$.next({ listOfNzOptionComponent: listOfNzOptionComponent, listOfNzOptionGroupComponent: listOfNzOptionGroupComponent }); }; /** * @param {?} value * @return {?} */ NzSelectService.prototype.updateSearchValue = /** * @param {?} value * @return {?} */ function (value) { this.searchValueRaw$.next(value); }; /** * @param {?} listOfLabel * @return {?} */ NzSelectService.prototype.updateSelectedValueByLabelList = /** * @param {?} listOfLabel * @return {?} */ function (listOfLabel) { var _this = this; /** @type {?} */ var listOfSelectedValue = tslib_1.__spread(this.listOfSelectedValue); /** @type {?} */ var listOfMatchOptionValue = this.listOfTagAndTemplateOption .filter((/** * @param {?} item * @return {?} */ function (item) { return listOfLabel.indexOf(item.nzLabel) !== -1; })) .map((/** * @param {?} item * @return {?} */ function (item) { return item.nzValue; })) .filter((/** * @param {?} item * @return {?} */ function (item) { return !isNotNil(_this.listOfSelectedValue.find((/** * @param {?} v * @return {?} */ function (v) { return _this.compareWith(v, item); }))); })); if (this.isMultipleMode) { this.updateListOfSelectedValue(tslib_1.__spread(listOfSelectedValue, listOfMatchOptionValue), true); } else { /** @type {?} */ var listOfUnMatchOptionValue = listOfLabel .filter((/** * @param {?} label * @return {?} */ function (label) { return _this.listOfTagAndTemplateOption .map((/** * @param {?} item * @return {?} */ function (item) { return item.nzLabel; })).indexOf(label) === -1; })); this.updateListOfSelectedValue(tslib_1.__spread(listOfSelectedValue, listOfMatchOptionValue, listOfUnMatchOptionValue), true); } }; /** * @param {?} e * @return {?} */ NzSelectService.prototype.onKeyDown = /** * @param {?} e * @return {?} */ function (e) { var _this = this; /** @type {?} */ var keyCode = e.keyCode; /** @type {?} */ var eventTarget = (/** @type {?} */ (e.target)); /** @type {?} */ var listOfFilteredOptionWithoutDisabled = this.listOfFilteredOption.filter((/** * @param {?} item * @return {?} */ function (item) { return !item.nzDisabled; })); /** @type {?} */ var activatedIndex = listOfFilteredOptionWithoutDisabled.findIndex((/** * @param {?} item * @return {?} */ function (item) { return item === _this.activatedOption; })); switch (keyCode) { case UP_ARROW: e.preventDefault(); /** @type {?} */ var preIndex = activatedIndex > 0 ? (activatedIndex - 1) : (listOfFilteredOptionWithoutDisabled.length - 1); this.updateActivatedOption(listOfFilteredOptionWithoutDisabled[preIndex]); break; case DOWN_ARROW: e.preventDefault(); /** @type {?} */ var nextIndex = activatedIndex < listOfFilteredOptionWithoutDisabled.length - 1 ? (activatedIndex + 1) : 0; this.updateActivatedOption(listOfFilteredOptionWithoutDisabled[nextIndex]); if (!this.disabled && !this.open) { this.setOpenState(true); } break; case ENTER: e.preventDefault(); if (this.open) { if (this.activatedOption && !this.activatedOption.nzDisabled) { this.clickOption(this.activatedOption); } } else { this.setOpenState(true); } break; case BACKSPACE: if (this.isMultipleOrTags && !eventTarget.value && this.listOfCachedSelectedOption.length) { e.preventDefault(); this.removeValueFormSelected(this.listOfCachedSelectedOption[this.listOfCachedSelectedOption.length - 1]); } break; case SPACE: if (!this.disabled && !this.open) { this.setOpenState(true); event.preventDefault(); } break; case TAB: this.setOpenState(false); break; } }; // tslint:disable-next-line:no-any // tslint:disable-next-line:no-any /** * @param {?} option * @return {?} */ NzSelectService.prototype.removeValueFormSelected = // tslint:disable-next-line:no-any /** * @param {?} option * @return {?} */ function (option) { var _this = this; if (this.disabled || option.nzDisabled) { return; } /** @type {?} */ var listOfSelectedValue = this.listOfSelectedValue.filter((/** * @param {?} item * @return {?} */ function (item) { return !_this.compareWith(item, option.nzValue); })); this.updateListOfSelectedValue(listOfSelectedValue, true); this.clearInput(); }; /** * @param {?} value * @return {?} */ NzSelectService.prototype.setOpenState = /** * @param {?} value * @return {?} */ function (value) { this.openRaw$.next(value); this.open = value; }; /** * @return {?} */ NzSelectService.prototype.check = /** * @return {?} */ function () { this.checkRaw$.next(); }; Object.defineProperty(NzSelectService.prototype, "isSingleMode", { get: /** * @return {?} */ function () { return this.mode === 'default'; }, enumerable: true, configurable: true }); Object.defineProperty(NzSelectService.prototype, "isTagsMode", { get: /** * @return {?} */ function () { return this.mode === 'tags'; }, enumerable: true, configurable: true }); Object.defineProperty(NzSelectService.prototype, "isMultipleMode", { get: /** * @return {?} */ function () { return this.mode === 'multiple'; }, enumerable: true, configurable: true }); Object.defineProperty(NzSelectService.prototype, "isMultipleOrTags", { get: /** * @return {?} */ function () { return this.mode === 'tags' || this.mode === 'multiple'; }, enumerable: true, configurable: true }); NzSelectService.decorators = [ { type: Injectable } ]; return NzSelectService; }()); export { NzSelectService }; if (false) { /** @type {?} */ NzSelectService.prototype.autoClearSearchValue; /** @type {?} */ NzSelectService.prototype.serverSearch; /** @type {?} */ NzSelectService.prototype.filterOption; /** @type {?} */ NzSelectService.prototype.mode; /** @type {?} */ NzSelectService.prototype.maxMultipleCount; /** @type {?} */ NzSelectService.prototype.disabled; /** @type {?} */ NzSelectService.prototype.compareWith; /** * @type {?} * @private */ NzSelectService.prototype.listOfSelectedValueWithEmit$; /** * @type {?} * @private */ NzSelectService.prototype.mapOfTemplateOption$; /** * @type {?} * @private */ NzSelectService.prototype.searchValueRaw$; /** * @type {?} * @private */ NzSelectService.prototype.listOfFilteredOption; /** * @type {?} * @private */ NzSelectService.prototype.openRaw$; /** * @type {?} * @private */ NzSelectService.prototype.checkRaw$; /** * @type {?} * @private */ NzSelectService.prototype.open; /** @type {?} */ NzSelectService.prototype.clearInput$; /** @type {?} */ NzSelectService.prototype.searchValue; /** @type {?} */ NzSelectService.prototype.isShowNotFound; /** @type {?} */ NzSelectService.prototype.open$; /** @type {?} */ NzSelectService.prototype.activatedOption; /** @type {?} */ NzSelectService.prototype.activatedOption$; /** @type {?} */ NzSelectService.prototype.listOfSelectedValue$; /** @type {?} */ NzSelectService.prototype.modelChange$; /** @type {?} */ NzSelectService.prototype.searchValue$; /** @type {?} */ NzSelectService.prototype.listOfSelectedValue; /** @type {?} */ NzSelectService.prototype.listOfTemplateOption; /** @type {?} */ NzSelectService.prototype.listOfTagOption; /** @type {?} */ NzSelectService.prototype.listOfTagAndTemplateOption; /** @type {?} */ NzSelectService.prototype.listOfNzOptionComponent; /** @type {?} */ NzSelectService.prototype.listOfNzOptionGroupComponent; /** @type {?} */ NzSelectService.prototype.addedTagOption; /** @type {?} */ NzSelectService.prototype.listOfCachedSelectedOption; /** @type {?} */ NzSelectService.prototype.valueOrOption$; /** @type {?} */ NzSelectService.prototype.check$; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnotc2VsZWN0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZy16b3Jyby1hbnRkLyIsInNvdXJjZXMiOlsic2VsZWN0L256LXNlbGVjdC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDM0YsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNyRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JGLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFeEMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGtCQUFrQixFQUFpQixNQUFNLGtCQUFrQixDQUFDO0FBRTFGO0lBQUE7UUFBQSxpQkE0V0M7O1FBeldDLHlCQUFvQixHQUFHLElBQUksQ0FBQztRQUM1QixpQkFBWSxHQUFHLEtBQUssQ0FBQztRQUNyQixpQkFBWSxHQUFrQixtQkFBbUIsQ0FBQztRQUNsRCxTQUFJLEdBQW9DLFNBQVMsQ0FBQztRQUNsRCxxQkFBZ0IsR0FBRyxRQUFRLENBQUM7UUFDNUIsYUFBUSxHQUFHLEtBQUssQ0FBQzs7UUFFakIsZ0JBQVc7Ozs7O1FBQUcsVUFBQyxFQUFPLEVBQUUsRUFBTyxJQUFLLE9BQUEsRUFBRSxLQUFLLEVBQUUsRUFBVCxDQUFTLEVBQUM7OztRQUd0QyxpQ0FBNEIsR0FBRyxJQUFJLGVBQWUsQ0FBa0M7WUFDMUYsS0FBSyxFQUFFLEVBQUU7WUFDVCxJQUFJLEVBQUcsS0FBSztTQUNiLENBQUMsQ0FBQzs7UUFFSyx5QkFBb0IsR0FBRyxJQUFJLGVBQWUsQ0FHL0M7WUFDRCx1QkFBdUIsRUFBTyxFQUFFO1lBQ2hDLDRCQUE0QixFQUFFLEVBQUU7U0FDakMsQ0FBQyxDQUFDOztRQUVLLG9CQUFlLEdBQUcsSUFBSSxlQUFlLENBQVMsRUFBRSxDQUFDLENBQUM7UUFDbEQseUJBQW9CLEdBQXdCLEVBQUUsQ0FBQztRQUMvQyxhQUFRLEdBQUcsSUFBSSxPQUFPLEVBQVcsQ0FBQztRQUNsQyxjQUFTLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUMxQixTQUFJLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLGdCQUFXLEdBQUcsSUFBSSxPQUFPLEVBQVcsQ0FBQztRQUNyQyxnQkFBVyxHQUFHLEVBQUUsQ0FBQztRQUNqQixtQkFBYyxHQUFHLEtBQUssQ0FBQzs7UUFFdkIsVUFBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUN4QixvQkFBb0IsRUFBRSxFQUN0QixLQUFLLEVBQUUsRUFDUCxHQUFHOzs7UUFBQyxjQUFNLE9BQUEsS0FBSSxDQUFDLFVBQVUsRUFBRSxFQUFqQixDQUFpQixFQUFDLENBQzdCLENBQUM7UUFFRixxQkFBZ0IsR0FBRyxJQUFJLGFBQWEsQ0FBb0IsQ0FBQyxDQUFDLENBQUM7UUFDM0QseUJBQW9CLEdBQUcsSUFBSSxDQUFDLDRCQUE0QixDQUFDLElBQUksQ0FBQyxHQUFHOzs7O1FBQUMsVUFBQSxJQUFJLElBQUksT0FBQSxJQUFJLENBQUMsS0FBSyxFQUFWLENBQVUsRUFBQyxDQUFDLENBQUM7UUFDdkYsaUJBQVksR0FBRyxJQUFJLENBQUMsNEJBQTRCLENBQUMsSUFBSSxDQUNuRCxNQUFNOzs7O1FBQUMsVUFBQSxJQUFJLElBQUksT0FBQSxJQUFJLENBQUMsSUFBSSxFQUFULENBQVMsRUFBQyxFQUN6QixHQUFHOzs7O1FBQUMsVUFBQSxJQUFJOztnQkFDQSxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUs7O2dCQUMzQixVQUFVLEdBQUcsSUFBSTtZQUNyQixJQUFJLEtBQUksQ0FBQyxZQUFZLEVBQUU7Z0JBQ3JCLElBQUksWUFBWSxDQUFDLE1BQU0sRUFBRTtvQkFDdkIsVUFBVSxHQUFHLFlBQVksQ0FBRSxDQUFDLENBQUUsQ0FBQztpQkFDaEM7YUFDRjtpQkFBTTtnQkFDTCxVQUFVLEdBQUcsWUFBWSxDQUFDO2FBQzNCO1lBQ0QsT0FBTyxVQUFVLENBQUM7UUFDcEIsQ0FBQyxFQUFDLENBQ0gsQ0FBQztRQUNGLGlCQUFZLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQ3RDLG9CQUFvQixFQUFFLEVBQ3RCLElBQUksQ0FBQyxDQUFDLENBQUMsRUFDUCxLQUFLLEVBQUUsRUFDUCxHQUFHOzs7O1FBQUMsVUFBQyxLQUFLO1lBQ1IsS0FBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7WUFDekIsSUFBSSxLQUFLLEVBQUU7Z0JBQ1QsS0FBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUksQ0FBQyxvQkFBb0IsQ0FBRSxDQUFDLENBQUUsQ0FBQyxDQUFDO2FBQzVEO1lBQ0QsS0FBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7UUFDcEMsQ0FBQyxFQUFDLENBQ0gsQ0FBQzs7UUFFRix3QkFBbUIsR0FBVSxFQUFFLENBQUM7O1FBRWhDLHlCQUFvQixHQUF3QixFQUFFLENBQUM7O1FBRS9DLG9CQUFlLEdBQXdCLEVBQUUsQ0FBQzs7UUFFMUMsK0JBQTBCLEdBQXdCLEVBQUUsQ0FBQzs7UUFFckQsNEJBQXVCLEdBQXdCLEVBQUUsQ0FBQztRQUNsRCxpQ0FBNEIsR0FBNkIsRUFBRSxDQUFDOztRQUk1RCwrQkFBMEIsR0FBd0IsRUFBRSxDQUFDOztRQUVyRCxtQkFBYyxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUMsSUFBSSxDQUN2RixHQUFHOzs7O1FBQUMsVUFBQSxJQUFJO1lBQ04sS0FBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBRSxDQUFDLENBQUUsQ0FBQztZQUNyQyxLQUFJLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFFLENBQUMsQ0FBRSxDQUFDLHVCQUF1QixDQUFDO1lBQ2pFLEtBQUksQ0FBQyw0QkFBNEIsR0FBRyxJQUFJLENBQUUsQ0FBQyxDQUFFLENBQUMsNEJBQTRCLENBQUM7WUFDM0UsS0FBSSxDQUFDLG9CQUFvQixHQUFHLEtBQUksQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLENBQzdELEtBQUksQ0FBQyw0QkFBNEIsQ0FBQyxNQUFNOzs7OztZQUN0QyxVQUFDLEdBQUcsRUFBRSxHQUFHLElBQUssd0JBQUssR0FBRyxFQUFLLEdBQUcsQ0FBQyx1QkFBdUIsQ0FBQyxPQUFPLEVBQUUsR0FBbEQsQ0FBb0QsR0FBRSxFQUFFLENBQ3ZFLENBQ0YsQ0FBQztZQUNGLEtBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1lBQzdCLEtBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1lBQ2xDLEtBQUksQ0FBQyw0QkFBNEIsRUFBRSxDQUFDO1lBQ3BDLEtBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1FBQ2xDLENBQUMsRUFBQyxFQUNGLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDWCxXQUFNLEdBQUcsS0FBSyxDQUNaLElBQUksQ0FBQyxTQUFTLEVBQ2QsSUFBSSxDQUFDLGNBQWMsRUFDbkIsSUFBSSxDQUFDLFlBQVksRUFDakIsSUFBSSxDQUFDLGdCQUFnQixFQUNyQixJQUFJLENBQUMsS0FBSyxFQUNWLElBQUksQ0FBQyxZQUFZLENBQ2xCLENBQUMsSUFBSSxDQUNKLEtBQUssRUFBRSxDQUNSLENBQUM7SUE2UEosQ0FBQzs7Ozs7SUEzUEMscUNBQVc7Ozs7SUFBWCxVQUFZLE1BQXlCO1FBQXJDLGlCQXdCQztRQXZCQyw4RkFBOEY7UUFDOUYsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUU7WUFDdEIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxDQUFDOztnQkFDL0IsbUJBQW1CLG9CQUFRLElBQUksQ0FBQyxtQkFBbUIsQ0FBRTtZQUN6RCxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTs7b0JBQ25CLFdBQVcsR0FBRyxtQkFBbUIsQ0FBQyxJQUFJOzs7O2dCQUFDLFVBQUEsQ0FBQyxJQUFJLE9BQUEsS0FBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFuQyxDQUFtQyxFQUFDO2dCQUN0RixJQUFJLFFBQVEsQ0FBQyxXQUFXLENBQUMsRUFBRTtvQkFDekIsbUJBQW1CLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDeEUsSUFBSSxDQUFDLHlCQUF5QixDQUFDLG1CQUFtQixFQUFFLElBQUksQ0FBQyxDQUFDO2lCQUMzRDtxQkFBTSxJQUFJLG1CQUFtQixDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7b0JBQzdELG1CQUFtQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBQ3pDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsQ0FBQztpQkFDM0Q7YUFDRjtpQkFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBRSxDQUFDLENBQUUsRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ3RFLG1CQUFtQixHQUFHLENBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBRSxDQUFDO2dCQUN6QyxJQUFJLENBQUMseUJBQXlCLENBQUMsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLENBQUM7YUFDM0Q7WUFDRCxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7Z0JBQ3JCLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDMUI7aUJBQU0sSUFBSSxJQUFJLENBQUMsb0JBQW9CLEVBQUU7Z0JBQ3BDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQzthQUNuQjtTQUNGO0lBQ0gsQ0FBQzs7OztJQUVELGtEQUF3Qjs7O0lBQXhCO1FBQUEsaUJBaUJDO1FBaEJDLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTs7Z0JBQ2YsY0FBYyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJOzs7O1lBQUMsVUFBQSxDQUFDLElBQUksT0FBQSxLQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsS0FBSSxDQUFDLG1CQUFtQixDQUFFLENBQUMsQ0FBRSxDQUFDLEVBQTFELENBQTBELEVBQUM7WUFDdEgsSUFBSSxRQUFRLENBQUMsY0FBYyxDQUFDLEVBQUU7Z0JBQzVCLElBQUksQ0FBQywwQkFBMEIsR0FBRyxDQUFFLGNBQWMsQ0FBRSxDQUFDO2FBQ3REO1NBQ0Y7YUFBTTs7Z0JBQ0MsNEJBQTBCLEdBQUcsRUFBRTtZQUNyQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTzs7OztZQUFDLFVBQUEsQ0FBQzs7b0JBQzFCLGlCQUFpQixvQkFBUSxLQUFJLENBQUMsMEJBQTBCLEVBQUssS0FBSSxDQUFDLDBCQUEwQixDQUFFOztvQkFDOUYsTUFBTSxHQUFHLGlCQUFpQixDQUFDLElBQUk7Ozs7Z0JBQUMsVUFBQSxDQUFDLElBQUksT0FBQSxLQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEVBQTlCLENBQThCLEVBQUM7Z0JBQzFFLElBQUksTUFBTSxFQUFFO29CQUNWLDRCQUEwQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztpQkFDekM7WUFDSCxDQUFDLEVBQUMsQ0FBQztZQUNILElBQUksQ0FBQywwQkFBMEIsR0FBRyw0QkFBMEIsQ0FBQztTQUM5RDtJQUNILENBQUM7Ozs7SUFFRCwrQ0FBcUI7OztJQUFyQjtRQUFBLGlCQWFDO1FBWkMsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFOztnQkFDYixlQUFlLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU07Ozs7WUFBQyxVQUFBLEtBQUssSUFBSSxPQUFBLENBQUMsS0FBSSxDQUFDLG9CQUFvQixDQUFDLElBQUk7Ozs7WUFBQyxVQUFBLENBQUMsSUFBSSxPQUFBLEtBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsRUFBbEMsQ0FBa0MsRUFBQyxFQUF4RSxDQUF3RSxFQUFDO1lBQzFJLElBQUksQ0FBQyxlQUFlLEdBQUcsZUFBZSxDQUFDLEdBQUc7Ozs7WUFBQyxVQUFBLEtBQUs7O29CQUN4QyxpQkFBaUIsR0FBRyxJQUFJLGlCQUFpQixFQUFFO2dCQUNqRCxpQkFBaUIsQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO2dCQUNsQyxpQkFBaUIsQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO2dCQUNsQyxPQUFPLGlCQUFpQixDQUFDO1lBQzNCLENBQUMsRUFBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLDBCQUEwQixvQkFBUSxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBRSxDQUFDO1NBQ2pHO2FBQU07WUFDTCxJQUFJLENBQUMsMEJBQTBCLG9CQUFRLElBQUksQ0FBQyxvQkFBb0IsQ0FBRSxDQUFDO1NBQ3BFO0lBQ0gsQ0FBQzs7OztJQUVELDRDQUFrQjs7O0lBQWxCO1FBQUEsaUJBV0M7O1lBVk8sT0FBTyxHQUFHLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxJQUFJOzs7O1FBQUMsVUFBQSxJQUFJLElBQUksT0FBQSxJQUFJLENBQUMsT0FBTyxLQUFLLEtBQUksQ0FBQyxXQUFXLEVBQWpDLENBQWlDLEVBQUM7UUFDL0YsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksQ0FBQyxPQUFPLEVBQUU7O2dCQUM3QyxNQUFNLEdBQUcsSUFBSSxpQkFBaUIsRUFBRTtZQUN0QyxNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7WUFDbEMsTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1lBQ2xDLElBQUksQ0FBQyxjQUFjLEdBQUcsTUFBTSxDQUFDO1lBQzdCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUNwQzthQUFNO1lBQ0wsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7U0FDNUI7SUFDSCxDQUFDOzs7O0lBRUQsb0RBQTBCOzs7SUFBMUI7UUFDRSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQzs7WUFDcEIsb0JBQW9CLEdBQUcsSUFBSSxrQkFBa0IsRUFBRSxDQUFDLFNBQVMsQ0FDN0QsSUFBSSxDQUFDLDBCQUEwQixFQUMvQixJQUFJLENBQUMsV0FBVyxFQUNoQixJQUFJLENBQUMsWUFBWSxFQUNqQixJQUFJLENBQUMsWUFBWSxDQUNsQjtRQUNELElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsbUJBQUcsSUFBSSxDQUFDLGNBQWMsR0FBSyxvQkFBb0IsRUFBRyxDQUFDLGtCQUFNLG9CQUFvQixDQUFFLENBQUM7UUFDakksSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDO0lBQzlFLENBQUM7Ozs7SUFFRCxvQ0FBVTs7O0lBQVY7UUFDRSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxrQ0FBa0M7Ozs7Ozs7SUFDbEMsbURBQXlCOzs7Ozs7O0lBQXpCLFVBQTBCLEtBQVksRUFBRSxJQUFhO1FBQ25ELElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLE9BQUEsRUFBRSxJQUFJLE1BQUEsRUFBRSxDQUFDLENBQUM7SUFDMUQsQ0FBQzs7Ozs7SUFFRCwrQ0FBcUI7Ozs7SUFBckIsVUFBc0IsTUFBeUI7UUFDN0MsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNuQyxJQUFJLENBQUMsZUFBZSxHQUFHLE1BQU0sQ0FBQztJQUNoQyxDQUFDOzs7Ozs7SUFFRCx1Q0FBYTs7Ozs7SUFBYixVQUFjLFVBQWtCLEVBQUUsZUFBeUI7UUFDekQsdUJBQXVCO1FBQ3ZCLElBQUksVUFBVTtZQUNaLFVBQVUsQ0FBQyxNQUFNO1lBQ2pCLGVBQWUsQ0FBQyxNQUFNO1lBQ3RCLElBQUksQ0FBQyxnQkFBZ0I7WUFDckIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsRUFBRSxlQUFlLENBQUMsRUFBRTs7Z0JBQ2hELFdBQVcsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsVUFBVSxFQUFFLGVBQWUsQ0FBQztZQUN2RSxJQUFJLENBQUMsOEJBQThCLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDakQsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1NBQ25CO0lBQ0gsQ0FBQzs7Ozs7O0lBRUQsNENBQWtCOzs7OztJQUFsQixVQUFtQixHQUFzQixFQUFFLFVBQW9CO1FBQzdELHlDQUF5QztRQUN6QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRTtZQUMxQyxJQUFJLEdBQUcsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFFLENBQUMsQ0FBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUN4QyxPQUFPLElBQUksQ0FBQzthQUNiO1NBQ0Y7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7Ozs7OztJQUVELDJDQUFpQjs7Ozs7SUFBakIsVUFBa0IsR0FBc0IsRUFBRSxVQUFvQjs7WUFDdEQsR0FBRyxHQUFHLElBQUksTUFBTSxDQUFDLE1BQUksVUFBVSxDQUFDLElBQUksRUFBRSxNQUFHLENBQUM7O1lBQzFDLEtBQUssR0FBRyxDQUFDLG1CQUFBLEdBQUcsRUFBVSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU07Ozs7UUFBQyxVQUFBLEtBQUssSUFBSSxPQUFBLEtBQUssRUFBTCxDQUFLLEVBQUM7UUFDL0QsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDcEMsQ0FBQzs7OztJQUVELHNEQUE0Qjs7O0lBQTVCO1FBQUEsaUJBZUM7O1lBZE8sb0JBQW9COzs7UUFBRzs7Z0JBQ3JCLGVBQWUsR0FBRyxLQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSTs7OztZQUFDLFVBQUEsSUFBSSxJQUFJLE9BQUEsS0FBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUksQ0FBQyxtQkFBbUIsQ0FBRSxDQUFDLENBQUUsQ0FBQyxFQUE3RCxDQUE2RCxFQUFDO1lBQzdILEtBQUksQ0FBQyxxQkFBcUIsQ0FBQyxlQUFlLElBQUksSUFBSSxDQUFDLENBQUM7UUFDdEQsQ0FBQyxDQUFBO1FBQ0QsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3hCLElBQ0UsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSTs7OztZQUFDLFVBQUEsSUFBSSxJQUFJLE9BQUEsS0FBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLEVBQTVELENBQTRELEVBQUM7Z0JBQ3JHLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUk7Ozs7Z0JBQUMsVUFBQSxJQUFJLElBQUksT0FBQSxLQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxLQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxFQUFwRCxDQUFvRCxFQUFDLEVBQzVGO2dCQUNBLG9CQUFvQixFQUFFLENBQUM7YUFDeEI7U0FDRjthQUFNO1lBQ0wsb0JBQW9CLEVBQUUsQ0FBQztTQUN4QjtJQUNILENBQUM7Ozs7OztJQUVELDhDQUFvQjs7Ozs7SUFBcEIsVUFBcUIsdUJBQTRDLEVBQUUsNEJBQXNEO1FBQ3ZILElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsRUFBRSx1QkFBdUIseUJBQUEsRUFBRSw0QkFBNEIsOEJBQUEsRUFBRSxDQUFDLENBQUM7SUFDNUYsQ0FBQzs7Ozs7SUFFRCwyQ0FBaUI7Ozs7SUFBakIsVUFBa0IsS0FBYTtRQUM3QixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNuQyxDQUFDOzs7OztJQUVELHdEQUE4Qjs7OztJQUE5QixVQUErQixXQUFxQjtRQUFwRCxpQkFlQzs7WUFkTyxtQkFBbUIsb0JBQVEsSUFBSSxDQUFDLG1CQUFtQixDQUFFOztZQUNyRCxzQkFBc0IsR0FBRyxJQUFJLENBQUMsMEJBQTBCO2FBQzdELE1BQU07Ozs7UUFBQyxVQUFBLElBQUksSUFBSSxPQUFBLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUF4QyxDQUF3QyxFQUFDO2FBQ3hELEdBQUc7Ozs7UUFBQyxVQUFBLElBQUksSUFBSSxPQUFBLElBQUksQ0FBQyxPQUFPLEVBQVosQ0FBWSxFQUFDO2FBQ3pCLE1BQU07Ozs7UUFBQyxVQUFBLElBQUksSUFBSSxPQUFBLENBQUMsUUFBUSxDQUFDLEtBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJOzs7O1FBQUMsVUFBQSxDQUFDLElBQUksT0FBQSxLQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBekIsQ0FBeUIsRUFBQyxDQUFDLEVBQXhFLENBQXdFLEVBQUM7UUFDekYsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ3ZCLElBQUksQ0FBQyx5QkFBeUIsa0JBQU0sbUJBQW1CLEVBQUssc0JBQXNCLEdBQUksSUFBSSxDQUFDLENBQUM7U0FDN0Y7YUFBTTs7Z0JBQ0Msd0JBQXdCLEdBQUcsV0FBVztpQkFDM0MsTUFBTTs7OztZQUFDLFVBQUEsS0FBSyxJQUFJLE9BQUEsS0FBSSxDQUFDLDBCQUEwQjtpQkFDN0MsR0FBRzs7OztZQUFDLFVBQUEsSUFBSSxJQUFJLE9BQUEsSUFBSSxDQUFDLE9BQU8sRUFBWixDQUFZLEVBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBRGpDLENBQ2lDLEVBQ2pEO1lBQ0QsSUFBSSxDQUFDLHlCQUF5QixrQkFBTSxtQkFBbUIsRUFBSyxzQkFBc0IsRUFBSyx3QkFBd0IsR0FBSSxJQUFJLENBQUMsQ0FBQztTQUMxSDtJQUNILENBQUM7Ozs7O0lBRUQsbUNBQVM7Ozs7SUFBVCxVQUFVLENBQWdCO1FBQTFCLGlCQTZDQzs7WUE1Q08sT0FBTyxHQUFHLENBQUMsQ0FBQyxPQUFPOztZQUNuQixXQUFXLEdBQUcsbUJBQUEsQ0FBQyxDQUFDLE1BQU0sRUFBb0I7O1lBQzFDLG1DQUFtQyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNOzs7O1FBQUMsVUFBQSxJQUFJLElBQUksT0FBQSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQWhCLENBQWdCLEVBQUM7O1lBQ2hHLGNBQWMsR0FBRyxtQ0FBbUMsQ0FBQyxTQUFTOzs7O1FBQUMsVUFBQSxJQUFJLElBQUksT0FBQSxJQUFJLEtBQUssS0FBSSxDQUFDLGVBQWUsRUFBN0IsQ0FBNkIsRUFBQztRQUMzRyxRQUFRLE9BQU8sRUFBRTtZQUNmLEtBQUssUUFBUTtnQkFDWCxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7O29CQUNiLFFBQVEsR0FBRyxjQUFjLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxtQ0FBbUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO2dCQUM3RyxJQUFJLENBQUMscUJBQXFCLENBQUMsbUNBQW1DLENBQUUsUUFBUSxDQUFFLENBQUMsQ0FBQztnQkFDNUUsTUFBTTtZQUNSLEtBQUssVUFBVTtnQkFDYixDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7O29CQUNiLFNBQVMsR0FBRyxjQUFjLEdBQUcsbUNBQW1DLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzVHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxtQ0FBbUMsQ0FBRSxTQUFTLENBQUUsQ0FBQyxDQUFDO2dCQUM3RSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUU7b0JBQ2hDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7aUJBQ3pCO2dCQUNELE1BQU07WUFDUixLQUFLLEtBQUs7Z0JBQ1IsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUNuQixJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7b0JBQ2IsSUFBSSxJQUFJLENBQUMsZUFBZSxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLEVBQUU7d0JBQzVELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO3FCQUN4QztpQkFDRjtxQkFBTTtvQkFDTCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUN6QjtnQkFDRCxNQUFNO1lBQ1IsS0FBSyxTQUFTO2dCQUNaLElBQUksSUFBSSxDQUFDLGdCQUFnQixJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsMEJBQTBCLENBQUMsTUFBTSxFQUFFO29CQUN6RixDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7b0JBQ25CLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsMEJBQTBCLENBQUUsSUFBSSxDQUFDLDBCQUEwQixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUUsQ0FBQyxDQUFDO2lCQUM3RztnQkFDRCxNQUFNO1lBQ1IsS0FBSyxLQUFLO2dCQUNSLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRTtvQkFDaEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDeEIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO2lCQUN4QjtnQkFDRCxNQUFNO1lBQ1IsS0FBSyxHQUFHO2dCQUNOLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3pCLE1BQU07U0FDVDtJQUNILENBQUM7SUFFRCxrQ0FBa0M7Ozs7OztJQUNsQyxpREFBdUI7Ozs7OztJQUF2QixVQUF3QixNQUF5QjtRQUFqRCxpQkFPQztRQU5DLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFO1lBQ3RDLE9BQU87U0FDUjs7WUFDSyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTTs7OztRQUFDLFVBQUEsSUFBSSxJQUFJLE9BQUEsQ0FBQyxLQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQXZDLENBQXVDLEVBQUM7UUFDNUcsSUFBSSxDQUFDLHlCQUF5QixDQUFDLG1CQUFtQixFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzFELElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUNwQixDQUFDOzs7OztJQUVELHNDQUFZOzs7O0lBQVosVUFBYSxLQUFjO1FBQ3pCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFCLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO0lBQ3BCLENBQUM7Ozs7SUFFRCwrQkFBSzs7O0lBQUw7UUFDRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxzQkFBSSx5Q0FBWTs7OztRQUFoQjtZQUNFLE9BQU8sSUFBSSxDQUFDLElBQUksS0FBSyxTQUFTLENBQUM7UUFDakMsQ0FBQzs7O09BQUE7SUFFRCxzQkFBSSx1Q0FBVTs7OztRQUFkO1lBQ0UsT0FBTyxJQUFJLENBQUMsSUFBSSxLQUFLLE1BQU0sQ0FBQztRQUM5QixDQUFDOzs7T0FBQTtJQUVELHNCQUFJLDJDQUFjOzs7O1FBQWxCO1lBQ0UsT0FBTyxJQUFJLENBQUMsSUFBSSxLQUFLLFVBQVUsQ0FBQztRQUNsQyxDQUFDOzs7T0FBQTtJQUVELHNCQUFJLDZDQUFnQjs7OztRQUFwQjtZQUNFLE9BQU8sSUFBSSxDQUFDLElBQUksS0FBSyxNQUFNLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxVQUFVLENBQUM7UUFDMUQsQ0FBQzs7O09BQUE7O2dCQTNXRixVQUFVOztJQTRXWCxzQkFBQztDQUFBLEFBNVdELElBNFdDO1NBM1dZLGVBQWU7OztJQUUxQiwrQ0FBNEI7O0lBQzVCLHVDQUFxQjs7SUFDckIsdUNBQWtEOztJQUNsRCwrQkFBa0Q7O0lBQ2xELDJDQUE0Qjs7SUFDNUIsbUNBQWlCOztJQUVqQixzQ0FBOEM7Ozs7O0lBRzlDLHVEQUdHOzs7OztJQUVILCtDQU1HOzs7OztJQUVILDBDQUEwRDs7Ozs7SUFDMUQsK0NBQXVEOzs7OztJQUN2RCxtQ0FBMEM7Ozs7O0lBQzFDLG9DQUFrQzs7Ozs7SUFDbEMsK0JBQXFCOztJQUNyQixzQ0FBcUM7O0lBQ3JDLHNDQUFpQjs7SUFDakIseUNBQXVCOztJQUV2QixnQ0FJRTs7SUFDRiwwQ0FBbUM7O0lBQ25DLDJDQUEyRDs7SUFDM0QsK0NBQXVGOztJQUN2Rix1Q0FjRTs7SUFDRix1Q0FXRTs7SUFFRiw4Q0FBZ0M7O0lBRWhDLCtDQUErQzs7SUFFL0MsMENBQTBDOztJQUUxQyxxREFBcUQ7O0lBRXJELGtEQUFrRDs7SUFDbEQsdURBQTREOztJQUU1RCx5Q0FBa0M7O0lBRWxDLHFEQUFxRDs7SUFFckQseUNBZVc7O0lBQ1gsaUNBU0UiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCQUNLU1BBQ0UsIERPV05fQVJST1csIEVOVEVSLCBTUEFDRSwgVEFCLCBVUF9BUlJPVyB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9rZXljb2Rlcyc7XG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBtZXJnZSwgQmVoYXZpb3JTdWJqZWN0LCBSZXBsYXlTdWJqZWN0LCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBtYXAsIHNoYXJlLCBza2lwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBpc05vdE5pbCB9IGZyb20gJy4uL2NvcmUvdXRpbCc7XG5pbXBvcnQgeyBOek9wdGlvbkdyb3VwQ29tcG9uZW50IH0gZnJvbSAnLi9uei1vcHRpb24tZ3JvdXAuY29tcG9uZW50JztcbmltcG9ydCB7IE56T3B0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi9uei1vcHRpb24uY29tcG9uZW50JztcbmltcG9ydCB7IGRlZmF1bHRGaWx0ZXJPcHRpb24sIE56RmlsdGVyT3B0aW9uUGlwZSwgVEZpbHRlck9wdGlvbiB9IGZyb20gJy4vbnotb3B0aW9uLnBpcGUnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTnpTZWxlY3RTZXJ2aWNlIHtcbiAgLy8gSW5wdXQgcGFyYW1zXG4gIGF1dG9DbGVhclNlYXJjaFZhbHVlID0gdHJ1ZTtcbiAgc2VydmVyU2VhcmNoID0gZmFsc2U7XG4gIGZpbHRlck9wdGlvbjogVEZpbHRlck9wdGlvbiA9IGRlZmF1bHRGaWx0ZXJPcHRpb247XG4gIG1vZGU6ICdkZWZhdWx0JyB8ICdtdWx0aXBsZScgfCAndGFncycgPSAnZGVmYXVsdCc7XG4gIG1heE11bHRpcGxlQ291bnQgPSBJbmZpbml0eTtcbiAgZGlzYWJsZWQgPSBmYWxzZTtcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWFueVxuICBjb21wYXJlV2l0aCA9IChvMTogYW55LCBvMjogYW55KSA9PiBvMSA9PT0gbzI7XG4gIC8vIHNlbGVjdGVkVmFsdWVDaGFuZ2VkIHNob3VsZCBlbWl0IG5nTW9kZWxDaGFuZ2Ugb3Igbm90XG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1hbnlcbiAgcHJpdmF0ZSBsaXN0T2ZTZWxlY3RlZFZhbHVlV2l0aEVtaXQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDx7IHZhbHVlOiBhbnlbXSwgZW1pdDogYm9vbGVhbiB9Pih7XG4gICAgdmFsdWU6IFtdLFxuICAgIGVtaXQgOiBmYWxzZVxuICB9KTtcbiAgLy8gQ29udGVudENoaWxkcmVuIENoYW5nZVxuICBwcml2YXRlIG1hcE9mVGVtcGxhdGVPcHRpb24kID0gbmV3IEJlaGF2aW9yU3ViamVjdDx7XG4gICAgbGlzdE9mTnpPcHRpb25Db21wb25lbnQ6IE56T3B0aW9uQ29tcG9uZW50W10sXG4gICAgbGlzdE9mTnpPcHRpb25Hcm91cENvbXBvbmVudDogTnpPcHRpb25Hcm91cENvbXBvbmVudFtdXG4gIH0+KHtcbiAgICBsaXN0T2ZOek9wdGlvbkNvbXBvbmVudCAgICAgOiBbXSxcbiAgICBsaXN0T2ZOek9wdGlvbkdyb3VwQ29tcG9uZW50OiBbXVxuICB9KTtcbiAgLy8gc2VhcmNoVmFsdWUgQ2hhbmdlXG4gIHByaXZhdGUgc2VhcmNoVmFsdWVSYXckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KCcnKTtcbiAgcHJpdmF0ZSBsaXN0T2ZGaWx0ZXJlZE9wdGlvbjogTnpPcHRpb25Db21wb25lbnRbXSA9IFtdO1xuICBwcml2YXRlIG9wZW5SYXckID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcbiAgcHJpdmF0ZSBjaGVja1JhdyQgPSBuZXcgU3ViamVjdCgpO1xuICBwcml2YXRlIG9wZW4gPSBmYWxzZTtcbiAgY2xlYXJJbnB1dCQgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuICBzZWFyY2hWYWx1ZSA9ICcnO1xuICBpc1Nob3dOb3RGb3VuZCA9IGZhbHNlO1xuICAvLyBvcGVuXG4gIG9wZW4kID0gdGhpcy5vcGVuUmF3JC5waXBlKFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmUoKSxcbiAgICB0YXAoKCkgPT4gdGhpcy5jbGVhcklucHV0KCkpXG4gICk7XG4gIGFjdGl2YXRlZE9wdGlvbjogTnpPcHRpb25Db21wb25lbnQ7XG4gIGFjdGl2YXRlZE9wdGlvbiQgPSBuZXcgUmVwbGF5U3ViamVjdDxOek9wdGlvbkNvbXBvbmVudD4oMSk7XG4gIGxpc3RPZlNlbGVjdGVkVmFsdWUkID0gdGhpcy5saXN0T2ZTZWxlY3RlZFZhbHVlV2l0aEVtaXQkLnBpcGUobWFwKGRhdGEgPT4gZGF0YS52YWx1ZSkpO1xuICBtb2RlbENoYW5nZSQgPSB0aGlzLmxpc3RPZlNlbGVjdGVkVmFsdWVXaXRoRW1pdCQucGlwZShcbiAgICBmaWx0ZXIoaXRlbSA9PiBpdGVtLmVtaXQpLFxuICAgIG1hcChkYXRhID0+IHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkTGlzdCA9IGRhdGEudmFsdWU7XG4gICAgICBsZXQgbW9kZWxWYWx1ZSA9IG51bGw7XG4gICAgICBpZiAodGhpcy5pc1NpbmdsZU1vZGUpIHtcbiAgICAgICAgaWYgKHNlbGVjdGVkTGlzdC5sZW5ndGgpIHtcbiAgICAgICAgICBtb2RlbFZhbHVlID0gc2VsZWN0ZWRMaXN0WyAwIF07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1vZGVsVmFsdWUgPSBzZWxlY3RlZExpc3Q7XG4gICAgICB9XG4gICAgICByZXR1cm4gbW9kZWxWYWx1ZTtcbiAgICB9KVxuICApO1xuICBzZWFyY2hWYWx1ZSQgPSB0aGlzLnNlYXJjaFZhbHVlUmF3JC5waXBlKFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2tpcCgxKSxcbiAgICBzaGFyZSgpLFxuICAgIHRhcCgodmFsdWUpID0+IHtcbiAgICAgIHRoaXMuc2VhcmNoVmFsdWUgPSB2YWx1ZTtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICB0aGlzLnVwZGF0ZUFjdGl2YXRlZE9wdGlvbih0aGlzLmxpc3RPZkZpbHRlcmVkT3B0aW9uWyAwIF0pO1xuICAgICAgfVxuICAgICAgdGhpcy51cGRhdGVMaXN0T2ZGaWx0ZXJlZE9wdGlvbigpO1xuICAgIH0pXG4gICk7XG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1hbnlcbiAgbGlzdE9mU2VsZWN0ZWRWYWx1ZTogYW55W10gPSBbXTtcbiAgLy8gZmxhdCBWaWV3Q2hpbGRyZW5cbiAgbGlzdE9mVGVtcGxhdGVPcHRpb246IE56T3B0aW9uQ29tcG9uZW50W10gPSBbXTtcbiAgLy8gdGFnIG9wdGlvblxuICBsaXN0T2ZUYWdPcHRpb246IE56T3B0aW9uQ29tcG9uZW50W10gPSBbXTtcbiAgLy8gdGFnIG9wdGlvbiBjb25jYXQgdGVtcGxhdGUgb3B0aW9uXG4gIGxpc3RPZlRhZ0FuZFRlbXBsYXRlT3B0aW9uOiBOek9wdGlvbkNvbXBvbmVudFtdID0gW107XG4gIC8vIFZpZXdDaGlsZHJlblxuICBsaXN0T2ZOek9wdGlvbkNvbXBvbmVudDogTnpPcHRpb25Db21wb25lbnRbXSA9IFtdO1xuICBsaXN0T2ZOek9wdGlvbkdyb3VwQ29tcG9uZW50OiBOek9wdGlvbkdyb3VwQ29tcG9uZW50W10gPSBbXTtcbiAgLy8gY2xpY2sgb3IgZW50ZXIgYWRkIHRhZyBvcHRpb25cbiAgYWRkZWRUYWdPcHRpb246IE56T3B0aW9uQ29tcG9uZW50O1xuICAvLyBkaXNwbGF5IGluIHRvcCBjb250cm9sXG4gIGxpc3RPZkNhY2hlZFNlbGVjdGVkT3B0aW9uOiBOek9wdGlvbkNvbXBvbmVudFtdID0gW107XG4gIC8vIHNlbGVjdGVkIHZhbHVlIG9yIFZpZXdDaGlsZHJlbiBjaGFuZ2VcbiAgdmFsdWVPck9wdGlvbiQgPSBjb21iaW5lTGF0ZXN0KHRoaXMubGlzdE9mU2VsZWN0ZWRWYWx1ZSQsIHRoaXMubWFwT2ZUZW1wbGF0ZU9wdGlvbiQpLnBpcGUoXG4gICAgdGFwKGRhdGEgPT4ge1xuICAgICAgdGhpcy5saXN0T2ZTZWxlY3RlZFZhbHVlID0gZGF0YVsgMCBdO1xuICAgICAgdGhpcy5saXN0T2ZOek9wdGlvbkNvbXBvbmVudCA9IGRhdGFbIDEgXS5saXN0T2ZOek9wdGlvbkNvbXBvbmVudDtcbiAgICAgIHRoaXMubGlzdE9mTnpPcHRpb25Hcm91cENvbXBvbmVudCA9IGRhdGFbIDEgXS5saXN0T2ZOek9wdGlvbkdyb3VwQ29tcG9uZW50O1xuICAgICAgdGhpcy5saXN0T2ZUZW1wbGF0ZU9wdGlvbiA9IHRoaXMubGlzdE9mTnpPcHRpb25Db21wb25lbnQuY29uY2F0KFxuICAgICAgICB0aGlzLmxpc3RPZk56T3B0aW9uR3JvdXBDb21wb25lbnQucmVkdWNlKFxuICAgICAgICAgIChwcmUsIGN1cikgPT4gWyAuLi5wcmUsIC4uLmN1ci5saXN0T2ZOek9wdGlvbkNvbXBvbmVudC50b0FycmF5KCkgXSwgW11cbiAgICAgICAgKVxuICAgICAgKTtcbiAgICAgIHRoaXMudXBkYXRlTGlzdE9mVGFnT3B0aW9uKCk7XG4gICAgICB0aGlzLnVwZGF0ZUxpc3RPZkZpbHRlcmVkT3B0aW9uKCk7XG4gICAgICB0aGlzLnJlc2V0QWN0aXZhdGVkT3B0aW9uSWZOZWVkZWQoKTtcbiAgICAgIHRoaXMudXBkYXRlTGlzdE9mQ2FjaGVkT3B0aW9uKCk7XG4gICAgfSksXG4gICAgc2hhcmUoKSk7XG4gIGNoZWNrJCA9IG1lcmdlKFxuICAgIHRoaXMuY2hlY2tSYXckLFxuICAgIHRoaXMudmFsdWVPck9wdGlvbiQsXG4gICAgdGhpcy5zZWFyY2hWYWx1ZSQsXG4gICAgdGhpcy5hY3RpdmF0ZWRPcHRpb24kLFxuICAgIHRoaXMub3BlbiQsXG4gICAgdGhpcy5tb2RlbENoYW5nZSRcbiAgKS5waXBlKFxuICAgIHNoYXJlKClcbiAgKTtcblxuICBjbGlja09wdGlvbihvcHRpb246IE56T3B0aW9uQ29tcG9uZW50KTogdm9pZCB7XG4gICAgLyoqIHVwZGF0ZSBsaXN0T2ZTZWxlY3RlZE9wdGlvbiAtPiB1cGRhdGUgbGlzdE9mU2VsZWN0ZWRWYWx1ZSAtPiBuZXh0IGxpc3RPZlNlbGVjdGVkVmFsdWUkICoqL1xuICAgIGlmICghb3B0aW9uLm56RGlzYWJsZWQpIHtcbiAgICAgIHRoaXMudXBkYXRlQWN0aXZhdGVkT3B0aW9uKG9wdGlvbik7XG4gICAgICBsZXQgbGlzdE9mU2VsZWN0ZWRWYWx1ZSA9IFsgLi4udGhpcy5saXN0T2ZTZWxlY3RlZFZhbHVlIF07XG4gICAgICBpZiAodGhpcy5pc011bHRpcGxlT3JUYWdzKSB7XG4gICAgICAgIGNvbnN0IHRhcmdldFZhbHVlID0gbGlzdE9mU2VsZWN0ZWRWYWx1ZS5maW5kKG8gPT4gdGhpcy5jb21wYXJlV2l0aChvLCBvcHRpb24ubnpWYWx1ZSkpO1xuICAgICAgICBpZiAoaXNOb3ROaWwodGFyZ2V0VmFsdWUpKSB7XG4gICAgICAgICAgbGlzdE9mU2VsZWN0ZWRWYWx1ZS5zcGxpY2UobGlzdE9mU2VsZWN0ZWRWYWx1ZS5pbmRleE9mKHRhcmdldFZhbHVlKSwgMSk7XG4gICAgICAgICAgdGhpcy51cGRhdGVMaXN0T2ZTZWxlY3RlZFZhbHVlKGxpc3RPZlNlbGVjdGVkVmFsdWUsIHRydWUpO1xuICAgICAgICB9IGVsc2UgaWYgKGxpc3RPZlNlbGVjdGVkVmFsdWUubGVuZ3RoIDwgdGhpcy5tYXhNdWx0aXBsZUNvdW50KSB7XG4gICAgICAgICAgbGlzdE9mU2VsZWN0ZWRWYWx1ZS5wdXNoKG9wdGlvbi5uelZhbHVlKTtcbiAgICAgICAgICB0aGlzLnVwZGF0ZUxpc3RPZlNlbGVjdGVkVmFsdWUobGlzdE9mU2VsZWN0ZWRWYWx1ZSwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoIXRoaXMuY29tcGFyZVdpdGgobGlzdE9mU2VsZWN0ZWRWYWx1ZVsgMCBdLCBvcHRpb24ubnpWYWx1ZSkpIHtcbiAgICAgICAgbGl