@pie-element/placement-ordering 14.3.2-beta.4 → 14.3.2-beta.5
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.
- package/CHANGELOG.md +4 -0
- package/configure/CHANGELOG.md +4 -0
- package/configure/package.json +3 -3
- package/controller/CHANGELOG.md +4 -0
- package/controller/package.json +1 -1
- package/package.json +2 -2
- package/configure/lib/__tests__/choice-editor.test.js +0 -376
- package/configure/lib/__tests__/choice-tile.test.js +0 -283
- package/configure/lib/__tests__/design.test.js +0 -268
- package/configure/lib/__tests__/help.test.js +0 -64
- package/configure/lib/__tests__/index.test.js +0 -77
- package/configure/lib/__tests__/utils.test.js +0 -493
- package/controller/lib/__tests__/index.test.js +0 -401
- package/controller/lib/__tests__/scoring.test.js +0 -165
- package/docs/demo/pie.manifest.json +0 -11
- package/lib/__tests__/index-test.js +0 -90
- package/lib/__tests__/ordering.test.js +0 -133
- package/lib/__tests__/placement-ordering.test.js +0 -445
|
@@ -1,401 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _lodashEs = require("lodash-es");
|
|
4
|
-
var controller = _interopRequireWildcard(require("../index"));
|
|
5
|
-
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
6
|
-
describe('index', () => {
|
|
7
|
-
let base = o => {
|
|
8
|
-
o = (0, _lodashEs.merge)({
|
|
9
|
-
prompt: 'hi',
|
|
10
|
-
promptEnabled: true,
|
|
11
|
-
choices: [],
|
|
12
|
-
correctResponse: [],
|
|
13
|
-
feedbackEnabled: true
|
|
14
|
-
}, o);
|
|
15
|
-
return o;
|
|
16
|
-
};
|
|
17
|
-
describe('model', () => {
|
|
18
|
-
let assertModel = (q, s, e, partialExpected) => {
|
|
19
|
-
return async () => {
|
|
20
|
-
if ((0, _lodashEs.isFunction)(partialExpected) && partialExpected.name === 'Error') {
|
|
21
|
-
expect(() => controller.model(q, s, e)).toThrow(Error);
|
|
22
|
-
return Promise.resolve();
|
|
23
|
-
} else {
|
|
24
|
-
const result = await controller.model(q, s, e);
|
|
25
|
-
if ((0, _lodashEs.isFunction)(partialExpected)) {
|
|
26
|
-
return partialExpected(result);
|
|
27
|
-
} else {
|
|
28
|
-
expect(result).toMatchObject(partialExpected);
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
};
|
|
32
|
-
};
|
|
33
|
-
it('returns prompt', assertModel(base(), {}, {}, m => expect(m.prompt).toEqual('hi')));
|
|
34
|
-
it('returns empty config for mode=gather', assertModel(base(), {}, {
|
|
35
|
-
mode: 'gather'
|
|
36
|
-
}, {}));
|
|
37
|
-
it('returns empty config for mode=view', assertModel(base(), {}, {
|
|
38
|
-
mode: 'view'
|
|
39
|
-
}, {
|
|
40
|
-
disabled: true
|
|
41
|
-
}));
|
|
42
|
-
it('returns config.disabled=true for mode=evaluate', assertModel(base(), {}, {
|
|
43
|
-
mode: 'evaluate'
|
|
44
|
-
}, {
|
|
45
|
-
disabled: true
|
|
46
|
-
}));
|
|
47
|
-
it('returns feedback', assertModel(base({
|
|
48
|
-
correctResponse: ['a', 'b'],
|
|
49
|
-
feedback: {
|
|
50
|
-
correct: {
|
|
51
|
-
type: 'custom',
|
|
52
|
-
custom: 'foo'
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
}), {
|
|
56
|
-
value: ['a', 'b']
|
|
57
|
-
}, {
|
|
58
|
-
mode: 'evaluate'
|
|
59
|
-
}, {
|
|
60
|
-
feedback: 'foo'
|
|
61
|
-
}));
|
|
62
|
-
describe('choices and outcomes', () => {
|
|
63
|
-
let model, session, env;
|
|
64
|
-
model = base({
|
|
65
|
-
correctResponse: ['a', 'b', 'c'],
|
|
66
|
-
alternateResponses: [{
|
|
67
|
-
response: ['c', 'b', 'a']
|
|
68
|
-
}],
|
|
69
|
-
choices: [{
|
|
70
|
-
label: 'a',
|
|
71
|
-
id: 'a'
|
|
72
|
-
}, {
|
|
73
|
-
label: 'b',
|
|
74
|
-
id: 'b'
|
|
75
|
-
}, {
|
|
76
|
-
label: 'c',
|
|
77
|
-
id: 'c'
|
|
78
|
-
}]
|
|
79
|
-
});
|
|
80
|
-
session = {
|
|
81
|
-
value: ['a', 'b', 'c']
|
|
82
|
-
};
|
|
83
|
-
env = {
|
|
84
|
-
mode: 'evaluate'
|
|
85
|
-
};
|
|
86
|
-
it('choices', assertModel(model, {}, {}, {
|
|
87
|
-
choices: [{
|
|
88
|
-
id: 'a',
|
|
89
|
-
label: 'a'
|
|
90
|
-
}, {
|
|
91
|
-
id: 'b',
|
|
92
|
-
label: 'b'
|
|
93
|
-
}, {
|
|
94
|
-
label: 'c',
|
|
95
|
-
id: 'c'
|
|
96
|
-
}]
|
|
97
|
-
}));
|
|
98
|
-
|
|
99
|
-
// Main Correct Response
|
|
100
|
-
it('returns outcomes - 3 correct', assertModel(model, session, env, {
|
|
101
|
-
outcomes: [{
|
|
102
|
-
id: 'a',
|
|
103
|
-
outcome: 'correct'
|
|
104
|
-
}, {
|
|
105
|
-
id: 'b',
|
|
106
|
-
outcome: 'correct'
|
|
107
|
-
}, {
|
|
108
|
-
id: 'c',
|
|
109
|
-
outcome: 'correct'
|
|
110
|
-
}]
|
|
111
|
-
}));
|
|
112
|
-
|
|
113
|
-
// Alternate Correct Response
|
|
114
|
-
it('returns outcomes for alternate response - 3 correct', assertModel(model, {
|
|
115
|
-
value: ['c', 'b', 'a']
|
|
116
|
-
}, env, {
|
|
117
|
-
outcomes: [{
|
|
118
|
-
id: 'c',
|
|
119
|
-
outcome: 'correct'
|
|
120
|
-
}, {
|
|
121
|
-
id: 'b',
|
|
122
|
-
outcome: 'correct'
|
|
123
|
-
}, {
|
|
124
|
-
id: 'a',
|
|
125
|
-
outcome: 'correct'
|
|
126
|
-
}]
|
|
127
|
-
}));
|
|
128
|
-
|
|
129
|
-
// Main Correct Response
|
|
130
|
-
it('returns outcomes - 1 correct', assertModel(model, {
|
|
131
|
-
value: ['a']
|
|
132
|
-
}, env, {
|
|
133
|
-
outcomes: [{
|
|
134
|
-
id: 'a',
|
|
135
|
-
outcome: 'correct'
|
|
136
|
-
}]
|
|
137
|
-
}));
|
|
138
|
-
|
|
139
|
-
// Alternate Correct Response
|
|
140
|
-
it('returns outcomes for alternate - 1 correct', assertModel(model, {
|
|
141
|
-
value: ['c']
|
|
142
|
-
}, env, {
|
|
143
|
-
outcomes: [{
|
|
144
|
-
id: 'c',
|
|
145
|
-
outcome: 'correct'
|
|
146
|
-
}]
|
|
147
|
-
}));
|
|
148
|
-
it('does not return config.correctResponse - 1 correct', assertModel(model, session, env, {
|
|
149
|
-
disabled: true
|
|
150
|
-
}));
|
|
151
|
-
it('returns outcomes - 2 incorrect', assertModel(model, {
|
|
152
|
-
value: ['b', 'a']
|
|
153
|
-
}, env, {
|
|
154
|
-
outcomes: [{
|
|
155
|
-
id: 'b',
|
|
156
|
-
outcome: 'incorrect'
|
|
157
|
-
}, {
|
|
158
|
-
id: 'a',
|
|
159
|
-
outcome: 'incorrect'
|
|
160
|
-
}]
|
|
161
|
-
}));
|
|
162
|
-
it('returns config.correctResponse - 2 - incorrect', assertModel(model, {
|
|
163
|
-
value: ['b', 'a']
|
|
164
|
-
}, env, {
|
|
165
|
-
correctResponse: ['a', 'b', 'c']
|
|
166
|
-
}));
|
|
167
|
-
});
|
|
168
|
-
describe('session not set', () => {
|
|
169
|
-
const assertModelCorrectness = session => {
|
|
170
|
-
it(`returns correctness: incorrect of session is ${JSON.stringify(session)}`, async () => {
|
|
171
|
-
const m = await controller.model(base({
|
|
172
|
-
correctResponse: ['a', 'b']
|
|
173
|
-
}), session, {
|
|
174
|
-
mode: 'evaluate'
|
|
175
|
-
});
|
|
176
|
-
expect(m.correctness).toEqual('incorrect');
|
|
177
|
-
});
|
|
178
|
-
};
|
|
179
|
-
assertModelCorrectness(undefined);
|
|
180
|
-
assertModelCorrectness(null);
|
|
181
|
-
assertModelCorrectness({});
|
|
182
|
-
});
|
|
183
|
-
describe('correct response', () => {
|
|
184
|
-
const model = base({
|
|
185
|
-
correctResponse: ['a', 'b', 'c'],
|
|
186
|
-
alternateResponses: [{
|
|
187
|
-
response: ['c', 'b', 'a']
|
|
188
|
-
}],
|
|
189
|
-
choices: [{
|
|
190
|
-
label: 'a',
|
|
191
|
-
id: 'a'
|
|
192
|
-
}, {
|
|
193
|
-
label: 'b',
|
|
194
|
-
id: 'b'
|
|
195
|
-
}, {
|
|
196
|
-
label: 'c',
|
|
197
|
-
id: 'c'
|
|
198
|
-
}]
|
|
199
|
-
});
|
|
200
|
-
it('returns correct response if env is correct', async () => {
|
|
201
|
-
const sess = await controller.createCorrectResponseSession(model, {
|
|
202
|
-
mode: 'gather',
|
|
203
|
-
role: 'instructor'
|
|
204
|
-
});
|
|
205
|
-
expect(sess).toEqual({
|
|
206
|
-
id: '1',
|
|
207
|
-
value: ['a', 'b', 'c']
|
|
208
|
-
});
|
|
209
|
-
});
|
|
210
|
-
it('returns correct response if env is correct for shuffled choices', async () => {
|
|
211
|
-
const model = base({
|
|
212
|
-
correctResponse: ['a', 'b', 'c'],
|
|
213
|
-
alternateResponses: [{
|
|
214
|
-
response: ['c', 'b', 'a']
|
|
215
|
-
}],
|
|
216
|
-
choices: [{
|
|
217
|
-
label: 'c',
|
|
218
|
-
id: 'c'
|
|
219
|
-
}, {
|
|
220
|
-
label: 'b',
|
|
221
|
-
id: 'b'
|
|
222
|
-
}, {
|
|
223
|
-
label: 'a',
|
|
224
|
-
id: 'a'
|
|
225
|
-
}]
|
|
226
|
-
});
|
|
227
|
-
const sess = await controller.createCorrectResponseSession(model, {
|
|
228
|
-
mode: 'gather',
|
|
229
|
-
role: 'instructor'
|
|
230
|
-
});
|
|
231
|
-
expect(sess).toEqual({
|
|
232
|
-
id: '1',
|
|
233
|
-
value: ['a', 'b', 'c']
|
|
234
|
-
});
|
|
235
|
-
});
|
|
236
|
-
it('returns null if mode is evaluate', async () => {
|
|
237
|
-
const sess = await controller.createCorrectResponseSession(model, {
|
|
238
|
-
mode: 'evaluate',
|
|
239
|
-
role: 'instructor'
|
|
240
|
-
});
|
|
241
|
-
expect(sess).toBeNull();
|
|
242
|
-
});
|
|
243
|
-
it('returns null if role is student', async () => {
|
|
244
|
-
const noResult = await controller.createCorrectResponseSession(model, {
|
|
245
|
-
mode: 'gather',
|
|
246
|
-
role: 'student'
|
|
247
|
-
});
|
|
248
|
-
expect(noResult).toBeNull();
|
|
249
|
-
});
|
|
250
|
-
});
|
|
251
|
-
});
|
|
252
|
-
describe('outcome', () => {
|
|
253
|
-
const assertOutcome = (question, value, expectedScore, env) => {
|
|
254
|
-
it(`${expectedScore} when answer: ${value} and question: ${JSON.stringify(question)}, env: ${JSON.stringify(env)}`, async () => {
|
|
255
|
-
const result = await controller.outcome(question, {
|
|
256
|
-
value
|
|
257
|
-
}, env);
|
|
258
|
-
expect(result.score).toEqual(expectedScore);
|
|
259
|
-
});
|
|
260
|
-
};
|
|
261
|
-
const assertOutcomeError = (question, session, env) => {
|
|
262
|
-
it(`throws error for ${JSON.stringify(question)}`, () => expect(controller.outcome(question, session, env)).rejects.toThrow(controller.questionError()));
|
|
263
|
-
};
|
|
264
|
-
const assertOutcomeSessionNotset = session => {
|
|
265
|
-
it(`return score: 0 and empty: true if session is ${JSON.stringify(session)}`, () => expect(controller.outcome({}, session, {
|
|
266
|
-
mode: 'evaluate'
|
|
267
|
-
})).resolves.toEqual({
|
|
268
|
-
score: 0,
|
|
269
|
-
empty: true,
|
|
270
|
-
logTrace: ["Student did not interact with the placement-ordering item."]
|
|
271
|
-
}));
|
|
272
|
-
};
|
|
273
|
-
assertOutcomeError(null, {
|
|
274
|
-
value: []
|
|
275
|
-
}, {});
|
|
276
|
-
assertOutcomeError({}, {
|
|
277
|
-
value: []
|
|
278
|
-
}, {});
|
|
279
|
-
assertOutcomeError({
|
|
280
|
-
correctResponse: []
|
|
281
|
-
}, {
|
|
282
|
-
value: []
|
|
283
|
-
}, {});
|
|
284
|
-
assertOutcomeSessionNotset(undefined);
|
|
285
|
-
assertOutcomeSessionNotset(null);
|
|
286
|
-
assertOutcomeSessionNotset({});
|
|
287
|
-
|
|
288
|
-
// Main Correct Response
|
|
289
|
-
assertOutcome({
|
|
290
|
-
partialScoring: true,
|
|
291
|
-
correctResponse: ['a'],
|
|
292
|
-
alternateResponses: [{
|
|
293
|
-
response: ['c']
|
|
294
|
-
}]
|
|
295
|
-
}, ['a'], 1);
|
|
296
|
-
assertOutcome({
|
|
297
|
-
partialScoring: true,
|
|
298
|
-
correctResponse: ['a'],
|
|
299
|
-
alternateResponses: [{
|
|
300
|
-
response: ['c']
|
|
301
|
-
}]
|
|
302
|
-
}, ['b'], 0);
|
|
303
|
-
assertOutcome({
|
|
304
|
-
correctResponse: ['a', 'b', 'c'],
|
|
305
|
-
alternateResponses: [{
|
|
306
|
-
response: ['b', 'c', 'a']
|
|
307
|
-
}]
|
|
308
|
-
}, ['c', 'a', 'b'], 0.33);
|
|
309
|
-
assertOutcome({
|
|
310
|
-
correctResponse: ['a', 'b'],
|
|
311
|
-
alternateResponses: [['c', 'b']]
|
|
312
|
-
}, ['c', 'a', 'b'], 0);
|
|
313
|
-
assertOutcome({
|
|
314
|
-
correctResponse: ['a', 'b', 'c'],
|
|
315
|
-
alternateResponses: [{
|
|
316
|
-
response: ['a', 'c', 'b']
|
|
317
|
-
}]
|
|
318
|
-
}, ['a', 'b'], 0.33);
|
|
319
|
-
assertOutcome({
|
|
320
|
-
partialScoring: true,
|
|
321
|
-
correctResponse: ['a', 'b', 'c'],
|
|
322
|
-
alternateResponses: [{
|
|
323
|
-
response: ['a', 'b']
|
|
324
|
-
}]
|
|
325
|
-
}, ['c', 'a', 'b'], 0.33);
|
|
326
|
-
assertOutcome({
|
|
327
|
-
partialScoring: false,
|
|
328
|
-
correctResponse: ['a', 'b', 'c'],
|
|
329
|
-
alternateResponses: [{
|
|
330
|
-
response: ['a', 'c', 'b']
|
|
331
|
-
}]
|
|
332
|
-
}, ['a', 'b'], 0);
|
|
333
|
-
assertOutcome({
|
|
334
|
-
partialScoring: false,
|
|
335
|
-
correctResponse: ['a', 'b', 'c'],
|
|
336
|
-
alternateResponses: [{
|
|
337
|
-
response: ['a', 'b']
|
|
338
|
-
}]
|
|
339
|
-
}, ['c', 'a', 'b'], 0, {
|
|
340
|
-
partialScoring: true
|
|
341
|
-
});
|
|
342
|
-
|
|
343
|
-
// Alternate Correct Response
|
|
344
|
-
assertOutcome({
|
|
345
|
-
partialScoring: true,
|
|
346
|
-
correctResponse: ['a'],
|
|
347
|
-
alternateResponses: [{
|
|
348
|
-
response: ['c']
|
|
349
|
-
}]
|
|
350
|
-
}, ['c'], 1);
|
|
351
|
-
assertOutcome({
|
|
352
|
-
partialScoring: true,
|
|
353
|
-
correctResponse: ['a'],
|
|
354
|
-
alternateResponses: [{
|
|
355
|
-
response: ['c']
|
|
356
|
-
}]
|
|
357
|
-
}, ['b'], 0);
|
|
358
|
-
assertOutcome({
|
|
359
|
-
correctResponse: ['a', 'b', 'c'],
|
|
360
|
-
alternateResponses: [{
|
|
361
|
-
response: ['c', 'b', 'a']
|
|
362
|
-
}]
|
|
363
|
-
}, ['c', 'a', 'b'], 0.67);
|
|
364
|
-
assertOutcome({
|
|
365
|
-
correctResponse: ['a', 'b'],
|
|
366
|
-
alternateResponses: [{
|
|
367
|
-
response: ['c', 'b']
|
|
368
|
-
}]
|
|
369
|
-
}, ['c', 'a', 'b'], 0);
|
|
370
|
-
assertOutcome({
|
|
371
|
-
correctResponse: ['a', 'b', 'c'],
|
|
372
|
-
alternateResponses: [{
|
|
373
|
-
response: ['c', 'b', 'a']
|
|
374
|
-
}]
|
|
375
|
-
}, ['c', 'b'], 0.33);
|
|
376
|
-
assertOutcome({
|
|
377
|
-
partialScoring: true,
|
|
378
|
-
correctResponse: ['a', 'b', 'c'],
|
|
379
|
-
alternateResponses: [{
|
|
380
|
-
response: ['a', 'c', 'b']
|
|
381
|
-
}]
|
|
382
|
-
}, ['c', 'a', 'b'], 0.67);
|
|
383
|
-
assertOutcome({
|
|
384
|
-
partialScoring: false,
|
|
385
|
-
correctResponse: ['a', 'b', 'c'],
|
|
386
|
-
alternateResponses: [{
|
|
387
|
-
response: ['a', 'c', 'b']
|
|
388
|
-
}]
|
|
389
|
-
}, ['a', 'b'], 0);
|
|
390
|
-
assertOutcome({
|
|
391
|
-
partialScoring: false,
|
|
392
|
-
correctResponse: ['a', 'b', 'c'],
|
|
393
|
-
alternateResponses: [{
|
|
394
|
-
response: ['a', 'c', 'b']
|
|
395
|
-
}]
|
|
396
|
-
}, ['c', 'a', 'b'], 0, {
|
|
397
|
-
partialScoring: true
|
|
398
|
-
});
|
|
399
|
-
});
|
|
400
|
-
});
|
|
401
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9kYXNoRXMiLCJyZXF1aXJlIiwiY29udHJvbGxlciIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwiZSIsInQiLCJXZWFrTWFwIiwiciIsIm4iLCJfX2VzTW9kdWxlIiwibyIsImkiLCJmIiwiX19wcm90b19fIiwiZGVmYXVsdCIsImhhcyIsImdldCIsInNldCIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZGVzY3JpYmUiLCJiYXNlIiwibWVyZ2UiLCJwcm9tcHQiLCJwcm9tcHRFbmFibGVkIiwiY2hvaWNlcyIsImNvcnJlY3RSZXNwb25zZSIsImZlZWRiYWNrRW5hYmxlZCIsImFzc2VydE1vZGVsIiwicSIsInMiLCJwYXJ0aWFsRXhwZWN0ZWQiLCJpc0Z1bmN0aW9uIiwibmFtZSIsImV4cGVjdCIsIm1vZGVsIiwidG9UaHJvdyIsIkVycm9yIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZXN1bHQiLCJ0b01hdGNoT2JqZWN0IiwiaXQiLCJtIiwidG9FcXVhbCIsIm1vZGUiLCJkaXNhYmxlZCIsImZlZWRiYWNrIiwiY29ycmVjdCIsInR5cGUiLCJjdXN0b20iLCJ2YWx1ZSIsInNlc3Npb24iLCJlbnYiLCJhbHRlcm5hdGVSZXNwb25zZXMiLCJyZXNwb25zZSIsImxhYmVsIiwiaWQiLCJvdXRjb21lcyIsIm91dGNvbWUiLCJhc3NlcnRNb2RlbENvcnJlY3RuZXNzIiwiSlNPTiIsInN0cmluZ2lmeSIsImNvcnJlY3RuZXNzIiwidW5kZWZpbmVkIiwic2VzcyIsImNyZWF0ZUNvcnJlY3RSZXNwb25zZVNlc3Npb24iLCJyb2xlIiwidG9CZU51bGwiLCJub1Jlc3VsdCIsImFzc2VydE91dGNvbWUiLCJxdWVzdGlvbiIsImV4cGVjdGVkU2NvcmUiLCJzY29yZSIsImFzc2VydE91dGNvbWVFcnJvciIsInJlamVjdHMiLCJxdWVzdGlvbkVycm9yIiwiYXNzZXJ0T3V0Y29tZVNlc3Npb25Ob3RzZXQiLCJyZXNvbHZlcyIsImVtcHR5IiwibG9nVHJhY2UiLCJwYXJ0aWFsU2NvcmluZyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fX3Rlc3RzX18vaW5kZXgudGVzdC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc0Z1bmN0aW9uLCBtZXJnZSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgKiBhcyBjb250cm9sbGVyIGZyb20gJy4uL2luZGV4JztcblxuZGVzY3JpYmUoJ2luZGV4JywgKCkgPT4ge1xuICBsZXQgYmFzZSA9IChvKSA9PiB7XG4gICAgbyA9IG1lcmdlKFxuICAgICAge1xuICAgICAgICBwcm9tcHQ6ICdoaScsXG4gICAgICAgIHByb21wdEVuYWJsZWQ6IHRydWUsXG4gICAgICAgIGNob2ljZXM6IFtdLFxuICAgICAgICBjb3JyZWN0UmVzcG9uc2U6IFtdLFxuICAgICAgICBmZWVkYmFja0VuYWJsZWQ6IHRydWUsXG4gICAgICB9LFxuICAgICAgbyxcbiAgICApO1xuICAgIHJldHVybiBvO1xuICB9O1xuXG4gIGRlc2NyaWJlKCdtb2RlbCcsICgpID0+IHtcbiAgICBsZXQgYXNzZXJ0TW9kZWwgPSAocSwgcywgZSwgcGFydGlhbEV4cGVjdGVkKSA9PiB7XG4gICAgICByZXR1cm4gYXN5bmMgKCkgPT4ge1xuICAgICAgICBpZiAoaXNGdW5jdGlvbihwYXJ0aWFsRXhwZWN0ZWQpICYmIHBhcnRpYWxFeHBlY3RlZC5uYW1lID09PSAnRXJyb3InKSB7XG4gICAgICAgICAgZXhwZWN0KCgpID0+IGNvbnRyb2xsZXIubW9kZWwocSwgcywgZSkpLnRvVGhyb3coRXJyb3IpO1xuXG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvbnRyb2xsZXIubW9kZWwocSwgcywgZSk7XG5cbiAgICAgICAgICBpZiAoaXNGdW5jdGlvbihwYXJ0aWFsRXhwZWN0ZWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gcGFydGlhbEV4cGVjdGVkKHJlc3VsdCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGV4cGVjdChyZXN1bHQpLnRvTWF0Y2hPYmplY3QocGFydGlhbEV4cGVjdGVkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfTtcblxuICAgIGl0KFxuICAgICAgJ3JldHVybnMgcHJvbXB0JyxcbiAgICAgIGFzc2VydE1vZGVsKGJhc2UoKSwge30sIHt9LCAobSkgPT4gZXhwZWN0KG0ucHJvbXB0KS50b0VxdWFsKCdoaScpKSxcbiAgICApO1xuXG4gICAgaXQoJ3JldHVybnMgZW1wdHkgY29uZmlnIGZvciBtb2RlPWdhdGhlcicsIGFzc2VydE1vZGVsKGJhc2UoKSwge30sIHsgbW9kZTogJ2dhdGhlcicgfSwge30pKTtcblxuICAgIGl0KCdyZXR1cm5zIGVtcHR5IGNvbmZpZyBmb3IgbW9kZT12aWV3JywgYXNzZXJ0TW9kZWwoYmFzZSgpLCB7fSwgeyBtb2RlOiAndmlldycgfSwgeyBkaXNhYmxlZDogdHJ1ZSB9KSk7XG5cbiAgICBpdChcbiAgICAgICdyZXR1cm5zIGNvbmZpZy5kaXNhYmxlZD10cnVlIGZvciBtb2RlPWV2YWx1YXRlJyxcbiAgICAgIGFzc2VydE1vZGVsKGJhc2UoKSwge30sIHsgbW9kZTogJ2V2YWx1YXRlJyB9LCB7IGRpc2FibGVkOiB0cnVlIH0pLFxuICAgICk7XG5cbiAgICBpdChcbiAgICAgICdyZXR1cm5zIGZlZWRiYWNrJyxcbiAgICAgIGFzc2VydE1vZGVsKFxuICAgICAgICBiYXNlKHtcbiAgICAgICAgICBjb3JyZWN0UmVzcG9uc2U6IFsnYScsICdiJ10sXG4gICAgICAgICAgZmVlZGJhY2s6IHsgY29ycmVjdDogeyB0eXBlOiAnY3VzdG9tJywgY3VzdG9tOiAnZm9vJyB9IH0sXG4gICAgICAgIH0pLFxuICAgICAgICB7IHZhbHVlOiBbJ2EnLCAnYiddIH0sXG4gICAgICAgIHsgbW9kZTogJ2V2YWx1YXRlJyB9LFxuICAgICAgICB7IGZlZWRiYWNrOiAnZm9vJyB9LFxuICAgICAgKSxcbiAgICApO1xuXG4gICAgZGVzY3JpYmUoJ2Nob2ljZXMgYW5kIG91dGNvbWVzJywgKCkgPT4ge1xuICAgICAgbGV0IG1vZGVsLCBzZXNzaW9uLCBlbnY7XG5cbiAgICAgIG1vZGVsID0gYmFzZSh7XG4gICAgICAgIGNvcnJlY3RSZXNwb25zZTogWydhJywgJ2InLCAnYyddLFxuICAgICAgICBhbHRlcm5hdGVSZXNwb25zZXM6IFt7IHJlc3BvbnNlOiBbJ2MnLCAnYicsICdhJ10gfV0sXG4gICAgICAgIGNob2ljZXM6IFtcbiAgICAgICAgICB7IGxhYmVsOiAnYScsIGlkOiAnYScgfSxcbiAgICAgICAgICB7IGxhYmVsOiAnYicsIGlkOiAnYicgfSxcbiAgICAgICAgICB7IGxhYmVsOiAnYycsIGlkOiAnYycgfSxcbiAgICAgICAgXSxcbiAgICAgIH0pO1xuXG4gICAgICBzZXNzaW9uID0geyB2YWx1ZTogWydhJywgJ2InLCAnYyddIH07XG4gICAgICBlbnYgPSB7IG1vZGU6ICdldmFsdWF0ZScgfTtcblxuICAgICAgaXQoXG4gICAgICAgICdjaG9pY2VzJyxcbiAgICAgICAgYXNzZXJ0TW9kZWwoXG4gICAgICAgICAgbW9kZWwsXG4gICAgICAgICAge30sXG4gICAgICAgICAge30sXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2hvaWNlczogW1xuICAgICAgICAgICAgICB7IGlkOiAnYScsIGxhYmVsOiAnYScgfSxcbiAgICAgICAgICAgICAgeyBpZDogJ2InLCBsYWJlbDogJ2InIH0sXG4gICAgICAgICAgICAgIHsgbGFiZWw6ICdjJywgaWQ6ICdjJyB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9LFxuICAgICAgICApLFxuICAgICAgKTtcblxuICAgICAgLy8gTWFpbiBDb3JyZWN0IFJlc3BvbnNlXG4gICAgICBpdChcbiAgICAgICAgJ3JldHVybnMgb3V0Y29tZXMgLSAzIGNvcnJlY3QnLFxuICAgICAgICBhc3NlcnRNb2RlbChtb2RlbCwgc2Vzc2lvbiwgZW52LCB7XG4gICAgICAgICAgb3V0Y29tZXM6IFtcbiAgICAgICAgICAgIHsgaWQ6ICdhJywgb3V0Y29tZTogJ2NvcnJlY3QnIH0sXG4gICAgICAgICAgICB7IGlkOiAnYicsIG91dGNvbWU6ICdjb3JyZWN0JyB9LFxuICAgICAgICAgICAgeyBpZDogJ2MnLCBvdXRjb21lOiAnY29ycmVjdCcgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9KSxcbiAgICAgICk7XG5cbiAgICAgIC8vIEFsdGVybmF0ZSBDb3JyZWN0IFJlc3BvbnNlXG4gICAgICBpdChcbiAgICAgICAgJ3JldHVybnMgb3V0Y29tZXMgZm9yIGFsdGVybmF0ZSByZXNwb25zZSAtIDMgY29ycmVjdCcsXG4gICAgICAgIGFzc2VydE1vZGVsKG1vZGVsLCB7IHZhbHVlOiBbJ2MnLCAnYicsICdhJ10gfSwgZW52LCB7XG4gICAgICAgICAgb3V0Y29tZXM6IFtcbiAgICAgICAgICAgIHsgaWQ6ICdjJywgb3V0Y29tZTogJ2NvcnJlY3QnIH0sXG4gICAgICAgICAgICB7IGlkOiAnYicsIG91dGNvbWU6ICdjb3JyZWN0JyB9LFxuICAgICAgICAgICAgeyBpZDogJ2EnLCBvdXRjb21lOiAnY29ycmVjdCcgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9KSxcbiAgICAgICk7XG5cbiAgICAgIC8vIE1haW4gQ29ycmVjdCBSZXNwb25zZVxuICAgICAgaXQoXG4gICAgICAgICdyZXR1cm5zIG91dGNvbWVzIC0gMSBjb3JyZWN0JyxcbiAgICAgICAgYXNzZXJ0TW9kZWwobW9kZWwsIHsgdmFsdWU6IFsnYSddIH0sIGVudiwge1xuICAgICAgICAgIG91dGNvbWVzOiBbeyBpZDogJ2EnLCBvdXRjb21lOiAnY29ycmVjdCcgfV0sXG4gICAgICAgIH0pLFxuICAgICAgKTtcblxuICAgICAgLy8gQWx0ZXJuYXRlIENvcnJlY3QgUmVzcG9uc2VcbiAgICAgIGl0KFxuICAgICAgICAncmV0dXJucyBvdXRjb21lcyBmb3IgYWx0ZXJuYXRlIC0gMSBjb3JyZWN0JyxcbiAgICAgICAgYXNzZXJ0TW9kZWwobW9kZWwsIHsgdmFsdWU6IFsnYyddIH0sIGVudiwge1xuICAgICAgICAgIG91dGNvbWVzOiBbeyBpZDogJ2MnLCBvdXRjb21lOiAnY29ycmVjdCcgfV0sXG4gICAgICAgIH0pLFxuICAgICAgKTtcblxuICAgICAgaXQoJ2RvZXMgbm90IHJldHVybiBjb25maWcuY29ycmVjdFJlc3BvbnNlIC0gMSBjb3JyZWN0JywgYXNzZXJ0TW9kZWwobW9kZWwsIHNlc3Npb24sIGVudiwgeyBkaXNhYmxlZDogdHJ1ZSB9KSk7XG5cbiAgICAgIGl0KFxuICAgICAgICAncmV0dXJucyBvdXRjb21lcyAtIDIgaW5jb3JyZWN0JyxcbiAgICAgICAgYXNzZXJ0TW9kZWwobW9kZWwsIHsgdmFsdWU6IFsnYicsICdhJ10gfSwgZW52LCB7XG4gICAgICAgICAgb3V0Y29tZXM6IFtcbiAgICAgICAgICAgIHsgaWQ6ICdiJywgb3V0Y29tZTogJ2luY29ycmVjdCcgfSxcbiAgICAgICAgICAgIHsgaWQ6ICdhJywgb3V0Y29tZTogJ2luY29ycmVjdCcgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9KSxcbiAgICAgICk7XG5cbiAgICAgIGl0KFxuICAgICAgICAncmV0dXJucyBjb25maWcuY29ycmVjdFJlc3BvbnNlIC0gMiAtIGluY29ycmVjdCcsXG4gICAgICAgIGFzc2VydE1vZGVsKG1vZGVsLCB7IHZhbHVlOiBbJ2InLCAnYSddIH0sIGVudiwge1xuICAgICAgICAgIGNvcnJlY3RSZXNwb25zZTogWydhJywgJ2InLCAnYyddLFxuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnc2Vzc2lvbiBub3Qgc2V0JywgKCkgPT4ge1xuICAgICAgY29uc3QgYXNzZXJ0TW9kZWxDb3JyZWN0bmVzcyA9IChzZXNzaW9uKSA9PiB7XG4gICAgICAgIGl0KGByZXR1cm5zIGNvcnJlY3RuZXNzOiBpbmNvcnJlY3Qgb2Ygc2Vzc2lvbiBpcyAke0pTT04uc3RyaW5naWZ5KHNlc3Npb24pfWAsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCBtID0gYXdhaXQgY29udHJvbGxlci5tb2RlbChiYXNlKHsgY29ycmVjdFJlc3BvbnNlOiBbJ2EnLCAnYiddIH0pLCBzZXNzaW9uLCB7IG1vZGU6ICdldmFsdWF0ZScgfSk7XG4gICAgICAgICAgZXhwZWN0KG0uY29ycmVjdG5lc3MpLnRvRXF1YWwoJ2luY29ycmVjdCcpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG5cbiAgICAgIGFzc2VydE1vZGVsQ29ycmVjdG5lc3ModW5kZWZpbmVkKTtcbiAgICAgIGFzc2VydE1vZGVsQ29ycmVjdG5lc3MobnVsbCk7XG4gICAgICBhc3NlcnRNb2RlbENvcnJlY3RuZXNzKHt9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdjb3JyZWN0IHJlc3BvbnNlJywgKCkgPT4ge1xuICAgICAgY29uc3QgbW9kZWwgPSBiYXNlKHtcbiAgICAgICAgY29ycmVjdFJlc3BvbnNlOiBbJ2EnLCAnYicsICdjJ10sXG4gICAgICAgIGFsdGVybmF0ZVJlc3BvbnNlczogW3sgcmVzcG9uc2U6IFsnYycsICdiJywgJ2EnXSB9XSxcbiAgICAgICAgY2hvaWNlczogW1xuICAgICAgICAgIHsgbGFiZWw6ICdhJywgaWQ6ICdhJyB9LFxuICAgICAgICAgIHsgbGFiZWw6ICdiJywgaWQ6ICdiJyB9LFxuICAgICAgICAgIHsgbGFiZWw6ICdjJywgaWQ6ICdjJyB9LFxuICAgICAgICBdLFxuICAgICAgfSk7XG5cbiAgICAgIGl0KCdyZXR1cm5zIGNvcnJlY3QgcmVzcG9uc2UgaWYgZW52IGlzIGNvcnJlY3QnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHNlc3MgPSBhd2FpdCBjb250cm9sbGVyLmNyZWF0ZUNvcnJlY3RSZXNwb25zZVNlc3Npb24obW9kZWwsIHtcbiAgICAgICAgICBtb2RlOiAnZ2F0aGVyJyxcbiAgICAgICAgICByb2xlOiAnaW5zdHJ1Y3RvcicsXG4gICAgICAgIH0pO1xuICAgICAgICBleHBlY3Qoc2VzcykudG9FcXVhbCh7IGlkOiAnMScsIHZhbHVlOiBbJ2EnLCAnYicsICdjJ10gfSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3JldHVybnMgY29ycmVjdCByZXNwb25zZSBpZiBlbnYgaXMgY29ycmVjdCBmb3Igc2h1ZmZsZWQgY2hvaWNlcycsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgbW9kZWwgPSBiYXNlKHtcbiAgICAgICAgICBjb3JyZWN0UmVzcG9uc2U6IFsnYScsICdiJywgJ2MnXSxcbiAgICAgICAgICBhbHRlcm5hdGVSZXNwb25zZXM6IFt7IHJlc3BvbnNlOiBbJ2MnLCAnYicsICdhJ10gfV0sXG4gICAgICAgICAgY2hvaWNlczogW1xuICAgICAgICAgICAgeyBsYWJlbDogJ2MnLCBpZDogJ2MnIH0sXG4gICAgICAgICAgICB7IGxhYmVsOiAnYicsIGlkOiAnYicgfSxcbiAgICAgICAgICAgIHsgbGFiZWw6ICdhJywgaWQ6ICdhJyB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHNlc3MgPSBhd2FpdCBjb250cm9sbGVyLmNyZWF0ZUNvcnJlY3RSZXNwb25zZVNlc3Npb24obW9kZWwsIHtcbiAgICAgICAgICBtb2RlOiAnZ2F0aGVyJyxcbiAgICAgICAgICByb2xlOiAnaW5zdHJ1Y3RvcicsXG4gICAgICAgIH0pO1xuICAgICAgICBleHBlY3Qoc2VzcykudG9FcXVhbCh7IGlkOiAnMScsIHZhbHVlOiBbJ2EnLCAnYicsICdjJ10gfSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3JldHVybnMgbnVsbCBpZiBtb2RlIGlzIGV2YWx1YXRlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBzZXNzID0gYXdhaXQgY29udHJvbGxlci5jcmVhdGVDb3JyZWN0UmVzcG9uc2VTZXNzaW9uKG1vZGVsLCB7XG4gICAgICAgICAgbW9kZTogJ2V2YWx1YXRlJyxcbiAgICAgICAgICByb2xlOiAnaW5zdHJ1Y3RvcicsXG4gICAgICAgIH0pO1xuICAgICAgICBleHBlY3Qoc2VzcykudG9CZU51bGwoKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgncmV0dXJucyBudWxsIGlmIHJvbGUgaXMgc3R1ZGVudCcsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3Qgbm9SZXN1bHQgPSBhd2FpdCBjb250cm9sbGVyLmNyZWF0ZUNvcnJlY3RSZXNwb25zZVNlc3Npb24obW9kZWwsIHtcbiAgICAgICAgICBtb2RlOiAnZ2F0aGVyJyxcbiAgICAgICAgICByb2xlOiAnc3R1ZGVudCcsXG4gICAgICAgIH0pO1xuICAgICAgICBleHBlY3Qobm9SZXN1bHQpLnRvQmVOdWxsKCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ291dGNvbWUnLCAoKSA9PiB7XG4gICAgY29uc3QgYXNzZXJ0T3V0Y29tZSA9IChxdWVzdGlvbiwgdmFsdWUsIGV4cGVjdGVkU2NvcmUsIGVudikgPT4ge1xuICAgICAgaXQoYCR7ZXhwZWN0ZWRTY29yZX0gd2hlbiBhbnN3ZXI6ICR7dmFsdWV9IGFuZCBxdWVzdGlvbjogJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgcXVlc3Rpb24sXG4gICAgICApfSwgZW52OiAke0pTT04uc3RyaW5naWZ5KGVudil9YCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjb250cm9sbGVyLm91dGNvbWUocXVlc3Rpb24sIHsgdmFsdWUgfSwgZW52KTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdC5zY29yZSkudG9FcXVhbChleHBlY3RlZFNjb3JlKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgYXNzZXJ0T3V0Y29tZUVycm9yID0gKHF1ZXN0aW9uLCBzZXNzaW9uLCBlbnYpID0+IHtcbiAgICAgIGl0KGB0aHJvd3MgZXJyb3IgZm9yICR7SlNPTi5zdHJpbmdpZnkocXVlc3Rpb24pfWAsICgpID0+XG4gICAgICAgIGV4cGVjdChjb250cm9sbGVyLm91dGNvbWUocXVlc3Rpb24sIHNlc3Npb24sIGVudikpLnJlamVjdHMudG9UaHJvdyhjb250cm9sbGVyLnF1ZXN0aW9uRXJyb3IoKSkpO1xuICAgIH07XG4gICAgY29uc3QgYXNzZXJ0T3V0Y29tZVNlc3Npb25Ob3RzZXQgPSAoc2Vzc2lvbikgPT4ge1xuICAgICAgaXQoYHJldHVybiBzY29yZTogMCBhbmQgZW1wdHk6IHRydWUgaWYgc2Vzc2lvbiBpcyAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICBzZXNzaW9uXG4gICAgICApfWAsICgpID0+XG4gICAgICAgIGV4cGVjdChcbiAgICAgICAgICBjb250cm9sbGVyLm91dGNvbWUoe30sIHNlc3Npb24sIHsgbW9kZTogJ2V2YWx1YXRlJyB9KVxuICAgICAgICApLnJlc29sdmVzLnRvRXF1YWwoe1xuICAgICAgICAgIHNjb3JlOiAwLCBlbXB0eTogdHJ1ZSwgbG9nVHJhY2U6IFtcIlN0dWRlbnQgZGlkIG5vdCBpbnRlcmFjdCB3aXRoIHRoZSBwbGFjZW1lbnQtb3JkZXJpbmcgaXRlbS5cIl1cbiAgICAgICAgfSkpO1xuICAgIH07XG5cbiAgICBhc3NlcnRPdXRjb21lRXJyb3IobnVsbCwgeyB2YWx1ZTogW10gfSwge30pO1xuICAgIGFzc2VydE91dGNvbWVFcnJvcih7fSwgeyB2YWx1ZTogW10gfSwge30pO1xuICAgIGFzc2VydE91dGNvbWVFcnJvcih7IGNvcnJlY3RSZXNwb25zZTogW10gfSwgeyB2YWx1ZTogW10gfSwge30pO1xuXG4gICAgYXNzZXJ0T3V0Y29tZVNlc3Npb25Ob3RzZXQodW5kZWZpbmVkKTtcbiAgICBhc3NlcnRPdXRjb21lU2Vzc2lvbk5vdHNldChudWxsKTtcbiAgICBhc3NlcnRPdXRjb21lU2Vzc2lvbk5vdHNldCh7fSk7XG5cbiAgICAvLyBNYWluIENvcnJlY3QgUmVzcG9uc2VcbiAgICBhc3NlcnRPdXRjb21lKFxuICAgICAge1xuICAgICAgICBwYXJ0aWFsU2NvcmluZzogdHJ1ZSxcbiAgICAgICAgY29ycmVjdFJlc3BvbnNlOiBbJ2EnXSxcbiAgICAgICAgYWx0ZXJuYXRlUmVzcG9uc2VzOiBbeyByZXNwb25zZTogWydjJ10gfV0sXG4gICAgICB9LFxuICAgICAgWydhJ10sXG4gICAgICAxLFxuICAgICk7XG4gICAgYXNzZXJ0T3V0Y29tZShcbiAgICAgIHtcbiAgICAgICAgcGFydGlhbFNjb3Jpbmc6IHRydWUsXG4gICAgICAgIGNvcnJlY3RSZXNwb25zZTogWydhJ10sXG4gICAgICAgIGFsdGVybmF0ZVJlc3BvbnNlczogW3sgcmVzcG9uc2U6IFsnYyddIH1dLFxuICAgICAgfSxcbiAgICAgIFsnYiddLFxuICAgICAgMCxcbiAgICApO1xuICAgIGFzc2VydE91dGNvbWUoXG4gICAgICB7XG4gICAgICAgIGNvcnJlY3RSZXNwb25zZTogWydhJywgJ2InLCAnYyddLFxuICAgICAgICBhbHRlcm5hdGVSZXNwb25zZXM6IFt7IHJlc3BvbnNlOiBbJ2InLCAnYycsICdhJ10gfV0sXG4gICAgICB9LFxuICAgICAgWydjJywgJ2EnLCAnYiddLFxuICAgICAgMC4zMyxcbiAgICApO1xuICAgIGFzc2VydE91dGNvbWUoeyBjb3JyZWN0UmVzcG9uc2U6IFsnYScsICdiJ10sIGFsdGVybmF0ZVJlc3BvbnNlczogW1snYycsICdiJ11dIH0sIFsnYycsICdhJywgJ2InXSwgMCk7XG4gICAgYXNzZXJ0T3V0Y29tZShcbiAgICAgIHtcbiAgICAgICAgY29ycmVjdFJlc3BvbnNlOiBbJ2EnLCAnYicsICdjJ10sXG4gICAgICAgIGFsdGVybmF0ZVJlc3BvbnNlczogW3sgcmVzcG9uc2U6IFsnYScsICdjJywgJ2InXSB9XSxcbiAgICAgIH0sXG4gICAgICBbJ2EnLCAnYiddLFxuICAgICAgMC4zMyxcbiAgICApO1xuICAgIGFzc2VydE91dGNvbWUoXG4gICAgICB7XG4gICAgICAgIHBhcnRpYWxTY29yaW5nOiB0cnVlLFxuICAgICAgICBjb3JyZWN0UmVzcG9uc2U6IFsnYScsICdiJywgJ2MnXSxcbiAgICAgICAgYWx0ZXJuYXRlUmVzcG9uc2VzOiBbeyByZXNwb25zZTogWydhJywgJ2InXSB9XSxcbiAgICAgIH0sXG4gICAgICBbJ2MnLCAnYScsICdiJ10sXG4gICAgICAwLjMzLFxuICAgICk7XG4gICAgYXNzZXJ0T3V0Y29tZShcbiAgICAgIHtcbiAgICAgICAgcGFydGlhbFNjb3Jpbmc6IGZhbHNlLFxuICAgICAgICBjb3JyZWN0UmVzcG9uc2U6IFsnYScsICdiJywgJ2MnXSxcbiAgICAgICAgYWx0ZXJuYXRlUmVzcG9uc2VzOiBbeyByZXNwb25zZTogWydhJywgJ2MnLCAnYiddIH1dLFxuICAgICAgfSxcbiAgICAgIFsnYScsICdiJ10sXG4gICAgICAwLFxuICAgICk7XG4gICAgYXNzZXJ0T3V0Y29tZShcbiAgICAgIHtcbiAgICAgICAgcGFydGlhbFNjb3Jpbmc6IGZhbHNlLFxuICAgICAgICBjb3JyZWN0UmVzcG9uc2U6IFsnYScsICdiJywgJ2MnXSxcbiAgICAgICAgYWx0ZXJuYXRlUmVzcG9uc2VzOiBbeyByZXNwb25zZTogWydhJywgJ2InXSB9XSxcbiAgICAgIH0sXG4gICAgICBbJ2MnLCAnYScsICdiJ10sXG4gICAgICAwLFxuICAgICAgeyBwYXJ0aWFsU2NvcmluZzogdHJ1ZSB9LFxuICAgICk7XG5cbiAgICAvLyBBbHRlcm5hdGUgQ29ycmVjdCBSZXNwb25zZVxuICAgIGFzc2VydE91dGNvbWUoXG4gICAgICB7XG4gICAgICAgIHBhcnRpYWxTY29yaW5nOiB0cnVlLFxuICAgICAgICBjb3JyZWN0UmVzcG9uc2U6IFsnYSddLFxuICAgICAgICBhbHRlcm5hdGVSZXNwb25zZXM6IFt7IHJlc3BvbnNlOiBbJ2MnXSB9XSxcbiAgICAgIH0sXG4gICAgICBbJ2MnXSxcbiAgICAgIDEsXG4gICAgKTtcbiAgICBhc3NlcnRPdXRjb21lKFxuICAgICAge1xuICAgICAgICBwYXJ0aWFsU2NvcmluZzogdHJ1ZSxcbiAgICAgICAgY29ycmVjdFJlc3BvbnNlOiBbJ2EnXSxcbiAgICAgICAgYWx0ZXJuYXRlUmVzcG9uc2VzOiBbeyByZXNwb25zZTogWydjJ10gfV0sXG4gICAgICB9LFxuICAgICAgWydiJ10sXG4gICAgICAwLFxuICAgICk7XG4gICAgYXNzZXJ0T3V0Y29tZShcbiAgICAgIHtcbiAgICAgICAgY29ycmVjdFJlc3BvbnNlOiBbJ2EnLCAnYicsICdjJ10sXG4gICAgICAgIGFsdGVybmF0ZVJlc3BvbnNlczogW3sgcmVzcG9uc2U6IFsnYycsICdiJywgJ2EnXSB9XSxcbiAgICAgIH0sXG4gICAgICBbJ2MnLCAnYScsICdiJ10sXG4gICAgICAwLjY3LFxuICAgICk7XG4gICAgYXNzZXJ0T3V0Y29tZSh7IGNvcnJlY3RSZXNwb25zZTogWydhJywgJ2InXSwgYWx0ZXJuYXRlUmVzcG9uc2VzOiBbeyByZXNwb25zZTogWydjJywgJ2InXSB9XSB9LCBbJ2MnLCAnYScsICdiJ10sIDApO1xuICAgIGFzc2VydE91dGNvbWUoXG4gICAgICB7XG4gICAgICAgIGNvcnJlY3RSZXNwb25zZTogWydhJywgJ2InLCAnYyddLFxuICAgICAgICBhbHRlcm5hdGVSZXNwb25zZXM6IFt7IHJlc3BvbnNlOiBbJ2MnLCAnYicsICdhJ10gfV0sXG4gICAgICB9LFxuICAgICAgWydjJywgJ2InXSxcbiAgICAgIDAuMzMsXG4gICAgKTtcbiAgICBhc3NlcnRPdXRjb21lKFxuICAgICAge1xuICAgICAgICBwYXJ0aWFsU2NvcmluZzogdHJ1ZSxcbiAgICAgICAgY29ycmVjdFJlc3BvbnNlOiBbJ2EnLCAnYicsICdjJ10sXG4gICAgICAgIGFsdGVybmF0ZVJlc3BvbnNlczogW3sgcmVzcG9uc2U6IFsnYScsICdjJywgJ2InXSB9XSxcbiAgICAgIH0sXG4gICAgICBbJ2MnLCAnYScsICdiJ10sXG4gICAgICAwLjY3LFxuICAgICk7XG4gICAgYXNzZXJ0T3V0Y29tZShcbiAgICAgIHtcbiAgICAgICAgcGFydGlhbFNjb3Jpbmc6IGZhbHNlLFxuICAgICAgICBjb3JyZWN0UmVzcG9uc2U6IFsnYScsICdiJywgJ2MnXSxcbiAgICAgICAgYWx0ZXJuYXRlUmVzcG9uc2VzOiBbeyByZXNwb25zZTogWydhJywgJ2MnLCAnYiddIH1dLFxuICAgICAgfSxcbiAgICAgIFsnYScsICdiJ10sXG4gICAgICAwLFxuICAgICk7XG4gICAgYXNzZXJ0T3V0Y29tZShcbiAgICAgIHtcbiAgICAgICAgcGFydGlhbFNjb3Jpbmc6IGZhbHNlLFxuICAgICAgICBjb3JyZWN0UmVzcG9uc2U6IFsnYScsICdiJywgJ2MnXSxcbiAgICAgICAgYWx0ZXJuYXRlUmVzcG9uc2VzOiBbeyByZXNwb25zZTogWydhJywgJ2MnLCAnYiddIH1dLFxuICAgICAgfSxcbiAgICAgIFsnYycsICdhJywgJ2InXSxcbiAgICAgIDAsXG4gICAgICB7IHBhcnRpYWxTY29yaW5nOiB0cnVlIH0sXG4gICAgKTtcbiAgfSk7XG59KTtcbiJdLCJtYXBwaW5ncyI6Ijs7QUFBQSxJQUFBQSxTQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxVQUFBLEdBQUFDLHVCQUFBLENBQUFGLE9BQUE7QUFBdUMsU0FBQUUsd0JBQUFDLENBQUEsRUFBQUMsQ0FBQSw2QkFBQUMsT0FBQSxNQUFBQyxDQUFBLE9BQUFELE9BQUEsSUFBQUUsQ0FBQSxPQUFBRixPQUFBLFlBQUFILHVCQUFBLFlBQUFBLENBQUFDLENBQUEsRUFBQUMsQ0FBQSxTQUFBQSxDQUFBLElBQUFELENBQUEsSUFBQUEsQ0FBQSxDQUFBSyxVQUFBLFNBQUFMLENBQUEsTUFBQU0sQ0FBQSxFQUFBQyxDQUFBLEVBQUFDLENBQUEsS0FBQUMsU0FBQSxRQUFBQyxPQUFBLEVBQUFWLENBQUEsaUJBQUFBLENBQUEsdUJBQUFBLENBQUEseUJBQUFBLENBQUEsU0FBQVEsQ0FBQSxNQUFBRixDQUFBLEdBQUFMLENBQUEsR0FBQUcsQ0FBQSxHQUFBRCxDQUFBLFFBQUFHLENBQUEsQ0FBQUssR0FBQSxDQUFBWCxDQUFBLFVBQUFNLENBQUEsQ0FBQU0sR0FBQSxDQUFBWixDQUFBLEdBQUFNLENBQUEsQ0FBQU8sR0FBQSxDQUFBYixD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W119
|
|
@@ -1,165 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _scoring = require("../scoring");
|
|
4
|
-
var _lodashEs = require("lodash-es");
|
|
5
|
-
describe('pairwiseCombinationScore', () => {
|
|
6
|
-
const assertScore = (correctResponse, opts) => (answer, expectedScore) => {
|
|
7
|
-
it(`${expectedScore} for ${typeof answer === 'string' ? answer : JSON.stringify(answer)}`, () => {
|
|
8
|
-
const c = correctResponse.split('');
|
|
9
|
-
const a = typeof answer === 'string' ? answer.split('') : answer;
|
|
10
|
-
const result = (0, _scoring.pairwiseCombinationScore)(c, a, opts);
|
|
11
|
-
expect(result).toEqual(expectedScore);
|
|
12
|
-
});
|
|
13
|
-
};
|
|
14
|
-
describe('correct response: A', () => {
|
|
15
|
-
const assertA = assertScore('A');
|
|
16
|
-
assertA('A', 1);
|
|
17
|
-
assertA('B', 0);
|
|
18
|
-
assertA('C', 0);
|
|
19
|
-
assertA({
|
|
20
|
-
foo: true
|
|
21
|
-
}, 0);
|
|
22
|
-
assertA([{
|
|
23
|
-
foo: true
|
|
24
|
-
}, {
|
|
25
|
-
bar: true
|
|
26
|
-
}], 0);
|
|
27
|
-
assertA('', 0);
|
|
28
|
-
});
|
|
29
|
-
describe('correct response: AB', () => {
|
|
30
|
-
const assertAB = assertScore('AB');
|
|
31
|
-
assertAB('A', 0);
|
|
32
|
-
assertAB('B', 0);
|
|
33
|
-
assertAB('C', 0);
|
|
34
|
-
assertAB('', 0);
|
|
35
|
-
assertAB('AB', 1);
|
|
36
|
-
assertAB('BA', 0);
|
|
37
|
-
assertAB('AC', 0);
|
|
38
|
-
});
|
|
39
|
-
describe('correct response: AAB', () => {
|
|
40
|
-
it('throws an error because of duplicate in answer', () => {
|
|
41
|
-
expect(() => (0, _scoring.pairwiseCombinationScore)(['A', 'A'], ['A', 'A'])).toThrow((0, _scoring.illegalArgumentError)(['A', 'A']));
|
|
42
|
-
});
|
|
43
|
-
});
|
|
44
|
-
describe('correct response: ABC', () => {
|
|
45
|
-
const assertABC = assertScore('ABC');
|
|
46
|
-
assertABC('', 0);
|
|
47
|
-
assertABC('A', 0);
|
|
48
|
-
assertABC('AA', 0);
|
|
49
|
-
assertABC('AB', 0.33);
|
|
50
|
-
assertABC('AC', 0.33);
|
|
51
|
-
assertABC('AAC', 0);
|
|
52
|
-
assertABC('AAB', 0);
|
|
53
|
-
assertABC('BAA', 0);
|
|
54
|
-
assertABC('ABA', 0);
|
|
55
|
-
assertABC('ABAB', 0);
|
|
56
|
-
assertABC('ABC', 1);
|
|
57
|
-
assertABC('ABC', 1);
|
|
58
|
-
assertABC('BCA', 0.33);
|
|
59
|
-
assertABC('CAB', 0.33);
|
|
60
|
-
assertABC('CBA', 0);
|
|
61
|
-
assertABC('ACB', 0.67);
|
|
62
|
-
assertABC('B', 0);
|
|
63
|
-
assertABC('C', 0);
|
|
64
|
-
assertABC('AB', 0.33);
|
|
65
|
-
assertABC('BC', 0.33);
|
|
66
|
-
assertABC('AC', 0.33);
|
|
67
|
-
assertABC('CA', 0);
|
|
68
|
-
assertABC('CB', 0);
|
|
69
|
-
assertABC('BA', 0);
|
|
70
|
-
assertABC('ABCD', 0);
|
|
71
|
-
});
|
|
72
|
-
describe('correct response: ABCD - order must be complete', () => {
|
|
73
|
-
const assertABCD = assertScore('ABCD', {
|
|
74
|
-
orderMustBeComplete: true
|
|
75
|
-
});
|
|
76
|
-
assertABCD('ABC', 0);
|
|
77
|
-
assertABCD('BCD', 0);
|
|
78
|
-
});
|
|
79
|
-
describe('correct response: ABCD', () => {
|
|
80
|
-
const assertABCD = assertScore('ABCD');
|
|
81
|
-
assertABCD('ABCD', 1);
|
|
82
|
-
assertABCD('ABDC', 0.83);
|
|
83
|
-
assertABCD('ABC', 0.5);
|
|
84
|
-
assertABCD('CDAB', 0.33);
|
|
85
|
-
assertABCD('CDBA', 0.17);
|
|
86
|
-
assertABCD('DCBA', 0);
|
|
87
|
-
assertABCD('DCAB', 0.17);
|
|
88
|
-
assertABCD('ABAB', 0);
|
|
89
|
-
assertABCD('AB', 0.17);
|
|
90
|
-
});
|
|
91
|
-
describe('custom override - allowDuplicates: true, orderMustBeComplete: false', () => {
|
|
92
|
-
describe('correct response: AAB - dups, order incomplete', () => {
|
|
93
|
-
const assertAAB = assertScore('AAB', {
|
|
94
|
-
allowDuplicates: true
|
|
95
|
-
});
|
|
96
|
-
assertAAB('', 0);
|
|
97
|
-
assertAAB('A', 0);
|
|
98
|
-
assertAAB('AA', 0.33);
|
|
99
|
-
assertAAB('AAC', 0.33);
|
|
100
|
-
assertAAB('AAB', 1);
|
|
101
|
-
assertAAB('BAA', 0.33);
|
|
102
|
-
assertAAB('ABA', 0.67);
|
|
103
|
-
assertAAB('ABAB', 0);
|
|
104
|
-
});
|
|
105
|
-
});
|
|
106
|
-
});
|
|
107
|
-
const correctResponse = ['c1', 'c2', 'c3', 'c4'];
|
|
108
|
-
const alternateResponses = [{
|
|
109
|
-
response: ['c4', 'c3', 'c2', 'c1']
|
|
110
|
-
}];
|
|
111
|
-
describe('score', () => {
|
|
112
|
-
let baseQuestion = {
|
|
113
|
-
correctResponse: correctResponse,
|
|
114
|
-
alternateResponses: alternateResponses
|
|
115
|
-
};
|
|
116
|
-
describe('partial scoring', () => {
|
|
117
|
-
let question = (0, _lodashEs.merge)((0, _lodashEs.cloneDeep)(baseQuestion), {
|
|
118
|
-
partialScoring: true
|
|
119
|
-
});
|
|
120
|
-
const assertScore = (value, expectedScore) => {
|
|
121
|
-
it(`${expectedScore} for: ${value}`, () => {
|
|
122
|
-
const result = (0, _scoring.score)(question, {
|
|
123
|
-
value
|
|
124
|
-
});
|
|
125
|
-
expect(result).toEqual(expectedScore);
|
|
126
|
-
});
|
|
127
|
-
};
|
|
128
|
-
const assertScoreSessionNotSet = session => {
|
|
129
|
-
it(`returns 0 if session is: ${JSON.stringify(session)}`, () => {
|
|
130
|
-
const result = (0, _scoring.score)(question, session);
|
|
131
|
-
expect(result).toEqual(0);
|
|
132
|
-
});
|
|
133
|
-
};
|
|
134
|
-
assertScoreSessionNotSet(undefined);
|
|
135
|
-
assertScoreSessionNotSet(null);
|
|
136
|
-
assertScoreSessionNotSet({});
|
|
137
|
-
|
|
138
|
-
// Main Correct Responses
|
|
139
|
-
assertScore([], 0);
|
|
140
|
-
assertScore(['c1'], 0);
|
|
141
|
-
assertScore(['c1', 'c2'], 0.17);
|
|
142
|
-
assertScore(['c1', 'c2', 'c3'], 0.5);
|
|
143
|
-
assertScore(['c1', 'c2', 'c3', 'c4'], 1);
|
|
144
|
-
|
|
145
|
-
// Alternate Correct Responses
|
|
146
|
-
assertScore([], 0);
|
|
147
|
-
assertScore(['c4'], 0);
|
|
148
|
-
assertScore(['c4', 'c3'], 0.17);
|
|
149
|
-
assertScore(['c4', 'c3', 'c2'], 0.5);
|
|
150
|
-
assertScore(['c4', 'c3', 'c2', 'c1'], 1);
|
|
151
|
-
});
|
|
152
|
-
});
|
|
153
|
-
describe('flattenCorrect', () => {
|
|
154
|
-
describe('correctResponse is an array of identifiers', () => {
|
|
155
|
-
let question = {
|
|
156
|
-
correctResponse: correctResponse.map(v => ({
|
|
157
|
-
id: v
|
|
158
|
-
}))
|
|
159
|
-
};
|
|
160
|
-
it('returns correctResponse field value', () => {
|
|
161
|
-
expect((0, _scoring.flattenCorrect)(question)).toEqual(correctResponse);
|
|
162
|
-
});
|
|
163
|
-
});
|
|
164
|
-
});
|
|
165
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfc2NvcmluZyIsInJlcXVpcmUiLCJfbG9kYXNoRXMiLCJkZXNjcmliZSIsImFzc2VydFNjb3JlIiwiY29ycmVjdFJlc3BvbnNlIiwib3B0cyIsImFuc3dlciIsImV4cGVjdGVkU2NvcmUiLCJpdCIsIkpTT04iLCJzdHJpbmdpZnkiLCJjIiwic3BsaXQiLCJhIiwicmVzdWx0IiwicGFpcndpc2VDb21iaW5hdGlvblNjb3JlIiwiZXhwZWN0IiwidG9FcXVhbCIsImFzc2VydEEiLCJmb28iLCJiYXIiLCJhc3NlcnRBQiIsInRvVGhyb3ciLCJpbGxlZ2FsQXJndW1lbnRFcnJvciIsImFzc2VydEFCQyIsImFzc2VydEFCQ0QiLCJvcmRlck11c3RCZUNvbXBsZXRlIiwiYXNzZXJ0QUFCIiwiYWxsb3dEdXBsaWNhdGVzIiwiYWx0ZXJuYXRlUmVzcG9uc2VzIiwicmVzcG9uc2UiLCJiYXNlUXVlc3Rpb24iLCJxdWVzdGlvbiIsIm1lcmdlIiwiY2xvbmVEZWVwIiwicGFydGlhbFNjb3JpbmciLCJ2YWx1ZSIsInNjb3JlIiwiYXNzZXJ0U2NvcmVTZXNzaW9uTm90U2V0Iiwic2Vzc2lvbiIsInVuZGVmaW5lZCIsIm1hcCIsInYiLCJpZCIsImZsYXR0ZW5Db3JyZWN0Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL19fdGVzdHNfXy9zY29yaW5nLnRlc3QuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZmxhdHRlbkNvcnJlY3QsIHNjb3JlLCBwYWlyd2lzZUNvbWJpbmF0aW9uU2NvcmUsIGlsbGVnYWxBcmd1bWVudEVycm9yIH0gZnJvbSAnLi4vc2NvcmluZyc7XG5pbXBvcnQgeyBjbG9uZURlZXAsIG1lcmdlIH0gZnJvbSAnbG9kYXNoLWVzJztcblxuZGVzY3JpYmUoJ3BhaXJ3aXNlQ29tYmluYXRpb25TY29yZScsICgpID0+IHtcbiAgY29uc3QgYXNzZXJ0U2NvcmUgPSAoY29ycmVjdFJlc3BvbnNlLCBvcHRzKSA9PiAoYW5zd2VyLCBleHBlY3RlZFNjb3JlKSA9PiB7XG4gICAgaXQoYCR7ZXhwZWN0ZWRTY29yZX0gZm9yICR7dHlwZW9mIGFuc3dlciA9PT0gJ3N0cmluZycgPyBhbnN3ZXIgOiBKU09OLnN0cmluZ2lmeShhbnN3ZXIpfWAsICgpID0+IHtcbiAgICAgIGNvbnN0IGMgPSBjb3JyZWN0UmVzcG9uc2Uuc3BsaXQoJycpO1xuICAgICAgY29uc3QgYSA9IHR5cGVvZiBhbnN3ZXIgPT09ICdzdHJpbmcnID8gYW5zd2VyLnNwbGl0KCcnKSA6IGFuc3dlcjtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHBhaXJ3aXNlQ29tYmluYXRpb25TY29yZShjLCBhLCBvcHRzKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWRTY29yZSk7XG4gICAgfSk7XG4gIH07XG5cbiAgZGVzY3JpYmUoJ2NvcnJlY3QgcmVzcG9uc2U6IEEnLCAoKSA9PiB7XG4gICAgY29uc3QgYXNzZXJ0QSA9IGFzc2VydFNjb3JlKCdBJyk7XG4gICAgYXNzZXJ0QSgnQScsIDEpO1xuICAgIGFzc2VydEEoJ0InLCAwKTtcbiAgICBhc3NlcnRBKCdDJywgMCk7XG4gICAgYXNzZXJ0QSh7IGZvbzogdHJ1ZSB9LCAwKTtcbiAgICBhc3NlcnRBKFt7IGZvbzogdHJ1ZSB9LCB7IGJhcjogdHJ1ZSB9XSwgMCk7XG4gICAgYXNzZXJ0QSgnJywgMCk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdjb3JyZWN0IHJlc3BvbnNlOiBBQicsICgpID0+IHtcbiAgICBjb25zdCBhc3NlcnRBQiA9IGFzc2VydFNjb3JlKCdBQicpO1xuICAgIGFzc2VydEFCKCdBJywgMCk7XG4gICAgYXNzZXJ0QUIoJ0InLCAwKTtcbiAgICBhc3NlcnRBQignQycsIDApO1xuICAgIGFzc2VydEFCKCcnLCAwKTtcbiAgICBhc3NlcnRBQignQUInLCAxKTtcbiAgICBhc3NlcnRBQignQkEnLCAwKTtcbiAgICBhc3NlcnRBQignQUMnLCAwKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2NvcnJlY3QgcmVzcG9uc2U6IEFBQicsICgpID0+IHtcbiAgICBpdCgndGhyb3dzIGFuIGVycm9yIGJlY2F1c2Ugb2YgZHVwbGljYXRlIGluIGFuc3dlcicsICgpID0+IHtcbiAgICAgIGV4cGVjdCgoKSA9PiBwYWlyd2lzZUNvbWJpbmF0aW9uU2NvcmUoWydBJywgJ0EnXSwgWydBJywgJ0EnXSkpLnRvVGhyb3coaWxsZWdhbEFyZ3VtZW50RXJyb3IoWydBJywgJ0EnXSkpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnY29ycmVjdCByZXNwb25zZTogQUJDJywgKCkgPT4ge1xuICAgIGNvbnN0IGFzc2VydEFCQyA9IGFzc2VydFNjb3JlKCdBQkMnKTtcbiAgICBhc3NlcnRBQkMoJycsIDApO1xuICAgIGFzc2VydEFCQygnQScsIDApO1xuICAgIGFzc2VydEFCQygnQUEnLCAwKTtcbiAgICBhc3NlcnRBQkMoJ0FCJywgMC4zMyk7XG4gICAgYXNzZXJ0QUJDKCdBQycsIDAuMzMpO1xuICAgIGFzc2VydEFCQygnQUFDJywgMCk7XG4gICAgYXNzZXJ0QUJDKCdBQUInLCAwKTtcbiAgICBhc3NlcnRBQkMoJ0JBQScsIDApO1xuICAgIGFzc2VydEFCQygnQUJBJywgMCk7XG4gICAgYXNzZXJ0QUJDKCdBQkFCJywgMCk7XG4gICAgYXNzZXJ0QUJDKCdBQkMnLCAxKTtcbiAgICBhc3NlcnRBQkMoJ0FCQycsIDEpO1xuICAgIGFzc2VydEFCQygnQkNBJywgMC4zMyk7XG4gICAgYXNzZXJ0QUJDKCdDQUInLCAwLjMzKTtcbiAgICBhc3NlcnRBQkMoJ0NCQScsIDApO1xuICAgIGFzc2VydEFCQygnQUNCJywgMC42Nyk7XG4gICAgYXNzZXJ0QUJDKCdCJywgMCk7XG4gICAgYXNzZXJ0QUJDKCdDJywgMCk7XG4gICAgYXNzZXJ0QUJDKCdBQicsIDAuMzMpO1xuICAgIGFzc2VydEFCQygnQkMnLCAwLjMzKTtcbiAgICBhc3NlcnRBQkMoJ0FDJywgMC4zMyk7XG4gICAgYXNzZXJ0QUJDKCdDQScsIDApO1xuICAgIGFzc2VydEFCQygnQ0InLCAwKTtcbiAgICBhc3NlcnRBQkMoJ0JBJywgMCk7XG4gICAgYXNzZXJ0QUJDKCdBQkNEJywgMCk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdjb3JyZWN0IHJlc3BvbnNlOiBBQkNEIC0gb3JkZXIgbXVzdCBiZSBjb21wbGV0ZScsICgpID0+IHtcbiAgICBjb25zdCBhc3NlcnRBQkNEID0gYXNzZXJ0U2NvcmUoJ0FCQ0QnLCB7IG9yZGVyTXVzdEJlQ29tcGxldGU6IHRydWUgfSk7XG4gICAgYXNzZXJ0QUJDRCgnQUJDJywgMCk7XG4gICAgYXNzZXJ0QUJDRCgnQkNEJywgMCk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdjb3JyZWN0IHJlc3BvbnNlOiBBQkNEJywgKCkgPT4ge1xuICAgIGNvbnN0IGFzc2VydEFCQ0QgPSBhc3NlcnRTY29yZSgnQUJDRCcpO1xuICAgIGFzc2VydEFCQ0QoJ0FCQ0QnLCAxKTtcbiAgICBhc3NlcnRBQkNEKCdBQkRDJywgMC44Myk7XG4gICAgYXNzZXJ0QUJDRCgnQUJDJywgMC41KTtcbiAgICBhc3NlcnRBQkNEKCdDREFCJywgMC4zMyk7XG4gICAgYXNzZXJ0QUJDRCgnQ0RCQScsIDAuMTcpO1xuICAgIGFzc2VydEFCQ0QoJ0RDQkEnLCAwKTtcbiAgICBhc3NlcnRBQkNEKCdEQ0FCJywgMC4xNyk7XG4gICAgYXNzZXJ0QUJDRCgnQUJBQicsIDApO1xuICAgIGFzc2VydEFCQ0QoJ0FCJywgMC4xNyk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdjdXN0b20gb3ZlcnJpZGUgLSBhbGxvd0R1cGxpY2F0ZXM6IHRydWUsIG9yZGVyTXVzdEJlQ29tcGxldGU6IGZhbHNlJywgKCkgPT4ge1xuICAgIGRlc2NyaWJlKCdjb3JyZWN0IHJlc3BvbnNlOiBBQUIgLSBkdXBzLCBvcmRlciBpbmNvbXBsZXRlJywgKCkgPT4ge1xuICAgICAgY29uc3QgYXNzZXJ0QUFCID0gYXNzZXJ0U2NvcmUoJ0FBQicsIHtcbiAgICAgICAgYWxsb3dEdXBsaWNhdGVzOiB0cnVlLFxuICAgICAgfSk7XG4gICAgICBhc3NlcnRBQUIoJycsIDApO1xuICAgICAgYXNzZXJ0QUFCKCdBJywgMCk7XG4gICAgICBhc3NlcnRBQUIoJ0FBJywgMC4zMyk7XG4gICAgICBhc3NlcnRBQUIoJ0FBQycsIDAuMzMpO1xuICAgICAgYXNzZXJ0QUFCKCdBQUInLCAxKTtcbiAgICAgIGFzc2VydEFBQignQkFBJywgMC4zMyk7XG4gICAgICBhc3NlcnRBQUIoJ0FCQScsIDAuNjcpO1xuICAgICAgYXNzZXJ0QUFCKCdBQkFCJywgMCk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG5cbmNvbnN0IGNvcnJlY3RSZXNwb25zZSA9IFsnYzEnLCAnYzInLCAnYzMnLCAnYzQnXTtcbmNvbnN0IGFsdGVybmF0ZVJlc3BvbnNlcyA9IFt7IHJlc3BvbnNlOiBbJ2M0JywgJ2MzJywgJ2MyJywgJ2MxJ10gfV07XG5cbmRlc2NyaWJlKCdzY29yZScsICgpID0+IHtcbiAgbGV0IGJhc2VRdWVzdGlvbiA9IHtcbiAgICBjb3JyZWN0UmVzcG9uc2U6IGNvcnJlY3RSZXNwb25zZSxcbiAgICBhbHRlcm5hdGVSZXNwb25zZXM6IGFsdGVybmF0ZVJlc3BvbnNlcyxcbiAgfTtcblxuICBkZXNjcmliZSgncGFydGlhbCBzY29yaW5nJywgKCkgPT4ge1xuICAgIGxldCBxdWVzdGlvbiA9IG1lcmdlKGNsb25lRGVlcChiYXNlUXVlc3Rpb24pLCB7XG4gICAgICBwYXJ0aWFsU2NvcmluZzogdHJ1ZSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGFzc2VydFNjb3JlID0gKHZhbHVlLCBleHBlY3RlZFNjb3JlKSA9PiB7XG4gICAgICBpdChgJHtleHBlY3RlZFNjb3JlfSBmb3I6ICR7dmFsdWV9YCwgKCkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBzY29yZShxdWVzdGlvbiwgeyB2YWx1ZSB9KTtcblxuICAgICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkU2NvcmUpO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGFzc2VydFNjb3JlU2Vzc2lvbk5vdFNldCA9IChzZXNzaW9uKSA9PiB7XG4gICAgICBpdChgcmV0dXJucyAwIGlmIHNlc3Npb24gaXM6ICR7SlNPTi5zdHJpbmdpZnkoc2Vzc2lvbil9YCwgKCkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBzY29yZShxdWVzdGlvbiwgc2Vzc2lvbik7XG5cbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbCgwKTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3NlcnRTY29yZVNlc3Npb25Ob3RTZXQodW5kZWZpbmVkKTtcbiAgICBhc3NlcnRTY29yZVNlc3Npb25Ob3RTZXQobnVsbCk7XG4gICAgYXNzZXJ0U2NvcmVTZXNzaW9uTm90U2V0KHt9KTtcblxuICAgIC8vIE1haW4gQ29ycmVjdCBSZXNwb25zZXNcbiAgICBhc3NlcnRTY29yZShbXSwgMCk7XG4gICAgYXNzZXJ0U2NvcmUoWydjMSddLCAwKTtcbiAgICBhc3NlcnRTY29yZShbJ2MxJywgJ2MyJ10sIDAuMTcpO1xuICAgIGFzc2VydFNjb3JlKFsnYzEnLCAnYzInLCAnYzMnXSwgMC41KTtcbiAgICBhc3NlcnRTY29yZShbJ2MxJywgJ2MyJywgJ2MzJywgJ2M0J10sIDEpO1xuXG4gICAgLy8gQWx0ZXJuYXRlIENvcnJlY3QgUmVzcG9uc2VzXG4gICAgYXNzZXJ0U2NvcmUoW10sIDApO1xuICAgIGFzc2VydFNjb3JlKFsnYzQnXSwgMCk7XG4gICAgYXNzZXJ0U2NvcmUoWydjNCcsICdjMyddLCAwLjE3KTtcbiAgICBhc3NlcnRTY29yZShbJ2M0JywgJ2MzJywgJ2MyJ10sIDAuNSk7XG4gICAgYXNzZXJ0U2NvcmUoWydjNCcsICdjMycsICdjMicsICdjMSddLCAxKTtcbiAgfSk7XG59KTtcbmRlc2NyaWJlKCdmbGF0dGVuQ29ycmVjdCcsICgpID0+IHtcbiAgZGVzY3JpYmUoJ2NvcnJlY3RSZXNwb25zZSBpcyBhbiBhcnJheSBvZiBpZGVudGlmaWVycycsICgpID0+IHtcbiAgICBsZXQgcXVlc3Rpb24gPSB7XG4gICAgICBjb3JyZWN0UmVzcG9uc2U6IGNvcnJlY3RSZXNwb25zZS5tYXAoKHYpID0+ICh7IGlkOiB2IH0pKSxcbiAgICB9O1xuXG4gICAgaXQoJ3JldHVybnMgY29ycmVjdFJlc3BvbnNlIGZpZWxkIHZhbHVlJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGZsYXR0ZW5Db3JyZWN0KHF1ZXN0aW9uKSkudG9FcXVhbChjb3JyZWN0UmVzcG9uc2UpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiOztBQUFBLElBQUFBLFFBQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLFNBQUEsR0FBQUQsT0FBQTtBQUVBRSxRQUFRLENBQUMsMEJBQTBCLEVBQUUsTUFBTTtFQUN6QyxNQUFNQyxXQUFXLEdBQUdBLENBQUNDLGVBQWUsRUFBRUMsSUFBSSxLQUFLLENBQUNDLE1BQU0sRUFBRUMsYUFBYSxLQUFLO0lBQ3hFQyxFQUFFLENBQUMsR0FBR0QsYUFBYSxRQUFRLE9BQU9ELE1BQU0sS0FBSyxRQUFRLEdBQUdBLE1BQU0sR0FBR0csSUFBSSxDQUFDQyxTQUFTLENBQUNKLE1BQU0sQ0FBQyxFQUFFLEVBQUUsTUFBTTtNQUMvRixNQUFNSyxDQUFDLEdBQUdQLGVBQWUsQ0FBQ1EsS0FBSyxDQUFDLEVBQUUsQ0FBQztNQUNuQyxNQUFNQyxDQUFDLEdBQUcsT0FBT1AsTUFBTSxLQUFLLFFBQVEsR0FBR0EsTUFBTSxDQUFDTSxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUdOLE1BQU07TUFDaEUsTUFBTVEsTUFBTSxHQUFHLElBQUFDLGlDQUF3QixFQUFDSixDQUFDLEVBQUVFLENBQUMsRUFBRVIsSUFBSSxDQUFDO01BQ25EVyxNQUFNLENBQUNGLE1BQU0sQ0FBQyxDQUFDRyxPQUFPLENBQUNWLGFBQWEsQ0FBQztJQUN2QyxDQUFDLENBQUM7RUFDSixDQUFDO0VBRURMLFFBQVEsQ0FBQyxxQkFBcUIsRUFBRSxNQUFNO0lBQ3BDLE1BQU1nQixPQUFPLEdBQUdmLFdBQVcsQ0FBQyxHQUFHLENBQUM7SUFDaENlLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ2ZBLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ2ZBLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ2ZBLE9BQU8sQ0FBQztNQUFFQyxHQUFHLEVBQUU7SUFBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3pCRCxPQUFPLENBQUMsQ0FBQztNQUFFQyxHQUFHLEVBQUU7SUFBSyxDQUFDLEVBQUU7TUFBRUMsR0FBRyxFQUFFO0lBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzFDRixPQUFPLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztFQUNoQixDQUFDLENBQUM7RUFFRmhCLFFBQVEsQ0FBQyxzQkFBc0IsRUFBRSxNQUFNO0lBQ3JDLE1BQU1tQixRQUFRLEdBQUdsQixXQUFXLENBQUMsSUFBSSxDQUFDO0lBQ2xDa0IsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDaEJBLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ2hCQSxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUNoQkEsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDZkEsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDakJBLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ2pCQSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztFQUNuQixDQUFDLENBQUM7RUFFRm5CLFFBQVEsQ0FBQyx1QkFBdUIsRUFBRSxNQUFNO0lBQ3RDTSxFQUFFLENBQUMsZ0RBQWdELEVBQUUsTUFBTTtNQUN6RFEsTUFBTSxDQUFDLE1BQU0sSUFBQUQsaUNBQXdCLEVBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDTyxPQUFPLENBQUMsSUFBQUMsNkJBQW9CLEVBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMxRyxDQUFDLENBQUM7RUFDSixDQUFDLENBQUM7RUFFRnJCLFFBQVEsQ0FBQyx1QkFBdUIsRUFBRSxNQUFNO0lBQ3RDLE1BQU1zQixTQUFTLEdBQUdyQixXQUFXLENBQUMsS0FBSyxDQUFDO0lBQ3BDcUIsU0FBUyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDaEJBLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ2pCQSxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNsQkEsU0FBUyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUM7SUFDckJBLFNBQVMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDO0lBQ3JCQSxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUNuQkEsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDbkJBLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ25CQSxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUNuQkEsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDcEJBLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ25CQSxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUNuQkEsU0FBUyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUM7SUFDdEJBLFNBQVMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDO0lBQ3RCQSxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUNuQkEsU0FBUyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUM7SUFDdEJBLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ2pCQSxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUNqQkEsU0FBUyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUM7SUFDckJBLFNBQVMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDO0lBQ3JCQSxTQUFTLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQztJQUNyQkEsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDbEJBLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ2xCQSxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNsQkEsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7RUFDdEIsQ0FBQyxDQUFDO0VBRUZ0QixRQUFRLENBQUMsaURBQWlELEVBQUUsTUFBTTtJQUNoRSxNQUFNdUIsVUFBVSxHQUFHdEIsV0FBVyxDQUFDLE1BQU0sRUFBRTtNQUFFdUIsbUJBQW1CLEVBQUU7SUFBSyxDQUFDLENBQUM7SUFDckVELFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ3BCQSxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztFQUN0QixDQUFDLENBQUM7RUFFRnZCLFFBQVEsQ0FBQyx3QkFBd0IsRUFBRSxNQUFNO0lBQ3ZDLE1BQU11QixVQUFVLEdBQUd0QixXQUFXLENBQUMsTUFBTSxDQUFDO0lBQ3RDc0IsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDckJBLFVBQVUsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDO0lBQ3hCQSxVQUFVLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQztJQUN0QkEsVUFBVSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUM7SUFDeEJBLFVBQVUsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDO0lBQ3hCQSxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUNyQkEsVUFBVSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUM7SUFDeEJBLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ3JCQSxVQUFVLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQztFQUN4QixDQUFDLENBQUM7RUFFRnZCLFFBQVEsQ0FBQyxxRUFBcUUsRUFBRSxNQUFNO0lBQ3BGQSxRQUFRLENBQUMsZ0RBQWdELEVBQUUsTUFBTTtNQUMvRCxNQUFNeUIsU0FBUyxHQUFHeEIsV0FBVyxDQUFDLEtBQUssRUFBRTtRQUNuQ3lCLGVBQWUsRUFBRTtNQUNuQixDQUFDLENBQUM7TUFDRkQsU0FBUyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7TUFDaEJBLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO01BQ2pCQSxTQUFTLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQztNQUNyQkEsU0FBUyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUM7TUFDdEJBLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO01BQ25CQSxTQUFTLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQztNQUN0QkEsU0FBUyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUM7TUFDdEJBLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ3RCLENBQUMsQ0FBQztFQUNKLENBQUMsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUVGLE1BQU12QixlQUFlLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUM7QUFDaEQsTUFBTXlCLGtCQUFrQixHQUFHLENBQUM7RUFBRUMsUUFBUSxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtBQUFFLENBQUMsQ0FBQztBQUVuRTVCLFFBQVEsQ0FBQyxPQUFPLEVBQUUsTUFBTTtFQUN0QixJQUFJNkIsWUFBWSxHQUFHO0lBQ2pCM0IsZUFBZSxFQUFFQSxlQUFlO0lBQ2hDeUIsa0JBQWtCLEVBQUVBO0VBQ3RCLENBQUM7RUFFRDNCLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxNQUFNO0lBQ2hDLElBQUk4QixRQUFRLEdBQUcsSUFBQUMsZUFBSyxFQUFDLElBQUFDLG1CQUFTLEVBQUNILFlBQVksQ0FBQyxFQUFFO01BQzVDSSxjQUFjLEVBQUU7SUFDbEIsQ0FBQyxDQUFDO0lBRUYsTUFBTWhDLFdBQVcsR0FBR0EsQ0FBQ2lDLEtBQUssRUFBRTdCLGFBQWEsS0FBSztNQUM1Q0MsRUFBRSxDQUFDLEdBQUdELGFBQWEsU0FBUzZCLEtBQUssRUFBRSxFQUFFLE1BQU07UUFDekMsTUFBTXRCLE1BQU0sR0FBRyxJQUFBdUIsY0FBSyxFQUFDTCxRQUFRLEVBQUU7VUFBRUk7UUFBTSxDQUFDLENBQUM7UUFFekNwQixNQUFNLENBQUNGLE1BQU0sQ0FBQyxDQUFDRyxPQUFPLENBQUNWLGFBQWEsQ0FBQztNQUN2QyxDQUFDLENBQUM7SUFDSixDQUFDO0lBRUQsTUFBTStCLHdCQUF3QixHQUFJQyxPQUFPLElBQUs7TUFDNUMvQixFQUFFLENBQUMsNEJBQTRCQyxJQUFJLENBQUNDLFNBQVMsQ0FBQzZCLE9BQU8sQ0FBQyxFQUFFLEVBQUUsTUFBTTtRQUM5RCxNQUFNekIsTUFBTSxHQUFHLElBQUF1QixjQUFLLEVBQUNMLFFBQVEsRUFBRU8sT0FBTyxDQUFDO1FBRXZDdkIsTUFBTSxDQUFDRixNQUFNLENBQUMsQ0FBQ0csT0FBTyxDQUFDLENBQUMsQ0FBQztNQUMzQixDQUFDLENBQUM7SUFDSixDQUFDO0lBRURxQix3QkFBd0IsQ0FBQ0UsU0FBUyxDQUFDO0lBQ25DRix3QkFBd0IsQ0FBQyxJQUFJLENBQUM7SUFDOUJBLHdCQUF3QixDQUFDLENBQUMsQ0FBQyxDQUFDOztJQUU1QjtJQUNBbkMsV0FBVyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDbEJBLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN0QkEsV0FBVyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQztJQUMvQkEsV0FBVyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUM7SUFDcENBLFdBQVcsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQzs7SUFFeEM7SUFDQUEsV0FBVyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDbEJBLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN0QkEsV0FBVyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQztJQUMvQkEsV0FBVyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUM7SUFDcENBLFdBQVcsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUMxQyxDQUFDLENBQUM7QUFDSixDQUFDLENBQUM7QUFDRkQsUUFBUSxDQUFDLGdCQUFnQixFQUFFLE1BQU07RUFDL0JBLFFBQVEsQ0FBQyw0Q0FBNEMsRUFBRSxNQUFNO0lBQzNELElBQUk4QixRQUFRLEdBQUc7TUFDYjVCLGVBQWUsRUFBRUEsZUFBZSxDQUFDcUMsR0FBRyxDQUFFQyxDQUFDLEtBQU07UUFBRUMsRUFBRSxFQUFFRDtNQUFFLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRURsQyxFQUFFLENBQUMscUNBQXFDLEVBQUUsTUFBTTtNQUM5Q1EsTUFBTSxDQUFDLElBQUE0Qix1QkFBYyxFQUFDWixRQUFRLENBQUMsQ0FBQyxDQUFDZixPQUFPLENBQUNiLGVBQWUsQ0FBQztJQUMzRCxDQUFDLENBQUM7RUFDSixDQUFDLENBQUM7QUFDSixDQUFDLENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=
|