@pie-element/categorize 11.3.4-next.3 → 12.0.0-beta.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 -11
- package/configure/CHANGELOG.md +0 -11
- package/configure/lib/__tests__/main.test.js +100 -0
- package/configure/lib/__tests__/utils.js +39 -0
- package/configure/lib/defaults.js +3 -6
- package/configure/lib/defaults.js.map +1 -1
- package/configure/lib/design/__tests__/builder.test.js +34 -0
- package/configure/lib/design/__tests__/buttons.test.js +36 -0
- package/configure/lib/design/__tests__/header.test.js +37 -0
- package/configure/lib/design/__tests__/index.test.js +125 -0
- package/configure/lib/design/__tests__/input-header.test.js +41 -0
- package/configure/lib/design/builder.js +16 -34
- package/configure/lib/design/builder.js.map +1 -1
- package/configure/lib/design/buttons.js +42 -96
- package/configure/lib/design/buttons.js.map +1 -1
- package/configure/lib/design/categories/RowLabel.js +34 -47
- package/configure/lib/design/categories/RowLabel.js.map +1 -1
- package/configure/lib/design/categories/__tests__/alternateResponses.test.js +93 -0
- package/configure/lib/design/categories/__tests__/category.test.js +65 -0
- package/configure/lib/design/categories/__tests__/choice-preview.test.js +52 -0
- package/configure/lib/design/categories/__tests__/droppable-placeholder.test.js +63 -0
- package/configure/lib/design/categories/__tests__/index.test.js +91 -0
- package/configure/lib/design/categories/alternateResponses.js +97 -252
- package/configure/lib/design/categories/alternateResponses.js.map +1 -1
- package/configure/lib/design/categories/category.js +136 -209
- package/configure/lib/design/categories/category.js.map +1 -1
- package/configure/lib/design/categories/choice-preview.js +62 -127
- package/configure/lib/design/categories/choice-preview.js.map +1 -1
- package/configure/lib/design/categories/droppable-placeholder.js +74 -166
- package/configure/lib/design/categories/droppable-placeholder.js.map +1 -1
- package/configure/lib/design/categories/index.js +196 -385
- package/configure/lib/design/categories/index.js.map +1 -1
- package/configure/lib/design/choices/__tests__/choice.test.js +62 -0
- package/configure/lib/design/choices/__tests__/config.test.js +66 -0
- package/configure/lib/design/choices/__tests__/index.test.js +70 -0
- package/configure/lib/design/choices/choice.js +156 -265
- package/configure/lib/design/choices/choice.js.map +1 -1
- package/configure/lib/design/choices/config.js +43 -99
- package/configure/lib/design/choices/config.js.map +1 -1
- package/configure/lib/design/choices/index.js +149 -237
- package/configure/lib/design/choices/index.js.map +1 -1
- package/configure/lib/design/header.js +58 -112
- package/configure/lib/design/header.js.map +1 -1
- package/configure/lib/design/index.js +633 -478
- package/configure/lib/design/index.js.map +1 -1
- package/configure/lib/design/input-header.js +95 -151
- package/configure/lib/design/input-header.js.map +1 -1
- package/configure/lib/design/utils.js +5 -16
- package/configure/lib/design/utils.js.map +1 -1
- package/configure/lib/index.js +121 -184
- package/configure/lib/index.js.map +1 -1
- package/configure/lib/main.js +31 -75
- package/configure/lib/main.js.map +1 -1
- package/configure/lib/utils.js +23 -33
- package/configure/lib/utils.js.map +1 -1
- package/configure/package.json +15 -15
- package/controller/CHANGELOG.md +0 -11
- package/controller/lib/__tests__/index.test.js +526 -0
- package/controller/lib/defaults.js +3 -6
- package/controller/lib/defaults.js.map +1 -1
- package/controller/lib/index.js +238 -319
- package/controller/lib/index.js.map +1 -1
- package/controller/lib/utils.js +29 -66
- package/controller/lib/utils.js.map +1 -1
- package/controller/package.json +5 -5
- package/docs/demo/.pie/.configure/package.json +10 -0
- package/docs/demo/.pie/.configure/yarn.lock +2181 -0
- package/docs/demo/.pie/.controllers/package.json +10 -0
- package/docs/demo/.pie/.controllers/yarn.lock +110 -0
- package/docs/demo/.pie/info.entry.js +89 -0
- package/docs/demo/.pie/info.webpack.config.js +119 -0
- package/docs/demo/.pie/package.json +10 -0
- package/docs/demo/.pie/yarn.lock +2190 -0
- package/docs/demo/pie.manifest.json +11 -0
- package/lib/__tests__/index.test.js +197 -0
- package/lib/categorize/__tests__/categories.test.js +138 -0
- package/lib/categorize/__tests__/category.test.js +137 -0
- package/lib/categorize/__tests__/choice.test.js +88 -0
- package/lib/categorize/__tests__/choices.test.js +118 -0
- package/lib/categorize/__tests__/droppable-placeholder.test.js +96 -0
- package/lib/categorize/__tests__/grid-content.test.js +48 -0
- package/lib/categorize/__tests__/index.test.js +152 -0
- package/lib/categorize/categories.js +107 -165
- package/lib/categorize/categories.js.map +1 -1
- package/lib/categorize/category.js +74 -124
- package/lib/categorize/category.js.map +1 -1
- package/lib/categorize/choice.js +119 -246
- package/lib/categorize/choice.js.map +1 -1
- package/lib/categorize/choices.js +67 -132
- package/lib/categorize/choices.js.map +1 -1
- package/lib/categorize/droppable-placeholder.js +47 -104
- package/lib/categorize/droppable-placeholder.js.map +1 -1
- package/lib/categorize/grid-content.js +40 -88
- package/lib/categorize/grid-content.js.map +1 -1
- package/lib/categorize/index.js +342 -318
- package/lib/categorize/index.js.map +1 -1
- package/lib/index.js +286 -307
- package/lib/index.js.map +1 -1
- package/package.json +16 -14
- package/esm/configure.js +0 -34401
- package/esm/configure.js.map +0 -1
- package/esm/controller.js +0 -1468
- package/esm/controller.js.map +0 -1
- package/esm/element.js +0 -13134
- package/esm/element.js.map +0 -1
- package/esm/package.json +0 -3
|
@@ -1,545 +1,700 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
4
|
Object.defineProperty(exports, "__esModule", {
|
|
6
5
|
value: true
|
|
7
6
|
});
|
|
8
|
-
exports
|
|
9
|
-
|
|
10
|
-
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
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
|
-
|
|
7
|
+
exports.default = exports.Design = void 0;
|
|
24
8
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
25
|
-
|
|
26
9
|
var _utils = require("./utils");
|
|
27
|
-
|
|
28
10
|
var _react = _interopRequireDefault(require("react"));
|
|
29
|
-
|
|
30
11
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
31
|
-
|
|
32
|
-
var
|
|
33
|
-
|
|
12
|
+
var _styles = require("@mui/material/styles");
|
|
13
|
+
var _core = require("@dnd-kit/core");
|
|
34
14
|
var _configUi = require("@pie-lib/config-ui");
|
|
35
|
-
|
|
36
15
|
var _categorize = require("@pie-lib/categorize");
|
|
37
|
-
|
|
38
|
-
var _editableHtml = _interopRequireDefault(require("@pie-lib/editable-html"));
|
|
39
|
-
|
|
16
|
+
var _editableHtmlTipTap = _interopRequireDefault(require("@pie-lib/editable-html-tip-tap"));
|
|
40
17
|
var _drag = require("@pie-lib/drag");
|
|
41
|
-
|
|
18
|
+
var _mathRendering = require("@pie-lib/math-rendering");
|
|
42
19
|
var _categories = _interopRequireDefault(require("./categories"));
|
|
43
|
-
|
|
44
20
|
var _alternateResponses = _interopRequireDefault(require("./categories/alternateResponses"));
|
|
45
|
-
|
|
46
21
|
var _choices = _interopRequireDefault(require("./choices"));
|
|
47
|
-
|
|
22
|
+
var _choice = _interopRequireDefault(require("./choices/choice"));
|
|
23
|
+
var _choicePreview = _interopRequireDefault(require("./categories/choice-preview"));
|
|
48
24
|
var _builder = require("./builder");
|
|
49
|
-
|
|
50
25
|
var _header = _interopRequireDefault(require("./header"));
|
|
51
|
-
|
|
52
26
|
var _utils2 = require("../utils");
|
|
53
|
-
|
|
54
27
|
var _translator = _interopRequireDefault(require("@pie-lib/translator"));
|
|
28
|
+
const {
|
|
29
|
+
translator
|
|
30
|
+
} = _translator.default;
|
|
31
|
+
const {
|
|
32
|
+
dropdown,
|
|
33
|
+
Panel,
|
|
34
|
+
toggle,
|
|
35
|
+
radio,
|
|
36
|
+
numberField
|
|
37
|
+
} = _configUi.settings;
|
|
38
|
+
const {
|
|
39
|
+
Provider: IdProvider
|
|
40
|
+
} = _drag.uid;
|
|
41
|
+
|
|
42
|
+
// Simple wrapper to render math in DragOverlay portal
|
|
43
|
+
class DragPreviewWrapper extends _react.default.Component {
|
|
44
|
+
constructor(...args) {
|
|
45
|
+
super(...args);
|
|
46
|
+
(0, _defineProperty2.default)(this, "containerRef", /*#__PURE__*/_react.default.createRef());
|
|
47
|
+
}
|
|
48
|
+
componentDidMount() {
|
|
49
|
+
if (this.containerRef.current) {
|
|
50
|
+
setTimeout(() => (0, _mathRendering.renderMath)(this.containerRef.current), 0);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
render() {
|
|
54
|
+
return /*#__PURE__*/_react.default.createElement("div", {
|
|
55
|
+
ref: this.containerRef
|
|
56
|
+
}, this.props.children);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
const StyledHeader = (0, _styles.styled)(_header.default)(({
|
|
60
|
+
theme
|
|
61
|
+
}) => ({
|
|
62
|
+
marginBottom: theme.spacing(2)
|
|
63
|
+
}));
|
|
64
|
+
const StyledInputContainer = (0, _styles.styled)(_configUi.InputContainer)(({
|
|
65
|
+
theme
|
|
66
|
+
}) => ({
|
|
67
|
+
width: '100%',
|
|
68
|
+
paddingTop: theme.spacing(2),
|
|
69
|
+
marginBottom: theme.spacing(2)
|
|
70
|
+
}));
|
|
71
|
+
const ErrorText = (0, _styles.styled)('div')(({
|
|
72
|
+
theme
|
|
73
|
+
}) => ({
|
|
74
|
+
fontSize: theme.typography.fontSize - 2,
|
|
75
|
+
color: theme.palette.error.main,
|
|
76
|
+
paddingTop: theme.spacing(1)
|
|
77
|
+
}));
|
|
78
|
+
class Design extends _react.default.Component {
|
|
79
|
+
constructor(_props) {
|
|
80
|
+
super(_props);
|
|
81
|
+
(0, _defineProperty2.default)(this, "updateModel", props => {
|
|
82
|
+
const {
|
|
83
|
+
model,
|
|
84
|
+
onChange
|
|
85
|
+
} = this.props;
|
|
86
|
+
const updatedModel = {
|
|
87
|
+
...model,
|
|
88
|
+
...props
|
|
89
|
+
};
|
|
90
|
+
updatedModel.choices = updatedModel.choices.map(c => ({
|
|
91
|
+
...c,
|
|
92
|
+
categoryCount: this.checkAllowMultiplePlacements(updatedModel.allowMultiplePlacementsEnabled, c)
|
|
93
|
+
}));
|
|
55
94
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
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; }
|
|
59
|
-
|
|
60
|
-
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); }; }
|
|
61
|
-
|
|
62
|
-
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; } }
|
|
63
|
-
|
|
64
|
-
var translator = _translator["default"].translator;
|
|
65
|
-
var dropdown = _configUi.settings.dropdown,
|
|
66
|
-
Panel = _configUi.settings.Panel,
|
|
67
|
-
toggle = _configUi.settings.toggle,
|
|
68
|
-
radio = _configUi.settings.radio,
|
|
69
|
-
numberField = _configUi.settings.numberField;
|
|
70
|
-
var IdProvider = _drag.uid.Provider;
|
|
71
|
-
|
|
72
|
-
var Design = /*#__PURE__*/function (_React$Component) {
|
|
73
|
-
(0, _inherits2["default"])(Design, _React$Component);
|
|
74
|
-
|
|
75
|
-
var _super = _createSuper(Design);
|
|
76
|
-
|
|
77
|
-
function Design(_props) {
|
|
78
|
-
var _this;
|
|
79
|
-
|
|
80
|
-
(0, _classCallCheck2["default"])(this, Design);
|
|
81
|
-
_this = _super.call(this, _props);
|
|
82
|
-
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "updateModel", function (props) {
|
|
83
|
-
var _this$props = _this.props,
|
|
84
|
-
model = _this$props.model,
|
|
85
|
-
onChange = _this$props.onChange;
|
|
86
|
-
|
|
87
|
-
var updatedModel = _objectSpread(_objectSpread({}, model), props);
|
|
88
|
-
|
|
89
|
-
updatedModel.choices = updatedModel.choices.map(function (c) {
|
|
90
|
-
return _objectSpread(_objectSpread({}, c), {}, {
|
|
91
|
-
categoryCount: _this.checkAllowMultiplePlacements(updatedModel.allowMultiplePlacementsEnabled, c)
|
|
92
|
-
});
|
|
93
|
-
}); //Ensure that there are no extra choices in correctResponse, if the user has decided that only one choice may be used.
|
|
94
|
-
|
|
95
|
-
updatedModel.correctResponse = (0, _categorize.ensureNoExtraChoicesInAnswer)(updatedModel.correctResponse || [], updatedModel.choices); //Ensure that there are no extra choices in alternate responses, if the user has decided that only one choice may be used.
|
|
95
|
+
//Ensure that there are no extra choices in correctResponse, if the user has decided that only one choice may be used.
|
|
96
|
+
updatedModel.correctResponse = (0, _categorize.ensureNoExtraChoicesInAnswer)(updatedModel.correctResponse || [], updatedModel.choices);
|
|
96
97
|
|
|
97
|
-
|
|
98
|
+
//Ensure that there are no extra choices in alternate responses, if the user has decided that only one choice may be used.
|
|
99
|
+
updatedModel.correctResponse = (0, _categorize.ensureNoExtraChoicesInAlternate)(updatedModel.correctResponse || [], updatedModel.choices);
|
|
98
100
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
categoryCount: h.categoryCount
|
|
110
|
-
};
|
|
111
|
-
}); // ensure that maxChoicesPerCategory is reset if author switch back the corresponding switch (allowMaxChoicesPerCategory)
|
|
101
|
+
//clean categories
|
|
102
|
+
updatedModel.categories = updatedModel.categories.map(c => ({
|
|
103
|
+
id: c.id,
|
|
104
|
+
label: c.label
|
|
105
|
+
}));
|
|
106
|
+
updatedModel.choices = updatedModel.choices.map(h => ({
|
|
107
|
+
id: h.id,
|
|
108
|
+
content: h.content,
|
|
109
|
+
categoryCount: h.categoryCount
|
|
110
|
+
}));
|
|
112
111
|
|
|
112
|
+
// ensure that maxChoicesPerCategory is reset if author switch back the corresponding switch (allowMaxChoicesPerCategory)
|
|
113
113
|
updatedModel.maxChoicesPerCategory = updatedModel.allowMaxChoicesPerCategory ? updatedModel.maxChoicesPerCategory : 0;
|
|
114
114
|
onChange(updatedModel);
|
|
115
115
|
});
|
|
116
|
-
(0, _defineProperty2
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
var _this$props3 = _this.props,
|
|
126
|
-
model = _this$props3.model,
|
|
127
|
-
onChange = _this$props3.onChange;
|
|
128
|
-
onChange(_objectSpread(_objectSpread({}, model), {}, {
|
|
129
|
-
teacherInstructions: teacherInstructions
|
|
130
|
-
}));
|
|
116
|
+
(0, _defineProperty2.default)(this, "changeRationale", rationale => {
|
|
117
|
+
const {
|
|
118
|
+
model,
|
|
119
|
+
onChange
|
|
120
|
+
} = this.props;
|
|
121
|
+
onChange({
|
|
122
|
+
...model,
|
|
123
|
+
rationale
|
|
124
|
+
});
|
|
131
125
|
});
|
|
132
|
-
(0, _defineProperty2
|
|
133
|
-
|
|
134
|
-
|
|
126
|
+
(0, _defineProperty2.default)(this, "changeTeacherInstructions", teacherInstructions => {
|
|
127
|
+
const {
|
|
128
|
+
model,
|
|
129
|
+
onChange
|
|
130
|
+
} = this.props;
|
|
131
|
+
onChange({
|
|
132
|
+
...model,
|
|
133
|
+
teacherInstructions
|
|
135
134
|
});
|
|
136
135
|
});
|
|
137
|
-
(0, _defineProperty2
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
_this.updateModel({
|
|
141
|
-
correctResponse: (correctResponse || []).map(function (cr) {
|
|
142
|
-
return _objectSpread(_objectSpread({}, cr), {}, {
|
|
143
|
-
alternateResponses: [].concat((0, _toConsumableArray2["default"])(cr.alternateResponses || []), [[]])
|
|
144
|
-
});
|
|
145
|
-
})
|
|
136
|
+
(0, _defineProperty2.default)(this, "changeFeedback", feedback => {
|
|
137
|
+
this.updateModel({
|
|
138
|
+
feedback
|
|
146
139
|
});
|
|
147
140
|
});
|
|
148
|
-
(0, _defineProperty2
|
|
149
|
-
|
|
150
|
-
|
|
141
|
+
(0, _defineProperty2.default)(this, "onAddAlternateResponse", () => {
|
|
142
|
+
const {
|
|
143
|
+
model: {
|
|
144
|
+
correctResponse
|
|
145
|
+
}
|
|
146
|
+
} = this.props;
|
|
147
|
+
this.updateModel({
|
|
148
|
+
correctResponse: (correctResponse || []).map(cr => ({
|
|
149
|
+
...cr,
|
|
150
|
+
alternateResponses: [...(cr.alternateResponses || []), []]
|
|
151
|
+
}))
|
|
151
152
|
});
|
|
152
153
|
});
|
|
153
|
-
(0, _defineProperty2
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
154
|
+
(0, _defineProperty2.default)(this, "onPromptChanged", prompt => this.updateModel({
|
|
155
|
+
prompt
|
|
156
|
+
}));
|
|
157
|
+
(0, _defineProperty2.default)(this, "onRemoveAlternateResponse", index => {
|
|
158
|
+
const {
|
|
159
|
+
model: {
|
|
160
|
+
correctResponse
|
|
161
|
+
}
|
|
162
|
+
} = this.props;
|
|
163
|
+
this.updateModel({
|
|
164
|
+
correctResponse: (correctResponse || []).map(cr => ({
|
|
165
|
+
...cr,
|
|
166
|
+
alternateResponses: (cr.alternateResponses || []).filter((alt, altIndex) => altIndex !== index)
|
|
167
|
+
}))
|
|
164
168
|
});
|
|
165
169
|
});
|
|
166
|
-
(0, _defineProperty2
|
|
167
|
-
|
|
170
|
+
(0, _defineProperty2.default)(this, "countChoiceInCorrectResponse", choice => {
|
|
171
|
+
const {
|
|
172
|
+
model
|
|
173
|
+
} = this.props;
|
|
168
174
|
return (0, _categorize.countInAnswer)(choice.id, model.correctResponse);
|
|
169
175
|
});
|
|
170
|
-
(0, _defineProperty2
|
|
176
|
+
(0, _defineProperty2.default)(this, "checkAllowMultiplePlacements", (allowMultiplePlacements, c) => {
|
|
171
177
|
if (allowMultiplePlacements === _utils2.multiplePlacements.enabled) {
|
|
172
178
|
return 0;
|
|
173
179
|
}
|
|
174
|
-
|
|
175
180
|
if (allowMultiplePlacements === _utils2.multiplePlacements.disabled) {
|
|
176
181
|
return 1;
|
|
177
182
|
}
|
|
178
|
-
|
|
179
183
|
return c.categoryCount || 0;
|
|
180
184
|
});
|
|
181
|
-
(0, _defineProperty2
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
185
|
+
(0, _defineProperty2.default)(this, "isAlertModalOpened", () => {
|
|
186
|
+
const {
|
|
187
|
+
model
|
|
188
|
+
} = this.props;
|
|
189
|
+
const {
|
|
190
|
+
maxChoicesPerCategory = 0
|
|
191
|
+
} = model || {};
|
|
192
|
+
const maxChoices = (0, _utils2.getMaxCategoryChoices)(model);
|
|
193
|
+
// when maxChoicesPerCategory is set to 0, there is no limit so modal should not be opened
|
|
190
194
|
return maxChoicesPerCategory !== 0 ? maxChoices > maxChoicesPerCategory : false;
|
|
191
195
|
});
|
|
192
|
-
(0, _defineProperty2
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
196
|
+
(0, _defineProperty2.default)(this, "onAlertModalCancel", () => {
|
|
197
|
+
const {
|
|
198
|
+
model
|
|
199
|
+
} = this.props;
|
|
200
|
+
const maxChoices = (0, _utils2.getMaxCategoryChoices)(model);
|
|
201
|
+
this.updateModel({
|
|
197
202
|
maxChoicesPerCategory: maxChoices
|
|
198
203
|
});
|
|
199
204
|
});
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
_ref2$maxImageWidth = _ref2.maxImageWidth,
|
|
237
|
-
maxImageWidth = _ref2$maxImageWidth === void 0 ? {} : _ref2$maxImageWidth,
|
|
238
|
-
_ref2$maxPlacements = _ref2.maxPlacements,
|
|
239
|
-
maxPlacements = _ref2$maxPlacements === void 0 ? {} : _ref2$maxPlacements,
|
|
240
|
-
_ref2$minCategoriesPe = _ref2.minCategoriesPerRow,
|
|
241
|
-
minCategoriesPerRow = _ref2$minCategoriesPe === void 0 ? 1 : _ref2$minCategoriesPe,
|
|
242
|
-
_ref2$partialScoring = _ref2.partialScoring,
|
|
243
|
-
partialScoring = _ref2$partialScoring === void 0 ? {} : _ref2$partialScoring,
|
|
244
|
-
_ref2$prompt = _ref2.prompt,
|
|
245
|
-
prompt = _ref2$prompt === void 0 ? {} : _ref2$prompt,
|
|
246
|
-
_ref2$rationale = _ref2.rationale,
|
|
247
|
-
rationale = _ref2$rationale === void 0 ? {} : _ref2$rationale,
|
|
248
|
-
_ref2$scoringType = _ref2.scoringType,
|
|
249
|
-
scoringType = _ref2$scoringType === void 0 ? {} : _ref2$scoringType,
|
|
250
|
-
settingsPanelDisabled = _ref2.settingsPanelDisabled,
|
|
251
|
-
_ref2$spellCheck = _ref2.spellCheck,
|
|
252
|
-
spellCheck = _ref2$spellCheck === void 0 ? {} : _ref2$spellCheck,
|
|
253
|
-
_ref2$studentInstruct = _ref2.studentInstructions,
|
|
254
|
-
studentInstructions = _ref2$studentInstruct === void 0 ? {} : _ref2$studentInstruct,
|
|
255
|
-
_ref2$teacherInstruct = _ref2.teacherInstructions,
|
|
256
|
-
teacherInstructions = _ref2$teacherInstruct === void 0 ? {} : _ref2$teacherInstruct,
|
|
257
|
-
_ref2$withRubric = _ref2.withRubric,
|
|
258
|
-
withRubric = _ref2$withRubric === void 0 ? {} : _ref2$withRubric,
|
|
259
|
-
_ref2$mathMlOptions = _ref2.mathMlOptions,
|
|
260
|
-
mathMlOptions = _ref2$mathMlOptions === void 0 ? {} : _ref2$mathMlOptions,
|
|
261
|
-
_ref2$language = _ref2.language,
|
|
262
|
-
language = _ref2$language === void 0 ? {} : _ref2$language,
|
|
263
|
-
_ref2$languageChoices = _ref2.languageChoices,
|
|
264
|
-
languageChoices = _ref2$languageChoices === void 0 ? {} : _ref2$languageChoices,
|
|
265
|
-
_ref2$allowMaxAnswerC = _ref2.allowMaxAnswerChoices,
|
|
266
|
-
allowMaxAnswerChoices = _ref2$allowMaxAnswerC === void 0 ? {} : _ref2$allowMaxAnswerC;
|
|
267
|
-
|
|
268
|
-
var _ref3 = model || {},
|
|
269
|
-
allowAlternateEnabled = _ref3.allowAlternateEnabled,
|
|
270
|
-
allowMaxChoicesPerCategory = _ref3.allowMaxChoicesPerCategory,
|
|
271
|
-
errors = _ref3.errors,
|
|
272
|
-
feedbackEnabled = _ref3.feedbackEnabled,
|
|
273
|
-
maxChoicesPerCategory = _ref3.maxChoicesPerCategory,
|
|
274
|
-
promptEnabled = _ref3.promptEnabled,
|
|
275
|
-
rationaleEnabled = _ref3.rationaleEnabled,
|
|
276
|
-
spellCheckEnabled = _ref3.spellCheckEnabled,
|
|
277
|
-
teacherInstructionsEnabled = _ref3.teacherInstructionsEnabled,
|
|
278
|
-
toolbarEditorPosition = _ref3.toolbarEditorPosition,
|
|
279
|
-
extraCSSRules = _ref3.extraCSSRules;
|
|
205
|
+
(0, _defineProperty2.default)(this, "onDragStart", event => {
|
|
206
|
+
const {
|
|
207
|
+
active
|
|
208
|
+
} = event;
|
|
209
|
+
const draggedItem = active.data.current;
|
|
210
|
+
this.setState({
|
|
211
|
+
activeDragItem: draggedItem
|
|
212
|
+
});
|
|
213
|
+
});
|
|
214
|
+
(0, _defineProperty2.default)(this, "onDragEnd", event => {
|
|
215
|
+
const {
|
|
216
|
+
active,
|
|
217
|
+
over
|
|
218
|
+
} = event;
|
|
219
|
+
this.setState({
|
|
220
|
+
activeDragItem: null
|
|
221
|
+
});
|
|
222
|
+
if (!over || !active) {
|
|
223
|
+
return;
|
|
224
|
+
}
|
|
225
|
+
const {
|
|
226
|
+
model
|
|
227
|
+
} = this.props;
|
|
228
|
+
const {
|
|
229
|
+
allowAlternateEnabled
|
|
230
|
+
} = model;
|
|
231
|
+
const activeData = active.data.current;
|
|
232
|
+
const overData = over.data.current;
|
|
233
|
+
|
|
234
|
+
// moving a choice between categories (correct response)
|
|
235
|
+
if (activeData.type === 'choice-preview' && overData.type === 'category') {
|
|
236
|
+
// Extract original choice.id - if DraggableChoice uses the unique id in data, extract the first part
|
|
237
|
+
// Format: ${choice.id}-${categoryId}-${choiceIndex} or ${choice.id}-${categoryId}-${choiceIndex}-alt-${alternateResponseIndex}
|
|
238
|
+
const choiceId = activeData.choice?.id || (typeof activeData.id === 'string' ? activeData.id.split('-')[0] : activeData.id);
|
|
239
|
+
this.moveChoice(choiceId, activeData.categoryId, overData.id, activeData.choiceIndex || 0);
|
|
240
|
+
}
|
|
280
241
|
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
242
|
+
// placing a choice into a category (correct response)
|
|
243
|
+
if (activeData.type === 'choice' && overData.type === 'category') {
|
|
244
|
+
this.addChoiceToCategory({
|
|
245
|
+
id: activeData.id
|
|
246
|
+
}, overData.id);
|
|
247
|
+
}
|
|
285
248
|
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
};
|
|
294
|
-
var categories = (0, _builder.buildCategories)(model.categories || [], model.choices || [], model.correctResponse || []);
|
|
295
|
-
var alternateResponses = (0, _builder.buildAlternateResponses)(model.categories || [], model.choices || [], model.correctResponse || []);
|
|
296
|
-
var choices = model.choices.map(function (c) {
|
|
297
|
-
c.correctResponseCount = _this2.countChoiceInCorrectResponse(c); // ensure categoryCount is set even though updatedModel hasn't been called
|
|
249
|
+
// moving a choice between categories (alternate response)
|
|
250
|
+
if (activeData.type === 'choice-preview' && overData.type === 'category-alternate') {
|
|
251
|
+
const toAlternateIndex = overData.alternateResponseIndex;
|
|
252
|
+
// Extract original choice.id - if DraggableChoice uses the unique id in data, extract the first part
|
|
253
|
+
const choiceId = activeData.choice?.id || (typeof activeData.id === 'string' ? activeData.id.split('-')[0] : activeData.id);
|
|
254
|
+
this.moveChoiceInAlternate(choiceId, activeData.categoryId, overData.id, activeData.choiceIndex || 0, toAlternateIndex);
|
|
255
|
+
}
|
|
298
256
|
|
|
299
|
-
|
|
300
|
-
|
|
257
|
+
// placing a choice into a category (alternate response)
|
|
258
|
+
if (allowAlternateEnabled && activeData.type === 'choice' && overData.type === 'category-alternate') {
|
|
259
|
+
const choiceId = activeData.id;
|
|
260
|
+
const categoryId = overData.id;
|
|
261
|
+
const toAlternateResponseIndex = overData.alternateResponseIndex;
|
|
262
|
+
this.addChoiceToAlternateCategory({
|
|
263
|
+
id: choiceId
|
|
264
|
+
}, categoryId, toAlternateResponseIndex);
|
|
265
|
+
}
|
|
266
|
+
});
|
|
267
|
+
(0, _defineProperty2.default)(this, "addChoiceToCategory", (addedChoice, categoryId) => {
|
|
268
|
+
const {
|
|
269
|
+
model
|
|
270
|
+
} = this.props;
|
|
271
|
+
let {
|
|
272
|
+
choices = [],
|
|
273
|
+
correctResponse = [],
|
|
274
|
+
maxChoicesPerCategory = 0
|
|
275
|
+
} = model || {};
|
|
276
|
+
const choice = (choices || []).find(choice => choice.id === addedChoice.id);
|
|
277
|
+
let newCorrectResponse = (0, _categorize.moveChoiceToCategory)(addedChoice.id, undefined, categoryId, 0, correctResponse);
|
|
278
|
+
if (choice.categoryCount !== 0) {
|
|
279
|
+
newCorrectResponse = (0, _categorize.verifyAllowMultiplePlacements)(addedChoice, categoryId, newCorrectResponse);
|
|
280
|
+
}
|
|
281
|
+
const maxCategoryChoices = (0, _utils2.getMaxCategoryChoices)(model);
|
|
282
|
+
this.updateModel({
|
|
283
|
+
correctResponse: newCorrectResponse,
|
|
284
|
+
maxChoicesPerCategory: maxChoicesPerCategory !== 0 && maxChoicesPerCategory < maxCategoryChoices ? maxChoicesPerCategory + 1 : maxChoicesPerCategory
|
|
301
285
|
});
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
max: 6
|
|
311
|
-
}),
|
|
312
|
-
choicesPosition: choicesPosition.settings && radio(choicesPosition.label, ['below', 'above', 'left', 'right']),
|
|
313
|
-
allowMultiplePlacementsEnabled: allowMultiplePlacements.settings && dropdown(allowMultiplePlacements.label, [_utils2.multiplePlacements.enabled, _utils2.multiplePlacements.disabled, _utils2.multiplePlacements.perChoice]),
|
|
314
|
-
maxAnswerChoices: allowMaxAnswerChoices.settings && numberField(allowMaxAnswerChoices.label, {
|
|
315
|
-
label: '',
|
|
316
|
-
min: (choices === null || choices === void 0 ? void 0 : choices.length) || 0,
|
|
317
|
-
max: 30
|
|
318
|
-
}),
|
|
319
|
-
allowMaxChoicesPerCategory: maxPlacements.settings && toggle(maxPlacements.label),
|
|
320
|
-
maxChoicesPerCategory: allowMaxChoicesPerCategory === true && numberField(maxPlacements.label, {
|
|
321
|
-
label: '',
|
|
322
|
-
min: 0,
|
|
323
|
-
max: 30
|
|
324
|
-
}),
|
|
325
|
-
promptEnabled: prompt.settings && toggle(prompt.label),
|
|
326
|
-
feedbackEnabled: feedback.settings && toggle(feedback.label),
|
|
327
|
-
allowAlternateEnabled: allowAlternate.settings && toggle(allowAlternate.label),
|
|
328
|
-
'language.enabled': language.settings && toggle(language.label, true),
|
|
329
|
-
language: language.settings && language.enabled && dropdown(languageChoices.label, languageChoices.options)
|
|
330
|
-
};
|
|
331
|
-
var panelProperties = {
|
|
332
|
-
teacherInstructionsEnabled: teacherInstructions.settings && toggle(teacherInstructions.label),
|
|
333
|
-
studentInstructionsEnabled: studentInstructions.settings && toggle(studentInstructions.label),
|
|
334
|
-
rationaleEnabled: rationale.settings && toggle(rationale.label),
|
|
335
|
-
spellCheckEnabled: spellCheck.settings && toggle(spellCheck.label),
|
|
336
|
-
scoringType: scoringType.settings && radio(scoringType.label, ['auto', 'rubric']),
|
|
337
|
-
rubricEnabled: (withRubric === null || withRubric === void 0 ? void 0 : withRubric.settings) && toggle(withRubric === null || withRubric === void 0 ? void 0 : withRubric.label)
|
|
338
|
-
};
|
|
339
|
-
var isOpened = this.isAlertModalOpened();
|
|
340
|
-
var alertMaxChoicesMsg = translator.t('translation:categorize:maxChoicesPerCategoryRestriction', {
|
|
341
|
-
lng: model.language,
|
|
342
|
-
maxChoicesPerCategory: maxChoicesPerCategory
|
|
286
|
+
});
|
|
287
|
+
(0, _defineProperty2.default)(this, "deleteChoiceFromCategory", (category, choice, choiceIndex) => {
|
|
288
|
+
const {
|
|
289
|
+
model
|
|
290
|
+
} = this.props;
|
|
291
|
+
const correctResponse = (0, _categorize.removeChoiceFromCategory)(choice.id, category.id, choiceIndex, model.correctResponse);
|
|
292
|
+
this.updateModel({
|
|
293
|
+
correctResponse
|
|
343
294
|
});
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
}
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
295
|
+
});
|
|
296
|
+
(0, _defineProperty2.default)(this, "moveChoice", (choiceId, from, to, choiceIndex) => {
|
|
297
|
+
const {
|
|
298
|
+
model
|
|
299
|
+
} = this.props;
|
|
300
|
+
let {
|
|
301
|
+
choices,
|
|
302
|
+
correctResponse = [],
|
|
303
|
+
maxChoicesPerCategory = 0
|
|
304
|
+
} = model || {};
|
|
305
|
+
const choice = (choices || []).find(choice => choice.id === choiceId);
|
|
306
|
+
if (to === from || !choice) {
|
|
307
|
+
return;
|
|
308
|
+
}
|
|
309
|
+
if (choice.categoryCount !== 0) {
|
|
310
|
+
correctResponse = (0, _categorize.moveChoiceToCategory)(choice.id, from, to, choiceIndex, correctResponse);
|
|
311
|
+
correctResponse = (0, _categorize.verifyAllowMultiplePlacements)(choice, to, correctResponse);
|
|
312
|
+
} else if (choice.categoryCount === 0) {
|
|
313
|
+
correctResponse = (0, _categorize.moveChoiceToCategory)(choice.id, undefined, to, 0, correctResponse);
|
|
314
|
+
}
|
|
315
|
+
const maxCategoryChoices = (0, _utils2.getMaxCategoryChoices)(model);
|
|
316
|
+
// when maxChoicesPerCategory is set to 0, there is no limit so it should not be updated
|
|
317
|
+
this.updateModel({
|
|
318
|
+
correctResponse,
|
|
319
|
+
maxChoicesPerCategory: maxChoicesPerCategory !== 0 && maxChoicesPerCategory < maxCategoryChoices ? maxChoicesPerCategory + 1 : maxChoicesPerCategory
|
|
320
|
+
});
|
|
321
|
+
});
|
|
322
|
+
// methods for alternate responses
|
|
323
|
+
(0, _defineProperty2.default)(this, "addChoiceToAlternateCategory", (addedChoice, categoryId, altIndex) => {
|
|
324
|
+
const {
|
|
325
|
+
model
|
|
326
|
+
} = this.props;
|
|
327
|
+
const {
|
|
328
|
+
correctResponse,
|
|
329
|
+
choices,
|
|
330
|
+
maxChoicesPerCategory = 0
|
|
331
|
+
} = model;
|
|
332
|
+
const choice = choices.find(c => c.id === addedChoice.id);
|
|
333
|
+
correctResponse.forEach(a => {
|
|
334
|
+
if (a.category === categoryId) {
|
|
335
|
+
a.alternateResponses = a.alternateResponses || [];
|
|
336
|
+
if (a.alternateResponses[altIndex] === undefined) {
|
|
337
|
+
a.alternateResponses[altIndex] = [];
|
|
338
|
+
}
|
|
339
|
+
a.alternateResponses[altIndex].push(addedChoice.id);
|
|
340
|
+
if (choice.categoryCount && choice.categoryCount !== 0) {
|
|
341
|
+
a.alternateResponses[altIndex] = a.alternateResponses[altIndex].reduce((acc, currentValue) => {
|
|
342
|
+
if (currentValue === choice.id) {
|
|
343
|
+
const foundIndex = acc.findIndex(c => c === choice.id);
|
|
344
|
+
if (foundIndex === -1) {
|
|
345
|
+
acc.push(currentValue);
|
|
346
|
+
}
|
|
347
|
+
} else {
|
|
348
|
+
acc.push(currentValue);
|
|
349
|
+
}
|
|
350
|
+
return acc;
|
|
351
|
+
}, []);
|
|
352
|
+
}
|
|
353
|
+
return a;
|
|
354
|
+
} else {
|
|
355
|
+
if (a.alternateResponses[altIndex] && choice.categoryCount !== 0) {
|
|
356
|
+
a.alternateResponses[altIndex] = a.alternateResponses[altIndex].filter(c => c !== addedChoice.id);
|
|
357
|
+
return a;
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
return a;
|
|
361
|
+
});
|
|
362
|
+
const maxCategoryChoices = (0, _utils2.getMaxCategoryChoices)(model);
|
|
363
|
+
// when maxChoicesPerCategory is set to 0, there is no limit so it should not be updated
|
|
364
|
+
this.updateModel({
|
|
365
|
+
correctResponse,
|
|
366
|
+
maxChoicesPerCategory: maxChoicesPerCategory !== 0 && maxChoicesPerCategory < maxCategoryChoices ? maxChoicesPerCategory + 1 : maxChoicesPerCategory
|
|
367
|
+
});
|
|
368
|
+
});
|
|
369
|
+
(0, _defineProperty2.default)(this, "moveChoiceInAlternate", (choiceId, from, to, choiceIndex, alternateIndex) => {
|
|
370
|
+
const {
|
|
371
|
+
model
|
|
372
|
+
} = this.props;
|
|
373
|
+
let {
|
|
374
|
+
choices,
|
|
375
|
+
correctResponse = [],
|
|
376
|
+
maxChoicesPerCategory = 0
|
|
377
|
+
} = model || {};
|
|
378
|
+
const choice = (choices || []).find(choice => choice.id === choiceId);
|
|
379
|
+
correctResponse = (0, _categorize.moveChoiceToAlternate)(choiceId, from, to, choiceIndex, correctResponse, alternateIndex, choice?.categoryCount);
|
|
380
|
+
const maxCategoryChoices = (0, _utils2.getMaxCategoryChoices)(model);
|
|
381
|
+
// when maxChoicesPerCategory is set to 0, there is no limit so it should not be updated
|
|
382
|
+
this.updateModel({
|
|
383
|
+
correctResponse,
|
|
384
|
+
maxChoicesPerCategory: maxChoicesPerCategory !== 0 && maxChoicesPerCategory < maxCategoryChoices ? maxChoicesPerCategory + 1 : maxChoicesPerCategory
|
|
385
|
+
});
|
|
386
|
+
});
|
|
387
|
+
(0, _defineProperty2.default)(this, "deleteChoiceFromAlternateCategory", (category, choice, choiceIndex, altIndex) => {
|
|
388
|
+
const {
|
|
389
|
+
model
|
|
390
|
+
} = this.props;
|
|
391
|
+
const correctResponse = (0, _categorize.removeChoiceFromAlternate)(choice.id, category.id, choiceIndex, altIndex, model.correctResponse);
|
|
392
|
+
this.updateModel({
|
|
393
|
+
correctResponse
|
|
394
|
+
});
|
|
395
|
+
});
|
|
396
|
+
(0, _defineProperty2.default)(this, "renderDragOverlay", () => {
|
|
397
|
+
const {
|
|
398
|
+
activeDragItem
|
|
399
|
+
} = this.state;
|
|
400
|
+
const {
|
|
401
|
+
model,
|
|
402
|
+
configuration
|
|
403
|
+
} = this.props;
|
|
404
|
+
if (!activeDragItem) return null;
|
|
405
|
+
if (activeDragItem.type === 'choice') {
|
|
406
|
+
const choice = model.choices?.find(c => c.id === activeDragItem.id);
|
|
407
|
+
if (!choice) return null;
|
|
408
|
+
return /*#__PURE__*/_react.default.createElement(_choice.default, {
|
|
409
|
+
choice: choice,
|
|
410
|
+
configuration: configuration
|
|
411
|
+
});
|
|
412
|
+
} else if (activeDragItem.type === 'choice-preview' && activeDragItem.alternateResponseIndex === undefined) {
|
|
413
|
+
const choice = model.choices?.find(c => c.id === activeDragItem.id);
|
|
414
|
+
if (!choice) return null;
|
|
415
|
+
return /*#__PURE__*/_react.default.createElement(_choicePreview.default, {
|
|
416
|
+
choice: choice
|
|
417
|
+
});
|
|
418
|
+
} else if (activeDragItem.type === 'choice-preview' && activeDragItem.alternateResponseIndex !== undefined) {
|
|
419
|
+
const choice = model.choices?.find(c => c.id === activeDragItem.id);
|
|
420
|
+
if (!choice) return null;
|
|
421
|
+
return /*#__PURE__*/_react.default.createElement(_choicePreview.default, {
|
|
422
|
+
choice: choice,
|
|
423
|
+
alternateResponseIndex: activeDragItem.alternateResponseIndex
|
|
424
|
+
});
|
|
425
|
+
}
|
|
426
|
+
return null;
|
|
427
|
+
});
|
|
428
|
+
this.uid = _props.uid || _drag.uid.generateId();
|
|
429
|
+
this.state = {
|
|
430
|
+
activeDragItem: null
|
|
431
|
+
};
|
|
432
|
+
}
|
|
433
|
+
render() {
|
|
434
|
+
const {
|
|
435
|
+
configuration,
|
|
436
|
+
imageSupport,
|
|
437
|
+
model,
|
|
438
|
+
uploadSoundSupport,
|
|
439
|
+
onConfigurationChanged
|
|
440
|
+
} = this.props;
|
|
441
|
+
const {
|
|
442
|
+
allowAlternate = {},
|
|
443
|
+
allowMultiplePlacements = {},
|
|
444
|
+
baseInputConfiguration = {},
|
|
445
|
+
categoriesPerRow = {},
|
|
446
|
+
choicesPosition = {},
|
|
447
|
+
contentDimensions = {},
|
|
448
|
+
feedback = {},
|
|
449
|
+
lockChoiceOrder = {},
|
|
450
|
+
maxImageHeight = {},
|
|
451
|
+
maxImageWidth = {},
|
|
452
|
+
maxPlacements = {},
|
|
453
|
+
minCategoriesPerRow = 1,
|
|
454
|
+
partialScoring = {},
|
|
455
|
+
prompt = {},
|
|
456
|
+
rationale = {},
|
|
457
|
+
scoringType = {},
|
|
458
|
+
settingsPanelDisabled,
|
|
459
|
+
spellCheck = {},
|
|
460
|
+
studentInstructions = {},
|
|
461
|
+
teacherInstructions = {},
|
|
462
|
+
withRubric = {},
|
|
463
|
+
mathMlOptions = {},
|
|
464
|
+
language = {},
|
|
465
|
+
languageChoices = {},
|
|
466
|
+
allowMaxAnswerChoices = {}
|
|
467
|
+
} = configuration || {};
|
|
468
|
+
const {
|
|
469
|
+
allowAlternateEnabled,
|
|
470
|
+
allowMaxChoicesPerCategory,
|
|
471
|
+
errors,
|
|
472
|
+
feedbackEnabled,
|
|
473
|
+
maxChoicesPerCategory,
|
|
474
|
+
promptEnabled,
|
|
475
|
+
rationaleEnabled,
|
|
476
|
+
spellCheckEnabled,
|
|
477
|
+
teacherInstructionsEnabled,
|
|
478
|
+
toolbarEditorPosition,
|
|
479
|
+
extraCSSRules
|
|
480
|
+
} = model || {};
|
|
481
|
+
const {
|
|
482
|
+
prompt: promptError,
|
|
483
|
+
rationale: rationaleError,
|
|
484
|
+
teacherInstructions: teacherInstructionsError
|
|
485
|
+
} = errors || {};
|
|
486
|
+
const toolbarOpts = {
|
|
487
|
+
position: toolbarEditorPosition === 'top' ? 'top' : 'bottom'
|
|
488
|
+
};
|
|
489
|
+
const config = model.config || {};
|
|
490
|
+
config.choices = config.choices || {
|
|
491
|
+
label: '',
|
|
492
|
+
columns: 2
|
|
493
|
+
};
|
|
494
|
+
const categories = (0, _builder.buildCategories)(model.categories || [], model.choices || [], model.correctResponse || []);
|
|
495
|
+
const alternateResponses = (0, _builder.buildAlternateResponses)(model.categories || [], model.choices || [], model.correctResponse || []);
|
|
496
|
+
const choices = model.choices.map(c => {
|
|
497
|
+
c.correctResponseCount = this.countChoiceInCorrectResponse(c);
|
|
498
|
+
// ensure categoryCount is set even though updatedModel hasn't been called
|
|
499
|
+
c.categoryCount = this.checkAllowMultiplePlacements(model.allowMultiplePlacementsEnabled, c);
|
|
500
|
+
return c;
|
|
501
|
+
});
|
|
502
|
+
const defaultImageMaxWidth = maxImageWidth && maxImageWidth.prompt;
|
|
503
|
+
const defaultImageMaxHeight = maxImageHeight && maxImageHeight.prompt;
|
|
504
|
+
const panelSettings = {
|
|
505
|
+
partialScoring: partialScoring.settings && toggle(partialScoring.label),
|
|
506
|
+
lockChoiceOrder: lockChoiceOrder.settings && toggle(lockChoiceOrder.label),
|
|
507
|
+
categoriesPerRow: categoriesPerRow.settings && numberField(categoriesPerRow.label, {
|
|
508
|
+
label: categoriesPerRow.label,
|
|
509
|
+
min: minCategoriesPerRow,
|
|
510
|
+
max: 6
|
|
511
|
+
}),
|
|
512
|
+
choicesPosition: choicesPosition.settings && radio(choicesPosition.label, ['below', 'above', 'left', 'right']),
|
|
513
|
+
allowMultiplePlacementsEnabled: allowMultiplePlacements.settings && dropdown(allowMultiplePlacements.label, [_utils2.multiplePlacements.enabled, _utils2.multiplePlacements.disabled, _utils2.multiplePlacements.perChoice]),
|
|
514
|
+
maxAnswerChoices: allowMaxAnswerChoices.settings && numberField(allowMaxAnswerChoices.label, {
|
|
515
|
+
label: '',
|
|
516
|
+
min: choices?.length || 0,
|
|
517
|
+
max: 30
|
|
518
|
+
}),
|
|
519
|
+
allowMaxChoicesPerCategory: maxPlacements.settings && toggle(maxPlacements.label),
|
|
520
|
+
maxChoicesPerCategory: allowMaxChoicesPerCategory === true && numberField(maxPlacements.label, {
|
|
521
|
+
label: '',
|
|
522
|
+
min: 0,
|
|
523
|
+
max: 30
|
|
524
|
+
}),
|
|
525
|
+
promptEnabled: prompt.settings && toggle(prompt.label),
|
|
526
|
+
feedbackEnabled: feedback.settings && toggle(feedback.label),
|
|
527
|
+
allowAlternateEnabled: allowAlternate.settings && toggle(allowAlternate.label),
|
|
528
|
+
'language.enabled': language.settings && toggle(language.label, true),
|
|
529
|
+
language: language.settings && language.enabled && dropdown(languageChoices.label, languageChoices.options)
|
|
530
|
+
};
|
|
531
|
+
const panelProperties = {
|
|
532
|
+
teacherInstructionsEnabled: teacherInstructions.settings && toggle(teacherInstructions.label),
|
|
533
|
+
studentInstructionsEnabled: studentInstructions.settings && toggle(studentInstructions.label),
|
|
534
|
+
rationaleEnabled: rationale.settings && toggle(rationale.label),
|
|
535
|
+
spellCheckEnabled: spellCheck.settings && toggle(spellCheck.label),
|
|
536
|
+
scoringType: scoringType.settings && radio(scoringType.label, ['auto', 'rubric']),
|
|
537
|
+
rubricEnabled: withRubric?.settings && toggle(withRubric?.label)
|
|
538
|
+
};
|
|
539
|
+
const isOpened = this.isAlertModalOpened();
|
|
540
|
+
const alertMaxChoicesMsg = translator.t('translation:categorize:maxChoicesPerCategoryRestriction', {
|
|
541
|
+
lng: model.language,
|
|
542
|
+
maxChoicesPerCategory
|
|
543
|
+
});
|
|
544
|
+
return /*#__PURE__*/_react.default.createElement(_drag.DragProvider, {
|
|
545
|
+
onDragStart: this.onDragStart,
|
|
546
|
+
onDragEnd: this.onDragEnd
|
|
547
|
+
}, /*#__PURE__*/_react.default.createElement(IdProvider, {
|
|
548
|
+
value: this.uid
|
|
549
|
+
}, /*#__PURE__*/_react.default.createElement(_configUi.layout.ConfigLayout, {
|
|
550
|
+
extraCSSRules: extraCSSRules,
|
|
551
|
+
dimensions: contentDimensions,
|
|
552
|
+
hideSettings: settingsPanelDisabled,
|
|
553
|
+
settings: /*#__PURE__*/_react.default.createElement(Panel, {
|
|
418
554
|
model: model,
|
|
419
|
-
|
|
420
|
-
onModelChanged: this.updateModel,
|
|
421
|
-
toolbarOpts: toolbarOpts,
|
|
422
|
-
spellCheck: spellCheckEnabled,
|
|
555
|
+
onChangeModel: this.updateModel,
|
|
423
556
|
configuration: configuration,
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
557
|
+
onChangeConfiguration: onConfigurationChanged,
|
|
558
|
+
groups: {
|
|
559
|
+
Settings: panelSettings,
|
|
560
|
+
Properties: panelProperties
|
|
561
|
+
},
|
|
562
|
+
modal: /*#__PURE__*/_react.default.createElement(_configUi.AlertDialog, {
|
|
563
|
+
title: 'Warning',
|
|
564
|
+
text: alertMaxChoicesMsg,
|
|
565
|
+
open: isOpened,
|
|
566
|
+
onClose: this.onAlertModalCancel
|
|
567
|
+
})
|
|
568
|
+
})
|
|
569
|
+
}, teacherInstructionsEnabled && /*#__PURE__*/_react.default.createElement(StyledInputContainer, {
|
|
570
|
+
label: teacherInstructions.label
|
|
571
|
+
}, /*#__PURE__*/_react.default.createElement(_editableHtmlTipTap.default, {
|
|
572
|
+
markup: model.teacherInstructions || '',
|
|
573
|
+
onChange: this.changeTeacherInstructions,
|
|
574
|
+
imageSupport: imageSupport,
|
|
575
|
+
error: teacherInstructionsError,
|
|
576
|
+
nonEmpty: false,
|
|
577
|
+
toolbarOpts: toolbarOpts,
|
|
578
|
+
pluginProps: (0, _utils.getPluginProps)(teacherInstructions?.inputConfiguration, baseInputConfiguration),
|
|
579
|
+
spellCheck: spellCheckEnabled,
|
|
580
|
+
maxImageWidth: maxImageWidth && maxImageWidth.teacherInstructions || defaultImageMaxWidth,
|
|
581
|
+
maxImageHeight: maxImageHeight && maxImageHeight.teacherInstructions || defaultImageMaxHeight,
|
|
582
|
+
uploadSoundSupport: uploadSoundSupport,
|
|
583
|
+
languageCharactersProps: [{
|
|
584
|
+
language: 'spanish'
|
|
585
|
+
}, {
|
|
586
|
+
language: 'special'
|
|
587
|
+
}],
|
|
588
|
+
mathMlOptions: mathMlOptions
|
|
589
|
+
}), teacherInstructionsError && /*#__PURE__*/_react.default.createElement(ErrorText, null, teacherInstructionsError)), promptEnabled && /*#__PURE__*/_react.default.createElement(StyledInputContainer, {
|
|
590
|
+
label: prompt.label
|
|
591
|
+
}, /*#__PURE__*/_react.default.createElement(_editableHtmlTipTap.default, {
|
|
592
|
+
markup: model.prompt || '',
|
|
593
|
+
onChange: this.onPromptChanged,
|
|
594
|
+
imageSupport: imageSupport,
|
|
595
|
+
error: promptError,
|
|
596
|
+
nonEmpty: false,
|
|
597
|
+
disableUnderline: true,
|
|
598
|
+
toolbarOpts: toolbarOpts,
|
|
599
|
+
pluginProps: (0, _utils.getPluginProps)(prompt?.inputConfiguration, baseInputConfiguration),
|
|
600
|
+
spellCheck: spellCheckEnabled,
|
|
601
|
+
maxImageWidth: maxImageWidth && maxImageWidth.prompt,
|
|
602
|
+
maxImageHeight: maxImageHeight && maxImageHeight.prompt,
|
|
603
|
+
uploadSoundSupport: uploadSoundSupport,
|
|
604
|
+
languageCharactersProps: [{
|
|
605
|
+
language: 'spanish'
|
|
606
|
+
}, {
|
|
607
|
+
language: 'special'
|
|
608
|
+
}],
|
|
609
|
+
mathMlOptions: mathMlOptions
|
|
610
|
+
}), promptError && /*#__PURE__*/_react.default.createElement(ErrorText, null, promptError)), /*#__PURE__*/_react.default.createElement(_categories.default, {
|
|
611
|
+
imageSupport: imageSupport,
|
|
612
|
+
uploadSoundSupport: uploadSoundSupport,
|
|
613
|
+
model: model,
|
|
614
|
+
categories: categories || [],
|
|
615
|
+
onModelChanged: this.updateModel,
|
|
616
|
+
toolbarOpts: toolbarOpts,
|
|
617
|
+
spellCheck: spellCheckEnabled,
|
|
618
|
+
configuration: configuration,
|
|
619
|
+
defaultImageMaxWidth: defaultImageMaxWidth,
|
|
620
|
+
defaultImageMaxHeight: defaultImageMaxHeight,
|
|
621
|
+
mathMlOptions: mathMlOptions
|
|
622
|
+
}), /*#__PURE__*/_react.default.createElement(_choices.default, {
|
|
623
|
+
imageSupport: imageSupport,
|
|
624
|
+
uploadSoundSupport: uploadSoundSupport,
|
|
625
|
+
choices: choices,
|
|
626
|
+
model: model,
|
|
627
|
+
onModelChanged: this.updateModel,
|
|
628
|
+
toolbarOpts: toolbarOpts,
|
|
629
|
+
spellCheck: spellCheckEnabled,
|
|
630
|
+
configuration: configuration,
|
|
631
|
+
defaultImageMaxWidth: defaultImageMaxWidth,
|
|
632
|
+
defaultImageMaxHeight: defaultImageMaxHeight
|
|
633
|
+
}), allowAlternateEnabled && /*#__PURE__*/_react.default.createElement(StyledHeader, {
|
|
634
|
+
label: "Alternate Responses",
|
|
635
|
+
buttonLabel: "ADD AN ALTERNATE RESPONSE",
|
|
636
|
+
onAdd: this.onAddAlternateResponse
|
|
637
|
+
}), allowAlternateEnabled && alternateResponses.map((categoriesList, index) => {
|
|
638
|
+
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, {
|
|
639
|
+
key: index
|
|
640
|
+
}, /*#__PURE__*/_react.default.createElement(StyledHeader, {
|
|
641
|
+
variant: 'subtitle1',
|
|
642
|
+
label: "Alternate Response",
|
|
643
|
+
buttonLabel: "REMOVE ALTERNATE RESPONSE",
|
|
644
|
+
onAdd: () => this.onRemoveAlternateResponse(index)
|
|
645
|
+
}), /*#__PURE__*/_react.default.createElement(_alternateResponses.default, {
|
|
646
|
+
altIndex: index,
|
|
428
647
|
imageSupport: imageSupport,
|
|
429
|
-
uploadSoundSupport: uploadSoundSupport,
|
|
430
|
-
choices: choices,
|
|
431
648
|
model: model,
|
|
432
|
-
onModelChanged: this.updateModel,
|
|
433
|
-
toolbarOpts: toolbarOpts,
|
|
434
|
-
spellCheck: spellCheckEnabled,
|
|
435
649
|
configuration: configuration,
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
}), allowAlternateEnabled && /*#__PURE__*/_react["default"].createElement(_header["default"], {
|
|
439
|
-
className: classes.alternatesHeader,
|
|
440
|
-
label: "Alternate Responses",
|
|
441
|
-
buttonLabel: "ADD AN ALTERNATE RESPONSE",
|
|
442
|
-
onAdd: this.onAddAlternateResponse
|
|
443
|
-
}), allowAlternateEnabled && alternateResponses.map(function (categoriesList, index) {
|
|
444
|
-
return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, {
|
|
445
|
-
key: index
|
|
446
|
-
}, /*#__PURE__*/_react["default"].createElement(_header["default"], {
|
|
447
|
-
className: classes.alternatesHeader,
|
|
448
|
-
variant: 'subtitle1',
|
|
449
|
-
label: "Alternate Response",
|
|
450
|
-
buttonLabel: "REMOVE ALTERNATE RESPONSE",
|
|
451
|
-
onAdd: function onAdd() {
|
|
452
|
-
return _this2.onRemoveAlternateResponse(index);
|
|
453
|
-
}
|
|
454
|
-
}), /*#__PURE__*/_react["default"].createElement(_alternateResponses["default"], {
|
|
455
|
-
altIndex: index,
|
|
456
|
-
imageSupport: imageSupport,
|
|
457
|
-
model: model,
|
|
458
|
-
configuration: configuration,
|
|
459
|
-
categories: categoriesList,
|
|
460
|
-
onModelChanged: _this2.updateModel,
|
|
461
|
-
uploadSoundSupport: uploadSoundSupport,
|
|
462
|
-
mathMlOptions: mathMlOptions
|
|
463
|
-
}));
|
|
464
|
-
}), rationaleEnabled && /*#__PURE__*/_react["default"].createElement(_configUi.InputContainer, {
|
|
465
|
-
label: rationale.label,
|
|
466
|
-
className: classes.inputContainer
|
|
467
|
-
}, /*#__PURE__*/_react["default"].createElement(_editableHtml["default"], {
|
|
468
|
-
className: classes.input,
|
|
469
|
-
markup: model.rationale || '',
|
|
470
|
-
onChange: this.changeRationale,
|
|
471
|
-
imageSupport: imageSupport,
|
|
472
|
-
error: rationaleError,
|
|
473
|
-
nonEmpty: false,
|
|
474
|
-
toolbarOpts: toolbarOpts,
|
|
475
|
-
pluginProps: (0, _utils.getPluginProps)(prompt === null || prompt === void 0 ? void 0 : prompt.inputConfiguration, baseInputConfiguration),
|
|
476
|
-
spellCheck: spellCheckEnabled,
|
|
477
|
-
maxImageWidth: maxImageWidth && maxImageWidth.rationale || defaultImageMaxWidth,
|
|
478
|
-
maxImageHeight: maxImageHeight && maxImageHeight.rationale || defaultImageMaxHeight,
|
|
650
|
+
categories: categoriesList,
|
|
651
|
+
onModelChanged: this.updateModel,
|
|
479
652
|
uploadSoundSupport: uploadSoundSupport,
|
|
480
|
-
languageCharactersProps: [{
|
|
481
|
-
language: 'spanish'
|
|
482
|
-
}, {
|
|
483
|
-
language: 'special'
|
|
484
|
-
}],
|
|
485
653
|
mathMlOptions: mathMlOptions
|
|
486
|
-
})
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
654
|
+
}));
|
|
655
|
+
}), rationaleEnabled && /*#__PURE__*/_react.default.createElement(StyledInputContainer, {
|
|
656
|
+
label: rationale.label
|
|
657
|
+
}, /*#__PURE__*/_react.default.createElement(_editableHtmlTipTap.default, {
|
|
658
|
+
markup: model.rationale || '',
|
|
659
|
+
onChange: this.changeRationale,
|
|
660
|
+
imageSupport: imageSupport,
|
|
661
|
+
error: rationaleError,
|
|
662
|
+
nonEmpty: false,
|
|
663
|
+
toolbarOpts: toolbarOpts,
|
|
664
|
+
pluginProps: (0, _utils.getPluginProps)(prompt?.inputConfiguration, baseInputConfiguration),
|
|
665
|
+
spellCheck: spellCheckEnabled,
|
|
666
|
+
maxImageWidth: maxImageWidth && maxImageWidth.rationale || defaultImageMaxWidth,
|
|
667
|
+
maxImageHeight: maxImageHeight && maxImageHeight.rationale || defaultImageMaxHeight,
|
|
668
|
+
uploadSoundSupport: uploadSoundSupport,
|
|
669
|
+
languageCharactersProps: [{
|
|
670
|
+
language: 'spanish'
|
|
671
|
+
}, {
|
|
672
|
+
language: 'special'
|
|
673
|
+
}],
|
|
674
|
+
mathMlOptions: mathMlOptions
|
|
675
|
+
}), rationaleError && /*#__PURE__*/_react.default.createElement(ErrorText, null, rationaleError)), feedbackEnabled && /*#__PURE__*/_react.default.createElement(_configUi.FeedbackConfig, {
|
|
676
|
+
feedback: model.feedback,
|
|
677
|
+
onChange: this.changeFeedback,
|
|
678
|
+
toolbarOpts: toolbarOpts
|
|
679
|
+
})), /*#__PURE__*/_react.default.createElement(_core.DragOverlay, null, /*#__PURE__*/_react.default.createElement(DragPreviewWrapper, null, this.renderDragOverlay()))));
|
|
680
|
+
}
|
|
681
|
+
}
|
|
498
682
|
exports.Design = Design;
|
|
499
|
-
(0, _defineProperty2
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
"delete": _propTypes["default"].func.isRequired
|
|
683
|
+
(0, _defineProperty2.default)(Design, "propTypes", {
|
|
684
|
+
configuration: _propTypes.default.object,
|
|
685
|
+
className: _propTypes.default.string,
|
|
686
|
+
onConfigurationChanged: _propTypes.default.func,
|
|
687
|
+
model: _propTypes.default.object.isRequired,
|
|
688
|
+
onChange: _propTypes.default.func.isRequired,
|
|
689
|
+
uid: _propTypes.default.string,
|
|
690
|
+
imageSupport: _propTypes.default.shape({
|
|
691
|
+
add: _propTypes.default.func.isRequired,
|
|
692
|
+
delete: _propTypes.default.func.isRequired
|
|
510
693
|
}),
|
|
511
|
-
uploadSoundSupport: _propTypes
|
|
512
|
-
add: _propTypes
|
|
513
|
-
|
|
694
|
+
uploadSoundSupport: _propTypes.default.shape({
|
|
695
|
+
add: _propTypes.default.func.isRequired,
|
|
696
|
+
delete: _propTypes.default.func.isRequired
|
|
514
697
|
})
|
|
515
698
|
});
|
|
516
|
-
|
|
517
|
-
var styles = function styles(theme) {
|
|
518
|
-
return {
|
|
519
|
-
alternatesHeader: {
|
|
520
|
-
marginBottom: theme.spacing.unit * 2
|
|
521
|
-
},
|
|
522
|
-
text: {
|
|
523
|
-
paddingTop: theme.spacing.unit * 2,
|
|
524
|
-
paddingBottom: theme.spacing.unit * 2
|
|
525
|
-
},
|
|
526
|
-
inputContainer: {
|
|
527
|
-
width: '100%',
|
|
528
|
-
paddingTop: theme.spacing.unit * 2,
|
|
529
|
-
marginBottom: theme.spacing.unit * 2
|
|
530
|
-
},
|
|
531
|
-
title: {
|
|
532
|
-
marginBottom: theme.spacing.unit * 4
|
|
533
|
-
},
|
|
534
|
-
errorText: {
|
|
535
|
-
fontSize: theme.typography.fontSize - 2,
|
|
536
|
-
color: theme.palette.error.main,
|
|
537
|
-
paddingTop: theme.spacing.unit
|
|
538
|
-
}
|
|
539
|
-
};
|
|
540
|
-
};
|
|
541
|
-
|
|
542
|
-
var _default = (0, _drag.withDragContext)((0, _styles.withStyles)(styles)(Design));
|
|
543
|
-
|
|
544
|
-
exports["default"] = _default;
|
|
545
|
-
//# sourceMappingURL=index.js.map
|
|
699
|
+
var _default = exports.default = Design;
|
|
700
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdXRpbHMiLCJyZXF1aXJlIiwiX3JlYWN0IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9wcm9wVHlwZXMiLCJfc3R5bGVzIiwiX2NvcmUiLCJfY29uZmlnVWkiLCJfY2F0ZWdvcml6ZSIsIl9lZGl0YWJsZUh0bWxUaXBUYXAiLCJfZHJhZyIsIl9tYXRoUmVuZGVyaW5nIiwiX2NhdGVnb3JpZXMiLCJfYWx0ZXJuYXRlUmVzcG9uc2VzIiwiX2Nob2ljZXMiLCJfY2hvaWNlIiwiX2Nob2ljZVByZXZpZXciLCJfYnVpbGRlciIsIl9oZWFkZXIiLCJfdXRpbHMyIiwiX3RyYW5zbGF0b3IiLCJ0cmFuc2xhdG9yIiwiVHJhbnNsYXRvciIsImRyb3Bkb3duIiwiUGFuZWwiLCJ0b2dnbGUiLCJyYWRpbyIsIm51bWJlckZpZWxkIiwic2V0dGluZ3MiLCJQcm92aWRlciIsIklkUHJvdmlkZXIiLCJ1aWQiLCJEcmFnUHJldmlld1dyYXBwZXIiLCJSZWFjdCIsIkNvbXBvbmVudCIsImNvbnN0cnVjdG9yIiwiYXJncyIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJkZWZhdWx0IiwiY3JlYXRlUmVmIiwiY29tcG9uZW50RGlkTW91bnQiLCJjb250YWluZXJSZWYiLCJjdXJyZW50Iiwic2V0VGltZW91dCIsInJlbmRlck1hdGgiLCJyZW5kZXIiLCJjcmVhdGVFbGVtZW50IiwicmVmIiwicHJvcHMiLCJjaGlsZHJlbiIsIlN0eWxlZEhlYWRlciIsInN0eWxlZCIsIkhlYWRlciIsInRoZW1lIiwibWFyZ2luQm90dG9tIiwic3BhY2luZyIsIlN0eWxlZElucHV0Q29udGFpbmVyIiwiSW5wdXRDb250YWluZXIiLCJ3aWR0aCIsInBhZGRpbmdUb3AiLCJFcnJvclRleHQiLCJmb250U2l6ZSIsInR5cG9ncmFwaHkiLCJjb2xvciIsInBhbGV0dGUiLCJlcnJvciIsIm1haW4iLCJEZXNpZ24iLCJtb2RlbCIsIm9uQ2hhbmdlIiwidXBkYXRlZE1vZGVsIiwiY2hvaWNlcyIsIm1hcCIsImMiLCJjYXRlZ29yeUNvdW50IiwiY2hlY2tBbGxvd011bHRpcGxlUGxhY2VtZW50cyIsImFsbG93TXVsdGlwbGVQbGFjZW1lbnRzRW5hYmxlZCIsImNvcnJlY3RSZXNwb25zZSIsImVuc3VyZU5vRXh0cmFDaG9pY2VzSW5BbnN3ZXIiLCJlbnN1cmVOb0V4dHJhQ2hvaWNlc0luQWx0ZXJuYXRlIiwiY2F0ZWdvcmllcyIsImlkIiwibGFiZWwiLCJoIiwiY29udGVudCIsIm1heENob2ljZXNQZXJDYXRlZ29yeSIsImFsbG93TWF4Q2hvaWNlc1BlckNhdGVnb3J5IiwicmF0aW9uYWxlIiwidGVhY2hlckluc3RydWN0aW9ucyIsImZlZWRiYWNrIiwidXBkYXRlTW9kZWwiLCJjciIsImFsdGVybmF0ZVJlc3BvbnNlcyIsInByb21wdCIsImluZGV4IiwiZmlsdGVyIiwiYWx0IiwiYWx0SW5kZXgiLCJjaG9pY2UiLCJjb3VudEluQW5zd2VyIiwiYWxsb3dNdWx0aXBsZVBsYWNlbWVudHMiLCJtdWx0aXBsZVBsYWNlbWVudHMiLCJlbmFibGVkIiwiZGlzYWJsZWQiLCJtYXhDaG9pY2VzIiwiZ2V0TWF4Q2F0ZWdvcnlDaG9pY2VzIiwiZXZlbnQiLCJhY3RpdmUiLCJkcmFnZ2VkSXRlbSIsImRhdGEiLCJzZXRTdGF0ZSIsImFjdGl2ZURyYWdJdGVtIiwib3ZlciIsImFsbG93QWx0ZXJuYXRlRW5hYmxlZCIsImFjdGl2ZURhdGEiLCJvdmVyRGF0YSIsInR5cGUiLCJjaG9pY2VJZCIsInNwbGl0IiwibW92ZUNob2ljZSIsImNhdGVnb3J5SWQiLCJjaG9pY2VJbmRleCIsImFkZENob2ljZVRvQ2F0ZWdvcnkiLCJ0b0FsdGVybmF0ZUluZGV4IiwiYWx0ZXJuYXRlUmVzcG9uc2VJbmRleCIsIm1vdmVDaG9pY2VJbkFsdGVybmF0ZSIsInRvQWx0ZXJuYXRlUmVzcG9uc2VJbmRleCIsImFkZENob2ljZVRvQWx0ZXJuYXRlQ2F0ZWdvcnkiLCJhZGRlZENob2ljZSIsImZpbmQiLCJuZXdDb3JyZWN0UmVzcG9uc2UiLCJtb3ZlQ2hvaWNlVG9DYXRlZ29yeSIsInVuZGVmaW5lZCIsInZlcmlmeUFsbG93TXVsdGlwbGVQbGFjZW1lbnRzIiwibWF4Q2F0ZWdvcnlDaG9pY2VzIiwiY2F0ZWdvcnkiLCJyZW1vdmVDaG9pY2VGcm9tQ2F0ZWdvcnkiLCJmcm9tIiwidG8iLCJmb3JFYWNoIiwiYSIsInB1c2giLCJyZWR1Y2UiLCJhY2MiLCJjdXJyZW50VmFsdWUiLCJmb3VuZEluZGV4IiwiZmluZEluZGV4IiwiYWx0ZXJuYXRlSW5kZXgiLCJtb3ZlQ2hvaWNlVG9BbHRlcm5hdGUiLCJyZW1vdmVDaG9pY2VGcm9tQWx0ZXJuYXRlIiwic3RhdGUiLCJjb25maWd1cmF0aW9uIiwiZ2VuZXJhdGVJZCIsImltYWdlU3VwcG9ydCIsInVwbG9hZFNvdW5kU3VwcG9ydCIsIm9uQ29uZmlndXJhdGlvbkNoYW5nZWQiLCJhbGxvd0FsdGVybmF0ZSIsImJhc2VJbnB1dENvbmZpZ3VyYXRpb24iLCJjYXRlZ29yaWVzUGVyUm93IiwiY2hvaWNlc1Bvc2l0aW9uIiwiY29udGVudERpbWVuc2lvbnMiLCJsb2NrQ2hvaWNlT3JkZXIiLCJtYXhJbWFnZUhlaWdodCIsIm1heEltYWdlV2lkdGgiLCJtYXhQbGFjZW1lbnRzIiwibWluQ2F0ZWdvcmllc1BlclJvdyIsInBhcnRpYWxTY29yaW5nIiwic2NvcmluZ1R5cGUiLCJzZXR0aW5nc1BhbmVsRGlzYWJsZWQiLCJzcGVsbENoZWNrIiwic3R1ZGVudEluc3RydWN0aW9ucyIsIndpdGhSdWJyaWMiLCJtYXRoTWxPcHRpb25zIiwibGFuZ3VhZ2UiLCJsYW5ndWFnZUNob2ljZXMiLCJhbGxvd01heEFuc3dlckNob2ljZXMiLCJlcnJvcnMiLCJmZWVkYmFja0VuYWJsZWQiLCJwcm9tcHRFbmFibGVkIiwicmF0aW9uYWxlRW5hYmxlZCIsInNwZWxsQ2hlY2tFbmFibGVkIiwidGVhY2hlckluc3RydWN0aW9uc0VuYWJsZWQiLCJ0b29sYmFyRWRpdG9yUG9zaXRpb24iLCJleHRyYUNTU1J1bGVzIiwicHJvbXB0RXJyb3IiLCJyYXRpb25hbGVFcnJvciIsInRlYWNoZXJJbnN0cnVjdGlvbnNFcnJvciIsInRvb2xiYXJPcHRzIiwicG9zaXRpb24iLCJjb25maWciLCJjb2x1bW5zIiwiYnVpbGRDYXRlZ29yaWVzIiwiYnVpbGRBbHRlcm5hdGVSZXNwb25zZXMiLCJjb3JyZWN0UmVzcG9uc2VDb3VudCIsImNvdW50Q2hvaWNlSW5Db3JyZWN0UmVzcG9uc2UiLCJkZWZhdWx0SW1hZ2VNYXhXaWR0aCIsImRlZmF1bHRJbWFnZU1heEhlaWdodCIsInBhbmVsU2V0dGluZ3MiLCJtaW4iLCJtYXgiLCJwZXJDaG9pY2UiLCJtYXhBbnN3ZXJDaG9pY2VzIiwibGVuZ3RoIiwib3B0aW9ucyIsInBhbmVsUHJvcGVydGllcyIsInN0dWRlbnRJbnN0cnVjdGlvbnNFbmFibGVkIiwicnVicmljRW5hYmxlZCIsImlzT3BlbmVkIiwiaXNBbGVydE1vZGFsT3BlbmVkIiwiYWxlcnRNYXhDaG9pY2VzTXNnIiwidCIsImxuZyIsIkRyYWdQcm92aWRlciIsIm9uRHJhZ1N0YXJ0Iiwib25EcmFnRW5kIiwidmFsdWUiLCJsYXlvdXQiLCJDb25maWdMYXlvdXQiLCJkaW1lbnNpb25zIiwiaGlkZVNldHRpbmdzIiwib25DaGFuZ2VNb2RlbCIsIm9uQ2hhbmdlQ29uZmlndXJhdGlvbiIsImdyb3VwcyIsIlNldHRpbmdzIiwiUHJvcGVydGllcyIsIm1vZGFsIiwiQWxlcnREaWFsb2ciLCJ0aXRsZSIsInRleHQiLCJvcGVuIiwib25DbG9zZSIsIm9uQWxlcnRNb2RhbENhbmNlbCIsIm1hcmt1cCIsImNoYW5nZVRlYWNoZXJJbnN0cnVjdGlvbnMiLCJub25FbXB0eSIsInBsdWdpblByb3BzIiwiZ2V0UGx1Z2luUHJvcHMiLCJpbnB1dENvbmZpZ3VyYXRpb24iLCJsYW5ndWFnZUNoYXJhY3RlcnNQcm9wcyIsIm9uUHJvbXB0Q2hhbmdlZCIsImRpc2FibGVVbmRlcmxpbmUiLCJvbk1vZGVsQ2hhbmdlZCIsImJ1dHRvbkxhYmVsIiwib25BZGQiLCJvbkFkZEFsdGVybmF0ZVJlc3BvbnNlIiwiY2F0ZWdvcmllc0xpc3QiLCJGcmFnbWVudCIsImtleSIsInZhcmlhbnQiLCJvblJlbW92ZUFsdGVybmF0ZVJlc3BvbnNlIiwiY2hhbmdlUmF0aW9uYWxlIiwiRmVlZGJhY2tDb25maWciLCJjaGFuZ2VGZWVkYmFjayIsIkRyYWdPdmVybGF5IiwicmVuZGVyRHJhZ092ZXJsYXkiLCJleHBvcnRzIiwiUHJvcFR5cGVzIiwib2JqZWN0IiwiY2xhc3NOYW1lIiwic3RyaW5nIiwiZnVuYyIsImlzUmVxdWlyZWQiLCJzaGFwZSIsImFkZCIsImRlbGV0ZSIsIl9kZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Rlc2lnbi9pbmRleC5qc3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0UGx1Z2luUHJvcHMgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgc3R5bGVkIH0gZnJvbSAnQG11aS9tYXRlcmlhbC9zdHlsZXMnO1xuaW1wb3J0IHsgRHJhZ092ZXJsYXkgfSBmcm9tICdAZG5kLWtpdC9jb3JlJztcbmltcG9ydCB7IEZlZWRiYWNrQ29uZmlnLCBJbnB1dENvbnRhaW5lciwgbGF5b3V0LCBzZXR0aW5ncyB9IGZyb20gJ0BwaWUtbGliL2NvbmZpZy11aSc7XG5pbXBvcnQge1xuICBjb3VudEluQW5zd2VyLFxuICBlbnN1cmVOb0V4dHJhQ2hvaWNlc0luQW5zd2VyLFxuICBlbnN1cmVOb0V4dHJhQ2hvaWNlc0luQWx0ZXJuYXRlLFxuICBtb3ZlQ2hvaWNlVG9DYXRlZ29yeSxcbiAgbW92ZUNob2ljZVRvQWx0ZXJuYXRlLFxuICByZW1vdmVDaG9pY2VGcm9tQ2F0ZWdvcnksXG4gIHJlbW92ZUNob2ljZUZyb21BbHRlcm5hdGUsXG4gIHZlcmlmeUFsbG93TXVsdGlwbGVQbGFjZW1lbnRzLFxufSBmcm9tICdAcGllLWxpYi9jYXRlZ29yaXplJztcbmltcG9ydCBFZGl0YWJsZUh0bWwgZnJvbSAnQHBpZS1saWIvZWRpdGFibGUtaHRtbC10aXAtdGFwJztcbmltcG9ydCB7IERyYWdQcm92aWRlciwgdWlkIH0gZnJvbSAnQHBpZS1saWIvZHJhZyc7XG5pbXBvcnQgeyByZW5kZXJNYXRoIH0gZnJvbSAnQHBpZS1saWIvbWF0aC1yZW5kZXJpbmcnO1xuXG5pbXBvcnQgQ2F0ZWdvcmllcyBmcm9tICcuL2NhdGVnb3JpZXMnO1xuaW1wb3J0IEFsdGVybmF0ZVJlc3BvbnNlcyBmcm9tICcuL2NhdGVnb3JpZXMvYWx0ZXJuYXRlUmVzcG9uc2VzJztcbmltcG9ydCBDaG9pY2VzIGZyb20gJy4vY2hvaWNlcyc7XG5pbXBvcnQgQ2hvaWNlIGZyb20gJy4vY2hvaWNlcy9jaG9pY2UnO1xuaW1wb3J0IENob2ljZVByZXZpZXcgZnJvbSAnLi9jYXRlZ29yaWVzL2Nob2ljZS1wcmV2aWV3JztcbmltcG9ydCB7IGJ1aWxkQWx0ZXJuYXRlUmVzcG9uc2VzLCBidWlsZENhdGVnb3JpZXMgfSBmcm9tICcuL2J1aWxkZXInO1xuaW1wb3J0IEhlYWRlciBmcm9tICcuL2hlYWRlcic7XG5pbXBvcnQgeyBnZXRNYXhDYXRlZ29yeUNob2ljZXMsIG11bHRpcGxlUGxhY2VtZW50cyB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IEFsZXJ0RGlhbG9nIH0gZnJvbSAnQHBpZS1saWIvY29uZmlnLXVpJztcbmltcG9ydCBUcmFuc2xhdG9yIGZyb20gJ0BwaWUtbGliL3RyYW5zbGF0b3InO1xuXG5jb25zdCB7IHRyYW5zbGF0b3IgfSA9IFRyYW5zbGF0b3I7XG5jb25zdCB7IGRyb3Bkb3duLCBQYW5lbCwgdG9nZ2xlLCByYWRpbywgbnVtYmVyRmllbGQgfSA9IHNldHRpbmdzO1xuY29uc3QgeyBQcm92aWRlcjogSWRQcm92aWRlciB9ID0gdWlkO1xuXG4vLyBTaW1wbGUgd3JhcHBlciB0byByZW5kZXIgbWF0aCBpbiBEcmFnT3ZlcmxheSBwb3J0YWxcbmNsYXNzIERyYWdQcmV2aWV3V3JhcHBlciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGNvbnRhaW5lclJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIGlmICh0aGlzLmNvbnRhaW5lclJlZi5jdXJyZW50KSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHJlbmRlck1hdGgodGhpcy5jb250YWluZXJSZWYuY3VycmVudCksIDApO1xuICAgIH1cbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICByZXR1cm4gPGRpdiByZWY9e3RoaXMuY29udGFpbmVyUmVmfT57dGhpcy5wcm9wcy5jaGlsZHJlbn08L2Rpdj47XG4gIH1cbn1cblxuY29uc3QgU3R5bGVkSGVhZGVyID0gc3R5bGVkKEhlYWRlcikoKHsgdGhlbWUgfSkgPT4gKHtcbiAgbWFyZ2luQm90dG9tOiB0aGVtZS5zcGFjaW5nKDIpLFxufSkpO1xuXG5jb25zdCBTdHlsZWRJbnB1dENvbnRhaW5lciA9IHN0eWxlZChJbnB1dENvbnRhaW5lcikoKHsgdGhlbWUgfSkgPT4gKHtcbiAgd2lkdGg6ICcxMDAlJyxcbiAgcGFkZGluZ1RvcDogdGhlbWUuc3BhY2luZygyKSxcbiAgbWFyZ2luQm90dG9tOiB0aGVtZS5zcGFjaW5nKDIpLFxufSkpO1xuXG5jb25zdCBFcnJvclRleHQgPSBzdHlsZWQoJ2RpdicpKCh7IHRoZW1lIH0pID0+ICh7XG4gIGZvbnRTaXplOiB0aGVtZS50eXBvZ3JhcGh5LmZvbnRTaXplIC0gMixcbiAgY29sb3I6IHRoZW1lLnBhbGV0dGUuZXJyb3IubWFpbixcbiAgcGFkZGluZ1RvcDogdGhlbWUuc3BhY2luZygxKSxcbn0pKTtcblxuZXhwb3J0IGNsYXNzIERlc2lnbiBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgY29uZmlndXJhdGlvbjogUHJvcFR5cGVzLm9iamVjdCxcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgb25Db25maWd1cmF0aW9uQ2hhbmdlZDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgbW9kZWw6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbiAgICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICB1aWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgaW1hZ2VTdXBwb3J0OiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgYWRkOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgICAgZGVsZXRlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIH0pLFxuICAgIHVwbG9hZFNvdW5kU3VwcG9ydDogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIGFkZDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICAgIGRlbGV0ZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICB9KSxcbiAgfTtcblxuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnVpZCA9IHByb3BzLnVpZCB8fCB1aWQuZ2VuZXJhdGVJZCgpO1xuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBhY3RpdmVEcmFnSXRlbTogbnVsbCxcbiAgICB9O1xuICB9XG5cbiAgdXBkYXRlTW9kZWwgPSAocHJvcHMpID0+IHtcbiAgICBjb25zdCB7IG1vZGVsLCBvbkNoYW5nZSB9ID0gdGhpcy5wcm9wcztcblxuICAgIGNvbnN0IHVwZGF0ZWRNb2RlbCA9IHtcbiAgICAgIC4uLm1vZGVsLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfTtcblxuICAgIHVwZGF0ZWRNb2RlbC5jaG9pY2VzID0gdXBkYXRlZE1vZGVsLmNob2ljZXMubWFwKChjKSA9PiAoe1xuICAgICAgLi4uYyxcbiAgICAgIGNhdGVnb3J5Q291bnQ6IHRoaXMuY2hlY2tBbGxvd011bHRpcGxlUGxhY2VtZW50cyh1cGRhdGVkTW9kZWwuYWxsb3dNdWx0aXBsZVBsYWNlbWVudHNFbmFibGVkLCBjKSxcbiAgICB9KSk7XG5cbiAgICAvL0Vuc3VyZSB0aGF0IHRoZXJlIGFyZSBubyBleHRyYSBjaG9pY2VzIGluIGNvcnJlY3RSZXNwb25zZSwgaWYgdGhlIHVzZXIgaGFzIGRlY2lkZWQgdGhhdCBvbmx5IG9uZSBjaG9pY2UgbWF5IGJlIHVzZWQuXG4gICAgdXBkYXRlZE1vZGVsLmNvcnJlY3RSZXNwb25zZSA9IGVuc3VyZU5vRXh0cmFDaG9pY2VzSW5BbnN3ZXIoXG4gICAgICB1cGRhdGVkTW9kZWwuY29ycmVjdFJlc3BvbnNlIHx8IFtdLFxuICAgICAgdXBkYXRlZE1vZGVsLmNob2ljZXMsXG4gICAgKTtcblxuICAgIC8vRW5zdXJlIHRoYXQgdGhlcmUgYXJlIG5vIGV4dHJhIGNob2ljZXMgaW4gYWx0ZXJuYXRlIHJlc3BvbnNlcywgaWYgdGhlIHVzZXIgaGFzIGRlY2lkZWQgdGhhdCBvbmx5IG9uZSBjaG9pY2UgbWF5IGJlIHVzZWQuXG4gICAgdXBkYXRlZE1vZGVsLmNvcnJlY3RSZXNwb25zZSA9IGVuc3VyZU5vRXh0cmFDaG9pY2VzSW5BbHRlcm5hdGUoXG4gICAgICB1cGRhdGVkTW9kZWwuY29ycmVjdFJlc3BvbnNlIHx8IFtdLFxuICAgICAgdXBkYXRlZE1vZGVsLmNob2ljZXMsXG4gICAgKTtcblxuICAgIC8vY2xlYW4gY2F0ZWdvcmllc1xuICAgIHVwZGF0ZWRNb2RlbC5jYXRlZ29yaWVzID0gdXBkYXRlZE1vZGVsLmNhdGVnb3JpZXMubWFwKChjKSA9PiAoe1xuICAgICAgaWQ6IGMuaWQsXG4gICAgICBsYWJlbDogYy5sYWJlbCxcbiAgICB9KSk7XG5cbiAgICB1cGRhdGVkTW9kZWwuY2hvaWNlcyA9IHVwZGF0ZWRNb2RlbC5jaG9pY2VzLm1hcCgoaCkgPT4gKHtcbiAgICAgIGlkOiBoLmlkLFxuICAgICAgY29udGVudDogaC5jb250ZW50LFxuICAgICAgY2F0ZWdvcnlDb3VudDogaC5jYXRlZ29yeUNvdW50LFxuICAgIH0pKTtcblxuICAgIC8vIGVuc3VyZSB0aGF0IG1heENob2ljZXNQZXJDYXRlZ29yeSBpcyByZXNldCBpZiBhdXRob3Igc3dpdGNoIGJhY2sgdGhlIGNvcnJlc3BvbmRpbmcgc3dpdGNoIChhbGxvd01heENob2ljZXNQZXJDYXRlZ29yeSlcbiAgICB1cGRhdGVkTW9kZWwubWF4Q2hvaWNlc1BlckNhdGVnb3J5ID0gdXBkYXRlZE1vZGVsLmFsbG93TWF4Q2hvaWNlc1BlckNhdGVnb3J5XG4gICAgICA/IHVwZGF0ZWRNb2RlbC5tYXhDaG9pY2VzUGVyQ2F0ZWdvcnlcbiAgICAgIDogMDtcblxuICAgIG9uQ2hhbmdlKHVwZGF0ZWRNb2RlbCk7XG4gIH07XG5cbiAgY2hhbmdlUmF0aW9uYWxlID0gKHJhdGlvbmFsZSkgPT4ge1xuICAgIGNvbnN0IHsgbW9kZWwsIG9uQ2hhbmdlIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgb25DaGFuZ2Uoe1xuICAgICAgLi4ubW9kZWwsXG4gICAgICByYXRpb25hbGUsXG4gICAgfSk7XG4gIH07XG5cbiAgY2hhbmdlVGVhY2hlckluc3RydWN0aW9ucyA9ICh0ZWFjaGVySW5zdHJ1Y3Rpb25zKSA9PiB7XG4gICAgY29uc3QgeyBtb2RlbCwgb25DaGFuZ2UgfSA9IHRoaXMucHJvcHM7XG5cbiAgICBvbkNoYW5nZSh7XG4gICAgICAuLi5tb2RlbCxcbiAgICAgIHRlYWNoZXJJbnN0cnVjdGlvbnMsXG4gICAgfSk7XG4gIH07XG5cbiAgY2hhbmdlRmVlZGJhY2sgPSAoZmVlZGJhY2spID0+IHtcbiAgICB0aGlzLnVwZGF0ZU1vZGVsKHsgZmVlZGJhY2sgfSk7XG4gIH07XG5cbiAgb25BZGRBbHRlcm5hdGVSZXNwb25zZSA9ICgpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBtb2RlbDogeyBjb3JyZWN0UmVzcG9uc2UgfSxcbiAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgIHRoaXMudXBkYXRlTW9kZWwoe1xuICAgICAgY29ycmVjdFJlc3BvbnNlOiAoY29ycmVjdFJlc3BvbnNlIHx8IFtdKS5tYXAoKGNyKSA9PiAoe1xuICAgICAgICAuLi5jcixcbiAgICAgICAgYWx0ZXJuYXRlUmVzcG9uc2VzOiBbLi4uKGNyLmFsdGVybmF0ZVJlc3BvbnNlcyB8fCBbXSksIFtdXSxcbiAgICAgIH0pKSxcbiAgICB9KTtcbiAgfTtcblxuICBvblByb21wdENoYW5nZWQgPSAocHJvbXB0KSA9PiB0aGlzLnVwZGF0ZU1vZGVsKHsgcHJvbXB0IH0pO1xuXG4gIG9uUmVtb3ZlQWx0ZXJuYXRlUmVzcG9uc2UgPSAoaW5kZXgpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBtb2RlbDogeyBjb3JyZWN0UmVzcG9uc2UgfSxcbiAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgIHRoaXMudXBkYXRlTW9kZWwoe1xuICAgICAgY29ycmVjdFJlc3BvbnNlOiAoY29ycmVjdFJlc3BvbnNlIHx8IFtdKS5tYXAoKGNyKSA9PiAoe1xuICAgICAgICAuLi5jcixcbiAgICAgICAgYWx0ZXJuYXRlUmVzcG9uc2VzOiAoY3IuYWx0ZXJuYXRlUmVzcG9uc2VzIHx8IFtdKS5maWx0ZXIoKGFsdCwgYWx0SW5kZXgpID0+IGFsdEluZGV4ICE9PSBpbmRleCksXG4gICAgICB9KSksXG4gICAgfSk7XG4gIH07XG5cbiAgY291bnRDaG9pY2VJbkNvcnJlY3RSZXNwb25zZSA9IChjaG9pY2UpID0+IHtcbiAgICBjb25zdCB7IG1vZGVsIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgcmV0dXJuIGNvdW50SW5BbnN3ZXIoY2hvaWNlLmlkLCBtb2RlbC5jb3JyZWN0UmVzcG9uc2UpO1xuICB9O1xuXG4gIGNoZWNrQWxsb3dNdWx0aXBsZVBsYWNlbWVudHMgPSAoYWxsb3dNdWx0aXBsZVBsYWNlbWVudHMsIGMpID0+IHtcbiAgICBpZiAoYWxsb3dNdWx0aXBsZVBsYWNlbWVudHMgPT09IG11bHRpcGxlUGxhY2VtZW50cy5lbmFibGVkKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICBpZiAoYWxsb3dNdWx0aXBsZVBsYWNlbWVudHMgPT09IG11bHRpcGxlUGxhY2VtZW50cy5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIGMuY2F0ZWdvcnlDb3VudCB8fCAwO1xuICB9O1xuXG4gIGlzQWxlcnRNb2RhbE9wZW5lZCA9ICgpID0+IHtcbiAgICBjb25zdCB7IG1vZGVsIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHsgbWF4Q2hvaWNlc1BlckNhdGVnb3J5ID0gMCB9ID0gbW9kZWwgfHwge307XG4gICAgY29uc3QgbWF4Q2hvaWNlcyA9IGdldE1heENhdGVnb3J5Q2hvaWNlcyhtb2RlbCk7XG4gICAgLy8gd2hlbiBtYXhDaG9pY2VzUGVyQ2F0ZWdvcnkgaXMgc2V0IHRvIDAsIHRoZXJlIGlzIG5vIGxpbWl0IHNvIG1vZGFsIHNob3VsZCBub3QgYmUgb3BlbmVkXG4gICAgcmV0dXJuIG1heENob2ljZXNQZXJDYXRlZ29yeSAhPT0gMCA/IG1heENob2ljZXMgPiBtYXhDaG9pY2VzUGVyQ2F0ZWdvcnkgOiBmYWxzZTtcbiAgfTtcblxuICBvbkFsZXJ0TW9kYWxDYW5jZWwgPSAoKSA9PiB7XG4gICAgY29uc3QgeyBtb2RlbCB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBtYXhDaG9pY2VzID0gZ2V0TWF4Q2F0ZWdvcnlDaG9pY2VzKG1vZGVsKTtcbiAgICB0aGlzLnVwZGF0ZU1vZGVsKHsgbWF4Q2hvaWNlc1BlckNhdGVnb3J5OiBtYXhDaG9pY2VzIH0pO1xuICB9O1xuXG4gIG9uRHJhZ1N0YXJ0ID0gKGV2ZW50KSA9PiB7XG4gICAgY29uc3QgeyBhY3RpdmUgfSA9IGV2ZW50O1xuICAgIGNvbnN0IGRyYWdnZWRJdGVtID0gYWN0aXZlLmRhdGEuY3VycmVudDtcblxuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgYWN0aXZlRHJhZ0l0ZW06IGRyYWdnZWRJdGVtLFxuICAgIH0pO1xuICB9O1xuXG4gIG9uRHJhZ0VuZCA9IChldmVudCkgPT4ge1xuICAgIGNvbnN0IHsgYWN0aXZlLCBvdmVyIH0gPSBldmVudDtcblxuICAgIHRoaXMuc2V0U3RhdGUoeyBhY3RpdmVEcmFnSXRlbTogbnVsbCB9KTtcblxuICAgIGlmICghb3ZlciB8fCAhYWN0aXZlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgeyBtb2RlbCB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7IGFsbG93QWx0ZXJuYXRlRW5hYmxlZCB9ID0gbW9kZWw7XG4gICAgY29uc3QgYWN0aXZlRGF0YSA9IGFjdGl2ZS5kYXRhLmN1cnJlbnQ7XG4gICAgY29uc3Qgb3ZlckRhdGEgPSBvdmVyLmRhdGEuY3VycmVudDtcblxuICAgIC8vIG1vdmluZyBhIGNob2ljZSBiZXR3ZWVuIGNhdGVnb3JpZXMgKGNvcnJlY3QgcmVzcG9uc2UpXG4gICAgaWYgKGFjdGl2ZURhdGEudHlwZSA9PT0gJ2Nob2ljZS1wcmV2aWV3JyAmJiBvdmVyRGF0YS50eXBlID09PSAnY2F0ZWdvcnknKSB7XG4gICAgICAvLyBFeHRyYWN0IG9yaWdpbmFsIGNob2ljZS5pZCAtIGlmIERyYWdnYWJsZUNob2ljZSB1c2VzIHRoZSB1bmlxdWUgaWQgaW4gZGF0YSwgZXh0cmFjdCB0aGUgZmlyc3QgcGFydFxuICAgICAgLy8gRm9ybWF0OiAke2Nob2ljZS5pZH0tJHtjYXRlZ29yeUlkfS0ke2Nob2ljZUluZGV4fSBvciAke2Nob2ljZS5pZH0tJHtjYXRlZ29yeUlkfS0ke2Nob2ljZUluZGV4fS1hbHQtJHthbHRlcm5hdGVSZXNwb25zZUluZGV4fVxuICAgICAgY29uc3QgY2hvaWNlSWQgPVxuICAgICAgICBhY3RpdmVEYXRhLmNob2ljZT8uaWQgfHwgKHR5cGVvZiBhY3RpdmVEYXRhLmlkID09PSAnc3RyaW5nJyA/IGFjdGl2ZURhdGEuaWQuc3BsaXQoJy0nKVswXSA6IGFjdGl2ZURhdGEuaWQpO1xuICAgICAgdGhpcy5tb3ZlQ2hvaWNlKGNob2ljZUlkLCBhY3RpdmVEYXRhLmNhdGVnb3J5SWQsIG92ZXJEYXRhLmlkLCBhY3RpdmVEYXRhLmNob2ljZUluZGV4IHx8IDApO1xuICAgIH1cblxuICAgIC8vIHBsYWNpbmcgYSBjaG9pY2UgaW50byBhIGNhdGVnb3J5IChjb3JyZWN0IHJlc3BvbnNlKVxuICAgIGlmIChhY3RpdmVEYXRhLnR5cGUgPT09ICdjaG9pY2UnICYmIG92ZXJEYXRhLnR5cGUgPT09ICdjYXRlZ29yeScpIHtcbiAgICAgIHRoaXMuYWRkQ2hvaWNlVG9DYXRlZ29yeSh7IGlkOiBhY3RpdmVEYXRhLmlkIH0sIG92ZXJEYXRhLmlkKTtcbiAgICB9XG5cbiAgICAvLyBtb3ZpbmcgYSBjaG9pY2UgYmV0d2VlbiBjYXRlZ29yaWVzIChhbHRlcm5hdGUgcmVzcG9uc2UpXG4gICAgaWYgKGFjdGl2ZURhdGEudHlwZSA9PT0gJ2Nob2ljZS1wcmV2aWV3JyAmJiBvdmVyRGF0YS50eXBlID09PSAnY2F0ZWdvcnktYWx0ZXJuYXRlJykge1xuICAgICAgY29uc3QgdG9BbHRlcm5hdGVJbmRleCA9IG92ZXJEYXRhLmFsdGVybmF0ZVJlc3BvbnNlSW5kZXg7XG4gICAgICAvLyBFeHRyYWN0IG9yaWdpbmFsIGNob2ljZS5pZCAtIGlmIERyYWdnYWJsZUNob2ljZSB1c2VzIHRoZSB1bmlxdWUgaWQgaW4gZGF0YSwgZXh0cmFjdCB0aGUgZmlyc3QgcGFydFxuICAgICAgY29uc3QgY2hvaWNlSWQgPVxuICAgICAgICBhY3RpdmVEYXRhLmNob2ljZT8uaWQgfHwgKHR5cGVvZiBhY3RpdmVEYXRhLmlkID09PSAnc3RyaW5nJyA/IGFjdGl2ZURhdGEuaWQuc3BsaXQoJy0nKVswXSA6IGFjdGl2ZURhdGEuaWQpO1xuICAgICAgdGhpcy5tb3ZlQ2hvaWNlSW5BbHRlcm5hdGUoXG4gICAgICAgIGNob2ljZUlkLFxuICAgICAgICBhY3RpdmVEYXRhLmNhdGVnb3J5SWQsXG4gICAgICAgIG92ZXJEYXRhLmlkLFxuICAgICAgICBhY3RpdmVEYXRhLmNob2ljZUluZGV4IHx8IDAsXG4gICAgICAgIHRvQWx0ZXJuYXRlSW5kZXgsXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIHBsYWNpbmcgYSBjaG9pY2UgaW50byBhIGNhdGVnb3J5IChhbHRlcm5hdGUgcmVzcG9uc2UpXG4gICAgaWYgKGFsbG93QWx0ZXJuYXRlRW5hYmxlZCAmJiBhY3RpdmVEYXRhLnR5cGUgPT09ICdjaG9pY2UnICYmIG92ZXJEYXRhLnR5cGUgPT09ICdjYXRlZ29yeS1hbHRlcm5hdGUnKSB7XG4gICAgICBjb25zdCBjaG9pY2VJZCA9IGFjdGl2ZURhdGEuaWQ7XG4gICAgICBjb25zdCBjYXRlZ29yeUlkID0gb3ZlckRhdGEuaWQ7XG4gICAgICBjb25zdCB0b0FsdGVybmF0ZVJlc3BvbnNlSW5kZXggPSBvdmVyRGF0YS5hbHRlcm5hdGVSZXNwb25zZUluZGV4O1xuICAgICAgdGhpcy5hZGRDaG9pY2VUb0FsdGVybmF0ZUNhdGVnb3J5KHsgaWQ6IGNob2ljZUlkIH0sIGNhdGVnb3J5SWQsIHRvQWx0ZXJuYXRlUmVzcG9uc2VJbmRleCk7XG4gICAgfVxuICB9O1xuXG4gIGFkZENob2ljZVRvQ2F0ZWdvcnkgPSAoYWRkZWRDaG9pY2UsIGNhdGVnb3J5SWQpID0+IHtcbiAgICBjb25zdCB7IG1vZGVsIH0gPSB0aGlzLnByb3BzO1xuICAgIGxldCB7IGNob2ljZXMgPSBbXSwgY29ycmVjdFJlc3BvbnNlID0gW10sIG1heENob2ljZXNQZXJDYXRlZ29yeSA9IDAgfSA9IG1vZGVsIHx8IHt9O1xuICAgIGNvbnN0IGNob2ljZSA9IChjaG9pY2VzIHx8IFtdKS5maW5kKChjaG9pY2UpID0+IGNob2ljZS5pZCA9PT0gYWRkZWRDaG9pY2UuaWQpO1xuXG4gICAgbGV0IG5ld0NvcnJlY3RSZXNwb25zZSA9IG1vdmVDaG9pY2VUb0NhdGVnb3J5KGFkZGVkQ2hvaWNlLmlkLCB1bmRlZmluZWQsIGNhdGVnb3J5SWQsIDAsIGNvcnJlY3RSZXNwb25zZSk7XG5cbiAgICBpZiAoY2hvaWNlLmNhdGVnb3J5Q291bnQgIT09IDApIHtcbiAgICAgIG5ld0NvcnJlY3RSZXNwb25zZSA9IHZlcmlmeUFsbG93TXVsdGlwbGVQbGFjZW1lbnRzKGFkZGVkQ2hvaWNlLCBjYXRlZ29yeUlkLCBuZXdDb3JyZWN0UmVzcG9uc2UpO1xuICAgIH1cbiAgICBjb25zdCBtYXhDYXRlZ29yeUNob2ljZXMgPSBnZXRNYXhDYXRlZ29yeUNob2ljZXMobW9kZWwpO1xuXG4gICAgdGhpcy51cGRhdGVNb2RlbCh7XG4gICAgICBjb3JyZWN0UmVzcG9uc2U6IG5ld0NvcnJlY3RSZXNwb25zZSxcbiAgICAgIG1heENob2ljZXNQZXJDYXRlZ29yeTpcbiAgICAgICAgbWF4Q2hvaWNlc1BlckNhdGVnb3J5ICE9PSAwICYmIG1heENob2ljZXNQZXJDYXRlZ29yeSA8IG1heENhdGVnb3J5Q2hvaWNlc1xuICAgICAgICAgID8gbWF4Q2hvaWNlc1BlckNhdGVnb3J5ICsgMVxuICAgICAgICAgIDogbWF4Q2hvaWNlc1BlckNhdGVnb3J5LFxuICAgIH0pO1xuICB9O1xuXG4gIGRlbGV0ZUNob2ljZUZyb21DYXRlZ29yeSA9IChjYXRlZ29yeSwgY2hvaWNlLCBjaG9pY2VJbmRleCkgPT4ge1xuICAgIGNvbnN0IHsgbW9kZWwgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgY29ycmVjdFJlc3BvbnNlID0gcmVtb3ZlQ2hvaWNlRnJvbUNhdGVnb3J5KGNob2ljZS5pZCwgY2F0ZWdvcnkuaWQsIGNob2ljZUluZGV4LCBtb2RlbC5jb3JyZWN0UmVzcG9uc2UpO1xuXG4gICAgdGhpcy51cGRhdGVNb2RlbCh7IGNvcnJlY3RSZXNwb25zZSB9KTtcbiAgfTtcblxuICBtb3ZlQ2hvaWNlID0gKGNob2ljZUlkLCBmcm9tLCB0bywgY2hvaWNlSW5kZXgpID0+IHtcbiAgICBjb25zdCB7IG1vZGVsIH0gPSB0aGlzLnByb3BzO1xuICAgIGxldCB7IGNob2ljZXMsIGNvcnJlY3RSZXNwb25zZSA9IFtdLCBtYXhDaG9pY2VzUGVyQ2F0ZWdvcnkgPSAwIH0gPSBtb2RlbCB8fCB7fTtcbiAgICBjb25zdCBjaG9pY2UgPSAoY2hvaWNlcyB8fCBbXSkuZmluZCgoY2hvaWNlKSA9PiBjaG9pY2UuaWQgPT09IGNob2ljZUlkKTtcbiAgICBpZiAodG8gPT09IGZyb20gfHwgIWNob2ljZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoY2hvaWNlLmNhdGVnb3J5Q291bnQgIT09IDApIHtcbiAgICAgIGNvcnJlY3RSZXNwb25zZSA9IG1vdmVDaG9pY2VUb0NhdGVnb3J5KGNob2ljZS5pZCwgZnJvbSwgdG8sIGNob2ljZUluZGV4LCBjb3JyZWN0UmVzcG9uc2UpO1xuICAgICAgY29ycmVjdFJlc3BvbnNlID0gdmVyaWZ5QWxsb3dNdWx0aXBsZVBsYWNlbWVudHMoY2hvaWNlLCB0bywgY29ycmVjdFJlc3BvbnNlKTtcbiAgICB9IGVsc2UgaWYgKGNob2ljZS5jYXRlZ29yeUNvdW50ID09PSAwKSB7XG4gICAgICBjb3JyZWN0UmVzcG9uc2UgPSBtb3ZlQ2hvaWNlVG9DYXRlZ29yeShjaG9pY2UuaWQsIHVuZGVmaW5lZCwgdG8sIDAsIGNvcnJlY3RSZXNwb25zZSk7XG4gICAgfVxuICAgIGNvbnN0IG1heENhdGVnb3J5Q2hvaWNlcyA9IGdldE1heENhdGVnb3J5Q2hvaWNlcyhtb2RlbCk7XG4gICAgLy8gd2hlbiBtYXhDaG9pY2VzUGVyQ2F0ZWdvcnkgaXMgc2V0IHRvIDAsIHRoZXJlIGlzIG5vIGxpbWl0IHNvIGl0IHNob3VsZCBub3QgYmUgdXBkYXRlZFxuICAgIHRoaXMudXBkYXRlTW9kZWwoe1xuICAgICAgY29ycmVjdFJlc3BvbnNlLFxuICAgICAgbWF4Q2hvaWNlc1BlckNhdGVnb3J5OlxuICAgICAgICBtYXhDaG9pY2VzUGVyQ2F0ZWdvcnkgIT09IDAgJiYgbWF4Q2hvaWNlc1BlckNhdGVnb3J5IDwgbWF4Q2F0ZWdvcnlDaG9pY2VzXG4gICAgICAgICAgPyBtYXhDaG9pY2VzUGVyQ2F0ZWdvcnkgKyAxXG4gICAgICAgICAgOiBtYXhDaG9pY2VzUGVyQ2F0ZWdvcnksXG4gICAgfSk7XG4gIH07XG5cbiAgLy8gbWV0aG9kcyBmb3IgYWx0ZXJuYXRlIHJlc3BvbnNlc1xuICBhZGRDaG9pY2VUb0FsdGVybmF0ZUNhdGVnb3J5ID0gKGFkZGVkQ2hvaWNlLCBjYXRlZ29yeUlkLCBhbHRJbmRleCkgPT4ge1xuICAgIGNvbnN0IHsgbW9kZWwgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgeyBjb3JyZWN0UmVzcG9uc2UsIGNob2ljZXMsIG1heENob2ljZXNQZXJDYXRlZ29yeSA9IDAgfSA9IG1vZGVsO1xuXG4gICAgY29uc3QgY2hvaWNlID0gY2hvaWNlcy5maW5kKChjKSA9PiBjLmlkID09PSBhZGRlZENob2ljZS5pZCk7XG5cbiAgICBjb3JyZWN0UmVzcG9uc2UuZm9yRWFjaCgoYSkgPT4ge1xuICAgICAgaWYgKGEuY2F0ZWdvcnkgPT09IGNhdGVnb3J5SWQpIHtcbiAgICAgICAgYS5hbHRlcm5hdGVSZXNwb25zZXMgPSBhLmFsdGVybmF0ZVJlc3BvbnNlcyB8fCBbXTtcblxuICAgICAgICBpZiAoYS5hbHRlcm5hdGVSZXNwb25zZXNbYWx0SW5kZXhdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBhLmFsdGVybmF0ZVJlc3BvbnNlc1thbHRJbmRleF0gPSBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGEuYWx0ZXJuYXRlUmVzcG9uc2VzW2FsdEluZGV4XS5wdXNoKGFkZGVkQ2hvaWNlLmlkKTtcbiAgICAgICAgaWYgKGNob2ljZS5jYXRlZ29yeUNvdW50ICYmIGNob2ljZS5jYXRlZ29yeUNvdW50ICE9PSAwKSB7XG4gICAgICAgICAgYS5hbHRlcm5hdGVSZXNwb25zZXNbYWx0SW5kZXhdID0gYS5hbHRlcm5hdGVSZXNwb25zZXNbYWx0SW5kZXhdLnJlZHVjZSgoYWNjLCBjdXJyZW50VmFsdWUpID0+IHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50VmFsdWUgPT09IGNob2ljZS5pZCkge1xuICAgICAgICAgICAgICBjb25zdCBmb3VuZEluZGV4ID0gYWNjLmZpbmRJbmRleCgoYykgPT4gYyA9PT0gY2hvaWNlLmlkKTtcbiAgICAgICAgICAgICAgaWYgKGZvdW5kSW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgYWNjLnB1c2goY3VycmVudFZhbHVlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgYWNjLnB1c2goY3VycmVudFZhbHVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICB9LCBbXSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChhLmFsdGVybmF0ZVJlc3BvbnNlc1thbHRJbmRleF0gJiYgY2hvaWNlLmNhdGVnb3J5Q291bnQgIT09IDApIHtcbiAgICAgICAgICBhLmFsdGVybmF0ZVJlc3BvbnNlc1thbHRJbmRleF0gPSBhLmFsdGVybmF0ZVJlc3BvbnNlc1thbHRJbmRleF0uZmlsdGVyKChjKSA9PiBjICE9PSBhZGRlZENob2ljZS5pZCk7XG4gICAgICAgICAgcmV0dXJuIGE7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGE7XG4gICAgfSk7XG5cbiAgICBjb25zdCBtYXhDYXRlZ29yeUNob2ljZXMgPSBnZXRNYXhDYXRlZ29yeUNob2ljZXMobW9kZWwpO1xuICAgIC8vIHdoZW4gbWF4Q2hvaWNlc1BlckNhdGVnb3J5IGlzIHNldCB0byAwLCB0aGVyZSBpcyBubyBsaW1pdCBzbyBpdCBzaG91bGQgbm90IGJlIHVwZGF0ZWRcbiAgICB0aGlzLnVwZGF0ZU1vZGVsKHtcbiAgICAgIGNvcnJlY3RSZXNwb25zZSxcbiAgICAgIG1heENob2ljZXNQZXJDYXRlZ29yeTpcbiAgICAgICAgbWF4Q2hvaWNlc1BlckNhdGVnb3J5ICE9PSAwICYmIG1heENob2ljZXNQZXJDYXRlZ29yeSA8IG1heENhdGVnb3J5Q2hvaWNlc1xuICAgICAgICAgID8gbWF4Q2hvaWNlc1BlckNhdGVnb3J5ICsgMVxuICAgICAgICAgIDogbWF4Q2hvaWNlc1BlckNhdGVnb3J5LFxuICAgIH0pO1xuICB9O1xuXG4gIG1vdmVDaG9pY2VJbkFsdGVybmF0ZSA9IChjaG9pY2VJZCwgZnJvbSwgdG8sIGNob2ljZUluZGV4LCBhbHRlcm5hdGVJbmRleCkgPT4ge1xuICAgIGNvbnN0IHsgbW9kZWwgfSA9IHRoaXMucHJvcHM7XG4gICAgbGV0IHsgY2hvaWNlcywgY29ycmVjdFJlc3BvbnNlID0gW10sIG1heENob2ljZXNQZXJDYXRlZ29yeSA9IDAgfSA9IG1vZGVsIHx8IHt9O1xuICAgIGNvbnN0IGNob2ljZSA9IChjaG9pY2VzIHx8IFtdKS5maW5kKChjaG9pY2UpID0+IGNob2ljZS5pZCA9PT0gY2hvaWNlSWQpO1xuICAgIGNvcnJlY3RSZXNwb25zZSA9IG1vdmVDaG9pY2VUb0FsdGVybmF0ZShcbiAgICAgIGNob2ljZUlkLFxuICAgICAgZnJvbSxcbiAgICAgIHRvLFxuICAgICAgY2hvaWNlSW5kZXgsXG4gICAgICBjb3JyZWN0UmVzcG9uc2UsXG4gICAgICBhbHRlcm5hdGVJbmRleCxcbiAgICAgIGNob2ljZT8uY2F0ZWdvcnlDb3VudCxcbiAgICApO1xuXG4gICAgY29uc3QgbWF4Q2F0ZWdvcnlDaG9pY2VzID0gZ2V0TWF4Q2F0ZWdvcnlDaG9pY2VzKG1vZGVsKTtcbiAgICAvLyB3aGVuIG1heENob2ljZXNQZXJDYXRlZ29yeSBpcyBzZXQgdG8gMCwgdGhlcmUgaXMgbm8gbGltaXQgc28gaXQgc2hvdWxkIG5vdCBiZSB1cGRhdGVkXG4gICAgdGhpcy51cGRhdGVNb2RlbCh7XG4gICAgICBjb3JyZWN0UmVzcG9uc2UsXG4gICAgICBtYXhDaG9pY2VzUGVyQ2F0ZWdvcnk6XG4gICAgICAgIG1heENob2ljZXNQZXJDYXRlZ29yeSAhPT0gMCAmJiBtYXhDaG9pY2VzUGVyQ2F0ZWdvcnkgPCBtYXhDYXRlZ29yeUNob2ljZXNcbiAgICAgICAgICA/IG1heENob2ljZXNQZXJDYXRlZ29yeSArIDFcbiAgICAgICAgICA6IG1heENob2ljZXNQZXJDYXRlZ29yeSxcbiAgICB9KTtcbiAgfTtcblxuICBkZWxldGVDaG9pY2VGcm9tQWx0ZXJuYXRlQ2F0ZWdvcnkgPSAoY2F0ZWdvcnksIGNob2ljZSwgY2hvaWNlSW5kZXgsIGFsdEluZGV4KSA9PiB7XG4gICAgY29uc3QgeyBtb2RlbCB9ID0gdGhpcy5wcm9wcztcblxuICAgIGNvbnN0IGNvcnJlY3RSZXNwb25zZSA9IHJlbW92ZUNob2ljZUZyb21BbHRlcm5hdGUoXG4gICAgICBjaG9pY2UuaWQsXG4gICAgICBjYXRlZ29yeS5pZCxcbiAgICAgIGNob2ljZUluZGV4LFxuICAgICAgYWx0SW5kZXgsXG4gICAgICBtb2RlbC5jb3JyZWN0UmVzcG9uc2UsXG4gICAgKTtcblxuICAgIHRoaXMudXBkYXRlTW9kZWwoeyBjb3JyZWN0UmVzcG9uc2UgfSk7XG4gIH07XG5cbiAgcmVuZGVyRHJhZ092ZXJsYXkgPSAoKSA9PiB7XG4gICAgY29uc3QgeyBhY3RpdmVEcmFnSXRlbSB9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb25zdCB7IG1vZGVsLCBjb25maWd1cmF0aW9uIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgaWYgKCFhY3RpdmVEcmFnSXRlbSkgcmV0dXJuIG51bGw7XG5cbiAgICBpZiAoYWN0aXZlRHJhZ0l0ZW0udHlwZSA9PT0gJ2Nob2ljZScpIHtcbiAgICAgIGNvbnN0IGNob2ljZSA9IG1vZGVsLmNob2ljZXM/LmZpbmQoKGMpID0+IGMuaWQgPT09IGFjdGl2ZURyYWdJdGVtLmlkKTtcbiAgICAgIGlmICghY2hvaWNlKSByZXR1cm4gbnVsbDtcblxuICAgICAgcmV0dXJuIDxDaG9pY2UgY2hvaWNlPXtjaG9pY2V9IGNvbmZpZ3VyYXRpb249e2NvbmZpZ3VyYXRpb259IC8+O1xuICAgIH0gZWxzZSBpZiAoYWN0aXZlRHJhZ0l0ZW0udHlwZSA9PT0gJ2Nob2ljZS1wcmV2aWV3JyAmJiBhY3RpdmVEcmFnSXRlbS5hbHRlcm5hdGVSZXNwb25zZUluZGV4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGNob2ljZSA9IG1vZGVsLmNob2ljZXM/LmZpbmQoKGMpID0+IGMuaWQgPT09IGFjdGl2ZURyYWdJdGVtLmlkKTtcbiAgICAgIGlmICghY2hvaWNlKSByZXR1cm4gbnVsbDtcbiAgICAgIHJldHVybiA8Q2hvaWNlUHJldmlldyBjaG9pY2U9e2Nob2ljZX0gLz47XG4gICAgfSBlbHNlIGlmIChhY3RpdmVEcmFnSXRlbS50eXBlID09PSAnY2hvaWNlLXByZXZpZXcnICYmIGFjdGl2ZURyYWdJdGVtLmFsdGVybmF0ZVJlc3BvbnNlSW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgY2hvaWNlID0gbW9kZWwuY2hvaWNlcz8uZmluZCgoYykgPT4gYy5pZCA9PT0gYWN0aXZlRHJhZ0l0ZW0uaWQpO1xuICAgICAgaWYgKCFjaG9pY2UpIHJldHVybiBudWxsO1xuICAgICAgcmV0dXJuIDxDaG9pY2VQcmV2aWV3IGNob2ljZT17Y2hvaWNlfSBhbHRlcm5hdGVSZXNwb25zZUluZGV4PXthY3RpdmVEcmFnSXRlbS5hbHRlcm5hdGVSZXNwb25zZUluZGV4fSAvPjtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfTtcblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgeyBjb25maWd1cmF0aW9uLCBpbWFnZVN1cHBvcnQsIG1vZGVsLCB1cGxvYWRTb3VuZFN1cHBvcnQsIG9uQ29uZmlndXJhdGlvbkNoYW5nZWQgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3Qge1xuICAgICAgYWxsb3dBbHRlcm5hdGUgPSB7fSxcbiAgICAgIGFsbG93TXVsdGlwbGVQbGFjZW1lbnRzID0ge30sXG4gICAgICBiYXNlSW5wdXRDb25maWd1cmF0aW9uID0ge30sXG4gICAgICBjYXRlZ29yaWVzUGVyUm93ID0ge30sXG4gICAgICBjaG9pY2VzUG9zaXRpb24gPSB7fSxcbiAgICAgIGNvbnRlbnREaW1lbnNpb25zID0ge30sXG4gICAgICBmZWVkYmFjayA9IHt9LFxuICAgICAgbG9ja0Nob2ljZU9yZGVyID0ge30sXG4gICAgICBtYXhJbWFnZUhlaWdodCA9IHt9LFxuICAgICAgbWF4SW1hZ2VXaWR0aCA9IHt9LFxuICAgICAgbWF4UGxhY2VtZW50cyA9IHt9LFxuICAgICAgbWluQ2F0ZWdvcmllc1BlclJvdyA9IDEsXG4gICAgICBwYXJ0aWFsU2NvcmluZyA9IHt9LFxuICAgICAgcHJvbXB0ID0ge30sXG4gICAgICByYXRpb25hbGUgPSB7fSxcbiAgICAgIHNjb3JpbmdUeXBlID0ge30sXG4gICAgICBzZXR0aW5nc1BhbmVsRGlzYWJsZWQsXG4gICAgICBzcGVsbENoZWNrID0ge30sXG4gICAgICBzdHVkZW50SW5zdHJ1Y3Rpb25zID0ge30sXG4gICAgICB0ZWFjaGVySW5zdHJ1Y3Rpb25zID0ge30sXG4gICAgICB3aXRoUnVicmljID0ge30sXG4gICAgICBtYXRoTWxPcHRpb25zID0ge30sXG4gICAgICBsYW5ndWFnZSA9IHt9LFxuICAgICAgbGFuZ3VhZ2VDaG9pY2VzID0ge30sXG4gICAgICBhbGxvd01heEFuc3dlckNob2ljZXMgPSB7fSxcbiAgICB9ID0gY29uZmlndXJhdGlvbiB8fCB7fTtcbiAgICBjb25zdCB7XG4gICAgICBhbGxvd0FsdGVybmF0ZUVuYWJsZWQsXG4gICAgICBhbGxvd01heENob2ljZXNQZXJDYXRlZ29yeSxcbiAgICAgIGVycm9ycyxcbiAgICAgIGZlZWRiYWNrRW5hYmxlZCxcbiAgICAgIG1heENob2ljZXNQZXJDYXRlZ29yeSxcbiAgICAgIHByb21wdEVuYWJsZWQsXG4gICAgICByYXRpb25hbGVFbmFibGVkLFxuICAgICAgc3BlbGxDaGVja0VuYWJsZWQsXG4gICAgICB0ZWFjaGVySW5zdHJ1Y3Rpb25zRW5hYmxlZCxcbiAgICAgIHRvb2xiYXJFZGl0b3JQb3NpdGlvbixcbiAgICAgIGV4dHJhQ1NTUnVsZXMsXG4gICAgfSA9IG1vZGVsIHx8IHt9O1xuICAgIGNvbnN0IHtcbiAgICAgIHByb21wdDogcHJvbXB0RXJyb3IsXG4gICAgICByYXRpb25hbGU6IHJhdGlvbmFsZUVycm9yLFxuICAgICAgdGVhY2hlckluc3RydWN0aW9uczogdGVhY2hlckluc3RydWN0aW9uc0Vycm9yLFxuICAgIH0gPSBlcnJvcnMgfHwge307XG5cbiAgICBjb25zdCB0b29sYmFyT3B0cyA9IHtcbiAgICAgIHBvc2l0aW9uOiB0b29sYmFyRWRpdG9yUG9zaXRpb24gPT09ICd0b3AnID8gJ3RvcCcgOiAnYm90dG9tJyxcbiAgICB9O1xuXG4gICAgY29uc3QgY29uZmlnID0gbW9kZWwuY29uZmlnIHx8IHt9O1xuICAgIGNvbmZpZy5jaG9pY2VzID0gY29uZmlnLmNob2ljZXMgfHwgeyBsYWJlbDogJycsIGNvbHVtbnM6IDIgfTtcblxuICAgIGNvbnN0IGNhdGVnb3JpZXMgPSBidWlsZENhdGVnb3JpZXMobW9kZWwuY2F0ZWdvcmllcyB8fCBbXSwgbW9kZWwuY2hvaWNlcyB8fCBbXSwgbW9kZWwuY29ycmVjdFJlc3BvbnNlIHx8IFtdKTtcblxuICAgIGNvbnN0IGFsdGVybmF0ZVJlc3BvbnNlcyA9IGJ1aWxkQWx0ZXJuYXRlUmVzcG9uc2VzKFxuICAgICAgbW9kZWwuY2F0ZWdvcmllcyB8fCBbXSxcbiAgICAgIG1vZGVsLmNob2ljZXMgfHwgW10sXG4gICAgICBtb2RlbC5jb3JyZWN0UmVzcG9uc2UgfHwgW10sXG4gICAgKTtcblxuICAgIGNvbnN0IGNob2ljZXMgPSBtb2RlbC5jaG9pY2VzLm1hcCgoYykgPT4ge1xuICAgICAgYy5jb3JyZWN0UmVzcG9uc2VDb3VudCA9IHRoaXMuY291bnRDaG9pY2VJbkNvcnJlY3RSZXNwb25zZShjKTtcbiAgICAgIC8vIGVuc3VyZSBjYXRlZ29yeUNvdW50IGlzIHNldCBldmVuIHRob3VnaCB1cGRhdGVkTW9kZWwgaGFzbid0IGJlZW4gY2FsbGVkXG4gICAgICBjLmNhdGVnb3J5Q291bnQgPSB0aGlzLmNoZWNrQWxsb3dNdWx0aXBsZVBsYWNlbWVudHMobW9kZWwuYWxsb3dNdWx0aXBsZVBsYWNlbWVudHNFbmFibGVkLCBjKTtcbiAgICAgIHJldHVybiBjO1xuICAgIH0pO1xuXG4gICAgY29uc3QgZGVmYXVsdEltYWdlTWF4V2lkdGggPSBtYXhJbWFnZVdpZHRoICYmIG1heEltYWdlV2lkdGgucHJvbXB0O1xuICAgIGNvbnN0IGRlZmF1bHRJbWFnZU1heEhlaWdodCA9IG1heEltYWdlSGVpZ2h0ICYmIG1heEltYWdlSGVpZ2h0LnByb21wdDtcblxuICAgIGNvbnN0IHBhbmVsU2V0dGluZ3MgPSB7XG4gICAgICBwYXJ0aWFsU2NvcmluZzogcGFydGlhbFNjb3Jpbmcuc2V0dGluZ3MgJiYgdG9nZ2xlKHBhcnRpYWxTY29yaW5nLmxhYmVsKSxcbiAgICAgIGxvY2tDaG9pY2VPcmRlcjogbG9ja0Nob2ljZU9yZGVyLnNldHRpbmdzICYmIHRvZ2dsZShsb2NrQ2hvaWNlT3JkZXIubGFiZWwpLFxuICAgICAgY2F0ZWdvcmllc1BlclJvdzpcbiAgICAgICAgY2F0ZWdvcmllc1BlclJvdy5zZXR0aW5ncyAmJlxuICAgICAgICBudW1iZXJGaWVsZChjYXRlZ29yaWVzUGVyUm93LmxhYmVsLCB7XG4gICAgICAgICAgbGFiZWw6IGNhdGVnb3JpZXNQZXJSb3cubGFiZWwsXG4gICAgICAgICAgbWluOiBtaW5DYXRlZ29yaWVzUGVyUm93LFxuICAgICAgICAgIG1heDogNixcbiAgICAgICAgfSksXG4gICAgICBjaG9pY2VzUG9zaXRpb246IGNob2ljZXNQb3NpdGlvbi5zZXR0aW5ncyAmJiByYWRpbyhjaG9pY2VzUG9zaXRpb24ubGFiZWwsIFsnYmVsb3cnLCAnYWJvdmUnLCAnbGVmdCcsICdyaWdodCddKSxcbiAgICAgIGFsbG93TXVsdGlwbGVQbGFjZW1lbnRzRW5hYmxlZDpcbiAgICAgICAgYWxsb3dNdWx0aXBsZVBsYWNlbWVudHMuc2V0dGluZ3MgJiZcbiAgICAgICAgZHJvcGRvd24oYWxsb3dNdWx0aXBsZVBsYWNlbWVudHMubGFiZWwsIFtcbiAgICAgICAgICBtdWx0aXBsZVBsYWNlbWVudHMuZW5hYmxlZCxcbiAgICAgICAgICBtdWx0aXBsZVBsYWNlbWVudHMuZGlzYWJsZWQsXG4gICAgICAgICAgbXVsdGlwbGVQbGFjZW1lbnRzLnBlckNob2ljZSxcbiAgICAgICAgXSksXG4gICAgICBtYXhBbnN3ZXJDaG9pY2VzOlxuICAgICAgICBhbGxvd01heEFuc3dlckNob2ljZXMuc2V0dGluZ3MgJiZcbiAgICAgICAgbnVtYmVyRmllbGQoYWxsb3dNYXhBbnN3ZXJDaG9pY2VzLmxhYmVsLCB7XG4gICAgICAgICAgbGFiZWw6ICcnLFxuICAgICAgICAgIG1pbjogY2hvaWNlcz8ubGVuZ3RoIHx8IDAsXG4gICAgICAgICAgbWF4OiAzMCxcbiAgICAgICAgfSksXG4gICAgICBhbGxvd01heENob2ljZXNQZXJDYXRlZ29yeTogbWF4UGxhY2VtZW50cy5zZXR0aW5ncyAmJiB0b2dnbGUobWF4UGxhY2VtZW50cy5sYWJlbCksXG4gICAgICBtYXhDaG9pY2VzUGVyQ2F0ZWdvcnk6XG4gICAgICAgIGFsbG93TWF4Q2hvaWNlc1BlckNhdGVnb3J5ID09PSB0cnVlICYmXG4gICAgICAgIG51bWJlckZpZWxkKG1heFBsYWNlbWVudHMubGFiZWwsIHtcbiAgICAgICAgICBsYWJlbDogJycsXG4gICAgICAgICAgbWluOiAwLFxuICAgICAgICAgIG1heDogMzAsXG4gICAgICAgIH0pLFxuICAgICAgcHJvbXB0RW5hYmxlZDogcHJvbXB0LnNldHRpbmdzICYmIHRvZ2dsZShwcm9tcHQubGFiZWwpLFxuICAgICAgZmVlZGJhY2tFbmFibGVkOiBmZWVkYmFjay5zZXR0aW5ncyAmJiB0b2dnbGUoZmVlZGJhY2subGFiZWwpLFxuICAgICAgYWxsb3dBbHRlcm5hdGVFbmFibGVkOiBhbGxvd0FsdGVybmF0ZS5zZXR0aW5ncyAmJiB0b2dnbGUoYWxsb3dBbHRlcm5hdGUubGFiZWwpLFxuICAgICAgJ2xhbmd1YWdlLmVuYWJsZWQnOiBsYW5ndWFnZS5zZXR0aW5ncyAmJiB0b2dnbGUobGFuZ3VhZ2UubGFiZWwsIHRydWUpLFxuICAgICAgbGFuZ3VhZ2U6IGxhbmd1YWdlLnNldHRpbmdzICYmIGxhbmd1YWdlLmVuYWJsZWQgJiYgZHJvcGRvd24obGFuZ3VhZ2VDaG9pY2VzLmxhYmVsLCBsYW5ndWFnZUNob2ljZXMub3B0aW9ucyksXG4gICAgfTtcblxuICAgIGNvbnN0IHBhbmVsUHJvcGVydGllcyA9IHtcbiAgICAgIHRlYWNoZXJJbnN0cnVjdGlvbnNFbmFibGVkOiB0ZWFjaGVySW5zdHJ1Y3Rpb25zLnNldHRpbmdzICYmIHRvZ2dsZSh0ZWFjaGVySW5zdHJ1Y3Rpb25zLmxhYmVsKSxcbiAgICAgIHN0dWRlbnRJbnN0cnVjdGlvbnNFbmFibGVkOiBzdHVkZW50SW5zdHJ1Y3Rpb25zLnNldHRpbmdzICYmIHRvZ2dsZShzdHVkZW50SW5zdHJ1Y3Rpb25zLmxhYmVsKSxcbiAgICAgIHJhdGlvbmFsZUVuYWJsZWQ6IHJhdGlvbmFsZS5zZXR0aW5ncyAmJiB0b2dnbGUocmF0aW9uYWxlLmxhYmVsKSxcbiAgICAgIHNwZWxsQ2hlY2tFbmFibGVkOiBzcGVsbENoZWNrLnNldHRpbmdzICYmIHRvZ2dsZShzcGVsbENoZWNrLmxhYmVsKSxcbiAgICAgIHNjb3JpbmdUeXBlOiBzY29yaW5nVHlwZS5zZXR0aW5ncyAmJiByYWRpbyhzY29yaW5nVHlwZS5sYWJlbCwgWydhdXRvJywgJ3J1YnJpYyddKSxcbiAgICAgIHJ1YnJpY0VuYWJsZWQ6IHdpdGhSdWJyaWM/LnNldHRpbmdzICYmIHRvZ2dsZSh3aXRoUnVicmljPy5sYWJlbCksXG4gICAgfTtcblxuICAgIGNvbnN0IGlzT3BlbmVkID0gdGhpcy5pc0FsZXJ0TW9kYWxPcGVuZWQoKTtcbiAgICBjb25zdCBhbGVydE1heENob2ljZXNNc2cgPSB0cmFuc2xhdG9yLnQoJ3RyYW5zbGF0aW9uOmNhdGVnb3JpemU6bWF4Q2hvaWNlc1BlckNhdGVnb3J5UmVzdHJpY3Rpb24nLCB7XG4gICAgICBsbmc6IG1vZGVsLmxhbmd1YWdlLFxuICAgICAgbWF4Q2hvaWNlc1BlckNhdGVnb3J5LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxEcmFnUHJvdmlkZXIgb25EcmFnU3RhcnQ9e3RoaXMub25EcmFnU3RhcnR9IG9uRHJhZ0VuZD17dGhpcy5vbkRyYWdFbmR9PlxuICAgICAgICA8SWRQcm92aWRlciB2YWx1ZT17dGhpcy51aWR9PlxuICAgICAgICAgIDxsYXlvdXQuQ29uZmlnTGF5b3V0XG4gICAgICAgICAgICBleHRyYUNTU1J1bGVzPXtleHRyYUNTU1J1bGVzfVxuICAgICAgICAgICAgZGltZW5zaW9ucz17Y29udGVudERpbWVuc2lvbnN9XG4gICAgICAgICAgICBoaWRlU2V0dGluZ3M9e3NldHRpbmdzUGFuZWxEaXNhYmxlZH1cbiAgICAgICAgICAgIHNldHRpbmdzPXtcbiAgICAgICAgICAgICAgPFBhbmVsXG4gICAgICAgICAgICAgICAgbW9kZWw9e21vZGVsfVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlTW9kZWw9e3RoaXMudXBkYXRlTW9kZWx9XG4gICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbj17Y29uZmlndXJhdGlvbn1cbiAgICAgICAgICAgICAgICBvbkNoYW5nZUNvbmZpZ3VyYXRpb249e29uQ29uZmlndXJhdGlvbkNoYW5nZWR9XG4gICAgICAgICAgICAgICAgZ3JvdXBzPXt7XG4gICAgICAgICAgICAgICAgICBTZXR0aW5nczogcGFuZWxTZXR0aW5ncyxcbiAgICAgICAgICAgICAgICAgIFByb3BlcnRpZXM6IHBhbmVsUHJvcGVydGllcyxcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIG1vZGFsPXtcbiAgICAgICAgICAgICAgICAgIDxBbGVydERpYWxvZ1xuICAgICAgICAgICAgICAgICAgICB0aXRsZT17J1dhcm5pbmcnfVxuICAgICAgICAgICAgICAgICAgICB0ZXh0PXthbGVydE1heENob2ljZXNNc2d9XG4gICAgICAgICAgICAgICAgICAgIG9wZW49e2lzT3BlbmVkfVxuICAgICAgICAgICAgICAgICAgICBvbkNsb3NlPXt0aGlzLm9uQWxlcnRNb2RhbENhbmNlbH1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt0ZWFjaGVySW5zdHJ1Y3Rpb25zRW5hYmxlZCAmJiAoXG4gICAgICAgICAgICAgIDxTdHlsZWRJbnB1dENvbnRhaW5lciBsYWJlbD17dGVhY2hlckluc3RydWN0aW9ucy5sYWJlbH0+XG4gICAgICAgICAgICAgICAgPEVkaXRhYmxlSHRtbFxuICAgICAgICAgICAgICAgICAgbWFya3VwPXttb2RlbC50ZWFjaGVySW5zdHJ1Y3Rpb25zIHx8ICcnfVxuICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuY2hhbmdlVGVhY2hlckluc3RydWN0aW9uc31cbiAgICAgICAgICAgICAgICAgIGltYWdlU3VwcG9ydD17aW1hZ2VTdXBwb3J0fVxuICAgICAgICAgICAgICAgICAgZXJyb3I9e3RlYWNoZXJJbnN0cnVjdGlvbnNFcnJvcn1cbiAgICAgICAgICAgICAgICAgIG5vbkVtcHR5PXtmYWxzZX1cbiAgICAgICAgICAgICAgICAgIHRvb2xiYXJPcHRzPXt0b29sYmFyT3B0c31cbiAgICAgICAgICAgICAgICAgIHBsdWdpblByb3BzPXtnZXRQbHVnaW5Qcm9wcyh0ZWFjaGVySW5zdHJ1Y3Rpb25zPy5pbnB1dENvbmZpZ3VyYXRpb24sIGJhc2VJbnB1dENvbmZpZ3VyYXRpb24pfVxuICAgICAgICAgICAgICAgICAgc3BlbGxDaGVjaz17c3BlbGxDaGVja0VuYWJsZWR9XG4gICAgICAgICAgICAgICAgICBtYXhJbWFnZVdpZHRoPXsobWF4SW1hZ2VXaWR0aCAmJiBtYXhJbWFnZVdpZHRoLnRlYWNoZXJJbnN0cnVjdGlvbnMpIHx8IGRlZmF1bHRJbWFnZU1heFdpZHRofVxuICAgICAgICAgICAgICAgICAgbWF4SW1hZ2VIZWlnaHQ9eyhtYXhJbWFnZUhlaWdodCAmJiBtYXhJbWFnZUhlaWdodC50ZWFjaGVySW5zdHJ1Y3Rpb25zKSB8fCBkZWZhdWx0SW1hZ2VNYXhIZWlnaHR9XG4gICAgICAgICAgICAgICAgICB1cGxvYWRTb3VuZFN1cHBvcnQ9e3VwbG9hZFNvdW5kU3VwcG9ydH1cbiAgICAgICAgICAgICAgICAgIGxhbmd1YWdlQ2hhcmFjdGVyc1Byb3BzPXtbeyBsYW5ndWFnZTogJ3NwYW5pc2gnIH0sIHsgbGFuZ3VhZ2U6ICdzcGVjaWFsJyB9XX1cbiAgICAgICAgICAgICAgICAgIG1hdGhNbE9wdGlvbnM9e21hdGhNbE9wdGlvbnN9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICB7dGVhY2hlckluc3RydWN0aW9uc0Vycm9yICYmIDxFcnJvclRleHQ+e3RlYWNoZXJJbnN0cnVjdGlvbnNFcnJvcn08L0Vycm9yVGV4dD59XG4gICAgICAgICAgICAgIDwvU3R5bGVkSW5wdXRDb250YWluZXI+XG4gICAgICAgICAgICApfVxuXG4gICAgICAgICAgICB7cHJvbXB0RW5hYmxlZCAmJiAoXG4gICAgICAgICAgICAgIDxTdHlsZWRJbnB1dENvbnRhaW5lciBsYWJlbD17cHJvbXB0LmxhYmVsfT5cbiAgICAgICAgICAgICAgICA8RWRpdGFibGVIdG1sXG4gICAgICAgICAgICAgICAgICBtYXJrdXA9e21vZGVsLnByb21wdCB8fCAnJ31cbiAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLm9uUHJvbXB0Q2hhbmdlZH1cbiAgICAgICAgICAgICAgICAgIGltYWdlU3VwcG9ydD17aW1hZ2VTdXBwb3J0fVxuICAgICAgICAgICAgICAgICAgZXJyb3I9e3Byb21wdEVycm9yfVxuICAgICAgICAgICAgICAgICAgbm9uRW1wdHk9e2ZhbHNlfVxuICAgICAgICAgICAgICAgICAgZGlzYWJsZVVuZGVybGluZVxuICAgICAgICAgICAgICAgICAgdG9vbGJhck9wdHM9e3Rvb2xiYXJPcHRzfVxuICAgICAgICAgICAgICAgICAgcGx1Z2luUHJvcHM9e2dldFBsdWdpblByb3BzKHByb21wdD8uaW5wdXRDb25maWd1cmF0aW9uLCBiYXNlSW5wdXRDb25maWd1cmF0aW9uKX1cbiAgICAgICAgICAgICAgICAgIHNwZWxsQ2hlY2s9e3NwZWxsQ2hlY2tFbmFibGVkfVxuICAgICAgICAgICAgICAgICAgbWF4SW1hZ2VXaWR0aD17bWF4SW1hZ2VXaWR0aCAmJiBtYXhJbWFnZVdpZHRoLnByb21wdH1cbiAgICAgICAgICAgICAgICAgIG1heEltYWdlSGVpZ2h0PXttYXhJbWFnZUhlaWdodCAmJiBtYXhJbWFnZUhlaWdodC5wcm9tcHR9XG4gICAgICAgICAgICAgICAgICB1cGxvYWRTb3VuZFN1cHBvcnQ9e3VwbG9hZFNvdW5kU3VwcG9ydH1cbiAgICAgICAgICAgICAgICAgIGxhbmd1YWdlQ2hhcmFjdGVyc1Byb3BzPXtbeyBsYW5ndWFnZTogJ3NwYW5pc2gnIH0sIHsgbGFuZ3VhZ2U6ICdzcGVjaWFsJyB9XX1cbiAgICAgICAgICAgICAgICAgIG1hdGhNbE9wdGlvbnM9e21hdGhNbE9wdGlvbnN9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICB7cHJvbXB0RXJyb3IgJiYgPEVycm9yVGV4dD57cHJvbXB0RXJyb3J9PC9FcnJvclRleHQ+fVxuICAgICAgICAgICAgICA8L1N0eWxlZElucHV0Q29udGFpbmVyPlxuICAgICAgICAgICAgKX1cblxuICAgICAgICAgICAgPENhdGVnb3JpZXNcbiAgICAgICAgICAgICAgaW1hZ2VTdXBwb3J0PXtpbWFnZVN1cHBvcnR9XG4gICAgICAgICAgICAgIHVwbG9hZFNvdW5kU3VwcG9ydD17dXBsb2FkU291bmRTdXBwb3J0fVxuICAgICAgICAgICAgICBtb2RlbD17bW9kZWx9XG4gICAgICAgICAgICAgIGNhdGVnb3JpZXM9e2NhdGVnb3JpZXMgfHwgW119XG4gICAgICAgICAgICAgIG9uTW9kZWxDaGFuZ2VkPXt0aGlzLnVwZGF0ZU1vZGVsfVxuICAgICAgICAgICAgICB0b29sYmFyT3B0cz17dG9vbGJhck9wdHN9XG4gICAgICAgICAgICAgIHNwZWxsQ2hlY2s9e3NwZWxsQ2hlY2tFbmFibGVkfVxuICAgICAgICAgICAgICBjb25maWd1cmF0aW9uPXtjb25maWd1cmF0aW9ufVxuICAgICAgICAgICAgICBkZWZhdWx0SW1hZ2VNYXhXaWR0aD17ZGVmYXVsdEltYWdlTWF4V2lkdGh9XG4gICAgICAgICAgICAgIGRlZmF1bHRJbWFnZU1heEhlaWdodD17ZGVmYXVsdEltYWdlTWF4SGVpZ2h0fVxuICAgICAgICAgICAgICBtYXRoTWxPcHRpb25zPXttYXRoTWxPcHRpb25zfVxuICAgICAgICAgICAgLz5cblxuICAgICAgICAgICAgPENob2ljZXNcbiAgICAgICAgICAgICAgaW1hZ2VTdXBwb3J0PXtpbWFnZVN1cHBvcnR9XG4gICAgICAgICAgICAgIHVwbG9hZFNvdW5kU3VwcG9ydD17dXBsb2FkU291bmRTdXBwb3J0fVxuICAgICAgICAgICAgICBjaG9pY2VzPXtjaG9pY2VzfVxuICAgICAgICAgICAgICBtb2RlbD17bW9kZWx9XG4gICAgICAgICAgICAgIG9uTW9kZWxDaGFuZ2VkPXt0aGlzLnVwZGF0ZU1vZGVsfVxuICAgICAgICAgICAgICB0b29sYmFyT3B0cz17dG9vbGJhck9wdHN9XG4gICAgICAgICAgICAgIHNwZWxsQ2hlY2s9e3NwZWxsQ2hlY2tFbmFibGVkfVxuICAgICAgICAgICAgICBjb25maWd1cmF0aW9uPXtjb25maWd1cmF0aW9ufVxuICAgICAgICAgICAgICBkZWZhdWx0SW1hZ2VNYXhXaWR0aD17ZGVmYXVsdEltYWdlTWF4V2lkdGh9XG4gICAgICAgICAgICAgIGRlZmF1bHRJbWFnZU1heEhlaWdodD17ZGVmYXVsdEltYWdlTWF4SGVpZ2h0fVxuICAgICAgICAgICAgLz5cblxuICAgICAgICAgICAge2FsbG93QWx0ZXJuYXRlRW5hYmxlZCAmJiAoXG4gICAgICAgICAgICAgIDxTdHlsZWRIZWFkZXJcbiAgICAgICAgICAgICAgICBsYWJlbD1cIkFsdGVybmF0ZSBSZXNwb25zZXNcIlxuICAgICAgICAgICAgICAgIGJ1dHRvbkxhYmVsPVwiQUREIEFOIEFMVEVSTkFURSBSRVNQT05TRVwiXG4gICAgICAgICAgICAgICAgb25BZGQ9e3RoaXMub25BZGRBbHRlcm5hdGVSZXNwb25zZX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICB7YWxsb3dBbHRlcm5hdGVFbmFibGVkICYmXG4gICAgICAgICAgICAgIGFsdGVybmF0ZVJlc3BvbnNlcy5tYXAoKGNhdGVnb3JpZXNMaXN0LCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICA8UmVhY3QuRnJhZ21lbnQga2V5PXtpbmRleH0+XG4gICAgICAgICAgICAgICAgICAgIDxTdHlsZWRIZWFkZXJcbiAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PXsnc3VidGl0bGUxJ31cbiAgICAgICAgICAgICAgICAgICAgICBsYWJlbD1cIkFsdGVybmF0ZSBSZXNwb25zZVwiXG4gICAgICAgICAgICAgICAgICAgICAgYnV0dG9uTGFiZWw9XCJSRU1PVkUgQUxURVJOQVRFIFJFU1BPTlNFXCJcbiAgICAgICAgICAgICAgICAgICAgICBvbkFkZD17KCkgPT4gdGhpcy5vblJlbW92ZUFsdGVybmF0ZVJlc3BvbnNlKGluZGV4KX1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPEFsdGVybmF0ZVJlc3BvbnNlc1xuICAgICAgICAgICAgICAgICAgICAgIGFsdEluZGV4PXtpbmRleH1cbiAgICAgICAgICAgICAgICAgICAgICBpbWFnZVN1cHBvcnQ9e2ltYWdlU3VwcG9ydH1cbiAgICAgICAgICAgICAgICAgICAgICBtb2RlbD17bW9kZWx9XG4gICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbj17Y29uZmlndXJhdGlvbn1cbiAgICAgICAgICAgICAgICAgICAgICBjYXRlZ29yaWVzPXtjYXRlZ29yaWVzTGlzdH1cbiAgICAgICAgICAgICAgICAgICAgICBvbk1vZGVsQ2hhbmdlZD17dGhpcy51cGRhdGVNb2RlbH1cbiAgICAgICAgICAgICAgICAgICAgICB1cGxvYWRTb3VuZFN1cHBvcnQ9e3VwbG9hZFNvdW5kU3VwcG9ydH1cbiAgICAgICAgICAgICAgICAgICAgICBtYXRoTWxPcHRpb25zPXttYXRoTWxPcHRpb25zfVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9KX1cblxuICAgICAgICAgICAge3JhdGlvbmFsZUVuYWJsZWQgJiYgKFxuICAgICAgICAgICAgICA8U3R5bGVkSW5wdXRDb250YWluZXIgbGFiZWw9e3JhdGlvbmFsZS5sYWJlbH0+XG4gICAgICAgICAgICAgICAgPEVkaXRhYmxlSHRtbFxuICAgICAgICAgICAgICAgICAgbWFya3VwPXttb2RlbC5yYXRpb25hbGUgfHwgJyd9XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5jaGFuZ2VSYXRpb25hbGV9XG4gICAgICAgICAgICAgICAgICBpbWFnZVN1cHBvcnQ9e2ltYWdlU3VwcG9ydH1cbiAgICAgICAgICAgICAgICAgIGVycm9yPXtyYXRpb25hbGVFcnJvcn1cbiAgICAgICAgICAgICAgICAgIG5vbkVtcHR5PXtmYWxzZX1cbiAgICAgICAgICAgICAgICAgIHRvb2xiYXJPcHRzPXt0b29sYmFyT3B0c31cbiAgICAgICAgICAgICAgICAgIHBsdWdpblByb3BzPXtnZXRQbHVnaW5Qcm9wcyhwcm9tcHQ/LmlucHV0Q29uZmlndXJhdGlvbiwgYmFzZUlucHV0Q29uZmlndXJhdGlvbil9XG4gICAgICAgICAgICAgICAgICBzcGVsbENoZWNrPXtzcGVsbENoZWNrRW5hYmxlZH1cbiAgICAgICAgICAgICAgICAgIG1heEltYWdlV2lkdGg9eyhtYXhJbWFnZVdpZHRoICYmIG1heEltYWdlV2lkdGgucmF0aW9uYWxlKSB8fCBkZWZhdWx0SW1hZ2VNYXhXaWR0aH1cbiAgICAgICAgICAgICAgICAgIG1heEltYWdlSGVpZ2h0PXsobWF4SW1hZ2VIZWlnaHQgJiYgbWF4SW1hZ2VIZWlnaHQucmF0aW9uYWxlKSB8fCBkZWZhdWx0SW1hZ2VNYXhIZWlnaHR9XG4gICAgICAgICAgICAgICAgICB1cGxvYWRTb3VuZFN1cHBvcnQ9e3VwbG9hZFNvdW5kU3VwcG9ydH1cbiAgICAgICAgICAgICAgICAgIGxhbmd1YWdlQ2hhcmFjdGVyc1Byb3BzPXtbeyBsYW5ndWFnZTogJ3NwYW5pc2gnIH0sIHsgbGFuZ3VhZ2U6ICdzcGVjaWFsJyB9XX1cbiAgICAgICAgICAgICAgICAgIG1hdGhNbE9wdGlvbnM9e21hdGhNbE9wdGlvbnN9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICB7cmF0aW9uYWxlRXJyb3IgJiYgPEVycm9yVGV4dD57cmF0aW9uYWxlRXJyb3J9PC9FcnJvclRleHQ+fVxuICAgICAgICAgICAgICA8L1N0eWxlZElucHV0Q29udGFpbmVyPlxuICAgICAgICAgICAgKX1cblxuICAgICAgICAgICAge2ZlZWRiYWNrRW5hYmxlZCAmJiAoXG4gICAgICAgICAgICAgIDxGZWVkYmFja0NvbmZpZyBmZWVkYmFjaz17bW9kZWwuZmVlZGJhY2t9IG9uQ2hhbmdlPXt0aGlzLmNoYW5nZUZlZWRiYWNrfSB0b29sYmFyT3B0cz17dG9vbGJhck9wdHN9IC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvbGF5b3V0LkNvbmZpZ0xheW91dD5cbiAgICAgICAgICA8RHJhZ092ZXJsYXk+XG4gICAgICAgICAgICA8RHJhZ1ByZXZpZXdXcmFwcGVyPnt0aGlzLnJlbmRlckRyYWdPdmVybGF5KCl9PC9EcmFnUHJldmlld1dyYXBwZXI+XG4gICAgICAgICAgPC9EcmFnT3ZlcmxheT5cbiAgICAgICAgPC9JZFByb3ZpZGVyPlxuICAgICAgPC9EcmFnUHJvdmlkZXI+XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBEZXNpZ247XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUEsSUFBQUEsTUFBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsTUFBQSxHQUFBQyxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUcsVUFBQSxHQUFBRCxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUksT0FBQSxHQUFBSixPQUFBO0FBQ0Es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
|