@pie-element/drag-in-the-blank 8.0.1 → 8.2.0-mui-update.0
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 +81 -0
- package/configure/CHANGELOG.md +80 -0
- package/configure/lib/__tests__/choice.test.js +103 -0
- package/configure/lib/__tests__/choices.test.js +326 -0
- package/configure/lib/__tests__/main.test.js +160 -0
- package/configure/lib/__tests__/markupUtils.test.js +105 -0
- package/configure/lib/choice.js +103 -102
- package/configure/lib/choice.js.map +1 -1
- package/configure/lib/choices.js +209 -311
- package/configure/lib/choices.js.map +1 -1
- package/configure/lib/defaults.js +3 -4
- package/configure/lib/defaults.js.map +1 -1
- package/configure/lib/index.js +120 -189
- package/configure/lib/index.js.map +1 -1
- package/configure/lib/main.js +411 -417
- package/configure/lib/main.js.map +1 -1
- package/configure/lib/markupUtils.js +36 -55
- package/configure/lib/markupUtils.js.map +1 -1
- package/configure/package.json +13 -10
- package/controller/CHANGELOG.md +61 -0
- package/controller/lib/__tests__/index.test.js +778 -0
- package/controller/lib/defaults.js +3 -4
- package/controller/lib/defaults.js.map +1 -1
- package/controller/lib/index.js +110 -199
- package/controller/lib/index.js.map +1 -1
- package/controller/lib/utils.js +13 -25
- package/controller/lib/utils.js.map +1 -1
- package/controller/package.json +2 -2
- package/docs/demo/pie.manifest.json +11 -0
- package/lib/__tests__/index.test.js +122 -0
- package/lib/__tests__/main.test.js +83 -0
- package/lib/index.js +171 -238
- package/lib/index.js.map +1 -1
- package/lib/main.js +102 -161
- package/lib/main.js.map +1 -1
- package/package.json +14 -29
- package/LICENSE.md +0 -5
- package/esm/configure.js +0 -18123
- package/esm/configure.js.map +0 -1
- package/esm/controller.js +0 -328
- package/esm/controller.js.map +0 -1
- package/esm/element.js +0 -7763
- package/esm/element.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,87 @@
|
|
|
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
|
+
## [8.3.3](https://github.com/pie-framework/pie-elements/compare/@pie-element/drag-in-the-blank@8.3.2...@pie-element/drag-in-the-blank@8.3.3) (2025-11-27)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Bug Fixes
|
|
10
|
+
|
|
11
|
+
* bump libs PD-5274, PD-5211, PD-5248 ([7610b25](https://github.com/pie-framework/pie-elements/commit/7610b25423956b6492f33322513b3430051fca77))
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
## [8.3.2](https://github.com/pie-framework/pie-elements/compare/@pie-element/drag-in-the-blank@8.3.1...@pie-element/drag-in-the-blank@8.3.2) (2025-10-22)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
### Bug Fixes
|
|
21
|
+
|
|
22
|
+
* bump libs PD-5265 ([184a978](https://github.com/pie-framework/pie-elements/commit/184a978f57a2a84dc6ba87c1eba0b92d5cdd9eae))
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
## [8.3.1](https://github.com/pie-framework/pie-elements/compare/@pie-element/drag-in-the-blank@8.2.1...@pie-element/drag-in-the-blank@8.3.1) (2025-10-16)
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
### Bug Fixes
|
|
32
|
+
|
|
33
|
+
* bump pie-lib versions and pslb module versions ([393d39f](https://github.com/pie-framework/pie-elements/commit/393d39fb850ad055568f4d20464213e9043f208f))
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
# [8.3.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/drag-in-the-blank@8.2.0...@pie-element/drag-in-the-blank@8.3.0) (2025-10-15)
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
### Bug Fixes
|
|
43
|
+
|
|
44
|
+
* bump libs ([2616ab2](https://github.com/pie-framework/pie-elements/commit/2616ab24f776f4df02302f5855c381ee52527665))
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
## [8.2.1](https://github.com/pie-framework/pie-elements/compare/@pie-element/drag-in-the-blank@8.2.0...@pie-element/drag-in-the-blank@8.2.1) (2025-10-14)
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
### Bug Fixes
|
|
54
|
+
|
|
55
|
+
* bump libs ([2616ab2](https://github.com/pie-framework/pie-elements/commit/2616ab24f776f4df02302f5855c381ee52527665))
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
# [8.2.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/drag-in-the-blank@8.0.0...@pie-element/drag-in-the-blank@8.2.0) (2025-10-10)
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
### Bug Fixes
|
|
65
|
+
|
|
66
|
+
* tests ([a473075](https://github.com/pie-framework/pie-elements/commit/a473075d3942e900b1e7137483ea6064951549c2))
|
|
67
|
+
* **drag-in-the-blank:** prevent duplicate IDs when adding choices after removal PD-5225 ([31c1357](https://github.com/pie-framework/pie-elements/commit/31c13578e73397ae1334b7abd06545f3299cdf28))
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
### Features
|
|
71
|
+
|
|
72
|
+
* update completion rule for categorize, ditb, and image-cloze PD-5179 ([cd03a6e](https://github.com/pie-framework/pie-elements/commit/cd03a6e56e51cc3778749b3679b87f9122405936))
|
|
73
|
+
* update libs PD-5208, PD-5211, PD-5199, PD-5218, PD-5217 ([da327fa](https://github.com/pie-framework/pie-elements/commit/da327fa501f6e9eff1c0b30b5ef092426a91f78b))
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
# [8.1.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/drag-in-the-blank@7.0.0...@pie-element/drag-in-the-blank@8.1.0) (2025-10-07)
|
|
80
|
+
|
|
81
|
+
**Note:** Version bump only for package @pie-element/drag-in-the-blank
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
|
|
6
87
|
# [8.0.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/drag-in-the-blank@6.13.4...@pie-element/drag-in-the-blank@8.0.0) (2025-10-02)
|
|
7
88
|
|
|
8
89
|
|
package/configure/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,86 @@
|
|
|
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
|
+
## [7.3.3](https://github.com/pie-framework/pie-elements/compare/@pie-element/drag-in-the-blank-configure@7.3.2...@pie-element/drag-in-the-blank-configure@7.3.3) (2025-11-27)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Bug Fixes
|
|
10
|
+
|
|
11
|
+
* bump libs PD-5274, PD-5211, PD-5248 ([7610b25](https://github.com/pie-framework/pie-elements/commit/7610b25423956b6492f33322513b3430051fca77))
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
## [7.3.2](https://github.com/pie-framework/pie-elements/compare/@pie-element/drag-in-the-blank-configure@7.3.1...@pie-element/drag-in-the-blank-configure@7.3.2) (2025-10-22)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
### Bug Fixes
|
|
21
|
+
|
|
22
|
+
* bump libs PD-5265 ([184a978](https://github.com/pie-framework/pie-elements/commit/184a978f57a2a84dc6ba87c1eba0b92d5cdd9eae))
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
## [7.3.1](https://github.com/pie-framework/pie-elements/compare/@pie-element/drag-in-the-blank-configure@7.2.1...@pie-element/drag-in-the-blank-configure@7.3.1) (2025-10-16)
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
### Bug Fixes
|
|
32
|
+
|
|
33
|
+
* bump pie-lib versions and pslb module versions ([393d39f](https://github.com/pie-framework/pie-elements/commit/393d39fb850ad055568f4d20464213e9043f208f))
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
# [7.3.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/drag-in-the-blank-configure@7.2.0...@pie-element/drag-in-the-blank-configure@7.3.0) (2025-10-15)
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
### Bug Fixes
|
|
43
|
+
|
|
44
|
+
* bump libs ([2616ab2](https://github.com/pie-framework/pie-elements/commit/2616ab24f776f4df02302f5855c381ee52527665))
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
## [7.2.1](https://github.com/pie-framework/pie-elements/compare/@pie-element/drag-in-the-blank-configure@7.2.0...@pie-element/drag-in-the-blank-configure@7.2.1) (2025-10-14)
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
### Bug Fixes
|
|
54
|
+
|
|
55
|
+
* bump libs ([2616ab2](https://github.com/pie-framework/pie-elements/commit/2616ab24f776f4df02302f5855c381ee52527665))
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
# [7.2.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/drag-in-the-blank-configure@7.0.1...@pie-element/drag-in-the-blank-configure@7.2.0) (2025-10-10)
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
### Bug Fixes
|
|
65
|
+
|
|
66
|
+
* tests ([a473075](https://github.com/pie-framework/pie-elements/commit/a473075d3942e900b1e7137483ea6064951549c2))
|
|
67
|
+
* **drag-in-the-blank:** prevent duplicate IDs when adding choices after removal PD-5225 ([31c1357](https://github.com/pie-framework/pie-elements/commit/31c13578e73397ae1334b7abd06545f3299cdf28))
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
### Features
|
|
71
|
+
|
|
72
|
+
* update libs PD-5208, PD-5211, PD-5199, PD-5218, PD-5217 ([da327fa](https://github.com/pie-framework/pie-elements/commit/da327fa501f6e9eff1c0b30b5ef092426a91f78b))
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
# [7.1.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/drag-in-the-blank-configure@7.0.0...@pie-element/drag-in-the-blank-configure@7.1.0) (2025-10-07)
|
|
79
|
+
|
|
80
|
+
**Note:** Version bump only for package @pie-element/drag-in-the-blank-configure
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
|
|
6
86
|
## [7.0.1](https://github.com/pie-framework/pie-elements/compare/@pie-element/drag-in-the-blank-configure@6.7.0...@pie-element/drag-in-the-blank-configure@7.0.1) (2025-10-02)
|
|
7
87
|
|
|
8
88
|
**Note:** Version bump only for package @pie-element/drag-in-the-blank-configure
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _enzyme = require("enzyme");
|
|
5
|
+
var _react = _interopRequireDefault(require("react"));
|
|
6
|
+
var _choice = _interopRequireWildcard(require("../choice"));
|
|
7
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
8
|
+
describe('Choice', () => {
|
|
9
|
+
let onClick;
|
|
10
|
+
let onRemoveChoice;
|
|
11
|
+
let connectDragSource;
|
|
12
|
+
let connectDragPreview;
|
|
13
|
+
beforeEach(() => {
|
|
14
|
+
onClick = jest.fn();
|
|
15
|
+
onRemoveChoice = jest.fn();
|
|
16
|
+
connectDragSource = jest.fn();
|
|
17
|
+
connectDragPreview = jest.fn();
|
|
18
|
+
});
|
|
19
|
+
const wrapper = extras => {
|
|
20
|
+
const props = {
|
|
21
|
+
classes: {},
|
|
22
|
+
key: '0',
|
|
23
|
+
duplicates: true,
|
|
24
|
+
choice: {
|
|
25
|
+
value: '<div>6</div>',
|
|
26
|
+
id: '0'
|
|
27
|
+
},
|
|
28
|
+
targetId: '0',
|
|
29
|
+
onClick,
|
|
30
|
+
onRemoveChoice,
|
|
31
|
+
connectDragSource,
|
|
32
|
+
connectDragPreview,
|
|
33
|
+
...extras
|
|
34
|
+
};
|
|
35
|
+
return (0, _enzyme.shallow)(/*#__PURE__*/_react.default.createElement(_choice.default, props));
|
|
36
|
+
};
|
|
37
|
+
describe('snapshot', () => {
|
|
38
|
+
it('renders', () => {
|
|
39
|
+
const w = wrapper();
|
|
40
|
+
expect(w).toMatchSnapshot();
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
describe('spec', () => {
|
|
45
|
+
describe('canDrag', () => {
|
|
46
|
+
it('returns true if category has any value and is enabled', () => {
|
|
47
|
+
const result = _choice.tileSource.canDrag({
|
|
48
|
+
choice: {
|
|
49
|
+
value: '<div>6</div>',
|
|
50
|
+
id: '0'
|
|
51
|
+
},
|
|
52
|
+
disabled: false
|
|
53
|
+
});
|
|
54
|
+
expect(result).toEqual(true);
|
|
55
|
+
});
|
|
56
|
+
it('returns false if category has any value and is disabled', () => {
|
|
57
|
+
const jsdomAlert = window.alert; // remember the jsdom alert
|
|
58
|
+
window.alert = () => {};
|
|
59
|
+
const result = _choice.tileSource.canDrag({
|
|
60
|
+
choice: {
|
|
61
|
+
value: '<div>6</div>',
|
|
62
|
+
id: '0'
|
|
63
|
+
},
|
|
64
|
+
disabled: true
|
|
65
|
+
});
|
|
66
|
+
expect(result).toEqual(false);
|
|
67
|
+
window.alert = jsdomAlert;
|
|
68
|
+
});
|
|
69
|
+
it('returns false if category value is empty', () => {
|
|
70
|
+
const jsdomAlert = window.alert; // remember the jsdom alert
|
|
71
|
+
window.alert = () => {};
|
|
72
|
+
const result = _choice.tileSource.canDrag({
|
|
73
|
+
choice: {
|
|
74
|
+
value: '',
|
|
75
|
+
id: '0'
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
expect(result).toEqual(false);
|
|
79
|
+
window.alert = jsdomAlert;
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
describe('beginDrag', () => {
|
|
83
|
+
it('returns the proper object', () => {
|
|
84
|
+
const result = _choice.tileSource.beginDrag({
|
|
85
|
+
choice: {
|
|
86
|
+
value: '<div>0</div>',
|
|
87
|
+
id: '0'
|
|
88
|
+
},
|
|
89
|
+
instanceId: '1',
|
|
90
|
+
targetId: '0'
|
|
91
|
+
});
|
|
92
|
+
expect(result).toEqual({
|
|
93
|
+
id: '0',
|
|
94
|
+
instanceId: '1',
|
|
95
|
+
value: {
|
|
96
|
+
value: '<div>0</div>',
|
|
97
|
+
id: '0'
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
});
|
|
101
|
+
});
|
|
102
|
+
});
|
|
103
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZW56eW1lIiwicmVxdWlyZSIsIl9yZWFjdCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfY2hvaWNlIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJlIiwidCIsIldlYWtNYXAiLCJyIiwibiIsIl9fZXNNb2R1bGUiLCJvIiwiaSIsImYiLCJfX3Byb3RvX18iLCJkZWZhdWx0IiwiaGFzIiwiZ2V0Iiwic2V0IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJkZXNjcmliZSIsIm9uQ2xpY2siLCJvblJlbW92ZUNob2ljZSIsImNvbm5lY3REcmFnU291cmNlIiwiY29ubmVjdERyYWdQcmV2aWV3IiwiYmVmb3JlRWFjaCIsImplc3QiLCJmbiIsIndyYXBwZXIiLCJleHRyYXMiLCJwcm9wcyIsImNsYXNzZXMiLCJrZXkiLCJkdXBsaWNhdGVzIiwiY2hvaWNlIiwidmFsdWUiLCJpZCIsInRhcmdldElkIiwic2hhbGxvdyIsImNyZWF0ZUVsZW1lbnQiLCJpdCIsInciLCJleHBlY3QiLCJ0b01hdGNoU25hcHNob3QiLCJyZXN1bHQiLCJ0aWxlU291cmNlIiwiY2FuRHJhZyIsImRpc2FibGVkIiwidG9FcXVhbCIsImpzZG9tQWxlcnQiLCJ3aW5kb3ciLCJhbGVydCIsImJlZ2luRHJhZyIsImluc3RhbmNlSWQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvX190ZXN0c19fL2Nob2ljZS50ZXN0LmpzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzaGFsbG93IH0gZnJvbSAnZW56eW1lJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQ2hvaWNlLCB7IHRpbGVTb3VyY2UgfSBmcm9tICcuLi9jaG9pY2UnO1xuXG5kZXNjcmliZSgnQ2hvaWNlJywgKCkgPT4ge1xuICBsZXQgb25DbGljaztcbiAgbGV0IG9uUmVtb3ZlQ2hvaWNlO1xuICBsZXQgY29ubmVjdERyYWdTb3VyY2U7XG4gIGxldCBjb25uZWN0RHJhZ1ByZXZpZXc7XG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgb25DbGljayA9IGplc3QuZm4oKTtcbiAgICBvblJlbW92ZUNob2ljZSA9IGplc3QuZm4oKTtcbiAgICBjb25uZWN0RHJhZ1NvdXJjZSA9IGplc3QuZm4oKTtcbiAgICBjb25uZWN0RHJhZ1ByZXZpZXcgPSBqZXN0LmZuKCk7XG4gIH0pO1xuXG4gIGNvbnN0IHdyYXBwZXIgPSAoZXh0cmFzKSA9PiB7XG4gICAgY29uc3QgcHJvcHMgPSB7XG4gICAgICBjbGFzc2VzOiB7fSxcbiAgICAgIGtleTogJzAnLFxuICAgICAgZHVwbGljYXRlczogdHJ1ZSxcbiAgICAgIGNob2ljZToge1xuICAgICAgICB2YWx1ZTogJzxkaXY+NjwvZGl2PicsXG4gICAgICAgIGlkOiAnMCcsXG4gICAgICB9LFxuICAgICAgdGFyZ2V0SWQ6ICcwJyxcbiAgICAgIG9uQ2xpY2ssXG4gICAgICBvblJlbW92ZUNob2ljZSxcbiAgICAgIGNvbm5lY3REcmFnU291cmNlLFxuICAgICAgY29ubmVjdERyYWdQcmV2aWV3LFxuICAgICAgLi4uZXh0cmFzLFxuICAgIH07XG5cbiAgICByZXR1cm4gc2hhbGxvdyg8Q2hvaWNlIHsuLi5wcm9wc30gLz4pO1xuICB9O1xuICBkZXNjcmliZSgnc25hcHNob3QnLCAoKSA9PiB7XG4gICAgaXQoJ3JlbmRlcnMnLCAoKSA9PiB7XG4gICAgICBjb25zdCB3ID0gd3JhcHBlcigpO1xuICAgICAgZXhwZWN0KHcpLnRvTWF0Y2hTbmFwc2hvdCgpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnc3BlYycsICgpID0+IHtcbiAgZGVzY3JpYmUoJ2NhbkRyYWcnLCAoKSA9PiB7XG4gICAgaXQoJ3JldHVybnMgdHJ1ZSBpZiBjYXRlZ29yeSBoYXMgYW55IHZhbHVlIGFuZCBpcyBlbmFibGVkJywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gdGlsZVNvdXJjZS5jYW5EcmFnKHsgY2hvaWNlOiB7IHZhbHVlOiAnPGRpdj42PC9kaXY+JywgaWQ6ICcwJyB9LCBkaXNhYmxlZDogZmFsc2UgfSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JldHVybnMgZmFsc2UgaWYgY2F0ZWdvcnkgaGFzIGFueSB2YWx1ZSBhbmQgaXMgZGlzYWJsZWQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBqc2RvbUFsZXJ0ID0gd2luZG93LmFsZXJ0OyAvLyByZW1lbWJlciB0aGUganNkb20gYWxlcnRcbiAgICAgIHdpbmRvdy5hbGVydCA9ICgpID0+IHt9O1xuXG4gICAgICBjb25zdCByZXN1bHQgPSB0aWxlU291cmNlLmNhbkRyYWcoeyBjaG9pY2U6IHsgdmFsdWU6ICc8ZGl2PjY8L2Rpdj4nLCBpZDogJzAnIH0sIGRpc2FibGVkOiB0cnVlIH0pO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChmYWxzZSk7XG5cbiAgICAgIHdpbmRvdy5hbGVydCA9IGpzZG9tQWxlcnQ7XG4gICAgfSk7XG5cbiAgICBpdCgncmV0dXJucyBmYWxzZSBpZiBjYXRlZ29yeSB2YWx1ZSBpcyBlbXB0eScsICgpID0+IHtcbiAgICAgIGNvbnN0IGpzZG9tQWxlcnQgPSB3aW5kb3cuYWxlcnQ7IC8vIHJlbWVtYmVyIHRoZSBqc2RvbSBhbGVydFxuICAgICAgd2luZG93LmFsZXJ0ID0gKCkgPT4ge307XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IHRpbGVTb3VyY2UuY2FuRHJhZyh7IGNob2ljZTogeyB2YWx1ZTogJycsIGlkOiAnMCcgfSB9KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZmFsc2UpO1xuXG4gICAgICB3aW5kb3cuYWxlcnQgPSBqc2RvbUFsZXJ0O1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnYmVnaW5EcmFnJywgKCkgPT4ge1xuICAgIGl0KCdyZXR1cm5zIHRoZSBwcm9wZXIgb2JqZWN0JywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gdGlsZVNvdXJjZS5iZWdpbkRyYWcoe1xuICAgICAgICBjaG9pY2U6IHsgdmFsdWU6ICc8ZGl2PjA8L2Rpdj4nLCBpZDogJzAnIH0sXG4gICAgICAgIGluc3RhbmNlSWQ6ICcxJyxcbiAgICAgICAgdGFyZ2V0SWQ6ICcwJyxcbiAgICAgIH0pO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbCh7IGlkOiAnMCcsIGluc3RhbmNlSWQ6ICcxJywgdmFsdWU6IHsgdmFsdWU6ICc8ZGl2PjA8L2Rpdj4nLCBpZDogJzAnIH0gfSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXSwibWFwcGluZ3MiOiI7OztBQUFBLElBQUFBLE9BQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLE1BQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFHLE9BQUEsR0FBQUMsdUJBQUEsQ0FBQUosT0FBQTtBQUErQyxTQUFBSSx3QkFBQUMsQ0FBQSxFQUFBQyxDQUFBLDZCQUFBQyxPQUFBLE1BQUFDLENBQUEsT0FBQUQsT0FBQSxJQUFBRSxDQUFBLE9BQUFGLE9BQUEsWUFBQUgsdUJBQUEsWUFBQUEsQ0FBQUMsQ0FBQSxFQUFBQyxDQUFBLFNBQUFBLENBQUEsSUFBQUQsQ0FBQSxJQUFBQSxDQUFBLENBQUFLLFVBQUEsU0FBQUwsQ0FBQSxNQUFBTSxDQUFBLEVBQUFDLENBQUEsRUFBQUMsQ0FBQSxLQUFBQyxTQUFBLFFBQUFDLE9BQUEsRUFBQVYsQ0FBQSxpQkFBQUEsQ0FBQSx1QkFBQUEsQ0FBQSx5QkFBQUEsQ0FBQSxTQUFBUSxDQUFBLE1BQUFGLENBQUEsR0FBQUwsQ0FBQSxHQUFBRyxDQUFBLEdBQUFELENBQUEsUUFBQUcsQ0FBQSxDQUFBSyxHQUFBLENBQUFYLENBQUEsVUFBQU0sQ0FBQSxDQUFBTSxHQUFBLENBQUFaLENBQUEsR0FBQU0sQ0FBQSxDQUFBTyxHQUFBLENBQUFiLENBQUEsRUFBQVEsQ0FBQSxnQkFBQVAsQ0FBQSxJQUFBRCxDQUFBLGdCQUFBQyxDQUFB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W119
|
|
@@ -0,0 +1,326 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _enzyme = require("enzyme");
|
|
5
|
+
var _react = _interopRequireDefault(require("react"));
|
|
6
|
+
var _choices = require("../choices");
|
|
7
|
+
var _defaults = _interopRequireDefault(require("../defaults"));
|
|
8
|
+
var _markupUtils = require("../markupUtils");
|
|
9
|
+
jest.mock('@pie-lib/config-ui', () => ({
|
|
10
|
+
choiceUtils: {
|
|
11
|
+
firstAvailableIndex: jest.fn()
|
|
12
|
+
},
|
|
13
|
+
settings: {
|
|
14
|
+
Panel: props => /*#__PURE__*/_react.default.createElement("div", props),
|
|
15
|
+
toggle: jest.fn(),
|
|
16
|
+
radio: jest.fn(),
|
|
17
|
+
dropdown: jest.fn()
|
|
18
|
+
},
|
|
19
|
+
layout: {
|
|
20
|
+
ConfigLayout: props => /*#__PURE__*/_react.default.createElement("div", null, props.children)
|
|
21
|
+
}
|
|
22
|
+
}));
|
|
23
|
+
const model = {
|
|
24
|
+
markup: '{{0}} + {{1}} = 15',
|
|
25
|
+
prompt: '<p>Solve the equation below.</p>',
|
|
26
|
+
choices: [{
|
|
27
|
+
value: '<div>6</div>',
|
|
28
|
+
id: '0'
|
|
29
|
+
}, {
|
|
30
|
+
value: '<div>9</div>',
|
|
31
|
+
id: '1'
|
|
32
|
+
}, {
|
|
33
|
+
value: '<div>12</div>',
|
|
34
|
+
id: '2'
|
|
35
|
+
}],
|
|
36
|
+
choicesPosition: 'below',
|
|
37
|
+
correctResponse: {
|
|
38
|
+
0: '0',
|
|
39
|
+
1: '1'
|
|
40
|
+
},
|
|
41
|
+
duplicates: true,
|
|
42
|
+
alternateResponses: [['1'], ['0']],
|
|
43
|
+
rationale: '<p>A correct response is shown below:</p><ul><li>2/6 = 1/3</li><li>4/8 = 1/2</li><li>6/10 = 3/5</li><li>9/12 = 3/4</li></ul>'
|
|
44
|
+
};
|
|
45
|
+
const prepareModel = (model = {}) => {
|
|
46
|
+
const joinedObj = {
|
|
47
|
+
..._defaults.default.model,
|
|
48
|
+
...model
|
|
49
|
+
};
|
|
50
|
+
const slateMarkup = model.slateMarkup || (0, _markupUtils.createSlateMarkup)(joinedObj.markup, joinedObj.choices, joinedObj.correctResponse);
|
|
51
|
+
const processedMarkup = (0, _markupUtils.processMarkup)(slateMarkup);
|
|
52
|
+
return {
|
|
53
|
+
...joinedObj,
|
|
54
|
+
slateMarkup,
|
|
55
|
+
markup: processedMarkup.markup,
|
|
56
|
+
correctResponse: processedMarkup.correctResponse
|
|
57
|
+
};
|
|
58
|
+
};
|
|
59
|
+
describe('Choices', () => {
|
|
60
|
+
let onChange;
|
|
61
|
+
beforeEach(() => {
|
|
62
|
+
onChange = jest.fn();
|
|
63
|
+
});
|
|
64
|
+
const wrapper = extras => {
|
|
65
|
+
const defaults = {
|
|
66
|
+
onChange,
|
|
67
|
+
classes: {},
|
|
68
|
+
model: prepareModel(model),
|
|
69
|
+
duplicates: true,
|
|
70
|
+
...extras
|
|
71
|
+
};
|
|
72
|
+
const props = {
|
|
73
|
+
...defaults
|
|
74
|
+
};
|
|
75
|
+
return (0, _enzyme.shallow)(/*#__PURE__*/_react.default.createElement(_choices.Choices, props), {
|
|
76
|
+
disableLifecycleMethods: true
|
|
77
|
+
});
|
|
78
|
+
};
|
|
79
|
+
describe('snapshot', () => {
|
|
80
|
+
it('renders with duplicates', () => {
|
|
81
|
+
expect(wrapper()).toMatchSnapshot();
|
|
82
|
+
});
|
|
83
|
+
it('renders without duplicates', () => {
|
|
84
|
+
expect(wrapper({
|
|
85
|
+
duplicates: false
|
|
86
|
+
})).toMatchSnapshot();
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
describe('logic', () => {
|
|
90
|
+
let w;
|
|
91
|
+
beforeEach(() => {
|
|
92
|
+
w = wrapper();
|
|
93
|
+
});
|
|
94
|
+
describe('onChoiceChanged', () => {
|
|
95
|
+
it('removes a choice if its new value is empty', () => {
|
|
96
|
+
w.instance().onChoiceChanged('<div>12</div>', '', '2');
|
|
97
|
+
expect(onChange).toBeCalledWith([{
|
|
98
|
+
value: '<div>6</div>',
|
|
99
|
+
id: '0'
|
|
100
|
+
}, {
|
|
101
|
+
value: '<div>9</div>',
|
|
102
|
+
id: '1'
|
|
103
|
+
}]);
|
|
104
|
+
});
|
|
105
|
+
it('does not add new choice if it is identical to another choice', () => {
|
|
106
|
+
w.instance().onChoiceChanged('', '<div>9</div>', '2');
|
|
107
|
+
expect(onChange).toBeCalledWith([{
|
|
108
|
+
value: '<div>6</div>',
|
|
109
|
+
id: '0'
|
|
110
|
+
}, {
|
|
111
|
+
value: '<div>9</div>',
|
|
112
|
+
id: '1'
|
|
113
|
+
}]);
|
|
114
|
+
});
|
|
115
|
+
it('does not change choice if it would be identical to another choice', () => {
|
|
116
|
+
w.instance().onChoiceChanged('<div>6</div>', '<div>9</div>', '0');
|
|
117
|
+
expect(onChange).toHaveBeenCalledTimes(0);
|
|
118
|
+
});
|
|
119
|
+
it('does not remove a choice if its new value is empty, but is used in correct response', () => {
|
|
120
|
+
const jsdomAlert = window.alert; // remember the jsdom alert
|
|
121
|
+
|
|
122
|
+
window.alert = () => {};
|
|
123
|
+
w.instance().onChoiceChanged('<div>9</div>', '', '1');
|
|
124
|
+
expect(onChange).not.toBeCalled();
|
|
125
|
+
window.alert = jsdomAlert;
|
|
126
|
+
});
|
|
127
|
+
it('does not remove a choice if its new value is empty, but is used in alternate response', () => {
|
|
128
|
+
const jsdomAlert = window.alert; // remember the jsdom alert
|
|
129
|
+
|
|
130
|
+
window.alert = () => {};
|
|
131
|
+
wrapper({
|
|
132
|
+
markup: '{{0}}'
|
|
133
|
+
}).instance().onChoiceChanged('<div>9</div>', '', '1');
|
|
134
|
+
expect(onChange).not.toBeCalled();
|
|
135
|
+
window.alert = jsdomAlert;
|
|
136
|
+
});
|
|
137
|
+
it('does not remove a choice if its new value is empty, but the old value was empty as well (at focusing a new choice without editing)', () => {
|
|
138
|
+
const jsdomAlert = window.alert; // remember the jsdom alert
|
|
139
|
+
|
|
140
|
+
window.alert = () => {};
|
|
141
|
+
wrapper({
|
|
142
|
+
markup: '{{0}}'
|
|
143
|
+
}).instance().onChoiceChanged('', '', '1');
|
|
144
|
+
expect(onChange).not.toBeCalled();
|
|
145
|
+
window.alert = jsdomAlert;
|
|
146
|
+
});
|
|
147
|
+
it('updates choices', () => {
|
|
148
|
+
w.instance().onChoiceChanged('<div>9</div>', '<div>3*3</div>', '1');
|
|
149
|
+
expect(onChange).toBeCalledWith([{
|
|
150
|
+
value: '<div>6</div>',
|
|
151
|
+
id: '0'
|
|
152
|
+
}, {
|
|
153
|
+
value: '<div>3*3</div>',
|
|
154
|
+
id: '1'
|
|
155
|
+
}, {
|
|
156
|
+
value: '<div>12</div>',
|
|
157
|
+
id: '2'
|
|
158
|
+
}]);
|
|
159
|
+
});
|
|
160
|
+
});
|
|
161
|
+
describe('onChoiceFocus', () => {
|
|
162
|
+
it('sets focused element id on state', () => {
|
|
163
|
+
w.instance().onChoiceFocus('1');
|
|
164
|
+
expect(w.instance().state.focusedEl).toEqual('1');
|
|
165
|
+
});
|
|
166
|
+
});
|
|
167
|
+
describe('onAddChoice', () => {
|
|
168
|
+
it('adds a choice', () => {
|
|
169
|
+
wrapper().instance().onAddChoice();
|
|
170
|
+
expect(onChange).toBeCalledWith([...model.choices, {
|
|
171
|
+
id: '3',
|
|
172
|
+
value: ''
|
|
173
|
+
}]);
|
|
174
|
+
});
|
|
175
|
+
});
|
|
176
|
+
describe('onChoiceRemove', () => {
|
|
177
|
+
it('removes a choice', () => {
|
|
178
|
+
wrapper().instance().onChoiceRemove('1');
|
|
179
|
+
expect(onChange).toBeCalledWith([{
|
|
180
|
+
value: '<div>6</div>',
|
|
181
|
+
id: '0'
|
|
182
|
+
}, {
|
|
183
|
+
value: '<div>12</div>',
|
|
184
|
+
id: '2'
|
|
185
|
+
}]);
|
|
186
|
+
});
|
|
187
|
+
});
|
|
188
|
+
describe('onChoiceRemove & onAddChoice', () => {
|
|
189
|
+
it('prevents duplicate IDs when adding choices after removing some', () => {
|
|
190
|
+
const initialWrapper = wrapper();
|
|
191
|
+
initialWrapper.instance().onChoiceRemove('1');
|
|
192
|
+
expect(onChange).toHaveBeenCalledWith([{
|
|
193
|
+
value: '<div>6</div>',
|
|
194
|
+
id: '0'
|
|
195
|
+
}, {
|
|
196
|
+
value: '<div>12</div>',
|
|
197
|
+
id: '2'
|
|
198
|
+
}]);
|
|
199
|
+
const updatedChoices = [{
|
|
200
|
+
value: '<div>6</div>',
|
|
201
|
+
id: '0'
|
|
202
|
+
}, {
|
|
203
|
+
value: '<div>12</div>',
|
|
204
|
+
id: '2'
|
|
205
|
+
}];
|
|
206
|
+
const wrapperWithUpdatedState = wrapper({
|
|
207
|
+
model: {
|
|
208
|
+
...model,
|
|
209
|
+
choices: updatedChoices
|
|
210
|
+
}
|
|
211
|
+
});
|
|
212
|
+
wrapperWithUpdatedState.instance().onAddChoice();
|
|
213
|
+
expect(onChange).toHaveBeenLastCalledWith([{
|
|
214
|
+
value: '<div>6</div>',
|
|
215
|
+
id: '0'
|
|
216
|
+
}, {
|
|
217
|
+
value: '<div>12</div>',
|
|
218
|
+
id: '2'
|
|
219
|
+
}, {
|
|
220
|
+
id: '3',
|
|
221
|
+
value: ''
|
|
222
|
+
}]);
|
|
223
|
+
});
|
|
224
|
+
});
|
|
225
|
+
describe('getVisibleChoices', () => {
|
|
226
|
+
it('choices are null => returns []', () => {
|
|
227
|
+
const visibleChoices = wrapper({
|
|
228
|
+
model: {
|
|
229
|
+
choices: null
|
|
230
|
+
}
|
|
231
|
+
}).instance().getVisibleChoices();
|
|
232
|
+
expect(visibleChoices).toEqual([]);
|
|
233
|
+
});
|
|
234
|
+
it('duplicates = true', () => {
|
|
235
|
+
const choices = [{
|
|
236
|
+
value: '<div>6</div>',
|
|
237
|
+
id: '0'
|
|
238
|
+
}, {
|
|
239
|
+
value: '<div>9</div>',
|
|
240
|
+
id: '1'
|
|
241
|
+
}, {
|
|
242
|
+
value: '<div>12</div>',
|
|
243
|
+
id: '2'
|
|
244
|
+
}];
|
|
245
|
+
const visibleChoices = wrapper({
|
|
246
|
+
model: {
|
|
247
|
+
duplicates: true,
|
|
248
|
+
choices: choices,
|
|
249
|
+
correctResponse: {
|
|
250
|
+
0: '0',
|
|
251
|
+
1: '1'
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
}).instance().getVisibleChoices();
|
|
255
|
+
expect(visibleChoices).toEqual(choices);
|
|
256
|
+
});
|
|
257
|
+
it('duplicates = false', () => {
|
|
258
|
+
const choices = [{
|
|
259
|
+
value: '<div>6</div>',
|
|
260
|
+
id: '0'
|
|
261
|
+
}, {
|
|
262
|
+
value: '<div>9</div>',
|
|
263
|
+
id: '1'
|
|
264
|
+
}, {
|
|
265
|
+
value: '<div>12</div>',
|
|
266
|
+
id: '2'
|
|
267
|
+
}];
|
|
268
|
+
const visibleChoices = wrapper({
|
|
269
|
+
duplicates: false,
|
|
270
|
+
model: {
|
|
271
|
+
choices: choices,
|
|
272
|
+
correctResponse: {
|
|
273
|
+
0: '0',
|
|
274
|
+
1: '1'
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
}).instance().getVisibleChoices();
|
|
278
|
+
expect(visibleChoices).toEqual([{
|
|
279
|
+
value: '<div>12</div>',
|
|
280
|
+
id: '2'
|
|
281
|
+
}]);
|
|
282
|
+
});
|
|
283
|
+
it('duplicates = false, empty correctResponse', () => {
|
|
284
|
+
const choices = [{
|
|
285
|
+
value: '<div>6</div>',
|
|
286
|
+
id: '0'
|
|
287
|
+
}, {
|
|
288
|
+
value: '<div>9</div>',
|
|
289
|
+
id: '1'
|
|
290
|
+
}, {
|
|
291
|
+
value: '<div>12</div>',
|
|
292
|
+
id: '2'
|
|
293
|
+
}];
|
|
294
|
+
const visibleChoices = wrapper({
|
|
295
|
+
duplicates: false,
|
|
296
|
+
model: {
|
|
297
|
+
choices: choices,
|
|
298
|
+
correctResponse: {}
|
|
299
|
+
}
|
|
300
|
+
}).instance().getVisibleChoices();
|
|
301
|
+
expect(visibleChoices).toEqual(choices);
|
|
302
|
+
});
|
|
303
|
+
it('duplicates = false, correctResponse = null', () => {
|
|
304
|
+
const choices = [{
|
|
305
|
+
value: '<div>6</div>',
|
|
306
|
+
id: '0'
|
|
307
|
+
}, {
|
|
308
|
+
value: '<div>9</div>',
|
|
309
|
+
id: '1'
|
|
310
|
+
}, {
|
|
311
|
+
value: '<div>12</div>',
|
|
312
|
+
id: '2'
|
|
313
|
+
}];
|
|
314
|
+
const visibleChoices = wrapper({
|
|
315
|
+
duplicates: false,
|
|
316
|
+
model: {
|
|
317
|
+
choices: choices,
|
|
318
|
+
correctResponse: null
|
|
319
|
+
}
|
|
320
|
+
}).instance().getVisibleChoices();
|
|
321
|
+
expect(visibleChoices).toEqual(choices);
|
|
322
|
+
});
|
|
323
|
+
});
|
|
324
|
+
});
|
|
325
|
+
});
|
|
326
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZW56eW1lIiwicmVxdWlyZSIsIl9yZWFjdCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfY2hvaWNlcyIsIl9kZWZhdWx0cyIsIl9tYXJrdXBVdGlscyIsImplc3QiLCJtb2NrIiwiY2hvaWNlVXRpbHMiLCJmaXJzdEF2YWlsYWJsZUluZGV4IiwiZm4iLCJzZXR0aW5ncyIsIlBhbmVsIiwicHJvcHMiLCJkZWZhdWx0IiwiY3JlYXRlRWxlbWVudCIsInRvZ2dsZSIsInJhZGlvIiwiZHJvcGRvd24iLCJsYXlvdXQiLCJDb25maWdMYXlvdXQiLCJjaGlsZHJlbiIsIm1vZGVsIiwibWFya3VwIiwicHJvbXB0IiwiY2hvaWNlcyIsInZhbHVlIiwiaWQiLCJjaG9pY2VzUG9zaXRpb24iLCJjb3JyZWN0UmVzcG9uc2UiLCJkdXBsaWNhdGVzIiwiYWx0ZXJuYXRlUmVzcG9uc2VzIiwicmF0aW9uYWxlIiwicHJlcGFyZU1vZGVsIiwiam9pbmVkT2JqIiwic2Vuc2libGVEZWZhdWx0cyIsInNsYXRlTWFya3VwIiwiY3JlYXRlU2xhdGVNYXJrdXAiLCJwcm9jZXNzZWRNYXJrdXAiLCJwcm9jZXNzTWFya3VwIiwiZGVzY3JpYmUiLCJvbkNoYW5nZSIsImJlZm9yZUVhY2giLCJ3cmFwcGVyIiwiZXh0cmFzIiwiZGVmYXVsdHMiLCJjbGFzc2VzIiwic2hhbGxvdyIsIkNob2ljZXMiLCJkaXNhYmxlTGlmZWN5Y2xlTWV0aG9kcyIsIml0IiwiZXhwZWN0IiwidG9NYXRjaFNuYXBzaG90IiwidyIsImluc3RhbmNlIiwib25DaG9pY2VDaGFuZ2VkIiwidG9CZUNhbGxlZFdpdGgiLCJ0b0hhdmVCZWVuQ2FsbGVkVGltZXMiLCJqc2RvbUFsZXJ0Iiwid2luZG93IiwiYWxlcnQiLCJub3QiLCJ0b0JlQ2FsbGVkIiwib25DaG9pY2VGb2N1cyIsInN0YXRlIiwiZm9jdXNlZEVsIiwidG9FcXVhbCIsIm9uQWRkQ2hvaWNlIiwib25DaG9pY2VSZW1vdmUiLCJpbml0aWFsV3JhcHBlciIsInRvSGF2ZUJlZW5DYWxsZWRXaXRoIiwidXBkYXRlZENob2ljZXMiLCJ3cmFwcGVyV2l0aFVwZGF0ZWRTdGF0ZSIsInRvSGF2ZUJlZW5MYXN0Q2FsbGVkV2l0aCIsInZpc2libGVDaG9pY2VzIiwiZ2V0VmlzaWJsZUNob2ljZXMiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvX190ZXN0c19fL2Nob2ljZXMudGVzdC5qc3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc2hhbGxvdyB9IGZyb20gJ2VuenltZSc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5pbXBvcnQgeyBDaG9pY2VzIH0gZnJvbSAnLi4vY2hvaWNlcyc7XG5pbXBvcnQgc2Vuc2libGVEZWZhdWx0cyBmcm9tICcuLi9kZWZhdWx0cyc7XG5pbXBvcnQgeyBjcmVhdGVTbGF0ZU1hcmt1cCwgcHJvY2Vzc01hcmt1cCB9IGZyb20gJy4uL21hcmt1cFV0aWxzJztcblxuamVzdC5tb2NrKCdAcGllLWxpYi9jb25maWctdWknLCAoKSA9PiAoe1xuICBjaG9pY2VVdGlsczoge1xuICAgIGZpcnN0QXZhaWxhYmxlSW5kZXg6IGplc3QuZm4oKSxcbiAgfSxcbiAgc2V0dGluZ3M6IHtcbiAgICBQYW5lbDogKHByb3BzKSA9PiA8ZGl2IHsuLi5wcm9wc30gLz4sXG4gICAgdG9nZ2xlOiBqZXN0LmZuKCksXG4gICAgcmFkaW86IGplc3QuZm4oKSxcbiAgICBkcm9wZG93bjogamVzdC5mbigpLFxuICB9LFxuICBsYXlvdXQ6IHtcbiAgICBDb25maWdMYXlvdXQ6IChwcm9wcykgPT4gPGRpdj57cHJvcHMuY2hpbGRyZW59PC9kaXY+LFxuICB9LFxufSkpO1xuXG5jb25zdCBtb2RlbCA9IHtcbiAgbWFya3VwOiAne3swfX0gKyB7ezF9fSA9IDE1JyxcbiAgcHJvbXB0OiAnPHA+U29sdmUgdGhlIGVxdWF0aW9uIGJlbG93LjwvcD4nLFxuICBjaG9pY2VzOiBbXG4gICAgeyB2YWx1ZTogJzxkaXY+NjwvZGl2PicsIGlkOiAnMCcgfSxcbiAgICB7IHZhbHVlOiAnPGRpdj45PC9kaXY+JywgaWQ6ICcxJyB9LFxuICAgIHsgdmFsdWU6ICc8ZGl2PjEyPC9kaXY+JywgaWQ6ICcyJyB9LFxuICBdLFxuICBjaG9pY2VzUG9zaXRpb246ICdiZWxvdycsXG4gIGNvcnJlY3RSZXNwb25zZToge1xuICAgIDA6ICcwJyxcbiAgICAxOiAnMScsXG4gIH0sXG4gIGR1cGxpY2F0ZXM6IHRydWUsXG4gIGFsdGVybmF0ZVJlc3BvbnNlczogW1snMSddLCBbJzAnXV0sXG4gIHJhdGlvbmFsZTpcbiAgICAnPHA+QSBjb3JyZWN0IHJlc3BvbnNlIGlzIHNob3duIGJlbG93OjwvcD48dWw+PGxpPjIvNiA9IDEvMzwvbGk+PGxpPjQvOCA9IDEvMjwvbGk+PGxpPjYvMTAgPSAzLzU8L2xpPjxsaT45LzEyID0gMy80PC9saT48L3VsPicsXG59O1xuXG5jb25zdCBwcmVwYXJlTW9kZWwgPSAobW9kZWwgPSB7fSkgPT4ge1xuICBjb25zdCBqb2luZWRPYmogPSB7XG4gICAgLi4uc2Vuc2libGVEZWZhdWx0cy5tb2RlbCxcbiAgICAuLi5tb2RlbCxcbiAgfTtcbiAgY29uc3Qgc2xhdGVNYXJrdXAgPVxuICAgIG1vZGVsLnNsYXRlTWFya3VwIHx8IGNyZWF0ZVNsYXRlTWFya3VwKGpvaW5lZE9iai5tYXJrdXAsIGpvaW5lZE9iai5jaG9pY2VzLCBqb2luZWRPYmouY29ycmVjdFJlc3BvbnNlKTtcbiAgY29uc3QgcHJvY2Vzc2VkTWFya3VwID0gcHJvY2Vzc01hcmt1cChzbGF0ZU1hcmt1cCk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5qb2luZWRPYmosXG4gICAgc2xhdGVNYXJrdXAsXG4gICAgbWFya3VwOiBwcm9jZXNzZWRNYXJrdXAubWFya3VwLFxuICAgIGNvcnJlY3RSZXNwb25zZTogcHJvY2Vzc2VkTWFya3VwLmNvcnJlY3RSZXNwb25zZSxcbiAgfTtcbn07XG5cbmRlc2NyaWJlKCdDaG9pY2VzJywgKCkgPT4ge1xuICBsZXQgb25DaGFuZ2U7XG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgb25DaGFuZ2UgPSBqZXN0LmZuKCk7XG4gIH0pO1xuXG4gIGNvbnN0IHdyYXBwZXIgPSAoZXh0cmFzKSA9PiB7XG4gICAgY29uc3QgZGVmYXVsdHMgPSB7XG4gICAgICBvbkNoYW5nZSxcbiAgICAgIGNsYXNzZXM6IHt9LFxuICAgICAgbW9kZWw6IHByZXBhcmVNb2RlbChtb2RlbCksXG4gICAgICBkdXBsaWNhdGVzOiB0cnVlLFxuICAgICAgLi4uZXh0cmFzLFxuICAgIH07XG4gICAgY29uc3QgcHJvcHMgPSB7IC4uLmRlZmF1bHRzIH07XG5cbiAgICByZXR1cm4gc2hhbGxvdyg8Q2hvaWNlcyB7Li4ucHJvcHN9IC8+LCB7IGRpc2FibGVMaWZlY3ljbGVNZXRob2RzOiB0cnVlIH0pO1xuICB9O1xuXG4gIGRlc2NyaWJlKCdzbmFwc2hvdCcsICgpID0+IHtcbiAgICBpdCgncmVuZGVycyB3aXRoIGR1cGxpY2F0ZXMnLCAoKSA9PiB7XG4gICAgICBleHBlY3Qod3JhcHBlcigpKS50b01hdGNoU25hcHNob3QoKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZW5kZXJzIHdpdGhvdXQgZHVwbGljYXRlcycsICgpID0+IHtcbiAgICAgIGV4cGVjdCh3cmFwcGVyKHsgZHVwbGljYXRlczogZmFsc2UgfSkpLnRvTWF0Y2hTbmFwc2hvdCgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnbG9naWMnLCAoKSA9PiB7XG4gICAgbGV0IHc7XG5cbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgIHcgPSB3cmFwcGVyKCk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnb25DaG9pY2VDaGFuZ2VkJywgKCkgPT4ge1xuICAgICAgaXQoJ3JlbW92ZXMgYSBjaG9pY2UgaWYgaXRzIG5ldyB2YWx1ZSBpcyBlbXB0eScsICgpID0+IHtcbiAgICAgICAgdy5pbnN0YW5jZSgpLm9uQ2hvaWNlQ2hhbmdlZCgnPGRpdj4xMjwvZGl2PicsICcnLCAnMicpO1xuXG4gICAgICAgIGV4cGVjdChvbkNoYW5nZSkudG9CZUNhbGxlZFdpdGgoW1xuICAgICAgICAgIHsgdmFsdWU6ICc8ZGl2PjY8L2Rpdj4nLCBpZDogJzAnIH0sXG4gICAgICAgICAgeyB2YWx1ZTogJzxkaXY+OTwvZGl2PicsIGlkOiAnMScgfSxcbiAgICAgICAgXSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ2RvZXMgbm90IGFkZCBuZXcgY2hvaWNlIGlmIGl0IGlzIGlkZW50aWNhbCB0byBhbm90aGVyIGNob2ljZScsICgpID0+IHtcbiAgICAgICAgdy5pbnN0YW5jZSgpLm9uQ2hvaWNlQ2hhbmdlZCgnJywgJzxkaXY+OTwvZGl2PicsICcyJyk7XG5cbiAgICAgICAgZXhwZWN0KG9uQ2hhbmdlKS50b0JlQ2FsbGVkV2l0aChbXG4gICAgICAgICAgeyB2YWx1ZTogJzxkaXY+NjwvZGl2PicsIGlkOiAnMCcgfSxcbiAgICAgICAgICB7IHZhbHVlOiAnPGRpdj45PC9kaXY+JywgaWQ6ICcxJyB9LFxuICAgICAgICBdKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnZG9lcyBub3QgY2hhbmdlIGNob2ljZSBpZiBpdCB3b3VsZCBiZSBpZGVudGljYWwgdG8gYW5vdGhlciBjaG9pY2UnLCAoKSA9PiB7XG4gICAgICAgIHcuaW5zdGFuY2UoKS5vbkNob2ljZUNoYW5nZWQoJzxkaXY+NjwvZGl2PicsICc8ZGl2Pjk8L2Rpdj4nLCAnMCcpO1xuXG4gICAgICAgIGV4cGVjdChvbkNoYW5nZSkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDApO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdkb2VzIG5vdCByZW1vdmUgYSBjaG9pY2UgaWYgaXRzIG5ldyB2YWx1ZSBpcyBlbXB0eSwgYnV0IGlzIHVzZWQgaW4gY29ycmVjdCByZXNwb25zZScsICgpID0+IHtcbiAgICAgICAgY29uc3QganNkb21BbGVydCA9IHdpbmRvdy5hbGVydDsgLy8gcmVtZW1iZXIgdGhlIGpzZG9tIGFsZXJ0XG5cbiAgICAgICAgd2luZG93LmFsZXJ0ID0gKCkgPT4ge307XG5cbiAgICAgICAgdy5pbnN0YW5jZSgpLm9uQ2hvaWNlQ2hhbmdlZCgnPGRpdj45PC9kaXY+JywgJycsICcxJyk7XG5cbiAgICAgICAgZXhwZWN0KG9uQ2hhbmdlKS5ub3QudG9CZUNhbGxlZCgpO1xuXG4gICAgICAgIHdpbmRvdy5hbGVydCA9IGpzZG9tQWxlcnQ7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ2RvZXMgbm90IHJlbW92ZSBhIGNob2ljZSBpZiBpdHMgbmV3IHZhbHVlIGlzIGVtcHR5LCBidXQgaXMgdXNlZCBpbiBhbHRlcm5hdGUgcmVzcG9uc2UnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGpzZG9tQWxlcnQgPSB3aW5kb3cuYWxlcnQ7IC8vIHJlbWVtYmVyIHRoZSBqc2RvbSBhbGVydFxuXG4gICAgICAgIHdpbmRvdy5hbGVydCA9ICgpID0+IHt9O1xuXG4gICAgICAgIHdyYXBwZXIoeyBtYXJrdXA6ICd7ezB9fScgfSkuaW5zdGFuY2UoKS5vbkNob2ljZUNoYW5nZWQoJzxkaXY+OTwvZGl2PicsICcnLCAnMScpO1xuXG4gICAgICAgIGV4cGVjdChvbkNoYW5nZSkubm90LnRvQmVDYWxsZWQoKTtcblxuICAgICAgICB3aW5kb3cuYWxlcnQgPSBqc2RvbUFsZXJ0O1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdkb2VzIG5vdCByZW1vdmUgYSBjaG9pY2UgaWYgaXRzIG5ldyB2YWx1ZSBpcyBlbXB0eSwgYnV0IHRoZSBvbGQgdmFsdWUgd2FzIGVtcHR5IGFzIHdlbGwgKGF0IGZvY3VzaW5nIGEgbmV3IGNob2ljZSB3aXRob3V0IGVkaXRpbmcpJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBqc2RvbUFsZXJ0ID0gd2luZG93LmFsZXJ0OyAvLyByZW1lbWJlciB0aGUganNkb20gYWxlcnRcblxuICAgICAgICB3aW5kb3cuYWxlcnQgPSAoKSA9PiB7fTtcblxuICAgICAgICB3cmFwcGVyKHsgbWFya3VwOiAne3swfX0nIH0pLmluc3RhbmNlKCkub25DaG9pY2VDaGFuZ2VkKCcnLCAnJywgJzEnKTtcblxuICAgICAgICBleHBlY3Qob25DaGFuZ2UpLm5vdC50b0JlQ2FsbGVkKCk7XG5cbiAgICAgICAgd2luZG93LmFsZXJ0ID0ganNkb21BbGVydDtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgndXBkYXRlcyBjaG9pY2VzJywgKCkgPT4ge1xuICAgICAgICB3Lmluc3RhbmNlKCkub25DaG9pY2VDaGFuZ2VkKCc8ZGl2Pjk8L2Rpdj4nLCAnPGRpdj4zKjM8L2Rpdj4nLCAnMScpO1xuXG4gICAgICAgIGV4cGVjdChvbkNoYW5nZSkudG9CZUNhbGxlZFdpdGgoW1xuICAgICAgICAgIHsgdmFsdWU6ICc8ZGl2PjY8L2Rpdj4nLCBpZDogJzAnIH0sXG4gICAgICAgICAgeyB2YWx1ZTogJzxkaXY+MyozPC9kaXY+JywgaWQ6ICcxJyB9LFxuICAgICAgICAgIHsgdmFsdWU6ICc8ZGl2PjEyPC9kaXY+JywgaWQ6ICcyJyB9LFxuICAgICAgICBdKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ29uQ2hvaWNlRm9jdXMnLCAoKSA9PiB7XG4gICAgICBpdCgnc2V0cyBmb2N1c2VkIGVsZW1lbnQgaWQgb24gc3RhdGUnLCAoKSA9PiB7XG4gICAgICAgIHcuaW5zdGFuY2UoKS5vbkNob2ljZUZvY3VzKCcxJyk7XG5cbiAgICAgICAgZXhwZWN0KHcuaW5zdGFuY2UoKS5zdGF0ZS5mb2N1c2VkRWwpLnRvRXF1YWwoJzEnKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ29uQWRkQ2hvaWNlJywgKCkgPT4ge1xuICAgICAgaXQoJ2FkZHMgYSBjaG9pY2UnLCAoKSA9PiB7XG4gICAgICAgIHdyYXBwZXIoKS5pbnN0YW5jZSgpLm9uQWRkQ2hvaWNlKCk7XG5cbiAgICAgICAgZXhwZWN0KG9uQ2hhbmdlKS50b0JlQ2FsbGVkV2l0aChbLi4ubW9kZWwuY2hvaWNlcywgeyBpZDogJzMnLCB2YWx1ZTogJycgfV0pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnb25DaG9pY2VSZW1vdmUnLCAoKSA9PiB7XG4gICAgICBpdCgncmVtb3ZlcyBhIGNob2ljZScsICgpID0+IHtcbiAgICAgICAgd3JhcHBlcigpLmluc3RhbmNlKCkub25DaG9pY2VSZW1vdmUoJzEnKTtcblxuICAgICAgICBleHBlY3Qob25DaGFuZ2UpLnRvQmVDYWxsZWRXaXRoKFtcbiAgICAgICAgICB7IHZhbHVlOiAnPGRpdj42PC9kaXY+JywgaWQ6ICcwJyB9LFxuICAgICAgICAgIHsgdmFsdWU6ICc8ZGl2PjEyPC9kaXY+JywgaWQ6ICcyJyB9LFxuICAgICAgICBdKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ29uQ2hvaWNlUmVtb3ZlICYgb25BZGRDaG9pY2UnLCAoKSA9PiB7XG4gICAgICBpdCgncHJldmVudHMgZHVwbGljYXRlIElEcyB3aGVuIGFkZGluZyBjaG9pY2VzIGFmdGVyIHJlbW92aW5nIHNvbWUnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGluaXRpYWxXcmFwcGVyID0gd3JhcHBlcigpO1xuXG4gICAgICAgIGluaXRpYWxXcmFwcGVyLmluc3RhbmNlKCkub25DaG9pY2VSZW1vdmUoJzEnKTtcblxuICAgICAgICBleHBlY3Qob25DaGFuZ2UpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKFtcbiAgICAgICAgICB7IHZhbHVlOiAnPGRpdj42PC9kaXY+JywgaWQ6ICcwJyB9LFxuICAgICAgICAgIHsgdmFsdWU6ICc8ZGl2PjEyPC9kaXY+JywgaWQ6ICcyJyB9LFxuICAgICAgICBdKTtcblxuICAgICAgICBjb25zdCB1cGRhdGVkQ2hvaWNlcyA9IFtcbiAgICAgICAgICB7IHZhbHVlOiAnPGRpdj42PC9kaXY+JywgaWQ6ICcwJyB9LFxuICAgICAgICAgIHsgdmFsdWU6ICc8ZGl2PjEyPC9kaXY+JywgaWQ6ICcyJyB9LFxuICAgICAgICBdO1xuICAgICAgICBcbiAgICAgICAgY29uc3Qgd3JhcHBlcldpdGhVcGRhdGVkU3RhdGUgPSB3cmFwcGVyKHtcbiAgICAgICAgICBtb2RlbDogeyAuLi5tb2RlbCwgY2hvaWNlczogdXBkYXRlZENob2ljZXMgfVxuICAgICAgICB9KTtcblxuICAgICAgICB3cmFwcGVyV2l0aFVwZGF0ZWRTdGF0ZS5pbnN0YW5jZSgpLm9uQWRkQ2hvaWNlKCk7XG5cbiAgICAgICAgZXhwZWN0KG9uQ2hhbmdlKS50b0hhdmVCZWVuTGFzdENhbGxlZFdpdGgoW1xuICAgICAgICAgIHsgdmFsdWU6ICc8ZGl2PjY8L2Rpdj4nLCBpZDogJzAnIH0sXG4gICAgICAgICAgeyB2YWx1ZTogJzxkaXY+MTI8L2Rpdj4nLCBpZDogJzInIH0sXG4gICAgICAgICAgeyBpZDogJzMnLCB2YWx1ZTogJycgfVxuICAgICAgICBdKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2dldFZpc2libGVDaG9pY2VzJywgKCkgPT4ge1xuICAgICAgaXQoJ2Nob2ljZXMgYXJlIG51bGwgPT4gcmV0dXJucyBbXScsICgpID0+IHtcbiAgICAgICAgY29uc3QgdmlzaWJsZUNob2ljZXMgPSB3cmFwcGVyKHsgbW9kZWw6IHsgY2hvaWNlczogbnVsbCB9IH0pXG4gICAgICAgICAgLmluc3RhbmNlKClcbiAgICAgICAgICAuZ2V0VmlzaWJsZUNob2ljZXMoKTtcblxuICAgICAgICBleHBlY3QodmlzaWJsZUNob2ljZXMpLnRvRXF1YWwoW10pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdkdXBsaWNhdGVzID0gdHJ1ZScsICgpID0+IHtcbiAgICAgICAgY29uc3QgY2hvaWNlcyA9IFtcbiAgICAgICAgICB7IHZhbHVlOiAnPGRpdj42PC9kaXY+JywgaWQ6ICcwJyB9LFxuICAgICAgICAgIHsgdmFsdWU6ICc8ZGl2Pjk8L2Rpdj4nLCBpZDogJzEnIH0sXG4gICAgICAgICAgeyB2YWx1ZTogJzxkaXY+MTI8L2Rpdj4nLCBpZDogJzInIH0sXG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IHZpc2libGVDaG9pY2VzID0gd3JhcHBlcih7XG4gICAgICAgICAgbW9kZWw6IHtcbiAgICAgICAgICAgIGR1cGxpY2F0ZXM6IHRydWUsXG4gICAgICAgICAgICBjaG9pY2VzOiBjaG9pY2VzLFxuICAgICAgICAgICAgY29ycmVjdFJlc3BvbnNlOiB7XG4gICAgICAgICAgICAgIDA6ICcwJyxcbiAgICAgICAgICAgICAgMTogJzEnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICAgICAgIC5pbnN0YW5jZSgpXG4gICAgICAgICAgLmdldFZpc2libGVDaG9pY2VzKCk7XG5cbiAgICAgICAgZXhwZWN0KHZpc2libGVDaG9pY2VzKS50b0VxdWFsKGNob2ljZXMpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdkdXBsaWNhdGVzID0gZmFsc2UnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNob2ljZXMgPSBbXG4gICAgICAgICAgeyB2YWx1ZTogJzxkaXY+NjwvZGl2PicsIGlkOiAnMCcgfSxcbiAgICAgICAgICB7IHZhbHVlOiAnPGRpdj45PC9kaXY+JywgaWQ6ICcxJyB9LFxuICAgICAgICAgIHsgdmFsdWU6ICc8ZGl2PjEyPC9kaXY+JywgaWQ6ICcyJyB9LFxuICAgICAgICBdO1xuICAgICAgICBjb25zdCB2aXNpYmxlQ2hvaWNlcyA9IHdyYXBwZXIoe1xuICAgICAgICAgIGR1cGxpY2F0ZXM6IGZhbHNlLFxuICAgICAgICAgIG1vZGVsOiB7XG4gICAgICAgICAgICBjaG9pY2VzOiBjaG9pY2VzLFxuICAgICAgICAgICAgY29ycmVjdFJlc3BvbnNlOiB7XG4gICAgICAgICAgICAgIDA6ICcwJyxcbiAgICAgICAgICAgICAgMTogJzEnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICAgICAgIC5pbnN0YW5jZSgpXG4gICAgICAgICAgLmdldFZpc2libGVDaG9pY2VzKCk7XG5cbiAgICAgICAgZXhwZWN0KHZpc2libGVDaG9pY2VzKS50b0VxdWFsKFt7IHZhbHVlOiAnPGRpdj4xMjwvZGl2PicsIGlkOiAnMicgfV0pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdkdXBsaWNhdGVzID0gZmFsc2UsIGVtcHR5IGNvcnJlY3RSZXNwb25zZScsICgpID0+IHtcbiAgICAgICAgY29uc3QgY2hvaWNlcyA9IFtcbiAgICAgICAgICB7IHZhbHVlOiAnPGRpdj42PC9kaXY+JywgaWQ6ICcwJyB9LFxuICAgICAgICAgIHsgdmFsdWU6ICc8ZGl2Pjk8L2Rpdj4nLCBpZDogJzEnIH0sXG4gICAgICAgICAgeyB2YWx1ZTogJzxkaXY+MTI8L2Rpdj4nLCBpZDogJzInIH0sXG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IHZpc2libGVDaG9pY2VzID0gd3JhcHBlcih7XG4gICAgICAgICAgZHVwbGljYXRlczogZmFsc2UsXG4gICAgICAgICAgbW9kZWw6IHtcbiAgICAgICAgICAgIGNob2ljZXM6IGNob2ljZXMsXG4gICAgICAgICAgICBjb3JyZWN0UmVzcG9uc2U6IHt9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgICAgICAgLmluc3RhbmNlKClcbiAgICAgICAgICAuZ2V0VmlzaWJsZUNob2ljZXMoKTtcblxuICAgICAgICBleHBlY3QodmlzaWJsZUNob2ljZXMpLnRvRXF1YWwoY2hvaWNlcyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ2R1cGxpY2F0ZXMgPSBmYWxzZSwgY29ycmVjdFJlc3BvbnNlID0gbnVsbCcsICgpID0+IHtcbiAgICAgICAgY29uc3QgY2hvaWNlcyA9IFtcbiAgICAgICAgICB7IHZhbHVlOiAnPGRpdj42PC9kaXY+JywgaWQ6ICcwJyB9LFxuICAgICAgICAgIHsgdmFsdWU6ICc8ZGl2Pjk8L2Rpdj4nLCBpZDogJzEnIH0sXG4gICAgICAgICAgeyB2YWx1ZTogJzxkaXY+MTI8L2Rpdj4nLCBpZDogJzInIH0sXG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IHZpc2libGVDaG9pY2VzID0gd3JhcHBlcih7XG4gICAgICAgICAgZHVwbGljYXRlczogZmFsc2UsXG4gICAgICAgICAgbW9kZWw6IHtcbiAgICAgICAgICAgIGNob2ljZXM6IGNob2ljZXMsXG4gICAgICAgICAgICBjb3JyZWN0UmVzcG9uc2U6IG51bGwsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICAgICAgICAuaW5zdGFuY2UoKVxuICAgICAgICAgIC5nZXRWaXNpYmxlQ2hvaWNlcygpO1xuXG4gICAgICAgIGV4cGVjdCh2aXNpYmxlQ2hvaWNlcykudG9FcXVhbChjaG9pY2VzKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiOzs7QUFBQSxJQUFBQSxPQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxNQUFBLEdBQUFDLHNCQUFBLENBQUFGLE9BQUE7QUFFQSxJQUFBRyxRQUFBLEdBQUFILE9BQUE7QUFDQSxJQUFBSSxTQUFBLEdBQUFGLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBSyxZQUFBLEdBQUFMLE9BQUE7QUFFQU0sSUFBSSxDQUFDQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsT0FBTztFQUNyQ0MsV0FBVyxFQUFFO0lBQ1hDLG1CQUFtQixFQUFFSCxJQUFJLENBQUNJLEVBQUUsQ0FBQztFQUMvQixDQUFDO0VBQ0RDLFFBQVEsRUFBRTtJQUNSQyxLQUFLLEVBQUdDLEtBQUssaUJBQUtaLE1BQUEsQ0FBQWEsT0FBQSxDQUFBQyxhQUFBLFFBQVNGLEtBQVEsQ0FBQztJQUNwQ0csTUFBTSxFQUFFVixJQUFJLENBQUNJLEVBQUUsQ0FBQyxDQUFDO0lBQ2pCTyxLQUFLLEVBQUVYLElBQUksQ0FBQ0ksRUFBRSxDQUFDLENBQUM7SUFDaEJRLFFBQVEsRUFBRVosSUFBSSxDQUFDSSxFQUFFLENBQUM7RUFDcEIsQ0FBQztFQUNEUyxNQUFNLEVBQUU7SUFDTkMsWUFBWSxFQUFHUCxLQUFLLGlCQUFLWixNQUFBLENBQUFhLE9BQUEsQ0FBQUMsYUFBQSxjQUFNRixLQUFLLENBQUNRLFFBQWM7RUFDckQ7QUFDRixDQUFDLENBQUMsQ0FBQztBQUVILE1BQU1DLEtBQUssR0FBRztFQUNa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
|