UNPKG

@kre-form/survey

Version:

248 lines 28.5 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Input, NgZone, Output, ElementRef, Directive, EventEmitter, } from '@angular/core'; export class ContenteditableModel { // changeBySelf = false; // instance: any; // cursor: any; // splitIndex; // debounceTimeout: any; // lastRange: any; // editableEle: any; // priousV: string; // languagetype = 1; // private lastViewModel: any; /** * @param {?} elRef * @param {?} zone */ constructor(elRef, zone) { this.elRef = elRef; this.zone = zone; this.model = {}; this.hasI18n = false; this.change = new EventEmitter(); // @Output() limetValue: EventEmitter<any> = new EventEmitter<any>(); this.blur = new EventEmitter(); this.focus = new EventEmitter(); this.debounce = ""; this.placeholder = ''; this.brMode = false; } /** * @return {?} */ ngAfterViewInit() { //this.initEditor(); } // initEditor() { // let config = { // startupFocus: false, // toolbar: 'Basic', // allowedContent: true, // placeholder: this.placeholder, // extraPlugins: '', // toolbar_Basic: [ // [ // 'Font', // 'FontSize', // 'Bold', // 'Underline', // 'Italic', // '-', // 'JustifyLeft', // 'JustifyCenter', // 'JustifyRight', // 'TextColor', // 'BGColor', // ], // ] // }; // if (this.hasI18n) { // const pluginName = (config.extraPlugins ? ',' : '') + 'i18n'; // config.extraPlugins = config.extraPlugins + pluginName; // config.toolbar_Basic[0].unshift('Chinese', '-', 'English'); // } // // console.log('config==', config); // if (this.brMode) { // config['enterMode'] = CKEDITOR.ENTER_BR; // config['shiftEnterMode'] = CKEDITOR.ENTER_BR; // } // this.instance = CKEDITOR.inline(this.elRef.nativeElement, config); // // console.log('this.instance==', this.instance); // // 设置国际化语言及侦听 // // this.languagetype = this.instance.element.getAttribute('data-i18n') || this.languagetype; // // this.instance.on('i18n', (evt: any) => { // // // console.log('i18n change= ', evt); // // if (evt.data != this.languagetype) { // // this.languagetype = evt.data; // // this.updateEditorValue(); // // } // // }); // // 更新表单值 // this.updateEditorValue(); // // CKEditor blur event // this.instance.on('blur', (evt: any) => { // this.blur.emit(evt); // }); // // CKEditor focus event // this.instance.on('focus', (evt: any) => { // this.focus.emit(evt); // }); // this.instance.on('change', (evt: any) => { // // console.log('onchange == ', evt); // let value = this.instance.getData(); // if (this.model !== value) { // // Debounce update // if (this.debounce) { // if (this.debounceTimeout) clearTimeout(this.debounceTimeout); // this.debounceTimeout = setTimeout(() => { // this.updateValue(this.instance.getData()); // this.debounceTimeout = null; // }, parseInt(this.debounce, 10)); // } else { // this.updateValue(value); // } // } // }); // } // doFocus() { // setTimeout(() => { // this.instance.focus(); // }, 0); // } // insertAfter(newElement, targetElement) { // var parent = targetElement.parentNode; // if (parent.lastChild == targetElement) { // parent.appendChild(newElement); // } else { // parent.insertBefore(newElement, targetElement.nextSibling); // } // } /** * @param {?} changes * @return {?} */ ngOnChanges(changes) { // this.lastViewModel = this.model; // this.updateEditorValue(); } // onKeyup() { // var value = this.elRef.nativeElement.innerHTML; // this.lastViewModel = value; // this.change.emit(value); // } // updateValue(value: any) { // // this.zone.run(() => { // // this.lastViewModel = value; // // this.changeBySelf = true; // // if (_.isArray(this.model)) { // // const found = this.model.find(item => { // // return item.languagetype == this.languagetype; //zhcn // // }); // // if (found) { // // found.name = value; // // } // // this.change.emit(this.model); // // } else { // // this.change.emit(value); // // } // // }); // } // refreshView() { // if (this.instance) this.instance.setData(this.lastViewModel); // // this.elRef.nativeElement.innerHTML = this.lastViewModel // } // updateEditorValue() { // // if (this.instance) { // // let model = this.model; // // // console.log('this.model==', this.model); // // if (_.isArray(this.model)) { // // let foundItem = this.model.find(item => { // // return item.languagetype == this.languagetype; //zhcn // // }); // // if (!foundItem) { // // foundItem = { languagetype: this.languagetype, id: 0, name: '' }; // // this.model.push(foundItem); // // } // // model = foundItem.name; // // } // // this.instance.setData(model); // // } // } // empty() { // this.model = ''; // this.lastViewModel = ''; // this.instance.setData(''); // } /** * On component destroy * @return {?} */ ngOnDestroy() { // if (this.debounceTimeout) { // clearTimeout(this.debounceTimeout); // this.debounceTimeout = null; // } // if (this.instance) { // setTimeout(() => { // this.instance.removeAllListeners(); // let dom = document.querySelector('#cke_' + this.instance.name); // if (dom) { // dom.parentNode.removeChild(dom); // } // CKEDITOR.instances[this.instance.name].destroy(true); // this.instance.destroy(true); // this.instance = null; // }); // } } } ContenteditableModel.decorators = [ { type: Directive, args: [{ selector: '[contenteditableModel]', },] } ]; /** @nocollapse */ ContenteditableModel.ctorParameters = () => [ { type: ElementRef }, { type: NgZone } ]; ContenteditableModel.propDecorators = { model: [{ type: Input, args: ['contenteditableModel',] }], hasI18n: [{ type: Input }], change: [{ type: Output, args: ['contenteditableModelChange',] }], blur: [{ type: Output }], focus: [{ type: Output }], debounce: [{ type: Input }], placeholder: [{ type: Input }], brMode: [{ type: Input }] }; if (false) { /** @type {?} */ ContenteditableModel.prototype.model; /** @type {?} */ ContenteditableModel.prototype.hasI18n; /** @type {?} */ ContenteditableModel.prototype.change; /** @type {?} */ ContenteditableModel.prototype.blur; /** @type {?} */ ContenteditableModel.prototype.focus; /** @type {?} */ ContenteditableModel.prototype.debounce; /** @type {?} */ ContenteditableModel.prototype.placeholder; /** @type {?} */ ContenteditableModel.prototype.brMode; /** * @type {?} * @private */ ContenteditableModel.prototype.elRef; /** @type {?} */ ContenteditableModel.prototype.zone; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudGVkaXRhYmxlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGtyZS1mb3JtL3N1cnZleS8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnRzL2lubGluZS1lZGl0b3IvY29udGVudGVkaXRhYmxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQ0wsS0FBSyxFQUNMLE1BQU0sRUFDTixNQUFNLEVBR04sVUFBVSxFQUNWLFNBQVMsRUFDVCxZQUFZLEdBSWIsTUFBTSxlQUFlLENBQUM7QUFRdkIsTUFBTSxPQUFPLG9CQUFvQjs7Ozs7Ozs7Ozs7Ozs7O0lBcUIvQixZQUFvQixLQUFpQixFQUFTLElBQVk7UUFBdEMsVUFBSyxHQUFMLEtBQUssQ0FBWTtRQUFTLFNBQUksR0FBSixJQUFJLENBQVE7UUFwQjNCLFVBQUssR0FBTSxFQUFFLENBQUM7UUFDcEMsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUNhLFdBQU0sR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDOztRQUV4RCxTQUFJLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUMxQixVQUFLLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUM1QixhQUFRLEdBQVMsRUFBRSxDQUFDO1FBQ3BCLGdCQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLFdBQU0sR0FBRyxLQUFLLENBQUM7SUFZcUMsQ0FBQzs7OztJQUU5RCxlQUFlO1FBQ2Isb0JBQW9CO0lBQ3RCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBOEZELFdBQVcsQ0FBQyxPQUFXO1FBQ3JCLG1DQUFtQztRQUNuQyw0QkFBNEI7SUFDOUIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUEwREQsV0FBVztRQUNULDhCQUE4QjtRQUM5Qix3Q0FBd0M7UUFDeEMsaUNBQWlDO1FBQ2pDLElBQUk7UUFDSix1QkFBdUI7UUFDdkIsdUJBQXVCO1FBQ3ZCLDBDQUEwQztRQUMxQyxzRUFBc0U7UUFDdEUsaUJBQWlCO1FBQ2pCLHlDQUF5QztRQUN6QyxRQUFRO1FBQ1IsNERBQTREO1FBQzVELG1DQUFtQztRQUNuQyw0QkFBNEI7UUFDNUIsUUFBUTtRQUNSLElBQUk7SUFDTixDQUFDOzs7WUF4TUYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSx3QkFBd0I7YUFDbkM7Ozs7WUFiQyxVQUFVO1lBSlYsTUFBTTs7O29CQW1CTCxLQUFLLFNBQUMsc0JBQXNCO3NCQUM1QixLQUFLO3FCQUNMLE1BQU0sU0FBQyw0QkFBNEI7bUJBRW5DLE1BQU07b0JBQ04sTUFBTTt1QkFDTixLQUFLOzBCQUNMLEtBQUs7cUJBQ0wsS0FBSzs7OztJQVJOLHFDQUE2Qzs7SUFDN0MsdUNBQXlCOztJQUN6QixzQ0FBa0U7O0lBRWxFLG9DQUFvQzs7SUFDcEMscUNBQXFDOztJQUNyQyx3Q0FBNkI7O0lBQzdCLDJDQUEwQjs7SUFDMUIsc0NBQXdCOzs7OztJQVlaLHFDQUF5Qjs7SUFBRSxvQ0FBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIElucHV0LFxyXG4gIE5nWm9uZSxcclxuICBPdXRwdXQsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIEhvc3RMaXN0ZW5lcixcclxuICBFbGVtZW50UmVmLFxyXG4gIERpcmVjdGl2ZSxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgT25Jbml0LFxyXG4gIFR5cGUsXHJcbiAgVmlld0NvbnRhaW5lclJlZixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5kZWNsYXJlIHZhciBDS0VESVRPUjogYW55OyBcclxuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnO1xyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgc2VsZWN0b3I6ICdbY29udGVudGVkaXRhYmxlTW9kZWxdJyxcclxufSlcclxuZXhwb3J0IGNsYXNzIENvbnRlbnRlZGl0YWJsZU1vZGVsIGltcGxlbWVudHMgT25DaGFuZ2VzIHtcclxuICBASW5wdXQoJ2NvbnRlbnRlZGl0YWJsZU1vZGVsJykgbW9kZWw6IGFueT17fTtcclxuICBASW5wdXQoKSBoYXNJMThuID0gZmFsc2U7XHJcbiAgQE91dHB1dCgnY29udGVudGVkaXRhYmxlTW9kZWxDaGFuZ2UnKSBjaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgLy8gQE91dHB1dCgpIGxpbWV0VmFsdWU6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIGJsdXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGZvY3VzID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBJbnB1dCgpIGRlYm91bmNlOiBzdHJpbmc9XCJcIjtcclxuICBASW5wdXQoKSBwbGFjZWhvbGRlciA9ICcnO1xyXG4gIEBJbnB1dCgpIGJyTW9kZSA9IGZhbHNlO1xyXG5cclxuICAvLyBjaGFuZ2VCeVNlbGYgPSBmYWxzZTtcclxuICAvLyBpbnN0YW5jZTogYW55O1xyXG4gIC8vIGN1cnNvcjogYW55O1xyXG4gIC8vIHNwbGl0SW5kZXg7XHJcbiAgLy8gZGVib3VuY2VUaW1lb3V0OiBhbnk7XHJcbiAgLy8gbGFzdFJhbmdlOiBhbnk7XHJcbiAgLy8gZWRpdGFibGVFbGU6IGFueTtcclxuICAvLyBwcmlvdXNWOiBzdHJpbmc7XHJcbiAgLy8gbGFuZ3VhZ2V0eXBlID0gMTtcclxuICAvLyBwcml2YXRlIGxhc3RWaWV3TW9kZWw6IGFueTtcclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsUmVmOiBFbGVtZW50UmVmLCBwdWJsaWMgem9uZTogTmdab25lKSB7fVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICAvL3RoaXMuaW5pdEVkaXRvcigpO1xyXG4gIH1cclxuXHJcbiAgLy8gaW5pdEVkaXRvcigpIHtcclxuICAvLyAgIGxldCBjb25maWcgPSB7XHJcbiAgLy8gICAgIHN0YXJ0dXBGb2N1czogZmFsc2UsXHJcbiAgLy8gICAgIHRvb2xiYXI6ICdCYXNpYycsXHJcbiAgLy8gICAgIGFsbG93ZWRDb250ZW50OiB0cnVlLFxyXG4gIC8vICAgICBwbGFjZWhvbGRlcjogdGhpcy5wbGFjZWhvbGRlcixcclxuICAvLyAgICAgZXh0cmFQbHVnaW5zOiAnJyxcclxuICAvLyAgICAgdG9vbGJhcl9CYXNpYzogW1xyXG4gIC8vICAgICAgIFtcclxuICAvLyAgICAgICAgICdGb250JyxcclxuICAvLyAgICAgICAgICdGb250U2l6ZScsXHJcbiAgLy8gICAgICAgICAnQm9sZCcsXHJcbiAgLy8gICAgICAgICAnVW5kZXJsaW5lJyxcclxuICAvLyAgICAgICAgICdJdGFsaWMnLFxyXG4gIC8vICAgICAgICAgJy0nLFxyXG4gIC8vICAgICAgICAgJ0p1c3RpZnlMZWZ0JyxcclxuICAvLyAgICAgICAgICdKdXN0aWZ5Q2VudGVyJyxcclxuICAvLyAgICAgICAgICdKdXN0aWZ5UmlnaHQnLFxyXG4gIC8vICAgICAgICAgJ1RleHRDb2xvcicsXHJcbiAgLy8gICAgICAgICAnQkdDb2xvcicsXHJcbiAgLy8gICAgICAgXSxcclxuICAvLyAgICAgXVxyXG4gIC8vICAgfTtcclxuICAvLyAgIGlmICh0aGlzLmhhc0kxOG4pIHtcclxuICAvLyAgICAgY29uc3QgcGx1Z2luTmFtZSA9IChjb25maWcuZXh0cmFQbHVnaW5zID8gJywnIDogJycpICsgJ2kxOG4nO1xyXG4gIC8vICAgICBjb25maWcuZXh0cmFQbHVnaW5zID0gY29uZmlnLmV4dHJhUGx1Z2lucyArIHBsdWdpbk5hbWU7XHJcbiAgLy8gICAgIGNvbmZpZy50b29sYmFyX0Jhc2ljWzBdLnVuc2hpZnQoJ0NoaW5lc2UnLCAnLScsICdFbmdsaXNoJyk7XHJcbiAgLy8gICB9XHJcbiAgLy8gICAvLyBjb25zb2xlLmxvZygnY29uZmlnPT0nLCBjb25maWcpO1xyXG4gIC8vICAgaWYgKHRoaXMuYnJNb2RlKSB7XHJcbiAgLy8gICAgIGNvbmZpZ1snZW50ZXJNb2RlJ10gPSBDS0VESVRPUi5FTlRFUl9CUjtcclxuICAvLyAgICAgY29uZmlnWydzaGlmdEVudGVyTW9kZSddID0gQ0tFRElUT1IuRU5URVJfQlI7XHJcbiAgLy8gICB9XHJcbiAgLy8gICB0aGlzLmluc3RhbmNlID0gQ0tFRElUT1IuaW5saW5lKHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudCwgY29uZmlnKTtcclxuICAvLyAgIC8vIGNvbnNvbGUubG9nKCd0aGlzLmluc3RhbmNlPT0nLCB0aGlzLmluc3RhbmNlKTtcclxuXHJcbiAgLy8gICAvLyDorr7nva7lm73pmYXljJbor63oqIDlj4rkvqblkKxcclxuICAvLyAgIC8vIHRoaXMubGFuZ3VhZ2V0eXBlID0gdGhpcy5pbnN0YW5jZS5lbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1pMThuJykgfHwgdGhpcy5sYW5ndWFnZXR5cGU7XHJcbiAgLy8gICAvLyB0aGlzLmluc3RhbmNlLm9uKCdpMThuJywgKGV2dDogYW55KSA9PiB7XHJcbiAgLy8gICAvLyAgIC8vIGNvbnNvbGUubG9nKCdpMThuIGNoYW5nZT0gJywgZXZ0KTtcclxuICAvLyAgIC8vICAgaWYgKGV2dC5kYXRhICE9IHRoaXMubGFuZ3VhZ2V0eXBlKSB7XHJcbiAgLy8gICAvLyAgICAgdGhpcy5sYW5ndWFnZXR5cGUgPSBldnQuZGF0YTtcclxuICAvLyAgIC8vICAgICB0aGlzLnVwZGF0ZUVkaXRvclZhbHVlKCk7XHJcbiAgLy8gICAvLyAgIH1cclxuICAvLyAgIC8vIH0pO1xyXG5cclxuICAvLyAgIC8vIOabtOaWsOihqOWNleWAvFxyXG4gIC8vICAgdGhpcy51cGRhdGVFZGl0b3JWYWx1ZSgpO1xyXG5cclxuICAvLyAgIC8vIENLRWRpdG9yIGJsdXIgZXZlbnRcclxuICAvLyAgIHRoaXMuaW5zdGFuY2Uub24oJ2JsdXInLCAoZXZ0OiBhbnkpID0+IHtcclxuICAvLyAgICAgdGhpcy5ibHVyLmVtaXQoZXZ0KTtcclxuICAvLyAgIH0pO1xyXG5cclxuICAvLyAgIC8vIENLRWRpdG9yIGZvY3VzIGV2ZW50XHJcbiAgLy8gICB0aGlzLmluc3RhbmNlLm9uKCdmb2N1cycsIChldnQ6IGFueSkgPT4ge1xyXG4gIC8vICAgICB0aGlzLmZvY3VzLmVtaXQoZXZ0KTtcclxuICAvLyAgIH0pO1xyXG5cclxuICAvLyAgIHRoaXMuaW5zdGFuY2Uub24oJ2NoYW5nZScsIChldnQ6IGFueSkgPT4ge1xyXG4gIC8vICAgICAvLyBjb25zb2xlLmxvZygnb25jaGFuZ2UgPT0gJywgZXZ0KTtcclxuICAvLyAgICAgbGV0IHZhbHVlID0gdGhpcy5pbnN0YW5jZS5nZXREYXRhKCk7XHJcbiAgLy8gICAgIGlmICh0aGlzLm1vZGVsICE9PSB2YWx1ZSkge1xyXG4gIC8vICAgICAgIC8vIERlYm91bmNlIHVwZGF0ZVxyXG4gIC8vICAgICAgIGlmICh0aGlzLmRlYm91bmNlKSB7XHJcbiAgLy8gICAgICAgICBpZiAodGhpcy5kZWJvdW5jZVRpbWVvdXQpIGNsZWFyVGltZW91dCh0aGlzLmRlYm91bmNlVGltZW91dCk7XHJcbiAgLy8gICAgICAgICB0aGlzLmRlYm91bmNlVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gIC8vICAgICAgICAgICB0aGlzLnVwZGF0ZVZhbHVlKHRoaXMuaW5zdGFuY2UuZ2V0RGF0YSgpKTtcclxuICAvLyAgICAgICAgICAgdGhpcy5kZWJvdW5jZVRpbWVvdXQgPSBudWxsO1xyXG4gIC8vICAgICAgICAgfSwgcGFyc2VJbnQodGhpcy5kZWJvdW5jZSwgMTApKTtcclxuICAvLyAgICAgICB9IGVsc2Uge1xyXG4gIC8vICAgICAgICAgdGhpcy51cGRhdGVWYWx1ZSh2YWx1ZSk7XHJcbiAgLy8gICAgICAgfVxyXG4gIC8vICAgICB9XHJcbiAgLy8gICB9KTtcclxuICAvLyB9XHJcblxyXG4gIC8vIGRvRm9jdXMoKSB7XHJcbiAgLy8gICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAvLyAgICAgdGhpcy5pbnN0YW5jZS5mb2N1cygpO1xyXG4gIC8vICAgfSwgMCk7XHJcbiAgLy8gfVxyXG5cclxuICAvLyBpbnNlcnRBZnRlcihuZXdFbGVtZW50LCB0YXJnZXRFbGVtZW50KSB7XHJcbiAgLy8gICB2YXIgcGFyZW50ID0gdGFyZ2V0RWxlbWVudC5wYXJlbnROb2RlO1xyXG4gIC8vICAgaWYgKHBhcmVudC5sYXN0Q2hpbGQgPT0gdGFyZ2V0RWxlbWVudCkge1xyXG4gIC8vICAgICBwYXJlbnQuYXBwZW5kQ2hpbGQobmV3RWxlbWVudCk7XHJcbiAgLy8gICB9IGVsc2Uge1xyXG4gIC8vICAgICBwYXJlbnQuaW5zZXJ0QmVmb3JlKG5ld0VsZW1lbnQsIHRhcmdldEVsZW1lbnQubmV4dFNpYmxpbmcpO1xyXG4gIC8vICAgfVxyXG4gIC8vIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczphbnkpIHtcclxuICAgIC8vIHRoaXMubGFzdFZpZXdNb2RlbCA9IHRoaXMubW9kZWw7XHJcbiAgICAvLyB0aGlzLnVwZGF0ZUVkaXRvclZhbHVlKCk7XHJcbiAgfVxyXG5cclxuICAvLyBvbktleXVwKCkge1xyXG4gIC8vICAgdmFyIHZhbHVlID0gdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LmlubmVySFRNTDtcclxuICAvLyAgIHRoaXMubGFzdFZpZXdNb2RlbCA9IHZhbHVlO1xyXG4gIC8vICAgdGhpcy5jaGFuZ2UuZW1pdCh2YWx1ZSk7XHJcbiAgLy8gfVxyXG5cclxuICAvLyB1cGRhdGVWYWx1ZSh2YWx1ZTogYW55KSB7XHJcbiAgLy8gICAvLyB0aGlzLnpvbmUucnVuKCgpID0+IHtcclxuICAvLyAgIC8vICAgdGhpcy5sYXN0Vmlld01vZGVsID0gdmFsdWU7XHJcbiAgLy8gICAvLyAgIHRoaXMuY2hhbmdlQnlTZWxmID0gdHJ1ZTtcclxuICAvLyAgIC8vICAgaWYgKF8uaXNBcnJheSh0aGlzLm1vZGVsKSkge1xyXG4gIC8vICAgLy8gICAgIGNvbnN0IGZvdW5kID0gdGhpcy5tb2RlbC5maW5kKGl0ZW0gPT4ge1xyXG4gIC8vICAgLy8gICAgICAgcmV0dXJuIGl0ZW0ubGFuZ3VhZ2V0eXBlID09IHRoaXMubGFuZ3VhZ2V0eXBlOyAvL3poY25cclxuICAvLyAgIC8vICAgICB9KTtcclxuICAvLyAgIC8vICAgICBpZiAoZm91bmQpIHtcclxuICAvLyAgIC8vICAgICAgIGZvdW5kLm5hbWUgPSB2YWx1ZTtcclxuICAvLyAgIC8vICAgICB9XHJcbiAgLy8gICAvLyAgICAgdGhpcy5jaGFuZ2UuZW1pdCh0aGlzLm1vZGVsKTtcclxuICAvLyAgIC8vICAgfSBlbHNlIHtcclxuICAvLyAgIC8vICAgICB0aGlzLmNoYW5nZS5lbWl0KHZhbHVlKTtcclxuICAvLyAgIC8vICAgfVxyXG4gIC8vICAgLy8gfSk7XHJcbiAgLy8gfVxyXG5cclxuICAvLyByZWZyZXNoVmlldygpIHtcclxuICAvLyAgIGlmICh0aGlzLmluc3RhbmNlKSB0aGlzLmluc3RhbmNlLnNldERhdGEodGhpcy5sYXN0Vmlld01vZGVsKTtcclxuICAvLyAgIC8vIHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSB0aGlzLmxhc3RWaWV3TW9kZWxcclxuICAvLyB9XHJcblxyXG4gIC8vIHVwZGF0ZUVkaXRvclZhbHVlKCkge1xyXG4gIC8vICAgLy8gaWYgKHRoaXMuaW5zdGFuY2UpIHtcclxuICAvLyAgIC8vICAgbGV0IG1vZGVsID0gdGhpcy5tb2RlbDtcclxuICAvLyAgIC8vICAgLy8gY29uc29sZS5sb2coJ3RoaXMubW9kZWw9PScsIHRoaXMubW9kZWwpO1xyXG4gIC8vICAgLy8gICBpZiAoXy5pc0FycmF5KHRoaXMubW9kZWwpKSB7XHJcbiAgLy8gICAvLyAgICAgbGV0IGZvdW5kSXRlbSA9IHRoaXMubW9kZWwuZmluZChpdGVtID0+IHtcclxuICAvLyAgIC8vICAgICAgIHJldHVybiBpdGVtLmxhbmd1YWdldHlwZSA9PSB0aGlzLmxhbmd1YWdldHlwZTsgLy96aGNuXHJcbiAgLy8gICAvLyAgICAgfSk7XHJcbiAgLy8gICAvLyAgICAgaWYgKCFmb3VuZEl0ZW0pIHtcclxuICAvLyAgIC8vICAgICAgIGZvdW5kSXRlbSA9IHsgbGFuZ3VhZ2V0eXBlOiB0aGlzLmxhbmd1YWdldHlwZSwgaWQ6IDAsIG5hbWU6ICcnIH07XHJcbiAgLy8gICAvLyAgICAgICB0aGlzLm1vZGVsLnB1c2goZm91bmRJdGVtKTtcclxuICAvLyAgIC8vICAgICB9XHJcbiAgLy8gICAvLyAgICAgbW9kZWwgPSBmb3VuZEl0ZW0ubmFtZTtcclxuICAvLyAgIC8vICAgfVxyXG4gIC8vICAgLy8gICB0aGlzLmluc3RhbmNlLnNldERhdGEobW9kZWwpO1xyXG4gIC8vICAgLy8gfVxyXG4gIC8vIH1cclxuXHJcbiAgLy8gZW1wdHkoKSB7XHJcbiAgLy8gICB0aGlzLm1vZGVsID0gJyc7XHJcbiAgLy8gICB0aGlzLmxhc3RWaWV3TW9kZWwgPSAnJztcclxuICAvLyAgIHRoaXMuaW5zdGFuY2Uuc2V0RGF0YSgnJyk7XHJcbiAgLy8gfVxyXG5cclxuICAvKipcclxuICAgKiBPbiBjb21wb25lbnQgZGVzdHJveVxyXG4gICAqL1xyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgLy8gaWYgKHRoaXMuZGVib3VuY2VUaW1lb3V0KSB7XHJcbiAgICAvLyAgIGNsZWFyVGltZW91dCh0aGlzLmRlYm91bmNlVGltZW91dCk7XHJcbiAgICAvLyAgIHRoaXMuZGVib3VuY2VUaW1lb3V0ID0gbnVsbDtcclxuICAgIC8vIH1cclxuICAgIC8vIGlmICh0aGlzLmluc3RhbmNlKSB7XHJcbiAgICAvLyAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgLy8gICAgIHRoaXMuaW5zdGFuY2UucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XHJcbiAgICAvLyAgICAgbGV0IGRvbSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNja2VfJyArIHRoaXMuaW5zdGFuY2UubmFtZSk7XHJcbiAgICAvLyAgICAgaWYgKGRvbSkge1xyXG4gICAgLy8gICAgICAgZG9tLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZG9tKTtcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgICAgQ0tFRElUT1IuaW5zdGFuY2VzW3RoaXMuaW5zdGFuY2UubmFtZV0uZGVzdHJveSh0cnVlKTtcclxuICAgIC8vICAgICB0aGlzLmluc3RhbmNlLmRlc3Ryb3kodHJ1ZSk7XHJcbiAgICAvLyAgICAgdGhpcy5pbnN0YW5jZSA9IG51bGw7XHJcbiAgICAvLyAgIH0pO1xyXG4gICAgLy8gfVxyXG4gIH1cclxuXHJcbiAgLy8gcmVwZWF0U3RyKHN0ciwgY291bnQpIHtcclxuICAvLyAgIHZhciByZXQgPSAnJztcclxuICAvLyAgIGZvciAodmFyIGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xyXG4gIC8vICAgICByZXQgKz0gc3RyO1xyXG4gIC8vICAgfVxyXG4gIC8vICAgcmV0dXJuIHJldDtcclxuICAvLyB9XHJcblxyXG4gIC8vIGNoZWNrQWxsSXNVbmRsaW5lKGlucHV0KSB7XHJcbiAgLy8gICBsZXQgcmV0ID0gdHJ1ZTtcclxuICAvLyAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW5wdXQubGVuZ3RoOyBpKyspIHtcclxuICAvLyAgICAgaWYgKGlucHV0W2ldICE9ICdfJykge1xyXG4gIC8vICAgICAgIHJldCA9IGZhbHNlO1xyXG4gIC8vICAgICB9XHJcbiAgLy8gICB9XHJcbiAgLy8gICByZXR1cm4gcmV0O1xyXG4gIC8vIH1cclxuXHJcbiAgLy8gZ2V0VGV4dE5vZGUocGFyZW50KSB7XHJcbiAgLy8gICB2YXIgY2hpbGROb2RlcyA9IHBhcmVudC5jaGlsZE5vZGVzO1xyXG4gIC8vICAgdmFyIGNoaWxkTGVuID0gY2hpbGROb2Rlcy5sZW5ndGg7XHJcbiAgLy8gICBpZiAoY2hpbGRMZW4gPiAwKSB7XHJcbiAgLy8gICAgIHZhciBjaGlsZCA9IGNoaWxkTm9kZXNbMF07XHJcbiAgLy8gICAgIGlmIChjaGlsZC5jaGlsZE5vZGVzLmxlbmd0aCA+IDApIHtcclxuICAvLyAgICAgICByZXR1cm4gY2hpbGQuY2hpbGROb2Rlc1swXTtcclxuICAvLyAgICAgfSBlbHNlIHJldHVybiBjaGlsZDtcclxuICAvLyAgIH1cclxuICAvLyAgIHJldHVybiBwYXJlbnQ7XHJcbiAgLy8gfVxyXG5cclxuICAvLyBwcmVwYXJlUmVwbGFjZSgpIHtcclxuICAvLyAgIC8vIOiuvue9ruacgOWQjuWFieagh+WvueixoVxyXG4gIC8vICAgLy9jb25zb2xlLmxvZyhsYXN0UmFuZ2UpXHJcbiAgLy8gICB2YXIgc3RhcnRPZmZzZXQgPSB0aGlzLmxhc3RSYW5nZS5zdGFydE9mZnNldDtcclxuICAvLyAgIHZhciBzdGFydFRleHQgPSB0aGlzLmxhc3RSYW5nZS5zdGFydENvbnRhaW5lci5kYXRhO1xyXG4gIC8vICAgdmFyIHBhcmVudFRhZ05hbWUgPSB0aGlzLmxhc3RSYW5nZS5zdGFydENvbnRhaW5lci5wYXJlbnROb2RlLm5vZGVOYW1lO1xyXG4gIC8vICAgdmFyIGlzQmxhbmsgPSB0aGlzLmxhc3RSYW5nZS5zdGFydENvbnRhaW5lci5wYXJlbnROb2RlLmNsYXNzTmFtZS5pbmRleE9mKCdtb2RfZmlsbGJsYW5rJykgPj0gMDtcclxuICAvLyAgIC8vY29uc29sZS5sb2coXCJzdGFydFRleHQ6XCIrc3RhcnRUZXh0KVxyXG4gIC8vICAgaWYgKHBhcmVudFRhZ05hbWUgPT0gJ1AnIHx8IChpc0JsYW5rICYmIHBhcmVudFRhZ05hbWUgPT0gJ1NQQU4nKSkge1xyXG4gIC8vICAgICBpZiAodGhpcy5jaGVja0FsbElzVW5kbGluZShzdGFydFRleHQpKSB7XHJcbiAgLy8gICAgICAgdGhpcy5jdXJzb3IgPSBzdGFydE9mZnNldDtcclxuICAvLyAgICAgfSBlbHNlIGlmIChzdGFydFRleHQuc3Vic3RyKC0xLCAxKSA9PSAnXycpIHtcclxuICAvLyAgICAgICAvL+acgOWQjuS4gOS4quaYr19cclxuICAvLyAgICAgICB2YXIgZmxhZ0NvdW50ID0gMDtcclxuICAvLyAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0YXJ0T2Zmc2V0OyBpKyspIHtcclxuICAvLyAgICAgICAgIGlmIChzdGFydFRleHRbaV0gPT0gJ18nKSBmbGFnQ291bnQrKztcclxuICAvLyAgICAgICB9XHJcbiAgLy8gICAgICAgdGhpcy5jdXJzb3IgPSBmbGFnQ291bnQ7XHJcbiAgLy8gICAgIH0gZWxzZSBpZiAoc3RhcnRUZXh0LmluZGV4T2YoJ18nKSA+PSAwKSB7XHJcbiAgLy8gICAgICAgLy9jaGVjayBmaXJzdCBpcyBfXHJcbiAgLy8gICAgICAgaWYgKHN0YXJ0VGV4dFswXSA9PSAnXycpIHtcclxuICAvLyAgICAgICAgIHZhciBmbGFnQ291bnQgPSAwO1xyXG4gIC8vICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdGFydE9mZnNldDsgaSsrKSB7XHJcbiAgLy8gICAgICAgICAgIGlmIChzdGFydFRleHRbaV0gPT0gJ18nKSBmbGFnQ291bnQrKztcclxuICAvLyAgICAgICAgIH1cclxuICAvLyAgICAgICAgIHRoaXMuY3Vyc29yID0gc3RhcnRPZmZzZXQgLSBmbGFnQ291bnQ7XHJcbiAgLy8gICAgICAgfSBlbHNlIHtcclxuICAvLyAgICAgICAgIHZhciBmbGFnQ291bnQgPSAwO1xyXG4gIC8vICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdGFydE9mZnNldDsgaSsrKSB7XHJcbiAgLy8gICAgICAgICAgIGlmIChzdGFydFRleHRbaV0gIT0gJ18nKSBmbGFnQ291bnQrKztcclxuICAvLyAgICAgICAgIH1cclxuICAvLyAgICAgICAgIHRoaXMuY3Vyc29yID0gc3RhcnRPZmZzZXQgLSBmbGFnQ291bnQ7XHJcbiAgLy8gICAgICAgfVxyXG5cclxuICAvLyAgICAgICAvL+WIpOaWreW3pui+ueaYr+mdnuWtl+avjeeahOaDheWGtVxyXG4gIC8vICAgICB9IGVsc2Uge1xyXG4gIC8vICAgICAgIHRoaXMuY3Vyc29yID0gc3RhcnRPZmZzZXQ7XHJcbiAgLy8gICAgIH1cclxuICAvLyAgIH0gZWxzZSB7XHJcbiAgLy8gICAgIHRoaXMuY3Vyc29yID0gc3RhcnRPZmZzZXQ7XHJcbiAgLy8gICB9XHJcblxyXG4gIC8vICAgLy8gY29uc29sZS5sb2coJ2xhc3QgY3Vyc29yOicgKyB0aGlzLmN1cnNvcik7XHJcbiAgLy8gICAvL+aAjuS5iOWIhuautVxyXG4gIC8vICAgdmFyIGNoaWxkTm9kZXMgPSB0aGlzLmVkaXRhYmxlRWxlLmNoaWxkTm9kZXM7XHJcbiAgLy8gICB2YXIgY2hpbGROb2RlTGVuID0gY2hpbGROb2Rlcy5sZW5ndGg7XHJcbiAgLy8gICAvL2NvbnNvbGUubG9nKGNoaWxkTm9kZXMpXHJcbiAgLy8gICB2YXIgZmluZEluZGV4O1xyXG4gIC8vICAgdmFyIHRleHROb2RlO1xyXG4gIC8vICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZE5vZGVMZW47IGkrKykge1xyXG4gIC8vICAgICB0ZXh0Tm9kZSA9IHRoaXMuZ2V0VGV4dE5vZGUoY2hpbGROb2Rlc1tpXSk7XHJcbiAgLy8gICAgIC8vIGNvbnNvbGUubG9nKHRleHROb2RlKVxyXG4gIC8vICAgICBpZiAodGV4dE5vZGUgPT0gdGhpcy5sYXN0UmFuZ2Uuc3RhcnRDb250YWluZXIpIHtcclxuICAvLyAgICAgICAvL2NvbnNvbGUubG9nKFwibWF0Y2hcIilcclxuICAvLyAgICAgICBmaW5kSW5kZXggPSBpO1xyXG4gIC8vICAgICAgIHZhciBwYXJlbnRUYWdOYW1lID0gdGV4dE5vZGUucGFyZW50Tm9kZS5ub2RlTmFtZTtcclxuICAvLyAgICAgICB2YXIgaXNCbGFuayA9IHRleHROb2RlLnBhcmVudE5vZGUuY2xhc3NOYW1lLmluZGV4T2YoJ21vZF9maWxsYmxhbmsnKSA+PSAwO1xyXG4gIC8vICAgICAgIGlmIChcclxuICAvLyAgICAgICAgICF0aGlzLmNoZWNrQWxsSXNVbmRsaW5lKHRleHROb2RlLmRhdGEpICYmXHJcbiAgLy8gICAgICAgICAoKHBhcmVudFRhZ05hbWUgPT0gJ1NQQU4nICYmIGlzQmxhbmspIHx8IHBhcmVudFRhZ05hbWUgPT0gJ1AnKVxyXG4gIC8vICAgICAgICkge1xyXG4gIC8vICAgICAgICAgaWYgKHRleHROb2RlLmRhdGEuaW5kZXhPZignXycpID49IDApIHtcclxuICAvLyAgICAgICAgICAgZmluZEluZGV4ID0gaSArIDE7XHJcbiAgLy8gICAgICAgICB9XHJcbiAgLy8gICAgICAgfVxyXG4gIC8vICAgICB9XHJcbiAgLy8gICB9XHJcbiAgLy8gICB0aGlzLnNwbGl0SW5kZXggPSBmaW5kSW5kZXg7XHJcbiAgLy8gICAvLyBjb25zb2xlLmxvZygnaW5kZXg6JyArIGZpbmRJbmRleCk7XHJcbiAgLy8gICAvL3RoaXMuZG9SZXBsYWNlKClcclxuICAvLyB9XHJcblxyXG4gIC8vIGRvUmVwbGFjZSgpIHtcclxuICAvLyAgIHZhciBpbm5lckhUTUwgPSB0aGlzLmVkaXRhYmxlRWxlLmlubmVySFRNTDtcclxuICAvLyAgIC8vY29uc29sZS5sb2coXCJpbm5lckhUTUw6XCIraW5uZXJIVE1MKVxyXG4gIC8vICAgdmFyIHJlcGxhY2VTdHIgPSB0aGlzLmdldFJlcGxhY2VTdHIoaW5uZXJIVE1MKTtcclxuICAvLyAgIGNvbnNvbGUubG9nKHJlcGxhY2VTdHIpO1xyXG4gIC8vICAgLy8gZWRpdGFibGVFbGUuaW5uZXJIVE1MID0gcmVwbGFjZVN0clxyXG4gIC8vICAgLy90aGlzLmluc3RhbmNlLnNldERhdGEocmVwbGFjZVN0cik7XHJcbiAgLy8gICB2YXIgY2hpbGROb2RlcyA9IHRoaXMuZWRpdGFibGVFbGUuY2hpbGROb2RlcztcclxuICAvLyAgIC8vIGNvbnNvbGUubG9nKGNoaWxkTm9kZXMpO1xyXG4gIC8vICAgLy9jb25zb2xlLmxvZyhzZWxlY3Rpb24pXHJcbiAgLy8gICAvLyDliKTmlq3mmK/lkKbmnInmnIDlkI7lhYnmoIflr7nosaHlrZjlnKhcclxuICAvLyAgIGlmICh0aGlzLmN1cnNvcikge1xyXG4gIC8vICAgICAvL2NvbnNvbGUubG9nKFwiZXhpc3QgcmFuZ2VcIilcclxuICAvLyAgICAgLy9jb25zb2xlLmxvZyhjaGlsZE5vZGVzKVxyXG4gIC8vICAgICB2YXIgc2VsZWN0aW9uID0gZ2V0U2VsZWN0aW9uKCk7XHJcbiAgLy8gICAgIHZhciB0ZXh0Tm9kZTtcclxuICAvLyAgICAgLy92YXIgcmFuZ2VOZXcgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xyXG4gIC8vICAgICB2YXIgcmFuZ2UgPSBuZXcgQ0tFRElUT1IuZG9tLnJhbmdlKHRoaXMuaW5zdGFuY2UuZG9jdW1lbnQpO1xyXG4gIC8vICAgICByYW5nZS5zZWxlY3ROb2RlQ29udGVudHModGhpcy5pbnN0YW5jZS5kb2N1bWVudC5nZXRCb2R5KCkpO1xyXG4gIC8vICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHtcclxuICAvLyAgICAgICBpZiAoaSA9PSB0aGlzLnNwbGl0SW5kZXgpIHtcclxuICAvLyAgICAgICAgIHRleHROb2RlID0gdGhpcy5nZXRUZXh0Tm9kZShjaGlsZE5vZGVzW2ldKTtcclxuICAvLyAgICAgICB9XHJcbiAgLy8gICAgIH1cclxuICAvLyAgICAgLy8gY29uc29sZS5sb2coJ3RleHROb2RlOicgKyB0ZXh0Tm9kZSk7XHJcbiAgLy8gICAgIGlmICh0ZXh0Tm9kZSkge1xyXG4gIC8vICAgICAgIC8vcmFuZ2Uuc2V0U3RhcnQodGV4dE5vZGUsIHRoaXMuY3Vyc29yKVxyXG4gIC8vICAgICAgIC8vIOS9v+WFieagh+W8gOWni+WSjOWFieagh+e7k+adn+mHjeWPoFxyXG4gIC8vICAgICAgIC8vcmFuZ2UuY29sbGFwc2UodHJ1ZSlcclxuICAvLyAgICAgfVxyXG5cclxuICAvLyAgICAgLy8g5riF6Zmk6YCJ5a6a5a+56LGh55qE5omA5pyJ5YWJ5qCH5a+56LGhXHJcbiAgLy8gICAgIC8vc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpXHJcbiAgLy8gICAgIC8vIOaPkuWFpeaWsOeahOWFieagh+WvueixoVxyXG4gIC8vICAgICAvL3NlbGVjdGlvbi5hZGRSYW5nZShyYW5nZSlcclxuICAvLyAgIH1cclxuXHJcbiAgLy8gICAvLyBjb25zb2xlLmxvZyhyYW5nZSlcclxuICAvLyB9XHJcblxyXG4gIC8vIGdldFJlcGxhY2VTdHIoc3RyKSB7XHJcbiAgLy8gICAvLyBjb25zb2xlLmxvZyhcIm9yaWdpblwiKVxyXG4gIC8vICAgLy9jb25zb2xlLmxvZyhzdHIpXHJcbiAgLy8gICB2YXIgcmVnZXgxID0gLzxzcGFuIGRhdGEtaWQ9XCJmaWxsYmxhbmstW1xcd10rXCIgY2xhc3M9XCJtb2RfZmlsbGJsYW5rXCI+KFtcXHd8XFx1NGUwMC1cXHU5ZmE1YV0rKTxcXC9zcGFuPi9nO1xyXG4gIC8vICAgLy8g5a6a5LmJ5pyA5ZCO5YWJ5qCH5a+56LGhXHJcbiAgLy8gICB2YXIgbGFzdEVkaXRSYW5nZTtcclxuXHJcbiAgLy8gICBzdHIgPSBzdHIucmVwbGFjZShyZWdleDEsIGZ1bmN0aW9uKG1hdGNoLCAkMSkge1xyXG4gIC8vICAgICAvLyBjb25zb2xlLmxvZyhtYXRjaClcclxuICAvLyAgICAgLy9jb25zb2xlLmxvZygkMSlcclxuICAvLyAgICAgLy8gdmFyIGZvcm1hdFN0ciA9ICQxLnJlcGxhY2UoL1tfXSsvZyxmdW5jdGlvbihtYXRjaCl7XHJcbiAgLy8gICAgIC8vIFx0Ly8vY29uc29sZS5sb2cobWF0Y2gpXHJcbiAgLy8gICAgIC8vIFx0cmV0dXJuICc8c3BhbiBkYXRhLWlkPVwiZmlsbGJsYW5rLXc3MUVcIiBjbGFzcz1cIm1vZF9maWxsYmxhbmtcIj4nK21hdGNoKyc8L3NwYW4+J1xyXG4gIC8vICAgICAvLyB9KVxyXG4gIC8vICAgICAvL2NvbnNvbGUubG9nKHN0cilcclxuICAvLyAgICAgcmV0dXJuICQxO1xyXG4gIC8vICAgfSk7XHJcbiAgLy8gICAvL2NvbnNvbGUubG9nKFwic3RlcDE6XCIpXHJcbiAgLy8gICAvLyBjb25zb2xlLmxvZyhzdHIpXHJcbiAgLy8gICBzdHIgPSBzdHIucmVwbGFjZSgvPChbXj5dKz4pKFxcdypbX10rXFx3KikoPFtePl0rPikvZywgZnVuY3Rpb24obWF0Y2gsICQxLCAkMikge1xyXG4gIC8vICAgICAvL2NvbnNvbGUubG9nKG1hdGNoLCQxLCQyKVxyXG4gIC8vICAgICB2YXIgZm9ybWF0U3RyID0gbWF0Y2gucmVwbGFjZSgvW19dKy9nLCBmdW5jdGlvbihtYXRjaCkge1xyXG4gIC8vICAgICAgIC8vIGNvbnNvbGUubG9nKG1hdGNoKVxyXG4gIC8vICAgICAgIHJldHVybiB0aGlzLnJlcGVhdFN0cignXFxuJywgbWF0Y2gubGVuZ3RoKTtcclxuICAvLyAgICAgfSk7XHJcbiAgLy8gICAgIHJldHVybiBmb3JtYXRTdHI7XHJcbiAgLy8gICB9KTsgLy/ljrvmjonmiYDmnInnmoRodG1s5qCH6K6wXHJcbiAgLy8gICAvLyBjb25zb2xlLmxvZyhzdHIpXHJcbiAgLy8gICBzdHIgPSBzdHIucmVwbGFjZSgvW19dKy9nLCBmdW5jdGlvbihtYXRjaCkge1xyXG4gIC8vICAgICAvL2NvbnNvbGUubG9nKG1hdGNoKVxyXG4gIC8vICAgICByZXR1cm4gJzxzcGFuIGRhdGEtaWQ9XCJmaWxsYmxhbmstdzcxRVwiIGNsYXNzPVwibW9kX2ZpbGxibGFua1wiPicgKyBtYXRjaCArICc8L3NwYW4+JztcclxuICAvLyAgIH0pO1xyXG4gIC8vICAgc3RyID0gc3RyLnJlcGxhY2UoL1xcbisvZywgZnVuY3Rpb24obWF0Y2gpIHtcclxuICAvLyAgICAgcmV0dXJuIHRoaXMucmVwZWF0U3RyKCdfJywgbWF0Y2gubGVuZ3RoKTtcclxuICAvLyAgIH0pO1xyXG4gIC8vICAgLy9jb25zb2xlLmxvZyhzdHIpXHJcbiAgLy8gICByZXR1cm4gc3RyO1xyXG4gIC8vIH1cclxuXHJcbiAgLy8gaW5zZXJ0VGV4dCh0ZXh0KSB7XHJcbiAgLy8gICB0aGlzLmluc3RhbmNlLmluc2VydFRleHQodGV4dCk7XHJcbiAgLy8gfVxyXG59XHJcbiJdfQ==