@pie-element/explicit-constructed-response 11.2.2-beta.3 → 11.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,950 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
- var _index = require("../index");
5
- var _defaults = _interopRequireDefault(require("../defaults"));
6
- jest.mock('@pie-lib/controller-utils', () => ({
7
- getShuffledChoices: (choices, session, updateSession, key) => {
8
- const currentShuffled = ((session || {}).shuffledValues || []).filter(v => v);
9
- if (session && !currentShuffled.length && updateSession && typeof updateSession === 'function') {
10
- updateSession();
11
- }
12
- return choices;
13
- },
14
- partialScoring: {
15
- enabled: (config, env) => {
16
- config = config || {};
17
- env = env || {};
18
- if (config.partialScoring === false) {
19
- return false;
20
- }
21
- if (env.partialScoring === false) {
22
- return false;
23
- }
24
- return true;
25
- }
26
- }
27
- }));
28
- const choice = (l, v) => ({
29
- label: l,
30
- value: v
31
- });
32
- const choices = {
33
- 0: [choice('cow', '0'), choice('cattle', '1'), choice('calf', '2')],
34
- 1: [choice('over', '0'), choice('past', '1'), choice('beyond', '2')],
35
- 2: [choice('moon', '0')]
36
- };
37
- const question = {
38
- markup: '<p>The {{0}} jumped {{1}} the {{2}}</p>',
39
- disabled: false,
40
- choices,
41
- prompt: 'Complete the sentence',
42
- note: 'The answer shown above is the most common correct answer for this item.',
43
- language: 'english',
44
- maxLengthPerChoiceEnabled: true,
45
- playerSpellCheckEnabled: true,
46
- displayType: 'block'
47
- };
48
- describe('controller', () => {
49
- describe('model', () => {
50
- let q, env;
51
- it('output when session is defined', async () => {
52
- const m = await (0, _index.model)(question, {
53
- value: {
54
- 0: 'cow',
55
- 1: 'over',
56
- 2: 'moon'
57
- }
58
- }, {
59
- mode: 'evaluate'
60
- });
61
- expect(m).toEqual(expect.objectContaining({
62
- feedback: {
63
- 0: 'correct',
64
- 1: 'correct',
65
- 2: 'correct'
66
- },
67
- responseCorrect: true
68
- }));
69
- });
70
- const returnModel = session => {
71
- it(`output when session is ${JSON.stringify(session)}`, async () => {
72
- const m = await (0, _index.model)(question, session, {
73
- mode: 'evaluate'
74
- });
75
- expect(m).toEqual(expect.objectContaining({
76
- feedback: {
77
- 0: 'incorrect',
78
- 1: 'incorrect',
79
- 2: 'incorrect'
80
- },
81
- responseCorrect: false
82
- }));
83
- });
84
- };
85
- returnModel(undefined);
86
- returnModel(null);
87
- returnModel({});
88
- const assertGather = (label, extra, session, expected) => {
89
- it(`'mode: gather, ${label}'`, async () => {
90
- q = {
91
- ...question,
92
- teacherInstructions: 'Teacher Instructions',
93
- rationale: 'Rationale',
94
- ...extra
95
- };
96
- env = {
97
- mode: 'gather'
98
- };
99
- const result = await (0, _index.model)(q, {
100
- id: '1',
101
- element: 'explicit-constructed-response',
102
- ...session
103
- }, env);
104
- expect(result).toEqual({
105
- ...question,
106
- disabled: false,
107
- feedback: {},
108
- responseCorrect: undefined,
109
- maxLengthPerChoice: [10, 10, 7],
110
- ...env,
111
- ...expected
112
- });
113
- });
114
- };
115
- assertGather('promptEnabled, rationaleEnabled and teacherInstructionsEnabled not set', {}, {}, {
116
- rationale: _defaults.default.rationale,
117
- showNote: true,
118
- teacherInstructions: _defaults.default.teacherInstructions
119
- });
120
- assertGather('promptEnabled, rationaleEnabled and teacherInstructionsEnabled set to false', {
121
- promptEnabled: false,
122
- rationaleEnabled: false,
123
- teacherInstructionsEnabled: false,
124
- studentInstructionsEnabled: false
125
- }, {}, {
126
- prompt: _defaults.default.prompt,
127
- rationale: _defaults.default.rationale,
128
- showNote: true,
129
- teacherInstructions: _defaults.default.teacherInstructions
130
- });
131
- const assertView = (label, extra, session, expected) => {
132
- it(`'mode: view, ${label}'`, async () => {
133
- q = {
134
- ...question,
135
- teacherInstructions: 'Teacher Instructions',
136
- rationale: 'Rationale',
137
- ...extra
138
- };
139
- env = {
140
- mode: 'view',
141
- role: 'instructor'
142
- };
143
- const result = await (0, _index.model)(q, {
144
- id: '1',
145
- element: 'explicit-constructed-response',
146
- ...session
147
- }, env);
148
- expect(result).toEqual({
149
- ...question,
150
- disabled: true,
151
- feedback: {},
152
- responseCorrect: undefined,
153
- maxLengthPerChoice: [10, 10, 7],
154
- ...env,
155
- ...expected
156
- });
157
- });
158
- };
159
- assertView(' + role: instructor, promptEnabled, rationaleEnabled and teacherInstructionsEnabled set to false', {
160
- promptEnabled: false,
161
- rationaleEnabled: false,
162
- teacherInstructionsEnabled: false,
163
- studentInstructionsEnabled: false
164
- }, {}, {
165
- prompt: _defaults.default.prompt,
166
- rationale: _defaults.default.rationale,
167
- showNote: true,
168
- teacherInstructions: _defaults.default.teacherInstructions
169
- });
170
- assertView(' + role: instructor, promptEnabled, rationaleEnabled and teacherInstructionsEnabled unset', {}, {}, {
171
- teacherInstructions: 'Teacher Instructions',
172
- showNote: true,
173
- rationale: 'Rationale'
174
- });
175
- const assertViewStudent = (label, extra, session, expected) => {
176
- it(`'mode: view, ${label}'`, async () => {
177
- q = {
178
- ...question,
179
- teacherInstructions: 'Teacher Instructions',
180
- rationale: 'Rationale',
181
- ...extra
182
- };
183
- env = {
184
- mode: 'view',
185
- role: ' student'
186
- };
187
- const result = await (0, _index.model)(q, {
188
- id: '1',
189
- element: 'explicit-constructed-response',
190
- ...session
191
- }, env);
192
- expect(result).toEqual({
193
- ...question,
194
- disabled: true,
195
- feedback: {},
196
- responseCorrect: undefined,
197
- maxLengthPerChoice: [10, 10, 7],
198
- ...env,
199
- ...expected
200
- });
201
- });
202
- };
203
- assertViewStudent(' + role: student, promptEnabled, rationaleEnabled and teacherInstructionsEnabled set to false', {
204
- promptEnabled: false,
205
- rationaleEnabled: false,
206
- teacherInstructionsEnabled: false,
207
- studentInstructionsEnabled: false
208
- }, {}, {
209
- prompt: _defaults.default.prompt,
210
- rationale: _defaults.default.rationale,
211
- showNote: true,
212
- teacherInstructions: _defaults.default.teacherInstructions
213
- });
214
- assertViewStudent(' + role: student, promptEnabled, rationaleEnabled and teacherInstructionsEnabled unset', {}, {}, {
215
- rationale: _defaults.default.rationale,
216
- showNote: true,
217
- teacherInstructions: _defaults.default.teacherInstructions
218
- });
219
- const assertEvaluate = (label, extra, session, expected) => {
220
- it(`'mode: evaluate, ${label}'`, async () => {
221
- q = {
222
- ...question,
223
- teacherInstructions: 'Teacher Instructions',
224
- rationale: 'Rationale',
225
- ...extra
226
- };
227
- env = {
228
- mode: 'evaluate',
229
- role: 'instructor'
230
- };
231
- const result = await (0, _index.model)(q, {
232
- id: '1',
233
- element: 'explicit-constructed-response',
234
- ...session
235
- }, env);
236
- expect(result).toEqual({
237
- ...question,
238
- teacherInstructions: 'Teacher Instructions',
239
- rationale: 'Rationale',
240
- disabled: true,
241
- choices: {
242
- 0: [{
243
- label: 'cow',
244
- value: '0',
245
- correct: true
246
- }, {
247
- label: 'cattle',
248
- value: '1',
249
- correct: true
250
- }, {
251
- label: 'calf',
252
- value: '2',
253
- correct: true
254
- }],
255
- 1: [{
256
- label: 'over',
257
- value: '0',
258
- correct: true
259
- }, {
260
- label: 'past',
261
- value: '1',
262
- correct: true
263
- }, {
264
- label: 'beyond',
265
- value: '2',
266
- correct: true
267
- }],
268
- 2: [{
269
- label: 'moon',
270
- value: '0',
271
- correct: true
272
- }]
273
- },
274
- maxLengthPerChoice: [10, 10, 7],
275
- ...env,
276
- ...expected
277
- });
278
- });
279
- };
280
- assertEvaluate('- correct answer', {}, {
281
- value: {
282
- 0: 'cow',
283
- 1: 'over',
284
- 2: 'moon'
285
- }
286
- }, {
287
- feedback: {
288
- 0: 'correct',
289
- 1: 'correct',
290
- 2: 'correct'
291
- },
292
- showNote: true,
293
- responseCorrect: true
294
- });
295
- assertEvaluate('- partially correct answer', {}, {
296
- value: {
297
- 0: 'cow',
298
- 1: 'over',
299
- 2: 'sun'
300
- }
301
- }, {
302
- feedback: {
303
- 0: 'correct',
304
- 1: 'correct',
305
- 2: 'incorrect'
306
- },
307
- showNote: true,
308
- responseCorrect: false
309
- });
310
- assertEvaluate('- partially correct answer using alternates', {}, {
311
- value: {
312
- 0: 'calf',
313
- 1: 'over',
314
- 2: 'sun'
315
- }
316
- }, {
317
- feedback: {
318
- 0: 'correct',
319
- 1: 'correct',
320
- 2: 'incorrect'
321
- },
322
- showNote: true,
323
- responseCorrect: false
324
- });
325
- assertEvaluate('- incorrect answer', {}, {
326
- value: {
327
- 0: 'han',
328
- 1: 'above',
329
- 2: 'chicken'
330
- }
331
- }, {
332
- feedback: {
333
- 0: 'incorrect',
334
- 1: 'incorrect',
335
- 2: 'incorrect'
336
- },
337
- showNote: true,
338
- responseCorrect: false
339
- });
340
- });
341
- describe('get score', () => {
342
- const assertScore = (session, expected) => {
343
- it('return score', () => {
344
- const score = (0, _index.getScore)(question, session);
345
- expect(score).toEqual(expected);
346
- });
347
- };
348
- assertScore({
349
- value: {
350
- 0: 'cow',
351
- 1: 'over',
352
- 2: 'moon'
353
- }
354
- }, 1);
355
- assertScore({
356
- value: {
357
- 0: 'cattle',
358
- 1: 'over',
359
- 2: 'moon'
360
- }
361
- }, 1);
362
- assertScore({
363
- value: {
364
- 0: 'calf',
365
- 1: 'over',
366
- 2: 'moon'
367
- }
368
- }, 1);
369
- assertScore({
370
- value: {
371
- 0: 'cow',
372
- 1: 'past',
373
- 2: 'moon'
374
- }
375
- }, 1);
376
- assertScore({
377
- value: {
378
- 0: 'cattle',
379
- 1: 'past',
380
- 2: 'moon'
381
- }
382
- }, 1);
383
- assertScore({
384
- value: {
385
- 0: 'calf',
386
- 1: 'past',
387
- 2: 'moon'
388
- }
389
- }, 1);
390
- assertScore({
391
- value: {
392
- 0: 'cow',
393
- 1: 'beyond',
394
- 2: 'moon'
395
- }
396
- }, 1);
397
- assertScore({
398
- value: {
399
- 0: 'cattle',
400
- 1: 'beyond',
401
- 2: 'moon'
402
- }
403
- }, 1);
404
- assertScore({
405
- value: {
406
- 0: 'calf',
407
- 1: 'beyond',
408
- 2: 'moon'
409
- }
410
- }, 1);
411
- assertScore({
412
- value: {
413
- 0: 'calf',
414
- 1: 'under',
415
- 2: 'moon'
416
- }
417
- }, 0.67);
418
- assertScore({
419
- value: {
420
- 0: 'cat',
421
- 1: 'under',
422
- 2: 'moon'
423
- }
424
- }, 0.33);
425
- assertScore({
426
- value: {
427
- 0: 'cat',
428
- 1: 'under',
429
- 2: 'sun'
430
- }
431
- }, 0);
432
- const returnScore = session => {
433
- it(`score = 0 when session is ${JSON.stringify(session)}`, () => {
434
- expect((0, _index.getScore)(question, session)).toEqual(0);
435
- });
436
- };
437
- returnScore(undefined);
438
- returnScore(null);
439
- returnScore({});
440
- });
441
- describe('outcome partialScoring test', () => {
442
- const assertOutcome = (message, extra, sessionValue, env, expected) => {
443
- it(message, async () => {
444
- const result = await (0, _index.outcome)({
445
- ...question,
446
- ...extra
447
- }, sessionValue, env);
448
- expect(result).toEqual(expect.objectContaining(expected));
449
- });
450
- };
451
- assertOutcome('element.partialScoring = true', {
452
- partialScoring: true
453
- }, {
454
- value: {
455
- 0: 'calf',
456
- 1: 'under',
457
- 2: 'moon'
458
- }
459
- }, {
460
- mode: 'evaluate'
461
- }, {
462
- score: 0.67
463
- });
464
- assertOutcome('element.partialScoring = false', {
465
- partialScoring: false
466
- }, {
467
- value: {
468
- 0: 'calf',
469
- 1: 'under',
470
- 2: 'moon'
471
- }
472
- }, {
473
- mode: 'evaluate'
474
- }, {
475
- score: 0
476
- });
477
- assertOutcome('element.partialScoring = false, env.partialScoring = true', {
478
- partialScoring: false
479
- }, {
480
- value: {
481
- 0: 'calf',
482
- 1: 'under',
483
- 2: 'moon'
484
- }
485
- }, {
486
- mode: 'evaluate',
487
- partialScoring: true
488
- }, {
489
- score: 0
490
- });
491
- assertOutcome('element.partialScoring = true, env.partialScoring = false', {
492
- partialScoring: true
493
- }, {
494
- value: {
495
- 0: 'calf',
496
- 1: 'under',
497
- 2: 'moon'
498
- }
499
- }, {
500
- mode: 'evaluate',
501
- partialScoring: false
502
- }, {
503
- score: 0
504
- });
505
- });
506
- describe('outcome', () => {
507
- const assertOutcome = (partialScoring, sessionValue, expected) => {
508
- it(`partial score ${partialScoring ? 'enabled' : ''}`, async () => {
509
- const result = await (0, _index.outcome)({
510
- ...question,
511
- partialScoring
512
- }, sessionValue);
513
- expect(result).toEqual(expect.objectContaining(expected));
514
- });
515
- };
516
- assertOutcome(true, {
517
- value: {
518
- 0: 'cow',
519
- 1: 'over',
520
- 2: 'moon'
521
- }
522
- }, {
523
- score: 1,
524
- empty: false
525
- });
526
- assertOutcome(true, {
527
- value: {
528
- 0: 'cattle',
529
- 1: 'over',
530
- 2: 'moon'
531
- }
532
- }, {
533
- score: 1,
534
- empty: false
535
- });
536
- assertOutcome(true, {
537
- value: {
538
- 0: 'calf',
539
- 1: 'over',
540
- 2: 'moon'
541
- }
542
- }, {
543
- score: 1,
544
- empty: false
545
- });
546
- assertOutcome(true, {
547
- value: {
548
- 0: 'cow',
549
- 1: 'past',
550
- 2: 'moon'
551
- }
552
- }, {
553
- score: 1,
554
- empty: false
555
- });
556
- assertOutcome(true, {
557
- value: {
558
- 0: 'cattle',
559
- 1: 'past',
560
- 2: 'moon'
561
- }
562
- }, {
563
- score: 1,
564
- empty: false
565
- });
566
- assertOutcome(true, {
567
- value: {
568
- 0: 'calf',
569
- 1: 'past',
570
- 2: 'moon'
571
- }
572
- }, {
573
- score: 1,
574
- empty: false
575
- });
576
- assertOutcome(true, {
577
- value: {
578
- 0: 'cow',
579
- 1: 'beyond',
580
- 2: 'moon'
581
- }
582
- }, {
583
- score: 1,
584
- empty: false
585
- });
586
- assertOutcome(true, {
587
- value: {
588
- 0: 'cattle',
589
- 1: 'beyond',
590
- 2: 'moon'
591
- }
592
- }, {
593
- score: 1,
594
- empty: false
595
- });
596
- assertOutcome(true, {
597
- value: {
598
- 0: 'calf',
599
- 1: 'beyond',
600
- 2: 'moon'
601
- }
602
- }, {
603
- score: 1,
604
- empty: false
605
- });
606
- assertOutcome(true, {
607
- value: {
608
- 0: 'calf',
609
- 1: 'under',
610
- 2: 'moon'
611
- }
612
- }, {
613
- score: 0.67,
614
- empty: false
615
- });
616
- assertOutcome(true, {
617
- value: {
618
- 0: 'cat',
619
- 1: 'under',
620
- 2: 'moon'
621
- }
622
- }, {
623
- score: 0.33,
624
- empty: false
625
- });
626
- assertOutcome(true, {
627
- value: {
628
- 0: 'cat',
629
- 1: 'under',
630
- 2: 'sun'
631
- }
632
- }, {
633
- score: 0,
634
- empty: false
635
- });
636
- assertOutcome(false, {
637
- value: {
638
- 0: 'cow',
639
- 1: 'over',
640
- 2: 'moon'
641
- }
642
- }, {
643
- score: 1,
644
- empty: false
645
- });
646
- assertOutcome(false, {
647
- value: {
648
- 0: 'cattle',
649
- 1: 'over',
650
- 2: 'moon'
651
- }
652
- }, {
653
- score: 1,
654
- empty: false
655
- });
656
- assertOutcome(false, {
657
- value: {
658
- 0: 'calf',
659
- 1: 'over',
660
- 2: 'moon'
661
- }
662
- }, {
663
- score: 1,
664
- empty: false
665
- });
666
- assertOutcome(false, {
667
- value: {
668
- 0: 'cow',
669
- 1: 'past',
670
- 2: 'moon'
671
- }
672
- }, {
673
- score: 1,
674
- empty: false
675
- });
676
- assertOutcome(false, {
677
- value: {
678
- 0: 'cattle',
679
- 1: 'past',
680
- 2: 'moon'
681
- }
682
- }, {
683
- score: 1,
684
- empty: false
685
- });
686
- assertOutcome(false, {
687
- value: {
688
- 0: 'calf',
689
- 1: 'past',
690
- 2: 'moon'
691
- }
692
- }, {
693
- score: 1,
694
- empty: false
695
- });
696
- assertOutcome(false, {
697
- value: {
698
- 0: 'cow',
699
- 1: 'beyond',
700
- 2: 'moon'
701
- }
702
- }, {
703
- score: 1,
704
- empty: false
705
- });
706
- assertOutcome(false, {
707
- value: {
708
- 0: 'cattle',
709
- 1: 'beyond',
710
- 2: 'moon'
711
- }
712
- }, {
713
- score: 1,
714
- empty: false
715
- });
716
- assertOutcome(false, {
717
- value: {
718
- 0: 'calf',
719
- 1: 'beyond',
720
- 2: 'moon'
721
- }
722
- }, {
723
- score: 1,
724
- empty: false
725
- });
726
- assertOutcome(false, {
727
- value: {
728
- 0: 'calf',
729
- 1: 'under',
730
- 2: 'moon'
731
- }
732
- }, {
733
- score: 0,
734
- empty: false
735
- });
736
- assertOutcome(false, {
737
- value: {
738
- 0: 'cat',
739
- 1: 'under',
740
- 2: 'moon'
741
- }
742
- }, {
743
- score: 0,
744
- empty: false
745
- });
746
- assertOutcome(false, {
747
- value: {
748
- 0: 'cat',
749
- 1: 'under',
750
- 2: 'sun'
751
- }
752
- }, {
753
- score: 0,
754
- empty: false
755
- });
756
- const returnModel = session => {
757
- it(`empty: true when session is ${JSON.stringify(session)}`, async () => {
758
- const m = await (0, _index.outcome)(question, session);
759
- expect(m).toEqual({
760
- score: 0,
761
- empty: true,
762
- traceLog: ['Student did not fill any response areas. Score: 0.']
763
- });
764
- });
765
- };
766
- returnModel(undefined);
767
- returnModel(null);
768
- returnModel({});
769
- });
770
- describe('prepareVal', () => {
771
- it('should return empty string on null or undefined', () => {
772
- expect((0, _index.prepareVal)(null)).toEqual('');
773
- expect((0, _index.prepareVal)(undefined)).toEqual('');
774
- });
775
- it('should remove html tags', () => {
776
- expect((0, _index.prepareVal)('<div>Foo Bar</div>')).toEqual('Foo Bar');
777
- });
778
- describe('correct response', () => {
779
- let question;
780
- beforeEach(() => {
781
- question = {
782
- choices
783
- };
784
- });
785
- it('returns correct response if env is correct', async () => {
786
- const sess = await (0, _index.createCorrectResponseSession)(question, {
787
- mode: 'gather',
788
- role: 'instructor'
789
- });
790
- expect(sess).toEqual({
791
- id: '1',
792
- value: {
793
- 0: 'cow',
794
- 1: 'over',
795
- 2: 'moon'
796
- }
797
- });
798
- });
799
- it('returns null env is student', async () => {
800
- const noResult = await (0, _index.createCorrectResponseSession)(question, {
801
- mode: 'gather',
802
- role: 'student'
803
- });
804
- expect(noResult).toBeNull();
805
- });
806
- });
807
- });
808
- describe('correct response', () => {
809
- it('returns correct response if role is instructor and mode is gather', async () => {
810
- const sess = await (0, _index.createCorrectResponseSession)(question, {
811
- mode: 'gather',
812
- role: 'instructor'
813
- });
814
- expect(sess).toEqual({
815
- id: '1',
816
- value: {
817
- 0: 'cow',
818
- 1: 'over',
819
- 2: 'moon'
820
- }
821
- });
822
- });
823
- it('returns correct response if role is instructor and mode is view', async () => {
824
- const sess = await (0, _index.createCorrectResponseSession)(question, {
825
- mode: 'view',
826
- role: 'instructor'
827
- });
828
- expect(sess).toEqual({
829
- id: '1',
830
- value: {
831
- 0: 'cow',
832
- 1: 'over',
833
- 2: 'moon'
834
- }
835
- });
836
- });
837
- it('returns null if mode is evaluate', async () => {
838
- const noResult = await (0, _index.createCorrectResponseSession)(question, {
839
- mode: 'evaluate',
840
- role: 'instructor'
841
- });
842
- expect(noResult).toBeNull();
843
- });
844
- it('returns null if role is student', async () => {
845
- const noResult = await (0, _index.createCorrectResponseSession)(question, {
846
- mode: 'gather',
847
- role: 'student'
848
- });
849
- expect(noResult).toBeNull();
850
- });
851
- });
852
- describe('prepareChoice', () => {
853
- const assertPrepareChoice = (env, defaultFeedback, choice, expected) => {
854
- const preparChoiceFn = (0, _index.prepareChoice)(env.mode, defaultFeedback);
855
- it(`prepare choices in ${env.mode} mode: ${JSON.stringify(choice)} -> ${JSON.stringify(expected)}`, () => {
856
- expect(preparChoiceFn(choice)).toEqual(expected);
857
- });
858
- };
859
- assertPrepareChoice({
860
- mode: 'gather'
861
- }, {
862
- correct: 'Correct',
863
- incorrect: 'Incorrect'
864
- }, {
865
- value: '0',
866
- label: 'cow'
867
- }, {
868
- value: '0',
869
- label: 'cow'
870
- });
871
- assertPrepareChoice({
872
- mode: 'view'
873
- }, {
874
- correct: 'Correct',
875
- incorrect: 'Incorrect'
876
- }, {
877
- value: '0',
878
- label: 'cow'
879
- }, {
880
- value: '0',
881
- label: 'cow'
882
- });
883
- assertPrepareChoice({
884
- mode: 'evaluate'
885
- }, {
886
- correct: 'Correct',
887
- incorrect: 'Incorrect'
888
- }, {
889
- value: '0',
890
- label: 'cow'
891
- }, {
892
- value: '0',
893
- label: 'cow',
894
- correct: true
895
- });
896
- assertPrepareChoice({
897
- mode: 'evaluate'
898
- }, {
899
- correct: 'Correct',
900
- incorrect: 'Incorrect'
901
- }, {
902
- value: '0',
903
- label: 'cow',
904
- feedback: {
905
- type: 'default'
906
- }
907
- }, {
908
- value: '0',
909
- label: 'cow',
910
- correct: true,
911
- feedback: 'Correct'
912
- });
913
- assertPrepareChoice({
914
- mode: 'evaluate'
915
- }, {
916
- correct: 'Correct',
917
- incorrect: 'Incorrect'
918
- }, {
919
- value: '0',
920
- label: 'cow',
921
- feedback: {
922
- type: 'custom'
923
- }
924
- }, {
925
- value: '0',
926
- label: 'cow',
927
- correct: true,
928
- feedback: undefined
929
- });
930
- assertPrepareChoice({
931
- mode: 'evaluate'
932
- }, {
933
- correct: 'Correct',
934
- incorrect: 'Incorrect'
935
- }, {
936
- value: '0',
937
- label: 'cow',
938
- feedback: {
939
- type: 'custom',
940
- value: 'Custom Feedback'
941
- }
942
- }, {
943
- value: '0',
944
- label: 'cow',
945
- correct: true,
946
- feedback: 'Custom Feedback'
947
- });
948
- });
949
- });
950
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfaW5kZXgiLCJyZXF1aXJlIiwiX2RlZmF1bHRzIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsImplc3QiLCJtb2NrIiwiZ2V0U2h1ZmZsZWRDaG9pY2VzIiwiY2hvaWNlcyIsInNlc3Npb24iLCJ1cGRhdGVTZXNzaW9uIiwia2V5IiwiY3VycmVudFNodWZmbGVkIiwic2h1ZmZsZWRWYWx1ZXMiLCJmaWx0ZXIiLCJ2IiwibGVuZ3RoIiwicGFydGlhbFNjb3JpbmciLCJlbmFibGVkIiwiY29uZmlnIiwiZW52IiwiY2hvaWNlIiwibCIsImxhYmVsIiwidmFsdWUiLCJxdWVzdGlvbiIsIm1hcmt1cCIsImRpc2FibGVkIiwicHJvbXB0Iiwibm90ZSIsImxhbmd1YWdlIiwibWF4TGVuZ3RoUGVyQ2hvaWNlRW5hYmxlZCIsInBsYXllclNwZWxsQ2hlY2tFbmFibGVkIiwiZGlzcGxheVR5cGUiLCJkZXNjcmliZSIsInEiLCJpdCIsIm0iLCJtb2RlbCIsIm1vZGUiLCJleHBlY3QiLCJ0b0VxdWFsIiwib2JqZWN0Q29udGFpbmluZyIsImZlZWRiYWNrIiwicmVzcG9uc2VDb3JyZWN0IiwicmV0dXJuTW9kZWwiLCJKU09OIiwic3RyaW5naWZ5IiwidW5kZWZpbmVkIiwiYXNzZXJ0R2F0aGVyIiwiZXh0cmEiLCJleHBlY3RlZCIsInRlYWNoZXJJbnN0cnVjdGlvbnMiLCJyYXRpb25hbGUiLCJyZXN1bHQiLCJpZCIsImVsZW1lbnQiLCJtYXhMZW5ndGhQZXJDaG9pY2UiLCJkZWZhdWx0cyIsInNob3dOb3RlIiwicHJvbXB0RW5hYmxlZCIsInJhdGlvbmFsZUVuYWJsZWQiLCJ0ZWFjaGVySW5zdHJ1Y3Rpb25zRW5hYmxlZCIsInN0dWRlbnRJbnN0cnVjdGlvbnNFbmFibGVkIiwiYXNzZXJ0VmlldyIsInJvbGUiLCJhc3NlcnRWaWV3U3R1ZGVudCIsImFzc2VydEV2YWx1YXRlIiwiY29ycmVjdCIsImFzc2VydFNjb3JlIiwic2NvcmUiLCJnZXRTY29yZSIsInJldHVyblNjb3JlIiwiYXNzZXJ0T3V0Y29tZSIsIm1lc3NhZ2UiLCJzZXNzaW9uVmFsdWUiLCJvdXRjb21lIiwiZW1wdHkiLCJ0cmFjZUxvZyIsInByZXBhcmVWYWwiLCJiZWZvcmVFYWNoIiwic2VzcyIsImNyZWF0ZUNvcnJlY3RSZXNwb25zZVNlc3Npb24iLCJub1Jlc3VsdCIsInRvQmVOdWxsIiwiYXNzZXJ0UHJlcGFyZUNob2ljZSIsImRlZmF1bHRGZWVkYmFjayIsInByZXBhckNob2ljZUZuIiwicHJlcGFyZUNob2ljZSIsImluY29ycmVjdCIsInR5cGUiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvX190ZXN0c19fL2luZGV4LnRlc3QuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbW9kZWwsIGdldFNjb3JlLCBvdXRjb21lLCBwcmVwYXJlVmFsLCBjcmVhdGVDb3JyZWN0UmVzcG9uc2VTZXNzaW9uLCBwcmVwYXJlQ2hvaWNlIH0gZnJvbSAnLi4vaW5kZXgnO1xuXG5pbXBvcnQgZGVmYXVsdHMgZnJvbSAnLi4vZGVmYXVsdHMnO1xuXG5qZXN0Lm1vY2soJ0BwaWUtbGliL2NvbnRyb2xsZXItdXRpbHMnLCAoKSA9PiAoe1xuICBnZXRTaHVmZmxlZENob2ljZXM6IChjaG9pY2VzLCBzZXNzaW9uLCB1cGRhdGVTZXNzaW9uLCBrZXkpID0+IHtcbiAgICBjb25zdCBjdXJyZW50U2h1ZmZsZWQgPSAoKHNlc3Npb24gfHwge30pLnNodWZmbGVkVmFsdWVzIHx8IFtdKS5maWx0ZXIoKHYpID0+IHYpO1xuXG4gICAgaWYgKHNlc3Npb24gJiYgIWN1cnJlbnRTaHVmZmxlZC5sZW5ndGggJiYgdXBkYXRlU2Vzc2lvbiAmJiB0eXBlb2YgdXBkYXRlU2Vzc2lvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdXBkYXRlU2Vzc2lvbigpO1xuICAgIH1cblxuICAgIHJldHVybiBjaG9pY2VzO1xuICB9LFxuICBwYXJ0aWFsU2NvcmluZzoge1xuICAgIGVuYWJsZWQ6IChjb25maWcsIGVudikgPT4ge1xuICAgICAgY29uZmlnID0gY29uZmlnIHx8IHt9O1xuICAgICAgZW52ID0gZW52IHx8IHt9O1xuXG4gICAgICBpZiAoY29uZmlnLnBhcnRpYWxTY29yaW5nID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmIChlbnYucGFydGlhbFNjb3JpbmcgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcbiAgfSxcbn0pKTtcblxuY29uc3QgY2hvaWNlID0gKGwsIHYpID0+ICh7IGxhYmVsOiBsLCB2YWx1ZTogdiB9KTtcbmNvbnN0IGNob2ljZXMgPSB7XG4gIDA6IFtjaG9pY2UoJ2NvdycsICcwJyksIGNob2ljZSgnY2F0dGxlJywgJzEnKSwgY2hvaWNlKCdjYWxmJywgJzInKV0sXG4gIDE6IFtjaG9pY2UoJ292ZXInLCAnMCcpLCBjaG9pY2UoJ3Bhc3QnLCAnMScpLCBjaG9pY2UoJ2JleW9uZCcsICcyJyldLFxuICAyOiBbY2hvaWNlKCdtb29uJywgJzAnKV0sXG59O1xuXG5jb25zdCBxdWVzdGlvbiA9IHtcbiAgbWFya3VwOiAnPHA+VGhlIHt7MH19IGp1bXBlZCB7ezF9fSB0aGUge3syfX08L3A+JyxcbiAgZGlzYWJsZWQ6IGZhbHNlLFxuICBjaG9pY2VzLFxuICBwcm9tcHQ6ICdDb21wbGV0ZSB0aGUgc2VudGVuY2UnLFxuICBub3RlOiAnVGhlIGFuc3dlciBzaG93biBhYm92ZSBpcyB0aGUgbW9zdCBjb21tb24gY29ycmVjdCBhbnN3ZXIgZm9yIHRoaXMgaXRlbS4nLFxuICBsYW5ndWFnZTogJ2VuZ2xpc2gnLFxuICBtYXhMZW5ndGhQZXJDaG9pY2VFbmFibGVkOiB0cnVlLFxuICBwbGF5ZXJTcGVsbENoZWNrRW5hYmxlZDogdHJ1ZSxcbiAgZGlzcGxheVR5cGU6ICdibG9jaycsXG59O1xuXG5kZXNjcmliZSgnY29udHJvbGxlcicsICgpID0+IHtcbiAgZGVzY3JpYmUoJ21vZGVsJywgKCkgPT4ge1xuICAgIGxldCBxLCBlbnY7XG5cbiAgICBpdCgnb3V0cHV0IHdoZW4gc2Vzc2lvbiBpcyBkZWZpbmVkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgbSA9IGF3YWl0IG1vZGVsKHF1ZXN0aW9uLCB7IHZhbHVlOiB7IDA6ICdjb3cnLCAxOiAnb3ZlcicsIDI6ICdtb29uJyB9IH0sIHsgbW9kZTogJ2V2YWx1YXRlJyB9KTtcblxuICAgICAgZXhwZWN0KG0pLnRvRXF1YWwoXG4gICAgICAgIGV4cGVjdC5vYmplY3RDb250YWluaW5nKHtcbiAgICAgICAgICBmZWVkYmFjazogeyAwOiAnY29ycmVjdCcsIDE6ICdjb3JyZWN0JywgMjogJ2NvcnJlY3QnIH0sXG4gICAgICAgICAgcmVzcG9uc2VDb3JyZWN0OiB0cnVlLFxuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBjb25zdCByZXR1cm5Nb2RlbCA9IChzZXNzaW9uKSA9PiB7XG4gICAgICBpdChgb3V0cHV0IHdoZW4gc2Vzc2lvbiBpcyAke0pTT04uc3RyaW5naWZ5KHNlc3Npb24pfWAsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgbSA9IGF3YWl0IG1vZGVsKHF1ZXN0aW9uLCBzZXNzaW9uLCB7IG1vZGU6ICdldmFsdWF0ZScgfSk7XG5cbiAgICAgICAgZXhwZWN0KG0pLnRvRXF1YWwoXG4gICAgICAgICAgZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoe1xuICAgICAgICAgICAgZmVlZGJhY2s6IHsgMDogJ2luY29ycmVjdCcsIDE6ICdpbmNvcnJlY3QnLCAyOiAnaW5jb3JyZWN0JyB9LFxuICAgICAgICAgICAgcmVzcG9uc2VDb3JyZWN0OiBmYWxzZSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICByZXR1cm5Nb2RlbCh1bmRlZmluZWQpO1xuICAgIHJldHVybk1vZGVsKG51bGwpO1xuICAgIHJldHVybk1vZGVsKHt9KTtcblxuICAgIGNvbnN0IGFzc2VydEdhdGhlciA9IChsYWJlbCwgZXh0cmEsIHNlc3Npb24sIGV4cGVjdGVkKSA9PiB7XG4gICAgICBpdChgJ21vZGU6IGdhdGhlciwgJHtsYWJlbH0nYCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBxID0ge1xuICAgICAgICAgIC4uLnF1ZXN0aW9uLFxuICAgICAgICAgIHRlYWNoZXJJbnN0cnVjdGlvbnM6ICdUZWFjaGVyIEluc3RydWN0aW9ucycsXG4gICAgICAgICAgcmF0aW9uYWxlOiAnUmF0aW9uYWxlJyxcbiAgICAgICAgICAuLi5leHRyYSxcbiAgICAgICAgfTtcbiAgICAgICAgZW52ID0geyBtb2RlOiAnZ2F0aGVyJyB9O1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG1vZGVsKFxuICAgICAgICAgIHEsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6ICcxJyxcbiAgICAgICAgICAgIGVsZW1lbnQ6ICdleHBsaWNpdC1jb25zdHJ1Y3RlZC1yZXNwb25zZScsXG4gICAgICAgICAgICAuLi5zZXNzaW9uLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZW52LFxuICAgICAgICApO1xuXG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoe1xuICAgICAgICAgIC4uLnF1ZXN0aW9uLFxuICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICAgICAgICBmZWVkYmFjazoge30sXG4gICAgICAgICAgcmVzcG9uc2VDb3JyZWN0OiB1bmRlZmluZWQsXG4gICAgICAgICAgbWF4TGVuZ3RoUGVyQ2hvaWNlOiBbMTAsIDEwLCA3XSxcbiAgICAgICAgICAuLi5lbnYsXG4gICAgICAgICAgLi4uZXhwZWN0ZWQsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGFzc2VydEdhdGhlcihcbiAgICAgICdwcm9tcHRFbmFibGVkLCByYXRpb25hbGVFbmFibGVkIGFuZCB0ZWFjaGVySW5zdHJ1Y3Rpb25zRW5hYmxlZCBub3Qgc2V0JyxcbiAgICAgIHt9LFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIHJhdGlvbmFsZTogZGVmYXVsdHMucmF0aW9uYWxlLFxuICAgICAgICBzaG93Tm90ZTogdHJ1ZSxcbiAgICAgICAgdGVhY2hlckluc3RydWN0aW9uczogZGVmYXVsdHMudGVhY2hlckluc3RydWN0aW9ucyxcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIGFzc2VydEdhdGhlcihcbiAgICAgICdwcm9tcHRFbmFibGVkLCByYXRpb25hbGVFbmFibGVkIGFuZCB0ZWFjaGVySW5zdHJ1Y3Rpb25zRW5hYmxlZCBzZXQgdG8gZmFsc2UnLFxuICAgICAge1xuICAgICAgICBwcm9tcHRFbmFibGVkOiBmYWxzZSxcbiAgICAgICAgcmF0aW9uYWxlRW5hYmxlZDogZmFsc2UsXG4gICAgICAgIHRlYWNoZXJJbnN0cnVjdGlvbnNFbmFibGVkOiBmYWxzZSxcbiAgICAgICAgc3R1ZGVudEluc3RydWN0aW9uc0VuYWJsZWQ6IGZhbHNlLFxuICAgICAgfSxcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBwcm9tcHQ6IGRlZmF1bHRzLnByb21wdCxcbiAgICAgICAgcmF0aW9uYWxlOiBkZWZhdWx0cy5yYXRpb25hbGUsXG4gICAgICAgIHNob3dOb3RlOiB0cnVlLFxuICAgICAgICB0ZWFjaGVySW5zdHJ1Y3Rpb25zOiBkZWZhdWx0cy50ZWFjaGVySW5zdHJ1Y3Rpb25zLFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgY29uc3QgYXNzZXJ0VmlldyA9IChsYWJlbCwgZXh0cmEsIHNlc3Npb24sIGV4cGVjdGVkKSA9PiB7XG4gICAgICBpdChgJ21vZGU6IHZpZXcsICR7bGFiZWx9J2AsIGFzeW5jICgpID0+IHtcbiAgICAgICAgcSA9IHtcbiAgICAgICAgICAuLi5xdWVzdGlvbixcbiAgICAgICAgICB0ZWFjaGVySW5zdHJ1Y3Rpb25zOiAnVGVhY2hlciBJbnN0cnVjdGlvbnMnLFxuICAgICAgICAgIHJhdGlvbmFsZTogJ1JhdGlvbmFsZScsXG4gICAgICAgICAgLi4uZXh0cmEsXG4gICAgICAgIH07XG4gICAgICAgIGVudiA9IHsgbW9kZTogJ3ZpZXcnLCByb2xlOiAnaW5zdHJ1Y3RvcicgfTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBtb2RlbChcbiAgICAgICAgICBxLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiAnMScsXG4gICAgICAgICAgICBlbGVtZW50OiAnZXhwbGljaXQtY29uc3RydWN0ZWQtcmVzcG9uc2UnLFxuICAgICAgICAgICAgLi4uc2Vzc2lvbixcbiAgICAgICAgICB9LFxuICAgICAgICAgIGVudixcbiAgICAgICAgKTtcblxuICAgICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKHtcbiAgICAgICAgICAuLi5xdWVzdGlvbixcbiAgICAgICAgICBkaXNhYmxlZDogdHJ1ZSxcbiAgICAgICAgICBmZWVkYmFjazoge30sXG4gICAgICAgICAgcmVzcG9uc2VDb3JyZWN0OiB1bmRlZmluZWQsXG4gICAgICAgICAgbWF4TGVuZ3RoUGVyQ2hvaWNlOiBbMTAsIDEwLCA3XSxcbiAgICAgICAgICAuLi5lbnYsXG4gICAgICAgICAgLi4uZXhwZWN0ZWQsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGFzc2VydFZpZXcoXG4gICAgICAnICsgcm9sZTogaW5zdHJ1Y3RvciwgcHJvbXB0RW5hYmxlZCwgcmF0aW9uYWxlRW5hYmxlZCBhbmQgdGVhY2hlckluc3RydWN0aW9uc0VuYWJsZWQgc2V0IHRvIGZhbHNlJyxcbiAgICAgIHtcbiAgICAgICAgcHJvbXB0RW5hYmxlZDogZmFsc2UsXG4gICAgICAgIHJhdGlvbmFsZUVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICB0ZWFjaGVySW5zdHJ1Y3Rpb25zRW5hYmxlZDogZmFsc2UsXG4gICAgICAgIHN0dWRlbnRJbnN0cnVjdGlvbnNFbmFibGVkOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgcHJvbXB0OiBkZWZhdWx0cy5wcm9tcHQsXG4gICAgICAgIHJhdGlvbmFsZTogZGVmYXVsdHMucmF0aW9uYWxlLFxuICAgICAgICBzaG93Tm90ZTogdHJ1ZSxcbiAgICAgICAgdGVhY2hlckluc3RydWN0aW9uczogZGVmYXVsdHMudGVhY2hlckluc3RydWN0aW9ucyxcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIGFzc2VydFZpZXcoXG4gICAgICAnICsgcm9sZTogaW5zdHJ1Y3RvciwgcHJvbXB0RW5hYmxlZCwgcmF0aW9uYWxlRW5hYmxlZCBhbmQgdGVhY2hlckluc3RydWN0aW9uc0VuYWJsZWQgdW5zZXQnLFxuICAgICAge30sXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgdGVhY2hlckluc3RydWN0aW9uczogJ1RlYWNoZXIgSW5zdHJ1Y3Rpb25zJyxcbiAgICAgICAgc2hvd05vdGU6IHRydWUsXG4gICAgICAgIHJhdGlvbmFsZTogJ1JhdGlvbmFsZScsXG4gICAgICB9LFxuICAgICk7XG5cbiAgICBjb25zdCBhc3NlcnRWaWV3U3R1ZGVudCA9IChsYWJlbCwgZXh0cmEsIHNlc3Npb24sIGV4cGVjdGVkKSA9PiB7XG4gICAgICBpdChgJ21vZGU6IHZpZXcsICR7bGFiZWx9J2AsIGFzeW5jICgpID0+IHtcbiAgICAgICAgcSA9IHtcbiAgICAgICAgICAuLi5xdWVzdGlvbixcbiAgICAgICAgICB0ZWFjaGVySW5zdHJ1Y3Rpb25zOiAnVGVhY2hlciBJbnN0cnVjdGlvbnMnLFxuICAgICAgICAgIHJhdGlvbmFsZTogJ1JhdGlvbmFsZScsXG4gICAgICAgICAgLi4uZXh0cmEsXG4gICAgICAgIH07XG4gICAgICAgIGVudiA9IHsgbW9kZTogJ3ZpZXcnLCByb2xlOiAnIHN0dWRlbnQnIH07XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgbW9kZWwoXG4gICAgICAgICAgcSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogJzEnLFxuICAgICAgICAgICAgZWxlbWVudDogJ2V4cGxpY2l0LWNvbnN0cnVjdGVkLXJlc3BvbnNlJyxcbiAgICAgICAgICAgIC4uLnNlc3Npb24sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBlbnYsXG4gICAgICAgICk7XG5cbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbCh7XG4gICAgICAgICAgLi4ucXVlc3Rpb24sXG4gICAgICAgICAgZGlzYWJsZWQ6IHRydWUsXG4gICAgICAgICAgZmVlZGJhY2s6IHt9LFxuICAgICAgICAgIHJlc3BvbnNlQ29ycmVjdDogdW5kZWZpbmVkLFxuICAgICAgICAgIG1heExlbmd0aFBlckNob2ljZTogWzEwLCAxMCwgN10sXG4gICAgICAgICAgLi4uZW52LFxuICAgICAgICAgIC4uLmV4cGVjdGVkLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3NlcnRWaWV3U3R1ZGVudChcbiAgICAgICcgKyByb2xlOiBzdHVkZW50LCBwcm9tcHRFbmFibGVkLCByYXRpb25hbGVFbmFibGVkIGFuZCB0ZWFjaGVySW5zdHJ1Y3Rpb25zRW5hYmxlZCBzZXQgdG8gZmFsc2UnLFxuICAgICAge1xuICAgICAgICBwcm9tcHRFbmFibGVkOiBmYWxzZSxcbiAgICAgICAgcmF0aW9uYWxlRW5hYmxlZDogZmFsc2UsXG4gICAgICAgIHRlYWNoZXJJbnN0cnVjdGlvbnNFbmFibGVkOiBmYWxzZSxcbiAgICAgICAgc3R1ZGVudEluc3RydWN0aW9uc0VuYWJsZWQ6IGZhbHNlLFxuICAgICAgfSxcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBwcm9tcHQ6IGRlZmF1bHRzLnByb21wdCxcbiAgICAgICAgcmF0aW9uYWxlOiBkZWZhdWx0cy5yYXRpb25hbGUsXG4gICAgICAgIHNob3dOb3RlOiB0cnVlLFxuICAgICAgICB0ZWFjaGVySW5zdHJ1Y3Rpb25zOiBkZWZhdWx0cy50ZWFjaGVySW5zdHJ1Y3Rpb25zLFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgYXNzZXJ0Vmlld1N0dWRlbnQoXG4gICAgICAnICsgcm9sZTogc3R1ZGVudCwgcHJvbXB0RW5hYmxlZCwgcmF0aW9uYWxlRW5hYmxlZCBhbmQgdGVhY2hlckluc3RydWN0aW9uc0VuYWJsZWQgdW5zZXQnLFxuICAgICAge30sXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgcmF0aW9uYWxlOiBkZWZhdWx0cy5yYXRpb25hbGUsXG4gICAgICAgIHNob3dOb3RlOiB0cnVlLFxuICAgICAgICB0ZWFjaGVySW5zdHJ1Y3Rpb25zOiBkZWZhdWx0cy50ZWFjaGVySW5zdHJ1Y3Rpb25zLFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgY29uc3QgYXNzZXJ0RXZhbHVhdGUgPSAobGFiZWwsIGV4dHJhLCBzZXNzaW9uLCBleHBlY3RlZCkgPT4ge1xuICAgICAgaXQoYCdtb2RlOiBldmFsdWF0ZSwgJHtsYWJlbH0nYCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBxID0ge1xuICAgICAgICAgIC4uLnF1ZXN0aW9uLFxuICAgICAgICAgIHRlYWNoZXJJbnN0cnVjdGlvbnM6ICdUZWFjaGVyIEluc3RydWN0aW9ucycsXG4gICAgICAgICAgcmF0aW9uYWxlOiAnUmF0aW9uYWxlJyxcbiAgICAgICAgICAuLi5leHRyYSxcbiAgICAgICAgfTtcbiAgICAgICAgZW52ID0geyBtb2RlOiAnZXZhbHVhdGUnLCByb2xlOiAnaW5zdHJ1Y3RvcicgfTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBtb2RlbChcbiAgICAgICAgICBxLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiAnMScsXG4gICAgICAgICAgICBlbGVtZW50OiAnZXhwbGljaXQtY29uc3RydWN0ZWQtcmVzcG9uc2UnLFxuICAgICAgICAgICAgLi4uc2Vzc2lvbixcbiAgICAgICAgICB9LFxuICAgICAgICAgIGVudixcbiAgICAgICAgKTtcblxuICAgICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKHtcbiAgICAgICAgICAuLi5xdWVzdGlvbixcbiAgICAgICAgICB0ZWFjaGVySW5zdHJ1Y3Rpb25zOiAnVGVhY2hlciBJbnN0cnVjdGlvbnMnLFxuICAgICAgICAgIHJhdGlvbmFsZTogJ1JhdGlvbmFsZScsXG4gICAgICAgICAgZGlzYWJsZWQ6IHRydWUsXG4gICAgICAgICAgY2hvaWNlczoge1xuICAgICAgICAgICAgMDogW1xuICAgICAgICAgICAgICB7IGxhYmVsOiAnY293JywgdmFsdWU6ICcwJywgY29ycmVjdDogdHJ1ZSB9LFxuICAgICAgICAgICAgICB7IGxhYmVsOiAnY2F0dGxlJywgdmFsdWU6ICcxJywgY29ycmVjdDogdHJ1ZSB9LFxuICAgICAgICAgICAgICB7IGxhYmVsOiAnY2FsZicsIHZhbHVlOiAnMicsIGNvcnJlY3Q6IHRydWUgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAxOiBbXG4gICAgICAgICAgICAgIHsgbGFiZWw6ICdvdmVyJywgdmFsdWU6ICcwJywgY29ycmVjdDogdHJ1ZSB9LFxuICAgICAgICAgICAgICB7IGxhYmVsOiAncGFzdCcsIHZhbHVlOiAnMScsIGNvcnJlY3Q6IHRydWUgfSxcbiAgICAgICAgICAgICAgeyBsYWJlbDogJ2JleW9uZCcsIHZhbHVlOiAnMicsIGNvcnJlY3Q6IHRydWUgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAyOiBbeyBsYWJlbDogJ21vb24nLCB2YWx1ZTogJzAnLCBjb3JyZWN0OiB0cnVlIH1dLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbWF4TGVuZ3RoUGVyQ2hvaWNlOiBbMTAsIDEwLCA3XSxcbiAgICAgICAgICAuLi5lbnYsXG4gICAgICAgICAgLi4uZXhwZWN0ZWQsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGFzc2VydEV2YWx1YXRlKFxuICAgICAgJy0gY29ycmVjdCBhbnN3ZXInLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgMDogJ2NvdycsXG4gICAgICAgICAgMTogJ292ZXInLFxuICAgICAgICAgIDI6ICdtb29uJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGZlZWRiYWNrOiB7IDA6ICdjb3JyZWN0JywgMTogJ2NvcnJlY3QnLCAyOiAnY29ycmVjdCcgfSxcbiAgICAgICAgc2hvd05vdGU6IHRydWUsXG4gICAgICAgIHJlc3BvbnNlQ29ycmVjdDogdHJ1ZSxcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIGFzc2VydEV2YWx1YXRlKFxuICAgICAgJy0gcGFydGlhbGx5IGNvcnJlY3QgYW5zd2VyJyxcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICB2YWx1ZToge1xuICAgICAgICAgIDA6ICdjb3cnLFxuICAgICAgICAgIDE6ICdvdmVyJyxcbiAgICAgICAgICAyOiAnc3VuJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGZlZWRiYWNrOiB7IDA6ICdjb3JyZWN0JywgMTogJ2NvcnJlY3QnLCAyOiAnaW5jb3JyZWN0JyB9LFxuICAgICAgICBzaG93Tm90ZTogdHJ1ZSxcbiAgICAgICAgcmVzcG9uc2VDb3JyZWN0OiBmYWxzZSxcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIGFzc2VydEV2YWx1YXRlKFxuICAgICAgJy0gcGFydGlhbGx5IGNvcnJlY3QgYW5zd2VyIHVzaW5nIGFsdGVybmF0ZXMnLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgMDogJ2NhbGYnLFxuICAgICAgICAgIDE6ICdvdmVyJyxcbiAgICAgICAgICAyOiAnc3VuJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGZlZWRiYWNrOiB7IDA6ICdjb3JyZWN0JywgMTogJ2NvcnJlY3QnLCAyOiAnaW5jb3JyZWN0JyB9LFxuICAgICAgICBzaG93Tm90ZTogdHJ1ZSxcbiAgICAgICAgcmVzcG9uc2VDb3JyZWN0OiBmYWxzZSxcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIGFzc2VydEV2YWx1YXRlKFxuICAgICAgJy0gaW5jb3JyZWN0IGFuc3dlcicsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAwOiAnaGFuJyxcbiAgICAgICAgICAxOiAnYWJvdmUnLFxuICAgICAgICAgIDI6ICdjaGlja2VuJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGZlZWRiYWNrOiB7IDA6ICdpbmNvcnJlY3QnLCAxOiAnaW5jb3JyZWN0JywgMjogJ2luY29ycmVjdCcgfSxcbiAgICAgICAgc2hvd05vdGU6IHRydWUsXG4gICAgICAgIHJlc3BvbnNlQ29ycmVjdDogZmFsc2UsXG4gICAgICB9LFxuICAgICk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdnZXQgc2NvcmUnLCAoKSA9PiB7XG4gICAgY29uc3QgYXNzZXJ0U2NvcmUgPSAoc2Vzc2lvbiwgZXhwZWN0ZWQpID0+IHtcbiAgICAgIGl0KCdyZXR1cm4gc2NvcmUnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHNjb3JlID0gZ2V0U2NvcmUocXVlc3Rpb24sIHNlc3Npb24pO1xuXG4gICAgICAgIGV4cGVjdChzY29yZSkudG9FcXVhbChleHBlY3RlZCk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXNzZXJ0U2NvcmUoeyB2YWx1ZTogeyAwOiAnY293JywgMTogJ292ZXInLCAyOiAnbW9vbicgfSB9LCAxKTtcbiAgICBhc3NlcnRTY29yZSh7IHZhbHVlOiB7IDA6ICdjYXR0bGUnLCAxOiAnb3ZlcicsIDI6ICdtb29uJyB9IH0sIDEpO1xuICAgIGFzc2VydFNjb3JlKHsgdmFsdWU6IHsgMDogJ2NhbGYnLCAxOiAnb3ZlcicsIDI6ICdtb29uJyB9IH0sIDEpO1xuICAgIGFzc2VydFNjb3JlKHsgdmFsdWU6IHsgMDogJ2NvdycsIDE6ICdwYXN0JywgMjogJ21vb24nIH0gfSwgMSk7XG4gICAgYXNzZXJ0U2NvcmUoeyB2YWx1ZTogeyAwOiAnY2F0dGxlJywgMTogJ3Bhc3QnLCAyOiAnbW9vbicgfSB9LCAxKTtcbiAgICBhc3NlcnRTY29yZSh7IHZhbHVlOiB7IDA6ICdjYWxmJywgMTogJ3Bhc3QnLCAyOiAnbW9vbicgfSB9LCAxKTtcbiAgICBhc3NlcnRTY29yZSh7IHZhbHVlOiB7IDA6ICdjb3cnLCAxOiAnYmV5b25kJywgMjogJ21vb24nIH0gfSwgMSk7XG4gICAgYXNzZXJ0U2NvcmUoeyB2YWx1ZTogeyAwOiAnY2F0dGxlJywgMTogJ2JleW9uZCcsIDI6ICdtb29uJyB9IH0sIDEpO1xuICAgIGFzc2VydFNjb3JlKHsgdmFsdWU6IHsgMDogJ2NhbGYnLCAxOiAnYmV5b25kJywgMjogJ21vb24nIH0gfSwgMSk7XG5cbiAgICBhc3NlcnRTY29yZSh7IHZhbHVlOiB7IDA6ICdjYWxmJywgMTogJ3VuZGVyJywgMjogJ21vb24nIH0gfSwgMC42Nyk7XG4gICAgYXNzZXJ0U2NvcmUoeyB2YWx1ZTogeyAwOiAnY2F0JywgMTogJ3VuZGVyJywgMjogJ21vb24nIH0gfSwgMC4zMyk7XG4gICAgYXNzZXJ0U2NvcmUoeyB2YWx1ZTogeyAwOiAnY2F0JywgMTogJ3VuZGVyJywgMjogJ3N1bicgfSB9LCAwKTtcblxuICAgIGNvbnN0IHJldHVyblNjb3JlID0gKHNlc3Npb24pID0+IHtcbiAgICAgIGl0KGBzY29yZSA9IDAgd2hlbiBzZXNzaW9uIGlzICR7SlNPTi5zdHJpbmdpZnkoc2Vzc2lvbil9YCwgKCkgPT4ge1xuICAgICAgICBleHBlY3QoZ2V0U2NvcmUocXVlc3Rpb24sIHNlc3Npb24pKS50b0VxdWFsKDApO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIHJldHVyblNjb3JlKHVuZGVmaW5lZCk7XG4gICAgcmV0dXJuU2NvcmUobnVsbCk7XG4gICAgcmV0dXJuU2NvcmUoe30pO1xuICB9KTtcblxuICBkZXNjcmliZSgnb3V0Y29tZSBwYXJ0aWFsU2NvcmluZyB0ZXN0JywgKCkgPT4ge1xuICAgIGNvbnN0IGFzc2VydE91dGNvbWUgPSAobWVzc2FnZSwgZXh0cmEsIHNlc3Npb25WYWx1ZSwgZW52LCBleHBlY3RlZCkgPT4ge1xuICAgICAgaXQobWVzc2FnZSwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBvdXRjb21lKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIC4uLnF1ZXN0aW9uLFxuICAgICAgICAgICAgLi4uZXh0cmEsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzZXNzaW9uVmFsdWUsXG4gICAgICAgICAgZW52LFxuICAgICAgICApO1xuXG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoZXhwZWN0ZWQpKTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3NlcnRPdXRjb21lKFxuICAgICAgJ2VsZW1lbnQucGFydGlhbFNjb3JpbmcgPSB0cnVlJyxcbiAgICAgIHsgcGFydGlhbFNjb3Jpbmc6IHRydWUgfSxcbiAgICAgIHsgdmFsdWU6IHsgMDogJ2NhbGYnLCAxOiAndW5kZXInLCAyOiAnbW9vbicgfSB9LFxuICAgICAgeyBtb2RlOiAnZXZhbHVhdGUnIH0sXG4gICAgICB7IHNjb3JlOiAwLjY3IH0sXG4gICAgKTtcblxuICAgIGFzc2VydE91dGNvbWUoXG4gICAgICAnZWxlbWVudC5wYXJ0aWFsU2NvcmluZyA9IGZhbHNlJyxcbiAgICAgIHsgcGFydGlhbFNjb3Jpbmc6IGZhbHNlIH0sXG4gICAgICB7IHZhbHVlOiB7IDA6ICdjYWxmJywgMTogJ3VuZGVyJywgMjogJ21vb24nIH0gfSxcbiAgICAgIHsgbW9kZTogJ2V2YWx1YXRlJyB9LFxuICAgICAgeyBzY29yZTogMCB9LFxuICAgICk7XG5cbiAgICBhc3NlcnRPdXRjb21lKFxuICAgICAgJ2VsZW1lbnQucGFydGlhbFNjb3JpbmcgPSBmYWxzZSwgZW52LnBhcnRpYWxTY29yaW5nID0gdHJ1ZScsXG4gICAgICB7IHBhcnRpYWxTY29yaW5nOiBmYWxzZSB9LFxuICAgICAgeyB2YWx1ZTogeyAwOiAnY2FsZicsIDE6ICd1bmRlcicsIDI6ICdtb29uJyB9IH0sXG4gICAgICB7XG4gICAgICAgIG1vZGU6ICdldmFsdWF0ZScsXG4gICAgICAgIHBhcnRpYWxTY29yaW5nOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIHsgc2NvcmU6IDAgfSxcbiAgICApO1xuXG4gICAgYXNzZXJ0T3V0Y29tZShcbiAgICAgICdlbGVtZW50LnBhcnRpYWxTY29yaW5nID0gdHJ1ZSwgZW52LnBhcnRpYWxTY29yaW5nID0gZmFsc2UnLFxuICAgICAgeyBwYXJ0aWFsU2NvcmluZzogdHJ1ZSB9LFxuICAgICAgeyB2YWx1ZTogeyAwOiAnY2FsZicsIDE6ICd1bmRlcicsIDI6ICdtb29uJyB9IH0sXG4gICAgICB7XG4gICAgICAgIG1vZGU6ICdldmFsdWF0ZScsXG4gICAgICAgIHBhcnRpYWxTY29yaW5nOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgICB7IHNjb3JlOiAwIH0sXG4gICAgKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ291dGNvbWUnLCAoKSA9PiB7XG4gICAgY29uc3QgYXNzZXJ0T3V0Y29tZSA9IChwYXJ0aWFsU2NvcmluZywgc2Vzc2lvblZhbHVlLCBleHBlY3RlZCkgPT4ge1xuICAgICAgaXQoYHBhcnRpYWwgc2NvcmUgJHtwYXJ0aWFsU2NvcmluZyA/ICdlbmFibGVkJyA6ICcnfWAsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgb3V0Y29tZShcbiAgICAgICAgICB7XG4gICAgICAgICAgICAuLi5xdWVzdGlvbixcbiAgICAgICAgICAgIHBhcnRpYWxTY29yaW5nLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgc2Vzc2lvblZhbHVlLFxuICAgICAgICApO1xuXG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoZXhwZWN0ZWQpKTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3NlcnRPdXRjb21lKHRydWUsIHsgdmFsdWU6IHsgMDogJ2NvdycsIDE6ICdvdmVyJywgMjogJ21vb24nIH0gfSwgeyBzY29yZTogMSwgZW1wdHk6IGZhbHNlIH0pO1xuICAgIGFzc2VydE91dGNvbWUodHJ1ZSwgeyB2YWx1ZTogeyAwOiAnY2F0dGxlJywgMTogJ292ZXInLCAyOiAnbW9vbicgfSB9LCB7IHNjb3JlOiAxLCBlbXB0eTogZmFsc2UgfSk7XG4gICAgYXNzZXJ0T3V0Y29tZSh0cnVlLCB7IHZhbHVlOiB7IDA6ICdjYWxmJywgMTogJ292ZXInLCAyOiAnbW9vbicgfSB9LCB7IHNjb3JlOiAxLCBlbXB0eTogZmFsc2UgfSk7XG4gICAgYXNzZXJ0T3V0Y29tZSh0cnVlLCB7IHZhbHVlOiB7IDA6ICdjb3cnLCAxOiAncGFzdCcsIDI6ICdtb29uJyB9IH0sIHsgc2NvcmU6IDEsIGVtcHR5OiBmYWxzZSB9KTtcbiAgICBhc3NlcnRPdXRjb21lKHRydWUsIHsgdmFsdWU6IHsgMDogJ2NhdHRsZScsIDE6ICdwYXN0JywgMjogJ21vb24nIH0gfSwgeyBzY29yZTogMSwgZW1wdHk6IGZhbHNlIH0pO1xuICAgIGFzc2VydE91dGNvbWUodHJ1ZSwgeyB2YWx1ZTogeyAwOiAnY2FsZicsIDE6ICdwYXN0JywgMjogJ21vb24nIH0gfSwgeyBzY29yZTogMSwgZW1wdHk6IGZhbHNlIH0pO1xuICAgIGFzc2VydE91dGNvbWUodHJ1ZSwgeyB2YWx1ZTogeyAwOiAnY293JywgMTogJ2JleW9uZCcsIDI6ICdtb29uJyB9IH0sIHsgc2NvcmU6IDEsIGVtcHR5OiBmYWxzZSB9KTtcbiAgICBhc3NlcnRPdXRjb21lKHRydWUsIHsgdmFsdWU6IHsgMDogJ2NhdHRsZScsIDE6ICdiZXlvbmQnLCAyOiAnbW9vbicgfSB9LCB7IHNjb3JlOiAxLCBlbXB0eTogZmFsc2UgfSk7XG4gICAgYXNzZXJ0T3V0Y29tZSh0cnVlLCB7IHZhbHVlOiB7IDA6ICdjYWxmJywgMTogJ2JleW9uZCcsIDI6ICdtb29uJyB9IH0sIHsgc2NvcmU6IDEsIGVtcHR5OiBmYWxzZSB9KTtcbiAgICBhc3NlcnRPdXRjb21lKHRydWUsIHsgdmFsdWU6IHsgMDogJ2NhbGYnLCAxOiAndW5kZXInLCAyOiAnbW9vbicgfSB9LCB7IHNjb3JlOiAwLjY3LCBlbXB0eTogZmFsc2UgfSk7XG4gICAgYXNzZXJ0T3V0Y29tZSh0cnVlLCB7IHZhbHVlOiB7IDA6ICdjYXQnLCAxOiAndW5kZXInLCAyOiAnbW9vbicgfSB9LCB7IHNjb3JlOiAwLjMzLCBlbXB0eTogZmFsc2UgfSk7XG4gICAgYXNzZXJ0T3V0Y29tZSh0cnVlLCB7IHZhbHVlOiB7IDA6ICdjYXQnLCAxOiAndW5kZXInLCAyOiAnc3VuJyB9IH0sIHsgc2NvcmU6IDAsIGVtcHR5OiBmYWxzZSB9KTtcblxuICAgIGFzc2VydE91dGNvbWUoZmFsc2UsIHsgdmFsdWU6IHsgMDogJ2NvdycsIDE6ICdvdmVyJywgMjogJ21vb24nIH0gfSwgeyBzY29yZTogMSwgZW1wdHk6IGZhbHNlIH0pO1xuICAgIGFzc2VydE91dGNvbWUoZmFsc2UsIHsgdmFsdWU6IHsgMDogJ2NhdHRsZScsIDE6ICdvdmVyJywgMjogJ21vb24nIH0gfSwgeyBzY29yZTogMSwgZW1wdHk6IGZhbHNlIH0pO1xuICAgIGFzc2VydE91dGNvbWUoZmFsc2UsIHsgdmFsdWU6IHsgMDogJ2NhbGYnLCAxOiAnb3ZlcicsIDI6ICdtb29uJyB9IH0sIHsgc2NvcmU6IDEsIGVtcHR5OiBmYWxzZSB9KTtcbiAgICBhc3NlcnRPdXRjb21lKGZhbHNlLCB7IHZhbHVlOiB7IDA6ICdjb3cnLCAxOiAncGFzdCcsIDI6ICdtb29uJyB9IH0sIHsgc2NvcmU6IDEsIGVtcHR5OiBmYWxzZSB9KTtcbiAgICBhc3NlcnRPdXRjb21lKGZhbHNlLCB7IHZhbHVlOiB7IDA6ICdjYXR0bGUnLCAxOiAncGFzdCcsIDI6ICdtb29uJyB9IH0sIHsgc2NvcmU6IDEsIGVtcHR5OiBmYWxzZSB9KTtcbiAgICBhc3NlcnRPdXRjb21lKGZhbHNlLCB7IHZhbHVlOiB7IDA6ICdjYWxmJywgMTogJ3Bhc3QnLCAyOiAnbW9vbicgfSB9LCB7IHNjb3JlOiAxLCBlbXB0eTogZmFsc2UgfSk7XG4gICAgYXNzZXJ0T3V0Y29tZShmYWxzZSwgeyB2YWx1ZTogeyAwOiAnY293JywgMTogJ2JleW9uZCcsIDI6ICdtb29uJyB9IH0sIHsgc2NvcmU6IDEsIGVtcHR5OiBmYWxzZSB9KTtcbiAgICBhc3NlcnRPdXRjb21lKGZhbHNlLCB7IHZhbHVlOiB7IDA6ICdjYXR0bGUnLCAxOiAnYmV5b25kJywgMjogJ21vb24nIH0gfSwgeyBzY29yZTogMSwgZW1wdHk6IGZhbHNlIH0pO1xuICAgIGFzc2VydE91dGNvbWUoZmFsc2UsIHsgdmFsdWU6IHsgMDogJ2NhbGYnLCAxOiAnYmV5b25kJywgMjogJ21vb24nIH0gfSwgeyBzY29yZTogMSwgZW1wdHk6IGZhbHNlIH0pO1xuICAgIGFzc2VydE91dGNvbWUoZmFsc2UsIHsgdmFsdWU6IHsgMDogJ2NhbGYnLCAxOiAndW5kZXInLCAyOiAnbW9vbicgfSB9LCB7IHNjb3JlOiAwLCBlbXB0eTogZmFsc2UgfSk7XG4gICAgYXNzZXJ0T3V0Y29tZShmYWxzZSwgeyB2YWx1ZTogeyAwOiAnY2F0JywgMTogJ3VuZGVyJywgMjogJ21vb24nIH0gfSwgeyBzY29yZTogMCwgZW1wdHk6IGZhbHNlIH0pO1xuICAgIGFzc2VydE91dGNvbWUoZmFsc2UsIHsgdmFsdWU6IHsgMDogJ2NhdCcsIDE6ICd1bmRlcicsIDI6ICdzdW4nIH0gfSwgeyBzY29yZTogMCwgZW1wdHk6IGZhbHNlIH0pO1xuXG4gICAgY29uc3QgcmV0dXJuTW9kZWwgPSAoc2Vzc2lvbikgPT4ge1xuICAgICAgaXQoYGVtcHR5OiB0cnVlIHdoZW4gc2Vzc2lvbiBpcyAke0pTT04uc3RyaW5naWZ5KHNlc3Npb24pfWAsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgbSA9IGF3YWl0IG91dGNvbWUocXVlc3Rpb24sIHNlc3Npb24pO1xuXG4gICAgICAgIGV4cGVjdChtKS50b0VxdWFsKHsgc2NvcmU6IDAsIGVtcHR5OiB0cnVlLCB0cmFjZUxvZzogWydTdHVkZW50IGRpZCBub3QgZmlsbCBhbnkgcmVzcG9uc2UgYXJlYXMuIFNjb3JlOiAwLiddIH0pO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIHJldHVybk1vZGVsKHVuZGVmaW5lZCk7XG4gICAgcmV0dXJuTW9kZWwobnVsbCk7XG4gICAgcmV0dXJuTW9kZWwoe30pO1xuICB9KTtcblxuICBkZXNjcmliZSgncHJlcGFyZVZhbCcsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHJldHVybiBlbXB0eSBzdHJpbmcgb24gbnVsbCBvciB1bmRlZmluZWQnLCAoKSA9PiB7XG4gICAgICBleHBlY3QocHJlcGFyZVZhbChudWxsKSkudG9FcXVhbCgnJyk7XG4gICAgICBleHBlY3QocHJlcGFyZVZhbCh1bmRlZmluZWQpKS50b0VxdWFsKCcnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVtb3ZlIGh0bWwgdGFncycsICgpID0+IHtcbiAgICAgIGV4cGVjdChwcmVwYXJlVmFsKCc8ZGl2PkZvbyBCYXI8L2Rpdj4nKSkudG9FcXVhbCgnRm9vIEJhcicpO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2NvcnJlY3QgcmVzcG9uc2UnLCAoKSA9PiB7XG4gICAgICBsZXQgcXVlc3Rpb247XG4gICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgcXVlc3Rpb24gPSB7XG4gICAgICAgICAgY2hvaWNlcyxcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgncmV0dXJucyBjb3JyZWN0IHJlc3BvbnNlIGlmIGVudiBpcyBjb3JyZWN0JywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBzZXNzID0gYXdhaXQgY3JlYXRlQ29ycmVjdFJlc3BvbnNlU2Vzc2lvbihxdWVzdGlvbiwge1xuICAgICAgICAgIG1vZGU6ICdnYXRoZXInLFxuICAgICAgICAgIHJvbGU6ICdpbnN0cnVjdG9yJyxcbiAgICAgICAgfSk7XG4gICAgICAgIGV4cGVjdChzZXNzKS50b0VxdWFsKHsgaWQ6ICcxJywgdmFsdWU6IHsgMDogJ2NvdycsIDE6ICdvdmVyJywgMjogJ21vb24nIH0gfSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3JldHVybnMgbnVsbCBlbnYgaXMgc3R1ZGVudCcsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3Qgbm9SZXN1bHQgPSBhd2FpdCBjcmVhdGVDb3JyZWN0UmVzcG9uc2VTZXNzaW9uKHF1ZXN0aW9uLCB7IG1vZGU6ICdnYXRoZXInLCByb2xlOiAnc3R1ZGVudCcgfSk7XG4gICAgICAgIGV4cGVjdChub1Jlc3VsdCkudG9CZU51bGwoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnY29ycmVjdCByZXNwb25zZScsICgpID0+IHtcbiAgICBpdCgncmV0dXJucyBjb3JyZWN0IHJlc3BvbnNlIGlmIHJvbGUgaXMgaW5zdHJ1Y3RvciBhbmQgbW9kZSBpcyBnYXRoZXInLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBzZXNzID0gYXdhaXQgY3JlYXRlQ29ycmVjdFJlc3BvbnNlU2Vzc2lvbihxdWVzdGlvbiwge1xuICAgICAgICBtb2RlOiAnZ2F0aGVyJyxcbiAgICAgICAgcm9sZTogJ2luc3RydWN0b3InLFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChzZXNzKS50b0VxdWFsKHsgaWQ6ICcxJywgdmFsdWU6IHsgMDogJ2NvdycsIDE6ICdvdmVyJywgMjogJ21vb24nIH0gfSk7XG4gICAgfSk7XG5cbiAgICBpdCgncmV0dXJucyBjb3JyZWN0IHJlc3BvbnNlIGlmIHJvbGUgaXMgaW5zdHJ1Y3RvciBhbmQgbW9kZSBpcyB2aWV3JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3Qgc2VzcyA9IGF3YWl0IGNyZWF0ZUNvcnJlY3RSZXNwb25zZVNlc3Npb24ocXVlc3Rpb24sIHtcbiAgICAgICAgbW9kZTogJ3ZpZXcnLFxuICAgICAgICByb2xlOiAnaW5zdHJ1Y3RvcicsXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KHNlc3MpLnRvRXF1YWwoeyBpZDogJzEnLCB2YWx1ZTogeyAwOiAnY293JywgMTogJ292ZXInLCAyOiAnbW9vbicgfSB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdyZXR1cm5zIG51bGwgaWYgbW9kZSBpcyBldmFsdWF0ZScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IG5vUmVzdWx0ID0gYXdhaXQgY3JlYXRlQ29ycmVjdFJlc3BvbnNlU2Vzc2lvbihxdWVzdGlvbiwgeyBtb2RlOiAnZXZhbHVhdGUnLCByb2xlOiAnaW5zdHJ1Y3RvcicgfSk7XG5cbiAgICAgIGV4cGVjdChub1Jlc3VsdCkudG9CZU51bGwoKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZXR1cm5zIG51bGwgaWYgcm9sZSBpcyBzdHVkZW50JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3Qgbm9SZXN1bHQgPSBhd2FpdCBjcmVhdGVDb3JyZWN0UmVzcG9uc2VTZXNzaW9uKHF1ZXN0aW9uLCB7IG1vZGU6ICdnYXRoZXInLCByb2xlOiAnc3R1ZGVudCcgfSk7XG5cbiAgICAgIGV4cGVjdChub1Jlc3VsdCkudG9CZU51bGwoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3ByZXBhcmVDaG9pY2UnLCAoKSA9PiB7XG4gICAgY29uc3QgYXNzZXJ0UHJlcGFyZUNob2ljZSA9IChlbnYsIGRlZmF1bHRGZWVkYmFjaywgY2hvaWNlLCBleHBlY3RlZCkgPT4ge1xuICAgICAgY29uc3QgcHJlcGFyQ2hvaWNlRm4gPSBwcmVwYXJlQ2hvaWNlKGVudi5tb2RlLCBkZWZhdWx0RmVlZGJhY2spO1xuXG4gICAgICBpdChgcHJlcGFyZSBjaG9pY2VzIGluICR7ZW52Lm1vZGV9IG1vZGU6ICR7SlNPTi5zdHJpbmdpZnkoY2hvaWNlKX0gLT4gJHtKU09OLnN0cmluZ2lmeShleHBlY3RlZCl9YCwgKCkgPT4ge1xuICAgICAgICBleHBlY3QocHJlcGFyQ2hvaWNlRm4oY2hvaWNlKSkudG9FcXVhbChleHBlY3RlZCk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXNzZXJ0UHJlcGFyZUNob2ljZShcbiAgICAgIHsgbW9kZTogJ2dhdGhlcicgfSxcbiAgICAgIHsgY29ycmVjdDogJ0NvcnJlY3QnLCBpbmNvcnJlY3Q6ICdJbmNvcnJlY3QnIH0sXG4gICAgICB7IHZhbHVlOiAnMCcsIGxhYmVsOiAnY293JyB9LFxuICAgICAgeyB2YWx1ZTogJzAnLCBsYWJlbDogJ2NvdycgfSxcbiAgICApO1xuXG4gICAgYXNzZXJ0UHJlcGFyZUNob2ljZShcbiAgICAgIHsgbW9kZTogJ3ZpZXcnIH0sXG4gICAgICB7IGNvcnJlY3Q6ICdDb3JyZWN0JywgaW5jb3JyZWN0OiAnSW5jb3JyZWN0JyB9LFxuICAgICAgeyB2YWx1ZTogJzAnLCBsYWJlbDogJ2NvdycgfSxcbiAgICAgIHsgdmFsdWU6ICcwJywgbGFiZWw6ICdjb3cnIH0sXG4gICAgKTtcblxuICAgIGFzc2VydFByZXBhcmVDaG9pY2UoXG4gICAgICB7IG1vZGU6ICdldmFsdWF0ZScgfSxcbiAgICAgIHsgY29ycmVjdDogJ0NvcnJlY3QnLCBpbmNvcnJlY3Q6ICdJbmNvcnJlY3QnIH0sXG4gICAgICB7IHZhbHVlOiAnMCcsIGxhYmVsOiAnY293JyB9LFxuICAgICAgeyB2YWx1ZTogJzAnLCBsYWJlbDogJ2NvdycsIGNvcnJlY3Q6IHRydWUgfSxcbiAgICApO1xuXG4gICAgYXNzZXJ0UHJlcGFyZUNob2ljZShcbiAgICAgIHsgbW9kZTogJ2V2YWx1YXRlJyB9LFxuICAgICAgeyBjb3JyZWN0OiAnQ29ycmVjdCcsIGluY29ycmVjdDogJ0luY29ycmVjdCcgfSxcbiAgICAgIHsgdmFsdWU6ICcwJywgbGFiZWw6ICdjb3cnLCBmZWVkYmFjazogeyB0eXBlOiAnZGVmYXVsdCcgfSB9LFxuICAgICAgeyB2YWx1ZTogJzAnLCBsYWJlbDogJ2NvdycsIGNvcnJlY3Q6IHRydWUsIGZlZWRiYWNrOiAnQ29ycmVjdCcgfSxcbiAgICApO1xuXG4gICAgYXNzZXJ0UHJlcGFyZUNob2ljZShcbiAgICAgIHsgbW9kZTogJ2V2YWx1YXRlJyB9LFxuICAgICAgeyBjb3JyZWN0OiAnQ29ycmVjdCcsIGluY29ycmVjdDogJ0luY29ycmVjdCcgfSxcbiAgICAgIHsgdmFsdWU6ICcwJywgbGFiZWw6ICdjb3cnLCBmZWVkYmFjazogeyB0eXBlOiAnY3VzdG9tJyB9IH0sXG4gICAgICB7IHZhbHVlOiAnMCcsIGxhYmVsOiAnY293JywgY29ycmVjdDogdHJ1ZSwgZmVlZGJhY2s6IHVuZGVmaW5lZCB9LFxuICAgICk7XG5cbiAgICBhc3NlcnRQcmVwYXJlQ2hvaWNlKFxuICAgICAgeyBtb2RlOiAnZXZhbHVhdGUnIH0sXG4gICAgICB7IGNvcnJlY3Q6ICdDb3JyZWN0JywgaW5jb3JyZWN0OiAnSW5jb3JyZWN0JyB9LFxuICAgICAgeyB2YWx1ZTogJzAnLCBsYWJlbDogJ2NvdycsIGZlZWRiYWNrOiB7IHR5cGU6ICdjdXN0b20nLCB2YWx1ZTogJ0N1c3RvbSBGZWVkYmFjaycgfSB9LFxuICAgICAgeyB2YWx1ZTogJzAnLCBsYWJlbDogJ2NvdycsIGNvcnJlY3Q6IHRydWUsIGZlZWRiYWNrOiAnQ3VzdG9tIEZlZWRiYWNrJyB9LFxuICAgICk7XG4gIH0pO1xufSk7XG4iXSwibWFwcGluZ3MiOiI7OztBQUFBLElBQUFBLE1BQUEsR0FBQUMsT0FBQTtBQUVBLElBQUFDLFNBQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUVBRyxJQUFJLENBQUNDLElBQUksQ0FBQywyQkFBMkIsRUFBRSxPQUFPO0VBQzVDQyxrQkFBa0IsRUFBRUEsQ0FBQ0MsT0FBTyxFQUFFQyxPQUFPLEVBQUVDLGFBQWEsRUFBRUMsR0FBRyxLQUFLO0lBQzVELE1BQU1DLGVBQWUsR0FBRyxDQUFDLENBQUNILE9BQU8sSUFBSSxDQUFDLENBQUMsRUFBRUksY0FBYyxJQUFJLEVBQUUsRUFBRUMsTUFBTSxDQUFFQyxDQUFDLElBQUtBLENBQUMsQ0FBQztJQUUvRSxJQUFJTixPQUFPLElBQUksQ0FBQ0csZUFBZSxDQUFDSSxNQUFNLElBQUlOLGFBQWEsSUFBSSxPQUFPQSxhQUFhLEtBQUssVUFBVSxFQUFFO01BQzlGQSxhQUFhLENBQUMsQ0FBQztJQUNqQjtJQUVBLE9BQU9GLE9BQU87RUFDaEIsQ0FBQztFQUNEUyxjQUFjLEVBQUU7SUFDZEMsT0FBTyxF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QyxFQUFFLENBQUMsQ0FBQztJQUM3RDZDLFdBQVcsQ0FBQztNQUFFN0MsS0FBSyxFQUFFO1FBQUUsQ0FBQyxFQUFFLFFBQVE7UUFBRSxDQUFDLEVBQUUsTUFBTTtRQUFFLENBQUMsRUFBRTtNQUFPO0lBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoRTZDLFdBQVcsQ0FBQztNQUFFN0MsS0FBSyxFQUFFO1FBQUUsQ0FBQyxFQUFFLE1BQU07UUFBRSxDQUFDLEVBQUUsTUFBTTtRQUFFLENBQUMsRUFBRTtNQUFPO0lBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM5RDZDLFdBQVcsQ0FBQztNQUFFN0MsS0FBSyxFQUFFO1FBQUUsQ0FBQyxFQUFFLEtBQUs7UUFBRSxDQUFDLEVBQUUsTUFBTTtRQUFFLENBQUMsRUFBRTtNQUFPO0lBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM3RDZDLFdBQVcsQ0FBQztNQUFFN0MsS0FBSyxFQUFFO1FBQUUsQ0FBQyxFQUFFLFFBQVE7UUFBRSxDQUFDLEVBQUUsTUFBTTtRQUFFLENBQUMsRUFBRTtNQUFPO0lBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoRTZDLFdBQVcsQ0FBQztNQUFFN0MsS0FBSyxFQUFFO1FBQUUsQ0FBQyxFQUFFLE1BQU07UUFBRSxDQUFDLEVBQUUsTUFBTTtRQUFFLENBQUMsRUFBRTtNQUFPO0lBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM5RDZDLFdBQVcsQ0FBQztNQUFFN0MsS0FBSyxFQUFFO1FBQUUsQ0FBQyxFQUFFLEtBQUs7UUFBRSxDQUFDLEVBQUUsUUFBUTtRQUFFLENBQUMsRUFBRTtNQUFPO0lBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMvRDZDLFdBQVcsQ0FBQztNQUFFN0MsS0FBSyxFQUFFO1FBQUUsQ0FBQyxFQUFFLFFBQVE7UUFBRSxDQUFDLEVBQUUsUUFBUTtRQUFFLENBQUMsRUFBRTtNQUFPO0lBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNsRTZDLFdBQVcsQ0FBQztNQUFFN0MsS0FBSyxFQUFFO1FBQUUsQ0FB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