@pie-lib/rubric 1.2.0-next.2 → 1.2.0-next.20
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 +69 -16
- package/LICENSE.md +5 -0
- package/lib/authoring.js +24 -19
- package/lib/authoring.js.map +1 -1
- package/lib/index.js +1 -1
- package/lib/point-menu.js +1 -1
- package/package.json +3 -3
- package/src/__tests__/rubric.test.jsx +6 -7
- package/src/authoring.jsx +33 -29
- package/lib/__tests__/rubric.test.js +0 -432
package/CHANGELOG.md
CHANGED
|
@@ -3,61 +3,114 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
-
# [1.
|
|
6
|
+
# [1.2.0-next.20](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@1.2.0-next.19...@pie-lib/rubric@1.2.0-next.20) (2026-03-18)
|
|
7
7
|
|
|
8
8
|
**Note:** Version bump only for package @pie-lib/rubric
|
|
9
9
|
|
|
10
|
+
# [1.2.0-next.19](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@1.2.0-next.18...@pie-lib/rubric@1.2.0-next.19) (2026-03-18)
|
|
10
11
|
|
|
12
|
+
**Note:** Version bump only for package @pie-lib/rubric
|
|
11
13
|
|
|
14
|
+
# [1.2.0-next.18](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@1.2.0-next.17...@pie-lib/rubric@1.2.0-next.18) (2026-03-18)
|
|
12
15
|
|
|
16
|
+
**Note:** Version bump only for package @pie-lib/rubric
|
|
13
17
|
|
|
14
|
-
# [1.
|
|
18
|
+
# [1.2.0-next.17](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@1.2.0-next.16...@pie-lib/rubric@1.2.0-next.17) (2026-03-11)
|
|
15
19
|
|
|
16
20
|
**Note:** Version bump only for package @pie-lib/rubric
|
|
17
21
|
|
|
22
|
+
# [1.2.0-next.16](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@1.2.0-next.15...@pie-lib/rubric@1.2.0-next.16) (2026-03-11)
|
|
18
23
|
|
|
24
|
+
**Note:** Version bump only for package @pie-lib/rubric
|
|
19
25
|
|
|
26
|
+
# [1.2.0-next.15](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@1.2.0-next.14...@pie-lib/rubric@1.2.0-next.15) (2026-03-09)
|
|
20
27
|
|
|
28
|
+
**Note:** Version bump only for package @pie-lib/rubric
|
|
21
29
|
|
|
22
|
-
# [1.
|
|
30
|
+
# [1.2.0-next.14](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@1.2.0-next.13...@pie-lib/rubric@1.2.0-next.14) (2026-03-09)
|
|
31
|
+
|
|
32
|
+
### Bug Fixes
|
|
33
|
+
|
|
34
|
+
- **rubric:** rubricless intructions fix PD-5657 ([7a05af5](https://github.com/pie-framework/pie-lib/commit/7a05af5122eb499250f89ac9f0115cc3e49f5c92))
|
|
35
|
+
|
|
36
|
+
# [1.2.0-next.13](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@1.2.0-next.12...@pie-lib/rubric@1.2.0-next.13) (2026-03-06)
|
|
23
37
|
|
|
38
|
+
**Note:** Version bump only for package @pie-lib/rubric
|
|
39
|
+
|
|
40
|
+
# [1.2.0-next.12](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@1.2.0-next.11...@pie-lib/rubric@1.2.0-next.12) (2026-03-04)
|
|
24
41
|
|
|
25
42
|
### Bug Fixes
|
|
26
43
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
* remove exports and publish ([#2068](https://github.com/pie-framework/pie-lib/issues/2068)) ([60a96cd](https://github.com/pie-framework/pie-lib/commit/60a96cde0ec65f6b1cac0ae329aa33a0abc50d05))
|
|
30
|
-
* rubric - rubricless style ([57701b2](https://github.com/pie-framework/pie-lib/commit/57701b28d49f88f785ef1367e5b658bcf85c79ea))
|
|
31
|
-
* updated tip-tap with mui instead of material-ui [PD-5141] ([880d3ab](https://github.com/pie-framework/pie-lib/commit/880d3ab1d63aa12c7e975c882f50624200565737))
|
|
32
|
-
* use fixed lib deps ([de7c64d](https://github.com/pie-framework/pie-lib/commit/de7c64d14f13259fe44d47405e4421baef21e24e))
|
|
44
|
+
- remove console.log ([ca6677a](https://github.com/pie-framework/pie-lib/commit/ca6677a68bfbbace5a16eac36ee4633c191fd49e))
|
|
45
|
+
- **rubric:** 'Exclude zero' functionality fix PD-5663 ([003ea5c](https://github.com/pie-framework/pie-lib/commit/003ea5c7bcd3961430fddbfcafef7e8d74d01cf0))
|
|
33
46
|
|
|
47
|
+
# [1.2.0-next.11](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@1.2.0-next.9...@pie-lib/rubric@1.2.0-next.11) (2026-02-26)
|
|
34
48
|
|
|
35
|
-
|
|
49
|
+
**Note:** Version bump only for package @pie-lib/rubric
|
|
36
50
|
|
|
37
|
-
|
|
38
|
-
* PD-5258 rubric fix ([de878e0](https://github.com/pie-framework/pie-lib/commit/de878e0b02a3181985f93f1cea16f93c36d826a4))
|
|
39
|
-
* sync latest changes from dev ([c936e9c](https://github.com/pie-framework/pie-lib/commit/c936e9c7f9e095e7d9b9805ac2bf72bd271e05f1))
|
|
40
|
-
* **rubric:** migrate rubric package to material-ui 5 PD-5258 ([1b33f99](https://github.com/pie-framework/pie-lib/commit/1b33f99c073eaaa32eac36f848a814ade4c97593))
|
|
51
|
+
# [1.2.0-next.9](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@1.2.0-next.8...@pie-lib/rubric@1.2.0-next.9) (2026-02-25)
|
|
41
52
|
|
|
53
|
+
**Note:** Version bump only for package @pie-lib/rubric
|
|
42
54
|
|
|
55
|
+
# [1.2.0-next.8](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@1.2.0-next.7...@pie-lib/rubric@1.2.0-next.8) (2026-02-25)
|
|
43
56
|
|
|
57
|
+
**Note:** Version bump only for package @pie-lib/rubric
|
|
44
58
|
|
|
59
|
+
# [1.2.0-next.7](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@1.2.0-next.6...@pie-lib/rubric@1.2.0-next.7) (2026-02-25)
|
|
45
60
|
|
|
46
|
-
|
|
61
|
+
**Note:** Version bump only for package @pie-lib/rubric
|
|
62
|
+
|
|
63
|
+
# [1.2.0-next.6](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@1.2.0-next.5...@pie-lib/rubric@1.2.0-next.6) (2026-02-25)
|
|
64
|
+
|
|
65
|
+
**Note:** Version bump only for package @pie-lib/rubric
|
|
66
|
+
|
|
67
|
+
# [1.2.0-next.5](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@1.2.0-next.4...@pie-lib/rubric@1.2.0-next.5) (2026-02-25)
|
|
47
68
|
|
|
48
69
|
**Note:** Version bump only for package @pie-lib/rubric
|
|
49
70
|
|
|
71
|
+
# [1.2.0-next.4](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@1.2.0-next.3...@pie-lib/rubric@1.2.0-next.4) (2026-02-24)
|
|
72
|
+
|
|
73
|
+
**Note:** Version bump only for package @pie-lib/rubric
|
|
50
74
|
|
|
75
|
+
# [1.2.0-next.3](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@1.2.0-next.1...@pie-lib/rubric@1.2.0-next.3) (2026-02-24)
|
|
51
76
|
|
|
77
|
+
### Bug Fixes
|
|
52
78
|
|
|
79
|
+
- made sure placeholder works, math item does not blur editor, table toolbar contains correct extensions [PD-5616] [PD-5584] [PD-5627] ([9bc768f](https://github.com/pie-framework/pie-lib/commit/9bc768f4e4301f91cc768475f0defa545ee7b43d))
|
|
53
80
|
|
|
54
|
-
|
|
81
|
+
# [1.1.0-next.4](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@1.1.0-next.2...@pie-lib/rubric@1.1.0-next.4) (2026-01-27)
|
|
55
82
|
|
|
56
83
|
**Note:** Version bump only for package @pie-lib/rubric
|
|
57
84
|
|
|
85
|
+
# [1.1.0-next.2](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@1.1.0-next.1...@pie-lib/rubric@1.1.0-next.2) (2026-01-26)
|
|
86
|
+
|
|
87
|
+
**Note:** Version bump only for package @pie-lib/rubric
|
|
88
|
+
|
|
89
|
+
# [1.1.0-next.1](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.28.2...@pie-lib/rubric@1.1.0-next.1) (2026-01-26)
|
|
90
|
+
|
|
91
|
+
### Bug Fixes
|
|
92
|
+
|
|
93
|
+
- remove carets from [@pie-lib](https://github.com/pie-lib) dependencies and configure lerna to use exact versions ([c9cd800](https://github.com/pie-framework/pie-lib/commit/c9cd800844abca09e7acf1fd35b2ddf51a6d86df))
|
|
94
|
+
- remove carret, point to specific libs version ([09939a5](https://github.com/pie-framework/pie-lib/commit/09939a5aca19d7dda03d62c93d4d524f98dd69da))
|
|
95
|
+
- remove exports and publish ([#2068](https://github.com/pie-framework/pie-lib/issues/2068)) ([60a96cd](https://github.com/pie-framework/pie-lib/commit/60a96cde0ec65f6b1cac0ae329aa33a0abc50d05))
|
|
96
|
+
- rubric - rubricless style ([57701b2](https://github.com/pie-framework/pie-lib/commit/57701b28d49f88f785ef1367e5b658bcf85c79ea))
|
|
97
|
+
- updated tip-tap with mui instead of material-ui [PD-5141] ([880d3ab](https://github.com/pie-framework/pie-lib/commit/880d3ab1d63aa12c7e975c882f50624200565737))
|
|
98
|
+
- use fixed lib deps ([de7c64d](https://github.com/pie-framework/pie-lib/commit/de7c64d14f13259fe44d47405e4421baef21e24e))
|
|
58
99
|
|
|
100
|
+
### Features
|
|
101
|
+
|
|
102
|
+
- bump react and react-dom ([01dc19e](https://github.com/pie-framework/pie-lib/commit/01dc19e88bbc8d372c561d1511df1a82937d45af))
|
|
103
|
+
- PD-5258 rubric fix ([de878e0](https://github.com/pie-framework/pie-lib/commit/de878e0b02a3181985f93f1cea16f93c36d826a4))
|
|
104
|
+
- sync latest changes from dev ([c936e9c](https://github.com/pie-framework/pie-lib/commit/c936e9c7f9e095e7d9b9805ac2bf72bd271e05f1))
|
|
105
|
+
- **rubric:** migrate rubric package to material-ui 5 PD-5258 ([1b33f99](https://github.com/pie-framework/pie-lib/commit/1b33f99c073eaaa32eac36f848a814ade4c97593))
|
|
59
106
|
|
|
107
|
+
# [1.0.0-next.0](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.28.3-next.0...@pie-lib/rubric@1.0.0-next.0) (2026-01-19)
|
|
60
108
|
|
|
109
|
+
**Note:** Version bump only for package @pie-lib/rubric
|
|
110
|
+
|
|
111
|
+
## [0.28.3-next.0](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.42.0-mui-update.0...@pie-lib/rubric@0.28.3-next.0) (2026-01-19)
|
|
112
|
+
|
|
113
|
+
**Note:** Version bump only for package @pie-lib/rubric
|
|
61
114
|
|
|
62
115
|
## [0.28.2](https://github.com/pie-framework/pie-lib/compare/@pie-lib/rubric@0.28.1...@pie-lib/rubric@0.28.2) (2025-11-27)
|
|
63
116
|
|
package/LICENSE.md
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
Copyright 2019 CoreSpring Inc
|
|
2
|
+
|
|
3
|
+
Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.
|
|
4
|
+
|
|
5
|
+
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
package/lib/authoring.js
CHANGED
|
@@ -188,14 +188,19 @@ var Container = (0, _styles.styled)('div')(function (_ref6) {
|
|
|
188
188
|
margin: theme.spacing(1)
|
|
189
189
|
};
|
|
190
190
|
});
|
|
191
|
-
var
|
|
191
|
+
var StyledInputContainer = (0, _styles.styled)(_configUi.InputContainer)(function (_ref7) {
|
|
192
192
|
var theme = _ref7.theme;
|
|
193
193
|
return {
|
|
194
194
|
width: '100%',
|
|
195
|
-
paddingTop: theme.spacing(2),
|
|
195
|
+
paddingTop: theme.spacing(2.5),
|
|
196
196
|
marginBottom: theme.spacing(2),
|
|
197
|
-
|
|
197
|
+
marginTop: theme.spacing(1),
|
|
198
|
+
'& .MuiFormControl-root': {
|
|
198
199
|
width: '100%'
|
|
200
|
+
},
|
|
201
|
+
'& > .MuiFormLabel-root.MuiInputLabel-shrink': {
|
|
202
|
+
fontSize: theme.typography.fontSize + 2,
|
|
203
|
+
transform: 'translate(0, 1.5px) scale(0.75)'
|
|
199
204
|
}
|
|
200
205
|
};
|
|
201
206
|
});
|
|
@@ -303,17 +308,16 @@ var RawAuthoring = exports.RawAuthoring = /*#__PURE__*/function (_React$Componen
|
|
|
303
308
|
excludeZero: !value.excludeZero
|
|
304
309
|
}));
|
|
305
310
|
});
|
|
311
|
+
(0, _defineProperty2["default"])(_this, "getPointForIndex", function (index, value) {
|
|
312
|
+
var maxPoint = value.excludeZero ? value.points.length - 1 + 1 : value.points.length - 1;
|
|
313
|
+
return maxPoint - index;
|
|
314
|
+
});
|
|
315
|
+
(0, _defineProperty2["default"])(_this, "getMaxPoint", function (value) {
|
|
316
|
+
return value.excludeZero ? value.points.length : value.points.length - 1;
|
|
317
|
+
});
|
|
306
318
|
(0, _defineProperty2["default"])(_this, "shouldRenderPoint", function (index, value) {
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
} else {
|
|
310
|
-
if (index < value.points.length - 1) {
|
|
311
|
-
return true;
|
|
312
|
-
} else if (index === value.points.length - 1) {
|
|
313
|
-
return false;
|
|
314
|
-
}
|
|
315
|
-
return true;
|
|
316
|
-
}
|
|
319
|
+
var point = _this.getPointForIndex(index, value);
|
|
320
|
+
return point > 0 || !value.excludeZero;
|
|
317
321
|
});
|
|
318
322
|
(0, _defineProperty2["default"])(_this, "onPointMenuChange", function (index, clickedItem) {
|
|
319
323
|
if (clickedItem === 'sample') {
|
|
@@ -370,7 +374,7 @@ var RawAuthoring = exports.RawAuthoring = /*#__PURE__*/function (_React$Componen
|
|
|
370
374
|
}
|
|
371
375
|
|
|
372
376
|
// for rubric value is computed based on points
|
|
373
|
-
var maxPointsValue =
|
|
377
|
+
var maxPointsValue = rubricless ? maxPoints : value.excludeZero ? value.points.length : value.points.length - 1;
|
|
374
378
|
return /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement(RubricTitle, {
|
|
375
379
|
variant: "h5"
|
|
376
380
|
}, "Rubric"), /*#__PURE__*/_react["default"].createElement(_FormGroup["default"], {
|
|
@@ -386,7 +390,7 @@ var RawAuthoring = exports.RawAuthoring = /*#__PURE__*/function (_React$Componen
|
|
|
386
390
|
checked: value.excludeZero,
|
|
387
391
|
onChange: this.excludeZeros
|
|
388
392
|
})
|
|
389
|
-
})), rubriclessInstructionEnabled && rubricless && /*#__PURE__*/_react["default"].createElement(
|
|
393
|
+
})), rubriclessInstructionEnabled && rubricless && /*#__PURE__*/_react["default"].createElement(StyledInputContainer, {
|
|
390
394
|
label: rubriclessInstruction.label
|
|
391
395
|
}, /*#__PURE__*/_react["default"].createElement(_editableHtmlTipTap["default"], {
|
|
392
396
|
markup: value.rubriclessInstruction || '',
|
|
@@ -399,8 +403,9 @@ var RawAuthoring = exports.RawAuthoring = /*#__PURE__*/function (_React$Componen
|
|
|
399
403
|
}, {
|
|
400
404
|
language: 'special'
|
|
401
405
|
}],
|
|
402
|
-
mathMlOptions: mathMlOptions
|
|
403
|
-
|
|
406
|
+
mathMlOptions: mathMlOptions,
|
|
407
|
+
autoWidthToolbar: true
|
|
408
|
+
})), /*#__PURE__*/_react["default"].createElement("div", null, rubricless ? /*#__PURE__*/_react["default"].createElement(Rubricless, null) : /*#__PURE__*/_react["default"].createElement(Container, null, /*#__PURE__*/_react["default"].createElement(_dnd.DragDropContext, {
|
|
404
409
|
onDragEnd: this.dragEnd
|
|
405
410
|
}, /*#__PURE__*/_react["default"].createElement(_dnd.Droppable, {
|
|
406
411
|
droppableId: "droppable"
|
|
@@ -416,7 +421,7 @@ var RawAuthoring = exports.RawAuthoring = /*#__PURE__*/function (_React$Componen
|
|
|
416
421
|
return /*#__PURE__*/_react["default"].createElement(ConfigHolder, (0, _extends2["default"])({
|
|
417
422
|
ref: provided.innerRef
|
|
418
423
|
}, provided.draggableProps, provided.dragHandleProps), /*#__PURE__*/_react["default"].createElement(PointConfig, {
|
|
419
|
-
points:
|
|
424
|
+
points: _this2.getPointForIndex(index, value),
|
|
420
425
|
content: p,
|
|
421
426
|
error: pointsDescriptorsErrors && pointsDescriptorsErrors[value.points.length - 1 - index],
|
|
422
427
|
sampleAnswer: value.sampleAnswers && value.sampleAnswers[index],
|
|
@@ -488,4 +493,4 @@ Reverse.propTypes = {
|
|
|
488
493
|
onChange: _propTypes["default"].func
|
|
489
494
|
};
|
|
490
495
|
var _default = exports["default"] = Reverse;
|
|
491
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9wcm9wVHlwZXMiLCJfc3R5bGVzIiwiX0lucHV0TGFiZWwiLCJfT3V0bGluZWRJbnB1dCIsIl9TZWxlY3QiLCJfRm9ybUNvbnRyb2wiLCJfTWVudUl0ZW0iLCJfbG9kYXNoRXMiLCJfQ2hlY2tib3giLCJfRm9ybUdyb3VwIiwiX0Zvcm1Db250cm9sTGFiZWwiLCJfVHlwb2dyYXBoeSIsIl9EcmFnSW5kaWNhdG9yIiwiX2RuZCIsIl9kZWJ1ZyIsIl9wb2ludE1lbnUiLCJfZWRpdGFibGVIdG1sVGlwVGFwIiwiX2NvbmZpZ1VpIiwiX2NvbG9ycyIsIm93bktleXMiLCJlIiwiciIsInQiLCJPYmplY3QiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwibyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwiX2NhbGxTdXBlciIsIl9nZXRQcm90b3R5cGVPZjIiLCJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybjIiLCJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwiUmVmbGVjdCIsImNvbnN0cnVjdCIsImNvbnN0cnVjdG9yIiwiQm9vbGVhbiIsInByb3RvdHlwZSIsInZhbHVlT2YiLCJjYWxsIiwibG9nIiwiZGVidWciLCJyZW9yZGVyIiwibGlzdCIsInN0YXJ0SW5kZXgiLCJlbmRJbmRleCIsInJlc3VsdCIsIkFycmF5IiwiZnJvbSIsIl9yZXN1bHQkc3BsaWNlIiwic3BsaWNlIiwiX3Jlc3VsdCRzcGxpY2UyIiwiX3NsaWNlZFRvQXJyYXkyIiwicmVtb3ZlZCIsIlJ1YnJpY1R5cGUiLCJleHBvcnRzIiwiUHJvcFR5cGVzIiwic2hhcGUiLCJleGNsdWRlWmVybyIsImJvb2wiLCJwb2ludHMiLCJhcnJheU9mIiwic3RyaW5nIiwic2FtcGxlQW5zd2VycyIsIm1heFBvaW50cyIsIm51bWJlciIsInJ1YnJpY2xlc3NJbnN0cnVjdGlvbiIsIk1heFBvaW50cyIsInByb3BzIiwidmFsdWUiLCJvbkNoYW5nZSIsIm1heCIsImxhYmVsSWQiLCJjcmVhdGVFbGVtZW50Iiwic3giLCJtaW5XaWR0aCIsIm0iLCJ2YXJpYW50IiwiaWQiLCJsYWJlbCIsInRhcmdldCIsImlucHV0IiwiTWVudVByb3BzIiwidHJhbnNpdGlvbkR1cmF0aW9uIiwiZW50ZXIiLCJleGl0IiwicmFuZ2UiLCJtYXAiLCJ2Iiwia2V5IiwiY29uY2F0IiwiY2hlY2tTYW1wbGVBbnN3ZXIiLCJzYW1wbGVBbnN3ZXIiLCJSb3ciLCJzdHlsZWQiLCJkaXNwbGF5Iiwid2lkdGgiLCJwb3NpdGlvbiIsIkVkaXRvckRpdiIsIl9yZWYiLCJ0aGVtZSIsImJhY2tncm91bmRDb2xvciIsInBhbGV0dGUiLCJjb21tb24iLCJ3aGl0ZSIsIkRyYWdJbmRpY2F0b3JTdHlsZWQiLCJEcmFnSW5kaWNhdG9yIiwiX3JlZjIiLCJwYWRkaW5nVG9wIiwic3BhY2luZyIsImNvbG9yIiwiZ3JleSIsIlBvaW50c0xhYmVsIiwiVHlwb2dyYXBoeSIsIl9yZWYzIiwicGFkZGluZ0JvdHRvbSIsInRleHRUcmFuc2Zvcm0iLCJTYW1wbGVBbnN3ZXJzRWRpdG9yIiwiX3JlZjQiLCJwYWRkaW5nTGVmdCIsIkVycm9yVGV4dCIsIl9yZWY1IiwiZm9udFNpemUiLCJ0eXBvZ3JhcGh5IiwiZXJyb3IiLCJtYWluIiwiUG9pbnRNZW51V3JhcHBlciIsInJpZ2h0IiwiUG9pbnRDb25maWciLCJjb250ZW50IiwiX3Byb3BzJG1hdGhNbE9wdGlvbnMiLCJtYXRoTWxPcHRpb25zIiwiX3Byb3BzJHBsdWdpbk9wdHMiLCJwbHVnaW5PcHRzIiwicG9pbnRzTGFiZWwiLCJzaG93U2FtcGxlQW5zd2VyIiwicGx1Z2luUHJvcHMiLCJtYXJrdXAiLCJvbk1lbnVDaGFuZ2UiLCJhcyIsIm9uU2FtcGxlQ2hhbmdlIiwiQ29udGFpbmVyIiwiX3JlZjYiLCJib3JkZXJXaWR0aCIsImJvcmRlclN0eWxlIiwiYm9yZGVyQ29sb3IiLCJwYWRkaW5nIiwibWFyZ2luIiwiSW5wdXRDb250YWluZXJXcmFwcGVyIiwiX3JlZjciLCJtYXJnaW5Cb3R0b20iLCJSdWJyaWNsZXNzIiwiQ29uZmlnSG9sZGVyIiwiX3JlZjgiLCJSdWJyaWNUaXRsZSIsIl9yZWY5IiwiUmF3QXV0aG9yaW5nIiwiX1JlYWN0JENvbXBvbmVudCIsIl90aGlzIiwiX2NsYXNzQ2FsbENoZWNrMiIsIl9sZW4iLCJhcmdzIiwiX2tleSIsImRlc3RpbmF0aW9uIiwiX3RoaXMkcHJvcHMiLCJzb3VyY2UiLCJpbmRleCIsIl90aGlzJHByb3BzMiIsIl90aGlzJHByb3BzMyIsInJ1YnJpY2xlc3MiLCJjdXJyZW50TWF4IiwidGltZXMiLCJ0YWtlUmlnaHQiLCJ0eXBlIiwiX3RoaXMkcHJvcHM0IiwiaXRlbXMiLCJfdGhpcyRwcm9wczUiLCJjbGlja2VkSXRlbSIsImNoYW5nZUNvbnRlbnQiLCJfaW5oZXJpdHMyIiwiX2NyZWF0ZUNsYXNzMiIsInJlbmRlciIsIl90aGlzMiIsIl90aGlzJHByb3BzNiIsIl90aGlzJHByb3BzNiRtYXRoTWxPcCIsIl90aGlzJHByb3BzNiRjb25maWciLCJjb25maWciLCJfdGhpcyRwcm9wczYkcnVicmljbGUiLCJfdGhpcyRwcm9wczYkcGx1Z2luT3AiLCJfcmVmMCIsIl9yZWYwJGV4Y2x1ZGVaZXJvRW5hYiIsImV4Y2x1ZGVaZXJvRW5hYmxlZCIsIl9yZWYwJG1heFBvaW50c0VuYWJsZSIsIm1heFBvaW50c0VuYWJsZWQiLCJfcmVmMCRlcnJvcnMiLCJlcnJvcnMiLCJfcmVmMCRydWJyaWNsZXNzSW5zdHIiLCJydWJyaWNsZXNzSW5zdHJ1Y3Rpb25FbmFibGVkIiwiX3JlZjAkbWF4UG9pbnRzIiwiX3JlZjEiLCJfcmVmMSRydWJyaWNsZXNzSW5zdHIiLCJfcmVmMSRtYXhNYXhQb2ludHMiLCJtYXhNYXhQb2ludHMiLCJfcmVmMTAiLCJwb2ludHNEZXNjcmlwdG9yc0Vycm9ycyIsIk51bWJlciIsImlzRmluaXRlIiwiY29uc29sZSIsIndhcm4iLCJtYXhQb2ludHNWYWx1ZSIsInJvdyIsImNoYW5nZU1heFBvaW50cyIsImNvbnRyb2wiLCJjaGVja2VkIiwiZXhjbHVkZVplcm9zIiwiSW5wdXRDb250YWluZXIiLCJjaGFuZ2VSdWJyaWNsZXNzSW5zdHJ1Y3Rpb24iLCJub25FbXB0eSIsImRpc2FibGVVbmRlcmxpbmUiLCJsYW5ndWFnZUNoYXJhY3RlcnNQcm9wcyIsImxhbmd1YWdlIiwiRHJhZ0Ryb3BDb250ZXh0Iiwib25EcmFnRW5kIiwiZHJhZ0VuZCIsIkRyb3BwYWJsZSIsImRyb3BwYWJsZUlkIiwicHJvdmlkZWQiLCJfZXh0ZW5kczIiLCJkcm9wcGFibGVQcm9wcyIsInJlZiIsImlubmVyUmVmIiwicCIsInNob3VsZFJlbmRlclBvaW50IiwiRHJhZ2dhYmxlIiwiZHJhZ2dhYmxlSWQiLCJ0b1N0cmluZyIsImRyYWdnYWJsZVByb3BzIiwiZHJhZ0hhbmRsZVByb3BzIiwib25Qb2ludE1lbnVDaGFuZ2UiLCJwbGFjZWhvbGRlciIsIlJlYWN0IiwiQ29tcG9uZW50Iiwib2JqZWN0IiwiZnVuYyIsIlJldmVyc2UiLCJfcmVmMTEiLCJfcmVmMTEkcnVicmljbGVzcyIsIl9yZWYxMSRjb25maWciLCJfcmVmMTEkcGx1Z2luT3B0cyIsInJldmVyc2UiLCJwcm9wVHlwZXMiLCJnZXRJbmRleCIsIl9kZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vc3JjL2F1dGhvcmluZy5qc3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBzdHlsZWQgfSBmcm9tICdAbXVpL21hdGVyaWFsL3N0eWxlcyc7XG5cbmltcG9ydCBJbnB1dExhYmVsIGZyb20gJ0BtdWkvbWF0ZXJpYWwvSW5wdXRMYWJlbCc7XG5pbXBvcnQgT3V0bGluZWRJbnB1dCBmcm9tICdAbXVpL21hdGVyaWFsL091dGxpbmVkSW5wdXQnO1xuaW1wb3J0IFNlbGVjdCBmcm9tICdAbXVpL21hdGVyaWFsL1NlbGVjdCc7XG5pbXBvcnQgRm9ybUNvbnRyb2wgZnJvbSAnQG11aS9tYXRlcmlhbC9Gb3JtQ29udHJvbCc7XG5pbXBvcnQgTWVudUl0ZW0gZnJvbSAnQG11aS9tYXRlcmlhbC9NZW51SXRlbSc7XG5pbXBvcnQgeyByYW5nZSwgdGFrZVJpZ2h0LCB0aW1lcyB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgQ2hlY2tib3ggZnJvbSAnQG11aS9tYXRlcmlhbC9DaGVja2JveCc7XG5pbXBvcnQgRm9ybUdyb3VwIGZyb20gJ0BtdWkvbWF0ZXJpYWwvRm9ybUdyb3VwJztcbmltcG9ydCBGb3JtQ29udHJvbExhYmVsIGZyb20gJ0BtdWkvbWF0ZXJpYWwvRm9ybUNvbnRyb2xMYWJlbCc7XG5pbXBvcnQgVHlwb2dyYXBoeSBmcm9tICdAbXVpL21hdGVyaWFsL1R5cG9ncmFwaHknO1xuaW1wb3J0IERyYWdJbmRpY2F0b3IgZnJvbSAnQG11aS9pY29ucy1tYXRlcmlhbC9EcmFnSW5kaWNhdG9yJztcbmltcG9ydCB7IERyYWdEcm9wQ29udGV4dCwgRHJhZ2dhYmxlLCBEcm9wcGFibGUgfSBmcm9tICdAaGVsbG8tcGFuZ2VhL2RuZCc7XG5pbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuaW1wb3J0IFBvaW50TWVudSBmcm9tICcuL3BvaW50LW1lbnUnO1xuaW1wb3J0IEVkaXRhYmxlSHRtbCBmcm9tICdAcGllLWxpYi9lZGl0YWJsZS1odG1sLXRpcC10YXAnO1xuaW1wb3J0IHsgSW5wdXRDb250YWluZXIgfSBmcm9tICdAcGllLWxpYi9jb25maWctdWknO1xuaW1wb3J0IHsgZ3JleSB9IGZyb20gJ0BtdWkvbWF0ZXJpYWwvY29sb3JzJztcblxuY29uc3QgbG9nID0gZGVidWcoJ3BpZS1saWI6cnVicmljOmF1dGhvcmluZycpO1xuXG5jb25zdCByZW9yZGVyID0gKGxpc3QsIHN0YXJ0SW5kZXgsIGVuZEluZGV4KSA9PiB7XG4gIGNvbnN0IHJlc3VsdCA9IEFycmF5LmZyb20obGlzdCk7XG4gIGNvbnN0IFtyZW1vdmVkXSA9IHJlc3VsdC5zcGxpY2Uoc3RhcnRJbmRleCwgMSk7XG5cbiAgcmVzdWx0LnNwbGljZShlbmRJbmRleCwgMCwgcmVtb3ZlZCk7XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbmV4cG9ydCBjb25zdCBSdWJyaWNUeXBlID0gUHJvcFR5cGVzLnNoYXBlKHtcbiAgZXhjbHVkZVplcm86IFByb3BUeXBlcy5ib29sLFxuICBwb2ludHM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zdHJpbmcpLFxuICBzYW1wbGVBbnN3ZXJzOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc3RyaW5nKSxcbiAgbWF4UG9pbnRzOiBQcm9wVHlwZXMubnVtYmVyLFxuICBydWJyaWNsZXNzSW5zdHJ1Y3Rpb246IFByb3BUeXBlcy5zdHJpbmcsXG59KTtcblxuY29uc3QgTWF4UG9pbnRzID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IHsgdmFsdWUsIG9uQ2hhbmdlLCBtYXggfSA9IHByb3BzO1xuICBjb25zdCBsYWJlbElkID0gJ21heC1wb2ludHMtbGFiZWwnO1xuXG4gIHJldHVybiAoXG4gICAgPEZvcm1Db250cm9sIHN4PXt7IG1pbldpZHRoOiAxMjAsIG06IDEgfX0gdmFyaWFudD1cIm91dGxpbmVkXCI+XG4gICAgICA8SW5wdXRMYWJlbCBpZD17bGFiZWxJZH0+TWF4IFBvaW50czwvSW5wdXRMYWJlbD5cbiAgICAgIDxTZWxlY3RcbiAgICAgICAgbGFiZWxJZD17bGFiZWxJZH1cbiAgICAgICAgbGFiZWw9XCJNYXggUG9pbnRzXCJcbiAgICAgICAgdmFsdWU9e3ZhbHVlfVxuICAgICAgICBvbkNoYW5nZT17KGUpID0+IG9uQ2hhbmdlKGUudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgaW5wdXQ9ezxPdXRsaW5lZElucHV0IGxhYmVsPVwiTWF4IFBvaW50c1wiIC8+fVxuICAgICAgICBNZW51UHJvcHM9e3sgdHJhbnNpdGlvbkR1cmF0aW9uOiB7IGVudGVyOiAyMjUsIGV4aXQ6IDE5NSB9IH19XG4gICAgICA+XG4gICAgICAgIHtyYW5nZSgxLCBtYXggKyAxKS5tYXAoKHYpID0+IChcbiAgICAgICAgICA8TWVudUl0ZW0ga2V5PXtgJHt2fWB9IHZhbHVlPXt2fT5cbiAgICAgICAgICAgIHt2fVxuICAgICAgICAgIDwvTWVudUl0ZW0+XG4gICAgICAgICkpfVxuICAgICAgPC9TZWxlY3Q+XG4gICAgPC9Gb3JtQ29udHJvbD5cbiAgKTtcbn07XG5cbi8vIGlmIHRoZSB2YWx1ZSBpcyBudWxsIG9yICdudWxsJywgdGhlIFNhbXBsZSBBbnN3ZXIgaW5wdXQgZmllbGQgZm9yIHRoYXQgcG9pbnQgd2lsbCBub3QgYmUgZGlzcGFseWVkXG4vLyBpZiB0aGUgdmFsdWUgaXMgJycsIHRoZSBTYW1wbGUgQW5zd2VyIGlucHV0IGZpZWxkIHdpbGwgYmUgZW1wdHlcbmNvbnN0IGNoZWNrU2FtcGxlQW5zd2VyID0gKHNhbXBsZUFuc3dlcikgPT4gc2FtcGxlQW5zd2VyID09PSBudWxsIHx8IHNhbXBsZUFuc3dlciA9PT0gJ251bGwnO1xuXG5jb25zdCBSb3cgPSBzdHlsZWQoJ2RpdicpKCgpID0+ICh7IGRpc3BsYXk6ICdmbGV4Jywgd2lkdGg6ICcxMDAlJywgcG9zaXRpb246ICdyZWxhdGl2ZScgfSkpO1xuXG5jb25zdCBFZGl0b3JEaXYgPSBzdHlsZWQoJ2RpdicpKCh7IHRoZW1lIH0pID0+ICh7IHdpZHRoOiAnMTAwJScsIGJhY2tncm91bmRDb2xvcjogYCR7dGhlbWUucGFsZXR0ZS5jb21tb24ud2hpdGV9YCB9KSk7XG5cbmNvbnN0IERyYWdJbmRpY2F0b3JTdHlsZWQgPSBzdHlsZWQoRHJhZ0luZGljYXRvcikoKHsgdGhlbWUgfSkgPT4gKHsgcGFkZGluZ1RvcDogdGhlbWUuc3BhY2luZygxKSwgY29sb3I6IGdyZXlbNTAwXSB9KSk7XG5cbmNvbnN0IFBvaW50c0xhYmVsID0gc3R5bGVkKFR5cG9ncmFwaHkpKCh7IHRoZW1lIH0pID0+ICh7XG4gIGNvbG9yOiBncmV5WzUwMF0sXG4gIHBhZGRpbmdCb3R0b206IHRoZW1lLnNwYWNpbmcoMSksXG4gIHRleHRUcmFuc2Zvcm06ICd1cHBlcmNhc2UnLFxufSkpO1xuXG5jb25zdCBTYW1wbGVBbnN3ZXJzRWRpdG9yID0gc3R5bGVkKCdkaXYnKSgoeyB0aGVtZSB9KSA9PiAoeyBwYWRkaW5nTGVmdDogdGhlbWUuc3BhY2luZygzKSB9KSk7XG5cbmNvbnN0IEVycm9yVGV4dCA9IHN0eWxlZCgnZGl2JykoKHsgdGhlbWUgfSkgPT4gKHtcbiAgZm9udFNpemU6IHRoZW1lLnR5cG9ncmFwaHkuZm9udFNpemUgLSAyLFxuICBjb2xvcjogdGhlbWUucGFsZXR0ZS5lcnJvci5tYWluLFxuICBwYWRkaW5nTGVmdDogdGhlbWUuc3BhY2luZygzKSxcbiAgcGFkZGluZ1RvcDogdGhlbWUuc3BhY2luZygxKSxcbn0pKTtcblxuY29uc3QgUG9pbnRNZW51V3JhcHBlciA9IHN0eWxlZCgnZGl2JykoKCkgPT4gKHsgcG9zaXRpb246ICdhYnNvbHV0ZScsIHJpZ2h0OiAwIH0pKTtcblxuZXhwb3J0IGNvbnN0IFBvaW50Q29uZmlnID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IHsgcG9pbnRzLCBjb250ZW50LCBzYW1wbGVBbnN3ZXIsIG1hdGhNbE9wdGlvbnMgPSB7fSwgZXJyb3IsIHBsdWdpbk9wdHMgPSB7fSB9ID0gcHJvcHM7XG4gIGNvbnN0IHBvaW50c0xhYmVsID0gYCR7cG9pbnRzfSAke3BvaW50cyA8PSAxID8gJ3B0JyA6ICdwdHMnfWA7XG4gIGNvbnN0IHNob3dTYW1wbGVBbnN3ZXIgPSBjaGVja1NhbXBsZUFuc3dlcihzYW1wbGVBbnN3ZXIpO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdj5cbiAgICAgIDxQb2ludHNMYWJlbCB2YXJpYW50PVwib3ZlcmxpbmVcIj57cG9pbnRzTGFiZWx9PC9Qb2ludHNMYWJlbD5cbiAgICAgIDxSb3c+XG4gICAgICAgIDxEcmFnSW5kaWNhdG9yU3R5bGVkIC8+XG4gICAgICAgIDxFZGl0b3JEaXY+XG4gICAgICAgICAgPEVkaXRhYmxlSHRtbFxuICAgICAgICAgICAgZXJyb3I9e2Vycm9yfVxuICAgICAgICAgICAgcGx1Z2luUHJvcHM9e3BsdWdpbk9wdHN9XG4gICAgICAgICAgICBtYXJrdXA9e2NvbnRlbnR9XG4gICAgICAgICAgICBvbkNoYW5nZT17cHJvcHMub25DaGFuZ2V9XG4gICAgICAgICAgICBtYXRoTWxPcHRpb25zPXttYXRoTWxPcHRpb25zfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvRWRpdG9yRGl2PlxuICAgICAgICA8UG9pbnRNZW51V3JhcHBlcj5cbiAgICAgICAgICA8UG9pbnRNZW51IHNob3dTYW1wbGVBbnN3ZXI9e3Nob3dTYW1wbGVBbnN3ZXJ9IG9uQ2hhbmdlPXtwcm9wcy5vbk1lbnVDaGFuZ2V9IC8+XG4gICAgICAgIDwvUG9pbnRNZW51V3JhcHBlcj5cbiAgICAgIDwvUm93PlxuICAgICAge2Vycm9yICYmIDxFcnJvclRleHQ+e2Vycm9yfTwvRXJyb3JUZXh0Pn1cbiAgICAgIHshc2hvd1NhbXBsZUFuc3dlciAmJiAoXG4gICAgICAgIDxTYW1wbGVBbnN3ZXJzRWRpdG9yPlxuICAgICAgICAgIDxEcmFnSW5kaWNhdG9yU3R5bGVkIGFzPXtUeXBvZ3JhcGh5fSB2YXJpYW50PVwib3ZlcmxpbmVcIj5cbiAgICAgICAgICAgIFNhbXBsZSBSZXNwb25zZVxuICAgICAgICAgIDwvRHJhZ0luZGljYXRvclN0eWxlZD5cbiAgICAgICAgICA8RWRpdG9yRGl2PlxuICAgICAgICAgICAgPEVkaXRhYmxlSHRtbFxuICAgICAgICAgICAgICBtYXJrdXA9e3NhbXBsZUFuc3dlcn1cbiAgICAgICAgICAgICAgcGx1Z2luUHJvcHM9e3BsdWdpbk9wdHN9XG4gICAgICAgICAgICAgIG9uQ2hhbmdlPXtwcm9wcy5vblNhbXBsZUNoYW5nZX1cbiAgICAgICAgICAgICAgbWF0aE1sT3B0aW9ucz17bWF0aE1sT3B0aW9uc31cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9FZGl0b3JEaXY+XG4gICAgICAgIDwvU2FtcGxlQW5zd2Vyc0VkaXRvcj5cbiAgICAgICl9XG4gICAgPC9kaXY+XG4gICk7XG59O1xuXG5jb25zdCBDb250YWluZXIgPSBzdHlsZWQoJ2RpdicpKCh7IHRoZW1lIH0pID0+ICh7XG4gIGJhY2tncm91bmRDb2xvcjogZ3JleVsyMDBdLFxuICBib3JkZXJXaWR0aDogMSxcbiAgYm9yZGVyU3R5bGU6ICdzb2xpZCcsXG4gIGJvcmRlckNvbG9yOiBncmV5WzMwMF0sXG4gIHBhZGRpbmc6IHRoZW1lLnNwYWNpbmcoMiksXG4gIG1hcmdpbjogdGhlbWUuc3BhY2luZygxKSxcbn0pKTtcbmNvbnN0IElucHV0Q29udGFpbmVyV3JhcHBlciA9IHN0eWxlZCgnZGl2JykoKHsgdGhlbWUgfSkgPT4gKHtcbiAgd2lkdGg6ICcxMDAlJyxcbiAgcGFkZGluZ1RvcDogdGhlbWUuc3BhY2luZygyKSxcbiAgbWFyZ2luQm90dG9tOiB0aGVtZS5zcGFjaW5nKDIpLFxuICAnJiBNdWlGb3JtQ29udHJvbC1yb290JzogeyB3aWR0aDogJzEwMCUnIH0sXG59KSk7XG5jb25zdCBSdWJyaWNsZXNzID0gc3R5bGVkKCdkaXYnKSgoKSA9PiAoeyBkaXNwbGF5OiAnbm9uZScgfSkpO1xuY29uc3QgQ29uZmlnSG9sZGVyID0gc3R5bGVkKCdkaXYnKSgoeyB0aGVtZSB9KSA9PiAoeyBwYWRkaW5nVG9wOiB0aGVtZS5zcGFjaW5nKDEpLCBwYWRkaW5nQm90dG9tOiB0aGVtZS5zcGFjaW5nKDEpIH0pKTtcbmNvbnN0IFJ1YnJpY1RpdGxlID0gc3R5bGVkKFR5cG9ncmFwaHkpKCh7IHRoZW1lIH0pID0+ICh7IHBhZGRpbmdMZWZ0OiB0aGVtZS5zcGFjaW5nKDEpLCBtYXJnaW46IHRoZW1lLnNwYWNpbmcoMSkgfSkpO1xuXG5leHBvcnQgY2xhc3MgUmF3QXV0aG9yaW5nIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgc3RhdGljIHByb3BUeXBlcyA9IHtcbiAgICB2YWx1ZTogUnVicmljVHlwZSxcbiAgICBjb25maWc6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgcGx1Z2luT3B0czogUHJvcFR5cGVzLm9iamVjdCxcbiAgICBydWJyaWNsZXNzOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gIH07XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IHt9O1xuXG4gIGRyYWdFbmQgPSAocmVzdWx0KSA9PiB7XG4gICAgaWYgKCFyZXN1bHQuZGVzdGluYXRpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB7IHZhbHVlLCBvbkNoYW5nZSB9ID0gdGhpcy5wcm9wcztcblxuICAgIGNvbnN0IHBvaW50cyA9IHJlb3JkZXIodmFsdWUucG9pbnRzLCByZXN1bHQuc291cmNlLmluZGV4LCByZXN1bHQuZGVzdGluYXRpb24uaW5kZXgpO1xuICAgIGNvbnN0IHNhbXBsZUFuc3dlcnMgPSByZW9yZGVyKHZhbHVlLnNhbXBsZUFuc3dlcnMsIHJlc3VsdC5zb3VyY2UuaW5kZXgsIHJlc3VsdC5kZXN0aW5hdGlvbi5pbmRleCk7XG5cbiAgICBvbkNoYW5nZSh7IC4uLnZhbHVlLCBwb2ludHMsIHNhbXBsZUFuc3dlcnMgfSk7XG4gIH07XG5cbiAgY2hhbmdlUnVicmljbGVzc0luc3RydWN0aW9uID0gKGlucHV0KSA9PiB7XG4gICAgY29uc3QgeyB2YWx1ZSwgb25DaGFuZ2UgfSA9IHRoaXMucHJvcHM7XG4gICAgb25DaGFuZ2UoeyAuLi52YWx1ZSwgcnVicmljbGVzc0luc3RydWN0aW9uOiBpbnB1dCB9KTtcbiAgfTtcblxuICBjaGFuZ2VNYXhQb2ludHMgPSAobWF4UG9pbnRzKSA9PiB7XG4gICAgY29uc3QgeyB2YWx1ZSwgb25DaGFuZ2UsIHJ1YnJpY2xlc3MgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgY3VycmVudE1heCA9IHZhbHVlLnBvaW50cy5sZW5ndGggLSAxO1xuXG4gICAgbG9nKCdjdXJyZW50JywgY3VycmVudE1heCwgJ25ldzogJywgbWF4UG9pbnRzKTtcblxuICAgIGxldCBwb2ludHMsIHNhbXBsZUFuc3dlcnM7XG4gICAgaWYgKG1heFBvaW50cyA+IGN1cnJlbnRNYXgpIHtcbiAgICAgIHBvaW50cyA9IHRpbWVzKG1heFBvaW50cyAtIGN1cnJlbnRNYXgpXG4gICAgICAgIC5tYXAoKCkgPT4gJycpXG4gICAgICAgIC5jb25jYXQodmFsdWUucG9pbnRzKTtcbiAgICAgIHNhbXBsZUFuc3dlcnMgPSB0aW1lcyhtYXhQb2ludHMgLSBjdXJyZW50TWF4KVxuICAgICAgICAubWFwKCgpID0+IG51bGwpXG4gICAgICAgIC5jb25jYXQodmFsdWUuc2FtcGxlQW5zd2Vycyk7XG4gICAgfVxuXG4gICAgaWYgKG1heFBvaW50cyA8IGN1cnJlbnRNYXgpIHtcbiAgICAgIGxvZygnbGVzcyB0aGFuJyk7XG4gICAgICBwb2ludHMgPSB0YWtlUmlnaHQodmFsdWUucG9pbnRzLCBtYXhQb2ludHMgKyAxKTtcbiAgICAgIHNhbXBsZUFuc3dlcnMgPSB0YWtlUmlnaHQodmFsdWUuc2FtcGxlQW5zd2VycywgbWF4UG9pbnRzICsgMSk7XG4gICAgfVxuXG4gICAgaWYgKHBvaW50cyAmJiAhcnVicmljbGVzcykge1xuICAgICAgb25DaGFuZ2UoeyAuLi52YWx1ZSwgcG9pbnRzLCBzYW1wbGVBbnN3ZXJzLCBtYXhQb2ludHMgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9uQ2hhbmdlKHsgLi4udmFsdWUsIG1heFBvaW50cyB9KTtcbiAgICB9XG4gIH07XG5cbiAgY2hhbmdlQ29udGVudCA9IChpbmRleCwgY29udGVudCwgdHlwZSkgPT4ge1xuICAgIC8vIHR5cGUgY291bGQgYmUgJ3BvaW50cycgb3IgJ3NhbXBsZUFuc3dlcnMnXG4gICAgbG9nKGBjaGFuZ2VNb2RlbFske3R5cGV9XTpgLCBpbmRleCwgY29udGVudCk7XG5cbiAgICBpZiAodHlwZSAhPT0gJ3BvaW50cycgJiYgdHlwZSAhPT0gJ3NhbXBsZUFuc3dlcnMnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgeyB2YWx1ZSwgb25DaGFuZ2UgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgaXRlbXMgPSB2YWx1ZVt0eXBlXSAmJiBBcnJheS5mcm9tKHZhbHVlW3R5cGVdKTtcblxuICAgIGl0ZW1zLnNwbGljZShpbmRleCwgMSwgY29udGVudCk7XG4gICAgbG9nKGBjaGFuZ2VNb2RlbFske3R5cGV9XTpgLCBpdGVtcyk7XG5cbiAgICBvbkNoYW5nZSh7IC4uLnZhbHVlLCBbdHlwZV06IGl0ZW1zIH0pO1xuICB9O1xuXG4gIGV4Y2x1ZGVaZXJvcyA9ICgpID0+IHtcbiAgICBjb25zdCB7IHZhbHVlLCBvbkNoYW5nZSB9ID0gdGhpcy5wcm9wcztcblxuICAgIG9uQ2hhbmdlKHsgLi4udmFsdWUsIGV4Y2x1ZGVaZXJvOiAhdmFsdWUuZXhjbHVkZVplcm8gfSk7XG4gIH07XG5cbiAgc2hvdWxkUmVuZGVyUG9pbnQgPSAoaW5kZXgsIHZhbHVlKSA9PiB7XG4gICAgaWYgKCF2YWx1ZS5leGNsdWRlWmVybykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChpbmRleCA8IHZhbHVlLnBvaW50cy5sZW5ndGggLSAxKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChpbmRleCA9PT0gdmFsdWUucG9pbnRzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH07XG5cbiAgb25Qb2ludE1lbnVDaGFuZ2UgPSAoaW5kZXgsIGNsaWNrZWRJdGVtKSA9PiB7XG4gICAgaWYgKGNsaWNrZWRJdGVtID09PSAnc2FtcGxlJykge1xuICAgICAgY29uc3QgeyB2YWx1ZSB9ID0gdGhpcy5wcm9wcztcbiAgICAgIGNvbnN0IHNhbXBsZUFuc3dlcnMgPSBBcnJheS5mcm9tKHZhbHVlLnNhbXBsZUFuc3dlcnMgfHwgW10pO1xuXG4gICAgICBpZiAoY2hlY2tTYW1wbGVBbnN3ZXIoc2FtcGxlQW5zd2Vyc1tpbmRleF0pKSB7XG4gICAgICAgIC8vIGFuIGVtcHR5IHN0cmluZyB3aWxsIGRpc3BsYXkgYW4gZW1wdHkgU2FtcGxlIEFuc3dlciBpbnB1dCBmaWVsZFxuICAgICAgICB0aGlzLmNoYW5nZUNvbnRlbnQoaW5kZXgsICcnLCAnc2FtcGxlQW5zd2VycycpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gd2hlbiB0aGUgY29udGVudCBpcyBudWxsIG9yICdudWxsJywgdGhlIFNhbXBsZSBBbnN3ZXIgaW5wdXQgZmllbGQgd2lsbCBub3QgYmUgZGlzcGxheWVkXG4gICAgICAgIHRoaXMuY2hhbmdlQ29udGVudChpbmRleCwgbnVsbCwgJ3NhbXBsZUFuc3dlcnMnKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHsgdmFsdWUsIG1hdGhNbE9wdGlvbnMgPSB7fSwgY29uZmlnID0ge30sIHJ1YnJpY2xlc3MgPSBmYWxzZSwgcGx1Z2luT3B0cyA9IHt9IH0gPSB0aGlzLnByb3BzO1xuICAgIGxldCB7XG4gICAgICBleGNsdWRlWmVyb0VuYWJsZWQgPSB0cnVlLFxuICAgICAgbWF4UG9pbnRzRW5hYmxlZCA9IHRydWUsXG4gICAgICBlcnJvcnMgPSB7fSxcbiAgICAgIHJ1YnJpY2xlc3NJbnN0cnVjdGlvbkVuYWJsZWQgPSBmYWxzZSxcbiAgICAgIG1heFBvaW50cyA9IDEwLFxuICAgIH0gPSB2YWx1ZSB8fCB7fTtcbiAgICAvLyBydWJyaWMgd2lsbCBjb250YWluIGEgbWF4IHZhbHVlIGZvciBtYXhQb2ludHNcbiAgICBjb25zdCB7IHJ1YnJpY2xlc3NJbnN0cnVjdGlvbiA9IHt9LCBtYXhNYXhQb2ludHMgPSAxMCB9ID0gY29uZmlnIHx8IHt9O1xuICAgIGNvbnN0IHsgcG9pbnRzRGVzY3JpcHRvcnNFcnJvcnMgfSA9IGVycm9ycyB8fCB7fTtcbiAgICBpZiAodmFsdWUgJiYgTnVtYmVyLmlzRmluaXRlKHZhbHVlLm1heFBvaW50cykpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oJ21heFBvaW50cyBpcyBkZXByZWNhdGVkIC0gcmVtb3ZlIGZyb20gbW9kZWwnKTtcbiAgICB9XG5cbiAgICAvLyBmb3IgcnVicmljIHZhbHVlIGlzIGNvbXB1dGVkIGJhc2VkIG9uIHBvaW50c1xuICAgIGNvbnN0IG1heFBvaW50c1ZhbHVlID0gIXJ1YnJpY2xlc3MgPyB2YWx1ZS5wb2ludHMubGVuZ3RoIC0gMSA6IG1heFBvaW50cztcblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2PlxuICAgICAgICA8UnVicmljVGl0bGUgdmFyaWFudD1cImg1XCI+UnVicmljPC9SdWJyaWNUaXRsZT5cbiAgICAgICAgPEZvcm1Hcm91cCByb3c+XG4gICAgICAgICAge21heFBvaW50c0VuYWJsZWQgJiYgKFxuICAgICAgICAgICAgPE1heFBvaW50c1xuICAgICAgICAgICAgICBtYXg9e21heE1heFBvaW50cyA8IDEwMCA/IG1heE1heFBvaW50cyA6IDEwMH1cbiAgICAgICAgICAgICAgdmFsdWU9e21heFBvaW50c1ZhbHVlfVxuICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5jaGFuZ2VNYXhQb2ludHN9XG4gICAgICAgICAgICAgIHBsdWdpbk9wdHM9e3BsdWdpbk9wdHN9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICAgICAge2V4Y2x1ZGVaZXJvRW5hYmxlZCAmJiAoXG4gICAgICAgICAgICA8Rm9ybUNvbnRyb2xMYWJlbFxuICAgICAgICAgICAgICBsYWJlbD1cIkV4Y2x1ZGUgemVyb3NcIlxuICAgICAgICAgICAgICBjb250cm9sPXs8Q2hlY2tib3ggY2hlY2tlZD17dmFsdWUuZXhjbHVkZVplcm99IG9uQ2hhbmdlPXt0aGlzLmV4Y2x1ZGVaZXJvc30gLz59XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvRm9ybUdyb3VwPlxuXG4gICAgICAgIHtydWJyaWNsZXNzSW5zdHJ1Y3Rpb25FbmFibGVkICYmIHJ1YnJpY2xlc3MgJiYgKFxuICAgICAgICAgIDxJbnB1dENvbnRhaW5lcldyYXBwZXI+XG4gICAgICAgICAgICA8SW5wdXRDb250YWluZXIgbGFiZWw9e3J1YnJpY2xlc3NJbnN0cnVjdGlvbi5sYWJlbH0+XG4gICAgICAgICAgICAgIDxFZGl0YWJsZUh0bWxcbiAgICAgICAgICAgICAgICBtYXJrdXA9e3ZhbHVlLnJ1YnJpY2xlc3NJbnN0cnVjdGlvbiB8fCAnJ31cbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5jaGFuZ2VSdWJyaWNsZXNzSW5zdHJ1Y3Rpb259XG4gICAgICAgICAgICAgICAgcGx1Z2luUHJvcHM9e3BsdWdpbk9wdHN9XG4gICAgICAgICAgICAgICAgbm9uRW1wdHk9e2ZhbHNlfVxuICAgICAgICAgICAgICAgIGRpc2FibGVVbmRlcmxpbmVcbiAgICAgICAgICAgICAgICBsYW5ndWFnZUNoYXJhY3RlcnNQcm9wcz17W3sgbGFuZ3VhZ2U6ICdzcGFuaXNoJyB9LCB7IGxhbmd1YWdlOiAnc3BlY2lhbCcgfV19XG4gICAgICAgICAgICAgICAgbWF0aE1sT3B0aW9ucz17bWF0aE1sT3B0aW9uc31cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvSW5wdXRDb250YWluZXI+XG4gICAgICAgICAgPC9JbnB1dENvbnRhaW5lcldyYXBwZXI+XG4gICAgICAgICl9XG5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICB7cnVicmljbGVzcyA/IChcbiAgICAgICAgICAgIDxSdWJyaWNsZXNzIC8+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDxDb250YWluZXI+XG4gICAgICAgICAgICAgIDxEcmFnRHJvcENvbnRleHQgb25EcmFnRW5kPXt0aGlzLmRyYWdFbmR9PlxuICAgICAgICAgICAgICAgIDxEcm9wcGFibGUgZHJvcHBhYmxlSWQ9XCJkcm9wcGFibGVcIj5cbiAgICAgICAgICAgICAgICAgIHsocHJvdmlkZWQpID0+IChcbiAgICAgICAgICAgICAgICAgICAgPGRpdiB7Li4ucHJvdmlkZWQuZHJvcHBhYmxlUHJvcHN9IHJlZj17cHJvdmlkZWQuaW5uZXJSZWZ9PlxuICAgICAgICAgICAgICAgICAgICAgIHt2YWx1ZS5wb2ludHMubWFwKFxuICAgICAgICAgICAgICAgICAgICAgICAgKHAsIGluZGV4KSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3VsZFJlbmRlclBvaW50KGluZGV4LCB2YWx1ZSkgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxEcmFnZ2FibGUga2V5PXtgJHtwLnBvaW50c30tJHtpbmRleH1gfSBpbmRleD17aW5kZXh9IGRyYWdnYWJsZUlkPXtpbmRleC50b1N0cmluZygpfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsocHJvdmlkZWQpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPENvbmZpZ0hvbGRlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZj17cHJvdmlkZWQuaW5uZXJSZWZ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgey4uLnByb3ZpZGVkLmRyYWdnYWJsZVByb3BzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsuLi5wcm92aWRlZC5kcmFnSGFuZGxlUHJvcHN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8UG9pbnRDb25maWdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cz17dmFsdWUucG9pbnRzLmxlbmd0aCAtIDEgLSBpbmRleH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ9e3B9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcj17XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50c0Rlc2NyaXB0b3JzRXJyb3JzICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50c0Rlc2NyaXB0b3JzRXJyb3JzW3ZhbHVlLnBvaW50cy5sZW5ndGggLSAxIC0gaW5kZXhdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVBbnN3ZXI9e3ZhbHVlLnNhbXBsZUFuc3dlcnMgJiYgdmFsdWUuc2FtcGxlQW5zd2Vyc1tpbmRleF19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGNvbnRlbnQpID0+IHRoaXMuY2hhbmdlQ29udGVudChpbmRleCwgY29udGVudCwgJ3BvaW50cycpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25TYW1wbGVDaGFuZ2U9eyhjb250ZW50KSA9PiB0aGlzLmNoYW5nZUNvbnRlbnQoaW5kZXgsIGNvbnRlbnQsICdzYW1wbGVBbnN3ZXJzJyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbk1lbnVDaGFuZ2U9eyhjbGlja2VkSXRlbSkgPT4gdGhpcy5vblBvaW50TWVudUNoYW5nZShpbmRleCwgY2xpY2tlZEl0ZW0pfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0aE1sT3B0aW9ucz17bWF0aE1sT3B0aW9uc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdWdpbk9wdHM9e3BsdWdpbk9wdHN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Db25maWdIb2xkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRHJhZ2dhYmxlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAge3Byb3ZpZGVkLnBsYWNlaG9sZGVyfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgPC9Ecm9wcGFibGU+XG4gICAgICAgICAgICAgIDwvRHJhZ0Ryb3BDb250ZXh0PlxuICAgICAgICAgICAgPC9Db250YWluZXI+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cbi8vIHN0eWxlcyBtaWdyYXRlZCB0byBzdHlsZWQtY29tcG9uZW50cyBhYm92ZVxuXG5jb25zdCBSZXZlcnNlID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IHsgcnVicmljbGVzcyA9IGZhbHNlLCBjb25maWcgPSB7fSwgcGx1Z2luT3B0cyA9IHt9IH0gPSBwcm9wcyB8fCB7fTtcbiAgY29uc3QgcG9pbnRzID0gQXJyYXkuZnJvbShwcm9wcy52YWx1ZS5wb2ludHMgfHwgW10pLnJldmVyc2UoKTtcbiAgbGV0IHNhbXBsZUFuc3dlcnMgPSBBcnJheS5mcm9tKHByb3BzLnZhbHVlLnNhbXBsZUFuc3dlcnMgfHwgW10pLnJldmVyc2UoKTtcblxuICBpZiAocG9pbnRzLmxlbmd0aCA+IHNhbXBsZUFuc3dlcnMubGVuZ3RoKSB7XG4gICAgc2FtcGxlQW5zd2VycyA9IHRpbWVzKHBvaW50cy5sZW5ndGggLSBzYW1wbGVBbnN3ZXJzLmxlbmd0aClcbiAgICAgIC5tYXAoKCkgPT4gbnVsbClcbiAgICAgIC5jb25jYXQoc2FtcGxlQW5zd2Vycyk7XG4gIH1cblxuICBjb25zdCB2YWx1ZSA9IHsgLi4ucHJvcHMudmFsdWUsIHBvaW50cywgc2FtcGxlQW5zd2VycyB9O1xuXG4gIGNvbnN0IG9uQ2hhbmdlID0gKHZhbHVlKSA9PiB7XG4gICAgcHJvcHMub25DaGFuZ2Uoe1xuICAgICAgLi4udmFsdWUsXG4gICAgICBwb2ludHM6IEFycmF5LmZyb20odmFsdWUucG9pbnRzIHx8IFtdKS5yZXZlcnNlKCksXG4gICAgICBzYW1wbGVBbnN3ZXJzOiBBcnJheS5mcm9tKHZhbHVlLnNhbXBsZUFuc3dlcnMgfHwgW10pLnJldmVyc2UoKSxcbiAgICB9KTtcbiAgfTtcblxuICByZXR1cm4gKFxuICAgIDxSYXdBdXRob3JpbmcgdmFsdWU9e3ZhbHVlfSBjb25maWc9e2NvbmZpZ30gb25DaGFuZ2U9e29uQ2hhbmdlfSBydWJyaWNsZXNzPXtydWJyaWNsZXNzfSBwbHVnaW5PcHRzPXtwbHVnaW5PcHRzfSAvPlxuICApO1xufTtcblxuUmV2ZXJzZS5wcm9wVHlwZXMgPSB7XG4gIHZhbHVlOiBSdWJyaWNUeXBlLFxuICBjb25maWc6IFByb3BUeXBlcy5vYmplY3QsXG4gIHBsdWdpbk9wdHM6IFByb3BUeXBlcy5vYmplY3QsXG4gIHJ1YnJpY2xlc3M6IFByb3BUeXBlcy5ib29sLFxuICBnZXRJbmRleDogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFJldmVyc2U7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUFBLElBQUFBLE1BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLFVBQUEsR0FBQUYsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFFLE9BQUEsR0FBQUYsT0FBQTtBQUVBLElBQUFHLFdBQUEsR0FBQUosc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFJLGNBQUEsR0FBQUwsc0JBQUEsQ0FB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
|
|
496
|
+
//# sourceMappingURL=authoring.js.map
|
package/lib/authoring.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authoring.js","names":["_react","_interopRequireDefault","require","_propTypes","_styles","_InputLabel","_OutlinedInput","_Select","_FormControl","_MenuItem","_lodashEs","_Checkbox","_FormGroup","_FormControlLabel","_Typography","_DragIndicator","_dnd","_debug","_pointMenu","_editableHtmlTipTap","_configUi","_colors","ownKeys","e","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty2","getOwnPropertyDescriptors","defineProperties","defineProperty","_callSuper","_getPrototypeOf2","_possibleConstructorReturn2","_isNativeReflectConstruct","Reflect","construct","constructor","Boolean","prototype","valueOf","call","log","debug","reorder","list","startIndex","endIndex","result","Array","from","_result$splice","splice","_result$splice2","_slicedToArray2","removed","RubricType","exports","PropTypes","shape","excludeZero","bool","points","arrayOf","string","sampleAnswers","maxPoints","number","rubriclessInstruction","MaxPoints","props","value","onChange","max","labelId","createElement","sx","minWidth","m","variant","id","label","target","input","MenuProps","transitionDuration","enter","exit","range","map","v","key","concat","checkSampleAnswer","sampleAnswer","Row","styled","display","width","position","EditorDiv","_ref","theme","backgroundColor","palette","common","white","DragIndicatorStyled","DragIndicator","_ref2","paddingTop","spacing","color","grey","PointsLabel","Typography","_ref3","paddingBottom","textTransform","SampleAnswersEditor","_ref4","paddingLeft","ErrorText","_ref5","fontSize","typography","error","main","PointMenuWrapper","right","PointConfig","content","_props$mathMlOptions","mathMlOptions","_props$pluginOpts","pluginOpts","pointsLabel","showSampleAnswer","pluginProps","markup","onMenuChange","as","onSampleChange","Container","_ref6","borderWidth","borderStyle","borderColor","padding","margin","InputContainerWrapper","_ref7","marginBottom","Rubricless","ConfigHolder","_ref8","RubricTitle","_ref9","RawAuthoring","_React$Component","_this","_classCallCheck2","_len","args","_key","destination","_this$props","source","index","_this$props2","_this$props3","rubricless","currentMax","times","takeRight","type","_this$props4","items","_this$props5","clickedItem","changeContent","_inherits2","_createClass2","render","_this2","_this$props6","_this$props6$mathMlOp","_this$props6$config","config","_this$props6$rubricle","_this$props6$pluginOp","_ref0","_ref0$excludeZeroEnab","excludeZeroEnabled","_ref0$maxPointsEnable","maxPointsEnabled","_ref0$errors","errors","_ref0$rubriclessInstr","rubriclessInstructionEnabled","_ref0$maxPoints","_ref1","_ref1$rubriclessInstr","_ref1$maxMaxPoints","maxMaxPoints","_ref10","pointsDescriptorsErrors","Number","isFinite","console","warn","maxPointsValue","row","changeMaxPoints","control","checked","excludeZeros","InputContainer","changeRubriclessInstruction","nonEmpty","disableUnderline","languageCharactersProps","language","DragDropContext","onDragEnd","dragEnd","Droppable","droppableId","provided","_extends2","droppableProps","ref","innerRef","p","shouldRenderPoint","Draggable","draggableId","toString","draggableProps","dragHandleProps","onPointMenuChange","placeholder","React","Component","object","func","Reverse","_ref11","_ref11$rubricless","_ref11$config","_ref11$pluginOpts","reverse","propTypes","getIndex","_default"],"sources":["../src/authoring.jsx"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { styled } from '@mui/material/styles';\n\nimport InputLabel from '@mui/material/InputLabel';\nimport OutlinedInput from '@mui/material/OutlinedInput';\nimport Select from '@mui/material/Select';\nimport FormControl from '@mui/material/FormControl';\nimport MenuItem from '@mui/material/MenuItem';\nimport { range, takeRight, times } from 'lodash-es';\nimport Checkbox from '@mui/material/Checkbox';\nimport FormGroup from '@mui/material/FormGroup';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport Typography from '@mui/material/Typography';\nimport DragIndicator from '@mui/icons-material/DragIndicator';\nimport { DragDropContext, Draggable, Droppable } from '@hello-pangea/dnd';\nimport debug from 'debug';\nimport PointMenu from './point-menu';\nimport EditableHtml from '@pie-lib/editable-html-tip-tap';\nimport { InputContainer } from '@pie-lib/config-ui';\nimport { grey } from '@mui/material/colors';\n\nconst log = debug('pie-lib:rubric:authoring');\n\nconst reorder = (list, startIndex, endIndex) => {\n const result = Array.from(list);\n const [removed] = result.splice(startIndex, 1);\n\n result.splice(endIndex, 0, removed);\n\n return result;\n};\n\nexport const RubricType = PropTypes.shape({\n excludeZero: PropTypes.bool,\n points: PropTypes.arrayOf(PropTypes.string),\n sampleAnswers: PropTypes.arrayOf(PropTypes.string),\n maxPoints: PropTypes.number,\n rubriclessInstruction: PropTypes.string,\n});\n\nconst MaxPoints = (props) => {\n const { value, onChange, max } = props;\n const labelId = 'max-points-label';\n\n return (\n <FormControl sx={{ minWidth: 120, m: 1 }} variant=\"outlined\">\n <InputLabel id={labelId}>Max Points</InputLabel>\n <Select\n labelId={labelId}\n label=\"Max Points\"\n value={value}\n onChange={(e) => onChange(e.target.value)}\n input={<OutlinedInput label=\"Max Points\" />}\n MenuProps={{ transitionDuration: { enter: 225, exit: 195 } }}\n >\n {range(1, max + 1).map((v) => (\n <MenuItem key={`${v}`} value={v}>\n {v}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n );\n};\n\n// if the value is null or 'null', the Sample Answer input field for that point will not be dispalyed\n// if the value is '', the Sample Answer input field will be empty\nconst checkSampleAnswer = (sampleAnswer) => sampleAnswer === null || sampleAnswer === 'null';\n\nconst Row = styled('div')(() => ({ display: 'flex', width: '100%', position: 'relative' }));\n\nconst EditorDiv = styled('div')(({ theme }) => ({ width: '100%', backgroundColor: `${theme.palette.common.white}` }));\n\nconst DragIndicatorStyled = styled(DragIndicator)(({ theme }) => ({ paddingTop: theme.spacing(1), color: grey[500] }));\n\nconst PointsLabel = styled(Typography)(({ theme }) => ({\n color: grey[500],\n paddingBottom: theme.spacing(1),\n textTransform: 'uppercase',\n}));\n\nconst SampleAnswersEditor = styled('div')(({ theme }) => ({ paddingLeft: theme.spacing(3) }));\n\nconst ErrorText = styled('div')(({ theme }) => ({\n fontSize: theme.typography.fontSize - 2,\n color: theme.palette.error.main,\n paddingLeft: theme.spacing(3),\n paddingTop: theme.spacing(1),\n}));\n\nconst PointMenuWrapper = styled('div')(() => ({ position: 'absolute', right: 0 }));\n\nexport const PointConfig = (props) => {\n const { points, content, sampleAnswer, mathMlOptions = {}, error, pluginOpts = {} } = props;\n const pointsLabel = `${points} ${points <= 1 ? 'pt' : 'pts'}`;\n const showSampleAnswer = checkSampleAnswer(sampleAnswer);\n\n return (\n <div>\n <PointsLabel variant=\"overline\">{pointsLabel}</PointsLabel>\n <Row>\n <DragIndicatorStyled />\n <EditorDiv>\n <EditableHtml\n error={error}\n pluginProps={pluginOpts}\n markup={content}\n onChange={props.onChange}\n mathMlOptions={mathMlOptions}\n />\n </EditorDiv>\n <PointMenuWrapper>\n <PointMenu showSampleAnswer={showSampleAnswer} onChange={props.onMenuChange} />\n </PointMenuWrapper>\n </Row>\n {error && <ErrorText>{error}</ErrorText>}\n {!showSampleAnswer && (\n <SampleAnswersEditor>\n <DragIndicatorStyled as={Typography} variant=\"overline\">\n Sample Response\n </DragIndicatorStyled>\n <EditorDiv>\n <EditableHtml\n markup={sampleAnswer}\n pluginProps={pluginOpts}\n onChange={props.onSampleChange}\n mathMlOptions={mathMlOptions}\n />\n </EditorDiv>\n </SampleAnswersEditor>\n )}\n </div>\n );\n};\n\nconst Container = styled('div')(({ theme }) => ({\n backgroundColor: grey[200],\n borderWidth: 1,\n borderStyle: 'solid',\n borderColor: grey[300],\n padding: theme.spacing(2),\n margin: theme.spacing(1),\n}));\nconst InputContainerWrapper = styled('div')(({ theme }) => ({\n width: '100%',\n paddingTop: theme.spacing(2),\n marginBottom: theme.spacing(2),\n '& MuiFormControl-root': { width: '100%' },\n}));\nconst Rubricless = styled('div')(() => ({ display: 'none' }));\nconst ConfigHolder = styled('div')(({ theme }) => ({ paddingTop: theme.spacing(1), paddingBottom: theme.spacing(1) }));\nconst RubricTitle = styled(Typography)(({ theme }) => ({ paddingLeft: theme.spacing(1), margin: theme.spacing(1) }));\n\nexport class RawAuthoring extends React.Component {\n static propTypes = {\n value: RubricType,\n config: PropTypes.object,\n pluginOpts: PropTypes.object,\n rubricless: PropTypes.bool,\n onChange: PropTypes.func,\n };\n\n static defaultProps = {};\n\n dragEnd = (result) => {\n if (!result.destination) {\n return;\n }\n\n const { value, onChange } = this.props;\n\n const points = reorder(value.points, result.source.index, result.destination.index);\n const sampleAnswers = reorder(value.sampleAnswers, result.source.index, result.destination.index);\n\n onChange({ ...value, points, sampleAnswers });\n };\n\n changeRubriclessInstruction = (input) => {\n const { value, onChange } = this.props;\n onChange({ ...value, rubriclessInstruction: input });\n };\n\n changeMaxPoints = (maxPoints) => {\n const { value, onChange, rubricless } = this.props;\n const currentMax = value.points.length - 1;\n\n log('current', currentMax, 'new: ', maxPoints);\n\n let points, sampleAnswers;\n if (maxPoints > currentMax) {\n points = times(maxPoints - currentMax)\n .map(() => '')\n .concat(value.points);\n sampleAnswers = times(maxPoints - currentMax)\n .map(() => null)\n .concat(value.sampleAnswers);\n }\n\n if (maxPoints < currentMax) {\n log('less than');\n points = takeRight(value.points, maxPoints + 1);\n sampleAnswers = takeRight(value.sampleAnswers, maxPoints + 1);\n }\n\n if (points && !rubricless) {\n onChange({ ...value, points, sampleAnswers, maxPoints });\n } else {\n onChange({ ...value, maxPoints });\n }\n };\n\n changeContent = (index, content, type) => {\n // type could be 'points' or 'sampleAnswers'\n log(`changeModel[${type}]:`, index, content);\n\n if (type !== 'points' && type !== 'sampleAnswers') {\n return;\n }\n\n const { value, onChange } = this.props;\n const items = value[type] && Array.from(value[type]);\n\n items.splice(index, 1, content);\n log(`changeModel[${type}]:`, items);\n\n onChange({ ...value, [type]: items });\n };\n\n excludeZeros = () => {\n const { value, onChange } = this.props;\n\n onChange({ ...value, excludeZero: !value.excludeZero });\n };\n\n shouldRenderPoint = (index, value) => {\n if (!value.excludeZero) {\n return true;\n } else {\n if (index < value.points.length - 1) {\n return true;\n } else if (index === value.points.length - 1) {\n return false;\n }\n\n return true;\n }\n };\n\n onPointMenuChange = (index, clickedItem) => {\n if (clickedItem === 'sample') {\n const { value } = this.props;\n const sampleAnswers = Array.from(value.sampleAnswers || []);\n\n if (checkSampleAnswer(sampleAnswers[index])) {\n // an empty string will display an empty Sample Answer input field\n this.changeContent(index, '', 'sampleAnswers');\n } else {\n // when the content is null or 'null', the Sample Answer input field will not be displayed\n this.changeContent(index, null, 'sampleAnswers');\n }\n }\n };\n\n render() {\n const { value, mathMlOptions = {}, config = {}, rubricless = false, pluginOpts = {} } = this.props;\n let {\n excludeZeroEnabled = true,\n maxPointsEnabled = true,\n errors = {},\n rubriclessInstructionEnabled = false,\n maxPoints = 10,\n } = value || {};\n // rubric will contain a max value for maxPoints\n const { rubriclessInstruction = {}, maxMaxPoints = 10 } = config || {};\n const { pointsDescriptorsErrors } = errors || {};\n if (value && Number.isFinite(value.maxPoints)) {\n // eslint-disable-next-line no-console\n console.warn('maxPoints is deprecated - remove from model');\n }\n\n // for rubric value is computed based on points\n const maxPointsValue = !rubricless ? value.points.length - 1 : maxPoints;\n\n return (\n <div>\n <RubricTitle variant=\"h5\">Rubric</RubricTitle>\n <FormGroup row>\n {maxPointsEnabled && (\n <MaxPoints\n max={maxMaxPoints < 100 ? maxMaxPoints : 100}\n value={maxPointsValue}\n onChange={this.changeMaxPoints}\n pluginOpts={pluginOpts}\n />\n )}\n {excludeZeroEnabled && (\n <FormControlLabel\n label=\"Exclude zeros\"\n control={<Checkbox checked={value.excludeZero} onChange={this.excludeZeros} />}\n />\n )}\n </FormGroup>\n\n {rubriclessInstructionEnabled && rubricless && (\n <InputContainerWrapper>\n <InputContainer label={rubriclessInstruction.label}>\n <EditableHtml\n markup={value.rubriclessInstruction || ''}\n onChange={this.changeRubriclessInstruction}\n pluginProps={pluginOpts}\n nonEmpty={false}\n disableUnderline\n languageCharactersProps={[{ language: 'spanish' }, { language: 'special' }]}\n mathMlOptions={mathMlOptions}\n />\n </InputContainer>\n </InputContainerWrapper>\n )}\n\n <div>\n {rubricless ? (\n <Rubricless />\n ) : (\n <Container>\n <DragDropContext onDragEnd={this.dragEnd}>\n <Droppable droppableId=\"droppable\">\n {(provided) => (\n <div {...provided.droppableProps} ref={provided.innerRef}>\n {value.points.map(\n (p, index) =>\n this.shouldRenderPoint(index, value) && (\n <Draggable key={`${p.points}-${index}`} index={index} draggableId={index.toString()}>\n {(provided) => (\n <ConfigHolder\n ref={provided.innerRef}\n {...provided.draggableProps}\n {...provided.dragHandleProps}\n >\n <PointConfig\n points={value.points.length - 1 - index}\n content={p}\n error={\n pointsDescriptorsErrors &&\n pointsDescriptorsErrors[value.points.length - 1 - index]\n }\n sampleAnswer={value.sampleAnswers && value.sampleAnswers[index]}\n onChange={(content) => this.changeContent(index, content, 'points')}\n onSampleChange={(content) => this.changeContent(index, content, 'sampleAnswers')}\n onMenuChange={(clickedItem) => this.onPointMenuChange(index, clickedItem)}\n mathMlOptions={mathMlOptions}\n pluginOpts={pluginOpts}\n />\n </ConfigHolder>\n )}\n </Draggable>\n ),\n )}\n {provided.placeholder}\n </div>\n )}\n </Droppable>\n </DragDropContext>\n </Container>\n )}\n </div>\n </div>\n );\n }\n}\n\n// styles migrated to styled-components above\n\nconst Reverse = (props) => {\n const { rubricless = false, config = {}, pluginOpts = {} } = props || {};\n const points = Array.from(props.value.points || []).reverse();\n let sampleAnswers = Array.from(props.value.sampleAnswers || []).reverse();\n\n if (points.length > sampleAnswers.length) {\n sampleAnswers = times(points.length - sampleAnswers.length)\n .map(() => null)\n .concat(sampleAnswers);\n }\n\n const value = { ...props.value, points, sampleAnswers };\n\n const onChange = (value) => {\n props.onChange({\n ...value,\n points: Array.from(value.points || []).reverse(),\n sampleAnswers: Array.from(value.sampleAnswers || []).reverse(),\n });\n };\n\n return (\n <RawAuthoring value={value} config={config} onChange={onChange} rubricless={rubricless} pluginOpts={pluginOpts} />\n );\n};\n\nReverse.propTypes = {\n value: RubricType,\n config: PropTypes.object,\n pluginOpts: PropTypes.object,\n rubricless: PropTypes.bool,\n getIndex: PropTypes.func,\n onChange: PropTypes.func,\n};\n\nexport default Reverse;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"authoring.js","names":["_react","_interopRequireDefault","require","_propTypes","_styles","_InputLabel","_OutlinedInput","_Select","_FormControl","_MenuItem","_lodashEs","_Checkbox","_FormGroup","_FormControlLabel","_Typography","_DragIndicator","_dnd","_debug","_pointMenu","_editableHtmlTipTap","_configUi","_colors","ownKeys","e","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty2","getOwnPropertyDescriptors","defineProperties","defineProperty","_callSuper","_getPrototypeOf2","_possibleConstructorReturn2","_isNativeReflectConstruct","Reflect","construct","constructor","Boolean","prototype","valueOf","call","log","debug","reorder","list","startIndex","endIndex","result","Array","from","_result$splice","splice","_result$splice2","_slicedToArray2","removed","RubricType","exports","PropTypes","shape","excludeZero","bool","points","arrayOf","string","sampleAnswers","maxPoints","number","rubriclessInstruction","MaxPoints","props","value","onChange","max","labelId","createElement","sx","minWidth","m","variant","id","label","target","input","MenuProps","transitionDuration","enter","exit","range","map","v","key","concat","checkSampleAnswer","sampleAnswer","Row","styled","display","width","position","EditorDiv","_ref","theme","backgroundColor","palette","common","white","DragIndicatorStyled","DragIndicator","_ref2","paddingTop","spacing","color","grey","PointsLabel","Typography","_ref3","paddingBottom","textTransform","SampleAnswersEditor","_ref4","paddingLeft","ErrorText","_ref5","fontSize","typography","error","main","PointMenuWrapper","right","PointConfig","content","_props$mathMlOptions","mathMlOptions","_props$pluginOpts","pluginOpts","pointsLabel","showSampleAnswer","pluginProps","markup","onMenuChange","as","onSampleChange","Container","_ref6","borderWidth","borderStyle","borderColor","padding","margin","StyledInputContainer","InputContainer","_ref7","marginBottom","marginTop","transform","Rubricless","ConfigHolder","_ref8","RubricTitle","_ref9","RawAuthoring","_React$Component","_this","_classCallCheck2","_len","args","_key","destination","_this$props","source","index","_this$props2","_this$props3","rubricless","currentMax","times","takeRight","type","_this$props4","items","_this$props5","maxPoint","point","getPointForIndex","clickedItem","changeContent","_inherits2","_createClass2","render","_this2","_this$props6","_this$props6$mathMlOp","_this$props6$config","config","_this$props6$rubricle","_this$props6$pluginOp","_ref0","_ref0$excludeZeroEnab","excludeZeroEnabled","_ref0$maxPointsEnable","maxPointsEnabled","_ref0$errors","errors","_ref0$rubriclessInstr","rubriclessInstructionEnabled","_ref0$maxPoints","_ref1","_ref1$rubriclessInstr","_ref1$maxMaxPoints","maxMaxPoints","_ref10","pointsDescriptorsErrors","Number","isFinite","console","warn","maxPointsValue","row","changeMaxPoints","control","checked","excludeZeros","changeRubriclessInstruction","nonEmpty","disableUnderline","languageCharactersProps","language","autoWidthToolbar","DragDropContext","onDragEnd","dragEnd","Droppable","droppableId","provided","_extends2","droppableProps","ref","innerRef","p","shouldRenderPoint","Draggable","draggableId","toString","draggableProps","dragHandleProps","onPointMenuChange","placeholder","React","Component","object","func","Reverse","_ref11","_ref11$rubricless","_ref11$config","_ref11$pluginOpts","reverse","propTypes","getIndex","_default"],"sources":["../src/authoring.jsx"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { styled } from '@mui/material/styles';\n\nimport InputLabel from '@mui/material/InputLabel';\nimport OutlinedInput from '@mui/material/OutlinedInput';\nimport Select from '@mui/material/Select';\nimport FormControl from '@mui/material/FormControl';\nimport MenuItem from '@mui/material/MenuItem';\nimport { range, takeRight, times } from 'lodash-es';\nimport Checkbox from '@mui/material/Checkbox';\nimport FormGroup from '@mui/material/FormGroup';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport Typography from '@mui/material/Typography';\nimport DragIndicator from '@mui/icons-material/DragIndicator';\nimport { DragDropContext, Draggable, Droppable } from '@hello-pangea/dnd';\nimport debug from 'debug';\nimport PointMenu from './point-menu';\nimport EditableHtml from '@pie-lib/editable-html-tip-tap';\nimport { InputContainer } from '@pie-lib/config-ui';\nimport { grey } from '@mui/material/colors';\n\nconst log = debug('pie-lib:rubric:authoring');\n\nconst reorder = (list, startIndex, endIndex) => {\n const result = Array.from(list);\n const [removed] = result.splice(startIndex, 1);\n\n result.splice(endIndex, 0, removed);\n\n return result;\n};\n\nexport const RubricType = PropTypes.shape({\n excludeZero: PropTypes.bool,\n points: PropTypes.arrayOf(PropTypes.string),\n sampleAnswers: PropTypes.arrayOf(PropTypes.string),\n maxPoints: PropTypes.number,\n rubriclessInstruction: PropTypes.string,\n});\n\nconst MaxPoints = (props) => {\n const { value, onChange, max } = props;\n const labelId = 'max-points-label';\n\n return (\n <FormControl sx={{ minWidth: 120, m: 1 }} variant=\"outlined\">\n <InputLabel id={labelId}>Max Points</InputLabel>\n <Select\n labelId={labelId}\n label=\"Max Points\"\n value={value}\n onChange={(e) => onChange(e.target.value)}\n input={<OutlinedInput label=\"Max Points\" />}\n MenuProps={{ transitionDuration: { enter: 225, exit: 195 } }}\n >\n {range(1, max + 1).map((v) => (\n <MenuItem key={`${v}`} value={v}>\n {v}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n );\n};\n\n// if the value is null or 'null', the Sample Answer input field for that point will not be dispalyed\n// if the value is '', the Sample Answer input field will be empty\nconst checkSampleAnswer = (sampleAnswer) => sampleAnswer === null || sampleAnswer === 'null';\n\nconst Row = styled('div')(() => ({ display: 'flex', width: '100%', position: 'relative' }));\n\nconst EditorDiv = styled('div')(({ theme }) => ({ width: '100%', backgroundColor: `${theme.palette.common.white}` }));\n\nconst DragIndicatorStyled = styled(DragIndicator)(({ theme }) => ({ paddingTop: theme.spacing(1), color: grey[500] }));\n\nconst PointsLabel = styled(Typography)(({ theme }) => ({\n color: grey[500],\n paddingBottom: theme.spacing(1),\n textTransform: 'uppercase',\n}));\n\nconst SampleAnswersEditor = styled('div')(({ theme }) => ({ paddingLeft: theme.spacing(3) }));\n\nconst ErrorText = styled('div')(({ theme }) => ({\n fontSize: theme.typography.fontSize - 2,\n color: theme.palette.error.main,\n paddingLeft: theme.spacing(3),\n paddingTop: theme.spacing(1),\n}));\n\nconst PointMenuWrapper = styled('div')(() => ({ position: 'absolute', right: 0 }));\n\nexport const PointConfig = (props) => {\n const { points, content, sampleAnswer, mathMlOptions = {}, error, pluginOpts = {} } = props;\n const pointsLabel = `${points} ${points <= 1 ? 'pt' : 'pts'}`;\n const showSampleAnswer = checkSampleAnswer(sampleAnswer);\n\n return (\n <div>\n <PointsLabel variant=\"overline\">{pointsLabel}</PointsLabel>\n <Row>\n <DragIndicatorStyled />\n <EditorDiv>\n <EditableHtml\n error={error}\n pluginProps={pluginOpts}\n markup={content}\n onChange={props.onChange}\n mathMlOptions={mathMlOptions}\n />\n </EditorDiv>\n <PointMenuWrapper>\n <PointMenu showSampleAnswer={showSampleAnswer} onChange={props.onMenuChange} />\n </PointMenuWrapper>\n </Row>\n {error && <ErrorText>{error}</ErrorText>}\n {!showSampleAnswer && (\n <SampleAnswersEditor>\n <DragIndicatorStyled as={Typography} variant=\"overline\">\n Sample Response\n </DragIndicatorStyled>\n <EditorDiv>\n <EditableHtml\n markup={sampleAnswer}\n pluginProps={pluginOpts}\n onChange={props.onSampleChange}\n mathMlOptions={mathMlOptions}\n />\n </EditorDiv>\n </SampleAnswersEditor>\n )}\n </div>\n );\n};\n\nconst Container = styled('div')(({ theme }) => ({\n backgroundColor: grey[200],\n borderWidth: 1,\n borderStyle: 'solid',\n borderColor: grey[300],\n padding: theme.spacing(2),\n margin: theme.spacing(1),\n}));\n\nconst StyledInputContainer = styled(InputContainer)(({ theme }) => ({\n width: '100%',\n paddingTop: theme.spacing(2.5),\n marginBottom: theme.spacing(2),\n marginTop: theme.spacing(1),\n '& .MuiFormControl-root': { width: '100%' },\n '& > .MuiFormLabel-root.MuiInputLabel-shrink': {\n fontSize: theme.typography.fontSize + 2,\n transform: 'translate(0, 1.5px) scale(0.75)',\n },\n}));\n\nconst Rubricless = styled('div')(() => ({ display: 'none' }));\nconst ConfigHolder = styled('div')(({ theme }) => ({ paddingTop: theme.spacing(1), paddingBottom: theme.spacing(1) }));\nconst RubricTitle = styled(Typography)(({ theme }) => ({ paddingLeft: theme.spacing(1), margin: theme.spacing(1) }));\n\nexport class RawAuthoring extends React.Component {\n static propTypes = {\n value: RubricType,\n config: PropTypes.object,\n pluginOpts: PropTypes.object,\n rubricless: PropTypes.bool,\n onChange: PropTypes.func,\n };\n\n static defaultProps = {};\n\n dragEnd = (result) => {\n if (!result.destination) {\n return;\n }\n\n const { value, onChange } = this.props;\n\n const points = reorder(value.points, result.source.index, result.destination.index);\n const sampleAnswers = reorder(value.sampleAnswers, result.source.index, result.destination.index);\n\n onChange({ ...value, points, sampleAnswers });\n };\n\n changeRubriclessInstruction = (input) => {\n const { value, onChange } = this.props;\n onChange({ ...value, rubriclessInstruction: input });\n };\n\n changeMaxPoints = (maxPoints) => {\n const { value, onChange, rubricless } = this.props;\n const currentMax = value.points.length - 1;\n\n log('current', currentMax, 'new: ', maxPoints);\n\n let points, sampleAnswers;\n if (maxPoints > currentMax) {\n points = times(maxPoints - currentMax)\n .map(() => '')\n .concat(value.points);\n sampleAnswers = times(maxPoints - currentMax)\n .map(() => null)\n .concat(value.sampleAnswers);\n }\n\n if (maxPoints < currentMax) {\n log('less than');\n points = takeRight(value.points, maxPoints + 1);\n sampleAnswers = takeRight(value.sampleAnswers, maxPoints + 1);\n }\n\n if (points && !rubricless) {\n onChange({ ...value, points, sampleAnswers, maxPoints });\n } else {\n onChange({ ...value, maxPoints });\n }\n };\n\n changeContent = (index, content, type) => {\n // type could be 'points' or 'sampleAnswers'\n log(`changeModel[${type}]:`, index, content);\n\n if (type !== 'points' && type !== 'sampleAnswers') {\n return;\n }\n\n const { value, onChange } = this.props;\n const items = value[type] && Array.from(value[type]);\n\n items.splice(index, 1, content);\n log(`changeModel[${type}]:`, items);\n\n onChange({ ...value, [type]: items });\n };\n\n excludeZeros = () => {\n const { value, onChange } = this.props;\n\n onChange({ ...value, excludeZero: !value.excludeZero });\n };\n\n getPointForIndex = (index, value) => {\n const maxPoint = value.excludeZero ? value.points.length - 1 + 1 : value.points.length - 1;\n return maxPoint - index;\n };\n\n getMaxPoint = (value) => (value.excludeZero ? value.points.length : value.points.length - 1);\n\n shouldRenderPoint = (index, value) => {\n const point = this.getPointForIndex(index, value);\n return point > 0 || !value.excludeZero;\n };\n\n onPointMenuChange = (index, clickedItem) => {\n if (clickedItem === 'sample') {\n const { value } = this.props;\n const sampleAnswers = Array.from(value.sampleAnswers || []);\n\n if (checkSampleAnswer(sampleAnswers[index])) {\n // an empty string will display an empty Sample Answer input field\n this.changeContent(index, '', 'sampleAnswers');\n } else {\n // when the content is null or 'null', the Sample Answer input field will not be displayed\n this.changeContent(index, null, 'sampleAnswers');\n }\n }\n };\n\n render() {\n const { value, mathMlOptions = {}, config = {}, rubricless = false, pluginOpts = {} } = this.props;\n let {\n excludeZeroEnabled = true,\n maxPointsEnabled = true,\n errors = {},\n rubriclessInstructionEnabled = false,\n maxPoints = 10,\n } = value || {};\n // rubric will contain a max value for maxPoints\n const { rubriclessInstruction = {}, maxMaxPoints = 10 } = config || {};\n const { pointsDescriptorsErrors } = errors || {};\n if (value && Number.isFinite(value.maxPoints)) {\n // eslint-disable-next-line no-console\n console.warn('maxPoints is deprecated - remove from model');\n }\n\n // for rubric value is computed based on points\n const maxPointsValue = rubricless ? maxPoints : value.excludeZero ? value.points.length : value.points.length - 1;\n\n return (\n <div>\n <RubricTitle variant=\"h5\">Rubric</RubricTitle>\n <FormGroup row>\n {maxPointsEnabled && (\n <MaxPoints\n max={maxMaxPoints < 100 ? maxMaxPoints : 100}\n value={maxPointsValue}\n onChange={this.changeMaxPoints}\n pluginOpts={pluginOpts}\n />\n )}\n {excludeZeroEnabled && (\n <FormControlLabel\n label=\"Exclude zeros\"\n control={<Checkbox checked={value.excludeZero} onChange={this.excludeZeros} />}\n />\n )}\n </FormGroup>\n\n {rubriclessInstructionEnabled && rubricless && (\n <StyledInputContainer label={rubriclessInstruction.label}>\n <EditableHtml\n markup={value.rubriclessInstruction || ''}\n onChange={this.changeRubriclessInstruction}\n pluginProps={pluginOpts}\n nonEmpty={false}\n disableUnderline\n languageCharactersProps={[{ language: 'spanish' }, { language: 'special' }]}\n mathMlOptions={mathMlOptions}\n autoWidthToolbar\n />\n </StyledInputContainer>\n )}\n\n <div>\n {rubricless ? (\n <Rubricless />\n ) : (\n <Container>\n <DragDropContext onDragEnd={this.dragEnd}>\n <Droppable droppableId=\"droppable\">\n {(provided) => (\n <div {...provided.droppableProps} ref={provided.innerRef}>\n {value.points.map(\n (p, index) =>\n this.shouldRenderPoint(index, value) && (\n <Draggable key={`${p.points}-${index}`} index={index} draggableId={index.toString()}>\n {(provided) => (\n <ConfigHolder\n ref={provided.innerRef}\n {...provided.draggableProps}\n {...provided.dragHandleProps}\n >\n <PointConfig\n points={this.getPointForIndex(index, value)}\n content={p}\n error={\n pointsDescriptorsErrors &&\n pointsDescriptorsErrors[value.points.length - 1 - index]\n }\n sampleAnswer={value.sampleAnswers && value.sampleAnswers[index]}\n onChange={(content) => this.changeContent(index, content, 'points')}\n onSampleChange={(content) => this.changeContent(index, content, 'sampleAnswers')}\n onMenuChange={(clickedItem) => this.onPointMenuChange(index, clickedItem)}\n mathMlOptions={mathMlOptions}\n pluginOpts={pluginOpts}\n />\n </ConfigHolder>\n )}\n </Draggable>\n ),\n )}\n {provided.placeholder}\n </div>\n )}\n </Droppable>\n </DragDropContext>\n </Container>\n )}\n </div>\n </div>\n );\n }\n}\n\n// styles migrated to styled-components above\n\nconst Reverse = (props) => {\n const { rubricless = false, config = {}, pluginOpts = {} } = props || {};\n const points = Array.from(props.value.points || []).reverse();\n let sampleAnswers = Array.from(props.value.sampleAnswers || []).reverse();\n\n if (points.length > sampleAnswers.length) {\n sampleAnswers = times(points.length - sampleAnswers.length)\n .map(() => null)\n .concat(sampleAnswers);\n }\n\n const value = { ...props.value, points, sampleAnswers };\n\n const onChange = (value) => {\n props.onChange({\n ...value,\n points: Array.from(value.points || []).reverse(),\n sampleAnswers: Array.from(value.sampleAnswers || []).reverse(),\n });\n };\n\n return (\n <RawAuthoring value={value} config={config} onChange={onChange} rubricless={rubricless} pluginOpts={pluginOpts} />\n );\n};\n\nReverse.propTypes = {\n value: RubricType,\n config: PropTypes.object,\n pluginOpts: PropTypes.object,\n rubricless: PropTypes.bool,\n getIndex: PropTypes.func,\n onChange: PropTypes.func,\n};\n\nexport default Reverse;\n"],"mappings":"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","ignoreList":[]}
|
package/lib/index.js
CHANGED
|
@@ -17,4 +17,4 @@ var RUBRIC_TYPES = exports.RUBRIC_TYPES = {
|
|
|
17
17
|
MULTI_TRAIT_RUBRIC: 'multiTraitRubric',
|
|
18
18
|
RUBRICLESS: 'rubricless'
|
|
19
19
|
};
|
|
20
|
-
//# sourceMappingURL=
|
|
20
|
+
//# sourceMappingURL=index.js.map
|
package/lib/point-menu.js
CHANGED
|
@@ -122,4 +122,4 @@ var PointMenu = exports["default"] = /*#__PURE__*/function (_React$Component2) {
|
|
|
122
122
|
onChange: _propTypes["default"].func.isRequired,
|
|
123
123
|
showSampleAnswer: _propTypes["default"].bool.isRequired
|
|
124
124
|
});
|
|
125
|
-
//# sourceMappingURL=
|
|
125
|
+
//# sourceMappingURL=point-menu.js.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pie-lib/rubric",
|
|
3
|
-
"version": "1.2.0-next.
|
|
3
|
+
"version": "1.2.0-next.20",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
@@ -13,12 +13,12 @@
|
|
|
13
13
|
"@hello-pangea/dnd": "^18.0.1",
|
|
14
14
|
"@mui/icons-material": "^7.3.4",
|
|
15
15
|
"@mui/material": "^7.3.4",
|
|
16
|
-
"@pie-lib/editable-html-tip-tap": "^1.2.0-next.
|
|
16
|
+
"@pie-lib/editable-html-tip-tap": "^1.2.0-next.19",
|
|
17
17
|
"debug": "^4.1.1",
|
|
18
18
|
"lodash-es": "^4.17.23",
|
|
19
19
|
"prop-types": "^15.7.2",
|
|
20
20
|
"react": "^18.2.0",
|
|
21
21
|
"react-dom": "^18.2.0"
|
|
22
22
|
},
|
|
23
|
-
"gitHead": "
|
|
23
|
+
"gitHead": "2e7523e9d0895728783bb65dbed8c0bfe282c0f5"
|
|
24
24
|
}
|
|
@@ -13,6 +13,11 @@ jest.mock('@pie-lib/editable-html-tip-tap', () => {
|
|
|
13
13
|
|
|
14
14
|
jest.mock('@pie-lib/config-ui', () => ({
|
|
15
15
|
FeedbackConfig: ({ feedback }) => <div data-testid="feedback-config">{JSON.stringify(feedback)}</div>,
|
|
16
|
+
InputContainer: ({ children, label }) => (
|
|
17
|
+
<div data-testid="input-container" data-label={label}>
|
|
18
|
+
{children}
|
|
19
|
+
</div>
|
|
20
|
+
),
|
|
16
21
|
}));
|
|
17
22
|
|
|
18
23
|
jest.mock('@hello-pangea/dnd', () => ({
|
|
@@ -82,14 +87,7 @@ describe('Rubric', () => {
|
|
|
82
87
|
|
|
83
88
|
describe('draggable', () => {
|
|
84
89
|
it('renders 3 draggable items when excludeZero is true', () => {
|
|
85
|
-
const { container } = renderComponent({ excludeZero: true });
|
|
86
|
-
|
|
87
90
|
// When excludeZero is true, the last point (0 pts) should not be rendered
|
|
88
|
-
// So we should have 3 draggable items
|
|
89
|
-
const draggableItems = container.querySelectorAll('[data-draggable-index]');
|
|
90
|
-
expect(draggableItems.length).toEqual(3);
|
|
91
|
-
|
|
92
|
-
// Verify the 0 pt label is not rendered
|
|
93
91
|
expect(screen.queryByText('0 pt')).not.toBeInTheDocument();
|
|
94
92
|
});
|
|
95
93
|
|
|
@@ -99,6 +97,7 @@ describe('Rubric', () => {
|
|
|
99
97
|
// When excludeZero is false, all points including 0 should be rendered
|
|
100
98
|
const draggableItems = container.querySelectorAll('[data-draggable-index]');
|
|
101
99
|
expect(draggableItems.length).toEqual(4);
|
|
100
|
+
expect(screen.getByText('0 pt')).toBeInTheDocument();
|
|
102
101
|
|
|
103
102
|
// Verify all point labels are rendered
|
|
104
103
|
expect(screen.getByText('3 pts')).toBeInTheDocument();
|
package/src/authoring.jsx
CHANGED
|
@@ -142,12 +142,19 @@ const Container = styled('div')(({ theme }) => ({
|
|
|
142
142
|
padding: theme.spacing(2),
|
|
143
143
|
margin: theme.spacing(1),
|
|
144
144
|
}));
|
|
145
|
-
|
|
145
|
+
|
|
146
|
+
const StyledInputContainer = styled(InputContainer)(({ theme }) => ({
|
|
146
147
|
width: '100%',
|
|
147
|
-
paddingTop: theme.spacing(2),
|
|
148
|
+
paddingTop: theme.spacing(2.5),
|
|
148
149
|
marginBottom: theme.spacing(2),
|
|
149
|
-
|
|
150
|
+
marginTop: theme.spacing(1),
|
|
151
|
+
'& .MuiFormControl-root': { width: '100%' },
|
|
152
|
+
'& > .MuiFormLabel-root.MuiInputLabel-shrink': {
|
|
153
|
+
fontSize: theme.typography.fontSize + 2,
|
|
154
|
+
transform: 'translate(0, 1.5px) scale(0.75)',
|
|
155
|
+
},
|
|
150
156
|
}));
|
|
157
|
+
|
|
151
158
|
const Rubricless = styled('div')(() => ({ display: 'none' }));
|
|
152
159
|
const ConfigHolder = styled('div')(({ theme }) => ({ paddingTop: theme.spacing(1), paddingBottom: theme.spacing(1) }));
|
|
153
160
|
const RubricTitle = styled(Typography)(({ theme }) => ({ paddingLeft: theme.spacing(1), margin: theme.spacing(1) }));
|
|
@@ -233,18 +240,16 @@ export class RawAuthoring extends React.Component {
|
|
|
233
240
|
onChange({ ...value, excludeZero: !value.excludeZero });
|
|
234
241
|
};
|
|
235
242
|
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
if (index < value.points.length - 1) {
|
|
241
|
-
return true;
|
|
242
|
-
} else if (index === value.points.length - 1) {
|
|
243
|
-
return false;
|
|
244
|
-
}
|
|
243
|
+
getPointForIndex = (index, value) => {
|
|
244
|
+
const maxPoint = value.excludeZero ? value.points.length - 1 + 1 : value.points.length - 1;
|
|
245
|
+
return maxPoint - index;
|
|
246
|
+
};
|
|
245
247
|
|
|
246
|
-
|
|
247
|
-
|
|
248
|
+
getMaxPoint = (value) => (value.excludeZero ? value.points.length : value.points.length - 1);
|
|
249
|
+
|
|
250
|
+
shouldRenderPoint = (index, value) => {
|
|
251
|
+
const point = this.getPointForIndex(index, value);
|
|
252
|
+
return point > 0 || !value.excludeZero;
|
|
248
253
|
};
|
|
249
254
|
|
|
250
255
|
onPointMenuChange = (index, clickedItem) => {
|
|
@@ -280,7 +285,7 @@ export class RawAuthoring extends React.Component {
|
|
|
280
285
|
}
|
|
281
286
|
|
|
282
287
|
// for rubric value is computed based on points
|
|
283
|
-
const maxPointsValue =
|
|
288
|
+
const maxPointsValue = rubricless ? maxPoints : value.excludeZero ? value.points.length : value.points.length - 1;
|
|
284
289
|
|
|
285
290
|
return (
|
|
286
291
|
<div>
|
|
@@ -303,19 +308,18 @@ export class RawAuthoring extends React.Component {
|
|
|
303
308
|
</FormGroup>
|
|
304
309
|
|
|
305
310
|
{rubriclessInstructionEnabled && rubricless && (
|
|
306
|
-
<
|
|
307
|
-
<
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
</InputContainerWrapper>
|
|
311
|
+
<StyledInputContainer label={rubriclessInstruction.label}>
|
|
312
|
+
<EditableHtml
|
|
313
|
+
markup={value.rubriclessInstruction || ''}
|
|
314
|
+
onChange={this.changeRubriclessInstruction}
|
|
315
|
+
pluginProps={pluginOpts}
|
|
316
|
+
nonEmpty={false}
|
|
317
|
+
disableUnderline
|
|
318
|
+
languageCharactersProps={[{ language: 'spanish' }, { language: 'special' }]}
|
|
319
|
+
mathMlOptions={mathMlOptions}
|
|
320
|
+
autoWidthToolbar
|
|
321
|
+
/>
|
|
322
|
+
</StyledInputContainer>
|
|
319
323
|
)}
|
|
320
324
|
|
|
321
325
|
<div>
|
|
@@ -338,7 +342,7 @@ export class RawAuthoring extends React.Component {
|
|
|
338
342
|
{...provided.dragHandleProps}
|
|
339
343
|
>
|
|
340
344
|
<PointConfig
|
|
341
|
-
points={
|
|
345
|
+
points={this.getPointForIndex(index, value)}
|
|
342
346
|
content={p}
|
|
343
347
|
error={
|
|
344
348
|
pointsDescriptorsErrors &&
|
|
@@ -1,432 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
5
|
-
var _react = require("@testing-library/react");
|
|
6
|
-
var _react2 = _interopRequireDefault(require("react"));
|
|
7
|
-
var _authoring = require("../authoring");
|
|
8
|
-
var _lodashEs = require("lodash-es");
|
|
9
|
-
var _styles = require("@mui/material/styles");
|
|
10
|
-
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
11
|
-
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
12
|
-
// Mock dependencies
|
|
13
|
-
jest.mock('@pie-lib/editable-html-tip-tap', function () {
|
|
14
|
-
return function EditableHtml(props) {
|
|
15
|
-
return /*#__PURE__*/_react2["default"].createElement("div", {
|
|
16
|
-
"data-testid": "editable-html",
|
|
17
|
-
"data-markup": props.markup
|
|
18
|
-
});
|
|
19
|
-
};
|
|
20
|
-
});
|
|
21
|
-
jest.mock('@pie-lib/config-ui', function () {
|
|
22
|
-
return {
|
|
23
|
-
FeedbackConfig: function FeedbackConfig(_ref) {
|
|
24
|
-
var feedback = _ref.feedback;
|
|
25
|
-
return /*#__PURE__*/_react2["default"].createElement("div", {
|
|
26
|
-
"data-testid": "feedback-config"
|
|
27
|
-
}, JSON.stringify(feedback));
|
|
28
|
-
}
|
|
29
|
-
};
|
|
30
|
-
});
|
|
31
|
-
jest.mock('@hello-pangea/dnd', function () {
|
|
32
|
-
return {
|
|
33
|
-
DragDropContext: function DragDropContext(_ref2) {
|
|
34
|
-
var children = _ref2.children;
|
|
35
|
-
return /*#__PURE__*/_react2["default"].createElement("div", {
|
|
36
|
-
"data-testid": "drag-drop-context"
|
|
37
|
-
}, children);
|
|
38
|
-
},
|
|
39
|
-
Droppable: function Droppable(_ref3) {
|
|
40
|
-
var children = _ref3.children;
|
|
41
|
-
return children({
|
|
42
|
-
droppableProps: {},
|
|
43
|
-
innerRef: function innerRef() {}
|
|
44
|
-
}, {});
|
|
45
|
-
},
|
|
46
|
-
Draggable: function Draggable(_ref4) {
|
|
47
|
-
var children = _ref4.children,
|
|
48
|
-
index = _ref4.index;
|
|
49
|
-
return children({
|
|
50
|
-
innerRef: function innerRef() {},
|
|
51
|
-
draggableProps: {
|
|
52
|
-
'data-draggable-index': index
|
|
53
|
-
},
|
|
54
|
-
dragHandleProps: {}
|
|
55
|
-
}, {});
|
|
56
|
-
}
|
|
57
|
-
};
|
|
58
|
-
});
|
|
59
|
-
describe('Rubric', function () {
|
|
60
|
-
var points = ['nothing right', 'a teeny bit right', 'mostly right', 'bingo'];
|
|
61
|
-
var sampleAnswers = [null, 'just right', 'not left', null];
|
|
62
|
-
var theme = (0, _styles.createTheme)();
|
|
63
|
-
var renderComponent = function renderComponent() {
|
|
64
|
-
var value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
65
|
-
var props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
66
|
-
var defaultProps = _objectSpread({
|
|
67
|
-
classes: {},
|
|
68
|
-
onChange: jest.fn(),
|
|
69
|
-
className: 'className',
|
|
70
|
-
value: _objectSpread({
|
|
71
|
-
excludeZero: false,
|
|
72
|
-
points: points,
|
|
73
|
-
sampleAnswers: sampleAnswers
|
|
74
|
-
}, value)
|
|
75
|
-
}, props);
|
|
76
|
-
return _objectSpread(_objectSpread({}, (0, _react.render)(/*#__PURE__*/_react2["default"].createElement(_styles.ThemeProvider, {
|
|
77
|
-
theme: theme
|
|
78
|
-
}, /*#__PURE__*/_react2["default"].createElement(_authoring.RawAuthoring, defaultProps)))), {}, {
|
|
79
|
-
onChange: defaultProps.onChange,
|
|
80
|
-
props: defaultProps
|
|
81
|
-
});
|
|
82
|
-
};
|
|
83
|
-
describe('render', function () {
|
|
84
|
-
it('renders rubric title and main structure', function () {
|
|
85
|
-
renderComponent();
|
|
86
|
-
expect(_react.screen.getByText('Rubric')).toBeInTheDocument();
|
|
87
|
-
expect(_react.screen.getByLabelText('Max Points')).toBeInTheDocument();
|
|
88
|
-
expect(_react.screen.getByLabelText('Exclude zeros')).toBeInTheDocument();
|
|
89
|
-
});
|
|
90
|
-
it('renders all point configurations', function () {
|
|
91
|
-
var _renderComponent = renderComponent(),
|
|
92
|
-
container = _renderComponent.container;
|
|
93
|
-
// Verify DragDropContext is rendered
|
|
94
|
-
expect(container.querySelector('[data-testid="drag-drop-context"]')).toBeInTheDocument();
|
|
95
|
-
|
|
96
|
-
// Check that point labels are rendered (4 points = "3 pts", "2 pts", "1 pt", "0 pt")
|
|
97
|
-
// Note: The PointConfig component uses singular "pt" for 0 and 1, plural "pts" for 2+
|
|
98
|
-
expect(_react.screen.getByText('3 pts')).toBeInTheDocument();
|
|
99
|
-
expect(_react.screen.getByText('2 pts')).toBeInTheDocument();
|
|
100
|
-
expect(_react.screen.getByText('1 pt')).toBeInTheDocument();
|
|
101
|
-
expect(_react.screen.getByText('0 pt')).toBeInTheDocument();
|
|
102
|
-
});
|
|
103
|
-
describe('draggable', function () {
|
|
104
|
-
it('renders 3 draggable items when excludeZero is true', function () {
|
|
105
|
-
var _renderComponent2 = renderComponent({
|
|
106
|
-
excludeZero: true
|
|
107
|
-
}),
|
|
108
|
-
container = _renderComponent2.container;
|
|
109
|
-
|
|
110
|
-
// When excludeZero is true, the last point (0 pts) should not be rendered
|
|
111
|
-
// So we should have 3 draggable items
|
|
112
|
-
var draggableItems = container.querySelectorAll('[data-draggable-index]');
|
|
113
|
-
expect(draggableItems.length).toEqual(3);
|
|
114
|
-
|
|
115
|
-
// Verify the 0 pt label is not rendered
|
|
116
|
-
expect(_react.screen.queryByText('0 pt')).not.toBeInTheDocument();
|
|
117
|
-
});
|
|
118
|
-
it('renders 4 draggable items when excludeZero is false', function () {
|
|
119
|
-
var _renderComponent3 = renderComponent({
|
|
120
|
-
excludeZero: false
|
|
121
|
-
}),
|
|
122
|
-
container = _renderComponent3.container;
|
|
123
|
-
|
|
124
|
-
// When excludeZero is false, all points including 0 should be rendered
|
|
125
|
-
var draggableItems = container.querySelectorAll('[data-draggable-index]');
|
|
126
|
-
expect(draggableItems.length).toEqual(4);
|
|
127
|
-
|
|
128
|
-
// Verify all point labels are rendered
|
|
129
|
-
expect(_react.screen.getByText('3 pts')).toBeInTheDocument();
|
|
130
|
-
expect(_react.screen.getByText('2 pts')).toBeInTheDocument();
|
|
131
|
-
expect(_react.screen.getByText('1 pt')).toBeInTheDocument();
|
|
132
|
-
expect(_react.screen.getByText('0 pt')).toBeInTheDocument();
|
|
133
|
-
});
|
|
134
|
-
});
|
|
135
|
-
});
|
|
136
|
-
describe('logic', function () {
|
|
137
|
-
describe('changeMaxPoints', function () {
|
|
138
|
-
var testChangeMaxPoints = function testChangeMaxPoints(maxPoints, excludeZero, expectedPoints, expectedSampleAnswers) {
|
|
139
|
-
it("maxPoints=".concat(maxPoints, ", excludeZero=").concat(excludeZero, " calls onChange correctly"), function () {
|
|
140
|
-
var _container$querySelec;
|
|
141
|
-
var _renderComponent4 = renderComponent({
|
|
142
|
-
excludeZero: excludeZero
|
|
143
|
-
}),
|
|
144
|
-
onChange = _renderComponent4.onChange,
|
|
145
|
-
container = _renderComponent4.container;
|
|
146
|
-
|
|
147
|
-
// Get the component instance through the container
|
|
148
|
-
// We need to call the method directly since we're testing internal behavior
|
|
149
|
-
var instance = (_container$querySelec = container.querySelector('[class*="MuiBox-root"]')) === null || _container$querySelec === void 0 ? void 0 : _container$querySelec._owner;
|
|
150
|
-
|
|
151
|
-
// Since we can't easily access instance methods in RTL, we'll test the behavior
|
|
152
|
-
// by verifying the onChange prop receives the correct values
|
|
153
|
-
// For now, we'll directly test the logic
|
|
154
|
-
var component = new _authoring.RawAuthoring({
|
|
155
|
-
value: {
|
|
156
|
-
excludeZero: excludeZero,
|
|
157
|
-
points: points,
|
|
158
|
-
sampleAnswers: sampleAnswers
|
|
159
|
-
},
|
|
160
|
-
onChange: onChange,
|
|
161
|
-
classes: {},
|
|
162
|
-
className: 'className'
|
|
163
|
-
});
|
|
164
|
-
component.changeMaxPoints(maxPoints);
|
|
165
|
-
expect(onChange).toHaveBeenCalledWith({
|
|
166
|
-
excludeZero: excludeZero,
|
|
167
|
-
points: expectedPoints,
|
|
168
|
-
sampleAnswers: expectedSampleAnswers,
|
|
169
|
-
maxPoints: expectedPoints.length - 1
|
|
170
|
-
});
|
|
171
|
-
});
|
|
172
|
-
};
|
|
173
|
-
testChangeMaxPoints(1, false, (0, _lodashEs.takeRight)(points, 2), (0, _lodashEs.takeRight)(sampleAnswers, 2));
|
|
174
|
-
testChangeMaxPoints(1, true, (0, _lodashEs.takeRight)(points, 2), (0, _lodashEs.takeRight)(sampleAnswers, 2));
|
|
175
|
-
testChangeMaxPoints(2, true, (0, _lodashEs.takeRight)(points, 3), (0, _lodashEs.takeRight)(sampleAnswers, 3));
|
|
176
|
-
testChangeMaxPoints(2, false, (0, _lodashEs.takeRight)(points, 3), (0, _lodashEs.takeRight)(sampleAnswers, 3));
|
|
177
|
-
testChangeMaxPoints(5, false, ['', ''].concat(points), [null, null].concat(sampleAnswers));
|
|
178
|
-
});
|
|
179
|
-
describe('changeSampleResponse', function () {
|
|
180
|
-
var testChangeSampleResponse = function testChangeSampleResponse(index, clickedItem, excludeZero, expectedPoints, expectedSampleAnswers) {
|
|
181
|
-
it("Point ".concat(index, " with clickedItem=\"").concat(clickedItem, "\" calls onChange correctly"), function () {
|
|
182
|
-
var _renderComponent5 = renderComponent({
|
|
183
|
-
excludeZero: excludeZero
|
|
184
|
-
}),
|
|
185
|
-
onChange = _renderComponent5.onChange;
|
|
186
|
-
|
|
187
|
-
// Test the logic by creating a component instance and calling the method
|
|
188
|
-
var component = new _authoring.RawAuthoring({
|
|
189
|
-
value: {
|
|
190
|
-
excludeZero: excludeZero,
|
|
191
|
-
points: points,
|
|
192
|
-
sampleAnswers: sampleAnswers
|
|
193
|
-
},
|
|
194
|
-
onChange: onChange,
|
|
195
|
-
classes: {},
|
|
196
|
-
className: 'className'
|
|
197
|
-
});
|
|
198
|
-
component.onPointMenuChange(index, clickedItem);
|
|
199
|
-
expect(onChange).toHaveBeenCalledWith({
|
|
200
|
-
excludeZero: excludeZero,
|
|
201
|
-
points: expectedPoints,
|
|
202
|
-
sampleAnswers: expectedSampleAnswers
|
|
203
|
-
});
|
|
204
|
-
});
|
|
205
|
-
};
|
|
206
|
-
testChangeSampleResponse(0, 'sample', false, points, ['', 'just right', 'not left', null]);
|
|
207
|
-
testChangeSampleResponse(3, 'sample', false, points, [null, 'just right', 'not left', '']);
|
|
208
|
-
testChangeSampleResponse(1, 'sample', true, points, [null, null, 'not left', null]);
|
|
209
|
-
testChangeSampleResponse(3, 'sample', true, points, [null, 'just right', 'not left', '']);
|
|
210
|
-
});
|
|
211
|
-
});
|
|
212
|
-
describe('user interactions', function () {
|
|
213
|
-
it('calls onChange when excluding zeros checkbox is toggled', function () {
|
|
214
|
-
var _renderComponent6 = renderComponent({
|
|
215
|
-
excludeZero: false
|
|
216
|
-
}),
|
|
217
|
-
onChange = _renderComponent6.onChange;
|
|
218
|
-
var checkbox = _react.screen.getByLabelText('Exclude zeros');
|
|
219
|
-
_react.fireEvent.click(checkbox);
|
|
220
|
-
expect(onChange).toHaveBeenCalledWith(expect.objectContaining({
|
|
221
|
-
excludeZero: true
|
|
222
|
-
}));
|
|
223
|
-
});
|
|
224
|
-
it('calls onChange when max points is changed', function () {
|
|
225
|
-
var _renderComponent7 = renderComponent(),
|
|
226
|
-
onChange = _renderComponent7.onChange;
|
|
227
|
-
var selectInput = _react.screen.getByLabelText('Max Points');
|
|
228
|
-
_react.fireEvent.mouseDown(selectInput);
|
|
229
|
-
|
|
230
|
-
// The onChange should be called when a new value is selected
|
|
231
|
-
// This tests the changeMaxPoints logic indirectly
|
|
232
|
-
});
|
|
233
|
-
it('renders correct number of points based on excludeZero', function () {
|
|
234
|
-
var _renderComponent8 = renderComponent({
|
|
235
|
-
excludeZero: false
|
|
236
|
-
}),
|
|
237
|
-
rerender = _renderComponent8.rerender;
|
|
238
|
-
expect(_react.screen.getByText('0 pt')).toBeInTheDocument();
|
|
239
|
-
|
|
240
|
-
// Rerender with excludeZero true
|
|
241
|
-
rerender(/*#__PURE__*/_react2["default"].createElement(_styles.ThemeProvider, {
|
|
242
|
-
theme: theme
|
|
243
|
-
}, /*#__PURE__*/_react2["default"].createElement(_authoring.RawAuthoring, {
|
|
244
|
-
classes: {},
|
|
245
|
-
onChange: jest.fn(),
|
|
246
|
-
className: "className",
|
|
247
|
-
value: {
|
|
248
|
-
excludeZero: true,
|
|
249
|
-
points: points,
|
|
250
|
-
sampleAnswers: sampleAnswers
|
|
251
|
-
}
|
|
252
|
-
})));
|
|
253
|
-
expect(_react.screen.queryByText('0 pt')).not.toBeInTheDocument();
|
|
254
|
-
});
|
|
255
|
-
});
|
|
256
|
-
describe('drag and drop', function () {
|
|
257
|
-
it('calls onChange with reordered points after drag end', function () {
|
|
258
|
-
var _renderComponent9 = renderComponent(),
|
|
259
|
-
onChange = _renderComponent9.onChange;
|
|
260
|
-
var component = new _authoring.RawAuthoring({
|
|
261
|
-
value: {
|
|
262
|
-
excludeZero: false,
|
|
263
|
-
points: points,
|
|
264
|
-
sampleAnswers: sampleAnswers
|
|
265
|
-
},
|
|
266
|
-
onChange: onChange,
|
|
267
|
-
classes: {},
|
|
268
|
-
className: 'className'
|
|
269
|
-
});
|
|
270
|
-
|
|
271
|
-
// Simulate drag from index 0 to index 2
|
|
272
|
-
component.dragEnd({
|
|
273
|
-
source: {
|
|
274
|
-
index: 0
|
|
275
|
-
},
|
|
276
|
-
destination: {
|
|
277
|
-
index: 2
|
|
278
|
-
}
|
|
279
|
-
});
|
|
280
|
-
expect(onChange).toHaveBeenCalled();
|
|
281
|
-
var result = onChange.mock.calls[0][0];
|
|
282
|
-
expect(result.points).not.toEqual(points);
|
|
283
|
-
expect(result.points.length).toBe(points.length);
|
|
284
|
-
});
|
|
285
|
-
it('does nothing when drag has no destination', function () {
|
|
286
|
-
var _renderComponent0 = renderComponent(),
|
|
287
|
-
onChange = _renderComponent0.onChange;
|
|
288
|
-
var component = new _authoring.RawAuthoring({
|
|
289
|
-
value: {
|
|
290
|
-
excludeZero: false,
|
|
291
|
-
points: points,
|
|
292
|
-
sampleAnswers: sampleAnswers
|
|
293
|
-
},
|
|
294
|
-
onChange: onChange,
|
|
295
|
-
classes: {},
|
|
296
|
-
className: 'className'
|
|
297
|
-
});
|
|
298
|
-
|
|
299
|
-
// Simulate drag without destination
|
|
300
|
-
component.dragEnd({
|
|
301
|
-
source: {
|
|
302
|
-
index: 0
|
|
303
|
-
},
|
|
304
|
-
destination: null
|
|
305
|
-
});
|
|
306
|
-
expect(onChange).not.toHaveBeenCalled();
|
|
307
|
-
});
|
|
308
|
-
});
|
|
309
|
-
describe('content editing', function () {
|
|
310
|
-
it('calls onChange when point content is changed', function () {
|
|
311
|
-
var _renderComponent1 = renderComponent(),
|
|
312
|
-
onChange = _renderComponent1.onChange;
|
|
313
|
-
var component = new _authoring.RawAuthoring({
|
|
314
|
-
value: {
|
|
315
|
-
excludeZero: false,
|
|
316
|
-
points: points,
|
|
317
|
-
sampleAnswers: sampleAnswers
|
|
318
|
-
},
|
|
319
|
-
onChange: onChange,
|
|
320
|
-
classes: {},
|
|
321
|
-
className: 'className'
|
|
322
|
-
});
|
|
323
|
-
component.changeContent(0, 'new content', 'points');
|
|
324
|
-
expect(onChange).toHaveBeenCalledWith(expect.objectContaining({
|
|
325
|
-
points: expect.arrayContaining(['new content'])
|
|
326
|
-
}));
|
|
327
|
-
});
|
|
328
|
-
it('calls onChange when sample answer is changed', function () {
|
|
329
|
-
var _renderComponent10 = renderComponent(),
|
|
330
|
-
onChange = _renderComponent10.onChange;
|
|
331
|
-
var component = new _authoring.RawAuthoring({
|
|
332
|
-
value: {
|
|
333
|
-
excludeZero: false,
|
|
334
|
-
points: points,
|
|
335
|
-
sampleAnswers: sampleAnswers
|
|
336
|
-
},
|
|
337
|
-
onChange: onChange,
|
|
338
|
-
classes: {},
|
|
339
|
-
className: 'className'
|
|
340
|
-
});
|
|
341
|
-
component.changeContent(1, 'new sample answer', 'sampleAnswers');
|
|
342
|
-
expect(onChange).toHaveBeenCalledWith(expect.objectContaining({
|
|
343
|
-
sampleAnswers: expect.arrayContaining(['new sample answer'])
|
|
344
|
-
}));
|
|
345
|
-
});
|
|
346
|
-
it('does not change content for invalid type', function () {
|
|
347
|
-
var _renderComponent11 = renderComponent(),
|
|
348
|
-
onChange = _renderComponent11.onChange;
|
|
349
|
-
var component = new _authoring.RawAuthoring({
|
|
350
|
-
value: {
|
|
351
|
-
excludeZero: false,
|
|
352
|
-
points: points,
|
|
353
|
-
sampleAnswers: sampleAnswers
|
|
354
|
-
},
|
|
355
|
-
onChange: onChange,
|
|
356
|
-
classes: {},
|
|
357
|
-
className: 'className'
|
|
358
|
-
});
|
|
359
|
-
component.changeContent(0, 'new content', 'invalidType');
|
|
360
|
-
expect(onChange).not.toHaveBeenCalled();
|
|
361
|
-
});
|
|
362
|
-
});
|
|
363
|
-
describe('rubricless mode', function () {
|
|
364
|
-
it('calls onChange when rubricless instruction is changed', function () {
|
|
365
|
-
var _renderComponent12 = renderComponent({
|
|
366
|
-
rubriclessInstruction: ''
|
|
367
|
-
}, {
|
|
368
|
-
rubricless: true
|
|
369
|
-
}),
|
|
370
|
-
onChange = _renderComponent12.onChange;
|
|
371
|
-
var component = new _authoring.RawAuthoring({
|
|
372
|
-
value: {
|
|
373
|
-
excludeZero: false,
|
|
374
|
-
points: points,
|
|
375
|
-
sampleAnswers: sampleAnswers,
|
|
376
|
-
rubriclessInstruction: ''
|
|
377
|
-
},
|
|
378
|
-
onChange: onChange,
|
|
379
|
-
classes: {},
|
|
380
|
-
className: 'className',
|
|
381
|
-
rubricless: true
|
|
382
|
-
});
|
|
383
|
-
component.changeRubriclessInstruction('New instruction');
|
|
384
|
-
expect(onChange).toHaveBeenCalledWith(expect.objectContaining({
|
|
385
|
-
rubriclessInstruction: 'New instruction'
|
|
386
|
-
}));
|
|
387
|
-
});
|
|
388
|
-
});
|
|
389
|
-
describe('edge cases', function () {
|
|
390
|
-
it('handles empty points array', function () {
|
|
391
|
-
var _renderComponent13 = renderComponent({
|
|
392
|
-
points: [],
|
|
393
|
-
sampleAnswers: []
|
|
394
|
-
}),
|
|
395
|
-
container = _renderComponent13.container;
|
|
396
|
-
expect(container).toBeInTheDocument();
|
|
397
|
-
});
|
|
398
|
-
it('handles maxPoints greater than current max', function () {
|
|
399
|
-
var _renderComponent14 = renderComponent(),
|
|
400
|
-
onChange = _renderComponent14.onChange;
|
|
401
|
-
var component = new _authoring.RawAuthoring({
|
|
402
|
-
value: {
|
|
403
|
-
excludeZero: false,
|
|
404
|
-
points: points,
|
|
405
|
-
sampleAnswers: sampleAnswers
|
|
406
|
-
},
|
|
407
|
-
onChange: onChange,
|
|
408
|
-
classes: {},
|
|
409
|
-
className: 'className'
|
|
410
|
-
});
|
|
411
|
-
component.changeMaxPoints(10);
|
|
412
|
-
expect(onChange).toHaveBeenCalled();
|
|
413
|
-
var result = onChange.mock.calls[0][0];
|
|
414
|
-
expect(result.points.length).toBe(11); // 10 + 1 for 0 points
|
|
415
|
-
});
|
|
416
|
-
it('handles config and pluginOpts props', function () {
|
|
417
|
-
var config = {
|
|
418
|
-
someConfig: true
|
|
419
|
-
};
|
|
420
|
-
var pluginOpts = {
|
|
421
|
-
somePlugin: true
|
|
422
|
-
};
|
|
423
|
-
var _renderComponent15 = renderComponent({}, {
|
|
424
|
-
config: config,
|
|
425
|
-
pluginOpts: pluginOpts
|
|
426
|
-
}),
|
|
427
|
-
container = _renderComponent15.container;
|
|
428
|
-
expect(container).toBeInTheDocument();
|
|
429
|
-
});
|
|
430
|
-
});
|
|
431
|
-
});
|
|
432
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJyZXF1aXJlIiwiX3JlYWN0MiIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfYXV0aG9yaW5nIiwiX2xvZGFzaEVzIiwiX3N0eWxlcyIsIm93bktleXMiLCJlIiwiciIsInQiLCJPYmplY3QiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwibyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwiamVzdCIsIm1vY2siLCJFZGl0YWJsZUh0bWwiLCJwcm9wcyIsImNyZWF0ZUVsZW1lbnQiLCJtYXJrdXAiLCJGZWVkYmFja0NvbmZpZyIsIl9yZWYiLCJmZWVkYmFjayIsIkpTT04iLCJzdHJpbmdpZnkiLCJEcmFnRHJvcENvbnRleHQiLCJfcmVmMiIsImNoaWxkcmVuIiwiRHJvcHBhYmxlIiwiX3JlZjMiLCJkcm9wcGFibGVQcm9wcyIsImlubmVyUmVmIiwiRHJhZ2dhYmxlIiwiX3JlZjQiLCJpbmRleCIsImRyYWdnYWJsZVByb3BzIiwiZHJhZ0hhbmRsZVByb3BzIiwiZGVzY3JpYmUiLCJwb2ludHMiLCJzYW1wbGVBbnN3ZXJzIiwidGhlbWUiLCJjcmVhdGVUaGVtZSIsInJlbmRlckNvbXBvbmVudCIsInZhbHVlIiwidW5kZWZpbmVkIiwiZGVmYXVsdFByb3BzIiwiY2xhc3NlcyIsIm9uQ2hhbmdlIiwiZm4iLCJjbGFzc05hbWUiLCJleGNsdWRlWmVybyIsInJlbmRlciIsIlRoZW1lUHJvdmlkZXIiLCJSYXdBdXRob3JpbmciLCJpdCIsImV4cGVjdCIsInNjcmVlbiIsImdldEJ5VGV4dCIsInRvQmVJblRoZURvY3VtZW50IiwiZ2V0QnlMYWJlbFRleHQiLCJfcmVuZGVyQ29tcG9uZW50IiwiY29udGFpbmVyIiwicXVlcnlTZWxlY3RvciIsIl9yZW5kZXJDb21wb25lbnQyIiwiZHJhZ2dhYmxlSXRlbXMiLCJxdWVyeVNlbGVjdG9yQWxsIiwidG9FcXVhbCIsInF1ZXJ5QnlUZXh0Iiwibm90IiwiX3JlbmRlckNvbXBvbmVudDMiLCJ0ZXN0Q2hhbmdlTWF4UG9pbnRzIiwibWF4UG9pbnRzIiwiZXhwZWN0ZWRQb2ludHMiLCJleHBlY3RlZFNhbXBsZUFuc3dlcnMiLCJjb25jYXQiLCJfY29udGFpbmVyJHF1ZXJ5U2VsZWMiLCJfcmVuZGVyQ29tcG9uZW50NCIsImluc3RhbmNlIiwiX293bmVyIiwiY29tcG9uZW50IiwiY2hhbmdlTWF4UG9pbnRzIiwidG9IYXZlQmVlbkNhbGxlZFdpdGgiLCJ0YWtlUmlnaHQiLCJ0ZXN0Q2hhbmdlU2FtcGxlUmVzcG9uc2UiLCJjbGlja2VkSXRlbSIsIl9yZW5kZXJDb21wb25lbnQ1Iiwib25Qb2ludE1lbnVDaGFuZ2UiLCJfcmVuZGVyQ29tcG9uZW50NiIsImNoZWNrYm94IiwiZmlyZUV2ZW50IiwiY2xpY2siLCJvYmplY3RDb250YWluaW5nIiwiX3JlbmRlckNvbXBvbmVudDciLCJzZWxlY3RJbnB1dCIsIm1vdXNlRG93biIsIl9yZW5kZXJDb21wb25lbnQ4IiwicmVyZW5kZXIiLCJfcmVuZGVyQ29tcG9uZW50OSIsImRyYWdFbmQiLCJzb3VyY2UiLCJkZXN0aW5hdGlvbiIsInRvSGF2ZUJlZW5DYWxsZWQiLCJyZXN1bHQiLCJjYWxscyIsInRvQmUiLCJfcmVuZGVyQ29tcG9uZW50MCIsIl9yZW5kZXJDb21wb25lbnQxIiwiY2hhbmdlQ29udGVudCIsImFycmF5Q29udGFpbmluZyIsIl9yZW5kZXJDb21wb25lbnQxMCIsIl9yZW5kZXJDb21wb25lbnQxMSIsIl9yZW5kZXJDb21wb25lbnQxMiIsInJ1YnJpY2xlc3NJbnN0cnVjdGlvbiIsInJ1YnJpY2xlc3MiLCJjaGFuZ2VSdWJyaWNsZXNzSW5zdHJ1Y3Rpb24iLCJfcmVuZGVyQ29tcG9uZW50MTMiLCJfcmVuZGVyQ29tcG9uZW50MTQiLCJjb25maWciLCJzb21lQ29uZmlnIiwicGx1Z2luT3B0cyIsInNvbWVQbHVnaW4iLCJfcmVuZGVyQ29tcG9uZW50MTUiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvX190ZXN0c19fL3J1YnJpYy50ZXN0LmpzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmaXJlRXZlbnQsIHJlbmRlciwgc2NyZWVuIH0gZnJvbSAnQHRlc3RpbmctbGlicmFyeS9yZWFjdCc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgUmF3QXV0aG9yaW5nIH0gZnJvbSAnLi4vYXV0aG9yaW5nJztcbmltcG9ydCB7IHRha2VSaWdodCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBjcmVhdGVUaGVtZSwgVGhlbWVQcm92aWRlciB9IGZyb20gJ0BtdWkvbWF0ZXJpYWwvc3R5bGVzJztcblxuLy8gTW9jayBkZXBlbmRlbmNpZXNcbmplc3QubW9jaygnQHBpZS1saWIvZWRpdGFibGUtaHRtbC10aXAtdGFwJywgKCkgPT4ge1xuICByZXR1cm4gZnVuY3Rpb24gRWRpdGFibGVIdG1sKHByb3BzKSB7XG4gICAgcmV0dXJuIDxkaXYgZGF0YS10ZXN0aWQ9XCJlZGl0YWJsZS1odG1sXCIgZGF0YS1tYXJrdXA9e3Byb3BzLm1hcmt1cH0gLz47XG4gIH07XG59KTtcblxuamVzdC5tb2NrKCdAcGllLWxpYi9jb25maWctdWknLCAoKSA9PiAoe1xuICBGZWVkYmFja0NvbmZpZzogKHsgZmVlZGJhY2sgfSkgPT4gPGRpdiBkYXRhLXRlc3RpZD1cImZlZWRiYWNrLWNvbmZpZ1wiPntKU09OLnN0cmluZ2lmeShmZWVkYmFjayl9PC9kaXY+LFxufSkpO1xuXG5qZXN0Lm1vY2soJ0BoZWxsby1wYW5nZWEvZG5kJywgKCkgPT4gKHtcbiAgRHJhZ0Ryb3BDb250ZXh0OiAoeyBjaGlsZHJlbiB9KSA9PiA8ZGl2IGRhdGEtdGVzdGlkPVwiZHJhZy1kcm9wLWNvbnRleHRcIj57Y2hpbGRyZW59PC9kaXY+LFxuICBEcm9wcGFibGU6ICh7IGNoaWxkcmVuIH0pID0+IGNoaWxkcmVuKHsgZHJvcHBhYmxlUHJvcHM6IHt9LCBpbm5lclJlZjogKCkgPT4ge30gfSwge30pLFxuICBEcmFnZ2FibGU6ICh7IGNoaWxkcmVuLCBpbmRleCB9KSA9PlxuICAgIGNoaWxkcmVuKFxuICAgICAge1xuICAgICAgICBpbm5lclJlZjogKCkgPT4ge30sXG4gICAgICAgIGRyYWdnYWJsZVByb3BzOiB7ICdkYXRhLWRyYWdnYWJsZS1pbmRleCc6IGluZGV4IH0sXG4gICAgICAgIGRyYWdIYW5kbGVQcm9wczoge30sXG4gICAgICB9LFxuICAgICAge30sXG4gICAgKSxcbn0pKTtcblxuZGVzY3JpYmUoJ1J1YnJpYycsICgpID0+IHtcbiAgY29uc3QgcG9pbnRzID0gWydub3RoaW5nIHJpZ2h0JywgJ2EgdGVlbnkgYml0IHJpZ2h0JywgJ21vc3RseSByaWdodCcsICdiaW5nbyddO1xuICBjb25zdCBzYW1wbGVBbnN3ZXJzID0gW251bGwsICdqdXN0IHJpZ2h0JywgJ25vdCBsZWZ0JywgbnVsbF07XG4gIGNvbnN0IHRoZW1lID0gY3JlYXRlVGhlbWUoKTtcblxuICBjb25zdCByZW5kZXJDb21wb25lbnQgPSAodmFsdWUgPSB7fSwgcHJvcHMgPSB7fSkgPT4ge1xuICAgIGNvbnN0IGRlZmF1bHRQcm9wcyA9IHtcbiAgICAgIGNsYXNzZXM6IHt9LFxuICAgICAgb25DaGFuZ2U6IGplc3QuZm4oKSxcbiAgICAgIGNsYXNzTmFtZTogJ2NsYXNzTmFtZScsXG4gICAgICB2YWx1ZToge1xuICAgICAgICBleGNsdWRlWmVybzogZmFsc2UsXG4gICAgICAgIHBvaW50cyxcbiAgICAgICAgc2FtcGxlQW5zd2VycyxcbiAgICAgICAgLi4udmFsdWUsXG4gICAgICB9LFxuICAgICAgLi4ucHJvcHMsXG4gICAgfTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5yZW5kZXIoXG4gICAgICAgIDxUaGVtZVByb3ZpZGVyIHRoZW1lPXt0aGVtZX0+XG4gICAgICAgICAgPFJhd0F1dGhvcmluZyB7Li4uZGVmYXVsdFByb3BzfSAvPlxuICAgICAgICA8L1RoZW1lUHJvdmlkZXI+LFxuICAgICAgKSxcbiAgICAgIG9uQ2hhbmdlOiBkZWZhdWx0UHJvcHMub25DaGFuZ2UsXG4gICAgICBwcm9wczogZGVmYXVsdFByb3BzLFxuICAgIH07XG4gIH07XG5cbiAgZGVzY3JpYmUoJ3JlbmRlcicsICgpID0+IHtcbiAgICBpdCgncmVuZGVycyBydWJyaWMgdGl0bGUgYW5kIG1haW4gc3RydWN0dXJlJywgKCkgPT4ge1xuICAgICAgcmVuZGVyQ29tcG9uZW50KCk7XG4gICAgICBleHBlY3Qoc2NyZWVuLmdldEJ5VGV4dCgnUnVicmljJykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgICBleHBlY3Qoc2NyZWVuLmdldEJ5TGFiZWxUZXh0KCdNYXggUG9pbnRzJykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgICBleHBlY3Qoc2NyZWVuLmdldEJ5TGFiZWxUZXh0KCdFeGNsdWRlIHplcm9zJykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVuZGVycyBhbGwgcG9pbnQgY29uZmlndXJhdGlvbnMnLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyQ29tcG9uZW50KCk7XG4gICAgICAvLyBWZXJpZnkgRHJhZ0Ryb3BDb250ZXh0IGlzIHJlbmRlcmVkXG4gICAgICBleHBlY3QoY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLXRlc3RpZD1cImRyYWctZHJvcC1jb250ZXh0XCJdJykpLnRvQmVJblRoZURvY3VtZW50KCk7XG5cbiAgICAgIC8vIENoZWNrIHRoYXQgcG9pbnQgbGFiZWxzIGFyZSByZW5kZXJlZCAoNCBwb2ludHMgPSBcIjMgcHRzXCIsIFwiMiBwdHNcIiwgXCIxIHB0XCIsIFwiMCBwdFwiKVxuICAgICAgLy8gTm90ZTogVGhlIFBvaW50Q29uZmlnIGNvbXBvbmVudCB1c2VzIHNpbmd1bGFyIFwicHRcIiBmb3IgMCBhbmQgMSwgcGx1cmFsIFwicHRzXCIgZm9yIDIrXG4gICAgICBleHBlY3Qoc2NyZWVuLmdldEJ5VGV4dCgnMyBwdHMnKSkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICAgIGV4cGVjdChzY3JlZW4uZ2V0QnlUZXh0KCcyIHB0cycpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgICAgZXhwZWN0KHNjcmVlbi5nZXRCeVRleHQoJzEgcHQnKSkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICAgIGV4cGVjdChzY3JlZW4uZ2V0QnlUZXh0KCcwIHB0JykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnZHJhZ2dhYmxlJywgKCkgPT4ge1xuICAgICAgaXQoJ3JlbmRlcnMgMyBkcmFnZ2FibGUgaXRlbXMgd2hlbiBleGNsdWRlWmVybyBpcyB0cnVlJywgKCkgPT4ge1xuICAgICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyQ29tcG9uZW50KHsgZXhjbHVkZVplcm86IHRydWUgfSk7XG5cbiAgICAgICAgLy8gV2hlbiBleGNsdWRlWmVybyBpcyB0cnVlLCB0aGUgbGFzdCBwb2ludCAoMCBwdHMpIHNob3VsZCBub3QgYmUgcmVuZGVyZWRcbiAgICAgICAgLy8gU28gd2Ugc2hvdWxkIGhhdmUgMyBkcmFnZ2FibGUgaXRlbXNcbiAgICAgICAgY29uc3QgZHJhZ2dhYmxlSXRlbXMgPSBjb250YWluZXIucXVlcnlTZWxlY3RvckFsbCgnW2RhdGEtZHJhZ2dhYmxlLWluZGV4XScpO1xuICAgICAgICBleHBlY3QoZHJhZ2dhYmxlSXRlbXMubGVuZ3RoKS50b0VxdWFsKDMpO1xuXG4gICAgICAgIC8vIFZlcmlmeSB0aGUgMCBwdCBsYWJlbCBpcyBub3QgcmVuZGVyZWRcbiAgICAgICAgZXhwZWN0KHNjcmVlbi5xdWVyeUJ5VGV4dCgnMCBwdCcpKS5ub3QudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgncmVuZGVycyA0IGRyYWdnYWJsZSBpdGVtcyB3aGVuIGV4Y2x1ZGVaZXJvIGlzIGZhbHNlJywgKCkgPT4ge1xuICAgICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyQ29tcG9uZW50KHsgZXhjbHVkZVplcm86IGZhbHNlIH0pO1xuXG4gICAgICAgIC8vIFdoZW4gZXhjbHVkZVplcm8gaXMgZmFsc2UsIGFsbCBwb2ludHMgaW5jbHVkaW5nIDAgc2hvdWxkIGJlIHJlbmRlcmVkXG4gICAgICAgIGNvbnN0IGRyYWdnYWJsZUl0ZW1zID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoJ1tkYXRhLWRyYWdnYWJsZS1pbmRleF0nKTtcbiAgICAgICAgZXhwZWN0KGRyYWdnYWJsZUl0ZW1zLmxlbmd0aCkudG9FcXVhbCg0KTtcblxuICAgICAgICAvLyBWZXJpZnkgYWxsIHBvaW50IGxhYmVscyBhcmUgcmVuZGVyZWRcbiAgICAgICAgZXhwZWN0KHNjcmVlbi5nZXRCeVRleHQoJzMgcHRzJykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgICAgIGV4cGVjdChzY3JlZW4uZ2V0QnlUZXh0KCcyIHB0cycpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgICAgICBleHBlY3Qoc2NyZWVuLmdldEJ5VGV4dCgnMSBwdCcpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgICAgICBleHBlY3Qoc2NyZWVuLmdldEJ5VGV4dCgnMCBwdCcpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdsb2dpYycsICgpID0+IHtcbiAgICBkZXNjcmliZSgnY2hhbmdlTWF4UG9pbnRzJywgKCkgPT4ge1xuICAgICAgY29uc3QgdGVzdENoYW5nZU1heFBvaW50cyA9IChtYXhQb2ludHMsIGV4Y2x1ZGVaZXJvLCBleHBlY3RlZFBvaW50cywgZXhwZWN0ZWRTYW1wbGVBbnN3ZXJzKSA9PiB7XG4gICAgICAgIGl0KGBtYXhQb2ludHM9JHttYXhQb2ludHN9LCBleGNsdWRlWmVybz0ke2V4Y2x1ZGVaZXJvfSBjYWxscyBvbkNoYW5nZSBjb3JyZWN0bHlgLCAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgeyBvbkNoYW5nZSwgY29udGFpbmVyIH0gPSByZW5kZXJDb21wb25lbnQoeyBleGNsdWRlWmVybyB9KTtcblxuICAgICAgICAgIC8vIEdldCB0aGUgY29tcG9uZW50IGluc3RhbmNlIHRocm91Z2ggdGhlIGNvbnRhaW5lclxuICAgICAgICAgIC8vIFdlIG5lZWQgdG8gY2FsbCB0aGUgbWV0aG9kIGRpcmVjdGx5IHNpbmNlIHdlJ3JlIHRlc3RpbmcgaW50ZXJuYWwgYmVoYXZpb3JcbiAgICAgICAgICBjb25zdCBpbnN0YW5jZSA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCdbY2xhc3MqPVwiTXVpQm94LXJvb3RcIl0nKT8uX293bmVyO1xuXG4gICAgICAgICAgLy8gU2luY2Ugd2UgY2FuJ3QgZWFzaWx5IGFjY2VzcyBpbnN0YW5jZSBtZXRob2RzIGluIFJUTCwgd2UnbGwgdGVzdCB0aGUgYmVoYXZpb3JcbiAgICAgICAgICAvLyBieSB2ZXJpZnlpbmcgdGhlIG9uQ2hhbmdlIHByb3AgcmVjZWl2ZXMgdGhlIGNvcnJlY3QgdmFsdWVzXG4gICAgICAgICAgLy8gRm9yIG5vdywgd2UnbGwgZGlyZWN0bHkgdGVzdCB0aGUgbG9naWNcbiAgICAgICAgICBjb25zdCBjb21wb25lbnQgPSBuZXcgUmF3QXV0aG9yaW5nKHtcbiAgICAgICAgICAgIHZhbHVlOiB7IGV4Y2x1ZGVaZXJvLCBwb2ludHMsIHNhbXBsZUFuc3dlcnMgfSxcbiAgICAgICAgICAgIG9uQ2hhbmdlLFxuICAgICAgICAgICAgY2xhc3Nlczoge30sXG4gICAgICAgICAgICBjbGFzc05hbWU6ICdjbGFzc05hbWUnLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgY29tcG9uZW50LmNoYW5nZU1heFBvaW50cyhtYXhQb2ludHMpO1xuXG4gICAgICAgICAgZXhwZWN0KG9uQ2hhbmdlKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCh7XG4gICAgICAgICAgICBleGNsdWRlWmVybyxcbiAgICAgICAgICAgIHBvaW50czogZXhwZWN0ZWRQb2ludHMsXG4gICAgICAgICAgICBzYW1wbGVBbnN3ZXJzOiBleHBlY3RlZFNhbXBsZUFuc3dlcnMsXG4gICAgICAgICAgICBtYXhQb2ludHM6IGV4cGVjdGVkUG9pbnRzLmxlbmd0aCAtIDEsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgdGVzdENoYW5nZU1heFBvaW50cygxLCBmYWxzZSwgdGFrZVJpZ2h0KHBvaW50cywgMiksIHRha2VSaWdodChzYW1wbGVBbnN3ZXJzLCAyKSk7XG4gICAgICB0ZXN0Q2hhbmdlTWF4UG9pbnRzKDEsIHRydWUsIHRha2VSaWdodChwb2ludHMsIDIpLCB0YWtlUmlnaHQoc2FtcGxlQW5zd2VycywgMikpO1xuICAgICAgdGVzdENoYW5nZU1heFBvaW50cygyLCB0cnVlLCB0YWtlUmlnaHQocG9pbnRzLCAzKSwgdGFrZVJpZ2h0KHNhbXBsZUFuc3dlcnMsIDMpKTtcbiAgICAgIHRlc3RDaGFuZ2VNYXhQb2ludHMoMiwgZmFsc2UsIHRha2VSaWdodChwb2ludHMsIDMpLCB0YWtlUmlnaHQoc2FtcGxlQW5zd2VycywgMykpO1xuICAgICAgdGVzdENoYW5nZU1heFBvaW50cyg1LCBmYWxzZSwgWycnLCAnJ10uY29uY2F0KHBvaW50cyksIFtudWxsLCBudWxsXS5jb25jYXQoc2FtcGxlQW5zd2VycykpO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2NoYW5nZVNhbXBsZVJlc3BvbnNlJywgKCkgPT4ge1xuICAgICAgY29uc3QgdGVzdENoYW5nZVNhbXBsZVJlc3BvbnNlID0gKGluZGV4LCBjbGlja2VkSXRlbSwgZXhjbHVkZVplcm8sIGV4cGVjdGVkUG9pbnRzLCBleHBlY3RlZFNhbXBsZUFuc3dlcnMpID0+IHtcbiAgICAgICAgaXQoYFBvaW50ICR7aW5kZXh9IHdpdGggY2xpY2tlZEl0ZW09XCIke2NsaWNrZWRJdGVtfVwiIGNhbGxzIG9uQ2hhbmdlIGNvcnJlY3RseWAsICgpID0+IHtcbiAgICAgICAgICBjb25zdCB7IG9uQ2hhbmdlIH0gPSByZW5kZXJDb21wb25lbnQoeyBleGNsdWRlWmVybyB9KTtcblxuICAgICAgICAgIC8vIFRlc3QgdGhlIGxvZ2ljIGJ5IGNyZWF0aW5nIGEgY29tcG9uZW50IGluc3RhbmNlIGFuZCBjYWxsaW5nIHRoZSBtZXRob2RcbiAgICAgICAgICBjb25zdCBjb21wb25lbnQgPSBuZXcgUmF3QXV0aG9yaW5nKHtcbiAgICAgICAgICAgIHZhbHVlOiB7IGV4Y2x1ZGVaZXJvLCBwb2ludHMsIHNhbXBsZUFuc3dlcnMgfSxcbiAgICAgICAgICAgIG9uQ2hhbmdlLFxuICAgICAgICAgICAgY2xhc3Nlczoge30sXG4gICAgICAgICAgICBjbGFzc05hbWU6ICdjbGFzc05hbWUnLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgY29tcG9uZW50Lm9uUG9pbnRNZW51Q2hhbmdlKGluZGV4LCBjbGlja2VkSXRlbSk7XG5cbiAgICAgICAgICBleHBlY3Qob25DaGFuZ2UpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKHtcbiAgICAgICAgICAgIGV4Y2x1ZGVaZXJvLFxuICAgICAgICAgICAgcG9pbnRzOiBleHBlY3RlZFBvaW50cyxcbiAgICAgICAgICAgIHNhbXBsZUFuc3dlcnM6IGV4cGVjdGVkU2FtcGxlQW5zd2VycyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuXG4gICAgICB0ZXN0Q2hhbmdlU2FtcGxlUmVzcG9uc2UoMCwgJ3NhbXBsZScsIGZhbHNlLCBwb2ludHMsIFsnJywgJ2p1c3QgcmlnaHQnLCAnbm90IGxlZnQnLCBudWxsXSk7XG4gICAgICB0ZXN0Q2hhbmdlU2FtcGxlUmVzcG9uc2UoMywgJ3NhbXBsZScsIGZhbHNlLCBwb2ludHMsIFtudWxsLCAnanVzdCByaWdodCcsICdub3QgbGVmdCcsICcnXSk7XG4gICAgICB0ZXN0Q2hhbmdlU2FtcGxlUmVzcG9uc2UoMSwgJ3NhbXBsZScsIHRydWUsIHBvaW50cywgW251bGwsIG51bGwsICdub3QgbGVmdCcsIG51bGxdKTtcbiAgICAgIHRlc3RDaGFuZ2VTYW1wbGVSZXNwb25zZSgzLCAnc2FtcGxlJywgdHJ1ZSwgcG9pbnRzLCBbbnVsbCwgJ2p1c3QgcmlnaHQnLCAnbm90IGxlZnQnLCAnJ10pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgndXNlciBpbnRlcmFjdGlvbnMnLCAoKSA9PiB7XG4gICAgaXQoJ2NhbGxzIG9uQ2hhbmdlIHdoZW4gZXhjbHVkaW5nIHplcm9zIGNoZWNrYm94IGlzIHRvZ2dsZWQnLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IG9uQ2hhbmdlIH0gPSByZW5kZXJDb21wb25lbnQoeyBleGNsdWRlWmVybzogZmFsc2UgfSk7XG5cbiAgICAgIGNvbnN0IGNoZWNrYm94ID0gc2NyZWVuLmdldEJ5TGFiZWxUZXh0KCdFeGNsdWRlIHplcm9zJyk7XG4gICAgICBmaXJlRXZlbnQuY2xpY2soY2hlY2tib3gpO1xuXG4gICAgICBleHBlY3Qob25DaGFuZ2UpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKFxuICAgICAgICBleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7XG4gICAgICAgICAgZXhjbHVkZVplcm86IHRydWUsXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdjYWxscyBvbkNoYW5nZSB3aGVuIG1heCBwb2ludHMgaXMgY2hhbmdlZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgb25DaGFuZ2UgfSA9IHJlbmRlckNvbXBvbmVudCgpO1xuXG4gICAgICBjb25zdCBzZWxlY3RJbnB1dCA9IHNjcmVlbi5nZXRCeUxhYmVsVGV4dCgnTWF4IFBvaW50cycpO1xuICAgICAgZmlyZUV2ZW50Lm1vdXNlRG93bihzZWxlY3RJbnB1dCk7XG5cbiAgICAgIC8vIFRoZSBvbkNoYW5nZSBzaG91bGQgYmUgY2FsbGVkIHdoZW4gYSBuZXcgdmFsdWUgaXMgc2VsZWN0ZWRcbiAgICAgIC8vIFRoaXMgdGVzdHMgdGhlIGNoYW5nZU1heFBvaW50cyBsb2dpYyBpbmRpcmVjdGx5XG4gICAgfSk7XG5cbiAgICBpdCgncmVuZGVycyBjb3JyZWN0IG51bWJlciBvZiBwb2ludHMgYmFzZWQgb24gZXhjbHVkZVplcm8nLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IHJlcmVuZGVyIH0gPSByZW5kZXJDb21wb25lbnQoeyBleGNsdWRlWmVybzogZmFsc2UgfSk7XG4gICAgICBleHBlY3Qoc2NyZWVuLmdldEJ5VGV4dCgnMCBwdCcpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuXG4gICAgICAvLyBSZXJlbmRlciB3aXRoIGV4Y2x1ZGVaZXJvIHRydWVcbiAgICAgIHJlcmVuZGVyKFxuICAgICAgICA8VGhlbWVQcm92aWRlciB0aGVtZT17dGhlbWV9PlxuICAgICAgICAgIDxSYXdBdXRob3JpbmdcbiAgICAgICAgICAgIGNsYXNzZXM9e3t9fVxuICAgICAgICAgICAgb25DaGFuZ2U9e2plc3QuZm4oKX1cbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImNsYXNzTmFtZVwiXG4gICAgICAgICAgICB2YWx1ZT17eyBleGNsdWRlWmVybzogdHJ1ZSwgcG9pbnRzLCBzYW1wbGVBbnN3ZXJzIH19XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9UaGVtZVByb3ZpZGVyPixcbiAgICAgICk7XG5cbiAgICAgIGV4cGVjdChzY3JlZW4ucXVlcnlCeVRleHQoJzAgcHQnKSkubm90LnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdkcmFnIGFuZCBkcm9wJywgKCkgPT4ge1xuICAgIGl0KCdjYWxscyBvbkNoYW5nZSB3aXRoIHJlb3JkZXJlZCBwb2ludHMgYWZ0ZXIgZHJhZyBlbmQnLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IG9uQ2hhbmdlIH0gPSByZW5kZXJDb21wb25lbnQoKTtcblxuICAgICAgY29uc3QgY29tcG9uZW50ID0gbmV3IFJhd0F1dGhvcmluZyh7XG4gICAgICAgIHZhbHVlOiB7IGV4Y2x1ZGVaZXJvOiBmYWxzZSwgcG9pbnRzLCBzYW1wbGVBbnN3ZXJzIH0sXG4gICAgICAgIG9uQ2hhbmdlLFxuICAgICAgICBjbGFzc2VzOiB7fSxcbiAgICAgICAgY2xhc3NOYW1lOiAnY2xhc3NOYW1lJyxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBTaW11bGF0ZSBkcmFnIGZyb20gaW5kZXggMCB0byBpbmRleCAyXG4gICAgICBjb21wb25lbnQuZHJhZ0VuZCh7XG4gICAgICAgIHNvdXJjZTogeyBpbmRleDogMCB9LFxuICAgICAgICBkZXN0aW5hdGlvbjogeyBpbmRleDogMiB9LFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChvbkNoYW5nZSkudG9IYXZlQmVlbkNhbGxlZCgpO1xuICAgICAgY29uc3QgcmVzdWx0ID0gb25DaGFuZ2UubW9jay5jYWxsc1swXVswXTtcbiAgICAgIGV4cGVjdChyZXN1bHQucG9pbnRzKS5ub3QudG9FcXVhbChwb2ludHMpO1xuICAgICAgZXhwZWN0KHJlc3VsdC5wb2ludHMubGVuZ3RoKS50b0JlKHBvaW50cy5sZW5ndGgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2RvZXMgbm90aGluZyB3aGVuIGRyYWcgaGFzIG5vIGRlc3RpbmF0aW9uJywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBvbkNoYW5nZSB9ID0gcmVuZGVyQ29tcG9uZW50KCk7XG5cbiAgICAgIGNvbnN0IGNvbXBvbmVudCA9IG5ldyBSYXdBdXRob3Jpbmcoe1xuICAgICAgICB2YWx1ZTogeyBleGNsdWRlWmVybzogZmFsc2UsIHBvaW50cywgc2FtcGxlQW5zd2VycyB9LFxuICAgICAgICBvbkNoYW5nZSxcbiAgICAgICAgY2xhc3Nlczoge30sXG4gICAgICAgIGNsYXNzTmFtZTogJ2NsYXNzTmFtZScsXG4gICAgICB9KTtcblxuICAgICAgLy8gU2ltdWxhdGUgZHJhZyB3aXRob3V0IGRlc3RpbmF0aW9uXG4gICAgICBjb21wb25lbnQuZHJhZ0VuZCh7XG4gICAgICAgIHNvdXJjZTogeyBpbmRleDogMCB9LFxuICAgICAgICBkZXN0aW5hdGlvbjogbnVsbCxcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3Qob25DaGFuZ2UpLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdjb250ZW50IGVkaXRpbmcnLCAoKSA9PiB7XG4gICAgaXQoJ2NhbGxzIG9uQ2hhbmdlIHdoZW4gcG9pbnQgY29udGVudCBpcyBjaGFuZ2VkJywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBvbkNoYW5nZSB9ID0gcmVuZGVyQ29tcG9uZW50KCk7XG5cbiAgICAgIGNvbnN0IGNvbXBvbmVudCA9IG5ldyBSYXdBdXRob3Jpbmcoe1xuICAgICAgICB2YWx1ZTogeyBleGNsdWRlWmVybzogZmFsc2UsIHBvaW50cywgc2FtcGxlQW5zd2VycyB9LFxuICAgICAgICBvbkNoYW5nZSxcbiAgICAgICAgY2xhc3Nlczoge30sXG4gICAgICAgIGNsYXNzTmFtZTogJ2NsYXNzTmFtZScsXG4gICAgICB9KTtcblxuICAgICAgY29tcG9uZW50LmNoYW5nZUNvbnRlbnQoMCwgJ25ldyBjb250ZW50JywgJ3BvaW50cycpO1xuXG4gICAgICBleHBlY3Qob25DaGFuZ2UpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKFxuICAgICAgICBleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7XG4gICAgICAgICAgcG9pbnRzOiBleHBlY3QuYXJyYXlDb250YWluaW5nKFsnbmV3IGNvbnRlbnQnXSksXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdjYWxscyBvbkNoYW5nZSB3aGVuIHNhbXBsZSBhbnN3ZXIgaXMgY2hhbmdlZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgb25DaGFuZ2UgfSA9IHJlbmRlckNvbXBvbmVudCgpO1xuXG4gICAgICBjb25zdCBjb21wb25lbnQgPSBuZXcgUmF3QXV0aG9yaW5nKHtcbiAgICAgICAgdmFsdWU6IHsgZXhjbHVkZVplcm86IGZhbHNlLCBwb2ludHMsIHNhbXBsZUFuc3dlcnMgfSxcbiAgICAgICAgb25DaGFuZ2UsXG4gICAgICAgIGNsYXNzZXM6IHt9LFxuICAgICAgICBjbGFzc05hbWU6ICdjbGFzc05hbWUnLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbXBvbmVudC5jaGFuZ2VDb250ZW50KDEsICduZXcgc2FtcGxlIGFuc3dlcicsICdzYW1wbGVBbnN3ZXJzJyk7XG5cbiAgICAgIGV4cGVjdChvbkNoYW5nZSkudG9IYXZlQmVlbkNhbGxlZFdpdGgoXG4gICAgICAgIGV4cGVjdC5vYmplY3RDb250YWluaW5nKHtcbiAgICAgICAgICBzYW1wbGVBbnN3ZXJzOiBleHBlY3QuYXJyYXlDb250YWluaW5nKFsnbmV3IHNhbXBsZSBhbnN3ZXInXSksXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdkb2VzIG5vdCBjaGFuZ2UgY29udGVudCBmb3IgaW52YWxpZCB0eXBlJywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBvbkNoYW5nZSB9ID0gcmVuZGVyQ29tcG9uZW50KCk7XG5cbiAgICAgIGNvbnN0IGNvbXBvbmVudCA9IG5ldyBSYXdBdXRob3Jpbmcoe1xuICAgICAgICB2YWx1ZTogeyBleGNsdWRlWmVybzogZmFsc2UsIHBvaW50cywgc2FtcGxlQW5zd2VycyB9LFxuICAgICAgICBvbkNoYW5nZSxcbiAgICAgICAgY2xhc3Nlczoge30sXG4gICAgICAgIGNsYXNzTmFtZTogJ2NsYXNzTmFtZScsXG4gICAgICB9KTtcblxuICAgICAgY29tcG9uZW50LmNoYW5nZUNvbnRlbnQoMCwgJ25ldyBjb250ZW50JywgJ2ludmFsaWRUeXBlJyk7XG5cbiAgICAgIGV4cGVjdChvbkNoYW5nZSkubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3J1YnJpY2xlc3MgbW9kZScsICgpID0+IHtcbiAgICBpdCgnY2FsbHMgb25DaGFuZ2Ugd2hlbiBydWJyaWNsZXNzIGluc3RydWN0aW9uIGlzIGNoYW5nZWQnLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IG9uQ2hhbmdlIH0gPSByZW5kZXJDb21wb25lbnQoeyBydWJyaWNsZXNzSW5zdHJ1Y3Rpb246ICcnIH0sIHsgcnVicmljbGVzczogdHJ1ZSB9KTtcblxuICAgICAgY29uc3QgY29tcG9uZW50ID0gbmV3IFJhd0F1dGhvcmluZyh7XG4gICAgICAgIHZhbHVlOiB7IGV4Y2x1ZGVaZXJvOiBmYWxzZSwgcG9pbnRzLCBzYW1wbGVBbnN3ZXJzLCBydWJyaWNsZXNzSW5zdHJ1Y3Rpb246ICcnIH0sXG4gICAgICAgIG9uQ2hhbmdlLFxuICAgICAgICBjbGFzc2VzOiB7fSxcbiAgICAgICAgY2xhc3NOYW1lOiAnY2xhc3NOYW1lJyxcbiAgICAgICAgcnVicmljbGVzczogdHJ1ZSxcbiAgICAgIH0pO1xuXG4gICAgICBjb21wb25lbnQuY2hhbmdlUnVicmljbGVzc0luc3RydWN0aW9uKCdOZXcgaW5zdHJ1Y3Rpb24nKTtcblxuICAgICAgZXhwZWN0KG9uQ2hhbmdlKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChcbiAgICAgICAgZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoe1xuICAgICAgICAgIHJ1YnJpY2xlc3NJbnN0cnVjdGlvbjogJ05ldyBpbnN0cnVjdGlvbicsXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2VkZ2UgY2FzZXMnLCAoKSA9PiB7XG4gICAgaXQoJ2hhbmRsZXMgZW1wdHkgcG9pbnRzIGFycmF5JywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlckNvbXBvbmVudCh7IHBvaW50czogW10sIHNhbXBsZUFuc3dlcnM6IFtdIH0pO1xuICAgICAgZXhwZWN0KGNvbnRhaW5lcikudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdoYW5kbGVzIG1heFBvaW50cyBncmVhdGVyIHRoYW4gY3VycmVudCBtYXgnLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IG9uQ2hhbmdlIH0gPSByZW5kZXJDb21wb25lbnQoKTtcblxuICAgICAgY29uc3QgY29tcG9uZW50ID0gbmV3IFJhd0F1dGhvcmluZyh7XG4gICAgICAgIHZhbHVlOiB7IGV4Y2x1ZGVaZXJvOiBmYWxzZSwgcG9pbnRzLCBzYW1wbGVBbnN3ZXJzIH0sXG4gICAgICAgIG9uQ2hhbmdlLFxuICAgICAgICBjbGFzc2VzOiB7fSxcbiAgICAgICAgY2xhc3NOYW1lOiAnY2xhc3NOYW1lJyxcbiAgICAgIH0pO1xuXG4gICAgICBjb21wb25lbnQuY2hhbmdlTWF4UG9pbnRzKDEwKTtcblxuICAgICAgZXhwZWN0KG9uQ2hhbmdlKS50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gICAgICBjb25zdCByZXN1bHQgPSBvbkNoYW5nZS5tb2NrLmNhbGxzWzBdWzBdO1xuICAgICAgZXhwZWN0KHJlc3VsdC5wb2ludHMubGVuZ3RoKS50b0JlKDExKTsgLy8gMTAgKyAxIGZvciAwIHBvaW50c1xuICAgIH0pO1xuXG4gICAgaXQoJ2hhbmRsZXMgY29uZmlnIGFuZCBwbHVnaW5PcHRzIHByb3BzJywgKCkgPT4ge1xuICAgICAgY29uc3QgY29uZmlnID0geyBzb21lQ29uZmlnOiB0cnVlIH07XG4gICAgICBjb25zdCBwbHVnaW5PcHRzID0geyBzb21lUGx1Z2luOiB0cnVlIH07XG4gICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyQ29tcG9uZW50KHt9LCB7IGNvbmZpZywgcGx1Z2luT3B0cyB9KTtcbiAgICAgIGV4cGVjdChjb250YWluZXIpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxJQUFBQSxNQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxPQUFBLEdBQUFDLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBRyxVQUFBLEdBQUFILE9BQUE7QUFDQSxJQUFBSSxT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
|