@obsidian-typings/obsidian-catalyst-1.14.4 0.0.0 → 1.2.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.
@@ -0,0 +1,1401 @@
1
+ /*
2
+ THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
+ */
4
+
5
+ "use strict";
6
+ var __defProp = Object.defineProperty;
7
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
8
+ var __getOwnPropNames = Object.getOwnPropertyNames;
9
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
10
+ var __export = (target, all) => {
11
+ for (var name in all)
12
+ __defProp(target, name, { get: all[name], enumerable: true });
13
+ };
14
+ var __copyProps = (to, from, except, desc) => {
15
+ if (from && typeof from === "object" || typeof from === "function") {
16
+ for (let key of __getOwnPropNames(from))
17
+ if (!__hasOwnProp.call(to, key) && key !== except)
18
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
19
+ }
20
+ return to;
21
+ };
22
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
23
+
24
+ // src/obsidian/implementations/index.ts
25
+ var index_exports = {};
26
+ __export(index_exports, {
27
+ CustomArrayDictImpl: () => CustomArrayDictImpl,
28
+ FileExtension: () => FileExtension,
29
+ InternalPluginName: () => InternalPluginName,
30
+ ViewType: () => ViewType,
31
+ createTFileInstance: () => createTFileInstance,
32
+ createTFolderInstance: () => createTFolderInstance,
33
+ evaluateBaseHeadless: () => evaluateBaseHeadless,
34
+ getAbstractTextComponentConstructor: () => getAbstractTextComponentConstructor,
35
+ getAllPropertiesViewConstructor: () => getAllPropertiesViewConstructor,
36
+ getAppConstructor: () => getAppConstructor,
37
+ getAppMenuBarManagerConstructor: () => getAppMenuBarManagerConstructor,
38
+ getAppSettingConstructor: () => getAppSettingConstructor,
39
+ getAudioViewConstructor: () => getAudioViewConstructor,
40
+ getBacklinkViewConstructor: () => getBacklinkViewConstructor,
41
+ getBaseComponentConstructor: () => getBaseComponentConstructor,
42
+ getBasesContextConstructor: () => getBasesContextConstructor,
43
+ getBasesControllerFromRender: () => getBasesControllerFromRender,
44
+ getBasesEntryConstructor: () => getBasesEntryConstructor,
45
+ getBasesEntryGroupConstructor: () => getBasesEntryGroupConstructor,
46
+ getBasesQueryConstructor: () => getBasesQueryConstructor,
47
+ getBasesQueryResultConstructor: () => getBasesQueryResultConstructor,
48
+ getBasesViewConfigConstructor: () => getBasesViewConfigConstructor,
49
+ getBasesViewConstructor: () => getBasesViewConstructor,
50
+ getBookmarksViewConstructor: () => getBookmarksViewConstructor,
51
+ getBooleanValueConstructor: () => getBooleanValueConstructor,
52
+ getButtonComponentConstructor: () => getButtonComponentConstructor,
53
+ getCanvasViewConstructor: () => getCanvasViewConstructor,
54
+ getCapacitorAdapterConstructor: () => getCapacitorAdapterConstructor,
55
+ getCliConstructor: () => getCliConstructor,
56
+ getColorComponentConstructor: () => getColorComponentConstructor,
57
+ getCommandsConstructor: () => getCommandsConstructor,
58
+ getComponentConstructor: () => getComponentConstructor,
59
+ getConfirmationButtonConstructor: () => getConfirmationButtonConstructor,
60
+ getConfirmationModalConstructor: () => getConfirmationModalConstructor,
61
+ getCustomCSSConstructor: () => getCustomCSSConstructor,
62
+ getDataAdapterEx: () => getDataAdapterEx,
63
+ getDateValueConstructor: () => getDateValueConstructor,
64
+ getDisplayValueComponentConstructor: () => getDisplayValueComponentConstructor,
65
+ getDragManagerConstructor: () => getDragManagerConstructor,
66
+ getDropdownComponentConstructor: () => getDropdownComponentConstructor,
67
+ getDurationValueConstructor: () => getDurationValueConstructor,
68
+ getEditableFileViewConstructor: () => getEditableFileViewConstructor,
69
+ getEditorConstructor: () => getEditorConstructor,
70
+ getEditorSuggestsConstructor: () => getEditorSuggestsConstructor,
71
+ getEmbedRegistryConstructor: () => getEmbedRegistryConstructor,
72
+ getEmptyViewConstructor: () => getEmptyViewConstructor,
73
+ getEventsConstructor: () => getEventsConstructor,
74
+ getExtraButtonComponentConstructor: () => getExtraButtonComponentConstructor,
75
+ getFileExplorerViewConstructor: () => getFileExplorerViewConstructor,
76
+ getFileManagerConstructor: () => getFileManagerConstructor,
77
+ getFilePropertiesViewConstructor: () => getFilePropertiesViewConstructor,
78
+ getFileSystemAdapterConstructor: () => getFileSystemAdapterConstructor,
79
+ getFileValueConstructor: () => getFileValueConstructor,
80
+ getFoldManagerConstructor: () => getFoldManagerConstructor,
81
+ getFrameDomConstructor: () => getFrameDomConstructor,
82
+ getFuzzySuggestModalConstructor: () => getFuzzySuggestModalConstructor,
83
+ getGraphViewConstructor: () => getGraphViewConstructor,
84
+ getHTMLValueConstructor: () => getHTMLValueConstructor,
85
+ getHotkeyManagerConstructor: () => getHotkeyManagerConstructor,
86
+ getHoverPopoverConstructor: () => getHoverPopoverConstructor,
87
+ getIconValueConstructor: () => getIconValueConstructor,
88
+ getImageValueConstructor: () => getImageValueConstructor,
89
+ getImageViewConstructor: () => getImageViewConstructor,
90
+ getInternalPluginConstructor: () => getInternalPluginConstructor,
91
+ getInternalPluginsConstructor: () => getInternalPluginsConstructor,
92
+ getKeymapConstructor: () => getKeymapConstructor,
93
+ getLinkValueConstructor: () => getLinkValueConstructor,
94
+ getListValueConstructor: () => getListValueConstructor,
95
+ getLocalGraphViewConstructor: () => getLocalGraphViewConstructor,
96
+ getMarkdownPreviewRendererConstructor: () => getMarkdownPreviewRendererConstructor,
97
+ getMarkdownPreviewViewConstructor: () => getMarkdownPreviewViewConstructor,
98
+ getMarkdownRenderChildConstructor: () => getMarkdownRenderChildConstructor,
99
+ getMarkdownRendererConstructor: () => getMarkdownRendererConstructor,
100
+ getMarkdownViewConstructor: () => getMarkdownViewConstructor,
101
+ getMenuConstructor: () => getMenuConstructor,
102
+ getMenuItemConstructor: () => getMenuItemConstructor,
103
+ getMenuSeparatorConstructor: () => getMenuSeparatorConstructor,
104
+ getMetadataCacheConstructor: () => getMetadataCacheConstructor,
105
+ getMetadataTypeManagerConstructor: () => getMetadataTypeManagerConstructor,
106
+ getModalConstructor: () => getModalConstructor,
107
+ getMomentFormatComponentConstructor: () => getMomentFormatComponentConstructor,
108
+ getNotNullValueConstructor: () => getNotNullValueConstructor,
109
+ getNoticeConstructor: () => getNoticeConstructor,
110
+ getNullValueConstructor: () => getNullValueConstructor,
111
+ getNumberValueConstructor: () => getNumberValueConstructor,
112
+ getObjectValueConstructor: () => getObjectValueConstructor,
113
+ getObsidianDOMConstructor: () => getObsidianDOMConstructor,
114
+ getOutgoingLinkViewConstructor: () => getOutgoingLinkViewConstructor,
115
+ getOutlineViewConstructor: () => getOutlineViewConstructor,
116
+ getPdfViewConstructor: () => getPdfViewConstructor,
117
+ getPlatformEx: () => getPlatformEx,
118
+ getPluginsConstructor: () => getPluginsConstructor,
119
+ getProgressBarComponentConstructor: () => getProgressBarComponentConstructor,
120
+ getQueryControllerConstructor: () => getQueryControllerConstructor,
121
+ getRecentFileTrackerConstructor: () => getRecentFileTrackerConstructor,
122
+ getRegExpValueConstructor: () => getRegExpValueConstructor,
123
+ getRelativeDateValueConstructor: () => getRelativeDateValueConstructor,
124
+ getReleaseNotesViewConstructor: () => getReleaseNotesViewConstructor,
125
+ getRenderContextConstructor: () => getRenderContextConstructor,
126
+ getScopeConstructor: () => getScopeConstructor,
127
+ getSearchComponentConstructor: () => getSearchComponentConstructor,
128
+ getSearchViewConstructor: () => getSearchViewConstructor,
129
+ getSecretComponentConstructor: () => getSecretComponentConstructor,
130
+ getSecretStorageConstructor: () => getSecretStorageConstructor,
131
+ getSettingConstructor: () => getSettingConstructor,
132
+ getSettingGroupConstructor: () => getSettingGroupConstructor,
133
+ getSettingPageConstructor: () => getSettingPageConstructor,
134
+ getSettingTabConstructor: () => getSettingTabConstructor,
135
+ getShareReceiverConstructor: () => getShareReceiverConstructor,
136
+ getSliderComponentConstructor: () => getSliderComponentConstructor,
137
+ getStatusBarConstructor: () => getStatusBarConstructor,
138
+ getStringValueConstructor: () => getStringValueConstructor,
139
+ getSyncViewConstructor: () => getSyncViewConstructor,
140
+ getTAbstractFileConstructor: () => getTAbstractFileConstructor,
141
+ getTFileConstructor: () => getTFileConstructor,
142
+ getTFolderConstructor: () => getTFolderConstructor,
143
+ getTagValueConstructor: () => getTagValueConstructor,
144
+ getTagViewConstructor: () => getTagViewConstructor,
145
+ getTasksConstructor: () => getTasksConstructor,
146
+ getTextAreaComponentConstructor: () => getTextAreaComponentConstructor,
147
+ getTextComponentConstructor: () => getTextComponentConstructor,
148
+ getToggleComponentConstructor: () => getToggleComponentConstructor,
149
+ getUrlValueConstructor: () => getUrlValueConstructor,
150
+ getValueComponentConstructor: () => getValueComponentConstructor,
151
+ getValueConstructor: () => getValueConstructor,
152
+ getVaultConstructor: () => getVaultConstructor,
153
+ getVideoViewConstructor: () => getVideoViewConstructor,
154
+ getViewConstructorByViewType: () => getViewConstructorByViewType,
155
+ getViewRegistryConstructor: () => getViewRegistryConstructor,
156
+ getWebviewerHistoryViewConstructor: () => getWebviewerHistoryViewConstructor,
157
+ getWebviewerViewConstructor: () => getWebviewerViewConstructor,
158
+ getWorkspaceConstructor: () => getWorkspaceConstructor,
159
+ getWorkspaceContainerConstructor: () => getWorkspaceContainerConstructor,
160
+ getWorkspaceFloatingConstructor: () => getWorkspaceFloatingConstructor,
161
+ getWorkspaceItemConstructor: () => getWorkspaceItemConstructor,
162
+ getWorkspaceLeafConstructor: () => getWorkspaceLeafConstructor,
163
+ getWorkspaceLeafHistoryConstructor: () => getWorkspaceLeafHistoryConstructor,
164
+ getWorkspaceMobileDrawerConstructor: () => getWorkspaceMobileDrawerConstructor,
165
+ getWorkspaceParentConstructor: () => getWorkspaceParentConstructor,
166
+ getWorkspaceProtocolHandlerConstructor: () => getWorkspaceProtocolHandlerConstructor,
167
+ getWorkspaceRibbonConstructor: () => getWorkspaceRibbonConstructor,
168
+ getWorkspaceRootConstructor: () => getWorkspaceRootConstructor,
169
+ getWorkspaceSidedockConstructor: () => getWorkspaceSidedockConstructor,
170
+ getWorkspaceSplitConstructor: () => getWorkspaceSplitConstructor,
171
+ getWorkspaceTabsConstructor: () => getWorkspaceTabsConstructor,
172
+ getWorkspaceWindowConstructor: () => getWorkspaceWindowConstructor,
173
+ isEmbedCache: () => isEmbedCache,
174
+ isFrontmatterLinkCache: () => isFrontmatterLinkCache,
175
+ isLinkCache: () => isLinkCache,
176
+ isReferenceCache: () => isReferenceCache,
177
+ loadMermaid: () => loadMermaid,
178
+ loadPdfJs: () => loadPdfJs,
179
+ loadPrism: () => loadPrism,
180
+ parentFolderPath: () => parentFolderPath
181
+ });
182
+ module.exports = __toCommonJS(index_exports);
183
+
184
+ // src/obsidian/implementations/classes/CustomArrayDictImpl.ts
185
+ var CustomArrayDictImpl = class {
186
+ /**
187
+ * Internal map storing key-to-array mappings.
188
+ */
189
+ data = /* @__PURE__ */ new Map();
190
+ /**
191
+ * Add a value to the array associated with the given key.
192
+ *
193
+ * @param key - The key.
194
+ * @param value - The value to add.
195
+ */
196
+ add(key, value) {
197
+ let values = this.get(key);
198
+ if (!values) {
199
+ values = [];
200
+ this.data.set(key, values);
201
+ }
202
+ if (!values.includes(value)) {
203
+ values.push(value);
204
+ }
205
+ }
206
+ /**
207
+ * Remove all values for the given key.
208
+ *
209
+ * @param key - The key to clear.
210
+ */
211
+ clear(key) {
212
+ this.data.delete(key);
213
+ }
214
+ /**
215
+ * Remove all keys and their values.
216
+ */
217
+ clearAll() {
218
+ this.data.clear();
219
+ }
220
+ /**
221
+ * Check whether the array for the given key contains the specified value.
222
+ *
223
+ * @param key - The key.
224
+ * @param value - The value to check.
225
+ * @returns Whether the value exists.
226
+ */
227
+ contains(key, value) {
228
+ return !!this.get(key)?.contains(value);
229
+ }
230
+ /**
231
+ * Get the total number of values across all keys.
232
+ *
233
+ * @returns Total value count.
234
+ */
235
+ count() {
236
+ let ans = 0;
237
+ for (const key of this.keys()) {
238
+ ans += this.get(key)?.length ?? 0;
239
+ }
240
+ return ans;
241
+ }
242
+ /**
243
+ * Get the array of values for the given key, or `null` if not found.
244
+ *
245
+ * @param key - The key.
246
+ * @returns Array of values, or `null`.
247
+ */
248
+ get(key) {
249
+ return this.data.get(key) || null;
250
+ }
251
+ /**
252
+ * Get all keys in the dictionary.
253
+ *
254
+ * @returns Array of keys.
255
+ */
256
+ keys() {
257
+ return Array.from(this.data.keys());
258
+ }
259
+ /**
260
+ * Remove a specific value from the array associated with the given key.
261
+ *
262
+ * @param key - The key.
263
+ * @param value - The value to remove.
264
+ */
265
+ remove(key, value) {
266
+ const values = this.get(key);
267
+ if (!values) {
268
+ return;
269
+ }
270
+ values.remove(value);
271
+ if (values.length === 0) {
272
+ this.clear(key);
273
+ }
274
+ }
275
+ };
276
+
277
+ // src/obsidian/implementations/constants/FileExtension.ts
278
+ var FileExtension = {
279
+ _3gp: "3gp",
280
+ avif: "avif",
281
+ bmp: "bmp",
282
+ canvas: "canvas",
283
+ flac: "flac",
284
+ gif: "gif",
285
+ jpeg: "jpeg",
286
+ jpg: "jpg",
287
+ m4a: "m4a",
288
+ md: "md",
289
+ mkv: "mkv",
290
+ mov: "mov",
291
+ mp3: "mp3",
292
+ mp4: "mp4",
293
+ oga: "oga",
294
+ ogg: "ogg",
295
+ ogv: "ogv",
296
+ opus: "opus",
297
+ pdf: "pdf",
298
+ png: "png",
299
+ svg: "svg",
300
+ wav: "wav",
301
+ webm: "webm",
302
+ webp: "webp"
303
+ };
304
+
305
+ // src/obsidian/implementations/constants/InternalPluginName.ts
306
+ var InternalPluginName = {
307
+ /**
308
+ * Plugin name in UI: Audio recorder.
309
+ */
310
+ AudioRecorder: "audio-recorder",
311
+ /**
312
+ * Plugin name in UI: Backlinks.
313
+ */
314
+ Backlink: "backlink",
315
+ /**
316
+ * Plugin name in UI: Bases.
317
+ */
318
+ Bases: "bases",
319
+ /**
320
+ * Plugin name in UI: Bookmarks.
321
+ */
322
+ Bookmarks: "bookmarks",
323
+ /**
324
+ * Plugin name in UI: Canvas.
325
+ */
326
+ Canvas: "canvas",
327
+ /**
328
+ * Plugin name in UI: Command palette.
329
+ */
330
+ CommandPalette: "command-palette",
331
+ /**
332
+ * Plugin name in UI: Daily notes.
333
+ */
334
+ DailyNotes: "daily-notes",
335
+ /**
336
+ * Plugin name in UI: (hidden).
337
+ */
338
+ EditorStatus: "editor-status",
339
+ /**
340
+ * Plugin name in UI: Files.
341
+ */
342
+ FileExplorer: "file-explorer",
343
+ /**
344
+ * Plugin name in UI: File recovery.
345
+ */
346
+ FileRecovery: "file-recovery",
347
+ /**
348
+ * Plugin name in UI: Footnotes.
349
+ */
350
+ Footnotes: "footnotes",
351
+ /**
352
+ * Plugin name in UI: Search.
353
+ */
354
+ GlobalSearch: "global-search",
355
+ /**
356
+ * Plugin name in UI: Graph view.
357
+ */
358
+ Graph: "graph",
359
+ /**
360
+ * Plugin name in UI: Format converter.
361
+ */
362
+ MarkdownImporter: "markdown-importer",
363
+ /**
364
+ * Plugin name in UI: Note composer.
365
+ */
366
+ NoteComposer: "note-composer",
367
+ /**
368
+ * Plugin name in UI: Outgoing links.
369
+ */
370
+ OutgoingLink: "outgoing-link",
371
+ /**
372
+ * Plugin name in UI: Outline.
373
+ */
374
+ Outline: "outline",
375
+ /**
376
+ * Plugin name in UI: Page preview.
377
+ */
378
+ PagePreview: "page-preview",
379
+ /**
380
+ * Plugin name in UI: Properties view.
381
+ */
382
+ Properties: "properties",
383
+ /**
384
+ * Plugin name in UI: Publish.
385
+ */
386
+ Publish: "publish",
387
+ /**
388
+ * Plugin name in UI: Random note.
389
+ */
390
+ RandomNote: "random-note",
391
+ /**
392
+ * Plugin name in UI: Slash commands.
393
+ */
394
+ SlashCommand: "slash-command",
395
+ /**
396
+ * Plugin name in UI: Slides.
397
+ */
398
+ Slides: "slides",
399
+ /**
400
+ * Plugin name in UI: Quick Switcher.
401
+ */
402
+ Switcher: "switcher",
403
+ /**
404
+ * Plugin name in UI: Sync.
405
+ */
406
+ Sync: "sync",
407
+ /**
408
+ * Plugin name in UI: Tags view.
409
+ */
410
+ TagPane: "tag-pane",
411
+ /**
412
+ * Plugin name in UI: Templates.
413
+ */
414
+ Templates: "templates",
415
+ /**
416
+ * Plugin name in UI: Web viewer.
417
+ */
418
+ Webviewer: "webviewer",
419
+ /**
420
+ * Plugin name in UI: Word count.
421
+ */
422
+ WordCount: "word-count",
423
+ /**
424
+ * Plugin name in UI: Workspaces.
425
+ */
426
+ Workspaces: "workspaces",
427
+ /**
428
+ * Plugin name in UI: Unique note creator.
429
+ */
430
+ ZkPrefixer: "zk-prefixer"
431
+ };
432
+
433
+ // src/obsidian/implementations/constants/ViewType.ts
434
+ var ViewType = {
435
+ AllProperties: "all-properties",
436
+ Audio: "audio",
437
+ Backlink: InternalPluginName.Backlink,
438
+ Bases: InternalPluginName.Bases,
439
+ Bookmarks: InternalPluginName.Bookmarks,
440
+ Canvas: InternalPluginName.Canvas,
441
+ Empty: "empty",
442
+ FileExplorer: InternalPluginName.FileExplorer,
443
+ FileProperties: "file-properties",
444
+ Graph: InternalPluginName.Graph,
445
+ Image: "image",
446
+ LocalGraph: "localgraph",
447
+ Markdown: "markdown",
448
+ OutgoingLink: InternalPluginName.OutgoingLink,
449
+ Outline: InternalPluginName.Outline,
450
+ Pdf: "pdf",
451
+ ReleaseNotes: "release-notes",
452
+ Search: "search",
453
+ Sync: "sync",
454
+ Tag: "tag",
455
+ Video: "video",
456
+ Webviewer: "webviewer",
457
+ WebviewerHistory: "webviewer-history"
458
+ };
459
+
460
+ // src/obsidian/implementations/constructors/augmentations/bases/getBasesEntryConstructor.ts
461
+ var import_obsidian = require("obsidian");
462
+ function getBasesEntryConstructor() {
463
+ return import_obsidian.BasesEntry;
464
+ }
465
+
466
+ // src/obsidian/implementations/constructors/augmentations/bases/getBasesEntryGroupConstructor.ts
467
+ var import_obsidian2 = require("obsidian");
468
+ function getBasesEntryGroupConstructor() {
469
+ return import_obsidian2.BasesEntryGroup;
470
+ }
471
+
472
+ // src/obsidian/implementations/constructors/augmentations/bases/getBasesQueryResultConstructor.ts
473
+ var import_obsidian3 = require("obsidian");
474
+ function getBasesQueryResultConstructor() {
475
+ return import_obsidian3.BasesQueryResult;
476
+ }
477
+
478
+ // src/obsidian/implementations/constructors/augmentations/bases/getBasesViewConfigConstructor.ts
479
+ var import_obsidian4 = require("obsidian");
480
+ function getBasesViewConfigConstructor() {
481
+ return import_obsidian4.BasesViewConfig;
482
+ }
483
+
484
+ // src/obsidian/implementations/constructors/augmentations/bases/getQueryControllerConstructor.ts
485
+ var import_obsidian5 = require("obsidian");
486
+ function getQueryControllerConstructor() {
487
+ return import_obsidian5.QueryController;
488
+ }
489
+
490
+ // src/obsidian/implementations/constructors/augmentations/getAppConstructor.ts
491
+ var import_obsidian6 = require("obsidian");
492
+ function getAppConstructor() {
493
+ return import_obsidian6.App;
494
+ }
495
+
496
+ // src/obsidian/implementations/constructors/augmentations/getCapacitorAdapterConstructor.ts
497
+ var import_obsidian7 = require("obsidian");
498
+ function getCapacitorAdapterConstructor() {
499
+ return import_obsidian7.CapacitorAdapter;
500
+ }
501
+
502
+ // src/obsidian/implementations/constructors/augmentations/getConfirmationModalConstructor.ts
503
+ var import_obsidian8 = require("obsidian");
504
+ function getConfirmationModalConstructor() {
505
+ return import_obsidian8.ConfirmationModal;
506
+ }
507
+
508
+ // src/obsidian/implementations/constructors/augmentations/getEditorConstructor.ts
509
+ var import_obsidian9 = require("obsidian");
510
+ function getEditorConstructor() {
511
+ return import_obsidian9.Editor;
512
+ }
513
+
514
+ // src/obsidian/implementations/constructors/augmentations/getEventsConstructor.ts
515
+ var import_obsidian10 = require("obsidian");
516
+ function getEventsConstructor() {
517
+ return import_obsidian10.Events;
518
+ }
519
+
520
+ // src/obsidian/implementations/constructors/augmentations/getFileManagerConstructor.ts
521
+ var import_obsidian11 = require("obsidian");
522
+ function getFileManagerConstructor() {
523
+ return import_obsidian11.FileManager;
524
+ }
525
+
526
+ // src/obsidian/implementations/constructors/augmentations/getFileSystemAdapterConstructor.ts
527
+ var import_obsidian12 = require("obsidian");
528
+ function getFileSystemAdapterConstructor() {
529
+ return import_obsidian12.FileSystemAdapter;
530
+ }
531
+
532
+ // src/obsidian/implementations/constructors/augmentations/getFuzzySuggestModalConstructor.ts
533
+ var import_obsidian13 = require("obsidian");
534
+ function getFuzzySuggestModalConstructor() {
535
+ return import_obsidian13.FuzzySuggestModal;
536
+ }
537
+
538
+ // src/obsidian/implementations/constructors/augmentations/getHoverPopoverConstructor.ts
539
+ var import_obsidian14 = require("obsidian");
540
+ function getHoverPopoverConstructor() {
541
+ return import_obsidian14.HoverPopover;
542
+ }
543
+
544
+ // src/obsidian/implementations/constructors/augmentations/getKeymapConstructor.ts
545
+ var import_obsidian15 = require("obsidian");
546
+ function getKeymapConstructor() {
547
+ return import_obsidian15.Keymap;
548
+ }
549
+
550
+ // src/obsidian/implementations/constructors/augmentations/getMarkdownPreviewRendererConstructor.ts
551
+ var import_obsidian16 = require("obsidian");
552
+ function getMarkdownPreviewRendererConstructor() {
553
+ return import_obsidian16.MarkdownPreviewRenderer;
554
+ }
555
+
556
+ // src/obsidian/implementations/constructors/augmentations/getMarkdownPreviewViewConstructor.ts
557
+ var import_obsidian17 = require("obsidian");
558
+ function getMarkdownPreviewViewConstructor() {
559
+ return import_obsidian17.MarkdownPreviewView;
560
+ }
561
+
562
+ // src/obsidian/implementations/constructors/augmentations/getMarkdownRenderChildConstructor.ts
563
+ var import_obsidian18 = require("obsidian");
564
+ function getMarkdownRenderChildConstructor() {
565
+ return import_obsidian18.MarkdownRenderChild;
566
+ }
567
+
568
+ // src/obsidian/implementations/constructors/augmentations/getMarkdownRendererConstructor.ts
569
+ var import_obsidian19 = require("obsidian");
570
+ function getMarkdownRendererConstructor() {
571
+ return import_obsidian19.MarkdownRenderer;
572
+ }
573
+
574
+ // src/obsidian/implementations/constructors/augmentations/getMenuConstructor.ts
575
+ var import_obsidian20 = require("obsidian");
576
+ function getMenuConstructor() {
577
+ return import_obsidian20.Menu;
578
+ }
579
+
580
+ // src/obsidian/implementations/constructors/augmentations/getMenuItemConstructor.ts
581
+ var import_obsidian21 = require("obsidian");
582
+ function getMenuItemConstructor() {
583
+ return import_obsidian21.MenuItem;
584
+ }
585
+
586
+ // src/obsidian/implementations/constructors/augmentations/getMenuSeparatorConstructor.ts
587
+ var import_obsidian22 = require("obsidian");
588
+ function getMenuSeparatorConstructor() {
589
+ return import_obsidian22.MenuSeparator;
590
+ }
591
+
592
+ // src/obsidian/implementations/constructors/augmentations/getMetadataCacheConstructor.ts
593
+ var import_obsidian23 = require("obsidian");
594
+ function getMetadataCacheConstructor() {
595
+ return import_obsidian23.MetadataCache;
596
+ }
597
+
598
+ // src/obsidian/implementations/constructors/augmentations/getModalConstructor.ts
599
+ var import_obsidian24 = require("obsidian");
600
+ function getModalConstructor() {
601
+ return import_obsidian24.Modal;
602
+ }
603
+
604
+ // src/obsidian/implementations/constructors/augmentations/getNoticeConstructor.ts
605
+ var import_obsidian25 = require("obsidian");
606
+ function getNoticeConstructor() {
607
+ return import_obsidian25.Notice;
608
+ }
609
+
610
+ // src/obsidian/implementations/constructors/augmentations/getRenderContextConstructor.ts
611
+ var import_obsidian26 = require("obsidian");
612
+ function getRenderContextConstructor() {
613
+ return import_obsidian26.RenderContext;
614
+ }
615
+
616
+ // src/obsidian/implementations/constructors/augmentations/getScopeConstructor.ts
617
+ var import_obsidian27 = require("obsidian");
618
+ function getScopeConstructor() {
619
+ return import_obsidian27.Scope;
620
+ }
621
+
622
+ // src/obsidian/implementations/constructors/augmentations/getSecretStorageConstructor.ts
623
+ var import_obsidian28 = require("obsidian");
624
+ function getSecretStorageConstructor() {
625
+ return import_obsidian28.SecretStorage;
626
+ }
627
+
628
+ // src/obsidian/implementations/constructors/augmentations/getSettingConstructor.ts
629
+ var import_obsidian29 = require("obsidian");
630
+ function getSettingConstructor() {
631
+ return import_obsidian29.Setting;
632
+ }
633
+
634
+ // src/obsidian/implementations/constructors/augmentations/getSettingGroupConstructor.ts
635
+ var import_obsidian30 = require("obsidian");
636
+ function getSettingGroupConstructor() {
637
+ return import_obsidian30.SettingGroup;
638
+ }
639
+
640
+ // src/obsidian/implementations/constructors/augmentations/getSettingPageConstructor.ts
641
+ var import_obsidian31 = require("obsidian");
642
+ function getSettingPageConstructor() {
643
+ return import_obsidian31.SettingPage;
644
+ }
645
+
646
+ // src/obsidian/implementations/constructors/augmentations/getSettingTabConstructor.ts
647
+ var import_obsidian32 = require("obsidian");
648
+ function getSettingTabConstructor() {
649
+ return import_obsidian32.SettingTab;
650
+ }
651
+
652
+ // src/obsidian/implementations/constructors/augmentations/getTAbstractFileConstructor.ts
653
+ var import_obsidian33 = require("obsidian");
654
+ function getTAbstractFileConstructor() {
655
+ return import_obsidian33.TAbstractFile;
656
+ }
657
+
658
+ // src/obsidian/implementations/constructors/augmentations/getTasksConstructor.ts
659
+ var import_obsidian34 = require("obsidian");
660
+ function getTasksConstructor() {
661
+ return import_obsidian34.Tasks;
662
+ }
663
+
664
+ // src/obsidian/implementations/constructors/augmentations/getTFileConstructor.ts
665
+ var import_obsidian35 = require("obsidian");
666
+ function getTFileConstructor() {
667
+ return import_obsidian35.TFile;
668
+ }
669
+
670
+ // src/obsidian/implementations/constructors/augmentations/getTFolderConstructor.ts
671
+ var import_obsidian36 = require("obsidian");
672
+ function getTFolderConstructor() {
673
+ return import_obsidian36.TFolder;
674
+ }
675
+
676
+ // src/obsidian/implementations/constructors/augmentations/getVaultConstructor.ts
677
+ var import_obsidian37 = require("obsidian");
678
+ function getVaultConstructor() {
679
+ return import_obsidian37.Vault;
680
+ }
681
+
682
+ // src/obsidian/implementations/constructors/augmentations/getWorkspaceConstructor.ts
683
+ var import_obsidian38 = require("obsidian");
684
+ function getWorkspaceConstructor() {
685
+ return import_obsidian38.Workspace;
686
+ }
687
+
688
+ // src/obsidian/implementations/constructors/augmentations/getWorkspaceContainerConstructor.ts
689
+ var import_obsidian39 = require("obsidian");
690
+ function getWorkspaceContainerConstructor() {
691
+ return import_obsidian39.WorkspaceContainer;
692
+ }
693
+
694
+ // src/obsidian/implementations/constructors/augmentations/getWorkspaceFloatingConstructor.ts
695
+ var import_obsidian40 = require("obsidian");
696
+ function getWorkspaceFloatingConstructor() {
697
+ return import_obsidian40.WorkspaceFloating;
698
+ }
699
+
700
+ // src/obsidian/implementations/constructors/augmentations/getWorkspaceItemConstructor.ts
701
+ var import_obsidian41 = require("obsidian");
702
+ function getWorkspaceItemConstructor() {
703
+ return import_obsidian41.WorkspaceItem;
704
+ }
705
+
706
+ // src/obsidian/implementations/constructors/augmentations/getWorkspaceLeafConstructor.ts
707
+ var import_obsidian42 = require("obsidian");
708
+ function getWorkspaceLeafConstructor() {
709
+ return import_obsidian42.WorkspaceLeaf;
710
+ }
711
+
712
+ // src/obsidian/implementations/constructors/augmentations/getWorkspaceMobileDrawerConstructor.ts
713
+ var import_obsidian43 = require("obsidian");
714
+ function getWorkspaceMobileDrawerConstructor() {
715
+ return import_obsidian43.WorkspaceMobileDrawer;
716
+ }
717
+
718
+ // src/obsidian/implementations/constructors/augmentations/getWorkspaceParentConstructor.ts
719
+ var import_obsidian44 = require("obsidian");
720
+ function getWorkspaceParentConstructor() {
721
+ return import_obsidian44.WorkspaceParent;
722
+ }
723
+
724
+ // src/obsidian/implementations/constructors/augmentations/getWorkspaceRibbonConstructor.ts
725
+ var import_obsidian45 = require("obsidian");
726
+ function getWorkspaceRibbonConstructor() {
727
+ return import_obsidian45.WorkspaceRibbon;
728
+ }
729
+
730
+ // src/obsidian/implementations/constructors/augmentations/getWorkspaceRootConstructor.ts
731
+ var import_obsidian46 = require("obsidian");
732
+ function getWorkspaceRootConstructor() {
733
+ return import_obsidian46.WorkspaceRoot;
734
+ }
735
+
736
+ // src/obsidian/implementations/constructors/augmentations/getWorkspaceSidedockConstructor.ts
737
+ var import_obsidian47 = require("obsidian");
738
+ function getWorkspaceSidedockConstructor() {
739
+ return import_obsidian47.WorkspaceSidedock;
740
+ }
741
+
742
+ // src/obsidian/implementations/constructors/augmentations/getWorkspaceSplitConstructor.ts
743
+ var import_obsidian48 = require("obsidian");
744
+ function getWorkspaceSplitConstructor() {
745
+ return import_obsidian48.WorkspaceSplit;
746
+ }
747
+
748
+ // src/obsidian/implementations/constructors/augmentations/getWorkspaceTabsConstructor.ts
749
+ var import_obsidian49 = require("obsidian");
750
+ function getWorkspaceTabsConstructor() {
751
+ return import_obsidian49.WorkspaceTabs;
752
+ }
753
+
754
+ // src/obsidian/implementations/constructors/augmentations/getWorkspaceWindowConstructor.ts
755
+ var import_obsidian50 = require("obsidian");
756
+ function getWorkspaceWindowConstructor() {
757
+ return import_obsidian50.WorkspaceWindow;
758
+ }
759
+
760
+ // src/obsidian/implementations/constructors/augmentations/settings/setting-components/getAbstractTextComponentConstructor.ts
761
+ var import_obsidian51 = require("obsidian");
762
+ function getAbstractTextComponentConstructor() {
763
+ return import_obsidian51.AbstractTextComponent;
764
+ }
765
+
766
+ // src/obsidian/implementations/constructors/augmentations/settings/setting-components/getBaseComponentConstructor.ts
767
+ var import_obsidian52 = require("obsidian");
768
+ function getBaseComponentConstructor() {
769
+ return import_obsidian52.BaseComponent;
770
+ }
771
+
772
+ // src/obsidian/implementations/constructors/augmentations/settings/setting-components/getButtonComponentConstructor.ts
773
+ var import_obsidian53 = require("obsidian");
774
+ function getButtonComponentConstructor() {
775
+ return import_obsidian53.ButtonComponent;
776
+ }
777
+
778
+ // src/obsidian/implementations/constructors/augmentations/settings/setting-components/getColorComponentConstructor.ts
779
+ var import_obsidian54 = require("obsidian");
780
+ function getColorComponentConstructor() {
781
+ return import_obsidian54.ColorComponent;
782
+ }
783
+
784
+ // src/obsidian/implementations/constructors/augmentations/settings/setting-components/getComponentConstructor.ts
785
+ var import_obsidian55 = require("obsidian");
786
+ function getComponentConstructor() {
787
+ return import_obsidian55.Component;
788
+ }
789
+
790
+ // src/obsidian/implementations/constructors/augmentations/settings/setting-components/getConfirmationButtonConstructor.ts
791
+ var import_obsidian56 = require("obsidian");
792
+ function getConfirmationButtonConstructor() {
793
+ return import_obsidian56.ConfirmationButton;
794
+ }
795
+
796
+ // src/obsidian/implementations/constructors/augmentations/settings/setting-components/getDisplayValueComponentConstructor.ts
797
+ var import_obsidian57 = require("obsidian");
798
+ function getDisplayValueComponentConstructor() {
799
+ return import_obsidian57.DisplayValueComponent;
800
+ }
801
+
802
+ // src/obsidian/implementations/constructors/augmentations/settings/setting-components/getDropdownComponentConstructor.ts
803
+ var import_obsidian58 = require("obsidian");
804
+ function getDropdownComponentConstructor() {
805
+ return import_obsidian58.DropdownComponent;
806
+ }
807
+
808
+ // src/obsidian/implementations/constructors/augmentations/settings/setting-components/getExtraButtonComponentConstructor.ts
809
+ var import_obsidian59 = require("obsidian");
810
+ function getExtraButtonComponentConstructor() {
811
+ return import_obsidian59.ExtraButtonComponent;
812
+ }
813
+
814
+ // src/obsidian/implementations/constructors/augmentations/settings/setting-components/getMomentFormatComponentConstructor.ts
815
+ var import_obsidian60 = require("obsidian");
816
+ function getMomentFormatComponentConstructor() {
817
+ return import_obsidian60.MomentFormatComponent;
818
+ }
819
+
820
+ // src/obsidian/implementations/constructors/augmentations/settings/setting-components/getProgressBarComponentConstructor.ts
821
+ var import_obsidian61 = require("obsidian");
822
+ function getProgressBarComponentConstructor() {
823
+ return import_obsidian61.ProgressBarComponent;
824
+ }
825
+
826
+ // src/obsidian/implementations/constructors/augmentations/settings/setting-components/getSearchComponentConstructor.ts
827
+ var import_obsidian62 = require("obsidian");
828
+ function getSearchComponentConstructor() {
829
+ return import_obsidian62.SearchComponent;
830
+ }
831
+
832
+ // src/obsidian/implementations/constructors/augmentations/settings/setting-components/getSecretComponentConstructor.ts
833
+ var import_obsidian63 = require("obsidian");
834
+ function getSecretComponentConstructor() {
835
+ return import_obsidian63.SecretComponent;
836
+ }
837
+
838
+ // src/obsidian/implementations/constructors/augmentations/settings/setting-components/getSliderComponentConstructor.ts
839
+ var import_obsidian64 = require("obsidian");
840
+ function getSliderComponentConstructor() {
841
+ return import_obsidian64.SliderComponent;
842
+ }
843
+
844
+ // src/obsidian/implementations/constructors/augmentations/settings/setting-components/getTextAreaComponentConstructor.ts
845
+ var import_obsidian65 = require("obsidian");
846
+ function getTextAreaComponentConstructor() {
847
+ return import_obsidian65.TextAreaComponent;
848
+ }
849
+
850
+ // src/obsidian/implementations/constructors/augmentations/settings/setting-components/getTextComponentConstructor.ts
851
+ var import_obsidian66 = require("obsidian");
852
+ function getTextComponentConstructor() {
853
+ return import_obsidian66.TextComponent;
854
+ }
855
+
856
+ // src/obsidian/implementations/constructors/augmentations/settings/setting-components/getToggleComponentConstructor.ts
857
+ var import_obsidian67 = require("obsidian");
858
+ function getToggleComponentConstructor() {
859
+ return import_obsidian67.ToggleComponent;
860
+ }
861
+
862
+ // src/obsidian/implementations/constructors/augmentations/settings/setting-components/getValueComponentConstructor.ts
863
+ var import_obsidian68 = require("obsidian");
864
+ function getValueComponentConstructor() {
865
+ return import_obsidian68.ValueComponent;
866
+ }
867
+
868
+ // src/obsidian/implementations/constructors/augmentations/values/getBooleanValueConstructor.ts
869
+ var import_obsidian69 = require("obsidian");
870
+ function getBooleanValueConstructor() {
871
+ return import_obsidian69.BooleanValue;
872
+ }
873
+
874
+ // src/obsidian/implementations/constructors/augmentations/values/getDateValueConstructor.ts
875
+ var import_obsidian70 = require("obsidian");
876
+ function getDateValueConstructor() {
877
+ return import_obsidian70.DateValue;
878
+ }
879
+
880
+ // src/obsidian/implementations/constructors/augmentations/values/getDurationValueConstructor.ts
881
+ var import_obsidian71 = require("obsidian");
882
+ function getDurationValueConstructor() {
883
+ return import_obsidian71.DurationValue;
884
+ }
885
+
886
+ // src/obsidian/implementations/constructors/augmentations/values/getFileValueConstructor.ts
887
+ var import_obsidian72 = require("obsidian");
888
+ function getFileValueConstructor() {
889
+ return import_obsidian72.FileValue;
890
+ }
891
+
892
+ // src/obsidian/implementations/constructors/augmentations/values/getHTMLValueConstructor.ts
893
+ var import_obsidian73 = require("obsidian");
894
+ function getHTMLValueConstructor() {
895
+ return import_obsidian73.HTMLValue;
896
+ }
897
+
898
+ // src/obsidian/implementations/constructors/augmentations/values/getIconValueConstructor.ts
899
+ var import_obsidian74 = require("obsidian");
900
+ function getIconValueConstructor() {
901
+ return import_obsidian74.IconValue;
902
+ }
903
+
904
+ // src/obsidian/implementations/constructors/augmentations/values/getImageValueConstructor.ts
905
+ var import_obsidian75 = require("obsidian");
906
+ function getImageValueConstructor() {
907
+ return import_obsidian75.ImageValue;
908
+ }
909
+
910
+ // src/obsidian/implementations/constructors/augmentations/values/getLinkValueConstructor.ts
911
+ var import_obsidian76 = require("obsidian");
912
+ function getLinkValueConstructor() {
913
+ return import_obsidian76.LinkValue;
914
+ }
915
+
916
+ // src/obsidian/implementations/constructors/augmentations/values/getListValueConstructor.ts
917
+ var import_obsidian77 = require("obsidian");
918
+ function getListValueConstructor() {
919
+ return import_obsidian77.ListValue;
920
+ }
921
+
922
+ // src/obsidian/implementations/constructors/augmentations/values/getNotNullValueConstructor.ts
923
+ var import_obsidian78 = require("obsidian");
924
+ function getNotNullValueConstructor() {
925
+ return import_obsidian78.NotNullValue;
926
+ }
927
+
928
+ // src/obsidian/implementations/constructors/augmentations/values/getNullValueConstructor.ts
929
+ var import_obsidian79 = require("obsidian");
930
+ function getNullValueConstructor() {
931
+ return import_obsidian79.NullValue;
932
+ }
933
+
934
+ // src/obsidian/implementations/constructors/augmentations/values/getNumberValueConstructor.ts
935
+ var import_obsidian80 = require("obsidian");
936
+ function getNumberValueConstructor() {
937
+ return import_obsidian80.NumberValue;
938
+ }
939
+
940
+ // src/obsidian/implementations/constructors/augmentations/values/getObjectValueConstructor.ts
941
+ var import_obsidian81 = require("obsidian");
942
+ function getObjectValueConstructor() {
943
+ return import_obsidian81.ObjectValue;
944
+ }
945
+
946
+ // src/obsidian/implementations/constructors/augmentations/values/getRegExpValueConstructor.ts
947
+ var import_obsidian82 = require("obsidian");
948
+ function getRegExpValueConstructor() {
949
+ return import_obsidian82.RegExpValue;
950
+ }
951
+
952
+ // src/obsidian/implementations/constructors/augmentations/values/getRelativeDateValueConstructor.ts
953
+ var import_obsidian83 = require("obsidian");
954
+ function getRelativeDateValueConstructor() {
955
+ return import_obsidian83.RelativeDateValue;
956
+ }
957
+
958
+ // src/obsidian/implementations/constructors/augmentations/values/getStringValueConstructor.ts
959
+ var import_obsidian84 = require("obsidian");
960
+ function getStringValueConstructor() {
961
+ return import_obsidian84.StringValue;
962
+ }
963
+
964
+ // src/obsidian/implementations/constructors/augmentations/values/getTagValueConstructor.ts
965
+ var import_obsidian85 = require("obsidian");
966
+ function getTagValueConstructor() {
967
+ return import_obsidian85.TagValue;
968
+ }
969
+
970
+ // src/obsidian/implementations/constructors/augmentations/values/getUrlValueConstructor.ts
971
+ var import_obsidian86 = require("obsidian");
972
+ function getUrlValueConstructor() {
973
+ return import_obsidian86.UrlValue;
974
+ }
975
+
976
+ // src/obsidian/implementations/constructors/augmentations/values/getValueConstructor.ts
977
+ var import_obsidian87 = require("obsidian");
978
+ function getValueConstructor() {
979
+ return import_obsidian87.Value;
980
+ }
981
+
982
+ // src/obsidian/implementations/constructors/augmentations/views/getEditableFileViewConstructor.ts
983
+ var import_obsidian88 = require("obsidian");
984
+ function getEditableFileViewConstructor() {
985
+ return import_obsidian88.EditableFileView;
986
+ }
987
+
988
+ // src/obsidian/implementations/constructors/augmentations/views/getMarkdownViewConstructor.ts
989
+ var import_obsidian89 = require("obsidian");
990
+ function getMarkdownViewConstructor() {
991
+ return import_obsidian89.MarkdownView;
992
+ }
993
+
994
+ // src/obsidian/implementations/constructors/internals/getAppMenuBarManagerConstructor.ts
995
+ function getAppMenuBarManagerConstructor(app) {
996
+ return app.appMenuBarManager.constructor;
997
+ }
998
+
999
+ // src/obsidian/implementations/constructors/internals/getAppSettingConstructor.ts
1000
+ function getAppSettingConstructor(app) {
1001
+ return app.setting.constructor;
1002
+ }
1003
+
1004
+ // src/obsidian/implementations/constructors/internals/getCliConstructor.ts
1005
+ function getCliConstructor(app) {
1006
+ return app.cli.constructor;
1007
+ }
1008
+
1009
+ // src/obsidian/implementations/constructors/internals/getCommandsConstructor.ts
1010
+ function getCommandsConstructor(app) {
1011
+ return app.commands.constructor;
1012
+ }
1013
+
1014
+ // src/obsidian/implementations/constructors/internals/getCustomCSSConstructor.ts
1015
+ function getCustomCSSConstructor(app) {
1016
+ return app.customCss.constructor;
1017
+ }
1018
+
1019
+ // src/obsidian/implementations/constructors/internals/getDragManagerConstructor.ts
1020
+ function getDragManagerConstructor(app) {
1021
+ return app.dragManager.constructor;
1022
+ }
1023
+
1024
+ // src/obsidian/implementations/constructors/internals/getEditorSuggestsConstructor.ts
1025
+ function getEditorSuggestsConstructor(app) {
1026
+ return app.workspace.editorSuggest.constructor;
1027
+ }
1028
+
1029
+ // src/obsidian/implementations/constructors/internals/getEmbedRegistryConstructor.ts
1030
+ function getEmbedRegistryConstructor(app) {
1031
+ return app.embedRegistry.constructor;
1032
+ }
1033
+
1034
+ // src/obsidian/implementations/constructors/internals/getFoldManagerConstructor.ts
1035
+ function getFoldManagerConstructor(app) {
1036
+ return app.foldManager.constructor;
1037
+ }
1038
+
1039
+ // src/obsidian/implementations/constructors/internals/getFrameDomConstructor.ts
1040
+ function getFrameDomConstructor() {
1041
+ return window.frameDom.constructor;
1042
+ }
1043
+
1044
+ // src/obsidian/implementations/constructors/internals/getHotkeyManagerConstructor.ts
1045
+ function getHotkeyManagerConstructor(app) {
1046
+ return app.hotkeyManager.constructor;
1047
+ }
1048
+
1049
+ // src/obsidian/implementations/constructors/internals/getMetadataTypeManagerConstructor.ts
1050
+ function getMetadataTypeManagerConstructor(app) {
1051
+ return app.metadataTypeManager.constructor;
1052
+ }
1053
+
1054
+ // src/obsidian/implementations/constructors/internals/getObsidianDOMConstructor.ts
1055
+ function getObsidianDOMConstructor(app) {
1056
+ return app.dom.constructor;
1057
+ }
1058
+
1059
+ // src/obsidian/implementations/constructors/internals/getPluginsConstructor.ts
1060
+ function getPluginsConstructor(app) {
1061
+ return app.plugins.constructor;
1062
+ }
1063
+
1064
+ // src/obsidian/implementations/constructors/internals/getRecentFileTrackerConstructor.ts
1065
+ function getRecentFileTrackerConstructor(app) {
1066
+ return app.workspace.recentFileTracker.constructor;
1067
+ }
1068
+
1069
+ // src/obsidian/implementations/constructors/internals/getShareReceiverConstructor.ts
1070
+ function getShareReceiverConstructor(app) {
1071
+ return app.shareReceiver.constructor;
1072
+ }
1073
+
1074
+ // src/obsidian/implementations/constructors/internals/getStatusBarConstructor.ts
1075
+ function getStatusBarConstructor(app) {
1076
+ return app.statusBar.constructor;
1077
+ }
1078
+
1079
+ // src/obsidian/implementations/constructors/internals/getViewRegistryConstructor.ts
1080
+ function getViewRegistryConstructor(app) {
1081
+ return app.viewRegistry.constructor;
1082
+ }
1083
+
1084
+ // src/obsidian/implementations/constructors/internals/getWorkspaceLeafHistoryConstructor.ts
1085
+ function getWorkspaceLeafHistoryConstructor(app) {
1086
+ const leaf = app.workspace.getMostRecentLeaf();
1087
+ if (!leaf) {
1088
+ throw new Error("No workspace leaf available to extract WorkspaceLeafHistory constructor");
1089
+ }
1090
+ return leaf.history.constructor;
1091
+ }
1092
+
1093
+ // src/obsidian/implementations/constructors/internals/internal-plugins/bases/getBasesContextConstructor.ts
1094
+ function getBasesContextConstructor(app) {
1095
+ const basesPlugin = app.internalPlugins.getPluginById(InternalPluginName.Bases);
1096
+ if (!basesPlugin) {
1097
+ throw new Error(`The ${InternalPluginName.Bases} plugin is not loaded.`);
1098
+ }
1099
+ const queryControllerConstructor = getQueryControllerConstructor();
1100
+ const queryController = new queryControllerConstructor(app, basesPlugin.instance, createDiv());
1101
+ queryController.query = {};
1102
+ const basesContext = queryController.buildBasesContext();
1103
+ return basesContext.constructor;
1104
+ }
1105
+
1106
+ // src/obsidian/implementations/constructors/internals/internal-plugins/bases/getBasesQueryConstructor.ts
1107
+ var import_obsidian91 = require("obsidian");
1108
+
1109
+ // src/obsidian/implementations/functions/getBasesControllerFromRender.ts
1110
+ var import_obsidian90 = require("obsidian");
1111
+ async function getBasesControllerFromRender(app, content, sourcePath, component) {
1112
+ const containerEl = createDiv();
1113
+ containerEl.style.position = "absolute";
1114
+ containerEl.style.left = "-9999px";
1115
+ containerEl.style.width = "600px";
1116
+ document.body.appendChild(containerEl);
1117
+ component.register(() => {
1118
+ containerEl.remove();
1119
+ });
1120
+ await import_obsidian90.MarkdownRenderer.render(app, `\`\`\`base
1121
+ ${content}
1122
+ \`\`\`
1123
+ `, containerEl, sourcePath, component);
1124
+ const queue = [component];
1125
+ const seen = /* @__PURE__ */ new Set();
1126
+ while (queue.length > 0) {
1127
+ const node = queue.shift();
1128
+ if (!node || seen.has(node)) {
1129
+ continue;
1130
+ }
1131
+ seen.add(node);
1132
+ if (node.results instanceof Map && "query" in node) {
1133
+ return node;
1134
+ }
1135
+ for (const child of node._children ?? []) {
1136
+ queue.push(child);
1137
+ }
1138
+ }
1139
+ throw new Error("Could not locate the BasesController in the rendered component tree.");
1140
+ }
1141
+
1142
+ // src/obsidian/implementations/constructors/internals/internal-plugins/bases/getBasesQueryConstructor.ts
1143
+ async function getBasesQueryConstructor(app) {
1144
+ const component = new import_obsidian91.Component();
1145
+ try {
1146
+ const controller = await getBasesControllerFromRender(app, "views: []\n", "getBasesQueryConstructor.base", component);
1147
+ const query = controller.query;
1148
+ if (!query) {
1149
+ throw new Error("The rendered base did not produce a query.");
1150
+ }
1151
+ return query.constructor;
1152
+ } finally {
1153
+ component.unload();
1154
+ }
1155
+ }
1156
+
1157
+ // src/obsidian/implementations/constructors/internals/internal-plugins/getInternalPluginConstructor.ts
1158
+ function getInternalPluginConstructor(app) {
1159
+ const anyPlugin = Object.values(app.internalPlugins.plugins)[0];
1160
+ if (!anyPlugin) {
1161
+ throw new Error("No internal plugin found");
1162
+ }
1163
+ return anyPlugin.constructor;
1164
+ }
1165
+
1166
+ // src/obsidian/implementations/constructors/internals/internal-plugins/getInternalPluginsConstructor.ts
1167
+ function getInternalPluginsConstructor(app) {
1168
+ return app.internalPlugins.constructor;
1169
+ }
1170
+
1171
+ // src/obsidian/implementations/constructors/internals/views/getViewConstructorByViewType.ts
1172
+ function getViewConstructorByViewType(app, viewType) {
1173
+ const leaf = app.workspace.createLeafInTabGroup();
1174
+ try {
1175
+ const viewCreator = app.viewRegistry.getViewCreatorByType(viewType);
1176
+ if (!viewCreator) {
1177
+ throw new Error("View creator not found");
1178
+ }
1179
+ const view = viewCreator(leaf);
1180
+ return view.constructor;
1181
+ } finally {
1182
+ leaf.detach();
1183
+ }
1184
+ }
1185
+
1186
+ // src/obsidian/implementations/constructors/internals/views/getAllPropertiesViewConstructor.ts
1187
+ function getAllPropertiesViewConstructor(app) {
1188
+ return getViewConstructorByViewType(app, ViewType.AllProperties);
1189
+ }
1190
+
1191
+ // src/obsidian/implementations/constructors/internals/views/getAudioViewConstructor.ts
1192
+ function getAudioViewConstructor(app) {
1193
+ return getViewConstructorByViewType(app, ViewType.Audio);
1194
+ }
1195
+
1196
+ // src/obsidian/implementations/constructors/internals/views/getBacklinkViewConstructor.ts
1197
+ function getBacklinkViewConstructor(app) {
1198
+ return getViewConstructorByViewType(app, ViewType.Backlink);
1199
+ }
1200
+
1201
+ // src/obsidian/implementations/constructors/internals/views/getBasesViewConstructor.ts
1202
+ function getBasesViewConstructor(app) {
1203
+ return getViewConstructorByViewType(app, ViewType.Bases);
1204
+ }
1205
+
1206
+ // src/obsidian/implementations/constructors/internals/views/getBookmarksViewConstructor.ts
1207
+ function getBookmarksViewConstructor(app) {
1208
+ return getViewConstructorByViewType(app, ViewType.Bookmarks);
1209
+ }
1210
+
1211
+ // src/obsidian/implementations/constructors/internals/views/getCanvasViewConstructor.ts
1212
+ function getCanvasViewConstructor(app) {
1213
+ return getViewConstructorByViewType(app, ViewType.Canvas);
1214
+ }
1215
+
1216
+ // src/obsidian/implementations/constructors/internals/views/getEmptyViewConstructor.ts
1217
+ function getEmptyViewConstructor(app) {
1218
+ return getViewConstructorByViewType(app, ViewType.Empty);
1219
+ }
1220
+
1221
+ // src/obsidian/implementations/constructors/internals/views/getFileExplorerViewConstructor.ts
1222
+ function getFileExplorerViewConstructor(app) {
1223
+ return getViewConstructorByViewType(app, ViewType.FileExplorer);
1224
+ }
1225
+
1226
+ // src/obsidian/implementations/constructors/internals/views/getFilePropertiesViewConstructor.ts
1227
+ function getFilePropertiesViewConstructor(app) {
1228
+ return getViewConstructorByViewType(app, ViewType.FileProperties);
1229
+ }
1230
+
1231
+ // src/obsidian/implementations/constructors/internals/views/getGraphViewConstructor.ts
1232
+ function getGraphViewConstructor(app) {
1233
+ return getViewConstructorByViewType(app, ViewType.Graph);
1234
+ }
1235
+
1236
+ // src/obsidian/implementations/constructors/internals/views/getImageViewConstructor.ts
1237
+ function getImageViewConstructor(app) {
1238
+ return getViewConstructorByViewType(app, ViewType.Image);
1239
+ }
1240
+
1241
+ // src/obsidian/implementations/constructors/internals/views/getLocalGraphViewConstructor.ts
1242
+ function getLocalGraphViewConstructor(app) {
1243
+ return getViewConstructorByViewType(app, ViewType.LocalGraph);
1244
+ }
1245
+
1246
+ // src/obsidian/implementations/constructors/internals/views/getOutgoingLinkViewConstructor.ts
1247
+ function getOutgoingLinkViewConstructor(app) {
1248
+ return getViewConstructorByViewType(app, ViewType.OutgoingLink);
1249
+ }
1250
+
1251
+ // src/obsidian/implementations/constructors/internals/views/getOutlineViewConstructor.ts
1252
+ function getOutlineViewConstructor(app) {
1253
+ return getViewConstructorByViewType(app, ViewType.Outline);
1254
+ }
1255
+
1256
+ // src/obsidian/implementations/constructors/internals/views/getPdfViewConstructor.ts
1257
+ function getPdfViewConstructor(app) {
1258
+ return getViewConstructorByViewType(app, ViewType.Pdf);
1259
+ }
1260
+
1261
+ // src/obsidian/implementations/constructors/internals/views/getReleaseNotesViewConstructor.ts
1262
+ function getReleaseNotesViewConstructor(app) {
1263
+ return getViewConstructorByViewType(app, ViewType.ReleaseNotes);
1264
+ }
1265
+
1266
+ // src/obsidian/implementations/constructors/internals/views/getSearchViewConstructor.ts
1267
+ function getSearchViewConstructor(app) {
1268
+ return getViewConstructorByViewType(app, ViewType.Search);
1269
+ }
1270
+
1271
+ // src/obsidian/implementations/constructors/internals/views/getSyncViewConstructor.ts
1272
+ function getSyncViewConstructor(app) {
1273
+ return getViewConstructorByViewType(app, ViewType.Sync);
1274
+ }
1275
+
1276
+ // src/obsidian/implementations/constructors/internals/views/getTagViewConstructor.ts
1277
+ function getTagViewConstructor(app) {
1278
+ return getViewConstructorByViewType(app, ViewType.Tag);
1279
+ }
1280
+
1281
+ // src/obsidian/implementations/constructors/internals/views/getVideoViewConstructor.ts
1282
+ function getVideoViewConstructor(app) {
1283
+ return getViewConstructorByViewType(app, ViewType.Video);
1284
+ }
1285
+
1286
+ // src/obsidian/implementations/constructors/internals/views/getWebviewerHistoryViewConstructor.ts
1287
+ function getWebviewerHistoryViewConstructor(app) {
1288
+ return getViewConstructorByViewType(app, ViewType.WebviewerHistory);
1289
+ }
1290
+
1291
+ // src/obsidian/implementations/constructors/internals/views/getWebviewerViewConstructor.ts
1292
+ function getWebviewerViewConstructor(app) {
1293
+ return getViewConstructorByViewType(app, ViewType.Webviewer);
1294
+ }
1295
+
1296
+ // src/obsidian/implementations/constructors/internals/workspace/getWorkspaceProtocolHandlerConstructor.ts
1297
+ function getWorkspaceProtocolHandlerConstructor(app) {
1298
+ return app.workspace.protocolHandler.constructor;
1299
+ }
1300
+
1301
+ // src/obsidian/implementations/utils/PathUtils.ts
1302
+ function parentFolderPath(path) {
1303
+ return path.replace(/\/?[^/]*$/, "") || "/";
1304
+ }
1305
+
1306
+ // src/obsidian/implementations/functions/createTFolderInstance.ts
1307
+ function createTFolderInstance(app, path) {
1308
+ let folder = app.vault.getFolderByPath(path);
1309
+ if (folder) {
1310
+ return folder;
1311
+ }
1312
+ folder = new (getTFolderConstructor())(app.vault, path);
1313
+ folder.parent = createTFolderInstance(app, parentFolderPath(path));
1314
+ folder.deleted = true;
1315
+ return folder;
1316
+ }
1317
+
1318
+ // src/obsidian/implementations/functions/createTFileInstance.ts
1319
+ function createTFileInstance(app, path) {
1320
+ let file = app.vault.getFileByPath(path);
1321
+ if (file) {
1322
+ return file;
1323
+ }
1324
+ file = new (getTFileConstructor())(app.vault, path);
1325
+ file.parent = createTFolderInstance(app, parentFolderPath(path));
1326
+ file.deleted = true;
1327
+ return file;
1328
+ }
1329
+
1330
+ // src/obsidian/implementations/functions/evaluateBaseHeadless.ts
1331
+ var import_obsidian92 = require("obsidian");
1332
+ async function evaluateBaseHeadless(app, content, sourcePath) {
1333
+ const SCAN_POLL_INTERVAL_IN_MILLISECONDS = 50;
1334
+ const SCAN_TIMEOUT_IN_MILLISECONDS = 3e4;
1335
+ const component = new import_obsidian92.Component();
1336
+ try {
1337
+ const controller = await getBasesControllerFromRender(app, content, sourcePath, component);
1338
+ const startTime = performance.now();
1339
+ while (controller.initialScan) {
1340
+ if (performance.now() - startTime > SCAN_TIMEOUT_IN_MILLISECONDS) {
1341
+ throw new Error("Timed out waiting for the base initial scan to settle.");
1342
+ }
1343
+ await new Promise((resolve) => {
1344
+ window.setTimeout(resolve, SCAN_POLL_INTERVAL_IN_MILLISECONDS);
1345
+ });
1346
+ }
1347
+ return Array.from(controller.results.values());
1348
+ } finally {
1349
+ component.unload();
1350
+ }
1351
+ }
1352
+
1353
+ // src/obsidian/implementations/functions/getDataAdapterEx.ts
1354
+ function getDataAdapterEx(app) {
1355
+ return app.vault.adapter;
1356
+ }
1357
+
1358
+ // src/obsidian/implementations/functions/getPlatformEx.ts
1359
+ var import_obsidian93 = require("obsidian");
1360
+ function getPlatformEx() {
1361
+ return import_obsidian93.Platform;
1362
+ }
1363
+
1364
+ // src/obsidian/implementations/functions/loadMermaid.ts
1365
+ var import_obsidian94 = require("obsidian");
1366
+ async function loadMermaid() {
1367
+ return await (0, import_obsidian94.loadMermaid)();
1368
+ }
1369
+
1370
+ // src/obsidian/implementations/functions/loadPdfJs.ts
1371
+ var import_obsidian95 = require("obsidian");
1372
+ async function loadPdfJs() {
1373
+ return await (0, import_obsidian95.loadPdfJs)();
1374
+ }
1375
+
1376
+ // src/obsidian/implementations/functions/loadPrism.ts
1377
+ var import_obsidian96 = require("obsidian");
1378
+ async function loadPrism() {
1379
+ return await (0, import_obsidian96.loadPrism)();
1380
+ }
1381
+
1382
+ // src/obsidian/implementations/type-guards/isReferenceCache.ts
1383
+ function isReferenceCache(reference) {
1384
+ return !!reference.position;
1385
+ }
1386
+
1387
+ // src/obsidian/implementations/type-guards/isEmbedCache.ts
1388
+ function isEmbedCache(reference) {
1389
+ return isReferenceCache(reference) && reference.original[0] === "!";
1390
+ }
1391
+
1392
+ // src/obsidian/implementations/type-guards/isFrontmatterLinkCache.ts
1393
+ function isFrontmatterLinkCache(reference) {
1394
+ return !!reference.key;
1395
+ }
1396
+
1397
+ // src/obsidian/implementations/type-guards/isLinkCache.ts
1398
+ function isLinkCache(reference) {
1399
+ return isReferenceCache(reference) && reference.original[0] !== "!";
1400
+ }
1401
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9pbmRleC50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NsYXNzZXMvQ3VzdG9tQXJyYXlEaWN0SW1wbC50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0YW50cy9GaWxlRXh0ZW5zaW9uLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RhbnRzL0ludGVybmFsUGx1Z2luTmFtZS50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0YW50cy9WaWV3VHlwZS50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2Jhc2VzL2dldEJhc2VzRW50cnlDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2Jhc2VzL2dldEJhc2VzRW50cnlHcm91cENvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvYmFzZXMvZ2V0QmFzZXNRdWVyeVJlc3VsdENvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvYmFzZXMvZ2V0QmFzZXNWaWV3Q29uZmlnQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9iYXNlcy9nZXRRdWVyeUNvbnRyb2xsZXJDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldEFwcENvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0Q2FwYWNpdG9yQWRhcHRlckNvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0Q29uZmlybWF0aW9uTW9kYWxDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldEVkaXRvckNvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0RXZlbnRzQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRGaWxlTWFuYWdlckNvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0RmlsZVN5c3RlbUFkYXB0ZXJDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldEZ1enp5U3VnZ2VzdE1vZGFsQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRIb3ZlclBvcG92ZXJDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldEtleW1hcENvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0TWFya2Rvd25QcmV2aWV3UmVuZGVyZXJDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldE1hcmtkb3duUHJldmlld1ZpZXdDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldE1hcmtkb3duUmVuZGVyQ2hpbGRDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldE1hcmtkb3duUmVuZGVyZXJDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldE1lbnVDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldE1lbnVJdGVtQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRNZW51U2VwYXJhdG9yQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRNZXRhZGF0YUNhY2hlQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRNb2RhbENvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0Tm90aWNlQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRSZW5kZXJDb250ZXh0Q29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRTY29wZUNvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0U2VjcmV0U3RvcmFnZUNvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0U2V0dGluZ0NvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0U2V0dGluZ0dyb3VwQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRTZXR0aW5nUGFnZUNvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0U2V0dGluZ1RhYkNvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0VEFic3RyYWN0RmlsZUNvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0VGFza3NDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldFRGaWxlQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRURm9sZGVyQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRWYXVsdENvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0V29ya3NwYWNlQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRXb3Jrc3BhY2VDb250YWluZXJDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldFdvcmtzcGFjZUZsb2F0aW5nQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRXb3Jrc3BhY2VJdGVtQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRXb3Jrc3BhY2VMZWFmQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRXb3Jrc3BhY2VNb2JpbGVEcmF3ZXJDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldFdvcmtzcGFjZVBhcmVudENvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0V29ya3NwYWNlUmliYm9uQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRXb3Jrc3BhY2VSb290Q29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRXb3Jrc3BhY2VTaWRlZG9ja0NvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0V29ya3NwYWNlU3BsaXRDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldFdvcmtzcGFjZVRhYnNDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldFdvcmtzcGFjZVdpbmRvd0NvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvc2V0dGluZ3Mvc2V0dGluZy1jb21wb25lbnRzL2dldEFic3RyYWN0VGV4dENvbXBvbmVudENvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvc2V0dGluZ3Mvc2V0dGluZy1jb21wb25lbnRzL2dldEJhc2VDb21wb25lbnRDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3NldHRpbmdzL3NldHRpbmctY29tcG9uZW50cy9nZXRCdXR0b25Db21wb25lbnRDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3NldHRpbmdzL3NldHRpbmctY29tcG9uZW50cy9nZXRDb2xvckNvbXBvbmVudENvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvc2V0dGluZ3Mvc2V0dGluZy1jb21wb25lbnRzL2dldENvbXBvbmVudENvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvc2V0dGluZ3Mvc2V0dGluZy1jb21wb25lbnRzL2dldENvbmZpcm1hdGlvbkJ1dHRvbkNvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvc2V0dGluZ3Mvc2V0dGluZy1jb21wb25lbnRzL2dldERpc3BsYXlWYWx1ZUNvbXBvbmVudENvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvc2V0dGluZ3Mvc2V0dGluZy1jb21wb25lbnRzL2dldERyb3Bkb3duQ29tcG9uZW50Q29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9zZXR0aW5ncy9zZXR0aW5nLWNvbXBvbmVudHMvZ2V0RXh0cmFCdXR0b25Db21wb25lbnRDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3NldHRpbmdzL3NldHRpbmctY29tcG9uZW50cy9nZXRNb21lbnRGb3JtYXRDb21wb25lbnRDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3NldHRpbmdzL3NldHRpbmctY29tcG9uZW50cy9nZXRQcm9ncmVzc0JhckNvbXBvbmVudENvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvc2V0dGluZ3Mvc2V0dGluZy1jb21wb25lbnRzL2dldFNlYXJjaENvbXBvbmVudENvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvc2V0dGluZ3Mvc2V0dGluZy1jb21wb25lbnRzL2dldFNlY3JldENvbXBvbmVudENvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvc2V0dGluZ3Mvc2V0dGluZy1jb21wb25lbnRzL2dldFNsaWRlckNvbXBvbmVudENvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvc2V0dGluZ3Mvc2V0dGluZy1jb21wb25lbnRzL2dldFRleHRBcmVhQ29tcG9uZW50Q29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9zZXR0aW5ncy9zZXR0aW5nLWNvbXBvbmVudHMvZ2V0VGV4dENvbXBvbmVudENvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvc2V0dGluZ3Mvc2V0dGluZy1jb21wb25lbnRzL2dldFRvZ2dsZUNvbXBvbmVudENvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvc2V0dGluZ3Mvc2V0dGluZy1jb21wb25lbnRzL2dldFZhbHVlQ29tcG9uZW50Q29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy92YWx1ZXMvZ2V0Qm9vbGVhblZhbHVlQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy92YWx1ZXMvZ2V0RGF0ZVZhbHVlQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy92YWx1ZXMvZ2V0RHVyYXRpb25WYWx1ZUNvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvdmFsdWVzL2dldEZpbGVWYWx1ZUNvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvdmFsdWVzL2dldEhUTUxWYWx1ZUNvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvdmFsdWVzL2dldEljb25WYWx1ZUNvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvdmFsdWVzL2dldEltYWdlVmFsdWVDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3ZhbHVlcy9nZXRMaW5rVmFsdWVDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3ZhbHVlcy9nZXRMaXN0VmFsdWVDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3ZhbHVlcy9nZXROb3ROdWxsVmFsdWVDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3ZhbHVlcy9nZXROdWxsVmFsdWVDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3ZhbHVlcy9nZXROdW1iZXJWYWx1ZUNvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvdmFsdWVzL2dldE9iamVjdFZhbHVlQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy92YWx1ZXMvZ2V0UmVnRXhwVmFsdWVDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3ZhbHVlcy9nZXRSZWxhdGl2ZURhdGVWYWx1ZUNvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvdmFsdWVzL2dldFN0cmluZ1ZhbHVlQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy92YWx1ZXMvZ2V0VGFnVmFsdWVDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3ZhbHVlcy9nZXRVcmxWYWx1ZUNvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvdmFsdWVzL2dldFZhbHVlQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy92aWV3cy9nZXRFZGl0YWJsZUZpbGVWaWV3Q29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy92aWV3cy9nZXRNYXJrZG93blZpZXdDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvZ2V0QXBwTWVudUJhck1hbmFnZXJDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvZ2V0QXBwU2V0dGluZ0NvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2ludGVybmFscy9nZXRDbGlDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvZ2V0Q29tbWFuZHNDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvZ2V0Q3VzdG9tQ1NTQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL2dldERyYWdNYW5hZ2VyQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL2dldEVkaXRvclN1Z2dlc3RzQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL2dldEVtYmVkUmVnaXN0cnlDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvZ2V0Rm9sZE1hbmFnZXJDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvZ2V0RnJhbWVEb21Db25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvZ2V0SG90a2V5TWFuYWdlckNvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2ludGVybmFscy9nZXRNZXRhZGF0YVR5cGVNYW5hZ2VyQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL2dldE9ic2lkaWFuRE9NQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL2dldFBsdWdpbnNDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvZ2V0UmVjZW50RmlsZVRyYWNrZXJDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvZ2V0U2hhcmVSZWNlaXZlckNvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2ludGVybmFscy9nZXRTdGF0dXNCYXJDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvZ2V0Vmlld1JlZ2lzdHJ5Q29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL2dldFdvcmtzcGFjZUxlYWZIaXN0b3J5Q29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL2ludGVybmFsLXBsdWdpbnMvYmFzZXMvZ2V0QmFzZXNDb250ZXh0Q29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL2ludGVybmFsLXBsdWdpbnMvYmFzZXMvZ2V0QmFzZXNRdWVyeUNvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvZnVuY3Rpb25zL2dldEJhc2VzQ29udHJvbGxlckZyb21SZW5kZXIudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL2ludGVybmFsLXBsdWdpbnMvZ2V0SW50ZXJuYWxQbHVnaW5Db25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvaW50ZXJuYWwtcGx1Z2lucy9nZXRJbnRlcm5hbFBsdWdpbnNDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvdmlld3MvZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZS50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvdmlld3MvZ2V0QWxsUHJvcGVydGllc1ZpZXdDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvdmlld3MvZ2V0QXVkaW9WaWV3Q29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL3ZpZXdzL2dldEJhY2tsaW5rVmlld0NvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2ludGVybmFscy92aWV3cy9nZXRCYXNlc1ZpZXdDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvdmlld3MvZ2V0Qm9va21hcmtzVmlld0NvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2ludGVybmFscy92aWV3cy9nZXRDYW52YXNWaWV3Q29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL3ZpZXdzL2dldEVtcHR5Vmlld0NvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2ludGVybmFscy92aWV3cy9nZXRGaWxlRXhwbG9yZXJWaWV3Q29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL3ZpZXdzL2dldEZpbGVQcm9wZXJ0aWVzVmlld0NvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2ludGVybmFscy92aWV3cy9nZXRHcmFwaFZpZXdDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvdmlld3MvZ2V0SW1hZ2VWaWV3Q29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL3ZpZXdzL2dldExvY2FsR3JhcGhWaWV3Q29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL3ZpZXdzL2dldE91dGdvaW5nTGlua1ZpZXdDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvdmlld3MvZ2V0T3V0bGluZVZpZXdDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvdmlld3MvZ2V0UGRmVmlld0NvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2ludGVybmFscy92aWV3cy9nZXRSZWxlYXNlTm90ZXNWaWV3Q29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL3ZpZXdzL2dldFNlYXJjaFZpZXdDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvdmlld3MvZ2V0U3luY1ZpZXdDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvdmlld3MvZ2V0VGFnVmlld0NvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2ludGVybmFscy92aWV3cy9nZXRWaWRlb1ZpZXdDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvdmlld3MvZ2V0V2Vidmlld2VySGlzdG9yeVZpZXdDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvdmlld3MvZ2V0V2Vidmlld2VyVmlld0NvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2ludGVybmFscy93b3Jrc3BhY2UvZ2V0V29ya3NwYWNlUHJvdG9jb2xIYW5kbGVyQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy91dGlscy9QYXRoVXRpbHMudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9mdW5jdGlvbnMvY3JlYXRlVEZvbGRlckluc3RhbmNlLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvZnVuY3Rpb25zL2NyZWF0ZVRGaWxlSW5zdGFuY2UudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9mdW5jdGlvbnMvZXZhbHVhdGVCYXNlSGVhZGxlc3MudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9mdW5jdGlvbnMvZ2V0RGF0YUFkYXB0ZXJFeC50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2Z1bmN0aW9ucy9nZXRQbGF0Zm9ybUV4LnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvZnVuY3Rpb25zL2xvYWRNZXJtYWlkLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvZnVuY3Rpb25zL2xvYWRQZGZKcy50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2Z1bmN0aW9ucy9sb2FkUHJpc20udHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy90eXBlLWd1YXJkcy9pc1JlZmVyZW5jZUNhY2hlLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvdHlwZS1ndWFyZHMvaXNFbWJlZENhY2hlLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvdHlwZS1ndWFyZHMvaXNGcm9udG1hdHRlckxpbmtDYWNoZS50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL3R5cGUtZ3VhcmRzL2lzTGlua0NhY2hlLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKiBUSElTIElTIEEgR0VORVJBVEVEL0JVTkRMRUQgRklMRSBCWSBCVUlMRCBTQ1JJUFQgKi9cblxuZXhwb3J0ICogZnJvbSAnLi9jbGFzc2VzL0N1c3RvbUFycmF5RGljdEltcGwudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdGFudHMvRmlsZUV4dGVuc2lvbi50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0YW50cy9JbnRlcm5hbFBsdWdpbk5hbWUudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdGFudHMvVmlld1R5cGUudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9iYXNlcy9nZXRCYXNlc0VudHJ5Q29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9iYXNlcy9nZXRCYXNlc0VudHJ5R3JvdXBDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2Jhc2VzL2dldEJhc2VzUXVlcnlSZXN1bHRDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2Jhc2VzL2dldEJhc2VzVmlld0NvbmZpZ0NvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvYmFzZXMvZ2V0UXVlcnlDb250cm9sbGVyQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRBcHBDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldENhcGFjaXRvckFkYXB0ZXJDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldENvbmZpcm1hdGlvbk1vZGFsQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRFZGl0b3JDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldEV2ZW50c0NvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0RmlsZU1hbmFnZXJDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldEZpbGVTeXN0ZW1BZGFwdGVyQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRGdXp6eVN1Z2dlc3RNb2RhbENvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0SG92ZXJQb3BvdmVyQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRLZXltYXBDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldE1hcmtkb3duUHJldmlld1JlbmRlcmVyQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRNYXJrZG93blByZXZpZXdWaWV3Q29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRNYXJrZG93blJlbmRlckNoaWxkQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRNYXJrZG93blJlbmRlcmVyQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRNZW51Q29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRNZW51SXRlbUNvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0TWVudVNlcGFyYXRvckNvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0TWV0YWRhdGFDYWNoZUNvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0TW9kYWxDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldE5vdGljZUNvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0UmVuZGVyQ29udGV4dENvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0U2NvcGVDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldFNlY3JldFN0b3JhZ2VDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldFNldHRpbmdDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldFNldHRpbmdHcm91cENvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0U2V0dGluZ1BhZ2VDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldFNldHRpbmdUYWJDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldFRBYnN0cmFjdEZpbGVDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldFRhc2tzQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRURmlsZUNvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0VEZvbGRlckNvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0VmF1bHRDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldFdvcmtzcGFjZUNvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0V29ya3NwYWNlQ29udGFpbmVyQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRXb3Jrc3BhY2VGbG9hdGluZ0NvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0V29ya3NwYWNlSXRlbUNvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0V29ya3NwYWNlTGVhZkNvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0V29ya3NwYWNlTW9iaWxlRHJhd2VyQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRXb3Jrc3BhY2VQYXJlbnRDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldFdvcmtzcGFjZVJpYmJvbkNvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0V29ya3NwYWNlUm9vdENvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0V29ya3NwYWNlU2lkZWRvY2tDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldFdvcmtzcGFjZVNwbGl0Q29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRXb3Jrc3BhY2VUYWJzQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRXb3Jrc3BhY2VXaW5kb3dDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3NldHRpbmdzL3NldHRpbmctY29tcG9uZW50cy9nZXRBYnN0cmFjdFRleHRDb21wb25lbnRDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3NldHRpbmdzL3NldHRpbmctY29tcG9uZW50cy9nZXRCYXNlQ29tcG9uZW50Q29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9zZXR0aW5ncy9zZXR0aW5nLWNvbXBvbmVudHMvZ2V0QnV0dG9uQ29tcG9uZW50Q29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9zZXR0aW5ncy9zZXR0aW5nLWNvbXBvbmVudHMvZ2V0Q29sb3JDb21wb25lbnRDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3NldHRpbmdzL3NldHRpbmctY29tcG9uZW50cy9nZXRDb21wb25lbnRDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3NldHRpbmdzL3NldHRpbmctY29tcG9uZW50cy9nZXRDb25maXJtYXRpb25CdXR0b25Db25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3NldHRpbmdzL3NldHRpbmctY29tcG9uZW50cy9nZXREaXNwbGF5VmFsdWVDb21wb25lbnRDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3NldHRpbmdzL3NldHRpbmctY29tcG9uZW50cy9nZXREcm9wZG93bkNvbXBvbmVudENvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvc2V0dGluZ3Mvc2V0dGluZy1jb21wb25lbnRzL2dldEV4dHJhQnV0dG9uQ29tcG9uZW50Q29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9zZXR0aW5ncy9zZXR0aW5nLWNvbXBvbmVudHMvZ2V0TW9tZW50Rm9ybWF0Q29tcG9uZW50Q29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9zZXR0aW5ncy9zZXR0aW5nLWNvbXBvbmVudHMvZ2V0UHJvZ3Jlc3NCYXJDb21wb25lbnRDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3NldHRpbmdzL3NldHRpbmctY29tcG9uZW50cy9nZXRTZWFyY2hDb21wb25lbnRDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3NldHRpbmdzL3NldHRpbmctY29tcG9uZW50cy9nZXRTZWNyZXRDb21wb25lbnRDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3NldHRpbmdzL3NldHRpbmctY29tcG9uZW50cy9nZXRTbGlkZXJDb21wb25lbnRDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3NldHRpbmdzL3NldHRpbmctY29tcG9uZW50cy9nZXRUZXh0QXJlYUNvbXBvbmVudENvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvc2V0dGluZ3Mvc2V0dGluZy1jb21wb25lbnRzL2dldFRleHRDb21wb25lbnRDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3NldHRpbmdzL3NldHRpbmctY29tcG9uZW50cy9nZXRUb2dnbGVDb21wb25lbnRDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3NldHRpbmdzL3NldHRpbmctY29tcG9uZW50cy9nZXRWYWx1ZUNvbXBvbmVudENvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvdmFsdWVzL2dldEJvb2xlYW5WYWx1ZUNvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvdmFsdWVzL2dldERhdGVWYWx1ZUNvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvdmFsdWVzL2dldER1cmF0aW9uVmFsdWVDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3ZhbHVlcy9nZXRGaWxlVmFsdWVDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3ZhbHVlcy9nZXRIVE1MVmFsdWVDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3ZhbHVlcy9nZXRJY29uVmFsdWVDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3ZhbHVlcy9nZXRJbWFnZVZhbHVlQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy92YWx1ZXMvZ2V0TGlua1ZhbHVlQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy92YWx1ZXMvZ2V0TGlzdFZhbHVlQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy92YWx1ZXMvZ2V0Tm90TnVsbFZhbHVlQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy92YWx1ZXMvZ2V0TnVsbFZhbHVlQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy92YWx1ZXMvZ2V0TnVtYmVyVmFsdWVDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3ZhbHVlcy9nZXRPYmplY3RWYWx1ZUNvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvdmFsdWVzL2dldFJlZ0V4cFZhbHVlQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy92YWx1ZXMvZ2V0UmVsYXRpdmVEYXRlVmFsdWVDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3ZhbHVlcy9nZXRTdHJpbmdWYWx1ZUNvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvdmFsdWVzL2dldFRhZ1ZhbHVlQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy92YWx1ZXMvZ2V0VXJsVmFsdWVDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3ZhbHVlcy9nZXRWYWx1ZUNvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvdmlld3MvZ2V0RWRpdGFibGVGaWxlVmlld0NvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvdmlld3MvZ2V0TWFya2Rvd25WaWV3Q29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL2dldEFwcE1lbnVCYXJNYW5hZ2VyQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL2dldEFwcFNldHRpbmdDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvZ2V0Q2xpQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL2dldENvbW1hbmRzQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL2dldEN1c3RvbUNTU0NvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2ludGVybmFscy9nZXREcmFnTWFuYWdlckNvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2ludGVybmFscy9nZXRFZGl0b3JTdWdnZXN0c0NvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2ludGVybmFscy9nZXRFbWJlZFJlZ2lzdHJ5Q29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL2dldEZvbGRNYW5hZ2VyQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL2dldEZyYW1lRG9tQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL2dldEhvdGtleU1hbmFnZXJDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvZ2V0TWV0YWRhdGFUeXBlTWFuYWdlckNvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2ludGVybmFscy9nZXRPYnNpZGlhbkRPTUNvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2ludGVybmFscy9nZXRQbHVnaW5zQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL2dldFJlY2VudEZpbGVUcmFja2VyQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL2dldFNoYXJlUmVjZWl2ZXJDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvZ2V0U3RhdHVzQmFyQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL2dldFZpZXdSZWdpc3RyeUNvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2ludGVybmFscy9nZXRXb3Jrc3BhY2VMZWFmSGlzdG9yeUNvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2ludGVybmFscy9pbnRlcm5hbC1wbHVnaW5zL2Jhc2VzL2dldEJhc2VzQ29udGV4dENvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2ludGVybmFscy9pbnRlcm5hbC1wbHVnaW5zL2Jhc2VzL2dldEJhc2VzUXVlcnlDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvaW50ZXJuYWwtcGx1Z2lucy9nZXRJbnRlcm5hbFBsdWdpbkNvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2ludGVybmFscy9pbnRlcm5hbC1wbHVnaW5zL2dldEludGVybmFsUGx1Z2luc0NvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2ludGVybmFscy92aWV3cy9nZXRBbGxQcm9wZXJ0aWVzVmlld0NvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2ludGVybmFscy92aWV3cy9nZXRBdWRpb1ZpZXdDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvdmlld3MvZ2V0QmFja2xpbmtWaWV3Q29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL3ZpZXdzL2dldEJhc2VzVmlld0NvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2ludGVybmFscy92aWV3cy9nZXRCb29rbWFya3NWaWV3Q29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL3ZpZXdzL2dldENhbnZhc1ZpZXdDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvdmlld3MvZ2V0RW1wdHlWaWV3Q29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL3ZpZXdzL2dldEZpbGVFeHBsb3JlclZpZXdDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvdmlld3MvZ2V0RmlsZVByb3BlcnRpZXNWaWV3Q29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL3ZpZXdzL2dldEdyYXBoVmlld0NvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2ludGVybmFscy92aWV3cy9nZXRJbWFnZVZpZXdDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvdmlld3MvZ2V0TG9jYWxHcmFwaFZpZXdDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvdmlld3MvZ2V0T3V0Z29pbmdMaW5rVmlld0NvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2ludGVybmFscy92aWV3cy9nZXRPdXRsaW5lVmlld0NvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2ludGVybmFscy92aWV3cy9nZXRQZGZWaWV3Q29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL3ZpZXdzL2dldFJlbGVhc2VOb3Rlc1ZpZXdDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvdmlld3MvZ2V0U2VhcmNoVmlld0NvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2ludGVybmFscy92aWV3cy9nZXRTeW5jVmlld0NvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2ludGVybmFscy92aWV3cy9nZXRUYWdWaWV3Q29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL3ZpZXdzL2dldFZpZGVvVmlld0NvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2ludGVybmFscy92aWV3cy9nZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2ludGVybmFscy92aWV3cy9nZXRXZWJ2aWV3ZXJIaXN0b3J5Vmlld0NvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2ludGVybmFscy92aWV3cy9nZXRXZWJ2aWV3ZXJWaWV3Q29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL3dvcmtzcGFjZS9nZXRXb3Jrc3BhY2VQcm90b2NvbEhhbmRsZXJDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2Z1bmN0aW9ucy9jcmVhdGVURmlsZUluc3RhbmNlLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vZnVuY3Rpb25zL2NyZWF0ZVRGb2xkZXJJbnN0YW5jZS50cyc7XG5leHBvcnQgKiBmcm9tICcuL2Z1bmN0aW9ucy9ldmFsdWF0ZUJhc2VIZWFkbGVzcy50cyc7XG5leHBvcnQgKiBmcm9tICcuL2Z1bmN0aW9ucy9nZXRCYXNlc0NvbnRyb2xsZXJGcm9tUmVuZGVyLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vZnVuY3Rpb25zL2dldERhdGFBZGFwdGVyRXgudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9mdW5jdGlvbnMvZ2V0UGxhdGZvcm1FeC50cyc7XG5leHBvcnQgKiBmcm9tICcuL2Z1bmN0aW9ucy9sb2FkTWVybWFpZC50cyc7XG5leHBvcnQgKiBmcm9tICcuL2Z1bmN0aW9ucy9sb2FkUGRmSnMudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9mdW5jdGlvbnMvbG9hZFByaXNtLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vdHlwZS1ndWFyZHMvaXNFbWJlZENhY2hlLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vdHlwZS1ndWFyZHMvaXNGcm9udG1hdHRlckxpbmtDYWNoZS50cyc7XG5leHBvcnQgKiBmcm9tICcuL3R5cGUtZ3VhcmRzL2lzTGlua0NhY2hlLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vdHlwZS1ndWFyZHMvaXNSZWZlcmVuY2VDYWNoZS50cyc7XG5leHBvcnQgKiBmcm9tICcuL3V0aWxzL1BhdGhVdGlscy50cyc7XG5leHBvcnQgdHlwZSAqIGZyb20gJy4uLy4uL2luZGV4LmQudHMnO1xuIiwgImltcG9ydCB0eXBlIHsgQ3VzdG9tQXJyYXlEaWN0IH0gZnJvbSAnLi4vLi4vaW50ZXJuYWxzL2NvbGxlY3Rpb25zL0N1c3RvbUFycmF5RGljdC5kLmQudHMnO1xuXG4vKipcbiAqIEEgZGljdGlvbmFyeSB0aGF0IG1hcHMgc3RyaW5nIGtleXMgdG8gYXJyYXlzIG9mIHVuaXF1ZSB2YWx1ZXMsIGltcGxlbWVudGluZyB7QGxpbmsgQ3VzdG9tQXJyYXlEaWN0fS5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgY2xhc3MgQ3VzdG9tQXJyYXlEaWN0SW1wbDxUPiBpbXBsZW1lbnRzIEN1c3RvbUFycmF5RGljdDxUPiB7XG4gIC8qKlxuICAgKiBJbnRlcm5hbCBtYXAgc3RvcmluZyBrZXktdG8tYXJyYXkgbWFwcGluZ3MuXG4gICAqL1xuICBwdWJsaWMgZGF0YTogTWFwPHN0cmluZywgVFtdPiA9IG5ldyBNYXAoKTtcblxuICAvKipcbiAgICogQWRkIGEgdmFsdWUgdG8gdGhlIGFycmF5IGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4ga2V5LlxuICAgKlxuICAgKiBAcGFyYW0ga2V5IC0gVGhlIGtleS5cbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIGFkZC5cbiAgICovXG4gIHB1YmxpYyBhZGQoa2V5OiBzdHJpbmcsIHZhbHVlOiBUKTogdm9pZCB7XG4gICAgbGV0IHZhbHVlcyA9IHRoaXMuZ2V0KGtleSk7XG4gICAgaWYgKCF2YWx1ZXMpIHtcbiAgICAgIHZhbHVlcyA9IFtdO1xuICAgICAgdGhpcy5kYXRhLnNldChrZXksIHZhbHVlcyk7XG4gICAgfVxuXG4gICAgaWYgKCF2YWx1ZXMuaW5jbHVkZXModmFsdWUpKSB7XG4gICAgICB2YWx1ZXMucHVzaCh2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhbGwgdmFsdWVzIGZvciB0aGUgZ2l2ZW4ga2V5LlxuICAgKlxuICAgKiBAcGFyYW0ga2V5IC0gVGhlIGtleSB0byBjbGVhci5cbiAgICovXG4gIHB1YmxpYyBjbGVhcihrZXk6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuZGF0YS5kZWxldGUoa2V5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYWxsIGtleXMgYW5kIHRoZWlyIHZhbHVlcy5cbiAgICovXG4gIHB1YmxpYyBjbGVhckFsbCgpOiB2b2lkIHtcbiAgICB0aGlzLmRhdGEuY2xlYXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB3aGV0aGVyIHRoZSBhcnJheSBmb3IgdGhlIGdpdmVuIGtleSBjb250YWlucyB0aGUgc3BlY2lmaWVkIHZhbHVlLlxuICAgKlxuICAgKiBAcGFyYW0ga2V5IC0gVGhlIGtleS5cbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgKiBAcmV0dXJucyBXaGV0aGVyIHRoZSB2YWx1ZSBleGlzdHMuXG4gICAqL1xuICBwdWJsaWMgY29udGFpbnMoa2V5OiBzdHJpbmcsIHZhbHVlOiBUKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5nZXQoa2V5KT8uY29udGFpbnModmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgdG90YWwgbnVtYmVyIG9mIHZhbHVlcyBhY3Jvc3MgYWxsIGtleXMuXG4gICAqXG4gICAqIEByZXR1cm5zIFRvdGFsIHZhbHVlIGNvdW50LlxuICAgKi9cbiAgcHVibGljIGNvdW50KCk6IG51bWJlciB7XG4gICAgbGV0IGFucyA9IDA7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgdGhpcy5rZXlzKCkpIHtcbiAgICAgIGFucyArPSB0aGlzLmdldChrZXkpPy5sZW5ndGggPz8gMDtcbiAgICB9XG5cbiAgICByZXR1cm4gYW5zO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgYXJyYXkgb2YgdmFsdWVzIGZvciB0aGUgZ2l2ZW4ga2V5LCBvciBgbnVsbGAgaWYgbm90IGZvdW5kLlxuICAgKlxuICAgKiBAcGFyYW0ga2V5IC0gVGhlIGtleS5cbiAgICogQHJldHVybnMgQXJyYXkgb2YgdmFsdWVzLCBvciBgbnVsbGAuXG4gICAqL1xuICBwdWJsaWMgZ2V0KGtleTogc3RyaW5nKTogbnVsbCB8IFRbXSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YS5nZXQoa2V5KSB8fCBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhbGwga2V5cyBpbiB0aGUgZGljdGlvbmFyeS5cbiAgICpcbiAgICogQHJldHVybnMgQXJyYXkgb2Yga2V5cy5cbiAgICovXG4gIHB1YmxpYyBrZXlzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmRhdGEua2V5cygpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYSBzcGVjaWZpYyB2YWx1ZSBmcm9tIHRoZSBhcnJheSBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIGtleS5cbiAgICpcbiAgICogQHBhcmFtIGtleSAtIFRoZSBrZXkuXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byByZW1vdmUuXG4gICAqL1xuICBwdWJsaWMgcmVtb3ZlKGtleTogc3RyaW5nLCB2YWx1ZTogVCk6IHZvaWQge1xuICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuZ2V0KGtleSk7XG4gICAgaWYgKCF2YWx1ZXMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YWx1ZXMucmVtb3ZlKHZhbHVlKTtcbiAgICBpZiAodmFsdWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5jbGVhcihrZXkpO1xuICAgIH1cbiAgfVxufVxuIiwgIi8qKlxuICogQ29uc3RhbnQgbWFwcGluZyBvZiBmaWxlIGV4dGVuc2lvbiBpZGVudGlmaWVycyByZWNvZ25pemVkIGFuZCBzdXBwb3J0ZWQgYnkgT2JzaWRpYW4uXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGNvbnN0IEZpbGVFeHRlbnNpb24gPSB7XG4gIF8zZ3A6ICczZ3AnLFxuICBhdmlmOiAnYXZpZicsXG4gIGJtcDogJ2JtcCcsXG4gIGNhbnZhczogJ2NhbnZhcycsXG4gIGZsYWM6ICdmbGFjJyxcbiAgZ2lmOiAnZ2lmJyxcbiAganBlZzogJ2pwZWcnLFxuICBqcGc6ICdqcGcnLFxuICBtNGE6ICdtNGEnLFxuICBtZDogJ21kJyxcbiAgbWt2OiAnbWt2JyxcbiAgbW92OiAnbW92JyxcbiAgbXAzOiAnbXAzJyxcbiAgbXA0OiAnbXA0JyxcbiAgb2dhOiAnb2dhJyxcbiAgb2dnOiAnb2dnJyxcbiAgb2d2OiAnb2d2JyxcbiAgb3B1czogJ29wdXMnLFxuICBwZGY6ICdwZGYnLFxuICBwbmc6ICdwbmcnLFxuICBzdmc6ICdzdmcnLFxuICB3YXY6ICd3YXYnLFxuICB3ZWJtOiAnd2VibScsXG4gIHdlYnA6ICd3ZWJwJ1xufSBhcyBjb25zdDtcbiIsICIvKipcbiAqIENvbnN0YW50IG1hcHBpbmcgb2YgaW50ZXJuYWwgKGNvcmUpIHBsdWdpbiBuYW1lIGlkZW50aWZpZXJzIGJ1bmRsZWQgd2l0aCBPYnNpZGlhbi5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgY29uc3QgSW50ZXJuYWxQbHVnaW5OYW1lID0ge1xuICAvKipcbiAgICogUGx1Z2luIG5hbWUgaW4gVUk6IEF1ZGlvIHJlY29yZGVyLlxuICAgKi9cbiAgQXVkaW9SZWNvcmRlcjogJ2F1ZGlvLXJlY29yZGVyJyxcbiAgLyoqXG4gICAqIFBsdWdpbiBuYW1lIGluIFVJOiBCYWNrbGlua3MuXG4gICAqL1xuICBCYWNrbGluazogJ2JhY2tsaW5rJyxcbiAgLyoqXG4gICAqIFBsdWdpbiBuYW1lIGluIFVJOiBCYXNlcy5cbiAgICovXG4gIEJhc2VzOiAnYmFzZXMnLFxuICAvKipcbiAgICogUGx1Z2luIG5hbWUgaW4gVUk6IEJvb2ttYXJrcy5cbiAgICovXG4gIEJvb2ttYXJrczogJ2Jvb2ttYXJrcycsXG4gIC8qKlxuICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogQ2FudmFzLlxuICAgKi9cbiAgQ2FudmFzOiAnY2FudmFzJyxcbiAgLyoqXG4gICAqIFBsdWdpbiBuYW1lIGluIFVJOiBDb21tYW5kIHBhbGV0dGUuXG4gICAqL1xuICBDb21tYW5kUGFsZXR0ZTogJ2NvbW1hbmQtcGFsZXR0ZScsXG4gIC8qKlxuICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogRGFpbHkgbm90ZXMuXG4gICAqL1xuICBEYWlseU5vdGVzOiAnZGFpbHktbm90ZXMnLFxuICAvKipcbiAgICogUGx1Z2luIG5hbWUgaW4gVUk6IChoaWRkZW4pLlxuICAgKi9cbiAgRWRpdG9yU3RhdHVzOiAnZWRpdG9yLXN0YXR1cycsXG4gIC8qKlxuICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogRmlsZXMuXG4gICAqL1xuICBGaWxlRXhwbG9yZXI6ICdmaWxlLWV4cGxvcmVyJyxcbiAgLyoqXG4gICAqIFBsdWdpbiBuYW1lIGluIFVJOiBGaWxlIHJlY292ZXJ5LlxuICAgKi9cbiAgRmlsZVJlY292ZXJ5OiAnZmlsZS1yZWNvdmVyeScsXG4gIC8qKlxuICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogRm9vdG5vdGVzLlxuICAgKi9cbiAgRm9vdG5vdGVzOiAnZm9vdG5vdGVzJyxcbiAgLyoqXG4gICAqIFBsdWdpbiBuYW1lIGluIFVJOiBTZWFyY2guXG4gICAqL1xuICBHbG9iYWxTZWFyY2g6ICdnbG9iYWwtc2VhcmNoJyxcbiAgLyoqXG4gICAqIFBsdWdpbiBuYW1lIGluIFVJOiBHcmFwaCB2aWV3LlxuICAgKi9cbiAgR3JhcGg6ICdncmFwaCcsXG4gIC8qKlxuICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogRm9ybWF0IGNvbnZlcnRlci5cbiAgICovXG4gIE1hcmtkb3duSW1wb3J0ZXI6ICdtYXJrZG93bi1pbXBvcnRlcicsXG4gIC8qKlxuICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogTm90ZSBjb21wb3Nlci5cbiAgICovXG4gIE5vdGVDb21wb3NlcjogJ25vdGUtY29tcG9zZXInLFxuICAvKipcbiAgICogUGx1Z2luIG5hbWUgaW4gVUk6IE91dGdvaW5nIGxpbmtzLlxuICAgKi9cbiAgT3V0Z29pbmdMaW5rOiAnb3V0Z29pbmctbGluaycsXG4gIC8qKlxuICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogT3V0bGluZS5cbiAgICovXG4gIE91dGxpbmU6ICdvdXRsaW5lJyxcbiAgLyoqXG4gICAqIFBsdWdpbiBuYW1lIGluIFVJOiBQYWdlIHByZXZpZXcuXG4gICAqL1xuICBQYWdlUHJldmlldzogJ3BhZ2UtcHJldmlldycsXG4gIC8qKlxuICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogUHJvcGVydGllcyB2aWV3LlxuICAgKi9cbiAgUHJvcGVydGllczogJ3Byb3BlcnRpZXMnLFxuICAvKipcbiAgICogUGx1Z2luIG5hbWUgaW4gVUk6IFB1Ymxpc2guXG4gICAqL1xuICBQdWJsaXNoOiAncHVibGlzaCcsXG4gIC8qKlxuICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogUmFuZG9tIG5vdGUuXG4gICAqL1xuICBSYW5kb21Ob3RlOiAncmFuZG9tLW5vdGUnLFxuICAvKipcbiAgICogUGx1Z2luIG5hbWUgaW4gVUk6IFNsYXNoIGNvbW1hbmRzLlxuICAgKi9cbiAgU2xhc2hDb21tYW5kOiAnc2xhc2gtY29tbWFuZCcsXG4gIC8qKlxuICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogU2xpZGVzLlxuICAgKi9cbiAgU2xpZGVzOiAnc2xpZGVzJyxcbiAgLyoqXG4gICAqIFBsdWdpbiBuYW1lIGluIFVJOiBRdWljayBTd2l0Y2hlci5cbiAgICovXG4gIFN3aXRjaGVyOiAnc3dpdGNoZXInLFxuICAvKipcbiAgICogUGx1Z2luIG5hbWUgaW4gVUk6IFN5bmMuXG4gICAqL1xuICBTeW5jOiAnc3luYycsXG4gIC8qKlxuICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogVGFncyB2aWV3LlxuICAgKi9cbiAgVGFnUGFuZTogJ3RhZy1wYW5lJyxcbiAgLyoqXG4gICAqIFBsdWdpbiBuYW1lIGluIFVJOiBUZW1wbGF0ZXMuXG4gICAqL1xuICBUZW1wbGF0ZXM6ICd0ZW1wbGF0ZXMnLFxuICAvKipcbiAgICogUGx1Z2luIG5hbWUgaW4gVUk6IFdlYiB2aWV3ZXIuXG4gICAqL1xuICBXZWJ2aWV3ZXI6ICd3ZWJ2aWV3ZXInLFxuICAvKipcbiAgICogUGx1Z2luIG5hbWUgaW4gVUk6IFdvcmQgY291bnQuXG4gICAqL1xuICBXb3JkQ291bnQ6ICd3b3JkLWNvdW50JyxcbiAgLyoqXG4gICAqIFBsdWdpbiBuYW1lIGluIFVJOiBXb3Jrc3BhY2VzLlxuICAgKi9cbiAgV29ya3NwYWNlczogJ3dvcmtzcGFjZXMnLFxuICAvKipcbiAgICogUGx1Z2luIG5hbWUgaW4gVUk6IFVuaXF1ZSBub3RlIGNyZWF0b3IuXG4gICAqL1xuICBaa1ByZWZpeGVyOiAnemstcHJlZml4ZXInXG59IGFzIGNvbnN0O1xuIiwgImltcG9ydCB7IEludGVybmFsUGx1Z2luTmFtZSB9IGZyb20gJy4vSW50ZXJuYWxQbHVnaW5OYW1lLnRzJztcblxuLyoqXG4gKiBDb25zdGFudCBtYXBwaW5nIG9mIHZpZXcgdHlwZSBpZGVudGlmaWVycyB1c2VkIHRvIG9wZW4gYW5kIG1hbmFnZSBkaWZmZXJlbnQgbGVhZiB2aWV3cyBpbiBPYnNpZGlhbi5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgY29uc3QgVmlld1R5cGUgPSB7XG4gIEFsbFByb3BlcnRpZXM6ICdhbGwtcHJvcGVydGllcycsXG4gIEF1ZGlvOiAnYXVkaW8nLFxuICBCYWNrbGluazogSW50ZXJuYWxQbHVnaW5OYW1lLkJhY2tsaW5rLFxuICBCYXNlczogSW50ZXJuYWxQbHVnaW5OYW1lLkJhc2VzLFxuICBCb29rbWFya3M6IEludGVybmFsUGx1Z2luTmFtZS5Cb29rbWFya3MsXG4gIENhbnZhczogSW50ZXJuYWxQbHVnaW5OYW1lLkNhbnZhcyxcbiAgRW1wdHk6ICdlbXB0eScsXG4gIEZpbGVFeHBsb3JlcjogSW50ZXJuYWxQbHVnaW5OYW1lLkZpbGVFeHBsb3JlcixcbiAgRmlsZVByb3BlcnRpZXM6ICdmaWxlLXByb3BlcnRpZXMnLFxuICBHcmFwaDogSW50ZXJuYWxQbHVnaW5OYW1lLkdyYXBoLFxuICBJbWFnZTogJ2ltYWdlJyxcbiAgTG9jYWxHcmFwaDogJ2xvY2FsZ3JhcGgnLFxuICBNYXJrZG93bjogJ21hcmtkb3duJyxcbiAgT3V0Z29pbmdMaW5rOiBJbnRlcm5hbFBsdWdpbk5hbWUuT3V0Z29pbmdMaW5rLFxuICBPdXRsaW5lOiBJbnRlcm5hbFBsdWdpbk5hbWUuT3V0bGluZSxcbiAgUGRmOiAncGRmJyxcbiAgUmVsZWFzZU5vdGVzOiAncmVsZWFzZS1ub3RlcycsXG4gIFNlYXJjaDogJ3NlYXJjaCcsXG4gIFN5bmM6ICdzeW5jJyxcbiAgVGFnOiAndGFnJyxcbiAgVmlkZW86ICd2aWRlbycsXG4gIFdlYnZpZXdlcjogJ3dlYnZpZXdlcicsXG4gIFdlYnZpZXdlckhpc3Rvcnk6ICd3ZWJ2aWV3ZXItaGlzdG9yeSdcbn0gYXMgY29uc3Q7XG4iLCAiaW1wb3J0IHsgQmFzZXNFbnRyeSB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNCYXNlc0VudHJ5fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI0Jhc2VzRW50cnl9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRCYXNlc0VudHJ5Q29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPEJhc2VzRW50cnk+IHtcbiAgcmV0dXJuIEJhc2VzRW50cnkgYXMgRXh0cmFjdENvbnN0cnVjdG9yPEJhc2VzRW50cnk+O1xufVxuIiwgImltcG9ydCB7IEJhc2VzRW50cnlHcm91cCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNCYXNlc0VudHJ5R3JvdXB9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jQmFzZXNFbnRyeUdyb3VwfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QmFzZXNFbnRyeUdyb3VwQ29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPEJhc2VzRW50cnlHcm91cD4ge1xuICByZXR1cm4gQmFzZXNFbnRyeUdyb3VwIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxCYXNlc0VudHJ5R3JvdXA+O1xufVxuIiwgImltcG9ydCB7IEJhc2VzUXVlcnlSZXN1bHQgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jQmFzZXNRdWVyeVJlc3VsdH0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNCYXNlc1F1ZXJ5UmVzdWx0fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QmFzZXNRdWVyeVJlc3VsdENvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxCYXNlc1F1ZXJ5UmVzdWx0PiB7XG4gIHJldHVybiBCYXNlc1F1ZXJ5UmVzdWx0IGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxCYXNlc1F1ZXJ5UmVzdWx0Pjtcbn1cbiIsICJpbXBvcnQgeyBCYXNlc1ZpZXdDb25maWcgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jQmFzZXNWaWV3Q29uZmlnfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI0Jhc2VzVmlld0NvbmZpZ30gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEJhc2VzVmlld0NvbmZpZ0NvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxCYXNlc1ZpZXdDb25maWc+IHtcbiAgcmV0dXJuIEJhc2VzVmlld0NvbmZpZyBhcyBFeHRyYWN0Q29uc3RydWN0b3I8QmFzZXNWaWV3Q29uZmlnPjtcbn1cbiIsICJpbXBvcnQgeyBRdWVyeUNvbnRyb2xsZXIgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jUXVlcnlDb250cm9sbGVyfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI1F1ZXJ5Q29udHJvbGxlcn0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFF1ZXJ5Q29udHJvbGxlckNvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxRdWVyeUNvbnRyb2xsZXI+IHtcbiAgcmV0dXJuIFF1ZXJ5Q29udHJvbGxlciBhcyBFeHRyYWN0Q29uc3RydWN0b3I8UXVlcnlDb250cm9sbGVyPjtcbn1cbiIsICJpbXBvcnQgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jQXBwfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI0FwcH0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEFwcENvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxBcHA+IHtcbiAgcmV0dXJuIEFwcCBhcyBFeHRyYWN0Q29uc3RydWN0b3I8QXBwPjtcbn1cbiIsICJpbXBvcnQgeyBDYXBhY2l0b3JBZGFwdGVyIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI0NhcGFjaXRvckFkYXB0ZXJ9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jQ2FwYWNpdG9yQWRhcHRlcn0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENhcGFjaXRvckFkYXB0ZXJDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8Q2FwYWNpdG9yQWRhcHRlcj4ge1xuICByZXR1cm4gQ2FwYWNpdG9yQWRhcHRlciBhcyBFeHRyYWN0Q29uc3RydWN0b3I8Q2FwYWNpdG9yQWRhcHRlcj47XG59XG4iLCAiaW1wb3J0IHsgQ29uZmlybWF0aW9uTW9kYWwgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jQ29uZmlybWF0aW9uTW9kYWx9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jQ29uZmlybWF0aW9uTW9kYWx9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb25maXJtYXRpb25Nb2RhbENvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxDb25maXJtYXRpb25Nb2RhbD4ge1xuICByZXR1cm4gQ29uZmlybWF0aW9uTW9kYWwgYXMgRXh0cmFjdENvbnN0cnVjdG9yPENvbmZpcm1hdGlvbk1vZGFsPjtcbn1cbiIsICJpbXBvcnQgeyBFZGl0b3IgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jRWRpdG9yfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI0VkaXRvcn0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVkaXRvckNvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxFZGl0b3I+IHtcbiAgcmV0dXJuIEVkaXRvciBhcyBFeHRyYWN0Q29uc3RydWN0b3I8RWRpdG9yPjtcbn1cbiIsICJpbXBvcnQgeyBFdmVudHMgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jRXZlbnRzfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI0V2ZW50c30gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEV2ZW50c0NvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxFdmVudHM+IHtcbiAgcmV0dXJuIEV2ZW50cyBhcyBFeHRyYWN0Q29uc3RydWN0b3I8RXZlbnRzPjtcbn1cbiIsICJpbXBvcnQgeyBGaWxlTWFuYWdlciB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNGaWxlTWFuYWdlcn0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNGaWxlTWFuYWdlcn0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZpbGVNYW5hZ2VyQ29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPEZpbGVNYW5hZ2VyPiB7XG4gIHJldHVybiBGaWxlTWFuYWdlciBhcyBFeHRyYWN0Q29uc3RydWN0b3I8RmlsZU1hbmFnZXI+O1xufVxuIiwgImltcG9ydCB7IEZpbGVTeXN0ZW1BZGFwdGVyIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI0ZpbGVTeXN0ZW1BZGFwdGVyfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI0ZpbGVTeXN0ZW1BZGFwdGVyfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmlsZVN5c3RlbUFkYXB0ZXJDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8RmlsZVN5c3RlbUFkYXB0ZXI+IHtcbiAgcmV0dXJuIEZpbGVTeXN0ZW1BZGFwdGVyIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxGaWxlU3lzdGVtQWRhcHRlcj47XG59XG4iLCAiaW1wb3J0IHsgRnV6enlTdWdnZXN0TW9kYWwgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jRnV6enlTdWdnZXN0TW9kYWx9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jRnV6enlTdWdnZXN0TW9kYWx9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGdXp6eVN1Z2dlc3RNb2RhbENvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxGdXp6eVN1Z2dlc3RNb2RhbDx1bmtub3duPj4ge1xuICByZXR1cm4gRnV6enlTdWdnZXN0TW9kYWwgYXMgRXh0cmFjdENvbnN0cnVjdG9yPEZ1enp5U3VnZ2VzdE1vZGFsPHVua25vd24+Pjtcbn1cbiIsICJpbXBvcnQgeyBIb3ZlclBvcG92ZXIgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jSG92ZXJQb3BvdmVyfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI0hvdmVyUG9wb3Zlcn0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEhvdmVyUG9wb3ZlckNvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxIb3ZlclBvcG92ZXI+IHtcbiAgcmV0dXJuIEhvdmVyUG9wb3ZlciBhcyBFeHRyYWN0Q29uc3RydWN0b3I8SG92ZXJQb3BvdmVyPjtcbn1cbiIsICJpbXBvcnQgeyBLZXltYXAgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jS2V5bWFwfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI0tleW1hcH0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEtleW1hcENvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxLZXltYXA+IHtcbiAgcmV0dXJuIEtleW1hcCBhcyBFeHRyYWN0Q29uc3RydWN0b3I8S2V5bWFwPjtcbn1cbiIsICJpbXBvcnQgeyBNYXJrZG93blByZXZpZXdSZW5kZXJlciB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNNYXJrZG93blByZXZpZXdSZW5kZXJlcn0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNNYXJrZG93blByZXZpZXdSZW5kZXJlcn0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1hcmtkb3duUHJldmlld1JlbmRlcmVyQ29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPE1hcmtkb3duUHJldmlld1JlbmRlcmVyPiB7XG4gIHJldHVybiBNYXJrZG93blByZXZpZXdSZW5kZXJlciBhcyBFeHRyYWN0Q29uc3RydWN0b3I8TWFya2Rvd25QcmV2aWV3UmVuZGVyZXI+O1xufVxuIiwgImltcG9ydCB7IE1hcmtkb3duUHJldmlld1ZpZXcgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jTWFya2Rvd25QcmV2aWV3Vmlld30gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNNYXJrZG93blByZXZpZXdWaWV3fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWFya2Rvd25QcmV2aWV3Vmlld0NvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxNYXJrZG93blByZXZpZXdWaWV3PiB7XG4gIHJldHVybiBNYXJrZG93blByZXZpZXdWaWV3IGFzIHVua25vd24gYXMgRXh0cmFjdENvbnN0cnVjdG9yPE1hcmtkb3duUHJldmlld1ZpZXc+O1xufVxuIiwgImltcG9ydCB7IE1hcmtkb3duUmVuZGVyQ2hpbGQgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jTWFya2Rvd25SZW5kZXJDaGlsZH0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNNYXJrZG93blJlbmRlckNoaWxkfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWFya2Rvd25SZW5kZXJDaGlsZENvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxNYXJrZG93blJlbmRlckNoaWxkPiB7XG4gIHJldHVybiBNYXJrZG93blJlbmRlckNoaWxkIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxNYXJrZG93blJlbmRlckNoaWxkPjtcbn1cbiIsICJpbXBvcnQgeyBNYXJrZG93blJlbmRlcmVyIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI01hcmtkb3duUmVuZGVyZXJ9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jTWFya2Rvd25SZW5kZXJlcn0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1hcmtkb3duUmVuZGVyZXJDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8TWFya2Rvd25SZW5kZXJlcj4ge1xuICByZXR1cm4gTWFya2Rvd25SZW5kZXJlciBhcyB1bmtub3duIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxNYXJrZG93blJlbmRlcmVyPjtcbn1cbiIsICJpbXBvcnQgeyBNZW51IH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI01lbnV9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jTWVudX0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1lbnVDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8TWVudT4ge1xuICByZXR1cm4gTWVudSBhcyBFeHRyYWN0Q29uc3RydWN0b3I8TWVudT47XG59XG4iLCAiaW1wb3J0IHsgTWVudUl0ZW0gfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jTWVudUl0ZW19IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jTWVudUl0ZW19IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRNZW51SXRlbUNvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxNZW51SXRlbT4ge1xuICByZXR1cm4gTWVudUl0ZW0gYXMgdW5rbm93biBhcyBFeHRyYWN0Q29uc3RydWN0b3I8TWVudUl0ZW0+O1xufVxuIiwgImltcG9ydCB7IE1lbnVTZXBhcmF0b3IgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jTWVudVNlcGFyYXRvcn0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNNZW51U2VwYXJhdG9yfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWVudVNlcGFyYXRvckNvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxNZW51U2VwYXJhdG9yPiB7XG4gIHJldHVybiBNZW51U2VwYXJhdG9yIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxNZW51U2VwYXJhdG9yPjtcbn1cbiIsICJpbXBvcnQgeyBNZXRhZGF0YUNhY2hlIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI01ldGFkYXRhQ2FjaGV9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jTWV0YWRhdGFDYWNoZX0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1ldGFkYXRhQ2FjaGVDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8TWV0YWRhdGFDYWNoZT4ge1xuICByZXR1cm4gTWV0YWRhdGFDYWNoZSBhcyBFeHRyYWN0Q29uc3RydWN0b3I8TWV0YWRhdGFDYWNoZT47XG59XG4iLCAiaW1wb3J0IHsgTW9kYWwgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jTW9kYWx9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jTW9kYWx9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRNb2RhbENvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxNb2RhbD4ge1xuICByZXR1cm4gTW9kYWwgYXMgRXh0cmFjdENvbnN0cnVjdG9yPE1vZGFsPjtcbn1cbiIsICJpbXBvcnQgeyBOb3RpY2UgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jTm90aWNlfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI05vdGljZX0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE5vdGljZUNvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxOb3RpY2U+IHtcbiAgcmV0dXJuIE5vdGljZSBhcyBFeHRyYWN0Q29uc3RydWN0b3I8Tm90aWNlPjtcbn1cbiIsICJpbXBvcnQgeyBSZW5kZXJDb250ZXh0IH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI1JlbmRlckNvbnRleHR9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jUmVuZGVyQ29udGV4dH0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFJlbmRlckNvbnRleHRDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8UmVuZGVyQ29udGV4dD4ge1xuICByZXR1cm4gUmVuZGVyQ29udGV4dCBhcyBFeHRyYWN0Q29uc3RydWN0b3I8UmVuZGVyQ29udGV4dD47XG59XG4iLCAiaW1wb3J0IHsgU2NvcGUgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jU2NvcGV9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jU2NvcGV9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTY29wZUNvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxTY29wZT4ge1xuICByZXR1cm4gU2NvcGUgYXMgRXh0cmFjdENvbnN0cnVjdG9yPFNjb3BlPjtcbn1cbiIsICJpbXBvcnQgeyBTZWNyZXRTdG9yYWdlIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI1NlY3JldFN0b3JhZ2V9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jU2VjcmV0U3RvcmFnZX0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNlY3JldFN0b3JhZ2VDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8U2VjcmV0U3RvcmFnZT4ge1xuICByZXR1cm4gU2VjcmV0U3RvcmFnZSBhcyBFeHRyYWN0Q29uc3RydWN0b3I8U2VjcmV0U3RvcmFnZT47XG59XG4iLCAiaW1wb3J0IHsgU2V0dGluZyB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNTZXR0aW5nfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI1NldHRpbmd9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZXR0aW5nQ29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPFNldHRpbmc+IHtcbiAgcmV0dXJuIFNldHRpbmcgYXMgRXh0cmFjdENvbnN0cnVjdG9yPFNldHRpbmc+O1xufVxuIiwgImltcG9ydCB7IFNldHRpbmdHcm91cCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNTZXR0aW5nR3JvdXB9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jU2V0dGluZ0dyb3VwfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2V0dGluZ0dyb3VwQ29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPFNldHRpbmdHcm91cD4ge1xuICByZXR1cm4gU2V0dGluZ0dyb3VwIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxTZXR0aW5nR3JvdXA+O1xufVxuIiwgImltcG9ydCB7IFNldHRpbmdQYWdlIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI1NldHRpbmdQYWdlfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI1NldHRpbmdQYWdlfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2V0dGluZ1BhZ2VDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8U2V0dGluZ1BhZ2U+IHtcbiAgcmV0dXJuIFNldHRpbmdQYWdlIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxTZXR0aW5nUGFnZT47XG59XG4iLCAiaW1wb3J0IHsgU2V0dGluZ1RhYiB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNTZXR0aW5nVGFifSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI1NldHRpbmdUYWJ9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZXR0aW5nVGFiQ29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPFNldHRpbmdUYWI+IHtcbiAgcmV0dXJuIFNldHRpbmdUYWIgYXMgdW5rbm93biBhcyBFeHRyYWN0Q29uc3RydWN0b3I8U2V0dGluZ1RhYj47XG59XG4iLCAiaW1wb3J0IHsgVEFic3RyYWN0RmlsZSB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNUQWJzdHJhY3RGaWxlfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI1RBYnN0cmFjdEZpbGV9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUQWJzdHJhY3RGaWxlQ29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPFRBYnN0cmFjdEZpbGU+IHtcbiAgcmV0dXJuIFRBYnN0cmFjdEZpbGUgYXMgdW5rbm93biBhcyBFeHRyYWN0Q29uc3RydWN0b3I8VEFic3RyYWN0RmlsZT47XG59XG4iLCAiaW1wb3J0IHsgVGFza3MgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgQ29uc3RydWN0b3JCYXNlIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9Db25zdHJ1Y3RvckJhc2UuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jVGFza3N9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jVGFza3N9IGNvbnN0cnVjdG9yLlxuICogQHJlbWFyayBDb25zdHJ1Y3RvciBpcyBgbnVsbGAuIFNlZSB7QGxpbmsgaHR0cHM6Ly9mb3J1bS5vYnNpZGlhbi5tZC90L2FwaS1idWctdGFza3MtY2xhc3MvOTg5OTN9LlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUYXNrc0NvbnN0cnVjdG9yKCk6IENvbnN0cnVjdG9yQmFzZTxbXSwgVGFza3M+IHtcbiAgcmV0dXJuIFRhc2tzIGFzIENvbnN0cnVjdG9yQmFzZTxbXSwgVGFza3M+O1xufVxuIiwgImltcG9ydCB7IFRGaWxlIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI1RGaWxlfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI1RGaWxlfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VEZpbGVDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8VEZpbGU+IHtcbiAgcmV0dXJuIFRGaWxlIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxURmlsZT47XG59XG4iLCAiaW1wb3J0IHsgVEZvbGRlciB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNURm9sZGVyfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI1RGb2xkZXJ9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRURm9sZGVyQ29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPFRGb2xkZXI+IHtcbiAgcmV0dXJuIFRGb2xkZXIgYXMgRXh0cmFjdENvbnN0cnVjdG9yPFRGb2xkZXI+O1xufVxuIiwgImltcG9ydCB7IFZhdWx0IH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI1ZhdWx0fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI1ZhdWx0fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VmF1bHRDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8VmF1bHQ+IHtcbiAgcmV0dXJuIFZhdWx0IGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxWYXVsdD47XG59XG4iLCAiaW1wb3J0IHsgV29ya3NwYWNlIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI1dvcmtzcGFjZX0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNXb3Jrc3BhY2V9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRXb3Jrc3BhY2VDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8V29ya3NwYWNlPiB7XG4gIHJldHVybiBXb3Jrc3BhY2UgYXMgRXh0cmFjdENvbnN0cnVjdG9yPFdvcmtzcGFjZT47XG59XG4iLCAiaW1wb3J0IHsgV29ya3NwYWNlQ29udGFpbmVyIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI1dvcmtzcGFjZUNvbnRhaW5lcn0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNXb3Jrc3BhY2VDb250YWluZXJ9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRXb3Jrc3BhY2VDb250YWluZXJDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8V29ya3NwYWNlQ29udGFpbmVyPiB7XG4gIHJldHVybiBXb3Jrc3BhY2VDb250YWluZXIgYXMgdW5rbm93biBhcyBFeHRyYWN0Q29uc3RydWN0b3I8V29ya3NwYWNlQ29udGFpbmVyPjtcbn1cbiIsICJpbXBvcnQgeyBXb3Jrc3BhY2VGbG9hdGluZyB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNXb3Jrc3BhY2VGbG9hdGluZ30gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNXb3Jrc3BhY2VGbG9hdGluZ30gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFdvcmtzcGFjZUZsb2F0aW5nQ29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPFdvcmtzcGFjZUZsb2F0aW5nPiB7XG4gIHJldHVybiBXb3Jrc3BhY2VGbG9hdGluZyBhcyBFeHRyYWN0Q29uc3RydWN0b3I8V29ya3NwYWNlRmxvYXRpbmc+O1xufVxuIiwgImltcG9ydCB7IFdvcmtzcGFjZUl0ZW0gfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jV29ya3NwYWNlSXRlbX0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNXb3Jrc3BhY2VJdGVtfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0V29ya3NwYWNlSXRlbUNvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxXb3Jrc3BhY2VJdGVtPiB7XG4gIHJldHVybiBXb3Jrc3BhY2VJdGVtIGFzIHVua25vd24gYXMgRXh0cmFjdENvbnN0cnVjdG9yPFdvcmtzcGFjZUl0ZW0+O1xufVxuIiwgImltcG9ydCB7IFdvcmtzcGFjZUxlYWYgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jV29ya3NwYWNlTGVhZn0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNXb3Jrc3BhY2VMZWFmfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0V29ya3NwYWNlTGVhZkNvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxXb3Jrc3BhY2VMZWFmPiB7XG4gIHJldHVybiBXb3Jrc3BhY2VMZWFmIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxXb3Jrc3BhY2VMZWFmPjtcbn1cbiIsICJpbXBvcnQgeyBXb3Jrc3BhY2VNb2JpbGVEcmF3ZXIgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jV29ya3NwYWNlTW9iaWxlRHJhd2VyfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI1dvcmtzcGFjZU1vYmlsZURyYXdlcn0gY29uc3RydWN0b3IuXG4gKiBAcmVtYXJrIENvbnN0cnVjdG9yIGlzIGBudWxsYC4gU2VlIHtAbGluayBodHRwczovL2ZvcnVtLm9ic2lkaWFuLm1kL3QvYXBpLWJ1Zy10YXNrcy1jbGFzcy85ODk5M30uXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFdvcmtzcGFjZU1vYmlsZURyYXdlckNvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxXb3Jrc3BhY2VNb2JpbGVEcmF3ZXI+IHtcbiAgcmV0dXJuIFdvcmtzcGFjZU1vYmlsZURyYXdlciBhcyBFeHRyYWN0Q29uc3RydWN0b3I8V29ya3NwYWNlTW9iaWxlRHJhd2VyPjtcbn1cbiIsICJpbXBvcnQgeyBXb3Jrc3BhY2VQYXJlbnQgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jV29ya3NwYWNlUGFyZW50fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI1dvcmtzcGFjZVBhcmVudH0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFdvcmtzcGFjZVBhcmVudENvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxXb3Jrc3BhY2VQYXJlbnQ+IHtcbiAgcmV0dXJuIFdvcmtzcGFjZVBhcmVudCBhcyB1bmtub3duIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxXb3Jrc3BhY2VQYXJlbnQ+O1xufVxuIiwgImltcG9ydCB7IFdvcmtzcGFjZVJpYmJvbiB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNXb3Jrc3BhY2VSaWJib259IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jV29ya3NwYWNlUmliYm9ufSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0V29ya3NwYWNlUmliYm9uQ29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPFdvcmtzcGFjZVJpYmJvbj4ge1xuICByZXR1cm4gV29ya3NwYWNlUmliYm9uIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxXb3Jrc3BhY2VSaWJib24+O1xufVxuIiwgImltcG9ydCB7IFdvcmtzcGFjZVJvb3QgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jV29ya3NwYWNlUm9vdH0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNXb3Jrc3BhY2VSb290fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0V29ya3NwYWNlUm9vdENvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxXb3Jrc3BhY2VSb290PiB7XG4gIHJldHVybiBXb3Jrc3BhY2VSb290IGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxXb3Jrc3BhY2VSb290Pjtcbn1cbiIsICJpbXBvcnQgeyBXb3Jrc3BhY2VTaWRlZG9jayB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNXb3Jrc3BhY2VTaWRlZG9ja30gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNXb3Jrc3BhY2VTaWRlZG9ja30gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFdvcmtzcGFjZVNpZGVkb2NrQ29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPFdvcmtzcGFjZVNpZGVkb2NrPiB7XG4gIHJldHVybiBXb3Jrc3BhY2VTaWRlZG9jayBhcyBFeHRyYWN0Q29uc3RydWN0b3I8V29ya3NwYWNlU2lkZWRvY2s+O1xufVxuIiwgImltcG9ydCB7IFdvcmtzcGFjZVNwbGl0IH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI1dvcmtzcGFjZVNwbGl0fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI1dvcmtzcGFjZVNwbGl0fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0V29ya3NwYWNlU3BsaXRDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8V29ya3NwYWNlU3BsaXQ+IHtcbiAgcmV0dXJuIFdvcmtzcGFjZVNwbGl0IGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxXb3Jrc3BhY2VTcGxpdD47XG59XG4iLCAiaW1wb3J0IHsgV29ya3NwYWNlVGFicyB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNXb3Jrc3BhY2VUYWJzfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI1dvcmtzcGFjZVRhYnN9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRXb3Jrc3BhY2VUYWJzQ29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPFdvcmtzcGFjZVRhYnM+IHtcbiAgcmV0dXJuIFdvcmtzcGFjZVRhYnMgYXMgRXh0cmFjdENvbnN0cnVjdG9yPFdvcmtzcGFjZVRhYnM+O1xufVxuIiwgImltcG9ydCB7IFdvcmtzcGFjZVdpbmRvdyB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNXb3Jrc3BhY2VXaW5kb3d9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jV29ya3NwYWNlV2luZG93fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0V29ya3NwYWNlV2luZG93Q29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPFdvcmtzcGFjZVdpbmRvdz4ge1xuICByZXR1cm4gV29ya3NwYWNlV2luZG93IGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxXb3Jrc3BhY2VXaW5kb3c+O1xufVxuIiwgImltcG9ydCB7IEFic3RyYWN0VGV4dENvbXBvbmVudCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNBYnN0cmFjdFRleHRDb21wb25lbnR9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jQWJzdHJhY3RUZXh0Q29tcG9uZW50fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWJzdHJhY3RUZXh0Q29tcG9uZW50Q29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPFxuICBBYnN0cmFjdFRleHRDb21wb25lbnQ8SFRNTElucHV0RWxlbWVudCB8IEhUTUxUZXh0QXJlYUVsZW1lbnQ+XG4+IHtcbiAgcmV0dXJuIEFic3RyYWN0VGV4dENvbXBvbmVudCBhcyBFeHRyYWN0Q29uc3RydWN0b3I8XG4gICAgQWJzdHJhY3RUZXh0Q29tcG9uZW50PEhUTUxJbnB1dEVsZW1lbnQgfCBIVE1MVGV4dEFyZWFFbGVtZW50PlxuICA+O1xufVxuIiwgImltcG9ydCB7IEJhc2VDb21wb25lbnQgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jQmFzZUNvbXBvbmVudH0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNCYXNlQ29tcG9uZW50fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QmFzZUNvbXBvbmVudENvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxCYXNlQ29tcG9uZW50PiB7XG4gIHJldHVybiBCYXNlQ29tcG9uZW50IGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxCYXNlQ29tcG9uZW50Pjtcbn1cbiIsICJpbXBvcnQgeyBCdXR0b25Db21wb25lbnQgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jQnV0dG9uQ29tcG9uZW50fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI0J1dHRvbkNvbXBvbmVudH0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEJ1dHRvbkNvbXBvbmVudENvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxCdXR0b25Db21wb25lbnQ+IHtcbiAgcmV0dXJuIEJ1dHRvbkNvbXBvbmVudCBhcyBFeHRyYWN0Q29uc3RydWN0b3I8QnV0dG9uQ29tcG9uZW50Pjtcbn1cbiIsICJpbXBvcnQgeyBDb2xvckNvbXBvbmVudCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNDb2xvckNvbXBvbmVudH0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNDb2xvckNvbXBvbmVudH0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENvbG9yQ29tcG9uZW50Q29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPENvbG9yQ29tcG9uZW50PiB7XG4gIHJldHVybiBDb2xvckNvbXBvbmVudCBhcyBFeHRyYWN0Q29uc3RydWN0b3I8Q29sb3JDb21wb25lbnQ+O1xufVxuIiwgImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNDb21wb25lbnR9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jQ29tcG9uZW50fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29tcG9uZW50Q29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPENvbXBvbmVudD4ge1xuICByZXR1cm4gQ29tcG9uZW50IGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxDb21wb25lbnQ+O1xufVxuIiwgImltcG9ydCB7IENvbmZpcm1hdGlvbkJ1dHRvbiB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNDb25maXJtYXRpb25CdXR0b259IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jQ29uZmlybWF0aW9uQnV0dG9ufSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29uZmlybWF0aW9uQnV0dG9uQ29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPENvbmZpcm1hdGlvbkJ1dHRvbj4ge1xuICByZXR1cm4gQ29uZmlybWF0aW9uQnV0dG9uIGFzIHVua25vd24gYXMgRXh0cmFjdENvbnN0cnVjdG9yPENvbmZpcm1hdGlvbkJ1dHRvbj47XG59XG4iLCAiaW1wb3J0IHsgRGlzcGxheVZhbHVlQ29tcG9uZW50IH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI0Rpc3BsYXlWYWx1ZUNvbXBvbmVudH0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNEaXNwbGF5VmFsdWVDb21wb25lbnR9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREaXNwbGF5VmFsdWVDb21wb25lbnRDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8RGlzcGxheVZhbHVlQ29tcG9uZW50PiB7XG4gIHJldHVybiBEaXNwbGF5VmFsdWVDb21wb25lbnQgYXMgRXh0cmFjdENvbnN0cnVjdG9yPERpc3BsYXlWYWx1ZUNvbXBvbmVudD47XG59XG4iLCAiaW1wb3J0IHsgRHJvcGRvd25Db21wb25lbnQgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jRHJvcGRvd25Db21wb25lbnR9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jRHJvcGRvd25Db21wb25lbnR9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREcm9wZG93bkNvbXBvbmVudENvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxEcm9wZG93bkNvbXBvbmVudD4ge1xuICByZXR1cm4gRHJvcGRvd25Db21wb25lbnQgYXMgRXh0cmFjdENvbnN0cnVjdG9yPERyb3Bkb3duQ29tcG9uZW50Pjtcbn1cbiIsICJpbXBvcnQgeyBFeHRyYUJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNFeHRyYUJ1dHRvbkNvbXBvbmVudH0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNFeHRyYUJ1dHRvbkNvbXBvbmVudH0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEV4dHJhQnV0dG9uQ29tcG9uZW50Q29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPEV4dHJhQnV0dG9uQ29tcG9uZW50PiB7XG4gIHJldHVybiBFeHRyYUJ1dHRvbkNvbXBvbmVudCBhcyBFeHRyYWN0Q29uc3RydWN0b3I8RXh0cmFCdXR0b25Db21wb25lbnQ+O1xufVxuIiwgImltcG9ydCB7IE1vbWVudEZvcm1hdENvbXBvbmVudCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNNb21lbnRGb3JtYXRDb21wb25lbnR9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jTW9tZW50Rm9ybWF0Q29tcG9uZW50fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TW9tZW50Rm9ybWF0Q29tcG9uZW50Q29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPE1vbWVudEZvcm1hdENvbXBvbmVudD4ge1xuICByZXR1cm4gTW9tZW50Rm9ybWF0Q29tcG9uZW50IGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxNb21lbnRGb3JtYXRDb21wb25lbnQ+O1xufVxuIiwgImltcG9ydCB7IFByb2dyZXNzQmFyQ29tcG9uZW50IH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI1Byb2dyZXNzQmFyQ29tcG9uZW50fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI1Byb2dyZXNzQmFyQ29tcG9uZW50fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UHJvZ3Jlc3NCYXJDb21wb25lbnRDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8UHJvZ3Jlc3NCYXJDb21wb25lbnQ+IHtcbiAgcmV0dXJuIFByb2dyZXNzQmFyQ29tcG9uZW50IGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxQcm9ncmVzc0JhckNvbXBvbmVudD47XG59XG4iLCAiaW1wb3J0IHsgU2VhcmNoQ29tcG9uZW50IH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI1NlYXJjaENvbXBvbmVudH0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNTZWFyY2hDb21wb25lbnR9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZWFyY2hDb21wb25lbnRDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8U2VhcmNoQ29tcG9uZW50PiB7XG4gIHJldHVybiBTZWFyY2hDb21wb25lbnQgYXMgRXh0cmFjdENvbnN0cnVjdG9yPFNlYXJjaENvbXBvbmVudD47XG59XG4iLCAiaW1wb3J0IHsgU2VjcmV0Q29tcG9uZW50IH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI1NlY3JldENvbXBvbmVudH0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNTZWNyZXRDb21wb25lbnR9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZWNyZXRDb21wb25lbnRDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8U2VjcmV0Q29tcG9uZW50PiB7XG4gIHJldHVybiBTZWNyZXRDb21wb25lbnQgYXMgRXh0cmFjdENvbnN0cnVjdG9yPFNlY3JldENvbXBvbmVudD47XG59XG4iLCAiaW1wb3J0IHsgU2xpZGVyQ29tcG9uZW50IH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI1NsaWRlckNvbXBvbmVudH0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNTbGlkZXJDb21wb25lbnR9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTbGlkZXJDb21wb25lbnRDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8U2xpZGVyQ29tcG9uZW50PiB7XG4gIHJldHVybiBTbGlkZXJDb21wb25lbnQgYXMgRXh0cmFjdENvbnN0cnVjdG9yPFNsaWRlckNvbXBvbmVudD47XG59XG4iLCAiaW1wb3J0IHsgVGV4dEFyZWFDb21wb25lbnQgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jVGV4dEFyZWFDb21wb25lbnR9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jVGV4dEFyZWFDb21wb25lbnR9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUZXh0QXJlYUNvbXBvbmVudENvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxUZXh0QXJlYUNvbXBvbmVudD4ge1xuICByZXR1cm4gVGV4dEFyZWFDb21wb25lbnQgYXMgRXh0cmFjdENvbnN0cnVjdG9yPFRleHRBcmVhQ29tcG9uZW50Pjtcbn1cbiIsICJpbXBvcnQgeyBUZXh0Q29tcG9uZW50IH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI1RleHRDb21wb25lbnR9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jVGV4dENvbXBvbmVudH0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRleHRDb21wb25lbnRDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8VGV4dENvbXBvbmVudD4ge1xuICByZXR1cm4gVGV4dENvbXBvbmVudCBhcyBFeHRyYWN0Q29uc3RydWN0b3I8VGV4dENvbXBvbmVudD47XG59XG4iLCAiaW1wb3J0IHsgVG9nZ2xlQ29tcG9uZW50IH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI1RvZ2dsZUNvbXBvbmVudH0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNUb2dnbGVDb21wb25lbnR9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUb2dnbGVDb21wb25lbnRDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8VG9nZ2xlQ29tcG9uZW50PiB7XG4gIHJldHVybiBUb2dnbGVDb21wb25lbnQgYXMgRXh0cmFjdENvbnN0cnVjdG9yPFRvZ2dsZUNvbXBvbmVudD47XG59XG4iLCAiaW1wb3J0IHsgVmFsdWVDb21wb25lbnQgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jVmFsdWVDb21wb25lbnR9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jVmFsdWVDb21wb25lbnR9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRWYWx1ZUNvbXBvbmVudENvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxWYWx1ZUNvbXBvbmVudDx1bmtub3duPj4ge1xuICByZXR1cm4gVmFsdWVDb21wb25lbnQgYXMgRXh0cmFjdENvbnN0cnVjdG9yPFZhbHVlQ29tcG9uZW50PHVua25vd24+Pjtcbn1cbiIsICJpbXBvcnQgeyBCb29sZWFuVmFsdWUgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jQm9vbGVhblZhbHVlfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI0Jvb2xlYW5WYWx1ZX0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEJvb2xlYW5WYWx1ZUNvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxCb29sZWFuVmFsdWU+IHtcbiAgcmV0dXJuIEJvb2xlYW5WYWx1ZSBhcyBFeHRyYWN0Q29uc3RydWN0b3I8Qm9vbGVhblZhbHVlPjtcbn1cbiIsICJpbXBvcnQgeyBEYXRlVmFsdWUgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jRGF0ZVZhbHVlfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI0RhdGVWYWx1ZX0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERhdGVWYWx1ZUNvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxEYXRlVmFsdWU+IHtcbiAgcmV0dXJuIERhdGVWYWx1ZSBhcyBFeHRyYWN0Q29uc3RydWN0b3I8RGF0ZVZhbHVlPjtcbn1cbiIsICJpbXBvcnQgeyBEdXJhdGlvblZhbHVlIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI0R1cmF0aW9uVmFsdWV9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jRHVyYXRpb25WYWx1ZX0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldER1cmF0aW9uVmFsdWVDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8RHVyYXRpb25WYWx1ZT4ge1xuICByZXR1cm4gRHVyYXRpb25WYWx1ZSBhcyBFeHRyYWN0Q29uc3RydWN0b3I8RHVyYXRpb25WYWx1ZT47XG59XG4iLCAiaW1wb3J0IHsgRmlsZVZhbHVlIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI0ZpbGVWYWx1ZX0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNGaWxlVmFsdWV9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWxlVmFsdWVDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8RmlsZVZhbHVlPiB7XG4gIHJldHVybiBGaWxlVmFsdWUgYXMgRXh0cmFjdENvbnN0cnVjdG9yPEZpbGVWYWx1ZT47XG59XG4iLCAiaW1wb3J0IHsgSFRNTFZhbHVlIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI0hUTUxWYWx1ZX0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNIVE1MVmFsdWV9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRIVE1MVmFsdWVDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8SFRNTFZhbHVlPiB7XG4gIHJldHVybiBIVE1MVmFsdWUgYXMgRXh0cmFjdENvbnN0cnVjdG9yPEhUTUxWYWx1ZT47XG59XG4iLCAiaW1wb3J0IHsgSWNvblZhbHVlIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI0ljb25WYWx1ZX0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNJY29uVmFsdWV9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRJY29uVmFsdWVDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8SWNvblZhbHVlPiB7XG4gIHJldHVybiBJY29uVmFsdWUgYXMgRXh0cmFjdENvbnN0cnVjdG9yPEljb25WYWx1ZT47XG59XG4iLCAiaW1wb3J0IHsgSW1hZ2VWYWx1ZSB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNJbWFnZVZhbHVlfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI0ltYWdlVmFsdWV9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbWFnZVZhbHVlQ29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPEltYWdlVmFsdWU+IHtcbiAgcmV0dXJuIEltYWdlVmFsdWUgYXMgRXh0cmFjdENvbnN0cnVjdG9yPEltYWdlVmFsdWU+O1xufVxuIiwgImltcG9ydCB7IExpbmtWYWx1ZSB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNMaW5rVmFsdWV9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jTGlua1ZhbHVlfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGlua1ZhbHVlQ29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPExpbmtWYWx1ZT4ge1xuICByZXR1cm4gTGlua1ZhbHVlIGFzIHVua25vd24gYXMgRXh0cmFjdENvbnN0cnVjdG9yPExpbmtWYWx1ZT47XG59XG4iLCAiaW1wb3J0IHsgTGlzdFZhbHVlIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI0xpc3RWYWx1ZX0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNMaXN0VmFsdWV9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRMaXN0VmFsdWVDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8TGlzdFZhbHVlPiB7XG4gIHJldHVybiBMaXN0VmFsdWUgYXMgRXh0cmFjdENvbnN0cnVjdG9yPExpc3RWYWx1ZT47XG59XG4iLCAiaW1wb3J0IHsgTm90TnVsbFZhbHVlIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI05vdE51bGxWYWx1ZX0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNOb3ROdWxsVmFsdWV9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXROb3ROdWxsVmFsdWVDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8Tm90TnVsbFZhbHVlPiB7XG4gIHJldHVybiBOb3ROdWxsVmFsdWUgYXMgdW5rbm93biBhcyBFeHRyYWN0Q29uc3RydWN0b3I8Tm90TnVsbFZhbHVlPjtcbn1cbiIsICJpbXBvcnQgeyBOdWxsVmFsdWUgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jTnVsbFZhbHVlfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI051bGxWYWx1ZX0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE51bGxWYWx1ZUNvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxOdWxsVmFsdWU+IHtcbiAgcmV0dXJuIE51bGxWYWx1ZSBhcyBFeHRyYWN0Q29uc3RydWN0b3I8TnVsbFZhbHVlPjtcbn1cbiIsICJpbXBvcnQgeyBOdW1iZXJWYWx1ZSB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNOdW1iZXJWYWx1ZX0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNOdW1iZXJWYWx1ZX0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE51bWJlclZhbHVlQ29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPE51bWJlclZhbHVlPiB7XG4gIHJldHVybiBOdW1iZXJWYWx1ZSBhcyBFeHRyYWN0Q29uc3RydWN0b3I8TnVtYmVyVmFsdWU+O1xufVxuIiwgImltcG9ydCB7IE9iamVjdFZhbHVlIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI09iamVjdFZhbHVlfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI09iamVjdFZhbHVlfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0T2JqZWN0VmFsdWVDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8T2JqZWN0VmFsdWU+IHtcbiAgcmV0dXJuIE9iamVjdFZhbHVlIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxPYmplY3RWYWx1ZT47XG59XG4iLCAiaW1wb3J0IHsgUmVnRXhwVmFsdWUgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jUmVnRXhwVmFsdWV9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jUmVnRXhwVmFsdWV9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRSZWdFeHBWYWx1ZUNvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxSZWdFeHBWYWx1ZT4ge1xuICByZXR1cm4gUmVnRXhwVmFsdWUgYXMgRXh0cmFjdENvbnN0cnVjdG9yPFJlZ0V4cFZhbHVlPjtcbn1cbiIsICJpbXBvcnQgeyBSZWxhdGl2ZURhdGVWYWx1ZSB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNSZWxhdGl2ZURhdGVWYWx1ZX0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNSZWxhdGl2ZURhdGVWYWx1ZX0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFJlbGF0aXZlRGF0ZVZhbHVlQ29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPFJlbGF0aXZlRGF0ZVZhbHVlPiB7XG4gIHJldHVybiBSZWxhdGl2ZURhdGVWYWx1ZSBhcyBFeHRyYWN0Q29uc3RydWN0b3I8UmVsYXRpdmVEYXRlVmFsdWU+O1xufVxuIiwgImltcG9ydCB7IFN0cmluZ1ZhbHVlIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI1N0cmluZ1ZhbHVlfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI1N0cmluZ1ZhbHVlfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RyaW5nVmFsdWVDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8U3RyaW5nVmFsdWU+IHtcbiAgcmV0dXJuIFN0cmluZ1ZhbHVlIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxTdHJpbmdWYWx1ZT47XG59XG4iLCAiaW1wb3J0IHsgVGFnVmFsdWUgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jVGFnVmFsdWV9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jVGFnVmFsdWV9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUYWdWYWx1ZUNvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxUYWdWYWx1ZT4ge1xuICByZXR1cm4gVGFnVmFsdWUgYXMgRXh0cmFjdENvbnN0cnVjdG9yPFRhZ1ZhbHVlPjtcbn1cbiIsICJpbXBvcnQgeyBVcmxWYWx1ZSB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNVcmxWYWx1ZX0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNVcmxWYWx1ZX0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFVybFZhbHVlQ29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPFVybFZhbHVlPiB7XG4gIHJldHVybiBVcmxWYWx1ZSBhcyBFeHRyYWN0Q29uc3RydWN0b3I8VXJsVmFsdWU+O1xufVxuIiwgImltcG9ydCB7IFZhbHVlIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI1ZhbHVlfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI1ZhbHVlfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VmFsdWVDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8VmFsdWU+IHtcbiAgcmV0dXJuIFZhbHVlIGFzIHVua25vd24gYXMgRXh0cmFjdENvbnN0cnVjdG9yPFZhbHVlPjtcbn1cbiIsICJpbXBvcnQgeyBFZGl0YWJsZUZpbGVWaWV3IH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI0VkaXRhYmxlRmlsZVZpZXd9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jRWRpdGFibGVGaWxlVmlld30gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVkaXRhYmxlRmlsZVZpZXdDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8RWRpdGFibGVGaWxlVmlldz4ge1xuICByZXR1cm4gRWRpdGFibGVGaWxlVmlldyBhcyBFeHRyYWN0Q29uc3RydWN0b3I8RWRpdGFibGVGaWxlVmlldz47XG59XG4iLCAiaW1wb3J0IHsgTWFya2Rvd25WaWV3IH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI01hcmtkb3duVmlld30gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNNYXJrZG93blZpZXd9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRNYXJrZG93blZpZXdDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8TWFya2Rvd25WaWV3PiB7XG4gIHJldHVybiBNYXJrZG93blZpZXcgYXMgRXh0cmFjdENvbnN0cnVjdG9yPE1hcmtkb3duVmlldz47XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgQXBwTWVudUJhck1hbmFnZXIgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvQXBwTWVudUJhck1hbmFnZXIuZC50cyc7XG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIEFwcE1lbnVCYXJNYW5hZ2VyfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcCBpbnN0YW5jZS5cbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgQXBwTWVudUJhck1hbmFnZXJ9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBcHBNZW51QmFyTWFuYWdlckNvbnN0cnVjdG9yKGFwcDogQXBwKTogRXh0cmFjdENvbnN0cnVjdG9yPEFwcE1lbnVCYXJNYW5hZ2VyPiB7XG4gIHJldHVybiBhcHAuYXBwTWVudUJhck1hbmFnZXIuY29uc3RydWN0b3IgYXMgRXh0cmFjdENvbnN0cnVjdG9yPEFwcE1lbnVCYXJNYW5hZ2VyPjtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBBcHBTZXR0aW5nIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL0FwcFNldHRpbmcuZC50cyc7XG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIEFwcFNldHRpbmd9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwIGluc3RhbmNlLlxuICogQHJldHVybnMgVGhlIHtAbGluayBBcHBTZXR0aW5nfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QXBwU2V0dGluZ0NvbnN0cnVjdG9yKGFwcDogQXBwKTogRXh0cmFjdENvbnN0cnVjdG9yPEFwcFNldHRpbmc+IHtcbiAgcmV0dXJuIGFwcC5zZXR0aW5nLmNvbnN0cnVjdG9yIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxBcHBTZXR0aW5nPjtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBDbGkgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvY2xpL0NsaS5kLnRzJztcbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgQ2xpfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcCBpbnN0YW5jZS5cbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgQ2xpfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2xpQ29uc3RydWN0b3IoYXBwOiBBcHApOiBFeHRyYWN0Q29uc3RydWN0b3I8Q2xpPiB7XG4gIHJldHVybiBhcHAuY2xpLmNvbnN0cnVjdG9yIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxDbGk+O1xufVxuIiwgImltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IENvbW1hbmRzIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbW1hbmRzL0NvbW1hbmRzLmQudHMnO1xuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBDb21tYW5kc30gY29uc3RydWN0b3IuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHAgaW5zdGFuY2UuXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIENvbW1hbmRzfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29tbWFuZHNDb25zdHJ1Y3RvcihhcHA6IEFwcCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxDb21tYW5kcz4ge1xuICByZXR1cm4gYXBwLmNvbW1hbmRzLmNvbnN0cnVjdG9yIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxDb21tYW5kcz47XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5pbXBvcnQgdHlwZSB7IEN1c3RvbUNTUyB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9jdXN0b20tY3NzL0N1c3RvbUNTUy5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBDdXN0b21DU1N9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwIGluc3RhbmNlLlxuICogQHJldHVybnMgVGhlIHtAbGluayBDdXN0b21DU1N9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDdXN0b21DU1NDb25zdHJ1Y3RvcihhcHA6IEFwcCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxDdXN0b21DU1M+IHtcbiAgcmV0dXJuIGFwcC5jdXN0b21Dc3MuY29uc3RydWN0b3IgYXMgRXh0cmFjdENvbnN0cnVjdG9yPEN1c3RvbUNTUz47XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5pbXBvcnQgdHlwZSB7IERyYWdNYW5hZ2VyIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2RyYWctbWFuYWdlci9EcmFnTWFuYWdlci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBEcmFnTWFuYWdlcn0gY29uc3RydWN0b3IuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHAgaW5zdGFuY2UuXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIERyYWdNYW5hZ2VyfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RHJhZ01hbmFnZXJDb25zdHJ1Y3RvcihhcHA6IEFwcCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxEcmFnTWFuYWdlcj4ge1xuICByZXR1cm4gYXBwLmRyYWdNYW5hZ2VyLmNvbnN0cnVjdG9yIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxEcmFnTWFuYWdlcj47XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5pbXBvcnQgdHlwZSB7IEVkaXRvclN1Z2dlc3RzIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL0VkaXRvclN1Z2dlc3RzLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIEVkaXRvclN1Z2dlc3RzfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcCBpbnN0YW5jZS5cbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgRWRpdG9yU3VnZ2VzdHN9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRFZGl0b3JTdWdnZXN0c0NvbnN0cnVjdG9yKGFwcDogQXBwKTogRXh0cmFjdENvbnN0cnVjdG9yPEVkaXRvclN1Z2dlc3RzPiB7XG4gIHJldHVybiBhcHAud29ya3NwYWNlLmVkaXRvclN1Z2dlc3QuY29uc3RydWN0b3IgYXMgRXh0cmFjdENvbnN0cnVjdG9yPEVkaXRvclN1Z2dlc3RzPjtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcbmltcG9ydCB0eXBlIHsgRW1iZWRSZWdpc3RyeSB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9lbWJlZC1yZWdpc3RyeS9FbWJlZFJlZ2lzdHJ5LmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIEVtYmVkUmVnaXN0cnl9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwIGluc3RhbmNlLlxuICogQHJldHVybnMgVGhlIHtAbGluayBFbWJlZFJlZ2lzdHJ5fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW1iZWRSZWdpc3RyeUNvbnN0cnVjdG9yKGFwcDogQXBwKTogRXh0cmFjdENvbnN0cnVjdG9yPEVtYmVkUmVnaXN0cnk+IHtcbiAgcmV0dXJuIGFwcC5lbWJlZFJlZ2lzdHJ5LmNvbnN0cnVjdG9yIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxFbWJlZFJlZ2lzdHJ5Pjtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcbmltcG9ydCB0eXBlIHsgRm9sZE1hbmFnZXIgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvRm9sZE1hbmFnZXIuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgRm9sZE1hbmFnZXJ9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwIGluc3RhbmNlLlxuICogQHJldHVybnMgVGhlIHtAbGluayBGb2xkTWFuYWdlcn0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZvbGRNYW5hZ2VyQ29uc3RydWN0b3IoYXBwOiBBcHApOiBFeHRyYWN0Q29uc3RydWN0b3I8Rm9sZE1hbmFnZXI+IHtcbiAgcmV0dXJuIGFwcC5mb2xkTWFuYWdlci5jb25zdHJ1Y3RvciBhcyBFeHRyYWN0Q29uc3RydWN0b3I8Rm9sZE1hbmFnZXI+O1xufVxuIiwgImltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5pbXBvcnQgdHlwZSB7IEZyYW1lRG9tIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL0ZyYW1lRG9tLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIEZyYW1lRG9tfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIEZyYW1lRG9tfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RnJhbWVEb21Db25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8RnJhbWVEb20+IHtcbiAgcmV0dXJuIHdpbmRvdy5mcmFtZURvbS5jb25zdHJ1Y3RvciBhcyBFeHRyYWN0Q29uc3RydWN0b3I8RnJhbWVEb20+O1xufVxuIiwgImltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuaW1wb3J0IHR5cGUgeyBIb3RrZXlNYW5hZ2VyIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2hvdGtleS1tYW5hZ2VyL0hvdGtleU1hbmFnZXIuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgSG90a2V5TWFuYWdlcn0gY29uc3RydWN0b3IuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHAgaW5zdGFuY2UuXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIEhvdGtleU1hbmFnZXJ9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRIb3RrZXlNYW5hZ2VyQ29uc3RydWN0b3IoYXBwOiBBcHApOiBFeHRyYWN0Q29uc3RydWN0b3I8SG90a2V5TWFuYWdlcj4ge1xuICByZXR1cm4gYXBwLmhvdGtleU1hbmFnZXIuY29uc3RydWN0b3IgYXMgRXh0cmFjdENvbnN0cnVjdG9yPEhvdGtleU1hbmFnZXI+O1xufVxuIiwgImltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuaW1wb3J0IHR5cGUgeyBNZXRhZGF0YVR5cGVNYW5hZ2VyIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL21ldGFkYXRhLXR5cGUtbWFuYWdlci9NZXRhZGF0YVR5cGVNYW5hZ2VyLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIE1ldGFkYXRhVHlwZU1hbmFnZXJ9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwIGluc3RhbmNlLlxuICogQHJldHVybnMgVGhlIHtAbGluayBNZXRhZGF0YVR5cGVNYW5hZ2VyfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWV0YWRhdGFUeXBlTWFuYWdlckNvbnN0cnVjdG9yKGFwcDogQXBwKTogRXh0cmFjdENvbnN0cnVjdG9yPE1ldGFkYXRhVHlwZU1hbmFnZXI+IHtcbiAgcmV0dXJuIGFwcC5tZXRhZGF0YVR5cGVNYW5hZ2VyLmNvbnN0cnVjdG9yIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxNZXRhZGF0YVR5cGVNYW5hZ2VyPjtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcbmltcG9ydCB0eXBlIHsgT2JzaWRpYW5ET00gfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvT2JzaWRpYW5ET00uZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgT2JzaWRpYW5ET019IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwIGluc3RhbmNlLlxuICogQHJldHVybnMgVGhlIHtAbGluayBPYnNpZGlhbkRPTX0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE9ic2lkaWFuRE9NQ29uc3RydWN0b3IoYXBwOiBBcHApOiBFeHRyYWN0Q29uc3RydWN0b3I8T2JzaWRpYW5ET00+IHtcbiAgcmV0dXJuIGFwcC5kb20uY29uc3RydWN0b3IgYXMgRXh0cmFjdENvbnN0cnVjdG9yPE9ic2lkaWFuRE9NPjtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcbmltcG9ydCB0eXBlIHsgUGx1Z2lucyB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9wbHVnaW5zL1BsdWdpbnMuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgUGx1Z2luc30gY29uc3RydWN0b3IuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHAgaW5zdGFuY2UuXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIFBsdWdpbnN9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQbHVnaW5zQ29uc3RydWN0b3IoYXBwOiBBcHApOiBFeHRyYWN0Q29uc3RydWN0b3I8UGx1Z2lucz4ge1xuICByZXR1cm4gYXBwLnBsdWdpbnMuY29uc3RydWN0b3IgYXMgRXh0cmFjdENvbnN0cnVjdG9yPFBsdWdpbnM+O1xufVxuIiwgImltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuaW1wb3J0IHR5cGUgeyBSZWNlbnRGaWxlVHJhY2tlciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9SZWNlbnRGaWxlVHJhY2tlci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBSZWNlbnRGaWxlVHJhY2tlcn0gY29uc3RydWN0b3IuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHAgaW5zdGFuY2UuXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIFJlY2VudEZpbGVUcmFja2VyfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVjZW50RmlsZVRyYWNrZXJDb25zdHJ1Y3RvcihhcHA6IEFwcCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxSZWNlbnRGaWxlVHJhY2tlcj4ge1xuICByZXR1cm4gYXBwLndvcmtzcGFjZS5yZWNlbnRGaWxlVHJhY2tlci5jb25zdHJ1Y3RvciBhcyBFeHRyYWN0Q29uc3RydWN0b3I8UmVjZW50RmlsZVRyYWNrZXI+O1xufVxuIiwgImltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuaW1wb3J0IHR5cGUgeyBTaGFyZVJlY2VpdmVyIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL1NoYXJlUmVjZWl2ZXIuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgU2hhcmVSZWNlaXZlcn0gY29uc3RydWN0b3IuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHAgaW5zdGFuY2UuXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIFNoYXJlUmVjZWl2ZXJ9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTaGFyZVJlY2VpdmVyQ29uc3RydWN0b3IoYXBwOiBBcHApOiBFeHRyYWN0Q29uc3RydWN0b3I8U2hhcmVSZWNlaXZlcj4ge1xuICByZXR1cm4gYXBwLnNoYXJlUmVjZWl2ZXIuY29uc3RydWN0b3IgYXMgRXh0cmFjdENvbnN0cnVjdG9yPFNoYXJlUmVjZWl2ZXI+O1xufVxuIiwgImltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuaW1wb3J0IHR5cGUgeyBTdGF0dXNCYXIgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvU3RhdHVzQmFyLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIFN0YXR1c0Jhcn0gY29uc3RydWN0b3IuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHAgaW5zdGFuY2UuXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIFN0YXR1c0Jhcn0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFN0YXR1c0JhckNvbnN0cnVjdG9yKGFwcDogQXBwKTogRXh0cmFjdENvbnN0cnVjdG9yPFN0YXR1c0Jhcj4ge1xuICByZXR1cm4gYXBwLnN0YXR1c0Jhci5jb25zdHJ1Y3RvciBhcyBFeHRyYWN0Q29uc3RydWN0b3I8U3RhdHVzQmFyPjtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcbmltcG9ydCB0eXBlIHsgVmlld1JlZ2lzdHJ5IH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL3ZpZXctcmVnaXN0cnkvVmlld1JlZ2lzdHJ5LmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIFZpZXdSZWdpc3RyeX0gY29uc3RydWN0b3IuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHAgaW5zdGFuY2UuXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIFZpZXdSZWdpc3RyeX0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFZpZXdSZWdpc3RyeUNvbnN0cnVjdG9yKGFwcDogQXBwKTogRXh0cmFjdENvbnN0cnVjdG9yPFZpZXdSZWdpc3RyeT4ge1xuICByZXR1cm4gYXBwLnZpZXdSZWdpc3RyeS5jb25zdHJ1Y3RvciBhcyBFeHRyYWN0Q29uc3RydWN0b3I8Vmlld1JlZ2lzdHJ5Pjtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcbmltcG9ydCB0eXBlIHsgV29ya3NwYWNlTGVhZkhpc3RvcnkgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvd29ya3NwYWNlLWxlYWYtaGlzdG9yeS9Xb3Jrc3BhY2VMZWFmSGlzdG9yeS5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBXb3Jrc3BhY2VMZWFmSGlzdG9yeX0gY29uc3RydWN0b3IuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHAgaW5zdGFuY2UuXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIFdvcmtzcGFjZUxlYWZIaXN0b3J5fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0V29ya3NwYWNlTGVhZkhpc3RvcnlDb25zdHJ1Y3RvcihhcHA6IEFwcCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxXb3Jrc3BhY2VMZWFmSGlzdG9yeT4ge1xuICBjb25zdCBsZWFmID0gYXBwLndvcmtzcGFjZS5nZXRNb3N0UmVjZW50TGVhZigpO1xuICBpZiAoIWxlYWYpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHdvcmtzcGFjZSBsZWFmIGF2YWlsYWJsZSB0byBleHRyYWN0IFdvcmtzcGFjZUxlYWZIaXN0b3J5IGNvbnN0cnVjdG9yJyk7XG4gIH1cbiAgcmV0dXJuIGxlYWYuaGlzdG9yeS5jb25zdHJ1Y3RvciBhcyBFeHRyYWN0Q29uc3RydWN0b3I8V29ya3NwYWNlTGVhZkhpc3Rvcnk+O1xufVxuIiwgImltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuaW1wb3J0IHR5cGUgeyBCYXNlc0NvbnRleHQgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9pbnRlcm5hbHMvaW50ZXJuYWwtcGx1Z2lucy9iYXNlcy9CYXNlc0NvbnRleHQuZC50cyc7XG5pbXBvcnQgdHlwZSB7IEJhc2VzUXVlcnkgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9pbnRlcm5hbHMvaW50ZXJuYWwtcGx1Z2lucy9iYXNlcy9CYXNlc1F1ZXJ5LmQudHMnO1xuXG5pbXBvcnQgeyBJbnRlcm5hbFBsdWdpbk5hbWUgfSBmcm9tICcuLi8uLi8uLi8uLi9jb25zdGFudHMvSW50ZXJuYWxQbHVnaW5OYW1lLnRzJztcbmltcG9ydCB7IGdldFF1ZXJ5Q29udHJvbGxlckNvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vYXVnbWVudGF0aW9ucy9iYXNlcy9nZXRRdWVyeUNvbnRyb2xsZXJDb25zdHJ1Y3Rvci50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgQmFzZXNDb250ZXh0fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcCBpbnN0YW5jZS5cbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgQmFzZXNDb250ZXh0fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QmFzZXNDb250ZXh0Q29uc3RydWN0b3IoYXBwOiBBcHApOiBFeHRyYWN0Q29uc3RydWN0b3I8QmFzZXNDb250ZXh0PiB7XG4gIGNvbnN0IGJhc2VzUGx1Z2luID0gYXBwLmludGVybmFsUGx1Z2lucy5nZXRQbHVnaW5CeUlkKEludGVybmFsUGx1Z2luTmFtZS5CYXNlcyk7XG4gIGlmICghYmFzZXNQbHVnaW4pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSAke0ludGVybmFsUGx1Z2luTmFtZS5CYXNlc30gcGx1Z2luIGlzIG5vdCBsb2FkZWQuYCk7XG4gIH1cbiAgY29uc3QgcXVlcnlDb250cm9sbGVyQ29uc3RydWN0b3IgPSBnZXRRdWVyeUNvbnRyb2xsZXJDb25zdHJ1Y3RvcigpO1xuICBjb25zdCBxdWVyeUNvbnRyb2xsZXIgPSBuZXcgcXVlcnlDb250cm9sbGVyQ29uc3RydWN0b3IoYXBwLCBiYXNlc1BsdWdpbi5pbnN0YW5jZSwgY3JlYXRlRGl2KCkpO1xuICBxdWVyeUNvbnRyb2xsZXIucXVlcnkgPSB7fSBhcyBCYXNlc1F1ZXJ5O1xuICBjb25zdCBiYXNlc0NvbnRleHQgPSBxdWVyeUNvbnRyb2xsZXIuYnVpbGRCYXNlc0NvbnRleHQoKTtcbiAgcmV0dXJuIGJhc2VzQ29udGV4dC5jb25zdHJ1Y3RvciBhcyBFeHRyYWN0Q29uc3RydWN0b3I8QmFzZXNDb250ZXh0Pjtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEJhc2VzUXVlcnlDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvQmFzZXNRdWVyeUNvbnN0cnVjdG9yLmQudHMnO1xuXG5pbXBvcnQgeyBnZXRCYXNlc0NvbnRyb2xsZXJGcm9tUmVuZGVyIH0gZnJvbSAnLi4vLi4vLi4vLi4vZnVuY3Rpb25zL2dldEJhc2VzQ29udHJvbGxlckZyb21SZW5kZXIudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIEJhc2VzUXVlcnl9IGNvbnN0cnVjdG9yICh0aGUgYC5iYXNlYCBwYXJzZXIsIGV4cG9zaW5nIHRoZSBzdGF0aWMgYGZyb21TdHJpbmdgKS5cbiAqXG4gKiBgQmFzZXNRdWVyeWAgaGFzIG5vIHB1YmxpYyBgb2JzaWRpYW5gIGV4cG9ydCBhbmQgbm8gbGVhZi1mcmVlIGZhY3RvcnksIHNvIHRoZSBjbGFzcyBpcyBoYXJ2ZXN0ZWQgYXRcbiAqIHJ1bnRpbWU6IGEgdGhyb3dhd2F5IGJhc2UgaXMgcmVuZGVyZWQgb2ZmLXNjcmVlbiAodmlhIHtAbGluayBnZXRCYXNlc0NvbnRyb2xsZXJGcm9tUmVuZGVyfSkgYW5kIHRoZVxuICogY29uc3RydWN0b3IgaXMgcmVhZCBvZmYgdGhlIHJlc3VsdGluZyBxdWVyeS4gVGhlIHRocm93YXdheSByZW5kZXIgaXMgdG9ybiBkb3duIGJlZm9yZSByZXR1cm5pbmcuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHAgaW5zdGFuY2UuXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIEJhc2VzUXVlcnl9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRCYXNlc1F1ZXJ5Q29uc3RydWN0b3IoYXBwOiBBcHApOiBQcm9taXNlPEJhc2VzUXVlcnlDb25zdHJ1Y3Rvcj4ge1xuICBjb25zdCBjb21wb25lbnQgPSBuZXcgQ29tcG9uZW50KCk7XG4gIHRyeSB7XG4gICAgY29uc3QgY29udHJvbGxlciA9IGF3YWl0IGdldEJhc2VzQ29udHJvbGxlckZyb21SZW5kZXIoYXBwLCAndmlld3M6IFtdXFxuJywgJ2dldEJhc2VzUXVlcnlDb25zdHJ1Y3Rvci5iYXNlJywgY29tcG9uZW50KTtcbiAgICBjb25zdCBxdWVyeSA9IGNvbnRyb2xsZXIucXVlcnk7XG4gICAgaWYgKCFxdWVyeSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgcmVuZGVyZWQgYmFzZSBkaWQgbm90IHByb2R1Y2UgYSBxdWVyeS4nKTtcbiAgICB9XG4gICAgcmV0dXJuIHF1ZXJ5LmNvbnN0cnVjdG9yIGFzIHVua25vd24gYXMgQmFzZXNRdWVyeUNvbnN0cnVjdG9yO1xuICB9IGZpbmFsbHkge1xuICAgIGNvbXBvbmVudC51bmxvYWQoKTtcbiAgfVxufVxuIiwgImltcG9ydCB0eXBlIHtcbiAgQXBwLFxuICBDb21wb25lbnRcbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBNYXJrZG93blJlbmRlcmVyIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEJhc2VzQ29udHJvbGxlciB9IGZyb20gJy4uLy4uL2ludGVybmFscy9pbnRlcm5hbC1wbHVnaW5zL2Jhc2VzL0Jhc2VzQ29udHJvbGxlci5kLnRzJztcblxuLyoqXG4gKiBSZW5kZXIgYSBiYXNlIGludG8gYSBkZXRhY2hlZCwgb2ZmLXNjcmVlbiBlbGVtZW50IGFuZCByZXR1cm4gdGhlIGxpdmUge0BsaW5rIEJhc2VzQ29udHJvbGxlcn0gdGhhdCBkcml2ZXNcbiAqIGl0LiBUaGlzIGlzIHRoZSBsZWFmLWZyZWUgcm91dGUgdG8gaGVhZGxlc3MgYmFzZSBldmFsdWF0aW9uOiBpdCBydW5zIE9ic2lkaWFuJ3Mgb3duIGJhc2UtZW1iZWQgcHJvY2Vzc29yXG4gKiB2aWEgdGhlIHB1YmxpYyB7QGxpbmsgb2JzaWRpYW4jTWFya2Rvd25SZW5kZXJlci5yZW5kZXJ9LCB0aGVuIGxvY2F0ZXMgdGhlIGNvbnRyb2xsZXIgaW4gdGhlIHJlbmRlcidzXG4gKiBjb21wb25lbnQgdHJlZS5cbiAqXG4gKiBUaGUgY2FsbGVyIG93bnMgYGNvbXBvbmVudGAncyBsaWZlY3ljbGUgYW5kIE1VU1QgY2FsbCBgY29tcG9uZW50LnVubG9hZCgpYCBvbmNlIGRvbmUgd2l0aCB0aGUgY29udHJvbGxlclxuICogKHdoaWNoIGFsc28gZGV0YWNoZXMgdGhlIHJlbmRlcmVkIGVsZW1lbnQpLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwIGluc3RhbmNlLlxuICogQHBhcmFtIGNvbnRlbnQgLSBUaGUgYC5iYXNlYCBmaWxlIGNvbnRlbnQgKHRoZSBib2R5IG9mIGEgYGJhc2VgIGNvZGUgYmxvY2spLlxuICogQHBhcmFtIHNvdXJjZVBhdGggLSBUaGUgcGF0aCBzdXBwbHlpbmcgdGhlIHF1ZXJ5J3MgZmlsZSBjb250ZXh0LlxuICogQHBhcmFtIGNvbXBvbmVudCAtIFRoZSBjb21wb25lbnQgdGhhdCBvd25zIHRoZSByZW5kZXI7IHRoZSBjYWxsZXIgdW5sb2FkcyBpdC5cbiAqIEByZXR1cm5zIFRoZSBsaXZlIHtAbGluayBCYXNlc0NvbnRyb2xsZXJ9IGZvciB0aGUgcmVuZGVyZWQgYmFzZS5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0QmFzZXNDb250cm9sbGVyRnJvbVJlbmRlcihcbiAgYXBwOiBBcHAsXG4gIGNvbnRlbnQ6IHN0cmluZyxcbiAgc291cmNlUGF0aDogc3RyaW5nLFxuICBjb21wb25lbnQ6IENvbXBvbmVudFxuKTogUHJvbWlzZTxCYXNlc0NvbnRyb2xsZXI+IHtcbiAgLy8gVGhlIGBfY2hpbGRyZW5gIHdhbGsgcGx1cyB0aGUgY29udHJvbGxlcidzIGBxdWVyeWAgLyBgcmVzdWx0c2AgYXJlIHJ1bnRpbWUgaW50ZXJuYWxzIG5vdCBtb2RlbGVkIG9uXG4gIC8vIENvbXBvbmVudCwgc28gdGhleSBhcmUgdHlwZWQgbG9jYWxseSBwdXJlbHkgdG8gYnJlYWR0aC1maXJzdCBzZWFyY2ggdGhlIHJlbmRlciB0cmVlLlxuICBpbnRlcmZhY2UgQ29tcG9uZW50VHJlZU5vZGUge1xuICAgIC8qKiBUaGUgY2hpbGQgY29tcG9uZW50cywgaWYgYW55LiAqL1xuICAgIF9jaGlsZHJlbj86IENvbXBvbmVudFRyZWVOb2RlW107XG5cbiAgICAvKiogVGhlIGN1cnJlbnQgcXVlcnksIHByZXNlbnQgb24gYSBjb250cm9sbGVyLiAqL1xuICAgIHF1ZXJ5PzogdW5rbm93bjtcblxuICAgIC8qKiBUaGUgcXVlcnkgcmVzdWx0cywgcHJlc2VudCBhcyBhIGBNYXBgIG9uIGEgY29udHJvbGxlci4gKi9cbiAgICByZXN1bHRzPzogdW5rbm93bjtcbiAgfVxuXG4gIC8vIFRoZSBlbGVtZW50IG11c3QgYmUgYXR0YWNoZWQgdG8gdGhlIGRvY3VtZW50IChub3QgbWVyZWx5IGRldGFjaGVkKSBmb3IgdGhlIGJhc2UncyBpbml0aWFsIHNjYW4gdG8gcnVuLFxuICAvLyBzbyBpdCBpcyBwb3NpdGlvbmVkIG9mZi1zY3JlZW4gcmF0aGVyIHRoYW4gaGlkZGVuLiBJdCBpcyByZW1vdmVkIHdoZW4gdGhlIGNhbGxlciB1bmxvYWRzIGBjb21wb25lbnRgLlxuICBjb25zdCBjb250YWluZXJFbCA9IGNyZWF0ZURpdigpO1xuICBjb250YWluZXJFbC5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG4gIGNvbnRhaW5lckVsLnN0eWxlLmxlZnQgPSAnLTk5OTlweCc7XG4gIGNvbnRhaW5lckVsLnN0eWxlLndpZHRoID0gJzYwMHB4JztcbiAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChjb250YWluZXJFbCk7XG4gIGNvbXBvbmVudC5yZWdpc3RlcigoKSA9PiB7XG4gICAgY29udGFpbmVyRWwucmVtb3ZlKCk7XG4gIH0pO1xuXG4gIGF3YWl0IE1hcmtkb3duUmVuZGVyZXIucmVuZGVyKGFwcCwgYFxcYFxcYFxcYGJhc2VcXG4ke2NvbnRlbnR9XFxuXFxgXFxgXFxgXFxuYCwgY29udGFpbmVyRWwsIHNvdXJjZVBhdGgsIGNvbXBvbmVudCk7XG5cbiAgY29uc3QgcXVldWU6IENvbXBvbmVudFRyZWVOb2RlW10gPSBbY29tcG9uZW50IGFzIHVua25vd24gYXMgQ29tcG9uZW50VHJlZU5vZGVdO1xuICBjb25zdCBzZWVuID0gbmV3IFNldDxDb21wb25lbnRUcmVlTm9kZT4oKTtcblxuICB3aGlsZSAocXVldWUubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IG5vZGUgPSBxdWV1ZS5zaGlmdCgpO1xuICAgIGlmICghbm9kZSB8fCBzZWVuLmhhcyhub2RlKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIHNlZW4uYWRkKG5vZGUpO1xuXG4gICAgaWYgKG5vZGUucmVzdWx0cyBpbnN0YW5jZW9mIE1hcCAmJiAncXVlcnknIGluIG5vZGUpIHtcbiAgICAgIHJldHVybiBub2RlIGFzIHVua25vd24gYXMgQmFzZXNDb250cm9sbGVyO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgY2hpbGQgb2Ygbm9kZS5fY2hpbGRyZW4gPz8gW10pIHtcbiAgICAgIHF1ZXVlLnB1c2goY2hpbGQpO1xuICAgIH1cbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IGxvY2F0ZSB0aGUgQmFzZXNDb250cm9sbGVyIGluIHRoZSByZW5kZXJlZCBjb21wb25lbnQgdHJlZS4nKTtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcbmltcG9ydCB0eXBlIHsgSW50ZXJuYWxQbHVnaW4gfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcm5hbHMvaW50ZXJuYWwtcGx1Z2lucy9JbnRlcm5hbFBsdWdpbi5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBJbnRlcm5hbFBsdWdpbn0gY29uc3RydWN0b3IuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHAgaW5zdGFuY2UuXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIEludGVybmFsUGx1Z2lufSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW50ZXJuYWxQbHVnaW5Db25zdHJ1Y3RvcjxJbnN0YW5jZT4oYXBwOiBBcHApOiBFeHRyYWN0Q29uc3RydWN0b3I8SW50ZXJuYWxQbHVnaW48SW5zdGFuY2U+PiB7XG4gIGNvbnN0IGFueVBsdWdpbiA9IE9iamVjdC52YWx1ZXMoYXBwLmludGVybmFsUGx1Z2lucy5wbHVnaW5zKVswXTtcbiAgaWYgKCFhbnlQbHVnaW4pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIGludGVybmFsIHBsdWdpbiBmb3VuZCcpO1xuICB9XG4gIHJldHVybiBhbnlQbHVnaW4uY29uc3RydWN0b3IgYXMgRXh0cmFjdENvbnN0cnVjdG9yPEludGVybmFsUGx1Z2luPEluc3RhbmNlPj47XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5pbXBvcnQgdHlwZSB7IEludGVybmFsUGx1Z2lucyB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9pbnRlcm5hbC1wbHVnaW5zL0ludGVybmFsUGx1Z2lucy5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBJbnRlcm5hbFBsdWdpbnN9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwIGluc3RhbmNlLlxuICogQHJldHVybnMgVGhlIHtAbGluayBJbnRlcm5hbFBsdWdpbnN9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbnRlcm5hbFBsdWdpbnNDb25zdHJ1Y3RvcihhcHA6IEFwcCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxJbnRlcm5hbFBsdWdpbnM+IHtcbiAgcmV0dXJuIGFwcC5pbnRlcm5hbFBsdWdpbnMuY29uc3RydWN0b3IgYXMgRXh0cmFjdENvbnN0cnVjdG9yPEludGVybmFsUGx1Z2lucz47XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5pbXBvcnQgdHlwZSB7IFZpZXdUeXBlVHlwZSB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy92aWV3cy9WaWV3VHlwZVR5cGUuZC5kLnRzJztcbmltcG9ydCB0eXBlIHsgVmlld1R5cGVWaWV3TWFwcGluZyB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy92aWV3cy9WaWV3VHlwZVZpZXdNYXBwaW5nLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUgdmlldyBjb25zdHJ1Y3RvciBieSB2aWV3IHR5cGUuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHAuXG4gKiBAcGFyYW0gdmlld1R5cGUgLSBUaGUgdmlldyB0eXBlLlxuICogQHJldHVybnMgVGhlIHZpZXcgY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGU8VFZpZXdUeXBlIGV4dGVuZHMgVmlld1R5cGVUeXBlPihcbiAgYXBwOiBBcHAsXG4gIHZpZXdUeXBlOiBUVmlld1R5cGVcbik6IEV4dHJhY3RDb25zdHJ1Y3RvcjxWaWV3VHlwZVZpZXdNYXBwaW5nW1RWaWV3VHlwZV0+IHtcbiAgY29uc3QgbGVhZiA9IGFwcC53b3Jrc3BhY2UuY3JlYXRlTGVhZkluVGFiR3JvdXAoKTtcbiAgdHJ5IHtcbiAgICBjb25zdCB2aWV3Q3JlYXRvciA9IGFwcC52aWV3UmVnaXN0cnkuZ2V0Vmlld0NyZWF0b3JCeVR5cGUodmlld1R5cGUpO1xuICAgIGlmICghdmlld0NyZWF0b3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVmlldyBjcmVhdG9yIG5vdCBmb3VuZCcpO1xuICAgIH1cbiAgICBjb25zdCB2aWV3ID0gdmlld0NyZWF0b3IobGVhZik7XG4gICAgcmV0dXJuIHZpZXcuY29uc3RydWN0b3IgYXMgRXh0cmFjdENvbnN0cnVjdG9yPFZpZXdUeXBlVmlld01hcHBpbmdbVFZpZXdUeXBlXT47XG4gIH0gZmluYWxseSB7XG4gICAgbGVhZi5kZXRhY2goKTtcbiAgfVxufVxuIiwgImltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuaW1wb3J0IHR5cGUgeyBBbGxQcm9wZXJ0aWVzVmlldyB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9pbnRlcm5hbC1wbHVnaW5zL3Byb3BlcnRpZXMvQWxsUHJvcGVydGllc1ZpZXcuZC50cyc7XG5cbmltcG9ydCB7IFZpZXdUeXBlIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RhbnRzL1ZpZXdUeXBlLnRzJztcbmltcG9ydCB7IGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUgfSBmcm9tICcuL2dldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIEFsbFByb3BlcnRpZXNWaWV3fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcC5cbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgQWxsUHJvcGVydGllc1ZpZXd9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBbGxQcm9wZXJ0aWVzVmlld0NvbnN0cnVjdG9yKGFwcDogQXBwKTogRXh0cmFjdENvbnN0cnVjdG9yPEFsbFByb3BlcnRpZXNWaWV3PiB7XG4gIHJldHVybiBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlKGFwcCwgVmlld1R5cGUuQWxsUHJvcGVydGllcyk7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5pbXBvcnQgdHlwZSB7IEF1ZGlvVmlldyB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy92aWV3cy9BdWRpb1ZpZXcuZC50cyc7XG5cbmltcG9ydCB7IFZpZXdUeXBlIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RhbnRzL1ZpZXdUeXBlLnRzJztcbmltcG9ydCB7IGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUgfSBmcm9tICcuL2dldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIEF1ZGlvVmlld30gY29uc3RydWN0b3IuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHAuXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIEF1ZGlvVmlld30gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEF1ZGlvVmlld0NvbnN0cnVjdG9yKGFwcDogQXBwKTogRXh0cmFjdENvbnN0cnVjdG9yPEF1ZGlvVmlldz4ge1xuICByZXR1cm4gZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZShhcHAsIFZpZXdUeXBlLkF1ZGlvKTtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcbmltcG9ydCB0eXBlIHsgQmFja2xpbmtWaWV3IH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2ludGVybmFsLXBsdWdpbnMvYmFja2xpbmsvQmFja2xpbmtWaWV3LmQudHMnO1xuXG5pbXBvcnQgeyBWaWV3VHlwZSB9IGZyb20gJy4uLy4uLy4uL2NvbnN0YW50cy9WaWV3VHlwZS50cyc7XG5pbXBvcnQgeyBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlIH0gZnJvbSAnLi9nZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBCYWNrbGlua1ZpZXd9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwLlxuICogQHJldHVybnMgVGhlIHtAbGluayBCYWNrbGlua1ZpZXd9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRCYWNrbGlua1ZpZXdDb25zdHJ1Y3RvcihhcHA6IEFwcCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxCYWNrbGlua1ZpZXc+IHtcbiAgcmV0dXJuIGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUoYXBwLCBWaWV3VHlwZS5CYWNrbGluayk7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5pbXBvcnQgdHlwZSB7IEJhc2VzVmlldyB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9pbnRlcm5hbC1wbHVnaW5zL2Jhc2VzL0Jhc2VzVmlldy5kLnRzJztcblxuaW1wb3J0IHsgVmlld1R5cGUgfSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMvVmlld1R5cGUudHMnO1xuaW1wb3J0IHsgZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZSB9IGZyb20gJy4vZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZS50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgQmFzZXNWaWV3fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcC5cbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgQmFzZXNWaWV3fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QmFzZXNWaWV3Q29uc3RydWN0b3IoYXBwOiBBcHApOiBFeHRyYWN0Q29uc3RydWN0b3I8QmFzZXNWaWV3PiB7XG4gIHJldHVybiBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlKGFwcCwgVmlld1R5cGUuQmFzZXMpO1xufVxuIiwgImltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuaW1wb3J0IHR5cGUgeyBCb29rbWFya3NWaWV3IH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2ludGVybmFsLXBsdWdpbnMvYm9va21hcmtzL0Jvb2ttYXJrc1ZpZXcuZC50cyc7XG5cbmltcG9ydCB7IFZpZXdUeXBlIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RhbnRzL1ZpZXdUeXBlLnRzJztcbmltcG9ydCB7IGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUgfSBmcm9tICcuL2dldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIEJvb2ttYXJrc1ZpZXd9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwLlxuICogQHJldHVybnMgVGhlIHtAbGluayBCb29rbWFya3NWaWV3fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Qm9va21hcmtzVmlld0NvbnN0cnVjdG9yKGFwcDogQXBwKTogRXh0cmFjdENvbnN0cnVjdG9yPEJvb2ttYXJrc1ZpZXc+IHtcbiAgcmV0dXJuIGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUoYXBwLCBWaWV3VHlwZS5Cb29rbWFya3MpO1xufVxuIiwgImltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuaW1wb3J0IHR5cGUgeyBDYW52YXNWaWV3IH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2ludGVybmFsLXBsdWdpbnMvY2FudmFzL0NhbnZhc1ZpZXcuZC50cyc7XG5cbmltcG9ydCB7IFZpZXdUeXBlIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RhbnRzL1ZpZXdUeXBlLnRzJztcbmltcG9ydCB7IGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUgfSBmcm9tICcuL2dldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIENhbnZhc1ZpZXd9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwLlxuICogQHJldHVybnMgVGhlIHtAbGluayBDYW52YXNWaWV3fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2FudmFzVmlld0NvbnN0cnVjdG9yKGFwcDogQXBwKTogRXh0cmFjdENvbnN0cnVjdG9yPENhbnZhc1ZpZXc+IHtcbiAgcmV0dXJuIGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUoYXBwLCBWaWV3VHlwZS5DYW52YXMpO1xufVxuIiwgImltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuaW1wb3J0IHR5cGUgeyBFbXB0eVZpZXcgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcm5hbHMvdmlld3MvRW1wdHlWaWV3LmQudHMnO1xuXG5pbXBvcnQgeyBWaWV3VHlwZSB9IGZyb20gJy4uLy4uLy4uL2NvbnN0YW50cy9WaWV3VHlwZS50cyc7XG5pbXBvcnQgeyBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlIH0gZnJvbSAnLi9nZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBFbXB0eVZpZXd9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwLlxuICogQHJldHVybnMgVGhlIHtAbGluayBFbXB0eVZpZXd9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRFbXB0eVZpZXdDb25zdHJ1Y3RvcihhcHA6IEFwcCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxFbXB0eVZpZXc+IHtcbiAgcmV0dXJuIGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUoYXBwLCBWaWV3VHlwZS5FbXB0eSk7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5pbXBvcnQgdHlwZSB7IEZpbGVFeHBsb3JlclZpZXcgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcm5hbHMvaW50ZXJuYWwtcGx1Z2lucy9maWxlLWV4cGxvcmVyL0ZpbGVFeHBsb3JlclZpZXcuZC50cyc7XG5cbmltcG9ydCB7IFZpZXdUeXBlIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RhbnRzL1ZpZXdUeXBlLnRzJztcbmltcG9ydCB7IGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUgfSBmcm9tICcuL2dldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIEZpbGVFeHBsb3JlclZpZXd9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwLlxuICogQHJldHVybnMgVGhlIHtAbGluayBGaWxlRXhwbG9yZXJWaWV3fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmlsZUV4cGxvcmVyVmlld0NvbnN0cnVjdG9yKGFwcDogQXBwKTogRXh0cmFjdENvbnN0cnVjdG9yPEZpbGVFeHBsb3JlclZpZXc+IHtcbiAgcmV0dXJuIGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUoYXBwLCBWaWV3VHlwZS5GaWxlRXhwbG9yZXIpO1xufVxuIiwgImltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuaW1wb3J0IHR5cGUgeyBGaWxlUHJvcGVydGllc1ZpZXcgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcm5hbHMvaW50ZXJuYWwtcGx1Z2lucy9wcm9wZXJ0aWVzL0ZpbGVQcm9wZXJ0aWVzVmlldy5kLnRzJztcblxuaW1wb3J0IHsgVmlld1R5cGUgfSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMvVmlld1R5cGUudHMnO1xuaW1wb3J0IHsgZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZSB9IGZyb20gJy4vZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZS50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgRmlsZVByb3BlcnRpZXNWaWV3fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcC5cbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgRmlsZVByb3BlcnRpZXNWaWV3fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmlsZVByb3BlcnRpZXNWaWV3Q29uc3RydWN0b3IoYXBwOiBBcHApOiBFeHRyYWN0Q29uc3RydWN0b3I8RmlsZVByb3BlcnRpZXNWaWV3PiB7XG4gIHJldHVybiBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlKGFwcCwgVmlld1R5cGUuRmlsZVByb3BlcnRpZXMpO1xufVxuIiwgImltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuaW1wb3J0IHR5cGUgeyBHcmFwaFZpZXcgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcm5hbHMvaW50ZXJuYWwtcGx1Z2lucy9ncmFwaC9HcmFwaFZpZXcuZC50cyc7XG5cbmltcG9ydCB7IFZpZXdUeXBlIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RhbnRzL1ZpZXdUeXBlLnRzJztcbmltcG9ydCB7IGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUgfSBmcm9tICcuL2dldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIEdyYXBoVmlld30gY29uc3RydWN0b3IuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHAuXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIEdyYXBoVmlld30gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEdyYXBoVmlld0NvbnN0cnVjdG9yKGFwcDogQXBwKTogRXh0cmFjdENvbnN0cnVjdG9yPEdyYXBoVmlldz4ge1xuICByZXR1cm4gZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZShhcHAsIFZpZXdUeXBlLkdyYXBoKTtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcbmltcG9ydCB0eXBlIHsgSW1hZ2VWaWV3IH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL3ZpZXdzL0ltYWdlVmlldy5kLnRzJztcblxuaW1wb3J0IHsgVmlld1R5cGUgfSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMvVmlld1R5cGUudHMnO1xuaW1wb3J0IHsgZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZSB9IGZyb20gJy4vZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZS50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgSW1hZ2VWaWV3fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcC5cbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgSW1hZ2VWaWV3fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW1hZ2VWaWV3Q29uc3RydWN0b3IoYXBwOiBBcHApOiBFeHRyYWN0Q29uc3RydWN0b3I8SW1hZ2VWaWV3PiB7XG4gIHJldHVybiBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlKGFwcCwgVmlld1R5cGUuSW1hZ2UpO1xufVxuIiwgImltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuaW1wb3J0IHR5cGUgeyBMb2NhbEdyYXBoVmlldyB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9pbnRlcm5hbC1wbHVnaW5zL2dyYXBoL0xvY2FsR3JhcGhWaWV3LmQudHMnO1xuXG5pbXBvcnQgeyBWaWV3VHlwZSB9IGZyb20gJy4uLy4uLy4uL2NvbnN0YW50cy9WaWV3VHlwZS50cyc7XG5pbXBvcnQgeyBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlIH0gZnJvbSAnLi9nZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBMb2NhbEdyYXBoVmlld30gY29uc3RydWN0b3IuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHAuXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIExvY2FsR3JhcGhWaWV3fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TG9jYWxHcmFwaFZpZXdDb25zdHJ1Y3RvcihhcHA6IEFwcCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxMb2NhbEdyYXBoVmlldz4ge1xuICByZXR1cm4gZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZShhcHAsIFZpZXdUeXBlLkxvY2FsR3JhcGgpO1xufVxuIiwgImltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuaW1wb3J0IHR5cGUgeyBPdXRnb2luZ0xpbmtWaWV3IH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2ludGVybmFsLXBsdWdpbnMvb3V0Z29pbmctbGluay9PdXRnb2luZ0xpbmtWaWV3LmQudHMnO1xuXG5pbXBvcnQgeyBWaWV3VHlwZSB9IGZyb20gJy4uLy4uLy4uL2NvbnN0YW50cy9WaWV3VHlwZS50cyc7XG5pbXBvcnQgeyBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlIH0gZnJvbSAnLi9nZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBPdXRnb2luZ0xpbmtWaWV3fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcC5cbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgT3V0Z29pbmdMaW5rVmlld30gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE91dGdvaW5nTGlua1ZpZXdDb25zdHJ1Y3RvcihhcHA6IEFwcCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxPdXRnb2luZ0xpbmtWaWV3PiB7XG4gIHJldHVybiBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlKGFwcCwgVmlld1R5cGUuT3V0Z29pbmdMaW5rKTtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcbmltcG9ydCB0eXBlIHsgT3V0bGluZVZpZXcgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcm5hbHMvaW50ZXJuYWwtcGx1Z2lucy9vdXRsaW5lL091dGxpbmVWaWV3LmQudHMnO1xuXG5pbXBvcnQgeyBWaWV3VHlwZSB9IGZyb20gJy4uLy4uLy4uL2NvbnN0YW50cy9WaWV3VHlwZS50cyc7XG5pbXBvcnQgeyBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlIH0gZnJvbSAnLi9nZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBPdXRsaW5lVmlld30gY29uc3RydWN0b3IuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHAuXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIE91dGxpbmVWaWV3fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0T3V0bGluZVZpZXdDb25zdHJ1Y3RvcihhcHA6IEFwcCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxPdXRsaW5lVmlldz4ge1xuICByZXR1cm4gZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZShhcHAsIFZpZXdUeXBlLk91dGxpbmUpO1xufVxuIiwgImltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuaW1wb3J0IHR5cGUgeyBQZGZWaWV3IH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL3ZpZXdzL1BkZlZpZXcuZC50cyc7XG5cbmltcG9ydCB7IFZpZXdUeXBlIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RhbnRzL1ZpZXdUeXBlLnRzJztcbmltcG9ydCB7IGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUgfSBmcm9tICcuL2dldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIFBkZlZpZXd9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwLlxuICogQHJldHVybnMgVGhlIHtAbGluayBQZGZWaWV3fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGRmVmlld0NvbnN0cnVjdG9yKGFwcDogQXBwKTogRXh0cmFjdENvbnN0cnVjdG9yPFBkZlZpZXc+IHtcbiAgcmV0dXJuIGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUoYXBwLCBWaWV3VHlwZS5QZGYpO1xufVxuIiwgImltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuaW1wb3J0IHR5cGUgeyBSZWxlYXNlTm90ZXNWaWV3IH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL3ZpZXdzL1JlbGVhc2VOb3Rlc1ZpZXcuZC50cyc7XG5cbmltcG9ydCB7IFZpZXdUeXBlIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RhbnRzL1ZpZXdUeXBlLnRzJztcbmltcG9ydCB7IGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUgfSBmcm9tICcuL2dldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIFJlbGVhc2VOb3Rlc1ZpZXd9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwLlxuICogQHJldHVybnMgVGhlIHtAbGluayBSZWxlYXNlTm90ZXNWaWV3fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVsZWFzZU5vdGVzVmlld0NvbnN0cnVjdG9yKGFwcDogQXBwKTogRXh0cmFjdENvbnN0cnVjdG9yPFJlbGVhc2VOb3Rlc1ZpZXc+IHtcbiAgcmV0dXJuIGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUoYXBwLCBWaWV3VHlwZS5SZWxlYXNlTm90ZXMpO1xufVxuIiwgImltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuaW1wb3J0IHR5cGUgeyBTZWFyY2hWaWV3IH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2ludGVybmFsLXBsdWdpbnMvZ2xvYmFsLXNlYXJjaC9TZWFyY2hWaWV3LmQudHMnO1xuXG5pbXBvcnQgeyBWaWV3VHlwZSB9IGZyb20gJy4uLy4uLy4uL2NvbnN0YW50cy9WaWV3VHlwZS50cyc7XG5pbXBvcnQgeyBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlIH0gZnJvbSAnLi9nZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBTZWFyY2hWaWV3fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcC5cbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgU2VhcmNoVmlld30gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNlYXJjaFZpZXdDb25zdHJ1Y3RvcihhcHA6IEFwcCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxTZWFyY2hWaWV3PiB7XG4gIHJldHVybiBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlKGFwcCwgVmlld1R5cGUuU2VhcmNoKTtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcbmltcG9ydCB0eXBlIHsgU3luY1ZpZXcgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcm5hbHMvaW50ZXJuYWwtcGx1Z2lucy9zeW5jL1N5bmNWaWV3LmQudHMnO1xuXG5pbXBvcnQgeyBWaWV3VHlwZSB9IGZyb20gJy4uLy4uLy4uL2NvbnN0YW50cy9WaWV3VHlwZS50cyc7XG5pbXBvcnQgeyBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlIH0gZnJvbSAnLi9nZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBTeW5jVmlld30gY29uc3RydWN0b3IuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHAuXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIFN5bmNWaWV3fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3luY1ZpZXdDb25zdHJ1Y3RvcihhcHA6IEFwcCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxTeW5jVmlldz4ge1xuICByZXR1cm4gZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZShhcHAsIFZpZXdUeXBlLlN5bmMpO1xufVxuIiwgImltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuaW1wb3J0IHR5cGUgeyBUYWdWaWV3IH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL3ZpZXdzL1RhZ1ZpZXcuZC50cyc7XG5cbmltcG9ydCB7IFZpZXdUeXBlIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RhbnRzL1ZpZXdUeXBlLnRzJztcbmltcG9ydCB7IGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUgfSBmcm9tICcuL2dldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIFRhZ1ZpZXd9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwLlxuICogQHJldHVybnMgVGhlIHtAbGluayBUYWdWaWV3fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGFnVmlld0NvbnN0cnVjdG9yKGFwcDogQXBwKTogRXh0cmFjdENvbnN0cnVjdG9yPFRhZ1ZpZXc+IHtcbiAgcmV0dXJuIGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUoYXBwLCBWaWV3VHlwZS5UYWcpO1xufVxuIiwgImltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuaW1wb3J0IHR5cGUgeyBWaWRlb1ZpZXcgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcm5hbHMvdmlld3MvVmlkZW9WaWV3LmQudHMnO1xuXG5pbXBvcnQgeyBWaWV3VHlwZSB9IGZyb20gJy4uLy4uLy4uL2NvbnN0YW50cy9WaWV3VHlwZS50cyc7XG5pbXBvcnQgeyBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlIH0gZnJvbSAnLi9nZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBWaWRlb1ZpZXd9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwLlxuICogQHJldHVybnMgVGhlIHtAbGluayBWaWRlb1ZpZXd9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRWaWRlb1ZpZXdDb25zdHJ1Y3RvcihhcHA6IEFwcCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxWaWRlb1ZpZXc+IHtcbiAgcmV0dXJuIGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUoYXBwLCBWaWV3VHlwZS5WaWRlbyk7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5pbXBvcnQgdHlwZSB7IFdlYnZpZXdlckhpc3RvcnlWaWV3IH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2ludGVybmFsLXBsdWdpbnMvd2Vidmlld2VyL1dlYnZpZXdlckhpc3RvcnlWaWV3LmQudHMnO1xuXG5pbXBvcnQgeyBWaWV3VHlwZSB9IGZyb20gJy4uLy4uLy4uL2NvbnN0YW50cy9WaWV3VHlwZS50cyc7XG5pbXBvcnQgeyBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlIH0gZnJvbSAnLi9nZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBXZWJ2aWV3ZXJIaXN0b3J5Vmlld30gY29uc3RydWN0b3IuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHAuXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIFdlYnZpZXdlckhpc3RvcnlWaWV3fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0V2Vidmlld2VySGlzdG9yeVZpZXdDb25zdHJ1Y3RvcihhcHA6IEFwcCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxXZWJ2aWV3ZXJIaXN0b3J5Vmlldz4ge1xuICByZXR1cm4gZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZShhcHAsIFZpZXdUeXBlLldlYnZpZXdlckhpc3RvcnkpO1xufVxuIiwgImltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuaW1wb3J0IHR5cGUgeyBXZWJ2aWV3ZXJWaWV3IH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2ludGVybmFsLXBsdWdpbnMvd2Vidmlld2VyL1dlYnZpZXdlclZpZXcuZC50cyc7XG5cbmltcG9ydCB7IFZpZXdUeXBlIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RhbnRzL1ZpZXdUeXBlLnRzJztcbmltcG9ydCB7IGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUgfSBmcm9tICcuL2dldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIFdlYnZpZXdlclZpZXd9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwLlxuICogQHJldHVybnMgVGhlIHtAbGluayBXZWJ2aWV3ZXJWaWV3fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0V2Vidmlld2VyVmlld0NvbnN0cnVjdG9yKGFwcDogQXBwKTogRXh0cmFjdENvbnN0cnVjdG9yPFdlYnZpZXdlclZpZXc+IHtcbiAgcmV0dXJuIGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUoYXBwLCBWaWV3VHlwZS5XZWJ2aWV3ZXIpO1xufVxuIiwgImltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuaW1wb3J0IHR5cGUgeyBXb3Jrc3BhY2VQcm90b2NvbEhhbmRsZXIgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcm5hbHMvd29ya3NwYWNlL1dvcmtzcGFjZVByb3RvY29sSGFuZGxlci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBXb3Jrc3BhY2VQcm90b2NvbEhhbmRsZXJ9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwIGluc3RhbmNlLlxuICogQHJldHVybnMgVGhlIHtAbGluayBXb3Jrc3BhY2VQcm90b2NvbEhhbmRsZXJ9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRXb3Jrc3BhY2VQcm90b2NvbEhhbmRsZXJDb25zdHJ1Y3RvcihhcHA6IEFwcCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxXb3Jrc3BhY2VQcm90b2NvbEhhbmRsZXI+IHtcbiAgcmV0dXJuIGFwcC53b3Jrc3BhY2UucHJvdG9jb2xIYW5kbGVyLmNvbnN0cnVjdG9yIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxXb3Jrc3BhY2VQcm90b2NvbEhhbmRsZXI+O1xufVxuIiwgIi8qKlxuICogR2V0IHRoZSBwYXJlbnQgZm9sZGVyIHBhdGggb2YgYSBnaXZlbiBwYXRoLlxuICpcbiAqIEBwYXJhbSBwYXRoIC0gVGhlIHBhdGggdG8gZ2V0IHRoZSBwYXJlbnQgZm9sZGVyIHBhdGggb2YuXG4gKiBAcmV0dXJucyBUaGUgcGFyZW50IGZvbGRlciBwYXRoLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJlbnRGb2xkZXJQYXRoKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBwYXRoLnJlcGxhY2UoL1xcLz9bXi9dKiQvLCAnJykgfHwgJy8nO1xufVxuIiwgImltcG9ydCB0eXBlIHtcbiAgQXBwLFxuICBURm9sZGVyXG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHsgZ2V0VEZvbGRlckNvbnN0cnVjdG9yIH0gZnJvbSAnLi4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0VEZvbGRlckNvbnN0cnVjdG9yLnRzJztcbmltcG9ydCB7IHBhcmVudEZvbGRlclBhdGggfSBmcm9tICcuLi91dGlscy9QYXRoVXRpbHMudHMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYW5kIHByb3Blcmx5IGluaXRpYWxpemVzIHRoZSBpbnN0YW5jZSBvZiB7QGxpbmsgb2JzaWRpYW4jVEZvbGRlcn0gZXZlbiB0aGUgdW5kZXJseWluZyBmb2xkZXIgZG9lcyBub3QgZXhpc3QuXG4gKiBUaGlzIGRvZXNuJ3QgY3JlYXRlIHRoZSBtaXNzaW5nIGZvbGRlciBvbiB0aGUgZmlsZSBzeXN0ZW0uXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gKiBAcGFyYW0gcGF0aCAtIFRoZSBwYXRoIHRvIHRoZSBmb2xkZXIuXG4gKiBAcmV0dXJucyBUaGUgY3JlYXRlZCB7QGxpbmsgb2JzaWRpYW4jVEZvbGRlcn0gaW5zdGFuY2UuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVRGb2xkZXJJbnN0YW5jZShhcHA6IEFwcCwgcGF0aDogc3RyaW5nKTogVEZvbGRlciB7XG4gIGxldCBmb2xkZXIgPSBhcHAudmF1bHQuZ2V0Rm9sZGVyQnlQYXRoKHBhdGgpO1xuICBpZiAoZm9sZGVyKSB7XG4gICAgcmV0dXJuIGZvbGRlcjtcbiAgfVxuXG4gIGZvbGRlciA9IG5ldyAoZ2V0VEZvbGRlckNvbnN0cnVjdG9yKCkpKGFwcC52YXVsdCwgcGF0aCk7XG4gIGZvbGRlci5wYXJlbnQgPSBjcmVhdGVURm9sZGVySW5zdGFuY2UoYXBwLCBwYXJlbnRGb2xkZXJQYXRoKHBhdGgpKTtcbiAgZm9sZGVyLmRlbGV0ZWQgPSB0cnVlO1xuICByZXR1cm4gZm9sZGVyO1xufVxuIiwgImltcG9ydCB0eXBlIHtcbiAgQXBwLFxuICBURmlsZVxufSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7IGdldFRGaWxlQ29uc3RydWN0b3IgfSBmcm9tICcuLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRURmlsZUNvbnN0cnVjdG9yLnRzJztcbmltcG9ydCB7IHBhcmVudEZvbGRlclBhdGggfSBmcm9tICcuLi91dGlscy9QYXRoVXRpbHMudHMnO1xuaW1wb3J0IHsgY3JlYXRlVEZvbGRlckluc3RhbmNlIH0gZnJvbSAnLi9jcmVhdGVURm9sZGVySW5zdGFuY2UudHMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYW5kIHByb3Blcmx5IGluaXRpYWxpemVzIHRoZSBpbnN0YW5jZSBvZiB7QGxpbmsgb2JzaWRpYW4jVEZpbGV9IGV2ZW4gdGhlIHVuZGVybHlpbmcgZmlsZSBkb2VzIG5vdCBleGlzdC5cbiAqIFRoaXMgZG9lc24ndCBjcmVhdGUgdGhlIG1pc3NpbmcgZmlsZSBvbiB0aGUgZmlsZSBzeXN0ZW0uXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gKiBAcGFyYW0gcGF0aCAtIFRoZSBwYXRoIHRvIHRoZSBmaWxlLlxuICogQHJldHVybnMgVGhlIGNyZWF0ZWQge0BsaW5rIG9ic2lkaWFuI1RGaWxlfSBpbnN0YW5jZS5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVEZpbGVJbnN0YW5jZShhcHA6IEFwcCwgcGF0aDogc3RyaW5nKTogVEZpbGUge1xuICBsZXQgZmlsZSA9IGFwcC52YXVsdC5nZXRGaWxlQnlQYXRoKHBhdGgpO1xuICBpZiAoZmlsZSkge1xuICAgIHJldHVybiBmaWxlO1xuICB9XG5cbiAgZmlsZSA9IG5ldyAoZ2V0VEZpbGVDb25zdHJ1Y3RvcigpKShhcHAudmF1bHQsIHBhdGgpO1xuICBmaWxlLnBhcmVudCA9IGNyZWF0ZVRGb2xkZXJJbnN0YW5jZShhcHAsIHBhcmVudEZvbGRlclBhdGgocGF0aCkpO1xuICBmaWxlLmRlbGV0ZWQgPSB0cnVlO1xuICByZXR1cm4gZmlsZTtcbn1cbiIsICJpbXBvcnQgdHlwZSB7XG4gIEFwcCxcbiAgQmFzZXNFbnRyeVxufSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHsgZ2V0QmFzZXNDb250cm9sbGVyRnJvbVJlbmRlciB9IGZyb20gJy4vZ2V0QmFzZXNDb250cm9sbGVyRnJvbVJlbmRlci50cyc7XG5cbi8qKlxuICogRXZhbHVhdGUgYSBgLmJhc2VgIGZpbGUgaW4gaGVhZGxlc3MgbW9kZSBcdTIwMTQgd2l0aCBubyBsZWFmIG9yIG9wZW4gdmlldyBcdTIwMTQgYW5kIHJldHVybiBpdHMgZW50cmllcy5cbiAqXG4gKiBJdCByZW5kZXJzIHRoZSBiYXNlIG9mZi1zY3JlZW4gdmlhIHtAbGluayBnZXRCYXNlc0NvbnRyb2xsZXJGcm9tUmVuZGVyfSwgd2FpdHMgZm9yIHRoZSBpbml0aWFsIHZhdWx0IHNjYW5cbiAqIHRvIHNldHRsZSwgdGhlbiByZWFkcyB0aGUgY29udHJvbGxlcidzIHJlc3VsdHMuIEV2ZXJ5dGhpbmcgaXMgdG9ybiBkb3duIGJlZm9yZSByZXR1cm5pbmcuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHAgaW5zdGFuY2UuXG4gKiBAcGFyYW0gY29udGVudCAtIFRoZSBgLmJhc2VgIGZpbGUgY29udGVudCAodGhlIGJvZHkgb2YgYSBgYmFzZWAgY29kZSBibG9jaykuXG4gKiBAcGFyYW0gc291cmNlUGF0aCAtIFRoZSBwYXRoIHN1cHBseWluZyB0aGUgcXVlcnkncyBmaWxlIGNvbnRleHQuXG4gKiBAcmV0dXJucyBUaGUgZXZhbHVhdGVkIGJhc2UgZW50cmllcy5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZXZhbHVhdGVCYXNlSGVhZGxlc3MoYXBwOiBBcHAsIGNvbnRlbnQ6IHN0cmluZywgc291cmNlUGF0aDogc3RyaW5nKTogUHJvbWlzZTxCYXNlc0VudHJ5W10+IHtcbiAgY29uc3QgU0NBTl9QT0xMX0lOVEVSVkFMX0lOX01JTExJU0VDT05EUyA9IDUwO1xuICBjb25zdCBTQ0FOX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTID0gMzAwMDA7XG5cbiAgY29uc3QgY29tcG9uZW50ID0gbmV3IENvbXBvbmVudCgpO1xuICB0cnkge1xuICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBhd2FpdCBnZXRCYXNlc0NvbnRyb2xsZXJGcm9tUmVuZGVyKGFwcCwgY29udGVudCwgc291cmNlUGF0aCwgY29tcG9uZW50KTtcblxuICAgIGNvbnN0IHN0YXJ0VGltZSA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgIHdoaWxlIChjb250cm9sbGVyLmluaXRpYWxTY2FuKSB7XG4gICAgICBpZiAocGVyZm9ybWFuY2Uubm93KCkgLSBzdGFydFRpbWUgPiBTQ0FOX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGltZWQgb3V0IHdhaXRpbmcgZm9yIHRoZSBiYXNlIGluaXRpYWwgc2NhbiB0byBzZXR0bGUuJyk7XG4gICAgICB9XG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuICAgICAgICB3aW5kb3cuc2V0VGltZW91dChyZXNvbHZlLCBTQ0FOX1BPTExfSU5URVJWQUxfSU5fTUlMTElTRUNPTkRTKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBBcnJheS5mcm9tKGNvbnRyb2xsZXIucmVzdWx0cy52YWx1ZXMoKSk7XG4gIH0gZmluYWxseSB7XG4gICAgY29tcG9uZW50LnVubG9hZCgpO1xuICB9XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRGF0YUFkYXB0ZXJFeCB9IGZyb20gJy4uLy4uL2ludGVybmFscy9EYXRhQWRhcHRlckV4LmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUgaW5zdGFuY2Ugb2YgdGhlIGN1cnJlbnQge0BsaW5rIERhdGFBZGFwdGVyRXh9LlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gKiBAcmV0dXJucyBUaGUgZGF0YSBhZGFwdGVyIGV4dGVuc2lvbi5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGF0YUFkYXB0ZXJFeChhcHA6IEFwcCk6IERhdGFBZGFwdGVyRXgge1xuICByZXR1cm4gYXBwLnZhdWx0LmFkYXB0ZXIgYXMgRGF0YUFkYXB0ZXJFeDtcbn1cbiIsICJpbXBvcnQgeyBQbGF0Zm9ybSB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBQbGF0Zm9ybUV4IH0gZnJvbSAnLi4vLi4vaW50ZXJuYWxzL1BsYXRmb3JtRXguZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jUGxhdGZvcm19IGNvbnN0YW50IGFzIHtAbGluayBQbGF0Zm9ybUV4fS5cbiAqXG4gKiBAcmV0dXJucyBUaGUgcGxhdGZvcm0gZXh0ZW5zaW9uLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQbGF0Zm9ybUV4KCk6IFBsYXRmb3JtRXgge1xuICByZXR1cm4gUGxhdGZvcm0gYXMgUGxhdGZvcm1FeDtcbn1cbiIsICJpbXBvcnQgeyBsb2FkTWVybWFpZCBhcyBsb2FkTWVybWFpZE9yaWdpbmFsIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IE1lcm1haWQgfSBmcm9tICcuLi8uLi8uLi9tZXJtYWlkL2ludGVybmFscy9NZXJtYWlkLmQudHMnO1xuXG4vKipcbiAqIExvYWQgTWVybWFpZCBhbmQgcmV0dXJuIGEgcHJvbWlzZSB0byB0aGUgZ2xvYmFsIG1lcm1haWQgb2JqZWN0LlxuICogQ2FuIGFsc28gdXNlIGB3aW5kb3cubWVybWFpZGAgYWZ0ZXIgdGhpcyBwcm9taXNlIHJlc29sdmVzIHRvIGdldCB0aGUgc2FtZSByZWZlcmVuY2UuXG4gKlxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGdsb2JhbCBgd2luZG93Lm1lcm1haWRgIG9iamVjdC5cbiAqXG4gKiBAc2VlIHtAbGluayBodHRwczovL21lcm1haWQuanMub3JnLyB8IE9mZmljaWFsIE1lcm1haWQgZG9jdW1lbnRhdGlvbn0uXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZE1lcm1haWQoKTogUHJvbWlzZTxNZXJtYWlkPiB7XG4gIHJldHVybiAoYXdhaXQgbG9hZE1lcm1haWRPcmlnaW5hbCgpKSBhcyBNZXJtYWlkO1xufVxuIiwgImltcG9ydCB7IGxvYWRQZGZKcyBhcyBsb2FkUGRmSnNPcmlnaW5hbCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBQZGZKc01vZHVsZSB9IGZyb20gJy4uLy4uLy4uL3BkZmpzLWRpc3QvaW50ZXJuYWxzL1BkZkpzTW9kdWxlLmQudHMnO1xuXG4vKipcbiAqIExvYWQgUERGLmpzIGFuZCByZXR1cm4gYSBwcm9taXNlIHRvIHRoZSBnbG9iYWwgcGRmanNMaWIgb2JqZWN0LlxuICogQ2FuIGFsc28gdXNlIGB3aW5kb3cucGRmanNMaWJgIGFmdGVyIHRoaXMgcHJvbWlzZSByZXNvbHZlcyB0byBnZXQgdGhlIHNhbWUgcmVmZXJlbmNlLlxuICpcbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHRoZSBnbG9iYWwgYHdpbmRvdy5wZGZqc0xpYmAgb2JqZWN0LlxuICpcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW96aWxsYS5naXRodWIuaW8vcGRmLmpzLyB8IE9mZmljaWFsIFBERi5qcyBkb2N1bWVudGF0aW9ufS5cbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkUGRmSnMoKTogUHJvbWlzZTxQZGZKc01vZHVsZT4ge1xuICByZXR1cm4gKGF3YWl0IGxvYWRQZGZKc09yaWdpbmFsKCkpIGFzIFBkZkpzTW9kdWxlO1xufVxuIiwgImltcG9ydCB7IGxvYWRQcmlzbSBhcyBsb2FkUHJpc21PcmlnaW5hbCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBQcmlzbU1vZHVsZSB9IGZyb20gJy4uLy4uLy4uL3ByaXNtanMvaW50ZXJuYWxzL1ByaXNtTW9kdWxlLmQudHMnO1xuXG4vKipcbiAqIExvYWQgUHJpc20uanMgYW5kIHJldHVybiBhIHByb21pc2UgdG8gdGhlIGdsb2JhbCBQcmlzbSBvYmplY3QuXG4gKiBDYW4gYWxzbyB1c2UgYHdpbmRvdy5QcmlzbWAgYWZ0ZXIgdGhpcyBwcm9taXNlIHJlc29sdmVzIHRvIGdldCB0aGUgc2FtZSByZWZlcmVuY2UuXG4gKlxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGdsb2JhbCBgd2luZG93LlByaXNtYCBvYmplY3QuXG4gKlxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9wcmlzbWpzLmNvbS8gfCBPZmZpY2lhbCBQcmlzbSBkb2N1bWVudGF0aW9ufS5cbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkUHJpc20oKTogUHJvbWlzZTxQcmlzbU1vZHVsZT4ge1xuICByZXR1cm4gKGF3YWl0IGxvYWRQcmlzbU9yaWdpbmFsKCkpIGFzIFByaXNtTW9kdWxlO1xufVxuIiwgImltcG9ydCB0eXBlIHtcbiAgUmVmZXJlbmNlLFxuICBSZWZlcmVuY2VDYWNoZVxufSBmcm9tICdvYnNpZGlhbic7XG5cbi8qKlxuICogQ2hlY2sgaWYgdGhlIHJlZmVyZW5jZSBpcyBhIHJlZmVyZW5jZSBjYWNoZS5cbiAqXG4gKiBAcGFyYW0gcmVmZXJlbmNlIC0gVGhlIHJlZmVyZW5jZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIHJlZmVyZW5jZSBpcyBhIHJlZmVyZW5jZSBjYWNoZS5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNSZWZlcmVuY2VDYWNoZShyZWZlcmVuY2U6IFJlZmVyZW5jZSk6IHJlZmVyZW5jZSBpcyBSZWZlcmVuY2VDYWNoZSB7XG4gIHJldHVybiAhIShyZWZlcmVuY2UgYXMgUGFydGlhbDxSZWZlcmVuY2VDYWNoZT4pLnBvc2l0aW9uO1xufVxuIiwgImltcG9ydCB0eXBlIHtcbiAgRW1iZWRDYWNoZSxcbiAgUmVmZXJlbmNlXG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHsgaXNSZWZlcmVuY2VDYWNoZSB9IGZyb20gJy4vaXNSZWZlcmVuY2VDYWNoZS50cyc7XG5cbi8qKlxuICogQ2hlY2sgaWYgdGhlIHJlZmVyZW5jZSBpcyBhbiBlbWJlZCBjYWNoZS5cbiAqXG4gKiBAcGFyYW0gcmVmZXJlbmNlIC0gVGhlIHJlZmVyZW5jZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIHJlZmVyZW5jZSBpcyBhbiBlbWJlZCBjYWNoZS5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNFbWJlZENhY2hlKHJlZmVyZW5jZTogUmVmZXJlbmNlKTogcmVmZXJlbmNlIGlzIEVtYmVkQ2FjaGUge1xuICByZXR1cm4gaXNSZWZlcmVuY2VDYWNoZShyZWZlcmVuY2UpICYmIHJlZmVyZW5jZS5vcmlnaW5hbFswXSA9PT0gJyEnO1xufVxuIiwgImltcG9ydCB0eXBlIHtcbiAgRnJvbnRtYXR0ZXJMaW5rQ2FjaGUsXG4gIFJlZmVyZW5jZVxufSBmcm9tICdvYnNpZGlhbic7XG5cbi8qKlxuICogQ2hlY2sgaWYgdGhlIHJlZmVyZW5jZSBpcyBhIGZyb250bWF0dGVyIGxpbmsgY2FjaGUuXG4gKlxuICogQHBhcmFtIHJlZmVyZW5jZSAtIFRoZSByZWZlcmVuY2UgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSByZWZlcmVuY2UgaXMgYSBmcm9udG1hdHRlciBsaW5rIGNhY2hlLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0Zyb250bWF0dGVyTGlua0NhY2hlKHJlZmVyZW5jZTogUmVmZXJlbmNlKTogcmVmZXJlbmNlIGlzIEZyb250bWF0dGVyTGlua0NhY2hlIHtcbiAgcmV0dXJuICEhKHJlZmVyZW5jZSBhcyBQYXJ0aWFsPEZyb250bWF0dGVyTGlua0NhY2hlPikua2V5O1xufVxuIiwgImltcG9ydCB0eXBlIHtcbiAgTGlua0NhY2hlLFxuICBSZWZlcmVuY2Vcbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBpc1JlZmVyZW5jZUNhY2hlIH0gZnJvbSAnLi9pc1JlZmVyZW5jZUNhY2hlLnRzJztcblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgcmVmZXJlbmNlIGlzIGEgbGluayBjYWNoZS5cbiAqXG4gKiBAcGFyYW0gcmVmZXJlbmNlIC0gVGhlIHJlZmVyZW5jZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIHJlZmVyZW5jZSBpcyBhIGxpbmsgY2FjaGUuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTGlua0NhY2hlKHJlZmVyZW5jZTogUmVmZXJlbmNlKTogcmVmZXJlbmNlIGlzIExpbmtDYWNoZSB7XG4gIHJldHVybiBpc1JlZmVyZW5jZUNhY2hlKHJlZmVyZW5jZSkgJiYgcmVmZXJlbmNlLm9yaWdpbmFsWzBdICE9PSAnISc7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7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QSxJQUFBQyxvQkFBK0I7QUFZeEIsU0FBUywrQkFBbUU7QUFDakYsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBMEI7QUFZbkIsU0FBUywwQkFBeUQ7QUFDdkUsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBbUM7QUFZNUIsU0FBUyxtQ0FBMkU7QUFDekYsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBc0M7QUFZL0IsU0FBUyxzQ0FBaUY7QUFDL0YsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBa0M7QUFZM0IsU0FBUyxrQ0FBeUU7QUFDdkYsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBcUM7QUFZOUIsU0FBUyxxQ0FBK0U7QUFDN0YsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBc0M7QUFZL0IsU0FBUyxzQ0FBaUY7QUFDL0YsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBcUM7QUFZOUIsU0FBUyxxQ0FBK0U7QUFDN0YsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBZ0M7QUFZekIsU0FBUyxnQ0FBcUU7QUFDbkYsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBZ0M7QUFZekIsU0FBUyxnQ0FBcUU7QUFDbkYsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBZ0M7QUFZekIsU0FBUyxnQ0FBcUU7QUFDbkYsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBa0M7QUFZM0IsU0FBUyxrQ0FBeUU7QUFDdkYsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBOEI7QUFZdkIsU0FBUyw4QkFBaUU7QUFDL0UsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBZ0M7QUFZekIsU0FBUyxnQ0FBcUU7QUFDbkYsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBK0I7QUFZeEIsU0FBUywrQkFBNEU7QUFDMUYsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBNkI7QUFZdEIsU0FBUyw2QkFBK0Q7QUFDN0UsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBMEI7QUFZbkIsU0FBUywwQkFBeUQ7QUFDdkUsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBOEI7QUFZdkIsU0FBUyw4QkFBaUU7QUFDL0UsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBMEI7QUFZbkIsU0FBUywwQkFBeUQ7QUFDdkUsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBMEI7QUFZbkIsU0FBUywwQkFBeUQ7QUFDdkUsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBMEI7QUFZbkIsU0FBUywwQkFBeUQ7QUFDdkUsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBMkI7QUFZcEIsU0FBUywyQkFBMkQ7QUFDekUsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBMEI7QUFZbkIsU0FBUywwQkFBeUQ7QUFDdkUsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBMEI7QUFZbkIsU0FBUywwQkFBeUQ7QUFDdkUsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBNkI7QUFZdEIsU0FBUyw2QkFBK0Q7QUFDN0UsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBMEI7QUFZbkIsU0FBUywwQkFBeUQ7QUFDdkUsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBNEI7QUFZckIsU0FBUyw0QkFBNkQ7QUFDM0UsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBNEI7QUFZckIsU0FBUyw0QkFBNkQ7QUFDM0UsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBNEI7QUFZckIsU0FBUyw0QkFBNkQ7QUFDM0UsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBa0M7QUFZM0IsU0FBUyxrQ0FBeUU7QUFDdkYsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBNEI7QUFZckIsU0FBUyw0QkFBNkQ7QUFDM0UsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBeUI7QUFZbEIsU0FBUyx5QkFBdUQ7QUFDckUsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBeUI7QUFZbEIsU0FBUyx5QkFBdUQ7QUFDckUsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBc0I7QUFZ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QXlCO0FBQ3hELFNBQU8sSUFBSSxNQUFNO0FBQ25COzs7QUNmQSxJQUFBQyxvQkFBeUI7QUFZbEIsU0FBUyxnQkFBNEI7QUFDMUMsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBbUQ7QUFjbkQsZUFBc0IsY0FBZ0M7QUFDcEQsU0FBUSxVQUFNLGtCQUFBQyxhQUFvQjtBQUNwQzs7O0FDaEJBLElBQUFDLG9CQUErQztBQWMvQyxlQUFzQixZQUFrQztBQUN0RCxTQUFRLFVBQU0sa0JBQUFDLFdBQWtCO0FBQ2xDOzs7QUNoQkEsSUFBQUMsb0JBQStDO0FBYy9DLGVBQXNCLFlBQWtDO0FBQ3RELFNBQVEsVUFBTSxrQkFBQUMsV0FBa0I7QUFDbEM7OztBQ0ZPLFNBQVMsaUJBQWlCLFdBQW1EO0FBQ2xGLFNBQU8sQ0FBQyxDQUFFLFVBQXNDO0FBQ2xEOzs7QUNBTyxTQUFTLGFBQWEsV0FBK0M7QUFDMUUsU0FBTyxpQkFBaUIsU0FBUyxLQUFLLFVBQVUsU0FBUyxDQUFDLE1BQU07QUFDbEU7OztBQ0pPLFNBQVMsdUJBQXVCLFdBQXlEO0FBQzlGLFNBQU8sQ0FBQyxDQUFFLFVBQTRDO0FBQ3hEOzs7QUNBTyxTQUFTLFlBQVksV0FBOEM7QUFDeEUsU0FBTyxpQkFBaUIsU0FBUyxLQUFLLFVBQVUsU0FBUyxDQUFDLE1BQU07QUFDbEU7IiwKICAibmFtZXMiOiBbImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImxvYWRNZXJtYWlkT3JpZ2luYWwiLCAiaW1wb3J0X29ic2lkaWFuIiwgImxvYWRQZGZKc09yaWdpbmFsIiwgImltcG9ydF9vYnNpZGlhbiIsICJsb2FkUHJpc21PcmlnaW5hbCJdCn0K