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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,470 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
- var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
5
- var _react = require("@testing-library/react");
6
- var _react2 = _interopRequireDefault(require("react"));
7
- var _styles = require("@mui/material/styles");
8
- var _main = require("../main");
9
- var _defaults = _interopRequireDefault(require("../defaults"));
10
- var _markupUtils = require("../markupUtils");
11
- jest.mock('@pie-lib/config-ui', () => ({
12
- choiceUtils: {
13
- firstAvailableIndex: jest.fn()
14
- },
15
- settings: {
16
- Panel: props => /*#__PURE__*/_react2.default.createElement("div", (0, _extends2.default)({
17
- "data-testid": "settings-panel"
18
- }, props)),
19
- toggle: jest.fn(),
20
- radio: jest.fn(),
21
- dropdown: jest.fn()
22
- },
23
- layout: {
24
- ConfigLayout: props => /*#__PURE__*/_react2.default.createElement("div", {
25
- "data-testid": "config-layout"
26
- }, props.children)
27
- },
28
- InputContainer: props => /*#__PURE__*/_react2.default.createElement("div", {
29
- "data-testid": "input-container"
30
- }, props.children)
31
- }));
32
- jest.mock('@pie-lib/editable-html-tip-tap', () => ({
33
- __esModule: true,
34
- default: ({
35
- markup,
36
- onChange
37
- }) => /*#__PURE__*/_react2.default.createElement("div", {
38
- "data-testid": "editable-html",
39
- onClick: () => onChange && onChange('new value')
40
- }, markup),
41
- ALL_PLUGINS: []
42
- }));
43
- jest.mock('../ecr-toolbar', () => ({
44
- __esModule: true,
45
- default: props => /*#__PURE__*/_react2.default.createElement("div", (0, _extends2.default)({
46
- "data-testid": "ecr-toolbar"
47
- }, props))
48
- }));
49
- jest.mock('../alternateResponses', () => ({
50
- __esModule: true,
51
- default: props => /*#__PURE__*/_react2.default.createElement("div", (0, _extends2.default)({
52
- "data-testid": "alternate-responses"
53
- }, props))
54
- }));
55
- const theme = (0, _styles.createTheme)();
56
- const model = {
57
- markup: '<p>The {{0}} jumped {{1}} the {{2}}</p>',
58
- disabled: false,
59
- choices: {
60
- 0: [{
61
- label: 'cow',
62
- value: '0'
63
- }, {
64
- label: 'cattle',
65
- value: '1'
66
- }, {
67
- label: 'calf',
68
- value: '2'
69
- }],
70
- 1: [{
71
- label: 'over',
72
- value: '0'
73
- }, {
74
- label: 'past',
75
- value: '1'
76
- }, {
77
- label: 'beyond',
78
- value: '2'
79
- }],
80
- 2: [{
81
- label: 'moon',
82
- value: '0'
83
- }]
84
- },
85
- maxLengthPerChoice: [6, 6, 4],
86
- prompt: 'Complete the sentence'
87
- };
88
- const prepareModel = (model = {}) => {
89
- const joinedObj = {
90
- ..._defaults.default.model,
91
- ...model
92
- };
93
- const slateMarkup = joinedObj.slateMarkup || (0, _markupUtils.createSlateMarkup)(joinedObj.markup, joinedObj.choices);
94
- const processedMarkup = (0, _markupUtils.processMarkup)(slateMarkup);
95
- return {
96
- ...joinedObj,
97
- slateMarkup,
98
- markup: processedMarkup
99
- };
100
- };
101
- describe('Main', () => {
102
- let onModelChanged = jest.fn();
103
- let onConfigurationChanged = jest.fn();
104
- beforeEach(() => {
105
- jest.clearAllMocks();
106
- });
107
- const renderMain = (extras = {}) => {
108
- const defaults = {
109
- onModelChanged,
110
- onConfigurationChanged,
111
- classes: {},
112
- model: prepareModel({
113
- ...model,
114
- ...extras
115
- }),
116
- configuration: _defaults.default.configuration
117
- };
118
- const props = {
119
- ...defaults
120
- };
121
- return (0, _react.render)(/*#__PURE__*/_react2.default.createElement(_styles.ThemeProvider, {
122
- theme: theme
123
- }, /*#__PURE__*/_react2.default.createElement(_main.Main, props)));
124
- };
125
- describe('logic', () => {
126
- describe('onModelChange', () => {
127
- it('changes the model', () => {
128
- const testInstance = new _main.Main({
129
- onModelChanged,
130
- onConfigurationChanged,
131
- classes: {},
132
- model: prepareModel(model),
133
- configuration: _defaults.default.configuration
134
- });
135
- testInstance.onModelChange({
136
- promptEnabled: false
137
- });
138
- expect(onModelChanged).toBeCalledWith({
139
- ...prepareModel(model),
140
- promptEnabled: false
141
- });
142
- });
143
- });
144
- describe('onPromptChanged', () => {
145
- it('changes the prompt value', () => {
146
- const testInstance = new _main.Main({
147
- onModelChanged,
148
- onConfigurationChanged,
149
- classes: {},
150
- model: prepareModel(model),
151
- configuration: _defaults.default.configuration
152
- });
153
- testInstance.onPromptChanged('This is the new prompt');
154
- expect(onModelChanged).toBeCalledWith({
155
- ...prepareModel(model),
156
- prompt: 'This is the new prompt'
157
- });
158
- });
159
- });
160
- describe('onRationaleChanged', () => {
161
- it('changes the rationale value', () => {
162
- const testInstance = new _main.Main({
163
- onModelChanged,
164
- onConfigurationChanged,
165
- classes: {},
166
- model: prepareModel(model),
167
- configuration: _defaults.default.configuration
168
- });
169
- testInstance.onRationaleChanged('New Rationale');
170
- expect(onModelChanged).toBeCalledWith({
171
- ...prepareModel(model),
172
- rationale: 'New Rationale'
173
- });
174
- });
175
- });
176
- describe('onTeacherInstructionsChanged', () => {
177
- it('changes the teacher instructions value', () => {
178
- const testInstance = new _main.Main({
179
- onModelChanged,
180
- onConfigurationChanged,
181
- classes: {},
182
- model: prepareModel(model),
183
- configuration: _defaults.default.configuration
184
- });
185
- testInstance.onTeacherInstructionsChanged('New Teacher Instructions');
186
- expect(onModelChanged).toBeCalledWith({
187
- ...prepareModel(model),
188
- teacherInstructions: 'New Teacher Instructions'
189
- });
190
- });
191
- });
192
- describe('onMarkupChanged', () => {
193
- it('changes slate markup value', () => {
194
- const testInstance = new _main.Main({
195
- onModelChanged,
196
- onConfigurationChanged,
197
- classes: {},
198
- model: prepareModel(model),
199
- configuration: _defaults.default.configuration
200
- });
201
- const slateMarkup = '<p>The <span data-type=\\"explicit_constructed_response\\" data-index=\\"0\\" data-value=\\"cow\\"></span> jumped</p>';
202
- testInstance.onMarkupChanged(slateMarkup);
203
- expect(onModelChanged).toBeCalledWith({
204
- ...prepareModel(model),
205
- slateMarkup
206
- });
207
- });
208
- });
209
- describe('onResponsesChanged', () => {
210
- it('changes choices and slateMarkup as well', () => {
211
- const testInstance = new _main.Main({
212
- onModelChanged,
213
- onConfigurationChanged,
214
- classes: {},
215
- model: prepareModel(model),
216
- configuration: _defaults.default.configuration
217
- });
218
- const newChoices = {
219
- 0: [{
220
- label: 'cow',
221
- value: '0'
222
- }, {
223
- label: 'cattle',
224
- value: '1'
225
- }, {
226
- label: 'calf',
227
- value: '2'
228
- }],
229
- 1: [{
230
- label: 'over',
231
- value: '0'
232
- }, {
233
- label: 'past',
234
- value: '1'
235
- }, {
236
- label: 'beyond',
237
- value: '2'
238
- }],
239
- 2: [{
240
- label: 'sun',
241
- value: '0'
242
- }]
243
- };
244
- testInstance.onResponsesChanged(newChoices);
245
- expect(onModelChanged).toBeCalledWith({
246
- ...prepareModel(model),
247
- choices: newChoices
248
- });
249
- });
250
- });
251
- describe('onChangeResponse', () => {
252
- it('with new area', () => {
253
- const testInstance = new _main.Main({
254
- onModelChanged,
255
- onConfigurationChanged,
256
- classes: {},
257
- model: prepareModel(model),
258
- configuration: _defaults.default.configuration
259
- });
260
- testInstance.onChangeResponse(3);
261
- expect(onModelChanged).toBeCalledWith(expect.objectContaining({
262
- choices: expect.objectContaining({
263
- ...model.choices,
264
- 3: [{
265
- label: '',
266
- value: '0'
267
- }]
268
- }),
269
- maxLengthPerChoice: expect.arrayContaining([6, 6, 4, 2])
270
- }));
271
- });
272
- it('with existing area', () => {
273
- const testInstance = new _main.Main({
274
- onModelChanged,
275
- onConfigurationChanged,
276
- classes: {},
277
- model: prepareModel(model),
278
- configuration: _defaults.default.configuration
279
- });
280
- testInstance.onChangeResponse(1, 'under');
281
- expect(onModelChanged).toBeCalledWith(expect.objectContaining({
282
- choices: expect.objectContaining({
283
- 1: [{
284
- label: 'under',
285
- value: '0'
286
- }, {
287
- label: 'past',
288
- value: '1'
289
- }, {
290
- label: 'beyond',
291
- value: '2'
292
- }]
293
- })
294
- }));
295
- });
296
- });
297
- describe('onChange', () => {
298
- // Note: The following tests for onChange test implementation details (setState callbacks)
299
- // that are difficult to test with RTL without full component rendering.
300
- // These should be tested through user interactions in integration tests instead.
301
-
302
- it.skip('slateMarkup and choices are updated with new area without data-value', () => {
303
- jest.useFakeTimers();
304
- const testInstance = new _main.Main({
305
- onModelChanged,
306
- onConfigurationChanged,
307
- classes: {},
308
- model: prepareModel({
309
- choices: {
310
- 0: [{
311
- label: 'cow',
312
- value: '0'
313
- }, {
314
- label: 'cattle',
315
- value: '1'
316
- }, {
317
- label: 'calf',
318
- value: '2'
319
- }],
320
- 1: [{
321
- label: 'over',
322
- value: '0'
323
- }, {
324
- label: 'past',
325
- value: '1'
326
- }, {
327
- label: 'beyond',
328
- value: '2'
329
- }],
330
- 2: [{
331
- label: 'moon',
332
- value: '0'
333
- }]
334
- },
335
- maxLengthPerChoice: [6, 6, 4, 2]
336
- }),
337
- configuration: _defaults.default.configuration
338
- });
339
- const newMarkup = `<p>The <span data-type="explicit_constructed_response" data-index="0" data-value="cow"></span> jumped <span data-type="explicit_constructed_response" data-index="1" data-value="over"></span> the <span data-type="explicit_constructed_response" data-index="2" data-value="moon"></span>and <span data-type="explicit_constructed_response" data-index="3"></span></p>`;
340
- testInstance.onChange(newMarkup);
341
-
342
- // Wait for setState callback
343
- jest.runAllTimers();
344
- expect(onModelChanged).toBeCalledWith(expect.objectContaining({
345
- slateMarkup: newMarkup,
346
- choices: expect.objectContaining({
347
- 3: [{
348
- label: '',
349
- value: '0'
350
- }]
351
- })
352
- }));
353
- jest.useRealTimers();
354
- });
355
- it.skip('slateMarkup and choices are updated with new area with data-value', () => {
356
- jest.useFakeTimers();
357
- const testInstance = new _main.Main({
358
- onModelChanged,
359
- onConfigurationChanged,
360
- classes: {},
361
- model: prepareModel({
362
- choices: {
363
- 0: [{
364
- label: 'cow',
365
- value: '0'
366
- }, {
367
- label: 'cattle',
368
- value: '1'
369
- }, {
370
- label: 'calf',
371
- value: '2'
372
- }],
373
- 1: [{
374
- label: 'over',
375
- value: '0'
376
- }, {
377
- label: 'past',
378
- value: '1'
379
- }, {
380
- label: 'beyond',
381
- value: '2'
382
- }],
383
- 2: [{
384
- label: 'moon',
385
- value: '0'
386
- }]
387
- },
388
- maxLengthPerChoice: [6, 6, 4, 2]
389
- }),
390
- configuration: _defaults.default.configuration
391
- });
392
- const newMarkup = `<p>The <span data-type="explicit_constructed_response" data-index="0" data-value="cow"></span> jumped <span data-type="explicit_constructed_response" data-index="1" data-value="over"></span> the <span data-type="explicit_constructed_response" data-index="2" data-value="moon"></span>and <span data-type="explicit_constructed_response" data-index="3" data-value="test"></span></p>`;
393
- testInstance.onChange(newMarkup);
394
-
395
- // Wait for setState callback
396
- jest.runAllTimers();
397
- expect(onModelChanged).toBeCalledWith(expect.objectContaining({
398
- slateMarkup: newMarkup,
399
- choices: expect.objectContaining({
400
- 3: [{
401
- label: 'test',
402
- value: '0'
403
- }]
404
- })
405
- }));
406
- jest.useRealTimers();
407
- });
408
- it.skip('slateMarkup and choices are updated with changed data-value', () => {
409
- jest.useFakeTimers();
410
- const testInstance = new _main.Main({
411
- onModelChanged,
412
- onConfigurationChanged,
413
- classes: {},
414
- model: prepareModel({
415
- choices: {
416
- 0: [{
417
- label: 'cow',
418
- value: '0'
419
- }, {
420
- label: 'cattle',
421
- value: '1'
422
- }, {
423
- label: 'calf',
424
- value: '2'
425
- }],
426
- 1: [{
427
- label: 'over',
428
- value: '0'
429
- }, {
430
- label: 'past',
431
- value: '1'
432
- }, {
433
- label: 'beyond',
434
- value: '2'
435
- }],
436
- 2: [{
437
- label: 'moon',
438
- value: '0'
439
- }]
440
- },
441
- maxLengthPerChoice: [6, 6, 4, 2]
442
- }),
443
- configuration: _defaults.default.configuration
444
- });
445
- const newMarkup = `<p>The <span data-type="explicit_constructed_response" data-index="0" data-value="rabbit"></span> jumped <span data-type="explicit_constructed_response" data-index="1" data-value="over"></span> the <span data-type="explicit_constructed_response" data-index="2" data-value="moon"></span>and <span data-type="explicit_constructed_response" data-index="3" data-value="test"></span></p>`;
446
- testInstance.onChange(newMarkup);
447
-
448
- // Wait for setState callback
449
- jest.runAllTimers();
450
- expect(onModelChanged).toBeCalledWith(expect.objectContaining({
451
- slateMarkup: newMarkup,
452
- choices: expect.objectContaining({
453
- 0: [{
454
- label: 'rabbit',
455
- value: '0'
456
- }, {
457
- label: 'cattle',
458
- value: '1'
459
- }, {
460
- label: 'calf',
461
- value: '2'
462
- }]
463
- })
464
- }));
465
- jest.useRealTimers();
466
- });
467
- });
468
- });
469
- });
470
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJyZXF1aXJlIiwiX3JlYWN0MiIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfc3R5bGVzIiwiX21haW4iLCJfZGVmYXVsdHMiLCJfbWFya3VwVXRpbHMiLCJqZXN0IiwibW9jayIsImNob2ljZVV0aWxzIiwiZmlyc3RBdmFpbGFibGVJbmRleCIsImZuIiwic2V0dGluZ3MiLCJQYW5lbCIsInByb3BzIiwiZGVmYXVsdCIsImNyZWF0ZUVsZW1lbnQiLCJfZXh0ZW5kczIiLCJ0b2dnbGUiLCJyYWRpbyIsImRyb3Bkb3duIiwibGF5b3V0IiwiQ29uZmlnTGF5b3V0IiwiY2hpbGRyZW4iLCJJbnB1dENvbnRhaW5lciIsIl9fZXNNb2R1bGUiLCJtYXJrdXAiLCJvbkNoYW5nZSIsIm9uQ2xpY2siLCJBTExfUExVR0lOUyIsInRoZW1lIiwiY3JlYXRlVGhlbWUiLCJtb2RlbCIsImRpc2FibGVkIiwiY2hvaWNlcyIsImxhYmVsIiwidmFsdWUiLCJtYXhMZW5ndGhQZXJDaG9pY2UiLCJwcm9tcHQiLCJwcmVwYXJlTW9kZWwiLCJqb2luZWRPYmoiLCJzZW5zaWJsZURlZmF1bHRzIiwic2xhdGVNYXJrdXAiLCJjcmVhdGVTbGF0ZU1hcmt1cCIsInByb2Nlc3NlZE1hcmt1cCIsInByb2Nlc3NNYXJrdXAiLCJkZXNjcmliZSIsIm9uTW9kZWxDaGFuZ2VkIiwib25Db25maWd1cmF0aW9uQ2hhbmdlZCIsImJlZm9yZUVhY2giLCJjbGVhckFsbE1vY2tzIiwicmVuZGVyTWFpbiIsImV4dHJhcyIsImRlZmF1bHRzIiwiY2xhc3NlcyIsImNvbmZpZ3VyYXRpb24iLCJyZW5kZXIiLCJUaGVtZVByb3ZpZGVyIiwiTWFpbiIsIml0IiwidGVzdEluc3RhbmNlIiwib25Nb2RlbENoYW5nZSIsInByb21wdEVuYWJsZWQiLCJleHBlY3QiLCJ0b0JlQ2FsbGVkV2l0aCIsIm9uUHJvbXB0Q2hhbmdlZCIsIm9uUmF0aW9uYWxlQ2hhbmdlZCIsInJhdGlvbmFsZSIsIm9uVGVhY2hlckluc3RydWN0aW9uc0NoYW5nZWQiLCJ0ZWFjaGVySW5zdHJ1Y3Rpb25zIiwib25NYXJrdXBDaGFuZ2VkIiwibmV3Q2hvaWNlcyIsIm9uUmVzcG9uc2VzQ2hhbmdlZCIsIm9uQ2hhbmdlUmVzcG9uc2UiLCJvYmplY3RDb250YWluaW5nIiwiYXJyYXlDb250YWluaW5nIiwic2tpcCIsInVzZUZha2VUaW1lcnMiLCJuZXdNYXJrdXAiLCJydW5BbGxUaW1lcnMiLCJ1c2VSZWFsVGltZXJzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL19fdGVzdHNfXy9tYWluLnRlc3QuanN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlbmRlciB9IGZyb20gJ0B0ZXN0aW5nLWxpYnJhcnkvcmVhY3QnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFRoZW1lUHJvdmlkZXIsIGNyZWF0ZVRoZW1lIH0gZnJvbSAnQG11aS9tYXRlcmlhbC9zdHlsZXMnO1xuXG5pbXBvcnQgeyBNYWluIH0gZnJvbSAnLi4vbWFpbic7XG5pbXBvcnQgc2Vuc2libGVEZWZhdWx0cyBmcm9tICcuLi9kZWZhdWx0cyc7XG5pbXBvcnQgeyBjcmVhdGVTbGF0ZU1hcmt1cCwgcHJvY2Vzc01hcmt1cCB9IGZyb20gJy4uL21hcmt1cFV0aWxzJztcblxuamVzdC5tb2NrKCdAcGllLWxpYi9jb25maWctdWknLCAoKSA9PiAoe1xuICBjaG9pY2VVdGlsczoge1xuICAgIGZpcnN0QXZhaWxhYmxlSW5kZXg6IGplc3QuZm4oKSxcbiAgfSxcbiAgc2V0dGluZ3M6IHtcbiAgICBQYW5lbDogKHByb3BzKSA9PiA8ZGl2IGRhdGEtdGVzdGlkPVwic2V0dGluZ3MtcGFuZWxcIiB7Li4ucHJvcHN9IC8+LFxuICAgIHRvZ2dsZTogamVzdC5mbigpLFxuICAgIHJhZGlvOiBqZXN0LmZuKCksXG4gICAgZHJvcGRvd246IGplc3QuZm4oKSxcbiAgfSxcbiAgbGF5b3V0OiB7XG4gICAgQ29uZmlnTGF5b3V0OiAocHJvcHMpID0+IDxkaXYgZGF0YS10ZXN0aWQ9XCJjb25maWctbGF5b3V0XCI+e3Byb3BzLmNoaWxkcmVufTwvZGl2PixcbiAgfSxcbiAgSW5wdXRDb250YWluZXI6IChwcm9wcykgPT4gPGRpdiBkYXRhLXRlc3RpZD1cImlucHV0LWNvbnRhaW5lclwiPntwcm9wcy5jaGlsZHJlbn08L2Rpdj4sXG59KSk7XG5cbmplc3QubW9jaygnQHBpZS1saWIvZWRpdGFibGUtaHRtbC10aXAtdGFwJywgKCkgPT4gKHtcbiAgX19lc01vZHVsZTogdHJ1ZSxcbiAgZGVmYXVsdDogKHsgbWFya3VwLCBvbkNoYW5nZSB9KSA9PiAoXG4gICAgPGRpdiBkYXRhLXRlc3RpZD1cImVkaXRhYmxlLWh0bWxcIiBvbkNsaWNrPXsoKSA9PiBvbkNoYW5nZSAmJiBvbkNoYW5nZSgnbmV3IHZhbHVlJyl9PlxuICAgICAge21hcmt1cH1cbiAgICA8L2Rpdj5cbiAgKSxcbiAgQUxMX1BMVUdJTlM6IFtdLFxufSkpO1xuXG5qZXN0Lm1vY2soJy4uL2Vjci10b29sYmFyJywgKCkgPT4gKHtcbiAgX19lc01vZHVsZTogdHJ1ZSxcbiAgZGVmYXVsdDogKHByb3BzKSA9PiA8ZGl2IGRhdGEtdGVzdGlkPVwiZWNyLXRvb2xiYXJcIiB7Li4ucHJvcHN9IC8+LFxufSkpO1xuXG5qZXN0Lm1vY2soJy4uL2FsdGVybmF0ZVJlc3BvbnNlcycsICgpID0+ICh7XG4gIF9fZXNNb2R1bGU6IHRydWUsXG4gIGRlZmF1bHQ6IChwcm9wcykgPT4gPGRpdiBkYXRhLXRlc3RpZD1cImFsdGVybmF0ZS1yZXNwb25zZXNcIiB7Li4ucHJvcHN9IC8+LFxufSkpO1xuXG5jb25zdCB0aGVtZSA9IGNyZWF0ZVRoZW1lKCk7XG5cbmNvbnN0IG1vZGVsID0ge1xuICBtYXJrdXA6ICc8cD5UaGUge3swfX0ganVtcGVkIHt7MX19IHRoZSB7ezJ9fTwvcD4nLFxuICBkaXNhYmxlZDogZmFsc2UsXG4gIGNob2ljZXM6IHtcbiAgICAwOiBbXG4gICAgICB7IGxhYmVsOiAnY293JywgdmFsdWU6ICcwJyB9LFxuICAgICAgeyBsYWJlbDogJ2NhdHRsZScsIHZhbHVlOiAnMScgfSxcbiAgICAgIHsgbGFiZWw6ICdjYWxmJywgdmFsdWU6ICcyJyB9LFxuICAgIF0sXG4gICAgMTogW1xuICAgICAgeyBsYWJlbDogJ292ZXInLCB2YWx1ZTogJzAnIH0sXG4gICAgICB7IGxhYmVsOiAncGFzdCcsIHZhbHVlOiAnMScgfSxcbiAgICAgIHsgbGFiZWw6ICdiZXlvbmQnLCB2YWx1ZTogJzInIH0sXG4gICAgXSxcbiAgICAyOiBbeyBsYWJlbDogJ21vb24nLCB2YWx1ZTogJzAnIH1dLFxuICB9LFxuICBtYXhMZW5ndGhQZXJDaG9pY2U6IFs2LCA2LCA0XSxcbiAgcHJvbXB0OiAnQ29tcGxldGUgdGhlIHNlbnRlbmNlJyxcbn07XG5cbmNvbnN0IHByZXBhcmVNb2RlbCA9IChtb2RlbCA9IHt9KSA9PiB7XG4gIGNvbnN0IGpvaW5lZE9iaiA9IHtcbiAgICAuLi5zZW5zaWJsZURlZmF1bHRzLm1vZGVsLFxuICAgIC4uLm1vZGVsLFxuICB9O1xuICBjb25zdCBzbGF0ZU1hcmt1cCA9IGpvaW5lZE9iai5zbGF0ZU1hcmt1cCB8fCBjcmVhdGVTbGF0ZU1hcmt1cChqb2luZWRPYmoubWFya3VwLCBqb2luZWRPYmouY2hvaWNlcyk7XG4gIGNvbnN0IHByb2Nlc3NlZE1hcmt1cCA9IHByb2Nlc3NNYXJrdXAoc2xhdGVNYXJrdXApO1xuXG4gIHJldHVybiB7XG4gICAgLi4uam9pbmVkT2JqLFxuICAgIHNsYXRlTWFya3VwLFxuICAgIG1hcmt1cDogcHJvY2Vzc2VkTWFya3VwLFxuICB9O1xufTtcblxuZGVzY3JpYmUoJ01haW4nLCAoKSA9PiB7XG4gIGxldCBvbk1vZGVsQ2hhbmdlZCA9IGplc3QuZm4oKTtcbiAgbGV0IG9uQ29uZmlndXJhdGlvbkNoYW5nZWQgPSBqZXN0LmZuKCk7XG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgamVzdC5jbGVhckFsbE1vY2tzKCk7XG4gIH0pO1xuXG4gIGNvbnN0IHJlbmRlck1haW4gPSAoZXh0cmFzID0ge30pID0+IHtcbiAgICBjb25zdCBkZWZhdWx0cyA9IHtcbiAgICAgIG9uTW9kZWxDaGFuZ2VkLFxuICAgICAgb25Db25maWd1cmF0aW9uQ2hhbmdlZCxcbiAgICAgIGNsYXNzZXM6IHt9LFxuICAgICAgbW9kZWw6IHByZXBhcmVNb2RlbCh7XG4gICAgICAgIC4uLm1vZGVsLFxuICAgICAgICAuLi5leHRyYXMsXG4gICAgICB9KSxcbiAgICAgIGNvbmZpZ3VyYXRpb246IHNlbnNpYmxlRGVmYXVsdHMuY29uZmlndXJhdGlvbixcbiAgICB9O1xuICAgIGNvbnN0IHByb3BzID0geyAuLi5kZWZhdWx0cyB9O1xuXG4gICAgcmV0dXJuIHJlbmRlcihcbiAgICAgIDxUaGVtZVByb3ZpZGVyIHRoZW1lPXt0aGVtZX0+XG4gICAgICAgIDxNYWluIHsuLi5wcm9wc30gLz5cbiAgICAgIDwvVGhlbWVQcm92aWRlcj5cbiAgICApO1xuICB9O1xuXG4gIGRlc2NyaWJlKCdsb2dpYycsICgpID0+IHtcbiAgICBkZXNjcmliZSgnb25Nb2RlbENoYW5nZScsICgpID0+IHtcbiAgICAgIGl0KCdjaGFuZ2VzIHRoZSBtb2RlbCcsICgpID0+IHtcbiAgICAgICAgY29uc3QgdGVzdEluc3RhbmNlID0gbmV3IE1haW4oe1xuICAgICAgICAgIG9uTW9kZWxDaGFuZ2VkLFxuICAgICAgICAgIG9uQ29uZmlndXJhdGlvbkNoYW5nZWQsXG4gICAgICAgICAgY2xhc3Nlczoge30sXG4gICAgICAgICAgbW9kZWw6IHByZXBhcmVNb2RlbChtb2RlbCksXG4gICAgICAgICAgY29uZmlndXJhdGlvbjogc2Vuc2libGVEZWZhdWx0cy5jb25maWd1cmF0aW9uLFxuICAgICAgICB9KTtcblxuICAgICAgICB0ZXN0SW5zdGFuY2Uub25Nb2RlbENoYW5nZSh7IHByb21wdEVuYWJsZWQ6IGZhbHNlIH0pO1xuXG4gICAgICAgIGV4cGVjdChvbk1vZGVsQ2hhbmdlZCkudG9CZUNhbGxlZFdpdGgoe1xuICAgICAgICAgIC4uLnByZXBhcmVNb2RlbChtb2RlbCksXG4gICAgICAgICAgcHJvbXB0RW5hYmxlZDogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnb25Qcm9tcHRDaGFuZ2VkJywgKCkgPT4ge1xuICAgICAgaXQoJ2NoYW5nZXMgdGhlIHByb21wdCB2YWx1ZScsICgpID0+IHtcbiAgICAgICAgY29uc3QgdGVzdEluc3RhbmNlID0gbmV3IE1haW4oe1xuICAgICAgICAgIG9uTW9kZWxDaGFuZ2VkLFxuICAgICAgICAgIG9uQ29uZmlndXJhdGlvbkNoYW5nZWQsXG4gICAgICAgICAgY2xhc3Nlczoge30sXG4gICAgICAgICAgbW9kZWw6IHByZXBhcmVNb2RlbChtb2RlbCksXG4gICAgICAgICAgY29uZmlndXJhdGlvbjogc2Vuc2libGVEZWZhdWx0cy5jb25maWd1cmF0aW9uLFxuICAgICAgICB9KTtcblxuICAgICAgICB0ZXN0SW5zdGFuY2Uub25Qcm9tcHRDaGFuZ2VkKCdUaGlzIGlzIHRoZSBuZXcgcHJvbXB0Jyk7XG5cbiAgICAgICAgZXhwZWN0KG9uTW9kZWxDaGFuZ2VkKS50b0JlQ2FsbGVkV2l0aCh7XG4gICAgICAgICAgLi4ucHJlcGFyZU1vZGVsKG1vZGVsKSxcbiAgICAgICAgICBwcm9tcHQ6ICdUaGlzIGlzIHRoZSBuZXcgcHJvbXB0JyxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdvblJhdGlvbmFsZUNoYW5nZWQnLCAoKSA9PiB7XG4gICAgICBpdCgnY2hhbmdlcyB0aGUgcmF0aW9uYWxlIHZhbHVlJywgKCkgPT4ge1xuICAgICAgICBjb25zdCB0ZXN0SW5zdGFuY2UgPSBuZXcgTWFpbih7XG4gICAgICAgICAgb25Nb2RlbENoYW5nZWQsXG4gICAgICAgICAgb25Db25maWd1cmF0aW9uQ2hhbmdlZCxcbiAgICAgICAgICBjbGFzc2VzOiB7fSxcbiAgICAgICAgICBtb2RlbDogcHJlcGFyZU1vZGVsKG1vZGVsKSxcbiAgICAgICAgICBjb25maWd1cmF0aW9uOiBzZW5zaWJsZURlZmF1bHRzLmNvbmZpZ3VyYXRpb24sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRlc3RJbnN0YW5jZS5vblJhdGlvbmFsZUNoYW5nZWQoJ05ldyBSYXRpb25hbGUnKTtcblxuICAgICAgICBleHBlY3Qob25Nb2RlbENoYW5nZWQpLnRvQmVDYWxsZWRXaXRoKHtcbiAgICAgICAgICAuLi5wcmVwYXJlTW9kZWwobW9kZWwpLFxuICAgICAgICAgIHJhdGlvbmFsZTogJ05ldyBSYXRpb25hbGUnLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ29uVGVhY2hlckluc3RydWN0aW9uc0NoYW5nZWQnLCAoKSA9PiB7XG4gICAgICBpdCgnY2hhbmdlcyB0aGUgdGVhY2hlciBpbnN0cnVjdGlvbnMgdmFsdWUnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHRlc3RJbnN0YW5jZSA9IG5ldyBNYWluKHtcbiAgICAgICAgICBvbk1vZGVsQ2hhbmdlZCxcbiAgICAgICAgICBvbkNvbmZpZ3VyYXRpb25DaGFuZ2VkLFxuICAgICAgICAgIGNsYXNzZXM6IHt9LFxuICAgICAgICAgIG1vZGVsOiBwcmVwYXJlTW9kZWwobW9kZWwpLFxuICAgICAgICAgIGNvbmZpZ3VyYXRpb246IHNlbnNpYmxlRGVmYXVsdHMuY29uZmlndXJhdGlvbixcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGVzdEluc3RhbmNlLm9uVGVhY2hlckluc3RydWN0aW9uc0NoYW5nZWQoJ05ldyBUZWFjaGVyIEluc3RydWN0aW9ucycpO1xuXG4gICAgICAgIGV4cGVjdChvbk1vZGVsQ2hhbmdlZCkudG9CZUNhbGxlZFdpdGgoe1xuICAgICAgICAgIC4uLnByZXBhcmVNb2RlbChtb2RlbCksXG4gICAgICAgICAgdGVhY2hlckluc3RydWN0aW9uczogJ05ldyBUZWFjaGVyIEluc3RydWN0aW9ucycsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnb25NYXJrdXBDaGFuZ2VkJywgKCkgPT4ge1xuICAgICAgaXQoJ2NoYW5nZXMgc2xhdGUgbWFya3VwIHZhbHVlJywgKCkgPT4ge1xuICAgICAgICBjb25zdCB0ZXN0SW5zdGFuY2UgPSBuZXcgTWFpbih7XG4gICAgICAgICAgb25Nb2RlbENoYW5nZWQsXG4gICAgICAgICAgb25Db25maWd1cmF0aW9uQ2hhbmdlZCxcbiAgICAgICAgICBjbGFzc2VzOiB7fSxcbiAgICAgICAgICBtb2RlbDogcHJlcGFyZU1vZGVsKG1vZGVsKSxcbiAgICAgICAgICBjb25maWd1cmF0aW9uOiBzZW5zaWJsZURlZmF1bHRzLmNvbmZpZ3VyYXRpb24sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHNsYXRlTWFya3VwID1cbiAgICAgICAgICAnPHA+VGhlIDxzcGFuIGRhdGEtdHlwZT1cXFxcXCJleHBsaWNpdF9jb25zdHJ1Y3RlZF9yZXNwb25zZVxcXFxcIiBkYXRhLWluZGV4PVxcXFxcIjBcXFxcXCIgZGF0YS12YWx1ZT1cXFxcXCJjb3dcXFxcXCI+PC9zcGFuPiBqdW1wZWQ8L3A+JztcblxuICAgICAgICB0ZXN0SW5zdGFuY2Uub25NYXJrdXBDaGFuZ2VkKHNsYXRlTWFya3VwKTtcblxuICAgICAgICBleHBlY3Qob25Nb2RlbENoYW5nZWQpLnRvQmVDYWxsZWRXaXRoKHtcbiAgICAgICAgICAuLi5wcmVwYXJlTW9kZWwobW9kZWwpLFxuICAgICAgICAgIHNsYXRlTWFya3VwLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ29uUmVzcG9uc2VzQ2hhbmdlZCcsICgpID0+IHtcbiAgICAgIGl0KCdjaGFuZ2VzIGNob2ljZXMgYW5kIHNsYXRlTWFya3VwIGFzIHdlbGwnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHRlc3RJbnN0YW5jZSA9IG5ldyBNYWluKHtcbiAgICAgICAgICBvbk1vZGVsQ2hhbmdlZCxcbiAgICAgICAgICBvbkNvbmZpZ3VyYXRpb25DaGFuZ2VkLFxuICAgICAgICAgIGNsYXNzZXM6IHt9LFxuICAgICAgICAgIG1vZGVsOiBwcmVwYXJlTW9kZWwobW9kZWwpLFxuICAgICAgICAgIGNvbmZpZ3VyYXRpb246IHNlbnNpYmxlRGVmYXVsdHMuY29uZmlndXJhdGlvbixcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgbmV3Q2hvaWNlcyA9IHtcbiAgICAgICAgICAwOiBbXG4gICAgICAgICAgICB7IGxhYmVsOiAnY293JywgdmFsdWU6ICcwJyB9LFxuICAgICAgICAgICAgeyBsYWJlbDogJ2NhdHRsZScsIHZhbHVlOiAnMScgfSxcbiAgICAgICAgICAgIHsgbGFiZWw6ICdjYWxmJywgdmFsdWU6ICcyJyB9LFxuICAgICAgICAgIF0sXG4gICAgICAgICAgMTogW1xuICAgICAgICAgICAgeyBsYWJlbDogJ292ZXInLCB2YWx1ZTogJzAnIH0sXG4gICAgICAgICAgICB7IGxhYmVsOiAncGFzdCcsIHZhbHVlOiAnMScgfSxcbiAgICAgICAgICAgIHsgbGFiZWw6ICdiZXlvbmQnLCB2YWx1ZTogJzInIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgICAyOiBbeyBsYWJlbDogJ3N1bicsIHZhbHVlOiAnMCcgfV0sXG4gICAgICAgIH07XG5cbiAgICAgICAgdGVzdEluc3RhbmNlLm9uUmVzcG9uc2VzQ2hhbmdlZChuZXdDaG9pY2VzKTtcblxuICAgICAgICBleHBlY3Qob25Nb2RlbENoYW5nZWQpLnRvQmVDYWxsZWRXaXRoKHtcbiAgICAgICAgICAuLi5wcmVwYXJlTW9kZWwobW9kZWwpLFxuICAgICAgICAgIGNob2ljZXM6IG5ld0Nob2ljZXMsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnb25DaGFuZ2VSZXNwb25zZScsICgpID0+IHtcbiAgICAgIGl0KCd3aXRoIG5ldyBhcmVhJywgKCkgPT4ge1xuICAgICAgICBjb25zdCB0ZXN0SW5zdGFuY2UgPSBuZXcgTWFpbih7XG4gICAgICAgICAgb25Nb2RlbENoYW5nZWQsXG4gICAgICAgICAgb25Db25maWd1cmF0aW9uQ2hhbmdlZCxcbiAgICAgICAgICBjbGFzc2VzOiB7fSxcbiAgICAgICAgICBtb2RlbDogcHJlcGFyZU1vZGVsKG1vZGVsKSxcbiAgICAgICAgICBjb25maWd1cmF0aW9uOiBzZW5zaWJsZURlZmF1bHRzLmNvbmZpZ3VyYXRpb24sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRlc3RJbnN0YW5jZS5vbkNoYW5nZVJlc3BvbnNlKDMpO1xuXG4gICAgICAgIGV4cGVjdChvbk1vZGVsQ2hhbmdlZCkudG9CZUNhbGxlZFdpdGgoXG4gICAgICAgICAgZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoe1xuICAgICAgICAgICAgY2hvaWNlczogZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoe1xuICAgICAgICAgICAgICAuLi5tb2RlbC5jaG9pY2VzLFxuICAgICAgICAgICAgICAzOiBbeyBsYWJlbDogJycsIHZhbHVlOiAnMCcgfV0sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG1heExlbmd0aFBlckNob2ljZTogZXhwZWN0LmFycmF5Q29udGFpbmluZyhbNiwgNiwgNCwgMl0pLFxuICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCd3aXRoIGV4aXN0aW5nIGFyZWEnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHRlc3RJbnN0YW5jZSA9IG5ldyBNYWluKHtcbiAgICAgICAgICBvbk1vZGVsQ2hhbmdlZCxcbiAgICAgICAgICBvbkNvbmZpZ3VyYXRpb25DaGFuZ2VkLFxuICAgICAgICAgIGNsYXNzZXM6IHt9LFxuICAgICAgICAgIG1vZGVsOiBwcmVwYXJlTW9kZWwobW9kZWwpLFxuICAgICAgICAgIGNvbmZpZ3VyYXRpb246IHNlbnNpYmxlRGVmYXVsdHMuY29uZmlndXJhdGlvbixcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGVzdEluc3RhbmNlLm9uQ2hhbmdlUmVzcG9uc2UoMSwgJ3VuZGVyJyk7XG5cbiAgICAgICAgZXhwZWN0KG9uTW9kZWxDaGFuZ2VkKS50b0JlQ2FsbGVkV2l0aChcbiAgICAgICAgICBleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7XG4gICAgICAgICAgICBjaG9pY2VzOiBleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7XG4gICAgICAgICAgICAgIDE6IFtcbiAgICAgICAgICAgICAgICB7IGxhYmVsOiAndW5kZXInLCB2YWx1ZTogJzAnIH0sXG4gICAgICAgICAgICAgICAgeyBsYWJlbDogJ3Bhc3QnLCB2YWx1ZTogJzEnIH0sXG4gICAgICAgICAgICAgICAgeyBsYWJlbDogJ2JleW9uZCcsIHZhbHVlOiAnMicgfSxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnb25DaGFuZ2UnLCAoKSA9PiB7XG4gICAgICAvLyBOb3RlOiBUaGUgZm9sbG93aW5nIHRlc3RzIGZvciBvbkNoYW5nZSB0ZXN0IGltcGxlbWVudGF0aW9uIGRldGFpbHMgKHNldFN0YXRlIGNhbGxiYWNrcylcbiAgICAgIC8vIHRoYXQgYXJlIGRpZmZpY3VsdCB0byB0ZXN0IHdpdGggUlRMIHdpdGhvdXQgZnVsbCBjb21wb25lbnQgcmVuZGVyaW5nLlxuICAgICAgLy8gVGhlc2Ugc2hvdWxkIGJlIHRlc3RlZCB0aHJvdWdoIHVzZXIgaW50ZXJhY3Rpb25zIGluIGludGVncmF0aW9uIHRlc3RzIGluc3RlYWQuXG5cbiAgICAgIGl0LnNraXAoJ3NsYXRlTWFya3VwIGFuZCBjaG9pY2VzIGFyZSB1cGRhdGVkIHdpdGggbmV3IGFyZWEgd2l0aG91dCBkYXRhLXZhbHVlJywgKCkgPT4ge1xuICAgICAgICBqZXN0LnVzZUZha2VUaW1lcnMoKTtcblxuICAgICAgICBjb25zdCB0ZXN0SW5zdGFuY2UgPSBuZXcgTWFpbih7XG4gICAgICAgICAgb25Nb2RlbENoYW5nZWQsXG4gICAgICAgICAgb25Db25maWd1cmF0aW9uQ2hhbmdlZCxcbiAgICAgICAgICBjbGFzc2VzOiB7fSxcbiAgICAgICAgICBtb2RlbDogcHJlcGFyZU1vZGVsKHtcbiAgICAgICAgICAgIGNob2ljZXM6IHtcbiAgICAgICAgICAgICAgMDogW1xuICAgICAgICAgICAgICAgIHsgbGFiZWw6ICdjb3cnLCB2YWx1ZTogJzAnIH0sXG4gICAgICAgICAgICAgICAgeyBsYWJlbDogJ2NhdHRsZScsIHZhbHVlOiAnMScgfSxcbiAgICAgICAgICAgICAgICB7IGxhYmVsOiAnY2FsZicsIHZhbHVlOiAnMicgfSxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgMTogW1xuICAgICAgICAgICAgICAgIHsgbGFiZWw6ICdvdmVyJywgdmFsdWU6ICcwJyB9LFxuICAgICAgICAgICAgICAgIHsgbGFiZWw6ICdwYXN0JywgdmFsdWU6ICcxJyB9LFxuICAgICAgICAgICAgICAgIHsgbGFiZWw6ICdiZXlvbmQnLCB2YWx1ZTogJzInIH0sXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIDI6IFt7IGxhYmVsOiAnbW9vbicsIHZhbHVlOiAnMCcgfV0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbWF4TGVuZ3RoUGVyQ2hvaWNlOiBbNiwgNiwgNCwgMl0sXG4gICAgICAgICAgfSksXG4gICAgICAgICAgY29uZmlndXJhdGlvbjogc2Vuc2libGVEZWZhdWx0cy5jb25maWd1cmF0aW9uLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBuZXdNYXJrdXAgPSBgPHA+VGhlIDxzcGFuIGRhdGEtdHlwZT1cImV4cGxpY2l0X2NvbnN0cnVjdGVkX3Jlc3BvbnNlXCIgZGF0YS1pbmRleD1cIjBcIiBkYXRhLXZhbHVlPVwiY293XCI+PC9zcGFuPiBqdW1wZWQgPHNwYW4gZGF0YS10eXBlPVwiZXhwbGljaXRfY29uc3RydWN0ZWRfcmVzcG9uc2VcIiBkYXRhLWluZGV4PVwiMVwiIGRhdGEtdmFsdWU9XCJvdmVyXCI+PC9zcGFuPiB0aGUgPHNwYW4gZGF0YS10eXBlPVwiZXhwbGljaXRfY29uc3RydWN0ZWRfcmVzcG9uc2VcIiBkYXRhLWluZGV4PVwiMlwiIGRhdGEtdmFsdWU9XCJtb29uXCI+PC9zcGFuPmFuZCA8c3BhbiBkYXRhLXR5cGU9XCJleHBsaWNpdF9jb25zdHJ1Y3RlZF9yZXNwb25zZVwiIGRhdGEtaW5kZXg9XCIzXCI+PC9zcGFuPjwvcD5gO1xuXG4gICAgICAgIHRlc3RJbnN0YW5jZS5vbkNoYW5nZShuZXdNYXJrdXApO1xuXG4gICAgICAgIC8vIFdhaXQgZm9yIHNldFN0YXRlIGNhbGxiYWNrXG4gICAgICAgIGplc3QucnVuQWxsVGltZXJzKCk7XG5cbiAgICAgICAgZXhwZWN0KG9uTW9kZWxDaGFuZ2VkKS50b0JlQ2FsbGVkV2l0aChcbiAgICAgICAgICBleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7XG4gICAgICAgICAgICBzbGF0ZU1hcmt1cDogbmV3TWFya3VwLFxuICAgICAgICAgICAgY2hvaWNlczogZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoe1xuICAgICAgICAgICAgICAzOiBbeyBsYWJlbDogJycsIHZhbHVlOiAnMCcgfV0sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgKTtcblxuICAgICAgICBqZXN0LnVzZVJlYWxUaW1lcnMoKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdC5za2lwKCdzbGF0ZU1hcmt1cCBhbmQgY2hvaWNlcyBhcmUgdXBkYXRlZCB3aXRoIG5ldyBhcmVhIHdpdGggZGF0YS12YWx1ZScsICgpID0+IHtcbiAgICAgICAgamVzdC51c2VGYWtlVGltZXJzKCk7XG5cbiAgICAgICAgY29uc3QgdGVzdEluc3RhbmNlID0gbmV3IE1haW4oe1xuICAgICAgICAgIG9uTW9kZWxDaGFuZ2VkLFxuICAgICAgICAgIG9uQ29uZmlndXJhdGlvbkNoYW5nZWQsXG4gICAgICAgICAgY2xhc3Nlczoge30sXG4gICAgICAgICAgbW9kZWw6IHByZXBhcmVNb2RlbCh7XG4gICAgICAgICAgICBjaG9pY2VzOiB7XG4gICAgICAgICAgICAgIDA6IFtcbiAgICAgICAgICAgICAgICB7IGxhYmVsOiAnY293JywgdmFsdWU6ICcwJyB9LFxuICAgICAgICAgICAgICAgIHsgbGFiZWw6ICdjYXR0bGUnLCB2YWx1ZTogJzEnIH0sXG4gICAgICAgICAgICAgICAgeyBsYWJlbDogJ2NhbGYnLCB2YWx1ZTogJzInIH0sXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIDE6IFtcbiAgICAgICAgICAgICAgICB7IGxhYmVsOiAnb3ZlcicsIHZhbHVlOiAnMCcgfSxcbiAgICAgICAgICAgICAgICB7IGxhYmVsOiAncGFzdCcsIHZhbHVlOiAnMScgfSxcbiAgICAgICAgICAgICAgICB7IGxhYmVsOiAnYmV5b25kJywgdmFsdWU6ICcyJyB9LFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAyOiBbeyBsYWJlbDogJ21vb24nLCB2YWx1ZTogJzAnIH1dLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG1heExlbmd0aFBlckNob2ljZTogWzYsIDYsIDQsIDJdLFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIGNvbmZpZ3VyYXRpb246IHNlbnNpYmxlRGVmYXVsdHMuY29uZmlndXJhdGlvbixcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgbmV3TWFya3VwID0gYDxwPlRoZSA8c3BhbiBkYXRhLXR5cGU9XCJleHBsaWNpdF9jb25zdHJ1Y3RlZF9yZXNwb25zZVwiIGRhdGEtaW5kZXg9XCIwXCIgZGF0YS12YWx1ZT1cImNvd1wiPjwvc3Bhbj4ganVtcGVkIDxzcGFuIGRhdGEtdHlwZT1cImV4cGxpY2l0X2NvbnN0cnVjdGVkX3Jlc3BvbnNlXCIgZGF0YS1pbmRleD1cIjFcIiBkYXRhLXZhbHVlPVwib3ZlclwiPjwvc3Bhbj4gdGhlIDxzcGFuIGRhdGEtdHlwZT1cImV4cGxpY2l0X2NvbnN0cnVjdGVkX3Jlc3BvbnNlXCIgZGF0YS1pbmRleD1cIjJcIiBkYXRhLXZhbHVlPVwibW9vblwiPjwvc3Bhbj5hbmQgPHNwYW4gZGF0YS10eXBlPVwiZXhwbGljaXRfY29uc3RydWN0ZWRfcmVzcG9uc2VcIiBkYXRhLWluZGV4PVwiM1wiIGRhdGEtdmFsdWU9XCJ0ZXN0XCI+PC9zcGFuPjwvcD5gO1xuXG4gICAgICAgIHRlc3RJbnN0YW5jZS5vbkNoYW5nZShuZXdNYXJrdXApO1xuXG4gICAgICAgIC8vIFdhaXQgZm9yIHNldFN0YXRlIGNhbGxiYWNrXG4gICAgICAgIGplc3QucnVuQWxsVGltZXJzKCk7XG5cbiAgICAgICAgZXhwZWN0KG9uTW9kZWxDaGFuZ2VkKS50b0JlQ2FsbGVkV2l0aChcbiAgICAgICAgICBleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7XG4gICAgICAgICAgICBzbGF0ZU1hcmt1cDogbmV3TWFya3VwLFxuICAgICAgICAgICAgY2hvaWNlczogZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoe1xuICAgICAgICAgICAgICAzOiBbeyBsYWJlbDogJ3Rlc3QnLCB2YWx1ZTogJzAnIH1dLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgfSksXG4gICAgICAgICk7XG5cbiAgICAgICAgamVzdC51c2VSZWFsVGltZXJzKCk7XG4gICAgICB9KTtcblxuICAgICAgaXQuc2tpcCgnc2xhdGVNYXJrdXAgYW5kIGNob2ljZXMgYXJlIHVwZGF0ZWQgd2l0aCBjaGFuZ2VkIGRhdGEtdmFsdWUnLCAoKSA9PiB7XG4gICAgICAgIGplc3QudXNlRmFrZVRpbWVycygpO1xuXG4gICAgICAgIGNvbnN0IHRlc3RJbnN0YW5jZSA9IG5ldyBNYWluKHtcbiAgICAgICAgICBvbk1vZGVsQ2hhbmdlZCxcbiAgICAgICAgICBvbkNvbmZpZ3VyYXRpb25DaGFuZ2VkLFxuICAgICAgICAgIGNsYXNzZXM6IHt9LFxuICAgICAgICAgIG1vZGVsOiBwcmVwYXJlTW9kZWwoe1xuICAgICAgICAgICAgY2hvaWNlczoge1xuICAgICAgICAgICAgICAwOiBbXG4gICAgICAgICAgICAgICAgeyBsYWJlbDogJ2NvdycsIHZhbHVlOiAnMCcgfSxcbiAgICAgICAgICAgICAgICB7IGxhYmVsOiAnY2F0dGxlJywgdmFsdWU6ICcxJyB9LFxuICAgICAgICAgICAgICAgIHsgbGFiZWw6ICdjYWxmJywgdmFsdWU6ICcyJyB9LFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAxOiBbXG4gICAgICAgICAgICAgICAgeyBsYWJlbDogJ292ZXInLCB2YWx1ZTogJzAnIH0sXG4gICAgICAgICAgICAgICAgeyBsYWJlbDogJ3Bhc3QnLCB2YWx1ZTogJzEnIH0sXG4gICAgICAgICAgICAgICAgeyBsYWJlbDogJ2JleW9uZCcsIHZhbHVlOiAnMicgfSxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgMjogW3sgbGFiZWw6ICdtb29uJywgdmFsdWU6ICcwJyB9XSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtYXhMZW5ndGhQZXJDaG9pY2U6IFs2LCA2LCA0LCAyXSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBjb25maWd1cmF0aW9uOiBzZW5zaWJsZURlZmF1bHRzLmNvbmZpZ3VyYXRpb24sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IG5ld01hcmt1cCA9IGA8cD5UaGUgPHNwYW4gZGF0YS10eXBlPVwiZXhwbGljaXRfY29uc3RydWN0ZWRfcmVzcG9uc2VcIiBkYXRhLWluZGV4PVwiMFwiIGRhdGEtdmFsdWU9XCJyYWJiaXRcIj48L3NwYW4+IGp1bXBlZCA8c3BhbiBkYXRhLXR5cGU9XCJleHBsaWNpdF9jb25zdHJ1Y3RlZF9yZXNwb25zZVwiIGRhdGEtaW5kZXg9XCIxXCIgZGF0YS12YWx1ZT1cIm92ZXJcIj48L3NwYW4+IHRoZSA8c3BhbiBkYXRhLXR5cGU9XCJleHBsaWNpdF9jb25zdHJ1Y3RlZF9yZXNwb25zZVwiIGRhdGEtaW5kZXg9XCIyXCIgZGF0YS12YWx1ZT1cIm1vb25cIj48L3NwYW4+YW5kIDxzcGFuIGRhdGEtdHlwZT1cImV4cGxpY2l0X2NvbnN0cnVjdGVkX3Jlc3BvbnNlXCIgZGF0YS1pbmRleD1cIjNcIiBkYXRhLXZhbHVlPVwidGVzdFwiPjwvc3Bhbj48L3A+YDtcblxuICAgICAgICB0ZXN0SW5zdGFuY2Uub25DaGFuZ2UobmV3TWFya3VwKTtcblxuICAgICAgICAvLyBXYWl0IGZvciBzZXRTdGF0ZSBjYWxsYmFja1xuICAgICAgICBqZXN0LnJ1bkFsbFRpbWVycygpO1xuXG4gICAgICAgIGV4cGVjdChvbk1vZGVsQ2hhbmdlZCkudG9CZUNhbGxlZFdpdGgoXG4gICAgICAgICAgZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoe1xuICAgICAgICAgICAgc2xhdGVNYXJrdXA6IG5ld01hcmt1cCxcbiAgICAgICAgICAgIGNob2ljZXM6IGV4cGVjdC5vYmplY3RDb250YWluaW5nKHtcbiAgICAgICAgICAgICAgMDogW1xuICAgICAgICAgICAgICAgIHsgbGFiZWw6ICdyYWJiaXQnLCB2YWx1ZTogJzAnIH0sXG4gICAgICAgICAgICAgICAgeyBsYWJlbDogJ2NhdHRsZScsIHZhbHVlOiAnMScgfSxcbiAgICAgICAgICAgICAgICB7IGxhYmVsOiAnY2FsZicsIHZhbHVlOiAnMicgfSxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIH0pLFxuICAgICAgICApO1xuXG4gICAgICAgIGplc3QudXNlUmVhbFRpbWVycygpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxJQUFBQSxNQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxPQUFBLEdBQUFDLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBRyxPQUFBLEdBQUFILE9BQUE7QUFFQSxJQUFBSSxLQUFBLEdBQUFKLE9BQUE7QUFDQSxJQUFBSyxTQUFBLEdBQUFILHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBTSxZQUFBLEdBQUFOLE9BQUE7QUFFQU8sSUFBSSxDQUFDQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUs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
@@ -1,55 +0,0 @@
1
- "use strict";
2
-
3
- var _markupUtils = require("../markupUtils");
4
- describe('markupUtils', () => {
5
- describe('removeUnwantedCharacters', () => {
6
- it('should remove \\t and \\n characters', () => {
7
- expect((0, _markupUtils.removeUnwantedCharacters)('<div>foo\t\nbar</div>')).toEqual('<div>foobar</div>');
8
- });
9
- it('should remove \\t and \\n characters', () => {
10
- expect((0, _markupUtils.removeUnwantedCharacters)('<div>foo\\t\\nbar</div>')).toEqual('<div>foobar</div>');
11
- });
12
- it('should replace \\" with "', () => {
13
- expect((0, _markupUtils.removeUnwantedCharacters)('<div>"foo bar"</div>')).toEqual('<div>"foo bar"</div>');
14
- });
15
- it('should replace \\/ with /', () => {
16
- expect((0, _markupUtils.removeUnwantedCharacters)('<div>foo/bar</div>')).toEqual('<div>foo/bar</div>');
17
- });
18
- it('should not remove \\t character which has latex like \\times', () => {
19
- expect((0, _markupUtils.removeUnwantedCharacters)('<div><span data-latex="" data-raw="3\\times3\\div2">3\\times3\\div2</span></div>')).toEqual('<div><span data-latex="" data-raw="3\\times3\\div2">3\\times3\\div2</span></div>');
20
- });
21
- });
22
- describe('processMarkup', () => {
23
- it('should process slate markup and replace {{number}} with a ecr element dom', () => {
24
- const markup = ['<div>', '<span data-type="explicit_constructed_response"></span>', '<span data-type="explicit_constructed_response"></span>', '</div>'].join('');
25
- const processed = (0, _markupUtils.processMarkup)(markup);
26
- expect(processed).toEqual(['<div>', '{{0}}', '{{1}}', '</div>'].join(''));
27
- });
28
- });
29
- describe('createSlateMarkup', () => {
30
- it('should handle the case when markup is empty', () => {
31
- expect((0, _markupUtils.createSlateMarkup)('', {})).toEqual('');
32
- });
33
- it('should replace {{number}} with the appropriate element', () => {
34
- const markup = ['<div>', '{{0}}', '</div>'].join('');
35
- const choices = {
36
- 0: [{
37
- label: 'foobar'
38
- }]
39
- };
40
- const slateMarkup = (0, _markupUtils.createSlateMarkup)(markup, choices);
41
- expect(slateMarkup).toEqual(['<div>', '<span data-type="explicit_constructed_response" data-index="0" data-value="foobar"></span>', '</div>'].join(''));
42
- });
43
- it('should replace {{number}} with the appropriate element having the value escaped', () => {
44
- const markup = ['<div>', '{{0}}', '</div>'].join('');
45
- const choices = {
46
- 0: [{
47
- label: 'foo&bar'
48
- }]
49
- };
50
- const slateMarkup = (0, _markupUtils.createSlateMarkup)(markup, choices);
51
- expect(slateMarkup).toEqual(['<div>', '<span data-type="explicit_constructed_response" data-index="0" data-value="foo&amp;bar"></span>', '</div>'].join(''));
52
- });
53
- });
54
- });
55
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbWFya3VwVXRpbHMiLCJyZXF1aXJlIiwiZGVzY3JpYmUiLCJpdCIsImV4cGVjdCIsInJlbW92ZVVud2FudGVkQ2hhcmFjdGVycyIsInRvRXF1YWwiLCJtYXJrdXAiLCJqb2luIiwicHJvY2Vzc2VkIiwicHJvY2Vzc01hcmt1cCIsImNyZWF0ZVNsYXRlTWFya3VwIiwiY2hvaWNlcyIsImxhYmVsIiwic2xhdGVNYXJrdXAiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvX190ZXN0c19fL21hcmt1cFV0aWxzLnRlc3QuanN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZVNsYXRlTWFya3VwLCBwcm9jZXNzTWFya3VwLCByZW1vdmVVbndhbnRlZENoYXJhY3RlcnMgfSBmcm9tICcuLi9tYXJrdXBVdGlscyc7XG5cbmRlc2NyaWJlKCdtYXJrdXBVdGlscycsICgpID0+IHtcbiAgZGVzY3JpYmUoJ3JlbW92ZVVud2FudGVkQ2hhcmFjdGVycycsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHJlbW92ZSBcXFxcdCBhbmQgXFxcXG4gY2hhcmFjdGVycycsICgpID0+IHtcbiAgICAgIGV4cGVjdChyZW1vdmVVbndhbnRlZENoYXJhY3RlcnMoJzxkaXY+Zm9vXFx0XFxuYmFyPC9kaXY+JykpLnRvRXF1YWwoJzxkaXY+Zm9vYmFyPC9kaXY+Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlbW92ZSBcXFxcdCBhbmQgXFxcXG4gY2hhcmFjdGVycycsICgpID0+IHtcbiAgICAgIGV4cGVjdChyZW1vdmVVbndhbnRlZENoYXJhY3RlcnMoJzxkaXY+Zm9vXFxcXHRcXFxcbmJhcjwvZGl2PicpKS50b0VxdWFsKCc8ZGl2PmZvb2JhcjwvZGl2PicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXBsYWNlIFxcXFxcIiB3aXRoIFwiJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KHJlbW92ZVVud2FudGVkQ2hhcmFjdGVycygnPGRpdj5cImZvbyBiYXJcIjwvZGl2PicpKS50b0VxdWFsKCc8ZGl2PlwiZm9vIGJhclwiPC9kaXY+Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlcGxhY2UgXFxcXC8gd2l0aCAvJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KHJlbW92ZVVud2FudGVkQ2hhcmFjdGVycygnPGRpdj5mb28vYmFyPC9kaXY+JykpLnRvRXF1YWwoJzxkaXY+Zm9vL2JhcjwvZGl2PicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBub3QgcmVtb3ZlIFxcXFx0IGNoYXJhY3RlciB3aGljaCBoYXMgbGF0ZXggbGlrZSBcXFxcdGltZXMnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoXG4gICAgICAgIHJlbW92ZVVud2FudGVkQ2hhcmFjdGVycygnPGRpdj48c3BhbiBkYXRhLWxhdGV4PVwiXCIgZGF0YS1yYXc9XCIzXFxcXHRpbWVzM1xcXFxkaXYyXCI+M1xcXFx0aW1lczNcXFxcZGl2Mjwvc3Bhbj48L2Rpdj4nKSxcbiAgICAgICkudG9FcXVhbCgnPGRpdj48c3BhbiBkYXRhLWxhdGV4PVwiXCIgZGF0YS1yYXc9XCIzXFxcXHRpbWVzM1xcXFxkaXYyXCI+M1xcXFx0aW1lczNcXFxcZGl2Mjwvc3Bhbj48L2Rpdj4nKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3Byb2Nlc3NNYXJrdXAnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBwcm9jZXNzIHNsYXRlIG1hcmt1cCBhbmQgcmVwbGFjZSB7e251bWJlcn19IHdpdGggYSBlY3IgZWxlbWVudCBkb20nLCAoKSA9PiB7XG4gICAgICBjb25zdCBtYXJrdXAgPSBbXG4gICAgICAgICc8ZGl2PicsXG4gICAgICAgICc8c3BhbiBkYXRhLXR5cGU9XCJleHBsaWNpdF9jb25zdHJ1Y3RlZF9yZXNwb25zZVwiPjwvc3Bhbj4nLFxuICAgICAgICAnPHNwYW4gZGF0YS10eXBlPVwiZXhwbGljaXRfY29uc3RydWN0ZWRfcmVzcG9uc2VcIj48L3NwYW4+JyxcbiAgICAgICAgJzwvZGl2PicsXG4gICAgICBdLmpvaW4oJycpO1xuICAgICAgY29uc3QgcHJvY2Vzc2VkID0gcHJvY2Vzc01hcmt1cChtYXJrdXApO1xuXG4gICAgICBleHBlY3QocHJvY2Vzc2VkKS50b0VxdWFsKFsnPGRpdj4nLCAne3swfX0nLCAne3sxfX0nLCAnPC9kaXY+J10uam9pbignJykpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnY3JlYXRlU2xhdGVNYXJrdXAnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBoYW5kbGUgdGhlIGNhc2Ugd2hlbiBtYXJrdXAgaXMgZW1wdHknLCAoKSA9PiB7XG4gICAgICBleHBlY3QoY3JlYXRlU2xhdGVNYXJrdXAoJycsIHt9KSkudG9FcXVhbCgnJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlcGxhY2Uge3tudW1iZXJ9fSB3aXRoIHRoZSBhcHByb3ByaWF0ZSBlbGVtZW50JywgKCkgPT4ge1xuICAgICAgY29uc3QgbWFya3VwID0gWyc8ZGl2PicsICd7ezB9fScsICc8L2Rpdj4nXS5qb2luKCcnKTtcbiAgICAgIGNvbnN0IGNob2ljZXMgPSB7XG4gICAgICAgIDA6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBsYWJlbDogJ2Zvb2JhcicsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgICBjb25zdCBzbGF0ZU1hcmt1cCA9IGNyZWF0ZVNsYXRlTWFya3VwKG1hcmt1cCwgY2hvaWNlcyk7XG5cbiAgICAgIGV4cGVjdChzbGF0ZU1hcmt1cCkudG9FcXVhbChcbiAgICAgICAgW1xuICAgICAgICAgICc8ZGl2PicsXG4gICAgICAgICAgJzxzcGFuIGRhdGEtdHlwZT1cImV4cGxpY2l0X2NvbnN0cnVjdGVkX3Jlc3BvbnNlXCIgZGF0YS1pbmRleD1cIjBcIiBkYXRhLXZhbHVlPVwiZm9vYmFyXCI+PC9zcGFuPicsXG4gICAgICAgICAgJzwvZGl2PicsXG4gICAgICAgIF0uam9pbignJyksXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXBsYWNlIHt7bnVtYmVyfX0gd2l0aCB0aGUgYXBwcm9wcmlhdGUgZWxlbWVudCBoYXZpbmcgdGhlIHZhbHVlIGVzY2FwZWQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBtYXJrdXAgPSBbJzxkaXY+JywgJ3t7MH19JywgJzwvZGl2PiddLmpvaW4oJycpO1xuICAgICAgY29uc3QgY2hvaWNlcyA9IHtcbiAgICAgICAgMDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGxhYmVsOiAnZm9vJmJhcicsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgICBjb25zdCBzbGF0ZU1hcmt1cCA9IGNyZWF0ZVNsYXRlTWFya3VwKG1hcmt1cCwgY2hvaWNlcyk7XG5cbiAgICAgIGV4cGVjdChzbGF0ZU1hcmt1cCkudG9FcXVhbChcbiAgICAgICAgW1xuICAgICAgICAgICc8ZGl2PicsXG4gICAgICAgICAgJzxzcGFuIGRhdGEtdHlwZT1cImV4cGxpY2l0X2NvbnN0cnVjdGVkX3Jlc3BvbnNlXCIgZGF0YS1pbmRleD1cIjBcIiBkYXRhLXZhbHVlPVwiZm9vJmFtcDtiYXJcIj48L3NwYW4+JyxcbiAgICAgICAgICAnPC9kaXY+JyxcbiAgICAgICAgXS5qb2luKCcnKSxcbiAgICAgICk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXSwibWFwcGluZ3MiOiI7O0FBQUEsSUFBQUEsWUFBQSxHQUFBQyxPQUFBO0FBRUFDLFFBQVEsQ0FBQyxhQUFhLEVBQUUsTUFBTTtFQUM1QkEsUUFBUSxDQUFDLDBCQUEwQixFQUFFLE1BQU07SUFDekNDLEVBQUUsQ0FBQyxzQ0FBc0MsRUFBRSxNQUFNO01BQy9DQyxNQUFNLENBQUMsSUFBQUMscUNBQXdCLEVBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDQyxPQUFPLENBQUMsbUJBQW1CLENBQUM7SUFDeEYsQ0FBQyxDQUFDO0lBRUZILEVBQUUsQ0FBQyxzQ0FBc0MsRUFBRSxNQUFNO01BQy9DQyxNQUFNLENBQUMsSUFBQUMscUNBQXdC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