UNPKG

@neocomplexx/ngx-neo-directives

Version:

This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 7.0.5.

309 lines 30.4 kB
/** * @fileoverview added by tsickle * Generated from: lib/neo-decimalNumbers.directive.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Directive, HostListener, Input, ElementRef, Renderer2 } from '@angular/core'; import { NgModel } from '@angular/forms'; var NeoDecimalNumbersDirective = /** @class */ (function () { function NeoDecimalNumbersDirective(el, renderer, model) { this.el = el; this.renderer = renderer; this.model = model; this.decimals = 2; this.allowNullValue = false; this.haveDecimalPoint = false; } /** * @return {?} */ NeoDecimalNumbersDirective.prototype.ngOnInit = /** * @return {?} */ function () { if ((/** @type {?} */ (this.decimals)) == "") this.decimals = 2; if ((/** @type {?} */ (this.allowNullValue)) === "") this.allowNullValue = true; this.el.nativeElement.type = "number"; this.regex = new RegExp('^[0-9]+(\\.[0-9]{0,' + this.decimals + '})?$'); }; /** * @param {?} e * @return {?} */ NeoDecimalNumbersDirective.prototype.blockPaste = /** * @param {?} e * @return {?} */ function (e) { var _this = this; /** @type {?} */ var clipboardData = e.clipboardData || window['clipboardData']; /** @type {?} */ var pastedData = clipboardData.getData('text/plain').split(",").join("."); /** @type {?} */ var posPoint = pastedData.lastIndexOf('.'); if (posPoint > -1) { pastedData = pastedData.substring(0, posPoint).split(".").join("") + pastedData.substring(posPoint); posPoint = pastedData.lastIndexOf('.'); if (posPoint + this.decimals < pastedData.length) { pastedData = pastedData.substring(0, posPoint + this.decimals + 1); } } /** @type {?} */ var onlyNumbers = Array.from(pastedData).map((/** * @param {?} x * @return {?} */ function (x) { return _this.isNumber(x); })).reduce((/** * @param {?} prev * @param {?} el * @return {?} */ function (prev, el) { return prev && el; }), true); /** @type {?} */ var a = this.regex.test(pastedData); setTimeout((/** * @return {?} */ function () { if (onlyNumbers && a) { _this.el.nativeElement.value = pastedData; } else { _this.el.nativeElement.value = '0'; } }), 10); }; /** * @return {?} */ NeoDecimalNumbersDirective.prototype.onfocus = /** * @return {?} */ function () { if (this.el.nativeElement.value == "0") { this.el.nativeElement.value = null; } }; /** * @return {?} */ NeoDecimalNumbersDirective.prototype.onBlur = /** * @return {?} */ function () { /** @type {?} */ var current = this.el.nativeElement.value; if (current == "") { if (this.allowNullValue) { this.el.nativeElement.value = null; this.model.control.setValue(null); } else { this.el.nativeElement.value = "0"; this.model.control.setValue(0); } } else { this.el.nativeElement.type = "text"; this.el.nativeElement.type = "number"; if (this.el.nativeElement.max && this.el.nativeElement.valueAsNumber > +this.el.nativeElement.max) { this.el.nativeElement.value = this.el.nativeElement.max; this.model.control.setValue(this.el.nativeElement.valueAsNumber); } } }; /** * @param {?} event * @return {?} */ NeoDecimalNumbersDirective.prototype.onKeyUp = /** * @param {?} event * @return {?} */ function (event) { /** @type {?} */ var current = this.el.nativeElement.value; current = current.split("-").join(""); /** @type {?} */ var posPoint = current.indexOf('.'); if (posPoint > -1) { this.el.nativeElement.value = current.substring(0, posPoint + 1) + current.substring(posPoint).split(".").join(""); } if (this.haveDecimalPoint && current == "" && this.prev > "") { this.haveDecimalPoint = false; this.el.nativeElement.value = this.prev + (this.prev.endsWith(".0") ? "" : ".0"); this.el.nativeElement.type = "text"; this.el.nativeElement.selectionStart = this.el.nativeElement.value.length - 1; this.el.nativeElement.selectionEnd = this.el.nativeElement.value.length; this.el.nativeElement.type = "number"; return; } if (this.isSpecial(event) || current == "") { if (event.keyCode == 8 || current != "") { this.prev = current; /** @type {?} */ var dotIndex = current.toString().indexOf('.'); if (dotIndex >= 0) this.haveDecimalPoint = false; } return; } if (!this.isNumber(event)) { event.preventDefault(); event.stopPropagation(); return false; } if (current) { current = current.toString(); /** @type {?} */ var dotIndex = current.indexOf('.'); if ((dotIndex >= 0) && ((current.length - 1) - dotIndex > this.decimals)) { this.renderer.setProperty(this.el.nativeElement, 'value', current.slice(0, dotIndex + this.decimals + 1)); } } else { this.renderer.setProperty(this.el.nativeElement, 'value', this.prev); } }; /** * @param {?} event * @return {?} */ NeoDecimalNumbersDirective.prototype.onKeyDown = /** * @param {?} event * @return {?} */ function (event) { if (this.isSpecial(event)) { return; } if (!this.isNumber(event)) { event.preventDefault(); event.stopPropagation(); return false; } /** @type {?} */ var current = this.el.nativeElement.value; if (this.isDecimalPoint(event)) { this.haveDecimalPoint = true; if (!current.endsWith(".0")) { this.el.nativeElement.value = current + ".0"; this.el.nativeElement.type = "text"; this.el.nativeElement.selectionStart = this.el.nativeElement.value.length - 1; this.el.nativeElement.selectionEnd = this.el.nativeElement.value.length; this.el.nativeElement.type = "number"; } } this.prev = current; }; /** * @private * @param {?} e * @return {?} */ NeoDecimalNumbersDirective.prototype.isSpecial = /** * @private * @param {?} e * @return {?} */ function (e) { return e.key === 'Delete' || (e.key === 'Tab' || e.keyCode == 9) || (e.key === 'Backspace' || e.keyCode == 8) || e.key === 'ArrowLeft' || e.altKey || e.ctrlKey || e.key === 'Home' || e.key === 'End' || e.key === 'PageDown' || e.key === 'PageUp' || e.key === 'ArrowDown' || e.key === 'ArrowUp' || e.key === 'ArrowRight' || e.key === 'Control' || e.key === 'Alt' || e.key === 'Shift' || (((/** @type {?} */ (e))).keyIdentifier == 'Down' || ((/** @type {?} */ (e))).keyIdentifier == 'Up'); }; /** * @private * @param {?} e * @return {?} */ NeoDecimalNumbersDirective.prototype.isNumber = /** * @private * @param {?} e * @return {?} */ function (e) { if (e instanceof KeyboardEvent) { return ((e.key >= '0' && e.key <= '9') || ((e.keyCode >= 48 && e.keyCode <= 57) || (e.keyCode >= 96 && e.keyCode <= 105)) || (e.key === '.' || e.key === ',') || (e.keyCode === 188 || e.keyCode === 190 || e.keyCode === 229)); } else { return ((e >= '0' && e <= '9') || (e === '.' || e === ',')); } }; /** * @private * @param {?} e * @return {?} */ NeoDecimalNumbersDirective.prototype.isDecimalPoint = /** * @private * @param {?} e * @return {?} */ function (e) { return (e.key === '.' || e.key === ',') || (e.keyCode === 188 || e.keyCode === 190 || e.keyCode === 229); }; NeoDecimalNumbersDirective.decorators = [ { type: Directive, args: [{ selector: '[isDecimal]', },] } ]; /** @nocollapse */ NeoDecimalNumbersDirective.ctorParameters = function () { return [ { type: ElementRef }, { type: Renderer2 }, { type: NgModel } ]; }; NeoDecimalNumbersDirective.propDecorators = { decimals: [{ type: Input, args: ['isDecimal',] }], allowNullValue: [{ type: Input, args: ['allowNullValue',] }], blockPaste: [{ type: HostListener, args: ['paste', ['$event'],] }], onfocus: [{ type: HostListener, args: ['focus',] }], onBlur: [{ type: HostListener, args: ['blur',] }], onKeyUp: [{ type: HostListener, args: ['keyup', ['$event'],] }], onKeyDown: [{ type: HostListener, args: ['keydown', ['$event'],] }] }; return NeoDecimalNumbersDirective; }()); export { NeoDecimalNumbersDirective }; if (false) { /** @type {?} */ NeoDecimalNumbersDirective.prototype.decimals; /** @type {?} */ NeoDecimalNumbersDirective.prototype.allowNullValue; /** * @type {?} * @private */ NeoDecimalNumbersDirective.prototype.prev; /** * @type {?} * @private */ NeoDecimalNumbersDirective.prototype.regex; /** * @type {?} * @private */ NeoDecimalNumbersDirective.prototype.haveDecimalPoint; /** * @type {?} * @private */ NeoDecimalNumbersDirective.prototype.el; /** * @type {?} * @private */ NeoDecimalNumbersDirective.prototype.renderer; /** * @type {?} * @private */ NeoDecimalNumbersDirective.prototype.model; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmVvLWRlY2ltYWxOdW1iZXJzLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BuZW9jb21wbGV4eC9uZ3gtbmVvLWRpcmVjdGl2ZXMvIiwic291cmNlcyI6WyJsaWIvbmVvLWRlY2ltYWxOdW1iZXJzLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQzlGLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV6QztJQVlJLG9DQUFvQixFQUFjLEVBQVUsUUFBbUIsRUFBVSxLQUFjO1FBQW5FLE9BQUUsR0FBRixFQUFFLENBQVk7UUFBVSxhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQVUsVUFBSyxHQUFMLEtBQUssQ0FBUztRQVBuRSxhQUFRLEdBQUcsQ0FBQyxDQUFDO1FBQ1IsbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFJeEMscUJBQWdCLEdBQUcsS0FBSyxDQUFDO0lBR2pDLENBQUM7Ozs7SUFFRCw2Q0FBUTs7O0lBQVI7UUFDSSxJQUFJLG1CQUFLLElBQUksQ0FBQyxRQUFRLEVBQUEsSUFBSSxFQUFFO1lBQUUsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUM7UUFDaEQsSUFBSSxtQkFBSyxJQUFJLENBQUMsY0FBYyxFQUFBLEtBQUssRUFBRTtZQUFFLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1FBQ2hFLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUE7UUFDckMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLE1BQU0sQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxDQUFDO0lBQzVFLENBQUM7Ozs7O0lBRWtDLCtDQUFVOzs7O0lBQTdDLFVBQThDLENBQWlCO1FBQS9E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LENBQUMsQ0FBQyxDQUFDO1NBQy9EO0lBQ0wsQ0FBQzs7Ozs7O0lBRU8sbURBQWM7Ozs7O0lBQXRCLFVBQXVCLENBQWdCO1FBQ25DLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLE9BQU8sS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLE9BQU8sS0FBSyxHQUFHLENBQUMsQ0FBQztJQUM3RyxDQUFDOztnQkFsS0osU0FBUyxTQUFDO29CQUNQLFFBQVEsRUFBRSxhQUFhO2lCQUMxQjs7OztnQkFMd0MsVUFBVTtnQkFBRSxTQUFTO2dCQUNyRCxPQUFPOzs7MkJBT1gsS0FBSyxTQUFDLFdBQVc7aUNBQ2pCLEtBQUssU0FBQyxnQkFBZ0I7NkJBZ0J0QixZQUFZLFNBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDOzBCQXlCaEMsWUFBWSxTQUFDLE9BQU87eUJBTXBCLFlBQVksU0FBQyxNQUFNOzBCQW9CbkIsWUFBWSxTQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQzs0QkE4Q2hDLFlBQVksU0FBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUM7O0lBNEN2QyxpQ0FBQztDQUFBLEFBbktELElBbUtDO1NBaEtZLDBCQUEwQjs7O0lBRW5DLDhDQUFpQzs7SUFDakMsb0RBQWdEOzs7OztJQUNoRCwwQ0FBa0I7Ozs7O0lBQ2xCLDJDQUFzQjs7Ozs7SUFFdEIsc0RBQWlDOzs7OztJQUVyQix3Q0FBc0I7Ozs7O0lBQUUsOENBQTJCOzs7OztJQUFFLDJDQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgSG9zdExpc3RlbmVyLCBJbnB1dCwgRWxlbWVudFJlZiwgUmVuZGVyZXIyLCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5nTW9kZWwgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW2lzRGVjaW1hbF0nLFxufSlcbmV4cG9ydCBjbGFzcyBOZW9EZWNpbWFsTnVtYmVyc0RpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgICBASW5wdXQoJ2lzRGVjaW1hbCcpIGRlY2ltYWxzID0gMjtcbiAgICBASW5wdXQoJ2FsbG93TnVsbFZhbHVlJykgYWxsb3dOdWxsVmFsdWUgPSBmYWxzZTtcbiAgICBwcml2YXRlIHByZXY6IGFueTtcbiAgICBwcml2YXRlIHJlZ2V4OiBSZWdFeHA7XG5cbiAgICBwcml2YXRlIGhhdmVEZWNpbWFsUG9pbnQgPSBmYWxzZTtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgZWw6IEVsZW1lbnRSZWYsIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMiwgcHJpdmF0ZSBtb2RlbDogTmdNb2RlbCkge1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICBpZiAoPGFueT50aGlzLmRlY2ltYWxzID09IFwiXCIpIHRoaXMuZGVjaW1hbHMgPSAyO1xuICAgICAgICBpZiAoPGFueT50aGlzLmFsbG93TnVsbFZhbHVlID09PSBcIlwiKSB0aGlzLmFsbG93TnVsbFZhbHVlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LnR5cGUgPSBcIm51bWJlclwiXG4gICAgICAgIHRoaXMucmVnZXggPSBuZXcgUmVnRXhwKCdeWzAtOV0rKFxcXFwuWzAtOV17MCwnICsgdGhpcy5kZWNpbWFscyArICd9KT8kJyk7XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcigncGFzdGUnLCBbJyRldmVudCddKSBibG9ja1Bhc3RlKGU6IENsaXBib2FyZEV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGNsaXBib2FyZERhdGE6IERhdGFUcmFuc2ZlciA9IGUuY2xpcGJvYXJkRGF0YSB8fCB3aW5kb3dbJ2NsaXBib2FyZERhdGEnXTtcbiAgICAgICAgbGV0IHBhc3RlZERhdGE6IHN0cmluZyA9IGNsaXBib2FyZERhdGEuZ2V0RGF0YSgndGV4dC9wbGFpbicpLnNwbGl0KFwiLFwiKS5qb2luKFwiLlwiKTtcblxuICAgICAgICBsZXQgcG9zUG9pbnQgPSBwYXN0ZWREYXRhLmxhc3RJbmRleE9mKCcuJyk7XG4gICAgICAgIGlmIChwb3NQb2ludCA+IC0xKSB7XG4gICAgICAgICAgICBwYXN0ZWREYXRhID0gcGFzdGVkRGF0YS5zdWJzdHJpbmcoMCwgcG9zUG9pbnQpLnNwbGl0KFwiLlwiKS5qb2luKFwiXCIpICsgcGFzdGVkRGF0YS5zdWJzdHJpbmcocG9zUG9pbnQpO1xuICAgICAgICAgICAgcG9zUG9pbnQgPSBwYXN0ZWREYXRhLmxhc3RJbmRleE9mKCcuJyk7XG4gICAgICAgICAgICBpZiAocG9zUG9pbnQgKyB0aGlzLmRlY2ltYWxzIDwgcGFzdGVkRGF0YS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBwYXN0ZWREYXRhID0gcGFzdGVkRGF0YS5zdWJzdHJpbmcoMCwgcG9zUG9pbnQgKyB0aGlzLmRlY2ltYWxzICsgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBvbmx5TnVtYmVycyA9IEFycmF5LmZyb20ocGFzdGVkRGF0YSkubWFwKHggPT4gdGhpcy5pc051bWJlcih4KSkucmVkdWNlKChwcmV2LCBlbCkgPT4gcHJldiAmJiBlbCwgdHJ1ZSk7XG4gICAgICAgIGNvbnN0IGEgPSB0aGlzLnJlZ2V4LnRlc3QocGFzdGVkRGF0YSk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKG9ubHlOdW1iZXJzICYmIGEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSBwYXN0ZWREYXRhO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSAnMCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAgICBcbiAgICAgICAgfSwgMTApO1xuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ2ZvY3VzJykgb25mb2N1cygpIHtcbiAgICAgICAgaWYgKHRoaXMuZWwubmF0aXZlRWxlbWVudC52YWx1ZSA9PSBcIjBcIikge1xuICAgICAgICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LnZhbHVlID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ2JsdXInKSBvbkJsdXIoKSB7XG4gICAgICAgIGxldCBjdXJyZW50OiBzdHJpbmcgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQudmFsdWU7XG4gICAgICAgIGlmIChjdXJyZW50ID09IFwiXCIpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmFsbG93TnVsbFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LnZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLmNvbnRyb2wuc2V0VmFsdWUobnVsbCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC52YWx1ZSA9IFwiMFwiO1xuICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuY29udHJvbC5zZXRWYWx1ZSgwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC50eXBlID0gXCJ0ZXh0XCI7XG4gICAgICAgICAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQudHlwZSA9IFwibnVtYmVyXCI7XG4gICAgICAgICAgICBpZiAodGhpcy5lbC5uYXRpdmVFbGVtZW50Lm1heCAmJiB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQudmFsdWVBc051bWJlciA+ICt0aGlzLmVsLm5hdGl2ZUVsZW1lbnQubWF4KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LnZhbHVlID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50Lm1heDtcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLmNvbnRyb2wuc2V0VmFsdWUodGhpcy5lbC5uYXRpdmVFbGVtZW50LnZhbHVlQXNOdW1iZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5dXAnLCBbJyRldmVudCddKSBvbktleVVwKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG5cbiAgICAgICAgbGV0IGN1cnJlbnQ6IHN0cmluZyA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC52YWx1ZTtcbiAgICAgICAgY3VycmVudCA9IGN1cnJlbnQuc3BsaXQoXCItXCIpLmpvaW4oXCJcIik7XG4gICAgICAgIGxldCBwb3NQb2ludCA9IGN1cnJlbnQuaW5kZXhPZignLicpO1xuICAgICAgICBpZiAocG9zUG9pbnQgPiAtMSkge1xuICAgICAgICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LnZhbHVlID0gY3VycmVudC5zdWJzdHJpbmcoMCwgcG9zUG9pbnQgKyAxKSArIGN1cnJlbnQuc3Vic3RyaW5nKHBvc1BvaW50KS5zcGxpdChcIi5cIikuam9pbihcIlwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmhhdmVEZWNpbWFsUG9pbnQgJiYgY3VycmVudCA9PSBcIlwiICYmIHRoaXMucHJldiA+IFwiXCIpIHtcbiAgICAgICAgICAgIHRoaXMuaGF2ZURlY2ltYWxQb2ludCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LnZhbHVlID0gdGhpcy5wcmV2ICsgKHRoaXMucHJldi5lbmRzV2l0aChcIi4wXCIpID8gXCJcIiA6IFwiLjBcIik7XG4gICAgICAgICAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQudHlwZSA9IFwidGV4dFwiO1xuICAgICAgICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LnNlbGVjdGlvblN0YXJ0ID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50LnZhbHVlLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuc2VsZWN0aW9uRW5kID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50LnZhbHVlLmxlbmd0aDtcbiAgICAgICAgICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC50eXBlID0gXCJudW1iZXJcIjtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmlzU3BlY2lhbChldmVudCkgfHwgY3VycmVudCA9PSBcIlwiKSB7IFxuICAgICAgICAgICAgaWYgKGV2ZW50LmtleUNvZGUgPT0gOCB8fCBjdXJyZW50ICE9IFwiXCIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByZXYgPSBjdXJyZW50O1xuICAgICAgICAgICAgICAgIGNvbnN0IGRvdEluZGV4ID0gY3VycmVudC50b1N0cmluZygpLmluZGV4T2YoJy4nKTtcbiAgICAgICAgICAgICAgICBpZiAoZG90SW5kZXggPj0gMCkgdGhpcy5oYXZlRGVjaW1hbFBvaW50ID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47IFxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLmlzTnVtYmVyKGV2ZW50KSkgeyBcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IFxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IFxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGN1cnJlbnQpIHtcbiAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LnRvU3RyaW5nKCk7XG4gICAgICAgICAgICBjb25zdCBkb3RJbmRleCA9IGN1cnJlbnQuaW5kZXhPZignLicpO1xuICAgICAgICAgICAgaWYgKChkb3RJbmRleCA+PSAwKSAmJiAoKGN1cnJlbnQubGVuZ3RoIC0gMSkgLSBkb3RJbmRleCA+IHRoaXMuZGVjaW1hbHMpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsICd2YWx1ZScsIGN1cnJlbnQuc2xpY2UoMCwgZG90SW5kZXggKyB0aGlzLmRlY2ltYWxzICsgMSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsICd2YWx1ZScsIHRoaXMucHJldik7XG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24nLCBbJyRldmVudCddKSBvbktleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcblxuICAgICAgICBpZiAodGhpcy5pc1NwZWNpYWwoZXZlbnQpKSB7IHJldHVybjsgfVxuXG4gICAgICAgIGlmICghdGhpcy5pc051bWJlcihldmVudCkpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IFxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IFxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBsZXQgY3VycmVudDogc3RyaW5nID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50LnZhbHVlO1xuXG4gICAgICAgIGlmICh0aGlzLmlzRGVjaW1hbFBvaW50KGV2ZW50KSkge1xuICAgICAgICAgICAgdGhpcy5oYXZlRGVjaW1hbFBvaW50ID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICghY3VycmVudC5lbmRzV2l0aChcIi4wXCIpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LnZhbHVlID0gY3VycmVudCArIFwiLjBcIjtcbiAgICAgICAgICAgICAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQudHlwZSA9IFwidGV4dFwiO1xuICAgICAgICAgICAgICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC5zZWxlY3Rpb25TdGFydCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC52YWx1ZS5sZW5ndGggLSAxO1xuICAgICAgICAgICAgICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC5zZWxlY3Rpb25FbmQgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQudmFsdWUubGVuZ3RoO1xuICAgICAgICAgICAgICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC50eXBlID0gXCJudW1iZXJcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnByZXYgPSBjdXJyZW50O1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNTcGVjaWFsKGU6IEtleWJvYXJkRXZlbnQpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGUua2V5ID09PSAnRGVsZXRlJyB8fCAoZS5rZXkgPT09ICdUYWInIHx8IGUua2V5Q29kZSA9PSA5KSB8fCAoZS5rZXkgPT09ICdCYWNrc3BhY2UnIHx8IGUua2V5Q29kZSA9PSA4KSB8fCBlLmtleSA9PT0gJ0Fycm93TGVmdCcgfHxcbiAgICAgICAgICAgIGUuYWx0S2V5IHx8IGUuY3RybEtleSB8fCBlLmtleSA9PT0gJ0hvbWUnIHx8IGUua2V5ID09PSAnRW5kJyB8fCBlLmtleSA9PT0gJ1BhZ2VEb3duJyB8fCBlLmtleSA9PT0gJ1BhZ2VVcCcgfHxcbiAgICAgICAgICAgIGUua2V5ID09PSAnQXJyb3dEb3duJyB8fCBlLmtleSA9PT0gJ0Fycm93VXAnIHx8IGUua2V5ID09PSAnQXJyb3dSaWdodCcgfHwgZS5rZXkgPT09ICdDb250cm9sJyB8fCBlLmtleSA9PT0gJ0FsdCcgfHwgZS5rZXkgPT09ICdTaGlmdCcgfHxcbiAgICAgICAgICAgICgoPGFueT5lKS5rZXlJZGVudGlmaWVyID09ICdEb3duJyB8fCAoPGFueT5lKS5rZXlJZGVudGlmaWVyID09ICdVcCcpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNOdW1iZXIoZTogS2V5Ym9hcmRFdmVudCB8IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiAoKGUua2V5ID49ICcwJyAmJiBlLmtleSA8PSAnOScpIHx8ICgoZS5rZXlDb2RlID49IDQ4ICYmIGUua2V5Q29kZSA8PSA1NykgfHwgKGUua2V5Q29kZSA+PSA5NiAmJiBlLmtleUNvZGUgPD0gMTA1KSkgfHwgXG4gICAgICAgICAgICAgICAgICAgIChlLmtleSA9PT0gJy4nIHx8IGUua2V5ID09PSAnLCcpIHx8IChlLmtleUNvZGUgPT09IDE4OCB8fCBlLmtleUNvZGUgPT09IDE5MCB8fCBlLmtleUNvZGUgPT09IDIyOSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuICgoZSA+PSAnMCcgJiYgZSA8PSAnOScpIHx8IChlID09PSAnLicgfHwgZSA9PT0gJywnKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGlzRGVjaW1hbFBvaW50KGU6IEtleWJvYXJkRXZlbnQpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIChlLmtleSA9PT0gJy4nIHx8IGUua2V5ID09PSAnLCcpIHx8IChlLmtleUNvZGUgPT09IDE4OCB8fCBlLmtleUNvZGUgPT09IDE5MCB8fCBlLmtleUNvZGUgPT09IDIyOSk7XG4gICAgfVxufVxuIl19