UNPKG

ng-zorro-antd

Version:

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

377 lines 34.9 kB
/** * @fileoverview added by tsickle * Generated from: select-top-control.component.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { __read, __spread } from "tslib"; /** * @license * Copyright Alibaba.com All Rights Reserved. * * Use of this source code is governed by an MIT-style license that can be * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE */ import { BACKSPACE } from '@angular/cdk/keycodes'; import { ChangeDetectionStrategy, Component, EventEmitter, Host, Input, Optional, Output, ViewChild, ViewEncapsulation } from '@angular/core'; import { zoomMotion } from 'ng-zorro-antd/core/animation'; import { NzNoAnimationDirective } from 'ng-zorro-antd/core/no-animation'; import { NzSelectSearchComponent } from './select-search.component'; var NzSelectTopControlComponent = /** @class */ (function () { function NzSelectTopControlComponent(noAnimation) { this.noAnimation = noAnimation; this.showSearch = false; this.placeHolder = null; this.open = false; this.maxTagCount = Infinity; this.autofocus = false; this.disabled = false; this.mode = 'default'; this.customTemplate = null; this.maxTagPlaceholder = null; this.removeIcon = null; this.listOfTopItem = []; this.tokenSeparators = []; this.tokenize = new EventEmitter(); this.inputValueChange = new EventEmitter(); this.animationEnd = new EventEmitter(); this.deleteItem = new EventEmitter(); this.openChange = new EventEmitter(); this.listOfSlicedItem = []; this.isShowPlaceholder = true; this.isShowSingleLabel = false; this.isComposing = false; this.inputValue = null; } /** * @return {?} */ NzSelectTopControlComponent.prototype.onHostClick = /** * @return {?} */ function () { if (!this.disabled) { this.openChange.next(!this.open); } }; /** * @param {?} e * @return {?} */ NzSelectTopControlComponent.prototype.onHostKeydown = /** * @param {?} e * @return {?} */ function (e) { /** @type {?} */ var inputValue = ((/** @type {?} */ (e.target))).value; if (e.keyCode === BACKSPACE && this.mode !== 'default' && !inputValue && this.listOfTopItem.length > 0) { e.preventDefault(); this.onDeleteItem(this.listOfTopItem[this.listOfTopItem.length - 1]); } }; /** * @return {?} */ NzSelectTopControlComponent.prototype.updateTemplateVariable = /** * @return {?} */ function () { /** @type {?} */ var isSelectedValueEmpty = this.listOfTopItem.length === 0; this.isShowPlaceholder = isSelectedValueEmpty && !this.isComposing && !this.inputValue; this.isShowSingleLabel = !isSelectedValueEmpty && !this.isComposing && !this.inputValue; }; /** * @param {?} isComposing * @return {?} */ NzSelectTopControlComponent.prototype.isComposingChange = /** * @param {?} isComposing * @return {?} */ function (isComposing) { this.isComposing = isComposing; this.updateTemplateVariable(); }; /** * @param {?} value * @return {?} */ NzSelectTopControlComponent.prototype.onInputValueChange = /** * @param {?} value * @return {?} */ function (value) { if (value !== this.inputValue) { this.inputValue = value; this.updateTemplateVariable(); this.inputValueChange.emit(value); this.tokenSeparate(value, this.tokenSeparators); } }; /** * @param {?} inputValue * @param {?} tokenSeparators * @return {?} */ NzSelectTopControlComponent.prototype.tokenSeparate = /** * @param {?} inputValue * @param {?} tokenSeparators * @return {?} */ function (inputValue, tokenSeparators) { /** @type {?} */ var 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; }); /** @type {?} */ var 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 __spread(new Set(array)); }); if (inputValue && inputValue.length && tokenSeparators.length && this.mode !== 'default' && includesSeparators(inputValue, tokenSeparators)) { /** @type {?} */ var listOfLabel = splitBySeparators(inputValue, tokenSeparators); this.tokenize.next(listOfLabel); } }; /** * @return {?} */ NzSelectTopControlComponent.prototype.clearInputValue = /** * @return {?} */ function () { if (this.nzSelectSearchComponent) { this.nzSelectSearchComponent.clearInputValue(); } }; /** * @return {?} */ NzSelectTopControlComponent.prototype.focus = /** * @return {?} */ function () { if (this.nzSelectSearchComponent) { this.nzSelectSearchComponent.focus(); } }; /** * @return {?} */ NzSelectTopControlComponent.prototype.blur = /** * @return {?} */ function () { if (this.nzSelectSearchComponent) { this.nzSelectSearchComponent.blur(); } }; /** * @param {?} _index * @param {?} option * @return {?} */ NzSelectTopControlComponent.prototype.trackValue = /** * @param {?} _index * @param {?} option * @return {?} */ function (_index, option) { return option.nzValue; }; /** * @param {?} item * @return {?} */ NzSelectTopControlComponent.prototype.onDeleteItem = /** * @param {?} item * @return {?} */ function (item) { if (!this.disabled && !item.nzDisabled) { this.deleteItem.next(item); } }; /** * @return {?} */ NzSelectTopControlComponent.prototype.onAnimationEnd = /** * @return {?} */ function () { this.animationEnd.next(); }; /** * @param {?} changes * @return {?} */ NzSelectTopControlComponent.prototype.ngOnChanges = /** * @param {?} changes * @return {?} */ function (changes) { var _this = this; var listOfTopItem = changes.listOfTopItem, maxTagCount = changes.maxTagCount, customTemplate = changes.customTemplate, maxTagPlaceholder = changes.maxTagPlaceholder; if (listOfTopItem) { this.updateTemplateVariable(); } if (listOfTopItem || maxTagCount || customTemplate || maxTagPlaceholder) { /** @type {?} */ var listOfSlicedItem = this.listOfTopItem.slice(0, this.maxTagCount).map((/** * @param {?} o * @return {?} */ function (o) { return { nzLabel: o.nzLabel, nzValue: o.nzValue, nzDisabled: o.nzDisabled, contentTemplateOutlet: _this.customTemplate, contentTemplateOutletContext: o }; })); if (this.listOfTopItem.length > this.maxTagCount) { /** @type {?} */ var exceededLabel = "+ " + (this.listOfTopItem.length - this.maxTagCount) + " ..."; /** @type {?} */ var listOfSelectedValue = this.listOfTopItem.map((/** * @param {?} item * @return {?} */ function (item) { return item.nzValue; })); /** @type {?} */ var exceededItem = { nzLabel: exceededLabel, nzValue: '$$__nz_exceeded_item', nzDisabled: true, contentTemplateOutlet: this.maxTagPlaceholder, contentTemplateOutletContext: listOfSelectedValue.slice(this.maxTagCount) }; listOfSlicedItem.push(exceededItem); } this.listOfSlicedItem = listOfSlicedItem; } }; NzSelectTopControlComponent.decorators = [ { type: Component, args: [{ selector: 'nz-select-top-control', exportAs: 'nzSelectTopControl', preserveWhitespaces: false, animations: [zoomMotion], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "\n <!--single mode-->\n <ng-container [ngSwitch]=\"mode\">\n <ng-container *ngSwitchCase=\"'default'\">\n <nz-select-item\n *ngIf=\"isShowSingleLabel\"\n [deletable]=\"false\"\n [disabled]=\"false\"\n [removeIcon]=\"removeIcon\"\n [label]=\"listOfTopItem[0].nzLabel\"\n [contentTemplateOutlet]=\"customTemplate\"\n [contentTemplateOutletContext]=\"listOfTopItem[0]\"\n ></nz-select-item>\n <nz-select-search\n [disabled]=\"disabled\"\n [value]=\"inputValue!\"\n [showInput]=\"open && showSearch\"\n [mirrorSync]=\"false\"\n [autofocus]=\"autofocus\"\n [focusTrigger]=\"open\"\n (isComposingChange)=\"isComposingChange($event)\"\n (valueChange)=\"onInputValueChange($event)\"\n ></nz-select-search>\n </ng-container>\n <ng-container *ngSwitchDefault>\n <!--multiple or tags mode-->\n <nz-select-item\n *ngFor=\"let item of listOfSlicedItem; trackBy: trackValue\"\n [@zoomMotion]\n [@.disabled]=\"noAnimation?.nzNoAnimation\"\n [nzNoAnimation]=\"noAnimation?.nzNoAnimation\"\n [removeIcon]=\"removeIcon\"\n [label]=\"item.nzLabel\"\n [disabled]=\"item.nzDisabled || disabled\"\n [contentTemplateOutlet]=\"item.contentTemplateOutlet\"\n [deletable]=\"true\"\n [contentTemplateOutletContext]=\"item.contentTemplateOutletContext\"\n (@zoomMotion.done)=\"onAnimationEnd()\"\n (delete)=\"onDeleteItem(item.contentTemplateOutletContext)\"\n >\n </nz-select-item>\n <nz-select-search\n [disabled]=\"disabled\"\n [value]=\"inputValue!\"\n [autofocus]=\"autofocus\"\n [showInput]=\"true\"\n [mirrorSync]=\"true\"\n [focusTrigger]=\"open\"\n (isComposingChange)=\"isComposingChange($event)\"\n (valueChange)=\"onInputValueChange($event)\"\n ></nz-select-search>\n </ng-container>\n </ng-container>\n <nz-select-placeholder *ngIf=\"isShowPlaceholder\" [placeholder]=\"placeHolder\"></nz-select-placeholder>\n ", host: { '[class.ant-select-selector]': 'true', '(click)': 'onHostClick()', '(keydown)': 'onHostKeydown($event)' } }] } ]; /** @nocollapse */ NzSelectTopControlComponent.ctorParameters = function () { return [ { type: NzNoAnimationDirective, decorators: [{ type: Host }, { type: Optional }] } ]; }; NzSelectTopControlComponent.propDecorators = { showSearch: [{ type: Input }], placeHolder: [{ type: Input }], open: [{ type: Input }], maxTagCount: [{ type: Input }], autofocus: [{ type: Input }], disabled: [{ type: Input }], mode: [{ type: Input }], customTemplate: [{ type: Input }], maxTagPlaceholder: [{ type: Input }], removeIcon: [{ type: Input }], listOfTopItem: [{ type: Input }], tokenSeparators: [{ type: Input }], tokenize: [{ type: Output }], inputValueChange: [{ type: Output }], animationEnd: [{ type: Output }], deleteItem: [{ type: Output }], openChange: [{ type: Output }], nzSelectSearchComponent: [{ type: ViewChild, args: [NzSelectSearchComponent,] }] }; return NzSelectTopControlComponent; }()); export { NzSelectTopControlComponent }; if (false) { /** @type {?} */ NzSelectTopControlComponent.prototype.showSearch; /** @type {?} */ NzSelectTopControlComponent.prototype.placeHolder; /** @type {?} */ NzSelectTopControlComponent.prototype.open; /** @type {?} */ NzSelectTopControlComponent.prototype.maxTagCount; /** @type {?} */ NzSelectTopControlComponent.prototype.autofocus; /** @type {?} */ NzSelectTopControlComponent.prototype.disabled; /** @type {?} */ NzSelectTopControlComponent.prototype.mode; /** @type {?} */ NzSelectTopControlComponent.prototype.customTemplate; /** @type {?} */ NzSelectTopControlComponent.prototype.maxTagPlaceholder; /** @type {?} */ NzSelectTopControlComponent.prototype.removeIcon; /** @type {?} */ NzSelectTopControlComponent.prototype.listOfTopItem; /** @type {?} */ NzSelectTopControlComponent.prototype.tokenSeparators; /** @type {?} */ NzSelectTopControlComponent.prototype.tokenize; /** @type {?} */ NzSelectTopControlComponent.prototype.inputValueChange; /** @type {?} */ NzSelectTopControlComponent.prototype.animationEnd; /** @type {?} */ NzSelectTopControlComponent.prototype.deleteItem; /** @type {?} */ NzSelectTopControlComponent.prototype.openChange; /** @type {?} */ NzSelectTopControlComponent.prototype.nzSelectSearchComponent; /** @type {?} */ NzSelectTopControlComponent.prototype.listOfSlicedItem; /** @type {?} */ NzSelectTopControlComponent.prototype.isShowPlaceholder; /** @type {?} */ NzSelectTopControlComponent.prototype.isShowSingleLabel; /** @type {?} */ NzSelectTopControlComponent.prototype.isComposing; /** @type {?} */ NzSelectTopControlComponent.prototype.inputValue; /** @type {?} */ NzSelectTopControlComponent.prototype.noAnimation; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LXRvcC1jb250cm9sLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLXpvcnJvLWFudGQvc2VsZWN0LyIsInNvdXJjZXMiOlsic2VsZWN0LXRvcC1jb250cm9sLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBUUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2xELE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixJQUFJLEVBQ0osS0FBSyxFQUVMLFFBQVEsRUFDUixNQUFNLEVBR04sU0FBUyxFQUNULGlCQUFpQixFQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDMUQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFekUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFHcEU7SUEwTEUscUNBQXVDLFdBQW9DO1FBQXBDLGdCQUFXLEdBQVgsV0FBVyxDQUF5QjtRQXJIbEUsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUNuQixnQkFBVyxHQUEyQyxJQUFJLENBQUM7UUFDM0QsU0FBSSxHQUFHLEtBQUssQ0FBQztRQUNiLGdCQUFXLEdBQVcsUUFBUSxDQUFDO1FBQy9CLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFDbEIsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUNqQixTQUFJLEdBQXFCLFNBQVMsQ0FBQztRQUNuQyxtQkFBYyxHQUE2RCxJQUFJLENBQUM7UUFDaEYsc0JBQWlCLEdBQW1ELElBQUksQ0FBQztRQUN6RSxlQUFVLEdBQWtDLElBQUksQ0FBQztRQUNqRCxrQkFBYSxHQUE0QixFQUFFLENBQUM7UUFDNUMsb0JBQWUsR0FBYSxFQUFFLENBQUM7UUFDckIsYUFBUSxHQUFHLElBQUksWUFBWSxFQUFZLENBQUM7UUFDeEMs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O2dDQUNMLEtBQUs7a0NBQ0wsS0FBSzsyQkFDTCxNQUFNO21DQUNOLE1BQU07K0JBQ04sTUFBTTs2QkFDTixNQUFNOzZCQUNOLE1BQU07MENBQ04sU0FBUyxTQUFDLHVCQUF1Qjs7SUFvSXBDLGtDQUFDO0NBQUEsQUExTkQsSUEwTkM7U0F0SlksMkJBQTJCOzs7SUFDdEMsaURBQTRCOztJQUM1QixrREFBb0U7O0lBQ3BFLDJDQUFzQjs7SUFDdEIsa0RBQXdDOztJQUN4QyxnREFBMkI7O0lBQzNCLCtDQUEwQjs7SUFDMUIsMkNBQTRDOztJQUM1QyxxREFBeUY7O0lBQ3pGLHdEQUFrRjs7SUFDbEYsaURBQTBEOztJQUMxRCxvREFBcUQ7O0lBQ3JELHNEQUF3Qzs7SUFDeEMsK0NBQTJEOztJQUMzRCx1REFBaUU7O0lBQ2pFLG1EQUEyRDs7SUFDM0QsaURBQTBFOztJQUMxRSxpREFBNEQ7O0lBQzVELDhEQUFzRjs7SUFDdEYsdURBQW9EOztJQUNwRCx3REFBeUI7O0lBQ3pCLHdEQUEwQjs7SUFDMUIsa0RBQW9COztJQUNwQixpREFBaUM7O0lBK0ZyQixrREFBK0QiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgQWxpYmFiYS5jb20gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2dpdGh1Yi5jb20vTkctWk9SUk8vbmctem9ycm8tYW50ZC9ibG9iL21hc3Rlci9MSUNFTlNFXG4gKi9cblxuaW1wb3J0IHsgQkFDS1NQQUNFIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2tleWNvZGVzJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdCxcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT3B0aW9uYWwsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB6b29tTW90aW9uIH0gZnJvbSAnbmctem9ycm8tYW50ZC9jb3JlL2FuaW1hdGlvbic7XG5pbXBvcnQgeyBOek5vQW5pbWF0aW9uRGlyZWN0aXZlIH0gZnJvbSAnbmctem9ycm8tYW50ZC9jb3JlL25vLWFuaW1hdGlvbic7XG5pbXBvcnQgeyBOelNhZmVBbnkgfSBmcm9tICduZy16b3Jyby1hbnRkL2NvcmUvdHlwZXMnO1xuaW1wb3J0IHsgTnpTZWxlY3RTZWFyY2hDb21wb25lbnQgfSBmcm9tICcuL3NlbGVjdC1zZWFyY2guY29tcG9uZW50JztcbmltcG9ydCB7IE56U2VsZWN0SXRlbUludGVyZmFjZSwgTnpTZWxlY3RNb2RlVHlwZSwgTnpTZWxlY3RUb3BDb250cm9sSXRlbVR5cGUgfSBmcm9tICcuL3NlbGVjdC50eXBlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ256LXNlbGVjdC10b3AtY29udHJvbCcsXG4gIGV4cG9ydEFzOiAnbnpTZWxlY3RUb3BDb250cm9sJyxcbiAgcHJlc2VydmVXaGl0ZXNwYWNlczogZmFsc2UsXG4gIGFuaW1hdGlvbnM6IFt6b29tTW90aW9uXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIHRlbXBsYXRlOiBgXG4gICAgPCEtLXNpbmdsZSBtb2RlLS0+XG4gICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwibW9kZVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2RlZmF1bHQnXCI+XG4gICAgICAgIDxuei1zZWxlY3QtaXRlbVxuICAgICAgICAgICpuZ0lmPVwiaXNTaG93U2luZ2xlTGFiZWxcIlxuICAgICAgICAgIFtkZWxldGFibGVdPVwiZmFsc2VcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJmYWxzZVwiXG4gICAgICAgICAgW3JlbW92ZUljb25dPVwicmVtb3ZlSWNvblwiXG4gICAgICAgICAgW2xhYmVsXT1cImxpc3RPZlRvcEl0ZW1bMF0ubnpMYWJlbFwiXG4gICAgICAgICAgW2NvbnRlbnRUZW1wbGF0ZU91dGxldF09XCJjdXN0b21UZW1wbGF0ZVwiXG4gICAgICAgICAgW2NvbnRlbnRUZW1wbGF0ZU91dGxldENvbnRleHRdPVwibGlzdE9mVG9wSXRlbVswXVwiXG4gICAgICAgID48L256LXNlbGVjdC1pdGVtPlxuICAgICAgICA8bnotc2VsZWN0LXNlYXJjaFxuICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgW3ZhbHVlXT1cImlucHV0VmFsdWUhXCJcbiAgICAgICAgICBbc2hvd0lucHV0XT1cIm9wZW4gJiYgc2hvd1NlYXJjaFwiXG4gICAgICAgICAgW21pcnJvclN5bmNdPVwiZmFsc2VcIlxuICAgICAgICAgIFthdXRvZm9jdXNdPVwiYXV0b2ZvY3VzXCJcbiAgICAgICAgICBbZm9jdXNUcmlnZ2VyXT1cIm9wZW5cIlxuICAgICAgICAgIChpc0NvbXBvc2luZ0NoYW5nZSk9XCJpc0NvbXBvc2luZ0NoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwib25JbnB1dFZhbHVlQ2hhbmdlKCRldmVudClcIlxuICAgICAgICA+PC9uei1zZWxlY3Qtc2VhcmNoPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaERlZmF1bHQ+XG4gICAgICAgIDwhLS1tdWx0aXBsZSBvciB0YWdzIG1vZGUtLT5cbiAgICAgICAgPG56LXNlbGVjdC1pdGVtXG4gICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgbGlzdE9mU2xpY2VkSXRlbTsgdHJhY2tCeTogdHJhY2tWYWx1ZVwiXG4gICAgICAgICAgW0B6b29tTW90aW9uXVxuICAgICAgICAgIFtALmRpc2FibGVkXT1cIm5vQW5pbWF0aW9uPy5uek5vQW5pbWF0aW9uXCJcbiAgICAgICAgICBbbnpOb0FuaW1hdGlvbl09XCJub0FuaW1hdGlvbj8ubnpOb0FuaW1hdGlvblwiXG4gICAgICAgICAgW3JlbW92ZUljb25dPVwicmVtb3ZlSWNvblwiXG4gICAgICAgICAgW2xhYmVsXT1cIml0ZW0ubnpMYWJlbFwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cIml0ZW0ubnpEaXNhYmxlZCB8fCBkaXNhYmxlZFwiXG4gICAgICAgICAgW2NvbnRlbnRUZW1wbGF0ZU91dGxldF09XCJpdGVtLmNvbnRlbnRUZW1wbGF0ZU91dGxldFwiXG4gICAgICAgICAgW2RlbGV0YWJsZV09XCJ0cnVlXCJcbiAgICAgICAgICBbY29udGVudFRlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJpdGVtLmNvbnRlbnRUZW1wbGF0ZU91dGxldENvbnRleHRcIlxuICAgICAgICAgIChAem9vbU1vdGlvbi5kb25lKT1cIm9uQW5pbWF0aW9uRW5kKClcIlxuICAgICAgICAgIChkZWxldGUpPVwib25EZWxldGVJdGVtKGl0ZW0uY29udGVudFRlbXBsYXRlT3V0bGV0Q29udGV4dClcIlxuICAgICAgICA+XG4gICAgICAgIDwvbnotc2VsZWN0LWl0ZW0+XG4gICAgICAgIDxuei1zZWxlY3Qtc2VhcmNoXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICBbdmFsdWVdPVwiaW5wdXRWYWx1ZSFcIlxuICAgICAgICAgIFthdXRvZm9jdXNdPVwiYXV0b2ZvY3VzXCJcbiAgICAgICAgICBbc2hvd0lucHV0XT1cInRydWVcIlxuICAgICAgICAgIFttaXJyb3JTeW5jXT1cInRydWVcIlxuICAgICAgICAgIFtmb2N1c1RyaWdnZXJdPVwib3BlblwiXG4gICAgICAgICAgKGlzQ29tcG9zaW5nQ2hhbmdlKT1cImlzQ29tcG9zaW5nQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJvbklucHV0VmFsdWVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgID48L256LXNlbGVjdC1zZWFyY2g+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bnotc2VsZWN0LXBsYWNlaG9sZGVyICpuZ0lmPVwiaXNTaG93UGxhY2Vob2xkZXJcIiBbcGxhY2Vob2xkZXJdPVwicGxhY2VIb2xkZXJcIj48L256LXNlbGVjdC1wbGFjZWhvbGRlcj5cbiAgYCxcbiAgaG9zdDoge1xuICAgICdbY2xhc3MuYW50LXNlbGVjdC1zZWxlY3Rvcl0nOiAndHJ1ZScsXG4gICAgJyhjbGljayknOiAnb25Ib3N0Q2xpY2soKScsXG4gICAgJyhrZXlkb3duKSc6ICdvbkhvc3RLZXlkb3duKCRldmVudCknXG4gIH1cbn0pXG5leHBvcnQgY2xhc3MgTnpTZWxlY3RUb3BDb250cm9sQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgc2hvd1NlYXJjaCA9IGZhbHNlO1xuICBASW5wdXQoKSBwbGFjZUhvbGRlcjogc3RyaW5nIHwgVGVtcGxhdGVSZWY8TnpTYWZlQW55PiB8IG51bGwgPSBudWxsO1xuICBASW5wdXQoKSBvcGVuID0gZmFsc2U7XG4gIEBJbnB1dCgpIG1heFRhZ0NvdW50OiBudW1iZXIgPSBJbmZpbml0eTtcbiAgQElucHV0KCkgYXV0b2ZvY3VzID0gZmFsc2U7XG4gIEBJbnB1dCgpIGRpc2FibGVkID0gZmFsc2U7XG4gIEBJbnB1dCgpIG1vZGU6IE56U2VsZWN0TW9kZVR5cGUgPSAnZGVmYXVsdCc7XG4gIEBJbnB1dCgpIGN1c3RvbVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjx7ICRpbXBsaWNpdDogTnpTZWxlY3RJdGVtSW50ZXJmYWNlIH0+IHwgbnVsbCA9IG51bGw7XG4gIEBJbnB1dCgpIG1heFRhZ1BsYWNlaG9sZGVyOiBUZW1wbGF0ZVJlZjx7ICRpbXBsaWNpdDogTnpTYWZlQW55W10gfT4gfCBudWxsID0gbnVsbDtcbiAgQElucHV0KCkgcmVtb3ZlSWNvbjogVGVtcGxhdGVSZWY8TnpTYWZlQW55PiB8IG51bGwgPSBudWxsO1xuICBASW5wdXQoKSBsaXN0T2ZUb3BJdGVtOiBOelNlbGVjdEl0ZW1JbnRlcmZhY2VbXSA9IFtdO1xuICBASW5wdXQoKSB0b2tlblNlcGFyYXRvcnM6IHN0cmluZ1tdID0gW107XG4gIEBPdXRwdXQoKSByZWFkb25seSB0b2tlbml6ZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nW10+KCk7XG4gIEBPdXRwdXQoKSByZWFkb25seSBpbnB1dFZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIEBPdXRwdXQoKSByZWFkb25seSBhbmltYXRpb25FbmQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSByZWFkb25seSBkZWxldGVJdGVtID0gbmV3IEV2ZW50RW1pdHRlcjxOelNlbGVjdEl0ZW1JbnRlcmZhY2U+KCk7XG4gIEBPdXRwdXQoKSByZWFkb25seSBvcGVuQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICBAVmlld0NoaWxkKE56U2VsZWN0U2VhcmNoQ29tcG9uZW50KSBuelNlbGVjdFNlYXJjaENvbXBvbmVudCE6IE56U2VsZWN0U2VhcmNoQ29tcG9uZW50O1xuICBsaXN0T2ZTbGljZWRJdGVtOiBOelNlbGVjdFRvcENvbnRyb2xJdGVtVHlwZVtdID0gW107XG4gIGlzU2hvd1BsYWNlaG9sZGVyID0gdHJ1ZTtcbiAgaXNTaG93U2luZ2xlTGFiZWwgPSBmYWxzZTtcbiAgaXNDb21wb3NpbmcgPSBmYWxzZTtcbiAgaW5wdXRWYWx1ZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgb25Ib3N0Q2xpY2soKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLm9wZW5DaGFuZ2UubmV4dCghdGhpcy5vcGVuKTtcbiAgICB9XG4gIH1cblxuICBvbkhvc3RLZXlkb3duKGU6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBpbnB1dFZhbHVlID0gKGUudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlO1xuICAgIGlmIChlLmtleUNvZGUgPT09IEJBQ0tTUEFDRSAmJiB0aGlzLm1vZGUgIT09ICdkZWZhdWx0JyAmJiAhaW5wdXRWYWx1ZSAmJiB0aGlzLmxpc3RPZlRvcEl0ZW0ubGVuZ3RoID4gMCkge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy5vbkRlbGV0ZUl0ZW0odGhpcy5saXN0T2ZUb3BJdGVtW3RoaXMubGlzdE9mVG9wSXRlbS5sZW5ndGggLSAxXSk7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlVGVtcGxhdGVWYXJpYWJsZSgpOiB2b2lkIHtcbiAgICBjb25zdCBpc1NlbGVjdGVkVmFsdWVFbXB0eSA9IHRoaXMubGlzdE9mVG9wSXRlbS5sZW5ndGggPT09IDA7XG4gICAgdGhpcy5pc1Nob3dQbGFjZWhvbGRlciA9IGlzU2VsZWN0ZWRWYWx1ZUVtcHR5ICYmICF0aGlzLmlzQ29tcG9zaW5nICYmICF0aGlzLmlucHV0VmFsdWU7XG4gICAgdGhpcy5pc1Nob3dTaW5nbGVMYWJlbCA9ICFpc1NlbGVjdGVkVmFsdWVFbXB0eSAmJiAhdGhpcy5pc0NvbXBvc2luZyAmJiAhdGhpcy5pbnB1dFZhbHVlO1xuICB9XG5cbiAgaXNDb21wb3NpbmdDaGFuZ2UoaXNDb21wb3Npbmc6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmlzQ29tcG9zaW5nID0gaXNDb21wb3Npbmc7XG4gICAgdGhpcy51cGRhdGVUZW1wbGF0ZVZhcmlhYmxlKCk7XG4gIH1cblxuICBvbklucHV0VmFsdWVDaGFuZ2UodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh2YWx1ZSAhPT0gdGhpcy5pbnB1dFZhbHVlKSB7XG4gICAgICB0aGlzLmlucHV0VmFsdWUgPSB2YWx1ZTtcbiAgICAgIHRoaXMudXBkYXRlVGVtcGxhdGVWYXJpYWJsZSgpO1xuICAgICAgdGhpcy5pbnB1dFZhbHVlQ2hhbmdlLmVtaXQodmFsdWUpO1xuICAgICAgdGhpcy50b2tlblNlcGFyYXRlKHZhbHVlLCB0aGlzLnRva2VuU2VwYXJhdG9ycyk7XG4gICAgfVxuICB9XG5cbiAgdG9rZW5TZXBhcmF0ZShpbnB1dFZhbHVlOiBzdHJpbmcsIHRva2VuU2VwYXJhdG9yczogc3RyaW5nW10pOiB2b2lkIHtcbiAgICBjb25zdCBpbmNsdWRlc1NlcGFyYXRvcnMgPSAoc3RyOiBzdHJpbmcgfCBzdHJpbmdbXSwgc2VwYXJhdG9yczogc3RyaW5nW10pOiBib29sZWFuID0+IHtcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpwcmVmZXItZm9yLW9mXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlcGFyYXRvcnMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKHN0ci5sYXN0SW5kZXhPZihzZXBhcmF0b3JzW2ldKSA+IDApIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG4gICAgY29uc3Qgc3BsaXRCeVNlcGFyYXRvcnMgPSAoc3RyOiBzdHJpbmcgfCBzdHJpbmdbXSwgc2VwYXJhdG9yczogc3RyaW5nW10pOiBzdHJpbmdbXSA9PiB7XG4gICAgICBjb25zdCByZWcgPSBuZXcgUmVnRXhwKGBbJHtzZXBhcmF0b3JzLmpvaW4oKX1dYCk7XG4gICAgICBjb25zdCBhcnJheSA9IChzdHIgYXMgc3RyaW5nKS5zcGxpdChyZWcpLmZpbHRlcih0b2tlbiA9PiB0b2tlbik7XG4gICAgICByZXR1cm4gWy4uLm5ldyBTZXQoYXJyYXkpXTtcbiAgICB9O1xuICAgIGlmIChcbiAgICAgIGlucHV0VmFsdWUgJiZcbiAgICAgIGlucHV0VmFsdWUubGVuZ3RoICYmXG4gICAgICB0b2tlblNlcGFyYXRvcnMubGVuZ3RoICYmXG4gICAgICB0aGlzLm1vZGUgIT09ICdkZWZhdWx0JyAmJlxuICAgICAgaW5jbHVkZXNTZXBhcmF0b3JzKGlucHV0VmFsdWUsIHRva2VuU2VwYXJhdG9ycylcbiAgICApIHtcbiAgICAgIGNvbnN0IGxpc3RPZkxhYmVsID0gc3BsaXRCeVNlcGFyYXRvcnMoaW5wdXRWYWx1ZSwgdG9rZW5TZXBhcmF0b3JzKTtcbiAgICAgIHRoaXMudG9rZW5pemUubmV4dChsaXN0T2ZMYWJlbCk7XG4gICAgfVxuICB9XG5cbiAgY2xlYXJJbnB1dFZhbHVlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm56U2VsZWN0U2VhcmNoQ29tcG9uZW50KSB7XG4gICAgICB0aGlzLm56U2VsZWN0U2VhcmNoQ29tcG9uZW50LmNsZWFySW5wdXRWYWx1ZSgpO1xuICAgIH1cbiAgfVxuXG4gIGZvY3VzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm56U2VsZWN0U2VhcmNoQ29tcG9uZW50KSB7XG4gICAgICB0aGlzLm56U2VsZWN0U2VhcmNoQ29tcG9uZW50LmZvY3VzKCk7XG4gICAgfVxuICB9XG5cbiAgYmx1cigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5uelNlbGVjdFNlYXJjaENvbXBvbmVudCkge1xuICAgICAgdGhpcy5uelNlbGVjdFNlYXJjaENvbXBvbmVudC5ibHVyKCk7XG4gICAgfVxuICB9XG5cbiAgdHJhY2tWYWx1ZShfaW5kZXg6IG51bWJlciwgb3B0aW9uOiBOelNlbGVjdFRvcENvbnRyb2xJdGVtVHlwZSk6IE56U2FmZUFueSB7XG4gICAgcmV0dXJuIG9wdGlvbi5uelZhbHVlO1xuICB9XG5cbiAgb25EZWxldGVJdGVtKGl0ZW06IE56U2VsZWN0SXRlbUludGVyZmFjZSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5kaXNhYmxlZCAmJiAhaXRlbS5uekRpc2FibGVkKSB7XG4gICAgICB0aGlzLmRlbGV0ZUl0ZW0ubmV4dChpdGVtKTtcbiAgICB9XG4gIH1cblxuICBvbkFuaW1hdGlvbkVuZCgpOiB2b2lkIHtcbiAgICB0aGlzLmFuaW1hdGlvbkVuZC5uZXh0KCk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihASG9zdCgpIEBPcHRpb25hbCgpIHB1YmxpYyBub0FuaW1hdGlvbj86IE56Tm9BbmltYXRpb25EaXJlY3RpdmUpIHt9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGNvbnN0IHsgbGlzdE9mVG9wSXRlbSwgbWF4VGFnQ291bnQsIGN1c3RvbVRlbXBsYXRlLCBtYXhUYWdQbGFjZWhvbGRlciB9ID0gY2hhbmdlcztcbiAgICBpZiAobGlzdE9mVG9wSXRlbSkge1xuICAgICAgdGhpcy51cGRhdGVUZW1wbGF0ZVZhcmlhYmxlKCk7XG4gICAgfVxuICAgIGlmIChsaXN0T2ZUb3BJdGVtIHx8IG1heFRhZ0NvdW50IHx8IGN1c3RvbVRlbXBsYXRlIHx8IG1heFRhZ1BsYWNlaG9sZGVyKSB7XG4gICAgICBjb25zdCBsaXN0T2ZTbGljZWRJdGVtOiBOelNlbGVjdFRvcENvbnRyb2xJdGVtVHlwZVtdID0gdGhpcy5saXN0T2ZUb3BJdGVtLnNsaWNlKDAsIHRoaXMubWF4VGFnQ291bnQpLm1hcChvID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBuekxhYmVsOiBvLm56TGFiZWwsXG4gICAgICAgICAgbnpWYWx1ZTogby5uelZhbHVlLFxuICAgICAgICAgIG56RGlzYWJsZWQ6IG8ubnpEaXNhYmxlZCxcbiAgICAgICAgICBjb250ZW50VGVtcGxhdGVPdXRsZXQ6IHRoaXMuY3VzdG9tVGVtcGxhdGUsXG4gICAgICAgICAgY29udGVudFRlbXBsYXRlT3V0bGV0Q29udGV4dDogb1xuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgICBpZiAodGhpcy5saXN0T2ZUb3BJdGVtLmxlbmd0aCA+IHRoaXMubWF4VGFnQ291bnQpIHtcbiAgICAgICAgY29uc3QgZXhjZWVkZWRMYWJlbCA9IGArICR7dGhpcy5saXN0T2ZUb3BJdGVtLmxlbmd0aCAtIHRoaXMubWF4VGFnQ291bnR9IC4uLmA7XG4gICAgICAgIGNvbnN0IGxpc3RPZlNlbGVjdGVkVmFsdWUgPSB0aGlzLmxpc3RPZlRvcEl0ZW0ubWFwKGl0ZW0gPT4gaXRlbS5uelZhbHVlKTtcbiAgICAgICAgY29uc3QgZXhjZWVkZWRJdGVtID0ge1xuICAgICAgICAgIG56TGFiZWw6IGV4Y2VlZGVkTGFiZWwsXG4gICAgICAgICAgbnpWYWx1ZTogJyQkX19uel9leGNlZWRlZF9pdGVtJyxcbiAgICAgICAgICBuekRpc2FibGVkOiB0cnVlLFxuICAgICAgICAgIGNvbnRlbnRUZW1wbGF0ZU91dGxldDogdGhpcy5tYXhUYWdQbGFjZWhvbGRlcixcbiAgICAgICAgICBjb250ZW50VGVtcGxhdGVPdXRsZXRDb250ZXh0OiBsaXN0T2ZTZWxlY3RlZFZhbHVlLnNsaWNlKHRoaXMubWF4VGFnQ291bnQpXG4gICAgICAgIH07XG4gICAgICAgIGxpc3RPZlNsaWNlZEl0ZW0ucHVzaChleGNlZWRlZEl0ZW0pO1xuICAgICAgfVxuICAgICAgdGhpcy5saXN0T2ZTbGljZWRJdGVtID0gbGlzdE9mU2xpY2VkSXRlbTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==