@pie-element/math-inline 7.0.4-next.69 → 7.1.0-next.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,2344 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
6
+
7
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
8
+
9
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
10
+
11
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
12
+
13
+ var _mathValidation = require("@pie-framework/math-validation");
14
+
15
+ var _index = require("../index");
16
+
17
+ var _templateObject, _templateObject2;
18
+
19
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
20
+
21
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
22
+
23
+ jest.mock('@pie-framework/math-validation', function () {
24
+ return {
25
+ latexEqual: jest.fn().mockReturnValue(true)
26
+ };
27
+ });
28
+ var defaultModel = {
29
+ responseType: 'Advanced Multi',
30
+ equationEditor: '3',
31
+ expression: '{{response}} = {{response}} \\text{eggs}',
32
+ prompt: '<p>Sam sells baskets of eggs at his farm stand. He sold 12 baskets and wrote the number sentence below to show how many eggs he sold in all.</p><p><span class="equation-block"><math xmlns="http://www.w3.org/1998/Math/MathML" >\n <mrow>\n <mn>12</mn><mo>&#x00D7;</mo><mo>&#x25A1;</mo><mo>=</mo><mn>72</mn>\n </mrow>\n</math> </span></p><p>What <span class="relative-emphasis">division</span> number sentence can be used to show how many eggs were in each basket?</p><p>Use the on-screen keyboard to type your number sentence and answer in the box.</p>',
33
+ responses: [{
34
+ id: '1',
35
+ answer: '72\\div12=6\\text{eggs}',
36
+ alternates: {
37
+ 1: '6=72\\div12\\text{eggs}',
38
+ 2: '\\frac{72}{12}=6\\text{eggs}',
39
+ 3: '6=\\frac{72}{12}\\text{eggs}'
40
+ },
41
+ validation: 'literal'
42
+ }],
43
+ note: 'The answer shown above is the primary correct answer specified by the author for this item, but other answers may also be recognized as correct.',
44
+ customKeys: ['\\left(\\right)', '\\frac{}{}', 'x\\frac{}{}'],
45
+ id: 1
46
+ };
47
+
48
+ var mkQuestion = function mkQuestion(model) {
49
+ return model || defaultModel;
50
+ };
51
+
52
+ describe('model', function () {
53
+ var result, question, session, env, outcomeResult;
54
+ describe('gather', function () {
55
+ beforeEach( /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee() {
56
+ return _regenerator["default"].wrap(function _callee$(_context) {
57
+ while (1) {
58
+ switch (_context.prev = _context.next) {
59
+ case 0:
60
+ question = mkQuestion();
61
+ session = {};
62
+ env = {
63
+ mode: 'gather'
64
+ };
65
+ _context.next = 5;
66
+ return (0, _index.model)(question, session, env);
67
+
68
+ case 5:
69
+ result = _context.sent;
70
+
71
+ case 6:
72
+ case "end":
73
+ return _context.stop();
74
+ }
75
+ }
76
+ }, _callee);
77
+ })));
78
+ it('returns disabled:false', function () {
79
+ expect(result.disabled).toEqual(false);
80
+ });
81
+ it('returns undefined for correctness ', function () {
82
+ expect(result.correctness).toEqual(undefined);
83
+ });
84
+ it('returns undefined for correctResponse ', function () {
85
+ expect(result.correctResponse).toEqual(undefined);
86
+ });
87
+ it('returns undefined for feedback', function () {
88
+ expect(result.feedback).toEqual(undefined);
89
+ });
90
+ it('returns empty array for responses', function () {
91
+ expect(result.config.responses).toEqual([]);
92
+ });
93
+ it('returns null for rationale', function () {
94
+ expect(result.config.rationale).toEqual(null);
95
+ });
96
+ it('returns null for teacher instructions', function () {
97
+ expect(result.config.teacherInstructions).toEqual(null);
98
+ });
99
+ });
100
+ describe('view', function () {
101
+ beforeEach( /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2() {
102
+ return _regenerator["default"].wrap(function _callee2$(_context2) {
103
+ while (1) {
104
+ switch (_context2.prev = _context2.next) {
105
+ case 0:
106
+ question = mkQuestion();
107
+ session = {};
108
+ env = {
109
+ mode: 'view'
110
+ };
111
+ _context2.next = 5;
112
+ return (0, _index.model)(question, session, env);
113
+
114
+ case 5:
115
+ result = _context2.sent;
116
+
117
+ case 6:
118
+ case "end":
119
+ return _context2.stop();
120
+ }
121
+ }
122
+ }, _callee2);
123
+ })));
124
+ it('returns disabled:true', function () {
125
+ expect(result.disabled).toEqual(true);
126
+ });
127
+ it('returns undefined for correctness ', function () {
128
+ expect(result.correctness).toEqual(undefined);
129
+ });
130
+ it('returns undefined for correctResponse ', function () {
131
+ expect(result.correctResponse).toEqual(undefined);
132
+ });
133
+ it('returns default correct for feedback', function () {
134
+ expect(result.feedback).toEqual(undefined);
135
+ });
136
+ it('returns empty array for responses', function () {
137
+ expect(result.config.responses).toEqual([]);
138
+ });
139
+ });
140
+ describe('evaluate - empty', function () {
141
+ beforeEach( /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3() {
142
+ return _regenerator["default"].wrap(function _callee3$(_context3) {
143
+ while (1) {
144
+ switch (_context3.prev = _context3.next) {
145
+ case 0:
146
+ question = mkQuestion();
147
+ session = {};
148
+ env = {
149
+ mode: 'evaluate'
150
+ };
151
+ _context3.next = 5;
152
+ return (0, _index.model)(question, session, env);
153
+
154
+ case 5:
155
+ result = _context3.sent;
156
+
157
+ case 6:
158
+ case "end":
159
+ return _context3.stop();
160
+ }
161
+ }
162
+ }, _callee3);
163
+ })));
164
+ it('returns disabled:true', function () {
165
+ expect(result.disabled).toEqual(true);
166
+ });
167
+ it('returns empty for correctness ', function () {
168
+ expect(result.correctness).toEqual({
169
+ correct: false,
170
+ correctness: 'unanswered',
171
+ score: '0%'
172
+ });
173
+ });
174
+ });
175
+ describe('evaluate - correct', function () {
176
+ beforeEach( /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee4() {
177
+ return _regenerator["default"].wrap(function _callee4$(_context4) {
178
+ while (1) {
179
+ switch (_context4.prev = _context4.next) {
180
+ case 0:
181
+ env = {
182
+ mode: 'evaluate'
183
+ };
184
+
185
+ case 1:
186
+ case "end":
187
+ return _context4.stop();
188
+ }
189
+ }
190
+ }, _callee4);
191
+ })));
192
+ it('returns correct for correctness', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee5() {
193
+ return _regenerator["default"].wrap(function _callee5$(_context5) {
194
+ while (1) {
195
+ switch (_context5.prev = _context5.next) {
196
+ case 0:
197
+ question = mkQuestion();
198
+ session = {
199
+ completeAnswer: '72\\div12=6\\text{eggs}'
200
+ };
201
+ env = {
202
+ mode: 'evaluate'
203
+ };
204
+ _context5.next = 5;
205
+ return (0, _index.model)(question, session, env);
206
+
207
+ case 5:
208
+ result = _context5.sent;
209
+ expect(result.correctness.correctness).toEqual('correct');
210
+ expect(result.correctness.score).toEqual('100%');
211
+ session = {
212
+ completeAnswer: '6=72\\div12\\text{eggs}'
213
+ };
214
+ _context5.next = 11;
215
+ return (0, _index.model)(question, session, env);
216
+
217
+ case 11:
218
+ result = _context5.sent;
219
+ expect(result.correctness.correctness).toEqual('correct');
220
+ expect(result.correctness.score).toEqual('100%');
221
+ session = {
222
+ completeAnswer: '\\frac{72}{12}=6\\text{eggs}'
223
+ };
224
+ _context5.next = 17;
225
+ return (0, _index.model)(question, session, env);
226
+
227
+ case 17:
228
+ result = _context5.sent;
229
+ expect(result.correctness.correctness).toEqual('correct');
230
+ expect(result.correctness.score).toEqual('100%');
231
+
232
+ case 20:
233
+ case "end":
234
+ return _context5.stop();
235
+ }
236
+ }
237
+ }, _callee5);
238
+ })));
239
+ it('returns correct for correctness with text nodes too', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee6() {
240
+ return _regenerator["default"].wrap(function _callee6$(_context6) {
241
+ while (1) {
242
+ switch (_context6.prev = _context6.next) {
243
+ case 0:
244
+ question = mkQuestion();
245
+ session = {
246
+ completeAnswer: '72\\div12=6\\text{eggs}'
247
+ };
248
+ env = {
249
+ mode: 'evaluate'
250
+ };
251
+ _context6.next = 5;
252
+ return (0, _index.model)(question, session, env);
253
+
254
+ case 5:
255
+ result = _context6.sent;
256
+ expect(result.correctness.correctness).toEqual('correct');
257
+ expect(result.correctness.score).toEqual('100%');
258
+
259
+ case 8:
260
+ case "end":
261
+ return _context6.stop();
262
+ }
263
+ }
264
+ }, _callee6);
265
+ })));
266
+ it('returns correct for correctness with text nodes too in symbolic', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee7() {
267
+ return _regenerator["default"].wrap(function _callee7$(_context7) {
268
+ while (1) {
269
+ switch (_context7.prev = _context7.next) {
270
+ case 0:
271
+ question = mkQuestion();
272
+ session = {
273
+ completeAnswer: '72\\div12=6\\text{eggs}'
274
+ };
275
+ question.responses[0].validation = 'symbolic';
276
+ env = {
277
+ mode: 'evaluate'
278
+ };
279
+ _context7.next = 6;
280
+ return (0, _index.model)(question, session, env);
281
+
282
+ case 6:
283
+ result = _context7.sent;
284
+ expect(result.correctness.correctness).toEqual('correct');
285
+ expect(result.correctness.score).toEqual('100%');
286
+
287
+ case 9:
288
+ case "end":
289
+ return _context7.stop();
290
+ }
291
+ }
292
+ }, _callee7);
293
+ })));
294
+ it('returns correct for correctness even with hyphen vs minus sign', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee8() {
295
+ return _regenerator["default"].wrap(function _callee8$(_context8) {
296
+ while (1) {
297
+ switch (_context8.prev = _context8.next) {
298
+ case 0:
299
+ question = mkQuestion(_objectSpread(_objectSpread({}, defaultModel), {}, {
300
+ expression: '{{response}}',
301
+ responses: [{
302
+ id: '1',
303
+ answer: '8-4',
304
+ alternates: {
305
+ 1: '4−2'
306
+ },
307
+ validation: 'literal'
308
+ }]
309
+ }));
310
+ env = {
311
+ mode: 'evaluate'
312
+ };
313
+ session = {
314
+ completeAnswer: '4-2'
315
+ };
316
+ _context8.next = 5;
317
+ return (0, _index.model)(question, session, env);
318
+
319
+ case 5:
320
+ result = _context8.sent;
321
+ expect(result.correctness.correctness).toEqual('correct');
322
+ expect(result.correctness.score).toEqual('100%');
323
+ session = {
324
+ completeAnswer: '4−2'
325
+ };
326
+ _context8.next = 11;
327
+ return (0, _index.model)(question, session, env);
328
+
329
+ case 11:
330
+ result = _context8.sent;
331
+ expect(result.correctness.correctness).toEqual('correct');
332
+ expect(result.correctness.score).toEqual('100%');
333
+ session = {
334
+ completeAnswer: '8-4'
335
+ };
336
+ _context8.next = 17;
337
+ return (0, _index.model)(question, session, env);
338
+
339
+ case 17:
340
+ result = _context8.sent;
341
+ expect(result.correctness.correctness).toEqual('correct');
342
+ expect(result.correctness.score).toEqual('100%');
343
+ session = {
344
+ completeAnswer: '8−4'
345
+ };
346
+ _context8.next = 23;
347
+ return (0, _index.model)(question, session, env);
348
+
349
+ case 23:
350
+ result = _context8.sent;
351
+ expect(result.correctness.correctness).toEqual('correct');
352
+ expect(result.correctness.score).toEqual('100%');
353
+
354
+ case 26:
355
+ case "end":
356
+ return _context8.stop();
357
+ }
358
+ }
359
+ }, _callee8);
360
+ })));
361
+ it('returns correct for correctness in cdot vs times situations', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee9() {
362
+ return _regenerator["default"].wrap(function _callee9$(_context9) {
363
+ while (1) {
364
+ switch (_context9.prev = _context9.next) {
365
+ case 0:
366
+ question = mkQuestion(_objectSpread(_objectSpread({}, defaultModel), {}, {
367
+ expression: '{{response}}',
368
+ responses: [{
369
+ id: '1',
370
+ answer: '8\\cdot4',
371
+ alternates: {
372
+ 1: '4\\times2'
373
+ },
374
+ validation: 'literal'
375
+ }]
376
+ }));
377
+ env = {
378
+ mode: 'evaluate'
379
+ };
380
+ session = {
381
+ completeAnswer: '8\\times4'
382
+ };
383
+ _context9.next = 5;
384
+ return (0, _index.model)(question, session, env);
385
+
386
+ case 5:
387
+ result = _context9.sent;
388
+ expect(result.correctness.correctness).toEqual('correct');
389
+ expect(result.correctness.score).toEqual('100%');
390
+ session = {
391
+ completeAnswer: '4\\cdot2'
392
+ };
393
+ _context9.next = 11;
394
+ return (0, _index.model)(question, session, env);
395
+
396
+ case 11:
397
+ result = _context9.sent;
398
+ expect(result.correctness.correctness).toEqual('correct');
399
+ expect(result.correctness.score).toEqual('100%');
400
+
401
+ case 14:
402
+ case "end":
403
+ return _context9.stop();
404
+ }
405
+ }
406
+ }, _callee9);
407
+ })));
408
+ describe('all responses are checked', function () {
409
+ beforeEach(function () {
410
+ question = mkQuestion(_objectSpread(_objectSpread({}, defaultModel), {}, {
411
+ responses: [{
412
+ answer: '0.5+3.5',
413
+ validation: 'symbolic',
414
+ alternates: ['2']
415
+ }, {
416
+ answer: 'foo',
417
+ validation: 'literal',
418
+ id: '1'
419
+ }]
420
+ }));
421
+ });
422
+ it('4 is correct - symbolic match answer', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee10() {
423
+ return _regenerator["default"].wrap(function _callee10$(_context10) {
424
+ while (1) {
425
+ switch (_context10.prev = _context10.next) {
426
+ case 0:
427
+ _context10.next = 2;
428
+ return (0, _index.model)(question, {
429
+ completeAnswer: '4'
430
+ }, env);
431
+
432
+ case 2:
433
+ result = _context10.sent;
434
+ expect(result.correctness.correctness).toEqual('correct');
435
+
436
+ case 4:
437
+ case "end":
438
+ return _context10.stop();
439
+ }
440
+ }
441
+ }, _callee10);
442
+ })));
443
+ it('2 is correct - symbolic match responses[0].alternates[0]', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee11() {
444
+ return _regenerator["default"].wrap(function _callee11$(_context11) {
445
+ while (1) {
446
+ switch (_context11.prev = _context11.next) {
447
+ case 0:
448
+ _context11.next = 2;
449
+ return (0, _index.model)(question, {
450
+ completeAnswer: '2'
451
+ }, env);
452
+
453
+ case 2:
454
+ result = _context11.sent;
455
+ expect(result.correctness.correctness).toEqual('correct');
456
+
457
+ case 4:
458
+ case "end":
459
+ return _context11.stop();
460
+ }
461
+ }
462
+ }, _callee11);
463
+ })));
464
+ it('foo is correct - literal match response[1]', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee12() {
465
+ return _regenerator["default"].wrap(function _callee12$(_context12) {
466
+ while (1) {
467
+ switch (_context12.prev = _context12.next) {
468
+ case 0:
469
+ _context12.next = 2;
470
+ return (0, _index.model)(question, {
471
+ completeAnswer: 'foo'
472
+ }, env);
473
+
474
+ case 2:
475
+ result = _context12.sent;
476
+ expect(result.correctness.correctness).toEqual('correct');
477
+
478
+ case 4:
479
+ case "end":
480
+ return _context12.stop();
481
+ }
482
+ }
483
+ }, _callee12);
484
+ })));
485
+ });
486
+ it('works for incorrect latex frac command too', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee13() {
487
+ return _regenerator["default"].wrap(function _callee13$(_context13) {
488
+ while (1) {
489
+ switch (_context13.prev = _context13.next) {
490
+ case 0:
491
+ question = mkQuestion(_objectSpread(_objectSpread({}, defaultModel), {}, {
492
+ responseType: 'Advanced Multi',
493
+ expression: '{{response}}',
494
+ responses: [{
495
+ alternates: {},
496
+ answer: '1\\frac14',
497
+ validation: 'symbolic',
498
+ id: '1'
499
+ }]
500
+ }));
501
+ session = {
502
+ completeAnswer: '1\\frac{1}{4}'
503
+ };
504
+ env = {
505
+ mode: 'evaluate'
506
+ };
507
+ _context13.next = 5;
508
+ return (0, _index.model)(question, session, env);
509
+
510
+ case 5:
511
+ result = _context13.sent;
512
+ expect(result.correctness.correctness).toEqual('correct');
513
+ expect(result.correctness.score).toEqual('100%');
514
+ session = {
515
+ completeAnswer: '1\\frac1{4}'
516
+ };
517
+ _context13.next = 11;
518
+ return (0, _index.model)(question, session, env);
519
+
520
+ case 11:
521
+ result = _context13.sent;
522
+ expect(result.correctness.correctness).toEqual('correct');
523
+ expect(result.correctness.score).toEqual('100%');
524
+
525
+ case 14:
526
+ case "end":
527
+ return _context13.stop();
528
+ }
529
+ }
530
+ }, _callee13);
531
+ })));
532
+ });
533
+ it('works for literal validation for incomplete latex command too', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee14() {
534
+ return _regenerator["default"].wrap(function _callee14$(_context14) {
535
+ while (1) {
536
+ switch (_context14.prev = _context14.next) {
537
+ case 0:
538
+ question = mkQuestion(_objectSpread(_objectSpread({}, defaultModel), {}, {
539
+ responseType: 'Advanced Multi',
540
+ expression: '{{response}}',
541
+ responses: [{
542
+ alternates: {
543
+ 1: 'p\\left(x\\right)'
544
+ },
545
+ answer: '1\\frac14',
546
+ validation: 'literal',
547
+ id: '1'
548
+ }]
549
+ }));
550
+ session = {
551
+ completeAnswer: '1\\frac{1}{4}'
552
+ };
553
+ env = {
554
+ mode: 'evaluate'
555
+ };
556
+ _context14.next = 5;
557
+ return (0, _index.model)(question, session, env);
558
+
559
+ case 5:
560
+ result = _context14.sent;
561
+ expect(result.correctness.correctness).toEqual('correct');
562
+ expect(result.correctness.score).toEqual('100%');
563
+ session = {
564
+ completeAnswer: '1\\frac1{4}'
565
+ };
566
+ _context14.next = 11;
567
+ return (0, _index.model)(question, session, env);
568
+
569
+ case 11:
570
+ result = _context14.sent;
571
+ expect(result.correctness.correctness).toEqual('correct');
572
+ expect(result.correctness.score).toEqual('100%');
573
+ session = {
574
+ completeAnswer: 'p(x)'
575
+ };
576
+ env = {
577
+ mode: 'evaluate'
578
+ };
579
+ _context14.next = 18;
580
+ return (0, _index.model)(question, session, env);
581
+
582
+ case 18:
583
+ result = _context14.sent;
584
+ expect(result.correctness.correctness).toEqual('correct');
585
+ expect(result.correctness.score).toEqual('100%');
586
+ session = {
587
+ completeAnswer: 'p\\left(x\\right)'
588
+ };
589
+ env = {
590
+ mode: 'evaluate'
591
+ };
592
+ _context14.next = 25;
593
+ return (0, _index.model)(question, session, env);
594
+
595
+ case 25:
596
+ result = _context14.sent;
597
+ expect(result.correctness.correctness).toEqual('correct');
598
+ expect(result.correctness.score).toEqual('100%');
599
+
600
+ case 28:
601
+ case "end":
602
+ return _context14.stop();
603
+ }
604
+ }
605
+ }, _callee14);
606
+ })));
607
+ describe('evaluate - incorrect', function () {
608
+ beforeEach( /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee15() {
609
+ return _regenerator["default"].wrap(function _callee15$(_context15) {
610
+ while (1) {
611
+ switch (_context15.prev = _context15.next) {
612
+ case 0:
613
+ env = {
614
+ mode: 'evaluate'
615
+ };
616
+
617
+ case 1:
618
+ case "end":
619
+ return _context15.stop();
620
+ }
621
+ }
622
+ }, _callee15);
623
+ })));
624
+ });
625
+ });
626
+ describe('outcome', function () {
627
+ var result;
628
+ var question = mkQuestion();
629
+ var env = {
630
+ mode: 'evaluate'
631
+ };
632
+ it('returns correct for correctness in outcome', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee16() {
633
+ var session, outcomeResult;
634
+ return _regenerator["default"].wrap(function _callee16$(_context16) {
635
+ while (1) {
636
+ switch (_context16.prev = _context16.next) {
637
+ case 0:
638
+ session = {
639
+ completeAnswer: '72\\div12=6\\text{eggs}'
640
+ };
641
+ _context16.next = 3;
642
+ return (0, _index.outcome)(question, session, env);
643
+
644
+ case 3:
645
+ outcomeResult = _context16.sent;
646
+ expect(outcomeResult.score).toEqual(1);
647
+ session = {
648
+ completeAnswer: '\\frac{72}{12}=6\\text{eggs}'
649
+ };
650
+ _context16.next = 8;
651
+ return (0, _index.outcome)(question, session, env);
652
+
653
+ case 8:
654
+ outcomeResult = _context16.sent;
655
+ expect(outcomeResult.score).toEqual(1);
656
+
657
+ case 10:
658
+ case "end":
659
+ return _context16.stop();
660
+ }
661
+ }
662
+ }, _callee16);
663
+ })));
664
+
665
+ var returnOutcome = function returnOutcome(session) {
666
+ it("returns score: 0 and empty: true if session is ".concat(JSON.stringify(session)), /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee17() {
667
+ var outcomeResult;
668
+ return _regenerator["default"].wrap(function _callee17$(_context17) {
669
+ while (1) {
670
+ switch (_context17.prev = _context17.next) {
671
+ case 0:
672
+ _context17.next = 2;
673
+ return (0, _index.outcome)(question, session, env);
674
+
675
+ case 2:
676
+ outcomeResult = _context17.sent;
677
+ expect(outcomeResult).toEqual({
678
+ score: 0,
679
+ empty: true
680
+ });
681
+
682
+ case 4:
683
+ case "end":
684
+ return _context17.stop();
685
+ }
686
+ }
687
+ }, _callee17);
688
+ })));
689
+ };
690
+
691
+ returnOutcome(undefined);
692
+ returnOutcome(null);
693
+ returnOutcome({});
694
+ });
695
+ describe('createCorrectResponseSession', function () {
696
+ var answer = '72\\div12=6';
697
+ var question = {
698
+ id: '1',
699
+ responseType: 'Advanced Multi',
700
+ expression: '{{response}} = {{response}}',
701
+ prompt: '<p>Sam sells baskets of eggs at his farm stand. He sold 12 baskets and wrote the number sentence below to show how many eggs he sold in all.</p><p><span class="equation-block"><math xmlns="http://www.w3.org/1998/Math/MathML" >\n <mrow>\n <mn>12</mn><mo>&#x00D7;</mo><mo>&#x25A1;</mo><mo>=</mo><mn>72</mn>\n </mrow>\n</math> </span></p><p>What <span class="relative-emphasis">division</span> number sentence can be used to show how many eggs were in each basket?</p><p>Use the on-screen keyboard to type your number sentence and answer in the box.</p>',
702
+ responses: [{
703
+ id: '1',
704
+ answer: answer,
705
+ alternates: {
706
+ 1: '6=72\\div12]',
707
+ 2: '\\frac{72}{12}=6',
708
+ 3: '6=\\frac{72}{12}'
709
+ },
710
+ validation: 'literal'
711
+ }],
712
+ customKeys: ['\\left(\\right)', '\\frac{}{}', 'x\\frac{}{}']
713
+ };
714
+ describe('7165', function () {
715
+ it('returns whole answer', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee18() {
716
+ var question, ca, cs;
717
+ return _regenerator["default"].wrap(function _callee18$(_context18) {
718
+ while (1) {
719
+ switch (_context18.prev = _context18.next) {
720
+ case 0:
721
+ question = {
722
+ element: 'math-inline',
723
+ responseType: 'Advanced Multi',
724
+ expression: '{{response}}',
725
+ responses: [{
726
+ alternates: {},
727
+ answer: '2\\times7',
728
+ validation: 'literal',
729
+ id: '1'
730
+ }],
731
+ id: '1'
732
+ };
733
+ ca = question.responses[0].answer;
734
+ _context18.next = 4;
735
+ return (0, _index.createCorrectResponseSession)(question, {
736
+ mode: 'gather',
737
+ role: 'instructor'
738
+ });
739
+
740
+ case 4:
741
+ cs = _context18.sent;
742
+ expect(cs).toMatchObject({
743
+ id: '1',
744
+ completeAnswer: ca,
745
+ answers: {
746
+ r1: {
747
+ value: ca
748
+ }
749
+ }
750
+ });
751
+
752
+ case 6:
753
+ case "end":
754
+ return _context18.stop();
755
+ }
756
+ }
757
+ }, _callee18);
758
+ })));
759
+ });
760
+ describe('PD-173', function () {
761
+ it('returns empty answer if model is incorrectly defined', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee19() {
762
+ var question, ca, cs;
763
+ return _regenerator["default"].wrap(function _callee19$(_context19) {
764
+ while (1) {
765
+ switch (_context19.prev = _context19.next) {
766
+ case 0:
767
+ question = {
768
+ element: 'math-inline',
769
+ responseType: 'Advanced Multi',
770
+ expression: 'x={{response}}\\ \\text{radians}',
771
+ responses: [{
772
+ alternates: {},
773
+ answer: 'x=\\frac{20,000}{r^2}\\text{radians}',
774
+ validation: 'symbolic',
775
+ id: '1',
776
+ allowSpaces: true
777
+ }],
778
+ id: '1'
779
+ };
780
+ ca = question.responses[0].answer;
781
+ _context19.next = 4;
782
+ return (0, _index.createCorrectResponseSession)(question, {
783
+ mode: 'gather',
784
+ role: 'instructor'
785
+ });
786
+
787
+ case 4:
788
+ cs = _context19.sent;
789
+ expect(cs).toMatchObject({
790
+ id: '1',
791
+ completeAnswer: ca,
792
+ answers: {}
793
+ });
794
+
795
+ case 6:
796
+ case "end":
797
+ return _context19.stop();
798
+ }
799
+ }
800
+ }, _callee19);
801
+ })));
802
+ });
803
+
804
+ var val = function val(value) {
805
+ return {
806
+ value: value
807
+ };
808
+ };
809
+
810
+ describe.each(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n expression | cr | expected\n ", " | ", " | ", "\n ", " | ", " | ", "\n ", " | ", " | ", "\n ", " | ", " | ", "\n ", " | ", " | ", "\n ", " | ", " | ", "\n ", " | ", " | ", "\n "])), '{{ response}}', '1', {
811
+ r1: val('1')
812
+ }, '{{response}} = {{response}}', '1 = 1', {
813
+ r1: val('1'),
814
+ r2: val('1')
815
+ }, '{{response}} + {{response}} = {{response}}', '1 + 2 = 3', {
816
+ r1: val('1'),
817
+ r2: val('2'),
818
+ r3: val('3')
819
+ }, '{{response}} = {{response}}', '\\frac{2}{3} + 2 = \\sqrt{9}', {
820
+ r1: val('\\frac{2}{3} + 2'),
821
+ r2: val('\\sqrt{9}')
822
+ }, '{{response}} = {{response}}', '72\\div12=6', {
823
+ r1: val('72\\div12'),
824
+ r2: val('6')
825
+ }, '{{response}} = {{response}}', '72\\div12 = 6', {
826
+ r1: val('72\\div12'),
827
+ r2: val('6')
828
+ }, '{{response}} = {{response}} / {{response}}', '72\\div12 = 6/2', {
829
+ r1: val('72\\div12'),
830
+ r2: val('6'),
831
+ r3: val('2')
832
+ })('$expression + $cr', function (_ref20) {
833
+ var expression = _ref20.expression,
834
+ cr = _ref20.cr,
835
+ expected = _ref20.expected;
836
+ var crs;
837
+ var env;
838
+ var q;
839
+ beforeEach( /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee20() {
840
+ return _regenerator["default"].wrap(function _callee20$(_context20) {
841
+ while (1) {
842
+ switch (_context20.prev = _context20.next) {
843
+ case 0:
844
+ _context20.prev = 0;
845
+ env = {
846
+ mode: 'gather',
847
+ role: 'instructor'
848
+ };
849
+ q = {
850
+ expression: expression,
851
+ responses: [{
852
+ answer: cr
853
+ }]
854
+ };
855
+ _context20.next = 5;
856
+ return (0, _index.createCorrectResponseSession)(q, env);
857
+
858
+ case 5:
859
+ crs = _context20.sent;
860
+ _context20.next = 12;
861
+ break;
862
+
863
+ case 8:
864
+ _context20.prev = 8;
865
+ _context20.t0 = _context20["catch"](0);
866
+ console.error(_context20.t0);
867
+ fail(_context20.t0);
868
+
869
+ case 12:
870
+ case "end":
871
+ return _context20.stop();
872
+ }
873
+ }
874
+ }, _callee20, null, [[0, 8]]);
875
+ })));
876
+ it("".concat(JSON.stringify(expected), " correct answers"), function () {
877
+ expect(crs.answers).toEqual(expected);
878
+ });
879
+ it("".concat(JSON.stringify(expected), " - no 'response' prop"), function () {
880
+ expect(crs.response).not.toBeDefined();
881
+ });
882
+ });
883
+ it.each(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n mode | role\n ", " | ", "\n ", " | ", "\n "])), 'gather', 'instructor', 'view', 'instructor')('returns correctResponse for $mode + $role', /*#__PURE__*/function () {
884
+ var _ref23 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee21(_ref22) {
885
+ var mode, role, sess;
886
+ return _regenerator["default"].wrap(function _callee21$(_context21) {
887
+ while (1) {
888
+ switch (_context21.prev = _context21.next) {
889
+ case 0:
890
+ mode = _ref22.mode, role = _ref22.role;
891
+ _context21.next = 3;
892
+ return (0, _index.createCorrectResponseSession)(question, {
893
+ mode: mode,
894
+ role: role
895
+ });
896
+
897
+ case 3:
898
+ sess = _context21.sent;
899
+ expect(sess).toMatchObject({
900
+ answers: {
901
+ r1: val('72\\div12'),
902
+ r2: val('6')
903
+ },
904
+ completeAnswer: answer,
905
+ id: '1'
906
+ });
907
+
908
+ case 5:
909
+ case "end":
910
+ return _context21.stop();
911
+ }
912
+ }
913
+ }, _callee21);
914
+ }));
915
+
916
+ return function (_x) {
917
+ return _ref23.apply(this, arguments);
918
+ };
919
+ }());
920
+ it('returns correct response if role is instructor and mode is view and responseType is Simple', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee22() {
921
+ var sess;
922
+ return _regenerator["default"].wrap(function _callee22$(_context22) {
923
+ while (1) {
924
+ switch (_context22.prev = _context22.next) {
925
+ case 0:
926
+ _context22.next = 2;
927
+ return (0, _index.createCorrectResponseSession)(_objectSpread(_objectSpread({}, question), {}, {
928
+ expression: '{{response}}',
929
+ responses: [{
930
+ answer: '\\frac{3}{4}',
931
+ validation: 'symbolic',
932
+ id: '1'
933
+ }],
934
+ responseType: 'Simple'
935
+ }), {
936
+ mode: 'view',
937
+ role: 'instructor'
938
+ });
939
+
940
+ case 2:
941
+ sess = _context22.sent;
942
+ expect(sess).toMatchObject({
943
+ response: '\\frac{3}{4}',
944
+ completeAnswer: '\\frac{3}{4}',
945
+ id: '1'
946
+ });
947
+
948
+ case 4:
949
+ case "end":
950
+ return _context22.stop();
951
+ }
952
+ }
953
+ }, _callee22);
954
+ })));
955
+ it('returns null if mode is evaluate', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee23() {
956
+ var noResult;
957
+ return _regenerator["default"].wrap(function _callee23$(_context23) {
958
+ while (1) {
959
+ switch (_context23.prev = _context23.next) {
960
+ case 0:
961
+ _context23.next = 2;
962
+ return (0, _index.createCorrectResponseSession)(question, {
963
+ mode: 'evaluate',
964
+ role: 'instructor'
965
+ });
966
+
967
+ case 2:
968
+ noResult = _context23.sent;
969
+ expect(noResult).toBeNull();
970
+
971
+ case 4:
972
+ case "end":
973
+ return _context23.stop();
974
+ }
975
+ }
976
+ }, _callee23);
977
+ })));
978
+ it('returns null if role is student', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee24() {
979
+ var noResult;
980
+ return _regenerator["default"].wrap(function _callee24$(_context24) {
981
+ while (1) {
982
+ switch (_context24.prev = _context24.next) {
983
+ case 0:
984
+ _context24.next = 2;
985
+ return (0, _index.createCorrectResponseSession)(question, {
986
+ mode: 'gather',
987
+ role: 'student'
988
+ });
989
+
990
+ case 2:
991
+ noResult = _context24.sent;
992
+ expect(noResult).toBeNull();
993
+
994
+ case 4:
995
+ case "end":
996
+ return _context24.stop();
997
+ }
998
+ }
999
+ }, _callee24);
1000
+ })));
1001
+ describe('PIE-188', function () {
1002
+ it('works', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee25() {
1003
+ var question, session, env;
1004
+ return _regenerator["default"].wrap(function _callee25$(_context25) {
1005
+ while (1) {
1006
+ switch (_context25.prev = _context25.next) {
1007
+ case 0:
1008
+ _mathValidation.latexEqual.mockReturnValueOnce(false);
1009
+
1010
+ question = {
1011
+ responseType: 'Advanced Multi',
1012
+ expression: '{{response}}',
1013
+ equationEditor: 'miscellaneous',
1014
+ responses: [{
1015
+ alternates: {},
1016
+ answer: '1530',
1017
+ validation: 'symbolic',
1018
+ id: '1'
1019
+ }],
1020
+ id: '1',
1021
+ element: 'math-inline',
1022
+ customKeys: ['<', '\\le', '\\ge', '>', '\\frac{}{}', 'x^{}', '\\left(\\right)']
1023
+ };
1024
+ session = {
1025
+ id: '1',
1026
+ answers: {
1027
+ r1: {
1028
+ value: '\\odot'
1029
+ }
1030
+ },
1031
+ completeAnswer: '\\odot'
1032
+ };
1033
+ env = {
1034
+ mode: 'evaluate'
1035
+ };
1036
+
1037
+ _mathValidation.latexEqual.mockReturnValueOnce(false);
1038
+
1039
+ _context25.prev = 5;
1040
+ _context25.next = 8;
1041
+ return (0, _index.model)(question, session, env);
1042
+
1043
+ case 8:
1044
+ _context25.next = 15;
1045
+ break;
1046
+
1047
+ case 10:
1048
+ _context25.prev = 10;
1049
+ _context25.t0 = _context25["catch"](5);
1050
+ console.error('>>');
1051
+ console.log(_context25.t0);
1052
+ fail(_context25.t0);
1053
+
1054
+ case 15:
1055
+ _context25.next = 17;
1056
+ return expect((0, _index.model)(question, session, env)).resolves.toMatchObject({
1057
+ correctness: {
1058
+ correct: false
1059
+ }
1060
+ });
1061
+
1062
+ case 17:
1063
+ case "end":
1064
+ return _context25.stop();
1065
+ }
1066
+ }
1067
+ }, _callee25, null, [[5, 10]]);
1068
+ })));
1069
+ });
1070
+ });
1071
+ describe('6456 - outcome', function () {
1072
+ var question = {
1073
+ equationEditor: 8,
1074
+ responseType: 'Advanced Multi',
1075
+ teacherInstructions: '',
1076
+ expression: '{{response}}',
1077
+ responses: [{
1078
+ answer: '-12.5',
1079
+ id: '1',
1080
+ alternates: {
1081
+ 1: '-12.5\\%'
1082
+ },
1083
+ validation: 'symbolic'
1084
+ }],
1085
+ id: '1',
1086
+ prompt: 'prompt',
1087
+ rationale: 'rationale',
1088
+ element: 'math-inline'
1089
+ };
1090
+ it('scores 0', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee26() {
1091
+ var session, env, result;
1092
+ return _regenerator["default"].wrap(function _callee26$(_context26) {
1093
+ while (1) {
1094
+ switch (_context26.prev = _context26.next) {
1095
+ case 0:
1096
+ _mathValidation.latexEqual.mockReturnValueOnce(false);
1097
+
1098
+ session = {
1099
+ id: '1',
1100
+ answers: {
1101
+ r1: {
1102
+ value: '-12\\%'
1103
+ }
1104
+ },
1105
+ completeAnswer: '-12\\%'
1106
+ };
1107
+
1108
+ _mathValidation.latexEqual.mockReturnValueOnce(false);
1109
+
1110
+ env = {
1111
+ mode: 'evaluate'
1112
+ };
1113
+ _context26.next = 6;
1114
+ return (0, _index.outcome)(question, session, env);
1115
+
1116
+ case 6:
1117
+ result = _context26.sent;
1118
+ expect(result).toEqual({
1119
+ score: 0
1120
+ });
1121
+
1122
+ case 8:
1123
+ case "end":
1124
+ return _context26.stop();
1125
+ }
1126
+ }
1127
+ }, _callee26);
1128
+ })));
1129
+ it('scores 1', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee27() {
1130
+ var session, env, result;
1131
+ return _regenerator["default"].wrap(function _callee27$(_context27) {
1132
+ while (1) {
1133
+ switch (_context27.prev = _context27.next) {
1134
+ case 0:
1135
+ session = {
1136
+ id: '1',
1137
+ answers: {
1138
+ r1: {
1139
+ value: '-12.5\\%'
1140
+ }
1141
+ },
1142
+ completeAnswer: '-12.5\\%'
1143
+ };
1144
+ env = {
1145
+ mode: 'evaluate'
1146
+ };
1147
+ _context27.next = 4;
1148
+ return (0, _index.outcome)(question, session, env);
1149
+
1150
+ case 4:
1151
+ result = _context27.sent;
1152
+ expect(result).toEqual({
1153
+ score: 1
1154
+ });
1155
+
1156
+ case 6:
1157
+ case "end":
1158
+ return _context27.stop();
1159
+ }
1160
+ }
1161
+ }, _callee27);
1162
+ })));
1163
+ });
1164
+ describe('6371', function () {
1165
+ var question = {
1166
+ equationEditor: 8,
1167
+ responseType: 'Advanced Multi',
1168
+ teacherInstructions: '',
1169
+ expression: '{{response}}\\ \\text{dollars}',
1170
+ responses: [{
1171
+ answer: '4\\times10^3\\ \\text{dollars}',
1172
+ id: '1',
1173
+ alternates: {},
1174
+ validation: 'symbolic'
1175
+ }],
1176
+ id: '1',
1177
+ prompt: 'prompt',
1178
+ rationale: 'rationale',
1179
+ element: 'math-inline'
1180
+ };
1181
+ it('scores 1', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee28() {
1182
+ var session, env, result;
1183
+ return _regenerator["default"].wrap(function _callee28$(_context28) {
1184
+ while (1) {
1185
+ switch (_context28.prev = _context28.next) {
1186
+ case 0:
1187
+ session = {
1188
+ id: '1',
1189
+ answers: {
1190
+ r1: {
1191
+ value: '4000\\ \\text{dollars}'
1192
+ }
1193
+ },
1194
+ completeAnswer: '4000\\ \\text{dollars}'
1195
+ };
1196
+ env = {
1197
+ mode: 'evaluate'
1198
+ };
1199
+ _context28.next = 4;
1200
+ return (0, _index.outcome)(question, session, env);
1201
+
1202
+ case 4:
1203
+ result = _context28.sent;
1204
+ expect(result).toEqual({
1205
+ score: 1
1206
+ });
1207
+
1208
+ case 6:
1209
+ case "end":
1210
+ return _context28.stop();
1211
+ }
1212
+ }
1213
+ }, _callee28);
1214
+ })));
1215
+ });
1216
+ describe('3826', function () {
1217
+ var question = {
1218
+ equationEditor: 8,
1219
+ responseType: 'Advanced Multi',
1220
+ teacherInstructions: '',
1221
+ expression: '{{response}}\\ \\text{%}',
1222
+ responses: [{
1223
+ id: '1',
1224
+ answer: '84%',
1225
+ alternates: {},
1226
+ validation: 'literal'
1227
+ }],
1228
+ id: '1',
1229
+ prompt: 'prompt',
1230
+ rationale: 'rationale',
1231
+ element: 'math-inline'
1232
+ };
1233
+ it('scores 1', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee29() {
1234
+ var session, env, result;
1235
+ return _regenerator["default"].wrap(function _callee29$(_context29) {
1236
+ while (1) {
1237
+ switch (_context29.prev = _context29.next) {
1238
+ case 0:
1239
+ session = {
1240
+ id: '1',
1241
+ answers: {
1242
+ r1: {
1243
+ value: '84\\ \\text{%}'
1244
+ }
1245
+ },
1246
+ completeAnswer: '84\\ \\text{%}'
1247
+ };
1248
+ env = {
1249
+ mode: 'evaluate'
1250
+ };
1251
+ _context29.next = 4;
1252
+ return (0, _index.outcome)(question, session, env);
1253
+
1254
+ case 4:
1255
+ result = _context29.sent;
1256
+ expect(result).toEqual({
1257
+ score: 1
1258
+ });
1259
+
1260
+ case 6:
1261
+ case "end":
1262
+ return _context29.stop();
1263
+ }
1264
+ }
1265
+ }, _callee29);
1266
+ })));
1267
+ });
1268
+ describe('PD-66', function () {
1269
+ var question = {
1270
+ id: '1',
1271
+ prompt: 'prompt',
1272
+ rationale: 'rationale',
1273
+ element: 'math-inline',
1274
+ feedbackEnabled: true,
1275
+ promptEnabled: true,
1276
+ rationaleEnabled: true,
1277
+ teacherInstructionsEnabled: true,
1278
+ studentInstructionsEnabled: true,
1279
+ responseType: 'Advanced Multi',
1280
+ expression: '{{response}}',
1281
+ equationEditor: 'statistics',
1282
+ responses: [{
1283
+ answer: '\\left(-\\frac{x}{3},-\\frac{y}{3}\\right)',
1284
+ id: '1',
1285
+ validation: 'literal'
1286
+ }, {
1287
+ answer: '\\left(\\frac{-x}{3},\\frac{-y}{3}\\right)',
1288
+ validation: 'equivLiteral'
1289
+ }, {
1290
+ answer: '\\left(\\frac{x}{-3},\\frac{y}{-3}\\right)',
1291
+ validation: 'equivLiteral'
1292
+ }, {
1293
+ answer: '\\left(-\\frac{1}{3}x,-\\frac{1}{3}y\\right)',
1294
+ validation: 'equivLiteral'
1295
+ }, {
1296
+ answer: '\\left(\\frac{-1}{3}x,\\frac{-1}{3}y\\right)',
1297
+ validation: 'equivLiteral'
1298
+ }, {
1299
+ answer: '\\left(\\frac{1}{-3}x,\\frac{1}{-3}y\\right)',
1300
+ validation: 'equivLiteral'
1301
+ }]
1302
+ };
1303
+ it('scores 1', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee30() {
1304
+ var session, env, result;
1305
+ return _regenerator["default"].wrap(function _callee30$(_context30) {
1306
+ while (1) {
1307
+ switch (_context30.prev = _context30.next) {
1308
+ case 0:
1309
+ session = {
1310
+ id: '1',
1311
+ answers: {
1312
+ r1: {
1313
+ value: '\\left(-\\frac{x}{3},-\\frac{y}{3}\\right)'
1314
+ }
1315
+ },
1316
+ completeAnswer: '\\left(-\\frac{x}{3},-\\frac{y}{3}\\right)'
1317
+ };
1318
+ env = {
1319
+ mode: 'evaluate'
1320
+ };
1321
+ _context30.next = 4;
1322
+ return (0, _index.outcome)(question, session, env);
1323
+
1324
+ case 4:
1325
+ result = _context30.sent;
1326
+ expect(result).toEqual({
1327
+ score: 1
1328
+ });
1329
+
1330
+ case 6:
1331
+ case "end":
1332
+ return _context30.stop();
1333
+ }
1334
+ }
1335
+ }, _callee30);
1336
+ })));
1337
+ });
1338
+ describe('PD-205', function () {
1339
+ var question = {
1340
+ id: 1,
1341
+ element: 'math-inline',
1342
+ feedbackEnabled: true,
1343
+ promptEnabled: true,
1344
+ rationaleEnabled: true,
1345
+ teacherInstructionsEnabled: true,
1346
+ studentInstructionsEnabled: true,
1347
+ equationEditor: 3,
1348
+ teacherInstructions: '',
1349
+ responseType: 'Advanced Multi',
1350
+ expression: '{{response}}\\ =\\ {{response}}\\ \\text{cubic}\\ \\text{inches}',
1351
+ rationale: '<p>The volume of the box can be solved by any equivalent variation of the equation: 10 &#215; 7 &#215; 5 = 350 (cubic&#160;inches)&#160;or 70 &#215; 5 = 350&#160;(cubic&#160;inches). This answer is the result of accurately applying either the formula <span class="variable">l</span> &#215; <span class="variable">w</span> &#215; <span class="variable">h</span> = <span class="variable">V</span> or <span class="variable">b</span> &#215; <span class="variable">h</span> = <span class="variable">V</span> to find the volume of the&#160;rectangular prism described.</p>',
1352
+ prompt: '<p>Elyse has a plastic box she uses for sand art designs, as shown below.</p><p><img alt="image 5afe5c90cd7e491896d58552ab74b6f7" id="5afe5c90cd7e491896d58552ab74b6f7" src="https://storage.googleapis.com/pie-prod-221718-assets/image/a3ee5289-d882-4c7d-abce-2ee70ce8c26f"></p><p>The length of the box is 10&#160;inches, the width is 7&#160;inches, and the height is 5&#160;inches. Write and solve an&#160;equation Elyse can use to find&#160;the volume of sand, in cubic inches, that will fit in the container.&#160;</p><p>Use the on-screen keyboard to type the correct equation and answer in the box.</p>',
1353
+ responses: [{
1354
+ answer: '10\\times7\\times5=350\\ \\text{cubic}\\text{inches}',
1355
+ validation: 'literal',
1356
+ id: '1'
1357
+ }, {
1358
+ validation: 'equivLiteral',
1359
+ answer: '350=10\\times7\\times5\\ \\text{cubic}\\text{inches}'
1360
+ }, {
1361
+ answer: '350=10\\times5\\times7\\ \\text{cubic}\\text{inches}',
1362
+ validation: 'equivLiteral'
1363
+ }, {
1364
+ answer: '350=7\\times5\\times10\\ \\text{cubic}\\text{inches}',
1365
+ validation: 'equivLiteral'
1366
+ }, {
1367
+ answer: '350=5\\times10\\times7\\ \\text{cubic}\\text{inches}',
1368
+ validation: 'equivLiteral'
1369
+ }, {
1370
+ validation: 'equivLiteral',
1371
+ answer: '350=7\\times10\\times5\\ \\text{cubic}\\text{inches}'
1372
+ }, {
1373
+ answer: '350=7\\times5\\times10\\ \\text{cubic}\\text{inches}',
1374
+ validation: 'equivLiteral'
1375
+ }, {
1376
+ answer: '70\\times5=350\\ \\text{cubic}\\text{inches}',
1377
+ validation: 'equivLiteral'
1378
+ }, {
1379
+ answer: '350=70\\times5\\ \\text{cubic}\\text{inches}',
1380
+ validation: 'equivLiteral'
1381
+ }, {
1382
+ answer: '350=5\\times70\\ \\text{cubic}\\text{inches}',
1383
+ validation: 'equivLiteral'
1384
+ }]
1385
+ };
1386
+ it('scores 1', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee31() {
1387
+ var session, env, result;
1388
+ return _regenerator["default"].wrap(function _callee31$(_context31) {
1389
+ while (1) {
1390
+ switch (_context31.prev = _context31.next) {
1391
+ case 0:
1392
+ session = {
1393
+ id: '1',
1394
+ answers: {
1395
+ r1: {
1396
+ value: '350'
1397
+ },
1398
+ r2: {
1399
+ value: '7\\cdot50'
1400
+ }
1401
+ },
1402
+ completeAnswer: '350\\ =\\ 7\\cdot50\\ \\text{cubic}\\ \\text{inches}'
1403
+ };
1404
+ env = {
1405
+ mode: 'evaluate'
1406
+ };
1407
+ _context31.next = 4;
1408
+ return (0, _index.outcome)(question, session, env);
1409
+
1410
+ case 4:
1411
+ result = _context31.sent;
1412
+ expect(result).toEqual({
1413
+ score: 1
1414
+ });
1415
+
1416
+ case 6:
1417
+ case "end":
1418
+ return _context31.stop();
1419
+ }
1420
+ }
1421
+ }, _callee31);
1422
+ })));
1423
+ });
1424
+ describe('PD-610', function () {
1425
+ var equation_01 = {
1426
+ id: 1,
1427
+ element: 'math-inline',
1428
+ feedbackEnabled: true,
1429
+ promptEnabled: true,
1430
+ rationaleEnabled: true,
1431
+ teacherInstructionsEnabled: true,
1432
+ studentInstructionsEnabled: true,
1433
+ equationEditor: 3,
1434
+ teacherInstructions: '',
1435
+ responseType: 'Advanced Multi',
1436
+ expression: '\\frac{1}{3}=\\frac{{response}}{6}',
1437
+ rationale: '<p>A correct response is shown below:</p><ul><li>1/3 = <strong>2</strong>/6</li><li>3/4 = <strong>6</strong>/8</li><li>3/6 = <strong>1</strong>/2</li></ul>',
1438
+ responses: [{
1439
+ answer: '\\frac{1}{3}=\\frac{2}{6}',
1440
+ validation: 'literal',
1441
+ id: '1'
1442
+ }]
1443
+ };
1444
+ it('scores 1', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee32() {
1445
+ var session, env, result;
1446
+ return _regenerator["default"].wrap(function _callee32$(_context32) {
1447
+ while (1) {
1448
+ switch (_context32.prev = _context32.next) {
1449
+ case 0:
1450
+ session = {
1451
+ id: '1',
1452
+ answers: {
1453
+ r1: {
1454
+ value: '2'
1455
+ }
1456
+ },
1457
+ completeAnswer: '\\frac{1}{3}=\\frac{2}{6}'
1458
+ };
1459
+ env = {
1460
+ mode: 'evaluate'
1461
+ };
1462
+ _context32.next = 4;
1463
+ return (0, _index.outcome)(equation_01, session, env);
1464
+
1465
+ case 4:
1466
+ result = _context32.sent;
1467
+ expect(result).toEqual({
1468
+ score: 1
1469
+ });
1470
+
1471
+ case 6:
1472
+ case "end":
1473
+ return _context32.stop();
1474
+ }
1475
+ }
1476
+ }, _callee32);
1477
+ })));
1478
+ it('scores 0', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee33() {
1479
+ var session, env, result;
1480
+ return _regenerator["default"].wrap(function _callee33$(_context33) {
1481
+ while (1) {
1482
+ switch (_context33.prev = _context33.next) {
1483
+ case 0:
1484
+ _mathValidation.latexEqual.mockReturnValueOnce(false);
1485
+
1486
+ session = {
1487
+ id: '1',
1488
+ answers: {
1489
+ r1: {
1490
+ value: '2'
1491
+ }
1492
+ },
1493
+ completeAnswer: '\\frac{1}{3}=\\frac{1}{6}'
1494
+ };
1495
+ env = {
1496
+ mode: 'evaluate'
1497
+ };
1498
+ _context33.next = 5;
1499
+ return (0, _index.outcome)(equation_01, session, env);
1500
+
1501
+ case 5:
1502
+ result = _context33.sent;
1503
+ expect(result).toEqual({
1504
+ score: 0
1505
+ });
1506
+
1507
+ case 7:
1508
+ case "end":
1509
+ return _context33.stop();
1510
+ }
1511
+ }
1512
+ }, _callee33);
1513
+ })));
1514
+ var equation_02 = {
1515
+ id: 2,
1516
+ element: 'math-inline',
1517
+ feedbackEnabled: true,
1518
+ promptEnabled: true,
1519
+ rationaleEnabled: true,
1520
+ teacherInstructionsEnabled: true,
1521
+ studentInstructionsEnabled: true,
1522
+ equationEditor: 3,
1523
+ teacherInstructions: '',
1524
+ responseType: 'Advanced Multi',
1525
+ expression: '\\frac{3}{4}=\\frac{{response}}{8}',
1526
+ rationale: '<p>A correct response is shown below:</p><ul><li>1/3 = <strong>2</strong>/6</li><li>3/4 = <strong>6</strong>/8</li><li>3/6 = <strong>1</strong>/2</li></ul>',
1527
+ responses: [{
1528
+ answer: '\\frac{3}{4}=\\frac{6}{8}',
1529
+ validation: 'literal',
1530
+ id: '1'
1531
+ }]
1532
+ };
1533
+ it('scores 1', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee34() {
1534
+ var session, env, result;
1535
+ return _regenerator["default"].wrap(function _callee34$(_context34) {
1536
+ while (1) {
1537
+ switch (_context34.prev = _context34.next) {
1538
+ case 0:
1539
+ session = {
1540
+ id: '2',
1541
+ answers: {
1542
+ r1: {
1543
+ value: '6'
1544
+ }
1545
+ },
1546
+ completeAnswer: '\\frac{3}{4}=\\frac{6}{8}'
1547
+ };
1548
+ env = {
1549
+ mode: 'evaluate'
1550
+ };
1551
+ _context34.next = 4;
1552
+ return (0, _index.outcome)(equation_02, session, env);
1553
+
1554
+ case 4:
1555
+ result = _context34.sent;
1556
+ expect(result).toEqual({
1557
+ score: 1
1558
+ });
1559
+
1560
+ case 6:
1561
+ case "end":
1562
+ return _context34.stop();
1563
+ }
1564
+ }
1565
+ }, _callee34);
1566
+ })));
1567
+ it('scores 0', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee35() {
1568
+ var session, env, result;
1569
+ return _regenerator["default"].wrap(function _callee35$(_context35) {
1570
+ while (1) {
1571
+ switch (_context35.prev = _context35.next) {
1572
+ case 0:
1573
+ _mathValidation.latexEqual.mockReturnValueOnce(false);
1574
+
1575
+ session = {
1576
+ id: '2',
1577
+ answers: {
1578
+ r1: {
1579
+ value: '6'
1580
+ }
1581
+ },
1582
+ completeAnswer: '\\frac{3}{4}=\\frac{3}{8}'
1583
+ };
1584
+ env = {
1585
+ mode: 'evaluate'
1586
+ };
1587
+ _context35.next = 5;
1588
+ return (0, _index.outcome)(equation_02, session, env);
1589
+
1590
+ case 5:
1591
+ result = _context35.sent;
1592
+ expect(result).toEqual({
1593
+ score: 0
1594
+ });
1595
+
1596
+ case 7:
1597
+ case "end":
1598
+ return _context35.stop();
1599
+ }
1600
+ }
1601
+ }, _callee35);
1602
+ })));
1603
+ var equation_03 = {
1604
+ id: 3,
1605
+ element: 'math-inline',
1606
+ feedbackEnabled: true,
1607
+ promptEnabled: true,
1608
+ rationaleEnabled: true,
1609
+ teacherInstructionsEnabled: true,
1610
+ studentInstructionsEnabled: true,
1611
+ equationEditor: 3,
1612
+ teacherInstructions: '',
1613
+ responseType: 'Advanced Multi',
1614
+ expression: '\\frac{3}{6}=\\frac{{response}}{2}',
1615
+ rationale: '<p>A correct response is shown below:</p><ul><li>1/3 = <strong>2</strong>/6</li><li>3/4 = <strong>6</strong>/8</li><li>3/6 = <strong>1</strong>/2</li></ul>',
1616
+ responses: [{
1617
+ answer: '\\frac{3}{6}=\\frac{1}{2}',
1618
+ validation: 'literal',
1619
+ id: '3'
1620
+ }]
1621
+ };
1622
+ it('scores 1', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee36() {
1623
+ var session, env, result;
1624
+ return _regenerator["default"].wrap(function _callee36$(_context36) {
1625
+ while (1) {
1626
+ switch (_context36.prev = _context36.next) {
1627
+ case 0:
1628
+ session = {
1629
+ id: '3',
1630
+ answers: {
1631
+ r1: {
1632
+ value: '1'
1633
+ }
1634
+ },
1635
+ completeAnswer: '\\frac{3}{6}=\\frac{1}{2}'
1636
+ };
1637
+ env = {
1638
+ mode: 'evaluate'
1639
+ };
1640
+ _context36.next = 4;
1641
+ return (0, _index.outcome)(equation_03, session, env);
1642
+
1643
+ case 4:
1644
+ result = _context36.sent;
1645
+ expect(result).toEqual({
1646
+ score: 1
1647
+ });
1648
+
1649
+ case 6:
1650
+ case "end":
1651
+ return _context36.stop();
1652
+ }
1653
+ }
1654
+ }, _callee36);
1655
+ })));
1656
+ it('scores 0', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee37() {
1657
+ var session, env, result;
1658
+ return _regenerator["default"].wrap(function _callee37$(_context37) {
1659
+ while (1) {
1660
+ switch (_context37.prev = _context37.next) {
1661
+ case 0:
1662
+ _mathValidation.latexEqual.mockReturnValueOnce(false);
1663
+
1664
+ session = {
1665
+ id: '3',
1666
+ answers: {
1667
+ r1: {
1668
+ value: '1'
1669
+ }
1670
+ },
1671
+ completeAnswer: '\\frac{3}{6}=\\frac{2}{2}'
1672
+ };
1673
+ env = {
1674
+ mode: 'evaluate'
1675
+ };
1676
+ _context37.next = 5;
1677
+ return (0, _index.outcome)(equation_03, session, env);
1678
+
1679
+ case 5:
1680
+ result = _context37.sent;
1681
+ expect(result).toEqual({
1682
+ score: 0
1683
+ });
1684
+
1685
+ case 7:
1686
+ case "end":
1687
+ return _context37.stop();
1688
+ }
1689
+ }
1690
+ }, _callee37);
1691
+ })));
1692
+ });
1693
+ describe('PD-1031', function () {
1694
+ var expression_01 = {
1695
+ id: 1,
1696
+ element: 'math-inline',
1697
+ feedbackEnabled: true,
1698
+ promptEnabled: true,
1699
+ rationaleEnabled: true,
1700
+ teacherInstructionsEnabled: true,
1701
+ studentInstructionsEnabled: true,
1702
+ equationEditor: 3,
1703
+ teacherInstructions: '',
1704
+ responseType: 'Advanced Multi',
1705
+ expression: '{{response}}\\ml',
1706
+ rationale: '<p>A correct response is shown below:</p><ul><li>1/3 = <strong>2</strong>/6</li><li>3/4 = <strong>6</strong>/8</li><li>3/6 = <strong>1</strong>/2</li></ul>',
1707
+ responses: [{
1708
+ answer: '1,000\\ml',
1709
+ validation: 'literal',
1710
+ id: '1'
1711
+ }]
1712
+ };
1713
+ it('scores 1', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee38() {
1714
+ var session, env, result;
1715
+ return _regenerator["default"].wrap(function _callee38$(_context38) {
1716
+ while (1) {
1717
+ switch (_context38.prev = _context38.next) {
1718
+ case 0:
1719
+ session = {
1720
+ id: '1',
1721
+ answers: {
1722
+ r1: {
1723
+ value: '3'
1724
+ }
1725
+ },
1726
+ completeAnswer: '1000\\ml'
1727
+ };
1728
+ env = {
1729
+ mode: 'evaluate'
1730
+ };
1731
+ _context38.next = 4;
1732
+ return (0, _index.outcome)(expression_01, session, env);
1733
+
1734
+ case 4:
1735
+ result = _context38.sent;
1736
+ expect(result).toEqual({
1737
+ score: 1
1738
+ });
1739
+
1740
+ case 6:
1741
+ case "end":
1742
+ return _context38.stop();
1743
+ }
1744
+ }
1745
+ }, _callee38);
1746
+ })));
1747
+ var expression_02 = {
1748
+ id: 1,
1749
+ element: 'math-inline',
1750
+ feedbackEnabled: true,
1751
+ promptEnabled: true,
1752
+ rationaleEnabled: true,
1753
+ teacherInstructionsEnabled: true,
1754
+ studentInstructionsEnabled: true,
1755
+ equationEditor: 3,
1756
+ teacherInstructions: '',
1757
+ responseType: 'Advanced Multi',
1758
+ expression: '{{response}}\\ml',
1759
+ rationale: '<p>A correct response is shown below:</p><ul><li>1/3 = <strong>2</strong>/6</li><li>3/4 = <strong>6</strong>/8</li><li>3/6 = <strong>1</strong>/2</li></ul>',
1760
+ responses: [{
1761
+ answer: '1000\\ml',
1762
+ validation: 'literal',
1763
+ id: '1'
1764
+ }]
1765
+ };
1766
+ it('scores 1', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee39() {
1767
+ var session, env, result;
1768
+ return _regenerator["default"].wrap(function _callee39$(_context39) {
1769
+ while (1) {
1770
+ switch (_context39.prev = _context39.next) {
1771
+ case 0:
1772
+ session = {
1773
+ id: '1',
1774
+ answers: {
1775
+ r1: {
1776
+ value: '3'
1777
+ }
1778
+ },
1779
+ completeAnswer: '1,000\\ml'
1780
+ };
1781
+ env = {
1782
+ mode: 'evaluate'
1783
+ };
1784
+ _context39.next = 4;
1785
+ return (0, _index.outcome)(expression_02, session, env);
1786
+
1787
+ case 4:
1788
+ result = _context39.sent;
1789
+ expect(result).toEqual({
1790
+ score: 1
1791
+ });
1792
+
1793
+ case 6:
1794
+ case "end":
1795
+ return _context39.stop();
1796
+ }
1797
+ }
1798
+ }, _callee39);
1799
+ })));
1800
+ var expression_03 = {
1801
+ id: 1,
1802
+ element: 'math-inline',
1803
+ feedbackEnabled: true,
1804
+ promptEnabled: true,
1805
+ rationaleEnabled: true,
1806
+ teacherInstructionsEnabled: true,
1807
+ studentInstructionsEnabled: true,
1808
+ equationEditor: 3,
1809
+ teacherInstructions: '',
1810
+ responseType: 'Advanced Multi',
1811
+ expression: '{{response}}\\ml',
1812
+ rationale: '<p>A correct response is shown below:</p><ul><li>1/3 = <strong>2</strong>/6</li><li>3/4 = <strong>6</strong>/8</li><li>3/6 = <strong>1</strong>/2</li></ul>',
1813
+ responses: [{
1814
+ answer: '1,000\\ml',
1815
+ validation: 'literal',
1816
+ id: '1'
1817
+ }]
1818
+ };
1819
+ it('scores 1', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee40() {
1820
+ var session, env, result;
1821
+ return _regenerator["default"].wrap(function _callee40$(_context40) {
1822
+ while (1) {
1823
+ switch (_context40.prev = _context40.next) {
1824
+ case 0:
1825
+ session = {
1826
+ id: '1',
1827
+ answers: {
1828
+ r1: {
1829
+ value: '3'
1830
+ }
1831
+ },
1832
+ completeAnswer: '1000\\ml'
1833
+ };
1834
+ env = {
1835
+ mode: 'evaluate'
1836
+ };
1837
+ _context40.next = 4;
1838
+ return (0, _index.outcome)(expression_03, session, env);
1839
+
1840
+ case 4:
1841
+ result = _context40.sent;
1842
+ expect(result).toEqual({
1843
+ score: 1
1844
+ });
1845
+
1846
+ case 6:
1847
+ case "end":
1848
+ return _context40.stop();
1849
+ }
1850
+ }
1851
+ }, _callee40);
1852
+ })));
1853
+ var expression_04 = {
1854
+ id: 1,
1855
+ element: 'math-inline',
1856
+ feedbackEnabled: true,
1857
+ promptEnabled: true,
1858
+ rationaleEnabled: true,
1859
+ teacherInstructionsEnabled: true,
1860
+ studentInstructionsEnabled: true,
1861
+ equationEditor: 3,
1862
+ teacherInstructions: '',
1863
+ responseType: 'Advanced Multi',
1864
+ expression: '$\\{{response}}',
1865
+ rationale: '<p>A correct response is shown below:</p><ul><li>1/3 = <strong>2</strong>/6</li><li>3/4 = <strong>6</strong>/8</li><li>3/6 = <strong>1</strong>/2</li></ul>',
1866
+ responses: [{
1867
+ answer: '5000\\$',
1868
+ validation: 'literal',
1869
+ id: '1'
1870
+ }]
1871
+ };
1872
+ it('scores 1', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee41() {
1873
+ var session, env, result;
1874
+ return _regenerator["default"].wrap(function _callee41$(_context41) {
1875
+ while (1) {
1876
+ switch (_context41.prev = _context41.next) {
1877
+ case 0:
1878
+ session = {
1879
+ id: '1',
1880
+ answers: {
1881
+ r1: {
1882
+ value: '3'
1883
+ }
1884
+ },
1885
+ completeAnswer: '5,000\\$'
1886
+ };
1887
+ env = {
1888
+ mode: 'evaluate'
1889
+ };
1890
+ _context41.next = 4;
1891
+ return (0, _index.outcome)(expression_04, session, env);
1892
+
1893
+ case 4:
1894
+ result = _context41.sent;
1895
+ expect(result).toEqual({
1896
+ score: 1
1897
+ });
1898
+
1899
+ case 6:
1900
+ case "end":
1901
+ return _context41.stop();
1902
+ }
1903
+ }
1904
+ }, _callee41);
1905
+ })));
1906
+ var expression_05 = {
1907
+ id: 1,
1908
+ element: 'math-inline',
1909
+ feedbackEnabled: true,
1910
+ promptEnabled: true,
1911
+ rationaleEnabled: true,
1912
+ teacherInstructionsEnabled: true,
1913
+ studentInstructionsEnabled: true,
1914
+ equationEditor: 3,
1915
+ teacherInstructions: '',
1916
+ responseType: 'Advanced Multi',
1917
+ expression: 'y={{response}}x^2+{{response}}x+{{response}}',
1918
+ rationale: '<p>A correct response is shown below:</p><ul><li>1/3 = <strong>2</strong>/6</li><li>3/4 = <strong>6</strong>/8</li><li>3/6 = <strong>1</strong>/2</li></ul>',
1919
+ responses: [{
1920
+ answer: 'y=1000x^2+250x+5000',
1921
+ validation: 'literal',
1922
+ id: '1'
1923
+ }]
1924
+ };
1925
+ it('scores 1', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee42() {
1926
+ var session, env, result;
1927
+ return _regenerator["default"].wrap(function _callee42$(_context42) {
1928
+ while (1) {
1929
+ switch (_context42.prev = _context42.next) {
1930
+ case 0:
1931
+ session = {
1932
+ id: '1',
1933
+ answers: {
1934
+ r1: {
1935
+ value: '3'
1936
+ }
1937
+ },
1938
+ completeAnswer: 'y=1,000x^2+250x+5,000'
1939
+ };
1940
+ env = {
1941
+ mode: 'evaluate'
1942
+ };
1943
+ _context42.next = 4;
1944
+ return (0, _index.outcome)(expression_05, session, env);
1945
+
1946
+ case 4:
1947
+ result = _context42.sent;
1948
+ expect(result).toEqual({
1949
+ score: 1
1950
+ });
1951
+
1952
+ case 6:
1953
+ case "end":
1954
+ return _context42.stop();
1955
+ }
1956
+ }
1957
+ }, _callee42);
1958
+ })));
1959
+ it('scores 1', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee43() {
1960
+ var session, env, result;
1961
+ return _regenerator["default"].wrap(function _callee43$(_context43) {
1962
+ while (1) {
1963
+ switch (_context43.prev = _context43.next) {
1964
+ case 0:
1965
+ session = {
1966
+ id: '1',
1967
+ answers: {
1968
+ r1: {
1969
+ value: '3'
1970
+ }
1971
+ },
1972
+ completeAnswer: 'y=1000x^2+250x+5,000'
1973
+ };
1974
+ env = {
1975
+ mode: 'evaluate'
1976
+ };
1977
+ _context43.next = 4;
1978
+ return (0, _index.outcome)(expression_05, session, env);
1979
+
1980
+ case 4:
1981
+ result = _context43.sent;
1982
+ expect(result).toEqual({
1983
+ score: 1
1984
+ });
1985
+
1986
+ case 6:
1987
+ case "end":
1988
+ return _context43.stop();
1989
+ }
1990
+ }
1991
+ }, _callee43);
1992
+ })));
1993
+ it('scores 1', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee44() {
1994
+ var session, env, result;
1995
+ return _regenerator["default"].wrap(function _callee44$(_context44) {
1996
+ while (1) {
1997
+ switch (_context44.prev = _context44.next) {
1998
+ case 0:
1999
+ session = {
2000
+ id: '1',
2001
+ answers: {
2002
+ r1: {
2003
+ value: '3'
2004
+ }
2005
+ },
2006
+ completeAnswer: 'y=1,000x^2+250x+5000'
2007
+ };
2008
+ env = {
2009
+ mode: 'evaluate'
2010
+ };
2011
+ _context44.next = 4;
2012
+ return (0, _index.outcome)(expression_05, session, env);
2013
+
2014
+ case 4:
2015
+ result = _context44.sent;
2016
+ expect(result).toEqual({
2017
+ score: 1
2018
+ });
2019
+
2020
+ case 6:
2021
+ case "end":
2022
+ return _context44.stop();
2023
+ }
2024
+ }
2025
+ }, _callee44);
2026
+ })));
2027
+ var expression_06 = {
2028
+ id: 1,
2029
+ element: 'math-inline',
2030
+ feedbackEnabled: true,
2031
+ promptEnabled: true,
2032
+ rationaleEnabled: true,
2033
+ teacherInstructionsEnabled: true,
2034
+ studentInstructionsEnabled: true,
2035
+ equationEditor: 3,
2036
+ teacherInstructions: '',
2037
+ responseType: 'Advanced Multi',
2038
+ expression: 'y={{response}}x^2+{{response}}x+{{response}}',
2039
+ rationale: '<p>A correct response is shown below:</p><ul><li>1/3 = <strong>2</strong>/6</li><li>3/4 = <strong>6</strong>/8</li><li>3/6 = <strong>1</strong>/2</li></ul>',
2040
+ responses: [{
2041
+ answer: 'y=1,000x^2+250x+5,000',
2042
+ validation: 'literal',
2043
+ id: '1'
2044
+ }]
2045
+ };
2046
+ it('scores 1', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee45() {
2047
+ var session, env, result;
2048
+ return _regenerator["default"].wrap(function _callee45$(_context45) {
2049
+ while (1) {
2050
+ switch (_context45.prev = _context45.next) {
2051
+ case 0:
2052
+ session = {
2053
+ id: '1',
2054
+ answers: {
2055
+ r1: {
2056
+ value: '3'
2057
+ }
2058
+ },
2059
+ completeAnswer: 'y=1000x^2+250x+5000'
2060
+ };
2061
+ env = {
2062
+ mode: 'evaluate'
2063
+ };
2064
+ _context45.next = 4;
2065
+ return (0, _index.outcome)(expression_06, session, env);
2066
+
2067
+ case 4:
2068
+ result = _context45.sent;
2069
+ expect(result).toEqual({
2070
+ score: 1
2071
+ });
2072
+
2073
+ case 6:
2074
+ case "end":
2075
+ return _context45.stop();
2076
+ }
2077
+ }
2078
+ }, _callee45);
2079
+ })));
2080
+ it('scores 1', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee46() {
2081
+ var session, env, result;
2082
+ return _regenerator["default"].wrap(function _callee46$(_context46) {
2083
+ while (1) {
2084
+ switch (_context46.prev = _context46.next) {
2085
+ case 0:
2086
+ session = {
2087
+ id: '1',
2088
+ answers: {
2089
+ r1: {
2090
+ value: '3'
2091
+ }
2092
+ },
2093
+ completeAnswer: 'y=1000x^2+250x+5,000'
2094
+ };
2095
+ env = {
2096
+ mode: 'evaluate'
2097
+ };
2098
+ _context46.next = 4;
2099
+ return (0, _index.outcome)(expression_06, session, env);
2100
+
2101
+ case 4:
2102
+ result = _context46.sent;
2103
+ expect(result).toEqual({
2104
+ score: 1
2105
+ });
2106
+
2107
+ case 6:
2108
+ case "end":
2109
+ return _context46.stop();
2110
+ }
2111
+ }
2112
+ }, _callee46);
2113
+ })));
2114
+ it('scores 1', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee47() {
2115
+ var session, env, result;
2116
+ return _regenerator["default"].wrap(function _callee47$(_context47) {
2117
+ while (1) {
2118
+ switch (_context47.prev = _context47.next) {
2119
+ case 0:
2120
+ session = {
2121
+ id: '1',
2122
+ answers: {
2123
+ r1: {
2124
+ value: '3'
2125
+ }
2126
+ },
2127
+ completeAnswer: 'y=1,000x^2+250x+5000'
2128
+ };
2129
+ env = {
2130
+ mode: 'evaluate'
2131
+ };
2132
+ _context47.next = 4;
2133
+ return (0, _index.outcome)(expression_06, session, env);
2134
+
2135
+ case 4:
2136
+ result = _context47.sent;
2137
+ expect(result).toEqual({
2138
+ score: 1
2139
+ });
2140
+
2141
+ case 6:
2142
+ case "end":
2143
+ return _context47.stop();
2144
+ }
2145
+ }
2146
+ }, _callee47);
2147
+ })));
2148
+ var expression_07 = {
2149
+ id: 1,
2150
+ element: 'math-inline',
2151
+ feedbackEnabled: true,
2152
+ promptEnabled: true,
2153
+ rationaleEnabled: true,
2154
+ teacherInstructionsEnabled: true,
2155
+ studentInstructionsEnabled: true,
2156
+ equationEditor: 3,
2157
+ teacherInstructions: '',
2158
+ responseType: 'Advanced Multi',
2159
+ expression: '\\frac{ x }{{{ response }}}',
2160
+ rationale: '<p>A correct response is shown below:</p><ul><li>1/3 = <strong>2</strong>/6</li><li>3/4 = <strong>6</strong>/8</li><li>3/6 = <strong>1</strong>/2</li></ul>',
2161
+ responses: [{
2162
+ answer: '\\frac{x}{1000}',
2163
+ validation: 'literal',
2164
+ id: '1'
2165
+ }]
2166
+ };
2167
+ it('scores 1', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee48() {
2168
+ var session, env, result;
2169
+ return _regenerator["default"].wrap(function _callee48$(_context48) {
2170
+ while (1) {
2171
+ switch (_context48.prev = _context48.next) {
2172
+ case 0:
2173
+ session = {
2174
+ id: '1',
2175
+ answers: {
2176
+ r1: {
2177
+ value: '3'
2178
+ }
2179
+ },
2180
+ completeAnswer: '\\frac{x}{1,000}'
2181
+ };
2182
+ env = {
2183
+ mode: 'evaluate'
2184
+ };
2185
+ _context48.next = 4;
2186
+ return (0, _index.outcome)(expression_07, session, env);
2187
+
2188
+ case 4:
2189
+ result = _context48.sent;
2190
+ expect(result).toEqual({
2191
+ score: 1
2192
+ });
2193
+
2194
+ case 6:
2195
+ case "end":
2196
+ return _context48.stop();
2197
+ }
2198
+ }
2199
+ }, _callee48);
2200
+ })));
2201
+ var expression_08 = {
2202
+ id: 1,
2203
+ element: 'math-inline',
2204
+ feedbackEnabled: true,
2205
+ promptEnabled: true,
2206
+ rationaleEnabled: true,
2207
+ teacherInstructionsEnabled: true,
2208
+ studentInstructionsEnabled: true,
2209
+ equationEditor: 3,
2210
+ teacherInstructions: '',
2211
+ responseType: 'Advanced Multi',
2212
+ expression: '\\frac{ x }{{{ response }}}',
2213
+ rationale: '<p>A correct response is shown below:</p><ul><li>1/3 = <strong>2</strong>/6</li><li>3/4 = <strong>6</strong>/8</li><li>3/6 = <strong>1</strong>/2</li></ul>',
2214
+ responses: [{
2215
+ answer: '\\frac{x}{1,000}',
2216
+ validation: 'literal',
2217
+ id: '1'
2218
+ }]
2219
+ };
2220
+ it('scores 1', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee49() {
2221
+ var session, env, result;
2222
+ return _regenerator["default"].wrap(function _callee49$(_context49) {
2223
+ while (1) {
2224
+ switch (_context49.prev = _context49.next) {
2225
+ case 0:
2226
+ session = {
2227
+ id: '1',
2228
+ answers: {
2229
+ r1: {
2230
+ value: '3'
2231
+ }
2232
+ },
2233
+ completeAnswer: '\\frac{x}{1000}'
2234
+ };
2235
+ env = {
2236
+ mode: 'evaluate'
2237
+ };
2238
+ _context49.next = 4;
2239
+ return (0, _index.outcome)(expression_08, session, env);
2240
+
2241
+ case 4:
2242
+ result = _context49.sent;
2243
+ expect(result).toEqual({
2244
+ score: 1
2245
+ });
2246
+
2247
+ case 6:
2248
+ case "end":
2249
+ return _context49.stop();
2250
+ }
2251
+ }
2252
+ }, _callee49);
2253
+ })));
2254
+ var equation_01 = {
2255
+ id: 1,
2256
+ element: 'math-inline',
2257
+ feedbackEnabled: true,
2258
+ promptEnabled: true,
2259
+ rationaleEnabled: true,
2260
+ teacherInstructionsEnabled: true,
2261
+ studentInstructionsEnabled: true,
2262
+ equationEditor: 3,
2263
+ teacherInstructions: '',
2264
+ responseType: 'Advanced Multi',
2265
+ expression: '\\frac{1000}{3}=\\frac{{response}}{6}',
2266
+ rationale: '<p>A correct response is shown below:</p><ul><li>1/3 = <strong>2</strong>/6</li><li>3/4 = <strong>6</strong>/8</li><li>3/6 = <strong>1</strong>/2</li></ul>',
2267
+ responses: [{
2268
+ answer: '\\frac{1,000}{3}=\\frac{2}{6}',
2269
+ validation: 'literal',
2270
+ id: '1'
2271
+ }]
2272
+ };
2273
+ it('scores 1', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee50() {
2274
+ var session, env, result;
2275
+ return _regenerator["default"].wrap(function _callee50$(_context50) {
2276
+ while (1) {
2277
+ switch (_context50.prev = _context50.next) {
2278
+ case 0:
2279
+ session = {
2280
+ id: '1',
2281
+ answers: {
2282
+ r1: {
2283
+ value: '3'
2284
+ }
2285
+ },
2286
+ completeAnswer: '\\frac{1000}{3}=\\frac{2}{6}'
2287
+ };
2288
+ env = {
2289
+ mode: 'evaluate'
2290
+ };
2291
+ _context50.next = 4;
2292
+ return (0, _index.outcome)(equation_01, session, env);
2293
+
2294
+ case 4:
2295
+ result = _context50.sent;
2296
+ expect(result).toEqual({
2297
+ score: 1
2298
+ });
2299
+
2300
+ case 6:
2301
+ case "end":
2302
+ return _context50.stop();
2303
+ }
2304
+ }
2305
+ }, _callee50);
2306
+ })));
2307
+ it('scores 0', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee51() {
2308
+ var session, env, result;
2309
+ return _regenerator["default"].wrap(function _callee51$(_context51) {
2310
+ while (1) {
2311
+ switch (_context51.prev = _context51.next) {
2312
+ case 0:
2313
+ _mathValidation.latexEqual.mockReturnValueOnce(false);
2314
+
2315
+ session = {
2316
+ id: '1',
2317
+ answers: {
2318
+ r1: {
2319
+ value: '2'
2320
+ }
2321
+ },
2322
+ completeAnswer: '\\frac{1}{3}=\\frac{1}{6}'
2323
+ };
2324
+ env = {
2325
+ mode: 'evaluate'
2326
+ };
2327
+ _context51.next = 5;
2328
+ return (0, _index.outcome)(equation_01, session, env);
2329
+
2330
+ case 5:
2331
+ result = _context51.sent;
2332
+ expect(result).toEqual({
2333
+ score: 0
2334
+ });
2335
+
2336
+ case 7:
2337
+ case "end":
2338
+ return _context51.stop();
2339
+ }
2340
+ }
2341
+ }, _callee51);
2342
+ })));
2343
+ });
2344
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fX3Rlc3RzX18vaW5kZXgudGVzdC5qc3giXSwibmFtZXMiOlsiamVzdCIsIm1vY2siLCJsYXRleEVxdWFsIiwiZm4iLCJtb2NrUmV0dXJuVmFsdWUiLCJkZWZhdWx0TW9kZWwiLCJyZXNwb25zZVR5cGUiLCJlcXVhdGlvbkVkaXRvciIsImV4cHJlc3Npb24iLCJwcm9tcHQiLCJyZXNwb25zZXMiLCJpZCIsImFuc3dlciIsImFsdGVybmF0ZXMiLCJ2YWxpZGF0aW9uIiwibm90ZSIsImN1c3RvbUtleXMiLCJta1F1ZXN0aW9uIiwibW9kZWwiLCJkZXNjcmliZSIsInJlc3VsdCIsInF1ZXN0aW9uIiwic2Vzc2lvbiIsImVudiIsIm91dGNvbWVSZXN1bHQiLCJiZWZvcmVFYWNoIiwibW9kZSIsIml0IiwiZXhwZWN0IiwiZGlzYWJsZWQiLCJ0b0VxdWFsIiwiY29ycmVjdG5lc3MiLCJ1bmRlZmluZWQiLCJjb3JyZWN0UmVzcG9uc2UiLCJmZWVkYmFjayIsImNvbmZpZyIsInJhdGlvbmFsZSIsInRlYWNoZXJJbnN0cnVjdGlvbnMiLCJjb3JyZWN0Iiwic2NvcmUiLCJjb21wbGV0ZUFuc3dlciIsInJldHVybk91dGNvbWUiLCJKU09OIiwic3RyaW5naWZ5IiwiZW1wdHkiLCJlbGVtZW50IiwiY2EiLCJyb2xlIiwiY3MiLCJ0b01hdGNoT2JqZWN0IiwiYW5zd2VycyIsInIxIiwidmFsdWUiLCJhbGxvd1NwYWNlcyIsInZhbCIsImVhY2giLCJyMiIsInIzIiwiY3IiLCJleHBlY3RlZCIsImNycyIsInEiLCJjb25zb2xlIiwiZXJyb3IiLCJmYWlsIiwicmVzcG9uc2UiLCJub3QiLCJ0b0JlRGVmaW5lZCIsInNlc3MiLCJub1Jlc3VsdCIsInRvQmVOdWxsIiwibW9ja1JldHVyblZhbHVlT25jZSIsImxvZyIsInJlc29sdmVzIiwiZmVlZGJhY2tFbmFibGVkIiwicHJvbXB0RW5hYmxlZCIsInJhdGlvbmFsZUVuYWJsZWQiLCJ0ZWFjaGVySW5zdHJ1Y3Rpb25zRW5hYmxlZCIsInN0dWRlbnRJbnN0cnVjdGlvbnNFbmFibGVkIiwiZXF1YXRpb25fMDEiLCJlcXVhdGlvbl8wMiIsImVxdWF0aW9uXzAzIiwiZXhwcmVzc2lvbl8wMSIsImV4cHJlc3Npb25fMDIiLCJleHByZXNzaW9uXzAzIiwiZXhwcmVzc2lvbl8wNCIsImV4cHJlc3Npb25fMDUiLCJleHByZXNzaW9uXzA2IiwiZXhwcmVzc2lvbl8wNyIsImV4cHJlc3Npb25fMDgiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOzs7Ozs7OztBQUVBQSxJQUFJLENBQUNDLElBQUwsQ0FBVSxnQ0FBVixFQUE0QztBQUFBLFNBQU87QUFDakRDLElBQUFBLFVBQVUsRUFBRUYsSUFBSSxDQUFDRyxFQUFMLEdBQVVDLGVBQVYsQ0FBMEIsSUFBMUI7QUFEcUMsR0FBUDtBQUFBLENBQTVDO0FBSUEsSUFBTUMsWUFBWSxHQUFHO0FBQ25CQyxFQUFBQSxZQUFZLEVBQUUsZ0JBREs7QUFFbkJDLEVBQUFBLGNBQWMsRUFBRSxHQUZHO0FBR25CQyxFQUFBQSxVQUFVLEVBQUUsMENBSE87QUFJbkJDLEVBQUFBLE1BQU0sRUFDSix5aUJBTGlCO0FBTW5CQyxFQUFBQSxTQUFTLEVBQUUsQ0FDVDtBQUNFQyxJQUFBQSxFQUFFLEVBQUUsR0FETjtBQUVFQyxJQUFBQSxNQUFNLEVBQUUseUJBRlY7QUFHRUMsSUFBQUEsVUFBVSxFQUFFO0FBQ1YsU0FBRyx5QkFETztBQUVWLFNBQUcsOEJBRk87QUFHVixTQUFHO0FBSE8sS0FIZDtBQVFFQyxJQUFBQSxVQUFVLEVBQUU7QUFSZCxHQURTLENBTlE7QUFrQm5CQyxFQUFBQSxJQUFJLEVBQUUsa0pBbEJhO0FBbUJuQkMsRUFBQUEsVUFBVSxFQUFFLENBQUMsaUJBQUQsRUFBb0IsWUFBcEIsRUFBa0MsYUFBbEMsQ0FuQk87QUFvQm5CTCxFQUFBQSxFQUFFLEVBQUU7QUFwQmUsQ0FBckI7O0FBdUJBLElBQU1NLFVBQVUsR0FBRyxTQUFiQSxVQUFhLENBQUNDLEtBQUQ7QUFB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Rks7QUFHZFosY0FBQUEsY0FBYyxFQUFFO0FBSEYsYUFGSDtBQVFQakIsWUFBQUEsR0FSTyxHQVFEO0FBQUVHLGNBQUFBLElBQUksRUFBRTtBQUFSLGFBUkM7QUFBQTtBQUFBLG1CQVNRLG9CQUFRcUQsV0FBUixFQUFxQnpELE9BQXJCLEVBQThCQyxHQUE5QixDQVRSOztBQUFBO0FBU1BILFlBQUFBLE1BVE87QUFVYlEsWUFBQUEsTUFBTSxDQUFDUixNQUFELENBQU4sQ0FBZVUsT0FBZixDQUF1QjtBQUFFUyxjQUFBQSxLQUFLLEVBQUU7QUFBVCxhQUF2Qjs7QUFWYTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxHQUFiLEdBQUY7QUFZRCxDQXhYTyxDQUFSIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbGF0ZXhFcXVhbCB9IGZyb20gJ0BwaWUtZnJhbWV3b3JrL21hdGgtdmFsaWRhdGlvbic7XG5pbXBvcnQgeyBtb2RlbCwgb3V0Y29tZSwgY3JlYXRlQ29ycmVjdFJlc3BvbnNlU2Vzc2lvbiB9IGZyb20gJy4uL2luZGV4JztcblxuamVzdC5tb2NrKCdAcGllLWZyYW1ld29yay9tYXRoLXZhbGlkYXRpb24nLCAoKSA9PiAoe1xuICBsYXRleEVxdWFsOiBqZXN0LmZuKCkubW9ja1JldHVyblZhbHVlKHRydWUpLFxufSkpO1xuXG5jb25zdCBkZWZhdWx0TW9kZWwgPSB7XG4gIHJlc3BvbnNlVHlwZTogJ0FkdmFuY2VkIE11bHRpJyxcbiAgZXF1YXRpb25FZGl0b3I6ICczJyxcbiAgZXhwcmVzc2lvbjogJ3t7cmVzcG9uc2V9fSA9IHt7cmVzcG9uc2V9fSBcXFxcdGV4dHtlZ2dzfScsXG4gIHByb21wdDpcbiAgICAnPHA+U2FtIHNlbGxzIGJhc2tldHMgb2YgZWdncyBhdCBoaXMgZmFybSBzdGFuZC4gSGUgc29sZCAxMiBiYXNrZXRzIGFuZCB3cm90ZSB0aGUgbnVtYmVyIHNlbnRlbmNlIGJlbG93IHRvIHNob3cgaG93IG1hbnkgZWdncyBoZSBzb2xkIGluIGFsbC48L3A+PHA+PHNwYW4gY2xhc3M9XCJlcXVhdGlvbi1ibG9ja1wiPjxtYXRoIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTFwiID5cXG4gPG1yb3c+XFxuICA8bW4+MTI8L21uPjxtbz4mI3gwMEQ3OzwvbW8+PG1vPiYjeDI1QTE7PC9tbz48bW8+PTwvbW8+PG1uPjcyPC9tbj5cXG4gPC9tcm93PlxcbjwvbWF0aD4gPC9zcGFuPjwvcD48cD5XaGF0IDxzcGFuIGNsYXNzPVwicmVsYXRpdmUtZW1waGFzaXNcIj5kaXZpc2lvbjwvc3Bhbj4gbnVtYmVyIHNlbnRlbmNlIGNhbiBiZSB1c2VkIHRvIHNob3cgaG93IG1hbnkgZWdncyB3ZXJlIGluIGVhY2ggYmFza2V0PzwvcD48cD5Vc2UgdGhlIG9uLXNjcmVlbiBrZXlib2FyZCB0byB0eXBlIHlvdXIgbnVtYmVyIHNlbnRlbmNlIGFuZCBhbnN3ZXIgaW4gdGhlIGJveC48L3A+JyxcbiAgcmVzcG9uc2VzOiBbXG4gICAge1xuICAgICAgaWQ6ICcxJyxcbiAgICAgIGFuc3dlcjogJzcyXFxcXGRpdjEyPTZcXFxcdGV4dHtlZ2dzfScsXG4gICAgICBhbHRlcm5hdGVzOiB7XG4gICAgICAgIDE6ICc2PTcyXFxcXGRpdjEyXFxcXHRleHR7ZWdnc30nLFxuICAgICAgICAyOiAnXFxcXGZyYWN7NzJ9ezEyfT02XFxcXHRleHR7ZWdnc30nLFxuICAgICAgICAzOiAnNj1cXFxcZnJhY3s3Mn17MTJ9XFxcXHRleHR7ZWdnc30nLFxuICAgICAgfSxcbiAgICAgIHZhbGlkYXRpb246ICdsaXRlcmFsJyxcbiAgICB9LFxuICBdLFxuICBub3RlOiAnVGhlIGFuc3dlciBzaG93biBhYm92ZSBpcyB0aGUgcHJpbWFyeSBjb3JyZWN0IGFuc3dlciBzcGVjaWZpZWQgYnkgdGhlIGF1dGhvciBmb3IgdGhpcyBpdGVtLCBidXQgb3RoZXIgYW5zd2VycyBtYXkgYWxzbyBiZSByZWNvZ25pemVkIGFzIGNvcnJlY3QuJyxcbiAgY3VzdG9tS2V5czogWydcXFxcbGVmdChcXFxccmlnaHQpJywgJ1xcXFxmcmFje317fScsICd4XFxcXGZyYWN7fXt9J10sXG4gIGlkOiAxLFxufTtcblxuY29uc3QgbWtRdWVzdGlvbiA9IChtb2RlbCkgPT4gbW9kZWwgfHwgZGVmYXVsdE1vZGVsO1xuXG5kZXNjcmliZSgnbW9kZWwnLCAoKSA9PiB7XG4gIGxldCByZXN1bHQsIHF1ZXN0aW9uLCBzZXNzaW9uLCBlbnYsIG91dGNvbWVSZXN1bHQ7XG5cbiAgZGVzY3JpYmUoJ2dhdGhlcicsICgpID0+IHtcbiAgICBiZWZvcmVFYWNoKGFzeW5jICgpID0+IHtcbiAgICAgIHF1ZXN0aW9uID0gbWtRdWVzdGlvbigpO1xuICAgICAgc2Vzc2lvbiA9IHt9O1xuICAgICAgZW52ID0geyBtb2RlOiAnZ2F0aGVyJyB9O1xuICAgICAgcmVzdWx0ID0gYXdhaXQgbW9kZWwocXVlc3Rpb24sIHNlc3Npb24sIGVudik7XG4gICAgfSk7XG5cbiAgICBpdCgncmV0dXJucyBkaXNhYmxlZDpmYWxzZScsICgpID0+IHtcbiAgICAgIGV4cGVjdChyZXN1bHQuZGlzYWJsZWQpLnRvRXF1YWwoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JldHVybnMgdW5kZWZpbmVkIGZvciBjb3JyZWN0bmVzcyAnLCAoKSA9PiB7XG4gICAgICBleHBlY3QocmVzdWx0LmNvcnJlY3RuZXNzKS50b0VxdWFsKHVuZGVmaW5lZCk7XG4gICAgfSk7XG5cbiAgICBpdCgncmV0dXJucyB1bmRlZmluZWQgZm9yIGNvcnJlY3RSZXNwb25zZSAnLCAoKSA9PiB7XG4gICAgICBleHBlY3QocmVzdWx0LmNvcnJlY3RSZXNwb25zZSkudG9FcXVhbCh1bmRlZmluZWQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JldHVybnMgdW5kZWZpbmVkIGZvciBmZWVkYmFjaycsICgpID0+IHtcbiAgICAgIGV4cGVjdChyZXN1bHQuZmVlZGJhY2spLnRvRXF1YWwodW5kZWZpbmVkKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZXR1cm5zIGVtcHR5IGFycmF5IGZvciByZXNwb25zZXMnLCAoKSA9PiB7XG4gICAgICBleHBlY3QocmVzdWx0LmNvbmZpZy5yZXNwb25zZXMpLnRvRXF1YWwoW10pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JldHVybnMgbnVsbCBmb3IgcmF0aW9uYWxlJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KHJlc3VsdC5jb25maWcucmF0aW9uYWxlKS50b0VxdWFsKG51bGwpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JldHVybnMgbnVsbCBmb3IgdGVhY2hlciBpbnN0cnVjdGlvbnMnLCAoKSA9PiB7XG4gICAgICBleHBlY3QocmVzdWx0LmNvbmZpZy50ZWFjaGVySW5zdHJ1Y3Rpb25zKS50b0VxdWFsKG51bGwpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgndmlldycsICgpID0+IHtcbiAgICBiZWZvcmVFYWNoKGFzeW5jICgpID0+IHtcbiAgICAgIHF1ZXN0aW9uID0gbWtRdWVzdGlvbigpO1xuICAgICAgc2Vzc2lvbiA9IHt9O1xuICAgICAgZW52ID0geyBtb2RlOiAndmlldycgfTtcbiAgICAgIHJlc3VsdCA9IGF3YWl0IG1vZGVsKHF1ZXN0aW9uLCBzZXNzaW9uLCBlbnYpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JldHVybnMgZGlzYWJsZWQ6dHJ1ZScsICgpID0+IHtcbiAgICAgIGV4cGVjdChyZXN1bHQuZGlzYWJsZWQpLnRvRXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgncmV0dXJucyB1bmRlZmluZWQgZm9yIGNvcnJlY3RuZXNzICcsICgpID0+IHtcbiAgICAgIGV4cGVjdChyZXN1bHQuY29ycmVjdG5lc3MpLnRvRXF1YWwodW5kZWZpbmVkKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZXR1cm5zIHVuZGVmaW5lZCBmb3IgY29ycmVjdFJlc3BvbnNlICcsICgpID0+IHtcbiAgICAgIGV4cGVjdChyZXN1bHQuY29ycmVjdFJlc3BvbnNlKS50b0VxdWFsKHVuZGVmaW5lZCk7XG4gICAgfSk7XG5cbiAgICBpdCgncmV0dXJucyBkZWZhdWx0IGNvcnJlY3QgZm9yIGZlZWRiYWNrJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KHJlc3VsdC5mZWVkYmFjaykudG9FcXVhbCh1bmRlZmluZWQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JldHVybnMgZW1wdHkgYXJyYXkgZm9yIHJlc3BvbnNlcycsICgpID0+IHtcbiAgICAgIGV4cGVjdChyZXN1bHQuY29uZmlnLnJlc3BvbnNlcykudG9FcXVhbChbXSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdldmFsdWF0ZSAtIGVtcHR5JywgKCkgPT4ge1xuICAgIGJlZm9yZUVhY2goYXN5bmMgKCkgPT4ge1xuICAgICAgcXVlc3Rpb24gPSBta1F1ZXN0aW9uKCk7XG4gICAgICBzZXNzaW9uID0ge307XG4gICAgICBlbnYgPSB7IG1vZGU6ICdldmFsdWF0ZScgfTtcbiAgICAgIHJlc3VsdCA9IGF3YWl0IG1vZGVsKHF1ZXN0aW9uLCBzZXNzaW9uLCBlbnYpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JldHVybnMgZGlzYWJsZWQ6dHJ1ZScsICgpID0+IHtcbiAgICAgIGV4cGVjdChyZXN1bHQuZGlzYWJsZWQpLnRvRXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgncmV0dXJucyBlbXB0eSBmb3IgY29ycmVjdG5lc3MgJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KHJlc3VsdC5jb3JyZWN0bmVzcykudG9FcXVhbCh7XG4gICAgICAgIGNvcnJlY3Q6IGZhbHNlLFxuICAgICAgICBjb3JyZWN0bmVzczogJ3VuYW5zd2VyZWQnLFxuICAgICAgICBzY29yZTogJzAlJyxcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZXZhbHVhdGUgLSBjb3JyZWN0JywgKCkgPT4ge1xuICAgIGJlZm9yZUVhY2goYXN5bmMgKCkgPT4ge1xuICAgICAgZW52ID0geyBtb2RlOiAnZXZhbHVhdGUnIH07XG4gICAgfSk7XG5cbiAgICBpdCgncmV0dXJucyBjb3JyZWN0IGZvciBjb3JyZWN0bmVzcycsIGFzeW5jICgpID0+IHtcbiAgICAgIHF1ZXN0aW9uID0gbWtRdWVzdGlvbigpO1xuICAgICAgc2Vzc2lvbiA9IHsgY29tcGxldGVBbnN3ZXI6ICc3MlxcXFxkaXYxMj02XFxcXHRleHR7ZWdnc30nIH07XG4gICAgICBlbnYgPSB7IG1vZGU6ICdldmFsdWF0ZScgfTtcbiAgICAgIHJlc3VsdCA9IGF3YWl0IG1vZGVsKHF1ZXN0aW9uLCBzZXNzaW9uLCBlbnYpO1xuXG4gICAgICBleHBlY3QocmVzdWx0LmNvcnJlY3RuZXNzLmNvcnJlY3RuZXNzKS50b0VxdWFsKCdjb3JyZWN0Jyk7XG4gICAgICBleHBlY3QocmVzdWx0LmNvcnJlY3RuZXNzLnNjb3JlKS50b0VxdWFsKCcxMDAlJyk7XG5cbiAgICAgIHNlc3Npb24gPSB7IGNvbXBsZXRlQW5zd2VyOiAnNj03MlxcXFxkaXYxMlxcXFx0ZXh0e2VnZ3N9JyB9O1xuXG4gICAgICByZXN1bHQgPSBhd2FpdCBtb2RlbChxdWVzdGlvbiwgc2Vzc2lvbiwgZW52KTtcblxuICAgICAgZXhwZWN0KHJlc3VsdC5jb3JyZWN0bmVzcy5jb3JyZWN0bmVzcykudG9FcXVhbCgnY29ycmVjdCcpO1xuICAgICAgZXhwZWN0KHJlc3VsdC5jb3JyZWN0bmVzcy5zY29yZSkudG9FcXVhbCgnMTAwJScpO1xuXG4gICAgICBzZXNzaW9uID0geyBjb21wbGV0ZUFuc3dlcjogJ1xcXFxmcmFjezcyfXsxMn09NlxcXFx0ZXh0e2VnZ3N9JyB9O1xuXG4gICAgICByZXN1bHQgPSBhd2FpdCBtb2RlbChxdWVzdGlvbiwgc2Vzc2lvbiwgZW52KTtcblxuICAgICAgZXhwZWN0KHJlc3VsdC5jb3JyZWN0bmVzcy5jb3JyZWN0bmVzcykudG9FcXVhbCgnY29ycmVjdCcpO1xuICAgICAgZXhwZWN0KHJlc3VsdC5jb3JyZWN0bmVzcy5zY29yZSkudG9FcXVhbCgnMTAwJScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JldHVybnMgY29ycmVjdCBmb3IgY29ycmVjdG5lc3Mgd2l0aCB0ZXh0IG5vZGVzIHRvbycsIGFzeW5jICgpID0+IHtcbiAgICAgIHF1ZXN0aW9uID0gbWtRdWVzdGlvbigpO1xuICAgICAgc2Vzc2lvbiA9IHsgY29tcGxldGVBbnN3ZXI6ICc3MlxcXFxkaXYxMj02XFxcXHRleHR7ZWdnc30nIH07XG4gICAgICBlbnYgPSB7IG1vZGU6ICdldmFsdWF0ZScgfTtcbiAgICAgIHJlc3VsdCA9IGF3YWl0IG1vZGVsKHF1ZXN0aW9uLCBzZXNzaW9uLCBlbnYpO1xuXG4gICAgICBleHBlY3QocmVzdWx0LmNvcnJlY3RuZXNzLmNvcnJlY3RuZXNzKS50b0VxdWFsKCdjb3JyZWN0Jyk7XG4gICAgICBleHBlY3QocmVzdWx0LmNvcnJlY3RuZXNzLnNjb3JlKS50b0VxdWFsKCcxMDAlJyk7XG4gICAgfSk7XG5cbiAgICBpdCgncmV0dXJucyBjb3JyZWN0IGZvciBjb3JyZWN0bmVzcyB3aXRoIHRleHQgbm9kZXMgdG9vIGluIHN5bWJvbGljJywgYXN5bmMgKCkgPT4ge1xuICAgICAgcXVlc3Rpb24gPSBta1F1ZXN0aW9uKCk7XG4gICAgICBzZXNzaW9uID0geyBjb21wbGV0ZUFuc3dlcjogJzcyXFxcXGRpdjEyPTZcXFxcdGV4dHtlZ2dzfScgfTtcbiAgICAgIHF1ZXN0aW9uLnJlc3BvbnNlc1swXS52YWxpZGF0aW9uID0gJ3N5bWJvbGljJztcbiAgICAgIGVudiA9IHsgbW9kZTogJ2V2YWx1YXRlJyB9O1xuICAgICAgcmVzdWx0ID0gYXdhaXQgbW9kZWwocXVlc3Rpb24sIHNlc3Npb24sIGVudik7XG5cbiAgICAgIGV4cGVjdChyZXN1bHQuY29ycmVjdG5lc3MuY29ycmVjdG5lc3MpLnRvRXF1YWwoJ2NvcnJlY3QnKTtcbiAgICAgIGV4cGVjdChyZXN1bHQuY29ycmVjdG5lc3Muc2NvcmUpLnRvRXF1YWwoJzEwMCUnKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZXR1cm5zIGNvcnJlY3QgZm9yIGNvcnJlY3RuZXNzIGV2ZW4gd2l0aCBoeXBoZW4gdnMgbWludXMgc2lnbicsIGFzeW5jICgpID0+IHtcbiAgICAgIHF1ZXN0aW9uID0gbWtRdWVzdGlvbih7XG4gICAgICAgIC4uLmRlZmF1bHRNb2RlbCxcbiAgICAgICAgZXhwcmVzc2lvbjogJ3t7cmVzcG9uc2V9fScsXG4gICAgICAgIHJlc3BvbnNlczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiAnMScsXG4gICAgICAgICAgICBhbnN3ZXI6ICc4LTQnLFxuICAgICAgICAgICAgYWx0ZXJuYXRlczoge1xuICAgICAgICAgICAgICAxOiAnNOKIkjInLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZhbGlkYXRpb246ICdsaXRlcmFsJyxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSk7XG5cbiAgICAgIGVudiA9IHsgbW9kZTogJ2V2YWx1YXRlJyB9O1xuXG4gICAgICBzZXNzaW9uID0geyBjb21wbGV0ZUFuc3dlcjogJzQtMicgfTtcbiAgICAgIHJlc3VsdCA9IGF3YWl0IG1vZGVsKHF1ZXN0aW9uLCBzZXNzaW9uLCBlbnYpO1xuXG4gICAgICBleHBlY3QocmVzdWx0LmNvcnJlY3RuZXNzLmNvcnJlY3RuZXNzKS50b0VxdWFsKCdjb3JyZWN0Jyk7XG4gICAgICBleHBlY3QocmVzdWx0LmNvcnJlY3RuZXNzLnNjb3JlKS50b0VxdWFsKCcxMDAlJyk7XG5cbiAgICAgIHNlc3Npb24gPSB7IGNvbXBsZXRlQW5zd2VyOiAnNOKIkjInIH07XG5cbiAgICAgIHJlc3VsdCA9IGF3YWl0IG1vZGVsKHF1ZXN0aW9uLCBzZXNzaW9uLCBlbnYpO1xuXG4gICAgICBleHBlY3QocmVzdWx0LmNvcnJlY3RuZXNzLmNvcnJlY3RuZXNzKS50b0VxdWFsKCdjb3JyZWN0Jyk7XG4gICAgICBleHBlY3QocmVzdWx0LmNvcnJlY3RuZXNzLnNjb3JlKS50b0VxdWFsKCcxMDAlJyk7XG5cbiAgICAgIHNlc3Npb24gPSB7IGNvbXBsZXRlQW5zd2VyOiAnOC00JyB9O1xuICAgICAgcmVzdWx0ID0gYXdhaXQgbW9kZWwocXVlc3Rpb24sIHNlc3Npb24sIGVudik7XG5cbiAgICAgIGV4cGVjdChyZXN1bHQuY29ycmVjdG5lc3MuY29ycmVjdG5lc3MpLnRvRXF1YWwoJ2NvcnJlY3QnKTtcbiAgICAgIGV4cGVjdChyZXN1bHQuY29ycmVjdG5lc3Muc2NvcmUpLnRvRXF1YWwoJzEwMCUnKTtcblxuICAgICAgc2Vzc2lvbiA9IHsgY29tcGxldGVBbnN3ZXI6ICc44oiSNCcgfTtcblxuICAgICAgcmVzdWx0ID0gYXdhaXQgbW9kZWwocXVlc3Rpb24sIHNlc3Npb24sIGVudik7XG5cbiAgICAgIGV4cGVjdChyZXN1bHQuY29ycmVjdG5lc3MuY29ycmVjdG5lc3MpLnRvRXF1YWwoJ2NvcnJlY3QnKTtcbiAgICAgIGV4cGVjdChyZXN1bHQuY29ycmVjdG5lc3Muc2NvcmUpLnRvRXF1YWwoJzEwMCUnKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZXR1cm5zIGNvcnJlY3QgZm9yIGNvcnJlY3RuZXNzIGluIGNkb3QgdnMgdGltZXMgc2l0dWF0aW9ucycsIGFzeW5jICgpID0+IHtcbiAgICAgIHF1ZXN0aW9uID0gbWtRdWVzdGlvbih7XG4gICAgICAgIC4uLmRlZmF1bHRNb2RlbCxcbiAgICAgICAgZXhwcmVzc2lvbjogJ3t7cmVzcG9uc2V9fScsXG4gICAgICAgIHJlc3BvbnNlczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiAnMScsXG4gICAgICAgICAgICBhbnN3ZXI6ICc4XFxcXGNkb3Q0JyxcbiAgICAgICAgICAgIGFsdGVybmF0ZXM6IHtcbiAgICAgICAgICAgICAgMTogJzRcXFxcdGltZXMyJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2YWxpZGF0aW9uOiAnbGl0ZXJhbCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0pO1xuXG4gICAgICBlbnYgPSB7IG1vZGU6ICdldmFsdWF0ZScgfTtcblxuICAgICAgc2Vzc2lvbiA9IHsgY29tcGxldGVBbnN3ZXI6ICc4XFxcXHRpbWVzNCcgfTtcbiAgICAgIHJlc3VsdCA9IGF3YWl0IG1vZGVsKHF1ZXN0aW9uLCBzZXNzaW9uLCBlbnYpO1xuXG4gICAgICBleHBlY3QocmVzdWx0LmNvcnJlY3RuZXNzLmNvcnJlY3RuZXNzKS50b0VxdWFsKCdjb3JyZWN0Jyk7XG4gICAgICBleHBlY3QocmVzdWx0LmNvcnJlY3RuZXNzLnNjb3JlKS50b0VxdWFsKCcxMDAlJyk7XG5cbiAgICAgIHNlc3Npb24gPSB7IGNvbXBsZXRlQW5zd2VyOiAnNFxcXFxjZG90MicgfTtcblxuICAgICAgcmVzdWx0ID0gYXdhaXQgbW9kZWwocXVlc3Rpb24sIHNlc3Npb24sIGVudik7XG5cbiAgICAgIGV4cGVjdChyZXN1bHQuY29ycmVjdG5lc3MuY29ycmVjdG5lc3MpLnRvRXF1YWwoJ2NvcnJlY3QnKTtcbiAgICAgIGV4cGVjdChyZXN1bHQuY29ycmVjdG5lc3Muc2NvcmUpLnRvRXF1YWwoJzEwMCUnKTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdhbGwgcmVzcG9uc2VzIGFyZSBjaGVja2VkJywgKCkgPT4ge1xuICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgIHF1ZXN0aW9uID0gbWtRdWVzdGlvbih7XG4gICAgICAgICAgLi4uZGVmYXVsdE1vZGVsLFxuICAgICAgICAgIHJlc3BvbnNlczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBhbnN3ZXI6ICcwLjUrMy41JyxcbiAgICAgICAgICAgICAgdmFsaWRhdGlvbjogJ3N5bWJvbGljJyxcbiAgICAgICAgICAgICAgYWx0ZXJuYXRlczogWycyJ10sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeyBhbnN3ZXI6ICdmb28nLCB2YWxpZGF0aW9uOiAnbGl0ZXJhbCcsIGlkOiAnMScgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnNCBpcyBjb3JyZWN0IC0gc3ltYm9saWMgbWF0Y2ggYW5zd2VyJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICByZXN1bHQgPSBhd2FpdCBtb2RlbChxdWVzdGlvbiwgeyBjb21wbGV0ZUFuc3dlcjogJzQnIH0sIGVudik7XG4gICAgICAgIGV4cGVjdChyZXN1bHQuY29ycmVjdG5lc3MuY29ycmVjdG5lc3MpLnRvRXF1YWwoJ2NvcnJlY3QnKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnMiBpcyBjb3JyZWN0IC0gc3ltYm9saWMgbWF0Y2ggcmVzcG9uc2VzWzBdLmFsdGVybmF0ZXNbMF0nLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIHJlc3VsdCA9IGF3YWl0IG1vZGVsKHF1ZXN0aW9uLCB7IGNvbXBsZXRlQW5zd2VyOiAnMicgfSwgZW52KTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdC5jb3JyZWN0bmVzcy5jb3JyZWN0bmVzcykudG9FcXVhbCgnY29ycmVjdCcpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdmb28gaXMgY29ycmVjdCAtIGxpdGVyYWwgbWF0Y2ggcmVzcG9uc2VbMV0nLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIHJlc3VsdCA9IGF3YWl0IG1vZGVsKHF1ZXN0aW9uLCB7IGNvbXBsZXRlQW5zd2VyOiAnZm9vJyB9LCBlbnYpO1xuICAgICAgICBleHBlY3QocmVzdWx0LmNvcnJlY3RuZXNzLmNvcnJlY3RuZXNzKS50b0VxdWFsKCdjb3JyZWN0Jyk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCd3b3JrcyBmb3IgaW5jb3JyZWN0IGxhdGV4IGZyYWMgY29tbWFuZCB0b28nLCBhc3luYyAoKSA9PiB7XG4gICAgICBxdWVzdGlvbiA9IG1rUXVlc3Rpb24oe1xuICAgICAgICAuLi5kZWZhdWx0TW9kZWwsXG4gICAgICAgIHJlc3BvbnNlVHlwZTogJ0FkdmFuY2VkIE11bHRpJyxcbiAgICAgICAgZXhwcmVzc2lvbjogJ3t7cmVzcG9uc2V9fScsXG4gICAgICAgIHJlc3BvbnNlczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFsdGVybmF0ZXM6IHt9LFxuICAgICAgICAgICAgYW5zd2VyOiAnMVxcXFxmcmFjMTQnLFxuICAgICAgICAgICAgdmFsaWRhdGlvbjogJ3N5bWJvbGljJyxcbiAgICAgICAgICAgIGlkOiAnMScsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0pO1xuICAgICAgc2Vzc2lvbiA9IHtcbiAgICAgICAgY29tcGxldGVBbnN3ZXI6ICcxXFxcXGZyYWN7MX17NH0nLFxuICAgICAgfTtcblxuICAgICAgZW52ID0geyBtb2RlOiAnZXZhbHVhdGUnIH07XG4gICAgICByZXN1bHQgPSBhd2FpdCBtb2RlbChxdWVzdGlvbiwgc2Vzc2lvbiwgZW52KTtcblxuICAgICAgZXhwZWN0KHJlc3VsdC5jb3JyZWN0bmVzcy5jb3JyZWN0bmVzcykudG9FcXVhbCgnY29ycmVjdCcpO1xuICAgICAgZXhwZWN0KHJlc3VsdC5jb3JyZWN0bmVzcy5zY29yZSkudG9FcXVhbCgnMTAwJScpO1xuXG4gICAgICBzZXNzaW9uID0ge1xuICAgICAgICBjb21wbGV0ZUFuc3dlcjogJzFcXFxcZnJhYzF7NH0nLFxuICAgICAgfTtcblxuICAgICAgcmVzdWx0ID0gYXdhaXQgbW9kZWwocXVlc3Rpb24sIHNlc3Npb24sIGVudik7XG5cbiAgICAgIGV4cGVjdChyZXN1bHQuY29ycmVjdG5lc3MuY29ycmVjdG5lc3MpLnRvRXF1YWwoJ2NvcnJlY3QnKTtcbiAgICAgIGV4cGVjdChyZXN1bHQuY29ycmVjdG5lc3Muc2NvcmUpLnRvRXF1YWwoJzEwMCUnKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3dvcmtzIGZvciBsaXRlcmFsIHZhbGlkYXRpb24gZm9yIGluY29tcGxldGUgbGF0ZXggY29tbWFuZCB0b28nLCBhc3luYyAoKSA9PiB7XG4gICAgcXVlc3Rpb24gPSBta1F1ZXN0aW9uKHtcbiAgICAgIC4uLmRlZmF1bHRNb2RlbCxcbiAgICAgIHJlc3BvbnNlVHlwZTogJ0FkdmFuY2VkIE11bHRpJyxcbiAgICAgIGV4cHJlc3Npb246ICd7e3Jlc3BvbnNlfX0nLFxuICAgICAgcmVzcG9uc2VzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBhbHRlcm5hdGVzOiB7IDE6ICdwXFxcXGxlZnQoeFxcXFxyaWdodCknIH0sXG4gICAgICAgICAgYW5zd2VyOiAnMVxcXFxmcmFjMTQnLFxuICAgICAgICAgIHZhbGlkYXRpb246ICdsaXRlcmFsJyxcbiAgICAgICAgICBpZDogJzEnLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcbiAgICBzZXNzaW9uID0ge1xuICAgICAgY29tcGxldGVBbnN3ZXI6ICcxXFxcXGZyYWN7MX17NH0nLFxuICAgIH07XG5cbiAgICBlbnYgPSB7IG1vZGU6ICdldmFsdWF0ZScgfTtcbiAgICByZXN1bHQgPSBhd2FpdCBtb2RlbChxdWVzdGlvbiwgc2Vzc2lvbiwgZW52KTtcblxuICAgIGV4cGVjdChyZXN1bHQuY29ycmVjdG5lc3MuY29ycmVjdG5lc3MpLnRvRXF1YWwoJ2NvcnJlY3QnKTtcbiAgICBleHBlY3QocmVzdWx0LmNvcnJlY3RuZXNzLnNjb3JlKS50b0VxdWFsKCcxMDAlJyk7XG5cbiAgICBzZXNzaW9uID0ge1xuICAgICAgY29tcGxldGVBbnN3ZXI6ICcxXFxcXGZyYWMxezR9JyxcbiAgICB9O1xuXG4gICAgcmVzdWx0ID0gYXdhaXQgbW9kZWwocXVlc3Rpb24sIHNlc3Npb24sIGVudik7XG5cbiAgICBleHBlY3QocmVzdWx0LmNvcnJlY3RuZXNzLmNvcnJlY3RuZXNzKS50b0VxdWFsKCdjb3JyZWN0Jyk7XG4gICAgZXhwZWN0KHJlc3VsdC5jb3JyZWN0bmVzcy5zY29yZSkudG9FcXVhbCgnMTAwJScpO1xuXG4gICAgc2Vzc2lvbiA9IHtcbiAgICAgIGNvbXBsZXRlQW5zd2VyOiAncCh4KScsXG4gICAgfTtcblxuICAgIGVudiA9IHsgbW9kZTogJ2V2YWx1YXRlJyB9O1xuICAgIHJlc3VsdCA9IGF3YWl0IG1vZGVsKHF1ZXN0aW9uLCBzZXNzaW9uLCBlbnYpO1xuXG4gICAgZXhwZWN0KHJlc3VsdC5jb3JyZWN0bmVzcy5jb3JyZWN0bmVzcykudG9FcXVhbCgnY29ycmVjdCcpO1xuICAgIGV4cGVjdChyZXN1bHQuY29ycmVjdG5lc3Muc2NvcmUpLnRvRXF1YWwoJzEwMCUnKTtcblxuICAgIHNlc3Npb24gPSB7XG4gICAgICBjb21wbGV0ZUFuc3dlcjogJ3BcXFxcbGVmdCh4XFxcXHJpZ2h0KScsXG4gICAgfTtcblxuICAgIGVudiA9IHsgbW9kZTogJ2V2YWx1YXRlJyB9O1xuICAgIHJlc3VsdCA9IGF3YWl0IG1vZGVsKHF1ZXN0aW9uLCBzZXNzaW9uLCBlbnYpO1xuXG4gICAgZXhwZWN0KHJlc3VsdC5jb3JyZWN0bmVzcy5jb3JyZWN0bmVzcykudG9FcXVhbCgnY29ycmVjdCcpO1xuICAgIGV4cGVjdChyZXN1bHQuY29ycmVjdG5lc3Muc2NvcmUpLnRvRXF1YWwoJzEwMCUnKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2V2YWx1YXRlIC0gaW5jb3JyZWN0JywgKCkgPT4ge1xuICAgIGJlZm9yZUVhY2goYXN5bmMgKCkgPT4ge1xuICAgICAgZW52ID0geyBtb2RlOiAnZXZhbHVhdGUnIH07XG4gICAgfSk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCdvdXRjb21lJywgKCkgPT4ge1xuICBsZXQgcmVzdWx0O1xuICBjb25zdCBxdWVzdGlvbiA9IG1rUXVlc3Rpb24oKTtcbiAgY29uc3QgZW52ID0geyBtb2RlOiAnZXZhbHVhdGUnIH07XG5cbiAgaXQoJ3JldHVybnMgY29ycmVjdCBmb3IgY29ycmVjdG5lc3MgaW4gb3V0Y29tZScsIGFzeW5jICgpID0+IHtcbiAgICBsZXQgc2Vzc2lvbiA9IHsgY29tcGxldGVBbnN3ZXI6ICc3MlxcXFxkaXYxMj02XFxcXHRleHR7ZWdnc30nIH07XG4gICAgbGV0IG91dGNvbWVSZXN1bHQgPSBhd2FpdCBvdXRjb21lKHF1ZXN0aW9uLCBzZXNzaW9uLCBlbnYpO1xuXG4gICAgZXhwZWN0KG91dGNvbWVSZXN1bHQuc2NvcmUpLnRvRXF1YWwoMSk7XG5cbiAgICBzZXNzaW9uID0geyBjb21wbGV0ZUFuc3dlcjogJ1xcXFxmcmFjezcyfXsxMn09NlxcXFx0ZXh0e2VnZ3N9JyB9O1xuXG4gICAgb3V0Y29tZVJlc3VsdCA9IGF3YWl0IG91dGNvbWUocXVlc3Rpb24sIHNlc3Npb24sIGVudik7XG5cbiAgICBleHBlY3Qob3V0Y29tZVJlc3VsdC5zY29yZSkudG9FcXVhbCgxKTtcbiAgfSk7XG5cbiAgY29uc3QgcmV0dXJuT3V0Y29tZSA9IChzZXNzaW9uKSA9PiB7XG4gICAgaXQoYHJldHVybnMgc2NvcmU6IDAgYW5kIGVtcHR5OiB0cnVlIGlmIHNlc3Npb24gaXMgJHtKU09OLnN0cmluZ2lmeShzZXNzaW9uKX1gLCBhc3luYyAoKSA9PiB7XG4gICAgICBsZXQgb3V0Y29tZVJlc3VsdCA9IGF3YWl0IG91dGNvbWUocXVlc3Rpb24sIHNlc3Npb24sIGVudik7XG5cbiAgICAgIGV4cGVjdChvdXRjb21lUmVzdWx0KS50b0VxdWFsKHsgc2NvcmU6IDAsIGVtcHR5OiB0cnVlIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIHJldHVybk91dGNvbWUodW5kZWZpbmVkKTtcbiAgcmV0dXJuT3V0Y29tZShudWxsKTtcbiAgcmV0dXJuT3V0Y29tZSh7fSk7XG59KTtcblxuZGVzY3JpYmUoJ2NyZWF0ZUNvcnJlY3RSZXNwb25zZVNlc3Npb24nLCAoKSA9PiB7XG4gIGNvbnN0IGFuc3dlciA9ICc3MlxcXFxkaXYxMj02JztcbiAgY29uc3QgcXVlc3Rpb24gPSB7XG4gICAgaWQ6ICcxJyxcbiAgICByZXNwb25zZVR5cGU6ICdBZHZhbmNlZCBNdWx0aScsXG4gICAgZXhwcmVzc2lvbjogJ3t7cmVzcG9uc2V9fSA9IHt7cmVzcG9uc2V9fScsXG4gICAgcHJvbXB0OlxuICAgICAgJzxwPlNhbSBzZWxscyBiYXNrZXRzIG9mIGVnZ3MgYXQgaGlzIGZhcm0gc3RhbmQuIEhlIHNvbGQgMTIgYmFza2V0cyBhbmQgd3JvdGUgdGhlIG51bWJlciBzZW50ZW5jZSBiZWxvdyB0byBzaG93IGhvdyBtYW55IGVnZ3MgaGUgc29sZCBpbiBhbGwuPC9wPjxwPjxzcGFuIGNsYXNzPVwiZXF1YXRpb24tYmxvY2tcIj48bWF0aCB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUxcIiA+XFxuIDxtcm93PlxcbiAgPG1uPjEyPC9tbj48bW8+JiN4MDBENzs8L21vPjxtbz4mI3gyNUExOzwvbW8+PG1vPj08L21vPjxtbj43MjwvbW4+XFxuIDwvbXJvdz5cXG48L21hdGg+IDwvc3Bhbj48L3A+PHA+V2hhdCA8c3BhbiBjbGFzcz1cInJlbGF0aXZlLWVtcGhhc2lzXCI+ZGl2aXNpb248L3NwYW4+IG51bWJlciBzZW50ZW5jZSBjYW4gYmUgdXNlZCB0byBzaG93IGhvdyBtYW55IGVnZ3Mgd2VyZSBpbiBlYWNoIGJhc2tldD88L3A+PHA+VXNlIHRoZSBvbi1zY3JlZW4ga2V5Ym9hcmQgdG8gdHlwZSB5b3VyIG51bWJlciBzZW50ZW5jZSBhbmQgYW5zd2VyIGluIHRoZSBib3guPC9wPicsXG4gICAgcmVzcG9uc2VzOiBbXG4gICAgICB7XG4gICAgICAgIGlkOiAnMScsXG4gICAgICAgIGFuc3dlcixcbiAgICAgICAgYWx0ZXJuYXRlczoge1xuICAgICAgICAgIDE6ICc2PTcyXFxcXGRpdjEyXScsXG4gICAgICAgICAgMjogJ1xcXFxmcmFjezcyfXsxMn09NicsXG4gICAgICAgICAgMzogJzY9XFxcXGZyYWN7NzJ9ezEyfScsXG4gICAgICAgIH0sXG4gICAgICAgIHZhbGlkYXRpb246ICdsaXRlcmFsJyxcbiAgICAgIH0sXG4gICAgXSxcbiAgICBjdXN0b21LZXlzOiBbJ1xcXFxsZWZ0KFxcXFxyaWdodCknLCAnXFxcXGZyYWN7fXt9JywgJ3hcXFxcZnJhY3t9e30nXSxcbiAgfTtcblxuICBkZXNjcmliZSgnNzE2NScsICgpID0+IHtcbiAgICBpdCgncmV0dXJucyB3aG9sZSBhbnN3ZXInLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBxdWVzdGlvbiA9IHtcbiAgICAgICAgZWxlbWVudDogJ21hdGgtaW5saW5lJyxcbiAgICAgICAgcmVzcG9uc2VUeXBlOiAnQWR2YW5jZWQgTXVsdGknLFxuICAgICAgICBleHByZXNzaW9uOiAne3tyZXNwb25zZX19JyxcbiAgICAgICAgcmVzcG9uc2VzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWx0ZXJuYXRlczoge30sXG4gICAgICAgICAgICBhbnN3ZXI6ICcyXFxcXHRpbWVzNycsXG4gICAgICAgICAgICB2YWxpZGF0aW9uOiAnbGl0ZXJhbCcsXG4gICAgICAgICAgICBpZDogJzEnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIGlkOiAnMScsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBjYSA9IHF1ZXN0aW9uLnJlc3BvbnNlc1swXS5hbnN3ZXI7XG4gICAgICBjb25zdCBjcyA9IGF3YWl0IGNyZWF0ZUNvcnJlY3RSZXNwb25zZVNlc3Npb24ocXVlc3Rpb24sIHtcbiAgICAgICAgbW9kZTogJ2dhdGhlcicsXG4gICAgICAgIHJvbGU6ICdpbnN0cnVjdG9yJyxcbiAgICAgIH0pO1xuICAgICAgZXhwZWN0KGNzKS50b01hdGNoT2JqZWN0KHtcbiAgICAgICAgaWQ6ICcxJyxcbiAgICAgICAgY29tcGxldGVBbnN3ZXI6IGNhLFxuICAgICAgICBhbnN3ZXJzOiB7IHIxOiB7IHZhbHVlOiBjYSB9IH0sXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1BELTE3MycsICgpID0+IHtcbiAgICBpdCgncmV0dXJucyBlbXB0eSBhbnN3ZXIgaWYgbW9kZWwgaXMgaW5jb3JyZWN0bHkgZGVmaW5lZCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHF1ZXN0aW9uID0ge1xuICAgICAgICBlbGVtZW50OiAnbWF0aC1pbmxpbmUnLFxuICAgICAgICByZXNwb25zZVR5cGU6ICdBZHZhbmNlZCBNdWx0aScsXG4gICAgICAgIGV4cHJlc3Npb246ICd4PXt7cmVzcG9uc2V9fVxcXFwgXFxcXHRleHR7cmFkaWFuc30nLFxuICAgICAgICByZXNwb25zZXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhbHRlcm5hdGVzOiB7fSxcbiAgICAgICAgICAgIGFuc3dlcjogJ3g9XFxcXGZyYWN7MjAsMDAwfXtyXjJ9XFxcXHRleHR7cmFkaWFuc30nLFxuICAgICAgICAgICAgdmFsaWRhdGlvbjogJ3N5bWJvbGljJyxcbiAgICAgICAgICAgIGlkOiAnMScsXG4gICAgICAgICAgICBhbGxvd1NwYWNlczogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBpZDogJzEnLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgY2EgPSBxdWVzdGlvbi5yZXNwb25zZXNbMF0uYW5zd2VyO1xuICAgICAgY29uc3QgY3MgPSBhd2FpdCBjcmVhdGVDb3JyZWN0UmVzcG9uc2VTZXNzaW9uKHF1ZXN0aW9uLCB7XG4gICAgICAgIG1vZGU6ICdnYXRoZXInLFxuICAgICAgICByb2xlOiAnaW5zdHJ1Y3RvcicsXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KGNzKS50b01hdGNoT2JqZWN0KHtcbiAgICAgICAgaWQ6ICcxJyxcbiAgICAgICAgY29tcGxldGVBbnN3ZXI6IGNhLFxuICAgICAgICBhbnN3ZXJzOiB7fSxcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBjb25zdCB2YWwgPSAodmFsdWUpID0+ICh7IHZhbHVlIH0pO1xuICBkZXNjcmliZS5lYWNoYFxuICAgIGV4cHJlc3Npb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZXhwZWN0ZWRcbiAgICAkeyd7eyAgcmVzcG9uc2V9fSd9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICR7JzEnfSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICR7eyByMTogdmFsKCcxJykgfX1cbiAgICAkeyd7e3Jlc3BvbnNlfX0gPSB7e3Jlc3BvbnNlfX0nfSAgICAgICAgICAgICAgICB8ICR7JzEgPSAxJ30gICAgICAgICAgICAgICAgICAgICAgICB8ICR7eyByMTogdmFsKCcxJyksIHIyOiB2YWwoJzEnKSB9fVxuICAgICR7J3t7cmVzcG9uc2V9fSArIHt7cmVzcG9uc2V9fSA9IHt7cmVzcG9uc2V9fSd9IHwgJHsnMSArIDIgPSAzJ30gICAgICAgICAgICAgICAgICAgIHwgJHt7IHIxOiB2YWwoJzEnKSwgcjI6IHZhbCgnMicpLCByMzogdmFsKCczJykgfX1cbiAgICAkeyd7e3Jlc3BvbnNlfX0gPSB7e3Jlc3BvbnNlfX0nfSAgICAgICAgICAgICAgICB8ICR7J1xcXFxmcmFjezJ9ezN9ICsgMiA9IFxcXFxzcXJ0ezl9J30gfCAke3sgcjE6IHZhbCgnXFxcXGZyYWN7Mn17M30gKyAyJyksIHIyOiB2YWwoJ1xcXFxzcXJ0ezl9JykgfX1cbiAgICAkeyd7e3Jlc3BvbnNlfX0gPSB7e3Jlc3BvbnNlfX0nfSAgICAgICAgICAgICAgICB8ICR7JzcyXFxcXGRpdjEyPTYnfSAgICAgICAgICAgICAgICAgIHwgJHt7IHIxOiB2YWwoJzcyXFxcXGRpdjEyJyksIHIyOiB2YWwoJzYnKSB9fVxuICAgICR7J3t7cmVzcG9uc2V9fSA9IHt7cmVzcG9uc2V9fSd9ICAgICAgICAgICAgICAgIHwgJHsnNzJcXFxcZGl2MTIgID0gIDYnfSAgICAgICAgICAgICAgfCAke3sgcjE6IHZhbCgnNzJcXFxcZGl2MTInKSwgcjI6IHZhbCgnNicpIH19XG4gICAgJHsne3tyZXNwb25zZX19ID0ge3tyZXNwb25zZX19IC8ge3tyZXNwb25zZX19J30gfCAkeyc3MlxcXFxkaXYxMiAgPSAgNi8yJ30gICAgICAgICAgICB8ICR7eyByMTogdmFsKCc3MlxcXFxkaXYxMicpLCByMjogdmFsKCc2JyksIHIzOiB2YWwoJzInKSB9fVxuICBgKCckZXhwcmVzc2lvbiArICRjcicsICh7IGV4cHJlc3Npb24sIGNyLCBleHBlY3RlZCB9KSA9PiB7XG4gICAgbGV0IGNycztcbiAgICBsZXQgZW52O1xuICAgIGxldCBxO1xuICAgIGJlZm9yZUVhY2goYXN5bmMgKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgZW52ID0geyBtb2RlOiAnZ2F0aGVyJywgcm9sZTogJ2luc3RydWN0b3InIH07XG4gICAgICAgIHEgPSB7XG4gICAgICAgICAgZXhwcmVzc2lvbixcbiAgICAgICAgICByZXNwb25zZXM6IFt7IGFuc3dlcjogY3IgfV0sXG4gICAgICAgIH07XG4gICAgICAgIGNycyA9IGF3YWl0IGNyZWF0ZUNvcnJlY3RSZXNwb25zZVNlc3Npb24ocSwgZW52KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgZmFpbChlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGl0KGAke0pTT04uc3RyaW5naWZ5KGV4cGVjdGVkKX0gY29ycmVjdCBhbnN3ZXJzYCwgKCkgPT4ge1xuICAgICAgZXhwZWN0KGNycy5hbnN3ZXJzKS50b0VxdWFsKGV4cGVjdGVkKTtcbiAgICB9KTtcbiAgICBpdChgJHtKU09OLnN0cmluZ2lmeShleHBlY3RlZCl9IC0gbm8gJ3Jlc3BvbnNlJyBwcm9wYCwgKCkgPT4ge1xuICAgICAgZXhwZWN0KGNycy5yZXNwb25zZSkubm90LnRvQmVEZWZpbmVkKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0LmVhY2hgXG4gICAgbW9kZSAgICAgICAgfCByb2xlXG4gICAgJHsnZ2F0aGVyJ30gfCAkeydpbnN0cnVjdG9yJ31cbiAgICAkeyd2aWV3J30gICB8ICR7J2luc3RydWN0b3InfVxuICBgKCdyZXR1cm5zIGNvcnJlY3RSZXNwb25zZSBmb3IgJG1vZGUgKyAkcm9sZScsIGFzeW5jICh7IG1vZGUsIHJvbGUgfSkgPT4ge1xuICAgIGNvbnN0IHNlc3MgPSBhd2FpdCBjcmVhdGVDb3JyZWN0UmVzcG9uc2VTZXNzaW9uKHF1ZXN0aW9uLCB7IG1vZGUsIHJvbGUgfSk7XG5cbiAgICBleHBlY3Qoc2VzcykudG9NYXRjaE9iamVjdCh7XG4gICAgICBhbnN3ZXJzOiB7XG4gICAgICAgIHIxOiB2YWwoJzcyXFxcXGRpdjEyJyksXG4gICAgICAgIHIyOiB2YWwoJzYnKSxcbiAgICAgIH0sXG4gICAgICBjb21wbGV0ZUFuc3dlcjogYW5zd2VyLFxuICAgICAgaWQ6ICcxJyxcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3JldHVybnMgY29ycmVjdCByZXNwb25zZSBpZiByb2xlIGlzIGluc3RydWN0b3IgYW5kIG1vZGUgaXMgdmlldyBhbmQgcmVzcG9uc2VUeXBlIGlzIFNpbXBsZScsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBzZXNzID0gYXdhaXQgY3JlYXRlQ29ycmVjdFJlc3BvbnNlU2Vzc2lvbihcbiAgICAgIHtcbiAgICAgICAgLi4ucXVlc3Rpb24sXG4gICAgICAgIGV4cHJlc3Npb246ICd7e3Jlc3BvbnNlfX0nLFxuICAgICAgICByZXNwb25zZXM6IFt7IGFuc3dlcjogJ1xcXFxmcmFjezN9ezR9JywgdmFsaWRhdGlvbjogJ3N5bWJvbGljJywgaWQ6ICcxJyB9XSxcbiAgICAgICAgcmVzcG9uc2VUeXBlOiAnU2ltcGxlJyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG1vZGU6ICd2aWV3JyxcbiAgICAgICAgcm9sZTogJ2luc3RydWN0b3InLFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgZXhwZWN0KHNlc3MpLnRvTWF0Y2hPYmplY3Qoe1xuICAgICAgcmVzcG9uc2U6ICdcXFxcZnJhY3szfXs0fScsXG4gICAgICBjb21wbGV0ZUFuc3dlcjogJ1xcXFxmcmFjezN9ezR9JyxcbiAgICAgIGlkOiAnMScsXG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdyZXR1cm5zIG51bGwgaWYgbW9kZSBpcyBldmFsdWF0ZScsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBub1Jlc3VsdCA9IGF3YWl0IGNyZWF0ZUNvcnJlY3RSZXNwb25zZVNlc3Npb24ocXVlc3Rpb24sIHtcbiAgICAgIG1vZGU6ICdldmFsdWF0ZScsXG4gICAgICByb2xlOiAnaW5zdHJ1Y3RvcicsXG4gICAgfSk7XG5cbiAgICBleHBlY3Qobm9SZXN1bHQpLnRvQmVOdWxsKCk7XG4gIH0pO1xuXG4gIGl0KCdyZXR1cm5zIG51bGwgaWYgcm9sZSBpcyBzdHVkZW50JywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IG5vUmVzdWx0ID0gYXdhaXQgY3JlYXRlQ29ycmVjdFJlc3BvbnNlU2Vzc2lvbihxdWVzdGlvbiwge1xuICAgICAgbW9kZTogJ2dhdGhlcicsXG4gICAgICByb2xlOiAnc3R1ZGVudCcsXG4gICAgfSk7XG5cbiAgICBleHBlY3Qobm9SZXN1bHQpLnRvQmVOdWxsKCk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdQSUUtMTg4JywgKCkgPT4ge1xuICAgIGl0KCd3b3JrcycsIGFzeW5jICgpID0+IHtcbiAgICAgIGxhdGV4RXF1YWwubW9ja1JldHVyblZhbHVlT25jZShmYWxzZSk7XG4gICAgICBjb25zdCBxdWVzdGlvbiA9IHtcbiAgICAgICAgcmVzcG9uc2VUeXBlOiAnQWR2YW5jZWQgTXVsdGknLFxuICAgICAgICBleHByZXNzaW9uOiAne3tyZXNwb25zZX19JyxcbiAgICAgICAgZXF1YXRpb25FZGl0b3I6ICdtaXNjZWxsYW5lb3VzJyxcbiAgICAgICAgcmVzcG9uc2VzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWx0ZXJuYXRlczoge30sXG4gICAgICAgICAgICBhbnN3ZXI6ICcxNTMwJyxcbiAgICAgICAgICAgIHZhbGlkYXRpb246ICdzeW1ib2xpYycsXG4gICAgICAgICAgICBpZDogJzEnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIGlkOiAnMScsXG4gICAgICAgIGVsZW1lbnQ6ICdtYXRoLWlubGluZScsXG4gICAgICAgIGN1c3RvbUtleXM6IFsnPCcsICdcXFxcbGUnLCAnXFxcXGdlJywgJz4nLCAnXFxcXGZyYWN7fXt9JywgJ3hee30nLCAnXFxcXGxlZnQoXFxcXHJpZ2h0KSddLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHNlc3Npb24gPSB7XG4gICAgICAgIGlkOiAnMScsXG4gICAgICAgIGFuc3dlcnM6IHtcbiAgICAgICAgICByMToge1xuICAgICAgICAgICAgdmFsdWU6ICdcXFxcb2RvdCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgY29tcGxldGVBbnN3ZXI6ICdcXFxcb2RvdCcsXG4gICAgICB9O1xuICAgICAgY29uc3QgZW52ID0geyBtb2RlOiAnZXZhbHVhdGUnIH07XG4gICAgICBsYXRleEVxdWFsLm1vY2tSZXR1cm5WYWx1ZU9uY2UoZmFsc2UpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgbW9kZWwocXVlc3Rpb24sIHNlc3Npb24sIGVudik7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJz4+Jyk7XG4gICAgICAgIGNvbnNvbGUubG9nKGUpO1xuICAgICAgICBmYWlsKGUpO1xuICAgICAgfVxuICAgICAgYXdhaXQgZXhwZWN0KG1vZGVsKHF1ZXN0aW9uLCBzZXNzaW9uLCBlbnYpKS5yZXNvbHZlcy50b01hdGNoT2JqZWN0KHtcbiAgICAgICAgY29ycmVjdG5lc3M6IHsgY29ycmVjdDogZmFsc2UgfSxcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnNjQ1NiAtIG91dGNvbWUnLCAoKSA9PiB7XG4gIGNvbnN0IHF1ZXN0aW9uID0ge1xuICAgIGVxdWF0aW9uRWRpdG9yOiA4LFxuICAgIHJlc3BvbnNlVHlwZTogJ0FkdmFuY2VkIE11bHRpJyxcbiAgICB0ZWFjaGVySW5zdHJ1Y3Rpb25zOiAnJyxcbiAgICBleHByZXNzaW9uOiAne3tyZXNwb25zZX19JyxcbiAgICByZXNwb25zZXM6IFtcbiAgICAgIHtcbiAgICAgICAgYW5zd2VyOiAnLTEyLjUnLFxuICAgICAgICBpZDogJzEnLFxuICAgICAgICBhbHRlcm5hdGVzOiB7IDE6ICctMTIuNVxcXFwlJyB9LFxuICAgICAgICB2YWxpZGF0aW9uOiAnc3ltYm9saWMnLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGlkOiAnMScsXG4gICAgcHJvbXB0OiAncHJvbXB0JyxcbiAgICByYXRpb25hbGU6ICdyYXRpb25hbGUnLFxuICAgIGVsZW1lbnQ6ICdtYXRoLWlubGluZScsXG4gIH07XG5cbiAgaXQoJ3Njb3JlcyAwJywgYXN5bmMgKCkgPT4ge1xuICAgIGxhdGV4RXF1YWwubW9ja1JldHVyblZhbHVlT25jZShmYWxzZSk7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IHtcbiAgICAgIGlkOiAnMScsXG4gICAgICBhbnN3ZXJzOiB7IHIxOiB7IHZhbHVlOiAnLTEyXFxcXCUnIH0gfSxcbiAgICAgIGNvbXBsZXRlQW5zd2VyOiAnLTEyXFxcXCUnLFxuICAgIH07XG4gICAgbGF0ZXhFcXVhbC5tb2NrUmV0dXJuVmFsdWVPbmNlKGZhbHNlKTtcbiAgICBjb25zdCBlbnYgPSB7IG1vZGU6ICdldmFsdWF0ZScgfTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBvdXRjb21lKHF1ZXN0aW9uLCBzZXNzaW9uLCBlbnYpO1xuICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoeyBzY29yZTogMCB9KTtcbiAgfSk7XG5cbiAgaXQoJ3Njb3JlcyAxJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHNlc3Npb24gPSB7XG4gICAgICBpZDogJzEnLFxuICAgICAgYW5zd2VyczogeyByMTogeyB2YWx1ZTogJy0xMi41XFxcXCUnIH0gfSxcbiAgICAgIGNvbXBsZXRlQW5zd2VyOiAnLTEyLjVcXFxcJScsXG4gICAgfTtcblxuICAgIGNvbnN0IGVudiA9IHsgbW9kZTogJ2V2YWx1YXRlJyB9O1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG91dGNvbWUocXVlc3Rpb24sIHNlc3Npb24sIGVudik7XG4gICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbCh7IHNjb3JlOiAxIH0pO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnNjM3MScsICgpID0+IHtcbiAgY29uc3QgcXVlc3Rpb24gPSB7XG4gICAgZXF1YXRpb25FZGl0b3I6IDgsXG4gICAgcmVzcG9uc2VUeXBlOiAnQWR2YW5jZWQgTXVsdGknLFxuICAgIHRlYWNoZXJJbnN0cnVjdGlvbnM6ICcnLFxuICAgIGV4cHJlc3Npb246ICd7e3Jlc3BvbnNlfX1cXFxcIFxcXFx0ZXh0e2RvbGxhcnN9JyxcbiAgICByZXNwb25zZXM6IFtcbiAgICAgIHtcbiAgICAgICAgYW5zd2VyOiAnNFxcXFx0aW1lczEwXjNcXFxcIFxcXFx0ZXh0e2RvbGxhcnN9JyxcbiAgICAgICAgaWQ6ICcxJyxcbiAgICAgICAgYWx0ZXJuYXRlczoge30sXG4gICAgICAgIHZhbGlkYXRpb246ICdzeW1ib2xpYycsXG4gICAgICB9LFxuICAgIF0sXG4gICAgaWQ6ICcxJyxcbiAgICBwcm9tcHQ6ICdwcm9tcHQnLFxuICAgIHJhdGlvbmFsZTogJ3JhdGlvbmFsZScsXG4gICAgZWxlbWVudDogJ21hdGgtaW5saW5lJyxcbiAgfTtcblxuICBpdCgnc2NvcmVzIDEnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IHtcbiAgICAgIGlkOiAnMScsXG4gICAgICBhbnN3ZXJzOiB7IHIxOiB7IHZhbHVlOiAnNDAwMFxcXFwgXFxcXHRleHR7ZG9sbGFyc30nIH0gfSxcbiAgICAgIGNvbXBsZXRlQW5zd2VyOiAnNDAwMFxcXFwgXFxcXHRleHR7ZG9sbGFyc30nLFxuICAgIH07XG5cbiAgICBjb25zdCBlbnYgPSB7IG1vZGU6ICdldmFsdWF0ZScgfTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBvdXRjb21lKHF1ZXN0aW9uLCBzZXNzaW9uLCBlbnYpO1xuICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoeyBzY29yZTogMSB9KTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJzM4MjYnLCAoKSA9PiB7XG4gIGNvbnN0IHF1ZXN0aW9uID0ge1xuICAgIGVxdWF0aW9uRWRpdG9yOiA4LFxuICAgIHJlc3BvbnNlVHlwZTogJ0FkdmFuY2VkIE11bHRpJyxcbiAgICB0ZWFjaGVySW5zdHJ1Y3Rpb25zOiAnJyxcbiAgICBleHByZXNzaW9uOiAne3tyZXNwb25zZX19XFxcXCBcXFxcdGV4dHslfScsXG4gICAgcmVzcG9uc2VzOiBbXG4gICAgICB7XG4gICAgICAgIGlkOiAnMScsXG4gICAgICAgIGFuc3dlcjogJzg0JScsXG4gICAgICAgIGFsdGVybmF0ZXM6IHt9LFxuICAgICAgICB2YWxpZGF0aW9uOiAnbGl0ZXJhbCcsXG4gICAgICB9LFxuICAgIF0sXG4gICAgaWQ6ICcxJyxcbiAgICBwcm9tcHQ6ICdwcm9tcHQnLFxuICAgIHJhdGlvbmFsZTogJ3JhdGlvbmFsZScsXG4gICAgZWxlbWVudDogJ21hdGgtaW5saW5lJyxcbiAgfTtcblxuICBpdCgnc2NvcmVzIDEnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IHtcbiAgICAgIGlkOiAnMScsXG4gICAgICBhbnN3ZXJzOiB7IHIxOiB7IHZhbHVlOiAnODRcXFxcIFxcXFx0ZXh0eyV9JyB9IH0sXG4gICAgICBjb21wbGV0ZUFuc3dlcjogJzg0XFxcXCBcXFxcdGV4dHslfScsXG4gICAgfTtcblxuICAgIGNvbnN0IGVudiA9IHsgbW9kZTogJ2V2YWx1YXRlJyB9O1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG91dGNvbWUocXVlc3Rpb24sIHNlc3Npb24sIGVudik7XG4gICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbCh7IHNjb3JlOiAxIH0pO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnUEQtNjYnLCAoKSA9PiB7XG4gIGNvbnN0IHF1ZXN0aW9uID0ge1xuICAgIGlkOiAnMScsXG4gICAgcHJvbXB0OiAncHJvbXB0JyxcbiAgICByYXRpb25hbGU6ICdyYXRpb25hbGUnLFxuICAgIGVsZW1lbnQ6ICdtYXRoLWlubGluZScsXG4gICAgZmVlZGJhY2tFbmFibGVkOiB0cnVlLFxuICAgIHByb21wdEVuYWJsZWQ6IHRydWUsXG4gICAgcmF0aW9uYWxlRW5hYmxlZDogdHJ1ZSxcbiAgICB0ZWFjaGVySW5zdHJ1Y3Rpb25zRW5hYmxlZDogdHJ1ZSxcbiAgICBzdHVkZW50SW5zdHJ1Y3Rpb25zRW5hYmxlZDogdHJ1ZSxcbiAgICByZXNwb25zZVR5cGU6ICdBZHZhbmNlZCBNdWx0aScsXG4gICAgZXhwcmVzc2lvbjogJ3t7cmVzcG9uc2V9fScsXG4gICAgZXF1YXRpb25FZGl0b3I6ICdzdGF0aXN0aWNzJyxcbiAgICByZXNwb25zZXM6IFtcbiAgICAgIHtcbiAgICAgICAgYW5zd2VyOiAnXFxcXGxlZnQoLVxcXFxmcmFje3h9ezN9LC1cXFxcZnJhY3t5fXszfVxcXFxyaWdodCknLFxuICAgICAgICBpZDogJzEnLFxuICAgICAgICB2YWxpZGF0aW9uOiAnbGl0ZXJhbCcsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBhbnN3ZXI6ICdcXFxcbGVmdChcXFxcZnJhY3steH17M30sXFxcXGZyYWN7LXl9ezN9XFxcXHJpZ2h0KScsXG4gICAgICAgIHZhbGlkYXRpb246ICdlcXVpdkxpdGVyYWwnLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYW5zd2VyOiAnXFxcXGxlZnQoXFxcXGZyYWN7eH17LTN9LFxcXFxmcmFje3l9ey0zfVxcXFxyaWdodCknLFxuICAgICAgICB2YWxpZGF0aW9uOiAnZXF1aXZMaXRlcmFsJyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGFuc3dlcjogJ1xcXFxsZWZ0KC1cXFxcZnJhY3sxfXszfXgsLVxcXFxmcmFjezF9ezN9eVxcXFxyaWdodCknLFxuICAgICAgICB2YWxpZGF0aW9uOiAnZXF1aXZMaXRlcmFsJyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGFuc3dlcjogJ1xcXFxsZWZ0KFxcXFxmcmFjey0xfXszfXgsXFxcXGZyYWN7LTF9ezN9eVxcXFxyaWdodCknLFxuICAgICAgICB2YWxpZGF0aW9uOiAnZXF1aXZMaXRlcmFsJyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGFuc3dlcjogJ1xcXFxsZWZ0KFxcXFxmcmFjezF9ey0zfXgsXFxcXGZyYWN7MX17LTN9eVxcXFxyaWdodCknLFxuICAgICAgICB2YWxpZGF0aW9uOiAnZXF1aXZMaXRlcmFsJyxcbiAgICAgIH0sXG4gICAgXSxcbiAgfTtcblxuICBpdCgnc2NvcmVzIDEnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IHtcbiAgICAgIGlkOiAnMScsXG4gICAgICBhbnN3ZXJzOiB7IHIxOiB7IHZhbHVlOiAnXFxcXGxlZnQoLVxcXFxmcmFje3h9ezN9LC1cXFxcZnJhY3t5fXszfVxcXFxyaWdodCknIH0gfSxcbiAgICAgIGNvbXBsZXRlQW5zd2VyOiAnXFxcXGxlZnQoLVxcXFxmcmFje3h9ezN9LC1cXFxcZnJhY3t5fXszfVxcXFxyaWdodCknLFxuICAgIH07XG5cbiAgICBjb25zdCBlbnYgPSB7IG1vZGU6ICdldmFsdWF0ZScgfTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBvdXRjb21lKHF1ZXN0aW9uLCBzZXNzaW9uLCBlbnYpO1xuICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoeyBzY29yZTogMSB9KTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ1BELTIwNScsICgpID0+IHtcbiAgY29uc3QgcXVlc3Rpb24gPSB7XG4gICAgaWQ6IDEsXG4gICAgZWxlbWVudDogJ21hdGgtaW5saW5lJyxcbiAgICBmZWVkYmFja0VuYWJsZWQ6IHRydWUsXG4gICAgcHJvbXB0RW5hYmxlZDogdHJ1ZSxcbiAgICByYXRpb25hbGVFbmFibGVkOiB0cnVlLFxuICAgIHRlYWNoZXJJbnN0cnVjdGlvbnNFbmFibGVkOiB0cnVlLFxuICAgIHN0dWRlbnRJbnN0cnVjdGlvbnNFbmFibGVkOiB0cnVlLFxuICAgIGVxdWF0aW9uRWRpdG9yOiAzLFxuICAgIHRlYWNoZXJJbnN0cnVjdGlvbnM6ICcnLFxuICAgIHJlc3BvbnNlVHlwZTogJ0FkdmFuY2VkIE11bHRpJyxcbiAgICBleHByZXNzaW9uOiAne3tyZXNwb25zZX19XFxcXCA9XFxcXCB7e3Jlc3BvbnNlfX1cXFxcIFxcXFx0ZXh0e2N1YmljfVxcXFwgXFxcXHRleHR7aW5jaGVzfScsXG4gICAgcmF0aW9uYWxlOlxuICAgICAgJzxwPlRoZSB2b2x1bWUgb2YgdGhlIGJveCBjYW4gYmUgc29sdmVkIGJ5IGFueSBlcXVpdmFsZW50IHZhcmlhdGlvbiBvZiB0aGUgZXF1YXRpb246IDEwICYjMjE1OyA3ICYjMjE1OyA1ID0gMzUwIChjdWJpYyYjMTYwO2luY2hlcykmIzE2MDtvciA3MCAmIzIxNTsgNSA9IDM1MCYjMTYwOyhjdWJpYyYjMTYwO2luY2hlcykuIFRoaXMgYW5zd2VyIGlzIHRoZSByZXN1bHQgb2YgYWNjdXJhdGVseSBhcHBseWluZyBlaXRoZXIgdGhlIGZvcm11bGEgPHNwYW4gY2xhc3M9XCJ2YXJpYWJsZVwiPmw8L3NwYW4+ICYjMjE1OyA8c3BhbiBjbGFzcz1cInZhcmlhYmxlXCI+dzwvc3Bhbj4gJiMyMTU7IDxzcGFuIGNsYXNzPVwidmFyaWFibGVcIj5oPC9zcGFuPiA9IDxzcGFuIGNsYXNzPVwidmFyaWFibGVcIj5WPC9zcGFuPiBvciA8c3BhbiBjbGFzcz1cInZhcmlhYmxlXCI+Yjwvc3Bhbj4gJiMyMTU7IDxzcGFuIGNsYXNzPVwidmFyaWFibGVcIj5oPC9zcGFuPiA9IDxzcGFuIGNsYXNzPVwidmFyaWFibGVcIj5WPC9zcGFuPiB0byBmaW5kIHRoZSB2b2x1bWUgb2YgdGhlJiMxNjA7cmVjdGFuZ3VsYXIgcHJpc20gZGVzY3JpYmVkLjwvcD4nLFxuICAgIHByb21wdDpcbiAgICAgICc8cD5FbHlzZSBoYXMgYSBwbGFzdGljIGJveCBzaGUgdXNlcyBmb3Igc2FuZCBhcnQgZGVzaWducywgYXMgc2hvd24gYmVsb3cuPC9wPjxwPjxpbWcgYWx0PVwiaW1hZ2UgNWFmZTVjOTBjZDdlNDkxODk2ZDU4NTUyYWI3NGI2ZjdcIiBpZD1cIjVhZmU1YzkwY2Q3ZTQ5MTg5NmQ1ODU1MmFiNzRiNmY3XCIgc3JjPVwiaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL3BpZS1wcm9kLTIyMTcxOC1hc3NldHMvaW1hZ2UvYTNlZTUyODktZDg4Mi00YzdkLWFiY2UtMmVlNzBjZThjMjZmXCI+PC9wPjxwPlRoZSBsZW5ndGggb2YgdGhlIGJveCBpcyAxMCYjMTYwO2luY2hlcywgdGhlIHdpZHRoIGlzIDcmIzE2MDtpbmNoZXMsIGFuZCB0aGUgaGVpZ2h0IGlzIDUmIzE2MDtpbmNoZXMuIFdyaXRlIGFuZCBzb2x2ZSBhbiYjMTYwO2VxdWF0aW9uIEVseXNlIGNhbiB1c2UgdG8gZmluZCYjMTYwO3RoZSB2b2x1bWUgb2Ygc2FuZCwgaW4gY3ViaWMgaW5jaGVzLCB0aGF0IHdpbGwgZml0IGluIHRoZSBjb250YWluZXIuJiMxNjA7PC9wPjxwPlVzZSB0aGUgb24tc2NyZWVuIGtleWJvYXJkIHRvIHR5cGUgdGhlIGNvcnJlY3QgZXF1YXRpb24gYW5kIGFuc3dlciBpbiB0aGUgYm94LjwvcD4nLFxuICAgIHJlc3BvbnNlczogW1xuICAgICAge1xuICAgICAgICBhbnN3ZXI6ICcxMFxcXFx0aW1lczdcXFxcdGltZXM1PTM1MFxcXFwgXFxcXHRleHR7Y3ViaWN9XFxcXHRleHR7aW5jaGVzfScsXG4gICAgICAgIHZhbGlkYXRpb246ICdsaXRlcmFsJyxcbiAgICAgICAgaWQ6ICcxJyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHZhbGlkYXRpb246ICdlcXVpdkxpdGVyYWwnLFxuICAgICAgICBhbnN3ZXI6ICczNTA9MTBcXFxcdGltZXM3XFxcXHRpbWVzNVxcXFwgXFxcXHRleHR7Y3ViaWN9XFxcXHRleHR7aW5jaGVzfScsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBhbnN3ZXI6ICczNTA9MTBcXFxcdGltZXM1XFxcXHRpbWVzN1xcXFwgXFxcXHRleHR7Y3ViaWN9XFxcXHRleHR7aW5jaGVzfScsXG4gICAgICAgIHZhbGlkYXRpb246ICdlcXVpdkxpdGVyYWwnLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYW5zd2VyOiAnMzUwPTdcXFxcdGltZXM1XFxcXHRpbWVzMTBcXFxcIFxcXFx0ZXh0e2N1YmljfVxcXFx0ZXh0e2luY2hlc30nLFxuICAgICAgICB2YWxpZGF0aW9uOiAnZXF1aXZMaXRlcmFsJyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGFuc3dlcjogJzM1MD01XFxcXHRpbWVzMTBcXFxcdGltZXM3XFxcXCBcXFxcdGV4dHtjdWJpY31cXFxcdGV4dHtpbmNoZXN9JyxcbiAgICAgICAgdmFsaWRhdGlvbjogJ2VxdWl2TGl0ZXJhbCcsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB2YWxpZGF0aW9uOiAnZXF1aXZMaXRlcmFsJyxcbiAgICAgICAgYW5zd2VyOiAnMzUwPTdcXFxcdGltZXMxMFxcXFx0aW1lczVcXFxcIFxcXFx0ZXh0e2N1YmljfVxcXFx0ZXh0e2luY2hlc30nLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYW5zd2VyOiAnMzUwPTdcXFxcdGltZXM1XFxcXHRpbWVzMTBcXFxcIFxcXFx0ZXh0e2N1YmljfVxcXFx0ZXh0e2luY2hlc30nLFxuICAgICAgICB2YWxpZGF0aW9uOiAnZXF1aXZMaXRlcmFsJyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGFuc3dlcjogJzcwXFxcXHRpbWVzNT0zNTBcXFxcIFxcXFx0ZXh0e2N1YmljfVxcXFx0ZXh0e2luY2hlc30nLFxuICAgICAgICB2YWxpZGF0aW9uOiAnZXF1aXZMaXRlcmFsJyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGFuc3dlcjogJzM1MD03MFxcXFx0aW1lczVcXFxcIFxcXFx0ZXh0e2N1YmljfVxcXFx0ZXh0e2luY2hlc30nLFxuICAgICAgICB2YWxpZGF0aW9uOiAnZXF1aXZMaXRlcmFsJyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGFuc3dlcjogJzM1MD01XFxcXHRpbWVzNzBcXFxcIFxcXFx0ZXh0e2N1YmljfVxcXFx0ZXh0e2luY2hlc30nLFxuICAgICAgICB2YWxpZGF0aW9uOiAnZXF1aXZMaXRlcmFsJyxcbiAgICAgIH0sXG4gICAgXSxcbiAgfTtcblxuICBpdCgnc2NvcmVzIDEnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IHtcbiAgICAgIGlkOiAnMScsXG4gICAgICBhbnN3ZXJzOiB7IHIxOiB7IHZhbHVlOiAnMzUwJyB9LCByMjogeyB2YWx1ZTogJzdcXFxcY2RvdDUwJyB9IH0sXG4gICAgICBjb21wbGV0ZUFuc3dlcjogJzM1MFxcXFwgPVxcXFwgN1xcXFxjZG90NTBcXFxcIFxcXFx0ZXh0e2N1YmljfVxcXFwgXFxcXHRleHR7aW5jaGVzfScsXG4gICAgfTtcblxuICAgIGNvbnN0IGVudiA9IHsgbW9kZTogJ2V2YWx1YXRlJyB9O1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG91dGNvbWUocXVlc3Rpb24sIHNlc3Npb24sIGVudik7XG4gICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbCh7IHNjb3JlOiAxIH0pO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnUEQtNjEwJywgKCkgPT4ge1xuICBjb25zdCBlcXVhdGlvbl8wMSA9IHtcbiAgICBpZDogMSxcbiAgICBlbGVtZW50OiAnbWF0aC1pbmxpbmUnLFxuICAgIGZlZWRiYWNrRW5hYmxlZDogdHJ1ZSxcbiAgICBwcm9tcHRFbmFibGVkOiB0cnVlLFxuICAgIHJhdGlvbmFsZUVuYWJsZWQ6IHRydWUsXG4gICAgdGVhY2hlckluc3RydWN0aW9uc0VuYWJsZWQ6IHRydWUsXG4gICAgc3R1ZGVudEluc3RydWN0aW9uc0VuYWJsZWQ6IHRydWUsXG4gICAgZXF1YXRpb25FZGl0b3I6IDMsXG4gICAgdGVhY2hlckluc3RydWN0aW9uczogJycsXG4gICAgcmVzcG9uc2VUeXBlOiAnQWR2YW5jZWQgTXVsdGknLFxuICAgIGV4cHJlc3Npb246ICdcXFxcZnJhY3sxfXszfT1cXFxcZnJhY3t7cmVzcG9uc2V9fXs2fScsXG4gICAgcmF0aW9uYWxlOlxuICAgICAgJzxwPkEgY29ycmVjdCByZXNwb25zZSBpcyBzaG93biBiZWxvdzo8L3A+PHVsPjxsaT4xLzMgPSA8c3Ryb25nPjI8L3N0cm9uZz4vNjwvbGk+PGxpPjMvNCA9IDxzdHJvbmc+Njwvc3Ryb25nPi84PC9saT48bGk+My82ID0gPHN0cm9uZz4xPC9zdHJvbmc+LzI8L2xpPjwvdWw+JyxcbiAgICByZXNwb25zZXM6IFtcbiAgICAgIHtcbiAgICAgICAgYW5zd2VyOiAnXFxcXGZyYWN7MX17M309XFxcXGZyYWN7Mn17Nn0nLFxuICAgICAgICB2YWxpZGF0aW9uOiAnbGl0ZXJhbCcsXG4gICAgICAgIGlkOiAnMScsXG4gICAgICB9LFxuICAgIF0sXG4gIH07XG5cbiAgaXQoJ3Njb3JlcyAxJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHNlc3Npb24gPSB7XG4gICAgICBpZDogJzEnLFxuICAgICAgYW5zd2VyczogeyByMTogeyB2YWx1ZTogJzInIH0gfSxcbiAgICAgIGNvbXBsZXRlQW5zd2VyOiAnXFxcXGZyYWN7MX17M309XFxcXGZyYWN7Mn17Nn0nLFxuICAgIH07XG5cbiAgICBjb25zdCBlbnYgPSB7IG1vZGU6ICdldmFsdWF0ZScgfTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBvdXRjb21lKGVxdWF0aW9uXzAxLCBzZXNzaW9uLCBlbnYpO1xuICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoeyBzY29yZTogMSB9KTtcbiAgfSk7XG5cbiAgaXQoJ3Njb3JlcyAwJywgYXN5bmMgKCkgPT4ge1xuICAgIGxhdGV4RXF1YWwubW9ja1JldHVyblZhbHVlT25jZShmYWxzZSk7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IHtcbiAgICAgIGlkOiAnMScsXG4gICAgICBhbnN3ZXJzOiB7IHIxOiB7IHZhbHVlOiAnMicgfSB9LFxuICAgICAgY29tcGxldGVBbnN3ZXI6ICdcXFxcZnJhY3sxfXszfT1cXFxcZnJhY3sxfXs2fScsXG4gICAgfTtcblxuICAgIGNvbnN0IGVudiA9IHsgbW9kZTogJ2V2YWx1YXRlJyB9O1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG91dGNvbWUoZXF1YXRpb25fMDEsIHNlc3Npb24sIGVudik7XG4gICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbCh7IHNjb3JlOiAwIH0pO1xuICB9KTtcblxuICBjb25zdCBlcXVhdGlvbl8wMiA9IHtcbiAgICBpZDogMixcbiAgICBlbGVtZW50OiAnbWF0aC1pbmxpbmUnLFxuICAgIGZlZWRiYWNrRW5hYmxlZDogdHJ1ZSxcbiAgICBwcm9tcHRFbmFibGVkOiB0cnVlLFxuICAgIHJhdGlvbmFsZUVuYWJsZWQ6IHRydWUsXG4gICAgdGVhY2hlckluc3RydWN0aW9uc0VuYWJsZWQ6IHRydWUsXG4gICAgc3R1ZGVudEluc3RydWN0aW9uc0VuYWJsZWQ6IHRydWUsXG4gICAgZXF1YXRpb25FZGl0b3I6IDMsXG4gICAgdGVhY2hlckluc3RydWN0aW9uczogJycsXG4gICAgcmVzcG9uc2VUeXBlOiAnQWR2YW5jZWQgTXVsdGknLFxuICAgIGV4cHJlc3Npb246ICdcXFxcZnJhY3szfXs0fT1cXFxcZnJhY3t7cmVzcG9uc2V9fXs4fScsXG4gICAgcmF0aW9uYWxlOlxuICAgICAgJzxwPkEgY29ycmVjdCByZXNwb25zZSBpcyBzaG93biBiZWxvdzo8L3A+PHVsPjxsaT4xLzMgPSA8c3Ryb25nPjI8L3N0cm9uZz4vNjwvbGk+PGxpPjMvNCA9IDxzdHJvbmc+Njwvc3Ryb25nPi84PC9saT48bGk+My82ID0gPHN0cm9uZz4xPC9zdHJvbmc+LzI8L2xpPjwvdWw+JyxcbiAgICByZXNwb25zZXM6IFtcbiAgICAgIHtcbiAgICAgICAgYW5zd2VyOiAnXFxcXGZyYWN7M317NH09XFxcXGZyYWN7Nn17OH0nLFxuICAgICAgICB2YWxpZGF0aW9uOiAnbGl0ZXJhbCcsXG4gICAgICAgIGlkOiAnMScsXG4gICAgICB9LFxuICAgIF0sXG4gIH07XG5cbiAgaXQoJ3Njb3JlcyAxJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHNlc3Npb24gPSB7XG4gICAgICBpZDogJzInLFxuICAgICAgYW5zd2VyczogeyByMTogeyB2YWx1ZTogJzYnIH0gfSxcbiAgICAgIGNvbXBsZXRlQW5zd2VyOiAnXFxcXGZyYWN7M317NH09XFxcXGZyYWN7Nn17OH0nLFxuICAgIH07XG5cbiAgICBjb25zdCBlbnYgPSB7IG1vZGU6ICdldmFsdWF0ZScgfTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBvdXRjb21lKGVxdWF0aW9uXzAyLCBzZXNzaW9uLCBlbnYpO1xuICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoeyBzY29yZTogMSB9KTtcbiAgfSk7XG5cbiAgaXQoJ3Njb3JlcyAwJywgYXN5bmMgKCkgPT4ge1xuICAgIGxhdGV4RXF1YWwubW9ja1JldHVyblZhbHVlT25jZShmYWxzZSk7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IHtcbiAgICAgIGlkOiAnMicsXG4gICAgICBhbnN3ZXJzOiB7IHIxOiB7IHZhbHVlOiAnNicgfSB9LFxuICAgICAgY29tcGxldGVBbnN3ZXI6ICdcXFxcZnJhY3szfXs0fT1cXFxcZnJhY3szfXs4fScsXG4gICAgfTtcblxuICAgIGNvbnN0IGVudiA9IHsgbW9kZTogJ2V2YWx1YXRlJyB9O1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG91dGNvbWUoZXF1YXRpb25fMDIsIHNlc3Npb24sIGVudik7XG4gICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbCh7IHNjb3JlOiAwIH0pO1xuICB9KTtcblxuICBjb25zdCBlcXVhdGlvbl8wMyA9IHtcbiAgICBpZDogMyxcbiAgICBlbGVtZW50OiAnbWF0aC1pbmxpbmUnLFxuICAgIGZlZWRiYWNrRW5hYmxlZDogdHJ1ZSxcbiAgICBwcm9tcHRFbmFibGVkOiB0cnVlLFxuICAgIHJhdGlvbmFsZUVuYWJsZWQ6IHRydWUsXG4gICAgdGVhY2hlckluc3RydWN0aW9uc0VuYWJsZWQ6IHRydWUsXG4gICAgc3R1ZGVudEluc3RydWN0aW9uc0VuYWJsZWQ6IHRydWUsXG4gICAgZXF1YXRpb25FZGl0b3I6IDMsXG4gICAgdGVhY2hlckluc3RydWN0aW9uczogJycsXG4gICAgcmVzcG9uc2VUeXBlOiAnQWR2YW5jZWQgTXVsdGknLFxuICAgIGV4cHJlc3Npb246ICdcXFxcZnJhY3szfXs2fT1cXFxcZnJhY3t7cmVzcG9uc2V9fXsyfScsXG4gICAgcmF0aW9uYWxlOlxuICAgICAgJzxwPkEgY29ycmVjdCByZXNwb25zZSBpcyBzaG93biBiZWxvdzo8L3A+PHVsPjxsaT4xLzMgPSA8c3Ryb25nPjI8L3N0cm9uZz4vNjwvbGk+PGxpPjMvNCA9IDxzdHJvbmc+Njwvc3Ryb25nPi84PC9saT48bGk+My82ID0gPHN0cm9uZz4xPC9zdHJvbmc+LzI8L2xpPjwvdWw+JyxcbiAgICByZXNwb25zZXM6IFtcbiAgICAgIHtcbiAgICAgICAgYW5zd2VyOiAnXFxcXGZyYWN7M317Nn09XFxcXGZyYWN7MX17Mn0nLFxuICAgICAgICB2YWxpZGF0aW9uOiAnbGl0ZXJhbCcsXG4gICAgICAgIGlkOiAnMycsXG4gICAgICB9LFxuICAgIF0sXG4gIH07XG5cbiAgaXQoJ3Njb3JlcyAxJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHNlc3Npb24gPSB7XG4gICAgICBpZDogJzMnLFxuICAgICAgYW5zd2VyczogeyByMTogeyB2YWx1ZTogJzEnIH0gfSxcbiAgICAgIGNvbXBsZXRlQW5zd2VyOiAnXFxcXGZyYWN7M317Nn09XFxcXGZyYWN7MX17Mn0nLFxuICAgIH07XG5cbiAgICBjb25zdCBlbnYgPSB7IG1vZGU6ICdldmFsdWF0ZScgfTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBvdXRjb21lKGVxdWF0aW9uXzAzLCBzZXNzaW9uLCBlbnYpO1xuICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoeyBzY29yZTogMSB9KTtcbiAgfSk7XG5cbiAgaXQoJ3Njb3JlcyAwJywgYXN5bmMgKCkgPT4ge1xuICAgIGxhdGV4RXF1YWwubW9ja1JldHVyblZhbHVlT25jZShmYWxzZSk7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IHtcbiAgICAgIGlkOiAnMycsXG4gICAgICBhbnN3ZXJzOiB7IHIxOiB7IHZhbHVlOiAnMScgfSB9LFxuICAgICAgY29tcGxldGVBbnN3ZXI6ICdcXFxcZnJhY3szfXs2fT1cXFxcZnJhY3syfXsyfScsXG4gICAgfTtcblxuICAgIGNvbnN0IGVudiA9IHsgbW9kZTogJ2V2YWx1YXRlJyB9O1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG91dGNvbWUoZXF1YXRpb25fMDMsIHNlc3Npb24sIGVudik7XG4gICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbCh7IHNjb3JlOiAwIH0pO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnUEQtMTAzMScsICgpID0+IHtcbiAgY29uc3QgZXhwcmVzc2lvbl8wMSA9IHtcbiAgICBpZDogMSxcbiAgICBlbGVtZW50OiAnbWF0aC1pbmxpbmUnLFxuICAgIGZlZWRiYWNrRW5hYmxlZDogdHJ1ZSxcbiAgICBwcm9tcHRFbmFibGVkOiB0cnVlLFxuICAgIHJhdGlvbmFsZUVuYWJsZWQ6IHRydWUsXG4gICAgdGVhY2hlckluc3RydWN0aW9uc0VuYWJsZWQ6IHRydWUsXG4gICAgc3R1ZGVudEluc3RydWN0aW9uc0VuYWJsZWQ6IHRydWUsXG4gICAgZXF1YXRpb25FZGl0b3I6IDMsXG4gICAgdGVhY2hlckluc3RydWN0aW9uczogJycsXG4gICAgcmVzcG9uc2VUeXBlOiAnQWR2YW5jZWQgTXVsdGknLFxuICAgIGV4cHJlc3Npb246ICd7e3Jlc3BvbnNlfX1cXFxcbWwnLFxuICAgIHJhdGlvbmFsZTpcbiAgICAgICc8cD5BIGNvcnJlY3QgcmVzcG9uc2UgaXMgc2hvd24gYmVsb3c6PC9wPjx1bD48bGk+MS8zID0gPHN0cm9uZz4yPC9zdHJvbmc+LzY8L2xpPjxsaT4zLzQgPSA8c3Ryb25nPjY8L3N0cm9uZz4vODwvbGk+PGxpPjMvNiA9IDxzdHJvbmc+MTwvc3Ryb25nPi8yPC9saT48L3VsPicsXG4gICAgcmVzcG9uc2VzOiBbXG4gICAgICB7XG4gICAgICAgIGFuc3dlcjogJzEsMDAwXFxcXG1sJyxcbiAgICAgICAgdmFsaWRhdGlvbjogJ2xpdGVyYWwnLFxuICAgICAgICBpZDogJzEnLFxuICAgICAgfSxcbiAgICBdLFxuICB9O1xuXG4gIGl0KCdzY29yZXMgMScsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBzZXNzaW9uID0ge1xuICAgICAgaWQ6ICcxJyxcbiAgICAgIGFuc3dlcnM6IHsgcjE6IHsgdmFsdWU6ICczJyB9IH0sXG4gICAgICBjb21wbGV0ZUFuc3dlcjogJzEwMDBcXFxcbWwnLFxuICAgIH07XG5cbiAgICBjb25zdCBlbnYgPSB7IG1vZGU6ICdldmFsdWF0ZScgfTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBvdXRjb21lKGV4cHJlc3Npb25fMDEsIHNlc3Npb24sIGVudik7XG4gICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbCh7IHNjb3JlOiAxIH0pO1xuICB9KTtcblxuICBjb25zdCBleHByZXNzaW9uXzAyID0ge1xuICAgIGlkOiAxLFxuICAgIGVsZW1lbnQ6ICdtYXRoLWlubGluZScsXG4gICAgZmVlZGJhY2tFbmFibGVkOiB0cnVlLFxuICAgIHByb21wdEVuYWJsZWQ6IHRydWUsXG4gICAgcmF0aW9uYWxlRW5hYmxlZDogdHJ1ZSxcbiAgICB0ZWFjaGVySW5zdHJ1Y3Rpb25zRW5hYmxlZDogdHJ1ZSxcbiAgICBzdHVkZW50SW5zdHJ1Y3Rpb25zRW5hYmxlZDogdHJ1ZSxcbiAgICBlcXVhdGlvbkVkaXRvcjogMyxcbiAgICB0ZWFjaGVySW5zdHJ1Y3Rpb25zOiAnJyxcbiAgICByZXNwb25zZVR5cGU6ICdBZHZhbmNlZCBNdWx0aScsXG4gICAgZXhwcmVzc2lvbjogJ3t7cmVzcG9uc2V9fVxcXFxtbCcsXG4gICAgcmF0aW9uYWxlOlxuICAgICAgJzxwPkEgY29ycmVjdCByZXNwb25zZSBpcyBzaG93biBiZWxvdzo8L3A+PHVsPjxsaT4xLzMgPSA8c3Ryb25nPjI8L3N0cm9uZz4vNjwvbGk+PGxpPjMvNCA9IDxzdHJvbmc+Njwvc3Ryb25nPi84PC9saT48bGk+My82ID0gPHN0cm9uZz4xPC9zdHJvbmc+LzI8L2xpPjwvdWw+JyxcbiAgICByZXNwb25zZXM6IFtcbiAgICAgIHtcbiAgICAgICAgYW5zd2VyOiAnMTAwMFxcXFxtbCcsXG4gICAgICAgIHZhbGlkYXRpb246ICdsaXRlcmFsJyxcbiAgICAgICAgaWQ6ICcxJyxcbiAgICAgIH0sXG4gICAgXSxcbiAgfTtcblxuICBpdCgnc2NvcmVzIDEnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IHtcbiAgICAgIGlkOiAnMScsXG4gICAgICBhbnN3ZXJzOiB7IHIxOiB7IHZhbHVlOiAnMycgfSB9LFxuICAgICAgY29tcGxldGVBbnN3ZXI6ICcxLDAwMFxcXFxtbCcsXG4gICAgfTtcblxuICAgIGNvbnN0IGVudiA9IHsgbW9kZTogJ2V2YWx1YXRlJyB9O1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG91dGNvbWUoZXhwcmVzc2lvbl8wMiwgc2Vzc2lvbiwgZW52KTtcbiAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKHsgc2NvcmU6IDEgfSk7XG4gIH0pO1xuXG4gIGNvbnN0IGV4cHJlc3Npb25fMDMgPSB7XG4gICAgaWQ6IDEsXG4gICAgZWxlbWVudDogJ21hdGgtaW5saW5lJyxcbiAgICBmZWVkYmFja0VuYWJsZWQ6IHRydWUsXG4gICAgcHJvbXB0RW5hYmxlZDogdHJ1ZSxcbiAgICByYXRpb25hbGVFbmFibGVkOiB0cnVlLFxuICAgIHRlYWNoZXJJbnN0cnVjdGlvbnNFbmFibGVkOiB0cnVlLFxuICAgIHN0dWRlbnRJbnN0cnVjdGlvbnNFbmFibGVkOiB0cnVlLFxuICAgIGVxdWF0aW9uRWRpdG9yOiAzLFxuICAgIHRlYWNoZXJJbnN0cnVjdGlvbnM6ICcnLFxuICAgIHJlc3BvbnNlVHlwZTogJ0FkdmFuY2VkIE11bHRpJyxcbiAgICBleHByZXNzaW9uOiAne3tyZXNwb25zZX19XFxcXG1sJyxcbiAgICByYXRpb25hbGU6XG4gICAgICAnPHA+QSBjb3JyZWN0IHJlc3BvbnNlIGlzIHNob3duIGJlbG93OjwvcD48dWw+PGxpPjEvMyA9IDxzdHJvbmc+Mjwvc3Ryb25nPi82PC9saT48bGk+My80ID0gPHN0cm9uZz42PC9zdHJvbmc+Lzg8L2xpPjxsaT4zLzYgPSA8c3Ryb25nPjE8L3N0cm9uZz4vMjwvbGk+PC91bD4nLFxuICAgIHJlc3BvbnNlczogW1xuICAgICAge1xuICAgICAgICBhbnN3ZXI6ICcxLDAwMFxcXFxtbCcsXG4gICAgICAgIHZhbGlkYXRpb246ICdsaXRlcmFsJyxcbiAgICAgICAgaWQ6ICcxJyxcbiAgICAgIH0sXG4gICAgXSxcbiAgfTtcblxuICBpdCgnc2NvcmVzIDEnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IHtcbiAgICAgIGlkOiAnMScsXG4gICAgICBhbnN3ZXJzOiB7IHIxOiB7IHZhbHVlOiAnMycgfSB9LFxuICAgICAgY29tcGxldGVBbnN3ZXI6ICcxMDAwXFxcXG1sJyxcbiAgICB9O1xuXG4gICAgY29uc3QgZW52ID0geyBtb2RlOiAnZXZhbHVhdGUnIH07XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgb3V0Y29tZShleHByZXNzaW9uXzAzLCBzZXNzaW9uLCBlbnYpO1xuICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoeyBzY29yZTogMSB9KTtcbiAgfSk7XG5cbiAgY29uc3QgZXhwcmVzc2lvbl8wNCA9IHtcbiAgICBpZDogMSxcbiAgICBlbGVtZW50OiAnbWF0aC1pbmxpbmUnLFxuICAgIGZlZWRiYWNrRW5hYmxlZDogdHJ1ZSxcbiAgICBwcm9tcHRFbmFibGVkOiB0cnVlLFxuICAgIHJhdGlvbmFsZUVuYWJsZWQ6IHRydWUsXG4gICAgdGVhY2hlckluc3RydWN0aW9uc0VuYWJsZWQ6IHRydWUsXG4gICAgc3R1ZGVudEluc3RydWN0aW9uc0VuYWJsZWQ6IHRydWUsXG4gICAgZXF1YXRpb25FZGl0b3I6IDMsXG4gICAgdGVhY2hlckluc3RydWN0aW9uczogJycsXG4gICAgcmVzcG9uc2VUeXBlOiAnQWR2YW5jZWQgTXVsdGknLFxuICAgIGV4cHJlc3Npb246ICckXFxcXHt7cmVzcG9uc2V9fScsXG4gICAgcmF0aW9uYWxlOlxuICAgICAgJzxwPkEgY29ycmVjdCByZXNwb25zZSBpcyBzaG93biBiZWxvdzo8L3A+PHVsPjxsaT4xLzMgPSA8c3Ryb25nPjI8L3N0cm9uZz4vNjwvbGk+PGxpPjMvNCA9IDxzdHJvbmc+Njwvc3Ryb25nPi84PC9saT48bGk+My82ID0gPHN0cm9uZz4xPC9zdHJvbmc+LzI8L2xpPjwvdWw+JyxcbiAgICByZXNwb25zZXM6IFtcbiAgICAgIHtcbiAgICAgICAgYW5zd2VyOiAnNTAwMFxcXFwkJyxcbiAgICAgICAgdmFsaWRhdGlvbjogJ2xpdGVyYWwnLFxuICAgICAgICBpZDogJzEnLFxuICAgICAgfSxcbiAgICBdLFxuICB9O1xuXG4gIGl0KCdzY29yZXMgMScsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBzZXNzaW9uID0ge1xuICAgICAgaWQ6ICcxJyxcbiAgICAgIGFuc3dlcnM6IHsgcjE6IHsgdmFsdWU6ICczJyB9IH0sXG4gICAgICBjb21wbGV0ZUFuc3dlcjogJzUsMDAwXFxcXCQnLFxuICAgIH07XG5cbiAgICBjb25zdCBlbnYgPSB7IG1vZGU6ICdldmFsdWF0ZScgfTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBvdXRjb21lKGV4cHJlc3Npb25fMDQsIHNlc3Npb24sIGVudik7XG4gICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbCh7IHNjb3JlOiAxIH0pO1xuICB9KTtcblxuICBjb25zdCBleHByZXNzaW9uXzA1ID0ge1xuICAgIGlkOiAxLFxuICAgIGVsZW1lbnQ6ICdtYXRoLWlubGluZScsXG4gICAgZmVlZGJhY2tFbmFibGVkOiB0cnVlLFxuICAgIHByb21wdEVuYWJsZWQ6IHRydWUsXG4gICAgcmF0aW9uYWxlRW5hYmxlZDogdHJ1ZSxcbiAgICB0ZWFjaGVySW5zdHJ1Y3Rpb25zRW5hYmxlZDogdHJ1ZSxcbiAgICBzdHVkZW50SW5zdHJ1Y3Rpb25zRW5hYmxlZDogdHJ1ZSxcbiAgICBlcXVhdGlvbkVkaXRvcjogMyxcbiAgICB0ZWFjaGVySW5zdHJ1Y3Rpb25zOiAnJyxcbiAgICByZXNwb25zZVR5cGU6ICdBZHZhbmNlZCBNdWx0aScsXG4gICAgZXhwcmVzc2lvbjogJ3k9e3tyZXNwb25zZX19eF4yK3t7cmVzcG9uc2V9fXgre3tyZXNwb25zZX19JyxcbiAgICByYXRpb25hbGU6XG4gICAgICAnPHA+QSBjb3JyZWN0IHJlc3BvbnNlIGlzIHNob3duIGJlbG93OjwvcD48dWw+PGxpPjEvMyA9IDxzdHJvbmc+Mjwvc3Ryb25nPi82PC9saT48bGk+My80ID0gPHN0cm9uZz42PC9zdHJvbmc+Lzg8L2xpPjxsaT4zLzYgPSA8c3Ryb25nPjE8L3N0cm9uZz4vMjwvbGk+PC91bD4nLFxuICAgIHJlc3BvbnNlczogW1xuICAgICAge1xuICAgICAgICBhbnN3ZXI6ICd5PTEwMDB4XjIrMjUweCs1MDAwJyxcbiAgICAgICAgdmFsaWRhdGlvbjogJ2xpdGVyYWwnLFxuICAgICAgICBpZDogJzEnLFxuICAgICAgfSxcbiAgICBdLFxuICB9O1xuXG4gIGl0KCdzY29yZXMgMScsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBzZXNzaW9uID0ge1xuICAgICAgaWQ6ICcxJyxcbiAgICAgIGFuc3dlcnM6IHsgcjE6IHsgdmFsdWU6ICczJyB9IH0sXG4gICAgICBjb21wbGV0ZUFuc3dlcjogJ3k9MSwwMDB4XjIrMjUweCs1LDAwMCcsXG4gICAgfTtcblxuICAgIGNvbnN0IGVudiA9IHsgbW9kZTogJ2V2YWx1YXRlJyB9O1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG91dGNvbWUoZXhwcmVzc2lvbl8wNSwgc2Vzc2lvbiwgZW52KTtcbiAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKHsgc2NvcmU6IDEgfSk7XG4gIH0pO1xuXG4gIGl0KCdzY29yZXMgMScsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBzZXNzaW9uID0ge1xuICAgICAgaWQ6ICcxJyxcbiAgICAgIGFuc3dlcnM6IHsgcjE6IHsgdmFsdWU6ICczJyB9IH0sXG4gICAgICBjb21wbGV0ZUFuc3dlcjogJ3k9MTAwMHheMisyNTB4KzUsMDAwJyxcbiAgICB9O1xuXG4gICAgY29uc3QgZW52ID0geyBtb2RlOiAnZXZhbHVhdGUnIH07XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgb3V0Y29tZShleHByZXNzaW9uXzA1LCBzZXNzaW9uLCBlbnYpO1xuICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoeyBzY29yZTogMSB9KTtcbiAgfSk7XG5cbiAgaXQoJ3Njb3JlcyAxJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHNlc3Npb24gPSB7XG4gICAgICBpZDogJzEnLFxuICAgICAgYW5zd2VyczogeyByMTogeyB2YWx1ZTogJzMnIH0gfSxcbiAgICAgIGNvbXBsZXRlQW5zd2VyOiAneT0xLDAwMHheMisyNTB4KzUwMDAnLFxuICAgIH07XG5cbiAgICBjb25zdCBlbnYgPSB7IG1vZGU6ICdldmFsdWF0ZScgfTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBvdXRjb21lKGV4cHJlc3Npb25fMDUsIHNlc3Npb24sIGVudik7XG4gICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbCh7IHNjb3JlOiAxIH0pO1xuICB9KTtcblxuICBjb25zdCBleHByZXNzaW9uXzA2ID0ge1xuICAgIGlkOiAxLFxuICAgIGVsZW1lbnQ6ICdtYXRoLWlubGluZScsXG4gICAgZmVlZGJhY2tFbmFibGVkOiB0cnVlLFxuICAgIHByb21wdEVuYWJsZWQ6IHRydWUsXG4gICAgcmF0aW9uYWxlRW5hYmxlZDogdHJ1ZSxcbiAgICB0ZWFjaGVySW5zdHJ1Y3Rpb25zRW5hYmxlZDogdHJ1ZSxcbiAgICBzdHVkZW50SW5zdHJ1Y3Rpb25zRW5hYmxlZDogdHJ1ZSxcbiAgICBlcXVhdGlvbkVkaXRvcjogMyxcbiAgICB0ZWFjaGVySW5zdHJ1Y3Rpb25zOiAnJyxcbiAgICByZXNwb25zZVR5cGU6ICdBZHZhbmNlZCBNdWx0aScsXG4gICAgZXhwcmVzc2lvbjogJ3k9e3tyZXNwb25zZX19eF4yK3t7cmVzcG9uc2V9fXgre3tyZXNwb25zZX19JyxcbiAgICByYXRpb25hbGU6XG4gICAgICAnPHA+QSBjb3JyZWN0IHJlc3BvbnNlIGlzIHNob3duIGJlbG93OjwvcD48dWw+PGxpPjEvMyA9IDxzdHJvbmc+Mjwvc3Ryb25nPi82PC9saT48bGk+My80ID0gPHN0cm9uZz42PC9zdHJvbmc+Lzg8L2xpPjxsaT4zLzYgPSA8c3Ryb25nPjE8L3N0cm9uZz4vMjwvbGk+PC91bD4nLFxuICAgIHJlc3BvbnNlczogW1xuICAgICAge1xuICAgICAgICBhbnN3ZXI6ICd5PTEsMDAweF4yKzI1MHgrNSwwMDAnLFxuICAgICAgICB2YWxpZGF0aW9uOiAnbGl0ZXJhbCcsXG4gICAgICAgIGlkOiAnMScsXG4gICAgICB9LFxuICAgIF0sXG4gIH07XG5cbiAgaXQoJ3Njb3JlcyAxJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHNlc3Npb24gPSB7XG4gICAgICBpZDogJzEnLFxuICAgICAgYW5zd2VyczogeyByMTogeyB2YWx1ZTogJzMnIH0gfSxcbiAgICAgIGNvbXBsZXRlQW5zd2VyOiAneT0xMDAweF4yKzI1MHgrNTAwMCcsXG4gICAgfTtcblxuICAgIGNvbnN0IGVudiA9IHsgbW9kZTogJ2V2YWx1YXRlJyB9O1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG91dGNvbWUoZXhwcmVzc2lvbl8wNiwgc2Vzc2lvbiwgZW52KTtcbiAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKHsgc2NvcmU6IDEgfSk7XG4gIH0pO1xuXG4gIGl0KCdzY29yZXMgMScsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBzZXNzaW9uID0ge1xuICAgICAgaWQ6ICcxJyxcbiAgICAgIGFuc3dlcnM6IHsgcjE6IHsgdmFsdWU6ICczJyB9IH0sXG4gICAgICBjb21wbGV0ZUFuc3dlcjogJ3k9MTAwMHheMisyNTB4KzUsMDAwJyxcbiAgICB9O1xuXG4gICAgY29uc3QgZW52ID0geyBtb2RlOiAnZXZhbHVhdGUnIH07XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgb3V0Y29tZShleHByZXNzaW9uXzA2LCBzZXNzaW9uLCBlbnYpO1xuICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoeyBzY29yZTogMSB9KTtcbiAgfSk7XG5cbiAgaXQoJ3Njb3JlcyAxJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHNlc3Npb24gPSB7XG4gICAgICBpZDogJzEnLFxuICAgICAgYW5zd2VyczogeyByMTogeyB2YWx1ZTogJzMnIH0gfSxcbiAgICAgIGNvbXBsZXRlQW5zd2VyOiAneT0xLDAwMHheMisyNTB4KzUwMDAnLFxuICAgIH07XG5cbiAgICBjb25zdCBlbnYgPSB7IG1vZGU6ICdldmFsdWF0ZScgfTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBvdXRjb21lKGV4cHJlc3Npb25fMDYsIHNlc3Npb24sIGVudik7XG4gICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbCh7IHNjb3JlOiAxIH0pO1xuICB9KTtcblxuICBjb25zdCBleHByZXNzaW9uXzA3ID0ge1xuICAgIGlkOiAxLFxuICAgIGVsZW1lbnQ6ICdtYXRoLWlubGluZScsXG4gICAgZmVlZGJhY2tFbmFibGVkOiB0cnVlLFxuICAgIHByb21wdEVuYWJsZWQ6IHRydWUsXG4gICAgcmF0aW9uYWxlRW5hYmxlZDogdHJ1ZSxcbiAgICB0ZWFjaGVySW5zdHJ1Y3Rpb25zRW5hYmxlZDogdHJ1ZSxcbiAgICBzdHVkZW50SW5zdHJ1Y3Rpb25zRW5hYmxlZDogdHJ1ZSxcbiAgICBlcXVhdGlvbkVkaXRvcjogMyxcbiAgICB0ZWFjaGVySW5zdHJ1Y3Rpb25zOiAnJyxcbiAgICByZXNwb25zZVR5cGU6ICdBZHZhbmNlZCBNdWx0aScsXG4gICAgZXhwcmVzc2lvbjogJ1xcXFxmcmFjeyB4IH17e3sgcmVzcG9uc2UgfX19JyxcbiAgICByYXRpb25hbGU6XG4gICAgICAnPHA+QSBjb3JyZWN0IHJlc3BvbnNlIGlzIHNob3duIGJlbG93OjwvcD48dWw+PGxpPjEvMyA9IDxzdHJvbmc+Mjwvc3Ryb25nPi82PC9saT48bGk+My80ID0gPHN0cm9uZz42PC9zdHJvbmc+Lzg8L2xpPjxsaT4zLzYgPSA8c3Ryb25nPjE8L3N0cm9uZz4vMjwvbGk+PC91bD4nLFxuICAgIHJlc3BvbnNlczogW1xuICAgICAge1xuICAgICAgICBhbnN3ZXI6ICdcXFxcZnJhY3t4fXsxMDAwfScsXG4gICAgICAgIHZhbGlkYXRpb246ICdsaXRlcmFsJyxcbiAgICAgICAgaWQ6ICcxJyxcbiAgICAgIH0sXG4gICAgXSxcbiAgfTtcblxuICBpdCgnc2NvcmVzIDEnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IHtcbiAgICAgIGlkOiAnMScsXG4gICAgICBhbnN3ZXJzOiB7IHIxOiB7IHZhbHVlOiAnMycgfSB9LFxuICAgICAgY29tcGxldGVBbnN3ZXI6ICdcXFxcZnJhY3t4fXsxLDAwMH0nLFxuICAgIH07XG5cbiAgICBjb25zdCBlbnYgPSB7IG1vZGU6ICdldmFsdWF0ZScgfTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBvdXRjb21lKGV4cHJlc3Npb25fMDcsIHNlc3Npb24sIGVudik7XG4gICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbCh7IHNjb3JlOiAxIH0pO1xuICB9KTtcblxuICBjb25zdCBleHByZXNzaW9uXzA4ID0ge1xuICAgIGlkOiAxLFxuICAgIGVsZW1lbnQ6ICdtYXRoLWlubGluZScsXG4gICAgZmVlZGJhY2tFbmFibGVkOiB0cnVlLFxuICAgIHByb21wdEVuYWJsZWQ6IHRydWUsXG4gICAgcmF0aW9uYWxlRW5hYmxlZDogdHJ1ZSxcbiAgICB0ZWFjaGVySW5zdHJ1Y3Rpb25zRW5hYmxlZDogdHJ1ZSxcbiAgICBzdHVkZW50SW5zdHJ1Y3Rpb25zRW5hYmxlZDogdHJ1ZSxcbiAgICBlcXVhdGlvbkVkaXRvcjogMyxcbiAgICB0ZWFjaGVySW5zdHJ1Y3Rpb25zOiAnJyxcbiAgICByZXNwb25zZVR5cGU6ICdBZHZhbmNlZCBNdWx0aScsXG4gICAgZXhwcmVzc2lvbjogJ1xcXFxmcmFjeyB4IH17e3sgcmVzcG9uc2UgfX19JyxcbiAgICByYXRpb25hbGU6XG4gICAgICAnPHA+QSBjb3JyZWN0IHJlc3BvbnNlIGlzIHNob3duIGJlbG93OjwvcD48dWw+PGxpPjEvMyA9IDxzdHJvbmc+Mjwvc3Ryb25nPi82PC9saT48bGk+My80ID0gPHN0cm9uZz42PC9zdHJvbmc+Lzg8L2xpPjxsaT4zLzYgPSA8c3Ryb25nPjE8L3N0cm9uZz4vMjwvbGk+PC91bD4nLFxuICAgIHJlc3BvbnNlczogW1xuICAgICAge1xuICAgICAgICBhbnN3ZXI6ICdcXFxcZnJhY3t4fXsxLDAwMH0nLFxuICAgICAgICB2YWxpZGF0aW9uOiAnbGl0ZXJhbCcsXG4gICAgICAgIGlkOiAnMScsXG4gICAgICB9LFxuICAgIF0sXG4gIH07XG5cbiAgaXQoJ3Njb3JlcyAxJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHNlc3Npb24gPSB7XG4gICAgICBpZDogJzEnLFxuICAgICAgYW5zd2VyczogeyByMTogeyB2YWx1ZTogJzMnIH0gfSxcbiAgICAgIGNvbXBsZXRlQW5zd2VyOiAnXFxcXGZyYWN7eH17MTAwMH0nLFxuICAgIH07XG5cbiAgICBjb25zdCBlbnYgPSB7IG1vZGU6ICdldmFsdWF0ZScgfTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBvdXRjb21lKGV4cHJlc3Npb25fMDgsIHNlc3Npb24sIGVudik7XG4gICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbCh7IHNjb3JlOiAxIH0pO1xuICB9KTtcblxuICBjb25zdCBlcXVhdGlvbl8wMSA9IHtcbiAgICBpZDogMSxcbiAgICBlbGVtZW50OiAnbWF0aC1pbmxpbmUnLFxuICAgIGZlZWRiYWNrRW5hYmxlZDogdHJ1ZSxcbiAgICBwcm9tcHRFbmFibGVkOiB0cnVlLFxuICAgIHJhdGlvbmFsZUVuYWJsZWQ6IHRydWUsXG4gICAgdGVhY2hlckluc3RydWN0aW9uc0VuYWJsZWQ6IHRydWUsXG4gICAgc3R1ZGVudEluc3RydWN0aW9uc0VuYWJsZWQ6IHRydWUsXG4gICAgZXF1YXRpb25FZGl0b3I6IDMsXG4gICAgdGVhY2hlckluc3RydWN0aW9uczogJycsXG4gICAgcmVzcG9uc2VUeXBlOiAnQWR2YW5jZWQgTXVsdGknLFxuICAgIGV4cHJlc3Npb246ICdcXFxcZnJhY3sxMDAwfXszfT1cXFxcZnJhY3t7cmVzcG9uc2V9fXs2fScsXG4gICAgcmF0aW9uYWxlOlxuICAgICAgJzxwPkEgY29ycmVjdCByZXNwb25zZSBpcyBzaG93biBiZWxvdzo8L3A+PHVsPjxsaT4xLzMgPSA8c3Ryb25nPjI8L3N0cm9uZz4vNjwvbGk+PGxpPjMvNCA9IDxzdHJvbmc+Njwvc3Ryb25nPi84PC9saT48bGk+My82ID0gPHN0cm9uZz4xPC9zdHJvbmc+LzI8L2xpPjwvdWw+JyxcbiAgICByZXNwb25zZXM6IFtcbiAgICAgIHtcbiAgICAgICAgYW5zd2VyOiAnXFxcXGZyYWN7MSwwMDB9ezN9PVxcXFxmcmFjezJ9ezZ9JyxcbiAgICAgICAgdmFsaWRhdGlvbjogJ2xpdGVyYWwnLFxuICAgICAgICBpZDogJzEnLFxuICAgICAgfSxcbiAgICBdLFxuICB9O1xuXG4gIGl0KCdzY29yZXMgMScsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBzZXNzaW9uID0ge1xuICAgICAgaWQ6ICcxJyxcbiAgICAgIGFuc3dlcnM6IHsgcjE6IHsgdmFsdWU6ICczJyB9IH0sXG4gICAgICBjb21wbGV0ZUFuc3dlcjogJ1xcXFxmcmFjezEwMDB9ezN9PVxcXFxmcmFjezJ9ezZ9JyxcbiAgICB9O1xuXG4gICAgY29uc3QgZW52ID0geyBtb2RlOiAnZXZhbHVhdGUnIH07XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgb3V0Y29tZShlcXVhdGlvbl8wMSwgc2Vzc2lvbiwgZW52KTtcbiAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKHsgc2NvcmU6IDEgfSk7XG4gIH0pO1xuXG4gIGl0KCdzY29yZXMgMCcsIGFzeW5jICgpID0+IHtcbiAgICBsYXRleEVxdWFsLm1vY2tSZXR1cm5WYWx1ZU9uY2UoZmFsc2UpO1xuICAgIGNvbnN0IHNlc3Npb24gPSB7XG4gICAgICBpZDogJzEnLFxuICAgICAgYW5zd2VyczogeyByMTogeyB2YWx1ZTogJzInIH0gfSxcbiAgICAgIGNvbXBsZXRlQW5zd2VyOiAnXFxcXGZyYWN7MX17M309XFxcXGZyYWN7MX17Nn0nLFxuICAgIH07XG5cbiAgICBjb25zdCBlbnYgPSB7IG1vZGU6ICdldmFsdWF0ZScgfTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBvdXRjb21lKGVxdWF0aW9uXzAxLCBzZXNzaW9uLCBlbnYpO1xuICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoeyBzY29yZTogMCB9KTtcbiAgfSk7XG59KTtcbiJdfQ==