@payloadcms/richtext-lexical 0.1.16 → 0.2.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 (72) hide show
  1. package/dist/cell/index.d.ts.map +1 -1
  2. package/dist/cell/index.js +2 -6
  3. package/dist/field/Field.d.ts.map +1 -1
  4. package/dist/field/Field.js +2 -2
  5. package/dist/field/features/Blocks/component/BlockContent.d.ts +3 -2
  6. package/dist/field/features/Blocks/component/BlockContent.d.ts.map +1 -1
  7. package/dist/field/features/Blocks/component/BlockContent.js +48 -28
  8. package/dist/field/features/Blocks/component/FormSavePlugin.d.ts +4 -6
  9. package/dist/field/features/Blocks/component/FormSavePlugin.d.ts.map +1 -1
  10. package/dist/field/features/Blocks/component/FormSavePlugin.js +5 -6
  11. package/dist/field/features/Blocks/component/index.d.ts +5 -4
  12. package/dist/field/features/Blocks/component/index.d.ts.map +1 -1
  13. package/dist/field/features/Blocks/component/index.js +33 -22
  14. package/dist/field/features/Blocks/drawer/index.d.ts.map +1 -1
  15. package/dist/field/features/Blocks/drawer/index.js +7 -9
  16. package/dist/field/features/Blocks/index.d.ts.map +1 -1
  17. package/dist/field/features/Blocks/index.js +11 -22
  18. package/dist/field/features/Blocks/nodes/BlocksNode.d.ts +5 -7
  19. package/dist/field/features/Blocks/nodes/BlocksNode.d.ts.map +1 -1
  20. package/dist/field/features/Blocks/nodes/BlocksNode.js +31 -10
  21. package/dist/field/features/Blocks/plugin/index.d.ts +1 -1
  22. package/dist/field/features/Blocks/plugin/index.d.ts.map +1 -1
  23. package/dist/field/features/Blocks/plugin/index.js +1 -1
  24. package/dist/field/features/Blocks/populationPromise.js +2 -2
  25. package/dist/field/features/Blocks/utils/transformInputFormData.d.ts +11 -0
  26. package/dist/field/features/Blocks/utils/transformInputFormData.d.ts.map +1 -0
  27. package/dist/field/features/Blocks/utils/transformInputFormData.js +35 -0
  28. package/dist/field/features/Blocks/utils/transformInputFormSchema.d.ts +3 -0
  29. package/dist/field/features/Blocks/utils/transformInputFormSchema.d.ts.map +1 -0
  30. package/dist/field/features/Blocks/utils/transformInputFormSchema.js +43 -0
  31. package/dist/field/features/Blocks/validate.d.ts.map +1 -1
  32. package/dist/field/features/Blocks/validate.js +11 -4
  33. package/dist/field/features/Link/plugins/autoLink/index.d.ts.map +1 -1
  34. package/dist/field/features/Link/plugins/autoLink/index.js +142 -32
  35. package/dist/field/features/Relationship/nodes/RelationshipNode.js +2 -2
  36. package/dist/field/features/converters/html/field/index.d.ts +17 -1
  37. package/dist/field/features/converters/html/field/index.d.ts.map +1 -1
  38. package/dist/field/features/converters/html/field/index.js +57 -18
  39. package/dist/field/features/debug/TestRecorder/index.d.ts +3 -0
  40. package/dist/field/features/debug/TestRecorder/index.d.ts.map +1 -0
  41. package/dist/field/features/debug/TestRecorder/index.js +29 -0
  42. package/dist/field/features/debug/TestRecorder/plugin/index.d.ts +5 -0
  43. package/dist/field/features/debug/TestRecorder/plugin/index.d.ts.map +1 -0
  44. package/dist/field/features/debug/TestRecorder/plugin/index.js +498 -0
  45. package/dist/field/features/debug/TestRecorder/plugin/index.scss +51 -0
  46. package/dist/field/features/debug/TreeView/index.js +2 -2
  47. package/dist/field/features/types.d.ts +16 -0
  48. package/dist/field/features/types.d.ts.map +1 -1
  49. package/dist/field/lexical/LexicalEditor.d.ts.map +1 -1
  50. package/dist/field/lexical/LexicalEditor.js +14 -2
  51. package/dist/field/lexical/plugins/FloatingSelectToolbar/ToolbarButton/index.d.ts.map +1 -1
  52. package/dist/field/lexical/plugins/FloatingSelectToolbar/ToolbarButton/index.js +7 -1
  53. package/dist/field/lexical/plugins/FloatingSelectToolbar/ToolbarDropdown/DropDown.d.ts.map +1 -1
  54. package/dist/field/lexical/plugins/FloatingSelectToolbar/ToolbarDropdown/DropDown.js +7 -1
  55. package/dist/field/lexical/plugins/FloatingSelectToolbar/index.d.ts.map +1 -1
  56. package/dist/field/lexical/plugins/FloatingSelectToolbar/index.js +2 -2
  57. package/dist/field/lexical/plugins/handles/DraggableBlockPlugin/index.d.ts.map +1 -1
  58. package/dist/field/lexical/plugins/handles/DraggableBlockPlugin/index.js +2 -1
  59. package/dist/field/lexical/ui/ContentEditable.scss +0 -1
  60. package/dist/field/lexical/utils/environment.d.ts +18 -0
  61. package/dist/field/lexical/utils/environment.d.ts.map +1 -0
  62. package/dist/field/lexical/utils/environment.js +58 -0
  63. package/dist/field/lexical/utils/setFloatingElemPosition.d.ts +1 -1
  64. package/dist/field/lexical/utils/setFloatingElemPosition.d.ts.map +1 -1
  65. package/dist/field/lexical/utils/setFloatingElemPosition.js +14 -3
  66. package/dist/field/lexical/utils/setFloatingElemPositionForLinkEditor.d.ts +1 -1
  67. package/dist/field/lexical/utils/setFloatingElemPositionForLinkEditor.d.ts.map +1 -1
  68. package/dist/field/lexical/utils/setFloatingElemPositionForLinkEditor.js +1 -1
  69. package/dist/index.d.ts +2 -0
  70. package/dist/index.d.ts.map +1 -1
  71. package/dist/index.js +89 -1
  72. package/package.json +16 -16
@@ -32,7 +32,7 @@ function createLinkMatcherWithRegExp(regExp, urlTransformer = (text)=>text) {
32
32
  index: match.index,
33
33
  length: match[0].length,
34
34
  text: match[0],
35
- url: urlTransformer(text)
35
+ url: urlTransformer(match[0])
36
36
  };
37
37
  };
38
38
  }
@@ -69,45 +69,139 @@ function isNextNodeValid(node) {
69
69
  }
70
70
  return nextNode === null || (0, _lexical.$isLineBreakNode)(nextNode) || (0, _lexical.$isTextNode)(nextNode) && startsWithSeparator(nextNode.getTextContent());
71
71
  }
72
- function isContentAroundIsValid(matchStart, matchEnd, text, node) {
73
- const contentBeforeIsValid = matchStart > 0 ? isSeparator(text[matchStart - 1]) : isPreviousNodeValid(node);
72
+ function isContentAroundIsValid(matchStart, matchEnd, text, nodes) {
73
+ const contentBeforeIsValid = matchStart > 0 ? isSeparator(text[matchStart - 1]) : isPreviousNodeValid(nodes[0]);
74
74
  if (!contentBeforeIsValid) {
75
75
  return false;
76
76
  }
77
- const contentAfterIsValid = matchEnd < text.length ? isSeparator(text[matchEnd]) : isNextNodeValid(node);
77
+ const contentAfterIsValid = matchEnd < text.length ? isSeparator(text[matchEnd]) : isNextNodeValid(nodes[nodes.length - 1]);
78
78
  return contentAfterIsValid;
79
79
  }
80
- function handleLinkCreation(node, matchers, onChange) {
81
- const nodeText = node.getTextContent();
82
- let text = nodeText;
83
- let invalidMatchEnd = 0;
84
- let remainingTextNode = node;
80
+ function extractMatchingNodes(nodes, startIndex, endIndex) {
81
+ const unmodifiedBeforeNodes = [];
82
+ const matchingNodes = [];
83
+ const unmodifiedAfterNodes = [];
84
+ let matchingOffset = 0;
85
+ let currentOffset = 0;
86
+ const currentNodes = [
87
+ ...nodes
88
+ ];
89
+ while(currentNodes.length > 0){
90
+ const currentNode = currentNodes[0];
91
+ const currentNodeText = currentNode.getTextContent();
92
+ const currentNodeLength = currentNodeText.length;
93
+ const currentNodeStart = currentOffset;
94
+ const currentNodeEnd = currentOffset + currentNodeLength;
95
+ if (currentNodeEnd <= startIndex) {
96
+ unmodifiedBeforeNodes.push(currentNode);
97
+ matchingOffset += currentNodeLength;
98
+ } else if (currentNodeStart >= endIndex) {
99
+ unmodifiedAfterNodes.push(currentNode);
100
+ } else {
101
+ matchingNodes.push(currentNode);
102
+ }
103
+ currentOffset += currentNodeLength;
104
+ currentNodes.shift();
105
+ }
106
+ return [
107
+ matchingOffset,
108
+ unmodifiedBeforeNodes,
109
+ matchingNodes,
110
+ unmodifiedAfterNodes
111
+ ];
112
+ }
113
+ function createAutoLinkNode(nodes, startIndex, endIndex, match) {
114
+ const fields = {
115
+ linkType: 'custom',
116
+ url: match.url,
117
+ ...match.fields
118
+ };
119
+ const linkNode = (0, _AutoLinkNode.$createAutoLinkNode)({
120
+ fields
121
+ });
122
+ if (nodes.length === 1) {
123
+ let remainingTextNode = nodes[0];
124
+ let linkTextNode;
125
+ if (startIndex === 0) {
126
+ [linkTextNode, remainingTextNode] = remainingTextNode.splitText(endIndex);
127
+ } else {
128
+ [, linkTextNode, remainingTextNode] = remainingTextNode.splitText(startIndex, endIndex);
129
+ }
130
+ const textNode = (0, _lexical.$createTextNode)(match.text);
131
+ textNode.setFormat(linkTextNode.getFormat());
132
+ textNode.setDetail(linkTextNode.getDetail());
133
+ linkNode.append(textNode);
134
+ linkTextNode.replace(linkNode);
135
+ return remainingTextNode;
136
+ } else if (nodes.length > 1) {
137
+ const firstTextNode = nodes[0];
138
+ let offset = firstTextNode.getTextContent().length;
139
+ let firstLinkTextNode;
140
+ if (startIndex === 0) {
141
+ firstLinkTextNode = firstTextNode;
142
+ } else {
143
+ [, firstLinkTextNode] = firstTextNode.splitText(startIndex);
144
+ }
145
+ const linkNodes = [];
146
+ let remainingTextNode;
147
+ for(let i = 1; i < nodes.length; i++){
148
+ const currentNode = nodes[i];
149
+ const currentNodeText = currentNode.getTextContent();
150
+ const currentNodeLength = currentNodeText.length;
151
+ const currentNodeStart = offset;
152
+ const currentNodeEnd = offset + currentNodeLength;
153
+ if (currentNodeStart < endIndex) {
154
+ if (currentNodeEnd <= endIndex) {
155
+ linkNodes.push(currentNode);
156
+ } else {
157
+ const [linkTextNode, endNode] = currentNode.splitText(endIndex - currentNodeStart);
158
+ linkNodes.push(linkTextNode);
159
+ remainingTextNode = endNode;
160
+ }
161
+ }
162
+ offset += currentNodeLength;
163
+ }
164
+ const selection = (0, _lexical.$getSelection)();
165
+ const selectedTextNode = selection ? selection.getNodes().find(_lexical.$isTextNode) : undefined;
166
+ const textNode = (0, _lexical.$createTextNode)(firstLinkTextNode.getTextContent());
167
+ textNode.setFormat(firstLinkTextNode.getFormat());
168
+ textNode.setDetail(firstLinkTextNode.getDetail());
169
+ linkNode.append(textNode, ...linkNodes);
170
+ // it does not preserve caret position if caret was at the first text node
171
+ // so we need to restore caret position
172
+ if (selectedTextNode && selectedTextNode === firstLinkTextNode) {
173
+ if ((0, _lexical.$isRangeSelection)(selection)) {
174
+ textNode.select(selection.anchor.offset, selection.focus.offset);
175
+ } else if ((0, _lexical.$isNodeSelection)(selection)) {
176
+ textNode.select(0, textNode.getTextContent().length);
177
+ }
178
+ }
179
+ firstLinkTextNode.replace(linkNode);
180
+ return remainingTextNode;
181
+ }
182
+ return undefined;
183
+ }
184
+ function handleLinkCreation(nodes, matchers, onChange) {
185
+ let currentNodes = [
186
+ ...nodes
187
+ ];
188
+ let text = currentNodes.map((node)=>node.getTextContent()).join('');
85
189
  let match;
190
+ let invalidMatchEnd = 0;
86
191
  while((match = findFirstMatch(text, matchers)) != null && match !== null){
87
192
  const matchStart = match.index;
88
193
  const matchLength = match.length;
89
194
  const matchEnd = matchStart + matchLength;
90
- const isValid = isContentAroundIsValid(invalidMatchEnd + matchStart, invalidMatchEnd + matchEnd, nodeText, node);
195
+ const isValid = isContentAroundIsValid(invalidMatchEnd + matchStart, invalidMatchEnd + matchEnd, text, currentNodes);
91
196
  if (isValid) {
92
- let linkTextNode;
93
- if (invalidMatchEnd + matchStart === 0) {
94
- [linkTextNode, remainingTextNode] = remainingTextNode.splitText(invalidMatchEnd + matchLength);
95
- } else {
96
- [, linkTextNode, remainingTextNode] = remainingTextNode.splitText(invalidMatchEnd + matchStart, invalidMatchEnd + matchStart + matchLength);
97
- }
98
- const fields = {
99
- linkType: 'custom',
100
- url: match.url,
101
- ...match.attributes
102
- };
103
- const linkNode = (0, _AutoLinkNode.$createAutoLinkNode)({
104
- fields
105
- });
106
- const textNode = (0, _lexical.$createTextNode)(match.text);
107
- textNode.setFormat(linkTextNode.getFormat());
108
- textNode.setDetail(linkTextNode.getDetail());
109
- linkNode.append(textNode);
110
- linkTextNode.replace(linkNode);
197
+ const [matchingOffset, , matchingNodes, unmodifiedAfterNodes] = extractMatchingNodes(currentNodes, invalidMatchEnd + matchStart, invalidMatchEnd + matchEnd);
198
+ const actualMatchStart = invalidMatchEnd + matchStart - matchingOffset;
199
+ const actualMatchEnd = invalidMatchEnd + matchEnd - matchingOffset;
200
+ const remainingTextNode = createAutoLinkNode(matchingNodes, actualMatchStart, actualMatchEnd, match);
201
+ currentNodes = remainingTextNode ? [
202
+ remainingTextNode,
203
+ ...unmodifiedAfterNodes
204
+ ] : unmodifiedAfterNodes;
111
205
  onChange(match.url, null);
112
206
  invalidMatchEnd = 0;
113
207
  } else {
@@ -150,7 +244,7 @@ function handleLinkEdit(linkNode, matchers, onChange) {
150
244
  onChange(match.url, url ?? null);
151
245
  }
152
246
  }
153
- // Bad neighbours are edits in neighbor nodes that make AutoLinks incompatible.
247
+ // Bad neighbors are edits in neighbor nodes that make AutoLinks incompatible.
154
248
  // Given the creation preconditions, these can only be simple text nodes.
155
249
  function handleBadNeighbors(textNode, matchers, onChange) {
156
250
  const previousSibling = textNode.getPreviousSibling();
@@ -176,6 +270,21 @@ function replaceWithChildren(node) {
176
270
  node.remove();
177
271
  return children.map((child)=>child.getLatest());
178
272
  }
273
+ function getTextNodesToMatch(textNode) {
274
+ // check if next siblings are simple text nodes till a node contains a space separator
275
+ const textNodesToMatch = [
276
+ textNode
277
+ ];
278
+ let nextSibling = textNode.getNextSibling();
279
+ while(nextSibling !== null && (0, _lexical.$isTextNode)(nextSibling) && nextSibling.isSimpleText()){
280
+ textNodesToMatch.push(nextSibling);
281
+ if (/\s/.test(nextSibling.getTextContent())) {
282
+ break;
283
+ }
284
+ nextSibling = nextSibling.getNextSibling();
285
+ }
286
+ return textNodesToMatch;
287
+ }
179
288
  function useAutoLink(editor, matchers, onChange) {
180
289
  (0, _react.useEffect)(()=>{
181
290
  if (!editor.hasNodes([
@@ -195,7 +304,8 @@ function useAutoLink(editor, matchers, onChange) {
195
304
  handleLinkEdit(parent, matchers, onChangeWrapped);
196
305
  } else if (!(0, _LinkNode.$isLinkNode)(parent)) {
197
306
  if (textNode.isSimpleText() && (startsWithSeparator(textNode.getTextContent()) || !(0, _AutoLinkNode.$isAutoLinkNode)(previous))) {
198
- handleLinkCreation(textNode, matchers, onChangeWrapped);
307
+ const textNodesToMatch = getTextNodesToMatch(textNode);
308
+ handleLinkCreation(textNodesToMatch, matchers, onChangeWrapped);
199
309
  }
200
310
  handleBadNeighbors(textNode, matchers, onChangeWrapped);
201
311
  }
@@ -222,4 +332,4 @@ function AutoLinkPlugin() {
222
332
  return null;
223
333
  }
224
334
 
225
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9maWVsZC9mZWF0dXJlcy9MaW5rL3BsdWdpbnMvYXV0b0xpbmsvaW5kZXgudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50J1xuaW1wb3J0IHR5cGUgeyBFbGVtZW50Tm9kZSwgTGV4aWNhbEVkaXRvciwgTGV4aWNhbE5vZGUgfSBmcm9tICdsZXhpY2FsJ1xuXG5pbXBvcnQgeyB1c2VMZXhpY2FsQ29tcG9zZXJDb250ZXh0IH0gZnJvbSAnQGxleGljYWwvcmVhY3QvTGV4aWNhbENvbXBvc2VyQ29udGV4dCdcbmltcG9ydCB7IG1lcmdlUmVnaXN0ZXIgfSBmcm9tICdAbGV4aWNhbC91dGlscydcbmltcG9ydCB7ICRjcmVhdGVUZXh0Tm9kZSwgJGlzRWxlbWVudE5vZGUsICRpc0xpbmVCcmVha05vZGUsICRpc1RleHROb2RlLCBUZXh0Tm9kZSB9IGZyb20gJ2xleGljYWwnXG5pbXBvcnQgeyB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgaW52YXJpYW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vbGV4aWNhbC91dGlscy9pbnZhcmlhbnQnXG5pbXBvcnQgeyAkY3JlYXRlQXV0b0xpbmtOb2RlLCAkaXNBdXRvTGlua05vZGUsIEF1dG9MaW5rTm9kZSB9IGZyb20gJy4uLy4uL25vZGVzL0F1dG9MaW5rTm9kZSdcbmltcG9ydCB7ICRpc0xpbmtOb2RlLCB0eXBlIExpbmtGaWVsZHMgfSBmcm9tICcuLi8uLi9ub2Rlcy9MaW5rTm9kZSdcblxudHlwZSBDaGFuZ2VIYW5kbGVyID0gKHVybDogbnVsbCB8IHN0cmluZywgcHJldlVybDogbnVsbCB8IHN0cmluZykgPT4gdm9pZFxuXG5pbnRlcmZhY2UgTGlua01hdGNoZXJSZXN1bHQge1xuICBmaWVsZHM/OiBMaW5rRmllbGRzXG4gIGluZGV4OiBudW1iZXJcbiAgbGVuZ3RoOiBudW1iZXJcbiAgdGV4dDogc3RyaW5nXG4gIHVybDogc3RyaW5nXG59XG5cbmV4cG9ydCB0eXBlIExpbmtNYXRjaGVyID0gKHRleHQ6IHN0cmluZykgPT4gTGlua01hdGNoZXJSZXN1bHQgfCBudWxsXG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVMaW5rTWF0Y2hlcldpdGhSZWdFeHAoXG4gIHJlZ0V4cDogUmVnRXhwLFxuICB1cmxUcmFuc2Zvcm1lcjogKHRleHQ6IHN0cmluZykgPT4gc3RyaW5nID0gKHRleHQpID0+IHRleHQsXG4pIHtcbiAgcmV0dXJuICh0ZXh0OiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBtYXRjaCA9IHJlZ0V4cC5leGVjKHRleHQpXG4gICAgaWYgKG1hdGNoID09PSBudWxsKSByZXR1cm4gbnVsbFxuICAgIHJldHVybiB7XG4gICAgICBpbmRleDogbWF0Y2guaW5kZXgsXG4gICAgICBsZW5ndGg6IG1hdGNoWzBdLmxlbmd0aCxcbiAgICAgIHRleHQ6IG1hdGNoWzBdLFxuICAgICAgdXJsOiB1cmxUcmFuc2Zvcm1lcih0ZXh0KSxcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZmluZEZpcnN0TWF0Y2godGV4dDogc3RyaW5nLCBtYXRjaGVyczogTGlua01hdGNoZXJbXSk6IExpbmtNYXRjaGVyUmVzdWx0IHwgbnVsbCB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbWF0Y2hlcnMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBtYXRjaCA9IG1hdGNoZXJzW2ldKHRleHQpXG5cbiAgICBpZiAobWF0Y2ggIT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG1hdGNoXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGxcbn1cblxuY29uc3QgUFVOQ1RVQVRJT05fT1JfU1BBQ0UgPSAvWy4sO1xcc10vXG5cbmZ1bmN0aW9uIGlzU2VwYXJhdG9yKGNoYXI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gUFVOQ1RVQVRJT05fT1JfU1BBQ0UudGVzdChjaGFyKVxufVxuXG5mdW5jdGlvbiBlbmRzV2l0aFNlcGFyYXRvcih0ZXh0Q29udGVudDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBpc1NlcGFyYXRvcih0ZXh0Q29udGVudFt0ZXh0Q29udGVudC5sZW5ndGggLSAxXSlcbn1cblxuZnVuY3Rpb24gc3RhcnRzV2l0aFNlcGFyYXRvcih0ZXh0Q29udGVudDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBpc1NlcGFyYXRvcih0ZXh0Q29udGVudFswXSlcbn1cblxuZnVuY3Rpb24gaXNQcmV2aW91c05vZGVWYWxpZChub2RlOiBMZXhpY2FsTm9kZSk6IGJvb2xlYW4ge1xuICBsZXQgcHJldmlvdXNOb2RlID0gbm9kZS5nZXRQcmV2aW91c1NpYmxpbmcoKVxuICBpZiAoJGlzRWxlbWVudE5vZGUocHJldmlvdXNOb2RlKSkge1xuICAgIHByZXZpb3VzTm9kZSA9IHByZXZpb3VzTm9kZS5nZXRMYXN0RGVzY2VuZGFudCgpXG4gIH1cbiAgcmV0dXJuIChcbiAgICBwcmV2aW91c05vZGUgPT09IG51bGwgfHxcbiAgICAkaXNMaW5lQnJlYWtOb2RlKHByZXZpb3VzTm9kZSkgfHxcbiAgICAoJGlzVGV4dE5vZGUocHJldmlvdXNOb2RlKSAmJiBlbmRzV2l0aFNlcGFyYXRvcihwcmV2aW91c05vZGUuZ2V0VGV4dENvbnRlbnQoKSkpXG4gIClcbn1cblxuZnVuY3Rpb24gaXNOZXh0Tm9kZVZhbGlkKG5vZGU6IExleGljYWxOb2RlKTogYm9vbGVhbiB7XG4gIGxldCBuZXh0Tm9kZSA9IG5vZGUuZ2V0TmV4dFNpYmxpbmcoKVxuICBpZiAoJGlzRWxlbWVudE5vZGUobmV4dE5vZGUpKSB7XG4gICAgbmV4dE5vZGUgPSBuZXh0Tm9kZS5nZXRGaXJzdERlc2NlbmRhbnQoKVxuICB9XG4gIHJldHVybiAoXG4gICAgbmV4dE5vZGUgPT09IG51bGwgfHxcbiAgICAkaXNMaW5lQnJlYWtOb2RlKG5leHROb2RlKSB8fFxuICAgICgkaXNUZXh0Tm9kZShuZXh0Tm9kZSkgJiYgc3RhcnRzV2l0aFNlcGFyYXRvcihuZXh0Tm9kZS5nZXRUZXh0Q29udGVudCgpKSlcbiAgKVxufVxuXG5mdW5jdGlvbiBpc0NvbnRlbnRBcm91bmRJc1ZhbGlkKFxuICBtYXRjaFN0YXJ0OiBudW1iZXIsXG4gIG1hdGNoRW5kOiBudW1iZXIsXG4gIHRleHQ6IHN0cmluZyxcbiAgbm9kZTogVGV4dE5vZGUsXG4pOiBib29sZWFuIHtcbiAgY29uc3QgY29udGVudEJlZm9yZUlzVmFsaWQgPVxuICAgIG1hdGNoU3RhcnQgPiAwID8gaXNTZXBhcmF0b3IodGV4dFttYXRjaFN0YXJ0IC0gMV0pIDogaXNQcmV2aW91c05vZGVWYWxpZChub2RlKVxuICBpZiAoIWNvbnRlbnRCZWZvcmVJc1ZhbGlkKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBjb25zdCBjb250ZW50QWZ0ZXJJc1ZhbGlkID1cbiAgICBtYXRjaEVuZCA8IHRleHQubGVuZ3RoID8gaXNTZXBhcmF0b3IodGV4dFttYXRjaEVuZF0pIDogaXNOZXh0Tm9kZVZhbGlkKG5vZGUpXG4gIHJldHVybiBjb250ZW50QWZ0ZXJJc1ZhbGlkXG59XG5cbmZ1bmN0aW9uIGhhbmRsZUxpbmtDcmVhdGlvbihcbiAgbm9kZTogVGV4dE5vZGUsXG4gIG1hdGNoZXJzOiBMaW5rTWF0Y2hlcltdLFxuICBvbkNoYW5nZTogQ2hhbmdlSGFuZGxlcixcbik6IHZvaWQge1xuICBjb25zdCBub2RlVGV4dCA9IG5vZGUuZ2V0VGV4dENvbnRlbnQoKVxuICBsZXQgdGV4dCA9IG5vZGVUZXh0XG4gIGxldCBpbnZhbGlkTWF0Y2hFbmQgPSAwXG4gIGxldCByZW1haW5pbmdUZXh0Tm9kZSA9IG5vZGVcbiAgbGV0IG1hdGNoXG5cbiAgd2hpbGUgKChtYXRjaCA9IGZpbmRGaXJzdE1hdGNoKHRleHQsIG1hdGNoZXJzKSkgIT0gbnVsbCAmJiBtYXRjaCAhPT0gbnVsbCkge1xuICAgIGNvbnN0IG1hdGNoU3RhcnQ6IG51bWJlciA9IG1hdGNoLmluZGV4XG4gICAgY29uc3QgbWF0Y2hMZW5ndGg6IG51bWJlciA9IG1hdGNoLmxlbmd0aFxuICAgIGNvbnN0IG1hdGNoRW5kID0gbWF0Y2hTdGFydCArIG1hdGNoTGVuZ3RoXG4gICAgY29uc3QgaXNWYWxpZCA9IGlzQ29udGVudEFyb3VuZElzVmFsaWQoXG4gICAgICBpbnZhbGlkTWF0Y2hFbmQgKyBtYXRjaFN0YXJ0LFxuICAgICAgaW52YWxpZE1hdGNoRW5kICsgbWF0Y2hFbmQsXG4gICAgICBub2RlVGV4dCxcbiAgICAgIG5vZGUsXG4gICAgKVxuXG4gICAgaWYgKGlzVmFsaWQpIHtcbiAgICAgIGxldCBsaW5rVGV4dE5vZGVcbiAgICAgIGlmIChpbnZhbGlkTWF0Y2hFbmQgKyBtYXRjaFN0YXJ0ID09PSAwKSB7XG4gICAgICAgIDtbbGlua1RleHROb2RlLCByZW1haW5pbmdUZXh0Tm9kZV0gPSByZW1haW5pbmdUZXh0Tm9kZS5zcGxpdFRleHQoXG4gICAgICAgICAgaW52YWxpZE1hdGNoRW5kICsgbWF0Y2hMZW5ndGgsXG4gICAgICAgIClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIDtbLCBsaW5rVGV4dE5vZGUsIHJlbWFpbmluZ1RleHROb2RlXSA9IHJlbWFpbmluZ1RleHROb2RlLnNwbGl0VGV4dChcbiAgICAgICAgICBpbnZhbGlkTWF0Y2hFbmQgKyBtYXRjaFN0YXJ0LFxuICAgICAgICAgIGludmFsaWRNYXRjaEVuZCArIG1hdGNoU3RhcnQgKyBtYXRjaExlbmd0aCxcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgY29uc3QgZmllbGRzOiBMaW5rRmllbGRzID0ge1xuICAgICAgICBsaW5rVHlwZTogJ2N1c3RvbScsXG4gICAgICAgIHVybDogbWF0Y2gudXJsLFxuICAgICAgICAuLi5tYXRjaC5hdHRyaWJ1dGVzLFxuICAgICAgfVxuXG4gICAgICBjb25zdCBsaW5rTm9kZSA9ICRjcmVhdGVBdXRvTGlua05vZGUoeyBmaWVsZHMgfSlcbiAgICAgIGNvbnN0IHRleHROb2RlID0gJGNyZWF0ZVRleHROb2RlKG1hdGNoLnRleHQpXG4gICAgICB0ZXh0Tm9kZS5zZXRGb3JtYXQobGlua1RleHROb2RlLmdldEZvcm1hdCgpKVxuICAgICAgdGV4dE5vZGUuc2V0RGV0YWlsKGxpbmtUZXh0Tm9kZS5nZXREZXRhaWwoKSlcbiAgICAgIGxpbmtOb2RlLmFwcGVuZCh0ZXh0Tm9kZSlcbiAgICAgIGxpbmtUZXh0Tm9kZS5yZXBsYWNlKGxpbmtOb2RlKVxuICAgICAgb25DaGFuZ2UobWF0Y2gudXJsLCBudWxsKVxuICAgICAgaW52YWxpZE1hdGNoRW5kID0gMFxuICAgIH0gZWxzZSB7XG4gICAgICBpbnZhbGlkTWF0Y2hFbmQgKz0gbWF0Y2hFbmRcbiAgICB9XG5cbiAgICB0ZXh0ID0gdGV4dC5zdWJzdHJpbmcobWF0Y2hFbmQpXG4gIH1cbn1cblxuZnVuY3Rpb24gaGFuZGxlTGlua0VkaXQoXG4gIGxpbmtOb2RlOiBBdXRvTGlua05vZGUsXG4gIG1hdGNoZXJzOiBMaW5rTWF0Y2hlcltdLFxuICBvbkNoYW5nZTogQ2hhbmdlSGFuZGxlcixcbik6IHZvaWQge1xuICAvLyBDaGVjayBjaGlsZHJlbiBhcmUgc2ltcGxlIHRleHRcbiAgY29uc3QgY2hpbGRyZW4gPSBsaW5rTm9kZS5nZXRDaGlsZHJlbigpXG4gIGNvbnN0IGNoaWxkcmVuTGVuZ3RoID0gY2hpbGRyZW4ubGVuZ3RoXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgY2hpbGRyZW5MZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGNoaWxkID0gY2hpbGRyZW5baV1cbiAgICBpZiAoISRpc1RleHROb2RlKGNoaWxkKSB8fCAhY2hpbGQuaXNTaW1wbGVUZXh0KCkpIHtcbiAgICAgIHJlcGxhY2VXaXRoQ2hpbGRyZW4obGlua05vZGUpXG4gICAgICBvbkNoYW5nZShudWxsLCBsaW5rTm9kZS5nZXRGaWVsZHMoKT8udXJsID8/IG51bGwpXG4gICAgICByZXR1cm5cbiAgICB9XG4gIH1cblxuICAvLyBDaGVjayB0ZXh0IGNvbnRlbnQgZnVsbHkgbWF0Y2hlc1xuICBjb25zdCB0ZXh0ID0gbGlua05vZGUuZ2V0VGV4dENvbnRlbnQoKVxuICBjb25zdCBtYXRjaCA9IGZpbmRGaXJzdE1hdGNoKHRleHQsIG1hdGNoZXJzKVxuICBpZiAobWF0Y2ggPT09IG51bGwgfHwgbWF0Y2gudGV4dCAhPT0gdGV4dCkge1xuICAgIHJlcGxhY2VXaXRoQ2hpbGRyZW4obGlua05vZGUpXG4gICAgb25DaGFuZ2UobnVsbCwgbGlua05vZGUuZ2V0RmllbGRzKCk/LnVybCA/PyBudWxsKVxuICAgIHJldHVyblxuICB9XG5cbiAgLy8gQ2hlY2sgbmVpZ2hib3JzXG4gIGlmICghaXNQcmV2aW91c05vZGVWYWxpZChsaW5rTm9kZSkgfHwgIWlzTmV4dE5vZGVWYWxpZChsaW5rTm9kZSkpIHtcbiAgICByZXBsYWNlV2l0aENoaWxkcmVuKGxpbmtOb2RlKVxuICAgIG9uQ2hhbmdlKG51bGwsIGxpbmtOb2RlLmdldEZpZWxkcygpPy51cmwgPz8gbnVsbClcbiAgICByZXR1cm5cbiAgfVxuXG4gIGNvbnN0IHVybCA9IGxpbmtOb2RlLmdldEZpZWxkcygpPy51cmxcbiAgaWYgKHVybCAhPT0gbWF0Y2g/LnVybCkge1xuICAgIGNvbnN0IGZsZHMgPSBsaW5rTm9kZS5nZXRGaWVsZHMoKVxuICAgIGZsZHMudXJsID0gbWF0Y2g/LnVybFxuICAgIGxpbmtOb2RlLnNldEZpZWxkcyhmbGRzKVxuICAgIG9uQ2hhbmdlKG1hdGNoLnVybCwgdXJsID8/IG51bGwpXG4gIH1cbn1cblxuLy8gQmFkIG5laWdoYm91cnMgYXJlIGVkaXRzIGluIG5laWdoYm9yIG5vZGVzIHRoYXQgbWFrZSBBdXRvTGlua3MgaW5jb21wYXRpYmxlLlxuLy8gR2l2ZW4gdGhlIGNyZWF0aW9uIHByZWNvbmRpdGlvbnMsIHRoZXNlIGNhbiBvbmx5IGJlIHNpbXBsZSB0ZXh0IG5vZGVzLlxuZnVuY3Rpb24gaGFuZGxlQmFkTmVpZ2hib3JzKFxuICB0ZXh0Tm9kZTogVGV4dE5vZGUsXG4gIG1hdGNoZXJzOiBMaW5rTWF0Y2hlcltdLFxuICBvbkNoYW5nZTogQ2hhbmdlSGFuZGxlcixcbik6IHZvaWQge1xuICBjb25zdCBwcmV2aW91c1NpYmxpbmcgPSB0ZXh0Tm9kZS5nZXRQcmV2aW91c1NpYmxpbmcoKVxuICBjb25zdCBuZXh0U2libGluZyA9IHRleHROb2RlLmdldE5leHRTaWJsaW5nKClcbiAgY29uc3QgdGV4dCA9IHRleHROb2RlLmdldFRleHRDb250ZW50KClcblxuICBpZiAoJGlzQXV0b0xpbmtOb2RlKHByZXZpb3VzU2libGluZykgJiYgIXN0YXJ0c1dpdGhTZXBhcmF0b3IodGV4dCkpIHtcbiAgICBwcmV2aW91c1NpYmxpbmcuYXBwZW5kKHRleHROb2RlKVxuICAgIGhhbmRsZUxpbmtFZGl0KHByZXZpb3VzU2libGluZywgbWF0Y2hlcnMsIG9uQ2hhbmdlKVxuICAgIG9uQ2hhbmdlKG51bGwsIHByZXZpb3VzU2libGluZy5nZXRGaWVsZHMoKT8udXJsID8/IG51bGwpXG4gIH1cblxuICBpZiAoJGlzQXV0b0xpbmtOb2RlKG5leHRTaWJsaW5nKSAmJiAhZW5kc1dpdGhTZXBhcmF0b3IodGV4dCkpIHtcbiAgICByZXBsYWNlV2l0aENoaWxkcmVuKG5leHRTaWJsaW5nKVxuICAgIGhhbmRsZUxpbmtFZGl0KG5leHRTaWJsaW5nLCBtYXRjaGVycywgb25DaGFuZ2UpXG4gICAgb25DaGFuZ2UobnVsbCwgbmV4dFNpYmxpbmcuZ2V0RmllbGRzKCk/LnVybCA/PyBudWxsKVxuICB9XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VXaXRoQ2hpbGRyZW4obm9kZTogRWxlbWVudE5vZGUpOiBMZXhpY2FsTm9kZVtdIHtcbiAgY29uc3QgY2hpbGRyZW4gPSBub2RlLmdldENoaWxkcmVuKClcbiAgY29uc3QgY2hpbGRyZW5MZW5ndGggPSBjaGlsZHJlbi5sZW5ndGhcblxuICBmb3IgKGxldCBqID0gY2hpbGRyZW5MZW5ndGggLSAxOyBqID49IDA7IGotLSkge1xuICAgIG5vZGUuaW5zZXJ0QWZ0ZXIoY2hpbGRyZW5bal0pXG4gIH1cblxuICBub2RlLnJlbW92ZSgpXG4gIHJldHVybiBjaGlsZHJlbi5tYXAoKGNoaWxkKSA9PiBjaGlsZC5nZXRMYXRlc3QoKSlcbn1cblxuZnVuY3Rpb24gdXNlQXV0b0xpbmsoXG4gIGVkaXRvcjogTGV4aWNhbEVkaXRvcixcbiAgbWF0Y2hlcnM6IExpbmtNYXRjaGVyW10sXG4gIG9uQ2hhbmdlPzogQ2hhbmdlSGFuZGxlcixcbik6IHZvaWQge1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghZWRpdG9yLmhhc05vZGVzKFtBdXRvTGlua05vZGVdKSkge1xuICAgICAgaW52YXJpYW50KGZhbHNlLCAnTGV4aWNhbEF1dG9MaW5rUGx1Z2luOiBBdXRvTGlua05vZGUgbm90IHJlZ2lzdGVyZWQgb24gZWRpdG9yJylcbiAgICB9XG5cbiAgICBjb25zdCBvbkNoYW5nZVdyYXBwZWQgPSAodXJsOiBudWxsIHwgc3RyaW5nLCBwcmV2VXJsOiBudWxsIHwgc3RyaW5nKTogdm9pZCA9PiB7XG4gICAgICBpZiAob25DaGFuZ2UgIT0gbnVsbCkge1xuICAgICAgICBvbkNoYW5nZSh1cmwsIHByZXZVcmwpXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1lcmdlUmVnaXN0ZXIoXG4gICAgICBlZGl0b3IucmVnaXN0ZXJOb2RlVHJhbnNmb3JtKFRleHROb2RlLCAodGV4dE5vZGU6IFRleHROb2RlKSA9PiB7XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IHRleHROb2RlLmdldFBhcmVudE9yVGhyb3coKVxuICAgICAgICBjb25zdCBwcmV2aW91cyA9IHRleHROb2RlLmdldFByZXZpb3VzU2libGluZygpXG4gICAgICAgIGlmICgkaXNBdXRvTGlua05vZGUocGFyZW50KSkge1xuICAgICAgICAgIGhhbmRsZUxpbmtFZGl0KHBhcmVudCwgbWF0Y2hlcnMsIG9uQ2hhbmdlV3JhcHBlZClcbiAgICAgICAgfSBlbHNlIGlmICghJGlzTGlua05vZGUocGFyZW50KSkge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHRleHROb2RlLmlzU2ltcGxlVGV4dCgpICYmXG4gICAgICAgICAgICAoc3RhcnRzV2l0aFNlcGFyYXRvcih0ZXh0Tm9kZS5nZXRUZXh0Q29udGVudCgpKSB8fCAhJGlzQXV0b0xpbmtOb2RlKHByZXZpb3VzKSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGhhbmRsZUxpbmtDcmVhdGlvbih0ZXh0Tm9kZSwgbWF0Y2hlcnMsIG9uQ2hhbmdlV3JhcHBlZClcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBoYW5kbGVCYWROZWlnaGJvcnModGV4dE5vZGUsIG1hdGNoZXJzLCBvbkNoYW5nZVdyYXBwZWQpXG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgIClcbiAgfSwgW2VkaXRvciwgbWF0Y2hlcnMsIG9uQ2hhbmdlXSlcbn1cblxuY29uc3QgVVJMX1JFR0VYID1cbiAgLygoaHR0cHM/OlxcL1xcLyh3d3dcXC4pPyl8KHd3d1xcLikpWy1cXHdAOiUuK34jPV17MSwyNTZ9XFwuW2EtekEtWlxcZCgpXXsxLDZ9XFxiKFstXFx3KClAOiUrLn4jPyYvPV0qKS9cblxuY29uc3QgRU1BSUxfUkVHRVggPVxuICAvKChbXjw+KClbXFxdXFxcXC4sOzpcXHNAXCJdKyhcXC5bXjw+KClbXFxdXFxcXC4sOzpcXHNAXCJdKykqKXwoXCIuK1wiKSlAKChcXFtcXGR7MSwzfVxcLlxcZHsxLDN9XFwuXFxkezEsM31cXC5cXGR7MSwzfVxcXSl8KChbYS16QS1aXFwtXFxkXStcXC4pK1thLXpBLVpdezIsfSkpL1xuXG5jb25zdCBNQVRDSEVSUyA9IFtcbiAgY3JlYXRlTGlua01hdGNoZXJXaXRoUmVnRXhwKFVSTF9SRUdFWCwgKHRleHQpID0+IHtcbiAgICByZXR1cm4gdGV4dC5zdGFydHNXaXRoKCdodHRwJykgPyB0ZXh0IDogYGh0dHBzOi8vJHt0ZXh0fWBcbiAgfSksXG4gIGNyZWF0ZUxpbmtNYXRjaGVyV2l0aFJlZ0V4cChFTUFJTF9SRUdFWCwgKHRleHQpID0+IHtcbiAgICByZXR1cm4gYG1haWx0bzoke3RleHR9YFxuICB9KSxcbl1cblxuZXhwb3J0IGZ1bmN0aW9uIEF1dG9MaW5rUGx1Z2luKCk6IEpTWC5FbGVtZW50IHwgbnVsbCB7XG4gIGNvbnN0IFtlZGl0b3JdID0gdXNlTGV4aWNhbENvbXBvc2VyQ29udGV4dCgpXG5cbiAgdXNlQXV0b0xpbmsoZWRpdG9yLCBNQVRDSEVSUylcblxuICByZXR1cm4gbnVsbFxufVxuIl0sIm5hbWVzIjpbImNyZWF0ZUxpbmtNYXRjaGVyV2l0aFJlZ0V4cCIsIkF1dG9MaW5rUGx1Z2luIiwicmVnRXhwIiwidXJsVHJhbnNmb3JtZXIiLCJ0ZXh0IiwibWF0Y2giLCJleGVjIiwiaW5kZXgiLCJsZW5ndGgiLCJ1cmwiLCJmaW5kRmlyc3RNYXRjaCIsIm1hdGNoZXJzIiwiaSIsIlBVTkNUVUFUSU9OX09SX1NQQUNFIiwiaXNTZXBhcmF0b3IiLCJjaGFyIiwidGVzdCIsImVuZHNXaXRoU2VwYXJhdG9yIiwidGV4dENvbnRlbnQiLCJzdGFydHNXaXRoU2VwYXJhdG9yIiwiaXNQcmV2aW91c05vZGVWYWxpZCIsIm5vZGUiLCJwcmV2aW91c05vZGUiLCJnZXRQcmV2aW91c1NpYmxpbmciLCIkaXNFbGVtZW50Tm9kZSIsImdldExhc3REZXNjZW5kYW50IiwiJGlzTGluZUJyZWFrTm9kZSIsIiRpc1RleHROb2RlIiwiZ2V0VGV4dENvbnRlbnQiLCJpc05leHROb2RlVmFsaWQiLCJuZXh0Tm9kZSIsImdldE5leHRTaWJsaW5nIiwiZ2V0Rmlyc3REZXNjZW5kYW50IiwiaXNDb250ZW50QXJvdW5kSXNWYWxpZCIsIm1hdGNoU3RhcnQiLCJtYXRjaEVuZCIsImNvbnRlbnRCZWZvcmVJc1ZhbGlkIiwiY29udGVudEFmdGVySXNWYWxpZCIsImhhbmRsZUxpbmtDcmVhdGlvbiIsIm9uQ2hhbmdlIiwibm9kZVRleHQiLCJpbnZhbGlkTWF0Y2hFbmQiLCJyZW1haW5pbmdUZXh0Tm9kZSIsIm1hdGNoTGVuZ3RoIiwiaXNWYWxpZCIsImxpbmtUZXh0Tm9kZSIsInNwbGl0VGV4dCIsImZpZWxkcyIsImxpbmtUeXBlIiwiYXR0cmlidXRlcyIsImxpbmtOb2RlIiwiJGNyZWF0ZUF1dG9MaW5rTm9kZSIsInRleHROb2RlIiwiJGNyZWF0ZVRleHROb2RlIiwic2V0Rm9ybWF0IiwiZ2V0Rm9ybWF0Iiwic2V0RGV0YWlsIiwiZ2V0RGV0YWlsIiwiYXBwZW5kIiwicmVwbGFjZSIsInN1YnN0cmluZyIsImhhbmRsZUxpbmtFZGl0IiwiY2hpbGRyZW4iLCJnZXRDaGlsZHJlbiIsImNoaWxkcmVuTGVuZ3RoIiwiY2hpbGQiLCJpc1NpbXBsZVRleHQiLCJyZXBsYWNlV2l0aENoaWxkcmVuIiwiZ2V0RmllbGRzIiwiZmxkcyIsInNldEZpZWxkcyIsImhhbmRsZUJhZE5laWdoYm9ycyIsInByZXZpb3VzU2libGluZyIsIm5leHRTaWJsaW5nIiwiJGlzQXV0b0xpbmtOb2RlIiwiaiIsImluc2VydEFmdGVyIiwicmVtb3ZlIiwibWFwIiwiZ2V0TGF0ZXN0IiwidXNlQXV0b0xpbmsiLCJlZGl0b3IiLCJ1c2VFZmZlY3QiLCJoYXNOb2RlcyIsIkF1dG9MaW5rTm9kZSIsImludmFyaWFudCIsIm9uQ2hhbmdlV3JhcHBlZCIsInByZXZVcmwiLCJtZXJnZVJlZ2lzdGVyIiwicmVnaXN0ZXJOb2RlVHJhbnNmb3JtIiwiVGV4dE5vZGUiLCJwYXJlbnQiLCJnZXRQYXJlbnRPclRocm93IiwicHJldmlvdXMiLCIkaXNMaW5rTm9kZSIsIlVSTF9SRUdFWCIsIkVNQUlMX1JFR0VYIiwiTUFUQ0hFUlMiLCJzdGFydHNXaXRoIiwidXNlTGV4aWNhbENvbXBvc2VyQ29udGV4dCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7OztJQXdCZ0JBLDJCQUEyQjtlQUEzQkE7O0lBNlFBQyxjQUFjO2VBQWRBOzs7d0NBbFMwQjt1QkFDWjt5QkFDMkQ7dUJBQy9EOzJCQUVBOzhCQUN5QzswQkFDdEI7QUFjdEMsU0FBU0QsNEJBQ2RFLE1BQWMsRUFDZEMsaUJBQTJDLENBQUNDLE9BQVNBLElBQUk7SUFFekQsT0FBTyxDQUFDQTtRQUNOLE1BQU1DLFFBQVFILE9BQU9JLElBQUksQ0FBQ0Y7UUFDMUIsSUFBSUMsVUFBVSxNQUFNLE9BQU87UUFDM0IsT0FBTztZQUNMRSxPQUFPRixNQUFN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
335
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9maWVsZC9mZWF0dXJlcy9MaW5rL3BsdWdpbnMvYXV0b0xpbmsvaW5kZXgudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50J1xuaW1wb3J0IHR5cGUgeyBFbGVtZW50Tm9kZSwgTGV4aWNhbEVkaXRvciwgTGV4aWNhbE5vZGUgfSBmcm9tICdsZXhpY2FsJ1xuXG5pbXBvcnQgeyB1c2VMZXhpY2FsQ29tcG9zZXJDb250ZXh0IH0gZnJvbSAnQGxleGljYWwvcmVhY3QvTGV4aWNhbENvbXBvc2VyQ29udGV4dCdcbmltcG9ydCB7IG1lcmdlUmVnaXN0ZXIgfSBmcm9tICdAbGV4aWNhbC91dGlscydcbmltcG9ydCB7XG4gICRjcmVhdGVUZXh0Tm9kZSxcbiAgJGdldFNlbGVjdGlvbixcbiAgJGlzRWxlbWVudE5vZGUsXG4gICRpc0xpbmVCcmVha05vZGUsXG4gICRpc05vZGVTZWxlY3Rpb24sXG4gICRpc1JhbmdlU2VsZWN0aW9uLFxuICAkaXNUZXh0Tm9kZSxcbiAgVGV4dE5vZGUsXG59IGZyb20gJ2xleGljYWwnXG5pbXBvcnQgeyB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgaW52YXJpYW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vbGV4aWNhbC91dGlscy9pbnZhcmlhbnQnXG5pbXBvcnQgeyAkY3JlYXRlQXV0b0xpbmtOb2RlLCAkaXNBdXRvTGlua05vZGUsIEF1dG9MaW5rTm9kZSB9IGZyb20gJy4uLy4uL25vZGVzL0F1dG9MaW5rTm9kZSdcbmltcG9ydCB7ICRpc0xpbmtOb2RlLCB0eXBlIExpbmtGaWVsZHMgfSBmcm9tICcuLi8uLi9ub2Rlcy9MaW5rTm9kZSdcblxudHlwZSBDaGFuZ2VIYW5kbGVyID0gKHVybDogbnVsbCB8IHN0cmluZywgcHJldlVybDogbnVsbCB8IHN0cmluZykgPT4gdm9pZFxuXG5pbnRlcmZhY2UgTGlua01hdGNoZXJSZXN1bHQge1xuICBmaWVsZHM/OiBMaW5rRmllbGRzXG4gIGluZGV4OiBudW1iZXJcbiAgbGVuZ3RoOiBudW1iZXJcbiAgdGV4dDogc3RyaW5nXG4gIHVybDogc3RyaW5nXG59XG5cbmV4cG9ydCB0eXBlIExpbmtNYXRjaGVyID0gKHRleHQ6IHN0cmluZykgPT4gTGlua01hdGNoZXJSZXN1bHQgfCBudWxsXG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVMaW5rTWF0Y2hlcldpdGhSZWdFeHAoXG4gIHJlZ0V4cDogUmVnRXhwLFxuICB1cmxUcmFuc2Zvcm1lcjogKHRleHQ6IHN0cmluZykgPT4gc3RyaW5nID0gKHRleHQpID0+IHRleHQsXG4pIHtcbiAgcmV0dXJuICh0ZXh0OiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBtYXRjaCA9IHJlZ0V4cC5leGVjKHRleHQpXG4gICAgaWYgKG1hdGNoID09PSBudWxsKSByZXR1cm4gbnVsbFxuICAgIHJldHVybiB7XG4gICAgICBpbmRleDogbWF0Y2guaW5kZXgsXG4gICAgICBsZW5ndGg6IG1hdGNoWzBdLmxlbmd0aCxcbiAgICAgIHRleHQ6IG1hdGNoWzBdLFxuICAgICAgdXJsOiB1cmxUcmFuc2Zvcm1lcihtYXRjaFswXSksXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGZpbmRGaXJzdE1hdGNoKHRleHQ6IHN0cmluZywgbWF0Y2hlcnM6IExpbmtNYXRjaGVyW10pOiBMaW5rTWF0Y2hlclJlc3VsdCB8IG51bGwge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IG1hdGNoZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgbWF0Y2ggPSBtYXRjaGVyc1tpXSh0ZXh0KVxuXG4gICAgaWYgKG1hdGNoICE9IG51bGwpIHtcbiAgICAgIHJldHVybiBtYXRjaFxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsXG59XG5cbmNvbnN0IFBVTkNUVUFUSU9OX09SX1NQQUNFID0gL1suLDtcXHNdL1xuXG5mdW5jdGlvbiBpc1NlcGFyYXRvcihjaGFyOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIFBVTkNUVUFUSU9OX09SX1NQQUNFLnRlc3QoY2hhcilcbn1cblxuZnVuY3Rpb24gZW5kc1dpdGhTZXBhcmF0b3IodGV4dENvbnRlbnQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gaXNTZXBhcmF0b3IodGV4dENvbnRlbnRbdGV4dENvbnRlbnQubGVuZ3RoIC0gMV0pXG59XG5cbmZ1bmN0aW9uIHN0YXJ0c1dpdGhTZXBhcmF0b3IodGV4dENvbnRlbnQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gaXNTZXBhcmF0b3IodGV4dENvbnRlbnRbMF0pXG59XG5cbmZ1bmN0aW9uIGlzUHJldmlvdXNOb2RlVmFsaWQobm9kZTogTGV4aWNhbE5vZGUpOiBib29sZWFuIHtcbiAgbGV0IHByZXZpb3VzTm9kZSA9IG5vZGUuZ2V0UHJldmlvdXNTaWJsaW5nKClcbiAgaWYgKCRpc0VsZW1lbnROb2RlKHByZXZpb3VzTm9kZSkpIHtcbiAgICBwcmV2aW91c05vZGUgPSBwcmV2aW91c05vZGUuZ2V0TGFzdERlc2NlbmRhbnQoKVxuICB9XG4gIHJldHVybiAoXG4gICAgcHJldmlvdXNOb2RlID09PSBudWxsIHx8XG4gICAgJGlzTGluZUJyZWFrTm9kZShwcmV2aW91c05vZGUpIHx8XG4gICAgKCRpc1RleHROb2RlKHByZXZpb3VzTm9kZSkgJiYgZW5kc1dpdGhTZXBhcmF0b3IocHJldmlvdXNOb2RlLmdldFRleHRDb250ZW50KCkpKVxuICApXG59XG5cbmZ1bmN0aW9uIGlzTmV4dE5vZGVWYWxpZChub2RlOiBMZXhpY2FsTm9kZSk6IGJvb2xlYW4ge1xuICBsZXQgbmV4dE5vZGUgPSBub2RlLmdldE5leHRTaWJsaW5nKClcbiAgaWYgKCRpc0VsZW1lbnROb2RlKG5leHROb2RlKSkge1xuICAgIG5leHROb2RlID0gbmV4dE5vZGUuZ2V0Rmlyc3REZXNjZW5kYW50KClcbiAgfVxuICByZXR1cm4gKFxuICAgIG5leHROb2RlID09PSBudWxsIHx8XG4gICAgJGlzTGluZUJyZWFrTm9kZShuZXh0Tm9kZSkgfHxcbiAgICAoJGlzVGV4dE5vZGUobmV4dE5vZGUpICYmIHN0YXJ0c1dpdGhTZXBhcmF0b3IobmV4dE5vZGUuZ2V0VGV4dENvbnRlbnQoKSkpXG4gIClcbn1cblxuZnVuY3Rpb24gaXNDb250ZW50QXJvdW5kSXNWYWxpZChcbiAgbWF0Y2hTdGFydDogbnVtYmVyLFxuICBtYXRjaEVuZDogbnVtYmVyLFxuICB0ZXh0OiBzdHJpbmcsXG4gIG5vZGVzOiBUZXh0Tm9kZVtdLFxuKTogYm9vbGVhbiB7XG4gIGNvbnN0IGNvbnRlbnRCZWZvcmVJc1ZhbGlkID1cbiAgICBtYXRjaFN0YXJ0ID4gMCA/IGlzU2VwYXJhdG9yKHRleHRbbWF0Y2hTdGFydCAtIDFdKSA6IGlzUHJldmlvdXNOb2RlVmFsaWQobm9kZXNbMF0pXG4gIGlmICghY29udGVudEJlZm9yZUlzVmFsaWQpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGNvbnN0IGNvbnRlbnRBZnRlcklzVmFsaWQgPVxuICAgIG1hdGNoRW5kIDwgdGV4dC5sZW5ndGggPyBpc1NlcGFyYXRvcih0ZXh0W21hdGNoRW5kXSkgOiBpc05leHROb2RlVmFsaWQobm9kZXNbbm9kZXMubGVuZ3RoIC0gMV0pXG4gIHJldHVybiBjb250ZW50QWZ0ZXJJc1ZhbGlkXG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RNYXRjaGluZ05vZGVzKFxuICBub2RlczogVGV4dE5vZGVbXSxcbiAgc3RhcnRJbmRleDogbnVtYmVyLFxuICBlbmRJbmRleDogbnVtYmVyLFxuKTogW1xuICBtYXRjaGluZ09mZnNldDogbnVtYmVyLFxuICB1bm1vZGlmaWVkQmVmb3JlTm9kZXM6IFRleHROb2RlW10sXG4gIG1hdGNoaW5nTm9kZXM6IFRleHROb2RlW10sXG4gIHVubW9kaWZpZWRBZnRlck5vZGVzOiBUZXh0Tm9kZVtdLFxuXSB7XG4gIGNvbnN0IHVubW9kaWZpZWRCZWZvcmVOb2RlczogVGV4dE5vZGVbXSA9IFtdXG4gIGNvbnN0IG1hdGNoaW5nTm9kZXM6IFRleHROb2RlW10gPSBbXVxuICBjb25zdCB1bm1vZGlmaWVkQWZ0ZXJOb2RlczogVGV4dE5vZGVbXSA9IFtdXG4gIGxldCBtYXRjaGluZ09mZnNldCA9IDBcblxuICBsZXQgY3VycmVudE9mZnNldCA9IDBcbiAgY29uc3QgY3VycmVudE5vZGVzID0gWy4uLm5vZGVzXVxuXG4gIHdoaWxlIChjdXJyZW50Tm9kZXMubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IGN1cnJlbnROb2RlID0gY3VycmVudE5vZGVzWzBdXG4gICAgY29uc3QgY3VycmVudE5vZGVUZXh0ID0gY3VycmVudE5vZGUuZ2V0VGV4dENvbnRlbnQoKVxuICAgIGNvbnN0IGN1cnJlbnROb2RlTGVuZ3RoID0gY3VycmVudE5vZGVUZXh0Lmxlbmd0aFxuICAgIGNvbnN0IGN1cnJlbnROb2RlU3RhcnQgPSBjdXJyZW50T2Zmc2V0XG4gICAgY29uc3QgY3VycmVudE5vZGVFbmQgPSBjdXJyZW50T2Zmc2V0ICsgY3VycmVudE5vZGVMZW5ndGhcblxuICAgIGlmIChjdXJyZW50Tm9kZUVuZCA8PSBzdGFydEluZGV4KSB7XG4gICAgICB1bm1vZGlmaWVkQmVmb3JlTm9kZXMucHVzaChjdXJyZW50Tm9kZSlcbiAgICAgIG1hdGNoaW5nT2Zmc2V0ICs9IGN1cnJlbnROb2RlTGVuZ3RoXG4gICAgfSBlbHNlIGlmIChjdXJyZW50Tm9kZVN0YXJ0ID49IGVuZEluZGV4KSB7XG4gICAgICB1bm1vZGlmaWVkQWZ0ZXJOb2Rlcy5wdXNoKGN1cnJlbnROb2RlKVxuICAgIH0gZWxzZSB7XG4gICAgICBtYXRjaGluZ05vZGVzLnB1c2goY3VycmVudE5vZGUpXG4gICAgfVxuICAgIGN1cnJlbnRPZmZzZXQgKz0gY3VycmVudE5vZGVMZW5ndGhcbiAgICBjdXJyZW50Tm9kZXMuc2hpZnQoKVxuICB9XG4gIHJldHVybiBbbWF0Y2hpbmdPZmZzZXQsIHVubW9kaWZpZWRCZWZvcmVOb2RlcywgbWF0Y2hpbmdOb2RlcywgdW5tb2RpZmllZEFmdGVyTm9kZXNdXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUF1dG9MaW5rTm9kZShcbiAgbm9kZXM6IFRleHROb2RlW10sXG4gIHN0YXJ0SW5kZXg6IG51bWJlcixcbiAgZW5kSW5kZXg6IG51bWJlcixcbiAgbWF0Y2g6IExpbmtNYXRjaGVyUmVzdWx0LFxuKTogVGV4dE5vZGUgfCB1bmRlZmluZWQge1xuICBjb25zdCBmaWVsZHM6IExpbmtGaWVsZHMgPSB7XG4gICAgbGlua1R5cGU6ICdjdXN0b20nLFxuICAgIHVybDogbWF0Y2gudXJsLFxuICAgIC4uLm1hdGNoLmZpZWxkcyxcbiAgfVxuXG4gIGNvbnN0IGxpbmtOb2RlID0gJGNyZWF0ZUF1dG9MaW5rTm9kZSh7IGZpZWxkcyB9KVxuICBpZiAobm9kZXMubGVuZ3RoID09PSAxKSB7XG4gICAgbGV0IHJlbWFpbmluZ1RleHROb2RlID0gbm9kZXNbMF1cbiAgICBsZXQgbGlua1RleHROb2RlXG4gICAgaWYgKHN0YXJ0SW5kZXggPT09IDApIHtcbiAgICAgIDtbbGlua1RleHROb2RlLCByZW1haW5pbmdUZXh0Tm9kZV0gPSByZW1haW5pbmdUZXh0Tm9kZS5zcGxpdFRleHQoZW5kSW5kZXgpXG4gICAgfSBlbHNlIHtcbiAgICAgIDtbLCBsaW5rVGV4dE5vZGUsIHJlbWFpbmluZ1RleHROb2RlXSA9IHJlbWFpbmluZ1RleHROb2RlLnNwbGl0VGV4dChzdGFydEluZGV4LCBlbmRJbmRleClcbiAgICB9XG4gICAgY29uc3QgdGV4dE5vZGUgPSAkY3JlYXRlVGV4dE5vZGUobWF0Y2gudGV4dClcbiAgICB0ZXh0Tm9kZS5zZXRGb3JtYXQobGlua1RleHROb2RlLmdldEZvcm1hdCgpKVxuICAgIHRleHROb2RlLnNldERldGFpbChsaW5rVGV4dE5vZGUuZ2V0RGV0YWlsKCkpXG4gICAgbGlua05vZGUuYXBwZW5kKHRleHROb2RlKVxuICAgIGxpbmtUZXh0Tm9kZS5yZXBsYWNlKGxpbmtOb2RlKVxuICAgIHJldHVybiByZW1haW5pbmdUZXh0Tm9kZVxuICB9IGVsc2UgaWYgKG5vZGVzLmxlbmd0aCA+IDEpIHtcbiAgICBjb25zdCBmaXJzdFRleHROb2RlID0gbm9kZXNbMF1cbiAgICBsZXQgb2Zmc2V0ID0gZmlyc3RUZXh0Tm9kZS5nZXRUZXh0Q29udGVudCgpLmxlbmd0aFxuICAgIGxldCBmaXJzdExpbmtUZXh0Tm9kZVxuICAgIGlmIChzdGFydEluZGV4ID09PSAwKSB7XG4gICAgICBmaXJzdExpbmtUZXh0Tm9kZSA9IGZpcnN0VGV4dE5vZGVcbiAgICB9IGVsc2Uge1xuICAgICAgO1ssIGZpcnN0TGlua1RleHROb2RlXSA9IGZpcnN0VGV4dE5vZGUuc3BsaXRUZXh0KHN0YXJ0SW5kZXgpXG4gICAgfVxuICAgIGNvbnN0IGxpbmtOb2RlcyA9IFtdXG4gICAgbGV0IHJlbWFpbmluZ1RleHROb2RlXG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgY3VycmVudE5vZGUgPSBub2Rlc1tpXVxuICAgICAgY29uc3QgY3VycmVudE5vZGVUZXh0ID0gY3VycmVudE5vZGUuZ2V0VGV4dENvbnRlbnQoKVxuICAgICAgY29uc3QgY3VycmVudE5vZGVMZW5ndGggPSBjdXJyZW50Tm9kZVRleHQubGVuZ3RoXG4gICAgICBjb25zdCBjdXJyZW50Tm9kZVN0YXJ0ID0gb2Zmc2V0XG4gICAgICBjb25zdCBjdXJyZW50Tm9kZUVuZCA9IG9mZnNldCArIGN1cnJlbnROb2RlTGVuZ3RoXG4gICAgICBpZiAoY3VycmVudE5vZGVTdGFydCA8IGVuZEluZGV4KSB7XG4gICAgICAgIGlmIChjdXJyZW50Tm9kZUVuZCA8PSBlbmRJbmRleCkge1xuICAgICAgICAgIGxpbmtOb2Rlcy5wdXNoKGN1cnJlbnROb2RlKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IFtsaW5rVGV4dE5vZGUsIGVuZE5vZGVdID0gY3VycmVudE5vZGUuc3BsaXRUZXh0KGVuZEluZGV4IC0gY3VycmVudE5vZGVTdGFydClcbiAgICAgICAgICBsaW5rTm9kZXMucHVzaChsaW5rVGV4dE5vZGUpXG4gICAgICAgICAgcmVtYWluaW5nVGV4dE5vZGUgPSBlbmROb2RlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIG9mZnNldCArPSBjdXJyZW50Tm9kZUxlbmd0aFxuICAgIH1cbiAgICBjb25zdCBzZWxlY3Rpb24gPSAkZ2V0U2VsZWN0aW9uKClcbiAgICBjb25zdCBzZWxlY3RlZFRleHROb2RlID0gc2VsZWN0aW9uID8gc2VsZWN0aW9uLmdldE5vZGVzKCkuZmluZCgkaXNUZXh0Tm9kZSkgOiB1bmRlZmluZWRcbiAgICBjb25zdCB0ZXh0Tm9kZSA9ICRjcmVhdGVUZXh0Tm9kZShmaXJzdExpbmtUZXh0Tm9kZS5nZXRUZXh0Q29udGVudCgpKVxuICAgIHRleHROb2RlLnNldEZvcm1hdChmaXJzdExpbmtUZXh0Tm9kZS5nZXRGb3JtYXQoKSlcbiAgICB0ZXh0Tm9kZS5zZXREZXRhaWwoZmlyc3RMaW5rVGV4dE5vZGUuZ2V0RGV0YWlsKCkpXG4gICAgbGlua05vZGUuYXBwZW5kKHRleHROb2RlLCAuLi5saW5rTm9kZXMpXG4gICAgLy8gaXQgZG9lcyBub3QgcHJlc2VydmUgY2FyZXQgcG9zaXRpb24gaWYgY2FyZXQgd2FzIGF0IHRoZSBmaXJzdCB0ZXh0IG5vZGVcbiAgICAvLyBzbyB3ZSBuZWVkIHRvIHJlc3RvcmUgY2FyZXQgcG9zaXRpb25cbiAgICBpZiAoc2VsZWN0ZWRUZXh0Tm9kZSAmJiBzZWxlY3RlZFRleHROb2RlID09PSBmaXJzdExpbmtUZXh0Tm9kZSkge1xuICAgICAgaWYgKCRpc1JhbmdlU2VsZWN0aW9uKHNlbGVjdGlvbikpIHtcbiAgICAgICAgdGV4dE5vZGUuc2VsZWN0KHNlbGVjdGlvbi5hbmNob3Iub2Zmc2V0LCBzZWxlY3Rpb24uZm9jdXMub2Zmc2V0KVxuICAgICAgfSBlbHNlIGlmICgkaXNOb2RlU2VsZWN0aW9uKHNlbGVjdGlvbikpIHtcbiAgICAgICAgdGV4dE5vZGUuc2VsZWN0KDAsIHRleHROb2RlLmdldFRleHRDb250ZW50KCkubGVuZ3RoKVxuICAgICAgfVxuICAgIH1cbiAgICBmaXJzdExpbmtUZXh0Tm9kZS5yZXBsYWNlKGxpbmtOb2RlKVxuICAgIHJldHVybiByZW1haW5pbmdUZXh0Tm9kZVxuICB9XG4gIHJldHVybiB1bmRlZmluZWRcbn1cblxuZnVuY3Rpb24gaGFuZGxlTGlua0NyZWF0aW9uKFxuICBub2RlczogVGV4dE5vZGVbXSxcbiAgbWF0Y2hlcnM6IExpbmtNYXRjaGVyW10sXG4gIG9uQ2hhbmdlOiBDaGFuZ2VIYW5kbGVyLFxuKTogdm9pZCB7XG4gIGxldCBjdXJyZW50Tm9kZXMgPSBbLi4ubm9kZXNdXG4gIGxldCB0ZXh0ID0gY3VycmVudE5vZGVzLm1hcCgobm9kZSkgPT4gbm9kZS5nZXRUZXh0Q29udGVudCgpKS5qb2luKCcnKVxuXG4gIGxldCBtYXRjaFxuICBsZXQgaW52YWxpZE1hdGNoRW5kID0gMFxuXG4gIHdoaWxlICgobWF0Y2ggPSBmaW5kRmlyc3RNYXRjaCh0ZXh0LCBtYXRjaGVycykpICE9IG51bGwgJiYgbWF0Y2ggIT09IG51bGwpIHtcbiAgICBjb25zdCBtYXRjaFN0YXJ0OiBudW1iZXIgPSBtYXRjaC5pbmRleFxuICAgIGNvbnN0IG1hdGNoTGVuZ3RoOiBudW1iZXIgPSBtYXRjaC5sZW5ndGhcbiAgICBjb25zdCBtYXRjaEVuZCA9IG1hdGNoU3RhcnQgKyBtYXRjaExlbmd0aFxuICAgIGNvbnN0IGlzVmFsaWQgPSBpc0NvbnRlbnRBcm91bmRJc1ZhbGlkKFxuICAgICAgaW52YWxpZE1hdGNoRW5kICsgbWF0Y2hTdGFydCxcbiAgICAgIGludmFsaWRNYXRjaEVuZCArIG1hdGNoRW5kLFxuICAgICAgdGV4dCxcbiAgICAgIGN1cnJlbnROb2RlcyxcbiAgICApXG5cbiAgICBpZiAoaXNWYWxpZCkge1xuICAgICAgY29uc3QgW21hdGNoaW5nT2Zmc2V0LCAsIG1hdGNoaW5nTm9kZXMsIHVubW9kaWZpZWRBZnRlck5vZGVzXSA9IGV4dHJhY3RNYXRjaGluZ05vZGVzKFxuICAgICAgICBjdXJyZW50Tm9kZXMsXG4gICAgICAgIGludmFsaWRNYXRjaEVuZCArIG1hdGNoU3RhcnQsXG4gICAgICAgIGludmFsaWRNYXRjaEVuZCArIG1hdGNoRW5kLFxuICAgICAgKVxuXG4gICAgICBjb25zdCBhY3R1YWxNYXRjaFN0YXJ0ID0gaW52YWxpZE1hdGNoRW5kICsgbWF0Y2hTdGFydCAtIG1hdGNoaW5nT2Zmc2V0XG4gICAgICBjb25zdCBhY3R1YWxNYXRjaEVuZCA9IGludmFsaWRNYXRjaEVuZCArIG1hdGNoRW5kIC0gbWF0Y2hpbmdPZmZzZXRcbiAgICAgIGNvbnN0IHJlbWFpbmluZ1RleHROb2RlID0gY3JlYXRlQXV0b0xpbmtOb2RlKFxuICAgICAgICBtYXRjaGluZ05vZGVzLFxuICAgICAgICBhY3R1YWxNYXRjaFN0YXJ0LFxuICAgICAgICBhY3R1YWxNYXRjaEVuZCxcbiAgICAgICAgbWF0Y2gsXG4gICAgICApXG4gICAgICBjdXJyZW50Tm9kZXMgPSByZW1haW5pbmdUZXh0Tm9kZVxuICAgICAgICA/IFtyZW1haW5pbmdUZXh0Tm9kZSwgLi4udW5tb2RpZmllZEFmdGVyTm9kZXNdXG4gICAgICAgIDogdW5tb2RpZmllZEFmdGVyTm9kZXNcbiAgICAgIG9uQ2hhbmdlKG1hdGNoLnVybCwgbnVsbClcbiAgICAgIGludmFsaWRNYXRjaEVuZCA9IDBcbiAgICB9IGVsc2Uge1xuICAgICAgaW52YWxpZE1hdGNoRW5kICs9IG1hdGNoRW5kXG4gICAgfVxuXG4gICAgdGV4dCA9IHRleHQuc3Vic3RyaW5nKG1hdGNoRW5kKVxuICB9XG59XG5cbmZ1bmN0aW9uIGhhbmRsZUxpbmtFZGl0KFxuICBsaW5rTm9kZTogQXV0b0xpbmtOb2RlLFxuICBtYXRjaGVyczogTGlua01hdGNoZXJbXSxcbiAgb25DaGFuZ2U6IENoYW5nZUhhbmRsZXIsXG4pOiB2b2lkIHtcbiAgLy8gQ2hlY2sgY2hpbGRyZW4gYXJlIHNpbXBsZSB0ZXh0XG4gIGNvbnN0IGNoaWxkcmVuID0gbGlua05vZGUuZ2V0Q2hpbGRyZW4oKVxuICBjb25zdCBjaGlsZHJlbkxlbmd0aCA9IGNoaWxkcmVuLmxlbmd0aFxuICBmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkcmVuTGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBjaGlsZCA9IGNoaWxkcmVuW2ldXG4gICAgaWYgKCEkaXNUZXh0Tm9kZShjaGlsZCkgfHwgIWNoaWxkLmlzU2ltcGxlVGV4dCgpKSB7XG4gICAgICByZXBsYWNlV2l0aENoaWxkcmVuKGxpbmtOb2RlKVxuICAgICAgb25DaGFuZ2UobnVsbCwgbGlua05vZGUuZ2V0RmllbGRzKCk/LnVybCA/PyBudWxsKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICB9XG5cbiAgLy8gQ2hlY2sgdGV4dCBjb250ZW50IGZ1bGx5IG1hdGNoZXNcbiAgY29uc3QgdGV4dCA9IGxpbmtOb2RlLmdldFRleHRDb250ZW50KClcbiAgY29uc3QgbWF0Y2ggPSBmaW5kRmlyc3RNYXRjaCh0ZXh0LCBtYXRjaGVycylcbiAgaWYgKG1hdGNoID09PSBudWxsIHx8IG1hdGNoLnRleHQgIT09IHRleHQpIHtcbiAgICByZXBsYWNlV2l0aENoaWxkcmVuKGxpbmtOb2RlKVxuICAgIG9uQ2hhbmdlKG51bGwsIGxpbmtOb2RlLmdldEZpZWxkcygpPy51cmwgPz8gbnVsbClcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8vIENoZWNrIG5laWdoYm9yc1xuICBpZiAoIWlzUHJldmlvdXNOb2RlVmFsaWQobGlua05vZGUpIHx8ICFpc05leHROb2RlVmFsaWQobGlua05vZGUpKSB7XG4gICAgcmVwbGFjZVdpdGhDaGlsZHJlbihsaW5rTm9kZSlcbiAgICBvbkNoYW5nZShudWxsLCBsaW5rTm9kZS5nZXRGaWVsZHMoKT8udXJsID8/IG51bGwpXG4gICAgcmV0dXJuXG4gIH1cblxuICBjb25zdCB1cmwgPSBsaW5rTm9kZS5nZXRGaWVsZHMoKT8udXJsXG4gIGlmICh1cmwgIT09IG1hdGNoPy51cmwpIHtcbiAgICBjb25zdCBmbGRzID0gbGlua05vZGUuZ2V0RmllbGRzKClcbiAgICBmbGRzLnVybCA9IG1hdGNoPy51cmxcbiAgICBsaW5rTm9kZS5zZXRGaWVsZHMoZmxkcylcbiAgICBvbkNoYW5nZShtYXRjaC51cmwsIHVybCA/PyBudWxsKVxuICB9XG59XG5cbi8vIEJhZCBuZWlnaGJvcnMgYXJlIGVkaXRzIGluIG5laWdoYm9yIG5vZGVzIHRoYXQgbWFrZSBBdXRvTGlua3MgaW5jb21wYXRpYmxlLlxuLy8gR2l2ZW4gdGhlIGNyZWF0aW9uIHByZWNvbmRpdGlvbnMsIHRoZXNlIGNhbiBvbmx5IGJlIHNpbXBsZSB0ZXh0IG5vZGVzLlxuZnVuY3Rpb24gaGFuZGxlQmFkTmVpZ2hib3JzKFxuICB0ZXh0Tm9kZTogVGV4dE5vZGUsXG4gIG1hdGNoZXJzOiBMaW5rTWF0Y2hlcltdLFxuICBvbkNoYW5nZTogQ2hhbmdlSGFuZGxlcixcbik6IHZvaWQge1xuICBjb25zdCBwcmV2aW91c1NpYmxpbmcgPSB0ZXh0Tm9kZS5nZXRQcmV2aW91c1NpYmxpbmcoKVxuICBjb25zdCBuZXh0U2libGluZyA9IHRleHROb2RlLmdldE5leHRTaWJsaW5nKClcbiAgY29uc3QgdGV4dCA9IHRleHROb2RlLmdldFRleHRDb250ZW50KClcblxuICBpZiAoJGlzQXV0b0xpbmtOb2RlKHByZXZpb3VzU2libGluZykgJiYgIXN0YXJ0c1dpdGhTZXBhcmF0b3IodGV4dCkpIHtcbiAgICBwcmV2aW91c1NpYmxpbmcuYXBwZW5kKHRleHROb2RlKVxuICAgIGhhbmRsZUxpbmtFZGl0KHByZXZpb3VzU2libGluZywgbWF0Y2hlcnMsIG9uQ2hhbmdlKVxuICAgIG9uQ2hhbmdlKG51bGwsIHByZXZpb3VzU2libGluZy5nZXRGaWVsZHMoKT8udXJsID8/IG51bGwpXG4gIH1cblxuICBpZiAoJGlzQXV0b0xpbmtOb2RlKG5leHRTaWJsaW5nKSAmJiAhZW5kc1dpdGhTZXBhcmF0b3IodGV4dCkpIHtcbiAgICByZXBsYWNlV2l0aENoaWxkcmVuKG5leHRTaWJsaW5nKVxuICAgIGhhbmRsZUxpbmtFZGl0KG5leHRTaWJsaW5nLCBtYXRjaGVycywgb25DaGFuZ2UpXG4gICAgb25DaGFuZ2UobnVsbCwgbmV4dFNpYmxpbmcuZ2V0RmllbGRzKCk/LnVybCA/PyBudWxsKVxuICB9XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VXaXRoQ2hpbGRyZW4obm9kZTogRWxlbWVudE5vZGUpOiBMZXhpY2FsTm9kZVtdIHtcbiAgY29uc3QgY2hpbGRyZW4gPSBub2RlLmdldENoaWxkcmVuKClcbiAgY29uc3QgY2hpbGRyZW5MZW5ndGggPSBjaGlsZHJlbi5sZW5ndGhcblxuICBmb3IgKGxldCBqID0gY2hpbGRyZW5MZW5ndGggLSAxOyBqID49IDA7IGotLSkge1xuICAgIG5vZGUuaW5zZXJ0QWZ0ZXIoY2hpbGRyZW5bal0pXG4gIH1cblxuICBub2RlLnJlbW92ZSgpXG4gIHJldHVybiBjaGlsZHJlbi5tYXAoKGNoaWxkKSA9PiBjaGlsZC5nZXRMYXRlc3QoKSlcbn1cblxuZnVuY3Rpb24gZ2V0VGV4dE5vZGVzVG9NYXRjaCh0ZXh0Tm9kZTogVGV4dE5vZGUpOiBUZXh0Tm9kZVtdIHtcbiAgLy8gY2hlY2sgaWYgbmV4dCBzaWJsaW5ncyBhcmUgc2ltcGxlIHRleHQgbm9kZXMgdGlsbCBhIG5vZGUgY29udGFpbnMgYSBzcGFjZSBzZXBhcmF0b3JcbiAgY29uc3QgdGV4dE5vZGVzVG9NYXRjaCA9IFt0ZXh0Tm9kZV1cbiAgbGV0IG5leHRTaWJsaW5nID0gdGV4dE5vZGUuZ2V0TmV4dFNpYmxpbmcoKVxuICB3aGlsZSAobmV4dFNpYmxpbmcgIT09IG51bGwgJiYgJGlzVGV4dE5vZGUobmV4dFNpYmxpbmcpICYmIG5leHRTaWJsaW5nLmlzU2ltcGxlVGV4dCgpKSB7XG4gICAgdGV4dE5vZGVzVG9NYXRjaC5wdXNoKG5leHRTaWJsaW5nKVxuICAgIGlmICgvXFxzLy50ZXN0KG5leHRTaWJsaW5nLmdldFRleHRDb250ZW50KCkpKSB7XG4gICAgICBicmVha1xuICAgIH1cbiAgICBuZXh0U2libGluZyA9IG5leHRTaWJsaW5nLmdldE5leHRTaWJsaW5nKClcbiAgfVxuICByZXR1cm4gdGV4dE5vZGVzVG9NYXRjaFxufVxuXG5mdW5jdGlvbiB1c2VBdXRvTGluayhcbiAgZWRpdG9yOiBMZXhpY2FsRWRpdG9yLFxuICBtYXRjaGVyczogTGlua01hdGNoZXJbXSxcbiAgb25DaGFuZ2U/OiBDaGFuZ2VIYW5kbGVyLFxuKTogdm9pZCB7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFlZGl0b3IuaGFzTm9kZXMoW0F1dG9MaW5rTm9kZV0pKSB7XG4gICAgICBpbnZhcmlhbnQoZmFsc2UsICdMZXhpY2FsQXV0b0xpbmtQbHVnaW46IEF1dG9MaW5rTm9kZSBub3QgcmVnaXN0ZXJlZCBvbiBlZGl0b3InKVxuICAgIH1cblxuICAgIGNvbnN0IG9uQ2hhbmdlV3JhcHBlZCA9ICh1cmw6IG51bGwgfCBzdHJpbmcsIHByZXZVcmw6IG51bGwgfCBzdHJpbmcpOiB2b2lkID0+IHtcbiAgICAgIGlmIChvbkNoYW5nZSAhPSBudWxsKSB7XG4gICAgICAgIG9uQ2hhbmdlKHVybCwgcHJldlVybClcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbWVyZ2VSZWdpc3RlcihcbiAgICAgIGVkaXRvci5yZWdpc3Rlck5vZGVUcmFuc2Zvcm0oVGV4dE5vZGUsICh0ZXh0Tm9kZTogVGV4dE5vZGUpID0+IHtcbiAgICAgICAgY29uc3QgcGFyZW50ID0gdGV4dE5vZGUuZ2V0UGFyZW50T3JUaHJvdygpXG4gICAgICAgIGNvbnN0IHByZXZpb3VzID0gdGV4dE5vZGUuZ2V0UHJldmlvdXNTaWJsaW5nKClcbiAgICAgICAgaWYgKCRpc0F1dG9MaW5rTm9kZShwYXJlbnQpKSB7XG4gICAgICAgICAgaGFuZGxlTGlua0VkaXQocGFyZW50LCBtYXRjaGVycywgb25DaGFuZ2VXcmFwcGVkKVxuICAgICAgICB9IGVsc2UgaWYgKCEkaXNMaW5rTm9kZShwYXJlbnQpKSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGV4dE5vZGUuaXNTaW1wbGVUZXh0KCkgJiZcbiAgICAgICAgICAgIChzdGFydHNXaXRoU2VwYXJhdG9yKHRleHROb2RlLmdldFRleHRDb250ZW50KCkpIHx8ICEkaXNBdXRvTGlua05vZGUocHJldmlvdXMpKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgY29uc3QgdGV4dE5vZGVzVG9NYXRjaCA9IGdldFRleHROb2Rlc1RvTWF0Y2godGV4dE5vZGUpXG4gICAgICAgICAgICBoYW5kbGVMaW5rQ3JlYXRpb24odGV4dE5vZGVzVG9NYXRjaCwgbWF0Y2hlcnMsIG9uQ2hhbmdlV3JhcHBlZClcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBoYW5kbGVCYWROZWlnaGJvcnModGV4dE5vZGUsIG1hdGNoZXJzLCBvbkNoYW5nZVdyYXBwZWQpXG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgIClcbiAgfSwgW2VkaXRvciwgbWF0Y2hlcnMsIG9uQ2hhbmdlXSlcbn1cblxuY29uc3QgVVJMX1JFR0VYID1cbiAgLygoaHR0cHM/OlxcL1xcLyh3d3dcXC4pPyl8KHd3d1xcLikpWy1cXHdAOiUuK34jPV17MSwyNTZ9XFwuW2EtekEtWlxcZCgpXXsxLDZ9XFxiKFstXFx3KClAOiUrLn4jPyYvPV0qKS9cblxuY29uc3QgRU1BSUxfUkVHRVggPVxuICAvKChbXjw+KClbXFxdXFxcXC4sOzpcXHNAXCJdKyhcXC5bXjw+KClbXFxdXFxcXC4sOzpcXHNAXCJdKykqKXwoXCIuK1wiKSlAKChcXFtcXGR7MSwzfVxcLlxcZHsxLDN9XFwuXFxkezEsM31cXC5cXGR7MSwzfVxcXSl8KChbYS16QS1aXFwtXFxkXStcXC4pK1thLXpBLVpdezIsfSkpL1xuXG5jb25zdCBNQVRDSEVSUyA9IFtcbiAgY3JlYXRlTGlua01hdGNoZXJXaXRoUmVnRXhwKFVSTF9SRUdFWCwgKHRleHQpID0+IHtcbiAgICByZXR1cm4gdGV4dC5zdGFydHNXaXRoKCdodHRwJykgPyB0ZXh0IDogYGh0dHBzOi8vJHt0ZXh0fWBcbiAgfSksXG4gIGNyZWF0ZUxpbmtNYXRjaGVyV2l0aFJlZ0V4cChFTUFJTF9SRUdFWCwgKHRleHQpID0+IHtcbiAgICByZXR1cm4gYG1haWx0bzoke3RleHR9YFxuICB9KSxcbl1cblxuZXhwb3J0IGZ1bmN0aW9uIEF1dG9MaW5rUGx1Z2luKCk6IEpTWC5FbGVtZW50IHwgbnVsbCB7XG4gIGNvbnN0IFtlZGl0b3JdID0gdXNlTGV4aWNhbENvbXBvc2VyQ29udGV4dCgpXG5cbiAgdXNlQXV0b0xpbmsoZWRpdG9yLCBNQVRDSEVSUylcblxuICByZXR1cm4gbnVsbFxufVxuIl0sIm5hbWVzIjpbImNyZWF0ZUxpbmtNYXRjaGVyV2l0aFJlZ0V4cCIsIkF1dG9MaW5rUGx1Z2luIiwicmVnRXhwIiwidXJsVHJhbnNmb3JtZXIiLCJ0ZXh0IiwibWF0Y2giLCJleGVjIiwiaW5kZXgiLCJsZW5ndGgiLCJ1cmwiLCJmaW5kRmlyc3RNYXRjaCIsIm1hdGNoZXJzIiwiaSIsIlBVTkNUVUFUSU9OX09SX1NQQUNFIiwiaXNTZXBhcmF0b3IiLCJjaGFyIiwidGVzdCIsImVuZHNXaXRoU2VwYXJhdG9yIiwidGV4dENvbnRlbnQiLCJzdGFydHNXaXRoU2VwYXJhdG9yIiwiaXNQcmV2aW91c05vZGVWYWxpZCIsIm5vZGUiLCJwcmV2aW91c05vZGUiLCJnZXRQcmV2aW91c1NpYmxpbmciLCIkaXNFbGVtZW50Tm9kZSIsImdldExhc3REZXNjZW5kYW50IiwiJGlzTGluZUJyZWFrTm9kZSIsIiRpc1RleHROb2RlIiwiZ2V0VGV4dENvbnRlbnQiLCJpc05leHROb2RlVmFsaWQiLCJuZXh0Tm9kZSIsImdldE5leHRTaWJsaW5nIiwiZ2V0Rmlyc3REZXNjZW5kYW50IiwiaXNDb250ZW50QXJvdW5kSXNWYWxpZCIsIm1hdGNoU3RhcnQiLCJtYXRjaEVuZCIsIm5vZGVzIiwiY29udGVudEJlZm9yZUlzVmFsaWQiLCJjb250ZW50QWZ0ZXJJc1ZhbGlkIiwiZXh0cmFjdE1hdGNoaW5nTm9kZXMiLCJzdGFydEluZGV4IiwiZW5kSW5kZXgiLCJ1bm1vZGlmaWVkQmVmb3JlTm9kZXMiLCJtYXRjaGluZ05vZGVzIiwidW5tb2RpZmllZEFmdGVyTm9kZXMiLCJtYXRjaGluZ09mZnNldCIsImN1cnJlbnRPZmZzZXQiLCJjdXJyZW50Tm9kZXMiLCJjdXJyZW50Tm9kZSIsImN1cnJlbnROb2RlVGV4dCIsImN1cnJlbnROb2RlTGVuZ3RoIiwiY3VycmVudE5vZGVTdGFydCIsImN1cnJlbnROb2RlRW5kIiwicHVzaCIsInNoaWZ0IiwiY3JlYXRlQXV0b0xpbmtOb2RlIiwiZmllbGRzIiwibGlua1R5cGUiLCJsaW5rTm9kZSIsIiRjcmVhdGVBdXRvTGlua05vZGUiLCJyZW1haW5pbmdUZXh0Tm9kZSIsImxpbmtUZXh0Tm9kZSIsInNwbGl0VGV4dCIsInRleHROb2RlIiwiJGNyZWF0ZVRleHROb2RlIiwic2V0Rm9ybWF0IiwiZ2V0Rm9ybWF0Iiwic2V0RGV0YWlsIiwiZ2V0RGV0YWlsIiwiYXBwZW5kIiwicmVwbGFjZSIsImZpcnN0VGV4dE5vZGUiLCJvZmZzZXQiLCJmaXJzdExpbmtUZXh0Tm9kZSIsImxpbmtOb2RlcyIsImVuZE5vZGUiLCJzZWxlY3Rpb24iLCIkZ2V0U2VsZWN0aW9uIiwic2VsZWN0ZWRUZXh0Tm9kZSIsImdldE5vZGVzIiwiZmluZCIsInVuZGVmaW5lZCIsIiRpc1JhbmdlU2VsZWN0aW9uIiwic2VsZWN0IiwiYW5jaG9yIiwiZm9jdXMiLCIkaXNOb2RlU2VsZWN0aW9uIiwiaGFuZGxlTGlua0NyZWF0aW9uIiwib25DaGFuZ2UiLCJtYXAiLCJqb2luIiwiaW52YWxpZE1hdGNoRW5kIiwibWF0Y2hMZW5ndGgiLCJpc1ZhbGlkIiwiYWN0dWFsTWF0Y2hTdGFydCIsImFjdHVhbE1hdGNoRW5kIiwic3Vic3RyaW5nIiwiaGFuZGxlTGlua0VkaXQiLCJjaGlsZHJlbiIsImdldENoaWxkcmVuIiwiY2hpbGRyZW5MZW5ndGgiLCJjaGlsZCIsImlzU2ltcGxlVGV4dCIsInJlcGxhY2VXaXRoQ2hpbGRyZW4iLCJnZXRGaWVsZHMiLCJmbGRzIiwic2V0RmllbGRzIiwiaGFuZGxlQmFkTmVpZ2hib3JzIiwicHJldmlvdXNTaWJsaW5nIiwibmV4dFNpYmxpbmciLCIkaXNBdXRvTGlua05vZGUiLCJqIiwiaW5zZXJ0QWZ0ZXIiLCJyZW1vdmUiLCJnZXRMYXRlc3QiLCJnZXRUZXh0Tm9kZXNUb01hdGNoIiwidGV4dE5vZGVzVG9NYXRjaCIsInVzZUF1dG9MaW5rIiwiZWRpdG9yIiwidXNlRWZmZWN0IiwiaGFzTm9kZXMiLCJBdXRvTGlua05vZGUiLCJpbnZhcmlhbnQiLCJvbkNoYW5nZVdyYXBwZWQiLCJwcmV2VXJsIiwibWVyZ2VSZWdpc3RlciIsInJlZ2lzdGVyTm9kZVRyYW5zZm9ybSIsIlRleHROb2RlIiwicGFyZW50IiwiZ2V0UGFyZW50T3JUaHJvdyIsInByZXZpb3VzIiwiJGlzTGlua05vZGUiLCJVUkxfUkVHRVgiLCJFTUFJTF9SRUdFWCIsIk1BVENIRVJTIiwic3RhcnRzV2l0aCIsInVzZUxleGljYWxDb21wb3NlckNvbnRleHQiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7SUFpQ2dCQSwyQkFBMkI7ZUFBM0JBOztJQXlZQUMsY0FBYztlQUFkQTs7O3dDQXZhMEI7dUJBQ1o7eUJBVXZCO3VCQUNtQjsyQkFFQTs4QkFDeUM7MEJBQ3RCO0FBY3RDLFNBQVNELDRCQUNkRSxNQUFjLEVBQ2RDLGlCQUEyQyxDQUFDQyxPQUFTQSxJQUFJO0lBRXpELE9BQU8sQ0FBQ0E7UUFDTixNQUFNQyxRQUFRSCxPQUFPSSxJQUFJLENBQUNGO1FBQzFCLElBQUlDLFVBQVUsTUFBTSxPQUFPO1FBQzNCLE9BQU87WUFDTEUsT0FBT0YsTUFBTUUsS0FBSztZQUNsQkMsUUFBUUgsS0FBSyxDQUFDLEVBQUUsQ0FBQ0csTUFBTTtZQUN2QkosTUFBTUMsS0FBSyxDQUFDLEVBQUU7WUFDZEksS0FBS04sZUFBZUUsS0FBSyxDQUFDLEVBQUU7UUFDOUI7SUFDRjtBQUNGO0FBRUEsU0FBU0ssZUFBZU4sSUFBWSxFQUFFTyxRQUF1QjtJQUMzRCxJQUFLLElBQUlDLElBQUksR0FBR0EsSUFBSUQsU0FBU0gsTUFBTSxFQUFFSSxJQUFLO1FBQ3hDLE1BQU1QLFFBQVFNLFFBQVEsQ0FBQ0MsRUFBRSxDQUFDUjtRQUUxQixJQUFJQyxTQUFTLE1BQU07WUFDakIsT0FBT0E7UUFDVDtJQUNGO0lBRUEsT0FBTztBQUNUO0FBRUEsTUFBTVEsdUJBQXVCO0FBRTdCLFNBQVNDLFlBQVlDLElBQVk7SUFDL0IsT0FBT0YscUJBQXFCRyxJQUFJLENBQUNEO0FBQ25DO0FBRUEsU0FBU0Usa0JBQWtCQyxXQUFtQjtJQUM1QyxPQUFPSixZQUFZSSxXQUFXLENBQUNBLFlBQVlWLE1BQU0sR0FBRyxFQUFFO0FBQ3hEO0FBRUEsU0FBU1csb0JBQW9CRCxXQUFtQjtJQUM5QyxPQUFPSixZQUFZSSxXQUFXLENBQUMsRUFBRTtBQUNuQztBQUVBLFNBQVNFLG9CQUFvQkMsSUFBaUI7SUFDNUMsSUFBSUMsZUFBZUQsS0FBS0Usa0JBQWtCO0lBQzFDLElBQUlDLElBQUFBLHVCQUFjLEVBQUNGLGVBQWU7UUFDaENBLGVBQWVBLGFBQWFHLGlCQUFpQjtJQUMvQztJQUNBLE9BQ0VILGlCQUFpQixRQUNqQkksSUFBQUEseUJBQWdCLEVBQUNKLGlCQUNoQkssSUFBQUEsb0JBQVcsRUFBQ0wsaUJBQWlCTCxrQkFBa0JLLGFBQWFNLGNBQWM7QUFFL0U7QUFFQSxTQUFTQyxnQkFBZ0JSLElBQWlCO0lBQ3hDLElBQUlTLFdBQVdULEtBQUtVLGNBQWM7SUFDbEMsSUFBSVAsSUFBQUEsdUJBQWMsRUFBQ00sV0FBVztRQUM1QkEsV0FBV0EsU0FBU0Usa0JBQWtCO0lBQ3hDO0lBQ0EsT0FDRUYsYUFBYSxRQUNiSixJQUFBQSx5QkFBZ0IsRUFBQ0ksYUFDaEJILElBQUFBLG9CQUFXLEVBQUNHLGFBQWFYLG9CQUFvQlcsU0FBU0YsY0FBYztBQUV6RTtBQUVBLFNBQVNLLHVCQUNQQyxVQUFrQixFQUNsQkMsUUFBZ0IsRUFDaEIvQixJQUFZLEVBQ1pnQyxLQUFpQjtJQUVqQixNQUFNQyx1QkFDSkgsYUFBYSxJQUFJcEIsWUFBWVYsSUFBSSxDQUFDOEIsYUFBYSxFQUFFLElBQUlkLG9CQUFvQmdCLEtBQUssQ0FBQyxFQUFFO0lBQ25GLElBQUksQ0FBQ0Msc0JBQXNCO1FBQ3pCLE9BQU87SUFDVDtJQUVBLE1BQU1DLHNCQUNKSCxXQUFXL0IsS0FBS0ksTUFBTSxHQUFHTSxZQUFZVixJQUFJLENBQUMrQixTQUFTLElBQUlOLGdCQUFnQk8sS0FBSyxDQUFDQSxNQUFNNUIsTUFBTSxHQUFHLEVBQUU7SUFDaEcsT0FBTzhCO0FBQ1Q7QUFFQSxTQUFTQyxxQkFDUEgsS0FBaUIsRUFDakJJLFVBQWtCLEVBQ2xCQyxRQUFnQjtJQU9oQixNQUFNQyx3QkFBb0MsRUFBRTtJQUM1QyxNQUFNQyxnQkFBNEIsRUFBRTtJQUNwQyxNQUFNQyx1QkFBbUMsRUFBRTtJQUMzQyxJQUFJQyxpQkFBaUI7SUFFckIsSUFBSUMsZ0JBQWdCO0lBQ3BCLE1BQU1DLGVBQWU7V0FBSVg7S0FBTTtJQUUvQixNQUFPVyxhQUFhdkMsTUFBTSxHQUFHLEVBQUc7UUFDOUIsTUFBTXdDLGNBQWNELFlBQVksQ0FBQyxFQUFFO1FBQ25DLE1BQU1FLGtCQUFrQkQsWUFBWXBCLGNBQWM7UUFDbEQsTUFBTXNCLG9CQUFvQkQsZ0JBQWdCekMsTUFBTTtRQUNoRCxNQUFNMkMsbUJBQW1CTDtRQUN6QixNQUFNTSxpQkFBaUJOLGdCQUFnQkk7UUFFdkMsSUFBSUUsa0JBQWtCWixZQUFZO1lBQ2hDRSxzQkFBc0JXLElBQUksQ0FBQ0w7WUFDM0JILGtCQUFrQks7UUFDcEIsT0FBTyxJQUFJQyxvQkFBb0JWLFVBQVU7WUFDdkNHLHFCQUFxQlMsSUFBSSxDQUFDTDtRQUM1QixPQUFPO1lBQ0xMLGNBQWNVLElBQUksQ0FBQ0w7UUFDckI7UUFDQUYsaUJBQWlCSTtRQUNqQkgsYUFBYU8sS0FBSztJQUNwQjtJQUNBLE9BQU87UUFBQ1Q7UUFBZ0JIO1FBQXVCQztRQUFlQztLQUFxQjtBQUNyRjtBQUVBLFNBQVNXLG1CQUNQbkIsS0FBaUIsRUFDakJJLFVBQWtCLEVBQ2xCQyxRQUFnQixFQUNoQnBDLEtBQXdCO0lBRXhCLE1BQU1tRCxTQUFxQjtRQUN6QkMsVUFBVTtRQUNWaEQsS0FBS0osTUFBTUksR0FBRztRQUNkLEdBQUdKLE1BQU1tRCxNQUFNO0lBQ2pCO0lBRUEsTUFBTUUsV0FBV0MsSUFBQUEsaUNBQW1CLEVBQUM7UUFBRUg7SUFBTztJQUM5QyxJQUFJcEIsTUFBTTVCLE1BQU0sS0FBSyxHQUFHO1FBQ3RCLElBQUlvRCxvQkFBb0J4QixLQUFLLENBQUMsRUFBRTtRQUNoQyxJQUFJeUI7UUFDSixJQUFJckIsZUFBZSxHQUFHO1lBQ25CLENBQUNxQixjQUFjRCxrQkFBa0IsR0FBR0Esa0JBQWtCRSxTQUFTLENBQUNyQjtRQUNuRSxPQUFPO1lBQ0osR0FBR29CLGNBQWNELGtCQUFrQixHQUFHQSxrQkFBa0JFLFNBQVMsQ0FBQ3RCLFlBQVlDO1FBQ2pGO1FBQ0EsTUFBTXNCLFdBQVdDLElBQUFBLHdCQUFlLEVBQUMzRCxNQUFNRCxJQUFJO1FBQzNDMkQsU0FBU0UsU0FBUyxDQUFDSixhQUFhSyxTQUFTO1FBQ3pDSCxTQUFTSSxTQUFTLENBQUNOLGFBQWFPLFNBQVM7UUFDekNWLFNBQVNXLE1BQU0sQ0FBQ047UUFDaEJGLGFBQWFTLE9BQU8sQ0FBQ1o7UUFDckIsT0FBT0U7SUFDVCxPQUFPLElBQUl4QixNQUFNNUIsTUFBTSxHQUFHLEdBQUc7UUFDM0IsTUFBTStELGdCQUFnQm5DLEtBQUssQ0FBQyxFQUFFO1FBQzlCLElBQUlvQyxTQUFTRCxjQUFjM0MsY0FBYyxHQUFHcEIsTUFBTTtRQUNsRCxJQUFJaUU7UUFDSixJQUFJakMsZUFBZSxHQUFHO1lBQ3BCaUMsb0JBQW9CRjtRQUN0QixPQUFPO1lBQ0osR0FBR0Usa0JBQWtCLEdBQUdGLGNBQWNULFNBQVMsQ0FBQ3RCO1FBQ25EO1FBQ0EsTUFBTWtDLFlBQVksRUFBRTtRQUNwQixJQUFJZDtRQUNKLElBQUssSUFBSWhELElBQUksR0FBR0EsSUFBSXdCLE1BQU01QixNQUFNLEVBQUVJLElBQUs7WUFDckMsTUFBTW9DLGNBQWNaLEtBQUssQ0FBQ3hCLEVBQUU7WUFDNUIsTUFBTXFDLGtCQUFrQkQsWUFBWXBCLGNBQWM7WUFDbEQsTUFBTXNCLG9CQUFvQkQsZ0JBQWdCekMsTUFBTTtZQUNoRCxNQUFNMkMsbUJBQW1CcUI7WUFDekIsTUFBTXBCLGlCQUFpQm9CLFNBQVN0QjtZQUNoQyxJQUFJQyxtQkFBbUJWLFVBQVU7Z0JBQy9CLElBQUlXLGtCQUFrQlgsVUFBVTtvQkFDOUJpQyxVQUFVckIsSUFBSSxDQUFDTDtnQkFDakIsT0FBTztvQkFDTCxNQUFNLENBQUNhLGNBQWNjLFFBQVEsR0FBRzNCLFlBQVljLFNBQVMsQ0FBQ3JCLFdBQVdVO29CQUNqRXVCLFVBQVVyQixJQUFJLENBQUNRO29CQUNmRCxvQkFBb0JlO2dCQUN0QjtZQUNGO1lBQ0FILFVBQVV0QjtRQUNaO1FBQ0EsTUFBTTBCLFlBQVlDLElBQUFBLHNCQUFhO1FBQy9CLE1BQU1DLG1CQUFtQkYsWUFBWUEsVUFBVUcsUUFBUSxHQUFHQyxJQUFJLENBQUNyRCxvQkFBVyxJQUFJc0Q7UUFDOUUsTUFBTWxCLFdBQVdDLElBQUFBLHdCQUFlLEVBQUNTLGtCQUFrQjdDLGNBQWM7UUFDakVtQyxTQUFTRSxTQUFTLENBQUNRLGtCQUFrQlAsU0FBUztRQUM5Q0gsU0FBU0ksU0FBUyxDQUFDTSxrQkFBa0JMLFNBQVM7UUFDOUNWLFNBQVNXLE1BQU0sQ0FBQ04sYUFBYVc7UUFDN0IsMEVBQTBFO1FBQzFFLHVDQUF1QztRQUN2QyxJQUFJSSxvQkFBb0JBLHFCQUFxQkwsbUJBQW1CO1lBQzlELElBQUlTLElBQUFBLDBCQUFpQixFQUFDTixZQUFZO2dCQUNoQ2IsU0FBU29CLE1BQU0sQ0FBQ1AsVUFBVVEsTUFBTSxDQUFDWixNQUFNLEVBQUVJLFVBQVVTLEtBQUssQ0FBQ2IsTUFBTTtZQUNqRSxPQUFPLElBQUljLElBQUFBLHlCQUFnQixFQUFDVixZQUFZO2dCQUN0Q2IsU0FBU29CLE1BQU0sQ0FBQyxHQUFHcEIsU0FBU25DLGNBQWMsR0FBR3BCLE1BQU07WUFDckQ7UUFDRjtRQUNBaUUsa0JBQWtCSCxPQUFPLENBQUNaO1FBQzFCLE9BQU9FO0lBQ1Q7SUFDQSxPQUFPcUI7QUFDVDtBQUVBLFNBQVNNLG1CQUNQbkQsS0FBaUIsRUFDakJ6QixRQUF1QixFQUN2QjZFLFFBQXVCO0lBRXZCLElBQUl6QyxlQUFlO1dBQUlYO0tBQU07SUFDN0IsSUFBSWhDLE9BQU8yQyxhQUFhMEMsR0FBRyxDQUFDLENBQUNwRSxPQUFTQSxLQUFLTyxjQUFjLElBQUk4RCxJQUFJLENBQUM7SUFFbEUsSUFBSXJGO0lBQ0osSUFBSXNGLGtCQUFrQjtJQUV0QixNQUFPLEFBQUN0RixDQUFBQSxRQUFRSyxlQUFlTixNQUFNTyxTQUFRLEtBQU0sUUFBUU4sVUFBVSxLQUFNO1FBQ3pFLE1BQU02QixhQUFxQjdCLE1BQU1FLEtBQUs7UUFDdEMsTUFBTXFGLGNBQXNCdkYsTUFBTUcsTUFBTTtRQUN4QyxNQUFNMkIsV0FBV0QsYUFBYTBEO1FBQzlCLE1BQU1DLFVBQVU1RCx1QkFDZDBELGtCQUFrQnpELFlBQ2xCeUQsa0JBQWtCeEQsVUFDbEIvQixNQUNBMkM7UUFHRixJQUFJOEMsU0FBUztZQUNYLE1BQU0sQ0FBQ2hELGtCQUFrQkYsZUFBZUMscUJBQXFCLEdBQUdMLHFCQUM5RFEsY0FDQTRDLGtCQUFrQnpELFlBQ2xCeUQsa0JBQWtCeEQ7WUFHcEIsTUFBTTJELG1CQUFtQkgsa0JBQWtCekQsYUFBYVc7WUFDeEQsTUFBTWtELGlCQUFpQkosa0JBQWtCeEQsV0FBV1U7WUFDcEQsTUFBTWUsb0JBQW9CTCxtQkFDeEJaLGVBQ0FtRCxrQkFDQUMsZ0JBQ0ExRjtZQUVGMEMsZUFBZWEsb0JBQ1g7Z0JBQUNBO21CQUFzQmhCO2FBQXFCLEdBQzVDQTtZQUNKNEMsU0FBU25GLE1BQU1JLEdBQUcsRUFBRTtZQUNwQmtGLGtCQUFrQjtRQUNwQixPQUFPO1lBQ0xBLG1CQUFtQnhEO1FBQ3JCO1FBRUEvQixPQUFPQSxLQUFLNEYsU0FBUyxDQUFDN0Q7SUFDeEI7QUFDRjtBQUVBLFNBQVM4RCxlQUNQdkMsUUFBc0IsRUFDdEIvQyxRQUF1QixFQUN2QjZFLFFBQXVCO0lBRXZCLGlDQUFpQztJQUNqQyxNQUFNVSxXQUFXeEMsU0FBU3lDLFdBQVc7SUFDckMsTUFBTUMsaUJBQWlCRixTQUFTMUYsTUFBTTtJQUN0QyxJQUFLLElBQUlJLElBQUksR0FBR0EsSUFBSXdGLGdCQUFnQnhGLElBQUs7UUFDdkMsTUFBTXlGLFFBQVFILFFBQVEsQ0FBQ3RGLEVBQUU7UUFDekIsSUFBSSxDQUFDZSxJQUFBQSxvQkFBVyxFQUFDMEUsVUFBVSxDQUFDQSxNQUFNQyxZQUFZLElBQUk7WUFDaERDLG9CQUFvQjdDO1lBQ3BCOEIsU0FBUyxNQUFNOUIsU0FBUzhDLFNBQVMsSUFBSS9GLE9BQU87WUFDNUM7UUFDRjtJQUNGO0lBRUEsbUNBQW1DO0lBQ25DLE1BQU1MLE9BQU9zRCxTQUFTOUIsY0FBYztJQUNwQyxNQUFNdkIsUUFBUUssZUFBZU4sTUFBTU87SUFDbkMsSUFBSU4sVUFBVSxRQUFRQSxNQUFNRCxJQUFJLEtBQUtBLE1BQU07UUFDekNtRyxvQkFBb0I3QztRQUNwQjhCLFNBQVMsTUFBTTlCLFNBQVM4QyxTQUFTLElBQUkvRixPQUFPO1FBQzVDO0lBQ0Y7SUFFQSxrQkFBa0I7SUFDbEIsSUFBSSxDQUFDVyxvQkFBb0JzQyxhQUFhLENBQUM3QixnQkFBZ0I2QixXQUFXO1FBQ2hFNkMsb0JBQW9CN0M7UUFDcEI4QixTQUFTLE1BQU05QixTQUFTOEMsU0FBUyxJQUFJL0YsT0FBTztRQUM1QztJQUNGO0lBRUEsTUFBTUEsTUFBTWlELFNBQVM4QyxTQUFTLElBQUkvRjtJQUNsQyxJQUFJQSxRQUFRSixPQUFPSSxLQUFLO1FBQ3RCLE1BQU1nRyxPQUFPL0MsU0FBUzhDLFNBQVM7UUFDL0JDLEtBQUtoRyxHQUFHLEdBQUdKLE9BQU9JO1FBQ2xCaUQsU0FBU2dELFNBQVMsQ0FBQ0Q7UUFDbkJqQixTQUFTbkYsTUFBTUksR0FBRyxFQUFFQSxPQUFPO0lBQzdCO0FBQ0Y7QUFFQSw4RUFBOEU7QUFDOUUseUVBQXlFO0FBQ3pFLFNBQVNrRyxtQkFDUDVDLFFBQWtCLEVBQ2xCcEQsUUFBdUIsRUFDdkI2RSxRQUF1QjtJQUV2QixNQUFNb0Isa0JBQWtCN0MsU0FBU3hDLGtCQUFrQjtJQUNuRCxNQUFNc0YsY0FBYzlDLFNBQVNoQyxjQUFjO0lBQzNDLE1BQU0zQixPQUFPMkQsU0FBU25DLGNBQWM7SUFFcEMsSUFBSWtGLElBQUFBLDZCQUFlLEVBQUNGLG9CQUFvQixDQUFDekYsb0JBQW9CZixPQUFPO1FBQ2xFd0csZ0JBQWdCdkMsTUFBTSxDQUFDTjtRQUN2QmtDLGVBQWVXLGlCQUFpQmpHLFVBQVU2RTtRQUMxQ0EsU0FBUyxNQUFNb0IsZ0JBQWdCSixTQUFTLElBQUkvRixPQUFPO0lBQ3JEO0lBRUEsSUFBSXFHLElBQUFBLDZCQUFlLEVBQUNELGdCQUFnQixDQUFDNUYsa0JBQWtCYixPQUFPO1FBQzVEbUcsb0JBQW9CTTtRQUNwQlosZUFBZVksYUFBYWxHLFVBQVU2RTtRQUN0Q0EsU0FBUyxNQUFNcUIsWUFBWUwsU0FBUyxJQUFJL0YsT0FBTztJQUNqRDtBQUNGO0FBRUEsU0FBUzhGLG9CQUFvQmxGLElBQWlCO0lBQzVDLE1BQU02RSxXQUFXN0UsS0FBSzhFLFdBQVc7SUFDakMsTUFBTUMsaUJBQWlCRixTQUFTMUYsTUFBTTtJQUV0QyxJQUFLLElBQUl1RyxJQUFJWCxpQkFBaUIsR0FBR1csS0FBSyxHQUFHQSxJQUFLO1FBQzVDMUYsS0FBSzJGLFdBQVcsQ0FBQ2QsUUFBUSxDQUFDYSxFQUFFO0lBQzlCO0lBRUExRixLQUFLNEYsTUFBTTtJQUNYLE9BQU9mLFNBQVNULEdBQUcsQ0FBQyxDQUFDWSxRQUFVQSxNQUFNYSxTQUFTO0FBQ2hEO0FBRUEsU0FBU0Msb0JBQW9CcEQsUUFBa0I7SUFDN0Msc0ZBQXNGO0lBQ3RGLE1BQU1xRCxtQkFBbUI7UUFBQ3JEO0tBQVM7SUFDbkMsSUFBSThDLGNBQWM5QyxTQUFTaEMsY0FBYztJQUN6QyxNQUFPOEUsZ0JBQWdCLFFBQVFsRixJQUFBQSxvQkFBVyxFQUFDa0YsZ0JBQWdCQSxZQUFZUCxZQUFZLEdBQUk7UUFDckZjLGlCQUFpQi9ELElBQUksQ0FBQ3dEO1FBQ3RCLElBQUksS0FBSzdGLElBQUksQ0FBQzZGLFlBQVlqRixjQUFjLEtBQUs7WUFDM0M7UUFDRjtRQUNBaUYsY0FBY0EsWUFBWTlFLGNBQWM7SUFDMUM7SUFDQSxPQUFPcUY7QUFDVDtBQUVBLFNBQVNDLFlBQ1BDLE1BQXFCLEVBQ3JCM0csUUFBdUIsRUFDdkI2RSxRQUF3QjtJQUV4QitCLElBQUFBLGdCQUFTLEVBQUM7UUFDUixJQUFJLENBQUNELE9BQU9FLFFBQVEsQ0FBQztZQUFDQywwQkFBWTtTQUFDLEdBQUc7WUFDcENDLElBQUFBLG9CQUFTLEVBQUMsT0FBTztRQUNuQjtRQUVBLE1BQU1DLGtCQUFrQixDQUFDbEgsS0FBb0JtSDtZQUMzQyxJQUFJcEMsWUFBWSxNQUFNO2dCQUNwQkEsU0FBUy9FLEtBQUttSDtZQUNoQjtRQUNGO1FBRUEsT0FBT0MsSUFBQUEsb0JBQWEsRUFDbEJQLE9BQU9RLHFCQUFxQixDQUFDQyxpQkFBUSxFQUFFLENBQUNoRTtZQUN0QyxNQUFNaUUsU0FBU2pFLFNBQVNrRSxnQkFBZ0I7WUFDeEMsTUFBTUMsV0FBV25FLFNBQVN4QyxrQkFBa0I7WUFDNUMsSUFBSXVGLElBQUFBLDZCQUFlLEVBQUNrQixTQUFTO2dCQUMzQi9CLGVBQWUrQixRQUFRckgsVUFBVWdIO1lBQ25DLE9BQU8sSUFBSSxDQUFDUSxJQUFBQSxxQkFBVyxFQUFDSCxTQUFTO2dCQUMvQixJQUNFakUsU0FBU3VDLFlBQVksTUFDcEJuRixDQUFBQSxvQkFBb0I0QyxTQUFTbkMsY0FBYyxPQUFPLENBQUNrRixJQUFBQSw2QkFBZSxFQUFDb0IsU0FBUSxHQUM1RTtvQkFDQSxNQUFNZCxtQkFBbUJELG9CQUFvQnBEO29CQUM3Q3dCLG1CQUFtQjZCLGtCQUFrQnpHLFVBQVVnSDtnQkFDakQ7Z0JBRUFoQixtQkFBbUI1QyxVQUFVcEQsVUFBVWdIO1lBQ3pDO1FBQ0Y7SUFFSixHQUFHO1FBQUNMO1FBQVEzRztRQUFVNkU7S0FBUztBQUNqQztBQUVBLE1BQU00QyxZQUNKO0FBRUYsTUFBTUMsY0FDSjtBQUVGLE1BQU1DLFdBQVc7SUFDZnRJLDRCQUE0Qm9JLFdBQVcsQ0FBQ2hJO1FBQ3RDLE9BQU9BLEtBQUttSSxVQUFVLENBQUMsVUFBVW5JLE9BQU8sQ0FBQyxRQUFRLEVBQUVBLEtBQUssQ0FBQztJQUMzRDtJQUNBSiw0QkFBNEJxSSxhQUFhLENBQUNqSTtRQUN4QyxPQUFPLENBQUMsT0FBTyxFQUFFQSxLQUFLLENBQUM7SUFDekI7Q0FDRDtBQUVNLFNBQVNIO0lBQ2QsTUFBTSxDQUFDcUgsT0FBTyxHQUFHa0IsSUFBQUEsaURBQXlCO0lBRTFDbkIsWUFBWUMsUUFBUWdCO0lBRXBCLE9BQU87QUFDVCJ9
@@ -151,7 +151,7 @@ class RelationshipNode extends _LexicalDecoratorBlockNode.DecoratorBlockNode {
151
151
  return this.__id;
152
152
  }
153
153
  getTextContent() {
154
- return `${this?.__data?.relationTo} relation to ${this.__data?.value?.id}`;
154
+ return `${this.__data?.relationTo} relation to ${this.__data?.value?.id}`;
155
155
  }
156
156
  setData(data) {
157
157
  const writable = this.getWritable();
@@ -167,4 +167,4 @@ function $isRelationshipNode(node) {
167
167
  return node instanceof RelationshipNode;
168
168
  }
169
169
 
170
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9maWVsZC9mZWF0dXJlcy9SZWxhdGlvbnNoaXAvbm9kZXMvUmVsYXRpb25zaGlwTm9kZS50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUge1xuICBET01Db252ZXJzaW9uTWFwLFxuICBET01Db252ZXJzaW9uT3V0cHV0LFxuICBET01FeHBvcnRPdXRwdXQsXG4gIEVkaXRvckNvbmZpZyxcbiAgRWxlbWVudEZvcm1hdFR5cGUsXG4gIExleGljYWxFZGl0b3IsXG4gIExleGljYWxOb2RlLFxuICBOb2RlS2V5LFxuICBTcHJlYWQsXG59IGZyb20gJ2xleGljYWwnXG5cbmltcG9ydCB7XG4gIERlY29yYXRvckJsb2NrTm9kZSxcbiAgdHlwZSBTZXJpYWxpemVkRGVjb3JhdG9yQmxvY2tOb2RlLFxufSBmcm9tICdAbGV4aWNhbC9yZWFjdC9MZXhpY2FsRGVjb3JhdG9yQmxvY2tOb2RlJ1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IFJlbGF0aW9uc2hpcENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9SZWxhdGlvbnNoaXBDb21wb25lbnQnXG5cbmV4cG9ydCB0eXBlIFJlbGF0aW9uc2hpcERhdGEgPSB7XG4gIHJlbGF0aW9uVG86IHN0cmluZ1xuICB2YWx1ZToge1xuICAgIC8vIEFjdHVhbCByZWxhdGlvbnNoaXAsIHBvcHVsYXRlZCBpbiBhZnRlclJlYWQgaG9va1xuICAgIFtrZXk6IHN0cmluZ106IHVua25vd25cbiAgICBpZDogc3RyaW5nXG4gIH1cbn1cblxuZXhwb3J0IHR5cGUgU2VyaWFsaXplZFJlbGF0aW9uc2hpcE5vZGUgPSBTcHJlYWQ8UmVsYXRpb25zaGlwRGF0YSwgU2VyaWFsaXplZERlY29yYXRvckJsb2NrTm9kZT5cblxuZnVuY3Rpb24gcmVsYXRpb25zaGlwRWxlbWVudFRvTm9kZShkb21Ob2RlOiBIVE1MRGl2RWxlbWVudCk6IERPTUNvbnZlcnNpb25PdXRwdXQgfCBudWxsIHtcbiAgY29uc3QgaWQgPSBkb21Ob2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1sZXhpY2FsLXJlbGF0aW9uc2hpcC1pZCcpXG4gIGNvbnN0IHJlbGF0aW9uVG8gPSBkb21Ob2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1sZXhpY2FsLXJlbGF0aW9uc2hpcC1yZWxhdGlvblRvJylcblxuICBpZiAoaWQgIT0gbnVsbCAmJiByZWxhdGlvblRvICE9IG51bGwpIHtcbiAgICBjb25zdCBub2RlID0gJGNyZWF0ZVJlbGF0aW9uc2hpcE5vZGUoe1xuICAgICAgcmVsYXRpb25UbyxcbiAgICAgIHZhbHVlOiB7XG4gICAgICAgIGlkLFxuICAgICAgfSxcbiAgICB9KVxuICAgIHJldHVybiB7IG5vZGUgfVxuICB9XG4gIHJldHVybiBudWxsXG59XG5cbmV4cG9ydCBjbGFzcyBSZWxhdGlvbnNoaXBOb2RlIGV4dGVuZHMgRGVjb3JhdG9yQmxvY2tOb2RlIHtcbiAgX19kYXRhOiBSZWxhdGlvbnNoaXBEYXRhXG5cbiAgY29uc3RydWN0b3Ioe1xuICAgIGRhdGEsXG4gICAgZm9ybWF0LFxuICAgIGtleSxcbiAgfToge1xuICAgIGRhdGE6IFJlbGF0aW9uc2hpcERhdGFcbiAgICBmb3JtYXQ/OiBFbGVtZW50Rm9ybWF0VHlwZVxuICAgIGtleT86IE5vZGVLZXlcbiAgfSkge1xuICAgIHN1cGVyKGZvcm1hdCwga2V5KVxuICAgIHRoaXMuX19kYXRhID0gZGF0YVxuICB9XG5cbiAgc3RhdGljIGNsb25lKG5vZGU6IFJlbGF0aW9uc2hpcE5vZGUpOiBSZWxhdGlvbnNoaXBOb2RlIHtcbiAgICByZXR1cm4gbmV3IFJlbGF0aW9uc2hpcE5vZGUoe1xuICAgICAgZGF0YTogbm9kZS5fX2RhdGEsXG4gICAgICBmb3JtYXQ6IG5vZGUuX19mb3JtYXQsXG4gICAgICBrZXk6IG5vZGUuX19rZXksXG4gICAgfSlcbiAgfVxuXG4gIHN0YXRpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICdyZWxhdGlvbnNoaXAnXG4gIH1cblxuICBzdGF0aWMgaW1wb3J0RE9NKCk6IERPTUNvbnZlcnNpb25NYXA8SFRNTERpdkVsZW1lbnQ+IHwgbnVsbCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRpdjogKGRvbU5vZGU6IEhUTUxEaXZFbGVtZW50KSA9PiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhZG9tTm9kZS5oYXNBdHRyaWJ1dGUoJ2RhdGEtbGV4aWNhbC1yZWxhdGlvbnNoaXAtcmVsYXRpb25UbycpIHx8XG4gICAgICAgICAgIWRvbU5vZGUuaGFzQXR0cmlidXRlKCdkYXRhLWxleGljYWwtcmVsYXRpb25zaGlwLWlkJylcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnZlcnNpb246IHJlbGF0aW9uc2hpcEVsZW1lbnRUb05vZGUsXG4gICAgICAgICAgcHJpb3JpdHk6IDIsXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGltcG9ydEpTT04oc2VyaWFsaXplZE5vZGU6IFNlcmlhbGl6ZWRSZWxhdGlvbnNoaXBOb2RlKTogUmVsYXRpb25zaGlwTm9kZSB7XG4gICAgY29uc3QgaW1wb3J0ZWREYXRhOiBSZWxhdGlvbnNoaXBEYXRhID0ge1xuICAgICAgcmVsYXRpb25Ubzogc2VyaWFsaXplZE5vZGUucmVsYXRpb25UbyxcbiAgICAgIHZhbHVlOiBzZXJpYWxpemVkTm9kZS52YWx1ZSxcbiAgICB9XG4gICAgY29uc3Qgbm9kZSA9ICRjcmVhdGVSZWxhdGlvbnNoaXBOb2RlKGltcG9ydGVkRGF0YSlcbiAgICBub2RlLnNldEZvcm1hdChzZXJpYWxpemVkTm9kZS5mb3JtYXQpXG4gICAgcmV0dXJuIG5vZGVcbiAgfVxuXG4gIHN0YXRpYyBpc0lubGluZSgpOiBmYWxzZSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgZGVjb3JhdGUoZWRpdG9yOiBMZXhpY2FsRWRpdG9yLCBjb25maWc6IEVkaXRvckNvbmZpZyk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPFJlbGF0aW9uc2hpcENvbXBvbmVudFxuICAgICAgICBjbGFzc05hbWU9e2NvbmZpZy50aGVtZS5yZWxhdGlvbnNoaXAgPz8gJ0xleGljYWxFZGl0b3JUaGVtZV9fcmVsYXRpb25zaGlwJ31cbiAgICAgICAgZGF0YT17dGhpcy5fX2RhdGF9XG4gICAgICAgIGZvcm1hdD17dGhpcy5fX2Zvcm1hdH1cbiAgICAgICAgbm9kZUtleT17dGhpcy5nZXRLZXkoKX1cbiAgICAgIC8+XG4gICAgKVxuICB9XG5cbiAgZXhwb3J0RE9NKCk6IERPTUV4cG9ydE91dHB1dCB7XG4gICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpXG4gICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtbGV4aWNhbC1yZWxhdGlvbnNoaXAtaWQnLCB0aGlzLl9fZGF0YT8udmFsdWU/LmlkKVxuICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdkYXRhLWxleGljYWwtcmVsYXRpb25zaGlwLXJlbGF0aW9uVG8nLCB0aGlzLl9fZGF0YT8ucmVsYXRpb25UbylcblxuICAgIGNvbnN0IHRleHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0aGlzLmdldFRleHRDb250ZW50KCkpXG4gICAgZWxlbWVudC5hcHBlbmQodGV4dClcbiAgICByZXR1cm4geyBlbGVtZW50IH1cbiAgfVxuXG4gIGV4cG9ydEpTT04oKTogU2VyaWFsaXplZFJlbGF0aW9uc2hpcE5vZGUge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdXBlci5leHBvcnRKU09OKCksXG4gICAgICAuLi50aGlzLmdldERhdGEoKSxcbiAgICAgIHR5cGU6IHRoaXMuZ2V0VHlwZSgpLFxuICAgICAgdmVyc2lvbjogMSxcbiAgICB9XG4gIH1cblxuICBnZXREYXRhKCk6IFJlbGF0aW9uc2hpcERhdGEge1xuICAgIHJldHVybiB0aGlzLmdldExhdGVzdCgpLl9fZGF0YVxuICB9XG5cbiAgZ2V0SWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fX2lkXG4gIH1cblxuICBnZXRUZXh0Q29udGVudCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHt0aGlzPy5fX2RhdGE/LnJlbGF0aW9uVG99IHJlbGF0aW9uIHRvICR7dGhpcy5fX2RhdGE/LnZhbHVlPy5pZH1gXG4gIH1cblxuICBzZXREYXRhKGRhdGE6IFJlbGF0aW9uc2hpcERhdGEpOiB2b2lkIHtcbiAgICBjb25zdCB3cml0YWJsZSA9IHRoaXMuZ2V0V3JpdGFibGUoKVxuICAgIHdyaXRhYmxlLl9fZGF0YSA9IGRhdGFcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gJGNyZWF0ZVJlbGF0aW9uc2hpcE5vZGUoZGF0YTogUmVsYXRpb25zaGlwRGF0YSk6IFJlbGF0aW9uc2hpcE5vZGUge1xuICByZXR1cm4gbmV3IFJlbGF0aW9uc2hpcE5vZGUoe1xuICAgIGRhdGEsXG4gIH0pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiAkaXNSZWxhdGlvbnNoaXBOb2RlKFxuICBub2RlOiBMZXhpY2FsTm9kZSB8IFJlbGF0aW9uc2hpcE5vZGUgfCBudWxsIHwgdW5kZWZpbmVkLFxuKTogbm9kZSBpcyBSZWxhdGlvbnNoaXBOb2RlIHtcbiAgcmV0dXJuIG5vZGUgaW5zdGFuY2VvZiBSZWxhdGlvbnNoaXBOb2RlXG59XG4iXSwibmFtZXMiOlsiUmVsYXRpb25zaGlwTm9kZSIsIiRjcmVhdGVSZWxhdGlvbnNoaXBOb2RlIiwiJGlzUmVsYXRpb25zaGlwTm9kZSIsInJlbGF0aW9uc2hpcEVsZW1lbnRUb05vZGUiLCJkb21Ob2RlIiwiaWQiLCJnZXRBdHRyaWJ1dGUiLCJyZWxhdGlvblRvIiwibm9kZSIsInZhbHVlIiwiRGVjb3JhdG9yQmxvY2tOb2RlIiwiX19kYXRhIiwiY29uc3RydWN0b3IiLCJkYXRhIiwiZm9ybWF0Iiwia2V5IiwiY2xvbmUiLCJfX2Zvcm1hdCIsIl9fa2V5IiwiZ2V0VHlwZSIsImltcG9ydERPTSIsImRpdiIsImhhc0F0dHJpYnV0ZSIsImNvbnZlcnNpb24iLCJwcmlvcml0eSIsImltcG9ydEpTT04iLCJzZXJpYWxpemVkTm9kZSIsImltcG9ydGVkRGF0YSIsInNldEZvcm1hdCIsImlzSW5saW5lIiwiZGVjb3JhdGUiLCJlZGl0b3IiLCJjb25maWciLCJSZWxhdGlvbnNoaXBDb21wb25lbnQiLCJjbGFzc05hbWUiLCJ0aGVtZSIsInJlbGF0aW9uc2hpcCIsIm5vZGVLZXkiLCJnZXRLZXkiLCJleHBvcnRET00iLCJlbGVtZW50IiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50Iiwic2V0QXR0cmlidXRlIiwidGV4dCIsImNyZWF0ZVRleHROb2RlIiwiZ2V0VGV4dENvbnRlbnQiLCJhcHBlbmQiLCJleHBvcnRKU09OIiwiZ2V0RGF0YSIsInR5cGUiLCJ2ZXJzaW9uIiwiZ2V0TGF0ZXN0IiwiZ2V0SWQiLCJfX2lkIiwic2V0RGF0YSIsIndyaXRhYmxlIiwiZ2V0V3JpdGFibGUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0lBK0NhQSxnQkFBZ0I7ZUFBaEJBOztJQTBHR0MsdUJBQXVCO2VBQXZCQTs7SUFNQUMsbUJBQW1CO2VBQW5CQTs7OzJDQWhKVDsrREFDZ0I7dUNBRWU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFhdEMsU0FBU0MsMEJBQTBCQyxPQUF1QjtJQUN4RCxNQUFNQyxLQUFLRCxRQUFRRSxZQUFZLENBQUM7SUFDaEMsTUFBTUMsYUFBYUgsUUFBUUUsWUFBWSxDQUFDO0lBRXhDLElBQUlELE1BQU0sUUFBUUUsY0FBYyxNQUFNO1FBQ3BDLE1BQU1DLE9BQU9QLHdCQUF3QjtZQUNuQ007WUFDQUUsT0FBTztnQkFDTEo7WUFDRjtRQUNGO1FBQ0EsT0FBTztZQUFFRztRQUFLO0lBQ2hCO0lBQ0EsT0FBTztBQUNUO0FBRU8sTUFBTVIseUJBQXlCVSw2Q0FBa0I7SUFDdERDLE9BQXdCO0lBRXhCQyxZQUFZLEVBQ1ZDLElBQUksRUFDSkMsTUFBTSxFQUNOQyxHQUFHLEVB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
170
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9maWVsZC9mZWF0dXJlcy9SZWxhdGlvbnNoaXAvbm9kZXMvUmVsYXRpb25zaGlwTm9kZS50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUge1xuICBET01Db252ZXJzaW9uTWFwLFxuICBET01Db252ZXJzaW9uT3V0cHV0LFxuICBET01FeHBvcnRPdXRwdXQsXG4gIEVkaXRvckNvbmZpZyxcbiAgRWxlbWVudEZvcm1hdFR5cGUsXG4gIExleGljYWxFZGl0b3IsXG4gIExleGljYWxOb2RlLFxuICBOb2RlS2V5LFxuICBTcHJlYWQsXG59IGZyb20gJ2xleGljYWwnXG5cbmltcG9ydCB7XG4gIERlY29yYXRvckJsb2NrTm9kZSxcbiAgdHlwZSBTZXJpYWxpemVkRGVjb3JhdG9yQmxvY2tOb2RlLFxufSBmcm9tICdAbGV4aWNhbC9yZWFjdC9MZXhpY2FsRGVjb3JhdG9yQmxvY2tOb2RlJ1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IFJlbGF0aW9uc2hpcENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9SZWxhdGlvbnNoaXBDb21wb25lbnQnXG5cbmV4cG9ydCB0eXBlIFJlbGF0aW9uc2hpcERhdGEgPSB7XG4gIHJlbGF0aW9uVG86IHN0cmluZ1xuICB2YWx1ZToge1xuICAgIC8vIEFjdHVhbCByZWxhdGlvbnNoaXAsIHBvcHVsYXRlZCBpbiBhZnRlclJlYWQgaG9va1xuICAgIFtrZXk6IHN0cmluZ106IHVua25vd25cbiAgICBpZDogc3RyaW5nXG4gIH1cbn1cblxuZXhwb3J0IHR5cGUgU2VyaWFsaXplZFJlbGF0aW9uc2hpcE5vZGUgPSBTcHJlYWQ8UmVsYXRpb25zaGlwRGF0YSwgU2VyaWFsaXplZERlY29yYXRvckJsb2NrTm9kZT5cblxuZnVuY3Rpb24gcmVsYXRpb25zaGlwRWxlbWVudFRvTm9kZShkb21Ob2RlOiBIVE1MRGl2RWxlbWVudCk6IERPTUNvbnZlcnNpb25PdXRwdXQgfCBudWxsIHtcbiAgY29uc3QgaWQgPSBkb21Ob2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1sZXhpY2FsLXJlbGF0aW9uc2hpcC1pZCcpXG4gIGNvbnN0IHJlbGF0aW9uVG8gPSBkb21Ob2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1sZXhpY2FsLXJlbGF0aW9uc2hpcC1yZWxhdGlvblRvJylcblxuICBpZiAoaWQgIT0gbnVsbCAmJiByZWxhdGlvblRvICE9IG51bGwpIHtcbiAgICBjb25zdCBub2RlID0gJGNyZWF0ZVJlbGF0aW9uc2hpcE5vZGUoe1xuICAgICAgcmVsYXRpb25UbyxcbiAgICAgIHZhbHVlOiB7XG4gICAgICAgIGlkLFxuICAgICAgfSxcbiAgICB9KVxuICAgIHJldHVybiB7IG5vZGUgfVxuICB9XG4gIHJldHVybiBudWxsXG59XG5cbmV4cG9ydCBjbGFzcyBSZWxhdGlvbnNoaXBOb2RlIGV4dGVuZHMgRGVjb3JhdG9yQmxvY2tOb2RlIHtcbiAgX19kYXRhOiBSZWxhdGlvbnNoaXBEYXRhXG5cbiAgY29uc3RydWN0b3Ioe1xuICAgIGRhdGEsXG4gICAgZm9ybWF0LFxuICAgIGtleSxcbiAgfToge1xuICAgIGRhdGE6IFJlbGF0aW9uc2hpcERhdGFcbiAgICBmb3JtYXQ/OiBFbGVtZW50Rm9ybWF0VHlwZVxuICAgIGtleT86IE5vZGVLZXlcbiAgfSkge1xuICAgIHN1cGVyKGZvcm1hdCwga2V5KVxuICAgIHRoaXMuX19kYXRhID0gZGF0YVxuICB9XG5cbiAgc3RhdGljIGNsb25lKG5vZGU6IFJlbGF0aW9uc2hpcE5vZGUpOiBSZWxhdGlvbnNoaXBOb2RlIHtcbiAgICByZXR1cm4gbmV3IFJlbGF0aW9uc2hpcE5vZGUoe1xuICAgICAgZGF0YTogbm9kZS5fX2RhdGEsXG4gICAgICBmb3JtYXQ6IG5vZGUuX19mb3JtYXQsXG4gICAgICBrZXk6IG5vZGUuX19rZXksXG4gICAgfSlcbiAgfVxuXG4gIHN0YXRpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICdyZWxhdGlvbnNoaXAnXG4gIH1cblxuICBzdGF0aWMgaW1wb3J0RE9NKCk6IERPTUNvbnZlcnNpb25NYXA8SFRNTERpdkVsZW1lbnQ+IHwgbnVsbCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRpdjogKGRvbU5vZGU6IEhUTUxEaXZFbGVtZW50KSA9PiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhZG9tTm9kZS5oYXNBdHRyaWJ1dGUoJ2RhdGEtbGV4aWNhbC1yZWxhdGlvbnNoaXAtcmVsYXRpb25UbycpIHx8XG4gICAgICAgICAgIWRvbU5vZGUuaGFzQXR0cmlidXRlKCdkYXRhLWxleGljYWwtcmVsYXRpb25zaGlwLWlkJylcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnZlcnNpb246IHJlbGF0aW9uc2hpcEVsZW1lbnRUb05vZGUsXG4gICAgICAgICAgcHJpb3JpdHk6IDIsXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGltcG9ydEpTT04oc2VyaWFsaXplZE5vZGU6IFNlcmlhbGl6ZWRSZWxhdGlvbnNoaXBOb2RlKTogUmVsYXRpb25zaGlwTm9kZSB7XG4gICAgY29uc3QgaW1wb3J0ZWREYXRhOiBSZWxhdGlvbnNoaXBEYXRhID0ge1xuICAgICAgcmVsYXRpb25Ubzogc2VyaWFsaXplZE5vZGUucmVsYXRpb25UbyxcbiAgICAgIHZhbHVlOiBzZXJpYWxpemVkTm9kZS52YWx1ZSxcbiAgICB9XG4gICAgY29uc3Qgbm9kZSA9ICRjcmVhdGVSZWxhdGlvbnNoaXBOb2RlKGltcG9ydGVkRGF0YSlcbiAgICBub2RlLnNldEZvcm1hdChzZXJpYWxpemVkTm9kZS5mb3JtYXQpXG4gICAgcmV0dXJuIG5vZGVcbiAgfVxuXG4gIHN0YXRpYyBpc0lubGluZSgpOiBmYWxzZSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgZGVjb3JhdGUoZWRpdG9yOiBMZXhpY2FsRWRpdG9yLCBjb25maWc6IEVkaXRvckNvbmZpZyk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPFJlbGF0aW9uc2hpcENvbXBvbmVudFxuICAgICAgICBjbGFzc05hbWU9e2NvbmZpZy50aGVtZS5yZWxhdGlvbnNoaXAgPz8gJ0xleGljYWxFZGl0b3JUaGVtZV9fcmVsYXRpb25zaGlwJ31cbiAgICAgICAgZGF0YT17dGhpcy5fX2RhdGF9XG4gICAgICAgIGZvcm1hdD17dGhpcy5fX2Zvcm1hdH1cbiAgICAgICAgbm9kZUtleT17dGhpcy5nZXRLZXkoKX1cbiAgICAgIC8+XG4gICAgKVxuICB9XG5cbiAgZXhwb3J0RE9NKCk6IERPTUV4cG9ydE91dHB1dCB7XG4gICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpXG4gICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtbGV4aWNhbC1yZWxhdGlvbnNoaXAtaWQnLCB0aGlzLl9fZGF0YT8udmFsdWU/LmlkKVxuICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdkYXRhLWxleGljYWwtcmVsYXRpb25zaGlwLXJlbGF0aW9uVG8nLCB0aGlzLl9fZGF0YT8ucmVsYXRpb25UbylcblxuICAgIGNvbnN0IHRleHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0aGlzLmdldFRleHRDb250ZW50KCkpXG4gICAgZWxlbWVudC5hcHBlbmQodGV4dClcbiAgICByZXR1cm4geyBlbGVtZW50IH1cbiAgfVxuXG4gIGV4cG9ydEpTT04oKTogU2VyaWFsaXplZFJlbGF0aW9uc2hpcE5vZGUge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdXBlci5leHBvcnRKU09OKCksXG4gICAgICAuLi50aGlzLmdldERhdGEoKSxcbiAgICAgIHR5cGU6IHRoaXMuZ2V0VHlwZSgpLFxuICAgICAgdmVyc2lvbjogMSxcbiAgICB9XG4gIH1cblxuICBnZXREYXRhKCk6IFJlbGF0aW9uc2hpcERhdGEge1xuICAgIHJldHVybiB0aGlzLmdldExhdGVzdCgpLl9fZGF0YVxuICB9XG5cbiAgZ2V0SWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fX2lkXG4gIH1cblxuICBnZXRUZXh0Q29udGVudCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHt0aGlzLl9fZGF0YT8ucmVsYXRpb25Ub30gcmVsYXRpb24gdG8gJHt0aGlzLl9fZGF0YT8udmFsdWU/LmlkfWBcbiAgfVxuXG4gIHNldERhdGEoZGF0YTogUmVsYXRpb25zaGlwRGF0YSk6IHZvaWQge1xuICAgIGNvbnN0IHdyaXRhYmxlID0gdGhpcy5nZXRXcml0YWJsZSgpXG4gICAgd3JpdGFibGUuX19kYXRhID0gZGF0YVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiAkY3JlYXRlUmVsYXRpb25zaGlwTm9kZShkYXRhOiBSZWxhdGlvbnNoaXBEYXRhKTogUmVsYXRpb25zaGlwTm9kZSB7XG4gIHJldHVybiBuZXcgUmVsYXRpb25zaGlwTm9kZSh7XG4gICAgZGF0YSxcbiAgfSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uICRpc1JlbGF0aW9uc2hpcE5vZGUoXG4gIG5vZGU6IExleGljYWxOb2RlIHwgUmVsYXRpb25zaGlwTm9kZSB8IG51bGwgfCB1bmRlZmluZWQsXG4pOiBub2RlIGlzIFJlbGF0aW9uc2hpcE5vZGUge1xuICByZXR1cm4gbm9kZSBpbnN0YW5jZW9mIFJlbGF0aW9uc2hpcE5vZGVcbn1cbiJdLCJuYW1lcyI6WyJSZWxhdGlvbnNoaXBOb2RlIiwiJGNyZWF0ZVJlbGF0aW9uc2hpcE5vZGUiLCIkaXNSZWxhdGlvbnNoaXBOb2RlIiwicmVsYXRpb25zaGlwRWxlbWVudFRvTm9kZSIsImRvbU5vZGUiLCJpZCIsImdldEF0dHJpYnV0ZSIsInJlbGF0aW9uVG8iLCJub2RlIiwidmFsdWUiLCJEZWNvcmF0b3JCbG9ja05vZGUiLCJfX2RhdGEiLCJjb25zdHJ1Y3RvciIsImRhdGEiLCJmb3JtYXQiLCJrZXkiLCJjbG9uZSIsIl9fZm9ybWF0IiwiX19rZXkiLCJnZXRUeXBlIiwiaW1wb3J0RE9NIiwiZGl2IiwiaGFzQXR0cmlidXRlIiwiY29udmVyc2lvbiIsInByaW9yaXR5IiwiaW1wb3J0SlNPTiIsInNlcmlhbGl6ZWROb2RlIiwiaW1wb3J0ZWREYXRhIiwic2V0Rm9ybWF0IiwiaXNJbmxpbmUiLCJkZWNvcmF0ZSIsImVkaXRvciIsImNvbmZpZyIsIlJlbGF0aW9uc2hpcENvbXBvbmVudCIsImNsYXNzTmFtZSIsInRoZW1lIiwicmVsYXRpb25zaGlwIiwibm9kZUtleSIsImdldEtleSIsImV4cG9ydERPTSIsImVsZW1lbnQiLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJzZXRBdHRyaWJ1dGUiLCJ0ZXh0IiwiY3JlYXRlVGV4dE5vZGUiLCJnZXRUZXh0Q29udGVudCIsImFwcGVuZCIsImV4cG9ydEpTT04iLCJnZXREYXRhIiwidHlwZSIsInZlcnNpb24iLCJnZXRMYXRlc3QiLCJnZXRJZCIsIl9faWQiLCJzZXREYXRhIiwid3JpdGFibGUiLCJnZXRXcml0YWJsZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7SUErQ2FBLGdCQUFnQjtlQUFoQkE7O0lBMEdHQyx1QkFBdUI7ZUFBdkJBOztJQU1BQyxtQkFBbUI7ZUFBbkJBOzs7MkNBaEpUOytEQUNnQjt1Q0FFZTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWF0QyxTQUFTQywwQkFBMEJDLE9BQXVCO0lBQ3hELE1BQU1DLEtBQUtELFFBQVFFLFlBQVksQ0FBQztJQUNoQyxNQUFNQyxhQUFhSCxRQUFRRSxZQUFZLENBQUM7SUFFeEMsSUFBSUQsTUFBTSxRQUFRRSxjQUFjLE1BQU07UUFDcEMsTUFBTUMsT0FBT1Asd0JBQXdCO1lBQ25DTTtZQUNBRSxPQUFPO2dCQUNMSjtZQUNGO1FBQ0Y7UUFDQSxPQUFPO1lBQUVHO1FBQUs7SUFDaEI7SUFDQSxPQUFPO0FBQ1Q7QUFFTyxNQUFNUix5QkFBeUJVLDZDQUFrQjtJQUN0REMsT0FBd0I7SUFFeEJDLFlBQVksRUFDVkMsSUFBSSxFQUNKQyxNQUFNLEVBQ05DLEdBQUcsRUFL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
@@ -1,7 +1,23 @@
1
1
  import type { TextField } from 'payload/types';
2
+ import type { SanitizedEditorConfig } from '../../../../../index';
3
+ import type { HTMLConverter } from '../converter/types';
2
4
  type Props = {
3
5
  name: string;
4
6
  };
5
- export declare const lexicalHTML: (lexicalFieldName: string, props: Props) => TextField;
7
+ /**
8
+ * Combines the default HTML converters with HTML converters found in the features, and with HTML converters configured in the htmlConverter feature.
9
+ *
10
+ * @param editorConfig
11
+ */
12
+ export declare const consolidateHTMLConverters: ({ editorConfig, }: {
13
+ editorConfig: SanitizedEditorConfig;
14
+ }) => HTMLConverter[];
15
+ export declare const lexicalHTML: (
16
+ /**
17
+ * A string which matches the lexical field name you want to convert to HTML.
18
+ *
19
+ * This has to be a SIBLING field of this lexicalHTML field - otherwise, it won't be able to find the lexical field.
20
+ **/
21
+ lexicalFieldName: string, props: Props) => TextField;
6
22
  export {};
7
23
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/field/features/converters/html/field/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAiB,SAAS,EAAE,MAAM,eAAe,CAAA;AAW7D,KAAK,KAAK,GAAG;IACX,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAED,eAAO,MAAM,WAAW,EAAE,CAAC,gBAAgB,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,KAAK,SAsErE,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/field/features/converters/html/field/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAwB,SAAS,EAAE,MAAM,eAAe,CAAA;AAEpE,OAAO,KAAK,EAA0B,qBAAqB,EAAE,MAAM,sBAAsB,CAAA;AAEzF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAMvD,KAAK,KAAK,GAAG;IACX,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,yBAAyB;kBAGtB,qBAAqB;qBAqBpC,CAAA;AAED,eAAO,MAAM,WAAW,EAAE;AACxB;;;;IAII;AACJ,gBAAgB,EAAE,MAAM,EACxB,KAAK,EAAE,KAAK,KACT,SAuFJ,CAAA"}
@@ -2,15 +2,34 @@
2
2
  Object.defineProperty(exports, "__esModule", {
3
3
  value: true
4
4
  });
5
- Object.defineProperty(exports, "lexicalHTML", {
6
- enumerable: true,
7
- get: function() {
5
+ function _export(target, all) {
6
+ for(var name in all)Object.defineProperty(target, name, {
7
+ enumerable: true,
8
+ get: all[name]
9
+ });
10
+ }
11
+ _export(exports, {
12
+ consolidateHTMLConverters: function() {
13
+ return consolidateHTMLConverters;
14
+ },
15
+ lexicalHTML: function() {
8
16
  return lexicalHTML;
9
17
  }
10
18
  });
11
- const _index = require("../../../../../index");
12
19
  const _converter = require("../converter");
13
20
  const _defaultConverters = require("../converter/defaultConverters");
21
+ const consolidateHTMLConverters = ({ editorConfig })=>{
22
+ const htmlConverterFeature = editorConfig.resolvedFeatureMap.get('htmlConverter');
23
+ const htmlConverterFeatureProps = htmlConverterFeature?.props;
24
+ const defaultConvertersWithConvertersFromFeatures = _defaultConverters.defaultHTMLConverters;
25
+ for (const converter of editorConfig.features.converters.html){
26
+ defaultConvertersWithConvertersFromFeatures.push(converter);
27
+ }
28
+ const finalConverters = htmlConverterFeatureProps?.converters && typeof htmlConverterFeatureProps?.converters === 'function' ? htmlConverterFeatureProps.converters({
29
+ defaultConverters: defaultConvertersWithConvertersFromFeatures
30
+ }) : (htmlConverterFeatureProps?.converters) || defaultConvertersWithConvertersFromFeatures;
31
+ return finalConverters;
32
+ };
14
33
  const lexicalHTML = (lexicalFieldName, props)=>{
15
34
  const { name = 'lexicalHTML' } = props;
16
35
  return {
@@ -20,31 +39,51 @@ const lexicalHTML = (lexicalFieldName, props)=>{
20
39
  },
21
40
  hooks: {
22
41
  afterRead: [
23
- async ({ collection, context, data, originalDoc, siblingData })=>{
24
- const lexicalField = collection.fields.find((field)=>'name' in field && field.name === lexicalFieldName);
42
+ async ({ collection, field, global, siblingData })=>{
43
+ const fields = collection ? collection.fields : global.fields;
44
+ // find the path of this field, as well as its sibling fields, by looking for this `field` in fields and traversing it recursively
45
+ function findFieldPathAndSiblingFields(fields, path) {
46
+ for (const curField of fields){
47
+ if (curField === field) {
48
+ return {
49
+ path: [
50
+ ...path,
51
+ curField.name
52
+ ],
53
+ siblingFields: fields
54
+ };
55
+ }
56
+ if ('fields' in curField && 'name' in curField) {
57
+ const result = findFieldPathAndSiblingFields(curField.fields, [
58
+ ...path,
59
+ curField.name
60
+ ]);
61
+ if (result) {
62
+ return result;
63
+ }
64
+ }
65
+ }
66
+ return null;
67
+ }
68
+ const { path, siblingFields } = findFieldPathAndSiblingFields(fields, []);
69
+ const lexicalField = siblingFields.find((field)=>'name' in field && field.name === lexicalFieldName);
25
70
  const lexicalFieldData = siblingData[lexicalFieldName];
26
71
  if (!lexicalFieldData) {
27
72
  return '';
28
73
  }
29
74
  if (!lexicalField) {
30
- throw new Error('You cannot use the lexicalHTML field because the lexical field was not found');
75
+ throw new Error('You cannot use the lexicalHTML field because the referenced lexical field was not found');
31
76
  }
32
77
  const config = (lexicalField?.editor)?.editorConfig;
33
78
  if (!config) {
34
79
  throw new Error('The linked lexical field does not have an editorConfig. This is needed for the lexicalHTML field.');
35
80
  }
36
81
  if (!config?.resolvedFeatureMap?.has('htmlConverter')) {
37
- throw new Error('You cannot use the lexicalHTML field because the htmlConverter feature was not found');
82
+ throw new Error('You cannot use the lexicalHTML field because the linked lexical field does not have a HTMLConverterFeature');
38
83
  }
39
- const htmlConverterFeature = config.resolvedFeatureMap.get('htmlConverter');
40
- const htmlConverterFeatureProps = htmlConverterFeature.props;
41
- const defaultConvertersWithConvertersFromFeatures = (0, _index.cloneDeep)(_defaultConverters.defaultHTMLConverters);
42
- for (const converter of config.features.converters.html){
43
- defaultConvertersWithConvertersFromFeatures.push(converter);
44
- }
45
- const finalConverters = htmlConverterFeatureProps?.converters && typeof htmlConverterFeatureProps?.converters === 'function' ? htmlConverterFeatureProps.converters({
46
- defaultConverters: defaultConvertersWithConvertersFromFeatures
47
- }) : (htmlConverterFeatureProps?.converters) || defaultConvertersWithConvertersFromFeatures;
84
+ const finalConverters = consolidateHTMLConverters({
85
+ editorConfig: config
86
+ });
48
87
  return await (0, _converter.convertLexicalToHTML)({
49
88
  converters: finalConverters,
50
89
  data: lexicalFieldData
@@ -56,4 +95,4 @@ const lexicalHTML = (lexicalFieldName, props)=>{
56
95
  };
57
96
  };
58
97
 
59
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9maWVsZC9mZWF0dXJlcy9jb252ZXJ0ZXJzL2h0bWwvZmllbGQvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBTZXJpYWxpemVkRWRpdG9yU3RhdGUgfSBmcm9tICdsZXhpY2FsJ1xuaW1wb3J0IHR5cGUgeyBSaWNoVGV4dEZpZWxkLCBUZXh0RmllbGQgfSBmcm9tICdwYXlsb2FkL3R5cGVzJ1xuXG5pbXBvcnQgdHlwZSB7IExleGljYWxSaWNoVGV4dEFkYXB0ZXIgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9pbmRleCdcbmltcG9ydCB0eXBlIHsgQWRhcHRlclByb3BzIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vdHlwZXMnXG5pbXBvcnQgdHlwZSB7IEhUTUxDb252ZXJ0ZXIgfSBmcm9tICcuLi9jb252ZXJ0ZXIvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IEhUTUxDb252ZXJ0ZXJGZWF0dXJlUHJvcHMgfSBmcm9tICcuLi9pbmRleCdcblxuaW1wb3J0IHsgY2xvbmVEZWVwIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vaW5kZXgnXG5pbXBvcnQgeyBjb252ZXJ0TGV4aWNhbFRvSFRNTCB9IGZyb20gJy4uL2NvbnZlcnRlcidcbmltcG9ydCB7IGRlZmF1bHRIVE1MQ29udmVydGVycyB9IGZyb20gJy4uL2NvbnZlcnRlci9kZWZhdWx0Q29udmVydGVycydcblxudHlwZSBQcm9wcyA9IHtcbiAgbmFtZTogc3RyaW5nXG59XG5cbmV4cG9ydCBjb25zdCBsZXhpY2FsSFRNTDogKGxleGljYWxGaWVsZE5hbWU6IHN0cmluZywgcHJvcHM6IFByb3BzKSA9PiBUZXh0RmllbGQgPSAoXG4gIGxleGljYWxGaWVsZE5hbWUsXG4gIHByb3BzLFxuKSA9PiB7XG4gIGNvbnN0IHsgbmFtZSA9ICdsZXhpY2FsSFRNTCcgfSA9IHByb3BzXG4gIHJldHVybiB7XG4gICAgbmFtZTogbmFtZSxcbiAgICBhZG1pbjoge1xuICAgICAgaGlkZGVuOiB0cnVlLFxuICAgIH0sXG4gICAgaG9va3M6IHtcbiAgICAgIGFmdGVyUmVhZDogW1xuICAgICAgICBhc3luYyAoeyBjb2xsZWN0aW9uLCBjb250ZXh0LCBkYXRhLCBvcmlnaW5hbERvYywgc2libGluZ0RhdGEgfSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGxleGljYWxGaWVsZDogUmljaFRleHRGaWVsZDxTZXJpYWxpemVkRWRpdG9yU3RhdGUsIEFkYXB0ZXJQcm9wcz4gPVxuICAgICAgICAgICAgY29sbGVjdGlvbi5maWVsZHMuZmluZChcbiAgICAgICAgICAgICAgKGZpZWxkKSA9PiAnbmFtZScgaW4gZmllbGQgJiYgZmllbGQubmFtZSA9PT0gbGV4aWNhbEZpZWxkTmFtZSxcbiAgICAgICAgICAgICkgYXMgUmljaFRleHRGaWVsZDxTZXJpYWxpemVkRWRpdG9yU3RhdGUsIEFkYXB0ZXJQcm9wcz5cblxuICAgICAgICAgIGNvbnN0IGxleGljYWxGaWVsZERhdGE6IFNlcmlhbGl6ZWRFZGl0b3JTdGF0ZSA9IHNpYmxpbmdEYXRhW2xleGljYWxGaWVsZE5hbWVdXG5cbiAgICAgICAgICBpZiAoIWxleGljYWxGaWVsZERhdGEpIHtcbiAgICAgICAgICAgIHJldHVybiAnJ1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghbGV4aWNhbEZpZWxkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICdZb3UgY2Fubm90IHVzZSB0aGUgbGV4aWNhbEhUTUwgZmllbGQgYmVjYXVzZSB0aGUgbGV4aWNhbCBmaWVsZCB3YXMgbm90IGZvdW5kJyxcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBjb25maWcgPSAobGV4aWNhbEZpZWxkPy5lZGl0b3IgYXMgTGV4aWNhbFJpY2hUZXh0QWRhcHRlcik/LmVkaXRvckNvbmZpZ1xuXG4gICAgICAgICAgaWYgKCFjb25maWcpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgJ1RoZSBsaW5rZWQgbGV4aWNhbCBmaWVsZCBkb2VzIG5vdCBoYXZlIGFuIGVkaXRvckNvbmZpZy4gVGhpcyBpcyBuZWVkZWQgZm9yIHRoZSBsZXhpY2FsSFRNTCBmaWVsZC4nLFxuICAgICAgICAgICAgKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghY29uZmlnPy5yZXNvbHZlZEZlYXR1cmVNYXA/LmhhcygnaHRtbENvbnZlcnRlcicpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICdZb3UgY2Fubm90IHVzZSB0aGUgbGV4aWNhbEhUTUwgZmllbGQgYmVjYXVzZSB0aGUgaHRtbENvbnZlcnRlciBmZWF0dXJlIHdhcyBub3QgZm91bmQnLFxuICAgICAgICAgICAgKVxuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBodG1sQ29udmVydGVyRmVhdHVyZSA9IGNvbmZpZy5yZXNvbHZlZEZlYXR1cmVNYXAuZ2V0KCdodG1sQ29udmVydGVyJylcbiAgICAgICAgICBjb25zdCBodG1sQ29udmVydGVyRmVhdHVyZVByb3BzOiBIVE1MQ29udmVydGVyRmVhdHVyZVByb3BzID0gaHRtbENvbnZlcnRlckZlYXR1cmUucHJvcHNcblxuICAgICAgICAgIGNvbnN0IGRlZmF1bHRDb252ZXJ0ZXJzV2l0aENvbnZlcnRlcnNGcm9tRmVhdHVyZXMgPSBjbG9uZURlZXAoZGVmYXVsdEhUTUxDb252ZXJ0ZXJzKVxuXG4gICAgICAgICAgZm9yIChjb25zdCBjb252ZXJ0ZXIgb2YgY29uZmlnLmZlYXR1cmVzLmNvbnZlcnRlcnMuaHRtbCkge1xuICAgICAgICAgICAgZGVmYXVsdENvbnZlcnRlcnNXaXRoQ29udmVydGVyc0Zyb21GZWF0dXJlcy5wdXNoKGNvbnZlcnRlcilcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBmaW5hbENvbnZlcnRlcnMgPVxuICAgICAgICAgICAgaHRtbENvbnZlcnRlckZlYXR1cmVQcm9wcz8uY29udmVydGVycyAmJlxuICAgICAgICAgICAgdHlwZW9mIGh0bWxDb252ZXJ0ZXJGZWF0dXJlUHJvcHM/LmNvbnZlcnRlcnMgPT09ICdmdW5jdGlvbidcbiAgICAgICAgICAgICAgPyBodG1sQ29udmVydGVyRmVhdHVyZVByb3BzLmNvbnZlcnRlcnMoe1xuICAgICAgICAgICAgICAgICAgZGVmYXVsdENvbnZlcnRlcnM6IGRlZmF1bHRDb252ZXJ0ZXJzV2l0aENvbnZlcnRlcnNGcm9tRmVhdHVyZXMsXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgOiAoaHRtbENvbnZlcnRlckZlYXR1cmVQcm9wcz8uY29udmVydGVycyBhcyBIVE1MQ29udmVydGVyW10pIHx8XG4gICAgICAgICAgICAgICAgZGVmYXVsdENvbnZlcnRlcnNXaXRoQ29udmVydGVyc0Zyb21GZWF0dXJlc1xuXG4gICAgICAgICAgcmV0dXJuIGF3YWl0IGNvbnZlcnRMZXhpY2FsVG9IVE1MKHtcbiAgICAgICAgICAgIGNvbnZlcnRlcnM6IGZpbmFsQ29udmVydGVycyxcbiAgICAgICAgICAgIGRhdGE6IGxleGljYWxGaWVsZERhdGEsXG4gICAgICAgICAgfSlcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgICB0eXBlOiAndGV4dCcsXG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJsZXhpY2FsSFRNTCIsImxleGljYWxGaWVsZE5hbWUiLCJwcm9wcyIsIm5hbWUiLCJhZG1pbiIsImhpZGRlbiIsImhvb2tzIiwiYWZ0ZXJSZWFkIiwiY29sbGVjdGlvbiIsImNvbnRleHQiLCJkYXRhIiwib3JpZ2luYWxEb2MiLCJzaWJsaW5nRGF0YSIsImxleGljYWxGaWVsZCIsImZpZWxkcyIsImZpbmQiLCJmaWVsZCIsImxleGljYWxGaWVsZERhdGEiLCJFcnJvciIsImNvbmZpZyIsImVkaXRvciIsImVkaXRvckNvbmZpZyIsInJlc29sdmVkRmVhdHVyZU1hcCIsImhhcyIsImh0bWxDb252ZXJ0ZXJGZWF0dXJlIiwiZ2V0IiwiaHRtbENvbnZlcnRlckZlYXR1cmVQcm9wcyIsImRlZmF1bHRDb252ZXJ0ZXJzV2l0aENvbnZlcnRlcnNGcm9tRmVhdHVyZXMiLCJjbG9uZURlZXAiLCJkZWZhdWx0SFRNTENvbnZlcnRlcnMiLCJjb252ZXJ0ZXIiLCJmZWF0dXJlcyIsImNvbnZlcnRlcnMiLCJodG1sIiwicHVzaCIsImZpbmFsQ29udmVydGVycyIsImRlZmF1bHRDb252ZXJ0ZXJzIiwiY29udmVydExleGljYWxUb0hUTUwiLCJ0eXBlIl0sIm1hcHBpbmdzIjoiOzs7OytCQWdCYUE7OztlQUFBQTs7O3VCQVJhOzJCQUNXO21DQUNDO0FBTS9CLE1BQU1BLGNBQXFFLENBQ2hGQyxrQkFDQUM7SUFFQSxNQUFNLEVBQUVDLE9BQU8sYUFBYSxFQUFFLEdBQUdEO0lBQ2pDLE9BQU87UUFDTEMsTUFBTUE7UUFDTkMsT0FBTztZQUNMQyxRQUFRO1FBQ1Y7UUFDQUMsT0FBTztZQUNMQyxXQUFXO2dCQUNULE9BQU8sRUFBRUMsVUFBVSxFQUFFQyxPQUFPLEVBQUVDLElBQUksRUFBRUMsV0FBVyxFQUFFQyxXQUFXLEVBQUU7b0JBQzVELE1BQU1DLGVBQ0pMLFdBQVdNLE1BQU0sQ0FBQ0MsSUFBSSxDQUNwQixDQUFDQyxRQUFVLFVBQVVBLFNBQVNBLE1BQU1iLElBQUksS0FBS0Y7b0JBR2pELE1BQU1nQixtQkFBMENMLFdBQVcsQ0FBQ1gsaUJBQWlCO29CQUU3RSxJQUFJLENBQUNnQixrQkFBa0I7d0JBQ3JCLE9BQU87b0JBQ1Q7b0JBRUEsSUFBSSxDQUFDSixjQUFjO3dCQUNqQixNQUFNLElBQUlLLE1BQ1I7b0JBRUo7b0JBRUEsTUFBTUMsU0FBUyxDQUFDTixjQUFjTyxNQUFnQyxHQUFHQztvQkFFakUsSUFBSSxDQUFDRixRQUFRO3dCQUNYLE1BQU0sSUFBSUQsTUFDUjtvQkFFSjtvQkFFQSxJQUFJLENBQUNDLFFBQVFHLG9CQUFvQkMsSUFBSSxrQkFBa0I7d0JBQ3JELE1BQU0sSUFBSUwsTUFDUjtvQkFFSjtvQkFDQSxNQUFNTSx1QkFBdUJMLE9BQU9HLGtCQUFrQixDQUFDRyxHQUFHLENBQUM7b0JBQzNELE1BQU1DLDRCQUF1REYscUJBQXFCdEIsS0FBSztvQkFFdkYsTUFBTXlCLDhDQUE4Q0MsSUFBQUEsZ0JBQVMsRUFBQ0Msd0NBQXFCO29CQUVuRixLQUFLLE1BQU1DLGFBQWFYLE9BQU9ZLFFBQVEsQ0FBQ0MsVUFBVSxDQUFDQyxJQUFJLENBQUU7d0JBQ3ZETiw0Q0FBNENPLElBQUksQ0FBQ0o7b0JBQ25EO29CQUVBLE1BQU1LLGtCQUNKVCwyQkFBMkJNLGNBQzNCLE9BQU9OLDJCQUEyQk0sZUFBZSxhQUM3Q04sMEJBQTBCTSxVQUFVLENBQUM7d0JBQ25DSSxtQkFBbUJUO29CQUNyQixLQUNBLENBQUNELDJCQUEyQk0sVUFBNkIsS0FDekRMO29CQUVOLE9BQU8sTUFBTVUsSUFBQUEsK0JBQW9CLEVBQUM7d0JBQ2hDTCxZQUFZRzt3QkFDWnpCLE1BQU1PO29CQUNSO2dCQUNGO2FBQ0Q7UUFDSDtRQUNBcUIsTUFBTTtJQUNSO0FBQ0YifQ==
98
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9maWVsZC9mZWF0dXJlcy9jb252ZXJ0ZXJzL2h0bWwvZmllbGQvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBTZXJpYWxpemVkRWRpdG9yU3RhdGUgfSBmcm9tICdsZXhpY2FsJ1xuaW1wb3J0IHR5cGUgeyBGaWVsZCwgUmljaFRleHRGaWVsZCwgVGV4dEZpZWxkIH0gZnJvbSAncGF5bG9hZC90eXBlcydcblxuaW1wb3J0IHR5cGUgeyBMZXhpY2FsUmljaFRleHRBZGFwdGVyLCBTYW5pdGl6ZWRFZGl0b3JDb25maWcgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9pbmRleCdcbmltcG9ydCB0eXBlIHsgQWRhcHRlclByb3BzIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vdHlwZXMnXG5pbXBvcnQgdHlwZSB7IEhUTUxDb252ZXJ0ZXIgfSBmcm9tICcuLi9jb252ZXJ0ZXIvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IEhUTUxDb252ZXJ0ZXJGZWF0dXJlUHJvcHMgfSBmcm9tICcuLi9pbmRleCdcblxuaW1wb3J0IHsgY29udmVydExleGljYWxUb0hUTUwgfSBmcm9tICcuLi9jb252ZXJ0ZXInXG5pbXBvcnQgeyBkZWZhdWx0SFRNTENvbnZlcnRlcnMgfSBmcm9tICcuLi9jb252ZXJ0ZXIvZGVmYXVsdENvbnZlcnRlcnMnXG5cbnR5cGUgUHJvcHMgPSB7XG4gIG5hbWU6IHN0cmluZ1xufVxuXG4vKipcbiAqIENvbWJpbmVzIHRoZSBkZWZhdWx0IEhUTUwgY29udmVydGVycyB3aXRoIEhUTUwgY29udmVydGVycyBmb3VuZCBpbiB0aGUgZmVhdHVyZXMsIGFuZCB3aXRoIEhUTUwgY29udmVydGVycyBjb25maWd1cmVkIGluIHRoZSBodG1sQ29udmVydGVyIGZlYXR1cmUuXG4gKlxuICogQHBhcmFtIGVkaXRvckNvbmZpZ1xuICovXG5leHBvcnQgY29uc3QgY29uc29saWRhdGVIVE1MQ29udmVydGVycyA9ICh7XG4gIGVkaXRvckNvbmZpZyxcbn06IHtcbiAgZWRpdG9yQ29uZmlnOiBTYW5pdGl6ZWRFZGl0b3JDb25maWdcbn0pID0+IHtcbiAgY29uc3QgaHRtbENvbnZlcnRlckZlYXR1cmUgPSBlZGl0b3JDb25maWcucmVzb2x2ZWRGZWF0dXJlTWFwLmdldCgnaHRtbENvbnZlcnRlcicpXG4gIGNvbnN0IGh0bWxDb252ZXJ0ZXJGZWF0dXJlUHJvcHM6IEhUTUxDb252ZXJ0ZXJGZWF0dXJlUHJvcHMgPSBodG1sQ29udmVydGVyRmVhdHVyZT8ucHJvcHNcblxuICBjb25zdCBkZWZhdWx0Q29udmVydGVyc1dpdGhDb252ZXJ0ZXJzRnJvbUZlYXR1cmVzID0gZGVmYXVsdEhUTUxDb252ZXJ0ZXJzXG5cbiAgZm9yIChjb25zdCBjb252ZXJ0ZXIgb2YgZWRpdG9yQ29uZmlnLmZlYXR1cmVzLmNvbnZlcnRlcnMuaHRtbCkge1xuICAgIGRlZmF1bHRDb252ZXJ0ZXJzV2l0aENvbnZlcnRlcnNGcm9tRmVhdHVyZXMucHVzaChjb252ZXJ0ZXIpXG4gIH1cblxuICBjb25zdCBmaW5hbENvbnZlcnRlcnMgPVxuICAgIGh0bWxDb252ZXJ0ZXJGZWF0dXJlUHJvcHM/LmNvbnZlcnRlcnMgJiZcbiAgICB0eXBlb2YgaHRtbENvbnZlcnRlckZlYXR1cmVQcm9wcz8uY29udmVydGVycyA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgPyBodG1sQ29udmVydGVyRmVhdHVyZVByb3BzLmNvbnZlcnRlcnMoe1xuICAgICAgICAgIGRlZmF1bHRDb252ZXJ0ZXJzOiBkZWZhdWx0Q29udmVydGVyc1dpdGhDb252ZXJ0ZXJzRnJvbUZlYXR1cmVzLFxuICAgICAgICB9KVxuICAgICAgOiAoaHRtbENvbnZlcnRlckZlYXR1cmVQcm9wcz8uY29udmVydGVycyBhcyBIVE1MQ29udmVydGVyW10pIHx8XG4gICAgICAgIGRlZmF1bHRDb252ZXJ0ZXJzV2l0aENvbnZlcnRlcnNGcm9tRmVhdHVyZXNcblxuICByZXR1cm4gZmluYWxDb252ZXJ0ZXJzXG59XG5cbmV4cG9ydCBjb25zdCBsZXhpY2FsSFRNTDogKFxuICAvKipcbiAgICogQSBzdHJpbmcgd2hpY2ggbWF0Y2hlcyB0aGUgbGV4aWNhbCBmaWVsZCBuYW1lIHlvdSB3YW50IHRvIGNvbnZlcnQgdG8gSFRNTC5cbiAgICpcbiAgICogVGhpcyBoYXMgdG8gYmUgYSBTSUJMSU5HIGZpZWxkIG9mIHRoaXMgbGV4aWNhbEhUTUwgZmllbGQgLSBvdGhlcndpc2UsIGl0IHdvbid0IGJlIGFibGUgdG8gZmluZCB0aGUgbGV4aWNhbCBmaWVsZC5cbiAgICoqL1xuICBsZXhpY2FsRmllbGROYW1lOiBzdHJpbmcsXG4gIHByb3BzOiBQcm9wcyxcbikgPT4gVGV4dEZpZWxkID0gKGxleGljYWxGaWVsZE5hbWUsIHByb3BzKSA9PiB7XG4gIGNvbnN0IHsgbmFtZSA9ICdsZXhpY2FsSFRNTCcgfSA9IHByb3BzXG4gIHJldHVybiB7XG4gICAgbmFtZTogbmFtZSxcbiAgICBhZG1pbjoge1xuICAgICAgaGlkZGVuOiB0cnVlLFxuICAgIH0sXG4gICAgaG9va3M6IHtcbiAgICAgIGFmdGVyUmVhZDogW1xuICAgICAgICBhc3luYyAoeyBjb2xsZWN0aW9uLCBmaWVsZCwgZ2xvYmFsLCBzaWJsaW5nRGF0YSB9KSA9PiB7XG4gICAgICAgICAgY29uc3QgZmllbGRzID0gY29sbGVjdGlvbiA/IGNvbGxlY3Rpb24uZmllbGRzIDogZ2xvYmFsLmZpZWxkc1xuXG4gICAgICAgICAgLy8gZmluZCB0aGUgcGF0aCBvZiB0aGlzIGZpZWxkLCBhcyB3ZWxsIGFzIGl0cyBzaWJsaW5nIGZpZWxkcywgYnkgbG9va2luZyBmb3IgdGhpcyBgZmllbGRgIGluIGZpZWxkcyBhbmQgdHJhdmVyc2luZyBpdCByZWN1cnNpdmVseVxuICAgICAgICAgIGZ1bmN0aW9uIGZpbmRGaWVsZFBhdGhBbmRTaWJsaW5nRmllbGRzKFxuICAgICAgICAgICAgZmllbGRzOiBGaWVsZFtdLFxuICAgICAgICAgICAgcGF0aDogc3RyaW5nW10sXG4gICAgICAgICAgKToge1xuICAgICAgICAgICAgcGF0aDogc3RyaW5nW11cbiAgICAgICAgICAgIHNpYmxpbmdGaWVsZHM6IEZpZWxkW11cbiAgICAgICAgICB9IHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY3VyRmllbGQgb2YgZmllbGRzKSB7XG4gICAgICAgICAgICAgIGlmIChjdXJGaWVsZCA9PT0gZmllbGQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgcGF0aDogWy4uLnBhdGgsIGN1ckZpZWxkLm5hbWVdLFxuICAgICAgICAgICAgICAgICAgc2libGluZ0ZpZWxkczogZmllbGRzLFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICgnZmllbGRzJyBpbiBjdXJGaWVsZCAmJiAnbmFtZScgaW4gY3VyRmllbGQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBmaW5kRmllbGRQYXRoQW5kU2libGluZ0ZpZWxkcyhjdXJGaWVsZC5maWVsZHMsIFtcbiAgICAgICAgICAgICAgICAgIC4uLnBhdGgsXG4gICAgICAgICAgICAgICAgICBjdXJGaWVsZC5uYW1lLFxuICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCB7IHBhdGgsIHNpYmxpbmdGaWVsZHMgfSA9IGZpbmRGaWVsZFBhdGhBbmRTaWJsaW5nRmllbGRzKGZpZWxkcywgW10pXG5cbiAgICAgICAgICBjb25zdCBsZXhpY2FsRmllbGQ6IFJpY2hUZXh0RmllbGQ8U2VyaWFsaXplZEVkaXRvclN0YXRlLCBBZGFwdGVyUHJvcHM+ID1cbiAgICAgICAgICAgIHNpYmxpbmdGaWVsZHMuZmluZChcbiAgICAgICAgICAgICAgKGZpZWxkKSA9PiAnbmFtZScgaW4gZmllbGQgJiYgZmllbGQubmFtZSA9PT0gbGV4aWNhbEZpZWxkTmFtZSxcbiAgICAgICAgICAgICkgYXMgUmljaFRleHRGaWVsZDxTZXJpYWxpemVkRWRpdG9yU3RhdGUsIEFkYXB0ZXJQcm9wcz5cblxuICAgICAgICAgIGNvbnN0IGxleGljYWxGaWVsZERhdGE6IFNlcmlhbGl6ZWRFZGl0b3JTdGF0ZSA9IHNpYmxpbmdEYXRhW2xleGljYWxGaWVsZE5hbWVdXG5cbiAgICAgICAgICBpZiAoIWxleGljYWxGaWVsZERhdGEpIHtcbiAgICAgICAgICAgIHJldHVybiAnJ1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghbGV4aWNhbEZpZWxkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICdZb3UgY2Fubm90IHVzZSB0aGUgbGV4aWNhbEhUTUwgZmllbGQgYmVjYXVzZSB0aGUgcmVmZXJlbmNlZCBsZXhpY2FsIGZpZWxkIHdhcyBub3QgZm91bmQnLFxuICAgICAgICAgICAgKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGNvbmZpZyA9IChsZXhpY2FsRmllbGQ/LmVkaXRvciBhcyBMZXhpY2FsUmljaFRleHRBZGFwdGVyKT8uZWRpdG9yQ29uZmlnXG5cbiAgICAgICAgICBpZiAoIWNvbmZpZykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAnVGhlIGxpbmtlZCBsZXhpY2FsIGZpZWxkIGRvZXMgbm90IGhhdmUgYW4gZWRpdG9yQ29uZmlnLiBUaGlzIGlzIG5lZWRlZCBmb3IgdGhlIGxleGljYWxIVE1MIGZpZWxkLicsXG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCFjb25maWc/LnJlc29sdmVkRmVhdHVyZU1hcD8uaGFzKCdodG1sQ29udmVydGVyJykpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgJ1lvdSBjYW5ub3QgdXNlIHRoZSBsZXhpY2FsSFRNTCBmaWVsZCBiZWNhdXNlIHRoZSBsaW5rZWQgbGV4aWNhbCBmaWVsZCBkb2VzIG5vdCBoYXZlIGEgSFRNTENvbnZlcnRlckZlYXR1cmUnLFxuICAgICAgICAgICAgKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGZpbmFsQ29udmVydGVycyA9IGNvbnNvbGlkYXRlSFRNTENvbnZlcnRlcnMoe1xuICAgICAgICAgICAgZWRpdG9yQ29uZmlnOiBjb25maWcsXG4gICAgICAgICAgfSlcblxuICAgICAgICAgIHJldHVybiBhd2FpdCBjb252ZXJ0TGV4aWNhbFRvSFRNTCh7XG4gICAgICAgICAgICBjb252ZXJ0ZXJzOiBmaW5hbENvbnZlcnRlcnMsXG4gICAgICAgICAgICBkYXRhOiBsZXhpY2FsRmllbGREYXRhLFxuICAgICAgICAgIH0pXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0sXG4gICAgdHlwZTogJ3RleHQnLFxuICB9XG59XG4iXSwibmFtZXMiOlsiY29uc29saWRhdGVIVE1MQ29udmVydGVycyIsImxleGljYWxIVE1MIiwiZWRpdG9yQ29uZmlnIiwiaHRtbENvbnZlcnRlckZlYXR1cmUiLCJyZXNvbHZlZEZlYXR1cmVNYXAiLCJnZXQiLCJodG1sQ29udmVydGVyRmVhdHVyZVByb3BzIiwicHJvcHMiLCJkZWZhdWx0Q29udmVydGVyc1dpdGhDb252ZXJ0ZXJzRnJvbUZlYXR1cmVzIiwiZGVmYXVsdEhUTUxDb252ZXJ0ZXJzIiwiY29udmVydGVyIiwiZmVhdHVyZXMiLCJjb252ZXJ0ZXJzIiwiaHRtbCIsInB1c2giLCJmaW5hbENvbnZlcnRlcnMiLCJkZWZhdWx0Q29udmVydGVycyIsImxleGljYWxGaWVsZE5hbWUiLCJuYW1lIiwiYWRtaW4iLCJoaWRkZW4iLCJob29rcyIsImFmdGVyUmVhZCIsImNvbGxlY3Rpb24iLCJmaWVsZCIsImdsb2JhbCIsInNpYmxpbmdEYXRhIiwiZmllbGRzIiwiZmluZEZpZWxkUGF0aEFuZFNpYmxpbmdGaWVsZHMiLCJwYXRoIiwiY3VyRmllbGQiLCJzaWJsaW5nRmllbGRzIiwicmVzdWx0IiwibGV4aWNhbEZpZWxkIiwiZmluZCIsImxleGljYWxGaWVsZERhdGEiLCJFcnJvciIsImNvbmZpZyIsImVkaXRvciIsImhhcyIsImNvbnZlcnRMZXhpY2FsVG9IVE1MIiwiZGF0YSIsInR5cGUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0lBb0JhQSx5QkFBeUI7ZUFBekJBOztJQTBCQUMsV0FBVztlQUFYQTs7OzJCQXRDd0I7bUNBQ0M7QUFXL0IsTUFBTUQsNEJBQTRCLENBQUMsRUFDeENFLFlBQVksRUFHYjtJQUNDLE1BQU1DLHVCQUF1QkQsYUFBYUUsa0JBQWtCLENBQUNDLEdBQUcsQ0FBQztJQUNqRSxNQUFNQyw0QkFBdURILHNCQUFzQkk7SUFFbkYsTUFBTUMsOENBQThDQyx3Q0FBcUI7SUFFekUsS0FBSyxNQUFNQyxhQUFhUixhQUFhUyxRQUFRLENBQUNDLFVBQVUsQ0FBQ0MsSUFBSSxDQUFFO1FBQzdETCw0Q0FBNENNLElBQUksQ0FBQ0o7SUFDbkQ7SUFFQSxNQUFNSyxrQkFDSlQsMkJBQTJCTSxjQUMzQixPQUFPTiwyQkFBMkJNLGVBQWUsYUFDN0NOLDBCQUEwQk0sVUFBVSxDQUFDO1FBQ25DSSxtQkFBbUJSO0lBQ3JCLEtBQ0EsQ0FBQ0YsMkJBQTJCTSxVQUE2QixLQUN6REo7SUFFTixPQUFPTztBQUNUO0FBRU8sTUFBTWQsY0FRSSxDQUFDZ0Isa0JBQWtCVjtJQUNsQyxNQUFNLEVBQUVXLE9BQU8sYUFBYSxFQUFFLEdBQUdYO0lBQ2pDLE9BQU87UUFDTFcsTUFBTUE7UUFDTkMsT0FBTztZQUNMQyxRQUFRO1FBQ1Y7UUFDQUMsT0FBTztZQUNMQyxXQUFXO2dCQUNULE9BQU8sRUFBRUMsVUFBVSxFQUFFQyxLQUFLLEVBQUVDLE1BQU0sRUFBRUMsV0FBVyxFQUFFO29CQUMvQyxNQUFNQyxTQUFTSixhQUFhQSxXQUFXSSxNQUFNLEdBQUdGLE9BQU9FLE1BQU07b0JBRTdELGtJQUFrSTtvQkFDbEksU0FBU0MsOEJBQ1BELE1BQWUsRUFDZkUsSUFBYzt3QkFLZCxLQUFLLE1BQU1DLFlBQVlILE9BQVE7NEJBQzdCLElBQUlHLGFBQWFOLE9BQU87Z0NBQ3RCLE9BQU87b0NBQ0xLLE1BQU07MkNBQUlBO3dDQUFNQyxTQUFTWixJQUFJO3FDQUFDO29DQUM5QmEsZUFBZUo7Z0NBQ2pCOzRCQUNGOzRCQUVBLElBQUksWUFBWUcsWUFBWSxVQUFVQSxVQUFVO2dDQUM5QyxNQUFNRSxTQUFTSiw4QkFBOEJFLFNBQVNILE1BQU0sRUFBRTt1Q0FDekRFO29DQUNIQyxTQUFTWixJQUFJO2lDQUNkO2dDQUNELElBQUljLFFBQVE7b0NBQ1YsT0FBT0E7Z0NBQ1Q7NEJBQ0Y7d0JBQ0Y7d0JBRUEsT0FBTztvQkFDVDtvQkFDQSxNQUFNLEVBQUVILElBQUksRUFBRUUsYUFBYSxFQUFFLEdBQUdILDhCQUE4QkQsUUFBUSxFQUFFO29CQUV4RSxNQUFNTSxlQUNKRixjQUFjRyxJQUFJLENBQ2hCLENBQUNWLFFBQVUsVUFBVUEsU0FBU0EsTUFBTU4sSUFBSSxLQUFLRDtvQkFHakQsTUFBTWtCLG1CQUEwQ1QsV0FBVyxDQUFDVCxpQkFBaUI7b0JBRTdFLElBQUksQ0FBQ2tCLGtCQUFrQjt3QkFDckIsT0FBTztvQkFDVDtvQkFFQSxJQUFJLENBQUNGLGNBQWM7d0JBQ2pCLE1BQU0sSUFBSUcsTUFDUjtvQkFFSjtvQkFFQSxNQUFNQyxTQUFTLENBQUNKLGNBQWNLLE1BQWdDLEdBQUdwQztvQkFFakUsSUFBSSxDQUFDbUMsUUFBUTt3QkFDWCxNQUFNLElBQUlELE1BQ1I7b0JBRUo7b0JBRUEsSUFBSSxDQUFDQyxRQUFRakMsb0JBQW9CbUMsSUFBSSxrQkFBa0I7d0JBQ3JELE1BQU0sSUFBSUgsTUFDUjtvQkFFSjtvQkFFQSxNQUFNckIsa0JBQWtCZiwwQkFBMEI7d0JBQ2hERSxjQUFjbUM7b0JBQ2hCO29CQUVBLE9BQU8sTUFBTUcsSUFBQUEsK0JBQW9CLEVBQUM7d0JBQ2hDNUIsWUFBWUc7d0JBQ1owQixNQUFNTjtvQkFDUjtnQkFDRjthQUNEO1FBQ0g7UUFDQU8sTUFBTTtJQUNSO0FBQ0YifQ==
@@ -0,0 +1,3 @@
1
+ import type { FeatureProvider } from '../../types';
2
+ export declare const TestRecorderFeature: () => FeatureProvider;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/field/features/debug/TestRecorder/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAIlD,eAAO,MAAM,mBAAmB,QAAO,eAetC,CAAA"}
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "TestRecorderFeature", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return TestRecorderFeature;
9
+ }
10
+ });
11
+ const _plugin = require("./plugin");
12
+ const TestRecorderFeature = ()=>{
13
+ return {
14
+ feature: ()=>{
15
+ return {
16
+ plugins: [
17
+ {
18
+ Component: _plugin.TestRecorderPlugin,
19
+ position: 'bottom'
20
+ }
21
+ ],
22
+ props: null
23
+ };
24
+ },
25
+ key: 'debug-testrecorder'
26
+ };
27
+ };
28
+
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9maWVsZC9mZWF0dXJlcy9kZWJ1Zy9UZXN0UmVjb3JkZXIvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBGZWF0dXJlUHJvdmlkZXIgfSBmcm9tICcuLi8uLi90eXBlcydcblxuaW1wb3J0IHsgVGVzdFJlY29yZGVyUGx1Z2luIH0gZnJvbSAnLi9wbHVnaW4nXG5cbmV4cG9ydCBjb25zdCBUZXN0UmVjb3JkZXJGZWF0dXJlID0gKCk6IEZlYXR1cmVQcm92aWRlciA9PiB7XG4gIHJldHVybiB7XG4gICAgZmVhdHVyZTogKCkgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcGx1Z2luczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIENvbXBvbmVudDogVGVzdFJlY29yZGVyUGx1Z2luLFxuICAgICAgICAgICAgcG9zaXRpb246ICdib3R0b20nLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIHByb3BzOiBudWxsLFxuICAgICAgfVxuICAgIH0sXG4gICAga2V5OiAnZGVidWctdGVzdHJlY29yZGVyJyxcbiAgfVxufVxuIl0sIm5hbWVzIjpbIlRlc3RSZWNvcmRlckZlYXR1cmUiLCJmZWF0dXJlIiwicGx1Z2lucyIsIkNvbXBvbmVudCIsIlRlc3RSZWNvcmRlclBsdWdpbiIsInBvc2l0aW9uIiwicHJvcHMiLCJrZXkiXSwibWFwcGluZ3MiOiI7Ozs7K0JBSWFBOzs7ZUFBQUE7Ozt3QkFGc0I7QUFFNUIsTUFBTUEsc0JBQXNCO0lBQ2pDLE9BQU87UUFDTEMsU0FBUztZQUNQLE9BQU87Z0JBQ0xDLFNBQVM7b0JBQ1A7d0JBQ0VDLFdBQVdDLDBCQUFrQjt3QkFDN0JDLFVBQVU7b0JBQ1o7aUJBQ0Q7Z0JBQ0RDLE9BQU87WUFDVDtRQUNGO1FBQ0FDLEtBQUs7SUFDUDtBQUNGIn0=
@@ -0,0 +1,5 @@
1
+ import * as React from 'react';
2
+ import './index.scss';
3
+ export declare function isSelectAll(event: KeyboardEvent): boolean;
4
+ export declare const TestRecorderPlugin: React.FC;
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/field/features/debug/TestRecorder/plugin/index.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAI9B,OAAO,cAAc,CAAA;AA8ErB,wBAAgB,WAAW,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAEzD;AA+VD,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAYtC,CAAA"}