-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.js
956 lines (954 loc) · 136 KB
/
main.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
/*
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
if you want to view the source, please visit the github repository of this plugin
*/
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// main.ts
var main_exports = {};
__export(main_exports, {
default: () => htmlMdScPlugin
});
module.exports = __toCommonJS(main_exports);
var import_obsidian = require("obsidian");
var DEFAULT_SETTINGS = {
mySetting: "default"
};
var htmlMdScPlugin = class extends import_obsidian.Plugin {
async onload() {
await this.loadSettings();
const ribbonIconEl = this.addRibbonIcon("highlight-glyph", "HTML Markdown Shortcuts", (evt) => {
new import_obsidian.Notice("This is a notice!");
new ColorPickerModal(this.app).open();
});
ribbonIconEl.addClass("html-md-sc-ribbon-class");
const statusBarItemEl = this.addStatusBarItem();
statusBarItemEl.setText("");
this.addCommand({
id: "open-color-picker",
name: "Open Color Picker",
// callback: () => {
// new ColorPickerModal(this.app, (result) => {
// new Notice(`Hello, ${result}!`);
// }).open();
// }
editorCallback: (editor, view) => {
const selection = editor.getSelection();
editor.replaceSelection(`<span class="lined"><span class="cX"><label for="colorPicker" popovertarget="colorPicker" style="cursor:pointer;">Show Color Palette</label><input type="color" popover value="#1e1e1e" onchange="setTimeout(function (){document.querySelector('body').style.background = document.getElementById('myheader').value;}, 50);" id="colorPicker" style="display:none;"></span></span>
`);
editor.setCursor(editor.offsetToPos(editor.posToOffset(editor.getCursor()) - 0));
new ColorPickerModal(this.app, (result) => {
new import_obsidian.Notice(`Hello, ${result}!`);
}).open();
}
});
this.addCommand({
id: "demo",
name: "Demo",
hotkeys: [{ modifiers: ["Mod", "Alt", "Shift"], key: "d" }],
editorCallback: (editor, view) => {
editor.replaceSelection(`<span class="glow">Text</span>
<span class="dance">Text</span>
<span class="fade">Text</span>
<span class="lined X">Text</span>
<span class="bounce">Text</span>
<span class="highlight R">Text</span> <span class="cR">Text</span> <span class="boxR">Text</span>
<span class="highlight O">Text</span> <span class="cO">Text</span> <span class="boxO">Text</span>
<span class="highlight Y">Text</span> <span class="cY">Text</span> <span class="boxY">Text</span>
<span class="highlight L">Text</span> <span class="cL">Text</span> <span class="boxL">Text</span>
<span class="highlight G">Text</span> <span class="cG">Text</span> <span class="boxG">Text</span>
<span class="highlight U">Text</span> <span class="cU">Text</span> <span class="boxU">Text</span>
<span class="highlight A">Text</span> <span class="cA">Text</span> <span class="boxA">Text</span>
<span class="highlight Z">Text</span> <span class="cZ">Text</span> <span class="boxZ">Text</span>
<span class="highlight B">Text</span> <span class="cB">Text</span> <span class="boxB">Text</span>
<span class="highlight V">Text</span> <span class="cV">Text</span> <span class="boxV">Text</span>
<span class="highlight F">Text</span> <span class="cF">Text</span> <span class="boxF">Text</span>
<span class="highlight M">Text</span> <span class="cM">Text</span> <span class="boxM">Text</span>
<span class="highlight W">Text</span> <span class="cW">Text</span> <span class="boxW">Text</span>
<span class="highlight W K">Text</span> <span class="cW cK">Text</span> <span class="boxWK">Text</span>
<span class="highlight K">Text</span> <span class="cK">Text</span> <span class="boxK">Text</span>
<span class="highlight X">Text</span> <span class="cX">Text</span> <span class="boxX">Text</span>
<span class="popUp"><span class="popTxt">A greeting</span>Hello</span>
<span class="popUp highlight R"><span class="popTxt"><span class="lined"><span class='cR'>R</span><span class='cO'>O</span><span class='cY'>Y</span><span class='cL'>L</span><span class='cG'>G</span><span class='cU'>U</span><span class='cA'>A</span><span class='cZ'>Z</span><span class='cB'>B</span><span class='cV'>V</span><span class='cF'>F</span><span class='cM'>M</span><span class='cW'>W</span><span class='cK'>K</span> <span class='cW cK'>WK</span></span></span>A random mix, maybe. Not really? I don't know!</span>
<span class="glow keepColor"> keepColor</span> <span class="dance keepColor"> keepColor</span> <span class="fade keepColor"> keepColor</span> <span class="lined keepColor">keepColor</span> <span class="bounce keepColor"> keepColor</span> <span class="highlight R keepColor">keepColor</span> <span class="cR keepColor">keepColor</span>
<span class="boxL">Hello text</span> <span class="boxZ highlight V">Hello text</span> <span class="boxL cR">Hello text</span> <span class="boxR cG highlight B">Hello text</span>
- <span id="help"></span><hr id="x">
---
`);
new import_obsidian.Notice("Showing Demo!");
}
});
this.addCommand({
id: "bold",
name: "Bold",
hotkeys: [{ modifiers: ["Mod", "Shift"], key: "b" }],
editorCallback: (editor, view) => {
const selection = editor.getSelection();
editor.replaceSelection("<b>" + selection + "</b>");
editor.setCursor(editor.offsetToPos(editor.posToOffset(editor.getCursor()) - 4));
}
});
this.addCommand({
id: "italic",
name: "Italic",
hotkeys: [{ modifiers: ["Mod", "Shift"], key: "i" }],
editorCallback: (editor, view) => {
const selection = editor.getSelection();
editor.replaceSelection("<i>" + selection + "</i>");
editor.setCursor(editor.offsetToPos(editor.posToOffset(editor.getCursor()) - 4));
}
});
this.addCommand({
id: "underline",
name: "Underline",
hotkeys: [{ modifiers: ["Mod", "Shift"], key: "u" }],
editorCallback: (editor, view) => {
const selection = editor.getSelection();
editor.replaceSelection("<u>" + selection + "</u>");
editor.setCursor(editor.offsetToPos(editor.posToOffset(editor.getCursor()) - 4));
}
});
this.addCommand({
id: "strikethrough",
name: "Strikethrough",
hotkeys: [{ modifiers: ["Mod", "Shift"], key: "q" }],
editorCallback: (editor, view) => {
const selection = editor.getSelection();
editor.replaceSelection("<del>" + selection + "</del>");
editor.setCursor(editor.offsetToPos(editor.posToOffset(editor.getCursor()) - 6));
}
});
this.addCommand({
id: "horizontal-rule",
name: "Horizontal Rule",
hotkeys: [{ modifiers: ["Mod", "Alt", "Shift"], key: "-" }],
editorCallback: (editor, view) => {
const selection = editor.getSelection();
editor.replaceSelection('<hr id="x">');
}
});
this.addCommand({
id: "center-text",
name: "Center",
hotkeys: [{ modifiers: ["Mod", "Shift"], key: " " }],
editorCallback: (editor, view) => {
const selection = editor.getSelection();
editor.replaceSelection("<center>" + selection + "</center>");
editor.setCursor(editor.offsetToPos(editor.posToOffset(editor.getCursor()) - 9));
}
});
this.addCommand({
id: "color-hex",
name: "Color Hex",
hotkeys: [{ modifiers: ["Mod", "Alt", "Shift"], key: "c" }],
editorCallback: (editor, view) => {
const selection = editor.getSelection();
editor.replaceSelection('<span style="color:#;">' + selection + "</span>");
editor.setCursor(editor.offsetToPos(editor.posToOffset(editor.getCursor()) - selection.length - 10));
}
});
this.addCommand({
id: "color-class",
name: "Color Class",
hotkeys: [{ modifiers: ["Mod", "Shift"], key: "c" }],
editorCallback: (editor, view) => {
const selection = editor.getSelection();
editor.replaceSelection('<span class="c">' + selection + "</span>");
editor.setCursor(editor.offsetToPos(editor.posToOffset(editor.getCursor()) - selection.length - 9));
}
});
this.addCommand({
id: "color-class-r",
name: "Color Class Red",
editorCallback: (editor, view) => {
const selection = editor.getSelection();
editor.replaceSelection('<span class="cR">' + selection + "</span>");
editor.setCursor(editor.offsetToPos(editor.posToOffset(editor.getCursor()) - 7));
}
});
this.addCommand({
id: "color-class-o",
name: "Color Class Orange",
editorCallback: (editor, view) => {
const selection = editor.getSelection();
editor.replaceSelection('<span class="cO">' + selection + "</span>");
editor.setCursor(editor.offsetToPos(editor.posToOffset(editor.getCursor()) - 7));
}
});
this.addCommand({
id: "color-class-y",
name: "Color Class Yellow",
editorCallback: (editor, view) => {
const selection = editor.getSelection();
editor.replaceSelection('<span class="cY">' + selection + "</span>");
editor.setCursor(editor.offsetToPos(editor.posToOffset(editor.getCursor()) - 7));
}
});
this.addCommand({
id: "color-class-l",
name: "Color Class Lime",
editorCallback: (editor, view) => {
const selection = editor.getSelection();
editor.replaceSelection('<span class="cL">' + selection + "</span>");
editor.setCursor(editor.offsetToPos(editor.posToOffset(editor.getCursor()) - 7));
}
});
this.addCommand({
id: "color-class-g",
name: "Color Class Green",
editorCallback: (editor, view) => {
const selection = editor.getSelection();
editor.replaceSelection('<span class="cG">' + selection + "</span>");
editor.setCursor(editor.offsetToPos(editor.posToOffset(editor.getCursor()) - 7));
}
});
this.addCommand({
id: "color-class-u",
name: "Color Class Aquamarine",
editorCallback: (editor, view) => {
const selection = editor.getSelection();
editor.replaceSelection('<span class="cU">' + selection + "</span>");
editor.setCursor(editor.offsetToPos(editor.posToOffset(editor.getCursor()) - 7));
}
});
this.addCommand({
id: "color-class-a",
name: "Color Class Electric",
editorCallback: (editor, view) => {
const selection = editor.getSelection();
editor.replaceSelection('<span class="cA">' + selection + "</span>");
editor.setCursor(editor.offsetToPos(editor.posToOffset(editor.getCursor()) - 7));
}
});
this.addCommand({
id: "color-class-z",
name: "Color Class Azure",
editorCallback: (editor, view) => {
const selection = editor.getSelection();
editor.replaceSelection('<span class="cZ">' + selection + "</span>");
editor.setCursor(editor.offsetToPos(editor.posToOffset(editor.getCursor()) - 7));
}
});
this.addCommand({
id: "color-class-b",
name: "Color Class Blue",
editorCallback: (editor, view) => {
const selection = editor.getSelection();
editor.replaceSelection('<span class="cB">' + selection + "</span>");
editor.setCursor(editor.offsetToPos(editor.posToOffset(editor.getCursor()) - 7));
}
});
this.addCommand({
id: "color-class-v",
name: "Color Class Violet",
editorCallback: (editor, view) => {
const selection = editor.getSelection();
editor.replaceSelection('<span class="cV">' + selection + "</span>");
editor.setCursor(editor.offsetToPos(editor.posToOffset(editor.getCursor()) - 7));
}
});
this.addCommand({
id: "color-class-f",
name: "Color Class Fuchsia",
editorCallback: (editor, view) => {
const selection = editor.getSelection();
editor.replaceSelection('<span class="cF">' + selection + "</span>");
editor.setCursor(editor.offsetToPos(editor.posToOffset(editor.getCursor()) - 7));
}
});
this.addCommand({
id: "color-class-m",
name: "Color Class Magenta",
editorCallback: (editor, view) => {
const selection = editor.getSelection();
editor.replaceSelection('<span class="cM">' + selection + "</span>");
editor.setCursor(editor.offsetToPos(editor.posToOffset(editor.getCursor()) - 7));
}
});
this.addCommand({
id: "color-class-w",
name: "Color Class White",
editorCallback: (editor, view) => {
const selection = editor.getSelection();
editor.replaceSelection('<span class="cW">' + selection + "</span>");
editor.setCursor(editor.offsetToPos(editor.posToOffset(editor.getCursor()) - 7));
}
});
this.addCommand({
id: "color-class-wk",
name: "Color Class Gray",
editorCallback: (editor, view) => {
const selection = editor.getSelection();
editor.replaceSelection('<span class="cWK">' + selection + "</span>");
editor.setCursor(editor.offsetToPos(editor.posToOffset(editor.getCursor()) - 7));
}
});
this.addCommand({
id: "color-class-k",
name: "Color Class Black",
editorCallback: (editor, view) => {
const selection = editor.getSelection();
editor.replaceSelection('<span class="cK">' + selection + "</span>");
editor.setCursor(editor.offsetToPos(editor.posToOffset(editor.getCursor()) - 7));
}
});
this.addCommand({
id: "color-class-x",
name: "Color Class Rainbow",
editorCallback: (editor, view) => {
const selection = editor.getSelection();
editor.replaceSelection('<span class="cX">' + selection + "</span>");
editor.setCursor(editor.offsetToPos(editor.posToOffset(editor.getCursor()) - 7));
}
});
this.addCommand({
id: "assistance",
name: "Help",
hotkeys: [{ modifiers: ["Mod", "Alt", "Shift"], key: "h" }],
editorCallback: (editor, view) => {
const selection = editor.getSelection();
editor.replaceSelection('<center id="help">' + selection + "</center>.");
editor.setCursor(editor.offsetToPos(editor.posToOffset(editor.getCursor()) - 0));
}
});
this.addCommand({
id: "pop-hover",
name: "Pop Up Text",
hotkeys: [{ modifiers: ["Mod", "Shift"], key: "p" }],
editorCallback: (editor, view) => {
const selection = editor.getSelection();
editor.replaceSelection('<span class="popUp"><span class="popTxt"></span>' + selection + "</span>");
editor.setCursor(editor.offsetToPos(editor.posToOffset(editor.getCursor()) - selection.length - 14));
}
});
this.addCommand({
id: "highlight-class",
name: "Highlight Class",
editorCallback: (editor, view) => {
const selection = editor.getSelection();
editor.replaceSelection('<span class="highlight ">' + selection + "</span>");
editor.setCursor(editor.offsetToPos(editor.posToOffset(editor.getCursor()) - selection.length - 9));
}
});
this.addCommand({
id: "highlight-class-r",
name: "Highlight Class Red",
editorCallback: (editor, view) => {
const selection = editor.getSelection();
editor.replaceSelection('<span class="highlight R">' + selection + "</span>");
editor.setCursor(editor.offsetToPos(editor.posToOffset(editor.getCursor()) - 7));
}
});
this.addCommand({
id: "highlight-class-o",
name: "Highlight Class Orange",
editorCallback: (editor, view) => {
const selection = editor.getSelection();
editor.replaceSelection('<span class="highlight O">' + selection + "</span>");
editor.setCursor(editor.offsetToPos(editor.posToOffset(editor.getCursor()) - 7));
}
});
this.addCommand({
id: "highlight-class-y",
name: "Highlight Class Yellow",
editorCallback: (editor, view) => {
const selection = editor.getSelection();
editor.replaceSelection('<span class="highlight Y">' + selection + "</span>");
editor.setCursor(editor.offsetToPos(editor.posToOffset(editor.getCursor()) - 7));
}
});
this.addCommand({
id: "highlight-class-l",
name: "Highlight Class Lime",
editorCallback: (editor, view) => {
const selection = editor.getSelection();
editor.replaceSelection('<span class="highlight L">' + selection + "</span>");
editor.setCursor(editor.offsetToPos(editor.posToOffset(editor.getCursor()) - 7));
}
});
this.addCommand({
id: "highlight-class-g",
name: "Highlight Class Green",
editorCallback: (editor, view) => {
const selection = editor.getSelection();
editor.replaceSelection('<span class="highlight G">' + selection + "</span>");
editor.setCursor(editor.offsetToPos(editor.posToOffset(editor.getCursor()) - 7));
}
});
this.addCommand({
id: "highlight-class-u",
name: "Highlight Class Aquamarine",
editorCallback: (editor, view) => {
const selection = editor.getSelection();
editor.replaceSelection('<span class="highlight U">' + selection + "</span>");
editor.setCursor(editor.offsetToPos(editor.posToOffset(editor.getCursor()) - 7));
}
});
this.addCommand({
id: "highlight-class-a",
name: "Highlight Class Electric",
editorCallback: (editor, view) => {
const selection = editor.getSelection();
editor.replaceSelection('<span class="highlight A">' + selection + "</span>");
editor.setCursor(editor.offsetToPos(editor.posToOffset(editor.getCursor()) - 7));
}
});
this.addCommand({
id: "highlight-class-z",
name: "Highlight Class Azure",
editorCallback: (editor, view) => {
const selection = editor.getSelection();
editor.replaceSelection('<span class="highlight Z">' + selection + "</span>");
editor.setCursor(editor.offsetToPos(editor.posToOffset(editor.getCursor()) - 7));
}
});
this.addCommand({
id: "highlight-class-b",
name: "Highlight Class Blue",
editorCallback: (editor, view) => {
const selection = editor.getSelection();
editor.replaceSelection('<span class="highlight B">' + selection + "</span>");
editor.setCursor(editor.offsetToPos(editor.posToOffset(editor.getCursor()) - 7));
}
});
this.addCommand({
id: "highlight-class-v",
name: "Highlight Class Violet",
editorCallback: (editor, view) => {
const selection = editor.getSelection();
editor.replaceSelection('<span class="highlight V">' + selection + "</span>");
editor.setCursor(editor.offsetToPos(editor.posToOffset(editor.getCursor()) - 7));
}
});
this.addCommand({
id: "highlight-class-f",
name: "Highlight Class Fuchsia",
editorCallback: (editor, view) => {
const selection = editor.getSelection();
editor.replaceSelection('<span class="highlight F">' + selection + "</span>");
editor.setCursor(editor.offsetToPos(editor.posToOffset(editor.getCursor()) - 7));
}
});
this.addCommand({
id: "highlight-class-m",
name: "Highlight Class Magenta",
editorCallback: (editor, view) => {
const selection = editor.getSelection();
editor.replaceSelection('<span class="highlight M">' + selection + "</span>");
editor.setCursor(editor.offsetToPos(editor.posToOffset(editor.getCursor()) - 7));
}
});
this.addCommand({
id: "highlight-class-w",
name: "Highlight Class White",
editorCallback: (editor, view) => {
const selection = editor.getSelection();
editor.replaceSelection('<span class="highlight W">' + selection + "</span>");
editor.setCursor(editor.offsetToPos(editor.posToOffset(editor.getCursor()) - 7));
}
});
this.addCommand({
id: "highlight-class-wk",
name: "Highlight Class Gray",
editorCallback: (editor, view) => {
const selection = editor.getSelection();
editor.replaceSelection('<span class="highlight WK">' + selection + "</span>");
editor.setCursor(editor.offsetToPos(editor.posToOffset(editor.getCursor()) - 7));
}
});
this.addCommand({
id: "highlight-class-k",
name: "Highlight Class Black",
editorCallback: (editor, view) => {
const selection = editor.getSelection();
editor.replaceSelection('<span class="highlight K">' + selection + "</span>");
editor.setCursor(editor.offsetToPos(editor.posToOffset(editor.getCursor()) - 7));
}
});
this.addCommand({
id: "highlight-class-x",
name: "Highlight Class Rainbow",
editorCallback: (editor, view) => {
const selection = editor.getSelection();
editor.replaceSelection('<span class="highlight X">' + selection + "</span>");
editor.setCursor(editor.offsetToPos(editor.posToOffset(editor.getCursor()) - 7));
}
});
this.addCommand({
id: "box-class",
name: "Box Class",
editorCallback: (editor, view) => {
const selection = editor.getSelection();
editor.replaceSelection('<span class="box">' + selection + "</span>");
editor.setCursor(editor.offsetToPos(editor.posToOffset(editor.getCursor()) - selection.length - 9));
}
});
this.addCommand({
id: "box-class-r",
name: "Box Class Red",
editorCallback: (editor, view) => {
const selection = editor.getSelection();
editor.replaceSelection('<span class="boxR">' + selection + "</span>");
editor.setCursor(editor.offsetToPos(editor.posToOffset(editor.getCursor()) - 7));
}
});
this.addCommand({
id: "box-class-o",
name: "Box Class Orange",
editorCallback: (editor, view) => {
const selection = editor.getSelection();
editor.replaceSelection('<span class="boxO">' + selection + "</span>");
editor.setCursor(editor.offsetToPos(editor.posToOffset(editor.getCursor()) - 7));
}
});
this.addCommand({
id: "box-class-y",
name: "Box Class Yellow",
editorCallback: (editor, view) => {
const selection = editor.getSelection();
editor.replaceSelection('<span class="boxY">' + selection + "</span>");
editor.setCursor(editor.offsetToPos(editor.posToOffset(editor.getCursor()) - 7));
}
});
this.addCommand({
id: "box-class-l",
name: "Box Class Lime",
editorCallback: (editor, view) => {
const selection = editor.getSelection();
editor.replaceSelection('<span class="boxL">' + selection + "</span>");
editor.setCursor(editor.offsetToPos(editor.posToOffset(editor.getCursor()) - 7));
}
});
this.addCommand({
id: "box-class-g",
name: "Box Class Green",
editorCallback: (editor, view) => {
const selection = editor.getSelection();
editor.replaceSelection('<span class="boxG">' + selection + "</span>");
editor.setCursor(editor.offsetToPos(editor.posToOffset(editor.getCursor()) - 7));
}
});
this.addCommand({
id: "box-class-u",
name: "Box Class Aquamarine",
editorCallback: (editor, view) => {
const selection = editor.getSelection();
editor.replaceSelection('<span class="boxU">' + selection + "</span>");
editor.setCursor(editor.offsetToPos(editor.posToOffset(editor.getCursor()) - 7));
}
});
this.addCommand({
id: "box-class-a",
name: "Box Class Electric",
editorCallback: (editor, view) => {
const selection = editor.getSelection();
editor.replaceSelection('<span class="boxA">' + selection + "</span>");
editor.setCursor(editor.offsetToPos(editor.posToOffset(editor.getCursor()) - 7));
}
});
this.addCommand({
id: "box-class-z",
name: "Box Class Azure",
editorCallback: (editor, view) => {
const selection = editor.getSelection();
editor.replaceSelection('<span class="boxZ">' + selection + "</span>");
editor.setCursor(editor.offsetToPos(editor.posToOffset(editor.getCursor()) - 7));
}
});
this.addCommand({
id: "box-class-b",
name: "Box Class Blue",
editorCallback: (editor, view) => {
const selection = editor.getSelection();
editor.replaceSelection('<span class="boxB">' + selection + "</span>");
editor.setCursor(editor.offsetToPos(editor.posToOffset(editor.getCursor()) - 7));
}
});
this.addCommand({
id: "box-class-v",
name: "Box Class Violet",
editorCallback: (editor, view) => {
const selection = editor.getSelection();
editor.replaceSelection('<span class="boxV">' + selection + "</span>");
editor.setCursor(editor.offsetToPos(editor.posToOffset(editor.getCursor()) - 7));
}
});
this.addCommand({
id: "box-class-f",
name: "Box Class Fuchsia",
editorCallback: (editor, view) => {
const selection = editor.getSelection();
editor.replaceSelection('<span class="boxF">' + selection + "</span>");
editor.setCursor(editor.offsetToPos(editor.posToOffset(editor.getCursor()) - 7));
}
});
this.addCommand({
id: "box-class-m",
name: "Box Class Magenta",
editorCallback: (editor, view) => {
const selection = editor.getSelection();
editor.replaceSelection('<span class="boxM">' + selection + "</span>");
editor.setCursor(editor.offsetToPos(editor.posToOffset(editor.getCursor()) - 7));
}
});
this.addCommand({
id: "box-class-w",
name: "Box Class White",
editorCallback: (editor, view) => {
const selection = editor.getSelection();
editor.replaceSelection('<span class="boxW">' + selection + "</span>");
editor.setCursor(editor.offsetToPos(editor.posToOffset(editor.getCursor()) - 7));
}
});
this.addCommand({
id: "box-class-wk",
name: "Box Class Gray",
editorCallback: (editor, view) => {
const selection = editor.getSelection();
editor.replaceSelection('<span class="boxWK">' + selection + "</span>");
editor.setCursor(editor.offsetToPos(editor.posToOffset(editor.getCursor()) - 7));
}
});
this.addCommand({
id: "box-class-k",
name: "Box Class Black",
editorCallback: (editor, view) => {
const selection = editor.getSelection();
editor.replaceSelection('<span class="boxK">' + selection + "</span>");
editor.setCursor(editor.offsetToPos(editor.posToOffset(editor.getCursor()) - 7));
}
});
this.addCommand({
id: "box-class-x",
name: "Box Class Rainbow",
editorCallback: (editor, view) => {
const selection = editor.getSelection();
editor.replaceSelection('<span class="boxX">' + selection + "</span>");
editor.setCursor(editor.offsetToPos(editor.posToOffset(editor.getCursor()) - 7));
}
});
this.addCommand({
id: "lined-class",
name: "Lined Class",
hotkeys: [{ modifiers: ["Mod", "Alt", "Shift"], key: "u" }],
editorCallback: (editor, view) => {
const selection = editor.getSelection();
editor.replaceSelection('<span class="lined ">' + selection + "</span>");
editor.setCursor(editor.offsetToPos(editor.posToOffset(editor.getCursor()) - selection.length - 9));
}
});
this.addCommand({
id: "lined-class-r",
name: "Lined Class Red",
editorCallback: (editor, view) => {
const selection = editor.getSelection();
editor.replaceSelection('<span class="lined R">' + selection + "</span>");
editor.setCursor(editor.offsetToPos(editor.posToOffset(editor.getCursor()) - 7));
}
});
this.addCommand({
id: "lined-class-o",
name: "Lined Class Orange",
editorCallback: (editor, view) => {
const selection = editor.getSelection();
editor.replaceSelection('<span class="lined O">' + selection + "</span>");
editor.setCursor(editor.offsetToPos(editor.posToOffset(editor.getCursor()) - 7));
}
});
this.addCommand({
id: "lined-class-y",
name: "Lined Class Yellow",
editorCallback: (editor, view) => {
const selection = editor.getSelection();
editor.replaceSelection('<span class="lined Y">' + selection + "</span>");
editor.setCursor(editor.offsetToPos(editor.posToOffset(editor.getCursor()) - 7));
}
});
this.addCommand({
id: "lined-class-l",
name: "Lined Class Lime",
editorCallback: (editor, view) => {
const selection = editor.getSelection();
editor.replaceSelection('<span class="lined L">' + selection + "</span>");
editor.setCursor(editor.offsetToPos(editor.posToOffset(editor.getCursor()) - 7));
}
});
this.addCommand({
id: "lined-class-G",
name: "Lined Class Green",
editorCallback: (editor, view) => {
const selection = editor.getSelection();
editor.replaceSelection('<span class="lined G">' + selection + "</span>");
editor.setCursor(editor.offsetToPos(editor.posToOffset(editor.getCursor()) - 7));
}
});
this.addCommand({
id: "lined-class-u",
name: "Lined Class Aquamarine",
editorCallback: (editor, view) => {
const selection = editor.getSelection();
editor.replaceSelection('<span class="lined U">' + selection + "</span>");
editor.setCursor(editor.offsetToPos(editor.posToOffset(editor.getCursor()) - 7));
}
});
this.addCommand({
id: "lined-class-a",
name: "Lined Class Electric",
editorCallback: (editor, view) => {
const selection = editor.getSelection();
editor.replaceSelection('<span class="lined A">' + selection + "</span>");
editor.setCursor(editor.offsetToPos(editor.posToOffset(editor.getCursor()) - 7));
}
});
this.addCommand({
id: "lined-class-z",
name: "Lined Class Azure",
editorCallback: (editor, view) => {
const selection = editor.getSelection();
editor.replaceSelection('<span class="lined Z">' + selection + "</span>");
editor.setCursor(editor.offsetToPos(editor.posToOffset(editor.getCursor()) - 7));
}
});
this.addCommand({
id: "lined-class-b",
name: "Lined Class Blue",
editorCallback: (editor, view) => {
const selection = editor.getSelection();
editor.replaceSelection('<span class="lined B">' + selection + "</span>");
editor.setCursor(editor.offsetToPos(editor.posToOffset(editor.getCursor()) - 7));
}
});
this.addCommand({
id: "lined-class-v",
name: "Lined Class Violet",
editorCallback: (editor, view) => {
const selection = editor.getSelection();
editor.replaceSelection('<span class="lined V">' + selection + "</span>");
editor.setCursor(editor.offsetToPos(editor.posToOffset(editor.getCursor()) - 7));
}
});
this.addCommand({
id: "lined-class-f",
name: "Lined Class Fuchsia",
editorCallback: (editor, view) => {
const selection = editor.getSelection();
editor.replaceSelection('<span class="lined F">' + selection + "</span>");
editor.setCursor(editor.offsetToPos(editor.posToOffset(editor.getCursor()) - 7));
}
});
this.addCommand({
id: "lined-class-m",
name: "Lined Class Magenta",
editorCallback: (editor, view) => {
const selection = editor.getSelection();
editor.replaceSelection('<span class="lined M">' + selection + "</span>");
editor.setCursor(editor.offsetToPos(editor.posToOffset(editor.getCursor()) - 7));
}
});
this.addCommand({
id: "lined-class-w",
name: "Lined Class White",
editorCallback: (editor, view) => {
const selection = editor.getSelection();
editor.replaceSelection('<span class="lined W">' + selection + "</span>");
editor.setCursor(editor.offsetToPos(editor.posToOffset(editor.getCursor()) - 7));
}
});
this.addCommand({
id: "lined-class-wk",
name: "Lined Class Gray",
editorCallback: (editor, view) => {
const selection = editor.getSelection();
editor.replaceSelection('<span class="lined WK">' + selection + "</span>");
editor.setCursor(editor.offsetToPos(editor.posToOffset(editor.getCursor()) - 7));
}
});
this.addCommand({
id: "lined-class-k",
name: "Lined Class Black",
editorCallback: (editor, view) => {
const selection = editor.getSelection();
editor.replaceSelection('<span class="lined K">' + selection + "</span>");
editor.setCursor(editor.offsetToPos(editor.posToOffset(editor.getCursor()) - 7));
}
});
this.addCommand({
id: "lined-class-x",
name: "Lined Class Rainbow",
editorCallback: (editor, view) => {
const selection = editor.getSelection();
editor.replaceSelection('<span class="lined X">' + selection + "</span>");
editor.setCursor(editor.offsetToPos(editor.posToOffset(editor.getCursor()) - 7));
}
});
this.addCommand({
id: "glow-class",
name: "Glow Class",
editorCallback: (editor, view) => {
const selection = editor.getSelection();
editor.replaceSelection('<span class="glow">' + selection + "</span>");
editor.setCursor(editor.offsetToPos(editor.posToOffset(editor.getCursor()) - 7));
}
});
this.addCommand({
id: "dance-class",
name: "Dance Class",
editorCallback: (editor, view) => {
const selection = editor.getSelection();
editor.replaceSelection('<span class="dance">' + selection + "</span>");
editor.setCursor(editor.offsetToPos(editor.posToOffset(editor.getCursor()) - 7));
}
});
this.addCommand({
id: "fade-class",
name: "Fade Class",
editorCallback: (editor, view) => {
const selection = editor.getSelection();
editor.replaceSelection('<span class="fade">' + selection + "</span>");
editor.setCursor(editor.offsetToPos(editor.posToOffset(editor.getCursor()) - 7));
}
});
this.addCommand({
id: "bounce-class",
name: "Bounce Class",
editorCallback: (editor, view) => {
const selection = editor.getSelection();
editor.replaceSelection('<span class="bounce">' + selection + "</span>");
editor.setCursor(editor.offsetToPos(editor.posToOffset(editor.getCursor()) - 7));
}
});
this.addCommand({
id: "keep-color",
name: "Keep Color Class",
editorCallback: (editor, view) => {
const selection = editor.getSelection();
editor.replaceSelection('<span class="keepColor">' + selection + "</span>");
editor.setCursor(editor.offsetToPos(editor.posToOffset(editor.getCursor()) - 7));
}
});
this.addCommand({
id: "normal-style-class",
name: "Normal Style Class",
editorCallback: (editor, view) => {
const selection = editor.getSelection();
editor.replaceSelection('<span class="norSty">' + selection + "</span>");
editor.setCursor(editor.offsetToPos(editor.posToOffset(editor.getCursor()) - 7));
}
});
this.addCommand({
id: "font-size",
name: "Font Size",
editorCallback: (editor, view) => {
const selection = editor.getSelection();
editor.replaceSelection('<span style="font-size:16;">' + selection + "</span>");
editor.setCursor(editor.offsetToPos(editor.posToOffset(editor.getCursor()) - selection.length - 10));
}
});
this.addCommand({
id: "cube-y",
name: "Cube?",
editorCallback: (editor, view) => {
const selection = editor.getSelection();
editor.replaceSelection('<div style="perspective:800px;perspective-origin:top right;width:30%;aspect-ratio:3/4;filter:drop-shadow(1em 2em 0.7em #111);" title="3D Cube with pure HTML and CSS"><div style="font-size: 4em;width: 2em;margin: 1.5em auto;transform-style: preserve-3d;transform: rotateX(-45deg) rotateY(30deg);"><div style="position: absolute;width: 2em;height: 2em;background: rgba(100,100,100,0.5);border: 1px solid red;text-align: center;line-height: 2em; transform: translateZ(1em);">1</div><div style="position: absolute;width: 2em;height: 2em;background: rgba(100,100,100,0.5);border: 1px solid red;text-align: center;line-height: 2em; transform: rotateY(-180deg) translateZ(1em);">6</div><div style="position: absolute;width: 2em;height: 2em;background: rgba(100,100,100,0.5);border: 1px solid red;text-align: center;line-height: 2em; transform: rotateY(90deg) translateZ(1em);">4</div><div style="position: absolute;width: 2em;height: 2em;background: rgba(100,100,100,0.5);border: 1px solid red;text-align: center;line-height: 2em; transform: rotateY(-90deg) translateZ(1em);">3</div><div style="position: absolute;width: 2em;height: 2em;background: rgba(100,100,100,0.5);border: 1px solid red;text-align: center;line-height: 2em; transform: rotateX(90deg) translateZ(1em);">5</div><div style="position: absolute;width: 2em;height: 2em;background: rgba(100,100,100,0.5);border: 1px solid red;text-align: center;line-height: 2em; transform: rotateX(-90deg) translateZ(1em);">2</div></div></div>');
}
});
this.addCommand({
id: "window-width-checker",
name: "Check Window Width (base font size = 16)",
editorCallback: (editor, view) => {
const selection = editor.getSelection();
editor.replaceSelection('<div style="border:2px solid grey;border-radius:16px;width:75%;"><b>If same, then <u>window-size=<span style="color:#00FF00;">correct</span></u>:<hr></b><span style="background:#FF0000;color:#20FF0F;font-size:16px;"><code>\u25A0\u25A0\u25A0\u25A0\u25A0\u25A0\u25A0\u25A0\u25A0\u25A0\u25A0\u25A0\u25A0\u25A0\u25A0\u25A0\u25A0\u25A0\u25A0\u25A0\u25A0\u25A0\u25A0\u25A0\u25A0\u25A0\u25A0\u25A0\u25A0\u25A0\u25A0\u25A0\u25A0\u25A0\u25A0\u25A0 </code><b style="color:#00FFFF;">|</b></span><br><span style="background:#FF0000;color:#20FF0F;font-size:2.05vw;"><code>\u25A0\u25A0\u25A0\u25A0\u25A0\u25A0\u25A0\u25A0\u25A0\u25A0\u25A0\u25A0\u25A0\u25A0\u25A0\u25A0\u25A0\u25A0\u25A0\u25A0\u25A0\u25A0\u25A0\u25A0\u25A0\u25A0\u25A0\u25A0\u25A0\u25A0\u25A0\u25A0\u25A0\u25A0\u25A0\u25A0 </code><b style="color:#00FFFF;">|</b></span></div>');
}
});
this.addCommand({
id: "cancel-text",
name: "Cancel Text",
editorCallback: (editor, view) => {
const selection = editor.getSelection();
editor.replaceSelection('<span style="border:2px solid red;border-radius:50%; background: linear-gradient(to left top, transparent 47.75%, red 49%, red 51%, transparent 52.25%);padding:3px;z-index:200;"><span style="z-index:100;display:inline-block;">' + selection + "</span></span>");
editor.setCursor(editor.offsetToPos(editor.posToOffset(editor.getCursor()) - 14));
}
});
this.addSettingTab(new SampleSettingTab(this.app, this));
this.registerDomEvent(document, "click", (evt) => {
console.log("click", evt);
});
this.registerInterval(window.setInterval(() => console.log("setInterval"), 5 * 60 * 1e3));
}
onunload() {
}
async loadSettings() {
this.settings = Object.assign({}, DEFAULT_SETTINGS, await this.loadData());
}
async saveSettings() {
await this.saveData(this.settings);
}
};
var ColorPickerModal = class extends import_obsidian.Modal {
constructor(app) {
super(app);
this.setTitle("Pick a color");
let colorV = "#000000";
new import_obsidian.Setting(this.contentEl).setName("Color").addColorPicker((colorP) => colorP.onChange((value) => {
colorV = value;
}));
new import_obsidian.Setting(this.contentEl).addButton((btn) => btn.setButtonText("Submit").setCta().onClick(() => {
this.close();
onSubmit(colorV);
}));
new import_obsidian.Setting(this.contentEl).setName("");
new import_obsidian.Setting(this.contentEl).setName("R - Red - #FF5252");
new import_obsidian.Setting(this.contentEl).setName("O - Orange - #FFA852");
new import_obsidian.Setting(this.contentEl).setName("Y - Yellow - #FFFF52");
new import_obsidian.Setting(this.contentEl).setName("L - Lime - #A8FF52");
new import_obsidian.Setting(this.contentEl).setName("G - Green - #52FF52");
new import_obsidian.Setting(this.contentEl).setName("U - Aquamarine - #52FFA8");
new import_obsidian.Setting(this.contentEl).setName("A - Electric - #52FFFF");
new import_obsidian.Setting(this.contentEl).setName("Z - Azure - #52A8FF");
new import_obsidian.Setting(this.contentEl).setName("B - Blue - #5252FF");
new import_obsidian.Setting(this.contentEl).setName("V - Violet - #A852FF");
new import_obsidian.Setting(this.contentEl).setName("F - Fuchsia - #FF52FF");
new import_obsidian.Setting(this.contentEl).setName("M - Magenta - #FF52A8");
new import_obsidian.Setting(this.contentEl).setName("W - White - #FFFFFF");
new import_obsidian.Setting(this.contentEl).setName("W+K - Gray - #7F7F7F");
new import_obsidian.Setting(this.contentEl).setName("K - Black - #000000");
}
// onOpen() {
// const {contentEl} = this;
// contentEl.setText('Woah!');
// }
// onClose() {
// const {contentEl} = this;
// contentEl.empty();
// }
};
var SampleSettingTab = class extends import_obsidian.PluginSettingTab {
constructor(app, plugin) {
super(app, plugin);
this.plugin = plugin;
}
display() {
const { containerEl } = this;
containerEl.empty();
new import_obsidian.Setting(containerEl).setName("Setting #1").setDesc("It's a secret").addText((text) => text.setPlaceholder("Enter your secret").setValue(this.plugin.settings.mySetting).onChange(async (value) => {
this.plugin.settings.mySetting = value;
await this.plugin.saveSettings();
}));
}
};
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibWFpbi50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgQXBwLCBFZGl0b3IsIE1hcmtkb3duVmlldywgTW9kYWwsIE5vdGljZSwgUGx1Z2luLCBQbHVnaW5TZXR0aW5nVGFiLCBTZXR0aW5nIH0gZnJvbSAnb2JzaWRpYW4nO1xyXG5cclxuLy8gUmVtZW1iZXIgdG8gcmVuYW1lIHRoZXNlIGNsYXNzZXMgYW5kIGludGVyZmFjZXMhXHJcblxyXG5pbnRlcmZhY2UgaHRtbE1kU2NQbHVnaW5TZXR0aW5ncyB7XHJcblx0bXlTZXR0aW5nOiBzdHJpbmc7XHJcbn1cclxuXHJcbmNvbnN0IERFRkFVTFRfU0VUVElOR1M6IGh0bWxNZFNjUGx1Z2luU2V0dGluZ3MgPSB7XHJcblx0bXlTZXR0aW5nOiAnZGVmYXVsdCdcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgaHRtbE1kU2NQbHVnaW4gZXh0ZW5kcyBQbHVnaW4ge1xyXG5cdHNldHRpbmdzOiBodG1sTWRTY1BsdWdpblNldHRpbmdzO1xyXG5cclxuXHRhc3luYyBvbmxvYWQoKSB7XHJcblx0XHRhd2FpdCB0aGlzLmxvYWRTZXR0aW5ncygpO1xyXG5cclxuXHRcdC8vIFRoaXMgY3JlYXRlcyBhbiBpY29uIGluIHRoZSBsZWZ0IHJpYmJvbi5cclxuXHRcdGNvbnN0IHJpYmJvbkljb25FbCA9IHRoaXMuYWRkUmliYm9uSWNvbignaGlnaGxpZ2h0LWdseXBoJywgJ0hUTUwgTWFya2Rvd24gU2hvcnRjdXRzJywgKGV2dDogTW91c2VFdmVudCkgPT4ge1xyXG5cdFx0XHQvLyBDYWxsZWQgd2hlbiB0aGUgdXNlciBjbGlja3MgdGhlIGljb24uXHJcblx0XHRcdG5ldyBOb3RpY2UoJ1RoaXMgaXMgYSBub3RpY2UhJyk7XHJcblx0XHRcdG5ldyBDb2xvclBpY2tlck1vZGFsKHRoaXMuYXBwKS5vcGVuKCk7XHJcblx0XHR9KTtcclxuXHJcblx0XHQvLyBQZXJmb3JtIGFkZGl0aW9uYWwgdGhpbmdzIHdpdGggdGhlIHJpYmJvblxyXG5cdFx0cmliYm9uSWNvbkVsLmFkZENsYXNzKCdodG1sLW1kLXNjLXJpYmJvbi1jbGFzcycpO1xyXG5cclxuXHRcdC8vIFRoaXMgYWRkcyBhIHN0YXR1cyBiYXIgaXRlbSB0byB0aGUgYm90dG9tIG9mIHRoZSBhcHAuIERvZXMgbm90IHdvcmsgb24gbW9iaWxlIGFwcHMuXHJcblx0XHRjb25zdCBzdGF0dXNCYXJJdGVtRWwgPSB0aGlzLmFkZFN0YXR1c0Jhckl0ZW0oKTtcclxuXHRcdHN0YXR1c0Jhckl0ZW1FbC5zZXRUZXh0KCcnKTtcclxuXHJcblx0XHQvLyBUaGlzIGFkZHMgYSBzaW1wbGUgY29tbWFuZCB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgYW55d2hlcmVcclxuXHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdGlkOiAnb3Blbi1jb2xvci1waWNrZXInLFxyXG5cdFx0XHRuYW1lOiAnT3BlbiBDb2xvciBQaWNrZXInLFxyXG5cdFx0XHQvLyBjYWxsYmFjazogKCkgPT4ge1xyXG5cdFx0XHQvLyBcdG5ldyBDb2xvclBpY2tlck1vZGFsKHRoaXMuYXBwLCAocmVzdWx0KSA9PiB7XHJcblx0XHRcdC8vIFx0XHRuZXcgTm90aWNlKGBIZWxsbywgJHtyZXN1bHR9IWApO1xyXG5cdFx0XHQvLyBcdH0pLm9wZW4oKTtcclxuXHRcdFx0Ly8gfVxyXG5cdFx0XHRlZGl0b3JDYWxsYmFjazogKGVkaXRvcjogRWRpdG9yLCB2aWV3OiBNYXJrZG93blZpZXcpID0+IHtcclxuXHRcdFx0XHRjb25zdCBzZWxlY3Rpb24gPSBlZGl0b3IuZ2V0U2VsZWN0aW9uKCk7XHJcblx0XHRcdFx0ZWRpdG9yLnJlcGxhY2VTZWxlY3Rpb24oJzxzcGFuIGNsYXNzPVwibGluZWRcIj48c3BhbiBjbGFzcz1cImNYXCI+PGxhYmVsIGZvcj1cImNvbG9yUGlja2VyXCIgcG9wb3ZlcnRhcmdldD1cImNvbG9yUGlja2VyXCIgc3R5bGU9XCJjdXJzb3I6cG9pbnRlcjtcIj5TaG93IENvbG9yIFBhbGV0dGU8L2xhYmVsPjxpbnB1dCB0eXBlPVwiY29sb3JcIiBwb3BvdmVyIHZhbHVlPVwiIzFlMWUxZVwiIG9uY2hhbmdlPVwic2V0VGltZW91dChmdW5jdGlvbiAoKXtkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxcJ2JvZHlcXCcpLnN0eWxlLmJhY2tncm91bmQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcXCdteWhlYWRlclxcJykudmFsdWU7fSwgNTApO1wiIGlkPVwiY29sb3JQaWNrZXJcIiBzdHlsZT1cImRpc3BsYXk6bm9uZTtcIj48L3NwYW4+PC9zcGFuPlxcbicpO1xyXG5cdFx0XHRcdGVkaXRvci5zZXRDdXJzb3IoZWRpdG9yLm9mZnNldFRvUG9zKGVkaXRvci5wb3NUb09mZnNldChlZGl0b3IuZ2V0Q3Vyc29yKCkpLTApKTtcclxuXHRcdFx0XHRuZXcgQ29sb3JQaWNrZXJNb2RhbCh0aGlzLmFwcCwgKHJlc3VsdCkgPT4ge1xyXG5cdFx0XHRcdFx0bmV3IE5vdGljZShgSGVsbG8sICR7cmVzdWx0fSFgKTtcclxuXHRcdFx0XHR9KS5vcGVuKCk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdFx0Ly8gVGhpcyBhZGRzIGFuIGVkaXRvciBjb21tYW5kIHRoYXQgY2FuIHBlcmZvcm0gc29tZSBvcGVyYXRpb24gb24gdGhlIGN1cnJlbnQgZWRpdG9yIGluc3RhbmNlXHJcblx0XHQvLyB0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0Ly8gXHRpZDogJ3NhbXBsZS1lZGl0b3ItY29tbWFuZCcsXHJcblx0XHQvLyBcdG5hbWU6ICdTYW1wbGUgZWRpdG9yIGNvbW1hbmQnLFxyXG5cdFx0Ly8gXHRlZGl0b3JDYWxsYmFjazogKGVkaXRvcjogRWRpdG9yLCB2aWV3OiBNYXJrZG93blZpZXcpID0+IHtcclxuXHRcdC8vIFx0XHRjb25zb2xlLmxvZyhlZGl0b3IuZ2V0U2VsZWN0aW9uKCkpO1xyXG5cdFx0Ly8gXHRcdGVkaXRvci5yZXBsYWNlU2VsZWN0aW9uKCdTYW1wbGUgRWRpdG9yIENvbW1hbmQnKTtcclxuXHRcdC8vIFx0fVxyXG5cdFx0Ly8gfSk7XHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ2RlbW8nLFxyXG5cdFx0XHRuYW1lOiAnRGVtbycsXHJcblx0XHRcdGhvdGtleXM6IFt7bW9kaWZpZXJzOiBbJ01vZCcsICdBbHQnLCAnU2hpZnQnXSwga2V5OiAnZCd9XSxcclxuXHRcdFx0ZWRpdG9yQ2FsbGJhY2s6IChlZGl0b3I6IEVkaXRvciwgdmlldzogTWFya2Rvd25WaWV3KSA9PiB7XHJcblx0XHRcdFx0ZWRpdG9yLnJlcGxhY2VTZWxlY3Rpb24oJzxzcGFuIGNsYXNzPVwiZ2xvd1wiPlRleHQ8L3NwYW4+XFxuPHNwYW4gY2xhc3M9XCJkYW5jZVwiPlRleHQ8L3NwYW4+XFxuPHNwYW4gY2xhc3M9XCJmYWRlXCI+VGV4dDwvc3Bhbj5cXG48c3BhbiBjbGFzcz1cImxpbmVkIFhcIj5UZXh0PC9zcGFuPlxcbjxzcGFuIGNsYXNzPVwiYm91bmNlXCI+VGV4dDwvc3Bhbj5cXG48c3BhbiBjbGFzcz1cImhpZ2hsaWdodCBSXCI+VGV4dDwvc3Bhbj4gIDxzcGFuIGNsYXNzPVwiY1JcIj5UZXh0PC9zcGFuPiA8c3BhbiBjbGFzcz1cImJveFJcIj5UZXh0PC9zcGFuPlxcbjxzcGFuIGNsYXNzPVwiaGlnaGxpZ2h0IE9cIj5UZXh0PC9zcGFuPiAgPHNwYW4gY2xhc3M9XCJjT1wiPlRleHQ8L3NwYW4+IDxzcGFuIGNsYXNzPVwiYm94T1wiPlRleHQ8L3NwYW4+XFxuPHNwYW4gY2xhc3M9XCJoaWdobGlnaHQgWVwiPlRleHQ8L3NwYW4+ICA8c3BhbiBjbGFzcz1cImNZXCI+VGV4dDwvc3Bhbj4gPHNwYW4gY2xhc3M9XCJib3hZXCI+VGV4dDwvc3Bhbj5cXG48c3BhbiBjbGFzcz1cImhpZ2hsaWdodCBMXCI+VGV4dDwvc3Bhbj4gIDxzcGFuIGNsYXNzPVwiY0xcIj5UZXh0PC9zcGFuPiA8c3BhbiBjbGFzcz1cImJveExcIj5UZXh0PC9zcGFuPlxcbjxzcGFuIGNsYXNzPVwiaGlnaGxpZ2h0IEdcIj5UZXh0PC9zcGFuPiAgPHNwYW4gY2xhc3M9XCJjR1wiPlRleHQ8L3NwYW4+IDxzcGFuIGNsYXNzPVwiYm94R1wiPlRleHQ8L3NwYW4+XFxuPHNwYW4gY2xhc3M9XCJoaWdobGlnaHQgVVwiPlRleHQ8L3NwYW4+ICA8c3BhbiBjbGFzcz1cImNVXCI+VGV4dDwvc3Bhbj4gPHNwYW4gY2xhc3M9XCJib3hVXCI+VGV4dDwvc3Bhbj5cXG48c3BhbiBjbGFzcz1cImhpZ2hsaWdodCBBXCI+VGV4dDwvc3Bhbj4gIDxzcGFuIGNsYXNzPVwiY0FcIj5UZXh0PC9zcGFuPiA8c3BhbiBjbGFzcz1cImJveEFcIj5UZXh0PC9zcGFuPlxcbjxzcGFuIGNsYXNzPVwiaGlnaGxpZ2h0IFpcIj5UZXh0PC9zcGFuPiAgPHNwYW4gY2xhc3M9XCJjWlwiPlRleHQ8L3NwYW4+IDxzcGFuIGNsYXNzPVwiYm94WlwiPlRleHQ8L3NwYW4+XFxuPHNwYW4gY2xhc3M9XCJoaWdobGlnaHQgQlwiPlRleHQ8L3NwYW4+ICA8c3BhbiBjbGFzcz1cImNCXCI+VGV4dDwvc3Bhbj4gPHNwYW4gY2xhc3M9XCJib3hCXCI+VGV4dDwvc3Bhbj5cXG48c3BhbiBjbGFzcz1cImhpZ2hsaWdodCBWXCI+VGV4dDwvc3Bhbj4gIDxzcGFuIGNsYXNzPVwiY1ZcIj5UZXh0PC9zcGFuPiA8c3BhbiBjbGFzcz1cImJveFZcIj5UZXh0PC9zcGFuPlxcbjxzcGFuIGNsYXNzPVwiaGlnaGxpZ2h0IEZcIj5UZXh0PC9zcGFuPiAgPHNwYW4gY2xhc3M9XCJjRlwiPlRleHQ8L3NwYW4+IDxzcGFuIGNsYXNzPVwiYm94RlwiPlRleHQ8L3NwYW4+XFxuPHNwYW4gY2xhc3M9XCJoaWdobGlnaHQgTVwiPlRleHQ8L3NwYW4+ICA8c3BhbiBjbGFzcz1cImNNXCI+VGV4dDwvc3Bhbj4gPHNwYW4gY2xhc3M9XCJib3hNXCI+VGV4dDwvc3Bhbj5cXG48c3BhbiBjbGFzcz1cImhpZ2hsaWdodCBXXCI+VGV4dDwvc3Bhbj4gIDxzcGFuIGNsYXNzPVwiY1dcIj5UZXh0PC9zcGFuPiA8c3BhbiBjbGFzcz1cImJveFdcIj5UZXh0PC9zcGFuPlxcbjxzcGFuIGNsYXNzPVwiaGlnaGxpZ2h0IFcgS1wiPlRleHQ8L3NwYW4+ICA8c3BhbiBjbGFzcz1cImNXIGNLXCI+VGV4dDwvc3Bhbj4gPHNwYW4gY2xhc3M9XCJib3hXS1wiPlRleHQ8L3NwYW4+XFxuPHNwYW4gY2xhc3M9XCJoaWdobGlnaHQgS1wiPlRleHQ8L3NwYW4+ICA8c3BhbiBjbGFzcz1cImNLXCI+VGV4dDwvc3Bhbj4gPHNwYW4gY2xhc3M9XCJib3hLXCI+VGV4dDwvc3Bhbj5cXG48c3BhbiBjbGFzcz1cImhpZ2hsaWdodCBYXCI+VGV4dDwvc3Bhbj4gIDxzcGFuIGNsYXNzPVwiY1hcIj5UZXh0PC9zcGFuPiA8c3BhbiBjbGFzcz1cImJveFhcIj5UZXh0PC9zcGFuPlxcbjxzcGFuIGNsYXNzPVwicG9wVXBcIj48c3BhbiBjbGFzcz1cInBvcFR4dFwiPkEgZ3JlZXRpbmc8L3NwYW4+SGVsbG88L3NwYW4+XFxuPHNwYW4gY2xhc3M9XCJwb3BVcCBoaWdobGlnaHQgUlwiPjxzcGFuIGNsYXNzPVwicG9wVHh0XCI+PHNwYW4gY2xhc3M9XCJsaW5lZFwiPjxzcGFuIGNsYXNzPVxcJ2NSXFwnPlI8L3NwYW4+PHNwYW4gY2xhc3M9XFwnY09cXCc+Tzwvc3Bhbj48c3BhbiBjbGFzcz1cXCdjWVxcJz5ZPC9zcGFuPjxzcGFuIGNsYXNzPVxcJ2NMXFwnPkw8L3NwYW4+PHNwYW4gY2xhc3M9XFwnY0dcXCc+Rzwvc3Bhbj48c3BhbiBjbGFzcz1cXCdjVVxcJz5VPC9zcGFuPjxzcGFuIGNsYXNzPVxcJ2NBXFwnPkE8L3NwYW4+PHNwYW4gY2xhc3M9XFwnY1pcXCc+Wjwvc3Bhbj48c3BhbiBjbGFzcz1cXCdjQlxcJz5CPC9zcGFuPjxzcGFuIGNsYXNzPVxcJ2NWXFwnPlY8L3NwYW4+PHNwYW4gY2xhc3M9XFwnY0ZcXCc+Rjwvc3Bhbj48c3BhbiBjbGFzcz1cXCdjTVxcJz5NPC9zcGFuPjxzcGFuIGNsYXNzPVxcJ2NXXFwnPlc8L3NwYW4+PHNwYW4gY2xhc3M9XFwnY0tcXCc+Szwvc3Bhbj4gPHNwYW4gY2xhc3M9XFwnY1cgY0tcXCc+V0s8L3NwYW4+PC9zcGFuPjwvc3Bhbj5BIHJhbmRvbSBtaXgsIG1heWJlLiBOb3QgcmVhbGx5PyBJIGRvblxcJ3Qga25vdyE8L3NwYW4+XFxuPHNwYW4gY2xhc3M9XCJnbG93IGtlZXBDb2xvclwiPiBrZWVwQ29sb3I8L3NwYW4+IDxzcGFuIGNsYXNzPVwiZGFuY2Uga2VlcENvbG9yXCI+IGtlZXBDb2xvcjwvc3Bhbj4gPHNwYW4gY2xhc3M9XCJmYWRlIGtlZXBDb2xvclwiPiBrZWVwQ29sb3I8L3NwYW4+IDxzcGFuIGNsYXNzPVwibGluZWQga2VlcENvbG9yXCI+a2VlcENvbG9yPC9zcGFuPiA8c3BhbiBjbGFzcz1cImJvdW5jZSBrZWVwQ29sb3JcIj4ga2VlcENvbG9yPC9zcGFuPiA8c3BhbiBjbGFzcz1cImhpZ2hsaWdodCBSIGtlZXBDb2xvclwiPmtlZXBDb2xvcjwvc3Bhbj4gIDxzcGFuIGNsYXNzPVwiY1Iga2VlcENvbG9yXCI+a2VlcENvbG9yPC9zcGFuPlxcbjxzcGFuIGNsYXNzPVwiYm94TFwiPkhlbGxvIHRleHQ8L3NwYW4+IDxzcGFuIGNsYXNzPVwiYm94WiBoaWdobGlnaHQgVlwiPkhlbGxvIHRleHQ8L3NwYW4+IDxzcGFuIGNsYXNzPVwiYm94TCBjUlwiPkhlbGxvIHRleHQ8L3NwYW4+IDxzcGFuIGNsYXNzPVwiYm94UiBjRyBoaWdobGlnaHQgQlwiPkhlbGxvIHRleHQ8L3NwYW4+XFxuLSA8c3BhbiBpZD1cImhlbHBcIj48L3NwYW4+PGhyIGlkPVwieFwiPlxcbi0tLVxcbicpO1xyXG5cdFx0XHRcdG5ldyBOb3RpY2UoJ1Nob3dpbmcgRGVtbyEnKTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ2JvbGQnLFxyXG5cdFx0XHRuYW1lOiAnQm9sZCcsXHJcblx0XHRcdGhvdGtleXM6IFt7bW9kaWZpZXJzOiBbJ01vZCcsICdTaGlmdCddLCBrZXk6ICdiJ31dLFxyXG5cdFx0XHRlZGl0b3JDYWxsYmFjazogKGVkaXRvcjogRWRpdG9yLCB2aWV3OiBNYXJrZG93blZpZXcpID0+IHtcclxuXHRcdFx0XHRjb25zdCBzZWxlY3Rpb24gPSBlZGl0b3IuZ2V0U2VsZWN0aW9uKCk7XHJcblx0XHRcdFx0ZWRpdG9yLnJlcGxhY2VTZWxlY3Rpb24oJzxiPicrc2VsZWN0aW9uKyc8L2I+Jyk7XHJcblx0XHRcdFx0ZWRpdG9yLnNldEN1cnNvcihlZGl0b3Iub2Zmc2V0VG9Qb3MoZWRpdG9yLnBvc1RvT2Zmc2V0KGVkaXRvci5nZXRDdXJzb3IoKSktNCkpOyAvLyBtb3ZlIGN1cnNvciA0IHBsYWNlcyBiYWNrXHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdFx0dGhpcy5hZGRDb21tYW5kKHtcclxuXHRcdFx0aWQ6ICdpdGFsaWMnLFxyXG5cdFx0XHRuYW1lOiAnSXRhbGljJyxcclxuXHRcdFx0aG90a2V5czogW3ttb2RpZmllcnM6IFsnTW9kJywgJ1NoaWZ0J10sIGtleTogJ2knfV0sXHJcblx0XHRcdGVkaXRvckNhbGxiYWNrOiAoZWRpdG9yOiBFZGl0b3IsIHZpZXc6IE1hcmtkb3duVmlldykgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHNlbGVjdGlvbiA9IGVkaXRvci5nZXRTZWxlY3Rpb24oKTtcclxuXHRcdFx0XHRlZGl0b3IucmVwbGFjZVNlbGVjdGlvbignPGk+JytzZWxlY3Rpb24rJzwvaT4nKTtcclxuXHRcdFx0XHRlZGl0b3Iuc2V0Q3Vyc29yKGVkaXRvci5vZmZzZXRUb1BvcyhlZGl0b3IucG9zVG9PZmZzZXQoZWRpdG9yLmdldEN1cnNvcigpKS00KSk7IC8vIG1vdmUgY3Vyc29yIDQgcGxhY2VzIGJhY2tcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ3VuZGVybGluZScsXHJcblx0XHRcdG5hbWU6ICdVbmRlcmxpbmUnLFxyXG5cdFx0XHRob3RrZXlzOiBbe21vZGlmaWVyczogWydNb2QnLCAnU2hpZnQnXSwga2V5OiAndSd9XSxcclxuXHRcdFx0ZWRpdG9yQ2FsbGJhY2s6IChlZGl0b3I6IEVkaXRvciwgdmlldzogTWFya2Rvd25WaWV3KSA9PiB7XHJcblx0XHRcdFx0Y29uc3Qgc2VsZWN0aW9uID0gZWRpdG9yLmdldFNlbGVjdGlvbigpO1xyXG5cdFx0XHRcdGVkaXRvci5yZXBsYWNlU2VsZWN0aW9uKCc8dT4nK3NlbGVjdGlvbisnPC91PicpO1xyXG5cdFx0XHRcdGVkaXRvci5zZXRDdXJzb3IoZWRpdG9yLm9mZnNldFRvUG9zKGVkaXRvci5wb3NUb09mZnNldChlZGl0b3IuZ2V0Q3Vyc29yKCkpLTQpKTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ3N0cmlrZXRocm91Z2gnLFxyXG5cdFx0XHRuYW1lOiAnU3RyaWtldGhyb3VnaCcsXHJcblx0XHRcdGhvdGtleXM6IFt7bW9kaWZpZXJzOiBbJ01vZCcsICdTaGlmdCddLCBrZXk6ICdxJ31dLFxyXG5cdFx0XHRlZGl0b3JDYWxsYmFjazogKGVkaXRvcjogRWRpdG9yLCB2aWV3OiBNYXJrZG93blZpZXcpID0+IHtcclxuXHRcdFx0XHRjb25zdCBzZWxlY3Rpb24gPSBlZGl0b3IuZ2V0U2VsZWN0aW9uKCk7XHJcblx0XHRcdFx0ZWRpdG9yLnJlcGxhY2VTZWxlY3Rpb24oJzxkZWw+JytzZWxlY3Rpb24rJzwvZGVsPicpO1xyXG5cdFx0XHRcdGVkaXRvci5zZXRDdXJzb3IoZWRpdG9yLm9mZnNldFRvUG9zKGVkaXRvci5wb3NUb09mZnNldChlZGl0b3IuZ2V0Q3Vyc29yKCkpLTYpKTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ2hvcml6b250YWwtcnVsZScsXHJcblx0XHRcdG5hbWU6ICdIb3Jpem9udGFsIFJ1bGUnLFxyXG5cdFx0XHRob3RrZXlzOiBbe21vZGlmaWVyczogWydNb2QnLCAnQWx0JywgJ1NoaWZ0J10sIGtleTogJy0nfV0sXHJcblx0XHRcdGVkaXRvckNhbGxiYWNrOiAoZWRpdG9yOiBFZGl0b3IsIHZpZXc6IE1hcmtkb3duVmlldykgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHNlbGVjdGlvbiA9IGVkaXRvci5nZXRTZWxlY3Rpb24oKTtcclxuXHRcdFx0XHRlZGl0b3IucmVwbGFjZVNlbGVjdGlvbignPGhyIGlkPVwieFwiPicpO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdGlkOiAnY2VudGVyLXRleHQnLFxyXG5cdFx0XHRuYW1lOiAnQ2VudGVyJyxcclxuXHRcdFx0aG90a2V5czogW3ttb2RpZmllcnM6IFsnTW9kJywgJ1NoaWZ0J10sIGtleTogJyAnfV0sXHJcblx0XHRcdGVkaXRvckNhbGxiYWNrOiAoZWRpdG9yOiBFZGl0b3IsIHZpZXc6IE1hcmtkb3duVmlldykgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHNlbGVjdGlvbiA9IGVkaXRvci5nZXRTZWxlY3Rpb24oKTtcclxuXHRcdFx0XHRlZGl0b3IucmVwbGFjZVNlbGVjdGlvbignPGNlbnRlcj4nK3NlbGVjdGlvbisnPC9jZW50ZXI+Jyk7XHJcblx0XHRcdFx0ZWRpdG9yLnNldEN1cnNvcihlZGl0b3Iub2Zmc2V0VG9Qb3MoZWRpdG9yLnBvc1RvT2Zmc2V0KGVkaXRvci5nZXRDdXJzb3IoKSktOSkpO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdGlkOiAnY29sb3ItaGV4JyxcclxuXHRcdFx0bmFtZTogJ0NvbG9yIEhleCcsXHJcblx0XHRcdGhvdGtleXM6IFt7bW9kaWZpZXJzOiBbJ01vZCcsICdBbHQnLCAnU2hpZnQnXSwga2V5OiAnYyd9XSxcclxuXHRcdFx0ZWRpdG9yQ2FsbGJhY2s6IChlZGl0b3I6IEVkaXRvciwgdmlldzogTWFya2Rvd25WaWV3KSA9PiB7XHJcblx0XHRcdFx0Y29uc3Qgc2VsZWN0aW9uID0gZWRpdG9yLmdldFNlbGVjdGlvbigpO1xyXG5cdFx0XHRcdGVkaXRvci5yZXBsYWNlU2VsZWN0aW9uKCc8c3BhbiBzdHlsZT1cImNvbG9yOiM7XCI+JytzZWxlY3Rpb24rJzwvc3Bhbj4nKTtcclxuXHRcdFx0XHRlZGl0b3Iuc2V0Q3Vyc29yKGVkaXRvci5vZmZzZXRUb1BvcyhlZGl0b3IucG9zVG9PZmZzZXQoZWRpdG9yLmdldEN1cnNvcigpKS1zZWxlY3Rpb24ubGVuZ3RoLTEwKSk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdFx0dGhpcy5hZGRDb21tYW5kKHtcclxuXHRcdFx0aWQ6ICdjb2xvci1jbGFzcycsXHJcblx0XHRcdG5hbWU6ICdDb2xvciBDbGFzcycsXHJcblx0XHRcdGhvdGtleXM6IFt7bW9kaWZpZXJzOiBbJ01vZCcsICdTaGlmdCddLCBrZXk6ICdjJ31dLFxyXG5cdFx0XHRlZGl0b3JDYWxsYmFjazogKGVkaXRvcjogRWRpdG9yLCB2aWV3OiBNYXJrZG93blZpZXcpID0+IHtcclxuXHRcdFx0XHRjb25zdCBzZWxlY3Rpb24gPSBlZGl0b3IuZ2V0U2VsZWN0aW9uKCk7XHJcblx0XHRcdFx0ZWRpdG9yLnJlcGxhY2VTZWxlY3Rpb24oJzxzcGFuIGNsYXNzPVwiY1wiPicrc2VsZWN0aW9uKyc8L3NwYW4+Jyk7XHJcblx0XHRcdFx0ZWRpdG9yLnNldEN1cnNvcihlZGl0b3Iub2Zmc2V0VG9Qb3MoZWRpdG9yLnBvc1RvT2Zmc2V0KGVkaXRvci5nZXRDdXJzb3IoKSktc2VsZWN0aW9uLmxlbmd0aC05KSk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdFx0dGhpcy5hZGRDb21tYW5kKHtcclxuXHRcdFx0aWQ6ICdjb2xvci1jbGFzcy1yJyxcclxuXHRcdFx0bmFtZTogJ0NvbG9yIENsYXNzIFJlZCcsXHJcblx0XHRcdGVkaXRvckNhbGxiYWNrOiAoZWRpdG9yOiBFZGl0b3IsIHZpZXc6IE1hcmtkb3duVmlldykgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHNlbGVjdGlvbiA9IGVkaXRvci5nZXRTZWxlY3Rpb24oKTtcclxuXHRcdFx0XHRlZGl0b3IucmVwbGFjZVNlbGVjdGlvbignPHNwYW4gY2xhc3M9XCJjUlwiPicrc2VsZWN0aW9uKyc8L3NwYW4+Jyk7XHJcblx0XHRcdFx0ZWRpdG9yLnNldEN1cnNvcihlZGl0b3Iub2Zmc2V0VG9Qb3MoZWRpdG9yLnBvc1RvT2Zmc2V0KGVkaXRvci5nZXRDdXJzb3IoKSktNykpO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdGlkOiAnY29sb3ItY2xhc3MtbycsXHJcblx0XHRcdG5hbWU6ICdDb2xvciBDbGFzcyBPcmFuZ2UnLFxyXG5cdFx0XHRlZGl0b3JDYWxsYmFjazogKGVkaXRvcjogRWRpdG9yLCB2aWV3OiBNYXJrZG93blZpZXcpID0+IHtcclxuXHRcdFx0XHRjb25zdCBzZWxlY3Rpb24gPSBlZGl0b3IuZ2V0U2VsZWN0aW9uKCk7XHJcblx0XHRcdFx0ZWRpdG9yLnJlcGxhY2VTZWxlY3Rpb24oJzxzcGFuIGNsYXNzPVwiY09cIj4nK3NlbGVjdGlvbisnPC9zcGFuPicpO1xyXG5cdFx0XHRcdGVkaXRvci5zZXRDdXJzb3IoZWRpdG9yLm9mZnNldFRvUG9zKGVkaXRvci5wb3NUb09mZnNldChlZGl0b3IuZ2V0Q3Vyc29yKCkpLTcpKTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ2NvbG9yLWNsYXNzLXknLFxyXG5cdFx0XHRuYW1lOiAnQ29sb3IgQ2xhc3MgWWVsbG93JyxcclxuXHRcdFx0ZWRpdG9yQ2FsbGJhY2s6IChlZGl0b3I6IEVkaXRvciwgdmlldzogTWFya2Rvd25WaWV3KSA9PiB7XHJcblx0XHRcdFx0Y29uc3Qgc2VsZWN0aW9uID0gZWRpdG9yLmdldFNlbGVjdGlvbigpO1xyXG5cdFx0XHRcdGVkaXRvci5yZXBsYWNlU2VsZWN0aW9uKCc8c3BhbiBjbGFzcz1cImNZXCI+JytzZWxlY3Rpb24rJzwvc3Bhbj4nKTtcclxuXHRcdFx0XHRlZGl0b3Iuc2V0Q3Vyc29yKGVkaXRvci5vZmZzZXRUb1BvcyhlZGl0b3IucG9zVG9PZmZzZXQoZWRpdG9yLmdldEN1cnNvcigpKS03KSk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdFx0dGhpcy5hZGRDb21tYW5kKHtcclxuXHRcdFx0aWQ6ICdjb2xvci1jbGFzcy1sJyxcclxuXHRcdFx0bmFtZTogJ0NvbG9yIENsYXNzIExpbWUnLFxyXG5cdFx0XHRlZGl0b3JDYWxsYmFjazogKGVkaXRvcjogRWRpdG9yLCB2aWV3OiBNYXJrZG93blZpZXcpID0+IHtcclxuXHRcdFx0XHRjb25zdCBzZWxlY3Rpb24gPSBlZGl0b3IuZ2V0U2VsZWN0aW9uKCk7XHJcblx0XHRcdFx0ZWRpdG9yLnJlcGxhY2VTZWxlY3Rpb24oJzxzcGFuIGNsYXNzPVwiY0xcIj4nK3NlbGVjdGlvbisnPC9zcGFuPicpO1xyXG5cdFx0XHRcdGVkaXRvci5zZXRDdXJzb3IoZWRpdG9yLm9mZnNldFRvUG9zKGVkaXRvci5wb3NUb09mZnNldChlZGl0b3IuZ2V0Q3Vyc29yKCkpLTcpKTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ2NvbG9yLWNsYXNzLWcnLFxyXG5cdFx0XHRuYW1lOiAnQ29sb3IgQ2xhc3MgR3JlZW4nLFxyXG5cdFx0XHRlZGl0b3JDYWxsYmFjazogKGVkaXRvcjogRWRpdG9yLCB2aWV3OiBNYXJrZG93blZpZXcpID0+IHtcclxuXHRcdFx0XHRjb25zdCBzZWxlY3Rpb24gPSBlZGl0b3IuZ2V0U2VsZWN0aW9uKCk7XHJcblx0XHRcdFx0ZWRpdG9yLnJlcGxhY2VTZWxlY3Rpb24oJzxzcGFuIGNsYXNzPVwiY0dcIj4nK3NlbGVjdGlvbisnPC9zcGFuPicpO1xyXG5cdFx0XHRcdGVkaXRvci5zZXRDdXJzb3IoZWRpdG9yLm9mZnNldFRvUG9zKGVkaXRvci5wb3NUb09mZnNldChlZGl0b3IuZ2V0Q3Vyc29yKCkpLTcpKTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ2NvbG9yLWNsYXNzLXUnLFxyXG5cdFx0XHRuYW1lOiAnQ29sb3IgQ2xhc3MgQXF1YW1hcmluZScsXHJcblx0XHRcdGVkaXRvckNhbGxiYWNrOiAoZWRpdG9yOiBFZGl0b3IsIHZpZXc6IE1hcmtkb3duVmlldykgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHNlbGVjdGlvbiA9IGVkaXRvci5nZXRTZWxlY3Rpb24oKTtcclxuXHRcdFx0XHRlZGl0b3IucmVwbGFjZVNlbGVjdGlvbignPHNwYW4gY2xhc3M9XCJjVVwiPicrc2VsZWN0aW9uKyc8L3NwYW4+Jyk7XHJcblx0XHRcdFx0ZWRpdG9yLnNldEN1cnNvcihlZGl0b3Iub2Zmc2V0VG9Qb3MoZWRpdG9yLnBvc1RvT2Zmc2V0KGVkaXRvci5nZXRDdXJzb3IoKSktNykpO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdGlkOiAnY29sb3ItY2xhc3MtYScsXHJcblx0XHRcdG5hbWU6ICdDb2xvciBDbGFzcyBFbGVjdHJpYycsXHJcblx0XHRcdGVkaXRvckNhbGxiYWNrOiAoZWRpdG9yOiBFZGl0b3IsIHZpZXc6IE1hcmtkb3duVmlldykgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHNlbGVjdGlvbiA9IGVkaXRvci5nZXRTZWxlY3Rpb24oKTtcclxuXHRcdFx0XHRlZGl0b3IucmVwbGFjZVNlbGVjdGlvbignPHNwYW4gY2xhc3M9XCJjQVwiPicrc2VsZWN0aW9uKyc8L3NwYW4+Jyk7XHJcblx0XHRcdFx0ZWRpdG9yLnNldEN1cnNvcihlZGl0b3Iub2Zmc2V0VG9Qb3MoZWRpdG9yLnBvc1RvT2Zmc2V0KGVkaXRvci5nZXRDdXJzb3IoKSktNykpO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdGlkOiAnY29sb3ItY2xhc3MteicsXHJcblx0XHRcdG5hbWU6ICdDb2xvciBDbGFzcyBBenVyZScsXHJcblx0XHRcdGVkaXRvckNhbGxiYWNrOiAoZWRpdG9yOiBFZGl0b3IsIHZpZXc6IE1hcmtkb3duVmlldykgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHNlbGVjdGlvbiA9IGVkaXRvci5nZXRTZWxlY3Rpb24oKTtcclxuXHRcdFx0XHRlZGl0b3IucmVwbGFjZVNlbGVjdGlvbignPHNwYW4gY2xhc3M9XCJjWlwiPicrc2VsZWN0aW9uKyc8L3NwYW4+Jyk7XHJcblx0XHRcdFx0ZWRpdG9yLnNldEN1cnNvcihlZGl0b3Iub2Zmc2V0VG9Qb3MoZWRpdG9yLnBvc1RvT2Zmc2V0KGVkaXRvci5nZXRDdXJzb3IoKSktNykpO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdGlkOiAnY29sb3ItY2xhc3MtYicsXHJcblx0XHRcdG5hbWU6ICdDb2xvciBDbGFzcyBCbHVlJyxcclxuXHRcdFx0ZWRpdG9yQ2FsbGJhY2s6IChlZGl0b3I6IEVkaXRvciwgdmlldzogTWFya2Rvd25WaWV3KSA9PiB7XHJcblx0XHRcdFx0Y29uc3Qgc2VsZWN0aW9uID0gZWRpdG9yLmdldFNlbGVjdGlvbigpO1xyXG5cdFx0XHRcdGVkaXRvci5yZXBsYWNlU2VsZWN0aW9uKCc8c3BhbiBjbGFzcz1cImNCXCI+JytzZWxlY3Rpb24rJzwvc3Bhbj4nKTtcclxuXHRcdFx0XHRlZGl0b3Iuc2V0Q3Vyc29yKGVkaXRvci5vZmZzZXRUb1BvcyhlZGl0b3IucG9zVG9PZmZzZXQoZWRpdG9yLmdldEN1cnNvcigpKS03KSk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdFx0dGhpcy5hZGRDb21tYW5kKHtcclxuXHRcdFx0aWQ6ICdjb2xvci1jbGFzcy12JyxcclxuXHRcdFx0bmFtZTogJ0NvbG9yIENsYXNzIFZpb2xldCcsXHJcblx0XHRcdGVkaXRvckNhbGxiYWNrOiAoZWRpdG9yOiBFZGl0b3IsIHZpZXc6IE1hcmtkb3duVmlldykgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHNlbGVjdGlvbiA9IGVkaXRvci5nZXRTZWxlY3Rpb24oKTtcclxuXHRcdFx0XHRlZGl0b3IucmVwbGFjZVNlbGVjdGlvbignPHNwYW4gY2xhc3M9XCJjVlwiPicrc2VsZWN0aW9uKyc8L3NwYW4+Jyk7XHJcblx0XHRcdFx0ZWRpdG9yLnNldEN1cnNvcihlZGl0b3Iub2Zmc2V0VG9Qb3MoZWRpdG9yLnBvc1RvT2Zmc2V0KGVkaXRvci5nZXRDdXJzb3IoKSktNykpO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdGlkOiAnY29sb3ItY2xhc3MtZicsXHJcblx0XHRcdG5hbWU6ICdDb2xvciBDbGFzcyBGdWNoc2lhJyxcclxuXHRcdFx0ZWRpdG9yQ2FsbGJhY2s6IChlZGl0b3I6IEVkaXRvciwgdmlldzogTWFya2Rvd25WaWV3KSA9PiB7XHJcblx0XHRcdFx0Y29uc3Qgc2VsZWN0aW9uID0gZWRpdG9yLmdldFNlbGVjdGlvbigpO1xyXG5cdFx0XHRcdGVkaXRvci5yZXBsYWNlU2VsZWN0aW9uKCc8c3BhbiBjbGFzcz1cImNGXCI+JytzZWxlY3Rpb24rJzwvc3Bhbj4nKTtcclxuXHRcdFx0XHRlZGl0b3Iuc2V0Q3Vyc29yKGVkaXRvci5vZmZzZXRUb1BvcyhlZGl0b3IucG9zVG9PZmZzZXQoZWRpdG9yLmdldEN1cnNvcigpKS03KSk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdFx0dGhpcy5hZGRDb21tYW5kKHtcclxuXHRcdFx0aWQ6ICdjb2xvci1jbGFzcy1tJyxcclxuXHRcdFx0bmFtZTogJ0NvbG9yIENsYXNzIE1hZ2VudGEnLFxyXG5cdFx0XHRlZGl0b3JDYWxsYmFjazogKGVkaXRvcjogRWRpdG9yLCB2aWV3OiBNYXJrZG93blZpZXcpID0+IHtcclxuXHRcdFx0XHRjb25zdCBzZWxlY3Rpb24gPSBlZGl0b3IuZ2V0U2VsZWN0aW9uKCk7XHJcblx0XHRcdFx0ZWRpdG9yLnJlcGxhY2VTZWxlY3Rpb24oJzxzcGFuIGNsYXNzPVwiY01cIj4nK3NlbGVjdGlvbisnPC9zcGFuPicpO1xyXG5cdFx0XHRcdGVkaXRvci5zZXRDdXJzb3IoZWRpdG9yLm9mZnNldFRvUG9zKGVkaXRvci5wb3NUb09mZnNldChlZGl0b3IuZ2V0Q3Vyc29yKCkpLTcpKTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ2NvbG9yLWNsYXNzLXcnLFxyXG5cdFx0XHRuYW1lOiAnQ29sb3IgQ2xhc3MgV2hpdGUnLFxyXG5cdFx0XHRlZGl0b3JDYWxsYmFjazogKGVkaXRvcjogRWRpdG9yLCB2aWV3OiBNYXJrZG93blZpZXcpID0+IHtcclxuXHRcdFx0XHRjb25zdCBzZWxlY3Rpb24gPSBlZGl0b3IuZ2V0U2VsZWN0aW9uKCk7XHJcblx0XHRcdFx0ZWRpdG9yLnJlcGxhY2VTZWxlY3Rpb24oJzxzcGFuIGNsYXNzPVwiY1dcIj4nK3NlbGVjdGlvbisnPC9zcGFuPicpO1xyXG5cdFx0XHRcdGVkaXRvci5zZXRDdXJzb3IoZWRpdG9yLm9mZnNldFRvUG9zKGVkaXRvci5wb3NUb09mZnNldChlZGl0b3IuZ2V0Q3Vyc29yKCkpLTcpKTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ2NvbG9yLWNsYXNzLXdrJyxcclxuXHRcdFx0bmFtZTogJ0NvbG9yIENsYXNzIEdyYXknLFxyXG5cdFx0XHRlZGl0b3JDYWxsYmFjazogKGVkaXRvcjogRWRpdG9yLCB2aWV3OiBNYXJrZG93blZpZXcpID0+IHtcclxuXHRcdFx0XHRjb25zdCBzZWxlY3Rpb24gPSBlZGl0b3IuZ2V0U2VsZWN0aW9uKCk7XHJcblx0XHRcdFx0ZWRpdG9yLnJlcGxhY2VTZWxlY3Rpb24oJzxzcGFuIGNsYXNzPVwiY1dLXCI+JytzZWxlY3Rpb24rJzwvc3Bhbj4nKTtcclxuXHRcdFx0XHRlZGl0b3Iuc2V0Q3Vyc29yKGVkaXRvci5vZmZzZXRUb1BvcyhlZGl0b3IucG9zVG9PZmZzZXQoZWRpdG9yLmdldEN1cnNvcigpKS03KSk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdFx0dGhpcy5hZGRDb21tYW5kKHtcclxuXHRcdFx0aWQ6ICdjb2xvci1jbGFzcy1rJyxcclxuXHRcdFx0bmFtZTogJ0NvbG9yIENsYXNzIEJsYWNrJyxcclxuXHRcdFx0ZWRpdG9yQ2FsbGJhY2s6IChlZGl0b3I6IEVkaXRvciwgdmlldzogTWFya2Rvd25WaWV3KSA9PiB7XHJcblx0XHRcdFx0Y29uc3Qgc2VsZWN0aW9uID0gZWRpdG9yLmdldFNlbGVjdGlvbigpO1xyXG5cdFx0XHRcdGVkaXRvci5yZXBsYWNlU2VsZWN0aW9uKCc8c3BhbiBjbGFzcz1cImNLXCI+JytzZWxlY3Rpb24rJzwvc3Bhbj4nKTtcclxuXHRcdFx0XHRlZGl0b3Iuc2V0Q3Vyc29yKGVkaXRvci5vZmZzZXRUb1BvcyhlZGl0b3IucG9zVG9PZmZzZXQoZWRpdG9yLmdldEN1cnNvcigpKS03KSk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdFx0dGhpcy5hZGRDb21tYW5kKHtcclxuXHRcdFx0aWQ6ICdjb2xvci1jbGFzcy14JyxcclxuXHRcdFx0bmFtZTogJ0NvbG9yIENsYXNzIFJhaW5ib3cnLFxyXG5cdFx0XHRlZGl0b3JDYWxsYmFjazogKGVkaXRvcjogRWRpdG9yLCB2aWV3OiBNYXJrZG93blZpZXcpID0+IHtcclxuXHRcdFx0XHRjb25zdCBzZWxlY3Rpb24gPSBlZGl0b3IuZ2V0U2VsZWN0aW9uKCk7XHJcblx0XHRcdFx0ZWRpdG9yLnJlcGxhY2VTZWxlY3Rpb24oJzxzcGFuIGNsYXNzPVwiY1hcIj4nK3NlbGVjdGlvbisnPC9zcGFuPicpO1xyXG5cdFx0XHRcdGVkaXRvci5zZXRDdXJzb3IoZWRpdG9yLm9mZnNldFRvUG9zKGVkaXRvci5wb3NUb09mZnNldChlZGl0b3IuZ2V0Q3Vyc29yKCkpLTcpKTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblxyXG5cdFx0dGhpcy5hZGRDb21tYW5kKHtcclxuXHRcdFx0aWQ6ICdhc3Npc3RhbmNlJyxcclxuXHRcdFx0bmFtZTogJ0hlbHAnLFxyXG5cdFx0XHRob3RrZXlzOiBbe21vZGlmaWVyczogWydNb2QnLCAnQWx0JywgJ1NoaWZ0J10sIGtleTogJ2gnfV0sXHJcblx0XHRcdGVkaXRvckNhbGxiYWNrOiAoZWRpdG9yOiBFZGl0b3IsIHZpZXc6IE1hcmtkb3duVmlldykgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHNlbGVjdGlvbiA9IGVkaXRvci5nZXRTZWxlY3Rpb24oKTtcclxuXHRcdFx0XHRlZGl0b3IucmVwbGFjZVNlbGVjdGlvbignPGNlbnRlciBpZD1cImhlbHBcIj4nK3NlbGVjdGlvbisnPC9jZW50ZXI+LicpO1xyXG5cdFx0XHRcdGVkaXRvci5zZXRDdXJzb3IoZWRpdG9yLm9mZnNldFRvUG9zKGVkaXRvci5wb3NUb09mZnNldChlZGl0b3IuZ2V0Q3Vyc29yKCkpLTApKTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblxyXG5cdFx0dGhpcy5hZGRDb21tYW5kKHtcclxuXHRcdFx0aWQ6ICdwb3AtaG92ZXInLFxyXG5cdFx0XHRuYW1lOiAnUG9wIFVwIFRleHQnLFxyXG5cdFx0XHRob3RrZXlzOiBbe21vZGlmaWVyczogWydNb2QnLCAnU2hpZnQnXSwga2V5OiAncCd9XSxcclxuXHRcdFx0ZWRpdG9yQ2FsbGJhY2s6IChlZGl0b3I6IEVkaXRvciwgdmlldzogTWFya2Rvd25WaWV3KSA9PiB7XHJcblx0XHRcdFx0Y29uc3Qgc2VsZWN0aW9uID0gZWRpdG9yLmdldFNlbGVjdGlvbigpO1xyXG5cdFx0XHRcdGVkaXRvci5yZXBsYWNlU2VsZWN0aW9uKCc8c3BhbiBjbGFzcz1cInBvcFVwXCI+PHNwYW4gY2xhc3M9XCJwb3BUeHRcIj48L3NwYW4+JytzZWxlY3Rpb24rJzwvc3Bhbj4nKTtcclxuXHRcdFx0XHRlZGl0b3Iuc2V0Q3Vyc29yKGVkaXRvci5vZmZzZXRUb1BvcyhlZGl0b3IucG9zVG9PZmZzZXQoZWRpdG9yLmdldEN1cnNvcigpKS1zZWxlY3Rpb24ubGVuZ3RoLTE0KSk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cclxuXHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdGlkOiAnaGlnaGxpZ2h0LWNsYXNzJyxcclxuXHRcdFx0bmFtZTogJ0hpZ2hsaWdodCBDbGFzcycsXHJcblx0XHRcdGVkaXRvckNhbGxiYWNrOiAoZWRpdG9yOiBFZGl0b3IsIHZpZXc6IE1hcmtkb3duVmlldykgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHNlbGVjdGlvbiA9IGVkaXRvci5nZXRTZWxlY3Rpb24oKTtcclxuXHRcdFx0XHRlZGl0b3IucmVwbGFjZVNlbGVjdGlvbignPHNwYW4gY2xhc3M9XCJoaWdobGlnaHQgXCI+JytzZWxlY3Rpb24rJzwvc3Bhbj4nKTtcclxuXHRcdFx0XHRlZGl0b3Iuc2V0Q3Vyc29yKGVkaXRvci5vZmZzZXRUb1BvcyhlZGl0b3IucG9zVG9PZmZzZXQoZWRpdG9yLmdldEN1cnNvcigpKS1zZWxlY3Rpb24ubGVuZ3RoLTkpKTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ2hpZ2hsaWdodC1jbGFzcy1yJyxcclxuXHRcdFx0bmFtZTogJ0hpZ2hsaWdodCBDbGFzcyBSZWQnLFxyXG5cdFx0XHRlZGl0b3JDYWxsYmFjazogKGVkaXRvcjogRWRpdG9yLCB2aWV3OiBNYXJrZG93blZpZXcpID0+IHtcclxuXHRcdFx0XHRjb25zdCBzZWxlY3Rpb24gPSBlZGl0b3IuZ2V0U2VsZWN0aW9uKCk7XHJcblx0XHRcdFx0ZWRpdG9yLnJlcGxhY2VTZWxlY3Rpb24oJzxzcGFuIGNsYXNzPVwiaGlnaGxpZ2h0IFJcIj4nK3NlbGVjdGlvbisnPC9zcGFuPicpO1xyXG5cdFx0XHRcdGVkaXRvci5zZXRDdXJzb3IoZWRpdG9yLm9mZnNldFRvUG9zKGVkaXRvci5wb3NUb09mZnNldChlZGl0b3IuZ2V0Q3Vyc29yKCkpLTcpKTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ2hpZ2hsaWdodC1jbGFzcy1vJyxcclxuXHRcdFx0bmFtZTogJ0hpZ2hsaWdodCBDbGFzcyBPcmFuZ2UnLFxyXG5cdFx0XHRlZGl0b3JDYWxsYmFjazogKGVkaXRvcjogRWRpdG9yLCB2aWV3OiBNYXJrZG93blZpZXcpID0+IHtcclxuXHRcdFx0XHRjb25zdCBzZWxlY3Rpb24gPSBlZGl0b3IuZ2V0U2VsZWN0aW9uKCk7XHJcblx0XHRcdFx0ZWRpdG9yLnJlcGxhY2VTZWxlY3Rpb24oJzxzcGFuIGNsYXNzPVwiaGlnaGxpZ2h0IE9cIj4nK3NlbGVjdGlvbisnPC9zcGFuPicpO1xyXG5cdFx0XHRcdGVkaXRvci5zZXRDdXJzb3IoZWRpdG9yLm9mZnNldFRvUG9zKGVkaXRvci5wb3NUb09mZnNldChlZGl0b3IuZ2V0Q3Vyc29yKCkpLTcpKTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ2hpZ2hsaWdodC1jbGFzcy15JyxcclxuXHRcdFx0bmFtZTogJ0hpZ2hsaWdodCBDbGFzcyBZZWxsb3cnLFxyXG5cdFx0XHRlZGl0b3JDYWxsYmFjazogKGVkaXRvcjogRWRpdG9yLCB2aWV3OiBNYXJrZG93blZpZXcpID0+IHtcclxuXHRcdFx0XHRjb25zdCBzZWxlY3Rpb24gPSBlZGl0b3IuZ2V0U2VsZWN0aW9uKCk7XHJcblx0XHRcdFx0ZWRpdG9yLnJlcGxhY2VTZWxlY3Rpb24oJzxzcGFuIGNsYXNzPVwiaGlnaGxpZ2h0IFlcIj4nK3NlbGVjdGlvbisnPC9zcGFuPicpO1xyXG5cdFx0XHRcdGVkaXRvci5zZXRDdXJzb3IoZWRpdG9yLm9mZnNldFRvUG9zKGVkaXRvci5wb3NUb09mZnNldChlZGl0b3IuZ2V0Q3Vyc29yKCkpLTcpKTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ2hpZ2hsaWdodC1jbGFzcy1sJyxcclxuXHRcdFx0bmFtZTogJ0hpZ2hsaWdodCBDbGFzcyBMaW1lJyxcclxuXHRcdFx0ZWRpdG9yQ2FsbGJhY2s6IChlZGl0b3I6IEVkaXRvciwgdmlldzogTWFya2Rvd25WaWV3KSA9PiB7XHJcblx0XHRcdFx0Y29uc3Qgc2VsZWN0aW9uID0gZWRpdG9yLmdldFNlbGVjdGlvbigpO1xyXG5cdFx0XHRcdGVkaXRvci5yZXBsYWNlU2VsZWN0aW9uKCc8c3BhbiBjbGFzcz1cImhpZ2hsaWdodCBMXCI+JytzZWxlY3Rpb24rJzwvc3Bhbj4nKTtcclxuXHRcdFx0XHRlZGl0b3Iuc2V0Q3Vyc29yKGVkaXRvci5vZmZzZXRUb1BvcyhlZGl0b3IucG9zVG9PZmZzZXQoZWRpdG9yLmdldEN1cnNvcigpKS03KSk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdFx0dGhpcy5hZGRDb21tYW5kKHtcclxuXHRcdFx0aWQ6ICdoaWdobGlnaHQtY2xhc3MtZycsXHJcblx0XHRcdG5hbWU6ICdIaWdobGlnaHQgQ2xhc3MgR3JlZW4nLFxyXG5cdFx0XHRlZGl0b3JDYWxsYmFjazogKGVkaXRvcjogRWRpdG9yLCB2aWV3OiBNYXJrZG93blZpZXcpID0+IHtcclxuXHRcdFx0XHRjb25zdCBzZWxlY3Rpb24gPSBlZGl0b3IuZ2V0U2VsZWN0aW9uKCk7XHJcblx0XHRcdFx0ZWRpdG9yLnJlcGxhY2VTZWxlY3Rpb24oJzxzcGFuIGNsYXNzPVwiaGlnaGxpZ2h0IEdcIj4nK3NlbGVjdGlvbisnPC9zcGFuPicpO1xyXG5cdFx0XHRcdGVkaXRvci5zZXRDdXJzb3IoZWRpdG9yLm9mZnNldFRvUG9zKGVkaXRvci5wb3NUb09mZnNldChlZGl0b3IuZ2V0Q3Vyc29yKCkpLTcpKTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ2hpZ2hsaWdodC1jbGFzcy11JyxcclxuXHRcdFx0bmFtZTogJ0hpZ2hsaWdodCBDbGFzcyBBcXVhbWFyaW5lJyxcclxuXHRcdFx0ZWRpdG9yQ2FsbGJhY2s6IChlZGl0b3I6IEVkaXRvciwgdmlldzogTWFya2Rvd25WaWV3KSA9PiB7XHJcblx0XHRcdFx0Y29uc3Qgc2VsZWN0aW9uID0gZWRpdG9yLmdldFNlbGVjdGlvbigpO1xyXG5cdFx0XHRcdGVkaXRvci5yZXBsYWNlU2VsZWN0aW9uKCc8c3BhbiBjbGFzcz1cImhpZ2hsaWdodCBVXCI+JytzZWxlY3Rpb24rJzwvc3Bhbj4nKTtcclxuXHRcdFx0XHRlZGl0b3Iuc2V0Q3Vyc29yKGVkaXRvci5vZmZzZXRUb1BvcyhlZGl0b3IucG9zVG9PZmZzZXQoZWRpdG9yLmdldEN1cnNvcigpKS03KSk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdFx0dGhpcy5hZGRDb21tYW5kKHtcclxuXHRcdFx0aWQ6ICdoaWdobGlnaHQtY2xhc3MtYScsXHJcblx0XHRcdG5hbWU6ICdIaWdobGlnaHQgQ2xhc3MgRWxlY3RyaWMnLFxyXG5cdFx0XHRlZGl0b3JDYWxsYmFjazogKGVkaXRvcjogRWRpdG9yLCB2aWV3OiBNYXJrZG93blZpZXcpID0+IHtcclxuXHRcdFx0XHRjb25zdCBzZWxlY3Rpb24gPSBlZGl0b3IuZ2V0U2VsZWN0aW9uKCk7XHJcblx0XHRcdFx0ZWRpdG9yLnJlcGxhY2VTZWxlY3Rpb24oJzxzcGFuIGNsYXNzPVwiaGlnaGxpZ2h0IEFcIj4nK3NlbGVjdGlvbisnPC9zcGFuPicpO1xyXG5cdFx0XHRcdGVkaXRvci5zZXRDdXJzb3IoZWRpdG9yLm9mZnNldFRvUG9zKGVkaXRvci5wb3NUb09mZnNldChlZGl0b3IuZ2V0Q3Vyc29yKCkpLTcpKTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ2hpZ2hsaWdodC1jbGFzcy16JyxcclxuXHRcdFx0bmFtZTogJ0hpZ2hsaWdodCBDbGFzcyBBenVyZScsXHJcblx0XHRcdGVkaXRvckNhbGxiYWNrOiAoZWRpdG9yOiBFZGl0b3IsIHZpZXc6IE1hcmtkb3duVmlldykgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHNlbGVjdGlvbiA9IGVkaXRvci5nZXRTZWxlY3Rpb24oKTtcclxuXHRcdFx0XHRlZGl0b3IucmVwbGFjZVNlbGVjdGlvbignPHNwYW4gY2xhc3M9XCJoaWdobGlnaHQgWlwiPicrc2VsZWN0aW9uKyc8L3NwYW4+Jyk7XHJcblx0XHRcdFx0ZWRpdG9yLnNldEN1cnNvcihlZGl0b3Iub2Zmc2V0VG9Qb3MoZWRpdG9yLnBvc1RvT2Zmc2V0KGVkaXRvci5nZXRDdXJzb3IoKSktNykpO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdGlkOiAnaGlnaGxpZ2h0LWNsYXNzLWInLFxyXG5cdFx0XHRuYW1lOiAnSGlnaGxpZ2h0IENsYXNzIEJsdWUnLFxyXG5cdFx0XHRlZGl0b3JDYWxsYmFjazogKGVkaXRvcjogRWRpdG9yLCB2aWV3OiBNYXJrZG93blZpZXcpID0+IHtcclxuXHRcdFx0XHRjb25zdCBzZWxlY3Rpb24gPSBlZGl0b3IuZ2V0U2VsZWN0aW9uKCk7XHJcblx0XHRcdFx0ZWRpdG9yLnJlcGxhY2VTZWxlY3Rpb24oJzxzcGFuIGNsYXNzPVwiaGlnaGxpZ2h0IEJcIj4nK3NlbGVjdGlvbisnPC9zcGFuPicpO1xyXG5cdFx0XHRcdGVkaXRvci5zZXRDdXJzb3IoZWRpdG9yLm9mZnNldFRvUG9zKGVkaXRvci5wb3NUb09mZnNldChlZGl0b3IuZ2V0Q3Vyc29yKCkpLTcpKTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ2hpZ2hsaWdodC1jbGFzcy12JyxcclxuXHRcdFx0bmFtZTogJ0hpZ2hsaWdodCBDbGFzcyBWaW9sZXQnLFxyXG5cdFx0XHRlZGl0b3JDYWxsYmFjazogKGVkaXRvcjogRWRpdG9yLCB2aWV3OiBNYXJrZG93blZpZXcpID0+IHtcclxuXHRcdFx0XHRjb25zdCBzZWxlY3Rpb24gPSBlZGl0b3IuZ2V0U2VsZWN0aW9uKCk7XHJcblx0XHRcdFx0ZWRpdG9yLnJlcGxhY2VTZWxlY3Rpb24oJzxzcGFuIGNsYXNzPVwiaGlnaGxpZ2h0IFZcIj4nK3NlbGVjdGlvbisnPC9zcGFuPicpO1xyXG5cdFx0XHRcdGVkaXRvci5zZXRDdXJzb3IoZWRpdG9yLm9mZnNldFRvUG9zKGVkaXRvci5wb3NUb09mZnNldChlZGl0b3IuZ2V0Q3Vyc29yKCkpLTcpKTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ2hpZ2hsaWdodC1jbGFzcy1mJyxcclxuXHRcdFx0bmFtZTogJ0hpZ2hsaWdodCBDbGFzcyBGdWNoc2lhJyxcclxuXHRcdFx0ZWRpdG9yQ2FsbGJhY2s6IChlZGl0b3I6IEVkaXRvciwgdmlldzogTWFya2Rvd25WaWV3KSA9PiB7XHJcblx0XHRcdFx0Y29uc3Qgc2VsZWN0aW9uID0gZWRpdG9yLmdldFNlbGVjdGlvbigpO1xyXG5cdFx0XHRcdGVkaXRvci5yZXBsYWNlU2VsZWN0aW9uKCc8c3BhbiBjbGFzcz1cImhpZ2hsaWdodCBGXCI+JytzZWxlY3Rpb24rJzwvc3Bhbj4nKTtcclxuXHRcdFx0XHRlZGl0b3Iuc2V0Q3Vyc29yKGVkaXRvci5vZmZzZXRUb1BvcyhlZGl0b3IucG9zVG9PZmZzZXQoZWRpdG9yLmdldEN1cnNvcigpKS03KSk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdFx0dGhpcy5hZGRDb21tYW5kKHtcclxuXHRcdFx0aWQ6ICdoaWdobGlnaHQtY2xhc3MtbScsXHJcblx0XHRcdG5hbWU6ICdIaWdobGlnaHQgQ2xhc3MgTWFnZW50YScsXHJcblx0XHRcdGVkaXRvckNhbGxiYWNrOiAoZWRpdG9yOiBFZGl0b3IsIHZpZXc6IE1hcmtkb3duVmlldykgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHNlbGVjdGlvbiA9IGVkaXRvci5nZXRTZWxlY3Rpb24oKTtcclxuXHRcdFx0XHRlZGl0b3IucmVwbGFjZVNlbGVjdGlvbignPHNwYW4gY2xhc3M9XCJoaWdobGlnaHQgTVwiPicrc2VsZWN0aW9uKyc8L3NwYW4+Jyk7XHJcblx0XHRcdFx0ZWRpdG9yLnNldEN1cnNvcihlZGl0b3Iub2Zmc2V0VG9Qb3MoZWRpdG9yLnBvc1RvT2Zmc2V0KGVkaXRvci5nZXRDdXJzb3IoKSktNykpO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdGlkOiAnaGlnaGxpZ2h0LWNsYXNzLXcnLFxyXG5cdFx0XHRuYW1lOiAnSGlnaGxpZ2h0IENsYXNzIFdoaXRlJyxcclxuXHRcdFx0ZWRpdG9yQ2FsbGJhY2s6IChlZGl0b3I6IEVkaXRvciwgdmlldzogTWFya2Rvd25WaWV3KSA9PiB7XHJcblx0XHRcdFx0Y29uc3Qgc2VsZWN0aW9uID0gZWRpdG9yLmdldFNlbGVjdGlvbigpO1xyXG5cdFx0XHRcdGVkaXRvci5yZXBsYWNlU2VsZWN0aW9uKCc8c3BhbiBjbGFzcz1cImhpZ2hsaWdodCBXXCI+JytzZWxlY3Rpb24rJzwvc3Bhbj4nKTtcclxuXHRcdFx0XHRlZGl0b3Iuc2V0Q3Vyc29yKGVkaXRvci5vZmZzZXRUb1BvcyhlZGl0b3IucG9zVG9PZmZzZXQoZWRpdG9yLmdldEN1cnNvcigpKS03KSk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdFx0dGhpcy5hZGRDb21tYW5kKHtcclxuXHRcdFx0aWQ6ICdoaWdobGlnaHQtY2xhc3Mtd2snLFxyXG5cdFx0XHRuYW1lOiAnSGlnaGxpZ2h0IENsYXNzIEdyYXknLFxyXG5cdFx0XHRlZGl0b3JDYWxsYmFjazogKGVkaXRvcjogRWRpdG9yLCB2aWV3OiBNYXJrZG93blZpZXcpID0+IHtcclxuXHRcdFx0XHRjb25zdCBzZWxlY3Rpb24gPSBlZGl0b3IuZ2V0U2VsZWN0aW9uKCk7XHJcblx0XHRcdFx0ZWRpdG9yLnJlcGxhY2VTZWxlY3Rpb24oJzxzcGFuIGNsYXNzPVwiaGlnaGxpZ2h0IFdLXCI+JytzZWxlY3Rpb24rJzwvc3Bhbj4nKTtcclxuXHRcdFx0XHRlZGl0b3Iuc2V0Q3Vyc29yKGVkaXRvci5vZmZzZXRUb1BvcyhlZGl0b3IucG9zVG9PZmZzZXQoZWRpdG9yLmdldEN1cnNvcigpKS03KSk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdFx0dGhpcy5hZGRDb21tYW5kKHtcclxuXHRcdFx0aWQ6ICdoaWdobGlnaHQtY2xhc3MtaycsXHJcblx0XHRcdG5hbWU6ICdIaWdobGlnaHQgQ2xhc3MgQmxhY2snLFxyXG5cdFx0XHRlZGl0b3JDYWxsYmFjazogKGVkaXRvcjogRWRpdG9yLCB2aWV3OiBNYXJrZG93blZpZXcpID0+IHtcclxuXHRcdFx0XHRjb25zdCBzZWxlY3Rpb24gPSBlZGl0b3IuZ2V0U2VsZWN0aW9uKCk7XHJcblx0XHRcdFx0ZWRpdG9yLnJlcGxhY2VTZWxlY3Rpb24oJzxzcGFuIGNsYXNzPVwiaGlnaGxpZ2h0IEtcIj4nK3NlbGVjdGlvbisnPC9zcGFuPicpO1xyXG5cdFx0XHRcdGVkaXRvci5zZXRDdXJzb3IoZWRpdG9yLm9mZnNldFRvUG9zKGVkaXRvci5wb3NUb09mZnNldChlZGl0b3IuZ2V0Q3Vyc29yKCkpLTcpKTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ2hpZ2hsaWdodC1jbGFzcy14JyxcclxuXHRcdFx0bmFtZTogJ0hpZ2hsaWdodCBDbGFzcyBSYWluYm93JyxcclxuXHRcdFx0ZWRpdG9yQ2FsbGJhY2s6IChlZGl0b3I6IEVkaXRvciwgdmlldzogTWFya2Rvd25WaWV3KSA9PiB7XHJcblx0XHRcdFx0Y29uc3Qgc2VsZWN0aW9uID0gZWRpdG9yLmdldFNlbGVjdGlvbigpO1xyXG5cdFx0XHRcdGVkaXRvci5yZXBsYWNlU2VsZWN0aW9uKCc8c3BhbiBjbGFzcz1cImhpZ2hsaWdodCBYXCI+JytzZWxlY3Rpb24rJzwvc3Bhbj4nKTtcclxuXHRcdFx0XHRlZGl0b3Iuc2V0Q3Vyc29yKGVkaXRvci5vZmZzZXRUb1BvcyhlZGl0b3IucG9zVG9PZmZzZXQoZWRpdG9yLmdldEN1cnNvcigpKS03KSk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cclxuXHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdGlkOiAnYm94LWNsYXNzJyxcclxuXHRcdFx0bmFtZTogJ0JveCBDbGFzcycsXHJcblx0XHRcdGVkaXRvckNhbGxiYWNrOiAoZWRpdG9yOiBFZGl0b3IsIHZpZXc6IE1hcmtkb3duVmlldykgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHNlbGVjdGlvbiA9IGVkaXRvci5nZXRTZWxlY3Rpb24oKTtcclxuXHRcdFx0XHRlZGl0b3IucmVwbGFjZVNlbGVjdGlvbignPHNwYW4gY2xhc3M9XCJib3hcIj4nK3NlbGVjdGlvbisnPC9zcGFuPicpO1xyXG5cdFx0XHRcdGVkaXRvci5zZXRDdXJzb3IoZWRpdG9yLm9mZnNldFRvUG9zKGVkaXRvci5wb3NUb09mZnNldChlZGl0b3IuZ2V0Q3Vyc29yKCkpLXNlbGVjdGlvbi5sZW5ndGgtOSkpO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdGlkOiAnYm94LWNsYXNzLXInLFxyXG5cdFx0XHRuYW1lOiAnQm94IENsYXNzIFJlZCcsXHJcblx0XHRcdGVkaXRvckNhbGxiYWNrOiAoZWRpdG9yOiBFZGl0b3IsIHZpZXc6IE1hcmtkb3duVmlldykgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHNlbGVjdGlvbiA9IGVkaXRvci5nZXRTZWxlY3Rpb24oKTtcclxuXHRcdFx0XHRlZGl0b3IucmVwbGFjZVNlbGVjdGlvbignPHNwYW4gY2xhc3M9XCJib3hSXCI+JytzZWxlY3Rpb24rJzwvc3Bhbj4nKTtcclxuXHRcdFx0XHRlZGl0b3Iuc2V0Q3Vyc29yKGVkaXRvci5vZmZzZXRUb1BvcyhlZGl0b3IucG9zVG9PZmZzZXQoZWRpdG9yLmdldEN1cnNvcigpKS03KSk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdFx0dGhpcy5hZGRDb21tYW5kKHtcclxuXHRcdFx0aWQ6ICdib3gtY2xhc3MtbycsXHJcblx0XHRcdG5hbWU6ICdCb3ggQ2xhc3MgT3JhbmdlJyxcclxuXHRcdFx0ZWRpdG9yQ2FsbGJhY2s6IChlZGl0b3I6IEVkaXRvciwgdmlldzogTWFya2Rvd25WaWV3KSA9PiB7XHJcblx0XHRcdFx0Y29uc3Qgc2VsZWN0aW9uID0gZWRpdG9yLmdldFNlbGVjdGlvbigpO1xyXG5cdFx0XHRcdGVkaXRvci5yZXBsYWNlU2VsZWN0aW9uKCc8c3BhbiBjbGFzcz1cImJveE9cIj4nK3NlbGVjdGlvbisnPC9zcGFuPicpO1xyXG5cdFx0XHRcdGVkaXRvci5zZXRDdXJzb3IoZWRpdG9yLm9mZnNldFRvUG9zKGVkaXRvci5wb3NUb09mZnNldChlZGl0b3IuZ2V0Q3Vyc29yKCkpLTcpKTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ2JveC1jbGFzcy15JyxcclxuXHRcdFx0bmFtZTogJ0JveCBDbGFzcyBZZWxsb3cnLFxyXG5cdFx0XHRlZGl0b3JDYWxsYmFjazogKGVkaXRvcjogRWRpdG9yLCB2aWV3OiBNYXJrZG93blZpZXcpID0+IHtcclxuXHRcdFx0XHRjb25zdCBzZWxlY3Rpb24gPSBlZGl0b3IuZ2V0U2VsZWN0aW9uKCk7XHJcblx0XHRcdFx0ZWRpdG9yLnJlcGxhY2VTZWxlY3Rpb24oJzxzcGFuIGNsYXNzPVwiYm94WVwiPicrc2VsZWN0aW9uKyc8L3NwYW4+Jyk7XHJcblx0XHRcdFx0ZWRpdG9yLnNldEN1cnNvcihlZGl0b3Iub2Zmc2V0VG9Qb3MoZWRpdG9yLnBvc1RvT2Zmc2V0KGVkaXRvci5nZXRDdXJzb3IoKSktNykpO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdGlkOiAnYm94LWNsYXNzLWwnLFxyXG5cdFx0XHRuYW1lOiAnQm94IENsYXNzIExpbWUnLFxyXG5cdFx0XHRlZGl0b3JDYWxsYmFjazogKGVkaXRvcjogRWRpdG9yLCB2aWV3OiBNYXJrZG93blZpZXcpID0+IHtcclxuXHRcdFx0XHRjb25zdCBzZWxlY3Rpb24gPSBlZGl0b3IuZ2V0U2VsZWN0aW9uKCk7XHJcblx0XHRcdFx0ZWRpdG9yLnJlcGxhY2VTZWxlY3Rpb24oJzxzcGFuIGNsYXNzPVwiYm94TFwiPicrc2VsZWN0aW9uKyc8L3NwYW4+Jyk7XHJcblx0XHRcdFx0ZWRpdG9yLnNldEN1cnNvcihlZGl0b3Iub2Zmc2V0VG9Qb3MoZWRpdG9yLnBvc1RvT2Zmc2V0KGVkaXRvci5nZXRDdXJzb3IoKSktNykpO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdGlkOiAnYm94LWNsYXNzLWcnLFxyXG5cdFx0XHRuYW1lOiAnQm94IENsYXNzIEdyZWVuJyxcclxuXHRcdFx0ZWRpdG9yQ2FsbGJhY2s6IChlZGl0b3I6IEVkaXRvciwgdmlldzogTWFya2Rvd25WaWV3KSA9PiB7XHJcblx0XHRcdFx0Y29uc3Qgc2VsZWN0aW9uID0gZWRpdG9yLmdldFNlbGVjdGlvbigpO1xyXG5cdFx0XHRcdGVkaXRvci5yZXBsYWNlU2VsZWN0aW9uKCc8c3BhbiBjbGFzcz1cImJveEdcIj4nK3NlbGVjdGlvbisnPC9zcGFuPicpO1xyXG5cdFx0XHRcdGVkaXRvci5zZXRDdXJzb3IoZWRpdG9yLm9mZnNldFRvUG9zKGVkaXRvci5wb3NUb09mZnNldChlZGl0b3IuZ2V0Q3Vyc29yKCkpLTcpKTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ2JveC1jbGFzcy11JyxcclxuXHRcdFx0bmFtZTogJ0JveCBDbGFzcyBBcXVhbWFyaW5lJyxcclxuXHRcdFx0ZWRpdG9yQ2FsbGJhY2s6IChlZGl0b3I6IEVkaXRvciwgdmlldzogTWFya2Rvd25WaWV3KSA9PiB7XHJcblx0XHRcdFx0Y29uc3Qgc2VsZWN0aW9uID0gZWRpdG9yLmdldFNlbGVjdGlvbigpO1xyXG5cdFx0XHRcdGVkaXRvci5yZXBsYWNlU2VsZWN0aW9uKCc8c3BhbiBjbGFzcz1cImJveFVcIj4nK3NlbGVjdGlvbisnPC9zcGFuPicpO1xyXG5cdFx0XHRcdGVkaXRvci5zZXRDdXJzb3IoZWRpdG9yLm9mZnNldFRvUG9zKGVkaXRvci5wb3NUb09mZnNldChlZGl0b3IuZ2V0Q3Vyc29yKCkpLTcpKTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ2JveC1jbGFzcy1hJyxcclxuXHRcdFx0bmFtZTogJ0JveCBDbGFzcyBFbGVjdHJpYycsXHJcblx0XHRcdGVkaXRvckNhbGxiYWNrOiAoZWRpdG9yOiBFZGl0b3IsIHZpZXc6IE1hcmtkb3duVmlldykgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHNlbGVjdGlvbiA9IGVkaXRvci5nZXRTZWxlY3Rpb24oKTtcclxuXHRcdFx0XHRlZGl0b3IucmVwbGFjZVNlbGVjdGlvbignPHNwYW4gY2xhc3M9XCJib3hBXCI+JytzZWxlY3Rpb24rJzwvc3Bhbj4nKTtcclxuXHRcdFx0XHRlZGl0b3Iuc2V0Q3Vyc29yKGVkaXRvci5vZmZzZXRUb1BvcyhlZGl0b3IucG9zVG9PZmZzZXQoZWRpdG9yLmdldEN1cnNvcigpKS03KSk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdFx0dGhpcy5hZGRDb21tYW5kKHtcclxuXHRcdFx0aWQ6ICdib3gtY2xhc3MteicsXHJcblx0XHRcdG5hbWU6ICdCb3ggQ2xhc3MgQXp1cmUnLFxyXG5cdFx0XHRlZGl0b3JDYWxsYmFjazogKGVkaXRvcjogRWRpdG9yLCB2aWV3OiBNYXJrZG93blZpZXcpID0+IHtcclxuXHRcdFx0XHRjb25zdCBzZWxlY3Rpb24gPSBlZGl0b3IuZ2V0U2VsZWN0aW9uKCk7XHJcblx0XHRcdFx0ZWRpdG9yLnJlcGxhY2VTZWxlY3Rpb24oJzxzcGFuIGNsYXNzPVwiYm94WlwiPicrc2VsZWN0aW9uKyc8L3NwYW4+Jyk7XHJcblx0XHRcdFx0ZWRpdG9yLnNldEN1cnNvcihlZGl0b3Iub2Zmc2V0VG9Qb3MoZWRpdG9yLnBvc1RvT2Zmc2V0KGVkaXRvci5nZXRDdXJzb3IoKSktNykpO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdGlkOiAnYm94LWNsYXNzLWInLFxyXG5cdFx0XHRuYW1lOiAnQm94IENsYXNzIEJsdWUnLFxyXG5cdFx0XHRlZGl0b3JDYWxsYmFjazogKGVkaXRvcjogRWRpdG9yLCB2aWV3OiBNYXJrZG93blZpZXcpID0+IHtcclxuXHRcdFx0XHRjb25zdCBzZWxlY3Rpb24gPSBlZGl0b3IuZ2V0U2VsZWN0aW9uKCk7XHJcblx0XHRcdFx0ZWRpdG9yLnJlcGxhY2VTZWxlY3Rpb24oJzxzcGFuIGNsYXNzPVwiYm94QlwiPicrc2VsZWN0aW9uKyc8L3NwYW4+Jyk7XHJcblx0XHRcdFx0ZWRpdG9yLnNldEN1cnNvcihlZGl0b3Iub2Zmc2V0VG9Qb3MoZWRpdG9yLnBvc1RvT2Zmc2V0KGVkaXRvci5nZXRDdXJzb3IoKSktNykpO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdGlkOiAnYm94LWNsYXNzLXYnLFxyXG5cdFx0XHRuYW1lOiAnQm94IENsYXNzIFZpb2xldCcsXHJcblx0XHRcdGVkaXRvckNhbGxiYWNrOiAoZWRpdG9yOiBFZGl0b3IsIHZpZXc6IE1hcmtkb3duVmlldykgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHNlbGVjdGlvbiA9IGVkaXRvci5nZXRTZWxlY3Rpb24oKTtcclxuXHRcdFx0XHRlZGl0b3IucmVwbGFjZVNlbGVjdGlvbignPHNwYW4gY2xhc3M9XCJib3hWXCI+JytzZWxlY3Rpb24rJzwvc3Bhbj4nKTtcclxuXHRcdFx0XHRlZGl0b3Iuc2V0Q3Vyc29yKGVkaXRvci5vZmZzZXRUb1BvcyhlZGl0b3IucG9zVG9PZmZzZXQoZWRpdG9yLmdldEN1cnNvcigpKS03KSk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdFx0dGhpcy5hZGRDb21tYW5kKHtcclxuXHRcdFx0aWQ6ICdib3gtY2xhc3MtZicsXHJcblx0XHRcdG5hbWU6ICdCb3ggQ2xhc3MgRnVjaHNpYScsXHJcblx0XHRcdGVkaXRvckNhbGxiYWNrOiAoZWRpdG9yOiBFZGl0b3IsIHZpZXc6IE1hcmtkb3duVmlldykgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHNlbGVjdGlvbiA9IGVkaXRvci5nZXRTZWxlY3Rpb24oKTtcclxuXHRcdFx0XHRlZGl0b3IucmVwbGFjZVNlbGVjdGlvbignPHNwYW4gY2xhc3M9XCJib3hGXCI+JytzZWxlY3Rpb24rJzwvc3Bhbj4nKTtcclxuXHRcdFx0XHRlZGl0b3Iuc2V0Q3Vyc29yKGVkaXRvci5vZmZzZXRUb1BvcyhlZGl0b3IucG9zVG9PZmZzZXQoZWRpdG9yLmdldEN1cnNvcigpKS03KSk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdFx0dGhpcy5hZGRDb21tYW5kKHtcclxuXHRcdFx0aWQ6ICdib3gtY2xhc3MtbScsXHJcblx0XHRcdG5hbWU6ICdCb3ggQ2xhc3MgTWFnZW50YScsXHJcblx0XHRcdGVkaXRvckNhbGxiYWNrOiAoZWRpdG9yOiBFZGl0b3IsIHZpZXc6IE1hcmtkb3duVmlldykgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHNlbGVjdGlvbiA9IGVkaXRvci5nZXRTZWxlY3Rpb24oKTtcclxuXHRcdFx0XHRlZGl0b3IucmVwbGFjZVNlbGVjdGlvbignPHNwYW4gY2xhc3M9XCJib3hNXCI+JytzZWxlY3Rpb24rJzwvc3Bhbj4nKTtcclxuXHRcdFx0XHRlZGl0b3Iuc2V0Q3Vyc29yKGVkaXRvci5vZmZzZXRUb1BvcyhlZGl0b3IucG9zVG9PZmZzZXQoZWRpdG9yLmdldEN1cnNvcigpKS03KSk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdFx0dGhpcy5hZGRDb21tYW5kKHtcclxuXHRcdFx0aWQ6ICdib3gtY2xhc3MtdycsXHJcblx0XHRcdG5hbWU6ICdCb3ggQ2xhc3MgV2hpdGUnLFxyXG5cdFx0XHRlZGl0b3JDYWxsYmFjazogKGVkaXRvcjogRWRpdG9yLCB2aWV3OiBNYXJrZG93blZpZXcpID0+IHtcclxuXHRcdFx0XHRjb25zdCBzZWxlY3Rpb24gPSBlZGl0b3IuZ2V0U2VsZWN0aW9uKCk7XHJcblx0XHRcdFx0ZWRpdG9yLnJlcGxhY2VTZWxlY3Rpb24oJzxzcGFuIGNsYXNzPVwiYm94V1wiPicrc2VsZWN0aW9uKyc8L3NwYW4+Jyk7XHJcblx0XHRcdFx0ZWRpdG9yLnNldEN1cnNvcihlZGl0b3Iub2Zmc2V0VG9Qb3MoZWRpdG9yLnBvc1RvT2Zmc2V0KGVkaXRvci5nZXRDdXJzb3IoKSktNykpO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdGlkOiAnYm94LWNsYXNzLXdrJyxcclxuXHRcdFx0bmFtZTogJ0JveCBDbGFzcyBHcmF5JyxcclxuXHRcdFx0ZWRpdG9yQ2FsbGJhY2s6IChlZGl0b3I6IEVkaXRvciwgdmlldzogTWFya2Rvd25WaWV3KSA9PiB7XHJcblx0XHRcdFx0Y29uc3Qgc2VsZWN0aW9uID0gZWRpdG9yLmdldFNlbGVjdGlvbigpO1xyXG5cdFx0XHRcdGVkaXRvci5yZXBsYWNlU2VsZWN0aW9uKCc8c3BhbiBjbGFzcz1cImJveFdLXCI+JytzZWxlY3Rpb24rJzwvc3Bhbj4nKTtcclxuXHRcdFx0XHRlZGl0b3Iuc2V0Q3Vyc29yKGVkaXRvci5vZmZzZXRUb1BvcyhlZGl0b3IucG9zVG9PZmZzZXQoZWRpdG9yLmdldEN1cnNvcigpKS03KSk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdFx0dGhpcy5hZGRDb21tYW5kKHtcclxuXHRcdFx0aWQ6ICdib3gtY2xhc3MtaycsXHJcblx0XHRcdG5hbWU6ICdCb3ggQ2xhc3MgQmxhY2snLFxyXG5cdFx0XHRlZGl0b3JDYWxsYmFjazogKGVkaXRvcjogRWRpdG9yLCB2aWV3OiBNYXJrZG93blZpZXcpID0+IHtcclxuXHRcdFx0XHRjb25zdCBzZWxlY3Rpb24gPSBlZGl0b3IuZ2V0U2VsZWN0aW9uKCk7XHJcblx0XHRcdFx0ZWRpdG9yLnJlcGxhY2VTZWxlY3Rpb24oJzxzcGFuIGNsYXNzPVwiYm94S1wiPicrc2VsZWN0aW9uKyc8L3NwYW4+Jyk7XHJcblx0XHRcdFx0ZWRpdG9yLnNldEN1cnNvcihlZGl0b3Iub2Zmc2V0VG9Qb3MoZWRpdG9yLnBvc1RvT2Zmc2V0KGVkaXRvci5nZXRDdXJzb3IoKSktNykpO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdGlkOiAnYm94LWNsYXNzLXgnLFxyXG5cdFx0XHRuYW1lOiAnQm94IENsYXNzIFJhaW5ib3cnLFxyXG5cdFx0XHRlZGl0b3JDYWxsYmFjazogKGVkaXRvcjogRWRpdG9yLCB2aWV3OiBNYXJrZG93blZpZXcpID0+IHtcclxuXHRcdFx0XHRjb25zdCBzZWxlY3Rpb24gPSBlZGl0b3IuZ2V0U2VsZWN0aW9uKCk7XHJcblx0XHRcdFx0ZWRpdG9yLnJlcGxhY2VTZWxlY3Rpb24oJzxzcGFuIGNsYXNzPVwiYm94WFwiPicrc2VsZWN0aW9uKyc8L3NwYW4+Jyk7XHJcblx0XHRcdFx0ZWRpdG9yLnNldEN1cnNvcihlZGl0b3Iub2Zmc2V0VG9Qb3MoZWRpdG9yLnBvc1RvT2Zmc2V0KGVkaXRvci5nZXRDdXJzb3IoKSktNykpO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ2xpbmVkLWNsYXNzJyxcclxuXHRcdFx0bmFtZTogJ0xpbmVkIENsYXNzJyxcclxuXHRcdFx0aG90a2V5czogW3ttb2RpZmllcnM6IFsnTW9kJywgJ0FsdCcsICdTaGlmdCddLCBrZXk6ICd1J31dLFxyXG5cdFx0XHRlZGl0b3JDYWxsYmFjazogKGVkaXRvcjogRWRpdG9yLCB2aWV3OiBNYXJrZG93blZpZXcpID0+IHtcclxuXHRcdFx0XHRjb25zdCBzZWxlY3Rpb24gPSBlZGl0b3IuZ2V0U2VsZWN0aW9uKCk7XHJcblx0XHRcdFx0ZWRpdG9yLnJlcGxhY2VTZWxlY3Rpb24oJzxzcGFuIGNsYXNzPVwibGluZWQgXCI+JytzZWxlY3Rpb24rJzwvc3Bhbj4nKTtcclxuXHRcdFx0XHRlZGl0b3Iuc2V0Q3Vyc29yKGVkaXRvci5vZmZzZXRUb1BvcyhlZGl0b3IucG9zVG9PZmZzZXQoZWRpdG9yLmdldEN1cnNvcigpKS1zZWxlY3Rpb24ubGVuZ3RoLTkpKTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ2xpbmVkLWNsYXNzLXInLFxyXG5cdFx0XHRuYW1lOiAnTGluZWQgQ2xhc3MgUmVkJyxcclxuXHRcdFx0ZWRpdG9yQ2FsbGJhY2s6IChlZGl0b3I6IEVkaXRvciwgdmlldzogTWFya2Rvd25WaWV3KSA9PiB7XHJcblx0XHRcdFx0Y29uc3Qgc2VsZWN0aW9uID0gZWRpdG9yLmdldFNlbGVjdGlvbigpO1xyXG5cdFx0XHRcdGVkaXRvci5yZXBsYWNlU2VsZWN0aW9uKCc8c3BhbiBjbGFzcz1cImxpbmVkIFJcIj4nK3NlbGVjdGlvbisnPC9zcGFuPicpO1xyXG5cdFx0XHRcdGVkaXRvci5zZXRDdXJzb3IoZWRpdG9yLm9mZnNldFRvUG9zKGVkaXRvci5wb3NUb09mZnNldChlZGl0b3IuZ2V0Q3Vyc29yKCkpLTcpKTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ2xpbmVkLWNsYXNzLW8nLFxyXG5cdFx0XHRuYW1lOiAnTGluZWQgQ2xhc3MgT3JhbmdlJyxcclxuXHRcdFx0ZWRpdG9yQ2FsbGJhY2s6IChlZGl0b3I6IEVkaXRvciwgdmlldzogTWFya2Rvd25WaWV3KSA9PiB7XHJcblx0XHRcdFx0Y29uc3Qgc2VsZWN0aW9uID0gZWRpdG9yLmdldFNlbGVjdGlvbigpO1xyXG5cdFx0XHRcdGVkaXRvci5yZXBsYWNlU2VsZWN0aW9uKCc8c3BhbiBjbGFzcz1cImxpbmVkIE9cIj4nK3NlbGVjdGlvbisnPC9zcGFuPicpO1xyXG5cdFx0XHRcdGVkaXRvci5zZXRDdXJzb3IoZWRpdG9yLm9mZnNldFRvUG9zKGVkaXRvci5wb3NUb09mZnNldChlZGl0b3IuZ2V0Q3Vyc29yKCkpLTcpKTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ2xpbmVkLWNsYXNzLXknLFxyXG5cdFx0XHRuYW1lOiAnTGluZWQgQ2xhc3MgWWVsbG93JyxcclxuXHRcdFx0ZWRpdG9yQ2FsbGJhY2s6IChlZGl0b3I6IEVkaXRvciwgdmlldzogTWFya2Rvd25WaWV3KSA9PiB7XHJcblx0XHRcdFx0Y29uc3Qgc2VsZWN0aW9uID0gZWRpdG9yLmdldFNlbGVjdGlvbigpO1xyXG5cdFx0XHRcdGVkaXRvci5yZXBsYWNlU2VsZWN0aW9uKCc8c3BhbiBjbGFzcz1cImxpbmVkIFlcIj4nK3NlbGVjdGlvbisnPC9zcGFuPicpO1xyXG5cdFx0XHRcdGVkaXRvci5zZXRDdXJzb3IoZWRpdG9yLm9mZnNldFRvUG9zKGVkaXRvci5wb3NUb09mZnNldChlZGl0b3IuZ2V0Q3Vyc29yKCkpLTcpKTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ2xpbmVkLWNsYXNzLWwnLFxyXG5cdFx0XHRuYW1lOiAnTGluZWQgQ2xhc3MgTGltZScsXHJcblx0XHRcdGVkaXRvckNhbGxiYWNrOiAoZWRpdG9yOiBFZGl0b3IsIHZpZXc6IE1hcmtkb3duVmlldykgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHNlbGVjdGlvbiA9IGVkaXRvci5nZXRTZWxlY3Rpb24oKTtcclxuXHRcdFx0XHRlZGl0b3IucmVwbGFjZVNlbGVjdGlvbignPHNwYW4gY2xhc3M9XCJsaW5lZCBMXCI+JytzZWxlY3Rpb24rJzwvc3Bhbj4nKTtcclxuXHRcdFx0XHRlZGl0b3Iuc2V0Q3Vyc29yKGVkaXRvci5vZmZzZXRUb1BvcyhlZGl0b3IucG9zVG9PZmZzZXQoZWRpdG9yLmdldEN1cnNvcigpKS03KSk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdFx0dGhpcy5hZGRDb21tYW5kKHtcclxuXHRcdFx0aWQ6ICdsaW5lZC1jbGFzcy1HJyxcclxuXHRcdFx0bmFtZTogJ0xpbmVkIENsYXNzIEdyZWVuJyxcclxuXHRcdFx0ZWRpdG9yQ2FsbGJhY2s6IChlZGl0b3I6IEVkaXRvciwgdmlldzogTWFya2Rvd25WaWV3KSA9PiB7XHJcblx0XHRcdFx0Y29uc3Qgc2VsZWN0aW9uID0gZWRpdG9yLmdldFNlbGVjdGlvbigpO1xyXG5cdFx0XHRcdGVkaXRvci5yZXBsYWNlU2VsZWN0aW9uKCc8c3BhbiBjbGFzcz1cImxpbmVkIEdcIj4nK3NlbGVjdGlvbisnPC9zcGFuPicpO1xyXG5cdFx0XHRcdGVkaXRvci5zZXRDdXJzb3IoZWRpdG9yLm9mZnNldFRvUG9zKGVkaXRvci5wb3NUb09mZnNldChlZGl0b3IuZ2V0Q3Vyc29yKCkpLTcpKTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ2xpbmVkLWNsYXNzLXUnLFxyXG5cdFx0XHRuYW1lOiAnTGluZWQgQ2xhc3MgQXF1YW1hcmluZScsXHJcblx0XHRcdGVkaXRvckNhbGxiYWNrOiAoZWRpdG9yOiBFZGl0b3IsIHZpZXc6IE1hcmtkb3duVmlldykgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHNlbGVjdGlvbiA9IGVkaXRvci5nZXRTZWxlY3Rpb24oKTtcclxuXHRcdFx0XHRlZGl0b3IucmVwbGFjZVNlbGVjdGlvbignPHNwYW4gY2xhc3M9XCJsaW5lZCBVXCI+JytzZWxlY3Rpb24rJzwvc3Bhbj4nKTtcclxuXHRcdFx0XHRlZGl0b3Iuc2V0Q3Vyc29yKGVkaXRvci5vZmZzZXRUb1BvcyhlZGl0b3IucG9zVG9PZmZzZXQoZWRpdG9yLmdldEN1cnNvcigpKS03KSk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdFx0dGhpcy5hZGRDb21tYW5kKHtcclxuXHRcdFx0aWQ6ICdsaW5lZC1jbGFzcy1hJyxcclxuXHRcdFx0bmFtZTogJ0xpbmVkIENsYXNzIEVsZWN0cmljJyxcclxuXHRcdFx0ZWRpdG9yQ2FsbGJhY2s6IChlZGl0b3I6IEVkaXRvciwgdmlldzogTWFya2Rvd25WaWV3KSA9PiB7XHJcblx0XHRcdFx0Y29uc3Qgc2VsZWN0aW9uID0gZWRpdG9yLmdldFNlbGVjdGlvbigpO1xyXG5cdFx0XHRcdGVkaXRvci5yZXBsYWNlU2VsZWN0aW9uKCc8c3BhbiBjbGFzcz1cImxpbmVkIEFcIj4nK3NlbGVjdGlvbisnPC9zcGFuPicpO1xyXG5cdFx0XHRcdGVkaXRvci5zZXRDdXJzb3IoZWRpdG9yLm9mZnNldFRvUG9zKGVkaXRvci5wb3NUb09mZnNldChlZGl0b3IuZ2V0Q3Vyc29yKCkpLTcpKTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ2xpbmVkLWNsYXNzLXonLFxyXG5cdFx0XHRuYW1lOiAnTGluZWQgQ2xhc3MgQXp1cmUnLFxyXG5cdFx0XHRlZGl0b3JDYWxsYmFjazogKGVkaXRvcjogRWRpdG9yLCB2aWV3OiBNYXJrZG93blZpZXcpID0+IHtcclxuXHRcdFx0XHRjb25zdCBzZWxlY3Rpb24gPSBlZGl0b3IuZ2V0U2VsZWN0aW9uKCk7XHJcblx0XHRcdFx0ZWRpdG9yLnJlcGxhY2VTZWxlY3Rpb24oJzxzcGFuIGNsYXNzPVwibGluZWQgWlwiPicrc2VsZWN0aW9uKyc8L3NwYW4+Jyk7XHJcblx0XHRcdFx0ZWRpdG9yLnNldEN1cnNvcihlZGl0b3Iub2Zmc2V0VG9Qb3MoZWRpdG9yLnBvc1RvT2Zmc2V0KGVkaXRvci5nZXRDdXJzb3IoKSktNykpO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdGlkOiAnbGluZWQtY2xhc3MtYicsXHJcblx0XHRcdG5hbWU6ICdMaW5lZCBDbGFzcyBCbHVlJyxcclxuXHRcdFx0ZWRpdG9yQ2FsbGJhY2s6IChlZGl0b3I6IEVkaXRvciwgdmlldzogTWFya2Rvd25WaWV3KSA9PiB7XHJcblx0XHRcdFx0Y29uc3Qgc2VsZWN0aW9uID0gZWRpdG9yLmdldFNlbGVjdGlvbigpO1xyXG5cdFx0XHRcdGVkaXRvci5yZXBsYWNlU2VsZWN0aW9uKCc8c3BhbiBjbGFzcz1cImxpbmVkIEJcIj4nK3NlbGVjdGlvbisnPC9zcGFuPicpO1xyXG5cdFx0XHRcdGVkaXRvci5zZXRDdXJzb3IoZWRpdG9yLm9mZnNldFRvUG9zKGVkaXRvci5wb3NUb09mZnNldChlZGl0b3IuZ2V0Q3Vyc29yKCkpLTcpKTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ2xpbmVkLWNsYXNzLXYnLFxyXG5cdFx0XHRuYW1lOiAnTGluZWQgQ2xhc3MgVmlvbGV0JyxcclxuXHRcdFx0ZWRpdG9yQ2FsbGJhY2s6IChlZGl0b3I6IEVkaXRvciwgdmlldzogTWFya2Rvd25WaWV3KSA9PiB7XHJcblx0XHRcdFx0Y29uc3Qgc2VsZWN0aW9uID0gZWRpdG9yLmdldFNlbGVjdGlvbigpO1xyXG5cdFx0XHRcdGVkaXRvci5yZXBsYWNlU2VsZWN0aW9uKCc8c3BhbiBjbGFzcz1cImxpbmVkIFZcIj4nK3NlbGVjdGlvbisnPC9zcGFuPicpO1xyXG5cdFx0XHRcdGVkaXRvci5zZXRDdXJzb3IoZWRpdG9yLm9mZnNldFRvUG9zKGVkaXRvci5wb3NUb09mZnNldChlZGl0b3IuZ2V0Q3Vyc29yKCkpLTcpKTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ2xpbmVkLWNsYXNzLWYnLFxyXG5cdFx0XHRuYW1lOiAnTGluZWQgQ2xhc3MgRnVjaHNpYScsXHJcblx0XHRcdGVkaXRvckNhbGxiYWNrOiAoZWRpdG9yOiBFZGl0b3IsIHZpZXc6IE1hcmtkb3duVmlldykgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHNlbGVjdGlvbiA9IGVkaXRvci5nZXRTZWxlY3Rpb24oKTtcclxuXHRcdFx0XHRlZGl0b3IucmVwbGFjZVNlbGVjdGlvbignPHNwYW4gY2xhc3M9XCJsaW5lZCBGXCI+JytzZWxlY3Rpb24rJzwvc3Bhbj4nKTtcclxuXHRcdFx0XHRlZGl0b3Iuc2V0Q3Vyc29yKGVkaXRvci5vZmZzZXRUb1BvcyhlZGl0b3IucG9zVG9PZmZzZXQoZWRpdG9yLmdldEN1cnNvcigpKS03KSk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdFx0dGhpcy5hZGRDb21tYW5kKHtcclxuXHRcdFx0aWQ6ICdsaW5lZC1jbGFzcy1tJyxcclxuXHRcdFx0bmFtZTogJ0xpbmVkIENsYXNzIE1hZ2VudGEnLFxyXG5cdFx0XHRlZGl0b3JDYWxsYmFjazogKGVkaXRvcjogRWRpdG9yLCB2aWV3OiBNYXJrZG93blZpZXcpID0+IHtcclxuXHRcdFx0XHRjb25zdCBzZWxlY3Rpb24gPSBlZGl0b3IuZ2V0U2VsZWN0aW9uKCk7XHJcblx0XHRcdFx0ZWRpdG9yLnJlcGxhY2VTZWxlY3Rpb24oJzxzcGFuIGNsYXNzPVwibGluZWQgTVwiPicrc2VsZWN0aW9uKyc8L3NwYW4+Jyk7XHJcblx0XHRcdFx0ZWRpdG9yLnNldEN1cnNvcihlZGl0b3Iub2Zmc2V0VG9Qb3MoZWRpdG9yLnBvc1RvT2Zmc2V0KGVkaXRvci5nZXRDdXJzb3IoKSktNykpO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdGlkOiAnbGluZWQtY2xhc3MtdycsXHJcblx0XHRcdG5hbWU6ICdMaW5lZCBDbGFzcyBXaGl0ZScsXHJcblx0XHRcdGVkaXRvckNhbGxiYWNrOiAoZWRpdG9yOiBFZGl0b3IsIHZpZXc6IE1hcmtkb3duVmlldykgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHNlbGVjdGlvbiA9IGVkaXRvci5nZXRTZWxlY3Rpb24oKTtcclxuXHRcdFx0XHRlZGl0b3IucmVwbGFjZVNlbGVjdGlvbignPHNwYW4gY2xhc3M9XCJsaW5lZCBXXCI+JytzZWxlY3Rpb24rJzwvc3Bhbj4nKTtcclxuXHRcdFx0XHRlZGl0b3Iuc2V0Q3Vyc29yKGVkaXRvci5vZmZzZXRUb1BvcyhlZGl0b3IucG9zVG9PZmZzZXQoZWRpdG9yLmdldEN1cnNvcigpKS03KSk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdFx0dGhpcy5hZGRDb21tYW5kKHtcclxuXHRcdFx0aWQ6ICdsaW5lZC1jbGFzcy13aycsXHJcblx0XHRcdG5hbWU6ICdMaW5lZCBDbGFzcyBHcmF5JyxcclxuXHRcdFx0ZWRpdG9yQ2FsbGJhY2s6IChlZGl0b3I6IEVkaXRvciwgdmlldzogTWFya2Rvd25WaWV3KSA9PiB7XHJcblx0XHRcdFx0Y29uc3Qgc2VsZWN0aW9uID0gZWRpdG9yLmdldFNlbGVjdGlvbigpO1xyXG5cdFx0XHRcdGVkaXRvci5yZXBsYWNlU2VsZWN0aW9uKCc8c3BhbiBjbGFzcz1cImxpbmVkIFdLXCI+JytzZWxlY3Rpb24rJzwvc3Bhbj4nKTtcclxuXHRcdFx0XHRlZGl0b3Iuc2V0Q3Vyc29yKGVkaXRvci5vZmZzZXRUb1BvcyhlZGl0b3IucG9zVG9PZmZzZXQoZWRpdG9yLmdldEN1cnNvcigpKS03KSk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdFx0dGhpcy5hZGRDb21tYW5kKHtcclxuXHRcdFx0aWQ6ICdsaW5lZC1jbGFzcy1rJyxcclxuXHRcdFx0bmFtZTogJ0xpbmVkIENsYXNzIEJsYWNrJyxcclxuXHRcdFx0ZWRpdG9yQ2FsbGJhY2s6IChlZGl0b3I6IEVkaXRvciwgdmlldzogTWFya2Rvd25WaWV3KSA9PiB7XHJcblx0XHRcdFx0Y29uc3Qgc2VsZWN0aW9uID0gZWRpdG9yLmdldFNlbGVjdGlvbigpO1xyXG5cdFx0XHRcdGVkaXRvci5yZXBsYWNlU2VsZWN0aW9uKCc8c3BhbiBjbGFzcz1cImxpbmVkIEtcIj4nK3NlbGVjdGlvbisnPC9zcGFuPicpO1xyXG5cdFx0XHRcdGVkaXRvci5zZXRDdXJzb3IoZWRpdG9yLm9mZnNldFRvUG9zKGVkaXRvci5wb3NUb09mZnNldChlZGl0b3IuZ2V0Q3Vyc29yKCkpLTcpKTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ2xpbmVkLWNsYXNzLXgnLFxyXG5cdFx0XHRuYW1lOiAnTGluZWQgQ2xhc3MgUmFpbmJvdycsXHJcblx0XHRcdGVkaXRvckNhbGxiYWNrOiAoZWRpdG9yOiBFZGl0b3IsIHZpZXc6IE1hcmtkb3duVmlldykgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHNlbGVjdGlvbiA9IGVkaXRvci5nZXRTZWxlY3Rpb24oKTtcclxuXHRcdFx0XHRlZGl0b3IucmVwbGFjZVNlbGVjdGlvbignPHNwYW4gY2xhc3M9XCJsaW5lZCBYXCI+JytzZWxlY3Rpb24rJzwvc3Bhbj4nKTtcclxuXHRcdFx0XHRlZGl0b3Iuc2V0Q3Vyc29yKGVkaXRvci5vZmZzZXRUb1BvcyhlZGl0b3IucG9zVG9PZmZzZXQoZWRpdG9yLmdldEN1cnNvcigpKS03KSk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cclxuXHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdGlkOiAnZ2xvdy1jbGFzcycsXHJcblx0XHRcdG5hbWU6ICdHbG93IENsYXNzJyxcclxuXHRcdFx0ZWRpdG9yQ2FsbGJhY2s6IChlZGl0b3I6IEVkaXRvciwgdmlldzogTWFya2Rvd25WaWV3KSA9PiB7XHJcblx0XHRcdFx0Y29uc3Qgc2VsZWN0aW9uID0gZWRpdG9yLmdldFNlbGVjdGlvbigpO1xyXG5cdFx0XHRcdGVkaXRvci5yZXBsYWNlU2VsZWN0aW9uKCc8c3BhbiBjbGFzcz1cImdsb3dcIj4nK3NlbGVjdGlvbisnPC9zcGFuPicpO1xyXG5cdFx0XHRcdGVkaXRvci5zZXRDdXJzb3IoZWRpdG9yLm9mZnNldFRvUG9zKGVkaXRvci5wb3NUb09mZnNldChlZGl0b3IuZ2V0Q3Vyc29yKCkpLTcpKTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ2RhbmNlLWNsYXNzJyxcclxuXHRcdFx0bmFtZTogJ0RhbmNlIENsYXNzJyxcclxuXHRcdFx0ZWRpdG9yQ2FsbGJhY2s6IChlZGl0b3I6IEVkaXRvciwgdmlldzogTWFya2Rvd25WaWV3KSA9PiB7XHJcblx0XHRcdFx0Y29uc3Qgc2VsZWN0aW9uID0gZWRpdG9yLmdldFNlbGVjdGlvbigpO1xyXG5cdFx0XHRcdGVkaXRvci5yZXBsYWNlU2VsZWN0aW9uKCc8c3BhbiBjbGFzcz1cImRhbmNlXCI+JytzZWxlY3Rpb24rJzwvc3Bhbj4nKTtcclxuXHRcdFx0XHRlZGl0b3Iuc2V0Q3Vyc29yKGVkaXRvci5vZmZzZXRUb1BvcyhlZGl0b3IucG9zVG9PZmZzZXQoZWRpdG9yLmdldEN1cnNvcigpKS03KSk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdFx0dGhpcy5hZGRDb21tYW5kKHtcclxuXHRcdFx0aWQ6ICdmYWRlLWNsYXNzJyxcclxuXHRcdFx0bmFtZTogJ0ZhZGUgQ2xhc3MnLFxyXG5cdFx0XHRlZGl0b3JDYWxsYmFjazogKGVkaXRvcjogRWRpdG9yLCB2aWV3OiBNYXJrZG93blZpZXcpID0+IHtcclxuXHRcdFx0XHRjb25zdCBzZWxlY3Rpb24gPSBlZGl0b3IuZ2V0U2VsZWN0aW9uKCk7XHJcblx0XHRcdFx0ZWRpdG9yLnJlcGxhY2VTZWxlY3Rpb24oJzxzcGFuIGNsYXNzPVwiZmFkZVwiPicrc2VsZWN0aW9uKyc8L3NwYW4+Jyk7XHJcblx0XHRcdFx0ZWRpdG9yLnNldEN1cnNvcihlZGl0b3Iub2Zmc2V0VG9Qb3MoZWRpdG9yLnBvc1RvT2Zmc2V0KGVkaXRvci5nZXRDdXJzb3IoKSktNykpO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdGlkOiAnYm91bmNlLWNsYXNzJyxcclxuXHRcdFx0bmFtZTogJ0JvdW5jZSBDbGFzcycsXHJcblx0XHRcdGVkaXRvckNhbGxiYWNrOiAoZWRpdG9yOiBFZGl0b3IsIHZpZXc6IE1hcmtkb3duVmlldykgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHNlbGVjdGlvbiA9IGVkaXRvci5nZXRTZWxlY3Rpb24oKTtcclxuXHRcdFx0XHRlZGl0b3IucmVwbGFjZVNlbGVjdGlvbignPHNwYW4gY2xhc3M9XCJib3VuY2VcIj4nK3NlbGVjdGlvbisnPC9zcGFuPicpO1xyXG5cdFx0XHRcdGVkaXRvci5zZXRDdXJzb3IoZWRpdG9yLm9mZnNldFRvUG9zKGVkaXRvci5wb3NUb09mZnNldChlZGl0b3IuZ2V0Q3Vyc29yKCkpLTcpKTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ2tlZXAtY29sb3InLFxyXG5cdFx0XHRuYW1lOiAnS2VlcCBDb2xvciBDbGFzcycsXHJcblx0XHRcdGVkaXRvckNhbGxiYWNrOiAoZWRpdG9yOiBFZGl0b3IsIHZpZXc6IE1hcmtkb3duVmlldykgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHNlbGVjdGlvbiA9IGVkaXRvci5nZXRTZWxlY3Rpb24oKTtcclxuXHRcdFx0XHRlZGl0b3IucmVwbGFjZVNlbGVjdGlvbignPHNwYW4gY2xhc3M9XCJrZWVwQ29sb3JcIj4nK3NlbGVjdGlvbisnPC9zcGFuPicpO1xyXG5cdFx0XHRcdGVkaXRvci5zZXRDdXJzb3IoZWRpdG9yLm9mZnNldFRvUG9zKGVkaXRvci5wb3NUb09mZnNldChlZGl0b3IuZ2V0Q3Vyc29yKCkpLTcpKTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ25vcm1hbC1zdHlsZS1jbGFzcycsXHJcblx0XHRcdG5hbWU6ICdOb3JtYWwgU3R5bGUgQ2xhc3MnLFxyXG5cdFx0XHRlZGl0b3JDYWxsYmFjazogKGVkaXRvcjogRWRpdG9yLCB2aWV3OiBNYXJrZG93blZpZXcpID0+IHtcclxuXHRcdFx0XHRjb25zdCBzZWxlY3Rpb24gPSBlZGl0b3IuZ2V0U2VsZWN0aW9uKCk7XHJcblx0XHRcdFx0ZWRpdG9yLnJlcGxhY2VTZWxlY3Rpb24oJzxzcGFuIGNsYXNzPVwibm9yU3R5XCI+JytzZWxlY3Rpb24rJzwvc3Bhbj4nKTtcclxuXHRcdFx0XHRlZGl0b3Iuc2V0Q3Vyc29yKGVkaXRvci5vZmZzZXRUb1BvcyhlZGl0b3IucG9zVG9PZmZzZXQoZWRpdG9yLmdldEN1cnNvcigpKS03KSk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cclxuXHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdGlkOiAnZm9udC1zaXplJyxcclxuXHRcdFx0bmFtZTogJ0ZvbnQgU2l6ZScsXHJcblx0XHRcdGVkaXRvckNhbGxiYWNrOiAoZWRpdG9yOiBFZGl0b3IsIHZpZXc6IE1hcmtkb3duVmlldykgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHNlbGVjdGlvbiA9IGVkaXRvci5nZXRTZWxlY3Rpb24oKTtcclxuXHRcdFx0XHRlZGl0b3IucmVwbGFjZVNlbGVjdGlvbignPHNwYW4gc3R5bGU9XCJmb250LXNpemU6MTY7XCI+JytzZWxlY3Rpb24rJzwvc3Bhbj4nKTtcclxuXHRcdFx0XHRlZGl0b3Iuc2V0Q3Vyc29yKGVkaXRvci5vZmZzZXRUb1BvcyhlZGl0b3IucG9zVG9PZmZzZXQoZWRpdG9yLmdldEN1cnNvcigpKS1zZWxlY3Rpb24ubGVuZ3RoLTEwKSk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cclxuXHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdGlkOiAnY3ViZS15JyxcclxuXHRcdFx0bmFtZTogJ0N1YmU/JyxcclxuXHRcdFx0ZWRpdG9yQ2FsbGJhY2s6IChlZGl0b3I6IEVkaXRvciwgdmlldzogTWFya2Rvd25WaWV3KSA9PiB7XHJcblx0XHRcdFx0Y29uc3Qgc2VsZWN0aW9uID0gZWRpdG9yLmdldFNlbGVjdGlvbigpO1xyXG5cdFx0XHRcdGVkaXRvci5yZXBsYWNlU2VsZWN0aW9uKCc8ZGl2IHN0eWxlPVwicGVyc3BlY3RpdmU6ODAwcHg7cGVyc3BlY3RpdmUtb3JpZ2luOnRvcCByaWdodDt3aWR0aDozMCU7YXNwZWN0LXJhdGlvOjMvNDtmaWx0ZXI6ZHJvcC1zaGFkb3coMWVtIDJlbSAwLjdlbSAjMTExKTtcIiB0aXRsZT1cIjNEIEN1YmUgd2l0aCBwdXJlIEhUTUwgYW5kIENTU1wiPjxkaXYgc3R5bGU9XCJmb250LXNpemU6IDRlbTt3aWR0aDogMmVtO21hcmdpbjogMS41ZW0gYXV0bzt0cmFuc2Zvcm0tc3R5bGU6IHByZXNlcnZlLTNkO3RyYW5zZm9ybTogcm90YXRlWCgtNDVkZWcpIHJvdGF0ZVkoMzBkZWcpO1wiPjxkaXYgc3R5bGU9XCJwb3NpdGlvbjogYWJzb2x1dGU7d2lkdGg6IDJlbTtoZWlnaHQ6IDJlbTtiYWNrZ3JvdW5kOiByZ2JhKDEwMCwxMDAsMTAwLDAuNSk7Ym9yZGVyOiAxcHggc29saWQgcmVkO3RleHQtYWxpZ246IGNlbnRlcjtsaW5lLWhlaWdodDogMmVtOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVooMWVtKTtcIj4xPC9kaXY+PGRpdiBzdHlsZT1cInBvc2l0aW9uOiBhYnNvbHV0ZTt3aWR0aDogMmVtO2hlaWdodDogMmVtO2JhY2tncm91bmQ6IHJnYmEoMTAwLDEwMCwxMDAsMC41KTtib3JkZXI6IDFweCBzb2xpZCByZWQ7dGV4dC1hbGlnbjogY2VudGVyO2xpbmUtaGVpZ2h0OiAyZW07IHRyYW5zZm9ybTogcm90YXRlWSgtMTgwZGVnKSB0cmFuc2xhdGVaKDFlbSk7XCI+NjwvZGl2PjxkaXYgc3R5bGU9XCJwb3NpdGlvbjogYWJzb2x1dGU7d2lkdGg6IDJlbTtoZWlnaHQ6IDJlbTtiYWNrZ3JvdW5kOiByZ2JhKDEwMCwxMDAsMTAwLDAuNSk7Ym9yZGVyOiAxcHggc29saWQgcmVkO3RleHQtYWxpZ246IGNlbnRlcjtsaW5lLWhlaWdodDogMmVtOyB0cmFuc2Zvcm06IHJvdGF0ZVkoOTBkZWcpIHRyYW5zbGF0ZVooMWVtKTtcIj40PC9kaXY+PGRpdiBzdHlsZT1cInBvc2l0aW9uOiBhYnNvbHV0ZTt3aWR0aDogMmVtO2hlaWdodDogMmVtO2JhY2tncm91bmQ6IHJnYmEoMTAwLDEwMCwxMDAsMC41KTtib3JkZXI6IDFweCBzb2xpZCByZWQ7dGV4dC1hbGlnbjogY2VudGVyO2xpbmUtaGVpZ2h0OiAyZW07IHRyYW5zZm9ybTogcm90YXRlWSgtOTBkZWcpIHRyYW5zbGF0ZVooMWVtKTtcIj4zPC9kaXY+PGRpdiBzdHlsZT1cInBvc2l0aW9uOiBhYnNvbHV0ZTt3aWR0aDogMmVtO2hlaWdodDogMmVtO2JhY2tncm91bmQ6IHJnYmEoMTAwLDEwMCwxMDAsMC41KTtib3JkZXI6IDFweCBzb2xpZCByZWQ7dGV4dC1hbGlnbjogY2VudGVyO2xpbmUtaGVpZ2h0OiAyZW07IHRyYW5zZm9ybTogcm90YXRlWCg5MGRlZykgdHJhbnNsYXRlWigxZW0pO1wiPjU8L2Rpdj48ZGl2IHN0eWxlPVwicG9zaXRpb246IGFic29sdXRlO3dpZHRoOiAyZW07aGVpZ2h0OiAyZW07YmFja2dyb3VuZDogcmdiYSgxMDAsMTAwLDEwMCwwLjUpO2JvcmRlcjogMXB4IHNvbGlkIHJlZDt0ZXh0LWFsaWduOiBjZW50ZXI7bGluZS1oZWlnaHQ6IDJlbTsgdHJhbnNmb3JtOiByb3RhdGVYKC05MGRlZykgdHJhbnNsYXRlWigxZW0pO1wiPjI8L2Rpdj48L2Rpdj48L2Rpdj4nKTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblxyXG5cdFx0dGhpcy5hZGRDb21tYW5kKHtcclxuXHRcdFx0aWQ6ICd3aW5kb3ctd2lkdGgtY2hlY2tlcicsXHJcblx0XHRcdG5hbWU6ICdDaGVjayBXaW5kb3cgV2lkdGggKGJhc2UgZm9udCBzaXplID0gMTYpJyxcclxuXHRcdFx0ZWRpdG9yQ2FsbGJhY2s6IChlZGl0b3I6IEVkaXRvciwgdmlldzogTWFya2Rvd25WaWV3KSA9PiB7XHJcblx0XHRcdFx0Y29uc3Qgc2VsZWN0aW9uID0gZWRpdG9yLmdldFNlbGVjdGlvbigpO1xyXG5cdFx0XHRcdGVkaXRvci5yZXBsYWNlU2VsZWN0aW9uKCc8ZGl2IHN0eWxlPVwiYm9yZGVyOjJweCBzb2xpZCBncmV5O2JvcmRlci1yYWRpdXM6MTZweDt3aWR0aDo3NSU7XCI+PGI+SWYgc2FtZSwgdGhlbiA8dT53aW5kb3ctc2l6ZT08c3BhbiBzdHlsZT1cImNvbG9yOiMwMEZGMDA7XCI+Y29ycmVjdDwvc3Bhbj48L3U+Ojxocj48L2I+PHNwYW4gc3R5bGU9XCJiYWNrZ3JvdW5kOiNGRjAwMDA7Y29sb3I6IzIwRkYwRjtmb250LXNpemU6MTZweDtcIj48Y29kZT5cdTI1QTBcdTI1QTBcdTI1QTBcdTI1QTBcdTI1QTBcdTI1QTBcdTI1QTBcdTI1QTBcdTI1QTBcdTI1QTBcdTI1QTBcdTI1QTBcdTI1QTBcdTI1QTBcdTI1QTBcdTI1QTBcdTI1QTBcdTI1QTBcdTI1QTBcdTI1QTBcdTI1QTBcdTI1QTBcdTI1QTBcdTI1QTBcdTI1QTBcdTI1QTBcdTI1QTBcdTI1QTBcdTI1QTBcdTI1QTBcdTI1QTBcdTI1QTBcdTI1QTBcdTI1QTBcdTI1QTBcdTI1QTAgPC9jb2RlPjxiIHN0eWxlPVwiY29sb3I6IzAwRkZGRjtcIj58PC9iPjwvc3Bhbj48YnI+PHNwYW4gc3R5bGU9XCJiYWNrZ3JvdW5kOiNGRjAwMDA7Y29sb3I6IzIwRkYwRjtmb250LXNpemU6Mi4wNXZ3O1wiPjxjb2RlPlx1MjVBMFx1MjVBMFx1MjVBMFx1MjVBMFx1MjVBMFx1MjVBMFx1MjVBMFx1MjVBMFx1MjVBMFx1MjVBMFx1MjVBMFx1MjVBMFx1MjVBMFx1MjVBMFx1MjVBMFx1MjVBMFx1MjVBMFx1MjVBMFx1MjVBMFx1MjVBMFx1MjVBMFx1MjVBMFx1MjVBMFx1MjVBMFx1MjVBMFx1MjVBMFx1MjVBMFx1MjVBMFx1MjVBMFx1MjVBMFx1MjVBMFx1MjVBMFx1MjVBMFx1MjVBMFx1MjVBMFx1MjVBMCA8L2NvZGU+PGIgc3R5bGU9XCJjb2xvcjojMDBGRkZGO1wiPnw8L2I+PC9zcGFuPjwvZGl2PicpO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ2NhbmNlbC10ZXh0JyxcclxuXHRcdFx0bmFtZTogJ0NhbmNlbCBUZXh0JyxcclxuXHRcdFx0ZWRpdG9yQ2FsbGJhY2s6IChlZGl0b3I6IEVkaXRvciwgdmlldzogTWFya2Rvd25WaWV3KSA9PiB7XHJcblx0XHRcdFx0Y29uc3Qgc2VsZWN0aW9uID0gZWRpdG9yLmdldFNlbGVjdGlvbigpO1xyXG5cdFx0XHRcdGVkaXRvci5yZXBsYWNlU2VsZWN0aW9uKCc8c3BhbiBzdHlsZT1cImJvcmRlcjoycHggc29saWQgcmVkO2JvcmRlci1yYWRpdXM6NTAlOyBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gbGVmdCB0b3AsIHRyYW5zcGFyZW50IDQ3Ljc1JSwgcmVkIDQ5JSwgcmVkIDUxJSwgdHJhbnNwYXJlbnQgNTIuMjUlKTtwYWRkaW5nOjNweDt6LWluZGV4OjIwMDtcIj48c3BhbiBzdHlsZT1cInotaW5kZXg6MTAwO2Rpc3BsYXk6aW5saW5lLWJsb2NrO1wiPicrc2VsZWN0aW9uKyc8L3NwYW4+PC9zcGFuPicpO1xyXG5cdFx0XHRcdGVkaXRvci5zZXRDdXJzb3IoZWRpdG9yLm9mZnNldFRvUG9zKGVkaXRvci5wb3NUb09mZnNldChlZGl0b3IuZ2V0Q3Vyc29yKCkpLTE0KSk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cclxuXHJcblx0XHQvLyBUaGlzIGFkZHMgYSBzZXR0aW5ncyB0YWIgc28gdGhlIHVzZXIgY2FuIGNvbmZpZ3VyZSB2YXJpb3VzIGFzcGVjdHMgb2YgdGhlIHBsdWdpblxyXG5cdFx0dGhpcy5hZGRTZXR0aW5nVGFiKG5ldyBTYW1wbGVTZXR0aW5nVGFiKHRoaXMuYXBwLCB0aGlzKSk7XHJcblxyXG5cdFx0Ly8gSWYgdGhlIHBsdWdpbiBob29rcyB1cCBhbnkgZ2xvYmFsIERPTSBldmVudHMgKG9uIHBhcnRzIG9mIHRoZSBhcHAgdGhhdCBkb2Vzbid0IGJlbG9uZyB0byB0aGlzIHBsdWdpbilcclxuXHRcdC8vIFVzaW5nIHRoaXMgZnVuY3Rpb24gd2lsbCBhdXRvbWF0aWNhbGx5IHJlbW92ZSB0aGUgZXZlbnQgbGlzdGVuZXIgd2hlbiB0aGlzIHBsdWdpbiBpcyBkaXNhYmxlZC5cclxuXHRcdHRoaXMucmVnaXN0ZXJEb21FdmVudChkb2N1bWVudCwgJ2NsaWNrJywgKGV2dDogTW91c2VFdmVudCkgPT4ge1xyXG5cdFx0XHRjb25zb2xlLmxvZygnY2xpY2snLCBldnQpO1xyXG5cdFx0fSk7XHJcblxyXG5cdFx0Ly8gV2hlbiByZWdpc3RlcmluZyBpbnRlcnZhbHMsIHRoaXMgZnVuY3Rpb24gd2lsbCBhdXRvbWF0aWNhbGx5IGNsZWFyIHRoZSBpbnRlcnZhbCB3aGVuIHRoZSBwbHVnaW4gaXMgZGlzYWJsZWQuXHJcblx0XHR0aGlzLnJlZ2lzdGVySW50ZXJ2YWwod2luZG93LnNldEludGVydmFsKCgpID0+IGNvbnNvbGUubG9nKCdzZXRJbnRlcnZhbCcpLCA1ICogNjAgKiAxMDAwKSk7XHJcblx0fVxyXG5cclxuXHRvbnVubG9hZCgpIHtcclxuXHJcblx0fVxyXG5cclxuXHRhc3luYyBsb2FkU2V0dGluZ3MoKSB7XHJcblx0XHR0aGlzLnNldHRpbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9TRVRUSU5HUywgYXdhaXQgdGhpcy5sb2FkRGF0YSgpKTtcclxuXHR9XHJcblxyXG5cdGFzeW5jIHNhdmVTZXR0aW5ncygpIHtcclxuXHRcdGF3YWl0IHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XHJcblx0fVxyXG59XHJcblxyXG5jbGFzcyBDb2xvclBpY2tlck1vZGFsIGV4dGVuZHMgTW9kYWwge1xyXG5cdGNvbnN0cnVjdG9yKGFwcDogQXBwKSB7XHJcblx0XHRzdXBlcihhcHApO1xyXG5cdFx0dGhpcy5zZXRUaXRsZSgnUGljayBhIGNvbG9yJylcclxuXHRcdGxldCBjb2xvclYgPSAnIzAwMDAwMCc7XHJcblx0XHRuZXcgU2V0dGluZyh0aGlzLmNvbnRlbnRFbClcclxuXHRcdFx0LnNldE5hbWUoJ0NvbG9yJylcclxuXHRcdFx0LmFkZENvbG9yUGlja2VyKChjb2xvclApID0+XHJcblx0XHRcdFx0Y29sb3JQLm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xyXG5cdFx0XHRcdFx0Y29sb3JWID0gdmFsdWU7XHJcblx0XHRcdFx0fSkpO1xyXG5cclxuXHRcdG5ldyBTZXR0aW5nKHRoaXMuY29udGVudEVsKVxyXG5cdFx0XHQuYWRkQnV0dG9uKChidG4pID0+XHJcblx0XHRcdFx0YnRuXHJcblx0XHRcdFx0XHQuc2V0QnV0dG9uVGV4dCgnU3VibWl0JylcclxuXHRcdFx0XHRcdC5zZXRDdGEoKVxyXG5cdFx0XHRcdFx0Lm9uQ2xpY2soKCkgPT4ge1xyXG5cdFx0XHRcdFx0XHR0aGlzLmNsb3NlKCk7XHJcblx0XHRcdFx0XHRcdG9uU3VibWl0KGNvbG9yVik7XHJcblx0XHRcdFx0XHR9KSk7XHJcblx0XHRuZXcgU2V0dGluZyh0aGlzLmNvbnRlbnRFbCkuc2V0TmFtZSgnJyk7XHJcblx0XHRuZXcgU2V0dGluZyh0aGlzLmNvbnRlbnRFbCkuc2V0TmFtZSgnUiAtIFJlZCAtICNGRjUyNTInKTtcclxuXHRcdG5ldyBTZXR0aW5nKHRoaXMuY29udGVudEVsKS5zZXROYW1lKCdPIC0gT3JhbmdlIC0gI0ZGQTg1MicpO1xyXG5cdFx0bmV3IFNldHRpbmcodGhpcy5jb250ZW50RWwpLnNldE5hbWUoJ1kgLSBZZWxsb3cgLSAjRkZGRjUyJyk7XHJcblx0XHRuZXcgU2V0dGluZyh0aGlzLmNvbnRlbnRFbCkuc2V0TmFtZSgnTCAtIExpbWUgLSAjQThGRjUyJyk7XHJcblx0XHRuZXcgU2V0dGluZyh0aGlzLmNvbnRlbnRFbCkuc2V0TmFtZSgnRyAtIEdyZWVuIC0gIzUyRkY1MicpO1xyXG5cdFx0bmV3IFNldHRpbmcodGhpcy5jb250ZW50RWwpLnNldE5hbWUoJ1UgLSBBcXVhbWFyaW5lIC0gIzUyRkZBOCcpO1xyXG5cdFx0bmV3IFNldHRpbmcodGhpcy5jb250ZW50RWwpLnNldE5hbWUoJ0EgLSBFbGVjdHJpYyAtICM1MkZGRkYnKTtcclxuXHRcdG5ldyBTZXR0aW5nKHRoaXMuY29udGVudEVsKS5zZXROYW1lKCdaIC0gQXp1cmUgLSAjNTJBOEZGJyk7XHJcblx0XHRuZXcgU2V0dGluZyh0aGlzLmNvbnRlbnRFbCkuc2V0TmFtZSgnQiAtIEJsdWUgLSAjNTI1MkZGJyk7XHJcblx0XHRuZXcgU2V0dGluZyh0aGlzLmNvbnRlbnRFbCkuc2V0TmFtZSgnViAtIFZpb2xldCAtICNBODUyRkYnKTtcclxuXHRcdG5ldyBTZXR0aW5nKHRoaXMuY29udGVudEVsKS5zZXROYW1lKCdGIC0gRnVjaHNpYSAtICNGRjUyRkYnKTtcclxuXHRcdG5ldyBTZXR0aW5nKHRoaXMuY29udGVudEVsKS5zZXROYW1lKCdNIC0gTWFnZW50YSAtICNGRjUyQTgnKTtcclxuXHRcdG5ldyBTZXR0aW5nKHRoaXMuY29udGVudEVsKS5zZXROYW1lKCdXIC0gV2hpdGUgLSAjRkZGRkZGJyk7XHJcblx0XHRuZXcgU2V0dGluZyh0aGlzLmNvbnRlbnRFbCkuc2V0TmFtZSgnVytLIC0gR3JheSAtICM3RjdGN0YnKTtcclxuXHRcdG5ldyBTZXR0aW5nKHRoaXMuY29udGVudEVsKS5zZXROYW1lKCdLIC0gQmxhY2sgLSAjMDAwMDAwJyk7XHJcblx0fVxyXG5cclxuXHQvLyBvbk9wZW4oKSB7XHJcblx0Ly8gXHRjb25zdCB7Y29udGVudEVsfSA9IHRoaXM7XHJcblx0Ly8gXHRjb250ZW50RWwuc2V0VGV4dCgnV29haCEnKTtcclxuXHQvLyB9XHJcblxyXG5cdC8vIG9uQ2xvc2UoKSB7XHJcblx0Ly8gXHRjb25zdCB7Y29udGVudEVsfSA9IHRoaXM7XHJcblx0Ly8gXHRjb250ZW50RWwuZW1wdHkoKTtcclxuXHQvLyB9XHJcbn1cclxuXHJcbmNsYXNzIFNhbXBsZVNldHRpbmdUYWIgZXh0ZW5kcyBQbHVnaW5TZXR0aW5nVGFiIHtcclxuXHRwbHVnaW46IGh0bWxNZFNjUGx1Z2luO1xyXG5cclxuXHRjb25zdHJ1Y3RvcihhcHA6IEFwcCwgcGx1Z2luOiBodG1sTWRTY1BsdWdpbikge1xyXG5cdFx0c3VwZXIoYXBwLCBwbHVnaW4pO1xyXG5cdFx0dGhpcy5wbHVnaW4gPSBwbHVnaW47XHJcblx0fVxyXG5cclxuXHRkaXNwbGF5KCk6IHZvaWQge1xyXG5cdFx0Y29uc3Qge2NvbnRhaW5lckVsfSA9IHRoaXM7XHJcblxyXG5cdFx0Y29udGFpbmVyRWwuZW1wdHkoKTtcclxuXHJcblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcclxuXHRcdFx0LnNldE5hbWUoJ1NldHRpbmcgIzEnKVxyXG5cdFx0XHQuc2V0RGVzYygnSXRcXCdzIGEgc2VjcmV0JylcclxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XHJcblx0XHRcdFx0LnNldFBsYWNlaG9sZGVyKCdFbnRlciB5b3VyIHNlY3JldCcpXHJcblx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLm15U2V0dGluZylcclxuXHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XHJcblx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5teVNldHRpbmcgPSB2YWx1ZTtcclxuXHRcdFx0XHRcdGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0XHRcdH0pKTtcclxuXHR9XHJcbn1cclxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLHNCQUE0RjtBQVE1RixJQUFNLG1CQUEyQztBQUFBLEVBQ2hELFdBQVc7QUFDWjtBQUVBLElBQXFCLGlCQUFyQixjQUE0Qyx1QkFBTztBQUFBLEVBR2xELE1BQU0sU0FBUztBQUNkLFVBQU0sS0FBSyxhQUFhO0FBR3hCLFVBQU0sZUFBZSxLQUFLLGNBQWMsbUJBQW1CLDJCQUEyQixDQUFDLFFBQW9CO0FBRTFHLFVBQUksdUJBQU8sbUJBQW1CO0FBQzlCLFVBQUksaUJBQWlCLEtBQUssR0FBRyxFQUFFLEtBQUs7QUFBQSxJQUNyQyxDQUFDO0FBR0QsaUJBQWEsU0FBUyx5QkFBeUI7QUFHL0MsVUFBTSxrQkFBa0IsS0FBSyxpQkFBaUI7QUFDOUMsb0JBQWdCLFFBQVEsRUFBRTtBQUcxQixTQUFLLFdBQVc7QUFBQSxNQUNmLElBQUk7QUFBQSxNQUNKLE1BQU07QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsTUFNTixnQkFBZ0IsQ0FBQyxRQUFnQixTQUF1QjtBQUN2RCxjQUFNLFlBQVksT0FBTyxhQUFhO0FBQ3RDLGVBQU8saUJBQWlCO0FBQUEs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