UNPKG

@instechnologies/ng-rooster

Version:

ng-rooster is wrapper to roosterjs, an open source library created by Microsoft: https://github.com/Microsoft/roosterjs.

870 lines 73.5 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Component, ViewChild, Input, Output, EventEmitter, forwardRef } from '@angular/core'; import { EditorDirective } from '../../directives/editor.directive'; import * as RoosterJs from 'roosterjs'; import { Subject, Observable, combineLatest } from 'rxjs'; import { filter, map, pairwise } from 'rxjs/operators'; import { FormatStateObservable } from '../../plugins/format-state.observable.plugin'; import { isNull } from '../../tools/is-null'; import { NG_VALUE_ACCESSOR } from '@angular/forms'; export class RoosterEditorComponent { constructor() { this.onChange = (/** * @return {?} */ () => { }); this.onTouched = (/** * @return {?} */ () => { }); this.editor$ = new Subject(); this.formatStatePlugin$ = new FormatStateObservable(); this.aligment$ = new Subject(); this.backgroundColor$ = new Subject(); this.backgroundColorChange = new EventEmitter(); this.direction$ = new Subject(); this.fontName$ = new Subject(); this.fontNameChange = new EventEmitter(); this.fontSize$ = new Subject(); this.fontSizeChange = new EventEmitter(); this.indentation$ = new Subject(); this.textColor$ = new Subject(); this.textColorChange = new EventEmitter(); this.toggleBlockQuote$$ = new Subject(); this.isBlockQuoteChange = new EventEmitter(); this.toggleBold$$ = new Subject(); this.isBoldChange = new EventEmitter(); this.toggleBullet$$ = new Subject(); this.isBulletChange = new EventEmitter(); this.toggleCodeBlock$$ = new Subject(); this.toggleHeader$$ = new Subject(); this.headerLevelChange = new EventEmitter(); this.toggleItalic$$ = new Subject(); this.isItalicChange = new EventEmitter(); this.toggleNumbering$$ = new Subject(); this.isNumberingChange = new EventEmitter(); this.toggleStrikethrough$$ = new Subject(); this.isStrikeThroughChange = new EventEmitter(); this.toggleSubscript$$ = new Subject(); this.isSubscriptChange = new EventEmitter(); this.toggleSuperscript$$ = new Subject(); this.isSuperscriptChange = new EventEmitter(); this.toggleUnderline$$ = new Subject(); this.isUnderlineChange = new EventEmitter(); combineLatest(this.aligment$, this.editor$).pipe(filter((/** * @param {?} __0 * @return {?} */ ([value, editor]) => !isNull(editor) && !isNull(value)))).subscribe((/** * @param {?} __0 * @return {?} */ ([value, editor]) => { RoosterJs.setAlignment(editor, value); })); combineLatest(this.backgroundColor$, this.editor$).pipe(filter((/** * @param {?} __0 * @return {?} */ ([value, editor]) => !isNull(editor) && !isNull(value)))).subscribe((/** * @param {?} __0 * @return {?} */ ([value, editor]) => { RoosterJs.setBackgroundColor(editor, value); })); combineLatest(this.direction$, this.editor$).pipe(filter((/** * @param {?} __0 * @return {?} */ ([value, editor]) => !isNull(editor) && !isNull(value)))).subscribe((/** * @param {?} __0 * @return {?} */ ([value, editor]) => { RoosterJs.setDirection(editor, value); })); combineLatest(this.fontName$, this.editor$).pipe(filter((/** * @param {?} __0 * @return {?} */ ([value, editor]) => !isNull(editor) && !isNull(value)))).subscribe((/** * @param {?} __0 * @return {?} */ ([value, editor]) => { RoosterJs.setFontName(editor, value); })); combineLatest(this.fontSize$, this.editor$).pipe(filter((/** * @param {?} __0 * @return {?} */ ([value, editor]) => !isNull(editor) && !isNull(value)))).subscribe((/** * @param {?} __0 * @return {?} */ ([value, editor]) => { RoosterJs.setFontSize(editor, value); })); combineLatest(this.indentation$, this.editor$).pipe(filter((/** * @param {?} __0 * @return {?} */ ([value, editor]) => !isNull(editor) && !isNull(value)))).subscribe((/** * @param {?} __0 * @return {?} */ ([value, editor]) => { RoosterJs.setIndentation(editor, value); })); combineLatest(this.textColor$, this.editor$).pipe(filter((/** * @param {?} __0 * @return {?} */ ([value, editor]) => !isNull(editor) && !isNull(value)))).subscribe((/** * @param {?} __0 * @return {?} */ ([value, editor]) => { RoosterJs.setTextColor(editor, value); })); /** @type {?} */ let toggleBlockQuoteSubscription = null; combineLatest(this.toggleBlockQuote$$, this.editor$).pipe(filter((/** * @param {?} __0 * @return {?} */ ([value, editor]) => !isNull(editor) && !isNull(value)))).subscribe((/** * @param {?} __0 * @return {?} */ ([value, editor]) => { if (toggleBlockQuoteSubscription) toggleBlockQuoteSubscription.unsubscribe(); toggleBlockQuoteSubscription = value.subscribe((/** * @param {?} val * @return {?} */ (val) => { RoosterJs.toggleBlockQuote(editor, val); })); })); /** @type {?} */ let toggleBoldSubscription = null; combineLatest(this.toggleBold$$, this.editor$).pipe(filter((/** * @param {?} __0 * @return {?} */ ([value, editor]) => !isNull(editor) && !isNull(value)))).subscribe((/** * @param {?} __0 * @return {?} */ ([value, editor]) => { if (toggleBoldSubscription) toggleBoldSubscription.unsubscribe(); toggleBoldSubscription = value.subscribe((/** * @param {?} val * @return {?} */ (val) => { RoosterJs.toggleBold(editor); })); })); /** @type {?} */ let toggleBulletSubscription = null; combineLatest(this.toggleBullet$$, this.editor$).pipe(filter((/** * @param {?} __0 * @return {?} */ ([value, editor]) => !isNull(editor) && !isNull(value)))).subscribe((/** * @param {?} __0 * @return {?} */ ([value, editor]) => { if (toggleBulletSubscription) toggleBulletSubscription.unsubscribe(); toggleBulletSubscription = value.subscribe((/** * @param {?} val * @return {?} */ (val) => { RoosterJs.toggleBullet(editor); })); })); /** @type {?} */ let toggleCodeBlockSubscription = null; combineLatest(this.toggleCodeBlock$$, this.editor$).pipe(filter((/** * @param {?} __0 * @return {?} */ ([value, editor]) => !isNull(editor) && !isNull(value)))).subscribe((/** * @param {?} __0 * @return {?} */ ([value, editor]) => { if (toggleCodeBlockSubscription) toggleCodeBlockSubscription.unsubscribe(); toggleCodeBlockSubscription = value.subscribe((/** * @param {?} val * @return {?} */ (val) => { RoosterJs.toggleCodeBlock(editor, val); })); })); /** @type {?} */ let toggleHeaderSubscription = null; combineLatest(this.toggleHeader$$, this.editor$).pipe(filter((/** * @param {?} __0 * @return {?} */ ([value, editor]) => !isNull(editor) && !isNull(value)))).subscribe((/** * @param {?} __0 * @return {?} */ ([value, editor]) => { if (toggleHeaderSubscription) toggleHeaderSubscription.unsubscribe(); toggleHeaderSubscription = value.subscribe((/** * @param {?} val * @return {?} */ (val) => { RoosterJs.toggleHeader(editor, val); })); })); /** @type {?} */ let toggleItalicSubscription = null; combineLatest(this.toggleItalic$$, this.editor$).pipe(filter((/** * @param {?} __0 * @return {?} */ ([value, editor]) => !isNull(editor) && !isNull(value)))).subscribe((/** * @param {?} __0 * @return {?} */ ([value, editor]) => { if (toggleItalicSubscription) toggleItalicSubscription.unsubscribe(); toggleItalicSubscription = value.subscribe((/** * @param {?} val * @return {?} */ (val) => { RoosterJs.toggleItalic(editor); })); })); /** @type {?} */ let toggleNumberingSubscription = null; combineLatest(this.toggleNumbering$$, this.editor$).pipe(filter((/** * @param {?} __0 * @return {?} */ ([value, editor]) => !isNull(editor) && !isNull(value)))).subscribe((/** * @param {?} __0 * @return {?} */ ([value, editor]) => { if (toggleNumberingSubscription) toggleNumberingSubscription.unsubscribe(); toggleNumberingSubscription = value.subscribe((/** * @param {?} val * @return {?} */ (val) => { RoosterJs.toggleNumbering(editor); })); })); /** @type {?} */ let toggleStrikethroughSubscription = null; combineLatest(this.toggleStrikethrough$$, this.editor$).pipe(filter((/** * @param {?} __0 * @return {?} */ ([value, editor]) => !isNull(editor) && !isNull(value)))).subscribe((/** * @param {?} __0 * @return {?} */ ([value, editor]) => { if (toggleStrikethroughSubscription) toggleStrikethroughSubscription.unsubscribe(); toggleStrikethroughSubscription = value.subscribe((/** * @param {?} val * @return {?} */ (val) => { RoosterJs.toggleStrikethrough(editor); })); })); /** @type {?} */ let toggleSubscriptSubscription = null; combineLatest(this.toggleSubscript$$, this.editor$).pipe(filter((/** * @param {?} __0 * @return {?} */ ([value, editor]) => !isNull(editor) && !isNull(value)))).subscribe((/** * @param {?} __0 * @return {?} */ ([value, editor]) => { if (toggleSubscriptSubscription) toggleSubscriptSubscription.unsubscribe(); toggleSubscriptSubscription = value.subscribe((/** * @param {?} val * @return {?} */ (val) => { RoosterJs.toggleSubscript(editor); })); })); /** @type {?} */ let toggleSuperscriptSubscription = null; combineLatest(this.toggleSuperscript$$, this.editor$).pipe(filter((/** * @param {?} __0 * @return {?} */ ([value, editor]) => !isNull(editor) && !isNull(value)))).subscribe((/** * @param {?} __0 * @return {?} */ ([value, editor]) => { if (toggleSuperscriptSubscription) toggleSuperscriptSubscription.unsubscribe(); toggleSuperscriptSubscription = value.subscribe((/** * @param {?} val * @return {?} */ (val) => { RoosterJs.toggleSuperscript(editor); })); })); /** @type {?} */ let toggleUnderlineSubscription = null; combineLatest(this.toggleUnderline$$, this.editor$).pipe(filter((/** * @param {?} __0 * @return {?} */ ([value, editor]) => !isNull(editor) && !isNull(value)))).subscribe((/** * @param {?} __0 * @return {?} */ ([value, editor]) => { if (toggleUnderlineSubscription) toggleUnderlineSubscription.unsubscribe(); toggleUnderlineSubscription = value.subscribe((/** * @param {?} val * @return {?} */ (val) => { RoosterJs.toggleUnderline(editor); })); })); } /** * @param {?} v * @return {?} */ set aligment(v) { this.aligment$.next(v); } /** * @param {?} v * @return {?} */ set backgroundColor(v) { this.backgroundColor$.next(v); } /** * @param {?} v * @return {?} */ set direction(v) { this.direction$.next(v); } /** * @param {?} v * @return {?} */ set fontName(v) { this.fontName$.next(v); } /** * @param {?} v * @return {?} */ set fontSize(v) { this.fontSize$.next(v); } /** * @param {?} v * @return {?} */ set indentation(v) { this.indentation$.next(v); } /** * @param {?} v * @return {?} */ set textColor(v) { this.textColor$.next(v); } /** * @param {?} v * @return {?} */ set toggleBlockQuote$(v) { this.toggleBlockQuote$$.next(v); } /** * @param {?} v * @return {?} */ set toggleBold$(v) { this.toggleBold$$.next(v); } /** * @param {?} v * @return {?} */ set toggleBullet$(v) { this.toggleBullet$$.next(v); } /** * @param {?} v * @return {?} */ set toggleCodeBlock$(v) { this.toggleCodeBlock$$.next(v); } /** * @param {?} v * @return {?} */ set toggleHeader$(v) { this.toggleHeader$$.next(v); } /** * @param {?} v * @return {?} */ set toggleItalic$(v) { this.toggleItalic$$.next(v); } /** * @param {?} v * @return {?} */ set toggleNumbering$(v) { this.toggleNumbering$$.next(v); } /** * @param {?} v * @return {?} */ set toggleStrikethrough$(v) { this.toggleStrikethrough$$.next(v); } /** * @param {?} v * @return {?} */ set toggleSubscript$(v) { this.toggleSubscript$$.next(v); } /** * @param {?} v * @return {?} */ set toggleSuperscript$(v) { this.toggleSuperscript$$.next(v); } /** * @param {?} v * @return {?} */ set toggleUnderline$(v) { this.toggleUnderline$$.next(v); } /** * @return {?} */ ngOnInit() { this.formatStatePlugin$.getContentObservable().subscribe((/** * @param {?} v * @return {?} */ v => this.onChange(v))); /** @type {?} */ let formatStateChange$ = this.formatStatePlugin$.pipe(pairwise(), map((/** * @param {?} __0 * @return {?} */ ([previous, current]) => { /** @type {?} */ let result = {}; console.log(current); /** @type {?} */ let keys = Object.keys(current); for (let i = 0; i < keys.length; i++) { /** @type {?} */ let key = keys[i]; /** @type {?} */ let previousValue = previous[key]; /** @type {?} */ let currentValue = current[key]; if (currentValue !== previousValue) result[key] = currentValue; } return result; }))); formatStateChange$.pipe(map((/** * @param {?} s * @return {?} */ s => s.fontName)), filter((/** * @param {?} v * @return {?} */ v => !isNull(v)))).subscribe((/** * @param {?} v * @return {?} */ v => this.fontNameChange.emit(v))); formatStateChange$.pipe(map((/** * @param {?} s * @return {?} */ s => s.fontSize)), filter((/** * @param {?} v * @return {?} */ v => !isNull(v)))).subscribe((/** * @param {?} v * @return {?} */ v => this.fontSizeChange.emit(v))); formatStateChange$.pipe(map((/** * @param {?} s * @return {?} */ s => s.isBold)), filter((/** * @param {?} v * @return {?} */ v => !isNull(v)))).subscribe((/** * @param {?} v * @return {?} */ v => this.isBoldChange.emit(v))); formatStateChange$.pipe(map((/** * @param {?} s * @return {?} */ s => s.isItalic)), filter((/** * @param {?} v * @return {?} */ v => !isNull(v)))).subscribe((/** * @param {?} v * @return {?} */ v => this.isItalicChange.emit(v))); formatStateChange$.pipe(map((/** * @param {?} s * @return {?} */ s => s.isUnderline)), filter((/** * @param {?} v * @return {?} */ v => !isNull(v)))).subscribe((/** * @param {?} v * @return {?} */ v => this.isUnderlineChange.emit(v))); formatStateChange$.pipe(map((/** * @param {?} s * @return {?} */ s => s.backgroundColor)), filter((/** * @param {?} v * @return {?} */ v => !isNull(v)))).subscribe((/** * @param {?} v * @return {?} */ v => this.backgroundColorChange.emit(v))); formatStateChange$.pipe(map((/** * @param {?} s * @return {?} */ s => s.textColor)), filter((/** * @param {?} v * @return {?} */ v => !isNull(v)))).subscribe((/** * @param {?} v * @return {?} */ v => this.textColorChange.emit(v))); ; formatStateChange$.pipe(map((/** * @param {?} s * @return {?} */ s => s.isBullet)), filter((/** * @param {?} v * @return {?} */ v => !isNull(v)))).subscribe((/** * @param {?} v * @return {?} */ v => this.isBulletChange.emit(v))); formatStateChange$.pipe(map((/** * @param {?} s * @return {?} */ s => s.isNumbering)), filter((/** * @param {?} v * @return {?} */ v => !isNull(v)))).subscribe((/** * @param {?} v * @return {?} */ v => this.isNumberingChange.emit(v))); formatStateChange$.pipe(map((/** * @param {?} s * @return {?} */ s => s.isStrikeThrough)), filter((/** * @param {?} v * @return {?} */ v => !isNull(v)))).subscribe((/** * @param {?} v * @return {?} */ v => this.isStrikeThroughChange.emit(v))); formatStateChange$.pipe(map((/** * @param {?} s * @return {?} */ s => s.isBlockQuote)), filter((/** * @param {?} v * @return {?} */ v => !isNull(v)))).subscribe((/** * @param {?} v * @return {?} */ v => this.isBlockQuoteChange.emit(v))); formatStateChange$.pipe(map((/** * @param {?} s * @return {?} */ s => s.isSubscript)), filter((/** * @param {?} v * @return {?} */ v => !isNull(v)))).subscribe((/** * @param {?} v * @return {?} */ v => this.isSubscriptChange.emit(v))); formatStateChange$.pipe(map((/** * @param {?} s * @return {?} */ s => s.isSuperscript)), filter((/** * @param {?} v * @return {?} */ v => !isNull(v)))).subscribe((/** * @param {?} v * @return {?} */ v => this.isSuperscriptChange.emit(v))); // formatStateChange$.pipe( map(s=>s.canUnlink), filter(v=>!isNull(v)) ).subscribe(v=>this.u.emit(v)); // formatStateChange$.pipe( map(s=>s.canAddImageAltText), filter(v=>!isNull(v)) ); // formatStateChange$.pipe( map(s=>s.canUndo), filter(v=>!isNull(v)) ); // formatStateChange$.pipe( map(s=>s.canRedo), filter(v=>!isNull(v)) ); // formatStateChange$.pipe( map(s=>s.headerLevel), filter(v=>!isNull(v)) ); } /** * @return {?} */ ngAfterViewInit() { this.editor = this.editorDirective.editor; this.editor$.next(this.editor); this.editor$.complete(); } /** * @return {?} */ ngOnDestroy() { this.aligment$.complete(); this.backgroundColor$.complete(); this.direction$.complete(); this.fontName$.complete(); this.fontSize$.complete(); this.indentation$.complete(); this.textColor$.complete(); this.toggleBlockQuote$$.complete(); this.toggleBold$$.complete(); this.toggleBullet$$.complete(); this.toggleCodeBlock$$.complete(); this.toggleHeader$$.complete(); this.toggleItalic$$.complete(); this.toggleNumbering$$.complete(); this.toggleStrikethrough$$.complete(); this.toggleSubscript$$.complete(); this.toggleSuperscript$$.complete(); this.toggleUnderline$$.complete(); this.editor.dispose(); } /** * @param {?} obj * @return {?} */ writeValue(obj) { if (obj) this.editor.setContent(obj); } /** * @param {?} fn * @return {?} */ registerOnChange(fn) { this.onChange = fn; } /** * @param {?} fn * @return {?} */ registerOnTouched(fn) { this.onTouched = fn; } /** * @param {?} isDisabled * @return {?} */ setDisabledState(isDisabled) { console.log(isDisabled); } } RoosterEditorComponent.decorators = [ { type: Component, args: [{ selector: 'rooster-editor-box', template: "\r\n<div class=\"editor\" rooster-editor [plugins]=\"[formatStatePlugin$]\" ><ng-content></ng-content></div>\r\n", providers: [ { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef((/** * @return {?} */ () => RoosterEditorComponent)), multi: true } ], styles: [".editor{width:100%;height:100%}:host{display:block}"] }] } ]; /** @nocollapse */ RoosterEditorComponent.ctorParameters = () => []; RoosterEditorComponent.propDecorators = { editorDirective: [{ type: ViewChild, args: [EditorDirective,] }], aligment: [{ type: Input }], backgroundColor: [{ type: Input }], backgroundColorChange: [{ type: Output }], direction: [{ type: Input }], fontName: [{ type: Input }], fontNameChange: [{ type: Output }], fontSize: [{ type: Input }], fontSizeChange: [{ type: Output }], indentation: [{ type: Input }], textColor: [{ type: Input }], textColorChange: [{ type: Output }], toggleBlockQuote$: [{ type: Input }], isBlockQuoteChange: [{ type: Output }], toggleBold$: [{ type: Input }], isBoldChange: [{ type: Output }], toggleBullet$: [{ type: Input }], isBulletChange: [{ type: Output }], toggleCodeBlock$: [{ type: Input }], toggleHeader$: [{ type: Input }], headerLevelChange: [{ type: Output }], toggleItalic$: [{ type: Input }], isItalicChange: [{ type: Output }], toggleNumbering$: [{ type: Input }], isNumberingChange: [{ type: Output }], toggleStrikethrough$: [{ type: Input }], isStrikeThroughChange: [{ type: Output }], toggleSubscript$: [{ type: Input }], isSubscriptChange: [{ type: Output }], toggleSuperscript$: [{ type: Input }], isSuperscriptChange: [{ type: Output }], toggleUnderline$: [{ type: Input }], isUnderlineChange: [{ type: Output }] }; if (false) { /** @type {?} */ RoosterEditorComponent.prototype.editorDirective; /** * @type {?} * @private */ RoosterEditorComponent.prototype.editor; /** * @type {?} * @private */ RoosterEditorComponent.prototype.onChange; /** * @type {?} * @private */ RoosterEditorComponent.prototype.onTouched; /** * @type {?} * @private */ RoosterEditorComponent.prototype.editor$; /** @type {?} */ RoosterEditorComponent.prototype.formatStatePlugin$; /** @type {?} */ RoosterEditorComponent.prototype.aligment$; /** @type {?} */ RoosterEditorComponent.prototype.backgroundColor$; /** @type {?} */ RoosterEditorComponent.prototype.backgroundColorChange; /** @type {?} */ RoosterEditorComponent.prototype.direction$; /** @type {?} */ RoosterEditorComponent.prototype.fontName$; /** @type {?} */ RoosterEditorComponent.prototype.fontNameChange; /** @type {?} */ RoosterEditorComponent.prototype.fontSize$; /** @type {?} */ RoosterEditorComponent.prototype.fontSizeChange; /** @type {?} */ RoosterEditorComponent.prototype.indentation$; /** @type {?} */ RoosterEditorComponent.prototype.textColor$; /** @type {?} */ RoosterEditorComponent.prototype.textColorChange; /** @type {?} */ RoosterEditorComponent.prototype.toggleBlockQuote$$; /** @type {?} */ RoosterEditorComponent.prototype.isBlockQuoteChange; /** @type {?} */ RoosterEditorComponent.prototype.toggleBold$$; /** @type {?} */ RoosterEditorComponent.prototype.isBoldChange; /** @type {?} */ RoosterEditorComponent.prototype.toggleBullet$$; /** @type {?} */ RoosterEditorComponent.prototype.isBulletChange; /** @type {?} */ RoosterEditorComponent.prototype.toggleCodeBlock$$; /** @type {?} */ RoosterEditorComponent.prototype.toggleHeader$$; /** @type {?} */ RoosterEditorComponent.prototype.headerLevelChange; /** @type {?} */ RoosterEditorComponent.prototype.toggleItalic$$; /** @type {?} */ RoosterEditorComponent.prototype.isItalicChange; /** @type {?} */ RoosterEditorComponent.prototype.toggleNumbering$$; /** @type {?} */ RoosterEditorComponent.prototype.isNumberingChange; /** @type {?} */ RoosterEditorComponent.prototype.toggleStrikethrough$$; /** @type {?} */ RoosterEditorComponent.prototype.isStrikeThroughChange; /** @type {?} */ RoosterEditorComponent.prototype.toggleSubscript$$; /** @type {?} */ RoosterEditorComponent.prototype.isSubscriptChange; /** @type {?} */ RoosterEditorComponent.prototype.toggleSuperscript$$; /** @type {?} */ RoosterEditorComponent.prototype.isSuperscriptChange; /** @type {?} */ RoosterEditorComponent.prototype.toggleUnderline$$; /** @type {?} */ RoosterEditorComponent.prototype.isUnderlineChange; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9vc3Rlci1lZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGluc3RlY2hub2xvZ2llcy9uZy1yb29zdGVyLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudHMvcm9vc3Rlci1lZGl0b3Ivcm9vc3Rlci1lZGl0b3IuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLFNBQVMsRUFBRSxLQUFLLEVBQTRCLE1BQU0sRUFBRSxZQUFZLEVBQXVELFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyTCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDcEUsT0FBTyxLQUFLLFNBQVMsTUFBTSxXQUFXLENBQUM7QUFDdkMsT0FBTyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUE4QixNQUFNLE1BQU0sQ0FBQztBQUV0RixPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUNyRixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDN0MsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBY3pFLE1BQU0sT0FBTyxzQkFBc0I7SUFpRmpDO1FBM0VRLGFBQVE7OztRQUFRLEdBQUcsRUFBRSxHQUFFLENBQUMsRUFBQztRQUN6QixjQUFTOzs7UUFBUSxHQUFHLEVBQUUsR0FBRSxDQUFDLEVBQUM7UUFFMUIsWUFBTyxHQUFHLElBQUksT0FBTyxFQUFVLENBQUM7UUFDeEMsdUJBQWtCLEdBQUcsSUFBSSxxQkFBcUIsRUFBRSxDQUFDO1FBRWpELGNBQVMsR0FBRyxJQUFJLE9BQU8sRUFBYSxDQUFDO1FBR3JDLHFCQUFnQixHQUFHLElBQUksT0FBTyxFQUFVLENBQUM7UUFFL0Is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