@pie-element/hotspot 4.10.15 → 4.10.16-next.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +0 -51
- package/configure/CHANGELOG.md +0 -48
- package/configure/lib/__tests__/hotspot-container.test.js +281 -0
- package/configure/lib/__tests__/hotspot-drawable.test.js +241 -0
- package/configure/lib/__tests__/index.test.js +224 -0
- package/configure/lib/__tests__/root.test.js +443 -0
- package/configure/lib/__tests__/utils.test.js +335 -0
- package/configure/lib/button.js +1 -1
- package/configure/lib/defaults.js +3 -3
- package/configure/lib/defaults.js.map +1 -1
- package/configure/lib/hotspot-container.js +3 -3
- package/configure/lib/hotspot-drawable.js +3 -3
- package/configure/lib/hotspot-drawable.js.map +1 -1
- package/configure/lib/hotspot-palette.js +1 -1
- package/configure/lib/hotspot-polygon.js +1 -1
- package/configure/lib/hotspot-rectangle.js +1 -1
- package/configure/lib/index.js +3 -3
- package/configure/lib/root.js +50 -6
- package/configure/lib/upload-control.js +1 -1
- package/configure/lib/utils.js +4 -4
- package/configure/package.json +1 -1
- package/configure/src/__tests__/__snapshots__/root.test.js.snap +2 -2
- package/configure/src/defaults.js +2 -2
- package/configure/src/root.jsx +36 -2
- package/controller/lib/__tests__/index.test.js +921 -0
- package/controller/lib/__tests__/utils.test.js +8 -0
- package/controller/lib/defaults.js +1 -1
- package/controller/lib/index.js +40 -4
- package/controller/lib/index.js.map +1 -1
- package/controller/lib/utils.js +1 -1
- package/controller/src/index.js +26 -0
- package/docs/demo/pie.manifest.json +11 -0
- package/docs/pie-schema.json +6 -0
- package/docs/pie-schema.json.md +4 -0
- package/lib/__tests__/container-test.js +185 -0
- package/lib/__tests__/image-test.js +63 -0
- package/lib/__tests__/polygon-test.js +99 -0
- package/lib/__tests__/rectangle-test.js +92 -0
- package/lib/__tests__/session-updater-test.js +78 -0
- package/lib/hotspot/container.js +1 -1
- package/lib/hotspot/icons.js +1 -1
- package/lib/hotspot/image.js +1 -1
- package/lib/hotspot/index.js +1 -1
- package/lib/hotspot/polygon.js +1 -1
- package/lib/hotspot/rectangle.js +1 -1
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/session-updater.js +1 -1
- package/package.json +2 -2
- package/LICENSE.md +0 -5
package/CHANGELOG.md
CHANGED
|
@@ -3,57 +3,6 @@
|
|
|
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
|
-
## [4.10.15](https://github.com/pie-framework/pie-elements/compare/@pie-element/hotspot@4.10.14...@pie-element/hotspot@4.10.15) (2022-03-22)
|
|
7
|
-
|
|
8
|
-
**Note:** Version bump only for package @pie-element/hotspot
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
## [4.10.14](https://github.com/pie-framework/pie-elements/compare/@pie-element/hotspot@4.10.13...@pie-element/hotspot@4.10.14) (2022-03-08)
|
|
15
|
-
|
|
16
|
-
**Note:** Version bump only for package @pie-element/hotspot
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
## [4.10.13](https://github.com/pie-framework/pie-elements/compare/@pie-element/hotspot@4.10.12...@pie-element/hotspot@4.10.13) (2022-03-08)
|
|
23
|
-
|
|
24
|
-
**Note:** Version bump only for package @pie-element/hotspot
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
## [4.10.12](https://github.com/pie-framework/pie-elements/compare/@pie-element/hotspot@4.10.11...@pie-element/hotspot@4.10.12) (2022-02-21)
|
|
31
|
-
|
|
32
|
-
**Note:** Version bump only for package @pie-element/hotspot
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
## [4.10.11](https://github.com/pie-framework/pie-elements/compare/@pie-element/hotspot@4.10.10...@pie-element/hotspot@4.10.11) (2022-02-04)
|
|
39
|
-
|
|
40
|
-
**Note:** Version bump only for package @pie-element/hotspot
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
## [4.10.10](https://github.com/pie-framework/pie-elements/compare/@pie-element/hotspot@4.10.9...@pie-element/hotspot@4.10.10) (2022-01-24)
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
### Bug Fixes
|
|
50
|
-
|
|
51
|
-
* use preview prompt for prompt, rationale and teacher instructions to fix table rendering PD-1456 ([f330601](https://github.com/pie-framework/pie-elements/commit/f3306019a2d1c8ce3e2783823dfe9ef0a0394e4f))
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
6
|
## [4.10.9](https://github.com/pie-framework/pie-elements/compare/@pie-element/hotspot@4.10.8...@pie-element/hotspot@4.10.9) (2022-01-10)
|
|
58
7
|
|
|
59
8
|
**Note:** Version bump only for package @pie-element/hotspot
|
package/configure/CHANGELOG.md
CHANGED
|
@@ -3,54 +3,6 @@
|
|
|
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
|
-
## [4.6.14](https://github.com/pie-framework/pie-elements/compare/@pie-element/hotspot-configure@4.6.13...@pie-element/hotspot-configure@4.6.14) (2022-03-22)
|
|
7
|
-
|
|
8
|
-
**Note:** Version bump only for package @pie-element/hotspot-configure
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
## [4.6.13](https://github.com/pie-framework/pie-elements/compare/@pie-element/hotspot-configure@4.6.12...@pie-element/hotspot-configure@4.6.13) (2022-03-08)
|
|
15
|
-
|
|
16
|
-
**Note:** Version bump only for package @pie-element/hotspot-configure
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
## [4.6.12](https://github.com/pie-framework/pie-elements/compare/@pie-element/hotspot-configure@4.6.11...@pie-element/hotspot-configure@4.6.12) (2022-03-08)
|
|
23
|
-
|
|
24
|
-
**Note:** Version bump only for package @pie-element/hotspot-configure
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
## [4.6.11](https://github.com/pie-framework/pie-elements/compare/@pie-element/hotspot-configure@4.6.10...@pie-element/hotspot-configure@4.6.11) (2022-02-21)
|
|
31
|
-
|
|
32
|
-
**Note:** Version bump only for package @pie-element/hotspot-configure
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
## [4.6.10](https://github.com/pie-framework/pie-elements/compare/@pie-element/hotspot-configure@4.6.9...@pie-element/hotspot-configure@4.6.10) (2022-02-04)
|
|
39
|
-
|
|
40
|
-
**Note:** Version bump only for package @pie-element/hotspot-configure
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
## [4.6.9](https://github.com/pie-framework/pie-elements/compare/@pie-element/hotspot-configure@4.6.8...@pie-element/hotspot-configure@4.6.9) (2022-01-24)
|
|
47
|
-
|
|
48
|
-
**Note:** Version bump only for package @pie-element/hotspot-configure
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
6
|
## [4.6.8](https://github.com/pie-framework/pie-elements/compare/@pie-element/hotspot-configure@4.6.7...@pie-element/hotspot-configure@4.6.8) (2022-01-10)
|
|
55
7
|
|
|
56
8
|
**Note:** Version bump only for package @pie-element/hotspot-configure
|
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
6
|
+
|
|
7
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
8
|
+
|
|
9
|
+
var _enzyme = require("enzyme");
|
|
10
|
+
|
|
11
|
+
var _react = _interopRequireDefault(require("react"));
|
|
12
|
+
|
|
13
|
+
var _hotspotContainer = require("../hotspot-container");
|
|
14
|
+
|
|
15
|
+
var _utils = require("../utils");
|
|
16
|
+
|
|
17
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
18
|
+
|
|
19
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
20
|
+
|
|
21
|
+
var model = function model() {
|
|
22
|
+
return {
|
|
23
|
+
imageUrl: 'https://cdn.fluence.net/image/0240eb1455ce4c4bb6180232347b6aef_W',
|
|
24
|
+
shapes: (0, _utils.groupShapes)((0, _utils.getAllShapes)({
|
|
25
|
+
rectangles: [{
|
|
26
|
+
id: '0',
|
|
27
|
+
height: 140,
|
|
28
|
+
width: 130,
|
|
29
|
+
x: 1,
|
|
30
|
+
y: 1,
|
|
31
|
+
correct: true
|
|
32
|
+
}, {
|
|
33
|
+
id: '1',
|
|
34
|
+
height: 140,
|
|
35
|
+
width: 130,
|
|
36
|
+
x: 140,
|
|
37
|
+
y: 1
|
|
38
|
+
}, {
|
|
39
|
+
id: '2',
|
|
40
|
+
height: 140,
|
|
41
|
+
width: 130,
|
|
42
|
+
x: 280,
|
|
43
|
+
y: 1
|
|
44
|
+
}],
|
|
45
|
+
polygons: [{
|
|
46
|
+
id: '3',
|
|
47
|
+
points: [{
|
|
48
|
+
x: 1,
|
|
49
|
+
y: 148
|
|
50
|
+
}, {
|
|
51
|
+
x: 1,
|
|
52
|
+
y: 288
|
|
53
|
+
}, {
|
|
54
|
+
y: 288,
|
|
55
|
+
x: 129
|
|
56
|
+
}, {
|
|
57
|
+
y: 148,
|
|
58
|
+
x: 129
|
|
59
|
+
}],
|
|
60
|
+
correct: true
|
|
61
|
+
}, {
|
|
62
|
+
id: '4',
|
|
63
|
+
points: [{
|
|
64
|
+
y: 151,
|
|
65
|
+
x: 141
|
|
66
|
+
}, {
|
|
67
|
+
y: 289,
|
|
68
|
+
x: 141
|
|
69
|
+
}, {
|
|
70
|
+
y: 289,
|
|
71
|
+
x: 269
|
|
72
|
+
}, {
|
|
73
|
+
x: 269,
|
|
74
|
+
y: 151
|
|
75
|
+
}],
|
|
76
|
+
correct: false
|
|
77
|
+
}, {
|
|
78
|
+
id: '5',
|
|
79
|
+
points: [{
|
|
80
|
+
x: 279,
|
|
81
|
+
y: 150
|
|
82
|
+
}, {
|
|
83
|
+
x: 279,
|
|
84
|
+
y: 289
|
|
85
|
+
}, {
|
|
86
|
+
x: 407,
|
|
87
|
+
y: 289
|
|
88
|
+
}, {
|
|
89
|
+
x: 407,
|
|
90
|
+
y: 150
|
|
91
|
+
}],
|
|
92
|
+
correct: false
|
|
93
|
+
}]
|
|
94
|
+
})),
|
|
95
|
+
dimensions: {
|
|
96
|
+
height: 291,
|
|
97
|
+
width: 410
|
|
98
|
+
},
|
|
99
|
+
hotspotColor: 'rgba(137, 183, 244, 0.65)',
|
|
100
|
+
outlineColor: 'blue',
|
|
101
|
+
multipleCorrect: true
|
|
102
|
+
};
|
|
103
|
+
};
|
|
104
|
+
|
|
105
|
+
describe('HotspotContainer', function () {
|
|
106
|
+
var w,
|
|
107
|
+
onImageUpload = jest.fn(),
|
|
108
|
+
onUpdateImageDimension = jest.fn(),
|
|
109
|
+
onUpdateShapes = jest.fn(),
|
|
110
|
+
initialModel = model();
|
|
111
|
+
beforeEach(function () {
|
|
112
|
+
w = function w(extras) {
|
|
113
|
+
var props = _objectSpread({
|
|
114
|
+
classes: {},
|
|
115
|
+
dimensions: initialModel.dimensions,
|
|
116
|
+
imageUrl: initialModel.imageUrl,
|
|
117
|
+
multipleCorrect: initialModel.multipleCorrect,
|
|
118
|
+
hotspotColor: initialModel.hotspotColor,
|
|
119
|
+
outlineColor: initialModel.outlineColor,
|
|
120
|
+
onUpdateImageDimension: onUpdateImageDimension,
|
|
121
|
+
onUpdateShapes: onUpdateShapes,
|
|
122
|
+
onImageUpload: onImageUpload,
|
|
123
|
+
shapes: initialModel.shapes
|
|
124
|
+
}, extras);
|
|
125
|
+
|
|
126
|
+
return (0, _enzyme.shallow)( /*#__PURE__*/_react["default"].createElement(_hotspotContainer.Container, props));
|
|
127
|
+
};
|
|
128
|
+
});
|
|
129
|
+
describe('render', function () {
|
|
130
|
+
it('renders', function () {
|
|
131
|
+
expect(w()).toMatchSnapshot();
|
|
132
|
+
});
|
|
133
|
+
});
|
|
134
|
+
describe('logic', function () {
|
|
135
|
+
var wrapper;
|
|
136
|
+
var formattedShapes = [{
|
|
137
|
+
id: '0',
|
|
138
|
+
height: 140,
|
|
139
|
+
width: 130,
|
|
140
|
+
x: 1,
|
|
141
|
+
y: 1,
|
|
142
|
+
correct: true,
|
|
143
|
+
group: 'rectangles',
|
|
144
|
+
index: 0
|
|
145
|
+
}, {
|
|
146
|
+
id: '1',
|
|
147
|
+
height: 140,
|
|
148
|
+
width: 130,
|
|
149
|
+
x: 140,
|
|
150
|
+
y: 1,
|
|
151
|
+
group: 'rectangles',
|
|
152
|
+
index: 1
|
|
153
|
+
}, {
|
|
154
|
+
id: '2',
|
|
155
|
+
height: 140,
|
|
156
|
+
width: 130,
|
|
157
|
+
x: 280,
|
|
158
|
+
y: 1,
|
|
159
|
+
group: 'rectangles',
|
|
160
|
+
index: 2
|
|
161
|
+
}, {
|
|
162
|
+
id: '3',
|
|
163
|
+
points: [{
|
|
164
|
+
x: 1,
|
|
165
|
+
y: 148
|
|
166
|
+
}, {
|
|
167
|
+
x: 1,
|
|
168
|
+
y: 288
|
|
169
|
+
}, {
|
|
170
|
+
y: 288,
|
|
171
|
+
x: 129
|
|
172
|
+
}, {
|
|
173
|
+
y: 148,
|
|
174
|
+
x: 129
|
|
175
|
+
}],
|
|
176
|
+
correct: true,
|
|
177
|
+
group: 'polygons',
|
|
178
|
+
index: 3
|
|
179
|
+
}, {
|
|
180
|
+
id: '4',
|
|
181
|
+
points: [{
|
|
182
|
+
y: 151,
|
|
183
|
+
x: 141
|
|
184
|
+
}, {
|
|
185
|
+
y: 289,
|
|
186
|
+
x: 141
|
|
187
|
+
}, {
|
|
188
|
+
y: 289,
|
|
189
|
+
x: 269
|
|
190
|
+
}, {
|
|
191
|
+
x: 269,
|
|
192
|
+
y: 151
|
|
193
|
+
}],
|
|
194
|
+
correct: false,
|
|
195
|
+
group: 'polygons',
|
|
196
|
+
index: 4
|
|
197
|
+
}, {
|
|
198
|
+
id: '5',
|
|
199
|
+
points: [{
|
|
200
|
+
x: 279,
|
|
201
|
+
y: 150
|
|
202
|
+
}, {
|
|
203
|
+
x: 279,
|
|
204
|
+
y: 289
|
|
205
|
+
}, {
|
|
206
|
+
x: 407,
|
|
207
|
+
y: 289
|
|
208
|
+
}, {
|
|
209
|
+
x: 407,
|
|
210
|
+
y: 150
|
|
211
|
+
}],
|
|
212
|
+
correct: false,
|
|
213
|
+
group: 'polygons',
|
|
214
|
+
index: 5
|
|
215
|
+
}];
|
|
216
|
+
beforeEach(function () {
|
|
217
|
+
wrapper = w();
|
|
218
|
+
});
|
|
219
|
+
it('state will contain formatted shapes', function () {
|
|
220
|
+
expect(wrapper.instance().state.shapes).toEqual(expect.arrayContaining(formattedShapes));
|
|
221
|
+
});
|
|
222
|
+
it('onUpdateShapes with new added shape', function () {
|
|
223
|
+
var newShape = {
|
|
224
|
+
id: '7',
|
|
225
|
+
height: 140,
|
|
226
|
+
width: 130,
|
|
227
|
+
x: 280,
|
|
228
|
+
y: 1,
|
|
229
|
+
group: 'rectangles'
|
|
230
|
+
};
|
|
231
|
+
wrapper.instance().onUpdateShapes([].concat(formattedShapes, [newShape]));
|
|
232
|
+
expect(onUpdateShapes).toHaveBeenLastCalledWith({
|
|
233
|
+
rectangles: [].concat((0, _toConsumableArray2["default"])(initialModel.shapes.rectangles), [{
|
|
234
|
+
id: '7',
|
|
235
|
+
height: 140,
|
|
236
|
+
width: 130,
|
|
237
|
+
x: 280,
|
|
238
|
+
y: 1
|
|
239
|
+
}]),
|
|
240
|
+
polygons: initialModel.shapes.polygons
|
|
241
|
+
});
|
|
242
|
+
});
|
|
243
|
+
it('onUpdateShapes with no shapes', function () {
|
|
244
|
+
wrapper.instance().onUpdateShapes([]);
|
|
245
|
+
expect(onUpdateShapes).toHaveBeenLastCalledWith({
|
|
246
|
+
rectangles: [],
|
|
247
|
+
polygons: []
|
|
248
|
+
});
|
|
249
|
+
});
|
|
250
|
+
it('handleUndo if no new shape was added', function () {
|
|
251
|
+
wrapper.instance().handleUndo();
|
|
252
|
+
expect(onUpdateShapes).toHaveBeenLastCalledWith(_objectSpread(_objectSpread({}, initialModel.shapes), {}, {
|
|
253
|
+
polygons: initialModel.shapes.polygons.slice(0, -1)
|
|
254
|
+
}));
|
|
255
|
+
});
|
|
256
|
+
it('handleUndo if new shape was added', function () {
|
|
257
|
+
var newShape = {
|
|
258
|
+
id: '7',
|
|
259
|
+
height: 140,
|
|
260
|
+
width: 130,
|
|
261
|
+
x: 280,
|
|
262
|
+
y: 1,
|
|
263
|
+
index: 6
|
|
264
|
+
}; // first, add a new shape
|
|
265
|
+
|
|
266
|
+
wrapper.instance().state.shapes = (0, _utils.getAllShapes)(_objectSpread(_objectSpread({}, initialModel.shapes), {}, {
|
|
267
|
+
rectangles: [].concat((0, _toConsumableArray2["default"])(initialModel.shapes.rectangles), [newShape])
|
|
268
|
+
}));
|
|
269
|
+
wrapper.instance().handleUndo();
|
|
270
|
+
expect(onUpdateShapes).toBeCalledWith(initialModel.shapes);
|
|
271
|
+
});
|
|
272
|
+
it('handleClearAll', function () {
|
|
273
|
+
wrapper.instance().handleClearAll();
|
|
274
|
+
expect(onUpdateShapes).toHaveBeenLastCalledWith({
|
|
275
|
+
rectangles: [],
|
|
276
|
+
polygons: []
|
|
277
|
+
});
|
|
278
|
+
});
|
|
279
|
+
});
|
|
280
|
+
});
|
|
281
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fX3Rlc3RzX18vaG90c3BvdC1jb250YWluZXIudGVzdC5qcyJdLCJuYW1lcyI6WyJtb2RlbCIsImltYWdlVXJsIiwic2hhcGVzIiwicmVjdGFuZ2xlcyIsImlkIiwiaGVpZ2h0Iiwid2lkdGgiLCJ4IiwieSIsImNvcnJlY3QiLCJwb2x5Z29ucyIsInBvaW50cyIsImRpbWVuc2lvbnMiLCJob3RzcG90Q29sb3IiLCJvdXRsaW5lQ29sb3IiLCJtdWx0aXBsZUNvcnJlY3QiLCJkZXNjcmliZSIsInciLCJvbkltYWdlVXBsb2FkIiwiamVzdCIsImZuIiwib25VcGRhdGVJbWFnZURpbWVuc2lvbiIsIm9uVXBkYXRlU2hhcGVzIiwiaW5pdGlhbE1vZGVsIiwiYmVmb3JlRWFjaCIsImV4dHJhcyIsInByb3BzIiwiY2xhc3NlcyIsIml0IiwiZXhwZWN0IiwidG9NYXRjaFNuYXBzaG90Iiwid3JhcHBlciIsImZvcm1hdHRlZFNoYXBlcyIsImdyb3VwIiwiaW5kZXgiLCJpbnN0YW5jZSIsInN0YXRlIiwidG9FcXVhbCIsImFycmF5Q29udGFpbmluZyIsIm5ld1NoYXBlIiwidG9IYXZlQmVlbkxhc3RDYWxsZWRXaXRoIiwiaGFuZGxlVW5kbyIsInNsaWNlIiwidG9CZUNhbGxlZFdpdGgiLCJoYW5kbGVDbGVhckFsbCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7Ozs7O0FBRUEsSUFBTUEsS0FBSyxHQUFHLFNBQVJBLEtBQVE7QUFBQSxTQUFPO0FBQ25CQyxJQUFBQSxRQUFRLEVBQUUsa0VBRFM7QUFFbkJDLElBQUFBLE1BQU0sRUFBRSx3QkFBWSx5QkFBYTtBQUMvQkMsTUFBQUEsVUFBVSxFQUFFLENBQ1Y7QUFDRUMsUUFBQUEsRUFBRSxFQUFFLEdBRE47QUFFRUMsUUFBQUEsTUFBTSxFQUFFLEdBRlY7QUFHRUMsUUFBQUEsS0FBSyxFQUFFLEdBSFQ7QUFJRUMsUUFBQUEsQ0FBQyxFQUFFLENBSkw7QUFLRUMsUUFB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QUlBUixNQUFBQSxPQUFPLENBQUNJLFFBQVIsR0FBbUJNLFVBQW5CO0FBQ0FaLE1BQUFBLE1BQU0sQ0FBQ1AsY0FBRCxDQUFOLENBQXVCcUIsY0FBdkIsQ0FBc0NwQixZQUFZLENBQUNyQixNQUFuRDtBQUNELEtBakJDLENBQUY7QUFtQkEwQixJQUFBQSxFQUFFLENBQUMsZ0JBQUQsRUFBbUIsWUFBTTtBQUN6QkcsTUFBQUEsT0FBTyxDQUFDSSxRQUFSLEdBQW1CUyxjQUFuQjtBQUNBZixNQUFBQSxNQUFNLENBQUNQLGNBQUQsQ0FBTixDQUF1QmtCLHdCQUF2QixDQUFnRDtBQUM5Q3JDLFFBQUFBLFVBQVUsRUFBRSxFQURrQztBQUU5Q08sUUFBQUEsUUFBUSxFQUFFO0FBRm9DLE9BQWhEO0FBSUQsS0FOQyxDQUFGO0FBT0QsR0E3SU8sQ0FBUjtBQThJRCxDQWhMTyxDQUFSIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc2hhbGxvdyB9IGZyb20gJ2VuenltZSc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgQ29udGFpbmVyIH0gZnJvbSAnLi4vaG90c3BvdC1jb250YWluZXInO1xuaW1wb3J0IHsgZ2V0QWxsU2hhcGVzLCBncm91cFNoYXBlcyB9IGZyb20gJy4uL3V0aWxzJztcblxuY29uc3QgbW9kZWwgPSAoKSA9PiAoe1xuICBpbWFnZVVybDogJ2h0dHBzOi8vY2RuLmZsdWVuY2UubmV0L2ltYWdlLzAyNDBlYjE0NTVjZTRjNGJiNjE4MDIzMjM0N2I2YWVmX1cnLFxuICBzaGFwZXM6IGdyb3VwU2hhcGVzKGdldEFsbFNoYXBlcyh7XG4gICAgcmVjdGFuZ2xlczogW1xuICAgICAge1xuICAgICAgICBpZDogJzAnLFxuICAgICAgICBoZWlnaHQ6IDE0MCxcbiAgICAgICAgd2lkdGg6IDEzMCxcbiAgICAgICAgeDogMSxcbiAgICAgICAgeTogMSxcbiAgICAgICAgY29ycmVjdDogdHJ1ZVxuICAgICAgfSwge1xuICAgICAgICBpZDogJzEnLFxuICAgICAgICBoZWlnaHQ6IDE0MCxcbiAgICAgICAgd2lkdGg6IDEzMCxcbiAgICAgICAgeDogMTQwLFxuICAgICAgICB5OiAxXG4gICAgICB9LCB7XG4gICAgICAgIGlkOiAnMicsXG4gICAgICAgIGhlaWdodDogMTQwLFxuICAgICAgICB3aWR0aDogMTMwLFxuICAgICAgICB4OiAyODAsXG4gICAgICAgIHk6IDFcbiAgICAgIH1cbiAgICBdLFxuICAgIHBvbHlnb25zOiBbXG4gICAgICB7XG4gICAgICAgIGlkOiAnMycsXG4gICAgICAgIHBvaW50czogW3sgeDogMSwgeTogMTQ4IH0sIHsgeDogMSwgeTogMjg4IH0sIHsgeTogMjg4LCB4OiAxMjkgfSwgeyB5OiAxNDgsIHg6IDEyOSB9XSxcbiAgICAgICAgY29ycmVjdDogdHJ1ZVxuICAgICAgfSwge1xuICAgICAgICBpZDogJzQnLFxuICAgICAgICBwb2ludHM6IFt7IHk6IDE1MSwgeDogMTQxIH0sIHsgeTogMjg5LCB4OiAxNDEgfSwgeyB5OiAyODksIHg6IDI2OSB9LCB7IHg6IDI2OSwgeTogMTUxIH1dLFxuICAgICAgICBjb3JyZWN0OiBmYWxzZVxuICAgICAgfSwge1xuICAgICAgICBpZDogJzUnLFxuICAgICAgICBwb2ludHM6IFt7IHg6IDI3OSwgeTogMTUwIH0sIHsgeDogMjc5LCB5OiAyODkgfSwgeyB4OiA0MDcsIHk6IDI4OSB9LCB7IHg6IDQwNywgeTogMTUwIH1dLFxuICAgICAgICBjb3JyZWN0OiBmYWxzZVxuICAgICAgfV1cbiAgfSkpLFxuICBkaW1lbnNpb25zOiB7XG4gICAgaGVpZ2h0OiAyOTEsIHdpZHRoOiA0MTBcbiAgfSxcbiAgaG90c3BvdENvbG9yOiAncmdiYSgxMzcsIDE4MywgMjQ0LCAwLjY1KScsXG4gIG91dGxpbmVDb2xvcjogJ2JsdWUnLFxuICBtdWx0aXBsZUNvcnJlY3Q6IHRydWVcbn0pO1xuXG5kZXNjcmliZSgnSG90c3BvdENvbnRhaW5lcicsICgpID0+IHtcbiAgbGV0IHcsXG4gICAgb25JbWFnZVVwbG9hZCA9IGplc3QuZm4oKSxcbiAgICBvblVwZGF0ZUltYWdlRGltZW5zaW9uID0gamVzdC5mbigpLFxuICAgIG9uVXBkYXRlU2hhcGVzID0gamVzdC5mbigpLFxuICAgIGluaXRpYWxNb2RlbCA9IG1vZGVsKClcbiAgO1xuXG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIHcgPSBleHRyYXMgPT4ge1xuICAgICAgY29uc3QgcHJvcHMgPSB7XG4gICAgICAgIGNsYXNzZXM6IHt9LFxuICAgICAgICBkaW1lbnNpb25zOiBpbml0aWFsTW9kZWwuZGltZW5zaW9ucyxcbiAgICAgICAgaW1hZ2VVcmw6IGluaXRpYWxNb2RlbC5pbWFnZVVybCxcbiAgICAgICAgbXVsdGlwbGVDb3JyZWN0OiBpbml0aWFsTW9kZWwubXVsdGlwbGVDb3JyZWN0LFxuICAgICAgICBob3RzcG90Q29sb3I6IGluaXRpYWxNb2RlbC5ob3RzcG90Q29sb3IsXG4gICAgICAgIG91dGxpbmVDb2xvcjogaW5pdGlhbE1vZGVsLm91dGxpbmVDb2xvcixcbiAgICAgICAgb25VcGRhdGVJbWFnZURpbWVuc2lvbjogb25VcGRhdGVJbWFnZURpbWVuc2lvbixcbiAgICAgICAgb25VcGRhdGVTaGFwZXM6IG9uVXBkYXRlU2hhcGVzLFxuICAgICAgICBvbkltYWdlVXBsb2FkOiBvbkltYWdlVXBsb2FkLFxuICAgICAgICBzaGFwZXM6IGluaXRpYWxNb2RlbC5zaGFwZXMsXG4gICAgICAgIC4uLmV4dHJhc1xuICAgICAgfTtcblxuICAgICAgcmV0dXJuIHNoYWxsb3coPENvbnRhaW5lciB7Li4ucHJvcHN9IC8+KTtcbiAgICB9XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdyZW5kZXInLCAoKSA9PiB7XG4gICAgaXQoJ3JlbmRlcnMnLCAoKSA9PiB7XG4gICAgICBleHBlY3QodygpKS50b01hdGNoU25hcHNob3QoKTtcbiAgICB9KVxuICB9KTtcblxuICBkZXNjcmliZSgnbG9naWMnLCAoKSA9PiB7XG4gICAgbGV0IHdyYXBwZXI7XG4gICAgbGV0IGZvcm1hdHRlZFNoYXBlcyA9IFtcbiAgICAgIHtcbiAgICAgICAgaWQ6ICcwJyxcbiAgICAgICAgaGVpZ2h0OiAxNDAsXG4gICAgICAgIHdpZHRoOiAxMzAsXG4gICAgICAgIHg6IDEsXG4gICAgICAgIHk6IDEsXG4gICAgICAgIGNvcnJlY3Q6IHRydWUsXG4gICAgICAgIGdyb3VwOiAncmVjdGFuZ2xlcycsXG4gICAgICAgIGluZGV4OiAwXG4gICAgICB9LCB7XG4gICAgICAgIGlkOiAnMScsXG4gICAgICAgIGhlaWdodDogMTQwLFxuICAgICAgICB3aWR0aDogMTMwLFxuICAgICAgICB4OiAxNDAsXG4gICAgICAgIHk6IDEsXG4gICAgICAgIGdyb3VwOiAncmVjdGFuZ2xlcycsXG4gICAgICAgIGluZGV4OiAxXG4gICAgICB9LCB7XG4gICAgICAgIGlkOiAnMicsXG4gICAgICAgIGhlaWdodDogMTQwLFxuICAgICAgICB3aWR0aDogMTMwLFxuICAgICAgICB4OiAyODAsXG4gICAgICAgIHk6IDEsXG4gICAgICAgIGdyb3VwOiAncmVjdGFuZ2xlcycsXG4gICAgICAgIGluZGV4OiAyXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBpZDogJzMnLFxuICAgICAgICBwb2ludHM6IFtcbiAgICAgICAgICB7IHg6IDEsIHk6IDE0OCB9LFxuICAgICAgICAgIHsgeDogMSwgeTogMjg4IH0sXG4gICAgICAgICAgeyB5OiAyODgsIHg6IDEyOSB9LFxuICAgICAgICAgIHsgeTogMTQ4LCB4OiAxMjkgfV0sXG4gICAgICAgIGNvcnJlY3Q6IHRydWUsXG4gICAgICAgIGdyb3VwOiAncG9seWdvbnMnLFxuICAgICAgICBpbmRleDogM1xuICAgICAgfSwge1xuICAgICAgICBpZDogJzQnLFxuICAgICAgICBwb2ludHM6IFtcbiAgICAgICAgICB7IHk6IDE1MSwgeDogMTQxIH0sXG4gICAgICAgICAgeyB5OiAyODksIHg6IDE0MSB9LFxuICAgICAgICAgIHsgeTogMjg5LCB4OiAyNjkgfSxcbiAgICAgICAgICB7IHg6IDI2OSwgeTogMTUxIH1dLFxuICAgICAgICBjb3JyZWN0OiBmYWxzZSxcbiAgICAgICAgZ3JvdXA6ICdwb2x5Z29ucycsXG4gICAgICAgIGluZGV4OiA0XG4gICAgICB9LCB7XG4gICAgICAgIGlkOiAnNScsXG4gICAgICAgIHBvaW50czogW1xuICAgICAgICAgIHsgeDogMjc5LCB5OiAxNTAgfSxcbiAgICAgICAgICB7IHg6IDI3OSwgeTogMjg5IH0sXG4gICAgICAgICAgeyB4OiA0MDcsIHk6IDI4OSB9LFxuICAgICAgICAgIHsgeDogNDA3LCB5OiAxNTAgfVxuICAgICAgICBdLFxuICAgICAgICBjb3JyZWN0OiBmYWxzZSxcbiAgICAgICAgZ3JvdXA6ICdwb2x5Z29ucycsXG4gICAgICAgIGluZGV4OiA1XG4gICAgICB9XG4gICAgXTtcblxuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgd3JhcHBlciA9IHcoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzdGF0ZSB3aWxsIGNvbnRhaW4gZm9ybWF0dGVkIHNoYXBlcycsICgpID0+IHtcbiAgICAgIGV4cGVjdCh3cmFwcGVyLmluc3RhbmNlKCkuc3RhdGUuc2hhcGVzKS50b0VxdWFsKGV4cGVjdC5hcnJheUNvbnRhaW5pbmcoZm9ybWF0dGVkU2hhcGVzKSk7XG4gICAgfSk7XG5cbiAgICBpdCgnb25VcGRhdGVTaGFwZXMgd2l0aCBuZXcgYWRkZWQgc2hhcGUnLCAoKSA9PiB7XG4gICAgICBjb25zdCBuZXdTaGFwZSA9IHtcbiAgICAgICAgaWQ6ICc3JyxcbiAgICAgICAgaGVpZ2h0OiAxNDAsXG4gICAgICAgIHdpZHRoOiAxMzAsXG4gICAgICAgIHg6IDI4MCxcbiAgICAgICAgeTogMSxcbiAgICAgICAgZ3JvdXA6ICdyZWN0YW5nbGVzJ1xuICAgICAgfTtcblxuICAgICAgd3JhcHBlci5pbnN0YW5jZSgpLm9uVXBkYXRlU2hhcGVzKFsuLi5mb3JtYXR0ZWRTaGFwZXMsIG5ld1NoYXBlXSk7XG5cbiAgICAgIGV4cGVjdChvblVwZGF0ZVNoYXBlcykudG9IYXZlQmVlbkxhc3RDYWxsZWRXaXRoKHtcbiAgICAgICAgcmVjdGFuZ2xlczogW1xuICAgICAgICAgIC4uLmluaXRpYWxNb2RlbC5zaGFwZXMucmVjdGFuZ2xlcyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogJzcnLFxuICAgICAgICAgICAgaGVpZ2h0OiAxNDAsXG4gICAgICAgICAgICB3aWR0aDogMTMwLFxuICAgICAgICAgICAgeDogMjgwLFxuICAgICAgICAgICAgeTogMSxcbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHBvbHlnb25zOiBpbml0aWFsTW9kZWwuc2hhcGVzLnBvbHlnb25zXG4gICAgICB9KVxuICAgIH0pO1xuXG4gICAgaXQoJ29uVXBkYXRlU2hhcGVzIHdpdGggbm8gc2hhcGVzJywgKCkgPT4ge1xuICAgICAgd3JhcHBlci5pbnN0YW5jZSgpLm9uVXBkYXRlU2hhcGVzKFtdKTtcblxuICAgICAgZXhwZWN0KG9uVXBkYXRlU2hhcGVzKS50b0hhdmVCZWVuTGFzdENhbGxlZFdpdGgoe1xuICAgICAgICByZWN0YW5nbGVzOiBbXSxcbiAgICAgICAgcG9seWdvbnM6IFtdXG4gICAgICB9KVxuICAgIH0pO1xuXG4gICAgaXQoJ2hhbmRsZVVuZG8gaWYgbm8gbmV3IHNoYXBlIHdhcyBhZGRlZCcsICgpID0+IHtcbiAgICAgIHdyYXBwZXIuaW5zdGFuY2UoKS5oYW5kbGVVbmRvKCk7XG4gICAgICBleHBlY3Qob25VcGRhdGVTaGFwZXMpLnRvSGF2ZUJlZW5MYXN0Q2FsbGVkV2l0aCh7XG4gICAgICAgIC4uLmluaXRpYWxNb2RlbC5zaGFwZXMsXG4gICAgICAgIHBvbHlnb25zOiBpbml0aWFsTW9kZWwuc2hhcGVzLnBvbHlnb25zLnNsaWNlKDAsIC0xKVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnaGFuZGxlVW5kbyBpZiBuZXcgc2hhcGUgd2FzIGFkZGVkJywgKCkgPT4ge1xuICAgICAgY29uc3QgbmV3U2hhcGUgPSB7XG4gICAgICAgIGlkOiAnNycsXG4gICAgICAgIGhlaWdodDogMTQwLFxuICAgICAgICB3aWR0aDogMTMwLFxuICAgICAgICB4OiAyODAsXG4gICAgICAgIHk6IDEsXG4gICAgICAgIGluZGV4OiA2XG4gICAgICB9O1xuXG4gICAgICAvLyBmaXJzdCwgYWRkIGEgbmV3IHNoYXBlXG4gICAgICB3cmFwcGVyLmluc3RhbmNlKCkuc3RhdGUuc2hhcGVzID0gZ2V0QWxsU2hhcGVzKHtcbiAgICAgICAgLi4uaW5pdGlhbE1vZGVsLnNoYXBlcyxcbiAgICAgICAgcmVjdGFuZ2xlczogWyAuLi5pbml0aWFsTW9kZWwuc2hhcGVzLnJlY3RhbmdsZXMsIG5ld1NoYXBlXSxcbiAgICAgIH0pO1xuICAgICAgd3JhcHBlci5pbnN0YW5jZSgpLmhhbmRsZVVuZG8oKTtcbiAgICAgIGV4cGVjdChvblVwZGF0ZVNoYXBlcykudG9CZUNhbGxlZFdpdGgoaW5pdGlhbE1vZGVsLnNoYXBlcyk7XG4gICAgfSk7XG5cbiAgICBpdCgnaGFuZGxlQ2xlYXJBbGwnLCAoKSA9PiB7XG4gICAgICB3cmFwcGVyLmluc3RhbmNlKCkuaGFuZGxlQ2xlYXJBbGwoKTtcbiAgICAgIGV4cGVjdChvblVwZGF0ZVNoYXBlcykudG9IYXZlQmVlbkxhc3RDYWxsZWRXaXRoKHtcbiAgICAgICAgcmVjdGFuZ2xlczogW10sXG4gICAgICAgIHBvbHlnb25zOiBbXVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
|