@pie-lib/editable-html-tip-tap 1.2.0-next.2 → 1.2.0-next.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +31 -27
- package/LICENSE.md +5 -0
- package/lib/components/CharacterPicker.js +1 -1
- package/lib/components/CharacterPicker.js.map +1 -1
- package/lib/components/EditableHtml.js +1 -1
- package/lib/components/EditableHtml.js.map +1 -1
- package/lib/components/MenuBar.js +1 -1
- package/lib/components/MenuBar.js.map +1 -1
- package/lib/components/TiptapContainer.js +1 -1
- package/lib/components/TiptapContainer.js.map +1 -1
- package/lib/components/characters/characterUtils.js +1 -1
- package/lib/components/characters/custom-popper.js +1 -1
- package/lib/components/common/done-button.js +1 -1
- package/lib/components/common/toolbar-buttons.js +1 -1
- package/lib/components/icons/CssIcon.js +1 -1
- package/lib/components/icons/RespArea.js +1 -1
- package/lib/components/icons/TableIcons.js +1 -1
- package/lib/components/icons/TextAlign.js +1 -1
- package/lib/components/image/AltDialog.js +1 -1
- package/lib/components/image/ImageToolbar.js +1 -1
- package/lib/components/image/InsertImageHandler.js +1 -1
- package/lib/components/media/MediaDialog.js +1 -1
- package/lib/components/media/MediaToolbar.js +1 -1
- package/lib/components/media/MediaWrapper.js +1 -1
- package/lib/components/respArea/DragInTheBlank/DragInTheBlank.js +1 -1
- package/lib/components/respArea/DragInTheBlank/DragInTheBlank.js.map +1 -1
- package/lib/components/respArea/DragInTheBlank/choice.js +1 -1
- package/lib/components/respArea/ExplicitConstructedResponse.js +1 -1
- package/lib/components/respArea/InlineDropdown.js +1 -1
- package/lib/components/respArea/ToolbarIcon.js +1 -1
- package/lib/constants.js +1 -1
- package/lib/extensions/css.js +1 -1
- package/lib/extensions/custom-toolbar-wrapper.js +1 -1
- package/lib/extensions/extended-table.js +1 -1
- package/lib/extensions/image-component.js +1 -1
- package/lib/extensions/image-component.js.map +1 -1
- package/lib/extensions/image.js +1 -1
- package/lib/extensions/index.js +4 -2
- package/lib/extensions/index.js.map +1 -1
- package/lib/extensions/math.js +1 -1
- package/lib/extensions/media.js +15 -12
- package/lib/extensions/media.js.map +1 -1
- package/lib/extensions/responseArea.js +1 -1
- package/lib/index.js +1 -1
- package/lib/styles/editorContainerStyles.js +1 -1
- package/lib/theme.js +1 -1
- package/lib/utils/size.js +1 -1
- package/package.json +7 -7
- package/src/components/EditableHtml.jsx +4 -2
- package/src/extensions/__tests__/media-node-view.test.jsx +296 -0
- package/src/extensions/__tests__/media.test.js +1 -0
- package/src/extensions/index.js +2 -0
- package/src/extensions/media.js +17 -14
- package/lib/__tests__/EditableHtml.test.js +0 -377
- package/lib/__tests__/constants.test.js +0 -21
- package/lib/__tests__/extensions.test.js +0 -209
- package/lib/__tests__/index.test.js +0 -235
- package/lib/__tests__/size-utils.test.js +0 -57
- package/lib/__tests__/theme.test.js +0 -17
- package/lib/components/__tests__/AltDialog.test.js +0 -201
- package/lib/components/__tests__/CharacterPicker.test.js +0 -305
- package/lib/components/__tests__/CssIcon.test.js +0 -58
- package/lib/components/__tests__/DragInTheBlank.test.js +0 -295
- package/lib/components/__tests__/ExplicitConstructedResponse.test.js +0 -253
- package/lib/components/__tests__/ImageToolbar.test.js +0 -185
- package/lib/components/__tests__/InlineDropdown.test.js +0 -287
- package/lib/components/__tests__/InsertImageHandler.test.js +0 -162
- package/lib/components/__tests__/MediaDialog.test.js +0 -433
- package/lib/components/__tests__/MediaToolbar.test.js +0 -126
- package/lib/components/__tests__/MediaWrapper.test.js +0 -96
- package/lib/components/__tests__/MenuBar.test.js +0 -459
- package/lib/components/__tests__/RespArea.test.js +0 -171
- package/lib/components/__tests__/TableIcons.test.js +0 -153
- package/lib/components/__tests__/TextAlign.test.js +0 -209
- package/lib/components/__tests__/TiptapContainer.test.js +0 -196
- package/lib/components/__tests__/characterUtils.test.js +0 -178
- package/lib/components/__tests__/choice.test.js +0 -213
- package/lib/components/__tests__/custom-popper.test.js +0 -108
- package/lib/components/__tests__/done-button.test.js +0 -72
- package/lib/components/__tests__/toolbar-buttons.test.js +0 -277
- package/lib/extensions/__tests__/component.test.js +0 -314
- package/lib/extensions/__tests__/css.test.js +0 -214
- package/lib/extensions/__tests__/custom-toolbar-wrapper.test.js +0 -175
- package/lib/extensions/__tests__/extended-table.test.js +0 -92
- package/lib/extensions/__tests__/image-component.test.js +0 -305
- package/lib/extensions/__tests__/image.test.js +0 -164
- package/lib/extensions/__tests__/media.test.js +0 -292
- package/lib/extensions/__tests__/responseArea.test.js +0 -330
- package/lib/extensions/component.js +0 -305
|
@@ -1,277 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
var _react = _interopRequireDefault(require("react"));
|
|
5
|
-
var _react2 = require("@testing-library/react");
|
|
6
|
-
var _toolbarButtons = require("../common/toolbar-buttons");
|
|
7
|
-
describe('RawButton', function () {
|
|
8
|
-
it('renders without crashing', function () {
|
|
9
|
-
var _render = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_toolbarButtons.RawButton, {
|
|
10
|
-
onClick: jest.fn()
|
|
11
|
-
}, "Click me")),
|
|
12
|
-
container = _render.container;
|
|
13
|
-
expect(container).toBeInTheDocument();
|
|
14
|
-
});
|
|
15
|
-
it('renders children', function () {
|
|
16
|
-
var _render2 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_toolbarButtons.RawButton, {
|
|
17
|
-
onClick: jest.fn()
|
|
18
|
-
}, "Test Button")),
|
|
19
|
-
getByText = _render2.getByText;
|
|
20
|
-
expect(getByText('Test Button')).toBeInTheDocument();
|
|
21
|
-
});
|
|
22
|
-
it('calls onClick on mouse down', function () {
|
|
23
|
-
var onClick = jest.fn();
|
|
24
|
-
var _render3 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_toolbarButtons.RawButton, {
|
|
25
|
-
onClick: onClick
|
|
26
|
-
}, "Click")),
|
|
27
|
-
getByText = _render3.getByText;
|
|
28
|
-
_react2.fireEvent.mouseDown(getByText('Click'));
|
|
29
|
-
expect(onClick).toHaveBeenCalled();
|
|
30
|
-
});
|
|
31
|
-
it('prevents default on mouse down', function () {
|
|
32
|
-
var onClick = jest.fn();
|
|
33
|
-
var _render4 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_toolbarButtons.RawButton, {
|
|
34
|
-
onClick: onClick
|
|
35
|
-
}, "Click")),
|
|
36
|
-
getByText = _render4.getByText;
|
|
37
|
-
var button = getByText('Click');
|
|
38
|
-
var event = new MouseEvent('mousedown', {
|
|
39
|
-
bubbles: true,
|
|
40
|
-
cancelable: true
|
|
41
|
-
});
|
|
42
|
-
var preventDefaultSpy = jest.spyOn(event, 'preventDefault');
|
|
43
|
-
button.dispatchEvent(event);
|
|
44
|
-
expect(preventDefaultSpy).toHaveBeenCalled();
|
|
45
|
-
});
|
|
46
|
-
it('calls onClick on Enter key press', function () {
|
|
47
|
-
var onClick = jest.fn();
|
|
48
|
-
var _render5 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_toolbarButtons.RawButton, {
|
|
49
|
-
onClick: onClick
|
|
50
|
-
}, "Click")),
|
|
51
|
-
getByText = _render5.getByText;
|
|
52
|
-
_react2.fireEvent.keyDown(getByText('Click'), {
|
|
53
|
-
key: 'Enter'
|
|
54
|
-
});
|
|
55
|
-
expect(onClick).toHaveBeenCalled();
|
|
56
|
-
});
|
|
57
|
-
it('calls onClick on Space key press', function () {
|
|
58
|
-
var onClick = jest.fn();
|
|
59
|
-
var _render6 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_toolbarButtons.RawButton, {
|
|
60
|
-
onClick: onClick
|
|
61
|
-
}, "Click")),
|
|
62
|
-
getByText = _render6.getByText;
|
|
63
|
-
_react2.fireEvent.keyDown(getByText('Click'), {
|
|
64
|
-
key: ' '
|
|
65
|
-
});
|
|
66
|
-
expect(onClick).toHaveBeenCalled();
|
|
67
|
-
});
|
|
68
|
-
it('does not call onClick on other key press', function () {
|
|
69
|
-
var onClick = jest.fn();
|
|
70
|
-
var _render7 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_toolbarButtons.RawButton, {
|
|
71
|
-
onClick: onClick
|
|
72
|
-
}, "Click")),
|
|
73
|
-
getByText = _render7.getByText;
|
|
74
|
-
_react2.fireEvent.keyDown(getByText('Click'), {
|
|
75
|
-
key: 'a'
|
|
76
|
-
});
|
|
77
|
-
expect(onClick).not.toHaveBeenCalled();
|
|
78
|
-
});
|
|
79
|
-
it('applies active style when active is true', function () {
|
|
80
|
-
var _render8 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_toolbarButtons.RawButton, {
|
|
81
|
-
onClick: jest.fn(),
|
|
82
|
-
active: true
|
|
83
|
-
}, "Active")),
|
|
84
|
-
getByText = _render8.getByText;
|
|
85
|
-
var button = getByText('Active');
|
|
86
|
-
expect(button).toHaveStyle({
|
|
87
|
-
color: 'black'
|
|
88
|
-
});
|
|
89
|
-
});
|
|
90
|
-
it('applies disabled style when disabled is true', function () {
|
|
91
|
-
var _render9 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_toolbarButtons.RawButton, {
|
|
92
|
-
onClick: jest.fn(),
|
|
93
|
-
disabled: true
|
|
94
|
-
}, "Disabled")),
|
|
95
|
-
getByText = _render9.getByText;
|
|
96
|
-
var button = getByText('Disabled');
|
|
97
|
-
expect(button).toHaveStyle({
|
|
98
|
-
cursor: 'not-allowed'
|
|
99
|
-
});
|
|
100
|
-
});
|
|
101
|
-
it('applies extraStyles when provided', function () {
|
|
102
|
-
var extraStyles = {
|
|
103
|
-
backgroundColor: 'red'
|
|
104
|
-
};
|
|
105
|
-
var _render0 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_toolbarButtons.RawButton, {
|
|
106
|
-
onClick: jest.fn(),
|
|
107
|
-
extraStyles: extraStyles
|
|
108
|
-
}, "Styled")),
|
|
109
|
-
getByText = _render0.getByText;
|
|
110
|
-
var button = getByText('Styled');
|
|
111
|
-
expect(button).toHaveStyle({
|
|
112
|
-
backgroundColor: 'red'
|
|
113
|
-
});
|
|
114
|
-
});
|
|
115
|
-
it('has aria-label when provided', function () {
|
|
116
|
-
var _render1 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_toolbarButtons.RawButton, {
|
|
117
|
-
onClick: jest.fn(),
|
|
118
|
-
ariaLabel: "Test Button"
|
|
119
|
-
}, "Button")),
|
|
120
|
-
getByLabelText = _render1.getByLabelText;
|
|
121
|
-
expect(getByLabelText('Test Button')).toBeInTheDocument();
|
|
122
|
-
});
|
|
123
|
-
it('has aria-pressed attribute', function () {
|
|
124
|
-
var _render10 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_toolbarButtons.RawButton, {
|
|
125
|
-
onClick: jest.fn(),
|
|
126
|
-
active: true
|
|
127
|
-
}, "Button")),
|
|
128
|
-
getByText = _render10.getByText;
|
|
129
|
-
expect(getByText('Button')).toHaveAttribute('aria-pressed', 'true');
|
|
130
|
-
});
|
|
131
|
-
it('is focusable with tabIndex', function () {
|
|
132
|
-
var _render11 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_toolbarButtons.RawButton, {
|
|
133
|
-
onClick: jest.fn()
|
|
134
|
-
}, "Button")),
|
|
135
|
-
getByText = _render11.getByText;
|
|
136
|
-
expect(getByText('Button')).toHaveAttribute('tabIndex', '0');
|
|
137
|
-
});
|
|
138
|
-
});
|
|
139
|
-
describe('Button', function () {
|
|
140
|
-
it('is the same as RawButton', function () {
|
|
141
|
-
expect(_toolbarButtons.Button).toBe(_toolbarButtons.RawButton);
|
|
142
|
-
});
|
|
143
|
-
});
|
|
144
|
-
describe('RawMarkButton', function () {
|
|
145
|
-
it('renders without crashing', function () {
|
|
146
|
-
var _render12 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_toolbarButtons.RawMarkButton, {
|
|
147
|
-
onToggle: jest.fn(),
|
|
148
|
-
mark: "bold",
|
|
149
|
-
label: "Bold"
|
|
150
|
-
}, "B")),
|
|
151
|
-
container = _render12.container;
|
|
152
|
-
expect(container).toBeInTheDocument();
|
|
153
|
-
});
|
|
154
|
-
it('renders children', function () {
|
|
155
|
-
var _render13 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_toolbarButtons.RawMarkButton, {
|
|
156
|
-
onToggle: jest.fn(),
|
|
157
|
-
mark: "bold",
|
|
158
|
-
label: "Bold"
|
|
159
|
-
}, "Bold")),
|
|
160
|
-
getByText = _render13.getByText;
|
|
161
|
-
expect(getByText('Bold')).toBeInTheDocument();
|
|
162
|
-
});
|
|
163
|
-
it('calls onToggle with mark on mouse down', function () {
|
|
164
|
-
var onToggle = jest.fn();
|
|
165
|
-
var _render14 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_toolbarButtons.RawMarkButton, {
|
|
166
|
-
onToggle: onToggle,
|
|
167
|
-
mark: "italic",
|
|
168
|
-
label: "Italic"
|
|
169
|
-
}, "I")),
|
|
170
|
-
getByText = _render14.getByText;
|
|
171
|
-
_react2.fireEvent.mouseDown(getByText('I'));
|
|
172
|
-
expect(onToggle).toHaveBeenCalledWith('italic');
|
|
173
|
-
});
|
|
174
|
-
it('prevents default on mouse down', function () {
|
|
175
|
-
var onToggle = jest.fn();
|
|
176
|
-
var _render15 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_toolbarButtons.RawMarkButton, {
|
|
177
|
-
onToggle: onToggle,
|
|
178
|
-
mark: "bold",
|
|
179
|
-
label: "Bold"
|
|
180
|
-
}, "B")),
|
|
181
|
-
getByText = _render15.getByText;
|
|
182
|
-
var button = getByText('B');
|
|
183
|
-
var event = new MouseEvent('mousedown', {
|
|
184
|
-
bubbles: true,
|
|
185
|
-
cancelable: true
|
|
186
|
-
});
|
|
187
|
-
var preventDefaultSpy = jest.spyOn(event, 'preventDefault');
|
|
188
|
-
button.dispatchEvent(event);
|
|
189
|
-
expect(preventDefaultSpy).toHaveBeenCalled();
|
|
190
|
-
});
|
|
191
|
-
it('calls onToggle on Enter key press', function () {
|
|
192
|
-
var onToggle = jest.fn();
|
|
193
|
-
var _render16 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_toolbarButtons.RawMarkButton, {
|
|
194
|
-
onToggle: onToggle,
|
|
195
|
-
mark: "underline",
|
|
196
|
-
label: "Underline"
|
|
197
|
-
}, "U")),
|
|
198
|
-
getByText = _render16.getByText;
|
|
199
|
-
_react2.fireEvent.keyDown(getByText('U'), {
|
|
200
|
-
key: 'Enter'
|
|
201
|
-
});
|
|
202
|
-
expect(onToggle).toHaveBeenCalledWith('underline');
|
|
203
|
-
});
|
|
204
|
-
it('calls onToggle on Space key press', function () {
|
|
205
|
-
var onToggle = jest.fn();
|
|
206
|
-
var _render17 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_toolbarButtons.RawMarkButton, {
|
|
207
|
-
onToggle: onToggle,
|
|
208
|
-
mark: "strike",
|
|
209
|
-
label: "Strike"
|
|
210
|
-
}, "S")),
|
|
211
|
-
getByText = _render17.getByText;
|
|
212
|
-
_react2.fireEvent.keyDown(getByText('S'), {
|
|
213
|
-
key: ' '
|
|
214
|
-
});
|
|
215
|
-
expect(onToggle).toHaveBeenCalledWith('strike');
|
|
216
|
-
});
|
|
217
|
-
it('does not call onToggle on other key press', function () {
|
|
218
|
-
var onToggle = jest.fn();
|
|
219
|
-
var _render18 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_toolbarButtons.RawMarkButton, {
|
|
220
|
-
onToggle: onToggle,
|
|
221
|
-
mark: "bold",
|
|
222
|
-
label: "Bold"
|
|
223
|
-
}, "B")),
|
|
224
|
-
getByText = _render18.getByText;
|
|
225
|
-
_react2.fireEvent.keyDown(getByText('B'), {
|
|
226
|
-
key: 'a'
|
|
227
|
-
});
|
|
228
|
-
expect(onToggle).not.toHaveBeenCalled();
|
|
229
|
-
});
|
|
230
|
-
it('applies active style when active is true', function () {
|
|
231
|
-
var _render19 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_toolbarButtons.RawMarkButton, {
|
|
232
|
-
onToggle: jest.fn(),
|
|
233
|
-
mark: "bold",
|
|
234
|
-
label: "Bold",
|
|
235
|
-
active: true
|
|
236
|
-
}, "B")),
|
|
237
|
-
getByText = _render19.getByText;
|
|
238
|
-
var button = getByText('B');
|
|
239
|
-
expect(button).toHaveStyle({
|
|
240
|
-
color: 'black'
|
|
241
|
-
});
|
|
242
|
-
});
|
|
243
|
-
it('has aria-label from label prop', function () {
|
|
244
|
-
var _render20 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_toolbarButtons.RawMarkButton, {
|
|
245
|
-
onToggle: jest.fn(),
|
|
246
|
-
mark: "bold",
|
|
247
|
-
label: "Toggle Bold"
|
|
248
|
-
}, "B")),
|
|
249
|
-
getByLabelText = _render20.getByLabelText;
|
|
250
|
-
expect(getByLabelText('Toggle Bold')).toBeInTheDocument();
|
|
251
|
-
});
|
|
252
|
-
it('has aria-pressed attribute', function () {
|
|
253
|
-
var _render21 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_toolbarButtons.RawMarkButton, {
|
|
254
|
-
onToggle: jest.fn(),
|
|
255
|
-
mark: "bold",
|
|
256
|
-
label: "Bold",
|
|
257
|
-
active: true
|
|
258
|
-
}, "B")),
|
|
259
|
-
getByText = _render21.getByText;
|
|
260
|
-
expect(getByText('B')).toHaveAttribute('aria-pressed', 'true');
|
|
261
|
-
});
|
|
262
|
-
it('is focusable with tabIndex', function () {
|
|
263
|
-
var _render22 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_toolbarButtons.RawMarkButton, {
|
|
264
|
-
onToggle: jest.fn(),
|
|
265
|
-
mark: "bold",
|
|
266
|
-
label: "Bold"
|
|
267
|
-
}, "B")),
|
|
268
|
-
getByText = _render22.getByText;
|
|
269
|
-
expect(getByText('B')).toHaveAttribute('tabIndex', '0');
|
|
270
|
-
});
|
|
271
|
-
});
|
|
272
|
-
describe('MarkButton', function () {
|
|
273
|
-
it('is the same as RawMarkButton', function () {
|
|
274
|
-
expect(_toolbarButtons.MarkButton).toBe(_toolbarButtons.RawMarkButton);
|
|
275
|
-
});
|
|
276
|
-
});
|
|
277
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9yZWFjdDIiLCJfdG9vbGJhckJ1dHRvbnMiLCJkZXNjcmliZSIsIml0IiwiX3JlbmRlciIsInJlbmRlciIsImNyZWF0ZUVsZW1lbnQiLCJSYXdCdXR0b24iLCJvbkNsaWNrIiwiamVzdCIsImZuIiwiY29udGFpbmVyIiwiZXhwZWN0IiwidG9CZUluVGhlRG9jdW1lbnQiLCJfcmVuZGVyMiIsImdldEJ5VGV4dCIsIl9yZW5kZXIzIiwiZmlyZUV2ZW50IiwibW91c2VEb3duIiwidG9IYXZlQmVlbkNhbGxlZCIsIl9yZW5kZXI0IiwiYnV0dG9uIiwiZXZlbnQiLCJNb3VzZUV2ZW50IiwiYnViYmxlcyIsImNhbmNlbGFibGUiLCJwcmV2ZW50RGVmYXVsdFNweSIsInNweU9uIiwiZGlzcGF0Y2hFdmVudCIsIl9yZW5kZXI1Iiwia2V5RG93biIsImtleSIsIl9yZW5kZXI2IiwiX3JlbmRlcjciLCJub3QiLCJfcmVuZGVyOCIsImFjdGl2ZSIsInRvSGF2ZVN0eWxlIiwiY29sb3IiLCJfcmVuZGVyOSIsImRpc2FibGVkIiwiY3Vyc29yIiwiZXh0cmFTdHlsZXMiLCJiYWNrZ3JvdW5kQ29sb3IiLCJfcmVuZGVyMCIsIl9yZW5kZXIxIiwiYXJpYUxhYmVsIiwiZ2V0QnlMYWJlbFRleHQiLCJfcmVuZGVyMTAiLCJ0b0hhdmVBdHRyaWJ1dGUiLCJfcmVuZGVyMTEiLCJCdXR0b24iLCJ0b0JlIiwiX3JlbmRlcjEyIiwiUmF3TWFya0J1dHRvbiIsIm9uVG9nZ2xlIiwibWFyayIsImxhYmVsIiwiX3JlbmRlcjEzIiwiX3JlbmRlcjE0IiwidG9IYXZlQmVlbkNhbGxlZFdpdGgiLCJfcmVuZGVyMTUiLCJfcmVuZGVyMTYiLCJfcmVuZGVyMTciLCJfcmVuZGVyMTgiLCJfcmVuZGVyMTkiLCJfcmVuZGVyMjAiLCJfcmVuZGVyMjEiLCJfcmVuZGVyMjIiLCJNYXJrQnV0dG9uIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvX190ZXN0c19fL3Rvb2xiYXItYnV0dG9ucy50ZXN0LmpzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgZmlyZUV2ZW50LCByZW5kZXIgfSBmcm9tICdAdGVzdGluZy1saWJyYXJ5L3JlYWN0JztcbmltcG9ydCB7IEJ1dHRvbiwgTWFya0J1dHRvbiwgUmF3QnV0dG9uLCBSYXdNYXJrQnV0dG9uIH0gZnJvbSAnLi4vY29tbW9uL3Rvb2xiYXItYnV0dG9ucyc7XG5cbmRlc2NyaWJlKCdSYXdCdXR0b24nLCAoKSA9PiB7XG4gIGl0KCdyZW5kZXJzIHdpdGhvdXQgY3Jhc2hpbmcnLCAoKSA9PiB7XG4gICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlcig8UmF3QnV0dG9uIG9uQ2xpY2s9e2plc3QuZm4oKX0+Q2xpY2sgbWU8L1Jhd0J1dHRvbj4pO1xuICAgIGV4cGVjdChjb250YWluZXIpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gIH0pO1xuXG4gIGl0KCdyZW5kZXJzIGNoaWxkcmVuJywgKCkgPT4ge1xuICAgIGNvbnN0IHsgZ2V0QnlUZXh0IH0gPSByZW5kZXIoPFJhd0J1dHRvbiBvbkNsaWNrPXtqZXN0LmZuKCl9PlRlc3QgQnV0dG9uPC9SYXdCdXR0b24+KTtcbiAgICBleHBlY3QoZ2V0QnlUZXh0KCdUZXN0IEJ1dHRvbicpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICB9KTtcblxuICBpdCgnY2FsbHMgb25DbGljayBvbiBtb3VzZSBkb3duJywgKCkgPT4ge1xuICAgIGNvbnN0IG9uQ2xpY2sgPSBqZXN0LmZuKCk7XG4gICAgY29uc3QgeyBnZXRCeVRleHQgfSA9IHJlbmRlcig8UmF3QnV0dG9uIG9uQ2xpY2s9e29uQ2xpY2t9PkNsaWNrPC9SYXdCdXR0b24+KTtcbiAgICBmaXJlRXZlbnQubW91c2VEb3duKGdldEJ5VGV4dCgnQ2xpY2snKSk7XG4gICAgZXhwZWN0KG9uQ2xpY2spLnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgfSk7XG5cbiAgaXQoJ3ByZXZlbnRzIGRlZmF1bHQgb24gbW91c2UgZG93bicsICgpID0+IHtcbiAgICBjb25zdCBvbkNsaWNrID0gamVzdC5mbigpO1xuICAgIGNvbnN0IHsgZ2V0QnlUZXh0IH0gPSByZW5kZXIoPFJhd0J1dHRvbiBvbkNsaWNrPXtvbkNsaWNrfT5DbGljazwvUmF3QnV0dG9uPik7XG4gICAgY29uc3QgYnV0dG9uID0gZ2V0QnlUZXh0KCdDbGljaycpO1xuICAgIGNvbnN0IGV2ZW50ID0gbmV3IE1vdXNlRXZlbnQoJ21vdXNlZG93bicsIHsgYnViYmxlczogdHJ1ZSwgY2FuY2VsYWJsZTogdHJ1ZSB9KTtcbiAgICBjb25zdCBwcmV2ZW50RGVmYXVsdFNweSA9IGplc3Quc3B5T24oZXZlbnQsICdwcmV2ZW50RGVmYXVsdCcpO1xuICAgIGJ1dHRvbi5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcbiAgICBleHBlY3QocHJldmVudERlZmF1bHRTcHkpLnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgfSk7XG5cbiAgaXQoJ2NhbGxzIG9uQ2xpY2sgb24gRW50ZXIga2V5IHByZXNzJywgKCkgPT4ge1xuICAgIGNvbnN0IG9uQ2xpY2sgPSBqZXN0LmZuKCk7XG4gICAgY29uc3QgeyBnZXRCeVRleHQgfSA9IHJlbmRlcig8UmF3QnV0dG9uIG9uQ2xpY2s9e29uQ2xpY2t9PkNsaWNrPC9SYXdCdXR0b24+KTtcbiAgICBmaXJlRXZlbnQua2V5RG93bihnZXRCeVRleHQoJ0NsaWNrJyksIHsga2V5OiAnRW50ZXInIH0pO1xuICAgIGV4cGVjdChvbkNsaWNrKS50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gIH0pO1xuXG4gIGl0KCdjYWxscyBvbkNsaWNrIG9uIFNwYWNlIGtleSBwcmVzcycsICgpID0+IHtcbiAgICBjb25zdCBvbkNsaWNrID0gamVzdC5mbigpO1xuICAgIGNvbnN0IHsgZ2V0QnlUZXh0IH0gPSByZW5kZXIoPFJhd0J1dHRvbiBvbkNsaWNrPXtvbkNsaWNrfT5DbGljazwvUmF3QnV0dG9uPik7XG4gICAgZmlyZUV2ZW50LmtleURvd24oZ2V0QnlUZXh0KCdDbGljaycpLCB7IGtleTogJyAnIH0pO1xuICAgIGV4cGVjdChvbkNsaWNrKS50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gIH0pO1xuXG4gIGl0KCdkb2VzIG5vdCBjYWxsIG9uQ2xpY2sgb24gb3RoZXIga2V5IHByZXNzJywgKCkgPT4ge1xuICAgIGNvbnN0IG9uQ2xpY2sgPSBqZXN0LmZuKCk7XG4gICAgY29uc3QgeyBnZXRCeVRleHQgfSA9IHJlbmRlcig8UmF3QnV0dG9uIG9uQ2xpY2s9e29uQ2xpY2t9PkNsaWNrPC9SYXdCdXR0b24+KTtcbiAgICBmaXJlRXZlbnQua2V5RG93bihnZXRCeVRleHQoJ0NsaWNrJyksIHsga2V5OiAnYScgfSk7XG4gICAgZXhwZWN0KG9uQ2xpY2spLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gIH0pO1xuXG4gIGl0KCdhcHBsaWVzIGFjdGl2ZSBzdHlsZSB3aGVuIGFjdGl2ZSBpcyB0cnVlJywgKCkgPT4ge1xuICAgIGNvbnN0IHsgZ2V0QnlUZXh0IH0gPSByZW5kZXIoXG4gICAgICA8UmF3QnV0dG9uIG9uQ2xpY2s9e2plc3QuZm4oKX0gYWN0aXZlPXt0cnVlfT5cbiAgICAgICAgQWN0aXZlXG4gICAgICA8L1Jhd0J1dHRvbj4sXG4gICAgKTtcbiAgICBjb25zdCBidXR0b24gPSBnZXRCeVRleHQoJ0FjdGl2ZScpO1xuICAgIGV4cGVjdChidXR0b24pLnRvSGF2ZVN0eWxlKHsgY29sb3I6ICdibGFjaycgfSk7XG4gIH0pO1xuXG4gIGl0KCdhcHBsaWVzIGRpc2FibGVkIHN0eWxlIHdoZW4gZGlzYWJsZWQgaXMgdHJ1ZScsICgpID0+IHtcbiAgICBjb25zdCB7IGdldEJ5VGV4dCB9ID0gcmVuZGVyKFxuICAgICAgPFJhd0J1dHRvbiBvbkNsaWNrPXtqZXN0LmZuKCl9IGRpc2FibGVkPXt0cnVlfT5cbiAgICAgICAgRGlzYWJsZWRcbiAgICAgIDwvUmF3QnV0dG9uPixcbiAgICApO1xuICAgIGNvbnN0IGJ1dHRvbiA9IGdldEJ5VGV4dCgnRGlzYWJsZWQnKTtcbiAgICBleHBlY3QoYnV0dG9uKS50b0hhdmVTdHlsZSh7IGN1cnNvcjogJ25vdC1hbGxvd2VkJyB9KTtcbiAgfSk7XG5cbiAgaXQoJ2FwcGxpZXMgZXh0cmFTdHlsZXMgd2hlbiBwcm92aWRlZCcsICgpID0+IHtcbiAgICBjb25zdCBleHRyYVN0eWxlcyA9IHsgYmFja2dyb3VuZENvbG9yOiAncmVkJyB9O1xuICAgIGNvbnN0IHsgZ2V0QnlUZXh0IH0gPSByZW5kZXIoXG4gICAgICA8UmF3QnV0dG9uIG9uQ2xpY2s9e2plc3QuZm4oKX0gZXh0cmFTdHlsZXM9e2V4dHJhU3R5bGVzfT5cbiAgICAgICAgU3R5bGVkXG4gICAgICA8L1Jhd0J1dHRvbj4sXG4gICAgKTtcbiAgICBjb25zdCBidXR0b24gPSBnZXRCeVRleHQoJ1N0eWxlZCcpO1xuICAgIGV4cGVjdChidXR0b24pLnRvSGF2ZVN0eWxlKHsgYmFja2dyb3VuZENvbG9yOiAncmVkJyB9KTtcbiAgfSk7XG5cbiAgaXQoJ2hhcyBhcmlhLWxhYmVsIHdoZW4gcHJvdmlkZWQnLCAoKSA9PiB7XG4gICAgY29uc3QgeyBnZXRCeUxhYmVsVGV4dCB9ID0gcmVuZGVyKFxuICAgICAgPFJhd0J1dHRvbiBvbkNsaWNrPXtqZXN0LmZuKCl9IGFyaWFMYWJlbD1cIlRlc3QgQnV0dG9uXCI+XG4gICAgICAgIEJ1dHRvblxuICAgICAgPC9SYXdCdXR0b24+LFxuICAgICk7XG4gICAgZXhwZWN0KGdldEJ5TGFiZWxUZXh0KCdUZXN0IEJ1dHRvbicpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICB9KTtcblxuICBpdCgnaGFzIGFyaWEtcHJlc3NlZCBhdHRyaWJ1dGUnLCAoKSA9PiB7XG4gICAgY29uc3QgeyBnZXRCeVRleHQgfSA9IHJlbmRlcihcbiAgICAgIDxSYXdCdXR0b24gb25DbGljaz17amVzdC5mbigpfSBhY3RpdmU9e3RydWV9PlxuICAgICAgICBCdXR0b25cbiAgICAgIDwvUmF3QnV0dG9uPixcbiAgICApO1xuICAgIGV4cGVjdChnZXRCeVRleHQoJ0J1dHRvbicpKS50b0hhdmVBdHRyaWJ1dGUoJ2FyaWEtcHJlc3NlZCcsICd0cnVlJyk7XG4gIH0pO1xuXG4gIGl0KCdpcyBmb2N1c2FibGUgd2l0aCB0YWJJbmRleCcsICgpID0+IHtcbiAgICBjb25zdCB7IGdldEJ5VGV4dCB9ID0gcmVuZGVyKDxSYXdCdXR0b24gb25DbGljaz17amVzdC5mbigpfT5CdXR0b248L1Jhd0J1dHRvbj4pO1xuICAgIGV4cGVjdChnZXRCeVRleHQoJ0J1dHRvbicpKS50b0hhdmVBdHRyaWJ1dGUoJ3RhYkluZGV4JywgJzAnKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ0J1dHRvbicsICgpID0+IHtcbiAgaXQoJ2lzIHRoZSBzYW1lIGFzIFJhd0J1dHRvbicsICgpID0+IHtcbiAgICBleHBlY3QoQnV0dG9uKS50b0JlKFJhd0J1dHRvbik7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCdSYXdNYXJrQnV0dG9uJywgKCkgPT4ge1xuICBpdCgncmVuZGVycyB3aXRob3V0IGNyYXNoaW5nJywgKCkgPT4ge1xuICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXIoXG4gICAgICA8UmF3TWFya0J1dHRvbiBvblRvZ2dsZT17amVzdC5mbigpfSBtYXJrPVwiYm9sZFwiIGxhYmVsPVwiQm9sZFwiPlxuICAgICAgICBCXG4gICAgICA8L1Jhd01hcmtCdXR0b24+LFxuICAgICk7XG4gICAgZXhwZWN0KGNvbnRhaW5lcikudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgfSk7XG5cbiAgaXQoJ3JlbmRlcnMgY2hpbGRyZW4nLCAoKSA9PiB7XG4gICAgY29uc3QgeyBnZXRCeVRleHQgfSA9IHJlbmRlcihcbiAgICAgIDxSYXdNYXJrQnV0dG9uIG9uVG9nZ2xlPXtqZXN0LmZuKCl9IG1hcms9XCJib2xkXCIgbGFiZWw9XCJCb2xkXCI+XG4gICAgICAgIEJvbGRcbiAgICAgIDwvUmF3TWFya0J1dHRvbj4sXG4gICAgKTtcbiAgICBleHBlY3QoZ2V0QnlUZXh0KCdCb2xkJykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gIH0pO1xuXG4gIGl0KCdjYWxscyBvblRvZ2dsZSB3aXRoIG1hcmsgb24gbW91c2UgZG93bicsICgpID0+IHtcbiAgICBjb25zdCBvblRvZ2dsZSA9IGplc3QuZm4oKTtcbiAgICBjb25zdCB7IGdldEJ5VGV4dCB9ID0gcmVuZGVyKFxuICAgICAgPFJhd01hcmtCdXR0b24gb25Ub2dnbGU9e29uVG9nZ2xlfSBtYXJrPVwiaXRhbGljXCIgbGFiZWw9XCJJdGFsaWNcIj5cbiAgICAgICAgSVxuICAgICAgPC9SYXdNYXJrQnV0dG9uPixcbiAgICApO1xuICAgIGZpcmVFdmVudC5tb3VzZURvd24oZ2V0QnlUZXh0KCdJJykpO1xuICAgIGV4cGVjdChvblRvZ2dsZSkudG9IYXZlQmVlbkNhbGxlZFdpdGgoJ2l0YWxpYycpO1xuICB9KTtcblxuICBpdCgncHJldmVudHMgZGVmYXVsdCBvbiBtb3VzZSBkb3duJywgKCkgPT4ge1xuICAgIGNvbnN0IG9uVG9nZ2xlID0gamVzdC5mbigpO1xuICAgIGNvbnN0IHsgZ2V0QnlUZXh0IH0gPSByZW5kZXIoXG4gICAgICA8UmF3TWFya0J1dHRvbiBvblRvZ2dsZT17b25Ub2dnbGV9IG1hcms9XCJib2xkXCIgbGFiZWw9XCJCb2xkXCI+XG4gICAgICAgIEJcbiAgICAgIDwvUmF3TWFya0J1dHRvbj4sXG4gICAgKTtcbiAgICBjb25zdCBidXR0b24gPSBnZXRCeVRleHQoJ0InKTtcbiAgICBjb25zdCBldmVudCA9IG5ldyBNb3VzZUV2ZW50KCdtb3VzZWRvd24nLCB7IGJ1YmJsZXM6IHRydWUsIGNhbmNlbGFibGU6IHRydWUgfSk7XG4gICAgY29uc3QgcHJldmVudERlZmF1bHRTcHkgPSBqZXN0LnNweU9uKGV2ZW50LCAncHJldmVudERlZmF1bHQnKTtcbiAgICBidXR0b24uZGlzcGF0Y2hFdmVudChldmVudCk7XG4gICAgZXhwZWN0KHByZXZlbnREZWZhdWx0U3B5KS50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gIH0pO1xuXG4gIGl0KCdjYWxscyBvblRvZ2dsZSBvbiBFbnRlciBrZXkgcHJlc3MnLCAoKSA9PiB7XG4gICAgY29uc3Qgb25Ub2dnbGUgPSBqZXN0LmZuKCk7XG4gICAgY29uc3QgeyBnZXRCeVRleHQgfSA9IHJlbmRlcihcbiAgICAgIDxSYXdNYXJrQnV0dG9uIG9uVG9nZ2xlPXtvblRvZ2dsZX0gbWFyaz1cInVuZGVybGluZVwiIGxhYmVsPVwiVW5kZXJsaW5lXCI+XG4gICAgICAgIFVcbiAgICAgIDwvUmF3TWFya0J1dHRvbj4sXG4gICAgKTtcbiAgICBmaXJlRXZlbnQua2V5RG93bihnZXRCeVRleHQoJ1UnKSwgeyBrZXk6ICdFbnRlcicgfSk7XG4gICAgZXhwZWN0KG9uVG9nZ2xlKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgndW5kZXJsaW5lJyk7XG4gIH0pO1xuXG4gIGl0KCdjYWxscyBvblRvZ2dsZSBvbiBTcGFjZSBrZXkgcHJlc3MnLCAoKSA9PiB7XG4gICAgY29uc3Qgb25Ub2dnbGUgPSBqZXN0LmZuKCk7XG4gICAgY29uc3QgeyBnZXRCeVRleHQgfSA9IHJlbmRlcihcbiAgICAgIDxSYXdNYXJrQnV0dG9uIG9uVG9nZ2xlPXtvblRvZ2dsZX0gbWFyaz1cInN0cmlrZVwiIGxhYmVsPVwiU3RyaWtlXCI+XG4gICAgICAgIFNcbiAgICAgIDwvUmF3TWFya0J1dHRvbj4sXG4gICAgKTtcbiAgICBmaXJlRXZlbnQua2V5RG93bihnZXRCeVRleHQoJ1MnKSwgeyBrZXk6ICcgJyB9KTtcbiAgICBleHBlY3Qob25Ub2dnbGUpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKCdzdHJpa2UnKTtcbiAgfSk7XG5cbiAgaXQoJ2RvZXMgbm90IGNhbGwgb25Ub2dnbGUgb24gb3RoZXIga2V5IHByZXNzJywgKCkgPT4ge1xuICAgIGNvbnN0IG9uVG9nZ2xlID0gamVzdC5mbigpO1xuICAgIGNvbnN0IHsgZ2V0QnlUZXh0IH0gPSByZW5kZXIoXG4gICAgICA8UmF3TWFya0J1dHRvbiBvblRvZ2dsZT17b25Ub2dnbGV9IG1hcms9XCJib2xkXCIgbGFiZWw9XCJCb2xkXCI+XG4gICAgICAgIEJcbiAgICAgIDwvUmF3TWFya0J1dHRvbj4sXG4gICAgKTtcbiAgICBmaXJlRXZlbnQua2V5RG93bihnZXRCeVRleHQoJ0InKSwgeyBrZXk6ICdhJyB9KTtcbiAgICBleHBlY3Qob25Ub2dnbGUpLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gIH0pO1xuXG4gIGl0KCdhcHBsaWVzIGFjdGl2ZSBzdHlsZSB3aGVuIGFjdGl2ZSBpcyB0cnVlJywgKCkgPT4ge1xuICAgIGNvbnN0IHsgZ2V0QnlUZXh0IH0gPSByZW5kZXIoXG4gICAgICA8UmF3TWFya0J1dHRvbiBvblRvZ2dsZT17amVzdC5mbigpfSBtYXJrPVwiYm9sZFwiIGxhYmVsPVwiQm9sZFwiIGFjdGl2ZT17dHJ1ZX0+XG4gICAgICAgIEJcbiAgICAgIDwvUmF3TWFya0J1dHRvbj4sXG4gICAgKTtcbiAgICBjb25zdCBidXR0b24gPSBnZXRCeVRleHQoJ0InKTtcbiAgICBleHBlY3QoYnV0dG9uKS50b0hhdmVTdHlsZSh7IGNvbG9yOiAnYmxhY2snIH0pO1xuICB9KTtcblxuICBpdCgnaGFzIGFyaWEtbGFiZWwgZnJvbSBsYWJlbCBwcm9wJywgKCkgPT4ge1xuICAgIGNvbnN0IHsgZ2V0QnlMYWJlbFRleHQgfSA9IHJlbmRlcihcbiAgICAgIDxSYXdNYXJrQnV0dG9uIG9uVG9nZ2xlPXtqZXN0LmZuKCl9IG1hcms9XCJib2xkXCIgbGFiZWw9XCJUb2dnbGUgQm9sZFwiPlxuICAgICAgICBCXG4gICAgICA8L1Jhd01hcmtCdXR0b24+LFxuICAgICk7XG4gICAgZXhwZWN0KGdldEJ5TGFiZWxUZXh0KCdUb2dnbGUgQm9sZCcpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICB9KTtcblxuICBpdCgnaGFzIGFyaWEtcHJlc3NlZCBhdHRyaWJ1dGUnLCAoKSA9PiB7XG4gICAgY29uc3QgeyBnZXRCeVRleHQgfSA9IHJlbmRlcihcbiAgICAgIDxSYXdNYXJrQnV0dG9uIG9uVG9nZ2xlPXtqZXN0LmZuKCl9IG1hcms9XCJib2xkXCIgbGFiZWw9XCJCb2xkXCIgYWN0aXZlPXt0cnVlfT5cbiAgICAgICAgQlxuICAgICAgPC9SYXdNYXJrQnV0dG9uPixcbiAgICApO1xuICAgIGV4cGVjdChnZXRCeVRleHQoJ0InKSkudG9IYXZlQXR0cmlidXRlKCdhcmlhLXByZXNzZWQnLCAndHJ1ZScpO1xuICB9KTtcblxuICBpdCgnaXMgZm9jdXNhYmxlIHdpdGggdGFiSW5kZXgnLCAoKSA9PiB7XG4gICAgY29uc3QgeyBnZXRCeVRleHQgfSA9IHJlbmRlcihcbiAgICAgIDxSYXdNYXJrQnV0dG9uIG9uVG9nZ2xlPXtqZXN0LmZuKCl9IG1hcms9XCJib2xkXCIgbGFiZWw9XCJCb2xkXCI+XG4gICAgICAgIEJcbiAgICAgIDwvUmF3TWFya0J1dHRvbj4sXG4gICAgKTtcbiAgICBleHBlY3QoZ2V0QnlUZXh0KCdCJykpLnRvSGF2ZUF0dHJpYnV0ZSgndGFiSW5kZXgnLCAnMCcpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnTWFya0J1dHRvbicsICgpID0+IHtcbiAgaXQoJ2lzIHRoZSBzYW1lIGFzIFJhd01hcmtCdXR0b24nLCAoKSA9PiB7XG4gICAgZXhwZWN0KE1hcmtCdXR0b24pLnRvQmUoUmF3TWFya0J1dHRvbik7XG4gIH0pO1xufSk7XG4iXSwibWFwcGluZ3MiOiI7OztBQUFBLElBQUFBLE1BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLE9BQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLGVBQUEsR0FBQUYsT0FBQTtBQUVBRyxRQUFRLENBQUMsV0FBVyxFQUFFLFlBQU07RUFDMUJDLEVBQUUsQ0FBQywwQkFBMEIsRUFBRSxZQUFNO0lBQ25DLElBQUFDLE9BQUEsR0FBc0IsSUFBQUMsY0FBTSxlQUFDUixNQUFBLFlBQUFTLGFBQUEsQ0FBQ0wsZUFBQSxDQUFBTSxTQUFTO1FBQUNDLE9BQU8sRUFBRUMsSUFBSSxDQUFDQyxFQUFFLENBQUM7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
|