UNPKG

ng-zorro-antd-mobile

Version:

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

687 lines (686 loc) 44.5 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ import { Component, Input, Output, EventEmitter, ViewChild, HostBinding, Renderer2, ElementRef, forwardRef } from '@angular/core'; import { NG_VALUE_ACCESSOR } from '@angular/forms'; var InputItem = /** @class */ (function () { function InputItem(element, render) { this.element = element; this.render = render; this.prefixCls = 'am-input'; this.setFocus = {}; this.pattern = ''; this.autoFocus = false; this.inputType = 'text'; this._type = 'text'; this._defaultValue = ''; this._placeholder = ''; this._editable = true; this._disabled = false; this._clear = false; this._error = false; this._extra = ''; this._labelNumber = 5; this._updatePlaceholder = false; this._prefixListCls = 'am-list'; this._moneyKeyboardAlign = 'right'; this._focus = false; this._isClear = false; this.onChange = new EventEmitter(); this.onBlur = new EventEmitter(); this.onFocus = new EventEmitter(); this.onErrorClick = new EventEmitter(); this.onExtraClick = new EventEmitter(); this.clsItem = true; this.clsDisabled = this._disabled; this.clsError = this._error; this.clsFocus = this._focus; this.clsAndroid = this._focus; this._onChange = function (_) { }; this._el = element.nativeElement; } Object.defineProperty(InputItem.prototype, "type", { get: /** * @return {?} */ function () { return this._type; }, set: /** * @param {?} value * @return {?} */ function (value) { if (value && value.length > 0) { this.inputType = value; if (value === 'bankCard' || value === 'phone') { this._type = 'tel'; } else if (value === 'password') { this._type = 'password'; } else if (value === 'digit') { this._type = 'number'; } else if (value !== 'text' && value !== 'number') { this._type = value; } if (value === 'number') { this.pattern = '[0-9]*'; } } }, enumerable: true, configurable: true }); Object.defineProperty(InputItem.prototype, "value", { get: /** * @return {?} */ function () { return this._value; }, set: /** * @param {?} v * @return {?} */ function (v) { if (typeof v === undefined || v === null) { this._value = ''; } this._value = v; }, enumerable: true, configurable: true }); Object.defineProperty(InputItem.prototype, "defaultValue", { get: /** * @return {?} */ function () { return this._defaultValue; }, set: /** * @param {?} value * @return {?} */ function (value) { this._defaultValue = value; this._value = this._defaultValue; }, enumerable: true, configurable: true }); Object.defineProperty(InputItem.prototype, "placeholder", { get: /** * @return {?} */ function () { return this._placeholder; }, set: /** * @param {?} value * @return {?} */ function (value) { this._placeholder = value; }, enumerable: true, configurable: true }); Object.defineProperty(InputItem.prototype, "editable", { get: /** * @return {?} */ function () { return this._editable; }, set: /** * @param {?} value * @return {?} */ function (value) { this._editable = value; }, enumerable: true, configurable: true }); Object.defineProperty(InputItem.prototype, "disabled", { get: /** * @return {?} */ function () { return this._disabled; }, set: /** * @param {?} value * @return {?} */ function (value) { this._disabled = value; this.clsDisabled = value; }, enumerable: true, configurable: true }); Object.defineProperty(InputItem.prototype, "clear", { get: /** * @return {?} */ function () { return this._clear; }, set: /** * @param {?} value * @return {?} */ function (value) { this._clear = value; }, enumerable: true, configurable: true }); Object.defineProperty(InputItem.prototype, "maxLength", { get: /** * @return {?} */ function () { return this._maxLength; }, set: /** * @param {?} value * @return {?} */ function (value) { this._maxLength = value; }, enumerable: true, configurable: true }); Object.defineProperty(InputItem.prototype, "error", { get: /** * @return {?} */ function () { return this._error; }, set: /** * @param {?} value * @return {?} */ function (value) { this._error = value; this.clsError = value; }, enumerable: true, configurable: true }); Object.defineProperty(InputItem.prototype, "extra", { get: /** * @return {?} */ function () { return this._extra; }, set: /** * @param {?} value * @return {?} */ function (value) { this._extra = value; }, enumerable: true, configurable: true }); Object.defineProperty(InputItem.prototype, "labelNumber", { set: /** * @param {?} value * @return {?} */ function (value) { this._labelNumber = value; this.setCls(); }, enumerable: true, configurable: true }); Object.defineProperty(InputItem.prototype, "updatePlaceholder", { set: /** * @param {?} value * @return {?} */ function (value) { this._updatePlaceholder = value; }, enumerable: true, configurable: true }); Object.defineProperty(InputItem.prototype, "prefixListCls", { get: /** * @return {?} */ function () { return this._prefixListCls; }, set: /** * @param {?} value * @return {?} */ function (value) { this._prefixListCls = value; this.render.addClass(this._el, value + '-item'); this.render.addClass(this._el, value + '-item-middle'); }, enumerable: true, configurable: true }); Object.defineProperty(InputItem.prototype, "name", { get: /** * @return {?} */ function () { return this._name; }, set: /** * @param {?} value * @return {?} */ function (value) { this._name = value; }, enumerable: true, configurable: true }); Object.defineProperty(InputItem.prototype, "moneyKeyboardAlign", { get: /** * @return {?} */ function () { return this._moneyKeyboardAlign; }, set: /** * @param {?} value * @return {?} */ function (value) { this._moneyKeyboardAlign = value; }, enumerable: true, configurable: true }); Object.defineProperty(InputItem.prototype, "locale", { set: /** * @param {?} value * @return {?} */ function (value) { this._locale = value; }, enumerable: true, configurable: true }); Object.defineProperty(InputItem.prototype, "focus", { set: /** * @param {?} value * @return {?} */ function (value) { if (value && value.focus) { this.autoFocus = value.focus; if (this._type === 'money') { this.setFocus = value; } else if (this.inputElementRef) { this._focus = true; this.inputElementRef.nativeElement.focus(); this.inputFocus(''); } } }, enumerable: true, configurable: true }); /** * @return {?} */ InputItem.prototype.setCls = /** * @return {?} */ function () { var _a, _b; if (this.lableRef.nativeElement.children.length > 0 || (this.lableRef.nativeElement && this.lableRef.nativeElement.innerText !== '')) { this.labelCls = (_a = {}, _a[this.prefixCls + "-label"] = true, _a[this.prefixCls + "-label-2"] = this._labelNumber === 2, _a[this.prefixCls + "-label-3"] = this._labelNumber === 3, _a[this.prefixCls + "-label-4"] = this._labelNumber === 4, _a[this.prefixCls + "-label-5"] = this._labelNumber === 5, _a[this.prefixCls + "-label-6"] = this._labelNumber === 6, _a[this.prefixCls + "-label-7"] = this._labelNumber === 7, _a); } this.controlCls = (_b = {}, _b[this.prefixCls + "-control"] = true, _b); }; /** * @param {?} e * @return {?} */ InputItem.prototype.inputChange = /** * @param {?} e * @return {?} */ function (e) { /** @type {?} */ var value = e; switch (this.inputType) { case 'text': break; case 'bankCard': value = value.replace(/\D/g, '').replace(/(....)(?=.)/g, '$1 '); break; case 'phone': value = value.replace(/\D/g, '').substring(0, 11); /** @type {?} */ var valueLen = value.length; if (valueLen > 3 && valueLen < 8) { value = value.substr(0, 3) + " " + value.substr(3); } else if (valueLen >= 8) { value = value.substr(0, 3) + " " + value.substr(3, 4) + " " + value.substr(7); } break; case 'number': value = value.replace(/\D/g, ''); break; case 'password': break; default: this._value = value; break; } this._value = value; if (this._type !== 'money') { this.inputElementRef.nativeElement.value = this._value; } this._onChange(this._value); this.onChange.emit(this._value); }; /** * @param {?} value * @return {?} */ InputItem.prototype.inputFocus = /** * @param {?} value * @return {?} */ function (value) { var _this = this; setTimeout(function () { _this._focus = true; _this.clsFocus = true; _this.clsAndroid = true; }, 100); this.onFocus.emit(value); }; /** * @param {?} value * @param {?} event * @return {?} */ InputItem.prototype.inputBlur = /** * @param {?} value * @param {?} event * @return {?} */ function (value, event) { var _this = this; setTimeout(function () { if (!_this._isClear) { _this._focus = false; _this.clsFocus = false; _this.clsAndroid = false; _this.onBlur.emit(value); } _this._isClear = false; }, 100); }; /** * @return {?} */ InputItem.prototype.clearInput = /** * @return {?} */ function () { if (this._type !== 'password' && this._updatePlaceholder) { this._placeholder = this._value; } this._value = ''; this.onChange.emit(''); this._isClear = true; if (this._type !== 'money') { this.inputElementRef.nativeElement.value = this._value; } this.inputFocus(this._value); }; /** * @param {?} e * @return {?} */ InputItem.prototype.errorClick = /** * @param {?} e * @return {?} */ function (e) { if (this.onErrorClick) { this.onErrorClick.emit(e); } }; /** * @param {?} e * @return {?} */ InputItem.prototype.extraClick = /** * @param {?} e * @return {?} */ function (e) { if (this.onExtraClick) { this.onExtraClick.emit(e); } }; /** * @param {?} value * @return {?} */ InputItem.prototype.writeValue = /** * @param {?} value * @return {?} */ function (value) { if (value) { this._value = value; } }; /** * @param {?} fn * @return {?} */ InputItem.prototype.registerOnChange = /** * @param {?} fn * @return {?} */ function (fn) { this._onChange = fn; }; /** * @param {?} fn * @return {?} */ InputItem.prototype.registerOnTouched = /** * @param {?} fn * @return {?} */ function (fn) { }; /** * @return {?} */ InputItem.prototype.ngOnChanges = /** * @return {?} */ function () { if (this.inputElementRef && this._type !== 'money' && this._value !== undefined) { this.inputElementRef.nativeElement.value = this._value; } }; /** * @return {?} */ InputItem.prototype.ngOnInit = /** * @return {?} */ function () { this.setCls(); this.render.addClass(this._el, this._prefixListCls + '-item'); this.render.addClass(this._el, this._prefixListCls + '-item-middle'); }; InputItem.decorators = [ { type: Component, args: [{ selector: 'InputItem, nzm-input-item', template: "<div class=\"{{prefixListCls}}-line\">\n <div #lableContent [ngClass]=\"labelCls\">\n <ng-content></ng-content>\n </div>\n <div [ngClass]=\"controlCls\">\n <CustomInput *ngIf=\"type==='money'\"\n [value]=\"value\"\n [defaultValue]=\"defaultValue\"\n [placeholder]=\"placeholder\"\n [disabled]=\"disabled\"\n [editable]=\"editable\"\n [moneyKeyboardAlign]=\"moneyKeyboardAlign\"\n [setFocus]=\"setFocus\"\n [maxLength]=\"maxLength\"\n (onChange)=\"inputChange($event)\"\n (onBlur)=\"inputBlur(value)\"\n (onFocus)=\"inputFocus(value)\">\n </CustomInput>\n <div *ngIf=\"type!=='money'\">\n <input #inputElement\n [type]=\"type\"\n [name]=\"name\"\n [(ngModel)]=\"value\"\n [defaultValue]=\"defaultValue\"\n [placeholder]=\"placeholder\"\n [disabled]=\"disabled\"\n [readOnly]=\"!editable\"\n [autofocus]=\"autoFocus\"\n [maxlength]=\"maxLength\"\n [pattern]=\"pattern\"\n (ngModelChange)=\"inputChange($event)\"\n (blur)=\"inputBlur(value , $event)\"\n (focus)=\"inputFocus(value)\"\n style=\"outline:none\" />\n </div>\n </div>\n <div *ngIf=\"clear && editable && !disabled && (value && value.length >0 )\"\n class=\"{{prefixCls}}-clear\"\n (click)=\"clearInput()\"\n ></div>\n <div *ngIf=\"error\"\n class=\"{{prefixCls}}-error-extra\"\n (click)=\"errorClick($event)\"\n ></div>\n <div *ngIf=\"extra!==''\"\n class=\"{{prefixCls}}-extra\"\n (click)=\"extraClick($event)\"\n >{{extra}}</div>\n</div>", providers: [ { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(function () { return InputItem; }), multi: true } ] }] } ]; /** @nocollapse */ InputItem.ctorParameters = function () { return [ { type: ElementRef }, { type: Renderer2 } ]; }; InputItem.propDecorators = { lableRef: [{ type: ViewChild, args: ['lableContent',] }], inputElementRef: [{ type: ViewChild, args: ['inputElement',] }], type: [{ type: Input }], value: [{ type: Input }], defaultValue: [{ type: Input }], placeholder: [{ type: Input }], editable: [{ type: Input }], disabled: [{ type: Input }], clear: [{ type: Input }], maxLength: [{ type: Input }], error: [{ type: Input }], extra: [{ type: Input }], labelNumber: [{ type: Input }], updatePlaceholder: [{ type: Input }], prefixListCls: [{ type: Input }], name: [{ type: Input }], moneyKeyboardAlign: [{ type: Input }], locale: [{ type: Input }], focus: [{ type: Input }], onChange: [{ type: Output }], onBlur: [{ type: Output }], onFocus: [{ type: Output }], onErrorClick: [{ type: Output }], onExtraClick: [{ type: Output }], clsItem: [{ type: HostBinding, args: ['class.am-input-item',] }], clsDisabled: [{ type: HostBinding, args: ['class.am-input-disabled',] }], clsError: [{ type: HostBinding, args: ['class.am-input-error',] }], clsFocus: [{ type: HostBinding, args: ['class.am-input-focus',] }], clsAndroid: [{ type: HostBinding, args: ['class.am-input-android,',] }] }; return InputItem; }()); export { InputItem }; if (false) { /** @type {?} */ InputItem.prototype.prefixCls; /** @type {?} */ InputItem.prototype.wrapCls; /** @type {?} */ InputItem.prototype.labelCls; /** @type {?} */ InputItem.prototype.controlCls; /** @type {?} */ InputItem.prototype.setFocus; /** @type {?} */ InputItem.prototype.pattern; /** @type {?} */ InputItem.prototype.autoFocus; /** @type {?} */ InputItem.prototype.inputType; /** @type {?} */ InputItem.prototype._el; /** @type {?} */ InputItem.prototype._type; /** @type {?} */ InputItem.prototype._value; /** @type {?} */ InputItem.prototype._defaultValue; /** @type {?} */ InputItem.prototype._placeholder; /** @type {?} */ InputItem.prototype._editable; /** @type {?} */ InputItem.prototype._disabled; /** @type {?} */ InputItem.prototype._clear; /** @type {?} */ InputItem.prototype._maxLength; /** @type {?} */ InputItem.prototype._error; /** @type {?} */ InputItem.prototype._extra; /** @type {?} */ InputItem.prototype._labelNumber; /** @type {?} */ InputItem.prototype._updatePlaceholder; /** @type {?} */ InputItem.prototype._prefixListCls; /** @type {?} */ InputItem.prototype._name; /** @type {?} */ InputItem.prototype._moneyKeyboardAlign; /** @type {?} */ InputItem.prototype._locale; /** @type {?} */ InputItem.prototype._focus; /** @type {?} */ InputItem.prototype._isClear; /** @type {?} */ InputItem.prototype.lableRef; /** @type {?} */ InputItem.prototype.inputElementRef; /** @type {?} */ InputItem.prototype.onChange; /** @type {?} */ InputItem.prototype.onBlur; /** @type {?} */ InputItem.prototype.onFocus; /** @type {?} */ InputItem.prototype.onErrorClick; /** @type {?} */ InputItem.prototype.onExtraClick; /** @type {?} */ InputItem.prototype.clsItem; /** @type {?} */ InputItem.prototype.clsDisabled; /** @type {?} */ InputItem.prototype.clsError; /** @type {?} */ InputItem.prototype.clsFocus; /** @type {?} */ InputItem.prototype.clsAndroid; /** @type {?} */ InputItem.prototype._onChange; /** @type {?} */ InputItem.prototype.element; /** @type {?} */ InputItem.prototype.render; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtaXRlbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS8iLCJzb3VyY2VzIjpbImlucHV0LWl0ZW0vaW5wdXQtaXRlbS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQ1osU0FBUyxFQUVULFdBQVcsRUFDWCxTQUFTLEVBQ1QsVUFBVSxFQUNWLFVBQVUsRUFDWCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0lBb052RSxtQkFBb0IsT0FBbUIsRUFBVSxNQUFpQjtRQUE5QyxZQUFPLEdBQVAsT0FBTyxDQUFZO1FBQVUsV0FBTSxHQUFOLE1BQU0sQ0FBVzt5QkF0TTlDLFVBQVU7d0JBSVgsRUFBRTt1QkFDSCxFQUFFO3lCQUNDLEtBQUs7eUJBQ04sTUFBTTtxQkFHRixNQUFNOzZCQUVFLEVBQUU7NEJBQ0gsRUFBRTt5QkFDSixJQUFJO3lCQUNKLEtBQUs7c0JBQ1IsS0FBSztzQkFFTCxLQUFLO3NCQUNOLEVBQUU7NEJBQ0ksQ0FBQztrQ0FDTSxLQUFLOzhCQUNWLFNBQVM7bUNBRUosT0FBTztzQkFFbkIsS0FBSzt3QkFDSCxLQUFLO3dCQXNKSCxJQUFJLFlBQVksRUFBTztzQkFFekIsSUFBSSxZQUFZLEVBQU87dUJBRXRCLElBQUksWUFBWSxFQUFPOzRCQUVsQixJQUFJLFlBQVksRUFBTzs0QkFFdkIsSUFBSSxZQUFZLEVBQU87dUJBR3RDLElBQUk7MkJBRUEsSUFBSSxDQUFDLFNBQVM7d0JBRWpCLElBQUksQ0FBQyxNQUFNO3dCQUVYLElBQUksQ0FBQyxNQUFNOzBCQUVULElBQUksQ0FBQyxNQUFNO3lCQU1yQixVQUFDLENBQU0sS0FBTztRQUh4QixJQUFJLENBQUMsR0FBRyxHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUM7S0FDbEM7SUF0S0Qsc0JBQ0ksMkJBQUk7Ozs7UUFEUjtZQUVFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztTQUNuQjs7Ozs7UUFDRCxVQUFTLEtBQWE7WUFDcEIsSUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQzdCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO2dCQUN2QixJQUFJLEtBQUssS0FBSyxVQUFVLElBQUksS0FBSyxLQUFLLE9BQU8sRUFBRTtvQkFDN0MsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7aUJBQ3BCO3FCQUFNLElBQUksS0FBSyxLQUFLLFVBQVUsRUFBRTtvQkFDL0IsSUFBSSxDQUFDLEtBQUssR0FBRyxVQUFVLENBQUM7aUJBQ3pCO3FCQUFNLElBQUksS0FBSyxLQUFLLE9BQU8sRUFBRTtvQkFDNUIsSUFBSSxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUM7aUJBQ3ZCO3FCQUFNLElBQUksS0FBSyxLQUFLLE1BQU0sSUFBSSxLQUFLLEtBQUssUUFBUSxFQUFFO29CQUNqRCxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztpQkFDcEI7Z0JBQ0QsSUFBSSxLQUFLLEtBQUssUUFBUSxFQUFFO29CQUN0QixJQUFJLENBQUMsT0FBTyxHQUFHLFFBQVEsQ0FBQztpQkFDekI7YUFDRjtTQUNGOzs7T0FqQkE7SUFrQkQsc0JBQ0ksNEJBQUs7Ozs7UUFEVDtZQUVFLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztTQUNwQjs7Ozs7UUFDRCxVQUFVLENBQVM7WUFDakIsSUFBSSxPQUFPLENBQUMsS0FBSyxTQUFTLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRTtnQkFDeEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7YUFDbEI7WUFDRCxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztTQUNqQjs7O09BTkE7SUFPRCxzQkFDSSxtQ0FBWTs7OztRQURoQjtZQUVFLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztTQUMzQjs7Ozs7UUFDRCxVQUFpQixLQUFhO1lBQzVCLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1lBQzNCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztTQUNsQzs7O09BSkE7SUFLRCxzQkFDSSxrQ0FBVzs7OztRQURmO1lBRUUsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO1NBQzFCOzs7OztRQUNELFVBQWdCLEtBQWE7WUFDM0IsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7U0FDM0I7OztPQUhBO0lBS0Qsc0JBQ0ksK0JBQVE7Ozs7UUFEWjtZQUVFLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztTQUN2Qjs7Ozs7UUFDRCxVQUFhLEtBQWM7WUFDekIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7U0FDeEI7OztPQUhBO0lBS0Qsc0JBQ0ksK0JBQVE7Ozs7UUFEWjtZQUVFLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztTQUN2Qjs7Ozs7UUFDRCxVQUFhLEtBQWM7WUFDekIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7WUFDdkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7U0FDMUI7OztPQUpBO0lBS0Qsc0JBQ0ksNEJBQUs7Ozs7UUFEVDtZQUVFLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztTQUNwQjs7Ozs7UUFDRCxVQUFVLEtBQWM7WUFDdEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7U0FDckI7OztPQUhBO0lBSUQsc0JBQ0ksZ0NBQVM7Ozs7UUFEYjtZQUVFLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztTQUN4Qjs7Ozs7UUFDRCxVQUFjLEtBQWE7WUFDekIsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7U0FDekI7OztPQUhBO0lBSUQsc0JBQ0ksNEJBQUs7Ozs7UUFEVDtZQUVFLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztTQUNwQjs7Ozs7UUFDRCxVQUFVLEtBQWM7WUFDdEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7WUFDcEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7U0FDdkI7OztPQUpBO0lBS0Qsc0JBQ0ksNEJBQUs7Ozs7UUFEVDtZQUVFLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztTQUNwQjs7Ozs7UUFDRCxVQUFVLEtBQWE7WUFDckIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7U0FDckI7OztPQUhBO0lBSUQsc0JBQ0ksa0NBQVc7Ozs7O1FBRGYsVUFDZ0IsS0FBYTtZQUMzQixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztZQUMxQixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7U0FDZjs7O09BQUE7SUFDRCxzQkFDSSx3Q0FBaUI7Ozs7O1FBRHJCLFVBQ3NCLEtBQWM7WUFDbEMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQztTQUNqQzs7O09BQUE7SUFDRCxzQkFDSSxvQ0FBYTs7OztRQURqQjtZQUVFLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztTQUM1Qjs7Ozs7UUFDRCxVQUFrQixLQUFhO1lBQzdCLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO1lBQzVCLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxHQUFHLE9BQU8sQ0FBQyxDQUFDO1lBQ2hELElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxHQUFHLGNBQWMsQ0FBQyxDQUFDO1NBQ3hEOzs7T0FMQTtJQU1ELHNCQUNJLDJCQUFJOzs7O1FBRFI7WUFFRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7U0FDbkI7Ozs7O1FBQ0QsVUFBUyxLQUFhO1lBQ3BCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1NBQ3BCOzs7T0FIQTtJQUlELHNCQUNJLHlDQUFrQjs7OztRQUR0QjtZQUVFLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDO1NBQ2pDOzs7OztRQUNELFVBQXVCLEtBQWE7WUFDbEMsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEtBQUssQ0FBQztTQUNsQzs7O09BSEE7SUFJRCxzQkFDSSw2QkFBTTs7Ozs7UUFEVixVQUNXLEtBQUs7WUFDZCxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztTQUN0Qjs7O09BQUE7SUFDRCxzQkFDSSw0QkFBSzs7Ozs7UUFEVCxVQUNVLEtBQUs7WUFDYixJQUFJLEtBQUssSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFO2dCQUN4QixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7Z0JBQzdCLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxPQUFPLEVBQUU7b0JBQzFCLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO2lCQUN2QjtxQkFBTSxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUU7b0JBQy9CLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO29CQUNuQixJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDM0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztpQkFDckI7YUFDRjtTQUNGOzs7T0FBQTs7OztJQThCRCwwQkFBTTs7O0lBQU47O1FBQ0UsSUFDRSxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUM7WUFDL0MsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxTQUFTLEtBQUssRUFBRSxDQUFDLEVBQzdFO1lBQ0EsSUFBSSxDQUFDLFFBQVE7Z0JBQ1gsR0FBSSxJQUFJLENBQUMsU0FBUyxXQUFRLElBQUcsSUFBSTtnQkFDakMsR0FBSSxJQUFJLENBQUMsU0FBUyxhQUFVLElBQUcsSUFBSSxDQUFDLFlBQVksS0FBSyxDQUFDO2dCQUN0RCxHQUFJLElBQUksQ0FBQyxTQUFTLGFBQVUsSUFBRyxJQUFJLENBQUMsWUFBWSxLQUFLLENBQUM7Z0JBQ3RELEdBQUksSUFBSSxDQUFDLFNBQVMsYUFBVSxJQUFHLElBQUksQ0FBQyxZQUFZLEtBQUssQ0FBQztnQkFDdEQsR0FBSSxJQUFJLENBQUMsU0FBUyxhQUFVLElBQUcsSUFBSSxDQUFDLFlBQVksS0FBSyxDQUFDO2dCQUN0RCxHQUFJLElBQUksQ0FBQyxTQUFTLGFBQVUsSUFBRyxJQUFJLENBQUMsWUFBWSxLQUFLLENBQUM7Z0JBQ3RELEdBQUksSUFBSSxDQUFDLFNBQVMsYUFBVSxJQUFHLElBQUksQ0FBQyxZQUFZLEtBQUssQ0FBQzttQkFDdkQsQ0FBQztTQUNIO1FBQ0QsSUFBSSxDQUFDLFVBQVUsYUFBSyxHQUFJLElBQUksQ0FBQyxTQUFTLGFBQVUsSUFBRyxJQUFJLEtBQUUsQ0FBQztLQUMzRDs7Ozs7SUFFRCwrQkFBVzs7OztJQUFYLFVBQVksQ0FBQzs7UUFDWCxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDZCxRQUFRLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDdEIsS0FBSyxNQUFNO2dCQUNULE1BQU07WUFDUixLQUFLLFVBQVU7Z0JBQ2IsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ2hFLE1BQU07WUFDUixLQUFLLE9BQU87Z0JBQ1YsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7O2dCQUNsRCxJQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO2dCQUM5QixJQUFJLFFBQVEsR0FBRyxDQUFDLElBQUksUUFBUSxHQUFHLENBQUMsRUFBRTtvQkFDaEMsS0FBSyxHQUFNLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFHLENBQUM7aUJBQ3BEO3FCQUFNLElBQUksUUFBUSxJQUFJLENBQUMsRUFBRTtvQkFDeEIsS0FBSyxHQUFNLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFHLENBQUM7aUJBQzFFO2dCQUNELE1BQU07WUFDUixLQUFLLFFBQVE7Z0JBQ1gsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUNqQyxNQUFNO1lBQ1IsS0FBSyxVQUFVO2dCQUNiLE1BQU07WUFDUjtnQkFDRSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztnQkFDcEIsTUFBTTtTQUNUO1FBQ0QsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFFcEIsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLE9BQU8sRUFBRTtZQUMxQixJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztTQUN4RDtRQUVELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzVCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUNqQzs7Ozs7SUFFRCw4QkFBVTs7OztJQUFWLFVBQVcsS0FBSztRQUFoQixpQkFPQztRQU5DLFVBQVUsQ0FBQztZQUNULEtBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1lBQ25CLEtBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1lBQ3JCLEtBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1NBQ3hCLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDUixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUMxQjs7Ozs7O0lBRUQsNkJBQVM7Ozs7O0lBQVQsVUFBVSxLQUFLLEVBQUUsS0FBSztRQUF0QixpQkFVQztRQVRDLFVBQVUsQ0FBQztZQUNULElBQUksQ0FBQyxLQUFJLENBQUMsUUFBUSxFQUFFO2dCQUNsQixLQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztnQkFDcEIsS0FBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7Z0JBQ3RCLEtBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO2dCQUN4QixLQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUN6QjtZQUNELEtBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1NBQ3ZCLEVBQUUsR0FBRyxDQUFDLENBQUM7S0FDVDs7OztJQUVELDhCQUFVOzs7SUFBVjtRQUNFLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxVQUFVLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFO1lBQ3hELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztTQUNqQztRQUNELElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxPQUFPLEVBQUU7WUFDMUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7U0FDeEQ7UUFDRCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUM5Qjs7Ozs7SUFFRCw4QkFBVTs7OztJQUFWLFVBQVcsQ0FBQztRQUNWLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNyQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUMzQjtLQUNGOzs7OztJQUVELDhCQUFVOzs7O0lBQVYsVUFBVyxDQUFDO1FBQ1YsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ3JCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzNCO0tBQ0Y7Ozs7O0lBRUQsOEJBQVU7Ozs7SUFBVixVQUFXLEtBQVU7UUFDbkIsSUFBSSxLQUFLLEVBQUU7WUFDVCxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztTQUNyQjtLQUNGOzs7OztJQUVELG9DQUFnQjs7OztJQUFoQixVQUFpQixFQUFvQjtRQUNuQyxJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztLQUNyQjs7Ozs7SUFFRCxxQ0FBaUI7Ozs7SUFBakIsVUFBa0IsRUFBTyxLQUFVOzs7O0lBRW5DLCtCQUFXOzs7SUFBWDtRQUNFLElBQUksSUFBSSxDQUFDLGVBQWUsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLE9BQU8sSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLFNBQVMsRUFBRTtZQUMvRSxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztTQUN4RDtLQUNGOzs7O0lBRUQsNEJBQVE7OztJQUFSO1FBQ0UsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsY0FBYyxHQUFHLE9BQU8sQ0FBQyxDQUFDO1FBQzlELElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUMsQ0FBQztLQUN0RTs7Z0JBbFZGLFNBQVMsU0FBQztvQkFDVCxRQUFRLEVBQUUsMkJBQTJCO29CQUNyQywreERBQTBDO29CQUMxQyxTQUFTLEVBQUU7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxjQUFNLE9BQUEsU0FBUyxFQUFULENBQVMsQ0FBQzs0QkFDeEMsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0Y7aUJBQ0Y7Ozs7Z0JBZkMsVUFBVTtnQkFEVixTQUFTOzs7MkJBK0NSLFNBQVMsU0FBQyxjQUFjO2tDQUV4QixTQUFTLFNBQUMsY0FBYzt1QkFHeEIsS0FBSzt3QkFxQkwsS0FBSzsrQkFVTCxLQUFLOzhCQVFMLEtBQUs7MkJBUUwsS0FBSzsyQkFRTCxLQUFLO3dCQVFMLEtBQUs7NEJBT0wsS0FBSzt3QkFPTCxLQUFLO3dCQVFMLEtBQUs7OEJBT0wsS0FBSztvQ0FLTCxLQUFLO2dDQUlMLEtBQUs7dUJBU0wsS0FBSztxQ0FPTCxLQUFLO3lCQU9MLEtBQUs7d0JBSUwsS0FBSzsyQkFjTCxNQUFNO3lCQUVOLE1BQU07MEJBRU4sTUFBTTsrQkFFTixNQUFNOytCQUVOLE1BQU07MEJBR04sV0FBVyxTQUFDLHFCQUFxQjs4QkFFakMsV0FBVyxTQUFDLHlCQUF5QjsyQkFFckMsV0FBVyxTQUFDLHNCQUFzQjsyQkFFbEMsV0FBVyxTQUFDLHNCQUFzQjs2QkFFbEMsV0FBVyxTQUFDLHlCQUF5Qjs7b0JBOU54Qzs7U0EwQmEsU0FBUyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgT25Jbml0LFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIFZpZXdDaGlsZCxcbiAgT25DaGFuZ2VzLFxuICBIb3N0QmluZGluZyxcbiAgUmVuZGVyZXIyLFxuICBFbGVtZW50UmVmLFxuICBmb3J3YXJkUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdJbnB1dEl0ZW0sIG56bS1pbnB1dC1pdGVtJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2lucHV0LWl0ZW0uY29tcG9uZW50Lmh0bWwnLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IElucHV0SXRlbSksXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH1cbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgSW5wdXRJdGVtIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgcHJlZml4Q2xzOiBzdHJpbmcgPSAnYW0taW5wdXQnO1xuICB3cmFwQ2xzOiBvYmplY3Q7XG4gIGxhYmVsQ2xzOiBvYmplY3Q7XG4gIGNvbnRyb2xDbHM6IG9iamVjdDtcbiAgc2V0Rm9jdXM6IG9iamVjdCA9IHt9O1xuICBwYXR0ZXJuOiBzdHJpbmcgPSAnJztcbiAgYXV0b0ZvY3VzOiBib29sZWFuID0gZmFsc2U7XG4gIGlucHV0VHlwZTogc3RyaW5nID0gJ3RleHQnO1xuXG4gIHByaXZhdGUgX2VsOiBIVE1MRWxlbWVudDtcbiAgcHJpdmF0ZSBfdHlwZTogc3RyaW5nID0gJ3RleHQnO1xuICBwcml2YXRlIF92YWx1ZTogc3RyaW5nO1xuICBwcml2YXRlIF9kZWZhdWx0VmFsdWU6IHN0cmluZyA9ICcnO1xuICBwcml2YXRlIF9wbGFjZWhvbGRlcjogc3RyaW5nID0gJyc7XG4gIHByaXZhdGUgX2VkaXRhYmxlOiBib29sZWFuID0gdHJ1ZTtcbiAgcHJpdmF0ZSBfZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfY2xlYXI6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfbWF4TGVuZ3RoOiBudW1iZXI7XG4gIHByaXZhdGUgX2Vycm9yOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX2V4dHJhOiBzdHJpbmcgPSAnJztcbiAgcHJpdmF0ZSBfbGFiZWxOdW1iZXI6IG51bWJlciA9IDU7XG4gIHByaXZhdGUgX3VwZGF0ZVBsYWNlaG9sZGVyOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX3ByZWZpeExpc3RDbHM6IHN0cmluZyA9ICdhbS1saXN0JztcbiAgcHJpdmF0ZSBfbmFtZTogc3RyaW5nO1xuICBwcml2YXRlIF9tb25leUtleWJvYXJkQWxpZ246IHN0cmluZyA9ICdyaWdodCc7XG4gIHByaXZhdGUgX2xvY2FsZTtcbiAgcHJpdmF0ZSBfZm9jdXM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfaXNDbGVhcjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBWaWV3Q2hpbGQoJ2xhYmxlQ29udGVudCcpXG4gIGxhYmxlUmVmO1xuICBAVmlld0NoaWxkKCdpbnB1dEVsZW1lbnQnKVxuICBpbnB1dEVsZW1lbnRSZWY7XG5cbiAgQElucHV0KClcbiAgZ2V0IHR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdHlwZTtcbiAgfVxuICBzZXQgdHlwZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKHZhbHVlICYmIHZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuaW5wdXRUeXBlID0gdmFsdWU7XG4gICAgICBpZiAodmFsdWUgPT09ICdiYW5rQ2FyZCcgfHwgdmFsdWUgPT09ICdwaG9uZScpIHtcbiAgICAgICAgdGhpcy5fdHlwZSA9ICd0ZWwnO1xuICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gJ3Bhc3N3b3JkJykge1xuICAgICAgICB0aGlzLl90eXBlID0gJ3Bhc3N3b3JkJztcbiAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09ICdkaWdpdCcpIHtcbiAgICAgICAgdGhpcy5fdHlwZSA9ICdudW1iZXInO1xuICAgICAgfSBlbHNlIGlmICh2YWx1ZSAhPT0gJ3RleHQnICYmIHZhbHVlICE9PSAnbnVtYmVyJykge1xuICAgICAgICB0aGlzLl90eXBlID0gdmFsdWU7XG4gICAgICB9XG4gICAgICBpZiAodmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICAgIHRoaXMucGF0dGVybiA9ICdbMC05XSonO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBASW5wdXQoKVxuICBnZXQgdmFsdWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gIH1cbiAgc2V0IHZhbHVlKHY6IHN0cmluZykge1xuICAgIGlmICh0eXBlb2YgdiA9PT0gdW5kZWZpbmVkIHx8IHYgPT09IG51bGwpIHtcbiAgICAgIHRoaXMuX3ZhbHVlID0gJyc7XG4gICAgfVxuICAgIHRoaXMuX3ZhbHVlID0gdjtcbiAgfVxuICBASW5wdXQoKVxuICBnZXQgZGVmYXVsdFZhbHVlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2RlZmF1bHRWYWx1ZTtcbiAgfVxuICBzZXQgZGVmYXVsdFZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9kZWZhdWx0VmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLl92YWx1ZSA9IHRoaXMuX2RlZmF1bHRWYWx1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBnZXQgcGxhY2Vob2xkZXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fcGxhY2Vob2xkZXI7XG4gIH1cbiAgc2V0IHBsYWNlaG9sZGVyKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9wbGFjZWhvbGRlciA9IHZhbHVlO1xuICB9XG5cbiAgQElucHV0KClcbiAgZ2V0IGVkaXRhYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9lZGl0YWJsZTtcbiAgfVxuICBzZXQgZWRpdGFibGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9lZGl0YWJsZSA9IHZhbHVlO1xuICB9XG5cbiAgQElucHV0KClcbiAgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcbiAgfVxuICBzZXQgZGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9kaXNhYmxlZCA9IHZhbHVlO1xuICAgIHRoaXMuY2xzRGlzYWJsZWQgPSB2YWx1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBnZXQgY2xlYXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2NsZWFyO1xuICB9XG4gIHNldCBjbGVhcih2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2NsZWFyID0gdmFsdWU7XG4gIH1cbiAgQElucHV0KClcbiAgZ2V0IG1heExlbmd0aCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9tYXhMZW5ndGg7XG4gIH1cbiAgc2V0IG1heExlbmd0aCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fbWF4TGVuZ3RoID0gdmFsdWU7XG4gIH1cbiAgQElucHV0KClcbiAgZ2V0IGVycm9yKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9lcnJvcjtcbiAgfVxuICBzZXQgZXJyb3IodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9lcnJvciA9IHZhbHVlO1xuICAgIHRoaXMuY2xzRXJyb3IgPSB2YWx1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBnZXQgZXh0cmEoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fZXh0cmE7XG4gIH1cbiAgc2V0IGV4dHJhKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9leHRyYSA9IHZhbHVlO1xuICB9XG4gIEBJbnB1dCgpXG4gIHNldCBsYWJlbE51bWJlcih2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fbGFiZWxOdW1iZXIgPSB2YWx1ZTtcbiAgICB0aGlzLnNldENscygpO1xuICB9XG4gIEBJbnB1dCgpXG4gIHNldCB1cGRhdGVQbGFjZWhvbGRlcih2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX3VwZGF0ZVBsYWNlaG9sZGVyID0gdmFsdWU7XG4gIH1cbiAgQElucHV0KClcbiAgZ2V0IHByZWZpeExpc3RDbHMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fcHJlZml4TGlzdENscztcbiAgfVxuICBzZXQgcHJlZml4TGlzdENscyh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fcHJlZml4TGlzdENscyA9IHZhbHVlO1xuICAgIHRoaXMucmVuZGVyLmFkZENsYXNzKHRoaXMuX2VsLCB2YWx1ZSArICctaXRlbScpO1xuICAgIHRoaXMucmVuZGVyLmFkZENsYXNzKHRoaXMuX2VsLCB2YWx1ZSArICctaXRlbS1taWRkbGUnKTtcbiAgfVxuICBASW5wdXQoKVxuICBnZXQgbmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9uYW1lO1xuICB9XG4gIHNldCBuYW1lKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9uYW1lID0gdmFsdWU7XG4gIH1cbiAgQElucHV0KClcbiAgZ2V0IG1vbmV5S2V5Ym9hcmRBbGlnbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9tb25leUtleWJvYXJkQWxpZ247XG4gIH1cbiAgc2V0IG1vbmV5S2V5Ym9hcmRBbGlnbih2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fbW9uZXlLZXlib2FyZEFsaWduID0gdmFsdWU7XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IGxvY2FsZSh2YWx1ZSkge1xuICAgIHRoaXMuX2xvY2FsZSA9IHZhbHVlO1xuICB9XG4gIEBJbnB1dCgpXG4gIHNldCBmb2N1cyh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5mb2N1cykge1xuICAgICAgdGhpcy5hdXRvRm9jdXMgPSB2YWx1ZS5mb2N1cztcbiAgICAgIGlmICh0aGlzLl90eXBlID09PSAnbW9uZXknKSB7XG4gICAgICAgIHRoaXMuc2V0Rm9jdXMgPSB2YWx1ZTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5pbnB1dEVsZW1lbnRSZWYpIHtcbiAgICAgICAgdGhpcy5fZm9jdXMgPSB0cnVlO1xuICAgICAgICB0aGlzLmlucHV0RWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIHRoaXMuaW5wdXRGb2N1cygnJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQE91dHB1dCgpXG4gIG9uQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KClcbiAgb25CbHVyOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KClcbiAgb25Gb2N1czogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpXG4gIG9uRXJyb3JDbGljazogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpXG4gIG9uRXh0cmFDbGljazogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFtLWlucHV0LWl0ZW0nKVxuICBjbHNJdGVtOiBib29sZWFuID0gdHJ1ZTtcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5hbS1pbnB1dC1kaXNhYmxlZCcpXG4gIGNsc0Rpc2FibGVkOiBib29sZWFuID0gdGhpcy5fZGlzYWJsZWQ7XG4gIEBIb3N0QmluZGluZygnY2xhc3MuYW0taW5wdXQtZXJyb3InKVxuICBjbHNFcnJvcjogYm9vbGVhbiA9IHRoaXMuX2Vycm9yO1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFtLWlucHV0LWZvY3VzJylcbiAgY2xzRm9jdXM6IGJvb2xlYW4gPSB0aGlzLl9mb2N1cztcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5hbS1pbnB1dC1hbmRyb2lkLCcpXG4gIGNsc0FuZHJvaWQ6IGJvb2xlYW4gPSB0aGlzLl9mb2N1cztcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsZW1lbnQ6IEVsZW1lbnRSZWYsIHByaXZhdGUgcmVuZGVyOiBSZW5kZXJlcjIpIHtcbiAgICB0aGlzLl9lbCA9IGVsZW1lbnQubmF0aXZlRWxlbWVudDtcbiAgfVxuXG4gIF9vbkNoYW5nZSA9IChfOiBhbnkpID0+IHt9O1xuXG4gIHNldENscygpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLmxhYmxlUmVmLm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoID4gMCB8fFxuICAgICAgKHRoaXMubGFibGVSZWYubmF0aXZlRWxlbWVudCAmJiB0aGlzLmxhYmxlUmVmLm5hdGl2ZUVsZW1lbnQuaW5uZXJUZXh0ICE9PSAnJylcbiAgICApIHtcbiAgICAgIHRoaXMubGFiZWxDbHMgPSB7XG4gICAgICAgIFtgJHt0aGlzLnByZWZpeENsc30tbGFiZWxgXTogdHJ1ZSxcbiAgICAgICAgW2Ake3RoaXMucHJlZml4Q2xzfS1sYWJlbC0yYF06IHRoaXMuX2xhYmVsTnVtYmVyID09PSAyLFxuICAgICAgICBbYCR7dGhpcy5wcmVmaXhDbHN9LWxhYmVsLTNgXTogdGhpcy5fbGFiZWxOdW1iZXIgPT09IDMsXG4gICAgICAgIFtgJHt0aGlzLnByZWZpeENsc30tbGFiZWwtNGBdOiB0aGlzLl9sYWJlbE51bWJlciA9PT0gNCxcbiAgICAgICAgW2Ake3RoaXMucHJlZml4Q2xzfS1sYWJlbC01YF06IHRoaXMuX2xhYmVsTnVtYmVyID09PSA1LFxuICAgICAgICBbYCR7dGhpcy5wcmVmaXhDbHN9LWxhYmVsLTZgXTogdGhpcy5fbGFiZWxOdW1iZXIgPT09IDYsXG4gICAgICAgIFtgJHt0aGlzLnByZWZpeENsc30tbGFiZWwtN2BdOiB0aGlzLl9sYWJlbE51bWJlciA9PT0gN1xuICAgICAgfTtcbiAgICB9XG4gICAgdGhpcy5jb250cm9sQ2xzID0geyBbYCR7dGhpcy5wcmVmaXhDbHN9LWNvbnRyb2xgXTogdHJ1ZSB9O1xuICB9XG5cbiAgaW5wdXRDaGFuZ2UoZSkge1xuICAgIGxldCB2YWx1ZSA9IGU7XG4gICAgc3dpdGNoICh0aGlzLmlucHV0VHlwZSkge1xuICAgICAgY2FzZSAndGV4dCc6XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnYmFua0NhcmQnOlxuICAgICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoL1xcRC9nLCAnJykucmVwbGFjZSgvKC4uLi4pKD89LikvZywgJyQxICcpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3Bob25lJzpcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKC9cXEQvZywgJycpLnN1YnN0cmluZygwLCAxMSk7XG4gICAgICAgIGNvbnN0IHZhbHVlTGVuID0gdmFsdWUubGVuZ3RoO1xuICAgICAgICBpZiAodmFsdWVMZW4gPiAzICYmIHZhbHVlTGVuIDwgOCkge1xuICAgICAgICAgIHZhbHVlID0gYCR7dmFsdWUuc3Vic3RyKDAsIDMpfSAke3ZhbHVlLnN1YnN0cigzKX1gO1xuICAgICAgICB9IGVsc2UgaWYgKHZhbHVlTGVuID49IDgpIHtcbiAgICAgICAgICB2YWx1ZSA9IGAke3ZhbHVlLnN1YnN0cigwLCAzKX0gJHt2YWx1ZS5zdWJzdHIoMywgNCl9ICR7dmFsdWUuc3Vic3RyKDcpfWA7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdudW1iZXInOlxuICAgICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoL1xcRC9nLCAnJyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAncGFzc3dvcmQnOlxuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuXG4gICAgaWYgKHRoaXMuX3R5cGUgIT09ICdtb25leScpIHtcbiAgICAgIHRoaXMuaW5wdXRFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSB0aGlzLl92YWx1ZTtcbiAgICB9XG5cbiAgICB0aGlzLl9vbkNoYW5nZSh0aGlzLl92YWx1ZSk7XG4gICAgdGhpcy5vbkNoYW5nZS5lbWl0KHRoaXMuX3ZhbHVlKTtcbiAgfVxuXG4gIGlucHV0Rm9jdXModmFsdWUpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuX2ZvY3VzID0gdHJ1ZTtcbiAgICAgIHRoaXMuY2xzRm9jdXMgPSB0cnVlO1xuICAgICAgdGhpcy5jbHNBbmRyb2lkID0gdHJ1ZTtcbiAgICB9LCAxMDApO1xuICAgIHRoaXMub25Gb2N1cy5lbWl0KHZhbHVlKTtcbiAgfVxuXG4gIGlucHV0Qmx1cih2YWx1ZSwgZXZlbnQpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICghdGhpcy5faXNDbGVhcikge1xuICAgICAgICB0aGlzLl9mb2N1cyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNsc0ZvY3VzID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY2xzQW5kcm9pZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLm9uQmx1ci5lbWl0KHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2lzQ2xlYXIgPSBmYWxzZTtcbiAgICB9LCAxMDApO1xuICB9XG5cbiAgY2xlYXJJbnB1dCgpIHtcbiAgICBpZiAodGhpcy5fdHlwZSAhPT0gJ3Bhc3N3b3JkJyAmJiB0aGlzLl91cGRhdGVQbGFjZWhvbGRlcikge1xuICAgICAgdGhpcy5fcGxhY2Vob2xkZXIgPSB0aGlzLl92YWx1ZTtcbiAgICB9XG4gICAgdGhpcy5fdmFsdWUgPSAnJztcbiAgICB0aGlzLm9uQ2hhbmdlLmVtaXQoJycpO1xuICAgIHRoaXMuX2lzQ2xlYXIgPSB0cnVlO1xuICAgIGlmICh0aGlzLl90eXBlICE9PSAnbW9uZXknKSB7XG4gICAgICB0aGlzLmlucHV0RWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnZhbHVlID0gdGhpcy5fdmFsdWU7XG4gICAgfVxuICAgIHRoaXMuaW5wdXRGb2N1cyh0aGlzLl92YWx1ZSk7XG4gIH1cblxuICBlcnJvckNsaWNrKGUpIHtcbiAgICBpZiAodGhpcy5vbkVycm9yQ2xpY2spIHtcbiAgICAgIHRoaXMub25FcnJvckNsaWNrLmVtaXQoZSk7XG4gICAgfVxuICB9XG5cbiAgZXh0cmFDbGljayhlKSB7XG4gICAgaWYgKHRoaXMub25FeHRyYUNsaWNrKSB7XG4gICAgICB0aGlzLm9uRXh0cmFDbGljay5lbWl0KGUpO1xuICAgIH1cbiAgfVxuXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiAoXzogYW55KSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5fb25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHt9XG5cbiAgbmdPbkNoYW5nZXMoKSB7XG4gICAgaWYgKHRoaXMuaW5wdXRFbGVtZW50UmVmICYmIHRoaXMuX3R5cGUgIT09ICdtb25leScgJiYgdGhpcy5fdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5pbnB1dEVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC52YWx1ZSA9IHRoaXMuX3ZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuc2V0Q2xzKCk7XG4gICAgdGhpcy5yZW5kZXIuYWRkQ2xhc3ModGhpcy5fZWwsIHRoaXMuX3ByZWZpeExpc3RDbHMgKyAnLWl0ZW0nKTtcbiAgICB0aGlzLnJlbmRlci5hZGRDbGFzcyh0aGlzLl9lbCwgdGhpcy5fcHJlZml4TGlzdENscyArICctaXRlbS1taWRkbGUnKTtcbiAgfVxufVxuIl19