@pie-lib/mask-markup 1.15.0-beta.0 → 1.15.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.
Files changed (37) hide show
  1. package/CHANGELOG.json +1 -871
  2. package/CHANGELOG.md +115 -20
  3. package/package.json +8 -5
  4. package/src/choices/choice.jsx +1 -1
  5. package/src/components/__tests__/__snapshots__/dropdown.test.js.snap +15 -12
  6. package/src/components/__tests__/blank.test.js +1 -1
  7. package/src/components/blank.jsx +1 -1
  8. package/src/components/correct-input.jsx +1 -1
  9. package/src/components/dropdown.jsx +118 -23
  10. package/src/constructed-response.jsx +1 -1
  11. package/src/serialization.js +1 -1
  12. package/lib/__tests__/drag-in-the-blank.test.js +0 -71
  13. package/lib/__tests__/index.test.js +0 -50
  14. package/lib/__tests__/mask.test.js +0 -149
  15. package/lib/__tests__/serialization.test.js +0 -45
  16. package/lib/__tests__/utils.js +0 -17
  17. package/lib/__tests__/with-mask.test.js +0 -65
  18. package/lib/choices/__tests__/index.test.js +0 -85
  19. package/lib/choices/choice.js +0 -221
  20. package/lib/choices/index.js +0 -135
  21. package/lib/componentize.js +0 -25
  22. package/lib/components/__tests__/blank.test.js +0 -234
  23. package/lib/components/__tests__/correct-input.test.js +0 -63
  24. package/lib/components/__tests__/dropdown.test.js +0 -70
  25. package/lib/components/__tests__/input.test.js +0 -64
  26. package/lib/components/blank.js +0 -415
  27. package/lib/components/correct-input.js +0 -118
  28. package/lib/components/dropdown.js +0 -349
  29. package/lib/components/input.js +0 -57
  30. package/lib/constructed-response.js +0 -116
  31. package/lib/customizable.js +0 -48
  32. package/lib/drag-in-the-blank.js +0 -217
  33. package/lib/index.js +0 -62
  34. package/lib/inline-dropdown.js +0 -48
  35. package/lib/mask.js +0 -254
  36. package/lib/serialization.js +0 -207
  37. package/lib/with-mask.js +0 -125
@@ -1,415 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports["default"] = exports.DRAG_TYPE = exports.BlankContent = void 0;
9
-
10
- var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
11
-
12
- var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
13
-
14
- var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
15
-
16
- var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
17
-
18
- var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
19
-
20
- var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
21
-
22
- var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
23
-
24
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
25
-
26
- var _grey = _interopRequireDefault(require("@material-ui/core/colors/grey"));
27
-
28
- var _react = _interopRequireDefault(require("react"));
29
-
30
- var _reactDom = _interopRequireDefault(require("react-dom"));
31
-
32
- var _propTypes = _interopRequireDefault(require("prop-types"));
33
-
34
- var _mathRendering = require("@pie-lib/math-rendering");
35
-
36
- var _debug = _interopRequireDefault(require("debug"));
37
-
38
- var _drag = require("@pie-lib/drag");
39
-
40
- var _styles = require("@material-ui/core/styles");
41
-
42
- var _Chip = _interopRequireDefault(require("@material-ui/core/Chip"));
43
-
44
- var _classnames3 = _interopRequireDefault(require("classnames"));
45
-
46
- var _renderUi = require("@pie-lib/render-ui");
47
-
48
- var _excluded = ["connectDragSource", "connectDropTarget"];
49
-
50
- 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; }
51
-
52
- 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; }
53
-
54
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
55
-
56
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
57
-
58
- var log = (0, _debug["default"])('pie-lib:mask-markup:blank');
59
- var DRAG_TYPE = 'MaskBlank';
60
- exports.DRAG_TYPE = DRAG_TYPE;
61
- var useStyles = (0, _styles.withStyles)(function () {
62
- return {
63
- content: {
64
- border: "solid 0px ".concat(_renderUi.color.primary()),
65
- minWidth: '200px',
66
- touchAction: 'none',
67
- overflow: 'hidden',
68
- whiteSpace: 'nowrap' // Prevent line wrapping
69
-
70
- },
71
- chip: {
72
- backgroundColor: _renderUi.color.background(),
73
- border: "2px dashed ".concat(_renderUi.color.text()),
74
- color: _renderUi.color.text(),
75
- fontSize: 'inherit',
76
- maxWidth: '374px',
77
- position: 'relative',
78
- borderRadius: '3px'
79
- },
80
- chipLabel: {
81
- whiteSpace: 'normal',
82
- // Added for touch devices, for image content.
83
- // This will prevent the context menu from appearing and not allowing other interactions with the image.
84
- // If interactions with the image in the token will be requested we should handle only the context Menu.
85
- pointerEvents: 'none',
86
- '& img': {
87
- display: 'block',
88
- padding: '2px 0'
89
- },
90
- // Remove default <p> margins to ensure consistent spacing across all wrapped content (p, span, div, math)
91
- // Padding for top and bottom will instead be controlled by the container for consistent layout
92
- // Ensures consistent behavior with pie-api-browser, where marginTop is already removed by a Bootstrap stylesheet
93
- '& p': {
94
- marginTop: '0',
95
- marginBottom: '0'
96
- },
97
- '& mjx-frac': {
98
- fontSize: '120% !important'
99
- }
100
- },
101
- hidden: {
102
- color: 'transparent',
103
- opacity: 0
104
- },
105
- dragged: {
106
- position: 'absolute',
107
- left: 16,
108
- maxWidth: '60px'
109
- },
110
- correct: {
111
- border: "solid 1px ".concat(_renderUi.color.correct())
112
- },
113
- incorrect: {
114
- border: "solid 1px ".concat(_renderUi.color.incorrect())
115
- },
116
- over: {
117
- whiteSpace: 'nowrap',
118
- overflow: 'hidden'
119
- },
120
- parentOver: {
121
- border: "1px solid ".concat(_grey["default"][500]),
122
- backgroundColor: "".concat(_grey["default"][300])
123
- }
124
- };
125
- });
126
-
127
- var BlankContent = /*#__PURE__*/function (_React$Component) {
128
- (0, _inherits2["default"])(BlankContent, _React$Component);
129
-
130
- var _super = _createSuper(BlankContent);
131
-
132
- function BlankContent() {
133
- var _this;
134
-
135
- (0, _classCallCheck2["default"])(this, BlankContent);
136
- _this = _super.call(this);
137
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "handleImageLoad", function () {
138
- _this.updateDimensions();
139
- });
140
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "handleTouchStart", function (e) {
141
- e.preventDefault();
142
- _this.touchStartTimer = setTimeout(function () {
143
- _this.startDrag();
144
- }, 300); // Start drag after 300ms (touch and hold duration)
145
- });
146
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "startDrag", function () {
147
- var _this$props = _this.props,
148
- connectDragSource = _this$props.connectDragSource,
149
- disabled = _this$props.disabled;
150
-
151
- if (!disabled) {
152
- connectDragSource(_this.rootRef);
153
- }
154
- });
155
- _this.state = {
156
- height: 0,
157
- width: 0
158
- };
159
- return _this;
160
- }
161
-
162
- (0, _createClass2["default"])(BlankContent, [{
163
- key: "handleElements",
164
- value: function handleElements() {
165
- var _this$spanRef,
166
- _this2 = this;
167
-
168
- var imageElement = (_this$spanRef = this.spanRef) === null || _this$spanRef === void 0 ? void 0 : _this$spanRef.querySelector('img');
169
-
170
- if (imageElement) {
171
- imageElement.onload = this.handleImageLoad;
172
- } else {
173
- setTimeout(function () {
174
- _this2.updateDimensions();
175
- }, 300);
176
- }
177
- }
178
- }, {
179
- key: "componentDidMount",
180
- value: function componentDidMount() {
181
- this.handleElements();
182
-
183
- if (this.rootRef) {
184
- this.rootRef.addEventListener('touchstart', this.handleTouchStart, {
185
- passive: false
186
- });
187
- }
188
- }
189
- }, {
190
- key: "componentDidUpdate",
191
- value: function componentDidUpdate(prevProps) {
192
- (0, _mathRendering.renderMath)(this.rootRef);
193
- var currentChoice = this.props.choice;
194
- var prevChoice = prevProps.choice;
195
-
196
- if (JSON.stringify(currentChoice) !== JSON.stringify(prevChoice)) {
197
- if (!currentChoice) {
198
- this.setState({
199
- height: 0,
200
- width: 0
201
- });
202
- return;
203
- }
204
-
205
- this.handleElements();
206
- }
207
- }
208
- }, {
209
- key: "componentWillUnmount",
210
- value: function componentWillUnmount() {
211
- if (this.rootRef) {
212
- this.rootRef.removeEventListener('touchstart', this.handleTouchStart);
213
- }
214
- }
215
- }, {
216
- key: "updateDimensions",
217
- value: function updateDimensions() {
218
- if (this.spanRef && this.rootRef) {
219
- // Temporarily set rootRef width to 'auto' for natural measurement
220
- this.rootRef.style.width = 'auto'; // Get the natural dimensions of the content
221
-
222
- var width = this.spanRef.offsetWidth || 0;
223
- var height = this.spanRef.offsetHeight || 0;
224
- var widthWithPadding = width + 24; // 12px padding on each side
225
-
226
- var heightWithPadding = height + 24; // 12px padding on top and bottom
227
-
228
- var responseAreaWidth = parseFloat(this.props.emptyResponseAreaWidth) || 0;
229
- var responseAreaHeight = parseFloat(this.props.emptyResponseAreaHeight) || 0;
230
- var adjustedWidth = widthWithPadding <= responseAreaWidth ? responseAreaWidth : widthWithPadding;
231
- var adjustedHeight = heightWithPadding <= responseAreaHeight ? responseAreaHeight : heightWithPadding;
232
- this.setState(function (prevState) {
233
- return {
234
- width: adjustedWidth > responseAreaWidth ? adjustedWidth : prevState.width,
235
- height: adjustedHeight > responseAreaHeight ? adjustedHeight : prevState.height
236
- };
237
- });
238
- this.rootRef.style.width = "".concat(adjustedWidth, "px");
239
- this.rootRef.style.height = "".concat(adjustedHeight, "px");
240
- }
241
- }
242
- }, {
243
- key: "addDraggableFalseAttributes",
244
- value: function addDraggableFalseAttributes(parent) {
245
- parent.childNodes.forEach(function (elem) {
246
- if (elem instanceof Element || elem instanceof HTMLDocument) {
247
- elem.setAttribute('draggable', false);
248
- }
249
- });
250
- }
251
- }, {
252
- key: "getRootDimensions",
253
- value: function getRootDimensions() {
254
- // Handle potential non-numeric values
255
- var responseAreaWidth = !isNaN(parseFloat(this.props.emptyResponseAreaWidth)) ? parseFloat(this.props.emptyResponseAreaWidth) : 0;
256
- var responseAreaHeight = !isNaN(parseFloat(this.props.emptyResponseAreaHeight)) ? parseFloat(this.props.emptyResponseAreaHeight) : 0;
257
- var rootStyle = {
258
- height: this.state.height || responseAreaHeight,
259
- width: this.state.width || responseAreaWidth
260
- }; // add minWidth, minHeight if width and height are not defined
261
- // minWidth, minHeight will be also in model in the future
262
-
263
- return _objectSpread(_objectSpread(_objectSpread({}, rootStyle), responseAreaWidth ? {} : {
264
- minWidth: 90
265
- }), responseAreaHeight ? {} : {
266
- minHeight: 32
267
- });
268
- }
269
- }, {
270
- key: "render",
271
- value: function render() {
272
- var _this3 = this,
273
- _classnames2;
274
-
275
- var _this$props2 = this.props,
276
- disabled = _this$props2.disabled,
277
- choice = _this$props2.choice,
278
- classes = _this$props2.classes,
279
- isOver = _this$props2.isOver,
280
- dragItem = _this$props2.dragItem,
281
- correct = _this$props2.correct;
282
- var draggedLabel = dragItem && isOver && dragItem.choice.value;
283
- var label = choice && choice.value;
284
- return (
285
- /*#__PURE__*/
286
- // TODO the Chip element is causing drag problems on touch devices. Avoid using Chip and consider refactoring the code. Keep in mind that Chip is a span with a button role, which interferes with seamless touch device dragging.
287
- _react["default"].createElement(_Chip["default"], {
288
- clickable: false,
289
- disabled: true,
290
- ref: function ref(_ref3) {
291
- //eslint-disable-next-line
292
- _this3.rootRef = _reactDom["default"].findDOMNode(_ref3);
293
- },
294
- component: "span",
295
- label: /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("span", {
296
- className: (0, _classnames3["default"])(classes.chipLabel, isOver && classes.over, (0, _defineProperty2["default"])({}, classes.hidden, draggedLabel)),
297
- ref: function ref(_ref) {
298
- if (_ref) {
299
- //eslint-disable-next-line
300
- _this3.spanRef = _reactDom["default"].findDOMNode(_ref);
301
- _ref.innerHTML = label || '';
302
-
303
- _this3.addDraggableFalseAttributes(_ref);
304
- }
305
- }
306
- }, ' '), draggedLabel && /*#__PURE__*/_react["default"].createElement("span", {
307
- className: (0, _classnames3["default"])(classes.chipLabel, isOver && classes.over, classes.dragged),
308
- ref: function ref(_ref2) {
309
- if (_ref2) {
310
- //eslint-disable-next-line
311
- _this3.spanRef = _reactDom["default"].findDOMNode(_ref2);
312
- _ref2.innerHTML = draggedLabel || '';
313
-
314
- _this3.addDraggableFalseAttributes(_ref2);
315
- }
316
- }
317
- }, ' ')),
318
- className: (0, _classnames3["default"])(classes.chip, isOver && classes.over, isOver && classes.parentOver, (_classnames2 = {}, (0, _defineProperty2["default"])(_classnames2, classes.correct, correct !== undefined && correct), (0, _defineProperty2["default"])(_classnames2, classes.incorrect, correct !== undefined && !correct), _classnames2)),
319
- variant: disabled ? 'outlined' : undefined,
320
- style: _objectSpread({}, this.getRootDimensions())
321
- })
322
- );
323
- }
324
- }]);
325
- return BlankContent;
326
- }(_react["default"].Component);
327
-
328
- exports.BlankContent = BlankContent;
329
- BlankContent.defaultProps = {
330
- emptyResponseAreaWidth: 0,
331
- emptyResponseAreaHeight: 0
332
- };
333
- BlankContent.propTypes = {
334
- id: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].number]),
335
- disabled: _propTypes["default"].bool,
336
- duplicates: _propTypes["default"].bool,
337
- choice: _propTypes["default"].object,
338
- classes: _propTypes["default"].object,
339
- isOver: _propTypes["default"].bool,
340
- dragItem: _propTypes["default"].object,
341
- correct: _propTypes["default"].bool,
342
- onChange: _propTypes["default"].func,
343
- emptyResponseAreaWidth: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].number]),
344
- emptyResponseAreaHeight: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].number])
345
- };
346
- var StyledBlankContent = useStyles(BlankContent);
347
- var connectedBlankContent = useStyles(function (_ref4) {
348
- var connectDragSource = _ref4.connectDragSource,
349
- connectDropTarget = _ref4.connectDropTarget,
350
- props = (0, _objectWithoutProperties2["default"])(_ref4, _excluded);
351
- var classes = props.classes,
352
- isOver = props.isOver;
353
- return connectDropTarget(connectDragSource( /*#__PURE__*/_react["default"].createElement("span", {
354
- className: (0, _classnames3["default"])(classes.content, isOver && classes.over)
355
- }, /*#__PURE__*/_react["default"].createElement(StyledBlankContent, props))));
356
- });
357
- var tileTarget = {
358
- drop: function drop(props, monitor) {
359
- var draggedItem = monitor.getItem();
360
- log('props.instanceId', props.instanceId, 'draggedItem.instanceId:', draggedItem.instanceId);
361
-
362
- if (draggedItem.id !== props.id) {
363
- props.onChange(props.id, draggedItem.choice.id);
364
- }
365
-
366
- return {
367
- dropped: draggedItem.id !== props.id
368
- };
369
- },
370
- canDrop: function canDrop(props, monitor) {
371
- var draggedItem = monitor.getItem();
372
- return draggedItem.instanceId === props.instanceId;
373
- }
374
- };
375
- var DropTile = (0, _drag.DropTarget)(DRAG_TYPE, tileTarget, function (connect, monitor) {
376
- return {
377
- connectDropTarget: connect.dropTarget(),
378
- isOver: monitor.isOver(),
379
- dragItem: monitor.getItem()
380
- };
381
- })(connectedBlankContent);
382
- var tileSource = {
383
- canDrag: function canDrag(props) {
384
- return !props.disabled && !!props.choice;
385
- },
386
- beginDrag: function beginDrag(props) {
387
- return {
388
- id: props.id,
389
- choice: props.choice,
390
- instanceId: props.instanceId,
391
- fromChoice: true
392
- };
393
- },
394
- endDrag: function endDrag(props, monitor) {
395
- // this will be null if it did not drop
396
- var dropResult = monitor.getDropResult();
397
-
398
- if (!dropResult || dropResult.dropped) {
399
- var draggedItem = monitor.getItem();
400
-
401
- if (draggedItem.fromChoice) {
402
- props.onChange(props.id, undefined);
403
- }
404
- }
405
- }
406
- };
407
- var DragDropTile = (0, _drag.DragSource)(DRAG_TYPE, tileSource, function (connect, monitor) {
408
- return {
409
- connectDragSource: connect.dragSource(),
410
- isDragging: monitor.isDragging()
411
- };
412
- })(DropTile);
413
- var _default = DragDropTile;
414
- exports["default"] = _default;
415
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21wb25lbnRzL2JsYW5rLmpzeCJdLCJuYW1lcyI6WyJsb2ciLCJEUkFHX1RZUEUiLCJ1c2VTdHlsZXMiLCJjb250ZW50IiwiYm9yZGVyIiwiY29sb3IiLCJwcmltYXJ5IiwibWluV2lkdGgiLCJ0b3VjaEFjdGlvbiIsIm92ZXJmbG93Iiwid2hpdGVTcGFjZSIsImNoaXAiLCJiYWNrZ3JvdW5kQ29sb3IiLCJiYWNrZ3JvdW5kIiwidGV4dCIsImZvbnRTaXplIiwibWF4V2lkdGgiLCJwb3NpdGlvbiIsImJvcmRlclJhZGl1cyIsImNoaXBMYWJlbCIsInBvaW50ZXJFdmVudHMiLCJkaXNwbGF5IiwicGFkZGluZyIsIm1hcmdpblRvcCIsIm1hcmdpbkJvdHRvbSIsImhpZGRlbiIsIm9wYWNpdHkiLCJkcmFnZ2VkIiwibGVmdCIsImNvcnJlY3QiLCJpbmNvcnJlY3QiLCJvdmVyIiwicGFyZW50T3ZlciIsImdyZXkiLCJCbGFua0NvbnRlbnQiLCJ1cGRhdGVEaW1lbnNpb25zIiwiZSIsInByZXZlbnREZWZhdWx0IiwidG91Y2hTdGFydFRpbWVyIiwic2V0VGltZW91dCIsInN0YXJ0RHJhZyIsInByb3BzIiwiY29ubmVjdERyYWdTb3VyY2UiLCJkaXNhYmxlZCIsInJvb3RSZWYiLCJzdGF0ZSIsImhlaWdodCIsIndpZHRoIiwiaW1hZ2VFbGVtZW50Iiwic3BhblJlZiIsInF1ZXJ5U2VsZWN0b3IiLCJvbmxvYWQiLCJoYW5kbGVJbWFnZUxvYWQiLCJoYW5kbGVFbGVtZW50cyIsImFkZEV2ZW50TGlzdGVuZXIiLCJoYW5kbGVUb3VjaFN0YXJ0IiwicGFzc2l2ZSIsInByZXZQcm9wcyIsImN1cnJlbnRDaG9pY2UiLCJjaG9pY2UiLCJwcmV2Q2hvaWNlIiwiSlNPTiIsInN0cmluZ2lmeSIsInNldFN0YXRlIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInN0eWxlIiwib2Zmc2V0V2lkdGgiLCJvZmZzZXRIZWlnaHQiLCJ3aWR0aFdpdGhQYWRkaW5nIiwiaGVpZ2h0V2l0aFBhZGRpbmciLCJyZXNwb25zZUFyZWFXaWR0aCIsInBhcnNlRmxvYXQiLCJlbXB0eVJlc3BvbnNlQXJlYVdpZHRoIiwicmVzcG9uc2VBcmVhSGVpZ2h0IiwiZW1wdHlSZXNwb25zZUFyZWFIZWlnaHQiLCJhZGp1c3RlZFdpZHRoIiwiYWRqdXN0ZWRIZWlnaHQiLCJwcmV2U3RhdGUiLCJwYXJlbnQiLCJjaGlsZE5vZGVzIiwiZm9yRWFjaCIsImVsZW0iLCJFbGVtZW50IiwiSFRNTERvY3VtZW50Iiwic2V0QXR0cmlidXRlIiwiaXNOYU4iLCJyb290U3R5bGUiLCJtaW5IZWlnaHQiLCJjbGFzc2VzIiwiaXNPdmVyIiwiZHJhZ0l0ZW0iLCJkcmFnZ2VkTGFiZWwiLCJ2YWx1ZSIsImxhYmVsIiwicmVmIiwiUmVhY3RET00iLCJmaW5kRE9NTm9kZSIsImlubmVySFRNTCIsImFkZERyYWdnYWJsZUZhbHNlQXR0cmlidXRlcyIsInVuZGVmaW5lZCIsImdldFJvb3REaW1lbnNpb25zIiwiUmVhY3QiLCJDb21wb25lbnQiLCJkZWZhdWx0UHJvcHMiLCJwcm9wVHlwZXMiLCJpZCIsIlByb3BUeXBlcyIsIm9uZU9mVHlwZSIsInN0cmluZyIsIm51bWJlciIsImJvb2wiLCJkdXBsaWNhdGVzIiwib2JqZWN0Iiwib25DaGFuZ2UiLCJmdW5jIiwiU3R5bGVkQmxhbmtDb250ZW50IiwiY29ubmVjdGVkQmxhbmtDb250ZW50IiwiY29ubmVjdERyb3BUYXJnZXQiLCJ0aWxlVGFyZ2V0IiwiZHJvcCIsIm1vbml0b3IiLCJkcmFnZ2VkSXRlbSIsImdldEl0ZW0iLCJpbnN0YW5jZUlkIiwiZHJvcHBlZCIsImNhbkRyb3AiLCJEcm9wVGlsZSIsImNvbm5lY3QiLCJkcm9wVGFyZ2V0IiwidGlsZVNvdXJjZSIsImNhbkRyYWciLCJiZWdpbkRyYWciLCJmcm9tQ2hvaWNlIiwiZW5kRHJhZyIsImRyb3BSZXN1bHQiLCJnZXREcm9wUmVzdWx0IiwiRHJhZ0Ryb3BUaWxlIiwiZHJhZ1NvdXJjZSIsImlzRHJhZ2dpbmci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VUFBVSxFQUFFbEYsS0FBSyxDQUFDa0YsVUFIYjtBQUlMUyxNQUFBQSxVQUFVLEVBQUU7QUFKUCxLQUFQO0FBTUQsR0FYZ0I7QUFZakJDLEVBQUFBLE9BWmlCLG1CQVlUNUYsS0FaUyxFQVlGK0UsT0FaRSxFQVlPO0FBQ3RCO0FBQ0EsUUFBTWMsVUFBVSxHQUFHZCxPQUFPLENBQUNlLGFBQVIsRUFBbkI7O0FBRUEsUUFBSSxDQUFDRCxVQUFELElBQWVBLFVBQVUsQ0FBQ1YsT0FBOUIsRUFBdUM7QUFDckMsVUFBTUgsV0FBVyxHQUFHRCxPQUFPLENBQUNFLE9BQVIsRUFBcEI7O0FBRUEsVUFBSUQsV0FBVyxDQUFDVyxVQUFoQixFQUE0QjtBQUMxQjNGLFFBQUFBLEtBQUssQ0FBQ3dFLFFBQU4sQ0FBZXhFLEtBQUssQ0FBQ2dFLEVBQXJCLEVBQXlCTixTQUF6QjtBQUNEO0FBQ0Y7QUFDRjtBQXZCZ0IsQ0FBbkI7QUEwQkEsSUFBTXFDLFlBQVksR0FBRyxzQkFBV3ZJLFNBQVgsRUFBc0JnSSxVQUF0QixFQUFrQyxVQUFDRixPQUFELEVBQVVQLE9BQVY7QUFBQSxTQUF1QjtBQUM1RTlFLElBQUFBLGlCQUFpQixFQUFFcUYsT0FBTyxDQUFDVSxVQUFSLEVBRHlEO0FBRTVFQyxJQUFBQSxVQUFVLEVBQUVsQixPQUFPLENBQUNrQixVQUFSO0FBRmdFLEdBQXZCO0FBQUEsQ0FBbEMsRUFHakJaLFFBSGlCLENBQXJCO2VBS2VVLFkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZ3JleSBmcm9tICdAbWF0ZXJpYWwtdWkvY29yZS9jb2xvcnMvZ3JleSc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gJ3JlYWN0LWRvbSc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgcmVuZGVyTWF0aCB9IGZyb20gJ0BwaWUtbGliL21hdGgtcmVuZGVyaW5nJztcbmltcG9ydCBkZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5pbXBvcnQgeyBEcmFnU291cmNlLCBEcm9wVGFyZ2V0IH0gZnJvbSAnQHBpZS1saWIvZHJhZyc7XG5pbXBvcnQgeyB3aXRoU3R5bGVzIH0gZnJvbSAnQG1hdGVyaWFsLXVpL2NvcmUvc3R5bGVzJztcbmltcG9ydCBDaGlwIGZyb20gJ0BtYXRlcmlhbC11aS9jb3JlL0NoaXAnO1xuaW1wb3J0IGNsYXNzbmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBjb2xvciB9IGZyb20gJ0BwaWUtbGliL3JlbmRlci11aSc7XG5cbmNvbnN0IGxvZyA9IGRlYnVnKCdwaWUtbGliOm1hc2stbWFya3VwOmJsYW5rJyk7XG5leHBvcnQgY29uc3QgRFJBR19UWVBFID0gJ01hc2tCbGFuayc7XG5cbmNvbnN0IHVzZVN0eWxlcyA9IHdpdGhTdHlsZXMoKCkgPT4gKHtcbiAgY29udGVudDoge1xuICAgIGJvcmRlcjogYHNvbGlkIDBweCAke2NvbG9yLnByaW1hcnkoKX1gLFxuICAgIG1pbldpZHRoOiAnMjAwcHgnLFxuICAgIHRvdWNoQWN0aW9uOiAnbm9uZScsXG4gICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICAgIHdoaXRlU3BhY2U6ICdub3dyYXAnLCAvLyBQcmV2ZW50IGxpbmUgd3JhcHBpbmdcbiAgfSxcbiAgY2hpcDoge1xuICAgIGJhY2tncm91bmRDb2xvcjogY29sb3IuYmFja2dyb3VuZCgpLFxuICAgIGJvcmRlcjogYDJweCBkYXNoZWQgJHtjb2xvci50ZXh0KCl9YCxcbiAgICBjb2xvcjogY29sb3IudGV4dCgpLFxuICAgIGZvbnRTaXplOiAnaW5oZXJpdCcsXG4gICAgbWF4V2lkdGg6ICczNzRweCcsXG4gICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgYm9yZGVyUmFkaXVzOiAnM3B4JyxcbiAgfSxcbiAgY2hpcExhYmVsOiB7XG4gICAgd2hpdGVTcGFjZTogJ25vcm1hbCcsXG4gICAgLy8gQWRkZWQgZm9yIHRvdWNoIGRldmljZXMsIGZvciBpbWFnZSBjb250ZW50LlxuICAgIC8vIFRoaXMgd2lsbCBwcmV2ZW50IHRoZSBjb250ZXh0IG1lbnUgZnJvbSBhcHBlYXJpbmcgYW5kIG5vdCBhbGxvd2luZyBvdGhlciBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgaW1hZ2UuXG4gICAgLy8gSWYgaW50ZXJhY3Rpb25zIHdpdGggdGhlIGltYWdlIGluIHRoZSB0b2tlbiB3aWxsIGJlIHJlcXVlc3RlZCB3ZSBzaG91bGQgaGFuZGxlIG9ubHkgdGhlIGNvbnRleHQgTWVudS5cbiAgICBwb2ludGVyRXZlbnRzOiAnbm9uZScsXG4gICAgJyYgaW1nJzoge1xuICAgICAgZGlzcGxheTogJ2Jsb2NrJyxcbiAgICAgIHBhZGRpbmc6ICcycHggMCcsXG4gICAgfSxcbiAgICAvLyBSZW1vdmUgZGVmYXVsdCA8cD4gbWFyZ2lucyB0byBlbnN1cmUgY29uc2lzdGVudCBzcGFjaW5nIGFjcm9zcyBhbGwgd3JhcHBlZCBjb250ZW50IChwLCBzcGFuLCBkaXYsIG1hdGgpXG4gICAgLy8gUGFkZGluZyBmb3IgdG9wIGFuZCBib3R0b20gd2lsbCBpbnN0ZWFkIGJlIGNvbnRyb2xsZWQgYnkgdGhlIGNvbnRhaW5lciBmb3IgY29uc2lzdGVudCBsYXlvdXRcbiAgICAvLyBFbnN1cmVzIGNvbnNpc3RlbnQgYmVoYXZpb3Igd2l0aCBwaWUtYXBpLWJyb3dzZXIsIHdoZXJlIG1hcmdpblRvcCBpcyBhbHJlYWR5IHJlbW92ZWQgYnkgYSBCb290c3RyYXAgc3R5bGVzaGVldFxuICAgICcmIHAnOiB7XG4gICAgICBtYXJnaW5Ub3A6ICcwJyxcbiAgICAgIG1hcmdpbkJvdHRvbTogJzAnLFxuICAgIH0sXG4gICAgJyYgbWp4LWZyYWMnOiB7XG4gICAgICBmb250U2l6ZTogJzEyMCUgIWltcG9ydGFudCcsXG4gICAgfSxcbiAgfSxcbiAgaGlkZGVuOiB7XG4gICAgY29sb3I6ICd0cmFuc3BhcmVudCcsXG4gICAgb3BhY2l0eTogMCxcbiAgfSxcbiAgZHJhZ2dlZDoge1xuICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgIGxlZnQ6IDE2LFxuICAgIG1heFdpZHRoOiAnNjBweCcsXG4gIH0sXG4gIGNvcnJlY3Q6IHtcbiAgICBib3JkZXI6IGBzb2xpZCAxcHggJHtjb2xvci5jb3JyZWN0KCl9YCxcbiAgfSxcbiAgaW5jb3JyZWN0OiB7XG4gICAgYm9yZGVyOiBgc29saWQgMXB4ICR7Y29sb3IuaW5jb3JyZWN0KCl9YCxcbiAgfSxcbiAgb3Zlcjoge1xuICAgIHdoaXRlU3BhY2U6ICdub3dyYXAnLFxuICAgIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgfSxcbiAgcGFyZW50T3Zlcjoge1xuICAgIGJvcmRlcjogYDFweCBzb2xpZCAke2dyZXlbNTAwXX1gLFxuICAgIGJhY2tncm91bmRDb2xvcjogYCR7Z3JleVszMDBdfWAsXG4gIH0sXG59KSk7XG5cbmV4cG9ydCBjbGFzcyBCbGFua0NvbnRlbnQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICB3aWR0aDogMCxcbiAgICB9O1xuICB9XG5cbiAgaGFuZGxlSW1hZ2VMb2FkID0gKCkgPT4ge1xuICAgIHRoaXMudXBkYXRlRGltZW5zaW9ucygpO1xuICB9O1xuXG4gIGhhbmRsZUVsZW1lbnRzKCkge1xuICAgIGNvbnN0IGltYWdlRWxlbWVudCA9IHRoaXMuc3BhblJlZj8ucXVlcnlTZWxlY3RvcignaW1nJyk7XG5cbiAgICBpZiAoaW1hZ2VFbGVtZW50KSB7XG4gICAgICBpbWFnZUVsZW1lbnQub25sb2FkID0gdGhpcy5oYW5kbGVJbWFnZUxvYWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnVwZGF0ZURpbWVuc2lvbnMoKTtcbiAgICAgIH0sIDMwMCk7XG4gICAgfVxuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgdGhpcy5oYW5kbGVFbGVtZW50cygpO1xuICAgIGlmICh0aGlzLnJvb3RSZWYpIHtcbiAgICAgIHRoaXMucm9vdFJlZi5hZGRFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgdGhpcy5oYW5kbGVUb3VjaFN0YXJ0LCB7IHBhc3NpdmU6IGZhbHNlIH0pO1xuICAgIH1cbiAgfVxuXG4gIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMpIHtcbiAgICByZW5kZXJNYXRoKHRoaXMucm9vdFJlZik7XG4gICAgY29uc3QgeyBjaG9pY2U6IGN1cnJlbnRDaG9pY2UgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgeyBjaG9pY2U6IHByZXZDaG9pY2UgfSA9IHByZXZQcm9wcztcblxuICAgIGlmIChKU09OLnN0cmluZ2lmeShjdXJyZW50Q2hvaWNlKSAhPT0gSlNPTi5zdHJpbmdpZnkocHJldkNob2ljZSkpIHtcbiAgICAgIGlmICghY3VycmVudENob2ljZSkge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBoZWlnaHQ6IDAsXG4gICAgICAgICAgd2lkdGg6IDAsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLmhhbmRsZUVsZW1lbnRzKCk7XG4gICAgfVxuICB9XG5cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgaWYgKHRoaXMucm9vdFJlZikge1xuICAgICAgdGhpcy5yb290UmVmLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCB0aGlzLmhhbmRsZVRvdWNoU3RhcnQpO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZVRvdWNoU3RhcnQgPSAoZSkgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLnRvdWNoU3RhcnRUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5zdGFydERyYWcoKTtcbiAgICB9LCAzMDApOyAvLyBTdGFydCBkcmFnIGFmdGVyIDMwMG1zICh0b3VjaCBhbmQgaG9sZCBkdXJhdGlvbilcbiAgfTtcblxuICBzdGFydERyYWcgPSAoKSA9PiB7XG4gICAgY29uc3QgeyBjb25uZWN0RHJhZ1NvdXJjZSwgZGlzYWJsZWQgfSA9IHRoaXMucHJvcHM7XG4gICAgaWYgKCFkaXNhYmxlZCkge1xuICAgICAgY29ubmVjdERyYWdTb3VyY2UodGhpcy5yb290UmVmKTtcbiAgICB9XG4gIH07XG5cbiAgdXBkYXRlRGltZW5zaW9ucygpIHtcbiAgICBpZiAodGhpcy5zcGFuUmVmICYmIHRoaXMucm9vdFJlZikge1xuICAgICAgLy8gVGVtcG9yYXJpbHkgc2V0IHJvb3RSZWYgd2lkdGggdG8gJ2F1dG8nIGZvciBuYXR1cmFsIG1lYXN1cmVtZW50XG4gICAgICB0aGlzLnJvb3RSZWYuc3R5bGUud2lkdGggPSAnYXV0byc7XG5cbiAgICAgIC8vIEdldCB0aGUgbmF0dXJhbCBkaW1lbnNpb25zIG9mIHRoZSBjb250ZW50XG4gICAgICBjb25zdCB3aWR0aCA9IHRoaXMuc3BhblJlZi5vZmZzZXRXaWR0aCB8fCAwO1xuICAgICAgY29uc3QgaGVpZ2h0ID0gdGhpcy5zcGFuUmVmLm9mZnNldEhlaWdodCB8fCAwO1xuXG4gICAgICBjb25zdCB3aWR0aFdpdGhQYWRkaW5nID0gd2lkdGggKyAyNDsgLy8gMTJweCBwYWRkaW5nIG9uIGVhY2ggc2lkZVxuICAgICAgY29uc3QgaGVpZ2h0V2l0aFBhZGRpbmcgPSBoZWlnaHQgKyAyNDsgLy8gMTJweCBwYWRkaW5nIG9uIHRvcCBhbmQgYm90dG9tXG5cbiAgICAgIGNvbnN0IHJlc3BvbnNlQXJlYVdpZHRoID0gcGFyc2VGbG9hdCh0aGlzLnByb3BzLmVtcHR5UmVzcG9uc2VBcmVhV2lkdGgpIHx8IDA7XG4gICAgICBjb25zdCByZXNwb25zZUFyZWFIZWlnaHQgPSBwYXJzZUZsb2F0KHRoaXMucHJvcHMuZW1wdHlSZXNwb25zZUFyZWFIZWlnaHQpIHx8IDA7XG5cbiAgICAgIGNvbnN0IGFkanVzdGVkV2lkdGggPSB3aWR0aFdpdGhQYWRkaW5nIDw9IHJlc3BvbnNlQXJlYVdpZHRoID8gcmVzcG9uc2VBcmVhV2lkdGggOiB3aWR0aFdpdGhQYWRkaW5nO1xuICAgICAgY29uc3QgYWRqdXN0ZWRIZWlnaHQgPSBoZWlnaHRXaXRoUGFkZGluZyA8PSByZXNwb25zZUFyZWFIZWlnaHQgPyByZXNwb25zZUFyZWFIZWlnaHQgOiBoZWlnaHRXaXRoUGFkZGluZztcblxuICAgICAgdGhpcy5zZXRTdGF0ZSgocHJldlN0YXRlKSA9PiAoe1xuICAgICAgICB3aWR0aDogYWRqdXN0ZWRXaWR0aCA+IHJlc3BvbnNlQXJlYVdpZHRoID8gYWRqdXN0ZWRXaWR0aCA6IHByZXZTdGF0ZS53aWR0aCxcbiAgICAgICAgaGVpZ2h0OiBhZGp1c3RlZEhlaWdodCA+IHJlc3BvbnNlQXJlYUhlaWdodCA/IGFkanVzdGVkSGVpZ2h0IDogcHJldlN0YXRlLmhlaWdodCxcbiAgICAgIH0pKTtcblxuICAgICAgdGhpcy5yb290UmVmLnN0eWxlLndpZHRoID0gYCR7YWRqdXN0ZWRXaWR0aH1weGA7XG4gICAgICB0aGlzLnJvb3RSZWYuc3R5bGUuaGVpZ2h0ID0gYCR7YWRqdXN0ZWRIZWlnaHR9cHhgO1xuICAgIH1cbiAgfVxuXG4gIGFkZERyYWdnYWJsZUZhbHNlQXR0cmlidXRlcyhwYXJlbnQpIHtcbiAgICBwYXJlbnQuY2hpbGROb2Rlcy5mb3JFYWNoKChlbGVtKSA9PiB7XG4gICAgICBpZiAoZWxlbSBpbnN0YW5jZW9mIEVsZW1lbnQgfHwgZWxlbSBpbnN0YW5jZW9mIEhUTUxEb2N1bWVudCkge1xuICAgICAgICBlbGVtLnNldEF0dHJpYnV0ZSgnZHJhZ2dhYmxlJywgZmFsc2UpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZ2V0Um9vdERpbWVuc2lvbnMoKSB7XG4gICAgLy8gSGFuZGxlIHBvdGVudGlhbCBub24tbnVtZXJpYyB2YWx1ZXNcbiAgICBjb25zdCByZXNwb25zZUFyZWFXaWR0aCA9ICFpc05hTihwYXJzZUZsb2F0KHRoaXMucHJvcHMuZW1wdHlSZXNwb25zZUFyZWFXaWR0aCkpXG4gICAgICA/IHBhcnNlRmxvYXQodGhpcy5wcm9wcy5lbXB0eVJlc3BvbnNlQXJlYVdpZHRoKVxuICAgICAgOiAwO1xuICAgIGNvbnN0IHJlc3BvbnNlQXJlYUhlaWdodCA9ICFpc05hTihwYXJzZUZsb2F0KHRoaXMucHJvcHMuZW1wdHlSZXNwb25zZUFyZWFIZWlnaHQpKVxuICAgICAgPyBwYXJzZUZsb2F0KHRoaXMucHJvcHMuZW1wdHlSZXNwb25zZUFyZWFIZWlnaHQpXG4gICAgICA6IDA7XG5cbiAgICBjb25zdCByb290U3R5bGUgPSB7XG4gICAgICBoZWlnaHQ6IHRoaXMuc3RhdGUuaGVpZ2h0IHx8IHJlc3BvbnNlQXJlYUhlaWdodCxcbiAgICAgIHdpZHRoOiB0aGlzLnN0YXRlLndpZHRoIHx8IHJlc3BvbnNlQXJlYVdpZHRoLFxuICAgIH07XG5cbiAgICAvLyBhZGQgbWluV2lkdGgsIG1pbkhlaWdodCBpZiB3aWR0aCBhbmQgaGVpZ2h0IGFyZSBub3QgZGVmaW5lZFxuICAgIC8vIG1pbldpZHRoLCBtaW5IZWlnaHQgd2lsbCBiZSBhbHNvIGluIG1vZGVsIGluIHRoZSBmdXR1cmVcbiAgICByZXR1cm4ge1xuICAgICAgLi4ucm9vdFN0eWxlLFxuICAgICAgLi4uKHJlc3BvbnNlQXJlYVdpZHRoID8ge30gOiB7IG1pbldpZHRoOiA5MCB9KSxcbiAgICAgIC4uLihyZXNwb25zZUFyZWFIZWlnaHQgPyB7fSA6IHsgbWluSGVpZ2h0OiAzMiB9KSxcbiAgICB9O1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHsgZGlzYWJsZWQsIGNob2ljZSwgY2xhc3NlcywgaXNPdmVyLCBkcmFnSXRlbSwgY29ycmVjdCB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBkcmFnZ2VkTGFiZWwgPSBkcmFnSXRlbSAmJiBpc092ZXIgJiYgZHJhZ0l0ZW0uY2hvaWNlLnZhbHVlO1xuICAgIGNvbnN0IGxhYmVsID0gY2hvaWNlICYmIGNob2ljZS52YWx1ZTtcblxuICAgIHJldHVybiAoXG4gICAgICAvLyBUT0RPIHRoZSBDaGlwIGVsZW1lbnQgaXMgY2F1c2luZyBkcmFnIHByb2JsZW1zIG9uIHRvdWNoIGRldmljZXMuIEF2b2lkIHVzaW5nIENoaXAgYW5kIGNvbnNpZGVyIHJlZmFjdG9yaW5nIHRoZSBjb2RlLiBLZWVwIGluIG1pbmQgdGhhdCBDaGlwIGlzIGEgc3BhbiB3aXRoIGEgYnV0dG9uIHJvbGUsIHdoaWNoIGludGVyZmVyZXMgd2l0aCBzZWFtbGVzcyB0b3VjaCBkZXZpY2UgZHJhZ2dpbmcuXG4gICAgICA8Q2hpcFxuICAgICAgICBjbGlja2FibGU9e2ZhbHNlfVxuICAgICAgICBkaXNhYmxlZD17dHJ1ZX1cbiAgICAgICAgcmVmPXsocmVmKSA9PiB7XG4gICAgICAgICAgLy9lc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgICAgICB0aGlzLnJvb3RSZWYgPSBSZWFjdERPTS5maW5kRE9NTm9kZShyZWYpO1xuICAgICAgICB9fVxuICAgICAgICBjb21wb25lbnQ9XCJzcGFuXCJcbiAgICAgICAgbGFiZWw9e1xuICAgICAgICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NuYW1lcyhjbGFzc2VzLmNoaXBMYWJlbCwgaXNPdmVyICYmIGNsYXNzZXMub3Zlciwge1xuICAgICAgICAgICAgICAgIFtjbGFzc2VzLmhpZGRlbl06IGRyYWdnZWRMYWJlbCxcbiAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgIHJlZj17KHJlZikgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyZWYpIHtcbiAgICAgICAgICAgICAgICAgIC8vZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgICAgICAgICAgICAgICB0aGlzLnNwYW5SZWYgPSBSZWFjdERPTS5maW5kRE9NTm9kZShyZWYpO1xuICAgICAgICAgICAgICAgICAgcmVmLmlubmVySFRNTCA9IGxhYmVsIHx8ICcnO1xuICAgICAgICAgICAgICAgICAgdGhpcy5hZGREcmFnZ2FibGVGYWxzZUF0dHJpYnV0ZXMocmVmKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHsnICd9XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICB7ZHJhZ2dlZExhYmVsICYmIChcbiAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzbmFtZXMoY2xhc3Nlcy5jaGlwTGFiZWwsIGlzT3ZlciAmJiBjbGFzc2VzLm92ZXIsIGNsYXNzZXMuZHJhZ2dlZCl9XG4gICAgICAgICAgICAgICAgcmVmPXsocmVmKSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAocmVmKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3BhblJlZiA9IFJlYWN0RE9NLmZpbmRET01Ob2RlKHJlZik7XG4gICAgICAgICAgICAgICAgICAgIHJlZi5pbm5lckhUTUwgPSBkcmFnZ2VkTGFiZWwgfHwgJyc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkRHJhZ2dhYmxlRmFsc2VBdHRyaWJ1dGVzKHJlZik7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHsnICd9XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgICAgICAgfVxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzbmFtZXMoY2xhc3Nlcy5jaGlwLCBpc092ZXIgJiYgY2xhc3Nlcy5vdmVyLCBpc092ZXIgJiYgY2xhc3Nlcy5wYXJlbnRPdmVyLCB7XG4gICAgICAgICAgW2NsYXNzZXMuY29ycmVjdF06IGNvcnJlY3QgIT09IHVuZGVmaW5lZCAmJiBjb3JyZWN0LFxuICAgICAgICAgIFtjbGFzc2VzLmluY29ycmVjdF06IGNvcnJlY3QgIT09IHVuZGVmaW5lZCAmJiAhY29ycmVjdCxcbiAgICAgICAgfSl9XG4gICAgICAgIHZhcmlhbnQ9e2Rpc2FibGVkID8gJ291dGxpbmVkJyA6IHVuZGVmaW5lZH1cbiAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAuLi50aGlzLmdldFJvb3REaW1lbnNpb25zKCksXG4gICAgICAgIH19XG4gICAgICAvPlxuICAgICk7XG4gIH1cbn1cblxuQmxhbmtDb250ZW50LmRlZmF1bHRQcm9wcyA9IHtcbiAgZW1wdHlSZXNwb25zZUFyZWFXaWR0aDogMCxcbiAgZW1wdHlSZXNwb25zZUFyZWFIZWlnaHQ6IDAsXG59O1xuXG5CbGFua0NvbnRlbnQucHJvcFR5cGVzID0ge1xuICBpZDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pLFxuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIGR1cGxpY2F0ZXM6IFByb3BUeXBlcy5ib29sLFxuICBjaG9pY2U6IFByb3BUeXBlcy5vYmplY3QsXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIGlzT3ZlcjogUHJvcFR5cGVzLmJvb2wsXG4gIGRyYWdJdGVtOiBQcm9wVHlwZXMub2JqZWN0LFxuICBjb3JyZWN0OiBQcm9wVHlwZXMuYm9vbCxcbiAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICBlbXB0eVJlc3BvbnNlQXJlYVdpZHRoOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSksXG4gIGVtcHR5UmVzcG9uc2VBcmVhSGVpZ2h0OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSksXG59O1xuXG5jb25zdCBTdHlsZWRCbGFua0NvbnRlbnQgPSB1c2VTdHlsZXMoQmxhbmtDb250ZW50KTtcblxuY29uc3QgY29ubmVjdGVkQmxhbmtDb250ZW50ID0gdXNlU3R5bGVzKCh7IGNvbm5lY3REcmFnU291cmNlLCBjb25uZWN0RHJvcFRhcmdldCwgLi4ucHJvcHMgfSkgPT4ge1xuICBjb25zdCB7IGNsYXNzZXMsIGlzT3ZlciB9ID0gcHJvcHM7XG5cbiAgcmV0dXJuIGNvbm5lY3REcm9wVGFyZ2V0KFxuICAgIGNvbm5lY3REcmFnU291cmNlKFxuICAgICAgPHNwYW4gY2xhc3NOYW1lPXtjbGFzc25hbWVzKGNsYXNzZXMuY29udGVudCwgaXNPdmVyICYmIGNsYXNzZXMub3Zlcil9PlxuICAgICAgICA8U3R5bGVkQmxhbmtDb250ZW50IHsuLi5wcm9wc30gLz5cbiAgICAgIDwvc3Bhbj4sXG4gICAgKSxcbiAgKTtcbn0pO1xuXG5jb25zdCB0aWxlVGFyZ2V0ID0ge1xuICBkcm9wKHByb3BzLCBtb25pdG9yKSB7XG4gICAgY29uc3QgZHJhZ2dlZEl0ZW0gPSBtb25pdG9yLmdldEl0ZW0oKTtcblxuICAgIGxvZygncHJvcHMuaW5zdGFuY2VJZCcsIHByb3BzLmluc3RhbmNlSWQsICdkcmFnZ2VkSXRlbS5pbnN0YW5jZUlkOicsIGRyYWdnZWRJdGVtLmluc3RhbmNlSWQpO1xuXG4gICAgaWYgKGRyYWdnZWRJdGVtLmlkICE9PSBwcm9wcy5pZCkge1xuICAgICAgcHJvcHMub25DaGFuZ2UocHJvcHMuaWQsIGRyYWdnZWRJdGVtLmNob2ljZS5pZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGRyb3BwZWQ6IGRyYWdnZWRJdGVtLmlkICE9PSBwcm9wcy5pZCxcbiAgICB9O1xuICB9LFxuICBjYW5Ecm9wKHByb3BzLCBtb25pdG9yKSB7XG4gICAgY29uc3QgZHJhZ2dlZEl0ZW0gPSBtb25pdG9yLmdldEl0ZW0oKTtcblxuICAgIHJldHVybiBkcmFnZ2VkSXRlbS5pbnN0YW5jZUlkID09PSBwcm9wcy5pbnN0YW5jZUlkO1xuICB9LFxufTtcblxuY29uc3QgRHJvcFRpbGUgPSBEcm9wVGFyZ2V0KERSQUdfVFlQRSwgdGlsZVRhcmdldCwgKGNvbm5lY3QsIG1vbml0b3IpID0+ICh7XG4gIGNvbm5lY3REcm9wVGFyZ2V0OiBjb25uZWN0LmRyb3BUYXJnZXQoKSxcbiAgaXNPdmVyOiBtb25pdG9yLmlzT3ZlcigpLFxuICBkcmFnSXRlbTogbW9uaXRvci5nZXRJdGVtKCksXG59KSkoY29ubmVjdGVkQmxhbmtDb250ZW50KTtcblxuY29uc3QgdGlsZVNvdXJjZSA9IHtcbiAgY2FuRHJhZyhwcm9wcykge1xuICAgIHJldHVybiAhcHJvcHMuZGlzYWJsZWQgJiYgISFwcm9wcy5jaG9pY2U7XG4gIH0sXG4gIGJlZ2luRHJhZyhwcm9wcykge1xuICAgIHJldHVybiB7XG4gICAgICBpZDogcHJvcHMuaWQsXG4gICAgICBjaG9pY2U6IHByb3BzLmNob2ljZSxcbiAgICAgIGluc3RhbmNlSWQ6IHByb3BzLmluc3RhbmNlSWQsXG4gICAgICBmcm9tQ2hvaWNlOiB0cnVlLFxuICAgIH07XG4gIH0sXG4gIGVuZERyYWcocHJvcHMsIG1vbml0b3IpIHtcbiAgICAvLyB0aGlzIHdpbGwgYmUgbnVsbCBpZiBpdCBkaWQgbm90IGRyb3BcbiAgICBjb25zdCBkcm9wUmVzdWx0ID0gbW9uaXRvci5nZXREcm9wUmVzdWx0KCk7XG5cbiAgICBpZiAoIWRyb3BSZXN1bHQgfHwgZHJvcFJlc3VsdC5kcm9wcGVkKSB7XG4gICAgICBjb25zdCBkcmFnZ2VkSXRlbSA9IG1vbml0b3IuZ2V0SXRlbSgpO1xuXG4gICAgICBpZiAoZHJhZ2dlZEl0ZW0uZnJvbUNob2ljZSkge1xuICAgICAgICBwcm9wcy5vbkNoYW5nZShwcm9wcy5pZCwgdW5kZWZpbmVkKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG59O1xuXG5jb25zdCBEcmFnRHJvcFRpbGUgPSBEcmFnU291cmNlKERSQUdfVFlQRSwgdGlsZVNvdXJjZSwgKGNvbm5lY3QsIG1vbml0b3IpID0+ICh7XG4gIGNvbm5lY3REcmFnU291cmNlOiBjb25uZWN0LmRyYWdTb3VyY2UoKSxcbiAgaXNEcmFnZ2luZzogbW9uaXRvci5pc0RyYWdnaW5nKCksXG59KSkoRHJvcFRpbGUpO1xuXG5leHBvcnQgZGVmYXVsdCBEcmFnRHJvcFRpbGU7XG4iXX0=
@@ -1,118 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports["default"] = void 0;
9
-
10
- var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
-
12
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
13
-
14
- var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
15
-
16
- var _react = _interopRequireDefault(require("react"));
17
-
18
- var _OutlinedInput = _interopRequireDefault(require("@material-ui/core/OutlinedInput"));
19
-
20
- var _classnames3 = _interopRequireDefault(require("classnames"));
21
-
22
- var _styles = require("@material-ui/core/styles");
23
-
24
- var _renderUi = require("@pie-lib/render-ui");
25
-
26
- var _excluded = ["correct", "charactersLimit", "classes", "disabled", "isBox", "isConstructedResponse", "width", "spellCheck"];
27
-
28
- var correctStyle = function correctStyle(color) {
29
- return {
30
- borderColor: "".concat(color, " !important")
31
- };
32
- };
33
-
34
- var _default = (0, _styles.withStyles)(function () {
35
- return {
36
- input: {
37
- color: _renderUi.color.text(),
38
- backgroundColor: _renderUi.color.background(),
39
- borderRadius: '4px !important',
40
- borderWidth: '1px',
41
- borderStyle: 'solid',
42
- padding: '10px 20px 10px 10px',
43
- '&:disabled': {
44
- opacity: 0.8,
45
- cursor: 'not-allowed !important'
46
- },
47
- '&:hover': {
48
- borderColor: _renderUi.color.primary(),
49
- '&:disabled': {
50
- borderColor: 'initial'
51
- }
52
- },
53
- '&:focus': {
54
- borderColor: _renderUi.color.primaryDark()
55
- }
56
- },
57
- crInput: {
58
- padding: '8px !important'
59
- },
60
- correct: correctStyle(_renderUi.color.correct()),
61
- incorrect: correctStyle(_renderUi.color.incorrect()),
62
- box: {
63
- fontSize: 'inherit',
64
- display: 'inline-block',
65
- verticalAlign: 'middle'
66
- },
67
- outlinedInput: {
68
- padding: '2px',
69
- borderRadius: '4px',
70
- '& fieldset': {
71
- border: 0
72
- }
73
- },
74
- notchedOutline: {
75
- borderColor: _renderUi.color.correct()
76
- }
77
- };
78
- })(function (props) {
79
- var _classnames, _classnames2;
80
-
81
- var correct = props.correct,
82
- charactersLimit = props.charactersLimit,
83
- classes = props.classes,
84
- disabled = props.disabled,
85
- isBox = props.isBox,
86
- isConstructedResponse = props.isConstructedResponse,
87
- width = props.width,
88
- spellCheck = props.spellCheck,
89
- rest = (0, _objectWithoutProperties2["default"])(props, _excluded);
90
- var label = typeof correct === 'boolean' ? correct ? 'correct' : 'incorrect' : undefined;
91
- var inputProps = charactersLimit ? {
92
- maxLength: charactersLimit,
93
- 'aria-label': 'Enter answer'
94
- } : {
95
- 'aria-label': 'Enter answer'
96
- };
97
-
98
- if (width) {
99
- inputProps.style = {
100
- width: "".concat(width + Math.round(width / 10) + 1, "ch") // added some extra space for capital letters
101
-
102
- };
103
- }
104
-
105
- return /*#__PURE__*/_react["default"].createElement(_OutlinedInput["default"], (0, _extends2["default"])({
106
- className: (0, _classnames3["default"])((_classnames = {}, (0, _defineProperty2["default"])(_classnames, classes.disabledInput, disabled), (0, _defineProperty2["default"])(_classnames, classes.box, isBox), (0, _defineProperty2["default"])(_classnames, classes.outlinedInput, true), _classnames)),
107
- classes: {
108
- input: (0, _classnames3["default"])((_classnames2 = {}, (0, _defineProperty2["default"])(_classnames2, classes.input, true), (0, _defineProperty2["default"])(_classnames2, classes[label], label), (0, _defineProperty2["default"])(_classnames2, classes.crInput, isConstructedResponse), _classnames2))
109
- },
110
- inputProps: inputProps,
111
- labelWidth: 0,
112
- disabled: disabled,
113
- spellCheck: spellCheck
114
- }, rest));
115
- });
116
-
117
- exports["default"] = _default;
118
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21wb25lbnRzL2NvcnJlY3QtaW5wdXQuanN4Il0sIm5hbWVzIjpbImNvcnJlY3RTdHlsZSIsImNvbG9yIiwiYm9yZGVyQ29sb3IiLCJpbnB1dCIsInRleHQiLCJiYWNrZ3JvdW5kQ29sb3IiLCJiYWNrZ3JvdW5kIiwiYm9yZGVyUmFkaXVzIiwiYm9yZGVyV2lkdGgiLCJib3JkZXJTdHlsZSIsInBhZGRpbmciLCJvcGFjaXR5IiwiY3Vyc29yIiwicHJpbWFyeSIsInByaW1hcnlEYXJrIiwiY3JJbnB1dCIsImNvcnJlY3QiLCJpbmNvcnJlY3QiLCJib3giLCJmb250U2l6ZSIsImRpc3BsYXkiLCJ2ZXJ0aWNhbEFsaWduIiwib3V0bGluZWRJbnB1dCIsImJvcmRlciIsIm5vdGNoZWRPdXRsaW5lIiwicHJvcHMiLCJjaGFyYWN0ZXJzTGltaXQiLCJjbGFzc2VzIiwiZGlzYWJsZWQiLCJpc0JveCIsImlzQ29uc3RydWN0ZWRSZXNwb25zZSIsIndpZHRoIiwic3BlbGxDaGVjayIsInJlc3QiLCJsYWJlbCIsInVuZGVmaW5lZCIsImlucHV0UHJvcHMiLCJtYXhMZW5ndGgiLCJzdHlsZSIsIk1hdGgiLCJyb3VuZCIsImRpc2FibGVkSW5wdXQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7O0FBRUEsSUFBTUEsWUFBWSxHQUFHLFNBQWZBLFlBQWUsQ0FBQ0MsS0FBRDtBQUFBLFNBQVk7QUFDL0JDLElBQUFBLFdBQVcsWUFBS0QsS0FBTDtBQURvQixHQUFaO0FBQUEsQ0FBckI7O2VBSWUsd0JBQVc7QUFBQSxTQUFPO0FBQy9CRSxJQUFBQSxLQUFLLEVBQUU7QUFDTEYsTUFBQUEsS0FBSyxFQUFFQSxnQkFBTUcsSUFBTixFQURGO0FBRUxDLE1BQUFBLGVBQWUsRUFBRUosZ0JBQU1LLFVBQU4sRUFGWjtBQUdMQyxNQUFBQSxZQUFZLEVBQUUsZ0JBSFQ7QUFJTEMsTUFBQUEsV0FBVyxFQUFF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QUZILEVBRWFBLEtBRmIsa0RBR0pQLE9BQU8sQ0FBQ1osT0FISixFQUdjZSxxQkFIZDtBQURBLEtBTlg7QUFhRSxJQUFBLFVBQVUsRUFBRU0sVUFiZDtBQWNFLElBQUEsVUFBVSxFQUFFLENBZGQ7QUFlRSxJQUFBLFFBQVEsRUFBRVIsUUFmWjtBQWdCRSxJQUFBLFVBQVUsRUFBRUk7QUFoQmQsS0FpQk1DLElBakJOLEVBREY7QUFxQkQsQ0F2RmMsQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgT3V0bGluZWRJbnB1dCBmcm9tICdAbWF0ZXJpYWwtdWkvY29yZS9PdXRsaW5lZElucHV0JztcbmltcG9ydCBjbGFzc25hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgd2l0aFN0eWxlcyB9IGZyb20gJ0BtYXRlcmlhbC11aS9jb3JlL3N0eWxlcyc7XG5pbXBvcnQgeyBjb2xvciB9IGZyb20gJ0BwaWUtbGliL3JlbmRlci11aSc7XG5cbmNvbnN0IGNvcnJlY3RTdHlsZSA9IChjb2xvcikgPT4gKHtcbiAgYm9yZGVyQ29sb3I6IGAke2NvbG9yfSAhaW1wb3J0YW50YCxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCB3aXRoU3R5bGVzKCgpID0+ICh7XG4gIGlucHV0OiB7XG4gICAgY29sb3I6IGNvbG9yLnRleHQoKSxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IGNvbG9yLmJhY2tncm91bmQoKSxcbiAgICBib3JkZXJSYWRpdXM6ICc0cHggIWltcG9ydGFudCcsXG4gICAgYm9yZGVyV2lkdGg6ICcxcHgnLFxuICAgIGJvcmRlclN0eWxlOiAnc29saWQnLFxuICAgIHBhZGRpbmc6ICcxMHB4IDIwcHggMTBweCAxMHB4JyxcbiAgICAnJjpkaXNhYmxlZCc6IHtcbiAgICAgIG9wYWNpdHk6IDAuOCxcbiAgICAgIGN1cnNvcjogJ25vdC1hbGxvd2VkICFpbXBvcnRhbnQnLFxuICAgIH0sXG4gICAgJyY6aG92ZXInOiB7XG4gICAgICBib3JkZXJDb2xvcjogY29sb3IucHJpbWFyeSgpLFxuICAgICAgJyY6ZGlzYWJsZWQnOiB7XG4gICAgICAgIGJvcmRlckNvbG9yOiAnaW5pdGlhbCcsXG4gICAgICB9LFxuICAgIH0sXG4gICAgJyY6Zm9jdXMnOiB7XG4gICAgICBib3JkZXJDb2xvcjogY29sb3IucHJpbWFyeURhcmsoKSxcbiAgICB9LFxuICB9LFxuICBjcklucHV0OiB7XG4gICAgcGFkZGluZzogJzhweCAhaW1wb3J0YW50JyxcbiAgfSxcbiAgY29ycmVjdDogY29ycmVjdFN0eWxlKGNvbG9yLmNvcnJlY3QoKSksXG4gIGluY29ycmVjdDogY29ycmVjdFN0eWxlKGNvbG9yLmluY29ycmVjdCgpKSxcbiAgYm94OiB7XG4gICAgZm9udFNpemU6ICdpbmhlcml0JyxcbiAgICBkaXNwbGF5OiAnaW5saW5lLWJsb2NrJyxcbiAgICB2ZXJ0aWNhbEFsaWduOiAnbWlkZGxlJyxcbiAgfSxcbiAgb3V0bGluZWRJbnB1dDoge1xuICAgIHBhZGRpbmc6ICcycHgnLFxuICAgIGJvcmRlclJhZGl1czogJzRweCcsXG4gICAgJyYgZmllbGRzZXQnOiB7XG4gICAgICBib3JkZXI6IDAsXG4gICAgfSxcbiAgfSxcbiAgbm90Y2hlZE91dGxpbmU6IHtcbiAgICBib3JkZXJDb2xvcjogY29sb3IuY29ycmVjdCgpLFxuICB9LFxufSkpKChwcm9wcykgPT4ge1xuICBjb25zdCB7XG4gICAgY29ycmVjdCxcbiAgICBjaGFyYWN0ZXJzTGltaXQsXG4gICAgY2xhc3NlcyxcbiAgICBkaXNhYmxlZCxcbiAgICBpc0JveCxcbiAgICBpc0NvbnN0cnVjdGVkUmVzcG9uc2UsXG4gICAgd2lkdGgsXG4gICAgc3BlbGxDaGVjayxcbiAgICAuLi5yZXN0XG4gIH0gPSBwcm9wcztcblxuICBjb25zdCBsYWJlbCA9IHR5cGVvZiBjb3JyZWN0ID09PSAnYm9vbGVhbicgPyAoY29ycmVjdCA/ICdjb3JyZWN0JyA6ICdpbmNvcnJlY3QnKSA6IHVuZGVmaW5lZDtcbiAgY29uc3QgaW5wdXRQcm9wcyA9IGNoYXJhY3RlcnNMaW1pdFxuICAgID8geyBtYXhMZW5ndGg6IGNoYXJhY3RlcnNMaW1pdCwgJ2FyaWEtbGFiZWwnOiAnRW50ZXIgYW5zd2VyJyB9XG4gICAgOiB7ICdhcmlhLWxhYmVsJzogJ0VudGVyIGFuc3dlcicgfTtcblxuICBpZiAod2lkdGgpIHtcbiAgICBpbnB1dFByb3BzLnN0eWxlID0ge1xuICAgICAgd2lkdGg6IGAke3dpZHRoICsgTWF0aC5yb3VuZCh3aWR0aCAvIDEwKSArIDF9Y2hgLCAvLyBhZGRlZCBzb21lIGV4dHJhIHNwYWNlIGZvciBjYXBpdGFsIGxldHRlcnNcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8T3V0bGluZWRJbnB1dFxuICAgICAgY2xhc3NOYW1lPXtjbGFzc25hbWVzKHtcbiAgICAgICAgW2NsYXNzZXMuZGlzYWJsZWRJbnB1dF06IGRpc2FibGVkLFxuICAgICAgICBbY2xhc3Nlcy5ib3hdOiBpc0JveCxcbiAgICAgICAgW2NsYXNzZXMub3V0bGluZWRJbnB1dF06IHRydWUsXG4gICAgICB9KX1cbiAgICAgIGNsYXNzZXM9e3tcbiAgICAgICAgaW5wdXQ6IGNsYXNzbmFtZXMoe1xuICAgICAgICAgIFtjbGFzc2VzLmlucHV0XTogdHJ1ZSxcbiAgICAgICAgICBbY2xhc3Nlc1tsYWJlbF1dOiBsYWJlbCxcbiAgICAgICAgICBbY2xhc3Nlcy5jcklucHV0XTogaXNDb25zdHJ1Y3RlZFJlc3BvbnNlLFxuICAgICAgICB9KSxcbiAgICAgIH19XG4gICAgICBpbnB1dFByb3BzPXtpbnB1dFByb3BzfVxuICAgICAgbGFiZWxXaWR0aD17MH1cbiAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgIHNwZWxsQ2hlY2s9e3NwZWxsQ2hlY2t9XG4gICAgICB7Li4ucmVzdH1cbiAgICAvPlxuICApO1xufSk7XG4iXX0=