@flogeez/angular-tiptap-editor 3.2.2 → 3.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/README.md +17 -19
  3. package/esm2022/lib/components/bubble-menus/base/ate-base-bubble-menu.mjs +3 -3
  4. package/esm2022/lib/components/bubble-menus/base/ate-base-sub-bubble-menu.mjs +1 -1
  5. package/esm2022/lib/components/bubble-menus/color/ate-color-bubble-menu.component.mjs +2 -2
  6. package/esm2022/lib/components/bubble-menus/link/ate-link-bubble-menu.component.mjs +2 -2
  7. package/esm2022/lib/components/edit-toggle/ate-edit-toggle.component.mjs +1 -1
  8. package/esm2022/lib/components/editor/angular-tiptap-editor.component.mjs +23 -7
  9. package/esm2022/lib/components/editor/ate-block-controls.component.mjs +4 -4
  10. package/esm2022/lib/components/slash-commands/ate-slash-commands.component.mjs +2 -2
  11. package/esm2022/lib/components/table-of-contents/ate-table-of-contents.component.mjs +359 -0
  12. package/esm2022/lib/extensions/ate-block-controls.extension.mjs +3 -3
  13. package/esm2022/lib/i18n/ateTranslationsModel.mjs +2 -0
  14. package/esm2022/lib/i18n/de_ateTranslations.mjs +190 -0
  15. package/esm2022/lib/i18n/en_ateTranslations.mjs +190 -0
  16. package/esm2022/lib/i18n/fr_ateTranslations.mjs +190 -0
  17. package/esm2022/lib/services/ate-i18n.service.mjs +6 -374
  18. package/esm2022/lib/services/ate-image.service.mjs +2 -2
  19. package/esm2022/public-api.mjs +2 -1
  20. package/fesm2022/flogeez-angular-tiptap-editor.mjs +589 -20
  21. package/fesm2022/flogeez-angular-tiptap-editor.mjs.map +1 -1
  22. package/lib/components/bubble-menus/base/ate-base-bubble-menu.d.ts +1 -1
  23. package/lib/components/bubble-menus/base/ate-base-sub-bubble-menu.d.ts +1 -1
  24. package/lib/components/edit-toggle/ate-edit-toggle.component.d.ts +1 -1
  25. package/lib/components/editor/angular-tiptap-editor.component.d.ts +3 -2
  26. package/lib/components/table-of-contents/ate-table-of-contents.component.d.ts +48 -0
  27. package/lib/i18n/ateTranslationsModel.d.ts +190 -0
  28. package/lib/i18n/de_ateTranslations.d.ts +2 -0
  29. package/lib/i18n/en_ateTranslations.d.ts +2 -0
  30. package/lib/i18n/fr_ateTranslations.d.ts +2 -0
  31. package/lib/services/ate-i18n.service.d.ts +5 -187
  32. package/package.json +1 -1
  33. package/public-api.d.ts +2 -1
  34. package/src/lib/styles/ate-variables.global.css +173 -0
  35. package/src/lib/styles/index.css +1 -0
@@ -0,0 +1,359 @@
1
+ import { Component, input, inject, signal, computed, effect, untracked, ChangeDetectionStrategy, HostListener, } from "@angular/core";
2
+ import { AteEditorRef } from "../../models/ate-editor-ref";
3
+ import { AteEditorRegistry } from "../../services/ate-editor-registry.service";
4
+ import { AteI18nService } from "../../services/ate-i18n.service";
5
+ import * as i0 from "@angular/core";
6
+ /**
7
+ * Table of Contents Component (Notion-style)
8
+ * Dynamically extracts headings from the active editor and displays them.
9
+ * Configurable via inputs (floating, position, variants, hover expansion) and CSS variables.
10
+ */
11
+ export class AteTableOfContentsComponent {
12
+ // Helper method for exact native SVG dash width per heading level
13
+ dashWidth(level) {
14
+ switch (level) {
15
+ case 1:
16
+ return 16;
17
+ case 2:
18
+ return 12;
19
+ case 3:
20
+ return 8;
21
+ case 4:
22
+ return 6;
23
+ case 5:
24
+ return 4;
25
+ default:
26
+ return 3;
27
+ }
28
+ }
29
+ constructor() {
30
+ // Input accepts raw Editor, AteEditorRef, or ID of registered editor
31
+ this.editor = input(null);
32
+ // Optional custom title (if not provided, uses i18n translation)
33
+ this.title = input(null);
34
+ // Whether to show the header title
35
+ this.showTitle = input(true);
36
+ // Layout mode: floating on fixed position or inline inside parent container
37
+ this.floating = input(false);
38
+ // Floating position: 'right' | 'left'
39
+ this.position = input("right");
40
+ // Visual variant: 'card' | 'transparent' | 'minimal'
41
+ this.variant = input("card");
42
+ // Notion-style hover expansion (collapses text into dashes until hovered)
43
+ this.hoverExpand = input(true);
44
+ this.registry = inject(AteEditorRegistry);
45
+ this.i18n = inject(AteI18nService);
46
+ // Computed header title with fallback to i18n
47
+ this.headerTitle = computed(() => {
48
+ const custom = this.title();
49
+ if (custom !== null && custom !== undefined) {
50
+ return custom;
51
+ }
52
+ return this.i18n.editor().tableOfContents;
53
+ });
54
+ // Resolved editor instance
55
+ this.resolvedEditor = computed(() => {
56
+ const val = this.editor();
57
+ if (!val) {
58
+ return this.registry.activeEditor()?.editor || null;
59
+ }
60
+ if (val instanceof AteEditorRef) {
61
+ return val.editor;
62
+ }
63
+ if (typeof val === "string") {
64
+ return this.registry.get(val)?.editor || null;
65
+ }
66
+ return val;
67
+ });
68
+ // Table of Contents items
69
+ this.items = signal([]);
70
+ // Distinct mouse hover and keyboard focus state tracking
71
+ this.isMouseHovered = signal(false);
72
+ this.isFocused = signal(false);
73
+ this.isExpanded = computed(() => this.isMouseHovered() || this.isFocused());
74
+ this.onEditorUpdate = () => {
75
+ const editor = this.resolvedEditor();
76
+ if (editor) {
77
+ this.updateHeadings(editor);
78
+ }
79
+ };
80
+ // React strictly to editor instance changes without tracking internal signal updates
81
+ effect(() => {
82
+ const editor = this.resolvedEditor();
83
+ untracked(() => {
84
+ if (editor) {
85
+ this.bindEditorEvents(editor);
86
+ this.updateHeadings(editor);
87
+ }
88
+ else {
89
+ this.items.set([]);
90
+ }
91
+ });
92
+ });
93
+ }
94
+ ngOnDestroy() {
95
+ const editor = this.resolvedEditor();
96
+ if (editor) {
97
+ this.unbindEditorEvents(editor);
98
+ }
99
+ }
100
+ onScroll() {
101
+ this.checkActiveHeading();
102
+ }
103
+ // Handle mouse hover state independently
104
+ setMouseHover(hovered) {
105
+ this.isMouseHovered.set(hovered);
106
+ }
107
+ // Handle keyboard focus state independently
108
+ setFocused(focused) {
109
+ this.isFocused.set(focused);
110
+ }
111
+ // Navigate to heading on click
112
+ scrollToHeading(item, event) {
113
+ event.preventDefault();
114
+ event.stopPropagation();
115
+ const editor = this.resolvedEditor();
116
+ if (!editor || !editor.view) {
117
+ return;
118
+ }
119
+ try {
120
+ // 1. Position cursor inside the heading text (item.pos + 1 points to inline text)
121
+ const targetPos = Math.min(item.pos + 1, editor.state.doc.content.size);
122
+ editor.commands.setTextSelection(targetPos);
123
+ editor.commands.focus();
124
+ }
125
+ catch (_e) {
126
+ // Safe-guard against position selection errors
127
+ }
128
+ // 2. Smoothly scroll DOM node into view
129
+ setTimeout(() => {
130
+ try {
131
+ const domNode = editor.view.nodeDOM(item.pos);
132
+ if (domNode) {
133
+ domNode.scrollIntoView({ behavior: "smooth", block: "start" });
134
+ }
135
+ }
136
+ catch (_e) {
137
+ // Safe-guard
138
+ }
139
+ }, 10);
140
+ }
141
+ bindEditorEvents(editor) {
142
+ this.unbindEditorEvents(editor);
143
+ editor.on("update", this.onEditorUpdate);
144
+ editor.on("selectionUpdate", this.onEditorUpdate);
145
+ }
146
+ unbindEditorEvents(editor) {
147
+ editor.off("update", this.onEditorUpdate);
148
+ editor.off("selectionUpdate", this.onEditorUpdate);
149
+ }
150
+ updateHeadings(editor) {
151
+ const nextItems = [];
152
+ try {
153
+ editor.state.doc.descendants((node, pos) => {
154
+ if (node.type.name === "heading") {
155
+ const text = node.textContent.trim();
156
+ const level = node.attrs["level"] || 1;
157
+ if (text) {
158
+ nextItems.push({
159
+ text,
160
+ level,
161
+ pos,
162
+ id: `heading-${pos}`,
163
+ active: false,
164
+ });
165
+ }
166
+ }
167
+ });
168
+ }
169
+ catch (_e) {
170
+ // Safe guard against document access issues
171
+ }
172
+ untracked(() => {
173
+ this.items.set(nextItems);
174
+ this.checkActiveHeading();
175
+ });
176
+ }
177
+ checkActiveHeading() {
178
+ const editor = this.resolvedEditor();
179
+ if (!editor || !editor.view) {
180
+ return;
181
+ }
182
+ untracked(() => {
183
+ const currentItems = this.items();
184
+ if (currentItems.length === 0) {
185
+ return;
186
+ }
187
+ const headingsWithDom = currentItems
188
+ .map(item => {
189
+ try {
190
+ const dom = editor.view.nodeDOM(item.pos);
191
+ return { item, dom };
192
+ }
193
+ catch (_e) {
194
+ return { item, dom: null };
195
+ }
196
+ })
197
+ .filter((entry) => entry.dom !== null);
198
+ if (headingsWithDom.length === 0) {
199
+ return;
200
+ }
201
+ const windowHeight = typeof window !== "undefined" ? window.innerHeight : 800;
202
+ let activeItem = null;
203
+ for (let i = headingsWithDom.length - 1; i >= 0; i--) {
204
+ const { item, dom } = headingsWithDom[i];
205
+ const rect = dom.getBoundingClientRect();
206
+ if (rect.top <= windowHeight * 0.35) {
207
+ activeItem = item;
208
+ break;
209
+ }
210
+ }
211
+ if (!activeItem && headingsWithDom.length > 0) {
212
+ activeItem = headingsWithDom[0].item;
213
+ }
214
+ if (activeItem) {
215
+ const updated = currentItems.map(item => ({
216
+ ...item,
217
+ active: item.id === activeItem.id,
218
+ }));
219
+ const isDifferent = updated.some((item, idx) => item.active !== currentItems[idx].active);
220
+ if (isDifferent) {
221
+ this.items.set(updated);
222
+ }
223
+ }
224
+ });
225
+ }
226
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AteTableOfContentsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
227
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: AteTableOfContentsComponent, isStandalone: true, selector: "ate-table-of-contents", inputs: { editor: { classPropertyName: "editor", publicName: "editor", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, showTitle: { classPropertyName: "showTitle", publicName: "showTitle", isSignal: true, isRequired: false, transformFunction: null }, floating: { classPropertyName: "floating", publicName: "floating", isSignal: true, isRequired: false, transformFunction: null }, position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, hoverExpand: { classPropertyName: "hoverExpand", publicName: "hoverExpand", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "window:scroll": "onScroll()", "window:resize": "onScroll()" } }, ngImport: i0, template: `
228
+ <div
229
+ class="ate-toc-wrapper"
230
+ [class.ate-toc-floating]="floating()"
231
+ [class.ate-toc-position-left]="position() === 'left'"
232
+ [class.ate-toc-position-right]="position() === 'right'"
233
+ (mouseenter)="setMouseHover(true)"
234
+ (mouseleave)="setMouseHover(false)"
235
+ (focusin)="setFocused(true)"
236
+ (focusout)="setFocused(false)">
237
+ <div
238
+ class="ate-toc"
239
+ [class.ate-toc-floating]="floating()"
240
+ [class.ate-toc-position-left]="position() === 'left'"
241
+ [class.ate-toc-position-right]="position() === 'right'"
242
+ [class.ate-toc-variant-card]="variant() === 'card'"
243
+ [class.ate-toc-variant-transparent]="variant() === 'transparent'"
244
+ [class.ate-toc-variant-minimal]="variant() === 'minimal'"
245
+ [class.ate-toc-hover-expand]="floating() && hoverExpand()"
246
+ [class.ate-toc-hovered]="floating() && hoverExpand() && isExpanded()"
247
+ role="navigation"
248
+ aria-label="Table of Contents">
249
+ @if (items().length > 0) {
250
+ @if (showTitle()) {
251
+ <div class="ate-toc-header">{{ headerTitle() }}</div>
252
+ }
253
+ <div class="ate-toc-list">
254
+ @for (item of items(); track item.id) {
255
+ <button
256
+ type="button"
257
+ class="ate-toc-item"
258
+ [class.ate-toc-active]="item.active"
259
+ [attr.aria-current]="item.active ? 'true' : null"
260
+ [attr.data-level]="item.level"
261
+ (click)="scrollToHeading(item, $event)"
262
+ [title]="item.text">
263
+ <!-- Perfect native vector SVG dash with level-adapted viewBox & width -->
264
+ <svg
265
+ [attr.width]="dashWidth(item.level)"
266
+ height="2"
267
+ [attr.viewBox]="'0 0 ' + dashWidth(item.level) + ' 2'"
268
+ fill="none"
269
+ xmlns="http://www.w3.org/2000/svg"
270
+ class="ate-toc-dash">
271
+ <rect
272
+ [attr.width]="dashWidth(item.level)"
273
+ height="2"
274
+ rx="1"
275
+ ry="1"
276
+ fill="currentColor"></rect>
277
+ </svg>
278
+
279
+ <!-- Full heading text -->
280
+ <span class="ate-toc-text">{{ item.text }}</span>
281
+ </button>
282
+ }
283
+ </div>
284
+ }
285
+ </div>
286
+ </div>
287
+ `, isInline: true, styles: [":host{display:block}.ate-toc-wrapper.ate-toc-floating{position:fixed;top:var(--ate-toc-top, 50%);transform:translateY(-50%);z-index:var(--ate-toc-z-index, 95);display:flex;flex-direction:column;box-sizing:border-box}.ate-toc-wrapper.ate-toc-floating.ate-toc-position-right{right:var(--ate-toc-right, 2rem);left:auto;padding-left:var(--ate-toc-hitbox-padding, 16px);padding-right:0;padding-top:var(--ate-toc-hitbox-padding-vertical, 8px);padding-bottom:var(--ate-toc-hitbox-padding-vertical, 8px)}.ate-toc-wrapper.ate-toc-floating.ate-toc-position-left{left:var(--ate-toc-left, 2rem);right:auto;padding-right:var(--ate-toc-hitbox-padding, 16px);padding-left:0;padding-top:var(--ate-toc-hitbox-padding-vertical, 8px);padding-bottom:var(--ate-toc-hitbox-padding-vertical, 8px)}.ate-toc{font-family:inherit;-webkit-user-select:none;user-select:none;width:100%;box-sizing:border-box;transition:all .3s cubic-bezier(.25,.46,.45,.94)}.ate-toc.ate-toc-floating{max-height:var(--ate-toc-max-height, 400px);overflow:hidden;display:flex;flex-direction:column}.ate-toc.ate-toc-floating:not(.ate-toc-hover-expand),.ate-toc.ate-toc-floating.ate-toc-hover-expand:hover,.ate-toc.ate-toc-floating.ate-toc-hover-expand.ate-toc-hovered{width:var(--ate-toc-width, 240px);border-radius:var(--ate-toc-border-radius, var(--ate-border-radius, 16px));padding:var(--ate-toc-padding)}.ate-toc.ate-toc-floating.ate-toc-hover-expand:not(.ate-toc-hovered):not(:hover){width:var(--ate-toc-collapsed-width, 32px);border-radius:var(--ate-toc-collapsed-radius, 16px);padding:var(--ate-toc-padding)}.ate-toc.ate-toc-variant-card{background:var(--ate-toc-bg, var(--ate-surface, #ffffff));border:1px solid var(--ate-toc-border, var(--ate-border, #e2e8f0));border-radius:var(--ate-toc-border-radius, var(--ate-border-radius, 12px));box-shadow:var(--ate-toc-shadow, 0 4px 20px rgba(0, 0, 0, .06));padding:var(--ate-toc-padding)}.ate-toc.ate-toc-variant-minimal{background:transparent;border:1px solid transparent;box-shadow:none;border-radius:var(--ate-toc-border-radius, var(--ate-border-radius, 12px));padding:10px 12px}.ate-toc.ate-toc-variant-minimal:hover{background:var(--ate-toc-hover-bg, var(--ate-surface, rgba(255, 255, 255, .95)));border-color:var(--ate-toc-hover-border, var(--ate-border, #e2e8f0));box-shadow:var(--ate-toc-hover-shadow, 0 4px 20px rgba(0, 0, 0, .06))}.ate-toc.ate-toc-variant-transparent{background:transparent;border:none;box-shadow:none;padding:0}.ate-toc-header{font-size:.65rem;text-transform:uppercase;letter-spacing:.08em;font-weight:700;color:var(--ate-text-muted, #9ca3af);margin-bottom:10px;margin-top:6px;padding-left:12px;padding-right:0;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:opacity .2s ease}.ate-toc-list{display:flex;flex-direction:column;gap:var(--ate-toc-text-gap, var(--ate-toc-gap, 2px));position:relative;transition:gap .2s ease}.ate-toc-item{display:flex;align-items:center;justify-content:flex-start;text-align:left;position:relative;text-decoration:none;background:transparent;border:none;padding-right:0;cursor:pointer;font:inherit;width:100%;height:var(--ate-toc-item-hover-height, 22px);color:var(--ate-toolbar-button-color, var(--ate-text-secondary, #64748b));outline:none;box-sizing:border-box;border-radius:var(--ate-sub-border-radius, 8px);transition:all .2s cubic-bezier(.4,0,.2,1);overflow:hidden}.ate-toc-item:focus-visible{outline:2px solid var(--ate-primary, #2563eb);outline-offset:1px}.ate-toc-item[data-level=\"1\"]{padding-left:8px}.ate-toc-item[data-level=\"2\"]{padding-left:16px}.ate-toc-item[data-level=\"3\"]{padding-left:24px}.ate-toc-item[data-level=\"4\"]{padding-left:32px}.ate-toc-item[data-level=\"5\"]{padding-left:40px}.ate-toc-item[data-level=\"6\"]{padding-left:48px}.ate-toc-item:before{content:\"\";position:absolute;inset:0;background:var(--ate-primary, #2563eb);opacity:0;transition:opacity .2s ease;border-radius:var(--ate-sub-border-radius, 8px);pointer-events:none}.ate-toc-item:hover{color:var(--ate-toolbar-button-active-color, var(--ate-primary, #2563eb));background:var(--ate-toolbar-button-hover-background, transparent)}.ate-toc-item:hover:before{opacity:.1}.ate-toc-item.ate-toc-active{color:var(--ate-toolbar-button-active-color, var(--ate-primary, #2563eb));background:var( --ate-toolbar-button-active-background, var(--ate-primary-light, color-mix(in srgb, var(--ate-primary, #2563eb), transparent 90%)) );font-weight:600}.ate-toc-text{font-size:.8rem;font-weight:500;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;flex:1;min-width:0;opacity:1;max-width:250px;transform:translate(0);margin-left:4px;margin-right:0;transition:opacity .25s cubic-bezier(.25,.46,.45,.94),max-width .3s cubic-bezier(.25,.46,.45,.94),transform .25s cubic-bezier(.25,.46,.45,.94),margin .25s ease}.ate-toc-dash{display:none;height:3px;color:var(--ate-toc-dash-color, var(--ate-border, #cbd5e1));flex-shrink:0;vertical-align:middle;overflow:visible;transition:all .3s cubic-bezier(.25,.46,.45,.94)}.ate-toc.ate-toc-hover-expand:not(.ate-toc-hovered) .ate-toc-header{display:none}.ate-toc.ate-toc-hover-expand:not(.ate-toc-hovered) .ate-toc-dash{display:inline-block}.ate-toc.ate-toc-hover-expand:not(.ate-toc-hovered) .ate-toc-item{height:var(--ate-toc-item-height, 18px);padding-left:0;padding-right:0;background:transparent}.ate-toc.ate-toc-hover-expand:not(.ate-toc-hovered) .ate-toc-item:before{opacity:0}.ate-toc.ate-toc-hover-expand:not(.ate-toc-hovered) .ate-toc-item:hover .ate-toc-dash,.ate-toc.ate-toc-hover-expand:not(.ate-toc-hovered) .ate-toc-item.ate-toc-active .ate-toc-dash{color:var(--ate-primary, #2563eb);opacity:1}.ate-toc.ate-toc-hover-expand.ate-toc-position-right:not(.ate-toc-hovered) .ate-toc-item{flex-direction:row-reverse;justify-content:flex-start}.ate-toc.ate-toc-hover-expand.ate-toc-position-right:not(.ate-toc-hovered) .ate-toc-text{opacity:0;max-width:0;transform:translate(4px);margin-right:0}.ate-toc.ate-toc-hover-expand:not(.ate-toc-position-right):not(.ate-toc-hovered) .ate-toc-item,.ate-toc.ate-toc-hover-expand.ate-toc-position-left:not(.ate-toc-hovered) .ate-toc-item{flex-direction:row;justify-content:flex-start}.ate-toc.ate-toc-hover-expand:not(.ate-toc-position-right):not(.ate-toc-hovered) .ate-toc-text,.ate-toc.ate-toc-hover-expand.ate-toc-position-left:not(.ate-toc-hovered) .ate-toc-text{opacity:0;max-width:0;transform:translate(-4px);margin-left:0}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
288
+ }
289
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AteTableOfContentsComponent, decorators: [{
290
+ type: Component,
291
+ args: [{ selector: "ate-table-of-contents", standalone: true, imports: [], changeDetection: ChangeDetectionStrategy.OnPush, template: `
292
+ <div
293
+ class="ate-toc-wrapper"
294
+ [class.ate-toc-floating]="floating()"
295
+ [class.ate-toc-position-left]="position() === 'left'"
296
+ [class.ate-toc-position-right]="position() === 'right'"
297
+ (mouseenter)="setMouseHover(true)"
298
+ (mouseleave)="setMouseHover(false)"
299
+ (focusin)="setFocused(true)"
300
+ (focusout)="setFocused(false)">
301
+ <div
302
+ class="ate-toc"
303
+ [class.ate-toc-floating]="floating()"
304
+ [class.ate-toc-position-left]="position() === 'left'"
305
+ [class.ate-toc-position-right]="position() === 'right'"
306
+ [class.ate-toc-variant-card]="variant() === 'card'"
307
+ [class.ate-toc-variant-transparent]="variant() === 'transparent'"
308
+ [class.ate-toc-variant-minimal]="variant() === 'minimal'"
309
+ [class.ate-toc-hover-expand]="floating() && hoverExpand()"
310
+ [class.ate-toc-hovered]="floating() && hoverExpand() && isExpanded()"
311
+ role="navigation"
312
+ aria-label="Table of Contents">
313
+ @if (items().length > 0) {
314
+ @if (showTitle()) {
315
+ <div class="ate-toc-header">{{ headerTitle() }}</div>
316
+ }
317
+ <div class="ate-toc-list">
318
+ @for (item of items(); track item.id) {
319
+ <button
320
+ type="button"
321
+ class="ate-toc-item"
322
+ [class.ate-toc-active]="item.active"
323
+ [attr.aria-current]="item.active ? 'true' : null"
324
+ [attr.data-level]="item.level"
325
+ (click)="scrollToHeading(item, $event)"
326
+ [title]="item.text">
327
+ <!-- Perfect native vector SVG dash with level-adapted viewBox & width -->
328
+ <svg
329
+ [attr.width]="dashWidth(item.level)"
330
+ height="2"
331
+ [attr.viewBox]="'0 0 ' + dashWidth(item.level) + ' 2'"
332
+ fill="none"
333
+ xmlns="http://www.w3.org/2000/svg"
334
+ class="ate-toc-dash">
335
+ <rect
336
+ [attr.width]="dashWidth(item.level)"
337
+ height="2"
338
+ rx="1"
339
+ ry="1"
340
+ fill="currentColor"></rect>
341
+ </svg>
342
+
343
+ <!-- Full heading text -->
344
+ <span class="ate-toc-text">{{ item.text }}</span>
345
+ </button>
346
+ }
347
+ </div>
348
+ }
349
+ </div>
350
+ </div>
351
+ `, styles: [":host{display:block}.ate-toc-wrapper.ate-toc-floating{position:fixed;top:var(--ate-toc-top, 50%);transform:translateY(-50%);z-index:var(--ate-toc-z-index, 95);display:flex;flex-direction:column;box-sizing:border-box}.ate-toc-wrapper.ate-toc-floating.ate-toc-position-right{right:var(--ate-toc-right, 2rem);left:auto;padding-left:var(--ate-toc-hitbox-padding, 16px);padding-right:0;padding-top:var(--ate-toc-hitbox-padding-vertical, 8px);padding-bottom:var(--ate-toc-hitbox-padding-vertical, 8px)}.ate-toc-wrapper.ate-toc-floating.ate-toc-position-left{left:var(--ate-toc-left, 2rem);right:auto;padding-right:var(--ate-toc-hitbox-padding, 16px);padding-left:0;padding-top:var(--ate-toc-hitbox-padding-vertical, 8px);padding-bottom:var(--ate-toc-hitbox-padding-vertical, 8px)}.ate-toc{font-family:inherit;-webkit-user-select:none;user-select:none;width:100%;box-sizing:border-box;transition:all .3s cubic-bezier(.25,.46,.45,.94)}.ate-toc.ate-toc-floating{max-height:var(--ate-toc-max-height, 400px);overflow:hidden;display:flex;flex-direction:column}.ate-toc.ate-toc-floating:not(.ate-toc-hover-expand),.ate-toc.ate-toc-floating.ate-toc-hover-expand:hover,.ate-toc.ate-toc-floating.ate-toc-hover-expand.ate-toc-hovered{width:var(--ate-toc-width, 240px);border-radius:var(--ate-toc-border-radius, var(--ate-border-radius, 16px));padding:var(--ate-toc-padding)}.ate-toc.ate-toc-floating.ate-toc-hover-expand:not(.ate-toc-hovered):not(:hover){width:var(--ate-toc-collapsed-width, 32px);border-radius:var(--ate-toc-collapsed-radius, 16px);padding:var(--ate-toc-padding)}.ate-toc.ate-toc-variant-card{background:var(--ate-toc-bg, var(--ate-surface, #ffffff));border:1px solid var(--ate-toc-border, var(--ate-border, #e2e8f0));border-radius:var(--ate-toc-border-radius, var(--ate-border-radius, 12px));box-shadow:var(--ate-toc-shadow, 0 4px 20px rgba(0, 0, 0, .06));padding:var(--ate-toc-padding)}.ate-toc.ate-toc-variant-minimal{background:transparent;border:1px solid transparent;box-shadow:none;border-radius:var(--ate-toc-border-radius, var(--ate-border-radius, 12px));padding:10px 12px}.ate-toc.ate-toc-variant-minimal:hover{background:var(--ate-toc-hover-bg, var(--ate-surface, rgba(255, 255, 255, .95)));border-color:var(--ate-toc-hover-border, var(--ate-border, #e2e8f0));box-shadow:var(--ate-toc-hover-shadow, 0 4px 20px rgba(0, 0, 0, .06))}.ate-toc.ate-toc-variant-transparent{background:transparent;border:none;box-shadow:none;padding:0}.ate-toc-header{font-size:.65rem;text-transform:uppercase;letter-spacing:.08em;font-weight:700;color:var(--ate-text-muted, #9ca3af);margin-bottom:10px;margin-top:6px;padding-left:12px;padding-right:0;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:opacity .2s ease}.ate-toc-list{display:flex;flex-direction:column;gap:var(--ate-toc-text-gap, var(--ate-toc-gap, 2px));position:relative;transition:gap .2s ease}.ate-toc-item{display:flex;align-items:center;justify-content:flex-start;text-align:left;position:relative;text-decoration:none;background:transparent;border:none;padding-right:0;cursor:pointer;font:inherit;width:100%;height:var(--ate-toc-item-hover-height, 22px);color:var(--ate-toolbar-button-color, var(--ate-text-secondary, #64748b));outline:none;box-sizing:border-box;border-radius:var(--ate-sub-border-radius, 8px);transition:all .2s cubic-bezier(.4,0,.2,1);overflow:hidden}.ate-toc-item:focus-visible{outline:2px solid var(--ate-primary, #2563eb);outline-offset:1px}.ate-toc-item[data-level=\"1\"]{padding-left:8px}.ate-toc-item[data-level=\"2\"]{padding-left:16px}.ate-toc-item[data-level=\"3\"]{padding-left:24px}.ate-toc-item[data-level=\"4\"]{padding-left:32px}.ate-toc-item[data-level=\"5\"]{padding-left:40px}.ate-toc-item[data-level=\"6\"]{padding-left:48px}.ate-toc-item:before{content:\"\";position:absolute;inset:0;background:var(--ate-primary, #2563eb);opacity:0;transition:opacity .2s ease;border-radius:var(--ate-sub-border-radius, 8px);pointer-events:none}.ate-toc-item:hover{color:var(--ate-toolbar-button-active-color, var(--ate-primary, #2563eb));background:var(--ate-toolbar-button-hover-background, transparent)}.ate-toc-item:hover:before{opacity:.1}.ate-toc-item.ate-toc-active{color:var(--ate-toolbar-button-active-color, var(--ate-primary, #2563eb));background:var( --ate-toolbar-button-active-background, var(--ate-primary-light, color-mix(in srgb, var(--ate-primary, #2563eb), transparent 90%)) );font-weight:600}.ate-toc-text{font-size:.8rem;font-weight:500;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;flex:1;min-width:0;opacity:1;max-width:250px;transform:translate(0);margin-left:4px;margin-right:0;transition:opacity .25s cubic-bezier(.25,.46,.45,.94),max-width .3s cubic-bezier(.25,.46,.45,.94),transform .25s cubic-bezier(.25,.46,.45,.94),margin .25s ease}.ate-toc-dash{display:none;height:3px;color:var(--ate-toc-dash-color, var(--ate-border, #cbd5e1));flex-shrink:0;vertical-align:middle;overflow:visible;transition:all .3s cubic-bezier(.25,.46,.45,.94)}.ate-toc.ate-toc-hover-expand:not(.ate-toc-hovered) .ate-toc-header{display:none}.ate-toc.ate-toc-hover-expand:not(.ate-toc-hovered) .ate-toc-dash{display:inline-block}.ate-toc.ate-toc-hover-expand:not(.ate-toc-hovered) .ate-toc-item{height:var(--ate-toc-item-height, 18px);padding-left:0;padding-right:0;background:transparent}.ate-toc.ate-toc-hover-expand:not(.ate-toc-hovered) .ate-toc-item:before{opacity:0}.ate-toc.ate-toc-hover-expand:not(.ate-toc-hovered) .ate-toc-item:hover .ate-toc-dash,.ate-toc.ate-toc-hover-expand:not(.ate-toc-hovered) .ate-toc-item.ate-toc-active .ate-toc-dash{color:var(--ate-primary, #2563eb);opacity:1}.ate-toc.ate-toc-hover-expand.ate-toc-position-right:not(.ate-toc-hovered) .ate-toc-item{flex-direction:row-reverse;justify-content:flex-start}.ate-toc.ate-toc-hover-expand.ate-toc-position-right:not(.ate-toc-hovered) .ate-toc-text{opacity:0;max-width:0;transform:translate(4px);margin-right:0}.ate-toc.ate-toc-hover-expand:not(.ate-toc-position-right):not(.ate-toc-hovered) .ate-toc-item,.ate-toc.ate-toc-hover-expand.ate-toc-position-left:not(.ate-toc-hovered) .ate-toc-item{flex-direction:row;justify-content:flex-start}.ate-toc.ate-toc-hover-expand:not(.ate-toc-position-right):not(.ate-toc-hovered) .ate-toc-text,.ate-toc.ate-toc-hover-expand.ate-toc-position-left:not(.ate-toc-hovered) .ate-toc-text{opacity:0;max-width:0;transform:translate(-4px);margin-left:0}\n"] }]
352
+ }], ctorParameters: () => [], propDecorators: { onScroll: [{
353
+ type: HostListener,
354
+ args: ["window:scroll", []]
355
+ }, {
356
+ type: HostListener,
357
+ args: ["window:resize", []]
358
+ }] } });
359
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXRlLXRhYmxlLW9mLWNvbnRlbnRzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItdGlwdGFwLWVkaXRvci9zcmMvbGliL2NvbXBvbmVudHMvdGFibGUtb2YtY29udGVudHMvYXRlLXRhYmxlLW9mLWNvbnRlbnRzLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFDTCxNQUFNLEVBQ04sTUFBTSxFQUNOLFFBQVEsRUFDUixNQUFNLEVBQ04sU0FBUyxFQUNULHVCQUF1QixFQUV2QixZQUFZLEdBQ2IsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzNELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7QUFZakU7Ozs7R0FJRztBQTBXSCxNQUFNLE9BQU8sMkJBQTJCO0lBeUJ0QyxrRUFBa0U7SUFDbEUsU0FBUyxDQUFDLEtBQWE7UUFDckIsUUFBUSxLQUFLLEVBQUUsQ0FBQztZQUNkLEtBQUssQ0FBQztnQkFDSixPQUFPLEVBQUUsQ0FBQztZQUNaLEtBQUssQ0FBQztnQkFDSixPQUFPLEVBQUUsQ0FBQztZQUNaLEtBQUssQ0FBQztnQkFDSixPQUFPLENBQUMsQ0FBQztZQUNYLEtBQUssQ0FBQztnQkFDSixPQUFPLENBQUMsQ0FBQztZQUNYLEtBQUssQ0FBQztnQkFDSixPQUFPLENBQUMsQ0FBQztZQUNYO2dCQUNFLE9BQU8sQ0FBQyxDQUFDO1FBQ2IsQ0FBQztJQUNILENBQUM7SUFrQ0Q7UUExRUEscUVBQXFFO1FBQ3JFLFdBQU0sR0FBRyxLQUFLLENBQW9ELElBQUksQ0FBQyxDQUFDO1FBRXhFLGlFQUFpRTtRQUNqRSxVQUFLLEdBQUcs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c291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBpbnB1dCxcbiAgaW5qZWN0LFxuICBzaWduYWwsXG4gIGNvbXB1dGVkLFxuICBlZmZlY3QsXG4gIHVudHJhY2tlZCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIE9uRGVzdHJveSxcbiAgSG9zdExpc3RlbmVyLFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgRWRpdG9yIH0gZnJvbSBcIkB0aXB0YXAvY29yZVwiO1xuaW1wb3J0IHsgQXRlRWRpdG9yUmVmIH0gZnJvbSBcIi4uLy4uL21vZGVscy9hdGUtZWRpdG9yLXJlZlwiO1xuaW1wb3J0IHsgQXRlRWRpdG9yUmVnaXN0cnkgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvYXRlLWVkaXRvci1yZWdpc3RyeS5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBBdGVJMThuU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9hdGUtaTE4bi5zZXJ2aWNlXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXRlVG9jSXRlbSB7XG4gIHRleHQ6IHN0cmluZztcbiAgbGV2ZWw6IG51bWJlcjtcbiAgcG9zOiBudW1iZXI7XG4gIGlkOiBzdHJpbmc7XG4gIGFjdGl2ZTogYm9vbGVhbjtcbn1cblxuZXhwb3J0IHR5cGUgQXRlVG9jVmFyaWFudCA9IFwiY2FyZFwiIHwgXCJ0cmFuc3BhcmVudFwiIHwgXCJtaW5pbWFsXCI7XG5cbi8qKlxuICogVGFibGUgb2YgQ29udGVudHMgQ29tcG9uZW50IChOb3Rpb24tc3R5bGUpXG4gKiBEeW5hbWljYWxseSBleHRyYWN0cyBoZWFkaW5ncyBmcm9tIHRoZSBhY3RpdmUgZWRpdG9yIGFuZCBkaXNwbGF5cyB0aGVtLlxuICogQ29uZmlndXJhYmxlIHZpYSBpbnB1dHMgKGZsb2F0aW5nLCBwb3NpdGlvbiwgdmFyaWFudHMsIGhvdmVyIGV4cGFuc2lvbikgYW5kIENTUyB2YXJpYWJsZXMuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJhdGUtdGFibGUtb2YtY29udGVudHNcIixcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiYXRlLXRvYy13cmFwcGVyXCJcbiAgICAgIFtjbGFzcy5hdGUtdG9jLWZsb2F0aW5nXT1cImZsb2F0aW5nKClcIlxuICAgICAgW2NsYXNzLmF0ZS10b2MtcG9zaXRpb24tbGVmdF09XCJwb3NpdGlvbigpID09PSAnbGVmdCdcIlxuICAgICAgW2NsYXNzLmF0ZS10b2MtcG9zaXRpb24tcmlnaHRdPVwicG9zaXRpb24oKSA9PT0gJ3JpZ2h0J1wiXG4gICAgICAobW91c2VlbnRlcik9XCJzZXRNb3VzZUhvdmVyKHRydWUpXCJcbiAgICAgIChtb3VzZWxlYXZlKT1cInNldE1vdXNlSG92ZXIoZmFsc2UpXCJcbiAgICAgIChmb2N1c2luKT1cInNldEZvY3VzZWQodHJ1ZSlcIlxuICAgICAgKGZvY3Vzb3V0KT1cInNldEZvY3VzZWQoZmFsc2UpXCI+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiYXRlLXRvY1wiXG4gICAgICAgIFtjbGFzcy5hdGUtdG9jLWZsb2F0aW5nXT1cImZsb2F0aW5nKClcIlxuICAgICAgICBbY2xhc3MuYXRlLXRvYy1wb3NpdGlvbi1sZWZ0XT1cInBvc2l0aW9uKCkgPT09ICdsZWZ0J1wiXG4gICAgICAgIFtjbGFzcy5hdGUtdG9jLXBvc2l0aW9uLXJpZ2h0XT1cInBvc2l0aW9uKCkgPT09ICdyaWdodCdcIlxuICAgICAgICBbY2xhc3MuYXRlLXRvYy12YXJpYW50LWNhcmRdPVwidmFyaWFudCgpID09PSAnY2FyZCdcIlxuICAgICAgICBbY2xhc3MuYXRlLXRvYy12YXJpYW50LXRyYW5zcGFyZW50XT1cInZhcmlhbnQoKSA9PT0gJ3RyYW5zcGFyZW50J1wiXG4gICAgICAgIFtjbGFzcy5hdGUtdG9jLXZhcmlhbnQtbWluaW1hbF09XCJ2YXJpYW50KCkgPT09ICdtaW5pbWFsJ1wiXG4gICAgICAgIFtjbGFzcy5hdGUtdG9jLWhvdmVyLWV4cGFuZF09XCJmbG9hdGluZygpICYmIGhvdmVyRXhwYW5kKClcIlxuICAgICAgICBbY2xhc3MuYXRlLXRvYy1ob3ZlcmVkXT1cImZsb2F0aW5nKCkgJiYgaG92ZXJFeHBhbmQoKSAmJiBpc0V4cGFuZGVkKClcIlxuICAgICAgICByb2xlPVwibmF2aWdhdGlvblwiXG4gICAgICAgIGFyaWEtbGFiZWw9XCJUYWJsZSBvZiBDb250ZW50c1wiPlxuICAgICAgICBAaWYgKGl0ZW1zKCkubGVuZ3RoID4gMCkge1xuICAgICAgICAgIEBpZiAoc2hvd1RpdGxlKCkpIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdGUtdG9jLWhlYWRlclwiPnt7IGhlYWRlclRpdGxlKCkgfX08L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImF0ZS10b2MtbGlzdFwiPlxuICAgICAgICAgICAgQGZvciAoaXRlbSBvZiBpdGVtcygpOyB0cmFjayBpdGVtLmlkKSB7XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImF0ZS10b2MtaXRlbVwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmF0ZS10b2MtYWN0aXZlXT1cIml0ZW0uYWN0aXZlXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWN1cnJlbnRdPVwiaXRlbS5hY3RpdmUgPyAndHJ1ZScgOiBudWxsXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWxldmVsXT1cIml0ZW0ubGV2ZWxcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJzY3JvbGxUb0hlYWRpbmcoaXRlbSwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgW3RpdGxlXT1cIml0ZW0udGV4dFwiPlxuICAgICAgICAgICAgICAgIDwhLS0gUGVyZmVjdCBuYXRpdmUgdmVjdG9yIFNWRyBkYXNoIHdpdGggbGV2ZWwtYWRhcHRlZCB2aWV3Qm94ICYgd2lkdGggLS0+XG4gICAgICAgICAgICAgICAgPHN2Z1xuICAgICAgICAgICAgICAgICAgW2F0dHIud2lkdGhdPVwiZGFzaFdpZHRoKGl0ZW0ubGV2ZWwpXCJcbiAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjJcIlxuICAgICAgICAgICAgICAgICAgW2F0dHIudmlld0JveF09XCInMCAwICcgKyBkYXNoV2lkdGgoaXRlbS5sZXZlbCkgKyAnIDInXCJcbiAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhdGUtdG9jLWRhc2hcIj5cbiAgICAgICAgICAgICAgICAgIDxyZWN0XG4gICAgICAgICAgICAgICAgICAgIFthdHRyLndpZHRoXT1cImRhc2hXaWR0aChpdGVtLmxldmVsKVwiXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjJcIlxuICAgICAgICAgICAgICAgICAgICByeD1cIjFcIlxuICAgICAgICAgICAgICAgICAgICByeT1cIjFcIlxuICAgICAgICAgICAgICAgICAgICBmaWxsPVwiY3VycmVudENvbG9yXCI+PC9yZWN0PlxuICAgICAgICAgICAgICAgIDwvc3ZnPlxuXG4gICAgICAgICAgICAgICAgPCEtLSBGdWxsIGhlYWRpbmcgdGV4dCAtLT5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImF0ZS10b2MtdGV4dFwiPnt7IGl0ZW0udGV4dCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICBgLFxuICBzdHlsZXM6IFtcbiAgICBgXG4gICAgICA6aG9zdCB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgfVxuXG4gICAgICAvKiBPdXRlciBIaXRib3ggQ29udGFpbmVyIFBvc2l0aW9uaW5nICovXG4gICAgICAuYXRlLXRvYy13cmFwcGVyLmF0ZS10b2MtZmxvYXRpbmcge1xuICAgICAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgICAgIHRvcDogdmFyKC0tYXRlLXRvYy10b3AsIDUwJSk7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbiAgICAgICAgei1pbmRleDogdmFyKC0tYXRlLXRvYy16LWluZGV4LCA5NSk7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICB9XG5cbiAgICAgIC5hdGUtdG9jLXdyYXBwZXIuYXRlLXRvYy1mbG9hdGluZy5hdGUtdG9jLXBvc2l0aW9uLXJpZ2h0IHtcbiAgICAgICAgcmlnaHQ6IHZhcigtLWF0ZS10b2MtcmlnaHQsIDJyZW0pO1xuICAgICAgICBsZWZ0OiBhdXRvO1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IHZhcigtLWF0ZS10b2MtaGl0Ym94LXBhZGRpbmcsIDE2cHgpO1xuICAgICAgICBwYWRkaW5nLXJpZ2h0OiAwO1xuICAgICAgICBwYWRkaW5nLXRvcDogdmFyKC0tYXRlLXRvYy1oaXRib3gtcGFkZGluZy12ZXJ0aWNhbCwgOHB4KTtcbiAgICAgICAgcGFkZGluZy1ib3R0b206IHZhcigtLWF0ZS10b2MtaGl0Ym94LXBhZGRpbmctdmVydGljYWwsIDhweCk7XG4gICAgICB9XG5cbiAgICAgIC5hdGUtdG9jLXdyYXBwZXIuYXRlLXRvYy1mbG9hdGluZy5hdGUtdG9jLXBvc2l0aW9uLWxlZnQge1xuICAgICAgICBsZWZ0OiB2YXIoLS1hdGUtdG9jLWxlZnQsIDJyZW0pO1xuICAgICAgICByaWdodDogYXV0bztcbiAgICAgICAgcGFkZGluZy1yaWdodDogdmFyKC0tYXRlLXRvYy1oaXRib3gtcGFkZGluZywgMTZweCk7XG4gICAgICAgIHBhZGRpbmctbGVmdDogMDtcbiAgICAgICAgcGFkZGluZy10b3A6IHZhcigtLWF0ZS10b2MtaGl0Ym94LXBhZGRpbmctdmVydGljYWwsIDhweCk7XG4gICAgICAgIHBhZGRpbmctYm90dG9tOiB2YXIoLS1hdGUtdG9jLWhpdGJveC1wYWRkaW5nLXZlcnRpY2FsLCA4cHgpO1xuICAgICAgfVxuXG4gICAgICAuYXRlLXRvYyB7XG4gICAgICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0O1xuICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjNzIGN1YmljLWJlemllcigwLjI1LCAwLjQ2LCAwLjQ1LCAwLjk0KTtcbiAgICAgIH1cblxuICAgICAgLyogRmxvYXRpbmcgTW9kZSBDb250YWluZXIgUG9zaXRpb25pbmcgKi9cbiAgICAgIC5hdGUtdG9jLmF0ZS10b2MtZmxvYXRpbmcge1xuICAgICAgICBtYXgtaGVpZ2h0OiB2YXIoLS1hdGUtdG9jLW1heC1oZWlnaHQsIDQwMHB4KTtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgIH1cblxuICAgICAgLyogRmxvYXRpbmcgbW9kZSB3aWR0aCAmIHBhZGRpbmcgKi9cbiAgICAgIC5hdGUtdG9jLmF0ZS10b2MtZmxvYXRpbmc6bm90KC5hdGUtdG9jLWhvdmVyLWV4cGFuZCksXG4gICAgICAuYXRlLXRvYy5hdGUtdG9jLWZsb2F0aW5nLmF0ZS10b2MtaG92ZXItZXhwYW5kOmhvdmVyLFxuICAgICAgLmF0ZS10b2MuYXRlLXRvYy1mbG9hdGluZy5hdGUtdG9jLWhvdmVyLWV4cGFuZC5hdGUtdG9jLWhvdmVyZWQge1xuICAgICAgICB3aWR0aDogdmFyKC0tYXRlLXRvYy13aWR0aCwgMjQwcHgpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1hdGUtdG9jLWJvcmRlci1yYWRpdXMsIHZhcigtLWF0ZS1ib3JkZXItcmFkaXVzLCAxNnB4KSk7XG4gICAgICAgIHBhZGRpbmc6IHZhcigtLWF0ZS10b2MtcGFkZGluZyk7XG4gICAgICB9XG5cbiAgICAgIC5hdGUtdG9jLmF0ZS10b2MtZmxvYXRpbmcuYXRlLXRvYy1ob3Zlci1leHBhbmQ6bm90KC5hdGUtdG9jLWhvdmVyZWQpOm5vdCg6aG92ZXIpIHtcbiAgICAgICAgd2lkdGg6IHZhcigtLWF0ZS10b2MtY29sbGFwc2VkLXdpZHRoLCAzMnB4KTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYXRlLXRvYy1jb2xsYXBzZWQtcmFkaXVzLCAxNnB4KTtcbiAgICAgICAgcGFkZGluZzogdmFyKC0tYXRlLXRvYy1wYWRkaW5nKTtcbiAgICAgIH1cblxuICAgICAgLyogVmFyaWFudDogY2FyZCAqL1xuICAgICAgLmF0ZS10b2MuYXRlLXRvYy12YXJpYW50LWNhcmQge1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1hdGUtdG9jLWJnLCB2YXIoLS1hdGUtc3VyZmFjZSwgI2ZmZmZmZikpO1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1hdGUtdG9jLWJvcmRlciwgdmFyKC0tYXRlLWJvcmRlciwgI2UyZThmMCkpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1hdGUtdG9jLWJvcmRlci1yYWRpdXMsIHZhcigtLWF0ZS1ib3JkZXItcmFkaXVzLCAxMnB4KSk7XG4gICAgICAgIGJveC1zaGFkb3c6IHZhcigtLWF0ZS10b2Mtc2hhZG93LCAwIDRweCAyMHB4IHJnYmEoMCwgMCwgMCwgMC4wNikpO1xuICAgICAgICBwYWRkaW5nOiB2YXIoLS1hdGUtdG9jLXBhZGRpbmcpO1xuICAgICAgfVxuXG4gICAgICAvKiBWYXJpYW50OiBtaW5pbWFsICovXG4gICAgICAuYXRlLXRvYy5hdGUtdG9jLXZhcmlhbnQtbWluaW1hbCB7XG4gICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICAgICAgYm94LXNoYWRvdzogbm9uZTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYXRlLXRvYy1ib3JkZXItcmFkaXVzLCB2YXIoLS1hdGUtYm9yZGVyLXJhZGl1cywgMTJweCkpO1xuICAgICAgICBwYWRkaW5nOiAxMHB4IDEycHg7XG4gICAgICB9XG5cbiAgICAgIC5hdGUtdG9jLmF0ZS10b2MtdmFyaWFudC1taW5pbWFsOmhvdmVyIHtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tYXRlLXRvYy1ob3Zlci1iZywgdmFyKC0tYXRlLXN1cmZhY2UsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45NSkpKTtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1hdGUtdG9jLWhvdmVyLWJvcmRlciwgdmFyKC0tYXRlLWJvcmRlciwgI2UyZThmMCkpO1xuICAgICAgICBib3gtc2hhZG93OiB2YXIoLS1hdGUtdG9jLWhvdmVyLXNoYWRvdywgMCA0cHggMjBweCByZ2JhKDAsIDAsIDAsIDAuMDYpKTtcbiAgICAgIH1cblxuICAgICAgLyogVmFyaWFudDogdHJhbnNwYXJlbnQgKi9cbiAgICAgIC5hdGUtdG9jLmF0ZS10b2MtdmFyaWFudC10cmFuc3BhcmVudCB7XG4gICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgICBib3JkZXI6IG5vbmU7XG4gICAgICAgIGJveC1zaGFkb3c6IG5vbmU7XG4gICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICB9XG5cbiAgICAgIC8qIEhlYWRlciBzdHlsaW5nICovXG4gICAgICAuYXRlLXRvYy1oZWFkZXIge1xuICAgICAgICBmb250LXNpemU6IDAuNjVyZW07XG4gICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICAgIGxldHRlci1zcGFjaW5nOiAwLjA4ZW07XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1hdGUtdGV4dC1tdXRlZCwgIzljYTNhZik7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7XG4gICAgICAgIG1hcmdpbi10b3A6IDZweDtcbiAgICAgICAgcGFkZGluZy1sZWZ0OiAxMnB4O1xuICAgICAgICBwYWRkaW5nLXJpZ2h0OiAwO1xuICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzIGVhc2U7XG4gICAgICB9XG5cbiAgICAgIC8qIExpc3QgY29udGFpbmVyICovXG4gICAgICAuYXRlLXRvYy1saXN0IHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgZ2FwOiB2YXIoLS1hdGUtdG9jLXRleHQtZ2FwLCB2YXIoLS1hdGUtdG9jLWdhcCwgMnB4KSk7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgdHJhbnNpdGlvbjogZ2FwIDAuMnMgZWFzZTtcbiAgICAgIH1cblxuICAgICAgLyogQmFzZSBJdGVtIChFeHBhbmRlZCAvIFRleHQgbW9kZSBkZWZhdWx0KSAqL1xuICAgICAgLmF0ZS10b2MtaXRlbSB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgICBib3JkZXI6IG5vbmU7XG4gICAgICAgIHBhZGRpbmctcmlnaHQ6IDA7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgZm9udDogaW5oZXJpdDtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIGhlaWdodDogdmFyKC0tYXRlLXRvYy1pdGVtLWhvdmVyLWhlaWdodCwgMjJweCk7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1hdGUtdG9vbGJhci1idXR0b24tY29sb3IsIHZhcigtLWF0ZS10ZXh0LXNlY29uZGFyeSwgIzY0NzQ4YikpO1xuICAgICAgICBvdXRsaW5lOiBub25lO1xuICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1hdGUtc3ViLWJvcmRlci1yYWRpdXMsIDhweCk7XG4gICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICB9XG5cbiAgICAgIC5hdGUtdG9jLWl0ZW06Zm9jdXMtdmlzaWJsZSB7XG4gICAgICAgIG91dGxpbmU6IDJweCBzb2xpZCB2YXIoLS1hdGUtcHJpbWFyeSwgIzI1NjNlYik7XG4gICAgICAgIG91dGxpbmUtb2Zmc2V0OiAxcHg7XG4gICAgICB9XG5cbiAgICAgIC8qIExldmVsIEluZGVudGF0aW9ucyBpbiBUZXh0IG1vZGUgKi9cbiAgICAgIC5hdGUtdG9jLWl0ZW1bZGF0YS1sZXZlbD1cIjFcIl0ge1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IDhweDtcbiAgICAgIH1cbiAgICAgIC5hdGUtdG9jLWl0ZW1bZGF0YS1sZXZlbD1cIjJcIl0ge1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IDE2cHg7XG4gICAgICB9XG4gICAgICAuYXRlLXRvYy1pdGVtW2RhdGEtbGV2ZWw9XCIzXCJdIHtcbiAgICAgICAgcGFkZGluZy1sZWZ0OiAyNHB4O1xuICAgICAgfVxuICAgICAgLmF0ZS10b2MtaXRlbVtkYXRhLWxldmVsPVwiNFwiXSB7XG4gICAgICAgIHBhZGRpbmctbGVmdDogMzJweDtcbiAgICAgIH1cbiAgICAgIC5hdGUtdG9jLWl0ZW1bZGF0YS1sZXZlbD1cIjVcIl0ge1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IDQwcHg7XG4gICAgICB9XG4gICAgICAuYXRlLXRvYy1pdGVtW2RhdGEtbGV2ZWw9XCI2XCJdIHtcbiAgICAgICAgcGFkZGluZy1sZWZ0OiA0OHB4O1xuICAgICAgfVxuXG4gICAgICAvKiBJdGVtIGhvdmVyIG92ZXJsYXkgJiBhY3RpdmUgc3RhdGUgKEV4cGFuZGVkIC8gVGV4dCBtb2RlKSAqL1xuICAgICAgLmF0ZS10b2MtaXRlbTo6YmVmb3JlIHtcbiAgICAgICAgY29udGVudDogXCJcIjtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBpbnNldDogMDtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tYXRlLXByaW1hcnksICMyNTYzZWIpO1xuICAgICAgICBvcGFjaXR5OiAwO1xuICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnMgZWFzZTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYXRlLXN1Yi1ib3JkZXItcmFkaXVzLCA4cHgpO1xuICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICAgIH1cblxuICAgICAgLmF0ZS10b2MtaXRlbTpob3ZlciB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1hdGUtdG9vbGJhci1idXR0b24tYWN0aXZlLWNvbG9yLCB2YXIoLS1hdGUtcHJpbWFyeSwgIzI1NjNlYikpO1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1hdGUtdG9vbGJhci1idXR0b24taG92ZXItYmFja2dyb3VuZCwgdHJhbnNwYXJlbnQpO1xuICAgICAgfVxuXG4gICAgICAuYXRlLXRvYy1pdGVtOmhvdmVyOjpiZWZvcmUge1xuICAgICAgICBvcGFjaXR5OiAwLjE7XG4gICAgICB9XG5cbiAgICAgIC5hdGUtdG9jLWl0ZW0uYXRlLXRvYy1hY3RpdmUge1xuICAgICAgICBjb2xvcjogdmFyKC0tYXRlLXRvb2xiYXItYnV0dG9uLWFjdGl2ZS1jb2xvciwgdmFyKC0tYXRlLXByaW1hcnksICMyNTYzZWIpKTtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKFxuICAgICAgICAgIC0tYXRlLXRvb2xiYXItYnV0dG9uLWFjdGl2ZS1iYWNrZ3JvdW5kLFxuICAgICAgICAgIHZhcigtLWF0ZS1wcmltYXJ5LWxpZ2h0LCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tYXRlLXByaW1hcnksICMyNTYzZWIpLCB0cmFuc3BhcmVudCA5MCUpKVxuICAgICAgICApO1xuICAgICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgfVxuXG4gICAgICAvKiBIZWFkaW5nIFRleHQgc3R5bGluZyAqL1xuICAgICAgLmF0ZS10b2MtdGV4dCB7XG4gICAgICAgIGZvbnQtc2l6ZTogMC44cmVtO1xuICAgICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgZmxleDogMTtcbiAgICAgICAgbWluLXdpZHRoOiAwO1xuICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgICBtYXgtd2lkdGg6IDI1MHB4O1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCk7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiA0cHg7XG4gICAgICAgIG1hcmdpbi1yaWdodDogMDtcbiAgICAgICAgdHJhbnNpdGlvbjpcbiAgICAgICAgICBvcGFjaXR5IDAuMjVzIGN1YmljLWJlemllcigwLjI1LCAwLjQ2LCAwLjQ1LCAwLjk0KSxcbiAgICAgICAgICBtYXgtd2lkdGggMC4zcyBjdWJpYy1iZXppZXIoMC4yNSwgMC40NiwgMC40NSwgMC45NCksXG4gICAgICAgICAgdHJhbnNmb3JtIDAuMjVzIGN1YmljLWJlemllcigwLjI1LCAwLjQ2LCAwLjQ1LCAwLjk0KSxcbiAgICAgICAgICBtYXJnaW4gMC4yNXMgZWFzZTtcbiAgICAgIH1cblxuICAgICAgLyogU1ZHIFJlY3QgRGFzaCBzdHlsaW5nIChIaWRkZW4gaW4gVGV4dCBtb2RlKSAqL1xuICAgICAgLmF0ZS10b2MtZGFzaCB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgIGhlaWdodDogM3B4O1xuICAgICAgICBjb2xvcjogdmFyKC0tYXRlLXRvYy1kYXNoLWNvbG9yLCB2YXIoLS1hdGUtYm9yZGVyLCAjY2JkNWUxKSk7XG4gICAgICAgIGZsZXgtc2hyaW5rOiAwO1xuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgICAgICBvdmVyZmxvdzogdmlzaWJsZTtcbiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuM3MgY3ViaWMtYmV6aWVyKDAuMjUsIDAuNDYsIDAuNDUsIDAuOTQpO1xuICAgICAgfVxuXG4gICAgICAvKiAtLS0gQ09MTEFQU0VEIE5PVElPTiBNT0RFIChEYXNoZXMgb25seSwgd2hlbiBob3Zlci1leHBhbmQgaXMgYWN0aXZlICYgbm90IGhvdmVyZWQpIC0tLSAqL1xuICAgICAgLmF0ZS10b2MuYXRlLXRvYy1ob3Zlci1leHBhbmQ6bm90KC5hdGUtdG9jLWhvdmVyZWQpIC5hdGUtdG9jLWhlYWRlciB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICB9XG5cbiAgICAgIC5hdGUtdG9jLmF0ZS10b2MtaG92ZXItZXhwYW5kOm5vdCguYXRlLXRvYy1ob3ZlcmVkKSAuYXRlLXRvYy1kYXNoIHtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgfVxuXG4gICAgICAuYXRlLXRvYy5hdGUtdG9jLWhvdmVyLWV4cGFuZDpub3QoLmF0ZS10b2MtaG92ZXJlZCkgLmF0ZS10b2MtaXRlbSB7XG4gICAgICAgIGhlaWdodDogdmFyKC0tYXRlLXRvYy1pdGVtLWhlaWdodCwgMThweCk7XG4gICAgICAgIHBhZGRpbmctbGVmdDogMDtcbiAgICAgICAgcGFkZGluZy1yaWdodDogMDtcbiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgICB9XG5cbiAgICAgIC5hdGUtdG9jLmF0ZS10b2MtaG92ZXItZXhwYW5kOm5vdCguYXRlLXRvYy1ob3ZlcmVkKSAuYXRlLXRvYy1pdGVtOjpiZWZvcmUge1xuICAgICAgICBvcGFjaXR5OiAwO1xuICAgICAgfVxuXG4gICAgICAuYXRlLXRvYy5hdGUtdG9jLWhvdmVyLWV4cGFuZDpub3QoLmF0ZS10b2MtaG92ZXJlZCkgLmF0ZS10b2MtaXRlbTpob3ZlciAuYXRlLXRvYy1kYXNoLFxuICAgICAgLmF0ZS10b2MuYXRlLXRvYy1ob3Zlci1leHBhbmQ6bm90KC5hdGUtdG9jLWhvdmVyZWQpXG4gICAgICAgIC5hdGUtdG9jLWl0ZW0uYXRlLXRvYy1hY3RpdmVcbiAgICAgICAgLmF0ZS10b2MtZGFzaCB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1hdGUtcHJpbWFyeSwgIzI1NjNlYik7XG4gICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICB9XG5cbiAgICAgIC8qIERpcmVjdGlvbiAmIHRleHQgY29sbGFwc2UgZm9yIENvbGxhcHNlZCBSSUdIVCBwb3NpdGlvbiAqL1xuICAgICAgLmF0ZS10b2MuYXRlLXRvYy1ob3Zlci1leHBhbmQuYXRlLXRvYy1wb3NpdGlvbi1yaWdodDpub3QoLmF0ZS10b2MtaG92ZXJlZCkgLmF0ZS10b2MtaXRlbSB7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xuICAgICAgfVxuXG4gICAgICAuYXRlLXRvYy5hdGUtdG9jLWhvdmVyLWV4cGFuZC5hdGUtdG9jLXBvc2l0aW9uLXJpZ2h0Om5vdCguYXRlLXRvYy1ob3ZlcmVkKSAuYXRlLXRvYy10ZXh0IHtcbiAgICAgICAgb3BhY2l0eTogMDtcbiAgICAgICAgbWF4LXdpZHRoOiAwO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoNHB4KTtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAwO1xuICAgICAgfVxuXG4gICAgICAvKiBEaXJlY3Rpb24gJiB0ZXh0IGNvbGxhcHNlIGZvciBDb2xsYXBzZWQgTEVGVCBwb3NpdGlvbiAqL1xuICAgICAgLmF0ZS10b2MuYXRlLXRvYy1ob3Zlci1leHBhbmQ6bm90KC5hdGUtdG9jLXBvc2l0aW9uLXJpZ2h0KTpub3QoLmF0ZS10b2MtaG92ZXJlZClcbiAgICAgICAgLmF0ZS10b2MtaXRlbSxcbiAgICAgIC5hdGUtdG9jLmF0ZS10b2MtaG92ZXItZXhwYW5kLmF0ZS10b2MtcG9zaXRpb24tbGVmdDpub3QoLmF0ZS10b2MtaG92ZXJlZCkgLmF0ZS10b2MtaXRlbSB7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbiAgICAgIH1cblxuICAgICAgLmF0ZS10b2MuYXRlLXRvYy1ob3Zlci1leHBhbmQ6bm90KC5hdGUtdG9jLXBvc2l0aW9uLXJpZ2h0KTpub3QoLmF0ZS10b2MtaG92ZXJlZClcbiAgICAgICAgLmF0ZS10b2MtdGV4dCxcbiAgICAgIC5hdGUtdG9jLmF0ZS10b2MtaG92ZXItZXhwYW5kLmF0ZS10b2MtcG9zaXRpb24tbGVmdDpub3QoLmF0ZS10b2MtaG92ZXJlZCkgLmF0ZS10b2MtdGV4dCB7XG4gICAgICAgIG9wYWNpdHk6IDA7XG4gICAgICAgIG1heC13aWR0aDogMDtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC00cHgpO1xuICAgICAgICBtYXJnaW4tbGVmdDogMDtcbiAgICAgIH1cbiAgICBgLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBBdGVUYWJsZU9mQ29udGVudHNDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICAvLyBJbnB1dCBhY2NlcHRzIHJhdyBFZGl0b3IsIEF0ZUVkaXRvclJlZiwgb3IgSUQgb2YgcmVnaXN0ZXJlZCBlZGl0b3JcbiAgZWRpdG9yID0gaW5wdXQ8RWRpdG9yIHwgQXRlRWRpdG9yUmVmIHwgc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZD4obnVsbCk7XG5cbiAgLy8gT3B0aW9uYWwgY3VzdG9tIHRpdGxlIChpZiBub3QgcHJvdmlkZWQsIHVzZXMgaTE4biB0cmFuc2xhdGlvbilcbiAgdGl0bGUgPSBpbnB1dDxzdHJpbmcgfCBudWxsPihudWxsKTtcblxuICAvLyBXaGV0aGVyIHRvIHNob3cgdGhlIGhlYWRlciB0aXRsZVxuICBzaG93VGl0bGUgPSBpbnB1dDxib29sZWFuPih0cnVlKTtcblxuICAvLyBMYXlvdXQgbW9kZTogZmxvYXRpbmcgb24gZml4ZWQgcG9zaXRpb24gb3IgaW5saW5lIGluc2lkZSBwYXJlbnQgY29udGFpbmVyXG4gIGZsb2F0aW5nID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIC8vIEZsb2F0aW5nIHBvc2l0aW9uOiAncmlnaHQnIHwgJ2xlZnQnXG4gIHBvc2l0aW9uID0gaW5wdXQ8XCJsZWZ0XCIgfCBcInJpZ2h0XCI+KFwicmlnaHRcIik7XG5cbiAgLy8gVmlzdWFsIHZhcmlhbnQ6ICdjYXJkJyB8ICd0cmFuc3BhcmVudCcgfCAnbWluaW1hbCdcbiAgdmFyaWFudCA9IGlucHV0PEF0ZVRvY1ZhcmlhbnQ+KFwiY2FyZFwiKTtcblxuICAvLyBOb3Rpb24tc3R5bGUgaG92ZXIgZXhwYW5zaW9uIChjb2xsYXBzZXMgdGV4dCBpbnRvIGRhc2hlcyB1bnRpbCBob3ZlcmVkKVxuICBob3ZlckV4cGFuZCA9IGlucHV0PGJvb2xlYW4+KHRydWUpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgcmVnaXN0cnkgPSBpbmplY3QoQXRlRWRpdG9yUmVnaXN0cnkpO1xuICBwcml2YXRlIHJlYWRvbmx5IGkxOG4gPSBpbmplY3QoQXRlSTE4blNlcnZpY2UpO1xuXG4gIC8vIEhlbHBlciBtZXRob2QgZm9yIGV4YWN0IG5hdGl2ZSBTVkcgZGFzaCB3aWR0aCBwZXIgaGVhZGluZyBsZXZlbFxuICBkYXNoV2lkdGgobGV2ZWw6IG51bWJlcik6IG51bWJlciB7XG4gICAgc3dpdGNoIChsZXZlbCkge1xuICAgICAgY2FzZSAxOlxuICAgICAgICByZXR1cm4gMTY7XG4gICAgICBjYXNlIDI6XG4gICAgICAgIHJldHVybiAxMjtcbiAgICAgIGNhc2UgMzpcbiAgICAgICAgcmV0dXJuIDg7XG4gICAgICBjYXNlIDQ6XG4gICAgICAgIHJldHVybiA2O1xuICAgICAgY2FzZSA1OlxuICAgICAgICByZXR1cm4gNDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAzO1xuICAgIH1cbiAgfVxuXG4gIC8vIENvbXB1dGVkIGhlYWRlciB0aXRsZSB3aXRoIGZhbGxiYWNrIHRvIGkxOG5cbiAgcmVhZG9ubHkgaGVhZGVyVGl0bGUgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgY3VzdG9tID0gdGhpcy50aXRsZSgpO1xuICAgIGlmIChjdXN0b20gIT09IG51bGwgJiYgY3VzdG9tICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBjdXN0b207XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmkxOG4uZWRpdG9yKCkudGFibGVPZkNvbnRlbnRzO1xuICB9KTtcblxuICAvLyBSZXNvbHZlZCBlZGl0b3IgaW5zdGFuY2VcbiAgcmVhZG9ubHkgcmVzb2x2ZWRFZGl0b3IgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgdmFsID0gdGhpcy5lZGl0b3IoKTtcbiAgICBpZiAoIXZhbCkge1xuICAgICAgcmV0dXJuIHRoaXMucmVnaXN0cnkuYWN0aXZlRWRpdG9yKCk/LmVkaXRvciB8fCBudWxsO1xuICAgIH1cbiAgICBpZiAodmFsIGluc3RhbmNlb2YgQXRlRWRpdG9yUmVmKSB7XG4gICAgICByZXR1cm4gdmFsLmVkaXRvcjtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB2YWwgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlZ2lzdHJ5LmdldCh2YWwpPy5lZGl0b3IgfHwgbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIHZhbDtcbiAgfSk7XG5cbiAgLy8gVGFibGUgb2YgQ29udGVudHMgaXRlbXNcbiAgcmVhZG9ubHkgaXRlbXMgPSBzaWduYWw8QXRlVG9jSXRlbVtdPihbXSk7XG5cbiAgLy8gRGlzdGluY3QgbW91c2UgaG92ZXIgYW5kIGtleWJvYXJkIGZvY3VzIHN0YXRlIHRyYWNraW5nXG4gIGlzTW91c2VIb3ZlcmVkID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgaXNGb2N1c2VkID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgaXNFeHBhbmRlZCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuaXNNb3VzZUhvdmVyZWQoKSB8fCB0aGlzLmlzRm9jdXNlZCgpKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICAvLyBSZWFjdCBzdHJpY3RseSB0byBlZGl0b3IgaW5zdGFuY2UgY2hhbmdlcyB3aXRob3V0IHRyYWNraW5nIGludGVybmFsIHNpZ25hbCB1cGRhdGVzXG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IGVkaXRvciA9IHRoaXMucmVzb2x2ZWRFZGl0b3IoKTtcbiAgICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICAgIGlmIChlZGl0b3IpIHtcbiAgICAgICAgICB0aGlzLmJpbmRFZGl0b3JFdmVudHMoZWRpdG9yKTtcbiAgICAgICAgICB0aGlzLnVwZGF0ZUhlYWRpbmdzKGVkaXRvcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5pdGVtcy5zZXQoW10pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIGNvbnN0IGVkaXRvciA9IHRoaXMucmVzb2x2ZWRFZGl0b3IoKTtcbiAgICBpZiAoZWRpdG9yKSB7XG4gICAgICB0aGlzLnVuYmluZEVkaXRvckV2ZW50cyhlZGl0b3IpO1xuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoXCJ3aW5kb3c6c2Nyb2xsXCIsIFtdKVxuICBASG9zdExpc3RlbmVyKFwid2luZG93OnJlc2l6ZVwiLCBbXSlcbiAgb25TY3JvbGwoKSB7XG4gICAgdGhpcy5jaGVja0FjdGl2ZUhlYWRpbmcoKTtcbiAgfVxuXG4gIC8vIEhhbmRsZSBtb3VzZSBob3ZlciBzdGF0ZSBpbmRlcGVuZGVudGx5XG4gIHNldE1vdXNlSG92ZXIoaG92ZXJlZDogYm9vbGVhbikge1xuICAgIHRoaXMuaXNNb3VzZUhvdmVyZWQuc2V0KGhvdmVyZWQpO1xuICB9XG5cbiAgLy8gSGFuZGxlIGtleWJvYXJkIGZvY3VzIHN0YXRlIGluZGVwZW5kZW50bHlcbiAgc2V0Rm9jdXNlZChmb2N1c2VkOiBib29sZWFuKSB7XG4gICAgdGhpcy5pc0ZvY3VzZWQuc2V0KGZvY3VzZWQpO1xuICB9XG5cbiAgLy8gTmF2aWdhdGUgdG8gaGVhZGluZyBvbiBjbGlja1xuICBzY3JvbGxUb0hlYWRpbmcoaXRlbTogQXRlVG9jSXRlbSwgZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgY29uc3QgZWRpdG9yID0gdGhpcy5yZXNvbHZlZEVkaXRvcigpO1xuICAgIGlmICghZWRpdG9yIHx8ICFlZGl0b3Iudmlldykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICAvLyAxLiBQb3NpdGlvbiBjdXJzb3IgaW5zaWRlIHRoZSBoZWFkaW5nIHRleHQgKGl0ZW0ucG9zICsgMSBwb2ludHMgdG8gaW5saW5lIHRleHQpXG4gICAgICBjb25zdCB0YXJnZXRQb3MgPSBNYXRoLm1pbihpdGVtLnBvcyArIDEsIGVkaXRvci5zdGF0ZS5kb2MuY29udGVudC5zaXplKTtcbiAgICAgIGVkaXRvci5jb21tYW5kcy5zZXRUZXh0U2VsZWN0aW9uKHRhcmdldFBvcyk7XG4gICAgICBlZGl0b3IuY29tbWFuZHMuZm9jdXMoKTtcbiAgICB9IGNhdGNoIChfZSkge1xuICAgICAgLy8gU2FmZS1ndWFyZCBhZ2FpbnN0IHBvc2l0aW9uIHNlbGVjdGlvbiBlcnJvcnNcbiAgICB9XG5cbiAgICAvLyAyLiBTbW9vdGhseSBzY3JvbGwgRE9NIG5vZGUgaW50byB2aWV3XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBkb21Ob2RlID0gZWRpdG9yLnZpZXcubm9kZURPTShpdGVtLnBvcykgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGlmIChkb21Ob2RlKSB7XG4gICAgICAgICAgZG9tTm9kZS5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiBcInNtb290aFwiLCBibG9jazogXCJzdGFydFwiIH0pO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChfZSkge1xuICAgICAgICAvLyBTYWZlLWd1YXJkXG4gICAgICB9XG4gICAgfSwgMTApO1xuICB9XG5cbiAgcHJpdmF0ZSBiaW5kRWRpdG9yRXZlbnRzKGVkaXRvcjogRWRpdG9yKSB7XG4gICAgdGhpcy51bmJpbmRFZGl0b3JFdmVudHMoZWRpdG9yKTtcbiAgICBlZGl0b3Iub24oXCJ1cGRhdGVcIiwgdGhpcy5vbkVkaXRvclVwZGF0ZSk7XG4gICAgZWRpdG9yLm9uKFwic2VsZWN0aW9uVXBkYXRlXCIsIHRoaXMub25FZGl0b3JVcGRhdGUpO1xuICB9XG5cbiAgcHJpdmF0ZSB1bmJpbmRFZGl0b3JFdmVudHMoZWRpdG9yOiBFZGl0b3IpIHtcbiAgICBlZGl0b3Iub2ZmKFwidXBkYXRlXCIsIHRoaXMub25FZGl0b3JVcGRhdGUpO1xuICAgIGVkaXRvci5vZmYoXCJzZWxlY3Rpb25VcGRhdGVcIiwgdGhpcy5vbkVkaXRvclVwZGF0ZSk7XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IG9uRWRpdG9yVXBkYXRlID0gKCkgPT4ge1xuICAgIGNvbnN0IGVkaXRvciA9IHRoaXMucmVzb2x2ZWRFZGl0b3IoKTtcbiAgICBpZiAoZWRpdG9yKSB7XG4gICAgICB0aGlzLnVwZGF0ZUhlYWRpbmdzKGVkaXRvcik7XG4gICAgfVxuICB9O1xuXG4gIHByaXZhdGUgdXBkYXRlSGVhZGluZ3MoZWRpdG9yOiBFZGl0b3IpIHtcbiAgICBjb25zdCBuZXh0SXRlbXM6IEF0ZVRvY0l0ZW1bXSA9IFtdO1xuXG4gICAgdHJ5IHtcbiAgICAgIGVkaXRvci5zdGF0ZS5kb2MuZGVzY2VuZGFudHMoKG5vZGUsIHBvcykgPT4ge1xuICAgICAgICBpZiAobm9kZS50eXBlLm5hbWUgPT09IFwiaGVhZGluZ1wiKSB7XG4gICAgICAgICAgY29uc3QgdGV4dCA9IG5vZGUudGV4dENvbnRlbnQudHJpbSgpO1xuICAgICAgICAgIGNvbnN0IGxldmVsID0gbm9kZS5hdHRyc1tcImxldmVsXCJdIHx8IDE7XG5cbiAgICAgICAgICBpZiAodGV4dCkge1xuICAgICAgICAgICAgbmV4dEl0ZW1zLnB1c2goe1xuICAgICAgICAgICAgICB0ZXh0LFxuICAgICAgICAgICAgICBsZXZlbCxcbiAgICAgICAgICAgICAgcG9zLFxuICAgICAgICAgICAgICBpZDogYGhlYWRpbmctJHtwb3N9YCxcbiAgICAgICAgICAgICAgYWN0aXZlOiBmYWxzZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoX2UpIHtcbiAgICAgIC8vIFNhZmUgZ3VhcmQgYWdhaW5zdCBkb2N1bWVudCBhY2Nlc3MgaXNzdWVzXG4gICAgfVxuXG4gICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgIHRoaXMuaXRlbXMuc2V0KG5leHRJdGVtcyk7XG4gICAgICB0aGlzLmNoZWNrQWN0aXZlSGVhZGluZygpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGVja0FjdGl2ZUhlYWRpbmcoKSB7XG4gICAgY29uc3QgZWRpdG9yID0gdGhpcy5yZXNvbHZlZEVkaXRvcigpO1xuICAgIGlmICghZWRpdG9yIHx8ICFlZGl0b3Iudmlldykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50SXRlbXMgPSB0aGlzLml0ZW1zKCk7XG4gICAgICBpZiAoY3VycmVudEl0ZW1zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGhlYWRpbmdzV2l0aERvbSA9IGN1cnJlbnRJdGVtc1xuICAgICAgICAubWFwKGl0ZW0gPT4ge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBkb20gPSBlZGl0b3Iudmlldy5ub2RlRE9NKGl0ZW0ucG9zKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgICAgIHJldHVybiB7IGl0ZW0sIGRvbSB9O1xuICAgICAgICAgIH0gY2F0Y2ggKF9lKSB7XG4gICAgICAgICAgICByZXR1cm4geyBpdGVtLCBkb206IG51bGwgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5maWx0ZXIoKGVudHJ5KTogZW50cnkgaXMgeyBpdGVtOiBBdGVUb2NJdGVtOyBkb206IEhUTUxFbGVtZW50IH0gPT4gZW50cnkuZG9tICE9PSBudWxsKTtcblxuICAgICAgaWYgKGhlYWRpbmdzV2l0aERvbS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3aW5kb3dIZWlnaHQgPSB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiID8gd2luZG93LmlubmVySGVpZ2h0IDogODAwO1xuICAgICAgbGV0IGFjdGl2ZUl0ZW06IEF0ZVRvY0l0ZW0gfCBudWxsID0gbnVsbDtcblxuICAgICAgZm9yIChsZXQgaSA9IGhlYWRpbmdzV2l0aERvbS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICBjb25zdCB7IGl0ZW0sIGRvbSB9ID0gaGVhZGluZ3NXaXRoRG9tW2ldO1xuICAgICAgICBjb25zdCByZWN0ID0gZG9tLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICAgIGlmIChyZWN0LnRvcCA8PSB3aW5kb3dIZWlnaHQgKiAwLjM1KSB7XG4gICAgICAgICAgYWN0aXZlSXRlbSA9IGl0ZW07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCFhY3RpdmVJdGVtICYmIGhlYWRpbmdzV2l0aERvbS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGFjdGl2ZUl0ZW0gPSBoZWFkaW5nc1dpdGhEb21bMF0uaXRlbTtcbiAgICAgIH1cblxuICAgICAgaWYgKGFjdGl2ZUl0ZW0pIHtcbiAgICAgICAgY29uc3QgdXBkYXRlZCA9IGN1cnJlbnRJdGVtcy5tYXAoaXRlbSA9PiAoe1xuICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgYWN0aXZlOiBpdGVtLmlkID09PSBhY3RpdmVJdGVtIS5pZCxcbiAgICAgICAgfSkpO1xuXG4gICAgICAgIGNvbnN0IGlzRGlmZmVyZW50ID0gdXBkYXRlZC5zb21lKChpdGVtLCBpZHgpID0+IGl0ZW0uYWN0aXZlICE9PSBjdXJyZW50SXRlbXNbaWR4XS5hY3RpdmUpO1xuICAgICAgICBpZiAoaXNEaWZmZXJlbnQpIHtcbiAgICAgICAgICB0aGlzLml0ZW1zLnNldCh1cGRhdGVkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG4iXX0=
@@ -132,7 +132,7 @@ export const AteBlockControlsExtension = Extension.create({
132
132
  lastMouseX = event.clientX;
133
133
  lastMouseY = event.clientY;
134
134
  if (rafId === null) {
135
- rafId = window.requestAnimationFrame(() => {
135
+ rafId = requestAnimationFrame(() => {
136
136
  update(view);
137
137
  rafId = null;
138
138
  });
@@ -141,7 +141,7 @@ export const AteBlockControlsExtension = Extension.create({
141
141
  },
142
142
  mouseleave: () => {
143
143
  if (rafId) {
144
- window.cancelAnimationFrame(rafId);
144
+ cancelAnimationFrame(rafId);
145
145
  rafId = null;
146
146
  }
147
147
  reset();
@@ -153,4 +153,4 @@ export const AteBlockControlsExtension = Extension.create({
153
153
  ];
154
154
  },
155
155
  });
156
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXRlLWJsb2NrLWNvbnRyb2xzLmV4dGVuc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItdGlwdGFwLWVkaXRvci9zcmMvbGliL2V4dGVuc2lvbnMvYXRlLWJsb2NrLWNvbnRyb2xzLmV4dGVuc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFRckQseUNBQXlDO0FBQ3pDLFNBQVMsYUFBYSxDQUFDLElBQWdCLEVBQUUsR0FBVztJQUNsRCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzlCLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNULE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUNELElBQUksR0FBRyxZQUFZLFdBQVcsRUFBRSxDQUFDO1FBQy9CLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUNELE9BQU8sR0FBRyxDQUFDLGFBQWEsQ0FBQztBQUMzQixDQUFDO0FBRUQsdUNBQXVDO0FBQ3ZDLFNBQVMsbUJBQW1CLENBQUMsSUFBZ0IsRUFBRSxDQUFTO0lBQ3RELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFrQixDQUFDO0lBQzFDLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBa0IsQ0FBQztJQUVqRSxrRkFBa0Y7SUFDbEYsT0FBTyxDQUNMLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDcEIsSUFBSSxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDcEQsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBQ0QsTUFBTSxJ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TUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO29DQUNiLEtBQUssR0FBRyxJQUFJLENBQUM7Z0NBQ2YsQ0FBQyxDQUFDLENBQUM7NEJBQ0wsQ0FBQzs0QkFDRCxPQUFPLEtBQUssQ0FBQzt3QkFDZixDQUFDO3dCQUNELFVBQVUsRUFBRSxHQUFHLEVBQUU7NEJBQ2YsSUFBSSxLQUFLLEVBQUUsQ0FBQztnQ0FDVixNQUFNLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUM7Z0NBQ25DLEtBQUssR0FBRyxJQUFJLENBQUM7NEJBQ2YsQ0FBQzs0QkFDRCxLQUFLLEVBQUUsQ0FBQzs0QkFDUixPQUFPLEtBQUssQ0FBQzt3QkFDZixDQUFDO3FCQUNGO2lCQUNGO2FBQ0YsQ0FBQztTQUNILENBQUM7SUFDSixDQUFDO0NBQ0YsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRXh0ZW5zaW9uIH0gZnJvbSBcIkB0aXB0YXAvY29yZVwiO1xuaW1wb3J0IHsgUGx1Z2luLCBQbHVnaW5LZXkgfSBmcm9tIFwiQHRpcHRhcC9wbS9zdGF0ZVwiO1xuaW1wb3J0IHsgRWRpdG9yVmlldyB9IGZyb20gXCJAdGlwdGFwL3BtL3ZpZXdcIjtcbmltcG9ydCB7IE5vZGUgfSBmcm9tIFwiQHRpcHRhcC9wbS9tb2RlbFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEF0ZUJsb2NrQ29udHJvbHNPcHRpb25zIHtcbiAgb25Ib3Zlcj86IChkYXRhOiB7IG5vZGU6IE5vZGU7IGVsZW1lbnQ6IEhUTUxFbGVtZW50OyBwb3M6IG51bWJlciB9IHwgbnVsbCkgPT4gdm9pZDtcbn1cblxuLy8gSGVscGVyIHRvIGdldCB0aGUgRE9NIGVsZW1lbnQgcHJvcGVybHlcbmZ1bmN0aW9uIGdldERvbUVsZW1lbnQodmlldzogRWRpdG9yVmlldywgcG9zOiBudW1iZXIpOiBIVE1MRWxlbWVudCB8IG51bGwge1xuICBjb25zdCBkb20gPSB2aWV3Lm5vZGVET00ocG9zKTtcbiAgaWYgKCFkb20pIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBpZiAoZG9tIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcbiAgICByZXR1cm4gZG9tO1xuICB9XG4gIHJldHVybiBkb20ucGFyZW50RWxlbWVudDtcbn1cblxuLy8gVkVSVElDQUwgU0NBTiAoRm9yIHRoZSBlbXB0eSBtYXJnaW4pXG5mdW5jdGlvbiBmaW5kQmxvY2tFbGVtZW50QXRZKHZpZXc6IEVkaXRvclZpZXcsIHk6IG51bWJlcik6IEhUTUxFbGVtZW50IHwgbnVsbCB7XG4gIGNvbnN0IGVkaXRvckRvbSA9IHZpZXcuZG9tIGFzIEhUTUxFbGVtZW50O1xuICBjb25zdCBjaGlsZHJlbiA9IEFycmF5LmZyb20oZWRpdG9yRG9tLmNoaWxkcmVuKSBhcyBIVE1MRWxlbWVudFtdO1xuXG4gIC8vIFdlIGxvb2sgZm9yIHRoZSBkaXJlY3QgY2hpbGQgb2YgdGhlIGVkaXRvciAoTGV2ZWwgMSkgdGhhdCBpbnRlcmNlcHRzIHRoZSBZIGxpbmVcbiAgcmV0dXJuIChcbiAgICBjaGlsZHJlbi5maW5kKGNoaWxkID0+IHtcbiAgICAgIGlmIChnZXRDb21wdXRlZFN0eWxlKGNoaWxkKS5wb3NpdGlvbiA9PT0gXCJhYnNvbHV0ZVwiKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlY3QgPSBjaGlsZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIC8vIFRvbMOpcmFuY2UgZGUgNXB4XG4gICAgICByZXR1cm4geSA+PSByZWN0LnRvcCAtIDUgJiYgeSA8PSByZWN0LmJvdHRvbSArIDU7XG4gICAgfSkgfHwgbnVsbFxuICApO1xufVxuXG5mdW5jdGlvbiByZXNvbHZlQmxvY2tEYXRhKFxuICB2aWV3OiBFZGl0b3JWaWV3LFxuICB5OiBudW1iZXIsXG4gIHRhcmdldEVsZW1lbnQ6IEhUTUxFbGVtZW50IHwgbnVsbFxuKTogeyBub2RlOiBOb2RlOyBlbGVtZW50OiBIVE1MRWxlbWVudDsgcG9zOiBudW1iZXIgfSB8IG51bGwge1xuICBsZXQgYmxvY2tFbDogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcblxuICAvLyAxLiBGQVNUIFBBVEggOiBEaXJlY3QgdGFyZ2V0XG4gIC8vIExFVkVMIDE6IFdlIGxvb2sgZm9yIHRoZSBmaXJzdCBwYXJlbnQgZWxlbWVudCB0aGF0IGlzIGEgZGlyZWN0IGNoaWxkIG9mIHRoZSBlZGl0b3JcbiAgaWYgKHRhcmdldEVsZW1lbnQgJiYgIXRhcmdldEVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKFwiUHJvc2VNaXJyb3JcIikpIHtcbiAgICBibG9ja0VsID0gdGFyZ2V0RWxlbWVudC5jbG9zZXN0KFwiLlByb3NlTWlycm9yID4gKlwiKSBhcyBIVE1MRWxlbWVudDtcbiAgfVxuXG4gIC8vIDIuIEdVVFRFUiBQQVRIIDogVmVydGljYWwgc2NhblxuICBpZiAoIWJsb2NrRWwpIHtcbiAgICBibG9ja0VsID0gZmluZEJsb2NrRWxlbWVudEF0WSh2aWV3LCB5KTtcbiAgfVxuXG4gIGlmICghYmxvY2tFbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gMy4gUFJPU0VNSVJST1IgTk9ERSBSRVNPTFVUSU9OXG4gIHRyeSB7XG4gICAgLy8gV2UgYXNrIGZvciB0aGUgcG9zaXRpb24gYXQgdGhlIGJlZ2lubmluZyBvZiB0aGlzIHJvb3QgYmxvY2tcbiAgICBjb25zdCBwb3MgPSB2aWV3LnBvc0F0RE9NKGJsb2NrRWwsIDApO1xuICAgIGNvbnN0ICRwb3MgPSB2aWV3LnN0YXRlLmRvYy5yZXNvbHZlKHBvcyk7XG5cbiAgICAvLyBDQVNFIEEgOiBTVEFOREFSRCBCTE9DS1MgKEgxLCBQLCBMaXN0cywgQmxvY2txdW90ZXMuLi4pXG4gICAgLy8gV2UgbWFrZSBzdXJlIHRvIHRha2UgdGhlIG5vZGUgb2YgZGVwdGggMSAoRGlyZWN0IGNoaWxkIG9mIHRoZSBEb2MpXG4gICAgaWYgKCRwb3MuZGVwdGggPj0gMSkge1xuICAgICAgY29uc3Qgcm9vdE5vZGUgPSAkcG9zLm5vZGUoMSk7XG4gICAgICBjb25zdCByb290UG9zID0gJHBvcy5iZWZvcmUoMSk7XG4gICAgICBjb25zdCByb290RWxlbWVudCA9IGdldERvbUVsZW1lbnQodmlldywgcm9vdFBvcyk7XG5cbiAgICAgIC8vIFPDqWN1cml0w6kgOiBvbiB2w6lyaWZpZSBxdWUgbCfDqWzDqW1lbnQgRE9NIGNvcnJlc3BvbmQgYmllblxuICAgICAgaWYgKHJvb3ROb2RlICYmIChyb290RWxlbWVudCB8fCBibG9ja0VsKSkge1xuICAgICAgICByZXR1cm4geyBub2RlOiByb290Tm9kZSwgZWxlbWVudDogcm9vdEVsZW1lbnQgfHwgYmxvY2tFbCwgcG9zOiByb290UG9zIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ0FTRSBCIDogSU1BR0VTIC8gQVRPTVMgKERlcHRoIDApXG4gICAgLy8gU29tZXRpbWVzIGEgcm9vdCBpbWFnZSBpcyBzZWVuIGFzIERlcHRoIDAgYnkgcmVzb2x2ZSgpXG4gICAgLy8gV2UgbG9vayBhdCB0aGUgbm9kZSByaWdodCBhZnRlciB0aGUgcG9zaXRpb25cbiAgICBpZiAoJHBvcy5kZXB0aCA9PT0gMCkge1xuICAgICAgY29uc3Qgbm9kZUFmdGVyID0gJHBvcy5ub2RlQWZ0ZXI7XG4gICAgICBpZiAobm9kZUFmdGVyICYmIChub2RlQWZ0ZXIuaXNCbG9jayB8fCBub2RlQWZ0ZXIuaXNBdG9tKSkge1xuICAgICAgICByZXR1cm4geyBub2RlOiBub2RlQWZ0ZXIsIGVsZW1lbnQ6IGJsb2NrRWwsIHBvczogcG9zIH07XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIChfZSkge1xuICAgIC8vIGNvbnNvbGUud2FybihfZSk7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZXhwb3J0IGNvbnN0IEF0ZUJsb2NrQ29udHJvbHNFeHRlbnNpb24gPSBFeHRlbnNpb24uY3JlYXRlPEF0ZUJsb2NrQ29udHJvbHNPcHRpb25zPih7XG4gIG5hbWU6IFwiYXRlQmxvY2tDb250cm9sc1wiLFxuXG4gIGFkZE9wdGlvbnMoKSB7XG4gICAgcmV0dXJuIHsgb25Ib3ZlcjogdW5kZWZpbmVkIH07XG4gIH0sXG5cbiAgYWRkUHJvc2VNaXJyb3JQbHVnaW5zKCkge1xuICAgIGxldCBsYXN0SG92ZXJlZEVsZW1lbnQ6IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gICAgbGV0IGxhc3RIb3ZlcmVkUG9zOiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgICBsZXQgcmFmSWQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICAgIGxldCBsYXN0TW91c2VYID0gMDtcbiAgICBsZXQgbGFzdE1vdXNlWSA9IDA7XG5cbiAgICBjb25zdCB1cGRhdGUgPSAodmlldzogRWRpdG9yVmlldykgPT4ge1xuICAgICAgaWYgKCF0aGlzLmVkaXRvci5pc0VkaXRhYmxlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZWRpdG9yUmVjdCA9IHZpZXcuZG9tLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgY29uc3QgZ3V0dGVyV2lkdGggPSA4MDtcblxuICAgICAgLy8gQ2hlY2sgTGltaXRlcyAoTWFyZ2UgR2F1Y2hlICsgRWRpdGV1cilcbiAgICAgIGlmIChcbiAgICAgICAgbGFzdE1vdXNlWSA8IGVkaXRvclJlY3QudG9wIHx8XG4gICAgICAgIGxhc3RNb3VzZVkgPiBlZGl0b3JSZWN0LmJvdHRvbSB8fFxuICAgICAgICBsYXN0TW91c2VYID4gZWRpdG9yUmVjdC5yaWdodCB8fFxuICAgICAgICBsYXN0TW91c2VYIDwgZWRpdG9yUmVjdC5sZWZ0IC0gZ3V0dGVyV2lkdGhcbiAgICAgICkge1xuICAgICAgICBpZiAobGFzdEhvdmVyZWRFbGVtZW50KSB7XG4gICAgICAgICAgcmVzZXQoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIFNUSUNLWSBBTlRJLUZMSUNLRVJcbiAgICAgIC8vIE9uIGdhcmRlIGxlIGJsb2MgdGFudCBxdSdvbiBlc3QgZGFucyBzYSBoYXV0ZXVyXG4gICAgICBpZiAobGFzdEhvdmVyZWRFbGVtZW50ICYmIGxhc3RIb3ZlcmVkRWxlbWVudC5pc0Nvbm5lY3RlZCkge1xuICAgICAgICBjb25zdCByZWN0ID0gbGFzdEhvdmVyZWRFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBpZiAobGFzdE1vdXNlWSA+PSByZWN0LnRvcCAmJiBsYXN0TW91c2VZIDw9IHJlY3QuYm90dG9tKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRhcmdldCA9IGRvY3VtZW50LmVsZW1lbnRGcm9tUG9pbnQobGFzdE1vdXNlWCwgbGFzdE1vdXNlWSkgYXMgSFRNTEVsZW1lbnQ7XG5cbiAgICAgIGNvbnN0IGRhdGEgPSByZXNvbHZlQmxvY2tEYXRhKHZpZXcsIGxhc3RNb3VzZVksIHRhcmdldCk7XG5cbiAgICAgIGlmIChkYXRhICYmIChkYXRhLmVsZW1lbnQgIT09IGxhc3RIb3ZlcmVkRWxlbWVudCB8fCBkYXRhLnBvcyAhPT0gbGFzdEhvdmVyZWRQb3MpKSB7XG4gICAgICAgIGxhc3RIb3ZlcmVkRWxlbWVudCA9IGRhdGEuZWxlbWVudDtcbiAgICAgICAgbGFzdEhvdmVyZWRQb3MgPSBkYXRhLnBvcztcbiAgICAgICAgdGhpcy5vcHRpb25zLm9uSG92ZXI/LihkYXRhKTtcbiAgICAgIH0gZWxzZSBpZiAoIWRhdGEpIHtcbiAgICAgICAgaWYgKCFsYXN0SG92ZXJlZEVsZW1lbnQgfHwgIWxhc3RIb3ZlcmVkRWxlbWVudC5pc0Nvbm5lY3RlZCkge1xuICAgICAgICAgIHJlc2V0KCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgcmVzZXQgPSAoKSA9PiB7XG4gICAgICB0aGlzLm9wdGlvbnMub25Ib3Zlcj8uKG51bGwpO1xuICAgICAgbGFzdEhvdmVyZWRFbGVtZW50ID0gbnVsbDtcbiAgICAgIGxhc3RIb3ZlcmVkUG9zID0gbnVsbDtcbiAgICB9O1xuXG4gICAgcmV0dXJuIFtcbiAgICAgIG5ldyBQbHVnaW4oe1xuICAgICAgICBrZXk6IG5ldyBQbHVnaW5LZXkoXCJhdGVCbG9ja0NvbnRyb2xzXCIpLFxuICAgICAgICBwcm9wczoge1xuICAgICAgICAgIGhhbmRsZURPTUV2ZW50czoge1xuICAgICAgICAgICAgbW91c2Vtb3ZlOiAodmlldzogRWRpdG9yVmlldywgZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgbGFzdE1vdXNlWCA9IGV2ZW50LmNsaWVudFg7XG4gICAgICAgICAgICAgIGxhc3RNb3VzZVkgPSBldmVudC5jbGllbnRZO1xuXG4gICAgICAgICAgICAgIGlmIChyYWZJZCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJhZklkID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICB1cGRhdGUodmlldyk7XG4gICAgICAgICAgICAgICAgICByYWZJZCA9IG51bGw7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG1vdXNlbGVhdmU6ICgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHJhZklkKSB7XG4gICAgICAgICAgICAgICAgd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHJhZklkKTtcbiAgICAgICAgICAgICAgICByYWZJZCA9IG51bGw7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmVzZXQoKTtcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSksXG4gICAgXTtcbiAgfSxcbn0pO1xuIl19
156
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXRlLWJsb2NrLWNvbnRyb2xzLmV4dGVuc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItdGlwdGFwLWVkaXRvci9zcmMvbGliL2V4dGVuc2lvbnMvYXRlLWJsb2NrLWNvbnRyb2xzLmV4dGVuc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFRckQseUNBQXlDO0FBQ3pDLFNBQVMsYUFBYSxDQUFDLElBQWdCLEVBQUUsR0FBVztJQUNsRCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzlCLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNULE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUNELElBQUksR0FBRyxZQUFZLFdBQVcsRUFBRSxDQUFDO1FBQy9CLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUNELE9BQU8sR0FBRyxDQUFDLGFBQWEsQ0FBQztBQUMzQixDQUFDO0FBRUQsdUNBQXVDO0FBQ3ZDLFNBQVMsbUJBQW1CLENBQUMsSUFBZ0IsRUFBRSxDQUFTO0lBQ3RELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFrQixDQUFDO0lBQzFDLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBa0IsQ0FBQztJQUVqRSxrRkFBa0Y7SUFDbEYsT0FBTyxDQUNMLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDcEIsSUFBSSxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDcEQsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBQ0QsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDM0MsbUJBQW1CO1FBQ25CLE9BQU8sQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNuRCxDQUFDLENBQUMsSUFBSSxJQUFJLENBQ1gsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLGdCQUFnQixDQUN2QixJQUFnQixFQUNoQixDQUFTLEVBQ1QsYUFBaUM7SUFFakMsSUFBSSxPQUFPLEdBQXVCLElBQUksQ0FBQztJQUV2QywrQkFBK0I7SUFDL0IscUZBQXFGO0lBQ3JGLElBQUksYUFBYSxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQztRQUN0RSxPQUFPLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBZ0IsQ0FBQztJQUNyRSxDQUFDO0lBRUQsaUNBQWlDO0lBQ2pDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNiLE9BQU8sR0FBRyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVELElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNiLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELGlDQUFpQztJQUNqQyxJQUFJLENBQUM7UUFDSCw4REFBOEQ7UUFDOUQsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDdEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRXpDLDBEQUEwRDtRQUMxRCxxRUFBcUU7UUFDckUsSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3BCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDOUIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMvQixNQUFNLFdBQVcsR0FBRyxhQUFhLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBRWpELDBEQUEwRDtZQUMxRCxJQUFJLFFBQVEsSUFBSSxDQUFDLFdBQVcsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDO2dCQUN6QyxPQUFPLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsV0FBVyxJQUFJLE9BQU8sRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLENBQUM7WUFDM0UsQ0FBQztRQUNILENBQUM7UUFFRCxvQ0FBb0M7UUFDcEMseURBQXlEO1FBQ3pELCtDQUErQztRQUMvQyxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDckIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztZQUNqQyxJQUFJLFNBQVMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLElBQUksU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQ3pELE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ3pELENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7UUFDWixvQkFBb0I7SUFDdEIsQ0FBQztJQUVELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLHlCQUF5QixHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQTBCO0lBQ2pGLElBQUksRUFBRSxrQkFBa0I7SUFFeEIsVUFBVTtRQUNSLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUVELHFCQUFxQjtRQUNuQixJQUFJLGtCQUFrQixHQUF1QixJQUFJLENBQUM7UUFDbEQsSUFBSSxjQUFjLEdBQWtCLElBQUksQ0FBQztRQUN6QyxJQUFJLEtBQUssR0FBa0IsSUFBSSxDQUFDO1FBQ2hDLElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQztRQUNuQixJQUFJLFVBQVUsR0FBRyxDQUFDLENBQUM7UUFFbkIsTUFBTSxNQUFNLEdBQUcsQ0FBQyxJQUFnQixFQUFFLEVBQUU7WUFDbEMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQzVCLE9BQU87WUFDVCxDQUFDO1lBRUQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1lBQ3BELE1BQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQztZQUV2Qix5Q0FBeUM7WUFDekMsSUFDRSxVQUFVLEdBQUcsVUFBVSxDQUFDLEdBQUc7Z0JBQzNCLFVBQVUsR0FBRyxVQUFVLENBQUMsTUFBTTtnQkFDOUIsVUFBVSxHQUFHLFVBQVUsQ0FBQyxLQUFLO2dCQUM3QixVQUFVLEdBQUcsVUFBVSxDQUFDLElBQUksR0FBRyxXQUFXLEVBQzFDLENBQUM7Z0JBQ0QsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO29CQUN2QixLQUFLLEVBQUUsQ0FBQztnQkFDVixDQUFDO2dCQUNELE9BQU87WUFDVCxDQUFDO1lBRUQsc0JBQXNCO1lBQ3RCLGtEQUFrRDtZQUNsRCxJQUFJLGtCQUFrQixJQUFJLGtCQUFrQixDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUN6RCxNQUFNLElBQUksR0FBRyxrQkFBa0IsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO2dCQUN4RCxJQUFJLFVBQVUsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLFVBQVUsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7b0JBQ3hELE9BQU87Z0JBQ1QsQ0FBQztZQUNILENBQUM7WUFFRCxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBZ0IsQ0FBQztZQUVoRixNQUFNLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBRXhELElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sS0FBSyxrQkFBa0IsSUFBSSxJQUFJLENBQUMsR0FBRyxLQUFLLGNBQWMsQ0FBQyxFQUFFLENBQUM7Z0JBQ2pGLGtCQUFrQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7Z0JBQ2xDLGNBQWMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO2dCQUMxQixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQy9CLENBQUM7aUJBQU0sSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNqQixJQUFJLENBQUMsa0JBQWtCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQztvQkFDM0QsS0FBSyxFQUFFLENBQUM7Z0JBQ1YsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDLENBQUM7UUFFRixNQUFNLEtBQUssR0FBRyxHQUFHLEVBQUU7WUFDakIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM3QixrQkFBa0IsR0FBRyxJQUFJLENBQUM7WUFDMUIsY0FBYyxHQUFHLElBQUksQ0FBQztRQUN4QixDQUFDLENBQUM7UUFFRixPQUFPO1lBQ0wsSUFBSSxNQUFNLENBQUM7Z0JBQ1QsR0FBRyxFQUFFLElBQUksU0FBUyxDQUFDLGtCQUFrQixDQUFDO2dCQUN0QyxLQUFLLEVBQUU7b0JBQ0wsZUFBZSxFQUFFO3dCQUNmLFNBQVMsRUFBRSxDQUFDLElBQWdCLEVBQUUsS0FBaUIsRUFBRSxFQUFFOzRCQUNqRCxVQUFVLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQzs0QkFDM0IsVUFBVSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7NEJBRTNCLElBQUksS0FBSyxLQUFLLElBQUksRUFBRSxDQUFDO2dDQUNuQixLQUFLLEdBQUcscUJBQXFCLENBQUMsR0FBRyxFQUFFO29DQUNqQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7b0NBQ2IsS0FBSyxHQUFHLElBQUksQ0FBQztnQ0FDZixDQUFDLENBQUMsQ0FBQzs0QkFDTCxDQUFDOzRCQUNELE9BQU8sS0FBSyxDQUFDO3dCQUNmLENBQUM7d0JBQ0QsVUFBVSxFQUFFLEdBQUcsRUFBRTs0QkFDZixJQUFJLEtBQUssRUFBRSxDQUFDO2dDQUNWLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxDQUFDO2dDQUM1QixLQUFLLEdBQUcsSUFBSSxDQUFDOzRCQUNmLENBQUM7NEJBQ0QsS0FBSyxFQUFFLENBQUM7NEJBQ1IsT0FBTyxLQUFLLENBQUM7d0JBQ2YsQ0FBQztxQkFDRjtpQkFDRjthQUNGLENBQUM7U0FDSCxDQUFDO0lBQ0osQ0FBQztDQUNGLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEV4dGVuc2lvbiB9IGZyb20gXCJAdGlwdGFwL2NvcmVcIjtcbmltcG9ydCB7IFBsdWdpbiwgUGx1Z2luS2V5IH0gZnJvbSBcIkB0aXB0YXAvcG0vc3RhdGVcIjtcbmltcG9ydCB7IEVkaXRvclZpZXcgfSBmcm9tIFwiQHRpcHRhcC9wbS92aWV3XCI7XG5pbXBvcnQgeyBOb2RlIH0gZnJvbSBcIkB0aXB0YXAvcG0vbW9kZWxcIjtcblxuZXhwb3J0IGludGVyZmFjZSBBdGVCbG9ja0NvbnRyb2xzT3B0aW9ucyB7XG4gIG9uSG92ZXI/OiAoZGF0YTogeyBub2RlOiBOb2RlOyBlbGVtZW50OiBIVE1MRWxlbWVudDsgcG9zOiBudW1iZXIgfSB8IG51bGwpID0+IHZvaWQ7XG59XG5cbi8vIEhlbHBlciB0byBnZXQgdGhlIERPTSBlbGVtZW50IHByb3Blcmx5XG5mdW5jdGlvbiBnZXREb21FbGVtZW50KHZpZXc6IEVkaXRvclZpZXcsIHBvczogbnVtYmVyKTogSFRNTEVsZW1lbnQgfCBudWxsIHtcbiAgY29uc3QgZG9tID0gdmlldy5ub2RlRE9NKHBvcyk7XG4gIGlmICghZG9tKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgaWYgKGRvbSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG4gICAgcmV0dXJuIGRvbTtcbiAgfVxuICByZXR1cm4gZG9tLnBhcmVudEVsZW1lbnQ7XG59XG5cbi8vIFZFUlRJQ0FMIFNDQU4gKEZvciB0aGUgZW1wdHkgbWFyZ2luKVxuZnVuY3Rpb24gZmluZEJsb2NrRWxlbWVudEF0WSh2aWV3OiBFZGl0b3JWaWV3LCB5OiBudW1iZXIpOiBIVE1MRWxlbWVudCB8IG51bGwge1xuICBjb25zdCBlZGl0b3JEb20gPSB2aWV3LmRvbSBhcyBIVE1MRWxlbWVudDtcbiAgY29uc3QgY2hpbGRyZW4gPSBBcnJheS5mcm9tKGVkaXRvckRvbS5jaGlsZHJlbikgYXMgSFRNTEVsZW1lbnRbXTtcblxuICAvLyBXZSBsb29rIGZvciB0aGUgZGlyZWN0IGNoaWxkIG9mIHRoZSBlZGl0b3IgKExldmVsIDEpIHRoYXQgaW50ZXJjZXB0cyB0aGUgWSBsaW5lXG4gIHJldHVybiAoXG4gICAgY2hpbGRyZW4uZmluZChjaGlsZCA9PiB7XG4gICAgICBpZiAoZ2V0Q29tcHV0ZWRTdHlsZShjaGlsZCkucG9zaXRpb24gPT09IFwiYWJzb2x1dGVcIikge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBjb25zdCByZWN0ID0gY2hpbGQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAvLyBUb2zDqXJhbmNlIGRlIDVweFxuICAgICAgcmV0dXJuIHkgPj0gcmVjdC50b3AgLSA1ICYmIHkgPD0gcmVjdC5ib3R0b20gKyA1O1xuICAgIH0pIHx8IG51bGxcbiAgKTtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZUJsb2NrRGF0YShcbiAgdmlldzogRWRpdG9yVmlldyxcbiAgeTogbnVtYmVyLFxuICB0YXJnZXRFbGVtZW50OiBIVE1MRWxlbWVudCB8IG51bGxcbik6IHsgbm9kZTogTm9kZTsgZWxlbWVudDogSFRNTEVsZW1lbnQ7IHBvczogbnVtYmVyIH0gfCBudWxsIHtcbiAgbGV0IGJsb2NrRWw6IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGw7XG5cbiAgLy8gMS4gRkFTVCBQQVRIIDogRGlyZWN0IHRhcmdldFxuICAvLyBMRVZFTCAxOiBXZSBsb29rIGZvciB0aGUgZmlyc3QgcGFyZW50IGVsZW1lbnQgdGhhdCBpcyBhIGRpcmVjdCBjaGlsZCBvZiB0aGUgZWRpdG9yXG4gIGlmICh0YXJnZXRFbGVtZW50ICYmICF0YXJnZXRFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhcIlByb3NlTWlycm9yXCIpKSB7XG4gICAgYmxvY2tFbCA9IHRhcmdldEVsZW1lbnQuY2xvc2VzdChcIi5Qcm9zZU1pcnJvciA+ICpcIikgYXMgSFRNTEVsZW1lbnQ7XG4gIH1cblxuICAvLyAyLiBHVVRURVIgUEFUSCA6IFZlcnRpY2FsIHNjYW5cbiAgaWYgKCFibG9ja0VsKSB7XG4gICAgYmxvY2tFbCA9IGZpbmRCbG9ja0VsZW1lbnRBdFkodmlldywgeSk7XG4gIH1cblxuICBpZiAoIWJsb2NrRWwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIDMuIFBST1NFTUlSUk9SIE5PREUgUkVTT0xVVElPTlxuICB0cnkge1xuICAgIC8vIFdlIGFzayBmb3IgdGhlIHBvc2l0aW9uIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhpcyByb290IGJsb2NrXG4gICAgY29uc3QgcG9zID0gdmlldy5wb3NBdERPTShibG9ja0VsLCAwKTtcbiAgICBjb25zdCAkcG9zID0gdmlldy5zdGF0ZS5kb2MucmVzb2x2ZShwb3MpO1xuXG4gICAgLy8gQ0FTRSBBIDogU1RBTkRBUkQgQkxPQ0tTIChIMSwgUCwgTGlzdHMsIEJsb2NrcXVvdGVzLi4uKVxuICAgIC8vIFdlIG1ha2Ugc3VyZSB0byB0YWtlIHRoZSBub2RlIG9mIGRlcHRoIDEgKERpcmVjdCBjaGlsZCBvZiB0aGUgRG9jKVxuICAgIGlmICgkcG9zLmRlcHRoID49IDEpIHtcbiAgICAgIGNvbnN0IHJvb3ROb2RlID0gJHBvcy5ub2RlKDEpO1xuICAgICAgY29uc3Qgcm9vdFBvcyA9ICRwb3MuYmVmb3JlKDEpO1xuICAgICAgY29uc3Qgcm9vdEVsZW1lbnQgPSBnZXREb21FbGVtZW50KHZpZXcsIHJvb3RQb3MpO1xuXG4gICAgICAvLyBTw6ljdXJpdMOpIDogb24gdsOpcmlmaWUgcXVlIGwnw6lsw6ltZW50IERPTSBjb3JyZXNwb25kIGJpZW5cbiAgICAgIGlmIChyb290Tm9kZSAmJiAocm9vdEVsZW1lbnQgfHwgYmxvY2tFbCkpIHtcbiAgICAgICAgcmV0dXJuIHsgbm9kZTogcm9vdE5vZGUsIGVsZW1lbnQ6IHJvb3RFbGVtZW50IHx8IGJsb2NrRWwsIHBvczogcm9vdFBvcyB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENBU0UgQiA6IElNQUdFUyAvIEFUT01TIChEZXB0aCAwKVxuICAgIC8vIFNvbWV0aW1lcyBhIHJvb3QgaW1hZ2UgaXMgc2VlbiBhcyBEZXB0aCAwIGJ5IHJlc29sdmUoKVxuICAgIC8vIFdlIGxvb2sgYXQgdGhlIG5vZGUgcmlnaHQgYWZ0ZXIgdGhlIHBvc2l0aW9uXG4gICAgaWYgKCRwb3MuZGVwdGggPT09IDApIHtcbiAgICAgIGNvbnN0IG5vZGVBZnRlciA9ICRwb3Mubm9kZUFmdGVyO1xuICAgICAgaWYgKG5vZGVBZnRlciAmJiAobm9kZUFmdGVyLmlzQmxvY2sgfHwgbm9kZUFmdGVyLmlzQXRvbSkpIHtcbiAgICAgICAgcmV0dXJuIHsgbm9kZTogbm9kZUFmdGVyLCBlbGVtZW50OiBibG9ja0VsLCBwb3M6IHBvcyB9O1xuICAgICAgfVxuICAgIH1cbiAgfSBjYXRjaCAoX2UpIHtcbiAgICAvLyBjb25zb2xlLndhcm4oX2UpO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmV4cG9ydCBjb25zdCBBdGVCbG9ja0NvbnRyb2xzRXh0ZW5zaW9uID0gRXh0ZW5zaW9uLmNyZWF0ZTxBdGVCbG9ja0NvbnRyb2xzT3B0aW9ucz4oe1xuICBuYW1lOiBcImF0ZUJsb2NrQ29udHJvbHNcIixcblxuICBhZGRPcHRpb25zKCkge1xuICAgIHJldHVybiB7IG9uSG92ZXI6IHVuZGVmaW5lZCB9O1xuICB9LFxuXG4gIGFkZFByb3NlTWlycm9yUGx1Z2lucygpIHtcbiAgICBsZXQgbGFzdEhvdmVyZWRFbGVtZW50OiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICAgIGxldCBsYXN0SG92ZXJlZFBvczogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gICAgbGV0IHJhZklkOiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgICBsZXQgbGFzdE1vdXNlWCA9IDA7XG4gICAgbGV0IGxhc3RNb3VzZVkgPSAwO1xuXG4gICAgY29uc3QgdXBkYXRlID0gKHZpZXc6IEVkaXRvclZpZXcpID0+IHtcbiAgICAgIGlmICghdGhpcy5lZGl0b3IuaXNFZGl0YWJsZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGVkaXRvclJlY3QgPSB2aWV3LmRvbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGNvbnN0IGd1dHRlcldpZHRoID0gODA7XG5cbiAgICAgIC8vIENoZWNrIExpbWl0ZXMgKE1hcmdlIEdhdWNoZSArIEVkaXRldXIpXG4gICAgICBpZiAoXG4gICAgICAgIGxhc3RNb3VzZVkgPCBlZGl0b3JSZWN0LnRvcCB8fFxuICAgICAgICBsYXN0TW91c2VZID4gZWRpdG9yUmVjdC5ib3R0b20gfHxcbiAgICAgICAgbGFzdE1vdXNlWCA+IGVkaXRvclJlY3QucmlnaHQgfHxcbiAgICAgICAgbGFzdE1vdXNlWCA8IGVkaXRvclJlY3QubGVmdCAtIGd1dHRlcldpZHRoXG4gICAgICApIHtcbiAgICAgICAgaWYgKGxhc3RIb3ZlcmVkRWxlbWVudCkge1xuICAgICAgICAgIHJlc2V0KCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBTVElDS1kgQU5USS1GTElDS0VSXG4gICAgICAvLyBPbiBnYXJkZSBsZSBibG9jIHRhbnQgcXUnb24gZXN0IGRhbnMgc2EgaGF1dGV1clxuICAgICAgaWYgKGxhc3RIb3ZlcmVkRWxlbWVudCAmJiBsYXN0SG92ZXJlZEVsZW1lbnQuaXNDb25uZWN0ZWQpIHtcbiAgICAgICAgY29uc3QgcmVjdCA9IGxhc3RIb3ZlcmVkRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgaWYgKGxhc3RNb3VzZVkgPj0gcmVjdC50b3AgJiYgbGFzdE1vdXNlWSA8PSByZWN0LmJvdHRvbSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCB0YXJnZXQgPSBkb2N1bWVudC5lbGVtZW50RnJvbVBvaW50KGxhc3RNb3VzZVgsIGxhc3RNb3VzZVkpIGFzIEhUTUxFbGVtZW50O1xuXG4gICAgICBjb25zdCBkYXRhID0gcmVzb2x2ZUJsb2NrRGF0YSh2aWV3LCBsYXN0TW91c2VZLCB0YXJnZXQpO1xuXG4gICAgICBpZiAoZGF0YSAmJiAoZGF0YS5lbGVtZW50ICE9PSBsYXN0SG92ZXJlZEVsZW1lbnQgfHwgZGF0YS5wb3MgIT09IGxhc3RIb3ZlcmVkUG9zKSkge1xuICAgICAgICBsYXN0SG92ZXJlZEVsZW1lbnQgPSBkYXRhLmVsZW1lbnQ7XG4gICAgICAgIGxhc3RIb3ZlcmVkUG9zID0gZGF0YS5wb3M7XG4gICAgICAgIHRoaXMub3B0aW9ucy5vbkhvdmVyPy4oZGF0YSk7XG4gICAgICB9IGVsc2UgaWYgKCFkYXRhKSB7XG4gICAgICAgIGlmICghbGFzdEhvdmVyZWRFbGVtZW50IHx8ICFsYXN0SG92ZXJlZEVsZW1lbnQuaXNDb25uZWN0ZWQpIHtcbiAgICAgICAgICByZXNldCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IHJlc2V0ID0gKCkgPT4ge1xuICAgICAgdGhpcy5vcHRpb25zLm9uSG92ZXI/LihudWxsKTtcbiAgICAgIGxhc3RIb3ZlcmVkRWxlbWVudCA9IG51bGw7XG4gICAgICBsYXN0SG92ZXJlZFBvcyA9IG51bGw7XG4gICAgfTtcblxuICAgIHJldHVybiBbXG4gICAgICBuZXcgUGx1Z2luKHtcbiAgICAgICAga2V5OiBuZXcgUGx1Z2luS2V5KFwiYXRlQmxvY2tDb250cm9sc1wiKSxcbiAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICBoYW5kbGVET01FdmVudHM6IHtcbiAgICAgICAgICAgIG1vdXNlbW92ZTogKHZpZXc6IEVkaXRvclZpZXcsIGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgIGxhc3RNb3VzZVggPSBldmVudC5jbGllbnRYO1xuICAgICAgICAgICAgICBsYXN0TW91c2VZID0gZXZlbnQuY2xpZW50WTtcblxuICAgICAgICAgICAgICBpZiAocmFmSWQgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByYWZJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICB1cGRhdGUodmlldyk7XG4gICAgICAgICAgICAgICAgICByYWZJZCA9IG51bGw7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG1vdXNlbGVhdmU6ICgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHJhZklkKSB7XG4gICAgICAgICAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUocmFmSWQpO1xuICAgICAgICAgICAgICAgIHJhZklkID0gbnVsbDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXNldCgpO1xuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICBdO1xuICB9LFxufSk7XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXRlVHJhbnNsYXRpb25zTW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLXRpcHRhcC1lZGl0b3Ivc3JjL2xpYi9pMThuL2F0ZVRyYW5zbGF0aW9uc01vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgdHlwZSBTdXBwb3J0ZWRMb2NhbGUgPSBcImVuXCIgfCBcImZyXCIgfCBcImRlXCIgfCAoc3RyaW5nICYge30pO1xuXG5leHBvcnQgaW50ZXJmYWNlIEF0ZVRyYW5zbGF0aW9ucyB7XG4gICAgLy8gVG9vbGJhclxuICAgIHRvb2xiYXI6IHtcbiAgICAgICAgYm9sZDogc3RyaW5nO1xuICAgICAgICBpdGFsaWM6IHN0cmluZztcbiAgICAgICAgdW5kZXJsaW5lOiBzdHJpbmc7XG4gICAgICAgIHN0cmlrZTogc3RyaW5nO1xuICAgICAgICBjb2RlOiBzdHJpbmc7XG4gICAgICAgIGNvZGVCbG9jazogc3RyaW5nO1xuICAgICAgICBzdXBlcnNjcmlwdDogc3RyaW5nO1xuICAgICAgICBzdWJzY3JpcHQ6IHN0cmluZztcbiAgICAgICAgaGlnaGxpZ2h0OiBzdHJpbmc7XG4gICAgICAgIGhpZ2hsaWdodFBpY2tlcjogc3RyaW5nO1xuICAgICAgICBoZWFkaW5nMTogc3RyaW5nO1xuICAgICAgICBoZWFkaW5nMjogc3RyaW5nO1xuICAgICAgICBoZWFkaW5nMzogc3RyaW5nO1xuICAgICAgICBidWxsZXRMaXN0OiBzdHJpbmc7XG4gICAgICAgIG9yZGVyZWRMaXN0OiBzdHJpbmc7XG4gICAgICAgIGJsb2NrcXVvdGU6IHN0cmluZztcbiAgICAgICAgYWxpZ25MZWZ0OiBzdHJpbmc7XG4gICAgICAgIGFsaWduQ2VudGVyOiBzdHJpbmc7XG4gICAgICAgIGFsaWduUmlnaHQ6IHN0cmluZztcbiAgICAgICAgYWxpZ25KdXN0aWZ5OiBzdHJpbmc7XG4gICAgICAgIGxpbms6IHN0cmluZztcbiAgICAgICAgaW1hZ2U6IHN0cmluZztcbiAgICAgICAgaG9yaXpvbnRhbFJ1bGU6IHN0cmluZztcbiAgICAgICAgdGFibGU6IHN0cmluZztcbiAgICAgICAgdW5kbzogc3RyaW5nO1xuICAgICAgICByZWRvOiBzdHJpbmc7XG4gICAgICAgIGNsZWFyOiBzdHJpbmc7XG4gICAgICAgIHRleHRDb2xvcjogc3RyaW5nO1xuICAgICAgICBjdXN0b21Db2xvcjogc3RyaW5nO1xuICAgICAgICBwcmVzZXRzOiBzdHJpbmc7XG4gICAgfTtcblxuICAgIC8vIEJ1YmJsZSBNZW51XG4gICAgYnViYmxlTWVudToge1xuICAgICAgICBib2xkOiBzdHJpbmc7XG4gICAgICAgIGl0YWxpYzogc3RyaW5nO1xuICAgICAgICB1bmRlcmxpbmU6IHN0cmluZztcbiAgICAgICAgc3RyaWtlOiBzdHJpbmc7XG4gICAgICAgIGNvZGU6IHN0cmluZztcbiAgICAgICAgc3VwZXJzY3JpcHQ6IHN0cmluZztcbiAgICAgICAgc3Vic2NyaXB0OiBzdHJpbmc7XG4gICAgICAgIGhpZ2hsaWdodDogc3RyaW5nO1xuICAgICAgICBoaWdobGlnaHRQaWNrZXI6IHN0cmluZztcbiAgICAgICAgdGV4dENvbG9yOiBzdHJpbmc7XG4gICAgICAgIGxpbms6IHN0cmluZztcbiAgICAgICAgYWRkTGluazogc3RyaW5nO1xuICAgICAgICBlZGl0TGluazogc3RyaW5nO1xuICAgICAgICByZW1vdmVMaW5rOiBzdHJpbmc7XG4gICAgICAgIGxpbmtVcmw6IHN0cmluZztcbiAgICAgICAgbGlua1RleHQ6IHN0cmluZztcbiAgICAgICAgb3Blbkxpbms6IHN0cmluZztcbiAgICAgICAgY3VzdG9tQ29sb3I6IHN0cmluZztcbiAgICAgICAgcHJlc2V0czogc3RyaW5nO1xuICAgIH07XG5cbiAgICAvLyBTbGFzaCBDb21tYW5kc1xuICAgIHNsYXNoQ29tbWFuZHM6IHtcbiAgICAgICAgaGVhZGluZzE6IHtcbiAgICAgICAgICAgIHRpdGxlOiBzdHJpbmc7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICAgICAgICAgICAga2V5d29yZHM6IHN0cmluZ1tdO1xuICAgICAgICB9O1xuICAgICAgICBoZWFkaW5nMjoge1xuICAgICAgICAgICAgdGl0bGU6IHN0cmluZztcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gICAgICAgICAgICBrZXl3b3Jkczogc3RyaW5nW107XG4gICAgICAgIH07XG4gICAgICAgIGhlYWRpbmczOiB7XG4gICAgICAgICAgICB0aXRsZTogc3RyaW5nO1xuICAgICAgICAgICAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgICAgICAgICAgIGtleXdvcmRzOiBzdHJpbmdbXTtcbiAgICAgICAgfTtcbiAgICAgICAgYnVsbGV0TGlzdDoge1xuICAgICAgICAgICAgdGl0bGU6IHN0cmluZztcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gICAgICAgICAgICBrZXl3b3Jkczogc3RyaW5nW107XG4gICAgICAgIH07XG4gICAgICAgIG9yZGVyZWRMaXN0OiB7XG4gICAgICAgICAgICB0aXRsZTogc3RyaW5nO1xuICAgICAgICAgICAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgICAgICAgICAgIGtleXdvcmRzOiBzdHJpbmdbXTtcbiAgICAgICAgfTtcbiAgICAgICAgYmxvY2txdW90ZToge1xuICAgICAgICAgICAgdGl0bGU6IHN0cmluZztcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gICAgICAgICAgICBrZXl3b3Jkczogc3RyaW5nW107XG4gICAgICAgIH07XG4gICAgICAgIGNvZGU6IHtcbiAgICAgICAgICAgIHRpdGxlOiBzdHJpbmc7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICAgICAgICAgICAga2V5d29yZHM6IHN0cmluZ1tdO1xuICAgICAgICB9O1xuICAgICAgICBpbWFnZToge1xuICAgICAgICAgICAgdGl0bGU6IHN0cmluZztcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gICAgICAgICAgICBrZXl3b3Jkczogc3RyaW5nW107XG4gICAgICAgIH07XG4gICAgICAgIGhvcml6b250YWxSdWxlOiB7XG4gICAgICAgICAgICB0aXRsZTogc3RyaW5nO1xuICAgICAgICAgICAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgICAgICAgICAgIGtleXdvcmRzOiBzdHJpbmdbXTtcbiAgICAgICAgfTtcbiAgICAgICAgdGFibGU6IHtcbiAgICAgICAgICAgIHRpdGxlOiBzdHJpbmc7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICAgICAgICAgICAga2V5d29yZHM6IHN0cmluZ1tdO1xuICAgICAgICB9O1xuICAgIH07XG5cbiAgICAvLyBUYWJsZSBBY3Rpb25zXG4gICAgdGFibGU6IHtcbiAgICAgICAgYWRkUm93QmVmb3JlOiBzdHJpbmc7XG4gICAgICAgIGFkZFJvd0FmdGVyOiBzdHJpbmc7XG4gICAgICAgIGRlbGV0ZVJvdzogc3RyaW5nO1xuICAgICAgICBhZGRDb2x1bW5CZWZvcmU6IHN0cmluZztcbiAgICAgICAgYWRkQ29sdW1uQWZ0ZXI6IHN0cmluZztcbiAgICAgICAgZGVsZXRlQ29sdW1uOiBzdHJpbmc7XG4gICAgICAgIGRlbGV0ZVRhYmxlOiBzdHJpbmc7XG4gICAgICAgIHRvZ2dsZUhlYWRlclJvdzogc3RyaW5nO1xuICAgICAgICB0b2dnbGVIZWFkZXJDb2x1bW46IHN0cmluZztcbiAgICAgICAgbWVyZ2VDZWxsczogc3RyaW5nO1xuICAgICAgICBzcGxpdENlbGw6IHN0cmluZztcbiAgICB9O1xuXG4gICAgLy8gSW1hZ2UgVXBsb2FkXG4gICAgaW1hZ2VVcGxvYWQ6IHtcbiAgICAgICAgc2VsZWN0SW1hZ2U6IHN0cmluZztcbiAgICAgICAgbG9hZEVycm9yOiBzdHJpbmc7XG4gICAgICAgIHVwbG9hZGluZ0ltYWdlOiBzdHJpbmc7XG4gICAgICAgIHVwbG9hZFByb2dyZXNzOiBzdHJpbmc7XG4gICAgICAgIHVwbG9hZEVycm9yOiBzdHJpbmc7XG4gICAgICAgIHVwbG9hZFN1Y2Nlc3M6IHN0cmluZztcbiAgICAgICAgaW1hZ2VUb29MYXJnZTogc3RyaW5nO1xuICAgICAgICBpbnZhbGlkRmlsZVR5cGU6IHN0cmluZztcbiAgICAgICAgZHJhZ0Ryb3BUZXh0OiBzdHJpbmc7XG4gICAgICAgIGNoYW5nZUltYWdlOiBzdHJpbmc7XG4gICAgICAgIGRvd25sb2FkSW1hZ2U6IHN0cmluZztcbiAgICAgICAgZGVsZXRlSW1hZ2U6IHN0cmluZztcbiAgICAgICAgcmVzaXplU21hbGw6IHN0cmluZztcbiAgICAgICAgcmVzaXplTWVkaXVtOiBzdHJpbmc7XG4gICAgICAgIHJlc2l6ZUxhcmdlOiBzdHJpbmc7XG4gICAgICAgIHJlc2l6ZU9yaWdpbmFsOiBzdHJpbmc7XG4gICAgICAgIGFsaWduTGVmdDogc3RyaW5nO1xuICAgICAgICBhbGlnbkNlbnRlcjogc3RyaW5nO1xuICAgICAgICBhbGlnblJpZ2h0OiBzdHJpbmc7XG4gICAgICAgIHJlc2l6aW5nOiBzdHJpbmc7XG4gICAgICAgIGNvbXByZXNzaW5nOiBzdHJpbmc7XG4gICAgICAgIGNvbXByZXNzaW9uRXJyb3I6IHN0cmluZztcbiAgICAgICAgdmFsaWRhdGluZzogc3RyaW5nO1xuICAgICAgICB1cGxvYWRpbmdUb1NlcnZlcjogc3RyaW5nO1xuICAgICAgICByZXBsYWNpbmdJbWFnZTogc3RyaW5nO1xuICAgICAgICBpbnNlcnRpbmdJbWFnZTogc3RyaW5nO1xuICAgICAgICBub0ZpbGVTZWxlY3RlZDogc3RyaW5nO1xuICAgICAgICBzZWxlY3Rpb25DYW5jZWxsZWQ6IHN0cmluZztcbiAgICB9O1xuXG4gICAgLy8gRWRpdG9yXG4gICAgZWRpdG9yOiB7XG4gICAgICAgIHBsYWNlaG9sZGVyOiBzdHJpbmc7XG4gICAgICAgIGNoYXJhY3Rlcjogc3RyaW5nO1xuICAgICAgICBjaGFyYWN0ZXJQbHVyYWw6IHN0cmluZztcbiAgICAgICAgd29yZDogc3RyaW5nO1xuICAgICAgICB3b3JkUGx1cmFsOiBzdHJpbmc7XG4gICAgICAgIGxpbmtQcm9tcHQ6IHN0cmluZztcbiAgICAgICAgbGlua1VybFByb21wdDogc3RyaW5nO1xuICAgICAgICBjb25maXJtRGVsZXRlOiBzdHJpbmc7XG4gICAgICAgIHRvZ2dsZUVkaXQ6IHN0cmluZztcbiAgICAgICAgdmlld01vZGU6IHN0cmluZztcbiAgICAgICAgYmxvY2tBZGQ6IHN0cmluZztcbiAgICAgICAgYmxvY2tEcmFnOiBzdHJpbmc7XG4gICAgICAgIHRhYmxlT2ZDb250ZW50czogc3RyaW5nO1xuICAgIH07XG5cbiAgICAvLyBDb21tb25cbiAgICBjb21tb246IHtcbiAgICAgICAgY2FuY2VsOiBzdHJpbmc7XG4gICAgICAgIGNvbmZpcm06IHN0cmluZztcbiAgICAgICAgYXBwbHk6IHN0cmluZztcbiAgICAgICAgZGVsZXRlOiBzdHJpbmc7XG4gICAgICAgIHNhdmU6IHN0cmluZztcbiAgICAgICAgY2xvc2U6IHN0cmluZztcbiAgICAgICAgbG9hZGluZzogc3RyaW5nO1xuICAgICAgICBlcnJvcjogc3RyaW5nO1xuICAgICAgICBzdWNjZXNzOiBzdHJpbmc7XG4gICAgfTtcblxuICAgIC8vIEV4cG9ydFxuICAgIGV4cG9ydDoge1xuICAgICAgICBleHBvcnQ6IHN0cmluZztcbiAgICAgICAgaHRtbDogc3RyaW5nO1xuICAgICAgICBtYXJrZG93bjogc3RyaW5nO1xuICAgICAgICB0ZXh0OiBzdHJpbmc7XG4gICAgICAgIGNvcHlIdG1sOiBzdHJpbmc7XG4gICAgICAgIGNvcHlNYXJrZG93bjogc3RyaW5nO1xuICAgICAgICBjb3B5VGV4dDogc3RyaW5nO1xuICAgICAgICBkb3dubG9hZEh0bWw6IHN0cmluZztcbiAgICAgICAgZG93bmxvYWRNYXJrZG93bjogc3RyaW5nO1xuICAgICAgICBkb3dubG9hZFRleHQ6IHN0cmluZztcbiAgICAgICAgY29waWVkU3VjY2Vzczogc3RyaW5nO1xuICAgIH07XG59Il19