@pie-element/extended-text-entry 6.6.3 → 6.7.0-annotations.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 +6 -14
- package/configure/CHANGELOG.md +6 -9
- package/configure/lib/__tests__/main.test.js +79 -0
- package/configure/lib/defaults.js +1 -1
- package/configure/lib/index.js +1 -1
- package/configure/lib/main.js +1 -1
- package/configure/package.json +3 -3
- package/controller/CHANGELOG.md +8 -0
- package/controller/lib/__tests__/index.test.js +402 -0
- package/controller/lib/defaults.js +67 -2
- package/controller/lib/index.js +26 -16
- package/controller/package.json +1 -1
- package/docs/demo/pie.manifest.json +11 -0
- package/docs/pie-schema.json +65 -0
- package/docs/pie-schema.json.md +47 -1
- package/lib/__tests__/index.test.js +49 -0
- package/lib/__tests__/main.test.js +55 -0
- package/lib/annotation/__tests__/annotation-editor.test.js +373 -0
- package/lib/annotation/__tests__/annotation-menu.test.js +69 -0
- package/lib/annotation/__tests__/freeform-editor.test.js +121 -0
- package/lib/annotation/annotation-editor.js +702 -0
- package/lib/annotation/annotation-menu.js +205 -0
- package/lib/annotation/annotation-utils.js +249 -0
- package/lib/annotation/freeform-editor.js +265 -0
- package/lib/index.js +28 -5
- package/lib/main.js +58 -21
- package/lib/main.js.map +1 -1
- package/lib/print.js +121 -0
- package/lib/print.js.map +1 -0
- package/package.json +11 -6
- package/LICENSE.md +0 -5
package/docs/pie-schema.json
CHANGED
|
@@ -116,6 +116,41 @@
|
|
|
116
116
|
"type": "string",
|
|
117
117
|
"title": "toolbarEditorPosition"
|
|
118
118
|
},
|
|
119
|
+
"predefinedAnnotations": {
|
|
120
|
+
"description": "Indicates the predefined annotations for the annotation menu",
|
|
121
|
+
"type": "array",
|
|
122
|
+
"items": {
|
|
123
|
+
"title": "PredefinedAnnotation",
|
|
124
|
+
"type": "object",
|
|
125
|
+
"properties": {
|
|
126
|
+
"label": {
|
|
127
|
+
"description": "Indicates the value displayed in the annotation button",
|
|
128
|
+
"type": "string",
|
|
129
|
+
"title": "label"
|
|
130
|
+
},
|
|
131
|
+
"text": {
|
|
132
|
+
"description": "Indicates the annotation value",
|
|
133
|
+
"type": "string",
|
|
134
|
+
"title": "text"
|
|
135
|
+
},
|
|
136
|
+
"type": {
|
|
137
|
+
"description": "Indicates the type of the annotation",
|
|
138
|
+
"enum": [
|
|
139
|
+
"negative",
|
|
140
|
+
"positive"
|
|
141
|
+
],
|
|
142
|
+
"type": "string",
|
|
143
|
+
"title": "type"
|
|
144
|
+
}
|
|
145
|
+
},
|
|
146
|
+
"required": [
|
|
147
|
+
"label",
|
|
148
|
+
"text",
|
|
149
|
+
"type"
|
|
150
|
+
]
|
|
151
|
+
},
|
|
152
|
+
"title": "predefinedAnnotations"
|
|
153
|
+
},
|
|
119
154
|
"id": {
|
|
120
155
|
"description": "Identifier to identify the Pie Element in html markup, Must be unique within a pie item config.",
|
|
121
156
|
"type": "string",
|
|
@@ -212,6 +247,36 @@
|
|
|
212
247
|
"required": [
|
|
213
248
|
"type"
|
|
214
249
|
]
|
|
250
|
+
},
|
|
251
|
+
"PredefinedAnnotation": {
|
|
252
|
+
"title": "PredefinedAnnotation",
|
|
253
|
+
"type": "object",
|
|
254
|
+
"properties": {
|
|
255
|
+
"label": {
|
|
256
|
+
"description": "Indicates the value displayed in the annotation button",
|
|
257
|
+
"type": "string",
|
|
258
|
+
"title": "label"
|
|
259
|
+
},
|
|
260
|
+
"text": {
|
|
261
|
+
"description": "Indicates the annotation value",
|
|
262
|
+
"type": "string",
|
|
263
|
+
"title": "text"
|
|
264
|
+
},
|
|
265
|
+
"type": {
|
|
266
|
+
"description": "Indicates the type of the annotation",
|
|
267
|
+
"enum": [
|
|
268
|
+
"negative",
|
|
269
|
+
"positive"
|
|
270
|
+
],
|
|
271
|
+
"type": "string",
|
|
272
|
+
"title": "type"
|
|
273
|
+
}
|
|
274
|
+
},
|
|
275
|
+
"required": [
|
|
276
|
+
"label",
|
|
277
|
+
"text",
|
|
278
|
+
"type"
|
|
279
|
+
]
|
|
215
280
|
}
|
|
216
281
|
},
|
|
217
282
|
"$schema": "http://json-schema.org/draft-07/schema#"
|
package/docs/pie-schema.json.md
CHANGED
|
@@ -95,6 +95,31 @@ This element must be one of the following enum values:
|
|
|
95
95
|
* `bottom`
|
|
96
96
|
* `top`
|
|
97
97
|
|
|
98
|
+
# `predefinedAnnotations` (array)
|
|
99
|
+
|
|
100
|
+
Indicates the predefined annotations for the annotation menu
|
|
101
|
+
|
|
102
|
+
The object is an array with all elements of the type `object`.
|
|
103
|
+
|
|
104
|
+
The array object has the following properties:
|
|
105
|
+
|
|
106
|
+
## `label` (string, required)
|
|
107
|
+
|
|
108
|
+
Indicates the value displayed in the annotation button
|
|
109
|
+
|
|
110
|
+
## `text` (string, required)
|
|
111
|
+
|
|
112
|
+
Indicates the annotation value
|
|
113
|
+
|
|
114
|
+
## `type` (string, enum, required)
|
|
115
|
+
|
|
116
|
+
Indicates the type of the annotation
|
|
117
|
+
|
|
118
|
+
This element must be one of the following enum values:
|
|
119
|
+
|
|
120
|
+
* `negative`
|
|
121
|
+
* `positive`
|
|
122
|
+
|
|
98
123
|
# `id` (string, required)
|
|
99
124
|
|
|
100
125
|
Identifier to identify the Pie Element in html markup, Must be unique within a pie item config.
|
|
@@ -165,4 +190,25 @@ This element must be one of the following enum values:
|
|
|
165
190
|
|
|
166
191
|
### `default` (string)
|
|
167
192
|
|
|
168
|
-
Indicates the feedback value
|
|
193
|
+
Indicates the feedback value
|
|
194
|
+
|
|
195
|
+
## `PredefinedAnnotation` (object)
|
|
196
|
+
|
|
197
|
+
Properties of the `PredefinedAnnotation` object:
|
|
198
|
+
|
|
199
|
+
### `label` (string, required)
|
|
200
|
+
|
|
201
|
+
Indicates the value displayed in the annotation button
|
|
202
|
+
|
|
203
|
+
### `text` (string, required)
|
|
204
|
+
|
|
205
|
+
Indicates the annotation value
|
|
206
|
+
|
|
207
|
+
### `type` (string, enum, required)
|
|
208
|
+
|
|
209
|
+
Indicates the type of the annotation
|
|
210
|
+
|
|
211
|
+
This element must be one of the following enum values:
|
|
212
|
+
|
|
213
|
+
* `negative`
|
|
214
|
+
* `positive`
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
6
|
+
|
|
7
|
+
var _index = require("../index");
|
|
8
|
+
|
|
9
|
+
describe('textContent', function () {
|
|
10
|
+
var assertContent = function assertContent() {
|
|
11
|
+
var args = Array.prototype.slice.call(arguments);
|
|
12
|
+
|
|
13
|
+
var _ref = args.length === 2 ? args : [args[0], args[0]],
|
|
14
|
+
_ref2 = (0, _slicedToArray2["default"])(_ref, 2),
|
|
15
|
+
input = _ref2[0],
|
|
16
|
+
expected = _ref2[1];
|
|
17
|
+
|
|
18
|
+
it("".concat(input, " => ").concat(expected), function () {
|
|
19
|
+
var result = (0, _index.textContent)(input);
|
|
20
|
+
expect(result).toEqual(expected);
|
|
21
|
+
});
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
assertContent(undefined);
|
|
25
|
+
assertContent([], undefined);
|
|
26
|
+
assertContent({}, undefined);
|
|
27
|
+
assertContent("", "");
|
|
28
|
+
assertContent("<div></div>", "");
|
|
29
|
+
assertContent("< div ->/div>", "< div ->/div>");
|
|
30
|
+
assertContent("<foo", "");
|
|
31
|
+
assertContent("<foo/ >", "");
|
|
32
|
+
assertContent("<foo />", "");
|
|
33
|
+
});
|
|
34
|
+
describe('Completeness Checker', function () {
|
|
35
|
+
var assertIsComplete = function assertIsComplete(input, expected) {
|
|
36
|
+
it("".concat(input, ": ").concat(expected), function () {
|
|
37
|
+
expect((0, _index.isComplete)(input)).toEqual(expected);
|
|
38
|
+
});
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
assertIsComplete("", false);
|
|
42
|
+
assertIsComplete("<div></div>", false);
|
|
43
|
+
assertIsComplete("<div><p></p><h1></h1></div>", false);
|
|
44
|
+
assertIsComplete("<div><p></p><h1</h1></div>", false);
|
|
45
|
+
assertIsComplete("<div>test</div>", true);
|
|
46
|
+
assertIsComplete("<div><p><a>test</a></p></div>", true);
|
|
47
|
+
assertIsComplete("foo", true);
|
|
48
|
+
});
|
|
49
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fX3Rlc3RzX18vaW5kZXgudGVzdC5qcyJdLCJuYW1lcyI6WyJkZXNjcmliZSIsImFzc2VydENvbnRlbnQiLCJhcmdzIiwiQXJyYXkiLCJwcm90b3R5cGUiLCJzbGljZSIsImNhbGwiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJpbnB1dCIsImV4cGVjdGVkIiwiaXQiLCJyZXN1bHQiLCJleHBlY3QiLCJ0b0VxdWFsIiwidW5kZWZpbmVkIiwiYXNzZXJ0SXNDb21wbGV0ZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBRUE7O0FBRUFBLFFBQVEsQ0FBQyxhQUFELEVBQWdCLFlBQU07QUFFNUIsTUFBTUMsYUFBYSxHQUFHLFNBQWhCQSxhQUFnQixHQUFZO0FBQ2hDLFFBQU1DLElBQUksR0FBR0MsS0FBSyxDQUFDQyxTQUFOLENBQWdCQyxLQUFoQixDQUFzQkMsSUFBdEIsQ0FBMkJDLFNBQTNCLENBQWI7O0FBQ0EsZUFBMEJMLElBQUksQ0FBQ00sTUFBTCxLQUFnQixDQUFoQixHQUFvQk4sSUFBcEIsR0FBMkIsQ0FBQ0EsSUFBSSxDQUFDLENBQUQsQ0FBTCxFQUFVQSxJQUFJLENBQUMsQ0FBRCxDQUFkLENBQXJEO0FBQUE7QUFBQSxRQUFPTyxLQUFQO0FBQUEsUUFBY0MsUUFBZDs7QUFDQUMsSUFBQUEsRUFBRSxXQUFJRixLQUFKLGlCQUFnQkMsUUFBaEIsR0FBNEIsWUFBTTtBQUNsQyxVQUFNRSxNQUFNLEdBQUcsd0JBQVlILEtBQVosQ0FBZjtBQUNBSSxNQUFBQSxNQUFNLENBQUNELE1BQUQsQ0FBTixDQUFlRSxPQUFmLENBQXVCSixRQUF2QjtBQUNELEtBSEMsQ0FBRjtBQUlELEdBUEQ7O0FBUUFULEVBQUFBLGFBQWEsQ0FBQ2MsU0FBRCxDQUFiO0FBQ0FkLEVBQUFBLGFBQWEsQ0FBQyxFQUFELEVBQUtjLFNBQUwsQ0FBYjtBQUNBZCxFQUFBQSxhQUFhLENBQUMsRUFBRCxFQUFLYyxTQUFMLENBQWI7QUFDQWQsRUFBQUEsYUFBYSxDQUFDLEVBQUQsRUFBSyxFQUFMLENBQWI7QUFDQUEsRUFBQUEsYUFBYSxDQUFDLGFBQUQsRUFBZ0IsRUFBaEIsQ0FBYjtBQUNBQSxFQUFBQSxhQUFhLENBQUMsZUFBRCxFQUFrQixlQUFsQixDQUFiO0FBQ0FBLEVBQUFBLGFBQWEsQ0FBQyxNQUFELEVBQVMsRUFBVCxDQUFiO0FBQ0FBLEVBQUFBLGFBQWEsQ0FBQyxTQUFELEVBQVksRUFBWixDQUFiO0FBQ0FBLEVBQUFBLGFBQWEsQ0FBQyxTQUFELEVBQVksRUFBWixDQUFiO0FBQ0QsQ0FuQk8sQ0FBUjtBQXFCQUQsUUFBUSxDQUFDLHNCQUFELEVBQXlCLFlBQU07QUFFckMsTUFBTWdCLGdCQUFnQixHQUFHLFNBQW5CQSxnQkFBbUIsQ0FBQ1AsS0FBRCxFQUFRQyxRQUFSLEVBQXFCO0FBQzVDQyxJQUFBQSxFQUFFLFdBQUlGLEtBQUosZUFBY0MsUUFBZCxHQUEwQixZQUFNO0FBQ2xDRyxNQUFBQSxNQUFNLENBQUMsdUJBQVdKLEtBQVgsQ0FBRCxDQUFOLENBQTBCSyxPQUExQixDQUFrQ0osUUFBbEM7QUFDQyxLQUZDLENBQUY7QUFHRCxHQUpEOztBQUtBTSxFQUFBQSxnQkFBZ0IsQ0FBQyxFQUFELEVBQUssS0FBTCxDQUFoQjtBQUNBQSxFQUFBQSxnQkFBZ0IsQ0FBQyxhQUFELEVBQWdCLEtBQWhCLENBQWhCO0FBQ0FBLEVBQUFBLGdCQUFnQixDQUFDLDZCQUFELEVBQWdDLEtBQWhDLENBQWhCO0FBQ0FBLEVBQUFBLGdCQUFnQixDQUFDLDRCQUFELEVBQStCLEtBQS9CLENBQWhCO0FBQ0FBLEVBQUFBLGdCQUFnQixDQUFDLGlCQUFELEVBQW9CLElBQXBCLENBQWhCO0FBQ0FBLEVBQUFBLGdCQUFnQixDQUFDLCtCQUFELEVBQWtDLElBQWxDLENBQWhCO0FBQ0FBLEVBQUFBLGdCQUFnQixDQUFDLEtBQUQsRUFBUSxJQUFSLENBQWhCO0FBQ0QsQ0FkTyxDQUFSIiwic291cmNlc0NvbnRlbnQiOlsiXG5cbmltcG9ydCB7IGlzQ29tcGxldGUsIHRleHRDb250ZW50IH0gZnJvbSAnLi4vaW5kZXgnO1xuXG5kZXNjcmliZSgndGV4dENvbnRlbnQnLCAoKSA9PiB7XG5cbiAgY29uc3QgYXNzZXJ0Q29udGVudCA9IGZ1bmN0aW9uKCkgIHtcbiAgICBjb25zdCBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICBjb25zdCBbaW5wdXQsIGV4cGVjdGVkXSA9IGFyZ3MubGVuZ3RoID09PSAyID8gYXJncyA6IFthcmdzWzBdLCBhcmdzWzBdXTtcbiAgICBpdChgJHtpbnB1dH0gPT4gJHtleHBlY3RlZH1gICwoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSB0ZXh0Q29udGVudChpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkICApO1xuICAgIH0pXG4gIH1cbiAgYXNzZXJ0Q29udGVudCh1bmRlZmluZWQgKTtcbiAgYXNzZXJ0Q29udGVudChbXSwgdW5kZWZpbmVkKTtcbiAgYXNzZXJ0Q29udGVudCh7fSwgdW5kZWZpbmVkKTtcbiAgYXNzZXJ0Q29udGVudChcIlwiLCBcIlwiKTtcbiAgYXNzZXJ0Q29udGVudChcIjxkaXY+PC9kaXY+XCIsIFwiXCIpO1xuICBhc3NlcnRDb250ZW50KFwiPCBkaXYgLT4vZGl2PlwiLCBcIjwgZGl2IC0+L2Rpdj5cIik7XG4gIGFzc2VydENvbnRlbnQoXCI8Zm9vXCIsIFwiXCIpXG4gIGFzc2VydENvbnRlbnQoXCI8Zm9vLyA+XCIsIFwiXCIpXG4gIGFzc2VydENvbnRlbnQoXCI8Zm9vIC8+XCIsIFwiXCIpXG59KTtcblxuZGVzY3JpYmUoJ0NvbXBsZXRlbmVzcyBDaGVja2VyJywgKCkgPT4ge1xuXG4gIGNvbnN0IGFzc2VydElzQ29tcGxldGUgPSAoaW5wdXQsIGV4cGVjdGVkKSA9PiB7XG4gICAgaXQoYCR7aW5wdXR9OiAke2V4cGVjdGVkfWAsICgpID0+IHtcbiAgICBleHBlY3QoaXNDb21wbGV0ZShpbnB1dCkpLnRvRXF1YWwoZXhwZWN0ZWQpO1xuICAgIH0pXG4gIH1cbiAgYXNzZXJ0SXNDb21wbGV0ZShcIlwiLCBmYWxzZSk7XG4gIGFzc2VydElzQ29tcGxldGUoXCI8ZGl2PjwvZGl2PlwiLCBmYWxzZSk7XG4gIGFzc2VydElzQ29tcGxldGUoXCI8ZGl2PjxwPjwvcD48aDE+PC9oMT48L2Rpdj5cIiwgZmFsc2UpO1xuICBhc3NlcnRJc0NvbXBsZXRlKFwiPGRpdj48cD48L3A+PGgxPC9oMT48L2Rpdj5cIiwgZmFsc2UpO1xuICBhc3NlcnRJc0NvbXBsZXRlKFwiPGRpdj50ZXN0PC9kaXY+XCIsIHRydWUpO1xuICBhc3NlcnRJc0NvbXBsZXRlKFwiPGRpdj48cD48YT50ZXN0PC9hPjwvcD48L2Rpdj5cIiwgdHJ1ZSk7XG4gIGFzc2VydElzQ29tcGxldGUoXCJmb29cIiwgdHJ1ZSk7XG59KTsiXX0=
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
6
|
+
|
|
7
|
+
var _react = _interopRequireDefault(require("react"));
|
|
8
|
+
|
|
9
|
+
var _main = require("../main");
|
|
10
|
+
|
|
11
|
+
var _enzyme = require("enzyme");
|
|
12
|
+
|
|
13
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
|
|
14
|
+
|
|
15
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
|
16
|
+
|
|
17
|
+
describe('Render Main Component', function () {
|
|
18
|
+
var model = {
|
|
19
|
+
width: 100,
|
|
20
|
+
height: 50
|
|
21
|
+
};
|
|
22
|
+
it('should match snapshot', function () {
|
|
23
|
+
var wrapper = (0, _enzyme.shallow)( /*#__PURE__*/_react["default"].createElement(_main.Main, {
|
|
24
|
+
model: model,
|
|
25
|
+
session: {
|
|
26
|
+
value: 'hi',
|
|
27
|
+
annotations: [],
|
|
28
|
+
comment: 'hello'
|
|
29
|
+
},
|
|
30
|
+
onValueChange: function onValueChange() {},
|
|
31
|
+
onAnnotationsChange: function onAnnotationsChange() {},
|
|
32
|
+
onCommentChange: function onCommentChange() {},
|
|
33
|
+
classes: {}
|
|
34
|
+
}));
|
|
35
|
+
expect(wrapper).toMatchSnapshot();
|
|
36
|
+
});
|
|
37
|
+
it('should match snapshot with teacher instructions', function () {
|
|
38
|
+
var wrapper = (0, _enzyme.shallow)( /*#__PURE__*/_react["default"].createElement(_main.Main, {
|
|
39
|
+
model: _objectSpread(_objectSpread({}, model), {}, {
|
|
40
|
+
teacherInstructions: 'Teacher Instructions'
|
|
41
|
+
}),
|
|
42
|
+
session: {
|
|
43
|
+
value: 'hi',
|
|
44
|
+
annotations: [],
|
|
45
|
+
comment: 'hello'
|
|
46
|
+
},
|
|
47
|
+
onValueChange: function onValueChange() {},
|
|
48
|
+
onAnnotationsChange: function onAnnotationsChange() {},
|
|
49
|
+
onCommentChange: function onCommentChange() {},
|
|
50
|
+
classes: {}
|
|
51
|
+
}));
|
|
52
|
+
expect(wrapper).toMatchSnapshot();
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fX3Rlc3RzX18vbWFpbi50ZXN0LmpzIl0sIm5hbWVzIjpbImRlc2NyaWJlIiwibW9kZWwiLCJ3aWR0aCIsImhlaWdodCIsIml0Iiwid3JhcHBlciIsInZhbHVlIiwiYW5ub3RhdGlvbnMiLCJjb21tZW50IiwiZXhwZWN0IiwidG9NYXRjaFNuYXBzaG90IiwidGVhY2hlckluc3RydWN0aW9ucyJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7Ozs7OztBQUVBQSxRQUFRLENBQUMsdUJBQUQsRUFBMEIsWUFBTTtBQUN0QyxNQUFJQyxLQUFLLEdBQUc7QUFBRUMsSUFBQUEsS0FBSyxFQUFFLEdBQVQ7QUFBY0MsSUFBQUEsTUFBTSxFQUFFO0FBQXRCLEdBQVo7QUFFQUMsRUFBQUEsRUFBRSxDQUFDLHVCQUFELEVBQTBCLFlBQU07QUFDaEMsUUFBSUMsT0FBTyxHQUFHLG1DQUNaLGdDQUFDLFVBQUQ7QUFDRSxNQUFBLEtBQUssRUFBRUosS0FEVDtBQUVFLE1BQUEsT0FBTyxFQUFFO0FBQ1BLLFFBQUFBLEtBQUssRUFBRSxJQURBO0FBRVBDLFFBQUFBLFdBQVcsRUFBRSxFQUZOO0FBR1BDLFFBQUFBLE9BQU8sRUFBRTtBQUhGLE9BRlg7QUFPRSxNQUFBLGFBQWEsRUFBRSx5QkFBTSxDQUFFLENBUHpCO0FBUUUsTUFBQSxtQkFBbUIsRUFBRSwrQkFBTSxDQUFFLENBUi9CO0FBU0UsTUFBQSxlQUFlLEVBQUUsMkJBQU0sQ0FBRSxDQVQzQjtBQVVFLE1BQUEsT0FBTyxFQUFFO0FBVlgsTUFEWSxDQUFkO0FBY0FDLElBQUFBLE1BQU0sQ0FBQ0osT0FBRCxDQUFOLENBQWdCSyxlQUFoQjtBQUNELEdBaEJDLENBQUY7QUFrQkFOLEVBQUFBLEVBQUUsQ0FBQyxpREFBRCxFQUFvRCxZQUFNO0FBQzFELFFBQUlDLE9BQU8sR0FBRyxtQ0FDWixnQ0FBQyxVQUFEO0FBQ0UsTUFBQSxLQUFLLGtDQUFPSixLQUFQO0FBQWNVLFFBQUFBLG1CQUFtQixFQUFFO0FBQW5DLFFBRFA7QUFFRSxNQUFBLE9BQU8sRUFBRTtBQUNQTCxRQUFBQSxLQUFLLEVBQUUsSUFEQTtBQUVQQyxRQUFBQSxXQUFXLEVBQUUsRUFGTjtBQUdQQyxRQUFBQSxPQUFPLEVBQUU7QUFIRixPQUZYO0FBT0UsTUFBQSxhQUFhLEVBQUUseUJBQU0sQ0FBRSxDQVB6QjtBQVFFLE1BQUEsbUJBQW1CLEVBQUUsK0JBQU0sQ0FBRSxDQVIvQjtBQVNFLE1BQUEsZUFBZSxFQUFFLDJCQUFNLENBQUUsQ0FUM0I7QUFVRSxNQUFBLE9BQU8sRUFBRTtBQVZYLE1BRFksQ0FBZDtBQWNBQyxJQUFBQSxNQUFNLENBQUNKLE9BQUQsQ0FBTixDQUFnQkssZUFBaEI7QUFDRCxHQWhCQyxDQUFGO0FBa0JELENBdkNPLENBQVIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgTWFpbiB9IGZyb20gJy4uL21haW4nO1xuaW1wb3J0IHsgc2hhbGxvdyB9IGZyb20gJ2VuenltZSc7XG5cbmRlc2NyaWJlKCdSZW5kZXIgTWFpbiBDb21wb25lbnQnLCAoKSA9PiB7XG4gIGxldCBtb2RlbCA9IHsgd2lkdGg6IDEwMCwgaGVpZ2h0OiA1MCB9O1xuXG4gIGl0KCdzaG91bGQgbWF0Y2ggc25hcHNob3QnLCAoKSA9PiB7XG4gICAgbGV0IHdyYXBwZXIgPSBzaGFsbG93KFxuICAgICAgPE1haW5cbiAgICAgICAgbW9kZWw9e21vZGVsfVxuICAgICAgICBzZXNzaW9uPXt7XG4gICAgICAgICAgdmFsdWU6ICdoaScsXG4gICAgICAgICAgYW5ub3RhdGlvbnM6IFtdLFxuICAgICAgICAgIGNvbW1lbnQ6ICdoZWxsbydcbiAgICAgICAgfX1cbiAgICAgICAgb25WYWx1ZUNoYW5nZT17KCkgPT4ge319XG4gICAgICAgIG9uQW5ub3RhdGlvbnNDaGFuZ2U9eygpID0+IHt9fVxuICAgICAgICBvbkNvbW1lbnRDaGFuZ2U9eygpID0+IHt9fVxuICAgICAgICBjbGFzc2VzPXt7fX1cbiAgICAgIC8+XG4gICAgKTtcbiAgICBleHBlY3Qod3JhcHBlcikudG9NYXRjaFNuYXBzaG90KCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgbWF0Y2ggc25hcHNob3Qgd2l0aCB0ZWFjaGVyIGluc3RydWN0aW9ucycsICgpID0+IHtcbiAgICBsZXQgd3JhcHBlciA9IHNoYWxsb3coXG4gICAgICA8TWFpblxuICAgICAgICBtb2RlbD17eyAuLi5tb2RlbCwgdGVhY2hlckluc3RydWN0aW9uczogJ1RlYWNoZXIgSW5zdHJ1Y3Rpb25zJyB9fVxuICAgICAgICBzZXNzaW9uPXt7XG4gICAgICAgICAgdmFsdWU6ICdoaScsXG4gICAgICAgICAgYW5ub3RhdGlvbnM6IFtdLFxuICAgICAgICAgIGNvbW1lbnQ6ICdoZWxsbydcbiAgICAgICAgfX1cbiAgICAgICAgb25WYWx1ZUNoYW5nZT17KCkgPT4ge319XG4gICAgICAgIG9uQW5ub3RhdGlvbnNDaGFuZ2U9eygpID0+IHt9fVxuICAgICAgICBvbkNvbW1lbnRDaGFuZ2U9eygpID0+IHt9fVxuICAgICAgICBjbGFzc2VzPXt7fX1cbiAgICAgIC8+XG4gICAgKTtcbiAgICBleHBlY3Qod3JhcHBlcikudG9NYXRjaFNuYXBzaG90KCk7XG4gIH0pO1xuXG59KTtcbiJdfQ==
|