@pie-element/inline-dropdown 4.7.1-beta.0 → 4.7.1-beta.3
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/configure/lib/__tests__/inline-dropdown-toolbar.test.js +112 -0
- package/configure/lib/__tests__/main.test.js +492 -0
- package/configure/lib/__tests__/markupUtils.test.js +107 -0
- package/configure/lib/defaults.js +1 -1
- package/configure/lib/index.js +2 -41
- package/configure/lib/inline-dropdown-toolbar.js +33 -95
- package/configure/lib/main.js +40 -112
- package/configure/lib/markupUtils.js +5 -20
- package/configure/lib/utils.js +2 -4
- package/configure/package.json +3 -3
- package/controller/lib/__tests__/index.test.js +858 -0
- package/controller/lib/defaults.js +1 -1
- package/controller/lib/index.js +134 -187
- package/controller/lib/utils.js +2 -9
- package/docs/demo/pie.manifest.json +11 -0
- package/lib/__tests__/inline-dropdown.test.js +113 -0
- package/lib/index.js +1 -28
- package/lib/inline-dropdown.js +8 -42
- package/package.json +4 -4
- package/configure/lib/defaults.js.map +0 -1
- package/configure/lib/index.js.map +0 -1
- package/configure/lib/inline-dropdown-toolbar.js.map +0 -1
- package/configure/lib/main.js.map +0 -1
- package/configure/lib/markupUtils.js.map +0 -1
- package/configure/lib/utils.js.map +0 -1
- package/controller/lib/defaults.js.map +0 -1
- package/controller/lib/index.js.map +0 -1
- package/controller/lib/utils.js.map +0 -1
- package/lib/index.js.map +0 -1
- package/lib/inline-dropdown.js.map +0 -1
|
@@ -1,74 +1,43 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
4
|
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
6
|
-
|
|
7
5
|
Object.defineProperty(exports, "__esModule", {
|
|
8
6
|
value: true
|
|
9
7
|
});
|
|
10
8
|
exports["default"] = exports.RespAreaToolbar = void 0;
|
|
11
|
-
|
|
12
9
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
13
|
-
|
|
14
10
|
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
15
|
-
|
|
16
11
|
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
|
|
17
|
-
|
|
18
12
|
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
|
19
|
-
|
|
20
13
|
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
|
|
21
|
-
|
|
22
14
|
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
|
|
23
|
-
|
|
24
15
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
25
|
-
|
|
26
16
|
var _react = _interopRequireDefault(require("react"));
|
|
27
|
-
|
|
28
17
|
var _reactDom = _interopRequireDefault(require("react-dom"));
|
|
29
|
-
|
|
30
18
|
var _slateReact = require("slate-react");
|
|
31
|
-
|
|
32
19
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
33
|
-
|
|
34
20
|
var _editableHtml = _interopRequireWildcard(require("@pie-lib/editable-html"));
|
|
35
|
-
|
|
36
21
|
var _mathRendering = require("@pie-lib/math-rendering");
|
|
37
|
-
|
|
38
22
|
var _styles = require("@material-ui/core/styles");
|
|
39
|
-
|
|
40
23
|
var _isEqual = _interopRequireDefault(require("lodash/isEqual"));
|
|
41
|
-
|
|
42
24
|
var _isEmpty = _interopRequireDefault(require("lodash/isEmpty"));
|
|
43
|
-
|
|
44
25
|
var _classnames2 = _interopRequireDefault(require("classnames"));
|
|
45
|
-
|
|
46
26
|
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); }
|
|
47
|
-
|
|
48
27
|
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; }
|
|
49
|
-
|
|
50
28
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
51
|
-
|
|
52
29
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
53
|
-
|
|
54
30
|
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
|
|
55
|
-
|
|
56
31
|
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
57
|
-
|
|
58
32
|
var MenuItemComp = /*#__PURE__*/function (_React$Component) {
|
|
59
33
|
(0, _inherits2["default"])(MenuItemComp, _React$Component);
|
|
60
|
-
|
|
61
34
|
var _super = _createSuper(MenuItemComp);
|
|
62
|
-
|
|
63
35
|
function MenuItemComp() {
|
|
64
36
|
var _this;
|
|
65
|
-
|
|
66
37
|
(0, _classCallCheck2["default"])(this, MenuItemComp);
|
|
67
|
-
|
|
68
38
|
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
69
39
|
args[_key] = arguments[_key];
|
|
70
40
|
}
|
|
71
|
-
|
|
72
41
|
_this = _super.call.apply(_super, [this].concat(args));
|
|
73
42
|
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onRemoveClick", function (e) {
|
|
74
43
|
var onRemoveChoice = _this.props.onRemoveChoice;
|
|
@@ -78,15 +47,14 @@ var MenuItemComp = /*#__PURE__*/function (_React$Component) {
|
|
|
78
47
|
});
|
|
79
48
|
return _this;
|
|
80
49
|
}
|
|
81
|
-
|
|
82
50
|
(0, _createClass2["default"])(MenuItemComp, [{
|
|
83
51
|
key: "render",
|
|
84
52
|
value: function render() {
|
|
85
53
|
var _this$props = this.props,
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
54
|
+
classes = _this$props.classes,
|
|
55
|
+
correct = _this$props.correct,
|
|
56
|
+
onClick = _this$props.onClick,
|
|
57
|
+
value = _this$props.value;
|
|
90
58
|
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
91
59
|
className: (0, _classnames2["default"])(classes.wrapper, (0, _defineProperty2["default"])({}, classes.correct, correct)),
|
|
92
60
|
onClick: onClick
|
|
@@ -103,7 +71,6 @@ var MenuItemComp = /*#__PURE__*/function (_React$Component) {
|
|
|
103
71
|
}]);
|
|
104
72
|
return MenuItemComp;
|
|
105
73
|
}(_react["default"].Component);
|
|
106
|
-
|
|
107
74
|
(0, _defineProperty2["default"])(MenuItemComp, "propTypes", {
|
|
108
75
|
classes: _propTypes["default"].object.isRequired,
|
|
109
76
|
correct: _propTypes["default"].bool.isRequired,
|
|
@@ -139,27 +106,20 @@ var MenuItem = (0, _styles.withStyles)({
|
|
|
139
106
|
wordBreak: 'break-all'
|
|
140
107
|
}
|
|
141
108
|
})(MenuItemComp);
|
|
142
|
-
|
|
143
109
|
var createElementFromHTML = function createElementFromHTML(htmlString) {
|
|
144
110
|
var div = document.createElement('div');
|
|
145
111
|
div.innerHTML = (htmlString || '').trim();
|
|
146
112
|
return div;
|
|
147
113
|
};
|
|
148
|
-
|
|
149
114
|
var RespAreaToolbar = /*#__PURE__*/function (_React$Component2) {
|
|
150
115
|
(0, _inherits2["default"])(RespAreaToolbar, _React$Component2);
|
|
151
|
-
|
|
152
116
|
var _super2 = _createSuper(RespAreaToolbar);
|
|
153
|
-
|
|
154
117
|
function RespAreaToolbar() {
|
|
155
118
|
var _this2;
|
|
156
|
-
|
|
157
119
|
(0, _classCallCheck2["default"])(this, RespAreaToolbar);
|
|
158
|
-
|
|
159
120
|
for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
|
|
160
121
|
args[_key2] = arguments[_key2];
|
|
161
122
|
}
|
|
162
|
-
|
|
163
123
|
_this2 = _super2.call.apply(_super2, [this].concat(args));
|
|
164
124
|
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this2), "state", {
|
|
165
125
|
respAreaMarkup: ''
|
|
@@ -176,26 +136,23 @@ var RespAreaToolbar = /*#__PURE__*/function (_React$Component2) {
|
|
|
176
136
|
});
|
|
177
137
|
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this2), "onDone", function (val) {
|
|
178
138
|
var _this2$props = _this2.props,
|
|
179
|
-
|
|
180
|
-
|
|
139
|
+
node = _this2$props.node,
|
|
140
|
+
onAddChoice = _this2$props.onAddChoice;
|
|
181
141
|
var onlyText = createElementFromHTML(val).textContent.trim();
|
|
182
|
-
|
|
183
142
|
if (!(0, _isEmpty["default"])(onlyText)) {
|
|
184
143
|
onAddChoice(node.data.index, val);
|
|
185
144
|
}
|
|
186
145
|
});
|
|
187
146
|
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this2), "onSelectChoice", function (newValue, index) {
|
|
188
147
|
var _this2$props2 = _this2.props,
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
148
|
+
node = _this2$props2.node,
|
|
149
|
+
nodePath = _this2$props2.nodePath,
|
|
150
|
+
editor = _this2$props2.editor,
|
|
151
|
+
onToolbarDone = _this2$props2.onToolbarDone,
|
|
152
|
+
onSelectChoice = _this2$props2.onSelectChoice;
|
|
195
153
|
var update = _objectSpread(_objectSpread({}, node.data), {}, {
|
|
196
154
|
value: newValue
|
|
197
155
|
});
|
|
198
|
-
|
|
199
156
|
editor.apply({
|
|
200
157
|
type: 'set_node',
|
|
201
158
|
path: nodePath,
|
|
@@ -211,17 +168,15 @@ var RespAreaToolbar = /*#__PURE__*/function (_React$Component2) {
|
|
|
211
168
|
});
|
|
212
169
|
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this2), "onRemoveChoice", function (val, index) {
|
|
213
170
|
var _this2$props3 = _this2.props,
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
171
|
+
node = _this2$props3.node,
|
|
172
|
+
nodePath = _this2$props3.nodePath,
|
|
173
|
+
editor = _this2$props3.editor,
|
|
174
|
+
onToolbarDone = _this2$props3.onToolbarDone,
|
|
175
|
+
onRemoveChoice = _this2$props3.onRemoveChoice;
|
|
220
176
|
if ((0, _isEqual["default"])(val, node.data.value)) {
|
|
221
177
|
var update = _objectSpread(_objectSpread({}, node.data), {}, {
|
|
222
178
|
value: null
|
|
223
179
|
});
|
|
224
|
-
|
|
225
180
|
editor.apply({
|
|
226
181
|
type: 'set_node',
|
|
227
182
|
path: nodePath,
|
|
@@ -234,14 +189,12 @@ var RespAreaToolbar = /*#__PURE__*/function (_React$Component2) {
|
|
|
234
189
|
});
|
|
235
190
|
onToolbarDone(false);
|
|
236
191
|
}
|
|
237
|
-
|
|
238
192
|
onRemoveChoice(index);
|
|
239
193
|
});
|
|
240
194
|
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this2), "onKeyDown", function (event) {
|
|
241
195
|
if (event.key === 'Enter') {
|
|
242
|
-
_this2.onAddChoice();
|
|
243
|
-
|
|
244
|
-
|
|
196
|
+
_this2.onAddChoice();
|
|
197
|
+
// Cancelling event
|
|
245
198
|
return false;
|
|
246
199
|
}
|
|
247
200
|
});
|
|
@@ -250,19 +203,16 @@ var RespAreaToolbar = /*#__PURE__*/function (_React$Component2) {
|
|
|
250
203
|
_this2.clickedInside = false;
|
|
251
204
|
return;
|
|
252
205
|
}
|
|
253
|
-
|
|
254
206
|
var _this2$props4 = _this2.props,
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
207
|
+
nodePath = _this2$props4.nodePath,
|
|
208
|
+
choices = _this2$props4.choices,
|
|
209
|
+
onCheck = _this2$props4.onCheck,
|
|
210
|
+
onToolbarDone = _this2$props4.onToolbarDone,
|
|
211
|
+
editor = _this2$props4.editor;
|
|
260
212
|
var correctResponse = (choices || []).find(function (choice) {
|
|
261
213
|
return choice.correct;
|
|
262
214
|
});
|
|
263
|
-
|
|
264
215
|
_this2.onAddChoice();
|
|
265
|
-
|
|
266
216
|
if (!choices || choices && choices.length < 2 || !correctResponse) {
|
|
267
217
|
onCheck(function () {
|
|
268
218
|
editor.apply({
|
|
@@ -280,31 +230,24 @@ var RespAreaToolbar = /*#__PURE__*/function (_React$Component2) {
|
|
|
280
230
|
// we need to focus the input so that math is saved even without pressing the green checkmark
|
|
281
231
|
var slateEditorRef = _this2.editorRef && _this2.editorRef.rootRef && _this2.editorRef.rootRef.slateEditor;
|
|
282
232
|
var inputRef = slateEditorRef && slateEditorRef.editorRef && slateEditorRef.editorRef.element;
|
|
283
|
-
|
|
284
233
|
if (inputRef) {
|
|
285
234
|
inputRef.focus();
|
|
286
235
|
}
|
|
287
236
|
});
|
|
288
237
|
return _this2;
|
|
289
238
|
}
|
|
290
|
-
|
|
291
239
|
(0, _createClass2["default"])(RespAreaToolbar, [{
|
|
292
240
|
key: "componentDidMount",
|
|
293
241
|
value: function componentDidMount() {
|
|
294
242
|
var _this$props2 = this.props,
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
243
|
+
node = _this$props2.node,
|
|
244
|
+
editor = _this$props2.editor;
|
|
298
245
|
var domNode = _slateReact.ReactEditor.toDOMNode(editor, node);
|
|
299
|
-
|
|
300
246
|
if (domNode) {
|
|
301
247
|
//eslint-disable-next-line
|
|
302
248
|
var domNodeRect = domNode.getBoundingClientRect();
|
|
303
|
-
|
|
304
249
|
var _editor = domNode.closest('[data-slate-editor]');
|
|
305
|
-
|
|
306
250
|
var editorRect = _editor.getBoundingClientRect();
|
|
307
|
-
|
|
308
251
|
var top = domNodeRect.top - editorRect.top;
|
|
309
252
|
var left = domNodeRect.left - editorRect.left;
|
|
310
253
|
this.setState({
|
|
@@ -322,22 +265,20 @@ var RespAreaToolbar = /*#__PURE__*/function (_React$Component2) {
|
|
|
322
265
|
value: function componentDidUpdate() {
|
|
323
266
|
//eslint-disable-next-line
|
|
324
267
|
var domNode = _reactDom["default"].findDOMNode(this);
|
|
325
|
-
|
|
326
268
|
(0, _mathRendering.renderMath)(domNode);
|
|
327
269
|
}
|
|
328
270
|
}, {
|
|
329
271
|
key: "render",
|
|
330
272
|
value: function render() {
|
|
331
273
|
var _this3 = this;
|
|
332
|
-
|
|
333
274
|
var _this$props3 = this.props,
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
275
|
+
classes = _this$props3.classes,
|
|
276
|
+
choices = _this$props3.choices,
|
|
277
|
+
spellCheck = _this$props3.spellCheck,
|
|
278
|
+
uploadSoundSupport = _this$props3.uploadSoundSupport;
|
|
338
279
|
var _this$state = this.state,
|
|
339
|
-
|
|
340
|
-
|
|
280
|
+
respAreaMarkup = _this$state.respAreaMarkup,
|
|
281
|
+
toolbarStyle = _this$state.toolbarStyle;
|
|
341
282
|
var filteredDefaultPlugins = (_editableHtml.DEFAULT_PLUGINS || []).filter(function (p) {
|
|
342
283
|
return p !== 'table' && p !== 'bulleted-list' && p !== 'numbered-list';
|
|
343
284
|
});
|
|
@@ -349,11 +290,9 @@ var RespAreaToolbar = /*#__PURE__*/function (_React$Component2) {
|
|
|
349
290
|
disabled: true
|
|
350
291
|
}
|
|
351
292
|
};
|
|
352
|
-
|
|
353
293
|
if (!toolbarStyle) {
|
|
354
294
|
return null;
|
|
355
295
|
}
|
|
356
|
-
|
|
357
296
|
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
358
297
|
style: _objectSpread(_objectSpread({}, toolbarStyle), {}, {
|
|
359
298
|
backgroundColor: '#E0E1E6'
|
|
@@ -407,7 +346,7 @@ var RespAreaToolbar = /*#__PURE__*/function (_React$Component2) {
|
|
|
407
346
|
className: classes.choicesHolder
|
|
408
347
|
}, choices.map(function (_ref2, index) {
|
|
409
348
|
var label = _ref2.label,
|
|
410
|
-
|
|
349
|
+
correct = _ref2.correct;
|
|
411
350
|
return /*#__PURE__*/_react["default"].createElement(MenuItem, {
|
|
412
351
|
key: index,
|
|
413
352
|
onClick: function onClick() {
|
|
@@ -424,7 +363,6 @@ var RespAreaToolbar = /*#__PURE__*/function (_React$Component2) {
|
|
|
424
363
|
}]);
|
|
425
364
|
return RespAreaToolbar;
|
|
426
365
|
}(_react["default"].Component);
|
|
427
|
-
|
|
428
366
|
exports.RespAreaToolbar = RespAreaToolbar;
|
|
429
367
|
(0, _defineProperty2["default"])(RespAreaToolbar, "propTypes", {
|
|
430
368
|
classes: _propTypes["default"].object,
|
|
@@ -460,4 +398,4 @@ var StyledRespAreaToolbar = (0, _styles.withStyles)({
|
|
|
460
398
|
})(RespAreaToolbar);
|
|
461
399
|
var _default = StyledRespAreaToolbar;
|
|
462
400
|
exports["default"] = _default;
|
|
463
|
-
//# sourceMappingURL=inline-dropdown-toolbar.js.map
|
|
401
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9yZWFjdERvbSIsIl9zbGF0ZVJlYWN0IiwiX3Byb3BUeXBlcyIsIl9lZGl0YWJsZUh0bWwiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsIl9tYXRoUmVuZGVyaW5nIiwiX3N0eWxlcyIsIl9pc0VxdWFsIiwiX2lzRW1wdHkiLCJfY2xhc3NuYW1lczIiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJub2RlSW50ZXJvcCIsIldlYWtNYXAiLCJjYWNoZUJhYmVsSW50ZXJvcCIsImNhY2hlTm9kZUludGVyb3AiLCJvYmoiLCJfX2VzTW9kdWxlIiwiX3R5cGVvZiIsImNhY2hlIiwiaGFzIiwiZ2V0IiwibmV3T2JqIiwiaGFzUHJvcGVydHlEZXNjcmlwdG9yIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJrZXkiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJkZXNjIiwic2V0Iiwib3duS2V5cyIsIm9iamVjdCIsImVudW1lcmFibGVPbmx5Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsInN5bWJvbHMiLCJmaWx0ZXIiLCJzeW0iLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsInRhcmdldCIsImkiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJzb3VyY2UiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiX2NyZWF0ZVN1cGVyIiwiRGVyaXZlZCIsImhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwiX2NyZWF0ZVN1cGVySW50ZXJuYWwiLCJTdXBlciIsIl9nZXRQcm90b3R5cGVPZjIiLCJyZXN1bHQiLCJOZXdUYXJnZXQiLCJjb25zdHJ1Y3RvciIsIlJlZmxlY3QiLCJjb25zdHJ1Y3QiLCJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybjIiLCJzaGFtIiwiUHJveHkiLCJCb29sZWFuIiwidmFsdWVPZiIsImUiLCJNZW51SXRlbUNvbXAiLCJfUmVhY3QkQ29tcG9uZW50IiwiX2luaGVyaXRzMiIsIl9zdXBlciIsIl90aGlzIiwiX2NsYXNzQ2FsbENoZWNrMiIsIl9sZW4iLCJhcmdzIiwiQXJyYXkiLCJfa2V5IiwiY29uY2F0IiwiX2Fzc2VydFRoaXNJbml0aWFsaXplZDIiLCJvblJlbW92ZUNob2ljZSIsInByb3BzIiwicHJldmVudERlZmF1bHQiLCJzdG9wUHJvcGFnYXRpb24iLCJfY3JlYXRlQ2xhc3MyIiwidmFsdWUiLCJyZW5kZXIiLCJfdGhpcyRwcm9wcyIsImNsYXNzZXMiLCJjb3JyZWN0Iiwib25DbGljayIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc05hbWUiLCJjbGFzc25hbWVzIiwid3JhcHBlciIsInZhbHVlSG9sZGVyIiwiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiLCJfX2h0bWwiLCJyZW1vdmVJY29uIiwib25SZW1vdmVDbGljayIsIlJlYWN0IiwiQ29tcG9uZW50IiwiUHJvcFR5cGVzIiwiaXNSZXF1aXJlZCIsImJvb2wiLCJmdW5jIiwic3RyaW5nIiwiTWVudUl0ZW0iLCJ3aXRoU3R5bGVzIiwiYmFja2dyb3VuZCIsImJvcmRlckJvdHRvbSIsImJveFNpemluZyIsImRpc3BsYXkiLCJjdXJzb3IiLCJsaW5lSGVpZ2h0IiwicGFkZGluZyIsInBvc2l0aW9uIiwiZm9udFNpemUiLCJmb250U3R5bGUiLCJ0cmFuc2Zvcm0iLCJ0b3AiLCJyaWdodCIsInpJbmRleCIsIndvcmRCcmVhayIsImNyZWF0ZUVsZW1lbnRGcm9tSFRNTCIsImh0bWxTdHJpbmciLCJkaXYiLCJkb2N1bWVudCIsImlubmVySFRNTCIsInRyaW0iLCJSZXNwQXJlYVRvb2xiYXIiLCJfUmVhY3QkQ29tcG9uZW50MiIsIl9zdXBlcjIiLCJfdGhpczIiLCJfbGVuMiIsIl9rZXkyIiwicmVzcEFyZWFNYXJrdXAiLCJzZXRTdGF0ZSIsImVkaXRvclJlZiIsImZpbmlzaEVkaXRpbmciLCJ2YWwiLCJfdGhpczIkcHJvcHMiLCJub2RlIiwib25BZGRDaG9pY2UiLCJvbmx5VGV4dCIsInRleHRDb250ZW50IiwiaXNFbXB0eSIsImRhdGEiLCJpbmRleCIsIm5ld1ZhbHVlIiwiX3RoaXMyJHByb3BzMiIsIm5vZGVQYXRoIiwiZWRpdG9yIiwib25Ub29sYmFyRG9uZSIsIm9uU2VsZWN0Q2hvaWNlIiwidXBkYXRlIiwidHlwZSIsInBhdGgiLCJwcm9wZXJ0aWVzIiwibmV3UHJvcGVydGllcyIsIl90aGlzMiRwcm9wczMiLCJpc0VxdWFsIiwiZXZlbnQiLCJjbGlja2VkSW5zaWRlIiwiX3RoaXMyJHByb3BzNCIsImNob2ljZXMiLCJvbkNoZWNrIiwiY29ycmVjdFJlc3BvbnNlIiwiZmluZCIsImNob2ljZSIsInNsYXRlRWRpdG9yUmVmIiwicm9vdFJlZiIsInNsYXRlRWRpdG9yIiwiaW5wdXRSZWYiLCJlbGVtZW50IiwiZm9jdXMiLCJjb21wb25lbnREaWRNb3VudCIsIl90aGlzJHByb3BzMiIsImRvbU5vZGUiLCJSZWFjdEVkaXRvciIsInRvRE9NTm9kZSIsImRvbU5vZGVSZWN0IiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwiY2xvc2VzdCIsImVkaXRvclJlY3QiLCJsZWZ0IiwidG9vbGJhclN0eWxlIiwiaGVpZ2h0Iiwid2lkdGgiLCJjb21wb25lbnREaWRVcGRhdGUiLCJSZWFjdERPTSIsImZpbmRET01Ob2RlIiwicmVuZGVyTWF0aCIsIl90aGlzMyIsIl90aGlzJHByb3BzMyIsInNwZWxsQ2hlY2siLCJ1cGxvYWRTb3VuZFN1cHBvcnQiLCJfdGhpcyRzdGF0ZSIsInN0YXRlIiwiZmlsdGVyZWREZWZhdWx0UGx1Z2lucyIsIkRFRkFVTFRfUExVR0lOUyIsInAiLCJsYWJlbFBsdWdpbnMiLCJhdWRpbyIsImRpc2FibGVkIiwidmlkZW8iLCJzdHlsZSIsImJhY2tncm91bmRDb2xvciIsIm9uTW91c2VEb3duIiwib25DbGlja0luc2lkZSIsIml0ZW1CdWlsZGVyIiwicmVmIiwiYXV0b0ZvY3VzIiwiYXV0b1NhdmUiLCJyZXNwQXJlYSIsInRvb2xiYXJPcHRzIiwiYWx3YXlzVmlzaWJsZSIsInNob3dEb25lIiwiZG9uZU9uIiwibWFya3VwIiwib25LZXlEb3duIiwib25DaGFuZ2UiLCJvblJlc3BBcmVhQ2hhbmdlIiwib25Eb25lIiwicGxhY2Vob2xkZXIiLCJhY3RpdmVQbHVnaW5zIiwicGx1Z2luUHJvcHMiLCJvbkJsdXIiLCJjb250ZW50RWRpdGFibGUiLCJmb2N1c0lucHV0IiwiY2hvaWNlc0hvbGRlciIsIm1hcCIsIl9yZWYyIiwibGFiZWwiLCJleHBvcnRzIiwiYXJyYXkiLCJTdHlsZWRSZXNwQXJlYVRvb2xiYXIiLCJtaW5IZWlnaHQiLCJmbGV4RGlyZWN0aW9uIiwiYm9yZGVyIiwiX2RlZmF1bHQiXSwic291cmNlcyI6WyIuLi9zcmMvaW5saW5lLWRyb3Bkb3duLXRvb2xiYXIuanN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUmVhY3RET00gZnJvbSAncmVhY3QtZG9tJztcbmltcG9ydCB7IFJlYWN0RWRpdG9yIH0gZnJvbSAnc2xhdGUtcmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBFZGl0YWJsZUh0bWwgZnJvbSAnQHBpZS1saWIvZWRpdGFibGUtaHRtbCc7XG5pbXBvcnQgeyByZW5kZXJNYXRoIH0gZnJvbSAnQHBpZS1saWIvbWF0aC1yZW5kZXJpbmcnO1xuaW1wb3J0IHsgd2l0aFN0eWxlcyB9IGZyb20gJ0BtYXRlcmlhbC11aS9jb3JlL3N0eWxlcyc7XG5pbXBvcnQgaXNFcXVhbCBmcm9tICdsb2Rhc2gvaXNFcXVhbCc7XG5pbXBvcnQgaXNFbXB0eSBmcm9tICdsb2Rhc2gvaXNFbXB0eSc7XG5pbXBvcnQgY2xhc3NuYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IERFRkFVTFRfUExVR0lOUyB9IGZyb20gJ0BwaWUtbGliL2VkaXRhYmxlLWh0bWwnO1xuXG5jbGFzcyBNZW51SXRlbUNvbXAgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbiAgICBjb3JyZWN0OiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICAgIG9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgb25SZW1vdmVDaG9pY2U6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgdmFsdWU6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgfTtcblxuICBvblJlbW92ZUNsaWNrID0gKGUpID0+IHtcbiAgICBjb25zdCB7IG9uUmVtb3ZlQ2hvaWNlIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICBvblJlbW92ZUNob2ljZSgpO1xuICB9O1xuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7IGNsYXNzZXMsIGNvcnJlY3QsIG9uQ2xpY2ssIHZhbHVlIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc25hbWVzKGNsYXNzZXMud3JhcHBlciwgeyBbY2xhc3Nlcy5jb3JyZWN0XTogY29ycmVjdCB9KX0gb25DbGljaz17b25DbGlja30+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzZXMudmFsdWVIb2xkZXJ9XG4gICAgICAgICAgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw9e3tcbiAgICAgICAgICAgIF9faHRtbDogdmFsdWUsXG4gICAgICAgICAgfX1cbiAgICAgICAgLz5cbiAgICAgICAgPGkgY2xhc3NOYW1lPXtjbGFzc2VzLnJlbW92ZUljb259IG9uQ2xpY2s9e3RoaXMub25SZW1vdmVDbGlja30+XG4gICAgICAgICAgeFxuICAgICAgICA8L2k+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cbmNvbnN0IE1lbnVJdGVtID0gd2l0aFN0eWxlcyh7XG4gIHdyYXBwZXI6IHtcbiAgICBiYWNrZ3JvdW5kOiAnI2ZmZicsXG4gICAgYm9yZGVyQm90dG9tOiAnMXB4IHNvbGlkIGJsYWNrJyxcbiAgICBib3hTaXppbmc6ICdib3JkZXItYm94JyxcbiAgICBkaXNwbGF5OiAnYmxvY2snLFxuICAgIGN1cnNvcjogJ3BvaW50ZXInLFxuICAgIGxpbmVIZWlnaHQ6ICczMHB4JyxcbiAgICBwYWRkaW5nOiAnMTBweCAyNXB4IDEwcHggMTBweCcsXG4gICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gIH0sXG4gIGNvcnJlY3Q6IHtcbiAgICBiYWNrZ3JvdW5kOiAnI0M0RENGQScsXG4gIH0sXG4gIHJlbW92ZUljb246IHtcbiAgICBjdXJzb3I6ICdwb2ludGVyJyxcbiAgICBmb250U2l6ZTogJzIwcHgnLFxuICAgIGZvbnRTdHlsZTogJ25vcm1hbCcsXG4gICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgdHJhbnNmb3JtOiAndHJhbnNsYXRlKDAsIC01MCUpJyxcbiAgICB0b3A6ICc1MCUnLFxuICAgIHJpZ2h0OiAnNXB4JyxcbiAgICB6SW5kZXg6IDMsXG4gIH0sXG4gIHZhbHVlSG9sZGVyOiB7XG4gICAgd29yZEJyZWFrOiAnYnJlYWstYWxsJyxcbiAgfSxcbn0pKE1lbnVJdGVtQ29tcCk7XG5cbmNvbnN0IGNyZWF0ZUVsZW1lbnRGcm9tSFRNTCA9IChodG1sU3RyaW5nKSA9PiB7XG4gIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuXG4gIGRpdi5pbm5lckhUTUwgPSAoaHRtbFN0cmluZyB8fCAnJykudHJpbSgpO1xuXG4gIHJldHVybiBkaXY7XG59O1xuXG5leHBvcnQgY2xhc3MgUmVzcEFyZWFUb29sYmFyIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgc3RhdGljIHByb3BUeXBlcyA9IHtcbiAgICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIG5vZGU6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgdXBsb2FkU291bmRTdXBwb3J0OiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIG9uRG9uZTogUHJvcFR5cGVzLmZ1bmMsXG4gICAgY2hvaWNlczogUHJvcFR5cGVzLmFycmF5LFxuICAgIG9uQWRkQ2hvaWNlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uUmVtb3ZlQ2hvaWNlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uU2VsZWN0Q2hvaWNlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uVG9vbGJhckRvbmU6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgZWRpdG9yOiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG4gICAgbm9kZVBhdGg6IFByb3BUeXBlcy5hcnJheS5pc1JlcXVpcmVkLFxuICB9O1xuXG4gIHN0YXRlID0ge1xuICAgIHJlc3BBcmVhTWFya3VwOiAnJyxcbiAgfTtcblxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBjb25zdCB7IG5vZGUsIGVkaXRvciB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBkb21Ob2RlID0gUmVhY3RFZGl0b3IudG9ET01Ob2RlKGVkaXRvciwgbm9kZSk7XG5cbiAgICBpZiAoZG9tTm9kZSkge1xuICAgICAgLy9lc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgIGNvbnN0IGRvbU5vZGVSZWN0ID0gZG9tTm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGNvbnN0IGVkaXRvciA9IGRvbU5vZGUuY2xvc2VzdCgnW2RhdGEtc2xhdGUtZWRpdG9yXScpO1xuICAgICAgY29uc3QgZWRpdG9yUmVjdCA9IGVkaXRvci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGNvbnN0IHRvcCA9IGRvbU5vZGVSZWN0LnRvcCAtIGVkaXRvclJlY3QudG9wO1xuICAgICAgY29uc3QgbGVmdCA9IGRvbU5vZGVSZWN0LmxlZnQgLSBlZGl0b3JSZWN0LmxlZnQ7XG5cbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICB0b29sYmFyU3R5bGU6IHtcbiAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICB0b3A6IGAke3RvcCArIGRvbU5vZGVSZWN0LmhlaWdodCArIDYwfXB4YCxcbiAgICAgICAgICBsZWZ0OiBgJHtsZWZ0ICsgMjV9cHhgLFxuICAgICAgICAgIHdpZHRoOiBkb21Ob2RlUmVjdC53aWR0aCxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGNvbXBvbmVudERpZFVwZGF0ZSgpIHtcbiAgICAvL2VzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgIGNvbnN0IGRvbU5vZGUgPSBSZWFjdERPTS5maW5kRE9NTm9kZSh0aGlzKTtcblxuICAgIHJlbmRlck1hdGgoZG9tTm9kZSk7XG4gIH1cblxuICBvblJlc3BBcmVhQ2hhbmdlID0gKHJlc3BBcmVhTWFya3VwKSA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IHJlc3BBcmVhTWFya3VwIH0pO1xuICB9O1xuXG4gIG9uQWRkQ2hvaWNlID0gKCkgPT4ge1xuICAgIGlmICh0aGlzLmVkaXRvclJlZikge1xuICAgICAgdGhpcy5lZGl0b3JSZWYuZmluaXNoRWRpdGluZygpO1xuICAgIH1cbiAgfTtcblxuICBvbkRvbmUgPSAodmFsKSA9PiB7XG4gICAgY29uc3QgeyBub2RlLCBvbkFkZENob2ljZSB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBvbmx5VGV4dCA9IGNyZWF0ZUVsZW1lbnRGcm9tSFRNTCh2YWwpLnRleHRDb250ZW50LnRyaW0oKTtcblxuICAgIGlmICghaXNFbXB0eShvbmx5VGV4dCkpIHtcbiAgICAgIG9uQWRkQ2hvaWNlKG5vZGUuZGF0YS5pbmRleCwgdmFsKTtcbiAgICB9XG4gIH07XG5cbiAgb25TZWxlY3RDaG9pY2UgPSAobmV3VmFsdWUsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgeyBub2RlLCBub2RlUGF0aCwgZWRpdG9yLCBvblRvb2xiYXJEb25lLCBvblNlbGVjdENob2ljZSB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB1cGRhdGUgPSB7IC4uLm5vZGUuZGF0YSwgdmFsdWU6IG5ld1ZhbHVlIH07XG5cbiAgICBlZGl0b3IuYXBwbHkoe1xuICAgICAgdHlwZTogJ3NldF9ub2RlJyxcbiAgICAgIHBhdGg6IG5vZGVQYXRoLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBkYXRhOiBub2RlLmRhdGFcbiAgICAgIH0sXG4gICAgICBuZXdQcm9wZXJ0aWVzOiB7IGRhdGE6IHVwZGF0ZSB9XG4gICAgfSk7XG5cbiAgICBvblRvb2xiYXJEb25lKGZhbHNlKTtcbiAgICBvblNlbGVjdENob2ljZShpbmRleCk7XG4gIH07XG5cbiAgb25SZW1vdmVDaG9pY2UgPSAodmFsLCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHsgbm9kZSwgbm9kZVBhdGgsIGVkaXRvciwgb25Ub29sYmFyRG9uZSwgb25SZW1vdmVDaG9pY2UgfSA9IHRoaXMucHJvcHM7XG5cbiAgICBpZiAoaXNFcXVhbCh2YWwsIG5vZGUuZGF0YS52YWx1ZSkpIHtcbiAgICAgIGNvbnN0IHVwZGF0ZSA9IHsgLi4ubm9kZS5kYXRhLCB2YWx1ZTogbnVsbCB9O1xuXG4gICAgICBlZGl0b3IuYXBwbHkoe1xuICAgICAgICB0eXBlOiAnc2V0X25vZGUnLFxuICAgICAgICBwYXRoOiBub2RlUGF0aCxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIGRhdGE6IG5vZGUuZGF0YVxuICAgICAgICB9LFxuICAgICAgICBuZXdQcm9wZXJ0aWVzOiB7IGRhdGE6IHVwZGF0ZSB9XG4gICAgICB9KTtcblxuICAgICAgb25Ub29sYmFyRG9uZShmYWxzZSk7XG4gICAgfVxuXG4gICAgb25SZW1vdmVDaG9pY2UoaW5kZXgpO1xuICB9O1xuXG4gIG9uS2V5RG93biA9IChldmVudCkgPT4ge1xuICAgIGlmIChldmVudC5rZXkgPT09ICdFbnRlcicpIHtcbiAgICAgIHRoaXMub25BZGRDaG9pY2UoKTtcbiAgICAgIC8vIENhbmNlbGxpbmcgZXZlbnRcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH07XG5cbiAgb25CbHVyID0gKCkgPT4ge1xuICAgIGlmICh0aGlzLmNsaWNrZWRJbnNpZGUpIHtcbiAgICAgIHRoaXMuY2xpY2tlZEluc2lkZSA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHsgbm9kZVBhdGgsIGNob2ljZXMsIG9uQ2hlY2ssIG9uVG9vbGJhckRvbmUsIGVkaXRvciB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBjb3JyZWN0UmVzcG9uc2UgPSAoY2hvaWNlcyB8fCBbXSkuZmluZCgoY2hvaWNlKSA9PiBjaG9pY2UuY29ycmVjdCk7XG5cbiAgICB0aGlzLm9uQWRkQ2hvaWNlKCk7XG5cbiAgICBpZiAoIWNob2ljZXMgfHwgKGNob2ljZXMgJiYgY2hvaWNlcy5sZW5ndGggPCAyKSB8fCAhY29ycmVjdFJlc3BvbnNlKSB7XG4gICAgICBvbkNoZWNrKCgpID0+IHtcbiAgICAgICAgZWRpdG9yLmFwcGx5KHtcbiAgICAgICAgICB0eXBlOiAncmVtb3ZlX25vZGUnLFxuICAgICAgICAgIHBhdGg6IG5vZGVQYXRoXG4gICAgICAgIH0pO1xuXG4gICAgICAgIG9uVG9vbGJhckRvbmUoZmFsc2UpO1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIG9uQ2xpY2tJbnNpZGUgPSAoKSA9PiB7XG4gICAgdGhpcy5jbGlja2VkSW5zaWRlID0gdHJ1ZTtcbiAgfTtcblxuICBmb2N1c0lucHV0ID0gKCkgPT4ge1xuICAgIC8vIHdlIG5lZWQgdG8gZm9jdXMgdGhlIGlucHV0IHNvIHRoYXQgbWF0aCBpcyBzYXZlZCBldmVuIHdpdGhvdXQgcHJlc3NpbmcgdGhlIGdyZWVuIGNoZWNrbWFya1xuICAgIGNvbnN0IHNsYXRlRWRpdG9yUmVmID0gdGhpcy5lZGl0b3JSZWYgJiYgdGhpcy5lZGl0b3JSZWYucm9vdFJlZiAmJiB0aGlzLmVkaXRvclJlZi5yb290UmVmLnNsYXRlRWRpdG9yO1xuICAgIGNvbnN0IGlucHV0UmVmID0gc2xhdGVFZGl0b3JSZWYgJiYgc2xhdGVFZGl0b3JSZWYuZWRpdG9yUmVmICYmIHNsYXRlRWRpdG9yUmVmLmVkaXRvclJlZi5lbGVtZW50O1xuXG4gICAgaWYgKGlucHV0UmVmKSB7XG4gICAgICBpbnB1dFJlZi5mb2N1cygpO1xuICAgIH1cbiAgfTtcblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgeyBjbGFzc2VzLCBjaG9pY2VzLCBzcGVsbENoZWNrLCB1cGxvYWRTb3VuZFN1cHBvcnQgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgeyByZXNwQXJlYU1hcmt1cCwgdG9vbGJhclN0eWxlIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgY29uc3QgZmlsdGVyZWREZWZhdWx0UGx1Z2lucyA9IChERUZBVUxUX1BMVUdJTlMgfHwgW10pLmZpbHRlcihcbiAgICAgIChwKSA9PiBwICE9PSAndGFibGUnICYmIHAgIT09ICdidWxsZXRlZC1saXN0JyAmJiBwICE9PSAnbnVtYmVyZWQtbGlzdCcsXG4gICAgKTtcbiAgICBjb25zdCBsYWJlbFBsdWdpbnMgPSB7XG4gICAgICBhdWRpbzogeyBkaXNhYmxlZDogdHJ1ZSB9LFxuICAgICAgdmlkZW86IHsgZGlzYWJsZWQ6IHRydWUgfSxcbiAgICB9O1xuXG4gICAgaWYgKCF0b29sYmFyU3R5bGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgLi4udG9vbGJhclN0eWxlLFxuICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJyNFMEUxRTYnLFxuICAgICAgICB9fVxuICAgICAgICBvbk1vdXNlRG93bj17dGhpcy5vbkNsaWNrSW5zaWRlfVxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3Nlcy5pdGVtQnVpbGRlcn0+XG4gICAgICAgICAgPEVkaXRhYmxlSHRtbFxuICAgICAgICAgICAgcmVmPXsocmVmKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChyZWYpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVkaXRvclJlZiA9IHJlZjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIGF1dG9Gb2N1cz17dHJ1ZX1cbiAgICAgICAgICAgIGF1dG9TYXZlXG4gICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzZXMucmVzcEFyZWF9XG4gICAgICAgICAgICB0b29sYmFyT3B0cz17e1xuICAgICAgICAgICAgICBwb3NpdGlvbjogJ3RvcCcsXG4gICAgICAgICAgICAgIGFsd2F5c1Zpc2libGU6IGZhbHNlLFxuICAgICAgICAgICAgICBzaG93RG9uZTogZmFsc2UsXG4gICAgICAgICAgICAgIGRvbmVPbjogJ2JsdXInLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIG1hcmt1cD17cmVzcEFyZWFNYXJrdXB9XG4gICAgICAgICAgICBvbktleURvd249e3RoaXMub25LZXlEb3dufVxuICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMub25SZXNwQXJlYUNoYW5nZX1cbiAgICAgICAgICAgIG9uRG9uZT17dGhpcy5vbkRvbmV9XG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkFkZCBDaG9pY2VcIlxuICAgICAgICAgICAgYWN0aXZlUGx1Z2lucz17ZmlsdGVyZWREZWZhdWx0UGx1Z2luc31cbiAgICAgICAgICAgIHBsdWdpblByb3BzPXtsYWJlbFBsdWdpbnN9XG4gICAgICAgICAgICBvbkJsdXI9e3RoaXMub25CbHVyfVxuICAgICAgICAgICAgc3BlbGxDaGVjaz17c3BlbGxDaGVja31cbiAgICAgICAgICAgIHVwbG9hZFNvdW5kU3VwcG9ydD17dXBsb2FkU291bmRTdXBwb3J0fVxuICAgICAgICAgIC8+XG4gICAgICAgICAgPGlcbiAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgIGN1cnNvcjogJ3BvaW50ZXInLFxuICAgICAgICAgICAgICBmb250U2l6ZTogJzIwcHgnLFxuICAgICAgICAgICAgICBmb250U3R5bGU6ICdub3JtYWwnLFxuICAgICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgICAgdG9wOiAnNTAlJyxcbiAgICAgICAgICAgICAgcmlnaHQ6ICcxNXB4JyxcbiAgICAgICAgICAgICAgdHJhbnNmb3JtOiAndHJhbnNsYXRlKDAsIC01MCUpJyxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBjb250ZW50RWRpdGFibGU9e2ZhbHNlfVxuICAgICAgICAgICAgb25Nb3VzZURvd249eygpID0+IHRoaXMuZm9jdXNJbnB1dCgpfVxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4gdGhpcy5vbkFkZENob2ljZSgpfVxuICAgICAgICAgID5cbiAgICAgICAgICAgICtcbiAgICAgICAgICA8L2k+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7Y2hvaWNlcyAmJiAoXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzZXMuY2hvaWNlc0hvbGRlcn0+XG4gICAgICAgICAgICB7Y2hvaWNlcy5tYXAoKHsgbGFiZWwsIGNvcnJlY3QgfSwgaW5kZXgpID0+IChcbiAgICAgICAgICAgICAgPE1lbnVJdGVtXG4gICAgICAgICAgICAgICAga2V5PXtpbmRleH1cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB0aGlzLm9uU2VsZWN0Q2hvaWNlKGxhYmVsLCBpbmRleCl9XG4gICAgICAgICAgICAgICAgb25SZW1vdmVDaG9pY2U9eygpID0+IHRoaXMub25SZW1vdmVDaG9pY2UobGFiZWwsIGluZGV4KX1cbiAgICAgICAgICAgICAgICB2YWx1ZT17bGFiZWx9XG4gICAgICAgICAgICAgICAgY29ycmVjdD17Y29ycmVjdH1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICkpfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5jb25zdCBTdHlsZWRSZXNwQXJlYVRvb2xiYXIgPSB3aXRoU3R5bGVzKHtcbiAgcmVzcEFyZWE6IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjZmZmJyxcbiAgICAnJiBbZGF0YS1zbGF0ZS1lZGl0b3I9XCJ0cnVlXCJdJzoge1xuICAgICAgbWluSGVpZ2h0OiAnaW5pdGlhbCAhaW1wb3J0YW50JyxcbiAgICB9LFxuICB9LFxuICBjaG9pY2VzSG9sZGVyOiB7XG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICAgICcmID4gZGl2Omxhc3QtY2hpbGQnOiB7XG4gICAgICBib3JkZXI6ICdub25lJyxcbiAgICB9LFxuICB9LFxuICBpdGVtQnVpbGRlcjoge1xuICAgIHBhZGRpbmc6ICc4cHgnLFxuICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICB9LFxufSkoUmVzcEFyZWFUb29sYmFyKTtcblxuZXhwb3J0IGRlZmF1bHQgU3R5bGVkUmVzcEFyZWFUb29sYmFyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFBQSxJQUFBQSxNQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxTQUFBLEdBQUFGLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRSxXQUFBLEdBQUFGLE9BQUE7QUFDQSxJQUFBRyxVQUFBLEdBQUFKLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBSSxhQUFBLEdBQUFDLHVCQUFBLENBQUFMLE9BQUE7QUFDQSxJQUFBTSxjQUFBLEdBQUFOLE9BQUE7QUFDQSxJQUFBTyxPQUFBLEdBQUFQLE9BQUE7QUFDQSxJQUFBUSxRQUFBLEdBQUFULHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBUyxRQUFBLEdBQUFWLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBVSxZQUFBLEdBQUFYLHNCQUFBLENBQUFDLE9BQUE7QUFBb0MsU0FBQVcseUJBQUFDLFdBQUEsZUFBQUMsT0FBQSxrQ0FBQUMsaUJBQUEsT0FBQUQsT0FBQSxRQUFBRSxnQkFBQSxPQUFBRixPQUFBLFlBQUFGLHdCQUFBLFlBQUFBLHlCQUFBQyxXQUFBLFdBQUFBLFdBQUEsR0FBQUcsZ0JBQUEsR0FBQUQsaUJBQUEsS0FBQUYsV0FBQTtBQUFBLFNBQUFQLHdCQUFBVyxHQUFBLEVBQUFKLFdBQUEsU0FBQUEsV0FBQSxJQUFBSSxHQUFBLElBQUFBLEdBQUEsQ0FBQUMsVUFBQSxXQUFBRCxHQUFBLFFBQUFBLEdBQUEsYUFBQUUsT0FBQSxDQUFBRixHQUFBLHlCQUFBQSxHQUFBLHVDQUFBQSxHQUFBLFVBQUFHLEtBQUEsR0FBQVIsd0JBQUEsQ0FBQUMsV0FBQSxPQUFBTyxLQUFBLElBQUFBLEtBQUEsQ0FBQUMsR0FBQSxDQUFBSixHQUFBLFlBQUFHLEtBQUEsQ0FBQUUsR0FBQSxDQUFBTCxHQUFBLFNBQUFNLE1BQUEsV0FBQUMscUJBQUEsR0FBQUMsTUFBQSxDQUFBQyxjQUFBLElBQUFELE1BQUEsQ0FBQUUsd0JBQUEsV0FBQUMsR0FBQSxJQUFBWCxHQUFBLFFBQUFXLEdBQUEsa0JBQUFILE1BQUEsQ0FBQUksU0FBQSxDQUFBQyxjQUFBLENBQUFDLElBQUEsQ0FBQWQsR0FBQSxFQUFBVyxHQUFBLFNBQUFJLElBQUEsR0FBQVIscUJBQUEsR0FBQUMsTUFBQSxDQUFBRSx3QkFBQSxDQUFBVixHQUFBLEVBQUFXLEdBQUEsY0FBQUksSUFBQSxLQUFBQSxJQUFBLENBQUFWLEdBQUEsSUFBQVUsSUFBQSxDQUFBQyxHQUFBLEtBQUFSLE1BQUEsQ0FBQUMsY0FBQSxDQUFBSCxNQUFBLEVBQUFLLEdBQUEsRUFBQUksSUFBQSxZQUFBVCxNQUFBLENBQUFLLEdBQUEsSUFBQVgsR0FBQSxDQUFBVyxHQUFBLFNBQUFMLE1BQUEsY0FBQU4sR0FBQSxNQUFBRyxLQUFBLElBQUFBLEtBQUEsQ0FBQWEsR0FBQSxDQUFBaEIsR0FBQSxFQUFBTSxNQUFBLFlBQUFBLE1BQUE7QUFBQSxTQUFBVyxRQUFBQyxNQUFBLEVBQUFDLGNBQUEsUUFBQUMsSUFBQSxHQUFBWixNQUFBLENBQUFZLElBQUEsQ0FBQUYsTUFBQSxPQUFBVixNQUFBLENBQUFhLHFCQUFBLFFBQUFDLE9BQUEsR0FBQWQsTUFBQSxDQUFBYSxxQkFBQSxDQUFBSCxNQUFBLEdBQUFDLGNBQUEsS0FBQUcsT0FBQSxHQUFBQSxPQUFBLENBQUFDLE1BQUEsV0FBQUMsR0FBQSxXQUFBaEIsTUFBQSxDQUFBRSx3QkFBQSxDQUFBUSxNQUFBLEVBQUFNLEdBQUEsRUFBQUMsVUFBQSxPQUFBTCxJQUFBLENBQUFNLElBQUEsQ0FBQUMsS0FBQSxDQUFBUCxJQUFBLEVBQUFFLE9BQUEsWUFBQUYsSUFBQTtBQUFBLFNBQUFRLGNBQUFDLE1BQUEsYUFBQUMsQ0FBQSxNQUFBQSxDQUFBLEdBQUFDLFNBQUEsQ0FBQUMsTUFBQSxFQUFBRixDQUFBLFVBQUFHLE1BQUEsV0FBQUYsU0FBQSxDQUFBRCxDQUFBLElBQUFDLFNBQUEsQ0FBQUQsQ0FBQSxRQUFBQSxDQUFBLE9BQUFiLE9BQUEsQ0FBQVQsTUFBQSxDQUFBeUIsTUFBQSxPQUFBQyxPQUFBLFdBQUF2QixHQUFBLFFBQUF3QixnQkFBQSxhQUFBTixNQUFBLEVBQUFsQixHQUFBLEVBQUFzQixNQUFBLENBQUF0QixHQUFBLFNBQUFILE1BQUEsQ0FBQTRCLHlCQUFBLEdBQUE1QixNQUFBLENBQUE2QixnQkFBQSxDQUFBUixNQUFBLEVBQUFyQixNQUFBLENBQUE0Qix5QkFBQSxDQUFBSCxNQUFBLEtBQUFoQixPQUFBLENBQUFULE1BQUEsQ0FBQXlCLE1BQUEsR0FBQUMsT0FBQSxXQUFBdkIsR0FBQSxJQUFBSCxNQUFBLENBQUFDLGNBQUEsQ0FBQW9CLE1BQUEsRUFBQWxCLEdBQUEsRUFBQUgsTUFBQSxDQUFBRSx3QkFBQSxDQUFBdUIsTUFBQSxFQUFBdEIsR0FBQSxpQkFBQWtCLE1BQUE7QUFBQSxTQUFBUyxhQUFBQyxPQUFBLFFBQUFDLHlCQUFBLEdBQUFDLHlCQUFBLG9CQUFBQyxxQkFBQSxRQUFBQyxLQUFBLE9BQUFDLGdCQUFBLGFBQUFMLE9BQUEsR0FBQU0sTUFBQSxNQUFBTCx5QkFBQSxRQUFBTSxTQUFBLE9BQUFGLGdCQUFBLG1CQUFBRyxXQUFBLEVBQUFGLE1BQUEsR0FBQUcsT0FBQSxDQUFBQyxTQUFBLENBQUFOLEtBQUEsRUFBQVosU0FBQSxFQUFBZSxTQUFBLFlBQUFELE1BQUEsR0FBQUYsS0FBQSxDQUFBaEIsS0FBQSxPQUFBSSxTQUFBLGdCQUFBbUIsMkJBQUEsbUJBQUFMLE1BQUE7QUFBQSxTQUFBSiwwQkFBQSxlQUFBTyxPQUFBLHFCQUFBQSxPQUFBLENBQUFDLFNBQUEsb0JBQUFELE9BQUEsQ0FBQUMsU0FBQSxDQUFBRSxJQUFBLDJCQUFBQyxLQUFBLG9DQUFBQyxPQUFBLENBQUF6QyxTQUFBLENBQUEwQyxPQUFBLENBQUF4QyxJQUFBLENBQUFrQyxPQUFBLENBQUFDLFNBQUEsQ0FBQUksT0FBQSw4Q0FBQUUsQ0FBQTtBQUFBLElBRzlCQyxZQUFZLDBCQUFBQyxnQkFBQTtFQUFBLElBQUFDLFVBQUEsYUFBQUYsWUFBQSxFQUFBQyxnQkFBQTtFQUFBLElBQUFFLE1BQUEsR0FBQXJCLFlBQUEsQ0FBQWtCLFlBQUE7RUFBQSxTQUFBQSxhQUFBO0lBQUEsSUFBQUksS0FBQTtJQUFBLElBQUFDLGdCQUFBLG1CQUFBTCxZQUFBO0lBQUEsU0FBQU0sSUFBQSxHQUFBL0IsU0FBQSxDQUFBQyxNQUFBLEVBQUErQixJQUFBLE9BQUFDLEtBQUEsQ0FBQUYsSUFBQSxHQUFBRyxJQUFBLE1BQUFBLElBQUEsR0FBQUgsSUFBQSxFQUFBRyxJQUFBO01BQUFGLElBQUEsQ0FBQUUsSUFBQSxJQUFBbEMsU0FBQSxDQUFBa0MsSUFBQTtJQUFBO0lBQUFMLEtBQUEsR0FBQUQsTUFBQSxDQUFBN0MsSUFBQSxDQUFBYSxLQUFBLENBQUFnQyxNQUFBLFNBQUFPLE1BQUEsQ0FBQUgsSUFBQTtJQUFBLElBQUE1QixnQkFBQSxpQkFBQWdDLHVCQUFBLGFBQUFQLEtBQUEsb0JBU0EsVUFBQ0wsQ0FBQyxFQUFLO01BQ3JCLElBQVFhLGNBQWMsR0FBS1IsS0FBQSxDQUFLUyxLQUFLLENBQTdCRCxjQUFjO01BRXRCYixDQUFDLENBQUNlLGNBQWMsQ0FBQyxDQUFDO01BQ2xCZixDQUFDLENBQUNnQixlQUFlLENBQUMsQ0FBQztNQUVuQkgsY0FBYyxDQUFDLENBQUM7SUFDbEIsQ0FBQztJQUFBLE9BQUFSLEtBQUE7RUFBQTtFQUFBLElBQUFZLGFBQUEsYUFBQWhCLFlBQUE7SUFBQTdDLEdBQUE7SUFBQThELEtBQUEsRUFFRCxTQUFBQyxPQUFBLEVBQVM7TUFDUCxJQUFBQyxXQUFBLEdBQTZDLElBQUksQ0FBQ04sS0FBSztRQUEvQ08sT0FBTyxHQUFBRCxXQUFBLENBQVBDLE9BQU87UUFBRUMsT0FBTyxHQUFBRixXQUFBLENBQVBFLE9BQU87UUFBRUMsT0FBTyxHQUFBSCxXQUFBLENBQVBHLE9BQU87UUFBRUwsS0FBSyxHQUFBRSxXQUFBLENBQUxGLEtBQUs7TUFFeEMsb0JBQ0UzRixNQUFBLFlBQUFpRyxhQUFBO1FBQUtDLFNBQVMsRUFBRSxJQUFBQyx1QkFBVSxFQUFDTCxPQUFPLENBQUNNLE9BQU8sTUFBQS9DLGdCQUFBLGlCQUFLeUMsT0FBTyxDQUFDQyxPQUFPLEVBQUdBLE9BQU8sQ0FBRSxDQUFFO1FBQUNDLE9BQU8sRUFBRUE7TUFBUSxnQkFDNUZoRyxNQUFBLFlBQUFpRyxhQUFBO1FBQ0VDLFNBQVMsRUFBRUosT0FBTyxDQUFDTyxXQUFZO1FBQy9CQyx1QkFBdUIsRUFBRTtVQUN2QkMsTUFBTSxFQUFFWjtRQUNWO01BQUUsQ0FDSCxDQUFDLGVBQ0YzRixNQUFBLFlBQUFpRyxhQUFBO1FBQUdDLFNBQVMsRUFBRUosT0FBTyxDQUFDVSxVQUFXO1FBQUNSLE9BQU8sRUFBRSxJQUFJLENBQUNTO01BQWMsR0FBQyxHQUU1RCxDQUNBLENBQUM7SUFFVjtFQUFDO0VBQUEsT0FBQS9CLFlBQUE7QUFBQSxFQWxDd0JnQyxpQkFBSyxDQUFDQyxTQUFTO0FBQUEsSUFBQXRELGdCQUFBLGFBQXBDcUIsWUFBWSxlQUNHO0VBQ2pCb0IsT0FBTyxFQUFFYyxxQkFBUyxDQUFDeEUsTUFBTSxDQUFDeUUsVUFBVTtFQUNwQ2QsT0FBTyxFQUFFYSxxQkFBUyxDQUFDRSxJQUFJLENBQUNELFVBQVU7RUFDbENiLE9BQU8sRUFBRVkscUJBQVMsQ0FBQ0csSUFBSSxDQUFDRixVQUFVO0VBQ2xDdkIsY0FBYyxFQUFFc0IscUJBQVMsQ0FBQ0csSUFBSSxDQUFDRixVQUFVO0VBQ3pDbEIsS0FBSyxFQUFFaUIscUJBQVMsQ0FBQ0ksTUFBTSxDQUFDSDtBQUMxQixDQUFDO0FBOEJILElBQU1JLFFBQVEsR0FBRyxJQUFBQyxrQkFBVSxFQUFDO0VBQzFCZCxPQUFPLEVBQUU7SUFDUGUsVUFBVSxFQUFFLE1BQU07SUFDbEJDLFlBQVksRUFBRSxpQkFBaUI7SUFDL0JDLFNBQVMsRUFBRSxZQUFZO0lBQ3ZCQyxPQUFPLEVBQUUsT0FBTztJQUNoQkMsTUFBTSxFQUFFLFNBQVM7SUFDakJDLFVBQVUsRUFBRSxNQUFNO0lBQ2xCQyxPQUFPLEVBQUUscUJBQXFCO0lBQzlCQyxRQUFRLEVBQUU7RUFDWixDQUFDO0VBQ0QzQixPQUFPLEVBQUU7SUFDUG9CLFVBQVUsRUFBRTtFQUNkLENBQUM7RUFDRFgsVUFBVSxFQUFFO0lBQ1ZlLE1BQU0sRUFBRSxTQUFTO0lBQ2pCSSxRQUFRLEVBQUUsTUFBTTtJQUNoQkMsU0FBUyxFQUFFLFFBQVE7SUFDbkJGLFFBQVEsRUFBRSxVQUFVO0lBQ3BCRyxTQUFTLEVBQUUsb0JBQW9CO0lBQy9CQyxHQUFHLEVBQUUsS0FBSztJQUNWQyxLQUFLLEVBQUUsS0FBSztJQUNaQyxNQUFNLEVBQUU7RUFDVixDQUFDO0VBQ0QzQixXQUFXLEVBQUU7SUFDWDRCLFNBQVMsRUFBRTtFQUNiO0FBQ0YsQ0FBQyxDQUFDLENBQUN2RCxZQUFZLENBQUM7QUFFaEIsSUFBTXdELHFCQUFxQixHQUFHLFNBQXhCQSxxQkFBcUJBLENBQUlDLFVBQVUsRUFBSztFQUM1QyxJQUFNQyxHQUFHLEdBQUdDLFFBQVEsQ0FBQ3BDLGFBQWEsQ0FBQyxLQUFLLENBQUM7RUFFekNtQyxHQUFHLENBQUNFLFNBQVMsR0FBRyxDQUFDSCxVQUFVLElBQUksRUFBRSxFQUFFSSxJQUFJLENBQUMsQ0FBQztFQUV6QyxPQUFPSCxHQUFHO0FBQ1osQ0FBQztBQUFDLElBRVdJLGVBQWUsMEJBQUFDLGlCQUFBO0VBQUEsSUFBQTdELFVBQUEsYUFBQTRELGVBQUEsRUFBQUMsaUJBQUE7RUFBQSxJQUFBQyxPQUFBLEdBQUFsRixZQUFBLENBQUFnRixlQUFBO0VBQUEsU0FBQUEsZ0JBQUE7SUFBQSxJQUFBRyxNQUFBO0lBQUEsSUFBQTVELGdCQUFBLG1CQUFBeUQsZUFBQTtJQUFBLFNBQUFJLEtBQUEsR0FBQTNGLFNBQUEsQ0FBQUMsTUFBQSxFQUFBK0IsSUFBQSxPQUFBQyxLQUFBLENBQUEwRCxLQUFBLEdBQUFDLEtBQUEsTUFBQUEsS0FBQSxHQUFBRCxLQUFBLEVBQUFDLEtBQUE7TUFBQTVELElBQUEsQ0FBQTRELEtBQUEsSUFBQTVGLFNBQUEsQ0FBQTRGLEtBQUE7SUFBQTtJQUFBRixNQUFBLEdBQUFELE9BQUEsQ0FBQTFHLElBQUEsQ0FBQWEsS0FBQSxDQUFBNkYsT0FBQSxTQUFBdEQsTUFBQSxDQUFBSCxJQUFBO0lBQUEsSUFBQTVCLGdCQUFBLGlCQUFBZ0MsdUJBQUEsYUFBQXNELE1BQUEsWUFlbEI7TUFDTkcsY0FBYyxFQUFFO0lBQ2xCLENBQUM7SUFBQSxJQUFBekYsZ0JBQUEsaUJBQUFnQyx1QkFBQSxhQUFBc0QsTUFBQSx1QkFnQ2tCLFVBQUNHLGNBQWMsRUFBSztNQUNyQ0gsTUFBQSxDQUFLSSxRQUFRLENBQUM7UUFBRUQsY0FBYyxFQUFkQTtNQUFlLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBQUEsSUFBQXpGLGdCQUFBLGlCQUFBZ0MsdUJBQUEsYUFBQXNELE1BQUEsa0JBRWEsWUFBTTtNQUNsQixJQUFJQSxNQUFBLENBQUtLLFNBQVMsRUFBRTtRQUNsQkwsTUFBQSxDQUFLSyxTQUFTLENBQUNDLGFBQWEsQ0FBQyxDQUFDO01BQ2hDO0lBQ0YsQ0FBQztJQUFBLElBQUE1RixnQkFBQSxpQkFBQWdDLHVCQUFBLGFBQUFzRCxNQUFBLGFBRVEsVUFBQ08sR0FBRyxFQUFLO01BQ2hCLElBQUFDLFlBQUEsR0FBOEJSLE1BQUEsQ0FBS3BELEtBQUs7UUFBaEM2RCxJQUFJLEdBQUFELFlBQUEsQ0FBSkMsSUFBSTtRQUFFQyxXQUFXLEdBQUFGLFlBQUEsQ0FBWEUsV0FBVztNQUN6QixJQUFNQyxRQUFRLEdBQUdwQixxQkFBcUIsQ0FBQ2dCLEdBQUcsQ0FBQyxDQUFDSyxXQUFXLENBQUNoQixJQUFJLENBQUMsQ0FBQztNQUU5RCxJQUFJLENBQUMsSUFBQWlCLG1CQUFPLEVBQUNGLFFBQVEsQ0FBQyxFQUFFO1FBQ3RCRCxXQUFXLENBQUNELElBQUksQ0FBQ0ssSUFBSSxDQUFDQyxLQUFLLEVBQUVSLEdBQUcsQ0FBQztNQUNuQztJQUNGLENBQUM7SUFBQSxJQUFBN0YsZ0JBQUEsaUJBQUFnQyx1QkFBQSxhQUFBc0QsTUFBQSxxQkFFZ0IsVUFBQ2dCLFFBQVEsRUFBRUQsS0FBSyxFQUFLO01BQ3BDLElBQUFFLGFBQUEsR0FBa0VqQixNQUFBLENBQUtwRCxLQUFLO1FBQXBFNkQsSUFBSSxHQUFBUSxhQUFBLENBQUpSLElBQUk7UUFBRVMsUUFBUSxHQUFBRCxhQUFBLENBQVJDLFFBQVE7UUFBRUMsTUFBTSxHQUFBRixhQUFBLENBQU5FLE1BQU07UUFBRUMsYUFBYSxHQUFBSCxhQUFBLENBQWJHLGFBQWE7UUFBRUMsY0FBYyxHQUFBSixhQUFBLENBQWRJLGNBQWM7TUFDN0QsSUFBTUMsTUFBTSxHQUFBbkgsYUFBQSxDQUFBQSxhQUFBLEtBQVFzRyxJQUFJLENBQUNLLElBQUk7UUFBRTlELEtBQUssRUFBRWdFO01BQVEsRUFBRTtNQUVoREcsTUFBTSxDQUFDakgsS0FBSyxDQUFDO1FBQ1hxSCxJQUFJLEVBQUUsVUFBVTtRQUNoQkMsSUFBSSxFQUFFTixRQUFRO1FBQ2RPLFVBQVUsRUFBRTtVQUNWWCxJQUFJLEVBQUVMLElBQUksQ0FBQ0s7UUFDYixDQUFDO1FBQ0RZLGFBQWEsRUFBRTtVQUFFWixJQUFJLEVBQUVRO1FBQU87TUFDaEMsQ0FBQyxDQUFDO01BRUZGLGFBQWEsQ0FBQyxLQUFLLENBQUM7TUFDcEJDLGNBQWMsQ0FBQ04sS0FBSyxDQUFDO0lBQ3ZCLENBQUM7SUFBQSxJQUFBckcsZ0JBQUEsaUJBQUFnQyx1QkFBQSxhQUFBc0QsTUFBQSxxQkFFZ0IsVUFBQ08sR0FBRyxFQUFFUSxLQUFLLEVBQUs7TUFDL0IsSUFBQVksYUFBQSxHQUFrRTNCLE1BQUEsQ0FBS3BELEtBQUs7UUFBcEU2RCxJQUFJLEdBQUFrQixhQUFBLENBQUpsQixJQUFJO1FBQUVTLFFBQVEsR0FBQVMsYUFBQSxDQUFSVCxRQUFRO1FBQUVDLE1BQU0sR0FBQVEsYUFBQSxDQUFOUixNQUFNO1FBQUVDLGFBQWEsR0FBQU8sYUFBQSxDQUFiUCxhQUFhO1FBQUV6RSxjQUFjLEdBQUFnRixhQUFBLENBQWRoRixjQUFjO01BRTdELElBQUksSUFBQWlGLG1CQUFPLEVBQUNyQixHQUFHLEVBQUVFLElBQUksQ0FBQ0ssSUFBSSxDQUFDOUQsS0FBSyxDQUFDLEVBQUU7UUFDakMsSUFBTXNFLE1BQU0sR0FBQW5ILGFBQUEsQ0FBQUEsYUFBQSxLQUFRc0csSUFBSSxDQUFDSyxJQUFJO1VBQUU5RCxLQUFLLEVBQUU7UUFBSSxFQUFFO1FBRTVDbUUsTUFBTSxDQUFDakgsS0FBSyxDQUFDO1VBQ1hxSCxJQUFJLEVBQUUsVUFBVTtVQUNoQkMsSUFBSSxFQUFFTixRQUFRO1VBQ2RPLFVBQVUsRUFBRTtZQUNWWCxJQUFJLEVBQUVMLElBQUksQ0FBQ0s7VUFDYixDQUFDO1VBQ0RZLGFBQWEsRUFBRTtZQUFFWixJQUFJLEVBQUVRO1VBQU87UUFDaEMsQ0FBQyxDQUFDO1FBRUZGLGFBQWEsQ0FBQyxLQUFLLENBQUM7TUFDdEI7TUFFQXpFLGNBQWMsQ0FBQ29FLEtBQUssQ0FBQztJQUN2QixDQUFDO0lBQUEsSUFBQXJHLGdCQUFBLGlCQUFBZ0MsdUJBQUEsYUFBQXNELE1BQUEsZ0JBRVcsVUFBQzZCLEtBQUssRUFBSztNQUNyQixJQUFJQSxLQUFLLENBQUMzSSxHQUFHLEtBQUssT0FBTyxFQUFFO1FBQ3pCOEcsTUFBQSxDQUFLVSxXQUFXLENBQUMsQ0FBQztRQUNsQjtRQUNBLE9BQU8sS0FBSztNQUNkO0lBQ0YsQ0FBQztJQUFBLElBQUFoRyxnQkFBQSxpQkFBQWdDLHVCQUFBLGFBQUFzRCxNQUFBLGFBRVEsWUFBTTtNQUNiLElBQUlBLE1BQUEsQ0FBSzhCLGFBQWEsRUFBRTtRQUN0QjlCLE1BQUEsQ0FBSzhCLGFBQWEsR0FBRyxLQUFLO1FBQzFCO01BQ0Y7TUFFQSxJQUFBQyxhQUFBLEdBQThEL0IsTUFBQSxDQUFLcEQsS0FBSztRQUFoRXNFLFFBQVEsR0FBQWEsYUFBQSxDQUFSYixRQUFRO1FBQUVjLE9BQU8sR0FBQUQsYUFBQSxDQUFQQyxPQUFPO1FBQUVDLE9BQU8sR0FBQUYsYUFBQSxDQUFQRSxPQUFPO1FBQUViLGFBQWEsR0FBQVcsYUFBQSxDQUFiWCxhQUFhO1FBQUVELE1BQU0sR0FBQVksYUFBQSxDQUFOWixNQUFNO01BQ3pELElBQU1lLGVBQWUsR0FBRyxDQUFDRixPQUFPLElBQUksRUFBRSxFQUFFRyxJQUFJLENBQUMsVUFBQ0MsTUFBTTtRQUFBLE9BQUtBLE1BQU0sQ0FBQ2hGLE9BQU87TUFBQSxFQUFDO01BRXhFNEMsTUFBQSxDQUFLVSxXQUFXLENBQUMsQ0FBQztNQUVsQixJQUFJLENBQUNzQixPQUFPLElBQUtBLE9BQU8sSUFBSUEsT0FBTyxDQUFDekgsTUFBTSxHQUFHLENBQUUsSUFBSSxDQUFDMkgsZUFBZSxFQUFFO1FBQ25FRCxPQUFPLENBQUMsWUFBTTtVQUNaZCxNQUFNLENBQUNqSCxLQUFLLENBQUM7WUFDWHFILElBQUksRUFBRSxhQUFhO1lBQ25CQyxJQUFJLEVBQUVOO1VBQ1IsQ0FBQyxDQUFDO1VBRUZFLGFBQWEsQ0FBQyxLQUFLLENBQUM7UUFDdEIsQ0FBQyxDQUFDO01BQ0o7SUFDRixDQUFDO0lBQUEsSUFBQTFHLGdCQUFBLGlCQUFBZ0MsdUJBQUEsYUFBQXNELE1BQUEsb0JBRWUsWUFBTTtNQUNwQkEsTUFBQSxDQUFLOEIsYUFBYSxHQUFHLElBQUk7SUFDM0IsQ0FBQztJQUFBLElBQUFwSCxnQkFBQSxpQkFBQWdDLHVCQUFBLGFBQUFzRCxNQUFBLGlCQUVZLFlBQU07TUFDakI7TUFDQSxJQUFNcUMsY0FBYyxHQUFHckMsTUFBQSxDQUFLSyxTQUFTLElBQUlMLE1BQUEsQ0FBS0ssU0FBUyxDQUFDaUMsT0FBTyxJQUFJdEMsTUFBQSxDQUFLSyxTQUFTLENBQUNpQyxPQUFPLENBQUNDLFdBQVc7TUFDckcsSUFBTUMsUUFBUSxHQUFHSCxjQUFjLElBQUlBLGNBQWMsQ0FBQ2hDLFNBQVMsSUFBSWdDLGNBQWMsQ0FBQ2hDLFNBQVMsQ0FBQ29DLE9BQU87TUFFL0YsSUFBSUQsUUFBUSxFQUFFO1FBQ1pBLFFBQVEsQ0FBQ0UsS0FBSyxDQUFDLENBQUM7TUFDbEI7SUFDRixDQUFDO0lBQUEsT0FBQTFDLE1BQUE7RUFBQTtFQUFBLElBQUFqRCxhQUFBLGFBQUE4QyxlQUFBO0lBQUEzRyxHQUFBO0lBQUE4RCxLQUFBLEVBbElELFNBQUEyRixrQkFBQSxFQUFvQjtNQUNsQixJQUFBQyxZQUFBLEdBQXlCLElBQUksQ0FBQ2hHLEtBQUs7UUFBM0I2RCxJQUFJLEdBQUFtQyxZQUFBLENBQUpuQyxJQUFJO1FBQUVVLE1BQU0sR0FBQXlCLFlBQUEsQ0FBTnpCLE1BQU07TUFDcEIsSUFBTTBCLE9BQU8sR0FBR0MsdUJBQVcsQ0FBQ0MsU0FBUyxDQUFDNUIsTUFBTSxFQUFFVixJQUFJLENBQUM7TUFFbkQsSUFBSW9DLE9BQU8sRUFBRTtRQUNYO1FBQ0EsSUFBTUcsV0FBVyxHQUFHSCxPQUFPLENBQUNJLHFCQUFxQixDQUFDLENBQUM7UUFDbkQsSUFBTTlCLE9BQU0sR0FBRzBCLE9BQU8sQ0FBQ0ssT0FBTyxDQUFDLHFCQUFxQixDQUFDO1FBQ3JELElBQU1DLFVBQVUsR0FBR2hDLE9BQU0sQ0FBQzhCLHFCQUFxQixDQUFDLENBQUM7UUFDakQsSUFBTTlELEdBQUcsR0FBRzZELFdBQVcsQ0FBQzdELEdBQUcsR0FBR2dFLFVBQVUsQ0FBQ2hFLEdBQUc7UUFDNUMsSUFBTWlFLElBQUksR0FBR0osV0FBVyxDQUFDSSxJQUFJLEdBQUdELFVBQVUsQ0FBQ0MsSUFBSTtRQUUvQyxJQUFJLENBQUNoRCxRQUFRLENBQUM7VUFDWmlELFlBQVksRUFBRTtZQUNadEUsUUFBUSxFQUFFLFVBQVU7WUFDcEJJLEdBQUcsS0FBQTFDLE1BQUEsQ0FBSzBDLEdBQUcsR0FBRzZELFdBQVcsQ0FBQ00sTUFBTSxHQUFHLEVBQUUsT0FBSTtZQUN6Q0YsSUFBSSxLQUFBM0csTUFBQSxDQUFLMkcsSUFBSSxHQUFHLEVBQUUsT0FBSTtZQUN0QkcsS0FBSyxFQUFFUCxXQUFXLENBQUNPO1VBQ3JCO1FBQ0YsQ0FBQyxDQUFDO01BQ0o7SUFDRjtFQUFDO0lBQUFySyxHQUFBO0lBQUE4RCxLQUFBLEVBRUQsU0FBQXdHLG1CQUFBLEVBQXFCO01BQ25CO01BQ0EsSUFBTVgsT0FBTyxHQUFHWSxvQkFBUSxDQUFDQyxXQUFXLENBQUMsSUFBSSxDQUFDO01BRTFDLElBQUFDLHlCQUFVLEVBQUNkLE9BQU8sQ0FBQztJQUNyQjtFQUFDO0lBQUEzSixHQUFBO0lBQUE4RCxLQUFBLEVBd0dELFNBQUFDLE9BQUEsRUFBUztNQUFBLElBQUEyRyxNQUFBO01BQ1AsSUFBQUMsWUFBQSxHQUE2RCxJQUFJLENBQUNqSCxLQUFLO1FBQS9ETyxPQUFPLEdBQUEwRyxZQUFBLENBQVAxRyxPQUFPO1FBQUU2RSxPQUFPLEdBQUE2QixZQUFBLENBQVA3QixPQUFPO1FBQUU4QixVQUFVLEdBQUFELFlBQUEsQ0FBVkMsVUFBVTtRQUFFQyxrQkFBa0IsR0FBQUYsWUFBQSxDQUFsQkUsa0JBQWtCO01BQ3hELElBQUFDLFdBQUEsR0FBeUMsSUFBSSxDQUFDQyxLQUFLO1FBQTNDOUQsY0FBYyxHQUFBNkQsV0FBQSxDQUFkN0QsY0FBYztRQUFFa0QsWUFBWSxHQUFBVyxXQUFBLENBQVpYLFlBQVk7TUFFcEMsSUFBTWEsc0JBQXNCLEdBQUcsQ0FBQ0MsNkJBQWUsSUFBSSxFQUFFLEVBQUVySyxNQUFNLENBQzNELFVBQUNzSyxDQUFDO1FBQUEsT0FBS0EsQ0FBQyxLQUFLLE9BQU8sSUFBSUEsQ0FBQyxLQUFLLGVBQWUsSUFBSUEsQ0FBQyxLQUFLLGVBQWU7TUFBQSxDQUN4RSxDQUFDO01BQ0QsSUFBTUMsWUFBWSxHQUFHO1FBQ25CQyxLQUFLLEVBQUU7VUFBRUMsUUFBUSxFQUFFO1FBQUssQ0FBQztRQUN6QkMsS0FBSyxFQUFFO1VBQUVELFFBQVEsRUFBRTtRQUFLO01BQzFCLENBQUM7TUFFRCxJQUFJLENBQUNsQixZQUFZLEVBQUU7UUFDakIsT0FBTyxJQUFJO01BQ2I7TUFFQSxvQkFDRWhNLE1BQUEsWUFBQWlHLGFBQUE7UUFDRW1ILEtBQUssRUFBQXRLLGFBQUEsQ0FBQUEsYUFBQSxLQUNBa0osWUFBWTtVQUNmcUIsZUFBZSxFQUFFO1FBQVMsRUFDMUI7UUFDRkMsV0FBVyxFQUFFLElBQUksQ0FBQ0M7TUFBYyxnQkFFaEN2TixNQUFBLFlBQUFpRyxhQUFBO1FBQUtDLFNBQVMsRUFBRUosT0FBTyxDQUFDMEg7TUFBWSxnQkFDbEN4TixNQUFBLFlBQUFpRyxhQUFBLENBQUMzRixhQUFBLFdBQVk7UUFDWG1OLEdBQUcsRUFBRSxTQUFBQSxJQUFDQSxJQUFHLEVBQUs7VUFDWixJQUFJQSxJQUFHLEVBQUU7WUFDUGxCLE1BQUksQ0FBQ3ZELFNBQVMsR0FBR3lFLElBQUc7VUFDdEI7UUFDRixDQUFFO1FBQ0ZDLFNBQVMsRUFBRSxJQUFLO1FBQ2hCQyxRQUFRO1FBQ1J6SCxTQUFTLEVBQUVKLE9BQU8sQ0FBQzhILFFBQVM7UUFDNUJDLFdBQVcsRUFBRTtVQUNYbkcsUUFBUSxFQUFFLEtBQUs7VUFDZm9HLGFBQWEsRUFBRSxLQUFLO1VBQ3BCQyxRQUFRLEVBQUUsS0FBSztVQUNmQyxNQUFNLEVBQUU7UUFDVixDQUFFO1FBQ0ZDLE1BQU0sRUFBRW5GLGNBQWU7UUFDdkJvRixTQUFTLEVBQUUsSUFBSSxDQUFDQSxTQUFVO1FBQzFCQyxRQUFRLEVBQUUsSUFBSSxDQUFDQyxnQkFBaUI7UUFDaENDLE1BQU0sRUFBRSxJQUFJLENBQUNBLE1BQU87UUFDcEJDLFdBQVcsRUFBQyxZQUFZO1FBQ3hCQyxhQUFhLEVBQUUxQixzQkFBdUI7UUFDdEMyQixXQUFXLEVBQUV4QixZQUFhO1FBQzFCeUIsTUFBTSxFQUFFLElBQUksQ0FBQ0EsTUFBTztRQUNwQmhDLFVBQVUsRUFBRUEsVUFBVztRQUN2QkMsa0JBQWtCLEVBQUVBO01BQW1CLENBQ3hDLENBQUMsZUFDRjFNLE1BQUEsWUFBQWlHLGFBQUE7UUFDRW1ILEtBQUssRUFBRTtVQUNMN0YsTUFBTSxFQUFFLFNBQVM7VUFDakJJLFFBQVEsRUFBRSxNQUFNO1VBQ2hCQyxTQUFTLEVBQUUsUUFBUTtVQUNuQkYsUUFBUSxFQUFFLFVBQVU7VUFDcEJJLEdBQUcsRUFBRSxLQUFLO1VBQ1ZDLEtBQUssRUFBRSxNQUFNO1VBQ2JGLFNBQVMsRUFBRTtRQUNiLENBQUU7UUFDRjZHLGVBQWUsRUFBRSxLQUFNO1FBQ3ZCcEIsV0FBVyxFQUFFLFNBQUFBLFlBQUE7VUFBQSxPQUFNZixNQUFJLENBQUNvQyxVQUFVLENBQUMsQ0FBQztRQUFBLENBQUM7UUFDckMzSSxPQUFPLEVBQUUsU0FBQUEsUUFBQTtVQUFBLE9BQU11RyxNQUFJLENBQUNsRCxXQUFXLENBQUMsQ0FBQztRQUFBO01BQUMsR0FDbkMsR0FFRSxDQUNBLENBQUMsRUFDTHNCLE9BQU8saUJBQ04zSyxNQUFBLFlBQUFpRyxhQUFBO1FBQUtDLFNBQVMsRUFBRUosT0FBTyxDQUFDOEk7TUFBYyxHQUNuQ2pFLE9BQU8sQ0FBQ2tFLEdBQUcsQ0FBQyxVQUFBQyxLQUFBLEVBQXFCcEYsS0FBSztRQUFBLElBQXZCcUYsS0FBSyxHQUFBRCxLQUFBLENBQUxDLEtBQUs7VUFBRWhKLE9BQU8sR0FBQStJLEtBQUEsQ0FBUC9JLE9BQU87UUFBQSxvQkFDNUIvRixNQUFBLFlBQUFpRyxhQUFBLENBQUNnQixRQUFRO1VBQ1BwRixHQUFHLEVBQUU2SCxLQUFNO1VBQ1gxRCxPQUFPLEVBQUUsU0FBQUEsUUFBQTtZQUFBLE9BQU11RyxNQUFJLENBQUN2QyxjQUFjLENBQUMrRSxLQUFLLEVBQUVyRixLQUFLLENBQUM7VUFBQSxDQUFDO1VBQ2pEcEUsY0FBYyxFQUFFLFNBQUFBLGVBQUE7WUFBQSxPQUFNaUgsTUFBSSxDQUFDakgsY0FBYyxDQUFDeUosS0FBSyxFQUFFckYsS0FBSyxDQUFDO1VBQUEsQ0FBQztVQUN4RC9ELEtBQUssRUFBRW9KLEtBQU07VUFDYmhKLE9BQU8sRUFBRUE7UUFBUSxDQUNsQixDQUFDO01BQUEsQ0FDSCxDQUNFLENBRUosQ0FBQztJQUVWO0VBQUM7RUFBQSxPQUFBeUMsZUFBQTtBQUFBLEVBMU9rQzlCLGlCQUFLLENBQUNDLFNBQVM7QUFBQXFJLE9BQUEsQ0FBQXhHLGVBQUEsR0FBQUEsZUFBQTtBQUFBLElBQUFuRixnQkFBQSxhQUF2Q21GLGVBQWUsZUFDUDtFQUNqQjFDLE9BQU8sRUFBRWMscUJBQVMsQ0FBQ3hFLE1BQU07RUFDekJnSCxJQUFJLEVBQUV4QyxxQkFBUyxDQUFDeEUsTUFBTTtFQUN0QnNLLGtCQUFrQixFQUFFOUYscUJBQVMsQ0FBQ3hFLE1BQU07RUFDcENpTSxNQUFNLEVBQUV6SCxxQkFBUyxDQUFDRyxJQUFJO0VBQ3RCNEQsT0FBTyxFQUFFL0QscUJBQVMsQ0FBQ3FJLEtBQUs7RUFDeEI1RixXQUFXLEVBQUV6QyxxQkFBUyxDQUFDRyxJQUFJLENBQUNGLFVBQVU7RUFDdEN2QixjQUFjLEVBQUVzQixxQkFBUyxDQUFDRyxJQUFJLENBQUNGLFVBQVU7RUFDekNtRCxjQUFjLEVBQUVwRCxxQkFBUyxDQUFDRyxJQUFJLENBQUNGLFVBQVU7RUFDekNrRCxhQUFhLEVBQUVuRCxxQkFBUyxDQUFDRyxJQUFJLENBQUNGLFVBQVU7RUFDeENpRCxNQUFNLEVBQUVsRCxxQkFBUyxDQUFDeEUsTUFBTSxDQUFDeUUsVUFBVTtFQUNuQ2dELFFBQVEsRUFBRWpELHFCQUFTLENBQUNxSSxLQUFLLENBQUNwSTtBQUM1QixDQUFDO0FBZ09ILElBQU1xSSxxQkFBcUIsR0FBRyxJQUFBaEksa0JBQVUsRUFBQztFQUN2QzBHLFFBQVEsRUFBRTtJQUNSUCxlQUFlLEVBQUUsTUFBTTtJQUN2Qiw4QkFBOEIsRUFBRTtNQUM5QjhCLFNBQVMsRUFBRTtJQUNiO0VBQ0YsQ0FBQztFQUNEUCxhQUFhLEVBQUU7SUFDYnRILE9BQU8sRUFBRSxNQUFNO0lBQ2Y4SCxhQUFhLEVBQUUsUUFBUTtJQUN2QixvQkFBb0IsRUFBRTtNQUNwQkMsTUFBTSxFQUFFO0lBQ1Y7RUFDRixDQUFDO0VBQ0Q3QixXQUFXLEVBQUU7SUFDWC9GLE9BQU8sRUFBRSxLQUFLO0lBQ2RDLFFBQVEsRUFBRTtFQUNaO0FBQ0YsQ0FBQyxDQUFDLENBQUNjLGVBQWUsQ0FBQztBQUFDLElBQUE4RyxRQUFBLEdBRUxKLHFCQUFxQjtBQUFBRixPQUFBLGNBQUFNLFFBQUEifQ==
|