@pie-lib/editable-html-tip-tap 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (167) hide show
  1. package/CHANGELOG.json +32 -0
  2. package/CHANGELOG.md +2280 -0
  3. package/lib/__tests__/editor.test.js +470 -0
  4. package/lib/__tests__/serialization.test.js +246 -0
  5. package/lib/__tests__/utils.js +106 -0
  6. package/lib/block-tags.js +25 -0
  7. package/lib/constants.js +16 -0
  8. package/lib/editor.js +1356 -0
  9. package/lib/extensions/MediaView.js +112 -0
  10. package/lib/extensions/characters.js +65 -0
  11. package/lib/extensions/component.js +325 -0
  12. package/lib/extensions/css.js +252 -0
  13. package/lib/extensions/custom-toolbar-wrapper.js +124 -0
  14. package/lib/extensions/image.js +106 -0
  15. package/lib/extensions/math.js +330 -0
  16. package/lib/extensions/media.js +276 -0
  17. package/lib/extensions/responseArea.js +278 -0
  18. package/lib/index.js +1213 -0
  19. package/lib/old-index.js +269 -0
  20. package/lib/parse-html.js +16 -0
  21. package/lib/plugins/characters/custom-popper.js +73 -0
  22. package/lib/plugins/characters/index.js +305 -0
  23. package/lib/plugins/characters/utils.js +381 -0
  24. package/lib/plugins/css/icons/index.js +37 -0
  25. package/lib/plugins/css/index.js +390 -0
  26. package/lib/plugins/customPlugin/index.js +114 -0
  27. package/lib/plugins/html/icons/index.js +38 -0
  28. package/lib/plugins/html/index.js +81 -0
  29. package/lib/plugins/image/__tests__/component.test.js +51 -0
  30. package/lib/plugins/image/__tests__/image-toolbar-logic.test.js +56 -0
  31. package/lib/plugins/image/__tests__/image-toolbar.test.js +26 -0
  32. package/lib/plugins/image/__tests__/index.test.js +98 -0
  33. package/lib/plugins/image/__tests__/insert-image-handler.test.js +125 -0
  34. package/lib/plugins/image/__tests__/mock-change.js +25 -0
  35. package/lib/plugins/image/alt-dialog.js +129 -0
  36. package/lib/plugins/image/component.js +419 -0
  37. package/lib/plugins/image/image-toolbar.js +177 -0
  38. package/lib/plugins/image/index.js +263 -0
  39. package/lib/plugins/image/insert-image-handler.js +117 -0
  40. package/lib/plugins/index.js +413 -0
  41. package/lib/plugins/list/__tests__/index.test.js +79 -0
  42. package/lib/plugins/list/index.js +334 -0
  43. package/lib/plugins/math/__tests__/index.test.js +300 -0
  44. package/lib/plugins/math/index.js +454 -0
  45. package/lib/plugins/media/__tests__/index.test.js +71 -0
  46. package/lib/plugins/media/index.js +387 -0
  47. package/lib/plugins/media/media-dialog.js +709 -0
  48. package/lib/plugins/media/media-toolbar.js +101 -0
  49. package/lib/plugins/media/media-wrapper.js +93 -0
  50. package/lib/plugins/rendering/index.js +46 -0
  51. package/lib/plugins/respArea/drag-in-the-blank/choice.js +289 -0
  52. package/lib/plugins/respArea/drag-in-the-blank/index.js +94 -0
  53. package/lib/plugins/respArea/explicit-constructed-response/index.js +120 -0
  54. package/lib/plugins/respArea/icons/index.js +95 -0
  55. package/lib/plugins/respArea/index.js +341 -0
  56. package/lib/plugins/respArea/inline-dropdown/index.js +126 -0
  57. package/lib/plugins/respArea/math-templated/index.js +130 -0
  58. package/lib/plugins/respArea/utils.js +125 -0
  59. package/lib/plugins/table/CustomTablePlugin.js +133 -0
  60. package/lib/plugins/table/__tests__/index.test.js +442 -0
  61. package/lib/plugins/table/__tests__/table-toolbar.test.js +54 -0
  62. package/lib/plugins/table/icons/index.js +69 -0
  63. package/lib/plugins/table/index.js +483 -0
  64. package/lib/plugins/table/table-toolbar.js +187 -0
  65. package/lib/plugins/textAlign/icons/index.js +194 -0
  66. package/lib/plugins/textAlign/index.js +34 -0
  67. package/lib/plugins/toolbar/__tests__/default-toolbar.test.js +128 -0
  68. package/lib/plugins/toolbar/__tests__/editor-and-toolbar.test.js +51 -0
  69. package/lib/plugins/toolbar/__tests__/toolbar-buttons.test.js +54 -0
  70. package/lib/plugins/toolbar/__tests__/toolbar.test.js +120 -0
  71. package/lib/plugins/toolbar/default-toolbar.js +229 -0
  72. package/lib/plugins/toolbar/done-button.js +53 -0
  73. package/lib/plugins/toolbar/editor-and-toolbar.js +286 -0
  74. package/lib/plugins/toolbar/index.js +34 -0
  75. package/lib/plugins/toolbar/toolbar-buttons.js +194 -0
  76. package/lib/plugins/toolbar/toolbar.js +376 -0
  77. package/lib/plugins/utils.js +62 -0
  78. package/lib/serialization.js +677 -0
  79. package/lib/shared/alert-dialog.js +75 -0
  80. package/lib/theme.js +9 -0
  81. package/package.json +69 -0
  82. package/src/__tests__/editor.test.jsx +363 -0
  83. package/src/__tests__/serialization.test.js +291 -0
  84. package/src/__tests__/utils.js +36 -0
  85. package/src/block-tags.js +17 -0
  86. package/src/constants.js +7 -0
  87. package/src/editor.jsx +1197 -0
  88. package/src/extensions/characters.js +46 -0
  89. package/src/extensions/component.jsx +294 -0
  90. package/src/extensions/css.js +217 -0
  91. package/src/extensions/custom-toolbar-wrapper.jsx +100 -0
  92. package/src/extensions/image.js +55 -0
  93. package/src/extensions/math.js +259 -0
  94. package/src/extensions/media.js +182 -0
  95. package/src/extensions/responseArea.js +205 -0
  96. package/src/index.jsx +1462 -0
  97. package/src/old-index.jsx +162 -0
  98. package/src/parse-html.js +8 -0
  99. package/src/plugins/README.md +27 -0
  100. package/src/plugins/characters/custom-popper.js +48 -0
  101. package/src/plugins/characters/index.jsx +284 -0
  102. package/src/plugins/characters/utils.js +447 -0
  103. package/src/plugins/css/icons/index.jsx +17 -0
  104. package/src/plugins/css/index.jsx +340 -0
  105. package/src/plugins/customPlugin/index.jsx +85 -0
  106. package/src/plugins/html/icons/index.jsx +19 -0
  107. package/src/plugins/html/index.jsx +72 -0
  108. package/src/plugins/image/__tests__/__snapshots__/component.test.jsx.snap +51 -0
  109. package/src/plugins/image/__tests__/__snapshots__/image-toolbar-logic.test.jsx.snap +27 -0
  110. package/src/plugins/image/__tests__/__snapshots__/image-toolbar.test.jsx.snap +44 -0
  111. package/src/plugins/image/__tests__/component.test.jsx +41 -0
  112. package/src/plugins/image/__tests__/image-toolbar-logic.test.jsx +42 -0
  113. package/src/plugins/image/__tests__/image-toolbar.test.jsx +11 -0
  114. package/src/plugins/image/__tests__/index.test.js +95 -0
  115. package/src/plugins/image/__tests__/insert-image-handler.test.js +113 -0
  116. package/src/plugins/image/__tests__/mock-change.js +15 -0
  117. package/src/plugins/image/alt-dialog.jsx +82 -0
  118. package/src/plugins/image/component.jsx +343 -0
  119. package/src/plugins/image/image-toolbar.jsx +100 -0
  120. package/src/plugins/image/index.jsx +227 -0
  121. package/src/plugins/image/insert-image-handler.js +79 -0
  122. package/src/plugins/index.jsx +377 -0
  123. package/src/plugins/list/__tests__/index.test.js +54 -0
  124. package/src/plugins/list/index.jsx +305 -0
  125. package/src/plugins/math/__tests__/__snapshots__/index.test.jsx.snap +48 -0
  126. package/src/plugins/math/__tests__/index.test.jsx +245 -0
  127. package/src/plugins/math/index.jsx +379 -0
  128. package/src/plugins/media/__tests__/index.test.js +75 -0
  129. package/src/plugins/media/index.jsx +325 -0
  130. package/src/plugins/media/media-dialog.js +624 -0
  131. package/src/plugins/media/media-toolbar.jsx +56 -0
  132. package/src/plugins/media/media-wrapper.jsx +43 -0
  133. package/src/plugins/rendering/index.js +31 -0
  134. package/src/plugins/respArea/drag-in-the-blank/choice.jsx +215 -0
  135. package/src/plugins/respArea/drag-in-the-blank/index.jsx +70 -0
  136. package/src/plugins/respArea/explicit-constructed-response/index.jsx +92 -0
  137. package/src/plugins/respArea/icons/index.jsx +71 -0
  138. package/src/plugins/respArea/index.jsx +299 -0
  139. package/src/plugins/respArea/inline-dropdown/index.jsx +108 -0
  140. package/src/plugins/respArea/math-templated/index.jsx +104 -0
  141. package/src/plugins/respArea/utils.jsx +90 -0
  142. package/src/plugins/table/CustomTablePlugin.js +113 -0
  143. package/src/plugins/table/__tests__/__snapshots__/table-toolbar.test.jsx.snap +44 -0
  144. package/src/plugins/table/__tests__/index.test.jsx +401 -0
  145. package/src/plugins/table/__tests__/table-toolbar.test.jsx +42 -0
  146. package/src/plugins/table/icons/index.jsx +53 -0
  147. package/src/plugins/table/index.jsx +427 -0
  148. package/src/plugins/table/table-toolbar.jsx +136 -0
  149. package/src/plugins/textAlign/icons/index.jsx +114 -0
  150. package/src/plugins/textAlign/index.jsx +23 -0
  151. package/src/plugins/toolbar/__tests__/__snapshots__/default-toolbar.test.jsx.snap +923 -0
  152. package/src/plugins/toolbar/__tests__/__snapshots__/editor-and-toolbar.test.jsx.snap +20 -0
  153. package/src/plugins/toolbar/__tests__/__snapshots__/toolbar-buttons.test.jsx.snap +36 -0
  154. package/src/plugins/toolbar/__tests__/__snapshots__/toolbar.test.jsx.snap +46 -0
  155. package/src/plugins/toolbar/__tests__/default-toolbar.test.jsx +94 -0
  156. package/src/plugins/toolbar/__tests__/editor-and-toolbar.test.jsx +37 -0
  157. package/src/plugins/toolbar/__tests__/toolbar-buttons.test.jsx +51 -0
  158. package/src/plugins/toolbar/__tests__/toolbar.test.jsx +106 -0
  159. package/src/plugins/toolbar/default-toolbar.jsx +206 -0
  160. package/src/plugins/toolbar/done-button.jsx +38 -0
  161. package/src/plugins/toolbar/editor-and-toolbar.jsx +257 -0
  162. package/src/plugins/toolbar/index.jsx +23 -0
  163. package/src/plugins/toolbar/toolbar-buttons.jsx +138 -0
  164. package/src/plugins/toolbar/toolbar.jsx +338 -0
  165. package/src/plugins/utils.js +31 -0
  166. package/src/serialization.jsx +621 -0
  167. package/src/theme.js +1 -0
@@ -0,0 +1,341 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports["default"] = ResponseAreaPlugin;
9
+ exports.serialization = void 0;
10
+
11
+ var _react = _interopRequireDefault(require("react"));
12
+
13
+ var _debug = _interopRequireDefault(require("debug"));
14
+
15
+ var _isUndefined = _interopRequireDefault(require("lodash/isUndefined"));
16
+
17
+ var _inlineDropdown = _interopRequireDefault(require("./inline-dropdown"));
18
+
19
+ var _dragInTheBlank = _interopRequireDefault(require("./drag-in-the-blank"));
20
+
21
+ var _explicitConstructedResponse = _interopRequireDefault(require("./explicit-constructed-response"));
22
+
23
+ var _mathTemplated = _interopRequireDefault(require("./math-templated"));
24
+
25
+ var _utils = require("./utils");
26
+
27
+ var _icons = require("./icons");
28
+
29
+ var log = (0, _debug["default"])('@pie-lib:editable-html:plugins:respArea');
30
+ var lastIndexMap = {};
31
+ var elTypesMap = {
32
+ 'inline-dropdown': 'inline_dropdown',
33
+ 'explicit-constructed-response': 'explicit_constructed_response',
34
+ 'math-templated': 'math_templated',
35
+ 'drag-in-the-blank': 'drag_in_the_blank'
36
+ };
37
+ var elTypesArray = Object.values(elTypesMap);
38
+
39
+ function ResponseAreaPlugin(opts) {
40
+ var isOfCurrentType = function isOfCurrentType(d) {
41
+ return d.type === opts.type || d.type === elTypesMap[opts.type];
42
+ };
43
+
44
+ var toolbar = {
45
+ icon: /*#__PURE__*/_react["default"].createElement(_icons.ToolbarIcon, null),
46
+ buttonStyles: {
47
+ margin: '0 20px 0 auto'
48
+ },
49
+ onClick: function onClick(value, onChange) {
50
+ log('[toolbar] onClick');
51
+ var change = value.change();
52
+ var currentRespAreaList = change.value.document.filterDescendants(isOfCurrentType);
53
+
54
+ if (currentRespAreaList.size >= opts.maxResponseAreas) {
55
+ return;
56
+ }
57
+
58
+ var type = opts.type.replace(/-/g, '_');
59
+ var prevIndex = lastIndexMap[type];
60
+ var newIndex = prevIndex === 0 ? prevIndex : prevIndex + 1;
61
+ var newInline = (0, _utils.getDefaultElement)(opts, newIndex);
62
+ lastIndexMap[type] += 1;
63
+
64
+ if (newInline) {
65
+ if (change.value.selection.startKey || change.value.selection.endKey) {
66
+ change.insertInline(newInline);
67
+ } else {
68
+ // If the markup is empty and there's no focus
69
+ var lastText = value.document.getLastText();
70
+
71
+ if (!lastText) {
72
+ return;
73
+ }
74
+
75
+ var parentNode = value.document.getParent(lastText.key);
76
+
77
+ if (parentNode) {
78
+ var index = parentNode.nodes.indexOf(lastText.key);
79
+ if (parentNode.isVoid) return;
80
+ change.insertNodeByKey(parentNode.key, index + 1, newInline);
81
+ }
82
+ }
83
+
84
+ if (newInline.type === 'drag_in_the_blank') {
85
+ var nextText = change.value.document.getNextText(newInline.key);
86
+
87
+ if (nextText) {
88
+ change.moveFocusTo(nextText.key, 0).moveAnchorTo(nextText.key, 0);
89
+ }
90
+ }
91
+
92
+ if (newInline.type === 'math_templated') {
93
+ var _nextText = change.value.document.getNextText(newInline.key);
94
+
95
+ if (_nextText) {
96
+ change.moveFocusTo(_nextText.key, 0).moveAnchorTo(_nextText.key, 0);
97
+ }
98
+ }
99
+
100
+ onChange(change);
101
+ }
102
+ },
103
+ customToolbar: opts.respAreaToolbar,
104
+ supports: function supports(node) {
105
+ return node.object === 'inline' && elTypesArray.indexOf(node.type) >= 0;
106
+ },
107
+ showDone: false
108
+ };
109
+ return {
110
+ name: 'response_area',
111
+ toolbar: toolbar,
112
+ filterPlugins: function filterPlugins(node, plugins) {
113
+ if (node.type === 'explicit_constructed_response' || node.type === 'math_templated' || node.type === 'drag_in_the_blank') {
114
+ return [];
115
+ }
116
+
117
+ return plugins.filter(function (p) {
118
+ return p.name !== 'response_area';
119
+ });
120
+ },
121
+ deleteNode: function deleteNode(e, node, value, onChange) {
122
+ e.preventDefault();
123
+ var change = value.change().removeNodeByKey(node.key);
124
+ onChange(change);
125
+ },
126
+ renderNode: function renderNode(props) {
127
+ var attributes = props.attributes,
128
+ n = props.node,
129
+ isFocused = props.isFocused;
130
+
131
+ if (n.type === 'explicit_constructed_response') {
132
+ var data = n.data.toJSON();
133
+ var error;
134
+
135
+ if (opts.error) {
136
+ error = opts.error();
137
+ }
138
+
139
+ return /*#__PURE__*/_react["default"].createElement(_explicitConstructedResponse["default"], {
140
+ attributes: attributes,
141
+ isFocused: isFocused,
142
+ value: data.value,
143
+ error: error && error[data.index] && error[data.index][0]
144
+ });
145
+ }
146
+
147
+ if (n.type === 'math_templated') {
148
+ var _data = n.data.toJSON();
149
+
150
+ var _error;
151
+
152
+ if (opts.error) {
153
+ _error = opts.error();
154
+ } // add 1 to index to display R 1 instead of R 0
155
+
156
+
157
+ var keyToDisplay = "R ".concat(parseInt(_data.index) + 1);
158
+ return /*#__PURE__*/_react["default"].createElement(_mathTemplated["default"], {
159
+ attributes: attributes,
160
+ keyToDisplay: keyToDisplay,
161
+ value: _data.value || '',
162
+ error: _error && _error[_data.index] && _error[_data.index][0]
163
+ });
164
+ }
165
+
166
+ if (n.type === 'drag_in_the_blank') {
167
+ var _data2 = n.data.toJSON();
168
+
169
+ return /*#__PURE__*/_react["default"].createElement(_dragInTheBlank["default"], {
170
+ attributes: attributes,
171
+ data: _data2,
172
+ n: n,
173
+ nodeProps: props,
174
+ opts: opts
175
+ });
176
+ }
177
+
178
+ if (n.type === 'inline_dropdown') {
179
+ var _data3 = n.data.toJSON();
180
+
181
+ return /*#__PURE__*/_react["default"].createElement(_inlineDropdown["default"], {
182
+ attributes: attributes,
183
+ selectedItem: _data3.value
184
+ });
185
+ }
186
+ },
187
+ onChange: function onChange(change, editor) {
188
+ var type = opts.type.replace(/-/g, '_');
189
+
190
+ if ((0, _isUndefined["default"])(lastIndexMap[type])) {
191
+ lastIndexMap[type] = 0;
192
+ change.value.document.forEachDescendant(function (d) {
193
+ if (d.type === type) {
194
+ var newIndex = parseInt(d.data.get('index'), 10);
195
+
196
+ if (newIndex > lastIndexMap[type]) {
197
+ lastIndexMap[type] = newIndex;
198
+ }
199
+ }
200
+ });
201
+ }
202
+
203
+ if (!editor.value) {
204
+ return;
205
+ }
206
+
207
+ var currentRespAreaList = change.value.document.filterDescendants(isOfCurrentType);
208
+ var oldRespAreaList = editor.value.document.filterDescendants(isOfCurrentType);
209
+ toolbar.disabled = currentRespAreaList.size >= opts.maxResponseAreas;
210
+ var arrayToFilter = oldRespAreaList.size > currentRespAreaList.size ? oldRespAreaList : currentRespAreaList;
211
+ var arrayToUseForFilter = arrayToFilter === oldRespAreaList ? currentRespAreaList : oldRespAreaList;
212
+ var elementsWithChangedStatus = arrayToFilter.filter(function (d) {
213
+ return !arrayToUseForFilter.find(function (e) {
214
+ return e.data.get('index') === d.data.get('index');
215
+ });
216
+ });
217
+
218
+ if (elementsWithChangedStatus.size && oldRespAreaList.size > currentRespAreaList.size) {
219
+ opts.onHandleAreaChange(elementsWithChangedStatus);
220
+ }
221
+ },
222
+ onDrop: function onDrop(event, change, editor) {
223
+ var closestEl = event.target.closest('[data-key]');
224
+ var inline = editor.value.document.findDescendant(function (d) {
225
+ return d.key === closestEl.dataset.key;
226
+ });
227
+
228
+ if (inline.type === 'drag_in_the_blank') {
229
+ return false;
230
+ }
231
+ }
232
+ };
233
+ }
234
+
235
+ var serialization = {
236
+ deserialize: function deserialize(el) {
237
+ var type = el.dataset && el.dataset.type;
238
+
239
+ switch (type) {
240
+ case 'inline_dropdown':
241
+ return {
242
+ object: 'inline',
243
+ type: 'inline_dropdown',
244
+ isVoid: true,
245
+ data: {
246
+ index: el.dataset.index,
247
+ value: el.dataset.value
248
+ }
249
+ };
250
+
251
+ case 'explicit_constructed_response':
252
+ return {
253
+ object: 'inline',
254
+ type: 'explicit_constructed_response',
255
+ isVoid: true,
256
+ data: {
257
+ index: el.dataset.index,
258
+ value: el.dataset.value
259
+ }
260
+ };
261
+
262
+ case 'math_templated':
263
+ return {
264
+ object: 'inline',
265
+ type: 'math_templated',
266
+ isVoid: true,
267
+ data: {
268
+ index: el.dataset.index,
269
+ value: el.dataset.value
270
+ }
271
+ };
272
+
273
+ case 'drag_in_the_blank':
274
+ return {
275
+ object: 'inline',
276
+ type: 'drag_in_the_blank',
277
+ isVoid: true,
278
+ data: {
279
+ index: el.dataset.index,
280
+ id: el.dataset.id,
281
+ value: el.dataset.value,
282
+ inTable: el.dataset.inTable
283
+ }
284
+ };
285
+ }
286
+ },
287
+ serialize: function serialize(object) {
288
+ if (object.object !== 'inline') {
289
+ return;
290
+ }
291
+
292
+ switch (object.type) {
293
+ case 'inline_dropdown':
294
+ {
295
+ var data = object.data.toJSON();
296
+ return /*#__PURE__*/_react["default"].createElement("span", {
297
+ "data-type": "inline_dropdown",
298
+ "data-index": data.index,
299
+ "data-value": data.value
300
+ });
301
+ }
302
+
303
+ case 'explicit_constructed_response':
304
+ {
305
+ var _data4 = object.data.toJSON();
306
+
307
+ return /*#__PURE__*/_react["default"].createElement("span", {
308
+ "data-type": "explicit_constructed_response",
309
+ "data-index": _data4.index,
310
+ "data-value": _data4.value
311
+ });
312
+ }
313
+
314
+ case 'math_templated':
315
+ {
316
+ var _data5 = object.data.toJSON();
317
+
318
+ return /*#__PURE__*/_react["default"].createElement("span", {
319
+ "data-type": "math_templated",
320
+ "data-index": _data5.index,
321
+ "data-value": _data5.value
322
+ });
323
+ }
324
+
325
+ case 'drag_in_the_blank':
326
+ {
327
+ var _data6 = object.data.toJSON();
328
+
329
+ return /*#__PURE__*/_react["default"].createElement("span", {
330
+ "data-type": "drag_in_the_blank",
331
+ "data-index": _data6.index,
332
+ "data-id": _data6.id,
333
+ "data-value": _data6.value,
334
+ "data-in-table": _data6.inTable
335
+ });
336
+ }
337
+ }
338
+ }
339
+ };
340
+ exports.serialization = serialization;
341
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wbHVnaW5zL3Jlc3BBcmVhL2luZGV4LmpzeCJdLCJuYW1lcyI6WyJsb2ciLCJsYXN0SW5kZXhNYXAiLCJlbFR5cGVzTWFwIiwiZWxUeXBlc0FycmF5IiwiT2JqZWN0IiwidmFsdWVzIiwiUmVzcG9uc2VBcmVhUGx1Z2luIiwib3B0cyIsImlzT2ZDdXJyZW50VHlwZSIsImQiLCJ0eXBlIiwidG9vbGJhciIsImljb24iLCJidXR0b25TdHlsZXMiLCJtYXJnaW4iLCJvbkNsaWNrIiwidmFsdWUiLCJvbkNoYW5nZSIsImNoYW5nZSIsImN1cnJlbnRSZXNwQXJlYUxpc3QiLCJkb2N1bWVudCIsImZpbHRlckRlc2NlbmRhbnRzIiwic2l6ZSIsIm1heFJlc3BvbnNlQXJlYXMiLCJyZXBsYWNlIiwicHJldkluZGV4IiwibmV3SW5kZXgiLCJuZXdJbmxpbmUiLCJzZWxlY3Rpb24iLCJzdGFydEtleSIsImVuZEtleSIsImluc2VydElubGluZSIsImxhc3RUZXh0IiwiZ2V0TGFzdFRleHQiLCJwYXJlbnROb2RlIiwiZ2V0UGFyZW50Iiwia2V5IiwiaW5kZXgiLCJub2RlcyIsImluZGV4T2YiLCJpc1ZvaWQiLCJpbnNlcnROb2RlQnlLZXkiLCJuZXh0VGV4dCIsImdldE5leHRUZXh0IiwibW92ZUZvY3VzVG8iLCJtb3ZlQW5jaG9yVG8iLCJjdXN0b21Ub29sYmFyIiwicmVzcEFyZWFUb29sYmFyIiwic3VwcG9ydHMiLCJub2RlIiwib2JqZWN0Iiwic2hvd0RvbmUiLCJuYW1lIiwiZmlsdGVyUGx1Z2lucyIsInBsdWdpbnMiLCJmaWx0ZXIiLCJwIiwiZGVsZXRlTm9kZSIsImUiLCJwcmV2ZW50RGVmYXVsdCIsInJlbW92ZU5vZGVCeUtleSIsInJlbmRlck5vZGUiLCJwcm9wcyIsImF0dHJpYnV0ZXMiLCJuIiwiaXNGb2N1c2VkIiwiZGF0YSIsInRvSlNPTiIsImVycm9yIiwia2V5VG9EaXNwbGF5IiwicGFyc2VJbnQiLCJlZGl0b3IiLCJmb3JFYWNoRGVzY2VuZGFudCIsImdldCIsIm9sZFJlc3BBcmVhTGlzdCIsImRpc2FibGVkIiwiYXJyYXlUb0ZpbHRlciIsImFycmF5VG9Vc2VGb3JGaWx0ZXIiLCJlbGVtZW50c1dpdGhDaGFuZ2VkU3RhdHVzIiwiZmluZCIsIm9uSGFuZGxlQXJlYUNoYW5nZSIsIm9uRHJvcCIsImV2ZW50IiwiY2xvc2VzdEVsIiwidGFyZ2V0IiwiY2xvc2VzdCIsImlubGluZSIsImZpbmREZXNjZW5kYW50IiwiZGF0YXNldCIsInNlcmlhbGl6YXRpb24iLCJkZXNlcmlhbGl6ZSIsImVsIiwiaWQiLCJpblRhYmxlIiwic2VyaWFsaXplIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsSUFBTUEsR0FBRyxHQUFHLHVCQUFNLHlDQUFOLENBQVo7QUFFQSxJQUFNQyxZQUFZLEdBQUcsRUFBckI7QUFDQSxJQUFNQyxVQUFVLEdBQUc7QUFDakIscUJBQW1CLGlCQURGO0FBRWpCLG1DQUFpQywrQkFGaEI7QUFHakIsb0JBQWtCLGdCQUhEO0FBSWpCLHVCQUFxQjtBQUpKLENBQW5CO0FBTUEsSUFBTUMsWUFBWSxHQUFHQyxNQUFNLENBQUNDLE1BQVAsQ0FBY0gsVUFBZCxDQUFyQjs7QUFFZSxTQUFTSSxrQkFBVCxDQUE0QkMsSUFBNUIsRUFBa0M7QUFDL0MsTUFBTUMsZUFBZSxHQUFHLFNBQWxCQSxlQUFrQixDQUFDQyxDQUFEO0FBQUEsV0FBT0EsQ0FBQyxDQUFDQyxJQUFGLEtBQVdILElBQUksQ0FBQ0csSUFBaEIsSUFBd0JELENBQUMsQ0FBQ0MsSUFBRixLQUFXUixVQUFVLENBQUNLLElBQUksQ0FBQ0csSUFBTixDQUFwRDtBQUFBLEdBQXhCOztBQUVBLE1BQU1DLE9BQU8sR0FBRztBQUNkQyxJQUFBQSxJQUFJLGVBQUUsZ0NBQUMsa0JBQUQsT0FEUTtBQUVkQyxJQUFBQSxZQUFZLEVBQUU7QUFDWkMsTUFBQUEsTUFBTSxFQUFFO0FBREksS0FGQTtBQUtkQyxJQUFBQSxPQUFPLEVBQUUsaUJBQUNDLEtBQUQsRUFBUUMsUUFBUixFQUFxQjtBQUM1QmpCLE1BQUFBLEdBQUcsQ0FBQyxtQkFBRCxDQUFIO0FBQ0EsVUFBTWtCLE1BQU0sR0FBR0YsS0FBSyxDQUFDRSxNQUFOLEVBQWY7QUFDQSxVQUFNQyxtQkFBbUIsR0FBR0QsTUFBTSxDQUFDRixLQUFQLENBQWFJLFFBQWIsQ0FBc0JDLGlCQUF0QixDQUF3Q2IsZUFBeEMsQ0FBNUI7O0FBRUEsVUFBSVcsbUJBQW1CLENBQUNHLElBQXBCLElBQTRCZixJQUFJLENBQUNnQixnQkFBckMsRUFBdUQ7QUFDckQ7QUFDRDs7QUFFRCxVQUFNYixJQUFJLEdBQUdILElBQUksQ0FBQ0csSUFBTCxDQUFVYyxPQUFWLENBQWtCLElBQWxCLEVBQXdCLEdBQXhCLENBQWI7QUFDQSxVQUFNQyxTQUFTLEdBQUd4QixZQUFZLENBQUNTLElBQUQsQ0FBOUI7QUFDQSxVQUFNZ0IsUUFBUSxHQUFHRCxTQUFTLEtBQUssQ0FBZCxHQUFrQkEsU0FBbEIsR0FBOEJBLFNBQVMsR0FBRyxDQUEzRDtBQUNBLFVBQU1FLFNBQVMsR0FBRyw4QkFBa0JwQixJQUFsQixFQUF3Qm1CLFFBQXhCLENBQWxCO0FBRUF6QixNQUFBQSxZQUFZLENBQUNTLElBQUQsQ0FBWixJQUFzQixDQUF0Qjs7QUFFQSxVQUFJaUIsU0FBSixFQUFlO0FBQ2IsWUFBSVQsTUFBTSxDQUFDRixLQUFQLENBQWFZLFNBQWIsQ0FBdUJDLFFBQXZCLElBQW1DWCxNQUFNLENBQUNGLEtBQVAsQ0FBYVksU0FBYixDQUF1QkUsTUFBOUQsRUFBc0U7QUFDcEVaLFVBQUFBLE1BQU0sQ0FBQ2EsWUFBUCxDQUFvQkosU0FBcEI7QUFDRCxTQUZELE1BRU87QUFDTDtBQUNBLGNBQU1LLFFBQVEsR0FBR2hCLEtBQUssQ0FBQ0ksUUFBTixDQUFlYSxXQUFmLEVBQWpCOztBQUVBLGNBQUksQ0FBQ0QsUUFBTCxFQUFlO0FBQ2I7QUFDRDs7QUFDRCxjQUFNRSxVQUFVLEdBQUdsQixLQUFLLENBQUNJLFFBQU4sQ0FBZWUsU0FBZixDQUF5QkgsUUFBUSxDQUFDSSxHQUFsQyxDQUFuQjs7QUFFQSxjQUFJRixVQUFKLEVBQWdCO0FBQ2QsZ0JBQU1HLEtBQUssR0FBR0gsVUFBVSxDQUFDSSxLQUFYLENBQWlCQyxPQUFqQixDQUF5QlAsUUFBUSxDQUFDSSxHQUFsQyxDQUFkO0FBRUEsZ0JBQUlGLFVBQVUsQ0FBQ00sTUFBZixFQUF1QjtBQUV2QnRCLFlBQUFBLE1BQU0sQ0FBQ3VCLGVBQVAsQ0FBdUJQLFVBQVUsQ0FBQ0UsR0FBbEMsRUFBdUNDLEtBQUssR0FBRyxDQUEvQyxFQUFrRFYsU0FBbEQ7QUFDRDtBQUNGOztBQUVELFlBQUlBLFNBQVMsQ0FBQ2pCLElBQVYsS0FBbUIsbUJBQXZCLEVBQTRDO0FBQzFDLGNBQU1nQyxRQUFRLEdBQUd4QixNQUFNLENBQUNGLEtBQVAsQ0FBYUksUUFBYixDQUFzQnVCLFdBQXRCLENBQWtDaEIsU0FBUyxDQUFDUyxHQUE1QyxDQUFqQjs7QUFFQSxjQUFJTSxRQUFKLEVBQWM7QUFDWnhCLFlBQUFBLE1BQU0sQ0FBQzBCLFdBQVAsQ0FBbUJGLFFBQVEsQ0FBQ04sR0FBNUIsRUFBaUMsQ0FBakMsRUFBb0NTLFlBQXBDLENBQWlESCxRQUFRLENBQUNOLEdBQTFELEVBQStELENBQS9EO0FBQ0Q7QUFDRjs7QUFDRCxZQUFJVCxTQUFTLENBQUNqQixJQUFWLEtBQW1CLGdCQUF2QixFQUF5QztBQUN2QyxjQUFNZ0MsU0FBUSxHQUFHeEIsTUFBTSxDQUFDRixLQUFQLENBQWFJLFFBQWIsQ0FBc0J1QixXQUF0QixDQUFrQ2hCLFNBQVMsQ0FBQ1MsR0FBNUMsQ0FBakI7O0FBRUEsY0FBSU0sU0FBSixFQUFjO0FBQ1p4QixZQUFBQSxNQUFNLENBQUMwQixXQUFQLENBQW1CRixTQUFRLENBQUNOLEdBQTVCLEVBQWlDLENBQWpDLEVBQW9DUyxZQUFwQyxDQUFpREgsU0FBUSxDQUFDTixHQUExRCxFQUErRCxDQUEvRDtBQUNEO0FBQ0Y7O0FBRURuQixRQUFBQSxRQUFRLENBQUNDLE1BQUQsQ0FBUjtBQUNEO0FBQ0YsS0EzRGE7QUE0RGQ0QixJQUFBQSxhQUFhLEVBQUV2QyxJQUFJLENBQUN3QyxlQTVETjtBQTZEZEMsSUFBQUEsUUFBUSxFQUFFLGtCQUFDQyxJQUFEO0FBQUEsYUFBVUEsSUFBSSxDQUFDQyxNQUFMLEtBQWdCLFFBQWhCLElBQTRCL0MsWUFBWSxDQUFDb0MsT0FBYixDQUFxQlUsSUFBSSxDQUFDdkMsSUFBMUIsS0FBbUMsQ0FBekU7QUFBQSxLQTdESTtBQThEZHlDLElBQUFBLFFBQVEsRUFBRTtBQTlESSxHQUFoQjtBQWlFQSxTQUFPO0FBQ0xDLElBQUFBLElBQUksRUFBRSxlQUREO0FBRUx6QyxJQUFBQSxPQUFPLEVBQVBBLE9BRks7QUFHTDBDLElBQUFBLGFBQWEsRUFBRSx1QkFBQ0osSUFBRCxFQUFPSyxPQUFQLEVBQW1CO0FBQ2hDLFVBQ0VMLElBQUksQ0FBQ3ZDLElBQUwsS0FBYywrQkFBZCxJQUNBdUMsSUFBSSxDQUFDdkMsSUFBTCxLQUFjLGdCQURkLElBRUF1QyxJQUFJLENBQUN2QyxJQUFMLEtBQWMsbUJBSGhCLEVBSUU7QUFDQSxlQUFPLEVBQVA7QUFDRDs7QUFFRCxhQUFPNEMsT0FBTyxDQUFDQyxNQUFSLENBQWUsVUFBQ0MsQ0FBRDtBQUFBLGVBQU9BLENBQUMsQ0FBQ0osSUFBRixLQUFXLGVBQWxCO0FBQUEsT0FBZixDQUFQO0FBQ0QsS0FiSTtBQWNMSyxJQUFBQSxVQUFVLEVBQUUsb0JBQUNDLENBQUQsRUFBSVQsSUFBSixFQUFVakMsS0FBVixFQUFpQkMsUUFBakIsRUFBOEI7QUFDeEN5QyxNQUFBQSxDQUFDLENBQUNDLGNBQUY7QUFFQSxVQUFNekMsTUFBTSxHQUFHRixLQUFLLENBQUNFLE1BQU4sR0FBZTBDLGVBQWYsQ0FBK0JYLElBQUksQ0FBQ2IsR0FBcEMsQ0FBZjtBQUVBbkIsTUFBQUEsUUFBUSxDQUFDQyxNQUFELENBQVI7QUFDRCxLQXBCSTtBQXFCTDJDLElBQUFBLFVBckJLLHNCQXFCTUMsS0FyQk4sRUFxQmE7QUFDaEIsVUFBUUMsVUFBUixHQUEyQ0QsS0FBM0MsQ0FBUUMsVUFBUjtBQUFBLFVBQTBCQyxDQUExQixHQUEyQ0YsS0FBM0MsQ0FBb0JiLElBQXBCO0FBQUEsVUFBNkJnQixTQUE3QixHQUEyQ0gsS0FBM0MsQ0FBNkJHLFNBQTdCOztBQUVBLFVBQUlELENBQUMsQ0FBQ3RELElBQUYsS0FBVywrQkFBZixFQUFnRDtBQUM5QyxZQUFNd0QsSUFBSSxHQUFHRixDQUFDLENBQUNFLElBQUYsQ0FBT0MsTUFBUCxFQUFiO0FBQ0EsWUFBSUMsS0FBSjs7QUFFQSxZQUFJN0QsSUFBSSxDQUFDNkQsS0FBVCxFQUFnQjtBQUNkQSxVQUFBQSxLQUFLLEdBQUc3RCxJQUFJLENBQUM2RCxLQUFMLEVBQVI7QUFDRDs7QUFFRCw0QkFDRSxnQ0FBQyx1Q0FBRDtBQUNFLFVBQUEsVUFBVSxFQUFFTCxVQURkO0FBRUUsVUFBQSxTQUFTLEVBQUVFLFNBRmI7QUFHRSxVQUFBLEtBQUssRUFBRUMsSUFBSSxDQUFDbEQsS0FIZDtBQUlFLFVBQUEsS0FBSyxFQUFFb0QsS0FBSyxJQUFJQSxLQUFLLENBQUNGLElBQUksQ0FBQzdCLEtBQU4sQ0FBZCxJQUE4QitCLEtBQUssQ0FBQ0YsSUFBSSxDQUFDN0IsS0FBTixDQUFMLENBQWtCLENBQWxCO0FBSnZDLFVBREY7QUFRRDs7QUFFRCxVQUFJMkIsQ0FBQyxDQUFDdEQsSUFBRixLQUFXLGdCQUFmLEVBQWlDO0FBQy9CLFlBQU13RCxLQUFJLEdBQUdGLENBQUMsQ0FBQ0UsSUFBRixDQUFPQyxNQUFQLEVBQWI7O0FBQ0EsWUFBSUMsTUFBSjs7QUFFQSxZQUFJN0QsSUFBSSxDQUFDNkQsS0FBVCxFQUFnQjtBQUNkQSxVQUFBQSxNQUFLLEdBQUc3RCxJQUFJLENBQUM2RCxLQUFMLEVBQVI7QUFDRCxTQU44QixDQVEvQjs7O0FBQ0EsWUFBTUMsWUFBWSxlQUFRQyxRQUFRLENBQUNKLEtBQUksQ0FBQzdCLEtBQU4sQ0FBUixHQUF1QixDQUEvQixDQUFsQjtBQUVBLDRCQUNFLGdDQUFDLHlCQUFEO0FBQ0UsVUFBQSxVQUFVLEVBQUUwQixVQURkO0FBRUUsVUFBQSxZQUFZLEVBQUVNLFlBRmhCO0FBR0UsVUFBQSxLQUFLLEVBQUVILEtBQUksQ0FBQ2xELEtBQUwsSUFBYyxFQUh2QjtBQUlFLFVBQUEsS0FBSyxFQUFFb0QsTUFBSyxJQUFJQSxNQUFLLENBQUNGLEtBQUksQ0FBQzdCLEtBQU4sQ0FBZCxJQUE4QitCLE1BQUssQ0FBQ0YsS0FBSSxDQUFDN0IsS0FBTixDQUFMLENBQWtCLENBQWxCO0FBSnZDLFVBREY7QUFRRDs7QUFFRCxVQUFJMkIsQ0FBQyxDQUFDdEQsSUFBRixLQUFXLG1CQUFmLEVBQW9DO0FBQ2xDLFlBQU13RCxNQUFJLEdBQUdGLENBQUMsQ0FBQ0UsSUFBRixDQUFPQyxNQUFQLEVBQWI7O0FBRUEsNEJBQU8sZ0NBQUMsMEJBQUQ7QUFBZ0IsVUFBQSxVQUFVLEVBQUVKLFVBQTVCO0FBQXdDLFVBQUEsSUFBSSxFQUFFRyxNQUE5QztBQUFvRCxVQUFBLENBQUMsRUFBRUYsQ0FBdkQ7QUFBMEQsVUFBQSxTQUFTLEVBQUVGLEtBQXJFO0FBQTRFLFVBQUEsSUFBSSxFQUFFdkQ7QUFBbEYsVUFBUDtBQUNEOztBQUVELFVBQUl5RCxDQUFDLENBQUN0RCxJQUFGLEtBQVcsaUJBQWYsRUFBa0M7QUFDaEMsWUFBTXdELE1BQUksR0FBR0YsQ0FBQyxDQUFDRSxJQUFGLENBQU9DLE1BQVAsRUFBYjs7QUFFQSw0QkFBTyxnQ0FBQywwQkFBRDtBQUFnQixVQUFBLFVBQVUsRUFBRUosVUFBNUI7QUFBd0MsVUFBQSxZQUFZLEVBQUVHLE1BQUksQ0FBQ2xEO0FBQTNELFVBQVA7QUFDRDtBQUNGLEtBMUVJO0FBMkVMQyxJQUFBQSxRQTNFSyxvQkEyRUlDLE1BM0VKLEVBMkVZcUQsTUEzRVosRUEyRW9CO0FBQ3ZCLFVBQU03RCxJQUFJLEdBQUdILElBQUksQ0FBQ0csSUFBTCxDQUFVYyxPQUFWLENBQWtCLElBQWxCLEVBQXdCLEdBQXhCLENBQWI7O0FBRUEsVUFBSSw2QkFBWXZCLFlBQVksQ0FBQ1MsSUFBRCxDQUF4QixDQUFKLEVBQXFDO0FBQ25DVCxRQUFBQSxZQUFZLENBQUNTLElBQUQsQ0FBWixHQUFxQixDQUFyQjtBQUVBUSxRQUFBQSxNQUFNLENBQUNGLEtBQVAsQ0FBYUksUUFBYixDQUFzQm9ELGlCQUF0QixDQUF3QyxVQUFDL0QsQ0FBRCxFQUFPO0FBQzdDLGNBQUlBLENBQUMsQ0FBQ0MsSUFBRixLQUFXQSxJQUFmLEVBQXFCO0FBQ25CLGdCQUFNZ0IsUUFBUSxHQUFHNEMsUUFBUSxDQUFDN0QsQ0FBQyxDQUFDeUQsSUFBRixDQUFPTyxHQUFQLENBQVcsT0FBWCxDQUFELEVBQXNCLEVBQXRCLENBQXpCOztBQUVBLGdCQUFJL0MsUUFBUSxHQUFHekIsWUFBWSxDQUFDUyxJQUFELENBQTNCLEVBQW1DO0FBQ2pDVCxjQUFBQSxZQUFZLENBQUNTLElBQUQsQ0FBWixHQUFxQmdCLFFBQXJCO0FBQ0Q7QUFDRjtBQUNGLFNBUkQ7QUFTRDs7QUFFRCxVQUFJLENBQUM2QyxNQUFNLENBQUN2RCxLQUFaLEVBQW1CO0FBQ2pCO0FBQ0Q7O0FBRUQsVUFBTUcsbUJBQW1CLEdBQUdELE1BQU0sQ0FBQ0YsS0FBUCxDQUFhSSxRQUFiLENBQXNCQyxpQkFBdEIsQ0FBd0NiLGVBQXhDLENBQTVCO0FBQ0EsVUFBTWtFLGVBQWUsR0FBR0gsTUFBTSxDQUFDdkQsS0FBUCxDQUFhSSxRQUFiLENBQXNCQyxpQkFBdEIsQ0FBd0NiLGVBQXhDLENBQXhCO0FBRUFHLE1BQUFBLE9BQU8sQ0FBQ2dFLFFBQVIsR0FBbUJ4RCxtQkFBbUIsQ0FBQ0csSUFBcEIsSUFBNEJmLElBQUksQ0FBQ2dCLGdCQUFwRDtBQUVBLFVBQU1xRCxhQUFhLEdBQUdGLGVBQWUsQ0FBQ3BELElBQWhCLEdBQXVCSCxtQkFBbUIsQ0FBQ0csSUFBM0MsR0FBa0RvRCxlQUFsRCxHQUFvRXZELG1CQUExRjtBQUNBLFVBQU0wRCxtQkFBbUIsR0FBR0QsYUFBYSxLQUFLRixlQUFsQixHQUFvQ3ZELG1CQUFwQyxHQUEwRHVELGVBQXRGO0FBRUEsVUFBTUkseUJBQXlCLEdBQUdGLGFBQWEsQ0FBQ3JCLE1BQWQsQ0FDaEMsVUFBQzlDLENBQUQ7QUFBQSxlQUFPLENBQUNvRSxtQkFBbUIsQ0FBQ0UsSUFBcEIsQ0FBeUIsVUFBQ3JCLENBQUQ7QUFBQSxpQkFBT0EsQ0FBQyxDQUFDUSxJQUFGLENBQU9PLEdBQVAsQ0FBVyxPQUFYLE1BQXdCaEUsQ0FBQyxDQUFDeUQsSUFBRixDQUFPTyxHQUFQLENBQVcsT0FBWCxDQUEvQjtBQUFBLFNBQXpCLENBQVI7QUFBQSxPQURnQyxDQUFsQzs7QUFJQSxVQUFJSyx5QkFBeUIsQ0FBQ3hELElBQTFCLElBQWtDb0QsZUFBZSxDQUFDcEQsSUFBaEIsR0FBdUJILG1CQUFtQixDQUFDRyxJQUFqRixFQUF1RjtBQUNyRmYsUUFBQUEsSUFBSSxDQUFDeUUsa0JBQUwsQ0FBd0JGLHlCQUF4QjtBQUNEO0FBQ0YsS0EvR0k7QUFnSExHLElBQUFBLE1BaEhLLGtCQWdIRUMsS0FoSEYsRUFnSFNoRSxNQWhIVCxFQWdIaUJxRCxNQWhIakIsRUFnSHlCO0FBQzVCLFVBQU1ZLFNBQVMsR0FBR0QsS0FBSyxDQUFDRSxNQUFOLENBQWFDLE9BQWIsQ0FBcUIsWUFBckIsQ0FBbEI7QUFDQSxVQUFNQyxNQUFNLEdBQUdmLE1BQU0sQ0FBQ3ZELEtBQVAsQ0FBYUksUUFBYixDQUFzQm1FLGNBQXRCLENBQXFDLFVBQUM5RSxDQUFEO0FBQUEsZUFBT0EsQ0FBQyxDQUFDMkIsR0FBRixLQUFVK0MsU0FBUyxDQUFDSyxPQUFWLENBQWtCcEQsR0FBbkM7QUFBQSxPQUFyQyxDQUFmOztBQUVBLFVBQUlrRCxNQUFNLENBQUM1RSxJQUFQLEtBQWdCLG1CQUFwQixFQUF5QztBQUN2QyxlQUFPLEtBQVA7QUFDRDtBQUNGO0FBdkhJLEdBQVA7QUF5SEQ7O0FBRU0sSUFBTStFLGFBQWEsR0FBRztBQUMzQkMsRUFBQUEsV0FEMkIsdUJBQ2ZDLEVBRGUsRUFDWDtBQUNkLFFBQU1qRixJQUFJLEdBQUdpRixFQUFFLENBQUNILE9BQUgsSUFBY0csRUFBRSxDQUFDSCxPQUFILENBQVc5RSxJQUF0Qzs7QUFFQSxZQUFRQSxJQUFSO0FBQ0UsV0FBSyxpQkFBTDtBQUNFLGVBQU87QUFDTHdDLFVBQUFBLE1BQU0sRUFBRSxRQURIO0FBRUx4QyxVQUFBQSxJQUFJLEVBQUUsaUJBRkQ7QUFHTDhCLFVBQUFBLE1BQU0sRUFBRSxJQUhIO0FBSUwwQixVQUFBQSxJQUFJLEVBQUU7QUFDSjdCLFlBQUFBLEtBQUssRUFBRXNELEVBQUUsQ0FBQ0gsT0FBSCxDQUFXbkQsS0FEZDtBQUVKckIsWUFBQUEsS0FBSyxFQUFFMkUsRUFBRSxDQUFDSCxPQUFILENBQVd4RTtBQUZkO0FBSkQsU0FBUDs7QUFTRixXQUFLLCtCQUFMO0FBQ0UsZUFBTztBQUNMa0MsVUFBQUEsTUFBTSxFQUFFLFFBREg7QUFFTHhDLFVBQUFBLElBQUksRUFBRSwrQkFGRDtBQUdMOEIsVUFBQUEsTUFBTSxFQUFFLElBSEg7QUFJTDBCLFVBQUFBLElBQUksRUFBRTtBQUNKN0IsWUFBQUEsS0FBSyxFQUFFc0QsRUFBRSxDQUFDSCxPQUFILENBQVduRCxLQURkO0FBRUpyQixZQUFBQSxLQUFLLEVBQUUyRSxFQUFFLENBQUNILE9BQUgsQ0FBV3hFO0FBRmQ7QUFKRCxTQUFQOztBQVNGLFdBQUssZ0JBQUw7QUFDRSxlQUFPO0FBQ0xrQyxVQUFBQSxNQUFNLEVBQUUsUUFESDtBQUVMeEMsVUFBQUEsSUFBSSxFQUFFLGdCQUZEO0FBR0w4QixVQUFBQSxNQUFNLEVBQUUsSUFISDtBQUlMMEIsVUFBQUEsSUFBSSxFQUFFO0FBQ0o3QixZQUFBQSxLQUFLLEVBQUVzRCxFQUFFLENBQUNILE9BQUgsQ0FBV25ELEtBRGQ7QUFFSnJCLFlBQUFBLEtBQUssRUFBRTJFLEVBQUUsQ0FBQ0gsT0FBSCxDQUFXeEU7QUFGZDtBQUpELFNBQVA7O0FBU0YsV0FBSyxtQkFBTDtBQUNFLGVBQU87QUFDTGtDLFVBQUFBLE1BQU0sRUFBRSxRQURIO0FBRUx4QyxVQUFBQSxJQUFJLEVBQUUsbUJBRkQ7QUFHTDhCLFVBQUFBLE1BQU0sRUFBRSxJQUhIO0FBSUwwQixVQUFBQSxJQUFJLEVBQUU7QUFDSjdCLFlBQUFBLEtBQUssRUFBRXNELEVBQUUsQ0FBQ0gsT0FBSCxDQUFXbkQsS0FEZDtBQUVKdUQsWUFBQUEsRUFBRSxFQUFFRCxFQUFFLENBQUNILE9BQUgsQ0FBV0ksRUFGWDtBQUdKNUUsWUFBQUEsS0FBSyxFQUFFMkUsRUFBRSxDQUFDSCxPQUFILENBQVd4RSxLQUhkO0FBSUo2RSxZQUFBQSxPQUFPLEVBQUVGLEVBQUUsQ0FBQ0gsT0FBSCxDQUFXSztBQUpoQjtBQUpELFNBQVA7QUFoQ0o7QUE0Q0QsR0FoRDBCO0FBaUQzQkMsRUFBQUEsU0FqRDJCLHFCQWlEakI1QyxNQWpEaUIsRUFpRFQ7QUFDaEIsUUFBSUEsTUFBTSxDQUFDQSxNQUFQLEtBQWtCLFFBQXRCLEVBQWdDO0FBQzlCO0FBQ0Q7O0FBRUQsWUFBUUEsTUFBTSxDQUFDeEMsSUFBZjtBQUNFLFdBQUssaUJBQUw7QUFBd0I7QUFDdEIsY0FBTXdELElBQUksR0FBR2hCLE1BQU0sQ0FBQ2dCLElBQVAsQ0FBWUMsTUFBWixFQUFiO0FBRUEsOEJBQU87QUFBTSx5QkFBVSxpQkFBaEI7QUFBa0MsMEJBQVlELElBQUksQ0FBQzdCLEtBQW5EO0FBQTBELDBCQUFZNkIsSUFBSSxDQUFDbEQ7QUFBM0UsWUFBUDtBQUNEOztBQUNELFdBQUssK0JBQUw7QUFBc0M7QUFDcEMsY0FBTWtELE1BQUksR0FBR2hCLE1BQU0sQ0FBQ2dCLElBQVAsQ0FBWUMsTUFBWixFQUFiOztBQUVBLDhCQUFPO0FBQU0seUJBQVUsK0JBQWhCO0FBQWdELDBCQUFZRCxNQUFJLENBQUM3QixLQUFqRTtBQUF3RSwwQkFBWTZCLE1BQUksQ0FBQ2xEO0FBQXpGLFlBQVA7QUFDRDs7QUFDRCxXQUFLLGdCQUFMO0FBQXVCO0FBQ3JCLGNBQU1rRCxNQUFJLEdBQUdoQixNQUFNLENBQUNnQixJQUFQLENBQVlDLE1BQVosRUFBYjs7QUFFQSw4QkFBTztBQUFNLHlCQUFVLGdCQUFoQjtBQUFpQywwQkFBWUQsTUFBSSxDQUFDN0IsS0FBbEQ7QUFBeUQsMEJBQVk2QixNQUFJLENBQUNsRDtBQUExRSxZQUFQO0FBQ0Q7O0FBQ0QsV0FBSyxtQkFBTDtBQUEwQjtBQUN4QixjQUFNa0QsTUFBSSxHQUFHaEIsTUFBTSxDQUFDZ0IsSUFBUCxDQUFZQyxNQUFaLEVBQWI7O0FBRUEsOEJBQ0U7QUFDRSx5QkFBVSxtQkFEWjtBQUVFLDBCQUFZRCxNQUFJLENBQUM3QixLQUZuQjtBQUdFLHVCQUFTNkIsTUFBSSxDQUFDMEIsRUFIaEI7QUFJRSwwQkFBWTFCLE1BQUksQ0FBQ2xELEtBSm5CO0FBS0UsNkJBQWVrRCxNQUFJLENBQUMyQjtBQUx0QixZQURGO0FBU0Q7QUE1Qkg7QUE4QkQ7QUFwRjBCLENBQXRCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBkZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5pbXBvcnQgaXNVbmRlZmluZWQgZnJvbSAnbG9kYXNoL2lzVW5kZWZpbmVkJztcblxuaW1wb3J0IElubGluZURyb3Bkb3duIGZyb20gJy4vaW5saW5lLWRyb3Bkb3duJztcbmltcG9ydCBEcmFnSW5UaGVCbGFuayBmcm9tICcuL2RyYWctaW4tdGhlLWJsYW5rJztcbmltcG9ydCBFeHBsaWNpdENvbnN0cnVjdGVkUmVzcG9uc2UgZnJvbSAnLi9leHBsaWNpdC1jb25zdHJ1Y3RlZC1yZXNwb25zZSc7XG5pbXBvcnQgTWF0aFRlbXBsYXRlZCBmcm9tICcuL21hdGgtdGVtcGxhdGVkJztcbmltcG9ydCB7IGdldERlZmF1bHRFbGVtZW50IH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBUb29sYmFySWNvbiB9IGZyb20gJy4vaWNvbnMnO1xuXG5jb25zdCBsb2cgPSBkZWJ1ZygnQHBpZS1saWI6ZWRpdGFibGUtaHRtbDpwbHVnaW5zOnJlc3BBcmVhJyk7XG5cbmNvbnN0IGxhc3RJbmRleE1hcCA9IHt9O1xuY29uc3QgZWxUeXBlc01hcCA9IHtcbiAgJ2lubGluZS1kcm9wZG93bic6ICdpbmxpbmVfZHJvcGRvd24nLFxuICAnZXhwbGljaXQtY29uc3RydWN0ZWQtcmVzcG9uc2UnOiAnZXhwbGljaXRfY29uc3RydWN0ZWRfcmVzcG9uc2UnLFxuICAnbWF0aC10ZW1wbGF0ZWQnOiAnbWF0aF90ZW1wbGF0ZWQnLFxuICAnZHJhZy1pbi10aGUtYmxhbmsnOiAnZHJhZ19pbl90aGVfYmxhbmsnLFxufTtcbmNvbnN0IGVsVHlwZXNBcnJheSA9IE9iamVjdC52YWx1ZXMoZWxUeXBlc01hcCk7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFJlc3BvbnNlQXJlYVBsdWdpbihvcHRzKSB7XG4gIGNvbnN0IGlzT2ZDdXJyZW50VHlwZSA9IChkKSA9PiBkLnR5cGUgPT09IG9wdHMudHlwZSB8fCBkLnR5cGUgPT09IGVsVHlwZXNNYXBbb3B0cy50eXBlXTtcblxuICBjb25zdCB0b29sYmFyID0ge1xuICAgIGljb246IDxUb29sYmFySWNvbiAvPixcbiAgICBidXR0b25TdHlsZXM6IHtcbiAgICAgIG1hcmdpbjogJzAgMjBweCAwIGF1dG8nLFxuICAgIH0sXG4gICAgb25DbGljazogKHZhbHVlLCBvbkNoYW5nZSkgPT4ge1xuICAgICAgbG9nKCdbdG9vbGJhcl0gb25DbGljaycpO1xuICAgICAgY29uc3QgY2hhbmdlID0gdmFsdWUuY2hhbmdlKCk7XG4gICAgICBjb25zdCBjdXJyZW50UmVzcEFyZWFMaXN0ID0gY2hhbmdlLnZhbHVlLmRvY3VtZW50LmZpbHRlckRlc2NlbmRhbnRzKGlzT2ZDdXJyZW50VHlwZSk7XG5cbiAgICAgIGlmIChjdXJyZW50UmVzcEFyZWFMaXN0LnNpemUgPj0gb3B0cy5tYXhSZXNwb25zZUFyZWFzKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdHlwZSA9IG9wdHMudHlwZS5yZXBsYWNlKC8tL2csICdfJyk7XG4gICAgICBjb25zdCBwcmV2SW5kZXggPSBsYXN0SW5kZXhNYXBbdHlwZV07XG4gICAgICBjb25zdCBuZXdJbmRleCA9IHByZXZJbmRleCA9PT0gMCA/IHByZXZJbmRleCA6IHByZXZJbmRleCArIDE7XG4gICAgICBjb25zdCBuZXdJbmxpbmUgPSBnZXREZWZhdWx0RWxlbWVudChvcHRzLCBuZXdJbmRleCk7XG5cbiAgICAgIGxhc3RJbmRleE1hcFt0eXBlXSArPSAxO1xuXG4gICAgICBpZiAobmV3SW5saW5lKSB7XG4gICAgICAgIGlmIChjaGFuZ2UudmFsdWUuc2VsZWN0aW9uLnN0YXJ0S2V5IHx8IGNoYW5nZS52YWx1ZS5zZWxlY3Rpb24uZW5kS2V5KSB7XG4gICAgICAgICAgY2hhbmdlLmluc2VydElubGluZShuZXdJbmxpbmUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIElmIHRoZSBtYXJrdXAgaXMgZW1wdHkgYW5kIHRoZXJlJ3Mgbm8gZm9jdXNcbiAgICAgICAgICBjb25zdCBsYXN0VGV4dCA9IHZhbHVlLmRvY3VtZW50LmdldExhc3RUZXh0KCk7XG5cbiAgICAgICAgICBpZiAoIWxhc3RUZXh0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHBhcmVudE5vZGUgPSB2YWx1ZS5kb2N1bWVudC5nZXRQYXJlbnQobGFzdFRleHQua2V5KTtcblxuICAgICAgICAgIGlmIChwYXJlbnROb2RlKSB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHBhcmVudE5vZGUubm9kZXMuaW5kZXhPZihsYXN0VGV4dC5rZXkpO1xuXG4gICAgICAgICAgICBpZiAocGFyZW50Tm9kZS5pc1ZvaWQpIHJldHVybjtcblxuICAgICAgICAgICAgY2hhbmdlLmluc2VydE5vZGVCeUtleShwYXJlbnROb2RlLmtleSwgaW5kZXggKyAxLCBuZXdJbmxpbmUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChuZXdJbmxpbmUudHlwZSA9PT0gJ2RyYWdfaW5fdGhlX2JsYW5rJykge1xuICAgICAgICAgIGNvbnN0IG5leHRUZXh0ID0gY2hhbmdlLnZhbHVlLmRvY3VtZW50LmdldE5leHRUZXh0KG5ld0lubGluZS5rZXkpO1xuXG4gICAgICAgICAgaWYgKG5leHRUZXh0KSB7XG4gICAgICAgICAgICBjaGFuZ2UubW92ZUZvY3VzVG8obmV4dFRleHQua2V5LCAwKS5tb3ZlQW5jaG9yVG8obmV4dFRleHQua2V5LCAwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5ld0lubGluZS50eXBlID09PSAnbWF0aF90ZW1wbGF0ZWQnKSB7XG4gICAgICAgICAgY29uc3QgbmV4dFRleHQgPSBjaGFuZ2UudmFsdWUuZG9jdW1lbnQuZ2V0TmV4dFRleHQobmV3SW5saW5lLmtleSk7XG5cbiAgICAgICAgICBpZiAobmV4dFRleHQpIHtcbiAgICAgICAgICAgIGNoYW5nZS5tb3ZlRm9jdXNUbyhuZXh0VGV4dC5rZXksIDApLm1vdmVBbmNob3JUbyhuZXh0VGV4dC5rZXksIDApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIG9uQ2hhbmdlKGNoYW5nZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBjdXN0b21Ub29sYmFyOiBvcHRzLnJlc3BBcmVhVG9vbGJhcixcbiAgICBzdXBwb3J0czogKG5vZGUpID0+IG5vZGUub2JqZWN0ID09PSAnaW5saW5lJyAmJiBlbFR5cGVzQXJyYXkuaW5kZXhPZihub2RlLnR5cGUpID49IDAsXG4gICAgc2hvd0RvbmU6IGZhbHNlLFxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ3Jlc3BvbnNlX2FyZWEnLFxuICAgIHRvb2xiYXIsXG4gICAgZmlsdGVyUGx1Z2luczogKG5vZGUsIHBsdWdpbnMpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgbm9kZS50eXBlID09PSAnZXhwbGljaXRfY29uc3RydWN0ZWRfcmVzcG9uc2UnIHx8XG4gICAgICAgIG5vZGUudHlwZSA9PT0gJ21hdGhfdGVtcGxhdGVkJyB8fFxuICAgICAgICBub2RlLnR5cGUgPT09ICdkcmFnX2luX3RoZV9ibGFuaydcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwbHVnaW5zLmZpbHRlcigocCkgPT4gcC5uYW1lICE9PSAncmVzcG9uc2VfYXJlYScpO1xuICAgIH0sXG4gICAgZGVsZXRlTm9kZTogKGUsIG5vZGUsIHZhbHVlLCBvbkNoYW5nZSkgPT4ge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICBjb25zdCBjaGFuZ2UgPSB2YWx1ZS5jaGFuZ2UoKS5yZW1vdmVOb2RlQnlLZXkobm9kZS5rZXkpO1xuXG4gICAgICBvbkNoYW5nZShjaGFuZ2UpO1xuICAgIH0sXG4gICAgcmVuZGVyTm9kZShwcm9wcykge1xuICAgICAgY29uc3QgeyBhdHRyaWJ1dGVzLCBub2RlOiBuLCBpc0ZvY3VzZWQgfSA9IHByb3BzO1xuXG4gICAgICBpZiAobi50eXBlID09PSAnZXhwbGljaXRfY29uc3RydWN0ZWRfcmVzcG9uc2UnKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBuLmRhdGEudG9KU09OKCk7XG4gICAgICAgIGxldCBlcnJvcjtcblxuICAgICAgICBpZiAob3B0cy5lcnJvcikge1xuICAgICAgICAgIGVycm9yID0gb3B0cy5lcnJvcigpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8RXhwbGljaXRDb25zdHJ1Y3RlZFJlc3BvbnNlXG4gICAgICAgICAgICBhdHRyaWJ1dGVzPXthdHRyaWJ1dGVzfVxuICAgICAgICAgICAgaXNGb2N1c2VkPXtpc0ZvY3VzZWR9XG4gICAgICAgICAgICB2YWx1ZT17ZGF0YS52YWx1ZX1cbiAgICAgICAgICAgIGVycm9yPXtlcnJvciAmJiBlcnJvcltkYXRhLmluZGV4XSAmJiBlcnJvcltkYXRhLmluZGV4XVswXX1cbiAgICAgICAgICAvPlxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAobi50eXBlID09PSAnbWF0aF90ZW1wbGF0ZWQnKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBuLmRhdGEudG9KU09OKCk7XG4gICAgICAgIGxldCBlcnJvcjtcblxuICAgICAgICBpZiAob3B0cy5lcnJvcikge1xuICAgICAgICAgIGVycm9yID0gb3B0cy5lcnJvcigpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gYWRkIDEgdG8gaW5kZXggdG8gZGlzcGxheSBSIDEgaW5zdGVhZCBvZiBSIDBcbiAgICAgICAgY29uc3Qga2V5VG9EaXNwbGF5ID0gYFIgJHtwYXJzZUludChkYXRhLmluZGV4KSArIDF9YDtcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxNYXRoVGVtcGxhdGVkXG4gICAgICAgICAgICBhdHRyaWJ1dGVzPXthdHRyaWJ1dGVzfVxuICAgICAgICAgICAga2V5VG9EaXNwbGF5PXtrZXlUb0Rpc3BsYXl9XG4gICAgICAgICAgICB2YWx1ZT17ZGF0YS52YWx1ZSB8fCAnJ31cbiAgICAgICAgICAgIGVycm9yPXtlcnJvciAmJiBlcnJvcltkYXRhLmluZGV4XSAmJiBlcnJvcltkYXRhLmluZGV4XVswXX1cbiAgICAgICAgICAvPlxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAobi50eXBlID09PSAnZHJhZ19pbl90aGVfYmxhbmsnKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBuLmRhdGEudG9KU09OKCk7XG5cbiAgICAgICAgcmV0dXJuIDxEcmFnSW5UaGVCbGFuayBhdHRyaWJ1dGVzPXthdHRyaWJ1dGVzfSBkYXRhPXtkYXRhfSBuPXtufSBub2RlUHJvcHM9e3Byb3BzfSBvcHRzPXtvcHRzfSAvPjtcbiAgICAgIH1cblxuICAgICAgaWYgKG4udHlwZSA9PT0gJ2lubGluZV9kcm9wZG93bicpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IG4uZGF0YS50b0pTT04oKTtcblxuICAgICAgICByZXR1cm4gPElubGluZURyb3Bkb3duIGF0dHJpYnV0ZXM9e2F0dHJpYnV0ZXN9IHNlbGVjdGVkSXRlbT17ZGF0YS52YWx1ZX0gLz47XG4gICAgICB9XG4gICAgfSxcbiAgICBvbkNoYW5nZShjaGFuZ2UsIGVkaXRvcikge1xuICAgICAgY29uc3QgdHlwZSA9IG9wdHMudHlwZS5yZXBsYWNlKC8tL2csICdfJyk7XG5cbiAgICAgIGlmIChpc1VuZGVmaW5lZChsYXN0SW5kZXhNYXBbdHlwZV0pKSB7XG4gICAgICAgIGxhc3RJbmRleE1hcFt0eXBlXSA9IDA7XG5cbiAgICAgICAgY2hhbmdlLnZhbHVlLmRvY3VtZW50LmZvckVhY2hEZXNjZW5kYW50KChkKSA9PiB7XG4gICAgICAgICAgaWYgKGQudHlwZSA9PT0gdHlwZSkge1xuICAgICAgICAgICAgY29uc3QgbmV3SW5kZXggPSBwYXJzZUludChkLmRhdGEuZ2V0KCdpbmRleCcpLCAxMCk7XG5cbiAgICAgICAgICAgIGlmIChuZXdJbmRleCA+IGxhc3RJbmRleE1hcFt0eXBlXSkge1xuICAgICAgICAgICAgICBsYXN0SW5kZXhNYXBbdHlwZV0gPSBuZXdJbmRleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWVkaXRvci52YWx1ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGN1cnJlbnRSZXNwQXJlYUxpc3QgPSBjaGFuZ2UudmFsdWUuZG9jdW1lbnQuZmlsdGVyRGVzY2VuZGFudHMoaXNPZkN1cnJlbnRUeXBlKTtcbiAgICAgIGNvbnN0IG9sZFJlc3BBcmVhTGlzdCA9IGVkaXRvci52YWx1ZS5kb2N1bWVudC5maWx0ZXJEZXNjZW5kYW50cyhpc09mQ3VycmVudFR5cGUpO1xuXG4gICAgICB0b29sYmFyLmRpc2FibGVkID0gY3VycmVudFJlc3BBcmVhTGlzdC5zaXplID49IG9wdHMubWF4UmVzcG9uc2VBcmVhcztcblxuICAgICAgY29uc3QgYXJyYXlUb0ZpbHRlciA9IG9sZFJlc3BBcmVhTGlzdC5zaXplID4gY3VycmVudFJlc3BBcmVhTGlzdC5zaXplID8gb2xkUmVzcEFyZWFMaXN0IDogY3VycmVudFJlc3BBcmVhTGlzdDtcbiAgICAgIGNvbnN0IGFycmF5VG9Vc2VGb3JGaWx0ZXIgPSBhcnJheVRvRmlsdGVyID09PSBvbGRSZXNwQXJlYUxpc3QgPyBjdXJyZW50UmVzcEFyZWFMaXN0IDogb2xkUmVzcEFyZWFMaXN0O1xuXG4gICAgICBjb25zdCBlbGVtZW50c1dpdGhDaGFuZ2VkU3RhdHVzID0gYXJyYXlUb0ZpbHRlci5maWx0ZXIoXG4gICAgICAgIChkKSA9PiAhYXJyYXlUb1VzZUZvckZpbHRlci5maW5kKChlKSA9PiBlLmRhdGEuZ2V0KCdpbmRleCcpID09PSBkLmRhdGEuZ2V0KCdpbmRleCcpKSxcbiAgICAgICk7XG5cbiAgICAgIGlmIChlbGVtZW50c1dpdGhDaGFuZ2VkU3RhdHVzLnNpemUgJiYgb2xkUmVzcEFyZWFMaXN0LnNpemUgPiBjdXJyZW50UmVzcEFyZWFMaXN0LnNpemUpIHtcbiAgICAgICAgb3B0cy5vbkhhbmRsZUFyZWFDaGFuZ2UoZWxlbWVudHNXaXRoQ2hhbmdlZFN0YXR1cyk7XG4gICAgICB9XG4gICAgfSxcbiAgICBvbkRyb3AoZXZlbnQsIGNoYW5nZSwgZWRpdG9yKSB7XG4gICAgICBjb25zdCBjbG9zZXN0RWwgPSBldmVudC50YXJnZXQuY2xvc2VzdCgnW2RhdGEta2V5XScpO1xuICAgICAgY29uc3QgaW5saW5lID0gZWRpdG9yLnZhbHVlLmRvY3VtZW50LmZpbmREZXNjZW5kYW50KChkKSA9PiBkLmtleSA9PT0gY2xvc2VzdEVsLmRhdGFzZXQua2V5KTtcblxuICAgICAgaWYgKGlubGluZS50eXBlID09PSAnZHJhZ19pbl90aGVfYmxhbmsnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9LFxuICB9O1xufVxuXG5leHBvcnQgY29uc3Qgc2VyaWFsaXphdGlvbiA9IHtcbiAgZGVzZXJpYWxpemUoZWwpIHtcbiAgICBjb25zdCB0eXBlID0gZWwuZGF0YXNldCAmJiBlbC5kYXRhc2V0LnR5cGU7XG5cbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgJ2lubGluZV9kcm9wZG93bic6XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgb2JqZWN0OiAnaW5saW5lJyxcbiAgICAgICAgICB0eXBlOiAnaW5saW5lX2Ryb3Bkb3duJyxcbiAgICAgICAgICBpc1ZvaWQ6IHRydWUsXG4gICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgaW5kZXg6IGVsLmRhdGFzZXQuaW5kZXgsXG4gICAgICAgICAgICB2YWx1ZTogZWwuZGF0YXNldC52YWx1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgY2FzZSAnZXhwbGljaXRfY29uc3RydWN0ZWRfcmVzcG9uc2UnOlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG9iamVjdDogJ2lubGluZScsXG4gICAgICAgICAgdHlwZTogJ2V4cGxpY2l0X2NvbnN0cnVjdGVkX3Jlc3BvbnNlJyxcbiAgICAgICAgICBpc1ZvaWQ6IHRydWUsXG4gICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgaW5kZXg6IGVsLmRhdGFzZXQuaW5kZXgsXG4gICAgICAgICAgICB2YWx1ZTogZWwuZGF0YXNldC52YWx1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgY2FzZSAnbWF0aF90ZW1wbGF0ZWQnOlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG9iamVjdDogJ2lubGluZScsXG4gICAgICAgICAgdHlwZTogJ21hdGhfdGVtcGxhdGVkJyxcbiAgICAgICAgICBpc1ZvaWQ6IHRydWUsXG4gICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgaW5kZXg6IGVsLmRhdGFzZXQuaW5kZXgsXG4gICAgICAgICAgICB2YWx1ZTogZWwuZGF0YXNldC52YWx1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgY2FzZSAnZHJhZ19pbl90aGVfYmxhbmsnOlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG9iamVjdDogJ2lubGluZScsXG4gICAgICAgICAgdHlwZTogJ2RyYWdfaW5fdGhlX2JsYW5rJyxcbiAgICAgICAgICBpc1ZvaWQ6IHRydWUsXG4gICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgaW5kZXg6IGVsLmRhdGFzZXQuaW5kZXgsXG4gICAgICAgICAgICBpZDogZWwuZGF0YXNldC5pZCxcbiAgICAgICAgICAgIHZhbHVlOiBlbC5kYXRhc2V0LnZhbHVlLFxuICAgICAgICAgICAgaW5UYWJsZTogZWwuZGF0YXNldC5pblRhYmxlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgfVxuICB9LFxuICBzZXJpYWxpemUob2JqZWN0KSB7XG4gICAgaWYgKG9iamVjdC5vYmplY3QgIT09ICdpbmxpbmUnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc3dpdGNoIChvYmplY3QudHlwZSkge1xuICAgICAgY2FzZSAnaW5saW5lX2Ryb3Bkb3duJzoge1xuICAgICAgICBjb25zdCBkYXRhID0gb2JqZWN0LmRhdGEudG9KU09OKCk7XG5cbiAgICAgICAgcmV0dXJuIDxzcGFuIGRhdGEtdHlwZT1cImlubGluZV9kcm9wZG93blwiIGRhdGEtaW5kZXg9e2RhdGEuaW5kZXh9IGRhdGEtdmFsdWU9e2RhdGEudmFsdWV9IC8+O1xuICAgICAgfVxuICAgICAgY2FzZSAnZXhwbGljaXRfY29uc3RydWN0ZWRfcmVzcG9uc2UnOiB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBvYmplY3QuZGF0YS50b0pTT04oKTtcblxuICAgICAgICByZXR1cm4gPHNwYW4gZGF0YS10eXBlPVwiZXhwbGljaXRfY29uc3RydWN0ZWRfcmVzcG9uc2VcIiBkYXRhLWluZGV4PXtkYXRhLmluZGV4fSBkYXRhLXZhbHVlPXtkYXRhLnZhbHVlfSAvPjtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ21hdGhfdGVtcGxhdGVkJzoge1xuICAgICAgICBjb25zdCBkYXRhID0gb2JqZWN0LmRhdGEudG9KU09OKCk7XG5cbiAgICAgICAgcmV0dXJuIDxzcGFuIGRhdGEtdHlwZT1cIm1hdGhfdGVtcGxhdGVkXCIgZGF0YS1pbmRleD17ZGF0YS5pbmRleH0gZGF0YS12YWx1ZT17ZGF0YS52YWx1ZX0gLz47XG4gICAgICB9XG4gICAgICBjYXNlICdkcmFnX2luX3RoZV9ibGFuayc6IHtcbiAgICAgICAgY29uc3QgZGF0YSA9IG9iamVjdC5kYXRhLnRvSlNPTigpO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIGRhdGEtdHlwZT1cImRyYWdfaW5fdGhlX2JsYW5rXCJcbiAgICAgICAgICAgIGRhdGEtaW5kZXg9e2RhdGEuaW5kZXh9XG4gICAgICAgICAgICBkYXRhLWlkPXtkYXRhLmlkfVxuICAgICAgICAgICAgZGF0YS12YWx1ZT17ZGF0YS52YWx1ZX1cbiAgICAgICAgICAgIGRhdGEtaW4tdGFibGU9e2RhdGEuaW5UYWJsZX1cbiAgICAgICAgICAvPlxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbn07XG4iXX0=
@@ -0,0 +1,126 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ var _typeof = require("@babel/runtime/helpers/typeof");
6
+
7
+ Object.defineProperty(exports, "__esModule", {
8
+ value: true
9
+ });
10
+ exports["default"] = void 0;
11
+
12
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
13
+
14
+ var _react = _interopRequireWildcard(require("react"));
15
+
16
+ var _propTypes = _interopRequireDefault(require("prop-types"));
17
+
18
+ var _react2 = require("@tiptap/react");
19
+
20
+ var _icons = require("../icons");
21
+
22
+ 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); }
23
+
24
+ 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; }
25
+
26
+ var InlineDropdown = function InlineDropdown(props) {
27
+ var editor = props.editor,
28
+ node = props.node,
29
+ getPos = props.getPos,
30
+ options = props.options,
31
+ selected = props.selected;
32
+ var attributes = node.attrs;
33
+ var value = attributes.value,
34
+ error = attributes.error; // TODO: Investigate
35
+ // Needed because items with values inside have different positioning for some reason
36
+
37
+ var html = value || '<div>&nbsp</div>';
38
+ var toolbarRef = (0, _react.useRef)(null);
39
+
40
+ var _useState = (0, _react.useState)(false),
41
+ _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
42
+ showToolbar = _useState2[0],
43
+ setShowToolbar = _useState2[1];
44
+
45
+ var InlineDropdownToolbar = options.respAreaToolbar(node, editor, function () {});
46
+ (0, _react.useEffect)(function () {
47
+ setShowToolbar(selected);
48
+ }, [selected]);
49
+ (0, _react.useEffect)(function () {
50
+ var handleClickOutside = function handleClickOutside(event) {
51
+ if (toolbarRef.current && !toolbarRef.current.contains(event.target) && !event.target.closest('[data-inline-node]')) {
52
+ setShowToolbar(false);
53
+ }
54
+ };
55
+
56
+ if (showToolbar) {
57
+ document.addEventListener('mousedown', handleClickOutside);
58
+ } else {
59
+ document.removeEventListener('mousedown', handleClickOutside);
60
+ }
61
+
62
+ return function () {
63
+ return document.removeEventListener('mousedown', handleClickOutside);
64
+ };
65
+ }, [showToolbar]);
66
+ return /*#__PURE__*/_react["default"].createElement(_react2.NodeViewWrapper, {
67
+ className: "inline-dropdown",
68
+ "data-selected": selected,
69
+ style: {
70
+ display: 'inline-flex',
71
+ height: '50px',
72
+ margin: '0 5px',
73
+ cursor: 'pointer'
74
+ }
75
+ }, /*#__PURE__*/_react["default"].createElement("div", {
76
+ style: {
77
+ display: 'inline-flex',
78
+ minWidth: '178px',
79
+ height: '36px',
80
+ background: '#FFF',
81
+ border: '1px solid #C0C3CF',
82
+ boxSizing: 'border-box',
83
+ borderRadius: '3px',
84
+ margin: '0 4px',
85
+ position: 'relative',
86
+ alignItems: 'center'
87
+ }
88
+ }, /*#__PURE__*/_react["default"].createElement("div", {
89
+ style: {
90
+ flex: 1,
91
+ overflow: 'hidden',
92
+ padding: '0 25px 0 8px',
93
+ whiteSpace: 'nowrap',
94
+ textOverflow: 'ellipsis'
95
+ }
96
+ }, /*#__PURE__*/_react["default"].createElement("span", {
97
+ style: {
98
+ display: 'inline-block',
99
+ verticalAlign: 'middle'
100
+ },
101
+ dangerouslySetInnerHTML: {
102
+ __html: html
103
+ }
104
+ })), /*#__PURE__*/_react["default"].createElement(_icons.Chevron, {
105
+ direction: "down",
106
+ style: {
107
+ position: 'absolute',
108
+ top: '5px',
109
+ right: '5px'
110
+ }
111
+ })), showToolbar && /*#__PURE__*/_react["default"].createElement("div", {
112
+ ref: toolbarRef,
113
+ className: "absolute z-50 bg-white shadow-lg rounded p-2",
114
+ style: {
115
+ zIndex: 1
116
+ }
117
+ }, /*#__PURE__*/_react["default"].createElement(InlineDropdownToolbar, null)));
118
+ };
119
+
120
+ InlineDropdown.propTypes = {
121
+ attributes: _propTypes["default"].object,
122
+ selectedItem: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].object])
123
+ };
124
+ var _default = InlineDropdown;
125
+ exports["default"] = _default;
126
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9wbHVnaW5zL3Jlc3BBcmVhL2lubGluZS1kcm9wZG93bi9pbmRleC5qc3giXSwibmFtZXMiOlsiSW5saW5lRHJvcGRvd24iLCJwcm9wcyIsImVkaXRvciIsIm5vZGUiLCJnZXRQb3MiLCJvcHRpb25zIiwic2VsZWN0ZWQiLCJhdHRyaWJ1dGVzIiwiYXR0cnMiLCJ2YWx1ZSIsImVycm9yIiwiaHRtbCIsInRvb2xiYXJSZWYiLCJzaG93VG9vbGJhciIsInNldFNob3dUb29sYmFyIiwiSW5saW5lRHJvcGRvd25Ub29sYmFyIiwicmVzcEFyZWFUb29sYmFyIiwiaGFuZGxlQ2xpY2tPdXRzaWRlIiwiZXZlbnQiLCJjdXJyZW50IiwiY29udGFpbnMiLCJ0YXJnZXQiLCJjbG9zZXN0IiwiZG9jdW1lbnQiLCJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImRpc3BsYXkiLCJoZWlnaHQiLCJtYXJnaW4iLCJjdXJzb3IiLCJtaW5XaWR0aCIsImJhY2tncm91bmQiLCJib3JkZXIiLCJib3hTaXppbmciLCJib3JkZXJSYWRpdXMiLCJwb3NpdGlvbiIsImFsaWduSXRlbXMiLCJmbGV4Iiwib3ZlcmZsb3ciLCJwYWRkaW5nIiwid2hpdGVTcGFjZSIsInRleHRPdmVyZmxvdyIsInZlcnRpY2FsQWxpZ24iLCJfX2h0bWwiLCJ0b3AiLCJyaWdodCIsInpJbmRleCIsInByb3BUeXBlcyIsIlByb3BUeXBlcyIsIm9iamVjdCIsInNlbGVjdGVkSXRlbSIsIm9uZU9mVHlwZSIsInN0cmluZyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOzs7Ozs7QUFFQSxJQUFNQSxjQUFjLEdBQUcsU0FBakJBLGNBQWlCLENBQUNDLEtBQUQsRUFBVztBQUNoQyxNQUFRQyxNQUFSLEdBQW9ERCxLQUFwRCxDQUFRQyxNQUFSO0FBQUEsTUFBZ0JDLElBQWhCLEdBQW9ERixLQUFwRCxDQUFnQkUsSUFBaEI7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VCxrQkFTRTtBQUNFLElBQUEsS0FBSyxFQUFFO0FBQ0xmLE1BQUFBLE9BQU8sRUFBRSxjQURKO0FBRUxnQixNQUFBQSxhQUFhLEVBQUU7QUFGVixLQURUO0FBS0UsSUFBQSx1QkFBdUIsRUFBRTtBQUN2QkMsTUFBQUEsTUFBTSxFQUFFaEM7QUFEZTtBQUwzQixJQVRGLENBZEYsZUFpQ0UsZ0NBQUMsY0FBRDtBQUNFLElBQUEsU0FBUyxFQUFDLE1BRFo7QUFFRSxJQUFBLEtBQUssRUFBRTtBQUNMd0IsTUFBQUEsUUFBUSxFQUFFLFVBREw7QUFFTFMsTUFBQUEsR0FBRyxFQUFFLEtBRkE7QUFHTEMsTUFBQUEsS0FBSyxFQUFFO0FBSEY7QUFGVCxJQWpDRixDQVZGLEVBb0RHaEMsV0FBVyxpQkFDVjtBQUFLLElBQUEsR0FBRyxFQUFFRCxVQUFWO0FBQXNCLElBQUEsU0FBUyxFQUFDLDhDQUFoQztBQUErRSxJQUFBLEtBQUssRUFBRTtBQUFFa0MsTUFBQUEsTUFBTSxFQUFFO0FBQVY7QUFBdEYsa0JBQ0UsZ0NBQUMscUJBQUQsT0FERixDQXJESixDQURGO0FBNERELENBL0ZEOztBQWlHQTlDLGNBQWMsQ0FBQytDLFNBQWYsR0FBMkI7QUFDekJ4QyxFQUFBQSxVQUFVLEVBQUV5QyxzQkFBVUMsTUFERztBQUV6QkMsRUFBQUEsWUFBWSxFQUFFRixzQkFBVUcsU0FBVixDQUFvQixDQUFDSCxzQkFBVUksTUFBWCxFQUFtQkosc0JBQVVDLE1BQTdCLENBQXBCO0FBRlcsQ0FBM0I7ZUFLZWpELGMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgTm9kZVZpZXdXcmFwcGVyIH0gZnJvbSAnQHRpcHRhcC9yZWFjdCc7XG5pbXBvcnQgeyBDaGV2cm9uIH0gZnJvbSAnLi4vaWNvbnMnO1xuXG5jb25zdCBJbmxpbmVEcm9wZG93biA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7IGVkaXRvciwgbm9kZSwgZ2V0UG9zLCBvcHRpb25zLCBzZWxlY3RlZCB9ID0gcHJvcHM7XG4gIGNvbnN0IHsgYXR0cnM6IGF0dHJpYnV0ZXMgfSA9IG5vZGU7XG4gIGNvbnN0IHsgdmFsdWUsIGVycm9yIH0gPSBhdHRyaWJ1dGVzO1xuICAvLyBUT0RPOiBJbnZlc3RpZ2F0ZVxuICAvLyBOZWVkZWQgYmVjYXVzZSBpdGVtcyB3aXRoIHZhbHVlcyBpbnNpZGUgaGF2ZSBkaWZmZXJlbnQgcG9zaXRpb25pbmcgZm9yIHNvbWUgcmVhc29uXG4gIGNvbnN0IGh0bWwgPSB2YWx1ZSB8fCAnPGRpdj4mbmJzcDwvZGl2Pic7XG4gIGNvbnN0IHRvb2xiYXJSZWYgPSB1c2VSZWYobnVsbCk7XG4gIGNvbnN0IFtzaG93VG9vbGJhciwgc2V0U2hvd1Rvb2xiYXJdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBJbmxpbmVEcm9wZG93blRvb2xiYXIgPSBvcHRpb25zLnJlc3BBcmVhVG9vbGJhcihub2RlLCBlZGl0b3IsICgpID0+IHt9KTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNldFNob3dUb29sYmFyKHNlbGVjdGVkKTtcbiAgfSwgW3NlbGVjdGVkXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBoYW5kbGVDbGlja091dHNpZGUgPSAoZXZlbnQpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgdG9vbGJhclJlZi5jdXJyZW50ICYmXG4gICAgICAgICF0b29sYmFyUmVmLmN1cnJlbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSAmJlxuICAgICAgICAhZXZlbnQudGFyZ2V0LmNsb3Nlc3QoJ1tkYXRhLWlubGluZS1ub2RlXScpXG4gICAgICApIHtcbiAgICAgICAgc2V0U2hvd1Rvb2xiYXIoZmFsc2UpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAoc2hvd1Rvb2xiYXIpIHtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGhhbmRsZUNsaWNrT3V0c2lkZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGhhbmRsZUNsaWNrT3V0c2lkZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuICgpID0+IGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGhhbmRsZUNsaWNrT3V0c2lkZSk7XG4gIH0sIFtzaG93VG9vbGJhcl0pO1xuXG4gIHJldHVybiAoXG4gICAgPE5vZGVWaWV3V3JhcHBlclxuICAgICAgY2xhc3NOYW1lPVwiaW5saW5lLWRyb3Bkb3duXCJcbiAgICAgIGRhdGEtc2VsZWN0ZWQ9e3NlbGVjdGVkfVxuICAgICAgc3R5bGU9e3tcbiAgICAgICAgZGlzcGxheTogJ2lubGluZS1mbGV4JyxcbiAgICAgICAgaGVpZ2h0OiAnNTBweCcsXG4gICAgICAgIG1hcmdpbjogJzAgNXB4JyxcbiAgICAgICAgY3Vyc29yOiAncG9pbnRlcicsXG4gICAgICB9fVxuICAgID5cbiAgICAgIDxkaXZcbiAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICBkaXNwbGF5OiAnaW5saW5lLWZsZXgnLFxuICAgICAgICAgIG1pbldpZHRoOiAnMTc4cHgnLFxuICAgICAgICAgIGhlaWdodDogJzM2cHgnLFxuICAgICAgICAgIGJhY2tncm91bmQ6ICcjRkZGJyxcbiAgICAgICAgICBib3JkZXI6ICcxcHggc29saWQgI0MwQzNDRicsXG4gICAgICAgICAgYm94U2l6aW5nOiAnYm9yZGVyLWJveCcsXG4gICAgICAgICAgYm9yZGVyUmFkaXVzOiAnM3B4JyxcbiAgICAgICAgICBtYXJnaW46ICcwIDRweCcsXG4gICAgICAgICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgZmxleDogMSxcbiAgICAgICAgICAgIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgICAgICAgICAgIHBhZGRpbmc6ICcwIDI1cHggMCA4cHgnLFxuICAgICAgICAgICAgd2hpdGVTcGFjZTogJ25vd3JhcCcsXG4gICAgICAgICAgICB0ZXh0T3ZlcmZsb3c6ICdlbGxpcHNpcycsXG4gICAgICAgICAgfX1cbiAgICAgICAgPlxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICBkaXNwbGF5OiAnaW5saW5lLWJsb2NrJyxcbiAgICAgICAgICAgICAgdmVydGljYWxBbGlnbjogJ21pZGRsZScsXG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw9e3tcbiAgICAgICAgICAgICAgX19odG1sOiBodG1sLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPENoZXZyb25cbiAgICAgICAgICBkaXJlY3Rpb249XCJkb3duXCJcbiAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgICB0b3A6ICc1cHgnLFxuICAgICAgICAgICAgcmlnaHQ6ICc1cHgnLFxuICAgICAgICAgIH19XG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICAgIHtzaG93VG9vbGJhciAmJiAoXG4gICAgICAgIDxkaXYgcmVmPXt0b29sYmFyUmVmfSBjbGFzc05hbWU9XCJhYnNvbHV0ZSB6LTUwIGJnLXdoaXRlIHNoYWRvdy1sZyByb3VuZGVkIHAtMlwiIHN0eWxlPXt7IHpJbmRleDogMSB9fT5cbiAgICAgICAgICA8SW5saW5lRHJvcGRvd25Ub29sYmFyIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICA8L05vZGVWaWV3V3JhcHBlcj5cbiAgKTtcbn07XG5cbklubGluZURyb3Bkb3duLnByb3BUeXBlcyA9IHtcbiAgYXR0cmlidXRlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgc2VsZWN0ZWRJdGVtOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMub2JqZWN0XSksXG59O1xuXG5leHBvcnQgZGVmYXVsdCBJbmxpbmVEcm9wZG93bjtcbiJdfQ==