genassist-chat-react 1.0.2 → 1.0.4
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/README.md +2 -0
- package/dist/components/ChatMessage.d.ts +6 -0
- package/dist/components/ChatMessage.js +181 -54
- package/dist/components/GenAgentChat.js +178 -42
- package/dist/components/VoiceInput.js +12 -10
- package/dist/hooks/useChat.d.ts +7 -1
- package/dist/hooks/useChat.js +104 -10
- package/dist/services/chatService.d.ts +10 -3
- package/dist/services/chatService.js +168 -73
- package/dist/types/index.d.ts +27 -3
- package/dist/types/index.js +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -22,6 +22,7 @@ function App() {
|
|
|
22
22
|
<GenAgentChat
|
|
23
23
|
baseUrl="https://your-api-base-url.com"
|
|
24
24
|
apiKey="your-api-key"
|
|
25
|
+
tenant="your-tenant-id"
|
|
25
26
|
/>
|
|
26
27
|
</div>
|
|
27
28
|
);
|
|
@@ -58,6 +59,7 @@ function App() {
|
|
|
58
59
|
<GenAgentChat
|
|
59
60
|
baseUrl="https://your-api-base-url.com"
|
|
60
61
|
apiKey="your-api-key"
|
|
62
|
+
tenant="your-tenant-id"
|
|
61
63
|
userData={userData}
|
|
62
64
|
theme={theme}
|
|
63
65
|
headerTitle="Customer Support"
|
|
@@ -21,6 +21,12 @@ interface ChatMessageProps {
|
|
|
21
21
|
isFirstMessage?: boolean;
|
|
22
22
|
isNextSameSpeaker?: boolean;
|
|
23
23
|
isPrevSameSpeaker?: boolean;
|
|
24
|
+
onFeedback?: (messageId: string, value: 'good' | 'bad') => void;
|
|
25
|
+
enableTypewriter?: boolean;
|
|
26
|
+
welcomeImageUrl?: string;
|
|
27
|
+
welcomeTitle?: string;
|
|
28
|
+
possibleQueries?: string[];
|
|
29
|
+
onQuickQuery?: (query: string) => void;
|
|
24
30
|
}
|
|
25
31
|
export declare const ChatMessageComponent: React.FC<ChatMessageProps>;
|
|
26
32
|
export {};
|
|
@@ -9,9 +9,9 @@ var __assign = (this && this.__assign) || function () {
|
|
|
9
9
|
};
|
|
10
10
|
return __assign.apply(this, arguments);
|
|
11
11
|
};
|
|
12
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
12
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
13
13
|
import React from 'react';
|
|
14
|
-
import { User, UserX, AlertCircle, FileText, FileJson, FileImage, Loader2 } from 'lucide-react';
|
|
14
|
+
import { User, UserX, AlertCircle, FileText, FileJson, FileImage, Loader2, ThumbsUp, ThumbsDown } from 'lucide-react';
|
|
15
15
|
export var AttachmentPreview = function (_a) {
|
|
16
16
|
var file = _a.file, onRemove = _a.onRemove, _b = _a.uploading, uploading = _b === void 0 ? false : _b;
|
|
17
17
|
var fileType = file.type;
|
|
@@ -92,10 +92,15 @@ export var AttachmentPreview = function (_a) {
|
|
|
92
92
|
return (_jsxs("div", { style: containerStyle, children: [isImage && imagePreview ? (_jsx("img", { src: imagePreview, alt: file.name, style: imageStyle })) : (_jsx("div", { style: { marginRight: '10px' }, children: getFileIcon(fileType) })), _jsxs("div", { style: fileInfoStyle, children: [_jsx("div", { style: fileNameStyle, title: file.name, children: file.name }), _jsxs("div", { style: fileSizeStyle, children: [(file.size / 1024).toFixed(2), " KB"] })] }), !uploading && (_jsx("button", { onClick: onRemove, style: removeButtonStyle, title: "Remove file", children: "\u2715" })), uploading && (_jsx("div", { style: uploadingOverlayStyle, children: _jsx(Loader2, { size: 24, color: "#000", style: loaderSpinStyle }) })), _jsx("style", { children: "\n @keyframes spin {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n }\n " })] }));
|
|
93
93
|
};
|
|
94
94
|
export var ChatMessageComponent = function (_a) {
|
|
95
|
-
var message = _a.message, theme = _a.theme, onPlayAudio = _a.onPlayAudio, isPlayingAudio = _a.isPlayingAudio, _b = _a.isFirstMessage, isFirstMessage = _b === void 0 ? false : _b, _c = _a.isNextSameSpeaker, isNextSameSpeaker = _c === void 0 ? false : _c, _d = _a.isPrevSameSpeaker, isPrevSameSpeaker = _d === void 0 ? false : _d;
|
|
95
|
+
var message = _a.message, theme = _a.theme, onPlayAudio = _a.onPlayAudio, isPlayingAudio = _a.isPlayingAudio, _b = _a.isFirstMessage, isFirstMessage = _b === void 0 ? false : _b, _c = _a.isNextSameSpeaker, isNextSameSpeaker = _c === void 0 ? false : _c, _d = _a.isPrevSameSpeaker, isPrevSameSpeaker = _d === void 0 ? false : _d, onFeedback = _a.onFeedback, _e = _a.enableTypewriter, enableTypewriter = _e === void 0 ? false : _e, welcomeImageUrl = _a.welcomeImageUrl, welcomeTitleProp = _a.welcomeTitle, possibleQueries = _a.possibleQueries, onQuickQuery = _a.onQuickQuery;
|
|
96
96
|
var isUser = message.speaker === 'customer';
|
|
97
97
|
var isSpecial = message.speaker === 'special';
|
|
98
98
|
var isWelcomeMessage = !isUser && !isSpecial && isFirstMessage;
|
|
99
|
+
var _f = React.useState(false), isHovered = _f[0], setIsHovered = _f[1];
|
|
100
|
+
var _g = React.useState(false), editingFeedback = _g[0], setEditingFeedback = _g[1];
|
|
101
|
+
var _h = React.useState(message.text), displayText = _h[0], setDisplayText = _h[1];
|
|
102
|
+
var _j = React.useState(false), isTypewriting = _j[0], setIsTypewriting = _j[1];
|
|
103
|
+
var lastAnimatedRef = React.useRef('');
|
|
99
104
|
var formatTimestamp = function (timestamp) {
|
|
100
105
|
try {
|
|
101
106
|
if (!timestamp || isNaN(timestamp)) {
|
|
@@ -133,9 +138,36 @@ export var ChatMessageComponent = function (_a) {
|
|
|
133
138
|
}
|
|
134
139
|
};
|
|
135
140
|
var timestamp = formatTimestamp(message.create_time);
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
141
|
+
// Fast typewriter effect for newly displayed agent messages, fix later
|
|
142
|
+
// React.useEffect(() => {
|
|
143
|
+
// if (!isUser && !isSpecial && enableTypewriter && message.text !== lastAnimatedRef.current) {
|
|
144
|
+
// lastAnimatedRef.current = message.text;
|
|
145
|
+
// setIsTypewriting(true);
|
|
146
|
+
// setDisplayText('');
|
|
147
|
+
// let i = 0;
|
|
148
|
+
// const total = message.text.length;
|
|
149
|
+
// const tickMs = 16;
|
|
150
|
+
// const targetMs = 1200;
|
|
151
|
+
// const charsPerTick = Math.max(1, Math.round(total / (targetMs / tickMs)));
|
|
152
|
+
// const interval = window.setInterval(() => {
|
|
153
|
+
// i += charsPerTick;
|
|
154
|
+
// if (i >= total) {
|
|
155
|
+
// setDisplayText(message.text);
|
|
156
|
+
// setIsTypewriting(false);
|
|
157
|
+
// window.clearInterval(interval);
|
|
158
|
+
// } else {
|
|
159
|
+
// setDisplayText(message.text.slice(0, i));
|
|
160
|
+
// }
|
|
161
|
+
// }, tickMs);
|
|
162
|
+
// return () => window.clearInterval(interval);
|
|
163
|
+
// } else {
|
|
164
|
+
// setDisplayText(message.text);
|
|
165
|
+
// setIsTypewriting(false);
|
|
166
|
+
// }
|
|
167
|
+
// }, [message.text, enableTypewriter, isUser, isSpecial]);
|
|
168
|
+
// Updated design colors
|
|
169
|
+
var userBubbleBgColor = '#E4E4E7'; // grey for user
|
|
170
|
+
var userTextColor = '#000000';
|
|
139
171
|
var agentTextColor = '#000000';
|
|
140
172
|
var fontFamily = (theme === null || theme === void 0 ? void 0 : theme.fontFamily) || 'Roboto, Arial, sans-serif';
|
|
141
173
|
var fontSize = (theme === null || theme === void 0 ? void 0 : theme.fontSize) || '15px';
|
|
@@ -153,15 +185,23 @@ export var ChatMessageComponent = function (_a) {
|
|
|
153
185
|
width: '100%',
|
|
154
186
|
justifyContent: isUser ? 'flex-end' : 'flex-start',
|
|
155
187
|
};
|
|
156
|
-
var
|
|
188
|
+
var labelRowStyle = {
|
|
157
189
|
display: isPrevSameSpeaker ? 'none' : 'flex',
|
|
158
190
|
width: '80%',
|
|
159
191
|
justifyContent: isUser ? 'flex-end' : 'flex-start',
|
|
160
|
-
|
|
192
|
+
alignItems: 'baseline',
|
|
193
|
+
gap: '8px',
|
|
194
|
+
marginBottom: '6px',
|
|
161
195
|
};
|
|
162
196
|
var messageLabelStyle = {
|
|
163
|
-
fontSize: '
|
|
164
|
-
color: '#
|
|
197
|
+
fontSize: '14px',
|
|
198
|
+
color: '#000000',
|
|
199
|
+
lineHeight: 1,
|
|
200
|
+
fontWeight: 600,
|
|
201
|
+
};
|
|
202
|
+
var topTimestampStyle = {
|
|
203
|
+
fontSize: '13px',
|
|
204
|
+
color: '#6b7280',
|
|
165
205
|
lineHeight: 1,
|
|
166
206
|
};
|
|
167
207
|
var messageBubbleContainerStyle = {
|
|
@@ -169,19 +209,35 @@ export var ChatMessageComponent = function (_a) {
|
|
|
169
209
|
flexDirection: 'column',
|
|
170
210
|
maxWidth: '80%',
|
|
171
211
|
};
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
212
|
+
// Only user's messages should render as bubbles.
|
|
213
|
+
// Agent messages are plain text with no container background.
|
|
214
|
+
var bubbleStyle = isUser
|
|
215
|
+
? {
|
|
216
|
+
backgroundColor: userBubbleBgColor,
|
|
217
|
+
color: userTextColor,
|
|
218
|
+
padding: '12px 16px',
|
|
219
|
+
borderRadius: '12px 0 12px 12px',
|
|
220
|
+
fontSize: fontSize,
|
|
221
|
+
fontFamily: fontFamily,
|
|
222
|
+
wordBreak: 'break-word',
|
|
223
|
+
lineHeight: 1.4,
|
|
224
|
+
maxWidth: '100%',
|
|
225
|
+
border: 'none',
|
|
226
|
+
boxShadow: '0 1px 2px rgba(0,0,0,0.08)'
|
|
227
|
+
}
|
|
228
|
+
: {
|
|
229
|
+
backgroundColor: 'transparent',
|
|
230
|
+
color: agentTextColor,
|
|
231
|
+
padding: 0,
|
|
232
|
+
borderRadius: 0,
|
|
233
|
+
fontSize: fontSize,
|
|
234
|
+
fontFamily: fontFamily,
|
|
235
|
+
wordBreak: 'break-word',
|
|
236
|
+
lineHeight: 1.4,
|
|
237
|
+
maxWidth: '100%',
|
|
238
|
+
border: 'none',
|
|
239
|
+
boxShadow: 'none'
|
|
240
|
+
};
|
|
185
241
|
var attachmentsContainerStyle = {
|
|
186
242
|
marginTop: '8px',
|
|
187
243
|
display: 'flex',
|
|
@@ -226,45 +282,61 @@ export var ChatMessageComponent = function (_a) {
|
|
|
226
282
|
fontSize: '12px',
|
|
227
283
|
opacity: 0.8,
|
|
228
284
|
};
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
285
|
+
// No bottom timestamp in the new design
|
|
286
|
+
var timestampStyle = { display: 'none' };
|
|
287
|
+
var speakerLabel = isUser ? 'You' : isSpecial ? 'System' : 'Agent';
|
|
288
|
+
// Feedback state and UI (thumbs up/down) for agent messages
|
|
289
|
+
var feedbackValue = (message.feedback && message.feedback.length > 0)
|
|
290
|
+
? message.feedback[message.feedback.length - 1].feedback
|
|
291
|
+
: undefined;
|
|
292
|
+
var primaryColor = (theme === null || theme === void 0 ? void 0 : theme.primaryColor) || '#2962FF';
|
|
293
|
+
var thumbsShouldShow = !isUser && !isSpecial && isHovered && !feedbackValue;
|
|
294
|
+
var showThumbsArea = !isUser && !isSpecial; // Only agents have thumbs area
|
|
295
|
+
var feedbackRowStyle = {
|
|
296
|
+
display: showThumbsArea ? 'flex' : 'none',
|
|
297
|
+
marginTop: 8,
|
|
298
|
+
alignSelf: 'flex-start',
|
|
299
|
+
alignItems: 'center',
|
|
300
|
+
height: 20,
|
|
301
|
+
gap: 8,
|
|
302
|
+
visibility: thumbsShouldShow || !!feedbackValue ? 'visible' : 'hidden',
|
|
236
303
|
};
|
|
237
|
-
var
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
304
|
+
var iconButtonStyle = {
|
|
305
|
+
background: 'transparent',
|
|
306
|
+
border: 'none',
|
|
307
|
+
padding: 0,
|
|
308
|
+
cursor: 'pointer',
|
|
309
|
+
color: '#9ca3af',
|
|
310
|
+
display: thumbsShouldShow ? 'flex' : 'none',
|
|
311
|
+
alignItems: 'center',
|
|
312
|
+
};
|
|
313
|
+
var separatorStyle = {
|
|
314
|
+
width: 1,
|
|
315
|
+
height: 14,
|
|
316
|
+
backgroundColor: '#e5e7eb',
|
|
317
|
+
display: thumbsShouldShow ? 'block' : 'none',
|
|
242
318
|
};
|
|
243
|
-
var
|
|
244
|
-
fontSize: '16px',
|
|
245
|
-
fontWeight: 'normal',
|
|
319
|
+
var singleIconStyle = {
|
|
246
320
|
color: '#000000',
|
|
321
|
+
display: feedbackValue ? 'flex' : 'none',
|
|
322
|
+
alignItems: 'center',
|
|
247
323
|
};
|
|
248
|
-
var
|
|
249
|
-
var welcomeTitle = '';
|
|
324
|
+
var welcomeTitle = welcomeTitleProp || '';
|
|
250
325
|
var welcomeContent = '';
|
|
251
326
|
if (isWelcomeMessage) {
|
|
252
327
|
var messageText = message.text;
|
|
253
|
-
if (
|
|
254
|
-
var parts = messageText.split(/[
|
|
255
|
-
if (parts.length > 0)
|
|
256
|
-
welcomeTitle = parts[0].trim();
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
welcomeContent = welcomeContent.replace(/^[,.!?\s]+/, '');
|
|
260
|
-
}
|
|
328
|
+
if (!welcomeTitleProp) {
|
|
329
|
+
var parts = messageText.split(/[\n\.!?]/);
|
|
330
|
+
if (parts.length > 0)
|
|
331
|
+
welcomeTitle = (parts[0] || '').trim();
|
|
332
|
+
welcomeContent = messageText.substring(welcomeTitle.length).trim();
|
|
333
|
+
welcomeContent = welcomeContent.replace(/^[,.!?\s]+/, '');
|
|
261
334
|
}
|
|
262
335
|
else {
|
|
263
|
-
welcomeTitle = '';
|
|
264
336
|
welcomeContent = messageText;
|
|
265
337
|
}
|
|
266
338
|
}
|
|
267
|
-
var messageLines = !isWelcomeMessage ?
|
|
339
|
+
var messageLines = !isWelcomeMessage ? displayText.split('\n').map(function (line, i) { return (_jsxs(React.Fragment, { children: [line, i < displayText.split('\n').length - 1 && _jsx("br", {})] }, i)); }) : null;
|
|
268
340
|
// Handle special messages (like takeover indicators)
|
|
269
341
|
if (isSpecial) {
|
|
270
342
|
var specialMessageStyle = {
|
|
@@ -304,9 +376,56 @@ export var ChatMessageComponent = function (_a) {
|
|
|
304
376
|
return (_jsx("div", { style: specialMessageStyle, children: _jsxs("div", { style: specialBubbleStyle, children: [icon, message.text] }) }));
|
|
305
377
|
}
|
|
306
378
|
if (isWelcomeMessage) {
|
|
307
|
-
|
|
379
|
+
var primaryColor_1 = (theme === null || theme === void 0 ? void 0 : theme.primaryColor) || '#5B3DF5';
|
|
380
|
+
var chipStyle_1 = {
|
|
381
|
+
display: 'inline-block',
|
|
382
|
+
backgroundColor: primaryColor_1,
|
|
383
|
+
color: '#fff',
|
|
384
|
+
padding: '8px 12px',
|
|
385
|
+
borderRadius: 12,
|
|
386
|
+
fontSize: '14px',
|
|
387
|
+
marginRight: 8,
|
|
388
|
+
marginBottom: 8,
|
|
389
|
+
cursor: onQuickQuery ? 'pointer' : 'default',
|
|
390
|
+
userSelect: 'none',
|
|
391
|
+
};
|
|
392
|
+
var chipContainerStyle = {
|
|
393
|
+
display: 'flex',
|
|
394
|
+
flexWrap: 'wrap',
|
|
395
|
+
marginTop: 8,
|
|
396
|
+
};
|
|
397
|
+
var imageBoxStyle = {
|
|
398
|
+
width: 120,
|
|
399
|
+
height: 120,
|
|
400
|
+
borderRadius: 12,
|
|
401
|
+
backgroundColor: '#e5e7eb',
|
|
402
|
+
display: 'flex',
|
|
403
|
+
alignItems: 'center',
|
|
404
|
+
justifyContent: 'center',
|
|
405
|
+
color: '#6b7280',
|
|
406
|
+
fontSize: 12,
|
|
407
|
+
fontWeight: 600,
|
|
408
|
+
overflow: 'hidden',
|
|
409
|
+
};
|
|
410
|
+
var welcomeTitleStyle = {
|
|
411
|
+
fontSize: '22px',
|
|
412
|
+
fontWeight: 700,
|
|
413
|
+
margin: '8px 0 4px 0',
|
|
414
|
+
color: agentTextColor,
|
|
415
|
+
fontFamily: fontFamily,
|
|
416
|
+
};
|
|
417
|
+
var welcomeSubtitleStyle = {
|
|
418
|
+
fontSize: '14px',
|
|
419
|
+
color: '#6b7280',
|
|
420
|
+
margin: 0,
|
|
421
|
+
fontFamily: fontFamily,
|
|
422
|
+
};
|
|
423
|
+
return (_jsx("div", { style: messageContainerStyle, children: _jsx("div", { style: messageBubbleContainerStyle, children: _jsxs("div", { style: { display: 'flex', flexDirection: 'column', gap: 8 }, children: [_jsx("div", { style: { display: 'flex', gap: 16 }, children: _jsx("div", { style: imageBoxStyle, children: welcomeImageUrl ? (
|
|
424
|
+
// eslint-disable-next-line jsx-a11y/alt-text
|
|
425
|
+
_jsx("img", { src: welcomeImageUrl, style: { width: '100%', height: '100%', objectFit: 'cover' } })) : (_jsx("div", { children: "IMAGE 120 \u00D7 120 px" })) }) }), welcomeTitle && _jsx("div", { style: welcomeTitleStyle, children: welcomeTitle }), welcomeContent && _jsx("div", { style: welcomeSubtitleStyle, children: welcomeContent }), possibleQueries && possibleQueries.length > 0 && (_jsx("div", { style: chipContainerStyle, children: possibleQueries.map(function (q, idx) { return (_jsx("span", { style: chipStyle_1, onClick: function () { return onQuickQuery && onQuickQuery(q); }, children: q }, idx)); }) }))] }) }) }));
|
|
308
426
|
}
|
|
309
|
-
return (_jsxs("div", { style: messageContainerStyle,
|
|
427
|
+
return (_jsxs("div", { style: messageContainerStyle, onMouseEnter: function () { return setIsHovered(true); }, onMouseLeave: function () { if (!editingFeedback)
|
|
428
|
+
setIsHovered(false); }, children: [_jsx("div", { style: labelRowStyle, children: isUser ? (_jsxs(_Fragment, { children: [_jsx("div", { style: topTimestampStyle, children: timestamp }), _jsx("div", { style: messageLabelStyle, children: "You" })] })) : (_jsxs(_Fragment, { children: [_jsx("div", { style: messageLabelStyle, children: "Agent" }), _jsx("div", { style: topTimestampStyle, children: timestamp })] })) }), message.attachments && message.attachments.length > 0 && (_jsx("div", { style: __assign(__assign({}, attachmentsContainerStyle), { alignItems: isUser ? 'flex-end' : 'flex-start' }), children: message.attachments.map(function (attachment, index) { return (_jsxs("div", { style: {
|
|
310
429
|
display: 'flex',
|
|
311
430
|
alignItems: 'center',
|
|
312
431
|
gap: '12px',
|
|
@@ -317,6 +436,14 @@ export var ChatMessageComponent = function (_a) {
|
|
|
317
436
|
minWidth: '260px',
|
|
318
437
|
maxWidth: '360px',
|
|
319
438
|
pointerEvents: 'none',
|
|
320
|
-
}, children: [attachment.type.startsWith('image/') ? (_jsx("img", { src: attachment.url, alt: attachment.name, style: { width: 56, height: 56, borderRadius: 8, objectFit: 'cover' } })) : (_jsx("div", { style: { width: 40, height: 40, display: 'flex', alignItems: 'center', justifyContent: 'center' }, children: getFileIcon(attachment.type) })), _jsxs("div", { style: { display: 'flex', flexDirection: 'column' }, children: [_jsx("div", { style: { fontWeight: 600, fontSize: 14 }, children: attachment.name }), _jsxs("div", { style: { fontSize: 12, opacity: 0.8 }, children: [attachment.type.includes('/') ? attachment.type.split('/')[1].toUpperCase() : attachment.type, attachment.size ? " \u00B7 ".concat((attachment.size / 1024).toFixed(1), " KB") : ''] })] })] }, index)); }) })), message.text && (_jsx("div", { style: bubbleStyle, children: messageLines })), _jsx("div", { style:
|
|
439
|
+
}, children: [attachment.type.startsWith('image/') ? (_jsx("img", { src: attachment.url, alt: attachment.name, style: { width: 56, height: 56, borderRadius: 8, objectFit: 'cover' } })) : (_jsx("div", { style: { width: 40, height: 40, display: 'flex', alignItems: 'center', justifyContent: 'center' }, children: getFileIcon(attachment.type) })), _jsxs("div", { style: { display: 'flex', flexDirection: 'column' }, children: [_jsx("div", { style: { fontWeight: 600, fontSize: 14 }, children: attachment.name }), _jsxs("div", { style: { fontSize: 12, opacity: 0.8 }, children: [attachment.type.includes('/') ? attachment.type.split('/')[1].toUpperCase() : attachment.type, attachment.size ? " \u00B7 ".concat((attachment.size / 1024).toFixed(1), " KB") : ''] })] })] }, index)); }) })), message.text && (_jsx("div", { style: { display: 'flex', alignItems: 'center', gap: '8px', alignSelf: isUser ? 'flex-end' : 'flex-start' }, children: _jsx("div", { style: __assign(__assign({}, bubbleStyle), { position: 'relative' }), children: messageLines }) })), showThumbsArea && (_jsx("div", { style: feedbackRowStyle, children: feedbackValue ? (_jsx("div", { style: singleIconStyle, children: feedbackValue === 'good' ? (_jsx(ThumbsUp, { size: 18 })) : (_jsx(ThumbsDown, { size: 18 })) })) : (_jsxs(_Fragment, { children: [_jsx("button", { type: "button", style: iconButtonStyle, title: "Thumbs up", onClick: function () {
|
|
440
|
+
if (message.message_id && onFeedback) {
|
|
441
|
+
onFeedback(message.message_id, 'good');
|
|
442
|
+
}
|
|
443
|
+
}, children: _jsx(ThumbsUp, { size: 18 }) }), _jsx("div", { style: separatorStyle }), _jsx("button", { type: "button", style: iconButtonStyle, title: "Thumbs down", onClick: function () {
|
|
444
|
+
if (message.message_id && onFeedback) {
|
|
445
|
+
onFeedback(message.message_id, 'bad');
|
|
446
|
+
}
|
|
447
|
+
}, children: _jsx(ThumbsDown, { size: 18 }) })] })) }))] }));
|
|
321
448
|
};
|
|
322
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2hhdE1lc3NhZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tcG9uZW50cy9DaGF0TWVzc2FnZS50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBRTFCLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFRaEcsTUFBTSxDQUFDLElBQU0saUJBQWlCLEdBQXFDLFVBQUMsRUFBcUM7UUFBbkMsSUFBSSxVQUFBLEVBQUUsUUFBUSxjQUFBLEVBQUUsaUJBQWlCLEVBQWpCLFNBQVMsbUJBQUcsS0FBSyxLQUFBO0lBQ3JHLElBQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDM0IsSUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN4QyxJQUFBLEtBQWtDLEtBQUssQ0FBQyxRQUFRLENBQWdCLElBQUksQ0FBQyxFQUFwRSxZQUFZLFFBQUEsRUFBRSxlQUFlLFFBQXVDLENBQUM7SUFFNUUsS0FBSyxDQUFDLFNBQVMsQ0FBQztRQUNkLElBQUksT0FBTyxFQUFFLENBQUM7WUFDWixJQUFNLFFBQU0sR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ2hDLFFBQU0sQ0FBQyxTQUFTLEdBQUc7Z0JBQ2pCLGVBQWUsQ0FBQyxRQUFNLENBQUMsTUFBZ0IsQ0FBQyxDQUFDO1lBQzNDLENBQUMsQ0FBQztZQUNGLFFBQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0IsQ0FBQztJQUNILENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBRXBCLElBQU0sV0FBVyxHQUFHLFVBQUMsSUFBWTtRQUMvQixJQUFJLElBQUksQ0FBQyxVQUFV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LE1BQU0sRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLGFBQ3RELGNBQUssS0FBSyxFQUFFLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLFlBQUcsVUFBVSxDQUFDLElBQUksR0FBTyxFQUN0RSxlQUFLLEtBQUssRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxhQUN2QyxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQzdGLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGtCQUFNLENBQUMsVUFBVSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUNsRSxJQUNGLEtBL0JELEtBQUssQ0FnQ04sQ0FDUCxFQW5DK0MsQ0FtQy9DLENBQUMsR0FDRSxDQUNQLEVBRUEsT0FBTyxDQUFDLElBQUksSUFBSSxDQUNmLGNBQUssS0FBSyxFQUFFLFdBQVcsWUFDcEIsWUFBWSxHQUNULENBQ1AsRUFFRCxjQUFLLEtBQUssRUFBRSxjQUFjLFlBQUcsU0FBUyxHQUFPLElBQ3pDLENBQ1AsQ0FBQztBQUNKLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBDaGF0TWVzc2FnZSB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IFVzZXIsIFVzZXJYLCBBbGVydENpcmNsZSwgRmlsZVRleHQsIEZpbGVKc29uLCBGaWxlSW1hZ2UsIExvYWRlcjIgfSBmcm9tICdsdWNpZGUtcmVhY3QnO1xuXG5pbnRlcmZhY2UgQXR0YWNobWVudFByZXZpZXdQcm9wcyB7XG4gIGZpbGU6IEZpbGU7XG4gIG9uUmVtb3ZlOiAoKSA9PiB2b2lkO1xuICB1cGxvYWRpbmc/OiBib29sZWFuO1xufVxuXG5leHBvcnQgY29uc3QgQXR0YWNobWVudFByZXZpZXc6IFJlYWN0LkZDPEF0dGFjaG1lbnRQcmV2aWV3UHJvcHM+ID0gKHsgZmlsZSwgb25SZW1vdmUsIHVwbG9hZGluZyA9IGZhbHNlIH0pID0+IHtcbiAgY29uc3QgZmlsZVR5cGUgPSBmaWxlLnR5cGU7XG4gIGNvbnN0IGlzSW1hZ2UgPSBmaWxlVHlwZS5zdGFydHNXaXRoKCdpbWFnZS8nKTtcbiAgY29uc3QgW2ltYWdlUHJldmlldywgc2V0SW1hZ2VQcmV2aWV3XSA9IFJlYWN0LnVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGlzSW1hZ2UpIHtcbiAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgICByZWFkZXIub25sb2FkZW5kID0gKCkgPT4ge1xuICAgICAgICBzZXRJbWFnZVByZXZpZXcocmVhZGVyLnJlc3VsdCBhcyBzdHJpbmcpO1xuICAgICAgfTtcbiAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpO1xuICAgIH1cbiAgfSwgW2ZpbGUsIGlzSW1hZ2VdKTtcblxuICBjb25zdCBnZXRGaWxlSWNvbiA9ICh0eXBlOiBzdHJpbmcpID0+IHtcbiAgICBpZiAodHlwZS5zdGFydHNXaXRoKCdpbWFnZS8nKSkgcmV0dXJuIDxGaWxlSW1hZ2Ugc2l6ZT17MjR9IGNvbG9yPVwiIzZEMjhEOVwiIC8+O1xuICAgIGlmICh0eXBlID09PSAnYXBwbGljYXRpb24vcGRmJykgcmV0dXJuIDxGaWxlVGV4dCBzaXplPXsyNH0gY29sb3I9XCIjQjkxQzFDXCIgLz47XG4gICAgaWYgKHR5cGUgPT09ICdhcHBsaWNhdGlvbi9qc29uJykgcmV0dXJuIDxGaWxlSnNvbiBzaXplPXsyNH0gY29sb3I9XCIjMUQ0RUQ4XCIgLz47XG4gICAgcmV0dXJuIDxGaWxlVGV4dCBzaXplPXsyNH0gY29sb3I9XCIjNEI1NTYzXCIgLz47XG4gIH07XG5cbiAgY29uc3QgY29udGFpbmVyU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIHBhZGRpbmc6ICc4cHgnLFxuICAgIGJhY2tncm91bmRDb2xvcjogJyNmMGYwZjAnLFxuICAgIGJvcmRlclJhZGl1czogJzhweCcsXG4gICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgbWF4V2lkdGg6ICcyNTBweCcsXG4gIH07XG5cbiAgY29uc3QgaW1hZ2VTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICB3aWR0aDogJzQwcHgnLFxuICAgIGhlaWdodDogJzQwcHgnLFxuICAgIGJvcmRlclJhZGl1czogJzRweCcsXG4gICAgb2JqZWN0Rml0OiAnY292ZXInLFxuICAgIG1hcmdpblJpZ2h0OiAnMTBweCcsXG4gIH07XG5cbiAgY29uc3QgZmlsZUluZm9TdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBmbGV4OiAxLFxuICAgIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgICB3aGl0ZVNwYWNlOiAnbm93cmFwJyxcbiAgICB0ZXh0T3ZlcmZsb3c6ICdlbGxpcHNpcycsXG4gIH07XG5cbiAgY29uc3QgZmlsZU5hbWVTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBmb250V2VpZ2h0OiAnYm9sZCcsXG4gICAgZm9udFNpemU6ICcxNHB4JyxcbiAgfTtcblxuICBjb25zdCBmaWxlU2l6ZVN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGZvbnRTaXplOiAnMTJweCcsXG4gICAgY29sb3I6ICcjNjY2JyxcbiAgfTtcblxuICBjb25zdCByZW1vdmVCdXR0b25TdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBiYWNrZ3JvdW5kOiAnbm9uZScsXG4gICAgYm9yZGVyOiAnbm9uZScsXG4gICAgY3Vyc29yOiAncG9pbnRlcicsXG4gICAgcGFkZGluZzogJzRweCcsXG4gICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgdG9wOiAnNHB4JyxcbiAgICByaWdodDogJzRweCcsXG4gIH07XG5cbiAgY29uc3QgdXBsb2FkaW5nT3ZlcmxheVN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgIHRvcDogMCxcbiAgICBsZWZ0OiAwLFxuICAgIHJpZ2h0OiAwLFxuICAgIGJvdHRvbTogMCxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyknLFxuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgYm9yZGVyUmFkaXVzOiAnOHB4JyxcbiAgfTtcblxuICBjb25zdCBsb2FkZXJTcGluU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgYW5pbWF0aW9uOiAnc3BpbiAxcyBsaW5lYXIgaW5maW5pdGUnLFxuICB9O1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBzdHlsZT17Y29udGFpbmVyU3R5bGV9PlxuICAgICAge2lzSW1hZ2UgJiYgaW1hZ2VQcmV2aWV3ID8gKFxuICAgICAgICA8aW1nIHNyYz17aW1hZ2VQcmV2aWV3fSBhbHQ9e2ZpbGUubmFtZX0gc3R5bGU9e2ltYWdlU3R5bGV9IC8+XG4gICAgICApIDogKFxuICAgICAgICA8ZGl2IHN0eWxlPXt7IG1hcmdpblJpZ2h0OiAnMTBweCcgfX0+e2dldEZpbGVJY29uKGZpbGVUeXBlKX08L2Rpdj5cbiAgICAgICl9XG4gICAgICA8ZGl2IHN0eWxlPXtmaWxlSW5mb1N0eWxlfT5cbiAgICAgICAgPGRpdiBzdHlsZT17ZmlsZU5hbWVTdHlsZX0gdGl0bGU9e2ZpbGUubmFtZX0+e2ZpbGUubmFtZX08L2Rpdj5cbiAgICAgICAgPGRpdiBzdHlsZT17ZmlsZVNpemVTdHlsZX0+eyhmaWxlLnNpemUgLyAxMDI0KS50b0ZpeGVkKDIpfSBLQjwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICB7IXVwbG9hZGluZyAmJiAoXG4gICAgICAgIDxidXR0b24gb25DbGljaz17b25SZW1vdmV9IHN0eWxlPXtyZW1vdmVCdXR0b25TdHlsZX0gdGl0bGU9XCJSZW1vdmUgZmlsZVwiPlxuICAgICAgICAgICYjeDI3MTU7XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgKX1cbiAgICAgIHt1cGxvYWRpbmcgJiYgKFxuICAgICAgICA8ZGl2IHN0eWxlPXt1cGxvYWRpbmdPdmVybGF5U3R5bGV9PlxuICAgICAgICAgIDxMb2FkZXIyIHNpemU9ezI0fSBjb2xvcj1cIiMwMDBcIiBzdHlsZT17bG9hZGVyU3BpblN0eWxlfSAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG4gICAgICA8c3R5bGU+e2BcbiAgICAgICAgQGtleWZyYW1lcyBzcGluIHtcbiAgICAgICAgICAwJSB7IHRyYW5zZm9ybTogcm90YXRlKDBkZWcpOyB9XG4gICAgICAgICAgMTAwJSB7IHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7IH1cbiAgICAgICAgfVxuICAgICAgYH08L3N0eWxlPlxuICAgIDwvZGl2PlxuICApO1xufTtcblxuXG5pbnRlcmZhY2UgQ2hhdE1lc3NhZ2VQcm9wcyB7XG4gIG1lc3NhZ2U6IENoYXRNZXNzYWdlO1xuICB0aGVtZT86IHtcbiAgICBwcmltYXJ5Q29sb3I/OiBzdHJpbmc7XG4gICAgc2Vjb25kYXJ5Q29sb3I/OiBzdHJpbmc7XG4gICAgZm9udEZhbWlseT86IHN0cmluZztcbiAgICBmb250U2l6ZT86IHN0cmluZztcbiAgICBiYWNrZ3JvdW5kQ29sb3I/OiBzdHJpbmc7XG4gICAgdGV4dENvbG9yPzogc3RyaW5nO1xuICB9O1xuICBvblBsYXlBdWRpbz86ICh0ZXh0OiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD47XG4gIGlzUGxheWluZ0F1ZGlvPzogYm9vbGVhbjtcbiAgaXNGaXJzdE1lc3NhZ2U/OiBib29sZWFuO1xuICBpc05leHRTYW1lU3BlYWtlcj86IGJvb2xlYW47XG4gIGlzUHJldlNhbWVTcGVha2VyPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNvbnN0IENoYXRNZXNzYWdlQ29tcG9uZW50OiBSZWFjdC5GQzxDaGF0TWVzc2FnZVByb3BzPiA9ICh7XG4gIG1lc3NhZ2UsXG4gIHRoZW1lLFxuICBvblBsYXlBdWRpbyxcbiAgaXNQbGF5aW5nQXVkaW8sXG4gIGlzRmlyc3RNZXNzYWdlID0gZmFsc2UsXG4gIGlzTmV4dFNhbWVTcGVha2VyID0gZmFsc2UsXG4gIGlzUHJldlNhbWVTcGVha2VyID0gZmFsc2Vcbn0pID0+IHtcbiAgY29uc3QgaXNVc2VyID0gbWVzc2FnZS5zcGVha2VyID09PSAnY3VzdG9tZXInO1xuICBjb25zdCBpc1NwZWNpYWwgPSBtZXNzYWdlLnNwZWFrZXIgPT09ICdzcGVjaWFsJztcbiAgY29uc3QgaXNXZWxjb21lTWVzc2FnZSA9ICFpc1VzZXIgJiYgIWlzU3BlY2lhbCAmJiBpc0ZpcnN0TWVzc2FnZTtcblxuICBjb25zdCBmb3JtYXRUaW1lc3RhbXAgPSAodGltZXN0YW1wOiBudW1iZXIpID0+IHtcbiAgICB0cnkge1xuICAgICAgaWYgKCF0aW1lc3RhbXAgfHwgaXNOYU4odGltZXN0YW1wKSkge1xuICAgICAgICByZXR1cm4gJ0p1c3Qgbm93JztcbiAgICAgIH1cbiAgICAgIFxuICAgICAgY29uc3QgdGltZXN0YW1wTXMgPSB0aW1lc3RhbXAgPCAxMDAwMDAwMDAwMDAwID8gdGltZXN0YW1wICogMTAwMCA6IHRpbWVzdGFtcDtcbiAgICAgIFxuICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHRpbWVzdGFtcE1zKTtcbiAgICAgIC8vIFF1aWNrIGNoZWNrIGlmIGRhdGUgaXMgdmFsaWRcbiAgICAgIGlmIChpc05hTihkYXRlLmdldFRpbWUoKSkpIHtcbiAgICAgICAgcmV0dXJuICdKdXN0IG5vdyc7XG4gICAgICB9XG4gICAgICBcbiAgICAgIGNvbnN0IHRvZGF5ID0gbmV3IERhdGUoKTtcbiAgICAgIGNvbnN0IHllc3RlcmRheSA9IG5ldyBEYXRlKHRvZGF5KTtcbiAgICAgIHllc3RlcmRheS5zZXREYXRlKHllc3RlcmRheS5nZXREYXRlKCkgLSAxKTtcbiAgICAgIFxuICAgICAgLy8gRm9ybWF0IHRpbWUgYXMgSEg6TU0gQU0vUE1cbiAgICAgIGNvbnN0IHRpbWVPcHRpb25zOiBJbnRsLkRhdGVUaW1lRm9ybWF0T3B0aW9ucyA9IHsgaG91cjogJ251bWVyaWMnLCBtaW51dGU6ICcyLWRpZ2l0JywgaG91cjEyOiB0cnVlIH07XG4gICAgICBjb25zdCB0aW1lU3RyID0gZGF0ZS50b0xvY2FsZVRpbWVTdHJpbmcodW5kZWZpbmVkLCB0aW1lT3B0aW9ucyk7XG4gICAgICBcbiAgICAgIC8vIENoZWNrIGlmIGRhdGUgaXMgdG9kYXksIHllc3RlcmRheSwgb3IgYW5vdGhlciBkYXlcbiAgICAgIGlmIChkYXRlLnRvRGF0ZVN0cmluZygpID09PSB0b2RheS50b0RhdGVTdHJpbmcoKSkge1xuICAgICAgICByZXR1cm4gYFRvZGF5LCAke3RpbWVTdHJ9YDtcbiAgICAgIH0gZWxzZSBpZiAoZGF0ZS50b0RhdGVTdHJpbmcoKSA9PT0geWVzdGVyZGF5LnRvRGF0ZVN0cmluZygpKSB7XG4gICAgICAgIHJldHVybiBgWWVzdGVyZGF5LCAke3RpbWVTdHJ9YDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEZvcm1hdCBkYXRlIGFzIE1vbnRoIERELCBZWVlZXG4gICAgICAgIGNvbnN0IGRhdGVPcHRpb25zOiBJbnRsLkRhdGVUaW1lRm9ybWF0T3B0aW9ucyA9IHsgbW9udGg6ICdzaG9ydCcsIGRheTogJ251bWVyaWMnLCB5ZWFyOiAnbnVtZXJpYycgfTtcbiAgICAgICAgY29uc3QgZGF0ZVN0ciA9IGRhdGUudG9Mb2NhbGVEYXRlU3RyaW5nKHVuZGVmaW5lZCwgZGF0ZU9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gYCR7ZGF0ZVN0cn0sICR7dGltZVN0cn1gO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmb3JtYXR0aW5nIHRpbWVzdGFtcDonLCBlcnJvcik7XG4gICAgICByZXR1cm4gJ0p1c3Qgbm93JztcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgdGltZXN0YW1wID0gZm9ybWF0VGltZXN0YW1wKG1lc3NhZ2UuY3JlYXRlX3RpbWUpO1xuXG4gIGNvbnN0IHVzZXJCdWJibGVCZ0NvbG9yID0gdGhlbWU/LnByaW1hcnlDb2xvciB8fCAnIzI1NjNFQic7XG4gIGNvbnN0IHVzZXJUZXh0Q29sb3IgPSAnI2ZmZmZmZic7XG4gIGNvbnN0IGFnZW50QnViYmxlQmdDb2xvciA9IHRoZW1lPy5zZWNvbmRhcnlDb2xvciB8fCAnI2VlZWVlZSc7XG4gIGNvbnN0IGFnZW50VGV4dENvbG9yID0gJyMwMDAwMDAnO1xuICBjb25zdCBmb250RmFtaWx5ID0gdGhlbWU/LmZvbnRGYW1pbHkgfHwgJ1JvYm90bywgQXJpYWwsIHNhbnMtc2VyaWYnO1xuICBjb25zdCBmb250U2l6ZSA9IHRoZW1lPy5mb250U2l6ZSB8fCAnMTVweCc7XG5cbiAgY29uc3QgbWVzc2FnZUNvbnRhaW5lclN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcbiAgICB3aWR0aDogJzEwMCUnLFxuICAgIG1hcmdpbkJvdHRvbTogaXNQcmV2U2FtZVNwZWFrZXIgPyAnOHB4JyA6ICc4cHgnLFxuICAgIG1hcmdpblRvcDogaXNQcmV2U2FtZVNwZWFrZXIgPyAnMHB4JyA6ICcxNnB4JyxcbiAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICBhbGlnbkl0ZW1zOiBpc1VzZXIgPyAnZmxleC1lbmQnIDogJ2ZsZXgtc3RhcnQnLFxuICB9O1xuXG4gIGNvbnN0IG1lc3NhZ2VSb3dTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgd2lkdGg6ICcxMDAlJyxcbiAgICBqdXN0aWZ5Q29udGVudDogaXNVc2VyID8gJ2ZsZXgtZW5kJyA6ICdmbGV4LXN0YXJ0JyxcbiAgfTtcblxuICBjb25zdCBsYWJlbENvbnRhaW5lclN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGRpc3BsYXk6IGlzUHJldlNhbWVTcGVha2VyID8gJ25vbmUnIDogJ2ZsZXgnLFxuICAgIHdpZHRoOiAnODAlJyxcbiAgICBqdXN0aWZ5Q29udGVudDogaXNVc2VyID8gJ2ZsZXgtZW5kJyA6ICdmbGV4LXN0YXJ0JyxcbiAgICBtYXJnaW5Cb3R0b206ICc0cHgnLFxuICB9O1xuXG4gIGNvbnN0IG1lc3NhZ2VMYWJlbFN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGZvbnRTaXplOiAnMTJweCcsXG4gICAgY29sb3I6ICcjNzU3NTc1JyxcbiAgICBsaW5lSGVpZ2h0OiAxLFxuICB9O1xuXG4gIGNvbnN0IG1lc3NhZ2VCdWJibGVDb250YWluZXJTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gICAgbWF4V2lkdGg6ICc4MCUnLFxuICB9O1xuXG4gIGNvbnN0IGJ1YmJsZVN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGJhY2tncm91bmRDb2xvcjogaXNVc2VyIFxuICAgICAgPyB1c2VyQnViYmxlQmdDb2xvclxuICAgICAgOiBhZ2VudEJ1YmJsZUJnQ29sb3IsXG4gICAgY29sb3I6IGlzVXNlciA/IHVzZXJUZXh0Q29sb3IgOiBhZ2VudFRleHRDb2xvcixcbiAgICBwYWRkaW5nOiAnMTJweCAxNnB4JyxcbiAgICBib3JkZXJSYWRpdXM6ICc4cHgnLFxuICAgIGZvbnRTaXplLFxuICAgIGZvbnRGYW1pbHksXG4gICAgd29yZEJyZWFrOiAnYnJlYWstd29yZCcsXG4gICAgbGluZUhlaWdodDogMS40LFxuICAgIG1heFdpZHRoOiAnMTAwJScsXG4gIH07XG5cbiAgY29uc3QgYXR0YWNobWVudHNDb250YWluZXJTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBtYXJnaW5Ub3A6ICc4cHgnLFxuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcbiAgICBnYXA6ICc4cHgnLFxuICB9O1xuXG4gIGNvbnN0IGdldEZpbGVJY29uID0gKGZpbGVUeXBlOiBzdHJpbmcpID0+IHtcbiAgICBpZiAoZmlsZVR5cGUuc3RhcnRzV2l0aCgnaW1hZ2UvJykpIHJldHVybiA8RmlsZUltYWdlIHNpemU9ezI0fSBjb2xvcj1cIiM2RDI4RDlcIiAvPjtcbiAgICBpZiAoZmlsZVR5cGUgPT09ICdhcHBsaWNhdGlvbi9wZGYnKSByZXR1cm4gPEZpbGVUZXh0IHNpemU9ezI0fSBjb2xvcj1cIiNCOTFDMUNcIiAvPjtcbiAgICBpZiAoZmlsZVR5cGUgPT09ICdhcHBsaWNhdGlvbi9qc29uJykgcmV0dXJuIDxGaWxlSnNvbiBzaXplPXsyNH0gY29sb3I9XCIjMUQ0RUQ4XCIgLz47XG4gICAgcmV0dXJuIDxGaWxlVGV4dCBzaXplPXsyNH0gY29sb3I9XCIjNEI1NTYzXCIgLz47XG4gIH07XG5cbiAgY29uc3QgYXR0YWNobWVudENvbnRhaW5lclN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBwYWRkaW5nOiAnMTBweCcsXG4gICAgYmFja2dyb3VuZENvbG9yOiBpc1VzZXIgPyAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpJyA6ICdyZ2JhKDAsIDAsIDAsIDAuMDUpJyxcbiAgICBib3JkZXJSYWRpdXM6ICc4cHgnLFxuICB9O1xuXG4gIGNvbnN0IGltYWdlQXR0YWNobWVudFN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIG1heFdpZHRoOiAnMTAwJScsXG4gICAgYm9yZGVyUmFkaXVzOiAnOHB4JyxcbiAgfTtcblxuICBjb25zdCBmaWxlQXR0YWNobWVudFN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBwYWRkaW5nOiAnMTBweCcsXG4gICAgYmFja2dyb3VuZENvbG9yOiBpc1VzZXIgPyAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpJyA6ICdyZ2JhKDAsIDAsIDAsIDAuMDUpJyxcbiAgICBib3JkZXJSYWRpdXM6ICc4cHgnLFxuICB9O1xuXG4gIGNvbnN0IGZpbGVJbmZvU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgbWFyZ2luTGVmdDogJzEwcHgnLFxuICAgIGZsZXg6IDEsXG4gIH07XG4gIFxuICBjb25zdCBmaWxlTmFtZVN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGZvbnRXZWlnaHQ6ICdib2xkJyxcbiAgfTtcbiAgXG4gIGNvbnN0IGZpbGVTaXplU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZm9udFNpemU6ICcxMnB4JyxcbiAgICBvcGFjaXR5OiAwLjgsXG4gIH07XG5cbiAgY29uc3QgdGltZXN0YW1wU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZm9udFNpemU6ICcxMXB4JyxcbiAgICBjb2xvcjogJyM3NTc1NzUnLFxuICAgIG1hcmdpblRvcDogJzRweCcsXG4gICAgd2lkdGg6ICc4MCUnLFxuICAgIHRleHRBbGlnbjogaXNVc2VyID8gJ3JpZ2h0JyA6ICdsZWZ0JyxcbiAgICBkaXNwbGF5OiBpc05leHRTYW1lU3BlYWtlciA/ICdub25lJyA6ICdibG9jaycsIC8vIEhpZGUgdGltZXN0YW1wIGlmIG5leHQgbWVzc2FnZSBpcyBmcm9tIHNhbWUgc3BlYWtlclxuICB9O1xuXG4gIGNvbnN0IHdlbGNvbWVUaXRsZVN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGZvbnRTaXplOiAnMThweCcsXG4gICAgZm9udFdlaWdodDogJ2JvbGQnLFxuICAgIG1hcmdpbkJvdHRvbTogJzRweCcsXG4gICAgY29sb3I6ICcjMDAwMDAwJyxcbiAgfTtcblxuICBjb25zdCB3ZWxjb21lQ29udGVudFN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGZvbnRTaXplOiAnMTZweCcsXG4gICAgZm9udFdlaWdodDogJ25vcm1hbCcsXG4gICAgY29sb3I6ICcjMDAwMDAwJyxcbiAgfTtcblxuICBjb25zdCBzcGVha2VyTGFiZWwgPSBpc1VzZXIgPyAnWW91JyA6IGlzU3BlY2lhbCA/ICdTeXN0ZW0nIDogJ0FnZW50JztcblxuICBsZXQgd2VsY29tZVRpdGxlID0gJyc7XG4gIGxldCB3ZWxjb21lQ29udGVudCA9ICcnO1xuICBcbiAgaWYgKGlzV2VsY29tZU1lc3NhZ2UpIHtcbiAgICBjb25zdCBtZXNzYWdlVGV4dCA9IG1lc3NhZ2UudGV4dDtcbiAgICBpZiAobWVzc2FnZVRleHQudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKCcnKSkge1xuICAgICAgY29uc3QgcGFydHMgPSBtZXNzYWdlVGV4dC5zcGxpdCgvWywuIT9dLyk7XG4gICAgICBpZiAocGFydHMubGVuZ3RoID4gMCkge1xuICAgICAgICB3ZWxjb21lVGl0bGUgPSBwYXJ0c1swXS50cmltKCk7XG4gICAgICAgIHdlbGNvbWVDb250ZW50ID0gbWVzc2FnZVRleHQuc3Vic3RyaW5nKHdlbGNvbWVUaXRsZS5sZW5ndGgpLnRyaW0oKTtcbiAgICAgICAgLy8gUmVtb3ZlIGFueSBwdW5jdHVhdGlvbiBhdCB0aGUgc3RhcnRcbiAgICAgICAgd2VsY29tZUNvbnRlbnQgPSB3ZWxjb21lQ29udGVudC5yZXBsYWNlKC9eWywuIT9cXHNdKy8sICcnKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgd2VsY29tZVRpdGxlID0gJyc7XG4gICAgICB3ZWxjb21lQ29udGVudCA9IG1lc3NhZ2VUZXh0O1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG1lc3NhZ2VMaW5lcyA9ICFpc1dlbGNvbWVNZXNzYWdlID8gbWVzc2FnZS50ZXh0LnNwbGl0KCdcXG4nKS5tYXAoKGxpbmUsIGkpID0+IChcbiAgICA8UmVhY3QuRnJhZ21lbnQga2V5PXtpfT5cbiAgICAgIHtsaW5lfVxuICAgICAge2kgPCBtZXNzYWdlLnRleHQuc3BsaXQoJ1xcbicpLmxlbmd0aCAtIDEgJiYgPGJyIC8+fVxuICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICkpIDogbnVsbDtcblxuICAvLyBIYW5kbGUgc3BlY2lhbCBtZXNzYWdlcyAobGlrZSB0YWtlb3ZlciBpbmRpY2F0b3JzKVxuICBpZiAoaXNTcGVjaWFsKSB7XG4gICAgY29uc3Qgc3BlY2lhbE1lc3NhZ2VTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgbWFyZ2luOiAnMTZweCAwJyxcbiAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgfTtcblxuICAgIC8vIERldGVybWluZSBpY29uIGFuZCBzdHlsZSBiYXNlZCBvbiBtZXNzYWdlIGNvbnRlbnRcbiAgICBsZXQgaWNvbjtcbiAgICBsZXQgYmFja2dyb3VuZENvbG9yID0gJyNFM0YyRkQnO1xuICAgIGxldCB0ZXh0Q29sb3IgPSAnIzE5NzZEMic7XG4gICAgXG4gICAgaWYgKG1lc3NhZ2UudGV4dC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdvZmZsaW5lJykgfHwgbWVzc2FnZS50ZXh0LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2luYWN0aXZlJykpIHtcbiAgICAgIGljb24gPSA8QWxlcnRDaXJjbGUgc2l6ZT17MTh9IC8+O1xuICAgICAgYmFja2dyb3VuZENvbG9yID0gJyNGRkYzRTAnO1xuICAgICAgdGV4dENvbG9yID0gJyNGNTdDMDAnO1xuICAgIH0gZWxzZSBpZiAobWVzc2FnZS50ZXh0LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ3Rvb2sgb3ZlcicpIHx8IG1lc3NhZ2UudGV4dC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCd0YWtlb3ZlcicpKSB7XG4gICAgICBpY29uID0gPFVzZXJYIHNpemU9ezE4fSAvPjtcbiAgICB9IGVsc2Uge1xuICAgICAgaWNvbiA9IDxVc2VyIHNpemU9ezE4fSAvPjtcbiAgICB9XG5cbiAgICBjb25zdCBzcGVjaWFsQnViYmxlU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgICBiYWNrZ3JvdW5kQ29sb3IsXG4gICAgICBjb2xvcjogdGV4dENvbG9yLFxuICAgICAgcGFkZGluZzogJzhweCAxNnB4JyxcbiAgICAgIGJvcmRlclJhZGl1czogJzE2cHgnLFxuICAgICAgZm9udFNpemU6ICcxNHB4JyxcbiAgICAgIGZvbnRGYW1pbHksXG4gICAgICBmb250V2VpZ2h0OiAnNTAwJyxcbiAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgZ2FwOiAnOHB4JyxcbiAgICB9O1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgc3R5bGU9e3NwZWNpYWxNZXNzYWdlU3R5bGV9PlxuICAgICAgICA8ZGl2IHN0eWxlPXtzcGVjaWFsQnViYmxlU3R5bGV9PlxuICAgICAgICAgIHtpY29ufVxuICAgICAgICAgIHttZXNzYWdlLnRleHR9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuXG4gIGlmIChpc1dlbGNvbWVNZXNzYWdlKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgc3R5bGU9e21lc3NhZ2VDb250YWluZXJTdHlsZX0+XG4gICAgICAgIDxkaXYgc3R5bGU9e21lc3NhZ2VCdWJibGVDb250YWluZXJTdHlsZX0+XG4gICAgICAgICAgPGRpdiBzdHlsZT17bGFiZWxDb250YWluZXJTdHlsZX0+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXttZXNzYWdlTGFiZWxTdHlsZX0+QWdlbnQ8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IHN0eWxlPXttZXNzYWdlUm93U3R5bGV9PlxuICAgICAgICAgICAgPGRpdiBzdHlsZT17ey4uLmJ1YmJsZVN0eWxlLCBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lPy5wcmltYXJ5Q29sb3IgfHwgJyMyNTYzRUInLCBjb2xvcjogJyNmZmZmZmYnfX0+XG4gICAgICAgICAgICAgIHttZXNzYWdlLnRleHR9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IHN0eWxlPXt0aW1lc3RhbXBTdHlsZX0+e3RpbWVzdGFtcH08L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IHN0eWxlPXttZXNzYWdlQ29udGFpbmVyU3R5bGV9PlxuICAgICAgPGRpdiBzdHlsZT17bGFiZWxDb250YWluZXJTdHlsZX0+XG4gICAgICAgIDxkaXYgc3R5bGU9e21lc3NhZ2VMYWJlbFN0eWxlfT57c3BlYWtlckxhYmVsfTwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIHttZXNzYWdlLmF0dGFjaG1lbnRzICYmIG1lc3NhZ2UuYXR0YWNobWVudHMubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgIDxkaXYgc3R5bGU9e3sgLi4uYXR0YWNobWVudHNDb250YWluZXJTdHlsZSwgYWxpZ25JdGVtczogaXNVc2VyID8gJ2ZsZXgtZW5kJyA6ICdmbGV4LXN0YXJ0JyB9fT5cbiAgICAgICAgICB7bWVzc2FnZS5hdHRhY2htZW50cy5tYXAoKGF0dGFjaG1lbnQsIGluZGV4KSA9PiAoXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGtleT17aW5kZXh9XG4gICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgIGdhcDogJzEycHgnLFxuICAgICAgICAgICAgICAgIHBhZGRpbmc6ICcxMnB4IDE0cHgnLFxuICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogaXNVc2VyID8gJ3JnYmEoMjU1LDI1NSwyNTUsMC4xMiknIDogJyNmNWY1ZjUnLFxuICAgICAgICAgICAgICAgIGJvcmRlcjogaXNVc2VyID8gJzFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMTgpJyA6ICcxcHggc29saWQgI2U1ZTVlNScsXG4gICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnMTJweCcsXG4gICAgICAgICAgICAgICAgbWluV2lkdGg6ICcyNjBweCcsXG4gICAgICAgICAgICAgICAgbWF4V2lkdGg6ICczNjBweCcsXG4gICAgICAgICAgICAgICAgcG9pbnRlckV2ZW50czogJ25vbmUnLFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7YXR0YWNobWVudC50eXBlLnN0YXJ0c1dpdGgoJ2ltYWdlLycpID8gKFxuICAgICAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICAgIHNyYz17YXR0YWNobWVudC51cmx9XG4gICAgICAgICAgICAgICAgICBhbHQ9e2F0dGFjaG1lbnQubmFtZX1cbiAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IHdpZHRoOiA1NiwgaGVpZ2h0OiA1NiwgYm9yZGVyUmFkaXVzOiA4LCBvYmplY3RGaXQ6ICdjb3ZlcicgfX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgd2lkdGg6IDQwLCBoZWlnaHQ6IDQwLCBkaXNwbGF5OiAnZmxleCcsIGFsaWduSXRlbXM6ICdjZW50ZXInLCBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicgfX0+XG4gICAgICAgICAgICAgICAgICB7Z2V0RmlsZUljb24oYXR0YWNobWVudC50eXBlKX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nIH19PlxuICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZm9udFdlaWdodDogNjAwLCBmb250U2l6ZTogMTQgfX0+e2F0dGFjaG1lbnQubmFtZX08L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGZvbnRTaXplOiAxMiwgb3BhY2l0eTogMC44IH19PlxuICAgICAgICAgICAgICAgICAge2F0dGFjaG1lbnQudHlwZS5pbmNsdWRlcygnLycpID8gYXR0YWNobWVudC50eXBlLnNwbGl0KCcvJylbMV0udG9VcHBlckNhc2UoKSA6IGF0dGFjaG1lbnQudHlwZX1cbiAgICAgICAgICAgICAgICAgIHthdHRhY2htZW50LnNpemUgPyBgIMK3ICR7KGF0dGFjaG1lbnQuc2l6ZSAvIDEwMjQpLnRvRml4ZWQoMSl9IEtCYCA6ICcnfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICkpfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG5cbiAgICAgIHttZXNzYWdlLnRleHQgJiYgKFxuICAgICAgICA8ZGl2IHN0eWxlPXtidWJibGVTdHlsZX0+XG4gICAgICAgICAge21lc3NhZ2VMaW5lc31cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuXG4gICAgICA8ZGl2IHN0eWxlPXt0aW1lc3RhbXBTdHlsZX0+e3RpbWVzdGFtcH08L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKTtcbn07ICJdfQ==
|
|
449
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2hhdE1lc3NhZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tcG9uZW50cy9DaGF0TWVzc2FnZS50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBRTFCLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQVF0SCxNQUFNLENBQUMsSUFBTSxpQkFBaUIsR0FBcUMsVUFBQyxFQUFxQztRQUFuQyxJQUFJLFVBQUEsRUFBRSxRQUFRLGNBQUEsRUFBRSxpQkFBaUIsRUFBakIsU0FBUyxtQkFBRyxLQUFLLEtBQUE7SUFDckcsSUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztJQUMzQixJQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3hDLElBQUEsS0FBa0MsS0FBSyxDQUFDLFFBQVEsQ0FBZ0IsSUFBSSxDQUFDLEVBQXBFLFlBQVksUUFBQSxFQUFFLGVBQWUsUUFBdUMsQ0FBQztJQUU1RSxLQUFLLENBQUMsU0FBUyxDQUFDO1FBQ2QsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNaLElBQU0sUUFBTSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7WUFDaEMsUUFBTSxDQUFDLFNBQVMsR0FBRztnQkFDakIsZUFBZSxDQUFDLFFBQU0sQ0FBQyxNQUFnQixDQUFDLENBQUM7WUFDM0MsQ0FBQyxDQUFDO1lBQ0YsUUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM3QixDQUFDO0lBQ0gsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFFcEIsSUFBTSxXQUFXLEdBQUcsVUFBQyxJQUFZO1FBQy9C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LGdCQUFnQixZQUN6QixhQUFhLENBQUMsQ0FBQyxDQUFDLENBQ2YsY0FBSyxLQUFLLEVBQUUsZUFBZSxZQUN4QixhQUFhLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUMxQixLQUFDLFFBQVEsSUFBQyxJQUFJLEVBQUUsRUFBRSxHQUFJLENBQ3ZCLENBQUMsQ0FBQyxDQUFDLENBQ0YsS0FBQyxVQUFVLElBQUMsSUFBSSxFQUFFLEVBQUUsR0FBSSxDQUN6QixHQUNHLENBQ1AsQ0FBQyxDQUFDLENBQUMsQ0FDRiw4QkFDRSxpQkFDRSxJQUFJLEVBQUMsUUFBUSxFQUNiLEtBQUssRUFBRSxlQUFlLEVBQ3RCLEtBQUssRUFBQyxXQUFXLEVBQ2pCLE9BQU8sRUFBRTtnQ0FDUCxJQUFJLE9BQU8sQ0FBQyxVQUFVLElBQUksVUFBVSxFQUFFLENBQUM7b0NBQ3JDLFVBQVUsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dDQUN6QyxDQUFDOzRCQUNILENBQUMsWUFFRCxLQUFDLFFBQVEsSUFBQyxJQUFJLEVBQUUsRUFBRSxHQUFJLEdBQ2YsRUFDVCxjQUFLLEtBQUssRUFBRSxjQUFjLEdBQUksRUFDOUIsaUJBQ0UsSUFBSSxFQUFDLFFBQVEsRUFDYixLQUFLLEVBQUUsZUFBZSxFQUN0QixLQUFLLEVBQUMsYUFBYSxFQUNuQixPQUFPLEVBQUU7Z0NBQ1AsSUFBSSxPQUFPLENBQUMsVUFBVSxJQUFJLFVBQVUsRUFBRSxDQUFDO29DQUNyQyxVQUFVLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztnQ0FDeEMsQ0FBQzs0QkFDSCxDQUFDLFlBRUQsS0FBQyxVQUFVLElBQUMsSUFBSSxFQUFFLEVBQUUsR0FBSSxHQUNqQixJQUNSLENBQ0osR0FDRyxDQUNQLElBQ0csQ0FDUCxDQUFDO0FBQ0osQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IENoYXRNZXNzYWdlIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgVXNlciwgVXNlclgsIEFsZXJ0Q2lyY2xlLCBGaWxlVGV4dCwgRmlsZUpzb24sIEZpbGVJbWFnZSwgTG9hZGVyMiwgVGh1bWJzVXAsIFRodW1ic0Rvd24gfSBmcm9tICdsdWNpZGUtcmVhY3QnO1xuXG5pbnRlcmZhY2UgQXR0YWNobWVudFByZXZpZXdQcm9wcyB7XG4gIGZpbGU6IEZpbGU7XG4gIG9uUmVtb3ZlOiAoKSA9PiB2b2lkO1xuICB1cGxvYWRpbmc/OiBib29sZWFuO1xufVxuXG5leHBvcnQgY29uc3QgQXR0YWNobWVudFByZXZpZXc6IFJlYWN0LkZDPEF0dGFjaG1lbnRQcmV2aWV3UHJvcHM+ID0gKHsgZmlsZSwgb25SZW1vdmUsIHVwbG9hZGluZyA9IGZhbHNlIH0pID0+IHtcbiAgY29uc3QgZmlsZVR5cGUgPSBmaWxlLnR5cGU7XG4gIGNvbnN0IGlzSW1hZ2UgPSBmaWxlVHlwZS5zdGFydHNXaXRoKCdpbWFnZS8nKTtcbiAgY29uc3QgW2ltYWdlUHJldmlldywgc2V0SW1hZ2VQcmV2aWV3XSA9IFJlYWN0LnVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGlzSW1hZ2UpIHtcbiAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgICByZWFkZXIub25sb2FkZW5kID0gKCkgPT4ge1xuICAgICAgICBzZXRJbWFnZVByZXZpZXcocmVhZGVyLnJlc3VsdCBhcyBzdHJpbmcpO1xuICAgICAgfTtcbiAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpO1xuICAgIH1cbiAgfSwgW2ZpbGUsIGlzSW1hZ2VdKTtcblxuICBjb25zdCBnZXRGaWxlSWNvbiA9ICh0eXBlOiBzdHJpbmcpID0+IHtcbiAgICBpZiAodHlwZS5zdGFydHNXaXRoKCdpbWFnZS8nKSkgcmV0dXJuIDxGaWxlSW1hZ2Ugc2l6ZT17MjR9IGNvbG9yPVwiIzZEMjhEOVwiIC8+O1xuICAgIGlmICh0eXBlID09PSAnYXBwbGljYXRpb24vcGRmJykgcmV0dXJuIDxGaWxlVGV4dCBzaXplPXsyNH0gY29sb3I9XCIjQjkxQzFDXCIgLz47XG4gICAgaWYgKHR5cGUgPT09ICdhcHBsaWNhdGlvbi9qc29uJykgcmV0dXJuIDxGaWxlSnNvbiBzaXplPXsyNH0gY29sb3I9XCIjMUQ0RUQ4XCIgLz47XG4gICAgcmV0dXJuIDxGaWxlVGV4dCBzaXplPXsyNH0gY29sb3I9XCIjNEI1NTYzXCIgLz47XG4gIH07XG5cbiAgY29uc3QgY29udGFpbmVyU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIHBhZGRpbmc6ICc4cHgnLFxuICAgIGJhY2tncm91bmRDb2xvcjogJyNmMGYwZjAnLFxuICAgIGJvcmRlclJhZGl1czogJzhweCcsXG4gICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgbWF4V2lkdGg6ICcyNTBweCcsXG4gIH07XG5cbiAgY29uc3QgaW1hZ2VTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICB3aWR0aDogJzQwcHgnLFxuICAgIGhlaWdodDogJzQwcHgnLFxuICAgIGJvcmRlclJhZGl1czogJzRweCcsXG4gICAgb2JqZWN0Rml0OiAnY292ZXInLFxuICAgIG1hcmdpblJpZ2h0OiAnMTBweCcsXG4gIH07XG5cbiAgY29uc3QgZmlsZUluZm9TdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBmbGV4OiAxLFxuICAgIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgICB3aGl0ZVNwYWNlOiAnbm93cmFwJyxcbiAgICB0ZXh0T3ZlcmZsb3c6ICdlbGxpcHNpcycsXG4gIH07XG5cbiAgY29uc3QgZmlsZU5hbWVTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBmb250V2VpZ2h0OiAnYm9sZCcsXG4gICAgZm9udFNpemU6ICcxNHB4JyxcbiAgfTtcblxuICBjb25zdCBmaWxlU2l6ZVN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGZvbnRTaXplOiAnMTJweCcsXG4gICAgY29sb3I6ICcjNjY2JyxcbiAgfTtcblxuICBjb25zdCByZW1vdmVCdXR0b25TdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBiYWNrZ3JvdW5kOiAnbm9uZScsXG4gICAgYm9yZGVyOiAnbm9uZScsXG4gICAgY3Vyc29yOiAncG9pbnRlcicsXG4gICAgcGFkZGluZzogJzRweCcsXG4gICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgdG9wOiAnNHB4JyxcbiAgICByaWdodDogJzRweCcsXG4gIH07XG5cbiAgY29uc3QgdXBsb2FkaW5nT3ZlcmxheVN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgIHRvcDogMCxcbiAgICBsZWZ0OiAwLFxuICAgIHJpZ2h0OiAwLFxuICAgIGJvdHRvbTogMCxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyknLFxuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgYm9yZGVyUmFkaXVzOiAnOHB4JyxcbiAgfTtcblxuICBjb25zdCBsb2FkZXJTcGluU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgYW5pbWF0aW9uOiAnc3BpbiAxcyBsaW5lYXIgaW5maW5pdGUnLFxuICB9O1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBzdHlsZT17Y29udGFpbmVyU3R5bGV9PlxuICAgICAge2lzSW1hZ2UgJiYgaW1hZ2VQcmV2aWV3ID8gKFxuICAgICAgICA8aW1nIHNyYz17aW1hZ2VQcmV2aWV3fSBhbHQ9e2ZpbGUubmFtZX0gc3R5bGU9e2ltYWdlU3R5bGV9IC8+XG4gICAgICApIDogKFxuICAgICAgICA8ZGl2IHN0eWxlPXt7IG1hcmdpblJpZ2h0OiAnMTBweCcgfX0+e2dldEZpbGVJY29uKGZpbGVUeXBlKX08L2Rpdj5cbiAgICAgICl9XG4gICAgICA8ZGl2IHN0eWxlPXtmaWxlSW5mb1N0eWxlfT5cbiAgICAgICAgPGRpdiBzdHlsZT17ZmlsZU5hbWVTdHlsZX0gdGl0bGU9e2ZpbGUubmFtZX0+e2ZpbGUubmFtZX08L2Rpdj5cbiAgICAgICAgPGRpdiBzdHlsZT17ZmlsZVNpemVTdHlsZX0+eyhmaWxlLnNpemUgLyAxMDI0KS50b0ZpeGVkKDIpfSBLQjwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICB7IXVwbG9hZGluZyAmJiAoXG4gICAgICAgIDxidXR0b24gb25DbGljaz17b25SZW1vdmV9IHN0eWxlPXtyZW1vdmVCdXR0b25TdHlsZX0gdGl0bGU9XCJSZW1vdmUgZmlsZVwiPlxuICAgICAgICAgICYjeDI3MTU7XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgKX1cbiAgICAgIHt1cGxvYWRpbmcgJiYgKFxuICAgICAgICA8ZGl2IHN0eWxlPXt1cGxvYWRpbmdPdmVybGF5U3R5bGV9PlxuICAgICAgICAgIDxMb2FkZXIyIHNpemU9ezI0fSBjb2xvcj1cIiMwMDBcIiBzdHlsZT17bG9hZGVyU3BpblN0eWxlfSAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG4gICAgICA8c3R5bGU+e2BcbiAgICAgICAgQGtleWZyYW1lcyBzcGluIHtcbiAgICAgICAgICAwJSB7IHRyYW5zZm9ybTogcm90YXRlKDBkZWcpOyB9XG4gICAgICAgICAgMTAwJSB7IHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7IH1cbiAgICAgICAgfVxuICAgICAgYH08L3N0eWxlPlxuICAgIDwvZGl2PlxuICApO1xufTtcblxuXG5pbnRlcmZhY2UgQ2hhdE1lc3NhZ2VQcm9wcyB7XG4gIG1lc3NhZ2U6IENoYXRNZXNzYWdlO1xuICB0aGVtZT86IHtcbiAgICBwcmltYXJ5Q29sb3I/OiBzdHJpbmc7XG4gICAgc2Vjb25kYXJ5Q29sb3I/OiBzdHJpbmc7XG4gICAgZm9udEZhbWlseT86IHN0cmluZztcbiAgICBmb250U2l6ZT86IHN0cmluZztcbiAgICBiYWNrZ3JvdW5kQ29sb3I/OiBzdHJpbmc7XG4gICAgdGV4dENvbG9yPzogc3RyaW5nO1xuICB9O1xuICBvblBsYXlBdWRpbz86ICh0ZXh0OiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD47XG4gIGlzUGxheWluZ0F1ZGlvPzogYm9vbGVhbjtcbiAgaXNGaXJzdE1lc3NhZ2U/OiBib29sZWFuO1xuICBpc05leHRTYW1lU3BlYWtlcj86IGJvb2xlYW47XG4gIGlzUHJldlNhbWVTcGVha2VyPzogYm9vbGVhbjtcbiAgb25GZWVkYmFjaz86IChtZXNzYWdlSWQ6IHN0cmluZywgdmFsdWU6ICdnb29kJyB8ICdiYWQnKSA9PiB2b2lkO1xuICBlbmFibGVUeXBld3JpdGVyPzogYm9vbGVhbjtcbiAgd2VsY29tZUltYWdlVXJsPzogc3RyaW5nO1xuICB3ZWxjb21lVGl0bGU/OiBzdHJpbmc7XG4gIHBvc3NpYmxlUXVlcmllcz86IHN0cmluZ1tdO1xuICBvblF1aWNrUXVlcnk/OiAocXVlcnk6IHN0cmluZykgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGNvbnN0IENoYXRNZXNzYWdlQ29tcG9uZW50OiBSZWFjdC5GQzxDaGF0TWVzc2FnZVByb3BzPiA9ICh7XG4gIG1lc3NhZ2UsXG4gIHRoZW1lLFxuICBvblBsYXlBdWRpbyxcbiAgaXNQbGF5aW5nQXVkaW8sXG4gIGlzRmlyc3RNZXNzYWdlID0gZmFsc2UsXG4gIGlzTmV4dFNhbWVTcGVha2VyID0gZmFsc2UsXG4gIGlzUHJldlNhbWVTcGVha2VyID0gZmFsc2UsXG4gIG9uRmVlZGJhY2ssXG4gIGVuYWJsZVR5cGV3cml0ZXIgPSBmYWxzZSxcbiAgd2VsY29tZUltYWdlVXJsLFxuICB3ZWxjb21lVGl0bGU6IHdlbGNvbWVUaXRsZVByb3AsXG4gIHBvc3NpYmxlUXVlcmllcyxcbiAgb25RdWlja1F1ZXJ5LFxufSkgPT4ge1xuICBjb25zdCBpc1VzZXIgPSBtZXNzYWdlLnNwZWFrZXIgPT09ICdjdXN0b21lcic7XG4gIGNvbnN0IGlzU3BlY2lhbCA9IG1lc3NhZ2Uuc3BlYWtlciA9PT0gJ3NwZWNpYWwnO1xuICBjb25zdCBpc1dlbGNvbWVNZXNzYWdlID0gIWlzVXNlciAmJiAhaXNTcGVjaWFsICYmIGlzRmlyc3RNZXNzYWdlO1xuICBjb25zdCBbaXNIb3ZlcmVkLCBzZXRJc0hvdmVyZWRdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbZWRpdGluZ0ZlZWRiYWNrLCBzZXRFZGl0aW5nRmVlZGJhY2tdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbZGlzcGxheVRleHQsIHNldERpc3BsYXlUZXh0XSA9IFJlYWN0LnVzZVN0YXRlPHN0cmluZz4obWVzc2FnZS50ZXh0KTtcbiAgY29uc3QgW2lzVHlwZXdyaXRpbmcsIHNldElzVHlwZXdyaXRpbmddID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBsYXN0QW5pbWF0ZWRSZWYgPSBSZWFjdC51c2VSZWY8c3RyaW5nPignJyk7XG5cbiAgY29uc3QgZm9ybWF0VGltZXN0YW1wID0gKHRpbWVzdGFtcDogbnVtYmVyKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICghdGltZXN0YW1wIHx8IGlzTmFOKHRpbWVzdGFtcCkpIHtcbiAgICAgICAgcmV0dXJuICdKdXN0IG5vdyc7XG4gICAgICB9XG4gICAgICBcbiAgICAgIGNvbnN0IHRpbWVzdGFtcE1zID0gdGltZXN0YW1wIDwgMTAwMDAwMDAwMDAwMCA/IHRpbWVzdGFtcCAqIDEwMDAgOiB0aW1lc3RhbXA7XG4gICAgICBcbiAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh0aW1lc3RhbXBNcyk7XG4gICAgICAvLyBRdWljayBjaGVjayBpZiBkYXRlIGlzIHZhbGlkXG4gICAgICBpZiAoaXNOYU4oZGF0ZS5nZXRUaW1lKCkpKSB7XG4gICAgICAgIHJldHVybiAnSnVzdCBub3cnO1xuICAgICAgfVxuICAgICAgXG4gICAgICBjb25zdCB0b2RheSA9IG5ldyBEYXRlKCk7XG4gICAgICBjb25zdCB5ZXN0ZXJkYXkgPSBuZXcgRGF0ZSh0b2RheSk7XG4gICAgICB5ZXN0ZXJkYXkuc2V0RGF0ZSh5ZXN0ZXJkYXkuZ2V0RGF0ZSgpIC0gMSk7XG4gICAgICBcbiAgICAgIC8vIEZvcm1hdCB0aW1lIGFzIEhIOk1NIEFNL1BNXG4gICAgICBjb25zdCB0aW1lT3B0aW9uczogSW50bC5EYXRlVGltZUZvcm1hdE9wdGlvbnMgPSB7IGhvdXI6ICdudW1lcmljJywgbWludXRlOiAnMi1kaWdpdCcsIGhvdXIxMjogdHJ1ZSB9O1xuICAgICAgY29uc3QgdGltZVN0ciA9IGRhdGUudG9Mb2NhbGVUaW1lU3RyaW5nKHVuZGVmaW5lZCwgdGltZU9wdGlvbnMpO1xuICAgICAgXG4gICAgICAvLyBDaGVjayBpZiBkYXRlIGlzIHRvZGF5LCB5ZXN0ZXJkYXksIG9yIGFub3RoZXIgZGF5XG4gICAgICBpZiAoZGF0ZS50b0RhdGVTdHJpbmcoKSA9PT0gdG9kYXkudG9EYXRlU3RyaW5nKCkpIHtcbiAgICAgICAgcmV0dXJuIGBUb2RheSwgJHt0aW1lU3RyfWA7XG4gICAgICB9IGVsc2UgaWYgKGRhdGUudG9EYXRlU3RyaW5nKCkgPT09IHllc3RlcmRheS50b0RhdGVTdHJpbmcoKSkge1xuICAgICAgICByZXR1cm4gYFllc3RlcmRheSwgJHt0aW1lU3RyfWA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBGb3JtYXQgZGF0ZSBhcyBNb250aCBERCwgWVlZWVxuICAgICAgICBjb25zdCBkYXRlT3B0aW9uczogSW50bC5EYXRlVGltZUZvcm1hdE9wdGlvbnMgPSB7IG1vbnRoOiAnc2hvcnQnLCBkYXk6ICdudW1lcmljJywgeWVhcjogJ251bWVyaWMnIH07XG4gICAgICAgIGNvbnN0IGRhdGVTdHIgPSBkYXRlLnRvTG9jYWxlRGF0ZVN0cmluZyh1bmRlZmluZWQsIGRhdGVPcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIGAke2RhdGVTdHJ9LCAke3RpbWVTdHJ9YDtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZm9ybWF0dGluZyB0aW1lc3RhbXA6JywgZXJyb3IpO1xuICAgICAgcmV0dXJuICdKdXN0IG5vdyc7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IHRpbWVzdGFtcCA9IGZvcm1hdFRpbWVzdGFtcChtZXNzYWdlLmNyZWF0ZV90aW1lKTtcblxuICAvLyBGYXN0IHR5cGV3cml0ZXIgZWZmZWN0IGZvciBuZXdseSBkaXNwbGF5ZWQgYWdlbnQgbWVzc2FnZXMsIGZpeCBsYXRlclxuICAvLyBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAvLyAgIGlmICghaXNVc2VyICYmICFpc1NwZWNpYWwgJiYgZW5hYmxlVHlwZXdyaXRlciAmJiBtZXNzYWdlLnRleHQgIT09IGxhc3RBbmltYXRlZFJlZi5jdXJyZW50KSB7XG4gIC8vICAgICBsYXN0QW5pbWF0ZWRSZWYuY3VycmVudCA9IG1lc3NhZ2UudGV4dDtcbiAgLy8gICAgIHNldElzVHlwZXdyaXRpbmcodHJ1ZSk7XG4gIC8vICAgICBzZXREaXNwbGF5VGV4dCgnJyk7XG4gIC8vICAgICBsZXQgaSA9IDA7XG4gIC8vICAgICBjb25zdCB0b3RhbCA9IG1lc3NhZ2UudGV4dC5sZW5ndGg7XG4gIC8vICAgICBjb25zdCB0aWNrTXMgPSAxNjtcbiAgLy8gICAgIGNvbnN0IHRhcmdldE1zID0gMTIwMDtcbiAgLy8gICAgIGNvbnN0IGNoYXJzUGVyVGljayA9IE1hdGgubWF4KDEsIE1hdGgucm91bmQodG90YWwgLyAodGFyZ2V0TXMgLyB0aWNrTXMpKSk7XG4gIC8vICAgICBjb25zdCBpbnRlcnZhbCA9IHdpbmRvdy5zZXRJbnRlcnZhbCgoKSA9PiB7XG4gIC8vICAgICAgIGkgKz0gY2hhcnNQZXJUaWNrO1xuICAvLyAgICAgICBpZiAoaSA+PSB0b3RhbCkge1xuICAvLyAgICAgICAgIHNldERpc3BsYXlUZXh0KG1lc3NhZ2UudGV4dCk7XG4gIC8vICAgICAgICAgc2V0SXNUeXBld3JpdGluZyhmYWxzZSk7XG4gIC8vICAgICAgICAgd2luZG93LmNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpO1xuICAvLyAgICAgICB9IGVsc2Uge1xuICAvLyAgICAgICAgIHNldERpc3BsYXlUZXh0KG1lc3NhZ2UudGV4dC5zbGljZSgwLCBpKSk7XG4gIC8vICAgICAgIH1cbiAgLy8gICAgIH0sIHRpY2tNcyk7XG4gIC8vICAgICByZXR1cm4gKCkgPT4gd2luZG93LmNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpO1xuICAvLyAgIH0gZWxzZSB7XG4gIC8vICAgICBzZXREaXNwbGF5VGV4dChtZXNzYWdlLnRleHQpO1xuICAvLyAgICAgc2V0SXNUeXBld3JpdGluZyhmYWxzZSk7XG4gIC8vICAgfVxuICAvLyB9LCBbbWVzc2FnZS50ZXh0LCBlbmFibGVUeXBld3JpdGVyLCBpc1VzZXIsIGlzU3BlY2lhbF0pO1xuXG4gIC8vIFVwZGF0ZWQgZGVzaWduIGNvbG9yc1xuICBjb25zdCB1c2VyQnViYmxlQmdDb2xvciA9ICcjRTRFNEU3JzsgLy8gZ3JleSBmb3IgdXNlclxuICBjb25zdCB1c2VyVGV4dENvbG9yID0gJyMwMDAwMDAnO1xuICBjb25zdCBhZ2VudFRleHRDb2xvciA9ICcjMDAwMDAwJztcbiAgY29uc3QgZm9udEZhbWlseSA9IHRoZW1lPy5mb250RmFtaWx5IHx8ICdSb2JvdG8sIEFyaWFsLCBzYW5zLXNlcmlmJztcbiAgY29uc3QgZm9udFNpemUgPSB0aGVtZT8uZm9udFNpemUgfHwgJzE1cHgnO1xuXG4gIGNvbnN0IG1lc3NhZ2VDb250YWluZXJTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gICAgd2lkdGg6ICcxMDAlJyxcbiAgICBtYXJnaW5Cb3R0b206IGlzUHJldlNhbWVTcGVha2VyID8gJzhweCcgOiAnOHB4JyxcbiAgICBtYXJnaW5Ub3A6IGlzUHJldlNhbWVTcGVha2VyID8gJzBweCcgOiAnMTZweCcsXG4gICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgYWxpZ25JdGVtczogaXNVc2VyID8gJ2ZsZXgtZW5kJyA6ICdmbGV4LXN0YXJ0JyxcbiAgfTtcblxuICBjb25zdCBtZXNzYWdlUm93U3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIHdpZHRoOiAnMTAwJScsXG4gICAganVzdGlmeUNvbnRlbnQ6IGlzVXNlciA/ICdmbGV4LWVuZCcgOiAnZmxleC1zdGFydCcsXG4gIH07XG5cbiAgY29uc3QgbGFiZWxSb3dTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBkaXNwbGF5OiBpc1ByZXZTYW1lU3BlYWtlciA/ICdub25lJyA6ICdmbGV4JyxcbiAgICB3aWR0aDogJzgwJScsXG4gICAganVzdGlmeUNvbnRlbnQ6IGlzVXNlciA/ICdmbGV4LWVuZCcgOiAnZmxleC1zdGFydCcsXG4gICAgYWxpZ25JdGVtczogJ2Jhc2VsaW5lJyxcbiAgICBnYXA6ICc4cHgnLFxuICAgIG1hcmdpbkJvdHRvbTogJzZweCcsXG4gIH07XG5cbiAgY29uc3QgbWVzc2FnZUxhYmVsU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZm9udFNpemU6ICcxNHB4JyxcbiAgICBjb2xvcjogJyMwMDAwMDAnLFxuICAgIGxpbmVIZWlnaHQ6IDEsXG4gICAgZm9udFdlaWdodDogNjAwLFxuICB9O1xuXG4gIGNvbnN0IHRvcFRpbWVzdGFtcFN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGZvbnRTaXplOiAnMTNweCcsXG4gICAgY29sb3I6ICcjNmI3MjgwJyxcbiAgICBsaW5lSGVpZ2h0OiAxLFxuICB9O1xuXG4gIGNvbnN0IG1lc3NhZ2VCdWJibGVDb250YWluZXJTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gICAgbWF4V2lkdGg6ICc4MCUnLFxuICB9O1xuXG4gIC8vIE9ubHkgdXNlcidzIG1lc3NhZ2VzIHNob3VsZCByZW5kZXIgYXMgYnViYmxlcy5cbiAgLy8gQWdlbnQgbWVzc2FnZXMgYXJlIHBsYWluIHRleHQgd2l0aCBubyBjb250YWluZXIgYmFja2dyb3VuZC5cbiAgY29uc3QgYnViYmxlU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSBpc1VzZXJcbiAgICA/IHtcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiB1c2VyQnViYmxlQmdDb2xvcixcbiAgICAgICAgY29sb3I6IHVzZXJUZXh0Q29sb3IsXG4gICAgICAgIHBhZGRpbmc6ICcxMnB4IDE2cHgnLFxuICAgICAgICBib3JkZXJSYWRpdXM6ICcxMnB4IDAgMTJweCAxMnB4JyxcbiAgICAgICAgZm9udFNpemUsXG4gICAgICAgIGZvbnRGYW1pbHksXG4gICAgICAgIHdvcmRCcmVhazogJ2JyZWFrLXdvcmQnLFxuICAgICAgICBsaW5lSGVpZ2h0OiAxLjQsXG4gICAgICAgIG1heFdpZHRoOiAnMTAwJScsXG4gICAgICAgIGJvcmRlcjogJ25vbmUnLFxuICAgICAgICBib3hTaGFkb3c6ICcwIDFweCAycHggcmdiYSgwLDAsMCwwLjA4KSdcbiAgICAgIH1cbiAgICA6IHtcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiAndHJhbnNwYXJlbnQnLFxuICAgICAgICBjb2xvcjogYWdlbnRUZXh0Q29sb3IsXG4gICAgICAgIHBhZGRpbmc6IDAsXG4gICAgICAgIGJvcmRlclJhZGl1czogMCxcbiAgICAgICAgZm9udFNpemUsXG4gICAgICAgIGZvbnRGYW1pbHksXG4gICAgICAgIHdvcmRCcmVhazogJ2JyZWFrLXdvcmQnLFxuICAgICAgICBsaW5lSGVpZ2h0OiAxLjQsXG4gICAgICAgIG1heFdpZHRoOiAnMTAwJScsXG4gICAgICAgIGJvcmRlcjogJ25vbmUnLFxuICAgICAgICBib3hTaGFkb3c6ICdub25lJ1xuICAgICAgfTtcblxuICBjb25zdCBhdHRhY2htZW50c0NvbnRhaW5lclN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIG1hcmdpblRvcDogJzhweCcsXG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICAgIGdhcDogJzhweCcsXG4gIH07XG5cbiAgY29uc3QgZ2V0RmlsZUljb24gPSAoZmlsZVR5cGU6IHN0cmluZykgPT4ge1xuICAgIGlmIChmaWxlVHlwZS5zdGFydHNXaXRoKCdpbWFnZS8nKSkgcmV0dXJuIDxGaWxlSW1hZ2Ugc2l6ZT17MjR9IGNvbG9yPVwiIzZEMjhEOVwiIC8+O1xuICAgIGlmIChmaWxlVHlwZSA9PT0gJ2FwcGxpY2F0aW9uL3BkZicpIHJldHVybiA8RmlsZVRleHQgc2l6ZT17MjR9IGNvbG9yPVwiI0I5MUMxQ1wiIC8+O1xuICAgIGlmIChmaWxlVHlwZSA9PT0gJ2FwcGxpY2F0aW9uL2pzb24nKSByZXR1cm4gPEZpbGVKc29uIHNpemU9ezI0fSBjb2xvcj1cIiMxRDRFRDhcIiAvPjtcbiAgICByZXR1cm4gPEZpbGVUZXh0IHNpemU9ezI0fSBjb2xvcj1cIiM0QjU1NjNcIiAvPjtcbiAgfTtcblxuICBjb25zdCBhdHRhY2htZW50Q29udGFpbmVyU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIHBhZGRpbmc6ICcxMHB4JyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IGlzVXNlciA/ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSknIDogJ3JnYmEoMCwgMCwgMCwgMC4wNSknLFxuICAgIGJvcmRlclJhZGl1czogJzhweCcsXG4gIH07XG5cbiAgY29uc3QgaW1hZ2VBdHRhY2htZW50U3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgbWF4V2lkdGg6ICcxMDAlJyxcbiAgICBib3JkZXJSYWRpdXM6ICc4cHgnLFxuICB9O1xuXG4gIGNvbnN0IGZpbGVBdHRhY2htZW50U3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIHBhZGRpbmc6ICcxMHB4JyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IGlzVXNlciA/ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSknIDogJ3JnYmEoMCwgMCwgMCwgMC4wNSknLFxuICAgIGJvcmRlclJhZGl1czogJzhweCcsXG4gIH07XG5cbiAgY29uc3QgZmlsZUluZm9TdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBtYXJnaW5MZWZ0OiAnMTBweCcsXG4gICAgZmxleDogMSxcbiAgfTtcbiAgXG4gIGNvbnN0IGZpbGVOYW1lU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZm9udFdlaWdodDogJ2JvbGQnLFxuICB9O1xuICBcbiAgY29uc3QgZmlsZVNpemVTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBmb250U2l6ZTogJzEycHgnLFxuICAgIG9wYWNpdHk6IDAuOCxcbiAgfTtcblxuICAvLyBObyBib3R0b20gdGltZXN0YW1wIGluIHRoZSBuZXcgZGVzaWduXG4gIGNvbnN0IHRpbWVzdGFtcFN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0geyBkaXNwbGF5OiAnbm9uZScgfTtcbiAgY29uc3Qgc3BlYWtlckxhYmVsID0gaXNVc2VyID8gJ1lvdScgOiBpc1NwZWNpYWwgPyAnU3lzdGVtJyA6ICdBZ2VudCc7XG5cbiAgLy8gRmVlZGJhY2sgc3RhdGUgYW5kIFVJICh0aHVtYnMgdXAvZG93bikgZm9yIGFnZW50IG1lc3NhZ2VzXG4gIGNvbnN0IGZlZWRiYWNrVmFsdWUgPSAobWVzc2FnZS5mZWVkYmFjayAmJiBtZXNzYWdlLmZlZWRiYWNrLmxlbmd0aCA+IDApXG4gICAgPyBtZXNzYWdlLmZlZWRiYWNrW21lc3NhZ2UuZmVlZGJhY2subGVuZ3RoIC0gMV0uZmVlZGJhY2tcbiAgICA6IHVuZGVmaW5lZDtcblxuICBjb25zdCBwcmltYXJ5Q29sb3IgPSB0aGVtZT8ucHJpbWFyeUNvbG9yIHx8ICcjMjk2MkZGJztcbiAgY29uc3QgdGh1bWJzU2hvdWxkU2hvdyA9ICFpc1VzZXIgJiYgIWlzU3BlY2lhbCAmJiBpc0hvdmVyZWQgJiYgIWZlZWRiYWNrVmFsdWU7XG4gIGNvbnN0IHNob3dUaHVtYnNBcmVhID0gIWlzVXNlciAmJiAhaXNTcGVjaWFsOyAvLyBPbmx5IGFnZW50cyBoYXZlIHRodW1icyBhcmVhXG5cbiAgY29uc3QgZmVlZGJhY2tSb3dTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBkaXNwbGF5OiBzaG93VGh1bWJzQXJlYSA/ICdmbGV4JyA6ICdub25lJyxcbiAgICBtYXJnaW5Ub3A6IDgsXG4gICAgYWxpZ25TZWxmOiAnZmxleC1zdGFydCcsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgaGVpZ2h0OiAyMCxcbiAgICBnYXA6IDgsXG4gICAgdmlzaWJpbGl0eTogdGh1bWJzU2hvdWxkU2hvdyB8fCAhIWZlZWRiYWNrVmFsdWUgPyAndmlzaWJsZScgOiAnaGlkZGVuJyxcbiAgfTtcblxuICBjb25zdCBpY29uQnV0dG9uU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgYmFja2dyb3VuZDogJ3RyYW5zcGFyZW50JyxcbiAgICBib3JkZXI6ICdub25lJyxcbiAgICBwYWRkaW5nOiAwLFxuICAgIGN1cnNvcjogJ3BvaW50ZXInLFxuICAgIGNvbG9yOiAnIzljYTNhZicsXG4gICAgZGlzcGxheTogdGh1bWJzU2hvdWxkU2hvdyA/ICdmbGV4JyA6ICdub25lJyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgfTtcblxuICBjb25zdCBzZXBhcmF0b3JTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICB3aWR0aDogMSxcbiAgICBoZWlnaHQ6IDE0LFxuICAgIGJhY2tncm91bmRDb2xvcjogJyNlNWU3ZWInLFxuICAgIGRpc3BsYXk6IHRodW1ic1Nob3VsZFNob3cgPyAnYmxvY2snIDogJ25vbmUnLFxuICB9O1xuXG4gIGNvbnN0IHNpbmdsZUljb25TdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBjb2xvcjogJyMwMDAwMDAnLFxuICAgIGRpc3BsYXk6IGZlZWRiYWNrVmFsdWUgPyAnZmxleCcgOiAnbm9uZScsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gIH07XG5cbiAgbGV0IHdlbGNvbWVUaXRsZSA9IHdlbGNvbWVUaXRsZVByb3AgfHwgJyc7XG4gIGxldCB3ZWxjb21lQ29udGVudCA9ICcnO1xuICBcbiAgaWYgKGlzV2VsY29tZU1lc3NhZ2UpIHtcbiAgICBjb25zdCBtZXNzYWdlVGV4dCA9IG1lc3NhZ2UudGV4dDtcbiAgICBpZiAoIXdlbGNvbWVUaXRsZVByb3ApIHtcbiAgICAgIGNvbnN0IHBhcnRzID0gbWVzc2FnZVRleHQuc3BsaXQoL1tcXG5cXC4hP10vKTtcbiAgICAgIGlmIChwYXJ0cy5sZW5ndGggPiAwKSB3ZWxjb21lVGl0bGUgPSAocGFydHNbMF0gfHwgJycpLnRyaW0oKTtcbiAgICAgIHdlbGNvbWVDb250ZW50ID0gbWVzc2FnZVRleHQuc3Vic3RyaW5nKHdlbGNvbWVUaXRsZS5sZW5ndGgpLnRyaW0oKTtcbiAgICAgIHdlbGNvbWVDb250ZW50ID0gd2VsY29tZUNvbnRlbnQucmVwbGFjZSgvXlssLiE/XFxzXSsvLCAnJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHdlbGNvbWVDb250ZW50ID0gbWVzc2FnZVRleHQ7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgbWVzc2FnZUxpbmVzID0gIWlzV2VsY29tZU1lc3NhZ2UgPyBkaXNwbGF5VGV4dC5zcGxpdCgnXFxuJykubWFwKChsaW5lLCBpKSA9PiAoXG4gICAgPFJlYWN0LkZyYWdtZW50IGtleT17aX0+XG4gICAgICB7bGluZX1cbiAgICAgIHtpIDwgZGlzcGxheVRleHQuc3BsaXQoJ1xcbicpLmxlbmd0aCAtIDEgJiYgPGJyIC8+fVxuICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICkpIDogbnVsbDtcblxuICAvLyBIYW5kbGUgc3BlY2lhbCBtZXNzYWdlcyAobGlrZSB0YWtlb3ZlciBpbmRpY2F0b3JzKVxuICBpZiAoaXNTcGVjaWFsKSB7XG4gICAgY29uc3Qgc3BlY2lhbE1lc3NhZ2VTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgbWFyZ2luOiAnMTZweCAwJyxcbiAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgfTtcblxuICAgIC8vIERldGVybWluZSBpY29uIGFuZCBzdHlsZSBiYXNlZCBvbiBtZXNzYWdlIGNvbnRlbnRcbiAgICBsZXQgaWNvbjtcbiAgICBsZXQgYmFja2dyb3VuZENvbG9yID0gJyNFM0YyRkQnO1xuICAgIGxldCB0ZXh0Q29sb3IgPSAnIzE5NzZEMic7XG4gICAgXG4gICAgaWYgKG1lc3NhZ2UudGV4dC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdvZmZsaW5lJykgfHwgbWVzc2FnZS50ZXh0LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2luYWN0aXZlJykpIHtcbiAgICAgIGljb24gPSA8QWxlcnRDaXJjbGUgc2l6ZT17MTh9IC8+O1xuICAgICAgYmFja2dyb3VuZENvbG9yID0gJyNGRkYzRTAnO1xuICAgICAgdGV4dENvbG9yID0gJyNGNTdDMDAnO1xuICAgIH0gZWxzZSBpZiAobWVzc2FnZS50ZXh0LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ3Rvb2sgb3ZlcicpIHx8IG1lc3NhZ2UudGV4dC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCd0YWtlb3ZlcicpKSB7XG4gICAgICBpY29uID0gPFVzZXJYIHNpemU9ezE4fSAvPjtcbiAgICB9IGVsc2Uge1xuICAgICAgaWNvbiA9IDxVc2VyIHNpemU9ezE4fSAvPjtcbiAgICB9XG5cbiAgICBjb25zdCBzcGVjaWFsQnViYmxlU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgICBiYWNrZ3JvdW5kQ29sb3IsXG4gICAgICBjb2xvcjogdGV4dENvbG9yLFxuICAgICAgcGFkZGluZzogJzhweCAxNnB4JyxcbiAgICAgIGJvcmRlclJhZGl1czogJzE2cHgnLFxuICAgICAgZm9udFNpemU6ICcxNHB4JyxcbiAgICAgIGZvbnRGYW1pbHksXG4gICAgICBmb250V2VpZ2h0OiAnNTAwJyxcbiAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgZ2FwOiAnOHB4JyxcbiAgICB9O1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgc3R5bGU9e3NwZWNpYWxNZXNzYWdlU3R5bGV9PlxuICAgICAgICA8ZGl2IHN0eWxlPXtzcGVjaWFsQnViYmxlU3R5bGV9PlxuICAgICAgICAgIHtpY29ufVxuICAgICAgICAgIHttZXNzYWdlLnRleHR9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuXG4gIGlmIChpc1dlbGNvbWVNZXNzYWdlKSB7XG4gICAgY29uc3QgcHJpbWFyeUNvbG9yID0gdGhlbWU/LnByaW1hcnlDb2xvciB8fCAnIzVCM0RGNSc7XG4gICAgY29uc3QgY2hpcFN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgICAgZGlzcGxheTogJ2lubGluZS1ibG9jaycsXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IHByaW1hcnlDb2xvcixcbiAgICAgIGNvbG9yOiAnI2ZmZicsXG4gICAgICBwYWRkaW5nOiAnOHB4IDEycHgnLFxuICAgICAgYm9yZGVyUmFkaXVzOiAxMixcbiAgICAgIGZvbnRTaXplOiAnMTRweCcsXG4gICAgICBtYXJnaW5SaWdodDogOCxcbiAgICAgIG1hcmdpbkJvdHRvbTogOCxcbiAgICAgIGN1cnNvcjogb25RdWlja1F1ZXJ5ID8gJ3BvaW50ZXInIDogJ2RlZmF1bHQnLFxuICAgICAgdXNlclNlbGVjdDogJ25vbmUnLFxuICAgIH07XG4gICAgY29uc3QgY2hpcENvbnRhaW5lclN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgZmxleFdyYXA6ICd3cmFwJyxcbiAgICAgIG1hcmdpblRvcDogOCxcbiAgICB9O1xuICAgIGNvbnN0IGltYWdlQm94U3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgICB3aWR0aDogMTIwLFxuICAgICAgaGVpZ2h0OiAxMjAsXG4gICAgICBib3JkZXJSYWRpdXM6IDEyLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiAnI2U1ZTdlYicsXG4gICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICAgIGNvbG9yOiAnIzZiNzI4MCcsXG4gICAgICBmb250U2l6ZTogMTIsXG4gICAgICBmb250V2VpZ2h0OiA2MDAsXG4gICAgICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gICAgfTtcbiAgICBjb25zdCB3ZWxjb21lVGl0bGVTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICAgIGZvbnRTaXplOiAnMjJweCcsXG4gICAgICBmb250V2VpZ2h0OiA3MDAsXG4gICAgICBtYXJnaW46ICc4cHggMCA0cHggMCcsXG4gICAgICBjb2xvcjogYWdlbnRUZXh0Q29sb3IsXG4gICAgICBmb250RmFtaWx5LFxuICAgIH07XG4gICAgY29uc3Qgd2VsY29tZVN1YnRpdGxlU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgICBmb250U2l6ZTogJzE0cHgnLFxuICAgICAgY29sb3I6ICcjNmI3MjgwJyxcbiAgICAgIG1hcmdpbjogMCxcbiAgICAgIGZvbnRGYW1pbHksXG4gICAgfTtcblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IHN0eWxlPXttZXNzYWdlQ29udGFpbmVyU3R5bGV9PlxuICAgICAgICA8ZGl2IHN0eWxlPXttZXNzYWdlQnViYmxlQ29udGFpbmVyU3R5bGV9PlxuICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZ2FwOiA4IH19PlxuICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGdhcDogMTYgfX0+XG4gICAgICAgICAgICAgIDxkaXYgc3R5bGU9e2ltYWdlQm94U3R5bGV9PlxuICAgICAgICAgICAgICAgIHt3ZWxjb21lSW1hZ2VVcmwgPyAoXG4gICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganN4LWExMXkvYWx0LXRleHRcbiAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPXt3ZWxjb21lSW1hZ2VVcmx9IHN0eWxlPXt7IHdpZHRoOiAnMTAwJScsIGhlaWdodDogJzEwMCUnLCBvYmplY3RGaXQ6ICdjb3ZlcicgfX0gLz5cbiAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgPGRpdj5JTUFHRSAxMjAgw5cgMTIwIHB4PC9kaXY+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIHt3ZWxjb21lVGl0bGUgJiYgPGRpdiBzdHlsZT17d2VsY29tZVRpdGxlU3R5bGV9Pnt3ZWxjb21lVGl0bGV9PC9kaXY+fVxuICAgICAgICAgICAge3dlbGNvbWVDb250ZW50ICYmIDxkaXYgc3R5bGU9e3dlbGNvbWVTdWJ0aXRsZVN0eWxlfT57d2VsY29tZUNvbnRlbnR9PC9kaXY+fVxuICAgICAgICAgICAge3Bvc3NpYmxlUXVlcmllcyAmJiBwb3NzaWJsZVF1ZXJpZXMubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgICAgICAgIDxkaXYgc3R5bGU9e2NoaXBDb250YWluZXJTdHlsZX0+XG4gICAgICAgICAgICAgICAge3Bvc3NpYmxlUXVlcmllcy5tYXAoKHEsIGlkeCkgPT4gKFxuICAgICAgICAgICAgICAgICAgPHNwYW4ga2V5PXtpZHh9IHN0eWxlPXtjaGlwU3R5bGV9IG9uQ2xpY2s9eygpID0+IG9uUXVpY2tRdWVyeSAmJiBvblF1aWNrUXVlcnkocSl9PlxuICAgICAgICAgICAgICAgICAgICB7cX1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxkaXYgXG4gICAgICBzdHlsZT17bWVzc2FnZUNvbnRhaW5lclN0eWxlfVxuICAgICAgb25Nb3VzZUVudGVyPXsoKSA9PiBzZXRJc0hvdmVyZWQodHJ1ZSl9XG4gICAgICBvbk1vdXNlTGVhdmU9eygpID0+IHsgaWYgKCFlZGl0aW5nRmVlZGJhY2spIHNldElzSG92ZXJlZChmYWxzZSk7IH19XG4gICAgPlxuICAgICAgPGRpdiBzdHlsZT17bGFiZWxSb3dTdHlsZX0+XG4gICAgICAgIHtpc1VzZXIgPyAoXG4gICAgICAgICAgPD5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e3RvcFRpbWVzdGFtcFN0eWxlfT57dGltZXN0YW1wfTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBzdHlsZT17bWVzc2FnZUxhYmVsU3R5bGV9PllvdTwvZGl2PlxuICAgICAgICAgIDwvPlxuICAgICAgICApIDogKFxuICAgICAgICAgIDw+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXttZXNzYWdlTGFiZWxTdHlsZX0+QWdlbnQ8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e3RvcFRpbWVzdGFtcFN0eWxlfT57dGltZXN0YW1wfTwvZGl2PlxuICAgICAgICAgIDwvPlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG5cbiAgICAgIHttZXNzYWdlLmF0dGFjaG1lbnRzICYmIG1lc3NhZ2UuYXR0YWNobWVudHMubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgIDxkaXYgc3R5bGU9e3sgLi4uYXR0YWNobWVudHNDb250YWluZXJTdHlsZSwgYWxpZ25JdGVtczogaXNVc2VyID8gJ2ZsZXgtZW5kJyA6ICdmbGV4LXN0YXJ0JyB9fT5cbiAgICAgICAgICB7bWVzc2FnZS5hdHRhY2htZW50cy5tYXAoKGF0dGFjaG1lbnQsIGluZGV4KSA9PiAoXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGtleT17aW5kZXh9XG4gICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgIGdhcDogJzEycHgnLFxuICAgICAgICAgICAgICAgIHBhZGRpbmc6ICcxMnB4IDE0cHgnLFxuICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogaXNVc2VyID8gJ3JnYmEoMjU1LDI1NSwyNTUsMC4xMiknIDogJyNmNWY1ZjUnLFxuICAgICAgICAgICAgICAgIGJvcmRlcjogaXNVc2VyID8gJzFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMTgpJyA6ICcxcHggc29saWQgI2U1ZTVlNScsXG4gICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnMTJweCcsXG4gICAgICAgICAgICAgICAgbWluV2lkdGg6ICcyNjBweCcsXG4gICAgICAgICAgICAgICAgbWF4V2lkdGg6ICczNjBweCcsXG4gICAgICAgICAgICAgICAgcG9pbnRlckV2ZW50czogJ25vbmUnLFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7YXR0YWNobWVudC50eXBlLnN0YXJ0c1dpdGgoJ2ltYWdlLycpID8gKFxuICAgICAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICAgIHNyYz17YXR0YWNobWVudC51cmx9XG4gICAgICAgICAgICAgICAgICBhbHQ9e2F0dGFjaG1lbnQubmFtZX1cbiAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IHdpZHRoOiA1NiwgaGVpZ2h0OiA1NiwgYm9yZGVyUmFkaXVzOiA4LCBvYmplY3RGaXQ6ICdjb3ZlcicgfX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgd2lkdGg6IDQwLCBoZWlnaHQ6IDQwLCBkaXNwbGF5OiAnZmxleCcsIGFsaWduSXRlbXM6ICdjZW50ZXInLCBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicgfX0+XG4gICAgICAgICAgICAgICAgICB7Z2V0RmlsZUljb24oYXR0YWNobWVudC50eXBlKX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nIH19PlxuICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZm9udFdlaWdodDogNjAwLCBmb250U2l6ZTogMTQgfX0+e2F0dGFjaG1lbnQubmFtZX08L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGZvbnRTaXplOiAxMiwgb3BhY2l0eTogMC44IH19PlxuICAgICAgICAgICAgICAgICAge2F0dGFjaG1lbnQudHlwZS5pbmNsdWRlcygnLycpID8gYXR0YWNobWVudC50eXBlLnNwbGl0KCcvJylbMV0udG9VcHBlckNhc2UoKSA6IGF0dGFjaG1lbnQudHlwZX1cbiAgICAgICAgICAgICAgICAgIHthdHRhY2htZW50LnNpemUgPyBgIMK3ICR7KGF0dGFjaG1lbnQuc2l6ZSAvIDEwMjQpLnRvRml4ZWQoMSl9IEtCYCA6ICcnfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICkpfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG5cbiAgICAgIHttZXNzYWdlLnRleHQgJiYgKFxuICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgYWxpZ25JdGVtczogJ2NlbnRlcicsIGdhcDogJzhweCcsIGFsaWduU2VsZjogaXNVc2VyID8gJ2ZsZXgtZW5kJyA6ICdmbGV4LXN0YXJ0JyB9fT5cbiAgICAgICAgICA8ZGl2IHN0eWxlPXt7IC4uLmJ1YmJsZVN0eWxlLCBwb3NpdGlvbjogJ3JlbGF0aXZlJyB9fT5cbiAgICAgICAgICAgIHttZXNzYWdlTGluZXN9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cblxuICAgICAgey8qIEZlZWRiYWNrIHJvdyBiZWxvdyBhZ2VudCBtZXNzYWdlICovfVxuICAgICAge3Nob3dUaHVtYnNBcmVhICYmIChcbiAgICAgICAgPGRpdiBzdHlsZT17ZmVlZGJhY2tSb3dTdHlsZX0+XG4gICAgICAgICAge2ZlZWRiYWNrVmFsdWUgPyAoXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXtzaW5nbGVJY29uU3R5bGV9PlxuICAgICAgICAgICAgICB7ZmVlZGJhY2tWYWx1ZSA9PT0gJ2dvb2QnID8gKFxuICAgICAgICAgICAgICAgIDxUaHVtYnNVcCBzaXplPXsxOH0gLz5cbiAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICA8VGh1bWJzRG93biBzaXplPXsxOH0gLz5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8PlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgc3R5bGU9e2ljb25CdXR0b25TdHlsZX1cbiAgICAgICAgICAgICAgICB0aXRsZT1cIlRodW1icyB1cFwiXG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UubWVzc2FnZV9pZCAmJiBvbkZlZWRiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIG9uRmVlZGJhY2sobWVzc2FnZS5tZXNzYWdlX2lkLCAnZ29vZCcpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8VGh1bWJzVXAgc2l6ZT17MTh9IC8+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXtzZXBhcmF0b3JTdHlsZX0gLz5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIHN0eWxlPXtpY29uQnV0dG9uU3R5bGV9XG4gICAgICAgICAgICAgICAgdGl0bGU9XCJUaHVtYnMgZG93blwiXG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UubWVzc2FnZV9pZCAmJiBvbkZlZWRiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIG9uRmVlZGJhY2sobWVzc2FnZS5tZXNzYWdlX2lkLCAnYmFkJyk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxUaHVtYnNEb3duIHNpemU9ezE4fSAvPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG4iXX0=
|