@pie-lib/editable-html 9.5.13 → 10.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 -302
- package/lib/components.js +116 -0
- package/lib/components.js.map +1 -0
- package/lib/editor.js +418 -103
- package/lib/editor.js.map +1 -1
- package/lib/index.js +101 -155
- package/lib/index.js.map +1 -1
- package/lib/new-serialization.js +320 -0
- package/lib/new-serialization.js.map +1 -0
- package/lib/old-serialization.js +330 -0
- package/lib/parse-html.js +1 -1
- package/lib/parse-html.js.map +1 -1
- package/lib/plugins/characters/custom-popper.js +1 -1
- package/lib/plugins/characters/custom-popper.js.map +1 -1
- package/lib/plugins/characters/index.js +21 -19
- package/lib/plugins/characters/index.js.map +1 -1
- package/lib/plugins/characters/utils.js +1 -1
- package/lib/plugins/characters/utils.js.map +1 -1
- package/lib/plugins/hotKeys/index.js +67 -0
- package/lib/plugins/hotKeys/index.js.map +1 -0
- package/lib/plugins/image/alt-dialog.js +1 -6
- package/lib/plugins/image/alt-dialog.js.map +1 -1
- package/lib/plugins/image/component.js +70 -53
- package/lib/plugins/image/component.js.map +1 -1
- package/lib/plugins/image/image-toolbar.js +7 -9
- package/lib/plugins/image/image-toolbar.js.map +1 -1
- package/lib/plugins/image/index.js +83 -27
- package/lib/plugins/image/index.js.map +1 -1
- package/lib/plugins/image/insert-image-handler.js +72 -33
- package/lib/plugins/image/insert-image-handler.js.map +1 -1
- package/lib/plugins/index.js +23 -41
- package/lib/plugins/index.js.map +1 -1
- package/lib/plugins/list/index.js +64 -100
- package/lib/plugins/list/index.js.map +1 -1
- package/lib/plugins/math/index.js +86 -60
- package/lib/plugins/math/index.js.map +1 -1
- package/lib/plugins/media/index.js +202 -132
- package/lib/plugins/media/index.js.map +1 -1
- package/lib/plugins/media/media-dialog.js +17 -16
- package/lib/plugins/media/media-dialog.js.map +1 -1
- package/lib/plugins/media/media-toolbar.js +3 -3
- package/lib/plugins/media/media-toolbar.js.map +1 -1
- package/lib/plugins/media/media-wrapper.js +21 -58
- package/lib/plugins/media/media-wrapper.js.map +1 -1
- package/lib/plugins/respArea/drag-in-the-blank/choice.js +3 -3
- package/lib/plugins/respArea/drag-in-the-blank/choice.js.map +1 -1
- package/lib/plugins/respArea/drag-in-the-blank/index.js +3 -2
- package/lib/plugins/respArea/drag-in-the-blank/index.js.map +1 -1
- package/lib/plugins/respArea/explicit-constructed-response/index.js +3 -2
- package/lib/plugins/respArea/explicit-constructed-response/index.js.map +1 -1
- package/lib/plugins/respArea/icons/index.js +13 -15
- package/lib/plugins/respArea/icons/index.js.map +1 -1
- package/lib/plugins/respArea/index.js +87 -53
- package/lib/plugins/respArea/index.js.map +1 -1
- package/lib/plugins/respArea/inline-dropdown/index.js +4 -3
- package/lib/plugins/respArea/inline-dropdown/index.js.map +1 -1
- package/lib/plugins/respArea/utils.js +17 -20
- package/lib/plugins/respArea/utils.js.map +1 -1
- package/lib/plugins/table/icons/index.js +1 -1
- package/lib/plugins/table/icons/index.js.map +1 -1
- package/lib/plugins/table/index.js +381 -212
- package/lib/plugins/table/index.js.map +1 -1
- package/lib/plugins/table/table-toolbar.js +5 -6
- package/lib/plugins/table/table-toolbar.js.map +1 -1
- package/lib/plugins/toolbar/default-toolbar.js +55 -11
- package/lib/plugins/toolbar/default-toolbar.js.map +1 -1
- package/lib/plugins/toolbar/done-button.js +1 -1
- package/lib/plugins/toolbar/done-button.js.map +1 -1
- package/lib/plugins/toolbar/editor-and-toolbar.js +186 -232
- package/lib/plugins/toolbar/editor-and-toolbar.js.map +1 -1
- package/lib/plugins/toolbar/index.js +1 -2
- package/lib/plugins/toolbar/index.js.map +1 -1
- package/lib/plugins/toolbar/toolbar-buttons.js +1 -1
- package/lib/plugins/toolbar/toolbar-buttons.js.map +1 -1
- package/lib/plugins/toolbar/toolbar.js +253 -239
- package/lib/plugins/toolbar/toolbar.js.map +1 -1
- package/lib/plugins/utils.js +27 -2
- package/lib/plugins/utils.js.map +1 -1
- package/lib/serialization.js +1 -1
- package/lib/serialization.js.map +1 -1
- package/lib/slate-editor.js +302 -0
- package/lib/test-serializer.js +189 -0
- package/lib/test-serializer.js.map +1 -0
- package/lib/theme.js +1 -1
- package/lib/theme.js.map +1 -1
- package/package.json +18 -14
- package/playground/image/data.js +20 -20
- package/playground/image/index.html +22 -20
- package/playground/image/index.jsx +12 -10
- package/playground/index.html +25 -23
- package/playground/mathquill/index.html +23 -20
- package/playground/mathquill/index.jsx +18 -22
- package/playground/prod-test/index.html +24 -20
- package/playground/prod-test/index.jsx +5 -3
- package/playground/schema-override/data.js +10 -10
- package/playground/schema-override/image-plugin.jsx +3 -4
- package/playground/schema-override/index.html +21 -19
- package/playground/schema-override/index.jsx +13 -14
- package/playground/serialization/data.js +10 -10
- package/playground/serialization/image-plugin.jsx +3 -4
- package/playground/serialization/index.html +22 -20
- package/playground/table-examples.html +5 -8
- package/playground/webpack.config.js +10 -10
- package/src/components.js +135 -0
- package/src/editor.jsx +478 -141
- package/src/index.jsx +71 -95
- package/src/new-serialization.jsx +291 -0
- package/src/parse-html.js +1 -1
- package/src/plugins/characters/custom-popper.js +7 -7
- package/src/plugins/characters/index.jsx +33 -34
- package/src/plugins/characters/utils.js +81 -81
- package/src/plugins/hotKeys/index.js +54 -0
- package/src/plugins/image/alt-dialog.jsx +4 -5
- package/src/plugins/image/component.jsx +106 -89
- package/src/plugins/image/image-toolbar.jsx +27 -19
- package/src/plugins/image/index.jsx +75 -43
- package/src/plugins/image/insert-image-handler.js +62 -27
- package/src/plugins/index.jsx +23 -41
- package/src/plugins/list/index.jsx +70 -95
- package/src/plugins/math/index.jsx +102 -82
- package/src/plugins/media/index.jsx +159 -124
- package/src/plugins/media/media-dialog.js +98 -71
- package/src/plugins/media/media-toolbar.jsx +8 -8
- package/src/plugins/media/media-wrapper.jsx +29 -30
- package/src/plugins/respArea/drag-in-the-blank/choice.jsx +21 -19
- package/src/plugins/respArea/drag-in-the-blank/index.jsx +14 -11
- package/src/plugins/respArea/explicit-constructed-response/index.jsx +7 -6
- package/src/plugins/respArea/icons/index.jsx +11 -14
- package/src/plugins/respArea/index.jsx +92 -52
- package/src/plugins/respArea/inline-dropdown/index.jsx +9 -8
- package/src/plugins/respArea/utils.jsx +26 -35
- package/src/plugins/table/icons/index.jsx +17 -11
- package/src/plugins/table/index.jsx +288 -231
- package/src/plugins/table/table-toolbar.jsx +15 -11
- package/src/plugins/toolbar/default-toolbar.jsx +65 -19
- package/src/plugins/toolbar/done-button.jsx +4 -4
- package/src/plugins/toolbar/editor-and-toolbar.jsx +150 -145
- package/src/plugins/toolbar/index.jsx +2 -3
- package/src/plugins/toolbar/toolbar-buttons.jsx +11 -11
- package/src/plugins/toolbar/toolbar.jsx +244 -221
- package/src/plugins/utils.js +21 -4
- package/src/serialization.jsx +32 -32
- package/src/test-serializer.js +139 -0
- package/src/test-serializer.js.rej +20 -0
package/lib/editor.js
CHANGED
|
@@ -19,7 +19,7 @@ Object.defineProperty(exports, "DEFAULT_PLUGINS", {
|
|
|
19
19
|
return _plugins.DEFAULT_PLUGINS;
|
|
20
20
|
}
|
|
21
21
|
});
|
|
22
|
-
exports.serialization = exports["default"] = exports.
|
|
22
|
+
exports.serialization = exports["default"] = exports.EditorComponent = void 0;
|
|
23
23
|
|
|
24
24
|
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
25
25
|
|
|
@@ -39,20 +39,24 @@ var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/ge
|
|
|
39
39
|
|
|
40
40
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
41
41
|
|
|
42
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
43
|
+
|
|
44
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
45
|
+
|
|
46
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
47
|
+
|
|
42
48
|
var _slateReact = require("slate-react");
|
|
43
49
|
|
|
44
|
-
var
|
|
50
|
+
var _RootRef = _interopRequireDefault(require("@material-ui/core/RootRef"));
|
|
45
51
|
|
|
46
52
|
var _isEqual = _interopRequireDefault(require("lodash/isEqual"));
|
|
47
53
|
|
|
48
|
-
var serialization = _interopRequireWildcard(require("./serialization"));
|
|
54
|
+
var serialization = _interopRequireWildcard(require("./new-serialization"));
|
|
49
55
|
|
|
50
56
|
exports.serialization = serialization;
|
|
51
57
|
|
|
52
58
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
53
59
|
|
|
54
|
-
var _react = _interopRequireDefault(require("react"));
|
|
55
|
-
|
|
56
60
|
var _slate = require("slate");
|
|
57
61
|
|
|
58
62
|
var _plugins = require("./plugins");
|
|
@@ -69,6 +73,16 @@ var _slatePlainSerializer = _interopRequireDefault(require("slate-plain-serializ
|
|
|
69
73
|
|
|
70
74
|
var _insertImageHandler = _interopRequireDefault(require("./plugins/image/insert-image-handler"));
|
|
71
75
|
|
|
76
|
+
var _isHotkey = _interopRequireDefault(require("is-hotkey"));
|
|
77
|
+
|
|
78
|
+
var _slateHistory = require("slate-history");
|
|
79
|
+
|
|
80
|
+
var _mathToolbar = require("@pie-lib/math-toolbar");
|
|
81
|
+
|
|
82
|
+
var _components = require("./components");
|
|
83
|
+
|
|
84
|
+
var _editorAndToolbar = _interopRequireDefault(require("./plugins/toolbar/editor-and-toolbar"));
|
|
85
|
+
|
|
72
86
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
73
87
|
|
|
74
88
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
@@ -81,6 +95,310 @@ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (O
|
|
|
81
95
|
|
|
82
96
|
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; }
|
|
83
97
|
|
|
98
|
+
var HOTKEYS = {
|
|
99
|
+
'mod+b': 'bold',
|
|
100
|
+
'mod+i': 'italic',
|
|
101
|
+
'mod+u': 'underline',
|
|
102
|
+
'mod+`': 'code'
|
|
103
|
+
};
|
|
104
|
+
var LIST_TYPES = ['numbered-list', 'bulleted-list'];
|
|
105
|
+
var TEXT_ALIGN_TYPES = ['left', 'center', 'right', 'justify'];
|
|
106
|
+
var initialValue = [{
|
|
107
|
+
type: 'paragraph',
|
|
108
|
+
children: [{
|
|
109
|
+
type: 'math',
|
|
110
|
+
data: {
|
|
111
|
+
latex: '\\frac{1}{2}',
|
|
112
|
+
wrapper: 'round_brackets'
|
|
113
|
+
},
|
|
114
|
+
children: [{
|
|
115
|
+
text: '\\(\\frac{1}{2}\\)'
|
|
116
|
+
}]
|
|
117
|
+
}]
|
|
118
|
+
}];
|
|
119
|
+
|
|
120
|
+
var SlateEditor = function SlateEditor(editorProps) {
|
|
121
|
+
var value = editorProps.value,
|
|
122
|
+
plugins = editorProps.plugins;
|
|
123
|
+
var renderElement = (0, _react.useCallback)(function (props) {
|
|
124
|
+
return /*#__PURE__*/_react["default"].createElement(Element, (0, _extends2["default"])({}, props, {
|
|
125
|
+
plugins: plugins
|
|
126
|
+
}));
|
|
127
|
+
}, []);
|
|
128
|
+
var renderLeaf = (0, _react.useCallback)(function (props) {
|
|
129
|
+
return /*#__PURE__*/_react["default"].createElement(Leaf, props);
|
|
130
|
+
}, []);
|
|
131
|
+
var editor = (0, _react.useMemo)(function () {
|
|
132
|
+
return (0, _plugins.withPlugins)((0, _slate.createEditor)(), plugins);
|
|
133
|
+
}, []);
|
|
134
|
+
|
|
135
|
+
var _useState = (0, _react.useState)(false),
|
|
136
|
+
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
|
|
137
|
+
isFocused = _useState2[0],
|
|
138
|
+
setIsFocused = _useState2[1];
|
|
139
|
+
|
|
140
|
+
var editorRef = (0, _react.useRef)(null);
|
|
141
|
+
(0, _react.useEffect)(function () {
|
|
142
|
+
if (editorProps.onEditor) {
|
|
143
|
+
editorProps.onEditor(editor);
|
|
144
|
+
}
|
|
145
|
+
}, [editor]);
|
|
146
|
+
var slateValue = (0, _react.useMemo)(function () {
|
|
147
|
+
// Slate throws an error if the value on the initial render is invalid
|
|
148
|
+
// so we directly set the value on the editor in order
|
|
149
|
+
// to be able to trigger normalization on the initial value before rendering
|
|
150
|
+
editor.children = value;
|
|
151
|
+
|
|
152
|
+
_slate.Editor.normalize(editor, {
|
|
153
|
+
force: true
|
|
154
|
+
}); // We return the normalized internal value so that the rendering can take over from here
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
return editor.children;
|
|
158
|
+
}, [editor, value]);
|
|
159
|
+
|
|
160
|
+
var onKeyDown = function onKeyDown(event) {
|
|
161
|
+
if (event.key === 'Enter' && event.shiftKey === true) {
|
|
162
|
+
editor.insertText('\n');
|
|
163
|
+
event.preventDefault();
|
|
164
|
+
event.stopPropagation();
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
for (var hotkey in HOTKEYS) {
|
|
169
|
+
if ((0, _isHotkey["default"])(hotkey, event)) {
|
|
170
|
+
event.preventDefault();
|
|
171
|
+
var mark = HOTKEYS[hotkey];
|
|
172
|
+
toggleMark(editor, mark);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
};
|
|
176
|
+
|
|
177
|
+
var onFocus = function onFocus() {
|
|
178
|
+
return setIsFocused(true);
|
|
179
|
+
};
|
|
180
|
+
|
|
181
|
+
var onBlur = function onBlur() {
|
|
182
|
+
setTimeout(function () {
|
|
183
|
+
if (!editorRef.current || !editorRef.current.contains(document.activeElement)) {
|
|
184
|
+
setIsFocused(false);
|
|
185
|
+
}
|
|
186
|
+
}, 50);
|
|
187
|
+
};
|
|
188
|
+
|
|
189
|
+
return /*#__PURE__*/_react["default"].createElement(_slateReact.Slate, {
|
|
190
|
+
editor: editor,
|
|
191
|
+
value: slateValue
|
|
192
|
+
}, /*#__PURE__*/_react["default"].createElement(_RootRef["default"], {
|
|
193
|
+
rootRef: editorRef
|
|
194
|
+
}, /*#__PURE__*/_react["default"].createElement(_editorAndToolbar["default"], (0, _extends2["default"])({}, editorProps, {
|
|
195
|
+
editor: editor,
|
|
196
|
+
isFocused: isFocused,
|
|
197
|
+
onDone: function onDone() {
|
|
198
|
+
setIsFocused(false);
|
|
199
|
+
editorProps.onDone(editor);
|
|
200
|
+
}
|
|
201
|
+
}), /*#__PURE__*/_react["default"].createElement(_slateReact.Editable, {
|
|
202
|
+
renderElement: renderElement,
|
|
203
|
+
renderLeaf: renderLeaf,
|
|
204
|
+
placeholder: "Enter some rich text\u2026",
|
|
205
|
+
spellCheck: true,
|
|
206
|
+
onKeyDown: onKeyDown,
|
|
207
|
+
onFocus: onFocus,
|
|
208
|
+
onBlur: onBlur
|
|
209
|
+
}))));
|
|
210
|
+
};
|
|
211
|
+
|
|
212
|
+
var toggleBlock = function toggleBlock(editor, format) {
|
|
213
|
+
var isActive = isBlockActive(editor, format, TEXT_ALIGN_TYPES.includes(format) ? 'align' : 'type');
|
|
214
|
+
var isList = LIST_TYPES.includes(format);
|
|
215
|
+
|
|
216
|
+
_slate.Transforms.unwrapNodes(editor, {
|
|
217
|
+
match: function match(n) {
|
|
218
|
+
return !_slate.Editor.isEditor(n) && _slate.Element.isElement(n) && LIST_TYPES.includes(n.type) && !TEXT_ALIGN_TYPES.includes(format);
|
|
219
|
+
},
|
|
220
|
+
split: true
|
|
221
|
+
});
|
|
222
|
+
|
|
223
|
+
var newProperties;
|
|
224
|
+
|
|
225
|
+
if (TEXT_ALIGN_TYPES.includes(format)) {
|
|
226
|
+
newProperties = {
|
|
227
|
+
align: isActive ? undefined : format
|
|
228
|
+
};
|
|
229
|
+
} else {
|
|
230
|
+
newProperties = {
|
|
231
|
+
type: isActive ? 'paragraph' : isList ? 'list_item' : format
|
|
232
|
+
};
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
_slate.Transforms.setNodes(editor, newProperties);
|
|
236
|
+
|
|
237
|
+
if (!isActive && isList) {
|
|
238
|
+
var block = {
|
|
239
|
+
type: format,
|
|
240
|
+
children: []
|
|
241
|
+
};
|
|
242
|
+
|
|
243
|
+
_slate.Transforms.wrapNodes(editor, block);
|
|
244
|
+
}
|
|
245
|
+
};
|
|
246
|
+
|
|
247
|
+
var toggleMark = function toggleMark(editor, format) {
|
|
248
|
+
var isActive = isMarkActive(editor, format);
|
|
249
|
+
|
|
250
|
+
if (isActive) {
|
|
251
|
+
_slate.Editor.removeMark(editor, format);
|
|
252
|
+
} else {
|
|
253
|
+
_slate.Editor.addMark(editor, format, true);
|
|
254
|
+
}
|
|
255
|
+
};
|
|
256
|
+
|
|
257
|
+
var isBlockActive = function isBlockActive(editor, format) {
|
|
258
|
+
var blockType = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'type';
|
|
259
|
+
var selection = editor.selection;
|
|
260
|
+
if (!selection) return false;
|
|
261
|
+
|
|
262
|
+
var _Array$from = Array.from(_slate.Editor.nodes(editor, {
|
|
263
|
+
at: _slate.Editor.unhangRange(editor, selection),
|
|
264
|
+
match: function match(n) {
|
|
265
|
+
return !_slate.Editor.isEditor(n) && _slate.Element.isElement(n) && n[blockType] === format;
|
|
266
|
+
}
|
|
267
|
+
})),
|
|
268
|
+
_Array$from2 = (0, _slicedToArray2["default"])(_Array$from, 1),
|
|
269
|
+
match = _Array$from2[0];
|
|
270
|
+
|
|
271
|
+
return !!match;
|
|
272
|
+
};
|
|
273
|
+
|
|
274
|
+
var isMarkActive = function isMarkActive(editor, format) {
|
|
275
|
+
var marks = _slate.Editor.marks(editor);
|
|
276
|
+
|
|
277
|
+
return marks ? marks[format] === true : false;
|
|
278
|
+
};
|
|
279
|
+
|
|
280
|
+
var Element = function Element(props) {
|
|
281
|
+
var editor = (0, _slateReact.useSlateStatic)();
|
|
282
|
+
var focused = (0, _slateReact.useFocused)();
|
|
283
|
+
var attributes = props.attributes,
|
|
284
|
+
children = props.children,
|
|
285
|
+
element = props.element,
|
|
286
|
+
plugins = props.plugins;
|
|
287
|
+
var style = {
|
|
288
|
+
textAlign: element.align
|
|
289
|
+
};
|
|
290
|
+
|
|
291
|
+
var nodeProps = _objectSpread(_objectSpread(_objectSpread({}, attributes), props), {}, {
|
|
292
|
+
node: _objectSpread({}, element),
|
|
293
|
+
children: children
|
|
294
|
+
});
|
|
295
|
+
|
|
296
|
+
var pluginToRender = plugins.find(function (plugin) {
|
|
297
|
+
return typeof plugin.supports === 'function' && plugin.supports(element);
|
|
298
|
+
});
|
|
299
|
+
|
|
300
|
+
if (pluginToRender) {
|
|
301
|
+
return pluginToRender.renderNode(_objectSpread(_objectSpread({}, nodeProps), {}, {
|
|
302
|
+
editor: editor,
|
|
303
|
+
focused: focused
|
|
304
|
+
}));
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
switch (element.type) {
|
|
308
|
+
case 'block-quote':
|
|
309
|
+
return /*#__PURE__*/_react["default"].createElement("blockquote", (0, _extends2["default"])({
|
|
310
|
+
style: style
|
|
311
|
+
}, attributes), children);
|
|
312
|
+
|
|
313
|
+
case 'bulleted-list':
|
|
314
|
+
return /*#__PURE__*/_react["default"].createElement("ul", (0, _extends2["default"])({
|
|
315
|
+
style: style
|
|
316
|
+
}, attributes), children);
|
|
317
|
+
|
|
318
|
+
case 'heading-one':
|
|
319
|
+
return /*#__PURE__*/_react["default"].createElement("h1", (0, _extends2["default"])({
|
|
320
|
+
style: style
|
|
321
|
+
}, attributes), children);
|
|
322
|
+
|
|
323
|
+
case 'heading-two':
|
|
324
|
+
return /*#__PURE__*/_react["default"].createElement("h2", (0, _extends2["default"])({
|
|
325
|
+
style: style
|
|
326
|
+
}, attributes), children);
|
|
327
|
+
|
|
328
|
+
case 'list-item':
|
|
329
|
+
return /*#__PURE__*/_react["default"].createElement("li", (0, _extends2["default"])({
|
|
330
|
+
style: style
|
|
331
|
+
}, attributes), children);
|
|
332
|
+
|
|
333
|
+
case 'numbered-list':
|
|
334
|
+
return /*#__PURE__*/_react["default"].createElement("ol", (0, _extends2["default"])({
|
|
335
|
+
style: style
|
|
336
|
+
}, attributes), children);
|
|
337
|
+
|
|
338
|
+
default:
|
|
339
|
+
return /*#__PURE__*/_react["default"].createElement("div", (0, _extends2["default"])({
|
|
340
|
+
style: _objectSpread(_objectSpread({}, style), {}, {
|
|
341
|
+
margin: 0
|
|
342
|
+
})
|
|
343
|
+
}, attributes), children);
|
|
344
|
+
}
|
|
345
|
+
};
|
|
346
|
+
|
|
347
|
+
var Leaf = function Leaf(_ref) {
|
|
348
|
+
var attributes = _ref.attributes,
|
|
349
|
+
children = _ref.children,
|
|
350
|
+
leaf = _ref.leaf;
|
|
351
|
+
|
|
352
|
+
if (leaf.bold) {
|
|
353
|
+
children = /*#__PURE__*/_react["default"].createElement("strong", null, children);
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
if (leaf.code) {
|
|
357
|
+
children = /*#__PURE__*/_react["default"].createElement("code", null, children);
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
if (leaf.italic) {
|
|
361
|
+
children = /*#__PURE__*/_react["default"].createElement("em", null, children);
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
if (leaf.underline) {
|
|
365
|
+
children = /*#__PURE__*/_react["default"].createElement("u", null, children);
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
if (leaf.strikethrough) {
|
|
369
|
+
children = /*#__PURE__*/_react["default"].createElement("del", null, children);
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
return /*#__PURE__*/_react["default"].createElement("span", attributes, children);
|
|
373
|
+
};
|
|
374
|
+
|
|
375
|
+
var BlockButton = function BlockButton(_ref2) {
|
|
376
|
+
var format = _ref2.format,
|
|
377
|
+
icon = _ref2.icon;
|
|
378
|
+
var editor = (0, _slateReact.useSlate)();
|
|
379
|
+
return /*#__PURE__*/_react["default"].createElement(_components.Button, {
|
|
380
|
+
active: isBlockActive(editor, format, TEXT_ALIGN_TYPES.includes(format) ? 'align' : 'type'),
|
|
381
|
+
onMouseDown: function onMouseDown(event) {
|
|
382
|
+
event.preventDefault();
|
|
383
|
+
toggleBlock(editor, format);
|
|
384
|
+
}
|
|
385
|
+
}, /*#__PURE__*/_react["default"].createElement(_components.Icon, null, icon));
|
|
386
|
+
};
|
|
387
|
+
|
|
388
|
+
var MarkButton = function MarkButton(_ref3) {
|
|
389
|
+
var format = _ref3.format,
|
|
390
|
+
icon = _ref3.icon;
|
|
391
|
+
var editor = (0, _slateReact.useSlate)();
|
|
392
|
+
return /*#__PURE__*/_react["default"].createElement(_components.Button, {
|
|
393
|
+
active: isMarkActive(editor, format),
|
|
394
|
+
onMouseDown: function onMouseDown(event) {
|
|
395
|
+
event.preventDefault();
|
|
396
|
+
toggleMark(editor, format);
|
|
397
|
+
}
|
|
398
|
+
}, /*#__PURE__*/_react["default"].createElement(_components.Icon, null, icon));
|
|
399
|
+
}; // old-editable
|
|
400
|
+
|
|
401
|
+
|
|
84
402
|
var log = (0, _debug["default"])('editable-html:editor');
|
|
85
403
|
var defaultToolbarOpts = {
|
|
86
404
|
position: 'bottom',
|
|
@@ -96,21 +414,19 @@ var defaultResponseAreaProps = {
|
|
|
96
414
|
};
|
|
97
415
|
var defaultLanguageCharactersProps = [];
|
|
98
416
|
|
|
99
|
-
var createToolbarOpts = function createToolbarOpts(toolbarOpts
|
|
100
|
-
return _objectSpread(_objectSpread(
|
|
101
|
-
error: error
|
|
102
|
-
});
|
|
417
|
+
var createToolbarOpts = function createToolbarOpts(toolbarOpts) {
|
|
418
|
+
return _objectSpread(_objectSpread({}, defaultToolbarOpts), toolbarOpts);
|
|
103
419
|
};
|
|
104
420
|
|
|
105
|
-
var
|
|
106
|
-
(0, _inherits2["default"])(
|
|
421
|
+
var EditorComponent = /*#__PURE__*/function (_React$Component) {
|
|
422
|
+
(0, _inherits2["default"])(EditorComponent, _React$Component);
|
|
107
423
|
|
|
108
|
-
var _super = _createSuper(
|
|
424
|
+
var _super = _createSuper(EditorComponent);
|
|
109
425
|
|
|
110
|
-
function
|
|
426
|
+
function EditorComponent(_props) {
|
|
111
427
|
var _this;
|
|
112
428
|
|
|
113
|
-
(0, _classCallCheck2["default"])(this,
|
|
429
|
+
(0, _classCallCheck2["default"])(this, EditorComponent);
|
|
114
430
|
_this = _super.call(this, _props);
|
|
115
431
|
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "handlePlugins", function (props) {
|
|
116
432
|
var normalizedResponseAreaProps = _objectSpread(_objectSpread({}, defaultResponseAreaProps), props.responseAreaProps);
|
|
@@ -122,7 +438,6 @@ var Editor = /*#__PURE__*/function (_React$Component) {
|
|
|
122
438
|
onBlur: _this.onPluginBlur
|
|
123
439
|
},
|
|
124
440
|
image: {
|
|
125
|
-
disableImageAlignmentButtons: props.disableImageAlignmentButtons,
|
|
126
441
|
onDelete: props.imageSupport && props.imageSupport["delete"] && function (src, done) {
|
|
127
442
|
props.imageSupport["delete"](src, function (e) {
|
|
128
443
|
done(e, _this.state.value);
|
|
@@ -150,28 +465,7 @@ var Editor = /*#__PURE__*/function (_React$Component) {
|
|
|
150
465
|
*/
|
|
151
466
|
disableScrollbar: !!props.disableScrollbar,
|
|
152
467
|
disableUnderline: props.disableUnderline,
|
|
153
|
-
autoWidth: props.autoWidthToolbar
|
|
154
|
-
onDone: function onDone() {
|
|
155
|
-
var _this$state$value$sta, _this$state$value$sta2;
|
|
156
|
-
|
|
157
|
-
var nonEmpty = props.nonEmpty;
|
|
158
|
-
log('[onDone]');
|
|
159
|
-
|
|
160
|
-
_this.setState({
|
|
161
|
-
toolbarInFocus: false,
|
|
162
|
-
focusedNode: null
|
|
163
|
-
});
|
|
164
|
-
|
|
165
|
-
_this.editor.blur();
|
|
166
|
-
|
|
167
|
-
if (nonEmpty && ((_this$state$value$sta = _this.state.value.startText) === null || _this$state$value$sta === void 0 ? void 0 : (_this$state$value$sta2 = _this$state$value$sta.text) === null || _this$state$value$sta2 === void 0 ? void 0 : _this$state$value$sta2.length) === 0) {
|
|
168
|
-
_this.resetValue(true).then(function () {
|
|
169
|
-
_this.onEditingDone();
|
|
170
|
-
});
|
|
171
|
-
} else {
|
|
172
|
-
_this.onEditingDone();
|
|
173
|
-
}
|
|
174
|
-
}
|
|
468
|
+
autoWidth: props.autoWidthToolbar
|
|
175
469
|
},
|
|
176
470
|
table: {
|
|
177
471
|
onFocus: function onFocus() {
|
|
@@ -206,9 +500,6 @@ var Editor = /*#__PURE__*/function (_React$Component) {
|
|
|
206
500
|
languageCharacters: props.languageCharactersProps,
|
|
207
501
|
media: {
|
|
208
502
|
focus: _this.focus,
|
|
209
|
-
createChange: function createChange() {
|
|
210
|
-
return _this.state.value.change();
|
|
211
|
-
},
|
|
212
503
|
onChange: _this.onChange,
|
|
213
504
|
uploadSoundSupport: props.uploadSoundSupport
|
|
214
505
|
}
|
|
@@ -248,15 +539,11 @@ var Editor = /*#__PURE__*/function (_React$Component) {
|
|
|
248
539
|
_this.stashValue();
|
|
249
540
|
});
|
|
250
541
|
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onMathClick", function (node) {
|
|
251
|
-
_this.editor.change(function (c) {
|
|
252
|
-
return c.collapseToStartOf(node);
|
|
253
|
-
});
|
|
254
|
-
|
|
255
542
|
_this.setState({
|
|
256
543
|
selectedNode: node
|
|
257
544
|
});
|
|
258
545
|
});
|
|
259
|
-
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onEditingDone", function () {
|
|
546
|
+
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onEditingDone", function (editor) {
|
|
260
547
|
log('[onEditingDone]');
|
|
261
548
|
|
|
262
549
|
_this.setState({
|
|
@@ -266,7 +553,18 @@ var Editor = /*#__PURE__*/function (_React$Component) {
|
|
|
266
553
|
|
|
267
554
|
log('[onEditingDone] value: ', _this.state.value);
|
|
268
555
|
|
|
269
|
-
_this.props.onChange(
|
|
556
|
+
_this.props.onChange(editor, true);
|
|
557
|
+
});
|
|
558
|
+
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onDone", function (editor) {
|
|
559
|
+
var nonEmpty = _this.props.nonEmpty;
|
|
560
|
+
log('[onDone]');
|
|
561
|
+
|
|
562
|
+
_this.setState({
|
|
563
|
+
toolbarInFocus: false,
|
|
564
|
+
focusedNode: null
|
|
565
|
+
});
|
|
566
|
+
|
|
567
|
+
_this.onEditingDone(editor);
|
|
270
568
|
});
|
|
271
569
|
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "handleBlur", function (resolve) {
|
|
272
570
|
var nonEmpty = _this.props.nonEmpty;
|
|
@@ -277,14 +575,10 @@ var Editor = /*#__PURE__*/function (_React$Component) {
|
|
|
277
575
|
focusedNode: null
|
|
278
576
|
});
|
|
279
577
|
|
|
280
|
-
if (_this.editor) {
|
|
281
|
-
_this.editor.blur();
|
|
282
|
-
}
|
|
283
|
-
|
|
284
578
|
if (doneOn === 'blur') {
|
|
285
|
-
var _this$state$value$
|
|
579
|
+
var _this$state$value$sta, _this$state$value$sta2;
|
|
286
580
|
|
|
287
|
-
if (nonEmpty && ((_this$state$value$
|
|
581
|
+
if (nonEmpty && ((_this$state$value$sta = _this.state.value.startText) === null || _this$state$value$sta === void 0 ? void 0 : (_this$state$value$sta2 = _this$state$value$sta.text) === null || _this$state$value$sta2 === void 0 ? void 0 : _this$state$value$sta2.length) === 0) {
|
|
288
582
|
_this.resetValue(true).then(function () {
|
|
289
583
|
_this.onEditingDone();
|
|
290
584
|
|
|
@@ -423,15 +717,19 @@ var Editor = /*#__PURE__*/function (_React$Component) {
|
|
|
423
717
|
return Promise.resolve({});
|
|
424
718
|
}
|
|
425
719
|
});
|
|
426
|
-
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onChange", function (
|
|
720
|
+
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onChange", function (editor, done) {
|
|
427
721
|
log('[onChange]');
|
|
428
|
-
var value = change.value;
|
|
429
722
|
var charactersLimit = _this.props.charactersLimit;
|
|
430
723
|
|
|
431
|
-
|
|
724
|
+
var allText = _slate.Editor.string(editor, []);
|
|
725
|
+
|
|
726
|
+
if (allText > charactersLimit) {
|
|
432
727
|
return;
|
|
433
728
|
}
|
|
434
729
|
|
|
730
|
+
var html = (0, serialization.valueToHtml)(editor);
|
|
731
|
+
var value = (0, serialization.htmlToValue)(html);
|
|
732
|
+
|
|
435
733
|
_this.setState({
|
|
436
734
|
value: value
|
|
437
735
|
}, function () {
|
|
@@ -484,32 +782,13 @@ var Editor = /*#__PURE__*/function (_React$Component) {
|
|
|
484
782
|
log('[validateNode] parent:', parent, p);
|
|
485
783
|
return undefined;
|
|
486
784
|
});
|
|
487
|
-
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "changeData", function (key, data) {
|
|
488
|
-
log('[changeData]. .. ', key, data);
|
|
489
|
-
/**
|
|
490
|
-
* HACK ALERT: We should be calling setState here and storing the change data:
|
|
491
|
-
*
|
|
492
|
-
* <code>this.setState({changeData: { key, data}})</code>
|
|
493
|
-
* However this is causing issues with the Mathquill instance. The 'input' event stops firing on the element and no
|
|
494
|
-
* more changes get through. The issues seem to be related to the promises in onBlur/onFocus. But removing these
|
|
495
|
-
* brings it's own problems. A major clean up is planned for this component so I've decided to temporarily settle
|
|
496
|
-
* on this hack rather than spend more time on this.
|
|
497
|
-
*/
|
|
498
|
-
// Uncomment this line to see the bug described above.
|
|
499
|
-
// this.setState({changeData: {key, data}})
|
|
500
|
-
|
|
501
|
-
_this.__TEMPORARY_CHANGE_DATA = {
|
|
502
|
-
key: key,
|
|
503
|
-
data: data
|
|
504
|
-
};
|
|
505
|
-
});
|
|
506
785
|
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "focus", function (pos, node) {
|
|
507
786
|
var position = pos || 'end';
|
|
508
787
|
|
|
509
788
|
_this.props.focus(position, node);
|
|
510
789
|
});
|
|
511
790
|
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onDropPaste", /*#__PURE__*/function () {
|
|
512
|
-
var
|
|
791
|
+
var _ref4 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(event, change, dropContext) {
|
|
513
792
|
var editor, transfer, file, type, fragment, text, src, inline, range, ch, handler, _change$value, _document, selection, startBlock, defaultBlock, defaultMarks, frag;
|
|
514
793
|
|
|
515
794
|
return _regenerator["default"].wrap(function _callee$(_context) {
|
|
@@ -635,7 +914,7 @@ var Editor = /*#__PURE__*/function (_React$Component) {
|
|
|
635
914
|
}));
|
|
636
915
|
|
|
637
916
|
return function (_x, _x2, _x3) {
|
|
638
|
-
return
|
|
917
|
+
return _ref4.apply(this, arguments);
|
|
639
918
|
};
|
|
640
919
|
}());
|
|
641
920
|
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "renderPlaceholder", function (props) {
|
|
@@ -662,7 +941,7 @@ var Editor = /*#__PURE__*/function (_React$Component) {
|
|
|
662
941
|
});
|
|
663
942
|
_this.state = {
|
|
664
943
|
value: _props.value,
|
|
665
|
-
toolbarOpts: createToolbarOpts(_props.toolbarOpts
|
|
944
|
+
toolbarOpts: createToolbarOpts(_props.toolbarOpts)
|
|
666
945
|
};
|
|
667
946
|
|
|
668
947
|
_this.onResize = function () {
|
|
@@ -674,7 +953,7 @@ var Editor = /*#__PURE__*/function (_React$Component) {
|
|
|
674
953
|
return _this;
|
|
675
954
|
}
|
|
676
955
|
|
|
677
|
-
(0, _createClass2["default"])(
|
|
956
|
+
(0, _createClass2["default"])(EditorComponent, [{
|
|
678
957
|
key: "componentDidMount",
|
|
679
958
|
value: function componentDidMount() {
|
|
680
959
|
var _this2 = this;
|
|
@@ -688,8 +967,6 @@ var Editor = /*#__PURE__*/function (_React$Component) {
|
|
|
688
967
|
if (_this2.editor) {
|
|
689
968
|
var editorDOM = document.querySelector("[data-key=\"".concat(_this2.editor.value.document.key, "\"]"));
|
|
690
969
|
|
|
691
|
-
_this2.editor.focus();
|
|
692
|
-
|
|
693
970
|
if (editorDOM) {
|
|
694
971
|
editorDOM.focus();
|
|
695
972
|
}
|
|
@@ -701,7 +978,7 @@ var Editor = /*#__PURE__*/function (_React$Component) {
|
|
|
701
978
|
key: "componentWillReceiveProps",
|
|
702
979
|
value: function componentWillReceiveProps(nextProps) {
|
|
703
980
|
var toolbarOpts = this.state.toolbarOpts;
|
|
704
|
-
var newToolbarOpts = createToolbarOpts(nextProps.toolbarOpts
|
|
981
|
+
var newToolbarOpts = createToolbarOpts(nextProps.toolbarOpts);
|
|
705
982
|
|
|
706
983
|
if (!(0, _isEqual["default"])(newToolbarOpts, toolbarOpts)) {
|
|
707
984
|
this.setState({
|
|
@@ -737,7 +1014,7 @@ var Editor = /*#__PURE__*/function (_React$Component) {
|
|
|
737
1014
|
}, {
|
|
738
1015
|
key: "UNSAFE_componentWillReceiveProps",
|
|
739
1016
|
value: function UNSAFE_componentWillReceiveProps(props) {
|
|
740
|
-
if (!props.value
|
|
1017
|
+
if (!(0, _isEqual["default"])(props.value, this.props.value)) {
|
|
741
1018
|
this.setState({
|
|
742
1019
|
focus: false,
|
|
743
1020
|
value: props.value
|
|
@@ -780,25 +1057,63 @@ var Editor = /*#__PURE__*/function (_React$Component) {
|
|
|
780
1057
|
toolbarOpts = _this$state2.toolbarOpts;
|
|
781
1058
|
log('[render] value: ', value);
|
|
782
1059
|
var sizeStyle = this.buildSizeStyle();
|
|
783
|
-
var names = (0, _classnames["default"])((_classNames = {}, (0, _defineProperty2["default"])(_classNames, classes.withBg, highlightShape), (0, _defineProperty2["default"])(_classNames, classes.toolbarOnTop, toolbarOpts.alwaysVisible && toolbarOpts.position === 'top'), _classNames), className);
|
|
1060
|
+
var names = (0, _classnames["default"])((_classNames = {}, (0, _defineProperty2["default"])(_classNames, classes.withBg, highlightShape), (0, _defineProperty2["default"])(_classNames, classes.toolbarOnTop, toolbarOpts.alwaysVisible && toolbarOpts.position === 'top'), _classNames), className, classes.slateEditor);
|
|
784
1061
|
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
785
|
-
ref: function ref(
|
|
786
|
-
return _this3.wrapperRef =
|
|
1062
|
+
ref: function ref(_ref5) {
|
|
1063
|
+
return _this3.wrapperRef = _ref5;
|
|
787
1064
|
},
|
|
788
1065
|
style: {
|
|
789
1066
|
width: sizeStyle.width
|
|
790
1067
|
},
|
|
791
1068
|
className: names
|
|
792
|
-
}, /*#__PURE__*/_react["default"].createElement(
|
|
1069
|
+
}, /*#__PURE__*/_react["default"].createElement(SlateEditor, {
|
|
793
1070
|
plugins: this.plugins,
|
|
794
|
-
|
|
1071
|
+
toolbarRef: function toolbarRef(r) {
|
|
795
1072
|
if (r) {
|
|
796
|
-
_this3.
|
|
1073
|
+
_this3.toolbarRef = r;
|
|
797
1074
|
}
|
|
798
1075
|
},
|
|
799
|
-
|
|
800
|
-
|
|
1076
|
+
onEditor: this.props.onEditor,
|
|
1077
|
+
value: value,
|
|
1078
|
+
focus: this.focus,
|
|
1079
|
+
onKeyDown: onKeyDown,
|
|
1080
|
+
onChange: this.onChange,
|
|
1081
|
+
getFocusedValue: this.getFocusedValue,
|
|
1082
|
+
onBlur: this.onBlur,
|
|
1083
|
+
onDrop: function onDrop(event, editor) {
|
|
1084
|
+
return _this3.onDropPaste(event, editor, true);
|
|
1085
|
+
},
|
|
1086
|
+
onPaste: function onPaste(event, editor) {
|
|
1087
|
+
return _this3.onDropPaste(event, editor);
|
|
1088
|
+
},
|
|
1089
|
+
onFocus: this.onFocus,
|
|
1090
|
+
onEditingDone: this.onEditingDone,
|
|
1091
|
+
onDone: this.onDone,
|
|
1092
|
+
focusedNode: focusedNode,
|
|
1093
|
+
normalize: this.normalize,
|
|
1094
|
+
readOnly: disabled,
|
|
1095
|
+
spellCheck: spellCheck,
|
|
1096
|
+
className: (0, _classnames["default"])((0, _defineProperty2["default"])({}, classes.noPadding, toolbarOpts && toolbarOpts.noBorder), classes.slateEditor),
|
|
1097
|
+
style: {
|
|
1098
|
+
minHeight: sizeStyle.minHeight,
|
|
1099
|
+
height: sizeStyle.height,
|
|
1100
|
+
maxHeight: sizeStyle.maxHeight
|
|
1101
|
+
},
|
|
1102
|
+
pluginProps: pluginProps,
|
|
1103
|
+
toolbarOpts: toolbarOpts,
|
|
1104
|
+
placeholder: placeholder,
|
|
1105
|
+
renderPlaceholder: this.renderPlaceholder
|
|
1106
|
+
}));
|
|
1107
|
+
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
1108
|
+
ref: function ref(_ref6) {
|
|
1109
|
+
return _this3.wrapperRef = _ref6;
|
|
1110
|
+
},
|
|
1111
|
+
style: {
|
|
1112
|
+
width: sizeStyle.width
|
|
801
1113
|
},
|
|
1114
|
+
className: names
|
|
1115
|
+
}, /*#__PURE__*/_react["default"].createElement(_slateReact.Editor, {
|
|
1116
|
+
plugins: this.plugins,
|
|
802
1117
|
toolbarRef: function toolbarRef(r) {
|
|
803
1118
|
if (r) {
|
|
804
1119
|
_this3.toolbarRef = r;
|
|
@@ -822,7 +1137,6 @@ var Editor = /*#__PURE__*/function (_React$Component) {
|
|
|
822
1137
|
normalize: this.normalize,
|
|
823
1138
|
readOnly: disabled,
|
|
824
1139
|
spellCheck: spellCheck,
|
|
825
|
-
autoCorrect: spellCheck,
|
|
826
1140
|
className: (0, _classnames["default"])((0, _defineProperty2["default"])({}, classes.noPadding, toolbarOpts && toolbarOpts.noBorder), classes.slateEditor),
|
|
827
1141
|
style: {
|
|
828
1142
|
minHeight: sizeStyle.minHeight,
|
|
@@ -832,28 +1146,29 @@ var Editor = /*#__PURE__*/function (_React$Component) {
|
|
|
832
1146
|
pluginProps: pluginProps,
|
|
833
1147
|
toolbarOpts: toolbarOpts,
|
|
834
1148
|
placeholder: placeholder,
|
|
835
|
-
renderPlaceholder: this.renderPlaceholder
|
|
836
|
-
onDataChange: this.changeData
|
|
1149
|
+
renderPlaceholder: this.renderPlaceholder
|
|
837
1150
|
}));
|
|
838
1151
|
}
|
|
839
1152
|
}]);
|
|
840
|
-
return
|
|
1153
|
+
return EditorComponent;
|
|
841
1154
|
}(_react["default"].Component); // TODO color - hardcoded gray background and keypad colors will need to change too
|
|
842
1155
|
|
|
843
1156
|
|
|
844
|
-
exports.
|
|
845
|
-
(0, _defineProperty2["default"])(
|
|
1157
|
+
exports.EditorComponent = EditorComponent;
|
|
1158
|
+
(0, _defineProperty2["default"])(EditorComponent, "propTypes", {
|
|
846
1159
|
autoFocus: _propTypes["default"].bool,
|
|
847
|
-
editorRef: _propTypes["default"].func.isRequired,
|
|
848
1160
|
onRef: _propTypes["default"].func.isRequired,
|
|
849
1161
|
onChange: _propTypes["default"].func.isRequired,
|
|
1162
|
+
onEditor: _propTypes["default"].func,
|
|
850
1163
|
onFocus: _propTypes["default"].func,
|
|
851
1164
|
onBlur: _propTypes["default"].func,
|
|
852
1165
|
onKeyDown: _propTypes["default"].func,
|
|
853
|
-
|
|
854
|
-
|
|
1166
|
+
value: _propTypes["default"].arrayOf(_propTypes["default"].shape({
|
|
1167
|
+
type: _propTypes["default"].string,
|
|
1168
|
+
children: _propTypes["default"].array,
|
|
1169
|
+
data: _propTypes["default"].object
|
|
1170
|
+
})),
|
|
855
1171
|
imageSupport: _propTypes["default"].object,
|
|
856
|
-
disableImageAlignmentButtons: _propTypes["default"].bool,
|
|
857
1172
|
uploadSoundSupport: _propTypes["default"].shape({
|
|
858
1173
|
add: _propTypes["default"].func,
|
|
859
1174
|
"delete": _propTypes["default"].func
|
|
@@ -901,7 +1216,7 @@ exports.Editor = Editor;
|
|
|
901
1216
|
maxImageWidth: _propTypes["default"].number,
|
|
902
1217
|
maxImageHeight: _propTypes["default"].number
|
|
903
1218
|
});
|
|
904
|
-
(0, _defineProperty2["default"])(
|
|
1219
|
+
(0, _defineProperty2["default"])(EditorComponent, "defaultProps", {
|
|
905
1220
|
disableUnderline: true,
|
|
906
1221
|
onFocus: function onFocus() {},
|
|
907
1222
|
onBlur: function onBlur() {},
|
|
@@ -946,7 +1261,7 @@ var styles = {
|
|
|
946
1261
|
}
|
|
947
1262
|
};
|
|
948
1263
|
|
|
949
|
-
var _default = (0, _styles.withStyles)(styles)(
|
|
1264
|
+
var _default = (0, _styles.withStyles)(styles)(EditorComponent);
|
|
950
1265
|
|
|
951
1266
|
exports["default"] = _default;
|
|
952
|
-
//# sourceMappingURL=editor.js.map
|
|
1267
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJIT1RLRVlTIiwiTElTVF9UWVBFUyIsIlRFWFRfQUxJR05fVFlQRVMiLCJpbml0aWFsVmFsdWUiLCJ0eXBlIiwiY2hpbGRyZW4iLCJkYXRhIiwibGF0ZXgiLCJ3cmFwcGVyIiwidGV4dCIsIlNsYXRlRWRpdG9yIiwiZWRpdG9yUHJvcHMiLCJ2YWx1ZSIsInBsdWdpbnMiLCJyZW5kZXJFbGVtZW50IiwidXNlQ2FsbGJhY2siLCJwcm9wcyIsInJlbmRlckxlYWYiLCJlZGl0b3IiLCJ1c2VNZW1vIiwid2l0aFBsdWdpbnMiLCJjcmVhdGVFZGl0b3IiLCJ1c2VTdGF0ZSIsImlzRm9jdXNlZCIsInNldElzRm9jdXNlZCIsImVkaXRvclJlZiIsInVzZVJlZiIsInVzZUVmZmVjdCIsIm9uRWRpdG9yIiwic2xhdGVWYWx1ZSIsIkVkaXRvciIsIm5vcm1hbGl6ZSIsImZvcmNlIiwib25LZXlEb3duIiwiZXZlbnQiLCJrZXkiLCJzaGlmdEtleSIsImluc2VydFRleHQiLCJwcmV2ZW50RGVmYXVsdCIsInN0b3BQcm9wYWdhdGlvbiIsImhvdGtleSIsImlzSG90a2V5IiwibWFyayIsInRvZ2dsZU1hcmsiLCJvbkZvY3VzIiwib25CbHVyIiwic2V0VGltZW91dCIsImN1cnJlbnQiLCJjb250YWlucyIsImRvY3VtZW50IiwiYWN0aXZlRWxlbWVudCIsIm9uRG9uZSIsInRvZ2dsZUJsb2NrIiwiZm9ybWF0IiwiaXNBY3RpdmUiLCJpc0Jsb2NrQWN0aXZlIiwiaW5jbHVkZXMiLCJpc0xpc3QiLCJUcmFuc2Zvcm1zIiwidW53cmFwTm9kZXMiLCJtYXRjaCIsIm4iLCJpc0VkaXRvciIsIlNsYXRlRWxlbWVudCIsImlzRWxlbWVudCIsInNwbGl0IiwibmV3UHJvcGVydGllcyIsImFsaWduIiwidW5kZWZpbmVkIiwic2V0Tm9kZXMiLCJibG9jayIsIndyYXBOb2RlcyIsImlzTWFya0FjdGl2ZSIsInJlbW92ZU1hcmsiLCJhZGRNYXJrIiwiYmxvY2tUeXBlIiwic2VsZWN0aW9uIiwiQXJyYXkiLCJmcm9tIiwibm9kZXMiLCJhdCIsInVuaGFuZ1JhbmdlIiwibWFya3MiLCJFbGVtZW50IiwidXNlU2xhdGVTdGF0aWMiLCJmb2N1c2VkIiwidXNlRm9jdXNlZCIsImF0dHJpYnV0ZXMiLCJlbGVtZW50Iiwic3R5bGUiLCJ0ZXh0QWxpZ24iLCJub2RlUHJvcHMiLCJub2RlIiwicGx1Z2luVG9SZW5kZXIiLCJmaW5kIiwicGx1Z2luIiwic3VwcG9ydHMiLCJyZW5kZXJOb2RlIiwibWFyZ2luIiwiTGVhZiIsImxlYWYiLCJib2xkIiwiY29kZSIsIml0YWxpYyIsInVuZGVybGluZSIsInN0cmlrZXRocm91Z2giLCJCbG9ja0J1dHRvbiIsImljb24iLCJ1c2VTbGF0ZSIsIk1hcmtCdXR0b24iLCJsb2ciLCJkZWJ1ZyIsImRlZmF1bHRUb29sYmFyT3B0cyIsInBvc2l0aW9uIiwiYWxpZ25tZW50IiwiYWx3YXlzVmlzaWJsZSIsInNob3dEb25lIiwiZG9uZU9uIiwiZGVmYXVsdFJlc3BvbnNlQXJlYVByb3BzIiwib3B0aW9ucyIsInJlc3BBcmVhVG9vbGJhciIsIm9uSGFuZGxlQXJlYUNoYW5nZSIsImRlZmF1bHRMYW5ndWFnZUNoYXJhY3RlcnNQcm9wcyIsImNyZWF0ZVRvb2xiYXJPcHRzIiwidG9vbGJhck9wdHMiLCJFZGl0b3JDb21wb25lbnQiLCJub3JtYWxpemVkUmVzcG9uc2VBcmVhUHJvcHMiLCJyZXNwb25zZUFyZWFQcm9wcyIsImJ1aWxkUGx1Z2lucyIsImFjdGl2ZVBsdWdpbnMiLCJtYXRoIiwib25DbGljayIsIm9uTWF0aENsaWNrIiwib25QbHVnaW5Gb2N1cyIsIm9uUGx1Z2luQmx1ciIsImltYWdlIiwib25EZWxldGUiLCJpbWFnZVN1cHBvcnQiLCJzcmMiLCJkb25lIiwiZSIsInN0YXRlIiwiaW5zZXJ0SW1hZ2VSZXF1ZXN0ZWQiLCJnZXRIYW5kbGVyIiwiaGFuZGxlciIsImFkZCIsIm1heEltYWdlV2lkdGgiLCJtYXhJbWFnZUhlaWdodCIsInRvb2xiYXIiLCJkaXNhYmxlU2Nyb2xsYmFyIiwiZGlzYWJsZVVuZGVybGluZSIsImF1dG9XaWR0aCIsImF1dG9XaWR0aFRvb2xiYXIiLCJ0YWJsZSIsInJlc3BvbnNlQXJlYSIsIm1heFJlc3BvbnNlQXJlYXMiLCJlcnJvciIsImxhbmd1YWdlQ2hhcmFjdGVycyIsImxhbmd1YWdlQ2hhcmFjdGVyc1Byb3BzIiwibWVkaWEiLCJmb2N1cyIsIm9uQ2hhbmdlIiwidXBsb2FkU291bmRTdXBwb3J0IiwicmVsYXRlZFRhcmdldCIsInRhcmdldCIsImZpbmROb2RlIiwic2V0U3RhdGUiLCJmb2N1c2VkTm9kZSIsInJlc2V0VmFsdWUiLCJzdGFzaGVkVmFsdWUiLCJzdGFzaFZhbHVlIiwic2VsZWN0ZWROb2RlIiwibm9uRW1wdHkiLCJ0b29sYmFySW5Gb2N1cyIsIm9uRWRpdGluZ0RvbmUiLCJyZXNvbHZlIiwic3RhcnRUZXh0IiwibGVuZ3RoIiwidGhlbiIsIlByb21pc2UiLCJwcmVCbHVyVmFsdWUiLCJoYW5kbGVCbHVyIiwiYmluZCIsImVkaXRvckRPTSIsInF1ZXJ5U2VsZWN0b3IiLCJzdGF0ZVZhbHVlIiwid3JhcHBlclJlZiIsImVkaXRvckVsZW1lbnQiLCJjbG9zZXN0IiwiY2xhc3NOYW1lIiwidG9vbGJhckVsZW1lbnQiLCJ0b29sYmFyUmVmIiwiaXNJbkN1cnJlbnRDb21wb25lbnQiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiaGFuZGxlRG9tQmx1ciIsIl9fVEVNUE9SQVJZX0NIQU5HRV9EQVRBIiwiZG9tRWwiLCJjaGFuZ2UiLCJzZXROb2RlQnlLZXkiLCJhZGRFdmVudExpc3RlbmVyIiwic3RvcFJlc2V0IiwicmVkdWNlIiwicyIsInAiLCJ0b09iamVjdCIsIm5ld1ZhbHVlIiwiVmFsdWUiLCJmcm9tSlNPTiIsInRvSlNPTiIsImNoYXJhY3RlcnNMaW1pdCIsImFsbFRleHQiLCJzdHJpbmciLCJodG1sIiwidmFsdWVUb0h0bWwiLCJodG1sVG9WYWx1ZSIsInYiLCJlbmRzV2l0aCIsInBhcnNlSW50IiwiaXNOYU4iLCJvYmplY3QiLCJsYXN0IiwicGFyZW50IiwiZ2V0UGFyZW50IiwiQmxvY2siLCJwb3MiLCJkcm9wQ29udGV4dCIsInRyYW5zZmVyIiwiZ2V0RXZlbnRUcmFuc2ZlciIsImZpbGUiLCJmaWxlcyIsImZyYWdtZW50IiwiZ2V0QmFzZTY0IiwiaW5saW5lIiwiSW5saW5lIiwiY3JlYXRlIiwiaXNWb2lkIiwibG9hZGluZyIsInJhbmdlIiwiZ2V0RXZlbnRSYW5nZSIsInNlbGVjdCIsImNoIiwiaW5zZXJ0SW5saW5lIiwiSW5zZXJ0SW1hZ2VIYW5kbGVyIiwiaW5zZXJ0RnJhZ21lbnQiLCJzdGFydEJsb2NrIiwiZGVmYXVsdEJsb2NrIiwiZGVmYXVsdE1hcmtzIiwiZ2V0SW5zZXJ0TWFya3NBdFJhbmdlIiwiZnJhZyIsIlBsYWluIiwiZGVzZXJpYWxpemUiLCJwbGFjZWhvbGRlciIsInNpemUiLCJkaXNwbGF5Iiwid2lkdGgiLCJtYXhXaWR0aCIsIndoaXRlU3BhY2UiLCJvcGFjaXR5IiwicG9pbnRlckV2ZW50cyIsInVzZXJTZWxlY3QiLCJvblJlc2l6ZSIsImhhbmRsZVBsdWdpbnMiLCJvblJlZiIsIndpbmRvdyIsImF1dG9Gb2N1cyIsIm5leHRQcm9wcyIsIm5ld1Rvb2xiYXJPcHRzIiwiaXNFcXVhbCIsInplcm9XaWR0aEVscyIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJmb3JFYWNoIiwiZWwiLCJtaW5XaWR0aCIsIm1pbkhlaWdodCIsImhlaWdodCIsIm1heEhlaWdodCIsInZhbHVlVG9TaXplIiwiZGlzYWJsZWQiLCJzcGVsbENoZWNrIiwiaGlnaGxpZ2h0U2hhcGUiLCJjbGFzc2VzIiwicGx1Z2luUHJvcHMiLCJzaXplU3R5bGUiLCJidWlsZFNpemVTdHlsZSIsIm5hbWVzIiwiY2xhc3NOYW1lcyIsIndpdGhCZyIsInRvb2xiYXJPblRvcCIsInNsYXRlRWRpdG9yIiwicmVmIiwiciIsImdldEZvY3VzZWRWYWx1ZSIsIm9uRHJvcFBhc3RlIiwibm9QYWRkaW5nIiwibm9Cb3JkZXIiLCJyZW5kZXJQbGFjZWhvbGRlciIsIlJlYWN0IiwiQ29tcG9uZW50IiwiUHJvcFR5cGVzIiwiYm9vbCIsImZ1bmMiLCJpc1JlcXVpcmVkIiwiYXJyYXlPZiIsInNoYXBlIiwiYXJyYXkiLCJudW1iZXIiLCJvbmVPZlR5cGUiLCJhbnkiLCJvbmVPZiIsImxhbmd1YWdlIiwiY2hhcmFjdGVySWNvbiIsImNoYXJhY3RlcnMiLCJ2YWx1ZXMiLCJhbGxWYWxpZCIsImV2ZXJ5IiwiQUxMX1BMVUdJTlMiLCJFcnJvciIsImpvaW4iLCJzdHlsZXMiLCJiYWNrZ3JvdW5kQ29sb3IiLCJmb250RmFtaWx5IiwidGFibGVMYXlvdXQiLCJib3JkZXJDb2xsYXBzZSIsImNvbG9yIiwiYmFja2dyb3VuZCIsImJvcmRlclRvcCIsInBhZGRpbmciLCJib3JkZXIiLCJtYXJnaW5Ub3AiLCJ3aXRoU3R5bGVzIl0sInNvdXJjZXMiOlsiLi4vc3JjL2VkaXRvci5qc3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VNZW1vLCB1c2VSZWYsIHVzZVN0YXRlLCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQge1xuICBFZGl0b3IgYXMgT2xkU2xhdGVFZGl0b3IsXG4gIGZpbmROb2RlLFxuICBnZXRFdmVudFJhbmdlLFxuICBnZXRFdmVudFRyYW5zZmVyLFxuICB1c2VTbGF0ZVN0YXRpY1xufSBmcm9tICdzbGF0ZS1yZWFjdCc7XG5pbXBvcnQgUm9vdFJlZiBmcm9tICdAbWF0ZXJpYWwtdWkvY29yZS9Sb290UmVmJztcblxuaW1wb3J0IGlzRXF1YWwgZnJvbSAnbG9kYXNoL2lzRXF1YWwnO1xuaW1wb3J0ICogYXMgc2VyaWFsaXphdGlvbiBmcm9tICcuL25ldy1zZXJpYWxpemF0aW9uJztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBWYWx1ZSwgQmxvY2ssIElubGluZSB9IGZyb20gJ3NsYXRlJztcbmltcG9ydCB7IEFMTF9QTFVHSU5TLCBERUZBVUxUX1BMVUdJTlMsIGJ1aWxkUGx1Z2lucywgd2l0aFBsdWdpbnMgfSBmcm9tICcuL3BsdWdpbnMnO1xuaW1wb3J0IGRlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCB7IHdpdGhTdHlsZXMgfSBmcm9tICdAbWF0ZXJpYWwtdWkvY29yZS9zdHlsZXMnO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBjb2xvciB9IGZyb20gJ0BwaWUtbGliL3JlbmRlci11aSc7XG5pbXBvcnQgUGxhaW4gZnJvbSAnc2xhdGUtcGxhaW4tc2VyaWFsaXplcic7XG5cbmltcG9ydCB7IGdldEJhc2U2NCwgaHRtbFRvVmFsdWUsIHZhbHVlVG9IdG1sIH0gZnJvbSAnLi9uZXctc2VyaWFsaXphdGlvbic7XG5pbXBvcnQgSW5zZXJ0SW1hZ2VIYW5kbGVyIGZyb20gJy4vcGx1Z2lucy9pbWFnZS9pbnNlcnQtaW1hZ2UtaGFuZGxlcic7XG5cbmltcG9ydCBpc0hvdGtleSBmcm9tICdpcy1ob3RrZXknO1xuaW1wb3J0IHsgRWRpdGFibGUsIHVzZUZvY3VzZWQsIHdpdGhSZWFjdCwgdXNlU2xhdGUsIFNsYXRlIH0gZnJvbSAnc2xhdGUtcmVhY3QnO1xuaW1wb3J0IHsgRWRpdG9yLCBUcmFuc2Zvcm1zLCBjcmVhdGVFZGl0b3IsIEVsZW1lbnQgYXMgU2xhdGVFbGVtZW50IH0gZnJvbSAnc2xhdGUnO1xuaW1wb3J0IHsgd2l0aEhpc3RvcnkgfSBmcm9tICdzbGF0ZS1oaXN0b3J5JztcbmltcG9ydCB7IE1hdGhQcmV2aWV3IH0gZnJvbSAnQHBpZS1saWIvbWF0aC10b29sYmFyJztcblxuaW1wb3J0IHsgQnV0dG9uLCBJY29uLCBUb29sYmFyIH0gZnJvbSAnLi9jb21wb25lbnRzJztcbmltcG9ydCBFZGl0b3JBbmRUb29sYmFyIGZyb20gJy4vcGx1Z2lucy90b29sYmFyL2VkaXRvci1hbmQtdG9vbGJhcic7XG5cbmNvbnN0IEhPVEtFWVMgPSB7XG4gICdtb2QrYic6ICdib2xkJyxcbiAgJ21vZCtpJzogJ2l0YWxpYycsXG4gICdtb2QrdSc6ICd1bmRlcmxpbmUnLFxuICAnbW9kK2AnOiAnY29kZSdcbn07XG5cbmNvbnN0IExJU1RfVFlQRVMgPSBbJ251bWJlcmVkLWxpc3QnLCAnYnVsbGV0ZWQtbGlzdCddO1xuY29uc3QgVEVYVF9BTElHTl9UWVBFUyA9IFsnbGVmdCcsICdjZW50ZXInLCAncmlnaHQnLCAnanVzdGlmeSddO1xuXG5jb25zdCBpbml0aWFsVmFsdWUgPSBbXG4gIHtcbiAgICB0eXBlOiAncGFyYWdyYXBoJyxcbiAgICBjaGlsZHJlbjogW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnbWF0aCcsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBsYXRleDogJ1xcXFxmcmFjezF9ezJ9JyxcbiAgICAgICAgICB3cmFwcGVyOiAncm91bmRfYnJhY2tldHMnXG4gICAgICAgIH0sXG4gICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdGV4dDogJ1xcXFwoXFxcXGZyYWN7MX17Mn1cXFxcKSdcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH1cbiAgICBdXG4gIH1cbl07XG5cbmNvbnN0IFNsYXRlRWRpdG9yID0gZWRpdG9yUHJvcHMgPT4ge1xuICBjb25zdCB7IHZhbHVlLCBwbHVnaW5zIH0gPSBlZGl0b3JQcm9wcztcbiAgY29uc3QgcmVuZGVyRWxlbWVudCA9IHVzZUNhbGxiYWNrKHByb3BzID0+IDxFbGVtZW50IHsuLi5wcm9wc30gcGx1Z2lucz17cGx1Z2luc30gLz4sIFtdKTtcbiAgY29uc3QgcmVuZGVyTGVhZiA9IHVzZUNhbGxiYWNrKHByb3BzID0+IDxMZWFmIHsuLi5wcm9wc30gLz4sIFtdKTtcbiAgY29uc3QgZWRpdG9yID0gdXNlTWVtbygoKSA9PiB3aXRoUGx1Z2lucyhjcmVhdGVFZGl0b3IoKSwgcGx1Z2lucyksIFtdKTtcbiAgY29uc3QgW2lzRm9jdXNlZCwgc2V0SXNGb2N1c2VkXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgZWRpdG9yUmVmID0gdXNlUmVmKG51bGwpO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGVkaXRvclByb3BzLm9uRWRpdG9yKSB7XG4gICAgICBlZGl0b3JQcm9wcy5vbkVkaXRvcihlZGl0b3IpO1xuICAgIH1cbiAgfSwgW2VkaXRvcl0pO1xuXG4gIGNvbnN0IHNsYXRlVmFsdWUgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAvLyBTbGF0ZSB0aHJvd3MgYW4gZXJyb3IgaWYgdGhlIHZhbHVlIG9uIHRoZSBpbml0aWFsIHJlbmRlciBpcyBpbnZhbGlkXG4gICAgLy8gc28gd2UgZGlyZWN0bHkgc2V0IHRoZSB2YWx1ZSBvbiB0aGUgZWRpdG9yIGluIG9yZGVyXG4gICAgLy8gdG8gYmUgYWJsZSB0byB0cmlnZ2VyIG5vcm1hbGl6YXRpb24gb24gdGhlIGluaXRpYWwgdmFsdWUgYmVmb3JlIHJlbmRlcmluZ1xuICAgIGVkaXRvci5jaGlsZHJlbiA9IHZhbHVlO1xuICAgIEVkaXRvci5ub3JtYWxpemUoZWRpdG9yLCB7IGZvcmNlOiB0cnVlIH0pO1xuICAgIC8vIFdlIHJldHVybiB0aGUgbm9ybWFsaXplZCBpbnRlcm5hbCB2YWx1ZSBzbyB0aGF0IHRoZSByZW5kZXJpbmcgY2FuIHRha2Ugb3ZlciBmcm9tIGhlcmVcbiAgICByZXR1cm4gZWRpdG9yLmNoaWxkcmVuO1xuICB9LCBbZWRpdG9yLCB2YWx1ZV0pO1xuXG4gIGNvbnN0IG9uS2V5RG93biA9IGV2ZW50ID0+IHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInICYmIGV2ZW50LnNoaWZ0S2V5ID09PSB0cnVlKSB7XG4gICAgICBlZGl0b3IuaW5zZXJ0VGV4dCgnXFxuJyk7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZvciAoY29uc3QgaG90a2V5IGluIEhPVEtFWVMpIHtcbiAgICAgIGlmIChpc0hvdGtleShob3RrZXksIGV2ZW50KSkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBjb25zdCBtYXJrID0gSE9US0VZU1tob3RrZXldO1xuICAgICAgICB0b2dnbGVNYXJrKGVkaXRvciwgbWFyayk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuICBjb25zdCBvbkZvY3VzID0gKCkgPT4gc2V0SXNGb2N1c2VkKHRydWUpO1xuICBjb25zdCBvbkJsdXIgPSAoKSA9PiB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAoIWVkaXRvclJlZi5jdXJyZW50IHx8ICFlZGl0b3JSZWYuY3VycmVudC5jb250YWlucyhkb2N1bWVudC5hY3RpdmVFbGVtZW50KSkge1xuICAgICAgICBzZXRJc0ZvY3VzZWQoZmFsc2UpO1xuICAgICAgfVxuICAgIH0sIDUwKTtcbiAgfTtcblxuICByZXR1cm4gKFxuICAgIDxTbGF0ZSBlZGl0b3I9e2VkaXRvcn0gdmFsdWU9e3NsYXRlVmFsdWV9PlxuICAgICAgPFJvb3RSZWYgcm9vdFJlZj17ZWRpdG9yUmVmfT5cbiAgICAgICAgPEVkaXRvckFuZFRvb2xiYXJcbiAgICAgICAgICB7Li4uZWRpdG9yUHJvcHN9XG4gICAgICAgICAgZWRpdG9yPXtlZGl0b3J9XG4gICAgICAgICAgaXNGb2N1c2VkPXtpc0ZvY3VzZWR9XG4gICAgICAgICAgb25Eb25lPXsoKSA9PiB7XG4gICAgICAgICAgICBzZXRJc0ZvY3VzZWQoZmFsc2UpO1xuICAgICAgICAgICAgZWRpdG9yUHJvcHMub25Eb25lKGVkaXRvcik7XG4gICAgICAgICAgfX1cbiAgICAgICAgPlxuICAgICAgICAgIDxFZGl0YWJsZVxuICAgICAgICAgICAgcmVuZGVyRWxlbWVudD17cmVuZGVyRWxlbWVudH1cbiAgICAgICAgICAgIHJlbmRlckxlYWY9e3JlbmRlckxlYWZ9XG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkVudGVyIHNvbWUgcmljaCB0ZXh04oCmXCJcbiAgICAgICAgICAgIHNwZWxsQ2hlY2tcbiAgICAgICAgICAgIG9uS2V5RG93bj17b25LZXlEb3dufVxuICAgICAgICAgICAgb25Gb2N1cz17b25Gb2N1c31cbiAgICAgICAgICAgIG9uQmx1cj17b25CbHVyfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvRWRpdG9yQW5kVG9vbGJhcj5cbiAgICAgIDwvUm9vdFJlZj5cbiAgICA8L1NsYXRlPlxuICApO1xufTtcblxuY29uc3QgdG9nZ2xlQmxvY2sgPSAoZWRpdG9yLCBmb3JtYXQpID0+IHtcbiAgY29uc3QgaXNBY3RpdmUgPSBpc0Jsb2NrQWN0aXZlKFxuICAgIGVkaXRvcixcbiAgICBmb3JtYXQsXG4gICAgVEVYVF9BTElHTl9UWVBFUy5pbmNsdWRlcyhmb3JtYXQpID8gJ2FsaWduJyA6ICd0eXBlJ1xuICApO1xuICBjb25zdCBpc0xpc3QgPSBMSVNUX1RZUEVTLmluY2x1ZGVzKGZvcm1hdCk7XG5cbiAgVHJhbnNmb3Jtcy51bndyYXBOb2RlcyhlZGl0b3IsIHtcbiAgICBtYXRjaDogbiA9PlxuICAgICAgIUVkaXRvci5pc0VkaXRvcihuKSAmJlxuICAgICAgU2xhdGVFbGVtZW50LmlzRWxlbWVudChuKSAmJlxuICAgICAgTElTVF9UWVBFUy5pbmNsdWRlcyhuLnR5cGUpICYmXG4gICAgICAhVEVYVF9BTElHTl9UWVBFUy5pbmNsdWRlcyhmb3JtYXQpLFxuICAgIHNwbGl0OiB0cnVlXG4gIH0pO1xuICBsZXQgbmV3UHJvcGVydGllcztcbiAgaWYgKFRFWFRfQUxJR05fVFlQRVMuaW5jbHVkZXMoZm9ybWF0KSkge1xuICAgIG5ld1Byb3BlcnRpZXMgPSB7XG4gICAgICBhbGlnbjogaXNBY3RpdmUgPyB1bmRlZmluZWQgOiBmb3JtYXRcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIG5ld1Byb3BlcnRpZXMgPSB7XG4gICAgICB0eXBlOiBpc0FjdGl2ZSA/ICdwYXJhZ3JhcGgnIDogaXNMaXN0ID8gJ2xpc3RfaXRlbScgOiBmb3JtYXRcbiAgICB9O1xuICB9XG4gIFRyYW5zZm9ybXMuc2V0Tm9kZXMoZWRpdG9yLCBuZXdQcm9wZXJ0aWVzKTtcblxuICBpZiAoIWlzQWN0aXZlICYmIGlzTGlzdCkge1xuICAgIGNvbnN0IGJsb2NrID0geyB0eXBlOiBmb3JtYXQsIGNoaWxkcmVuOiBbXSB9O1xuICAgIFRyYW5zZm9ybXMud3JhcE5vZGVzKGVkaXRvciwgYmxvY2spO1xuICB9XG59O1xuXG5jb25zdCB0b2dnbGVNYXJrID0gKGVkaXRvciwgZm9ybWF0KSA9PiB7XG4gIGNvbnN0IGlzQWN0aXZlID0gaXNNYXJrQWN0aXZlKGVkaXRvciwgZm9ybWF0KTtcblxuICBpZiAoaXNBY3RpdmUpIHtcbiAgICBFZGl0b3IucmVtb3ZlTWFyayhlZGl0b3IsIGZvcm1hdCk7XG4gIH0gZWxzZSB7XG4gICAgRWRpdG9yLmFkZE1hcmsoZWRpdG9yLCBmb3JtYXQsIHRydWUpO1xuICB9XG59O1xuXG5jb25zdCBpc0Jsb2NrQWN0aXZlID0gKGVkaXRvciwgZm9ybWF0LCBibG9ja1R5cGUgPSAndHlwZScpID0+IHtcbiAgY29uc3QgeyBzZWxlY3Rpb24gfSA9IGVkaXRvcjtcbiAgaWYgKCFzZWxlY3Rpb24pIHJldHVybiBmYWxzZTtcblxuICBjb25zdCBbbWF0Y2hdID0gQXJyYXkuZnJvbShcbiAgICBFZGl0b3Iubm9kZXMoZWRpdG9yLCB7XG4gICAgICBhdDogRWRpdG9yLnVuaGFuZ1JhbmdlKGVkaXRvciwgc2VsZWN0aW9uKSxcbiAgICAgIG1hdGNoOiBuID0+ICFFZGl0b3IuaXNFZGl0b3IobikgJiYgU2xhdGVFbGVtZW50LmlzRWxlbWVudChuKSAmJiBuW2Jsb2NrVHlwZV0gPT09IGZvcm1hdFxuICAgIH0pXG4gICk7XG5cbiAgcmV0dXJuICEhbWF0Y2g7XG59O1xuXG5jb25zdCBpc01hcmtBY3RpdmUgPSAoZWRpdG9yLCBmb3JtYXQpID0+IHtcbiAgY29uc3QgbWFya3MgPSBFZGl0b3IubWFya3MoZWRpdG9yKTtcbiAgcmV0dXJuIG1hcmtzID8gbWFya3NbZm9ybWF0XSA9PT0gdHJ1ZSA6IGZhbHNlO1xufTtcblxuY29uc3QgRWxlbWVudCA9IHByb3BzID0+IHtcbiAgY29uc3QgZWRpdG9yID0gdXNlU2xhdGVTdGF0aWMoKTtcbiAgY29uc3QgZm9jdXNlZCA9IHVzZUZvY3VzZWQoKTtcbiAgY29uc3QgeyBhdHRyaWJ1dGVzLCBjaGlsZHJlbiwgZWxlbWVudCwgcGx1Z2lucyB9ID0gcHJvcHM7XG4gIGNvbnN0IHN0eWxlID0geyB0ZXh0QWxpZ246IGVsZW1lbnQuYWxpZ24gfTtcblxuICBjb25zdCBub2RlUHJvcHMgPSB7IC4uLmF0dHJpYnV0ZXMsIC4uLnByb3BzLCBub2RlOiB7IC4uLmVsZW1lbnQgfSwgY2hpbGRyZW4gfTtcbiAgY29uc3QgcGx1Z2luVG9SZW5kZXIgPSBwbHVnaW5zLmZpbmQoXG4gICAgcGx1Z2luID0+IHR5cGVvZiBwbHVnaW4uc3VwcG9ydHMgPT09ICdmdW5jdGlvbicgJiYgcGx1Z2luLnN1cHBvcnRzKGVsZW1lbnQpXG4gICk7XG5cbiAgaWYgKHBsdWdpblRvUmVuZGVyKSB7XG4gICAgcmV0dXJuIHBsdWdpblRvUmVuZGVyLnJlbmRlck5vZGUoeyAuLi5ub2RlUHJvcHMsIGVkaXRvciwgZm9jdXNlZCB9KTtcbiAgfVxuXG4gIHN3aXRjaCAoZWxlbWVudC50eXBlKSB7XG4gICAgY2FzZSAnYmxvY2stcXVvdGUnOlxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPGJsb2NrcXVvdGUgc3R5bGU9e3N0eWxlfSB7Li4uYXR0cmlidXRlc30+XG4gICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICA8L2Jsb2NrcXVvdGU+XG4gICAgICApO1xuICAgIGNhc2UgJ2J1bGxldGVkLWxpc3QnOlxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPHVsIHN0eWxlPXtzdHlsZX0gey4uLmF0dHJpYnV0ZXN9PlxuICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgPC91bD5cbiAgICAgICk7XG4gICAgY2FzZSAnaGVhZGluZy1vbmUnOlxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPGgxIHN0eWxlPXtzdHlsZX0gey4uLmF0dHJpYnV0ZXN9PlxuICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgPC9oMT5cbiAgICAgICk7XG4gICAgY2FzZSAnaGVhZGluZy10d28nOlxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPGgyIHN0eWxlPXtzdHlsZX0gey4uLmF0dHJpYnV0ZXN9PlxuICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgPC9oMj5cbiAgICAgICk7XG4gICAgY2FzZSAnbGlzdC1pdGVtJzpcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxsaSBzdHlsZT17c3R5bGV9IHsuLi5hdHRyaWJ1dGVzfT5cbiAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgIDwvbGk+XG4gICAgICApO1xuICAgIGNhc2UgJ251bWJlcmVkLWxpc3QnOlxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPG9sIHN0eWxlPXtzdHlsZX0gey4uLmF0dHJpYnV0ZXN9PlxuICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgPC9vbD5cbiAgICAgICk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgLi4uc3R5bGUsXG4gICAgICAgICAgICBtYXJnaW46IDBcbiAgICAgICAgICB9fVxuICAgICAgICAgIHsuLi5hdHRyaWJ1dGVzfVxuICAgICAgICA+XG4gICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICA8L2Rpdj5cbiAgICAgICk7XG4gIH1cbn07XG5cbmNvbnN0IExlYWYgPSAoeyBhdHRyaWJ1dGVzLCBjaGlsZHJlbiwgbGVhZiB9KSA9PiB7XG4gIGlmIChsZWFmLmJvbGQpIHtcbiAgICBjaGlsZHJlbiA9IDxzdHJvbmc+e2NoaWxkcmVufTwvc3Ryb25nPjtcbiAgfVxuXG4gIGlmIChsZWFmLmNvZGUpIHtcbiAgICBjaGlsZHJlbiA9IDxjb2RlPntjaGlsZHJlbn08L2NvZGU+O1xuICB9XG5cbiAgaWYgKGxlYWYuaXRhbGljKSB7XG4gICAgY2hpbGRyZW4gPSA8ZW0+e2NoaWxkcmVufTwvZW0+O1xuICB9XG5cbiAgaWYgKGxlYWYudW5kZXJsaW5lKSB7XG4gICAgY2hpbGRyZW4gPSA8dT57Y2hpbGRyZW59PC91PjtcbiAgfVxuXG4gIGlmIChsZWFmLnN0cmlrZXRocm91Z2gpIHtcbiAgICBjaGlsZHJlbiA9IDxkZWw+e2NoaWxkcmVufTwvZGVsPjtcbiAgfVxuXG4gIHJldHVybiA8c3BhbiB7Li4uYXR0cmlidXRlc30+e2NoaWxkcmVufTwvc3Bhbj47XG59O1xuXG5jb25zdCBCbG9ja0J1dHRvbiA9ICh7IGZvcm1hdCwgaWNvbiB9KSA9PiB7XG4gIGNvbnN0IGVkaXRvciA9IHVzZVNsYXRlKCk7XG4gIHJldHVybiAoXG4gICAgPEJ1dHRvblxuICAgICAgYWN0aXZlPXtpc0Jsb2NrQWN0aXZlKGVkaXRvciwgZm9ybWF0LCBURVhUX0FMSUdOX1RZUEVTLmluY2x1ZGVzKGZvcm1hdCkgPyAnYWxpZ24nIDogJ3R5cGUnKX1cbiAgICAgIG9uTW91c2VEb3duPXtldmVudCA9PiB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRvZ2dsZUJsb2NrKGVkaXRvciwgZm9ybWF0KTtcbiAgICAgIH19XG4gICAgPlxuICAgICAgPEljb24+e2ljb259PC9JY29uPlxuICAgIDwvQnV0dG9uPlxuICApO1xufTtcblxuY29uc3QgTWFya0J1dHRvbiA9ICh7IGZvcm1hdCwgaWNvbiB9KSA9PiB7XG4gIGNvbnN0IGVkaXRvciA9IHVzZVNsYXRlKCk7XG4gIHJldHVybiAoXG4gICAgPEJ1dHRvblxuICAgICAgYWN0aXZlPXtpc01hcmtBY3RpdmUoZWRpdG9yLCBmb3JtYXQpfVxuICAgICAgb25Nb3VzZURvd249e2V2ZW50ID0+IHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdG9nZ2xlTWFyayhlZGl0b3IsIGZvcm1hdCk7XG4gICAgICB9fVxuICAgID5cbiAgICAgIDxJY29uPntpY29ufTwvSWNvbj5cbiAgICA8L0J1dHRvbj5cbiAgKTtcbn07XG5cbi8vIG9sZC1lZGl0YWJsZVxuXG5leHBvcnQgeyBBTExfUExVR0lOUywgREVGQVVMVF9QTFVHSU5TLCBzZXJpYWxpemF0aW9uIH07XG5cbmNvbnN0IGxvZyA9IGRlYnVnKCdlZGl0YWJsZS1odG1sOmVkaXRvcicpO1xuXG5jb25zdCBkZWZhdWx0VG9vbGJhck9wdHMgPSB7XG4gIHBvc2l0aW9uOiAnYm90dG9tJyxcbiAgYWxpZ25tZW50OiAnbGVmdCcsXG4gIGFsd2F5c1Zpc2libGU6IGZhbHNlLFxuICBzaG93RG9uZTogdHJ1ZSxcbiAgZG9uZU9uOiAnYmx1cidcbn07XG5cbmNvbnN0IGRlZmF1bHRSZXNwb25zZUFyZWFQcm9wcyA9IHtcbiAgb3B0aW9uczoge30sXG4gIHJlc3BBcmVhVG9vbGJhcjogKCkgPT4ge30sXG4gIG9uSGFuZGxlQXJlYUNoYW5nZTogKCkgPT4ge31cbn07XG5cbmNvbnN0IGRlZmF1bHRMYW5ndWFnZUNoYXJhY3RlcnNQcm9wcyA9IFtdO1xuXG5jb25zdCBjcmVhdGVUb29sYmFyT3B0cyA9IHRvb2xiYXJPcHRzID0+IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5kZWZhdWx0VG9vbGJhck9wdHMsXG4gICAgLi4udG9vbGJhck9wdHNcbiAgfTtcbn07XG5cbmV4cG9ydCBjbGFzcyBFZGl0b3JDb21wb25lbnQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgIGF1dG9Gb2N1czogUHJvcFR5cGVzLmJvb2wsXG4gICAgb25SZWY6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgb25FZGl0b3I6IFByb3BUeXBlcy5mdW5jLFxuICAgIG9uRm9jdXM6IFByb3BUeXBlcy5mdW5jLFxuICAgIG9uQmx1cjogUHJvcFR5cGVzLmZ1bmMsXG4gICAgb25LZXlEb3duOiBQcm9wVHlwZXMuZnVuYyxcbiAgICB2YWx1ZTogUHJvcFR5cGVzLmFycmF5T2YoXG4gICAgICBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgICB0eXBlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgICBjaGlsZHJlbjogUHJvcFR5cGVzLmFycmF5LFxuICAgICAgICBkYXRhOiBQcm9wVHlwZXMub2JqZWN0XG4gICAgICB9KVxuICAgICksXG4gICAgaW1hZ2VTdXBwb3J0OiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIHVwbG9hZFNvdW5kU3VwcG9ydDogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIGFkZDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgICBkZWxldGU6IFByb3BUeXBlcy5mdW5jXG4gICAgfSksXG4gICAgY2hhcmFjdGVyc0xpbWl0OiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIHdpZHRoOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSksXG4gICAgaGVpZ2h0OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSksXG4gICAgbWluSGVpZ2h0OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSksXG4gICAgbWF4SGVpZ2h0OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSksXG4gICAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuICAgIGhpZ2hsaWdodFNoYXBlOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gICAgc3BlbGxDaGVjazogUHJvcFR5cGVzLmJvb2wsXG4gICAgbm9uRW1wdHk6IFByb3BUeXBlcy5ib29sLFxuICAgIGRpc2FibGVTY3JvbGxiYXI6IFByb3BUeXBlcy5ib29sLFxuICAgIGRpc2FibGVVbmRlcmxpbmU6IFByb3BUeXBlcy5ib29sLFxuICAgIGF1dG9XaWR0aFRvb2xiYXI6IFByb3BUeXBlcy5ib29sLFxuICAgIHBsdWdpblByb3BzOiBQcm9wVHlwZXMuYW55LFxuICAgIHBsYWNlaG9sZGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHJlc3BvbnNlQXJlYVByb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgdHlwZTogUHJvcFR5cGVzLm9uZU9mKFtcbiAgICAgICAgJ2V4cGxpY2l0LWNvbnN0cnVjdGVkLXJlc3BvbnNlJyxcbiAgICAgICAgJ2lubGluZS1kcm9wZG93bicsXG4gICAgICAgICdkcmFnLWluLXRoZS1ibGFuaydcbiAgICAgIF0pLFxuICAgICAgb3B0aW9uczogUHJvcFR5cGVzLm9iamVjdCxcbiAgICAgIHJlc3BBcmVhVG9vbGJhcjogUHJvcFR5cGVzLmZ1bmMsXG4gICAgICBvbkhhbmRsZUFyZWFDaGFuZ2U6IFByb3BUeXBlcy5mdW5jXG4gICAgfSksXG4gICAgbGFuZ3VhZ2VDaGFyYWN0ZXJzUHJvcHM6IFByb3BUeXBlcy5hcnJheU9mKFxuICAgICAgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgICAgbGFuZ3VhZ2U6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICAgIGNoYXJhY3Rlckljb246IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICAgIGNoYXJhY3RlcnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zdHJpbmcpKVxuICAgICAgfSlcbiAgICApLFxuICAgIHRvb2xiYXJPcHRzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgcG9zaXRpb246IFByb3BUeXBlcy5vbmVPZihbJ2JvdHRvbScsICd0b3AnXSksXG4gICAgICBhbGlnbm1lbnQ6IFByb3BUeXBlcy5vbmVPZihbJ2xlZnQnLCAncmlnaHQnXSksXG4gICAgICBhbHdheXNWaXNpYmxlOiBQcm9wVHlwZXMuYm9vbCxcbiAgICAgIHNob3dEb25lOiBQcm9wVHlwZXMuYm9vbCxcbiAgICAgIGRvbmVPbjogUHJvcFR5cGVzLnN0cmluZ1xuICAgIH0pLFxuICAgIGFjdGl2ZVBsdWdpbnM6IFByb3BUeXBlcy5hcnJheU9mKHZhbHVlcyA9PiB7XG4gICAgICBjb25zdCBhbGxWYWxpZCA9IHZhbHVlcy5ldmVyeSh2ID0+IEFMTF9QTFVHSU5TLmluY2x1ZGVzKHYpKTtcblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgIWFsbFZhbGlkICYmXG4gICAgICAgIG5ldyBFcnJvcihgSW52YWxpZCB2YWx1ZXM6ICR7dmFsdWVzfSwgdmFsdWVzIG11c3QgYmUgb25lIG9mIFske0FMTF9QTFVHSU5TLmpvaW4oJywnKX1dYClcbiAgICAgICk7XG4gICAgfSksXG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIG1heEltYWdlV2lkdGg6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgbWF4SW1hZ2VIZWlnaHQ6IFByb3BUeXBlcy5udW1iZXJcbiAgfTtcblxuICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuICAgIGRpc2FibGVVbmRlcmxpbmU6IHRydWUsXG4gICAgb25Gb2N1czogKCkgPT4ge30sXG4gICAgb25CbHVyOiAoKSA9PiB7fSxcbiAgICBvbktleURvd246ICgpID0+IHt9LFxuICAgIHRvb2xiYXJPcHRzOiBkZWZhdWx0VG9vbGJhck9wdHMsXG4gICAgcmVzcG9uc2VBcmVhUHJvcHM6IGRlZmF1bHRSZXNwb25zZUFyZWFQcm9wcyxcbiAgICBsYW5ndWFnZUNoYXJhY3RlcnNQcm9wczogZGVmYXVsdExhbmd1YWdlQ2hhcmFjdGVyc1Byb3BzXG4gIH07XG5cbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIHZhbHVlOiBwcm9wcy52YWx1ZSxcbiAgICAgIHRvb2xiYXJPcHRzOiBjcmVhdGVUb29sYmFyT3B0cyhwcm9wcy50b29sYmFyT3B0cylcbiAgICB9O1xuXG4gICAgdGhpcy5vblJlc2l6ZSA9ICgpID0+IHtcbiAgICAgIHByb3BzLm9uQ2hhbmdlKHRoaXMuc3RhdGUudmFsdWUsIHRydWUpO1xuICAgIH07XG5cbiAgICB0aGlzLmhhbmRsZVBsdWdpbnModGhpcy5wcm9wcyk7XG4gIH1cblxuICBoYW5kbGVQbHVnaW5zID0gcHJvcHMgPT4ge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRSZXNwb25zZUFyZWFQcm9wcyA9IHtcbiAgICAgIC4uLmRlZmF1bHRSZXNwb25zZUFyZWFQcm9wcyxcbiAgICAgIC4uLnByb3BzLnJlc3BvbnNlQXJlYVByb3BzXG4gICAgfTtcblxuICAgIHRoaXMucGx1Z2lucyA9IGJ1aWxkUGx1Z2lucyhwcm9wcy5hY3RpdmVQbHVnaW5zLCB7XG4gICAgICBtYXRoOiB7XG4gICAgICAgIG9uQ2xpY2s6IHRoaXMub25NYXRoQ2xpY2ssXG4gICAgICAgIG9uRm9jdXM6IHRoaXMub25QbHVnaW5Gb2N1cyxcbiAgICAgICAgb25CbHVyOiB0aGlzLm9uUGx1Z2luQmx1clxuICAgICAgfSxcbiAgICAgIGltYWdlOiB7XG4gICAgICAgIG9uRGVsZXRlOlxuICAgICAgICAgIHByb3BzLmltYWdlU3VwcG9ydCAmJlxuICAgICAgICAgIHByb3BzLmltYWdlU3VwcG9ydC5kZWxldGUgJiZcbiAgICAgICAgICAoKHNyYywgZG9uZSkgPT4ge1xuICAgICAgICAgICAgcHJvcHMuaW1hZ2VTdXBwb3J0LmRlbGV0ZShzcmMsIGUgPT4ge1xuICAgICAgICAgICAgICBkb25lKGUsIHRoaXMuc3RhdGUudmFsdWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSksXG4gICAgICAgIGluc2VydEltYWdlUmVxdWVzdGVkOlxuICAgICAgICAgIHByb3BzLmltYWdlU3VwcG9ydCAmJlxuICAgICAgICAgIChnZXRIYW5kbGVyID0+IHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogVGhlIGhhbmRsZXIgaXMgdGhlIG9iamVjdCB0aHJvdWdoIHdoaWNoIHRoZSBvdXRlciBjb250ZXh0XG4gICAgICAgICAgICAgKiBjb21tdW5pY2F0ZXMgZmlsZSB1cGxvYWQgZXZlbnRzIGxpa2U6IGZpbGVDaG9zZW4sIGNhbmNlbCwgcHJvZ3Jlc3NcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgY29uc3QgaGFuZGxlciA9IGdldEhhbmRsZXIoKCkgPT4gdGhpcy5zdGF0ZS52YWx1ZSk7XG4gICAgICAgICAgICBwcm9wcy5pbWFnZVN1cHBvcnQuYWRkKGhhbmRsZXIpO1xuICAgICAgICAgIH0pLFxuICAgICAgICBvbkZvY3VzOiB0aGlzLm9uUGx1Z2luRm9jdXMsXG4gICAgICAgIG9uQmx1cjogdGhpcy5vblBsdWdpbkJsdXIsXG4gICAgICAgIG1heEltYWdlV2lkdGg6IHRoaXMucHJvcHMubWF4SW1hZ2VXaWR0aCxcbiAgICAgICAgbWF4SW1hZ2VIZWlnaHQ6IHRoaXMucHJvcHMubWF4SW1hZ2VIZWlnaHRcbiAgICAgIH0sXG4gICAgICB0b29sYmFyOiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUbyBtaW5pbWl6ZSBjb252ZXJ0aW5nIGh0bWwgLT4gc3RhdGUgLT4gaHRtbFxuICAgICAgICAgKiBXZSBvbmx5IGVtaXQgbWFya3VwIG9uY2UgJ2RvbmUnIGlzIGNsaWNrZWQuXG4gICAgICAgICAqL1xuICAgICAgICBkaXNhYmxlU2Nyb2xsYmFyOiAhIXByb3BzLmRpc2FibGVTY3JvbGxiYXIsXG4gICAgICAgIGRpc2FibGVVbmRlcmxpbmU6IHByb3BzLmRpc2FibGVVbmRlcmxpbmUsXG4gICAgICAgIGF1dG9XaWR0aDogcHJvcHMuYXV0b1dpZHRoVG9vbGJhclxuICAgICAgfSxcbiAgICAgIHRhYmxlOiB7XG4gICAgICAgIG9uRm9jdXM6ICgpID0+IHtcbiAgICAgICAgICBsb2coJ1t0YWJsZTpvbkZvY3VzXS4uLicpO1xuICAgICAgICAgIHRoaXMub25QbHVnaW5Gb2N1cygpO1xuICAgICAgICB9LFxuICAgICAgICBvbkJsdXI6ICgpID0+IHtcbiAgICAgICAgICBsb2coJ1t0YWJsZTpvbkJsdXJdLi4uJyk7XG4gICAgICAgICAgdGhpcy5vblBsdWdpbkJsdXIoKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHJlc3BvbnNlQXJlYToge1xuICAgICAgICB0eXBlOiBub3JtYWxpemVkUmVzcG9uc2VBcmVhUHJvcHMudHlwZSxcbiAgICAgICAgb3B0aW9uczogbm9ybWFsaXplZFJlc3BvbnNlQXJlYVByb3BzLm9wdGlvbnMsXG4gICAgICAgIG1heFJlc3BvbnNlQXJlYXM6IG5vcm1hbGl6ZWRSZXNwb25zZUFyZWFQcm9wcy5tYXhSZXNwb25zZUFyZWFzLFxuICAgICAgICByZXNwQXJlYVRvb2xiYXI6IG5vcm1hbGl6ZWRSZXNwb25zZUFyZWFQcm9wcy5yZXNwQXJlYVRvb2xiYXIsXG4gICAgICAgIG9uSGFuZGxlQXJlYUNoYW5nZTogbm9ybWFsaXplZFJlc3BvbnNlQXJlYVByb3BzLm9uSGFuZGxlQXJlYUNoYW5nZSxcbiAgICAgICAgZXJyb3I6IG5vcm1hbGl6ZWRSZXNwb25zZUFyZWFQcm9wcy5lcnJvcixcbiAgICAgICAgb25Gb2N1czogKCkgPT4ge1xuICAgICAgICAgIGxvZygnW3RhYmxlOm9uRm9jdXNdLi4uJyk7XG4gICAgICAgICAgdGhpcy5vblBsdWdpbkZvY3VzKCk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uQmx1cjogKCkgPT4ge1xuICAgICAgICAgIGxvZygnW3RhYmxlOm9uQmx1cl0uLi4nKTtcbiAgICAgICAgICB0aGlzLm9uUGx1Z2luQmx1cigpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgbGFuZ3VhZ2VDaGFyYWN0ZXJzOiBwcm9wcy5sYW5ndWFnZUNoYXJhY3RlcnNQcm9wcyxcbiAgICAgIG1lZGlhOiB7XG4gICAgICAgIGZvY3VzOiB0aGlzLmZvY3VzLFxuICAgICAgICBvbkNoYW5nZTogdGhpcy5vbkNoYW5nZSxcbiAgICAgICAgdXBsb2FkU291bmRTdXBwb3J0OiBwcm9wcy51cGxvYWRTb3VuZFN1cHBvcnRcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAvLyBvblJlZiBpcyBuZWVkZWQgdG8gZ2V0IHRoZSByZWYgb2YgdGhlIGNvbXBvbmVudCBiZWNhdXNlIHdlIGV4cG9ydCBpdCB1c2luZyB3aXRoU3R5bGVzXG4gICAgdGhpcy5wcm9wcy5vblJlZih0aGlzKTtcblxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLm9uUmVzaXplKTtcblxuICAgIGlmICh0aGlzLmVkaXRvciAmJiB0aGlzLnByb3BzLmF1dG9Gb2N1cykge1xuICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmVkaXRvcikge1xuICAgICAgICAgIGNvbnN0IGVkaXRvckRPTSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgICAgICBgW2RhdGEta2V5PVwiJHt0aGlzLmVkaXRvci52YWx1ZS5kb2N1bWVudC5rZXl9XCJdYFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAoZWRpdG9yRE9NKSB7XG4gICAgICAgICAgICBlZGl0b3JET00uZm9jdXMoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV4dFByb3BzKSB7XG4gICAgY29uc3QgeyB0b29sYmFyT3B0cyB9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb25zdCBuZXdUb29sYmFyT3B0cyA9IGNyZWF0ZVRvb2xiYXJPcHRzKG5leHRQcm9wcy50b29sYmFyT3B0cyk7XG5cbiAgICBpZiAoIWlzRXF1YWwobmV3VG9vbGJhck9wdHMsIHRvb2xiYXJPcHRzKSkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIHRvb2xiYXJPcHRzOiBuZXdUb29sYmFyT3B0c1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKCFpc0VxdWFsKG5leHRQcm9wcy5sYW5ndWFnZUNoYXJhY3RlcnNQcm9wcywgdGhpcy5wcm9wcy5sYW5ndWFnZUNoYXJhY3RlcnNQcm9wcykpIHtcbiAgICAgIHRoaXMuaGFuZGxlUGx1Z2lucyhuZXh0UHJvcHMpO1xuICAgIH1cbiAgfVxuXG4gIGNvbXBvbmVudERpZFVwZGF0ZSgpIHtcbiAgICAvLyBUaGUgY3Vyc29yIGlzIG9uIGEgemVybyB3aWR0aCBlbGVtZW50IGFuZCB3aGVuIHRoYXQgaXMgcGxhY2VkIG5lYXIgdm9pZCBlbGVtZW50cywgaXQgaXMgbm90IHZpc2libGVcbiAgICAvLyBzbyB3ZSBpbmNyZWFzZSB0aGUgd2lkdGggdG8gYXQgbGVhc3QgMnB4IGluIG9yZGVyIGZvciB0aGUgdXNlciB0byBzZWUgaXRcbiAgICBjb25zdCB6ZXJvV2lkdGhFbHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS1zbGF0ZS16ZXJvLXdpZHRoPVwielwiXScpO1xuXG4gICAgQXJyYXkuZnJvbSh6ZXJvV2lkdGhFbHMpLmZvckVhY2goZWwgPT4ge1xuICAgICAgZWwuc3R5bGUubWluV2lkdGggPSAnMnB4JztcbiAgICAgIGVsLnN0eWxlLmRpc3BsYXkgPSAnaW5saW5lLWJsb2NrJztcbiAgICB9KTtcbiAgfVxuXG4gIG9uUGx1Z2luQmx1ciA9IGUgPT4ge1xuICAgIGxvZygnW29uUGx1Z2luQmx1cl0nLCBlICYmIGUucmVsYXRlZFRhcmdldCk7XG4gICAgY29uc3QgdGFyZ2V0ID0gZSAmJiBlLnJlbGF0ZWRUYXJnZXQ7XG5cbiAgICBjb25zdCBub2RlID0gdGFyZ2V0ID8gZmluZE5vZGUodGFyZ2V0LCB0aGlzLnN0YXRlLnZhbHVlKSA6IG51bGw7XG4gICAgbG9nKCdbb25QbHVnaW5CbHVyXSBub2RlOiAnLCBub2RlKTtcbiAgICB0aGlzLnNldFN0YXRlKHsgZm9jdXNlZE5vZGU6IG5vZGUgfSwgKCkgPT4ge1xuICAgICAgdGhpcy5yZXNldFZhbHVlKCk7XG4gICAgfSk7XG4gIH07XG5cbiAgb25QbHVnaW5Gb2N1cyA9IGUgPT4ge1xuICAgIGxvZygnW29uUGx1Z2luRm9jdXNdJywgZSAmJiBlLnRhcmdldCk7XG4gICAgY29uc3QgdGFyZ2V0ID0gZSAmJiBlLnRhcmdldDtcbiAgICBpZiAodGFyZ2V0KSB7XG4gICAgICBjb25zdCBub2RlID0gZmluZE5vZGUodGFyZ2V0LCB0aGlzLnN0YXRlLnZhbHVlKTtcbiAgICAgIGxvZygnW29uUGx1Z2luRm9jdXNdIG5vZGU6ICcsIG5vZGUpO1xuXG4gICAgICBjb25zdCBzdGFzaGVkVmFsdWUgPSB0aGlzLnN0YXRlLnN0YXNoZWRWYWx1ZSB8fCB0aGlzLnN0YXRlLnZhbHVlO1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IGZvY3VzZWROb2RlOiBub2RlLCBzdGFzaGVkVmFsdWUgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBmb2N1c2VkTm9kZTogbnVsbCB9KTtcbiAgICB9XG4gICAgdGhpcy5zdGFzaFZhbHVlKCk7XG4gIH07XG5cbiAgb25NYXRoQ2xpY2sgPSBub2RlID0+IHtcbiAgICB0aGlzLnNldFN0YXRlKHsgc2VsZWN0ZWROb2RlOiBub2RlIH0pO1xuICB9O1xuXG4gIG9uRWRpdGluZ0RvbmUgPSBlZGl0b3IgPT4ge1xuICAgIGxvZygnW29uRWRpdGluZ0RvbmVdJyk7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IHN0YXNoZWRWYWx1ZTogbnVsbCwgZm9jdXNlZE5vZGU6IG51bGwgfSk7XG4gICAgbG9nKCdbb25FZGl0aW5nRG9uZV0gdmFsdWU6ICcsIHRoaXMuc3RhdGUudmFsdWUpO1xuICAgIHRoaXMucHJvcHMub25DaGFuZ2UoZWRpdG9yLCB0cnVlKTtcbiAgfTtcblxuICBvbkRvbmUgPSBlZGl0b3IgPT4ge1xuICAgIGNvbnN0IHsgbm9uRW1wdHkgfSA9IHRoaXMucHJvcHM7XG5cbiAgICBsb2coJ1tvbkRvbmVdJyk7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IHRvb2xiYXJJbkZvY3VzOiBmYWxzZSwgZm9jdXNlZE5vZGU6IG51bGwgfSk7XG5cbiAgICB0aGlzLm9uRWRpdGluZ0RvbmUoZWRpdG9yKTtcbiAgfTtcblxuICAvKipcbiAgICogUmVtb3ZlIG9uUmVzaXplIGV2ZW50IGxpc3RlbmVyXG4gICAqL1xuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5vblJlc2l6ZSk7XG4gIH1cblxuICAvLyBBbGxvd2luZyB0aW1lIGZvciBvbkNoYW5nZSB0byB0YWtlIGVmZmVjdCBpZiBpdCBpcyBjYWxsZWRcbiAgaGFuZGxlQmx1ciA9IHJlc29sdmUgPT4ge1xuICAgIGNvbnN0IHsgbm9uRW1wdHkgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3Qge1xuICAgICAgdG9vbGJhck9wdHM6IHsgZG9uZU9uIH1cbiAgICB9ID0gdGhpcy5zdGF0ZTtcblxuICAgIHRoaXMuc2V0U3RhdGUoeyB0b29sYmFySW5Gb2N1czogZmFsc2UsIGZvY3VzZWROb2RlOiBudWxsIH0pO1xuXG4gICAgaWYgKGRvbmVPbiA9PT0gJ2JsdXInKSB7XG4gICAgICBpZiAobm9uRW1wdHkgJiYgdGhpcy5zdGF0ZS52YWx1ZS5zdGFydFRleHQ/LnRleHQ/Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aGlzLnJlc2V0VmFsdWUodHJ1ZSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgdGhpcy5vbkVkaXRpbmdEb25lKCk7XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMub25FZGl0aW5nRG9uZSgpO1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIG9uQmx1ciA9IGV2ZW50ID0+IHtcbiAgICBsb2coJ1tvbkJsdXJdJyk7XG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQucmVsYXRlZFRhcmdldDtcblxuICAgIGNvbnN0IG5vZGUgPSB0YXJnZXQgPyBmaW5kTm9kZSh0YXJnZXQsIHRoaXMuc3RhdGUudmFsdWUpIDogbnVsbDtcblxuICAgIGxvZygnW29uQmx1cl0gbm9kZTogJywgbm9kZSk7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICB0aGlzLnNldFN0YXRlKFxuICAgICAgICB7IHByZUJsdXJWYWx1ZTogdGhpcy5zdGF0ZS52YWx1ZSwgZm9jdXNlZE5vZGU6ICFub2RlID8gbnVsbCA6IG5vZGUgfSxcbiAgICAgICAgdGhpcy5oYW5kbGVCbHVyLmJpbmQodGhpcywgcmVzb2x2ZSlcbiAgICAgICk7XG4gICAgICB0aGlzLnByb3BzLm9uQmx1cihldmVudCk7XG4gICAgfSk7XG4gIH07XG5cbiAgaGFuZGxlRG9tQmx1ciA9IGUgPT4ge1xuICAgIGNvbnN0IGVkaXRvckRPTSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWtleT1cIiR7dGhpcy5zdGF0ZS52YWx1ZS5kb2N1bWVudC5rZXl9XCJdYCk7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IHsgdmFsdWU6IHN0YXRlVmFsdWUgfSA9IHRoaXMuc3RhdGU7XG5cbiAgICAgIGlmICghdGhpcy53cmFwcGVyUmVmKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZWRpdG9yRWxlbWVudCA9XG4gICAgICAgICFlZGl0b3JET00gfHwgZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5jbG9zZXN0KGBbY2xhc3MqPVwiJHtlZGl0b3JET00uY2xhc3NOYW1lfVwiXWApO1xuICAgICAgY29uc3QgdG9vbGJhckVsZW1lbnQgPVxuICAgICAgICAhdGhpcy50b29sYmFyUmVmIHx8XG4gICAgICAgIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQuY2xvc2VzdChgW2NsYXNzKj1cIiR7dGhpcy50b29sYmFyUmVmLmNsYXNzTmFtZX1cIl1gKTtcbiAgICAgIGNvbnN0IGlzSW5DdXJyZW50Q29tcG9uZW50ID1cbiAgICAgICAgdGhpcy53cmFwcGVyUmVmLmNvbnRhaW5zKGVkaXRvckVsZW1lbnQpIHx8IHRoaXMud3JhcHBlclJlZi5jb250YWlucyh0b29sYmFyRWxlbWVudCk7XG5cbiAgICAgIGlmICghaXNJbkN1cnJlbnRDb21wb25lbnQpIHtcbiAgICAgICAgZWRpdG9yRE9NLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2JsdXInLCB0aGlzLmhhbmRsZURvbUJsdXIpO1xuXG4gICAgICAgIGlmIChzdGF0ZVZhbHVlLmlzRm9jdXNlZCkge1xuICAgICAgICAgIHRoaXMub25CbHVyKGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgNTApO1xuICB9O1xuXG4gIC8qXG4gICAqIE5lZWRzIHRvIGJlIHdyYXBwZWQgb3RoZXJ3aXNlIGl0IGNhdXNlcyBpc3N1ZXMgYmVjYXVzZSBvZiByYWNlIGNvbmRpdGlvbnNcbiAgICogS25vd24gaXNzdWUgZm9yIHNsYXRlanMuIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2lhbnN0b3JtdGF5bG9yL3NsYXRlL2lzc3Vlcy8yMDk3XG4gICAqIFVzaW5nIHRpbWVvdXQgSSB3YXNuJ3QgYWJsZSB0byB0ZXN0IHRoaXNcbiAgICpcbiAgICogTm90ZTogVGhlIHVzZSBvZiBwcm9taXNlcyBoYXMgYmVlbiBjYXVzaW5nIGlzc3VlcyB3aXRoIE1hdGhRdWlsbFxuICAgKiAqL1xuICBvbkZvY3VzID0gKCkgPT5cbiAgICBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgIGNvbnN0IGVkaXRvckRPTSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWtleT1cIiR7dGhpcy5zdGF0ZS52YWx1ZS5kb2N1bWVudC5rZXl9XCJdYCk7XG5cbiAgICAgIGxvZygnW29uRm9jdXNdJywgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCk7XG5cbiAgICAgIC8qKlxuICAgICAgICogVGhpcyBpcyBhIHRlbXBvcmFyeSBoYWNrIC0gQHNlZSBjaGFuZ2VEYXRhIGJlbG93IGZvciBzb21lIG1vcmUgaW5mb3JtYXRpb24uXG4gICAgICAgKi9cbiAgICAgIGlmICh0aGlzLl9fVEVNUE9SQVJZX0NIQU5HRV9EQVRBKSB7XG4gICAgICAgIGNvbnN0IHsga2V5LCBkYXRhIH0gPSB0aGlzLl9fVEVNUE9SQVJZX0NIQU5HRV9EQVRBO1xuICAgICAgICBjb25zdCBkb21FbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWtleT1cIiR7a2V5fVwiXWApO1xuXG4gICAgICAgIGlmIChkb21FbCkge1xuICAgICAgICAgIGxldCBjaGFuZ2UgPSB0aGlzLnN0YXRlLnZhbHVlLmNoYW5nZSgpLnNldE5vZGVCeUtleShrZXksIHsgZGF0YSB9KTtcblxuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoeyB2YWx1ZTogY2hhbmdlLnZhbHVlIH0sICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX19URU1QT1JBUllfQ0hBTkdFX0RBVEEgPSBudWxsO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8qKlxuICAgICAgICogVGhpcyBpcyBuZWVkZWQganVzdCBpbiBjYXNlIHRoZSBicm93c2VyIGRlY2lkZXMgdG8gbWFrZSB0aGUgZWRpdG9yXG4gICAgICAgKiBsb3NlIGZvY3VzIHdpdGhvdXQgdHJpZ2dlcmluZyB0aGUgb25CbHVyIGV2ZW50IChjYW4gaGFwcGVuIGluIGEgZmV3IGNhc2VzKS5cbiAgICAgICAqIFRoaXMgd2lsbCBhbHNvIHRyaWdnZXIgb25CbHVyIGlmIHRoZSB1c2VyIGNsaWNrcyBvdXRzaWRlIG9mIHRoZSBwYWdlIHdoZW4gdGhlIGVkaXRvclxuICAgICAgICogaXMgZm9jdXNlZC5cbiAgICAgICAqL1xuICAgICAgaWYgKGVkaXRvckRPTSA9PT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkge1xuICAgICAgICBlZGl0b3JET00ucmVtb3ZlRXZlbnRMaXN0ZW5lcignYmx1cicsIHRoaXMuaGFuZGxlRG9tQmx1cik7XG4gICAgICAgIGVkaXRvckRPTS5hZGRFdmVudExpc3RlbmVyKCdibHVyJywgdGhpcy5oYW5kbGVEb21CbHVyKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zdGFzaFZhbHVlKCk7XG4gICAgICB0aGlzLnByb3BzLm9uRm9jdXMoKTtcblxuICAgICAgcmVzb2x2ZSgpO1xuICAgIH0pO1xuXG4gIHN0YXNoVmFsdWUgPSAoKSA9PiB7XG4gICAgbG9nKCdbc3Rhc2hWYWx1ZV0nKTtcbiAgICBpZiAoIXRoaXMuc3RhdGUuc3Rhc2hlZFZhbHVlKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgc3Rhc2hlZFZhbHVlOiB0aGlzLnN0YXRlLnZhbHVlIH0pO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogUmVzZXQgdGhlIHZhbHVlIGlmIHRoZSB1c2VyIGRpZG4ndCBjbGljayBkb25lLlxuICAgKi9cbiAgcmVzZXRWYWx1ZSA9IGZvcmNlID0+IHtcbiAgICBjb25zdCB7IHZhbHVlLCBmb2N1c2VkTm9kZSB9ID0gdGhpcy5zdGF0ZTtcblxuICAgIGNvbnN0IHN0b3BSZXNldCA9IHRoaXMucGx1Z2lucy5yZWR1Y2UoKHMsIHApID0+IHtcbiAgICAgIHJldHVybiBzIHx8IChwLnN0b3BSZXNldCAmJiBwLnN0b3BSZXNldCh0aGlzLnN0YXRlLnZhbHVlKSk7XG4gICAgfSwgZmFsc2UpO1xuXG4gICAgbG9nKCdbcmVzZXRWYWx1ZV0nLCB2YWx1ZS5pc0ZvY3VzZWQsIGZvY3VzZWROb2RlLCAnc3RvcFJlc2V0OiAnLCBzdG9wUmVzZXQpO1xuICAgIGlmICgodGhpcy5zdGF0ZS5zdGFzaGVkVmFsdWUgJiYgIXZhbHVlLmlzRm9jdXNlZCAmJiAhZm9jdXNlZE5vZGUgJiYgIXN0b3BSZXNldCkgfHwgZm9yY2UpIHtcbiAgICAgIGxvZygnW3Jlc2V0VmFsdWVdIHJlc2V0dGluZy4uLicpO1xuICAgICAgbG9nKCdzdGFzaGVkJywgdGhpcy5zdGF0ZS5zdGFzaGVkVmFsdWUuZG9jdW1lbnQudG9PYmplY3QoKSk7XG4gICAgICBsb2coJ2N1cnJlbnQnLCB0aGlzLnN0YXRlLnZhbHVlLmRvY3VtZW50LnRvT2JqZWN0KCkpO1xuXG4gICAgICBjb25zdCBuZXdWYWx1ZSA9IFZhbHVlLmZyb21KU09OKHRoaXMuc3RhdGUuc3Rhc2hlZFZhbHVlLnRvSlNPTigpKTtcblxuICAgICAgbG9nKCduZXdWYWx1ZTogJywgbmV3VmFsdWUuZG9jdW1lbnQpO1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgdmFsdWU6IG5ld1ZhbHVlLCBzdGFzaGVkVmFsdWU6IG51bGwgfSwgKCkgPT4ge1xuICAgICAgICAgICAgbG9nKCd2YWx1ZSBub3c6ICcsIHRoaXMuc3RhdGUudmFsdWUuZG9jdW1lbnQudG9KU09OKCkpO1xuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9LCA1MCk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7fSk7XG4gICAgfVxuICB9O1xuXG4gIG9uQ2hhbmdlID0gKGVkaXRvciwgZG9uZSkgPT4ge1xuICAgIGxvZygnW29uQ2hhbmdlXScpO1xuICAgIGNvbnN0IHsgY2hhcmFjdGVyc0xpbWl0IH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IGFsbFRleHQgPSBFZGl0b3Iuc3RyaW5nKGVkaXRvciwgW10pO1xuXG4gICAgaWYgKGFsbFRleHQgPiBjaGFyYWN0ZXJzTGltaXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBodG1sID0gdmFsdWVUb0h0bWwoZWRpdG9yKTtcbiAgICBjb25zdCB2YWx1ZSA9IGh0bWxUb1ZhbHVlKGh0bWwpO1xuXG4gICAgdGhpcy5zZXRTdGF0ZSh7IHZhbHVlIH0sICgpID0+IHtcbiAgICAgIGxvZygnW29uQ2hhbmdlXSwgY2FsbCBkb25lKCknKTtcblxuICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgZG9uZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIGdldEZvY3VzZWRWYWx1ZSA9ICgpID0+IHtcbiAgICBpZiAodGhpcy5zdGF0ZS52YWx1ZS5pc0ZvY3VzZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLnN0YXRlLnZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnN0YXRlLnByZUJsdXJWYWx1ZTtcbiAgfTtcblxuICBVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhwcm9wcykge1xuICAgIGlmICghaXNFcXVhbChwcm9wcy52YWx1ZSwgdGhpcy5wcm9wcy52YWx1ZSkpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBmb2N1czogZmFsc2UsXG4gICAgICAgIHZhbHVlOiBwcm9wcy52YWx1ZVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgdmFsdWVUb1NpemUgPSB2ID0+IHtcbiAgICBpZiAoIXYpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHYgPT09ICdzdHJpbmcnKSB7XG4gICAgICBpZiAodi5lbmRzV2l0aCgnJScpKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9IGVsc2UgaWYgKHYuZW5kc1dpdGgoJ3B4JykgfHwgdi5lbmRzV2l0aCgndmgnKSB8fCB2LmVuZHNXaXRoKCd2dycpKSB7XG4gICAgICAgIHJldHVybiB2O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBwYXJzZUludCh2LCAxMCk7XG4gICAgICAgIHJldHVybiBpc05hTih2YWx1ZSkgPyB2YWx1ZSA6IGAke3ZhbHVlfXB4YDtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHR5cGVvZiB2ID09PSAnbnVtYmVyJykge1xuICAgICAgcmV0dXJuIGAke3Z9cHhgO1xuICAgIH1cblxuICAgIHJldHVybjtcbiAgfTtcblxuICBidWlsZFNpemVTdHlsZSgpIHtcbiAgICBjb25zdCB7IHdpZHRoLCBtaW5IZWlnaHQsIGhlaWdodCwgbWF4SGVpZ2h0IH0gPSB0aGlzLnByb3BzO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHdpZHRoOiB0aGlzLnZhbHVlVG9TaXplKHdpZHRoKSxcbiAgICAgIGhlaWdodDogdGhpcy52YWx1ZVRvU2l6ZShoZWlnaHQpLFxuICAgICAgbWluSGVpZ2h0OiB0aGlzLnZhbHVlVG9TaXplKG1pbkhlaWdodCksXG4gICAgICBtYXhIZWlnaHQ6IHRoaXMudmFsdWVUb1NpemUobWF4SGVpZ2h0KVxuICAgIH07XG4gIH1cblxuICB2YWxpZGF0ZU5vZGUgPSBub2RlID0+IHtcbiAgICBpZiAobm9kZS5vYmplY3QgIT09ICdibG9jaycpIHJldHVybjtcblxuICAgIGNvbnN0IGxhc3QgPSBub2RlLm5vZGVzLmxhc3QoKTtcbiAgICBpZiAoIWxhc3QpIHJldHVybjtcblxuICAgIGlmIChsYXN0LnR5cGUgIT09ICdpbWFnZScpIHJldHVybjtcblxuICAgIGxvZygnW3ZhbGlkYXRlTm9kZV0gbGFzdCBpcyBpbWFnZS4uJyk7XG5cbiAgICBjb25zdCBwYXJlbnQgPSBsYXN0LmdldFBhcmVudChsYXN0LmtleSk7XG4gICAgY29uc3QgcCA9IEJsb2NrLmdldFBhcmVudChsYXN0LmtleSk7XG4gICAgbG9nKCdbdmFsaWRhdGVOb2RlXSBwYXJlbnQ6JywgcGFyZW50LCBwKTtcblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH07XG5cbiAgZm9jdXMgPSAocG9zLCBub2RlKSA9PiB7XG4gICAgY29uc3QgcG9zaXRpb24gPSBwb3MgfHwgJ2VuZCc7XG5cbiAgICB0aGlzLnByb3BzLmZvY3VzKHBvc2l0aW9uLCBub2RlKTtcbiAgfTtcblxuICBvbkRyb3BQYXN0ZSA9IGFzeW5jIChldmVudCwgY2hhbmdlLCBkcm9wQ29udGV4dCkgPT4ge1xuICAgIGNvbnN0IGVkaXRvciA9IGNoYW5nZS5lZGl0b3I7XG4gICAgY29uc3QgdHJhbnNmZXIgPSBnZXRFdmVudFRyYW5zZmVyKGV2ZW50KTtcbiAgICBjb25zdCBmaWxlID0gdHJhbnNmZXIuZmlsZXMgJiYgdHJhbnNmZXIuZmlsZXNbMF07XG5cbiAgICBjb25zdCB0eXBlID0gdHJhbnNmZXIudHlwZTtcbiAgICBjb25zdCBmcmFnbWVudCA9IHRyYW5zZmVyLmZyYWdtZW50O1xuICAgIGNvbnN0IHRleHQgPSB0cmFuc2Zlci50ZXh0O1xuXG4gICAgaWYgKFxuICAgICAgZmlsZSAmJlxuICAgICAgKGZpbGUudHlwZSA9PT0gJ2ltYWdlL2pwZWcnIHx8IGZpbGUudHlwZSA9PT0gJ2ltYWdlL2pwZycgfHwgZmlsZS50eXBlID09PSAnaW1hZ2UvcG5nJylcbiAgICApIHtcbiAgICAgIGlmICghdGhpcy5wcm9wcy5pbWFnZVN1cHBvcnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgbG9nKCdbb25Ecm9wUGFzdGVdJyk7XG4gICAgICAgIGNvbnN0IHNyYyA9IGF3YWl0IGdldEJhc2U2NChmaWxlKTtcbiAgICAgICAgY29uc3QgaW5saW5lID0gSW5saW5lLmNyZWF0ZSh7XG4gICAgICAgICAgdHlwZTogJ2ltYWdlJyxcbiAgICAgICAgICBpc1ZvaWQ6IHRydWUsXG4gICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgbG9hZGluZzogZmFsc2UsXG4gICAgICAgICAgICBzcmNcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChkcm9wQ29udGV4dCkge1xuICAgICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCByYW5nZSA9IGdldEV2ZW50UmFuZ2UoZXZlbnQsIGVkaXRvcik7XG4gICAgICAgICAgaWYgKHJhbmdlKSB7XG4gICAgICAgICAgICBjaGFuZ2Uuc2VsZWN0KHJhbmdlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjaCA9IGNoYW5nZS5pbnNlcnRJbmxpbmUoaW5saW5lKTtcbiAgICAgICAgdGhpcy5vbkNoYW5nZShjaCk7XG4gICAgICAgIGNvbnN0IGhhbmRsZXIgPSBuZXcgSW5zZXJ0SW1hZ2VIYW5kbGVyKGlubGluZSwgKCkgPT4gdGhpcy5zdGF0ZS52YWx1ZSwgdGhpcy5vbkNoYW5nZSwgdHJ1ZSk7XG4gICAgICAgIHRoaXMucHJvcHMuaW1hZ2VTdXBwb3J0LmFkZChoYW5kbGVyKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBsb2coJ1tvbkRyb3BQYXN0ZV0gZXJyb3I6ICcsIGVycik7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnZnJhZ21lbnQnKSB7XG4gICAgICBjaGFuZ2UuaW5zZXJ0RnJhZ21lbnQoZnJhZ21lbnQpO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ3RleHQnIHx8IHR5cGUgPT09ICdodG1sJykge1xuICAgICAgaWYgKCF0ZXh0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHtcbiAgICAgICAgdmFsdWU6IHsgZG9jdW1lbnQsIHNlbGVjdGlvbiwgc3RhcnRCbG9jayB9XG4gICAgICB9ID0gY2hhbmdlO1xuXG4gICAgICBpZiAoc3RhcnRCbG9jay5pc1ZvaWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBkZWZhdWx0QmxvY2sgPSBzdGFydEJsb2NrO1xuICAgICAgY29uc3QgZGVmYXVsdE1hcmtzID0gZG9jdW1lbnQuZ2V0SW5zZXJ0TWFya3NBdFJhbmdlKHNlbGVjdGlvbik7XG4gICAgICBjb25zdCBmcmFnID0gUGxhaW4uZGVzZXJpYWxpemUodGV4dCwge1xuICAgICAgICBkZWZhdWx0QmxvY2ssXG4gICAgICAgIGRlZmF1bHRNYXJrc1xuICAgICAgfSkuZG9jdW1lbnQ7XG4gICAgICBjaGFuZ2UuaW5zZXJ0RnJhZ21lbnQoZnJhZyk7XG4gICAgfVxuICB9O1xuXG4gIHJlbmRlclBsYWNlaG9sZGVyID0gcHJvcHMgPT4ge1xuICAgIGNvbnN0IHsgZWRpdG9yIH0gPSBwcm9wcztcbiAgICBjb25zdCB7IGRvY3VtZW50IH0gPSBlZGl0b3IudmFsdWU7XG5cbiAgICBpZiAoIWVkaXRvci5wcm9wcy5wbGFjZWhvbGRlciB8fCBkb2N1bWVudC50ZXh0ICE9PSAnJyB8fCBkb2N1bWVudC5ub2Rlcy5zaXplICE9PSAxKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxzcGFuXG4gICAgICAgIGNvbnRlbnRFZGl0YWJsZT17ZmFsc2V9XG4gICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgZGlzcGxheTogJ2lubGluZS1ibG9jaycsXG4gICAgICAgICAgd2lkdGg6ICdmaXQtY29udGVudCcsIC8vIGZvciBjZW50ZXJpbmcgdGhlIHBsYWNlaG9sZGVyIGlmIHRleHQtYWxpZ24gaXMgc2V0IHRvIGNlbnRlclxuICAgICAgICAgIG1heFdpZHRoOiAnMTAwJScsXG4gICAgICAgICAgd2hpdGVTcGFjZTogJ25vd3JhcCcsXG4gICAgICAgICAgb3BhY2l0eTogJzAuMzMnLFxuICAgICAgICAgIHBvaW50ZXJFdmVudHM6ICdub25lJyxcbiAgICAgICAgICB1c2VyU2VsZWN0OiAnbm9uZSdcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAge2VkaXRvci5wcm9wcy5wbGFjZWhvbGRlcn1cbiAgICAgIDwvc3Bhbj5cbiAgICApO1xuICB9O1xuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7XG4gICAgICBkaXNhYmxlZCxcbiAgICAgIHNwZWxsQ2hlY2ssXG4gICAgICBoaWdobGlnaHRTaGFwZSxcbiAgICAgIGNsYXNzZXMsXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBwbGFjZWhvbGRlcixcbiAgICAgIHBsdWdpblByb3BzLFxuICAgICAgb25LZXlEb3duXG4gICAgfSA9IHRoaXMucHJvcHM7XG5cbiAgICBjb25zdCB7IHZhbHVlLCBmb2N1c2VkTm9kZSwgdG9vbGJhck9wdHMgfSA9IHRoaXMuc3RhdGU7XG5cbiAgICBsb2coJ1tyZW5kZXJdIHZhbHVlOiAnLCB2YWx1ZSk7XG4gICAgY29uc3Qgc2l6ZVN0eWxlID0gdGhpcy5idWlsZFNpemVTdHlsZSgpO1xuICAgIGNvbnN0IG5hbWVzID0gY2xhc3NOYW1lcyhcbiAgICAgIHtcbiAgICAgICAgW2NsYXNzZXMud2l0aEJnXTogaGlnaGxpZ2h0U2hhcGUsXG4gICAgICAgIFtjbGFzc2VzLnRvb2xiYXJPblRvcF06IHRvb2xiYXJPcHRzLmFsd2F5c1Zpc2libGUgJiYgdG9vbGJhck9wdHMucG9zaXRpb24gPT09ICd0b3AnXG4gICAgICB9LFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgY2xhc3Nlcy5zbGF0ZUVkaXRvclxuICAgICk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICByZWY9e3JlZiA9PiAodGhpcy53cmFwcGVyUmVmID0gcmVmKX1cbiAgICAgICAgc3R5bGU9e3sgd2lkdGg6IHNpemVTdHlsZS53aWR0aCB9fVxuICAgICAgICBjbGFzc05hbWU9e25hbWVzfVxuICAgICAgPlxuICAgICAgICA8U2xhdGVFZGl0b3JcbiAgICAgICAgICBwbHVnaW5zPXt0aGlzLnBsdWdpbnN9XG4gICAgICAgICAgdG9vbGJhclJlZj17ciA9PiB7XG4gICAgICAgICAgICBpZiAocikge1xuICAgICAgICAgICAgICB0aGlzLnRvb2xiYXJSZWYgPSByO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH19XG4gICAgICAgICAgb25FZGl0b3I9e3RoaXMucHJvcHMub25FZGl0b3J9XG4gICAgICAgICAgdmFsdWU9e3ZhbHVlfVxuICAgICAgICAgIGZvY3VzPXt0aGlzLmZvY3VzfVxuICAgICAgICAgIG9uS2V5RG93bj17b25LZXlEb3dufVxuICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLm9uQ2hhbmdlfVxuICAgICAgICAgIGdldEZvY3VzZWRWYWx1ZT17dGhpcy5nZXRGb2N1c2VkVmFsdWV9XG4gICAgICAgICAgb25CbHVyPXt0aGlzLm9uQmx1cn1cbiAgICAgICAgICBvbkRyb3A9eyhldmVudCwgZWRpdG9yKSA9PiB0aGlzLm9uRHJvcFBhc3RlKGV2ZW50LCBlZGl0b3IsIHRydWUpfVxuICAgICAgICAgIG9uUGFzdGU9eyhldmVudCwgZWRpdG9yKSA9PiB0aGlzLm9uRHJvcFBhc3RlKGV2ZW50LCBlZGl0b3IpfVxuICAgICAgICAgIG9uRm9jdXM9e3RoaXMub25Gb2N1c31cbiAgICAgICAgICBvbkVkaXRpbmdEb25lPXt0aGlzLm9uRWRpdGluZ0RvbmV9XG4gICAgICAgICAgb25Eb25lPXt0aGlzLm9uRG9uZX1cbiAgICAgICAgICBmb2N1c2VkTm9kZT17Zm9jdXNlZE5vZGV9XG4gICAgICAgICAgbm9ybWFsaXplPXt0aGlzLm5vcm1hbGl6ZX1cbiAgICAgICAgICByZWFkT25seT17ZGlzYWJsZWR9XG4gICAgICAgICAgc3BlbGxDaGVjaz17c3BlbGxDaGVja31cbiAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFtjbGFzc2VzLm5vUGFkZGluZ106IHRvb2xiYXJPcHRzICYmIHRvb2xiYXJPcHRzLm5vQm9yZGVyXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xhc3Nlcy5zbGF0ZUVkaXRvclxuICAgICAgICAgICl9XG4gICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgIG1pbkhlaWdodDogc2l6ZVN0eWxlLm1pbkhlaWdodCxcbiAgICAgICAgICAgIGhlaWdodDogc2l6ZVN0eWxlLmhlaWdodCxcbiAgICAgICAgICAgIG1heEhlaWdodDogc2l6ZVN0eWxlLm1heEhlaWdodFxuICAgICAgICAgIH19XG4gICAgICAgICAgcGx1Z2luUHJvcHM9e3BsdWdpblByb3BzfVxuICAgICAgICAgIHRvb2xiYXJPcHRzPXt0b29sYmFyT3B0c31cbiAgICAgICAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9XG4gICAgICAgICAgcmVuZGVyUGxhY2Vob2xkZXI9e3RoaXMucmVuZGVyUGxhY2Vob2xkZXJ9XG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgcmVmPXtyZWYgPT4gKHRoaXMud3JhcHBlclJlZiA9IHJlZil9XG4gICAgICAgIHN0eWxlPXt7IHdpZHRoOiBzaXplU3R5bGUud2lkdGggfX1cbiAgICAgICAgY2xhc3NOYW1lPXtuYW1lc31cbiAgICAgID5cbiAgICAgICAgPE9sZFNsYXRlRWRpdG9yXG4gICAgICAgICAgcGx1Z2lucz17dGhpcy5wbHVnaW5zfVxuICAgICAgICAgIHRvb2xiYXJSZWY9e3IgPT4ge1xuICAgICAgICAgICAgaWYgKHIpIHtcbiAgICAgICAgICAgICAgdGhpcy50b29sYmFyUmVmID0gcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9fVxuICAgICAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgICAgICBmb2N1cz17dGhpcy5mb2N1c31cbiAgICAgICAgICBvbktleURvd249e29uS2V5RG93bn1cbiAgICAgICAgICBvbkNoYW5nZT17dGhpcy5vbkNoYW5nZX1cbiAgICAgICAgICBnZXRGb2N1c2VkVmFsdWU9e3RoaXMuZ2V0Rm9jdXNlZFZhbHVlfVxuICAgICAgICAgIG9uQmx1cj17dGhpcy5vbkJsdXJ9XG4gICAgICAgICAgb25Ecm9wPXsoZXZlbnQsIGVkaXRvcikgPT4gdGhpcy5vbkRyb3BQYXN0ZShldmVudCwgZWRpdG9yLCB0cnVlKX1cbiAgICAgICAgICBvblBhc3RlPXsoZXZlbnQsIGVkaXRvcikgPT4gdGhpcy5vbkRyb3BQYXN0ZShldmVudCwgZWRpdG9yKX1cbiAgICAgICAgICBvbkZvY3VzPXt0aGlzLm9uRm9jdXN9XG4gICAgICAgICAgb25FZGl0aW5nRG9uZT17dGhpcy5vbkVkaXRpbmdEb25lfVxuICAgICAgICAgIGZvY3VzZWROb2RlPXtmb2N1c2VkTm9kZX1cbiAgICAgICAgICBub3JtYWxpemU9e3RoaXMubm9ybWFsaXplfVxuICAgICAgICAgIHJlYWRPbmx5PXtkaXNhYmxlZH1cbiAgICAgICAgICBzcGVsbENoZWNrPXtzcGVsbENoZWNrfVxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgW2NsYXNzZXMubm9QYWRkaW5nXTogdG9vbGJhck9wdHMgJiYgdG9vbGJhck9wdHMubm9Cb3JkZXJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGFzc2VzLnNsYXRlRWRpdG9yXG4gICAgICAgICAgKX1cbiAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgbWluSGVpZ2h0OiBzaXplU3R5bGUubWluSGVpZ2h0LFxuICAgICAgICAgICAgaGVpZ2h0OiBzaXplU3R5bGUuaGVpZ2h0LFxuICAgICAgICAgICAgbWF4SGVpZ2h0OiBzaXplU3R5bGUubWF4SGVpZ2h0XG4gICAgICAgICAgfX1cbiAgICAgICAgICBwbHVnaW5Qcm9wcz17cGx1Z2luUHJvcHN9XG4gICAgICAgICAgdG9vbGJhck9wdHM9e3Rvb2xiYXJPcHRzfVxuICAgICAgICAgIHBsYWNlaG9sZGVyPXtwbGFjZWhvbGRlcn1cbiAgICAgICAgICByZW5kZXJQbGFjZWhvbGRlcj17dGhpcy5yZW5kZXJQbGFjZWhvbGRlcn1cbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuLy8gVE9ETyBjb2xvciAtIGhhcmRjb2RlZCBncmF5IGJhY2tncm91bmQgYW5kIGtleXBhZCBjb2xvcnMgd2lsbCBuZWVkIHRvIGNoYW5nZSB0b29cbmNvbnN0IHN0eWxlcyA9IHtcbiAgd2l0aEJnOiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiAncmdiYSgwLDAsMCwwLjA2KSdcbiAgfSxcbiAgc2xhdGVFZGl0b3I6IHtcbiAgICBmb250RmFtaWx5OiAnUm9ib3RvLCBzYW5zLXNlcmlmJyxcblxuICAgICcmIHRhYmxlJzoge1xuICAgICAgdGFibGVMYXlvdXQ6ICdmaXhlZCcsXG4gICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgYm9yZGVyQ29sbGFwc2U6ICdjb2xsYXBzZScsXG4gICAgICBjb2xvcjogY29sb3IudGV4dCgpLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiBjb2xvci5iYWNrZ3JvdW5kKClcbiAgICB9LFxuICAgICcmIHRhYmxlOm5vdChbYm9yZGVyPVwiMVwiXSkgdHInOiB7XG4gICAgICBib3JkZXJUb3A6ICcxcHggc29saWQgI2RmZTJlNSdcbiAgICAgIC8vIFRPRE8gcGVyaGFwcyBzZWNvbmRhcnkgY29sb3IgZm9yIGJhY2tncm91bmQsIGZvciBub3cgZGlzYWJsZVxuICAgICAgLy8gJyY6bnRoLWNoaWxkKDJuKSc6IHtcbiAgICAgIC8vICAgYmFja2dyb3VuZENvbG9yOiAnI2Y2ZjhmYSdcbiAgICAgIC8vIH1cbiAgICB9LFxuICAgICcmIHRkLCB0aCc6IHtcbiAgICAgIHBhZGRpbmc6ICcuNmVtIDFlbScsXG4gICAgICB0ZXh0QWxpZ246ICdjZW50ZXInXG4gICAgfSxcbiAgICAnJiB0YWJsZTpub3QoW2JvcmRlcj1cIjFcIl0pIHRkLCB0aCc6IHtcbiAgICAgIGJvcmRlcjogJzFweCBzb2xpZCAjZGZlMmU1J1xuICAgIH1cbiAgfSxcbiAgdG9vbGJhck9uVG9wOiB7XG4gICAgbWFyZ2luVG9wOiAnNDVweCdcbiAgfSxcbiAgbm9QYWRkaW5nOiB7XG4gICAgcGFkZGluZzogJzAgIWltcG9ydGFudCdcbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFN0eWxlcyhzdHlsZXMpKEVkaXRvckNvbXBvbmVudCk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQU9BOztBQUVBOztBQUNBOzs7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBR0E7O0FBRUE7O0FBR0E7O0FBQ0E7O0FBRUE7O0FBQ0E7Ozs7Ozs7Ozs7Ozs7O0FBRUEsSUFBTUEsT0FBTyxHQUFHO0VBQ2QsU0FBUyxNQURLO0VBRWQsU0FBUyxRQUZLO0VBR2QsU0FBUyxXQUhLO0VBSWQsU0FBUztBQUpLLENBQWhCO0FBT0EsSUFBTUMsVUFBVSxHQUFHLENBQUMsZUFBRCxFQUFrQixlQUFsQixDQUFuQjtBQUNBLElBQU1DLGdCQUFnQixHQUFHLENBQUMsTUFBRCxF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
|