ngx-mask-2
Version:
awesome ngx mask
189 lines (188 loc) • 18.4 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
import { ElementRef, Inject, Injectable, Renderer2 } from '@angular/core';
import { config } from './config';
import { DOCUMENT } from '@angular/common';
import { MaskApplierService } from './mask-applier.service';
export class MaskService extends MaskApplierService {
/**
* @param {?} document
* @param {?} _config
* @param {?} _elementRef
* @param {?} _renderer
*/
constructor(
// tslint:disable-next-line
document, _config, _elementRef, _renderer) {
super(_config);
this.document = document;
this._config = _config;
this._elementRef = _elementRef;
this._renderer = _renderer;
this.maskExpression = '';
this.isNumberValue = false;
this.showMaskTyped = false;
this.maskIsShown = '';
this.onChange = (_) => { };
this.onTouch = () => { };
this._formElement = this._elementRef.nativeElement;
}
/**
* @param {?} inputValue
* @param {?} maskExpression
* @param {?=} position
* @param {?=} cb
* @return {?}
*/
applyMask(inputValue, maskExpression, position = 0, cb = () => { }) {
this.maskIsShown = this.showMaskTyped
? this.maskExpression.replace(/[0-9]/g, '_')
: '';
if (!inputValue && this.showMaskTyped) {
return this.prefix + this.maskIsShown;
}
/** @type {?} */
const result = super.applyMask(inputValue, maskExpression, position, cb);
/** @type {?} */
let finalResult = Array.isArray(this.dropSpecialCharacters)
? (this._removeMask(this._removeSufix((this.appendPrefixToModel ? result : this._removePrefix(result))), this.dropSpecialCharacters))
: (this.dropSpecialCharacters === true
? (this.isNumberValue
? Number(this._removeMask(this._removeSufix((this.appendPrefixToModel ? result : this._removePrefix(result))), this.maskSpecialCharacters))
: this._removeMask(this._removeSufix((this.appendPrefixToModel ? result : this._removePrefix(result))), this.maskSpecialCharacters))
: (this._removeSufix((this.appendPrefixToModel ? result : this._removePrefix(result)))));
if (this.prefix === finalResult || this.prefix.replace(' ', '') === finalResult
|| this._removeMask(this.prefix, this.maskSpecialCharacters) === finalResult) {
finalResult = '';
}
this.onChange(finalResult);
/** @type {?} */
let ifMaskIsShown = '';
if (!this.showMaskTyped) {
return result;
}
/** @type {?} */
const resLen = result.length;
/** @type {?} */
const prefNmask = this.prefix + this.maskIsShown;
ifMaskIsShown = prefNmask.slice(resLen);
return result + ifMaskIsShown;
}
/**
* @param {?=} position
* @param {?=} cb
* @return {?}
*/
applyValueChanges(position = 0, cb = () => { }) {
/** @type {?} */
const maskedInput = this.applyMask(this._formElement.value, this.maskExpression, position, cb);
this._formElement.value = maskedInput;
if (this._formElement === this.document.activeElement) {
return;
}
this.clearIfNotMatchFn();
}
/**
* @return {?}
*/
showMaskInInput() {
if (this.showMaskTyped) {
this.maskIsShown = this.maskExpression.replace(/[0-9]/g, '_');
}
}
/**
* @return {?}
*/
clearIfNotMatchFn() {
if (this.clearIfNotMatch === true &&
this.maskExpression.length !== this._formElement.value.length) {
this.formElementProperty = ['value', ''];
this.applyMask(this._formElement.value, this.maskExpression);
}
}
/**
* @param {?} __0
* @return {?}
*/
set formElementProperty([name, value]) {
this._renderer.setProperty(this._formElement, name, value);
}
/**
* @param {?} value
* @param {?} specialCharactersForRemove
* @return {?}
*/
_removeMask(value, specialCharactersForRemove) {
return value
? value.replace(this._regExpForRemove(specialCharactersForRemove), '')
: value;
}
/**
* @param {?} value
* @return {?}
*/
_removePrefix(value) {
if (!this.prefix) {
return value;
}
return value
? value.replace(this.prefix, '')
: value;
}
/**
* @param {?} value
* @return {?}
*/
_removeSufix(value) {
if (!this.sufix) {
return value;
}
return value
? value.replace(this.sufix, '')
: value;
}
/**
* @param {?} specialCharactersForRemove
* @return {?}
*/
_regExpForRemove(specialCharactersForRemove) {
return new RegExp(specialCharactersForRemove.map((item) => `\\${item}`).join('|'), 'gi');
}
}
MaskService.decorators = [
{ type: Injectable }
];
/** @nocollapse */
MaskService.ctorParameters = () => [
{ type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] },
{ type: undefined, decorators: [{ type: Inject, args: [config,] }] },
{ type: ElementRef },
{ type: Renderer2 }
];
if (false) {
/** @type {?} */
MaskService.prototype.maskExpression;
/** @type {?} */
MaskService.prototype.isNumberValue;
/** @type {?} */
MaskService.prototype.showMaskTyped;
/** @type {?} */
MaskService.prototype.maskIsShown;
/** @type {?} */
MaskService.prototype._formElement;
/** @type {?} */
MaskService.prototype.onChange;
/** @type {?} */
MaskService.prototype.onTouch;
/** @type {?} */
MaskService.prototype.document;
/** @type {?} */
MaskService.prototype._config;
/** @type {?} */
MaskService.prototype._elementRef;
/** @type {?} */
MaskService.prototype._renderer;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFzay5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmd4LW1hc2stMi8iLCJzb3VyY2VzIjpbImFwcC9uZ3gtbWFzay9tYXNrLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUUsT0FBTyxFQUFFLE1BQU0sRUFBVyxNQUFNLFVBQVUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFHNUQsTUFBTSxrQkFBbUIsU0FBUSxrQkFBa0I7Ozs7Ozs7OztJQVdyQixRQUFhLEVBQ2IsT0FBZ0IsRUFDbEMsYUFDQTtRQUVSLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUxXLGFBQVEsR0FBUixRQUFRLENBQUs7UUFDYixZQUFPLEdBQVAsT0FBTyxDQUFTO1FBQ2xDLGdCQUFXLEdBQVgsV0FBVztRQUNYLGNBQVMsR0FBVCxTQUFTOzhCQWJhLEVBQUU7NkJBQ0YsS0FBSzs2QkFDTCxLQUFLOzJCQUNSLEVBQUU7d0JBR2IsQ0FBQyxDQUFNLEVBQUUsRUFBRSxJQUFHO3VCQUNmLEdBQUcsRUFBRSxJQUFHO1FBU3ZCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUM7Ozs7Ozs7OztJQUc5QyxTQUFTLENBQ2QsVUFBa0IsRUFDbEIsY0FBc0IsRUFDdEIsV0FBbUIsQ0FBQyxFQUNwQixLQUFlLEdBQUcsRUFBRSxJQUFHO1FBRXZCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGFBQWE7WUFDakMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUM7WUFDNUMsQ0FBQyxDQUFDLEVBQUUsQ0FB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QUFFO1lBQ2hCLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFDRCxPQUFPLEtBQUs7WUFDVixDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztZQUNoQyxDQUFDLENBQUMsS0FBSyxDQUFDOzs7Ozs7SUFHSixZQUFZLENBQUMsS0FBYTtRQUNoQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNmLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFDRCxPQUFPLEtBQUs7WUFDVixDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQztZQUMvQixDQUFDLENBQUMsS0FBSyxDQUFDOzs7Ozs7SUFHSixnQkFBZ0IsQ0FBQywwQkFBb0M7UUFDM0QsT0FBTyxJQUFJLE1BQU0sQ0FDZiwwQkFBMEIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFZLEVBQUUsRUFBRSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQ3ZFLElBQUksQ0FDTCxDQUFDOzs7O1lBNUlMLFVBQVU7Ozs7NENBWU4sTUFBTSxTQUFDLFFBQVE7NENBQ2YsTUFBTSxTQUFDLE1BQU07WUFsQlQsVUFBVTtZQUFzQixTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRWxlbWVudFJlZiwgSW5qZWN0LCBJbmplY3RhYmxlLCBSZW5kZXJlcjIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgY29uZmlnLCBJQ29uZmlnIH0gZnJvbSAnLi9jb25maWcnO1xyXG5pbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IE1hc2tBcHBsaWVyU2VydmljZSB9IGZyb20gJy4vbWFzay1hcHBsaWVyLnNlcnZpY2UnO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgTWFza1NlcnZpY2UgZXh0ZW5kcyBNYXNrQXBwbGllclNlcnZpY2Uge1xyXG4gIHB1YmxpYyBtYXNrRXhwcmVzc2lvbjogc3RyaW5nID0gJyc7XHJcbiAgcHVibGljIGlzTnVtYmVyVmFsdWU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgc2hvd01hc2tUeXBlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBtYXNrSXNTaG93bjogc3RyaW5nID0gJyc7XHJcbiAgcHJpdmF0ZSBfZm9ybUVsZW1lbnQ6IEhUTUxJbnB1dEVsZW1lbnQ7XHJcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lXHJcbiAgcHVibGljIG9uQ2hhbmdlID0gKF86IGFueSkgPT4ge307XHJcbiAgcHVibGljIG9uVG91Y2ggPSAoKSA9PiB7fTtcclxuICBwdWJsaWMgY29uc3RydWN0b3IoXHJcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmVcclxuICAgIEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgZG9jdW1lbnQ6IGFueSxcclxuICAgIEBJbmplY3QoY29uZmlnKSBwcm90ZWN0ZWQgX2NvbmZpZzogSUNvbmZpZyxcclxuICAgIHByaXZhdGUgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXHJcbiAgICBwcml2YXRlIF9yZW5kZXJlcjogUmVuZGVyZXIyXHJcbiAgKSB7XHJcbiAgICBzdXBlcihfY29uZmlnKTtcclxuICAgIHRoaXMuX2Zvcm1FbGVtZW50ID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFwcGx5TWFzayhcclxuICAgIGlucHV0VmFsdWU6IHN0cmluZyxcclxuICAgIG1hc2tFeHByZXNzaW9uOiBzdHJpbmcsXHJcbiAgICBwb3NpdGlvbjogbnVtYmVyID0gMCxcclxuICAgIGNiOiBGdW5jdGlvbiA9ICgpID0+IHt9XHJcbiAgKTogc3RyaW5nICB7XHJcbiAgICB0aGlzLm1hc2tJc1Nob3duID0gdGhpcy5zaG93TWFza1R5cGVkXHJcbiAgICAgICAgPyB0aGlzLm1hc2tFeHByZXNzaW9uLnJlcGxhY2UoL1swLTldL2csICdfJylcclxuICAgICAgICA6ICcnO1xyXG4gICAgaWYgKCFpbnB1dFZhbHVlICYmIHRoaXMuc2hvd01hc2tUeXBlZCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5wcmVmaXggKyB0aGlzLm1hc2tJc1Nob3duO1xyXG4gICAgfVxyXG4gICAgY29uc3QgcmVzdWx0OiBzdHJpbmcgID0gc3VwZXIuYXBwbHlNYXNrKFxyXG4gICAgICBpbnB1dFZhbHVlLFxyXG4gICAgICBtYXNrRXhwcmVzc2lvbixcclxuICAgICAgcG9zaXRpb24sXHJcbiAgICAgIGNiXHJcbiAgICApO1xyXG5cclxuICAgIGxldCBmaW5hbFJlc3VsdDogc3RyaW5nIHwgbnVtYmVyID0gQXJyYXkuaXNBcnJheSh0aGlzLmRyb3BTcGVjaWFsQ2hhcmFjdGVycylcclxuICAgICAgICA/ICh0aGlzLl9yZW1vdmVNYXNrKHRoaXMuX3JlbW92ZVN1Zml4KFxyXG4gICAgICAgICh0aGlzLmFwcGVuZFByZWZpeFRvTW9kZWwgPyByZXN1bHQgOiB0aGlzLl9yZW1vdmVQcmVmaXgocmVzdWx0KSlcclxuICAgICAgICApLCB0aGlzLmRyb3BTcGVjaWFsQ2hhcmFjdGVycykpXHJcbiAgICAgICAgOiAodGhpcy5kcm9wU3BlY2lhbENoYXJhY3RlcnMgPT09IHRydWVcclxuICAgICAgICAgPyAoXHJcbiAgICAgICAgIHRoaXMuaXNOdW1iZXJWYWx1ZVxyXG4gICAgICAgICAgICAgPyBOdW1iZXIodGhpcy5fcmVtb3ZlTWFzayh0aGlzLl9yZW1vdmVTdWZpeChcclxuICAgICAgICAgICAgICh0aGlzLmFwcGVuZFByZWZpeFRvTW9kZWwgPyByZXN1bHQgOiB0aGlzLl9yZW1vdmVQcmVmaXgocmVzdWx0KSkpLCB0aGlzLm1hc2tTcGVjaWFsQ2hhcmFjdGVycykpXHJcbiAgICAgICAgICAgICA6IHRoaXMuX3JlbW92ZU1hc2sodGhpcy5fcmVtb3ZlU3VmaXgoXHJcbiAgICAgICAgICAgICAodGhpcy5hcHBlbmRQcmVmaXhUb01vZGVsID8gcmVzdWx0IDogdGhpcy5fcmVtb3ZlUHJlZml4KHJlc3VsdCkpKSwgdGhpcy5tYXNrU3BlY2lhbENoYXJhY3RlcnMpXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgOiAodGhpcy5fcmVtb3ZlU3VmaXgoKHRoaXMuYXBwZW5kUHJlZml4VG9Nb2RlbCA/IHJlc3VsdCA6IHRoaXMuX3JlbW92ZVByZWZpeChyZXN1bHQpKSkpKTtcclxuXHJcbiAgICBpZiAodGhpcy5wcmVmaXggPT09IGZpbmFsUmVzdWx0IHx8IHRoaXMucHJlZml4LnJlcGxhY2UoJyAnLCAnJykgPT09IGZpbmFsUmVzdWx0XHJcbiAgICAgICAgfHwgdGhpcy5fcmVtb3ZlTWFzayh0aGlzLnByZWZpeCwgdGhpcy5tYXNrU3BlY2lhbENoYXJhY3RlcnMpID09PSBmaW5hbFJlc3VsdCkge1xyXG4gICAgICAgIGZpbmFsUmVzdWx0ID0gJyc7XHJcbiAgICB9XHJcbiAgICB0aGlzLm9uQ2hhbmdlKGZpbmFsUmVzdWx0KTtcclxuXHJcbiAgICBsZXQgaWZNYXNrSXNTaG93bjogc3RyaW5nID0gJyc7XHJcbiAgICBpZiAoIXRoaXMuc2hvd01hc2tUeXBlZCkge1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgICBjb25zdCByZXNMZW46IG51bWJlciA9IHJlc3VsdC5sZW5ndGg7XHJcbiAgICBjb25zdCBwcmVmTm1hc2s6IHN0cmluZyA9IHRoaXMucHJlZml4ICsgdGhpcy5tYXNrSXNTaG93bjtcclxuICAgIGlmTWFza0lzU2hvd24gPSBwcmVmTm1hc2suc2xpY2UocmVzTGVuKTtcclxuXHJcbiAgICByZXR1cm4gcmVzdWx0ICsgaWZNYXNrSXNTaG93bjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhcHBseVZhbHVlQ2hhbmdlcyhcclxuICAgIHBvc2l0aW9uOiBudW1iZXIgPSAwLFxyXG4gICAgY2I6IEZ1bmN0aW9uID0gKCkgPT4ge31cclxuICApOiB2b2lkIHtcclxuICAgIGNvbnN0IG1hc2tlZElucHV0OiBzdHJpbmcgfCBudW1iZXIgPSB0aGlzLmFwcGx5TWFzayhcclxuICAgICAgdGhpcy5fZm9ybUVsZW1lbnQudmFsdWUsXHJcbiAgICAgIHRoaXMubWFza0V4cHJlc3Npb24sXHJcbiAgICAgIHBvc2l0aW9uLFxyXG4gICAgICBjYlxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLl9mb3JtRWxlbWVudC52YWx1ZSA9IG1hc2tlZElucHV0O1xyXG4gICAgaWYgKHRoaXMuX2Zvcm1FbGVtZW50ID09PSB0aGlzLmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jbGVhcklmTm90TWF0Y2hGbigpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNob3dNYXNrSW5JbnB1dCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNob3dNYXNrVHlwZWQpIHtcclxuICAgICAgdGhpcy5tYXNrSXNTaG93biA9IHRoaXMubWFza0V4cHJlc3Npb24ucmVwbGFjZSgvWzAtOV0vZywgJ18nKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBjbGVhcklmTm90TWF0Y2hGbigpOiB2b2lkIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5jbGVhcklmTm90TWF0Y2ggPT09IHRydWUgJiZcclxuICAgICAgdGhpcy5tYXNrRXhwcmVzc2lvbi5sZW5ndGggIT09IHRoaXMuX2Zvcm1FbGVtZW50LnZhbHVlLmxlbmd0aFxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuZm9ybUVsZW1lbnRQcm9wZXJ0eSA9IFsndmFsdWUnLCAnJ107XHJcbiAgICAgIHRoaXMuYXBwbHlNYXNrKHRoaXMuX2Zvcm1FbGVtZW50LnZhbHVlLCB0aGlzLm1hc2tFeHByZXNzaW9uKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgZm9ybUVsZW1lbnRQcm9wZXJ0eShbbmFtZSwgdmFsdWVdOiBbc3RyaW5nLCBzdHJpbmcgfCBib29sZWFuXSkge1xyXG4gICAgdGhpcy5fcmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5fZm9ybUVsZW1lbnQsIG5hbWUsIHZhbHVlKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBfcmVtb3ZlTWFzayhcclxuICAgIHZhbHVlOiBzdHJpbmcsXHJcbiAgICBzcGVjaWFsQ2hhcmFjdGVyc0ZvclJlbW92ZTogc3RyaW5nW11cclxuICApOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHZhbHVlXHJcbiAgICAgID8gdmFsdWUucmVwbGFjZSh0aGlzLl9yZWdFeHBGb3JSZW1vdmUoc3BlY2lhbENoYXJhY3RlcnNGb3JSZW1vdmUpLCAnJylcclxuICAgICAgOiB2YWx1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBfcmVtb3ZlUHJlZml4KHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgaWYgKCF0aGlzLnByZWZpeCkge1xyXG4gICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFsdWVcclxuICAgICAgPyB2YWx1ZS5yZXBsYWNlKHRoaXMucHJlZml4LCAnJylcclxuICAgICAgOiB2YWx1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3JlbW92ZVN1Zml4KHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgaWYgKCF0aGlzLnN1Zml4KSB7XHJcbiAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiB2YWx1ZVxyXG4gICAgICA/IHZhbHVlLnJlcGxhY2UodGhpcy5zdWZpeCwgJycpXHJcbiAgICAgIDogdmFsdWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9yZWdFeHBGb3JSZW1vdmUoc3BlY2lhbENoYXJhY3RlcnNGb3JSZW1vdmU6IHN0cmluZ1tdKTogUmVnRXhwIHtcclxuICAgIHJldHVybiBuZXcgUmVnRXhwKFxyXG4gICAgICBzcGVjaWFsQ2hhcmFjdGVyc0ZvclJlbW92ZS5tYXAoKGl0ZW06IHN0cmluZykgPT4gYFxcXFwke2l0ZW19YCkuam9pbignfCcpLFxyXG4gICAgICAnZ2knXHJcbiAgICApO1xyXG4gIH1cclxufVxyXG4iXX0=