@projectcor/maia-components 2.11.26-4 → 2.11.26-6
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/lib/components/atoms/ApprovalBox/ApprovalBox.js +25 -56
- package/lib/components/atoms/ApprovalBox/ApprovalBox.styles.js +47 -45
- package/lib/components/atoms/FeedbackButton/FeedbackButton.styles.js +2 -2
- package/lib/components/atoms/icons/ChatConversation.js +40 -0
- package/lib/components/atoms/icons/MaiaChatLayoutMenuIcon.js +33 -0
- package/lib/components/atoms/icons/index.js +3 -1
- package/lib/components/molecules/ChatAIHistory/ChatAIHistory.js +16 -3
- package/lib/components/molecules/ChatAIHome/ChatAIHome.js +54 -44
- package/lib/components/molecules/ChatAIHome/styles.js +43 -35
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +1 -3
- package/lib/components/molecules/ChatAIModal/ChatAIModal.js +199 -71
- package/lib/components/molecules/ChatAIModal/ChatAIModal.styles.js +28 -15
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +81 -16
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.styles.js +16 -1
- package/lib/components/molecules/ChatAIModal/floatingPanelMotion/FloatingPanelMotion.js +13 -0
- package/lib/components/molecules/ChatAIModal/floatingPanelMotion/FloatingPanelMotion.styles.js +9 -0
- package/lib/components/molecules/ChatAIModal/floatingPanelMotion/constants.js +13 -0
- package/lib/components/molecules/ChatAIModal/floatingPanelMotion/index.js +3 -0
- package/lib/components/molecules/ChatAIModal/floatingPanelMotion/useFloatingPanelDragTilt.js +57 -0
- package/lib/components/molecules/ChatAIModal/layout.js +35 -0
- package/lib/components/molecules/Sidebar/Sidebar.js +257 -322
- package/lib/components/molecules/Sidebar/Sidebar.layout.styles.js +18 -23
- package/lib/components/molecules/Sidebar/Sidebar.styles.js +54 -37
- package/lib/components/molecules/Sidebar/SidebarChats.styles.js +73 -0
- package/lib/components/molecules/Sidebar/SidebarChatsSection.js +69 -0
- package/lib/components/molecules/Sidebar/SidebarChatsSectionModal.js +151 -0
- package/lib/components/molecules/Sidebar/SidebarHistoryChat.js +238 -0
- package/lib/components/molecules/Sidebar/sidebarChats.helpers.js +70 -0
- package/lib/components/molecules/Sidebar/sidebarChats.types.js +14 -0
- package/lib/dev/Providers.js +2 -2
- package/lib/dev/fixtures/devUser.js +173 -0
- package/lib/dev/fixtures/mockedUser.js +169 -0
- package/lib/hooks/useChatManager/useChatManager.js +4 -28
- package/lib/hooks/useChats/useChats.js +12 -4
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +6 -33
- package/lib/lang/br/index.js +34 -50
- package/lib/lang/en/index.js +26 -42
- package/lib/lang/es/index.js +15 -41
- package/lib/lang/fr/index.js +15 -20
- package/lib/services/maia/Chats/getChatMessagesV2.js +114 -0
- package/lib/services/maia/Chats/getChatsByUserId.js +14 -8
- package/lib/services/maia/Chats/getSessionsGroupedV2.js +70 -0
- package/lib/services/maia/Chats/index.js +5 -1
- package/lib/services/maia/client.js +44 -9
- package/lib/services/utils/mapChatMessages.js +4 -21
- package/lib/store/chatsStore.types.js +10 -2
- package/lib/store/useChatsStore.js +75 -37
- package/lib/types/Chat.js +3 -1
- package/package.json +1 -1
- package/lib/hooks/useOrchestratorStream/streamRevealSmooth.js +0 -198
- package/lib/mocks/mockChats.js +0 -395
- package/lib/mocks/mockedUser.js +0 -169
|
@@ -1,2 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
|
+
|
|
3
|
+
/** Ítems por grupo en la primera carga del sidebar (`GET /v2/sessions`). */
|
|
4
|
+
export var SIDEBAR_SESSIONS_PAGE_LIMIT = 3;
|
|
5
|
+
|
|
6
|
+
/** Ítems por grupo al abrir el modal de sección y en cada página de scroll infinito. */
|
|
7
|
+
export var SECTION_MODAL_SESSIONS_PAGE_LIMIT = 10;
|
|
8
|
+
|
|
9
|
+
/** Item del listado de conversaciones (igual forma que devuelve getChatsByUserId) */
|
|
10
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTSURFQkFSX1NFU1NJT05TX1BBR0VfTElNSVQiLCJTRUNUSU9OX01PREFMX1NFU1NJT05TX1BBR0VfTElNSVQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc3RvcmUvY2hhdHNTdG9yZS50eXBlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgdHlwZSB7IEFnZW50IH0gZnJvbSAnLi4vdHlwZXMvYWdlbnQnXG5cbi8qKiDDjXRlbXMgcG9yIGdydXBvIGVuIGxhIHByaW1lcmEgY2FyZ2EgZGVsIHNpZGViYXIgKGBHRVQgL3YyL3Nlc3Npb25zYCkuICovXG5leHBvcnQgY29uc3QgU0lERUJBUl9TRVNTSU9OU19QQUdFX0xJTUlUID0gM1xuXG4vKiogw410ZW1zIHBvciBncnVwbyBhbCBhYnJpciBlbCBtb2RhbCBkZSBzZWNjacOzbiB5IGVuIGNhZGEgcMOhZ2luYSBkZSBzY3JvbGwgaW5maW5pdG8uICovXG5leHBvcnQgY29uc3QgU0VDVElPTl9NT0RBTF9TRVNTSU9OU19QQUdFX0xJTUlUID0gMTBcblxuLyoqIEl0ZW0gZGVsIGxpc3RhZG8gZGUgY29udmVyc2FjaW9uZXMgKGlndWFsIGZvcm1hIHF1ZSBkZXZ1ZWx2ZSBnZXRDaGF0c0J5VXNlcklkKSAqL1xuZXhwb3J0IHR5cGUgQ2hhdExpc3RJdGVtID0ge1xuICBpZDogc3RyaW5nXG4gIHRpdGxlOiBzdHJpbmcgfCBudWxsXG4gIGRhdGU6IERhdGVcbiAgYWdlbnQ6IHN0cmluZ1xuICBhZ2VudElkOiBudW1iZXJcbiAgYWdlbnRUeXBlPzogc3RyaW5nXG4gIGFnZW50RW50aXR5Pzogc3RyaW5nXG4gIGVtb2ppOiBzdHJpbmcgfCBudWxsXG4gIHNlc3Npb25FeHRlcm5hbElkOiBzdHJpbmdcbiAgYXR0YWNobWVudHM/OiBhbnlbXVxuICBwcm9qZWN0SWQ/OiBudW1iZXIgfCBzdHJpbmdcbiAgcHJvamVjdE5hbWU/OiBzdHJpbmdcbiAgY2xpZW50SWQ/OiBudW1iZXJcbiAgY2xpZW50TmFtZT86IHN0cmluZ1xuICAvKiogYEdFVCAvdjIvc2Vzc2lvbnNgIGFncnVwYWRvICovXG4gIGVudGl0eUlkPzogc3RyaW5nIHwgbnVtYmVyXG59XG5cbmV4cG9ydCB0eXBlIFNlY3Rpb25UeXBlID0gJ3Byb2plY3QnIHwgJ2hlYWRlcicgfCAnY2xpZW50J1xuXG5leHBvcnQgdHlwZSBGZXRjaENoYXRzUGFyYW1zID0ge1xuICBhZ2VudDogQWdlbnQgfCBudWxsXG4gIHNlY3Rpb246IFNlY3Rpb25UeXBlXG4gIGxpbWl0PzogbnVtYmVyXG4gIG9mZnNldD86IG51bWJlclxuICBvbkVycm9yPzogKCkgPT4gdm9pZFxuICBsYW5nPzogc3RyaW5nXG4gIC8qKiBTaSBlcyBmYWxzZSwgbm8gcG9uZSBgbG9hZGluZ0NoYXRzYCAow7p0aWwgYWwgcGFzYXIgZGUgM+KGkjEwIMOtdGVtcyBzaW4gZGVzdGVsbGFyIGVsIHNpZGViYXIpLiAqL1xuICBzaG93R2xvYmFsTG9hZGVyPzogYm9vbGVhblxufVxuXG5leHBvcnQgdHlwZSBMb2FkTW9yZUNoYXRzUGFyYW1zID0ge1xuICBhZ2VudDogQWdlbnQgfCBudWxsXG4gIHNlY3Rpb246IFNlY3Rpb25UeXBlXG4gIG9uRXJyb3I/OiAoKSA9PiB2b2lkXG4gIGxhbmc/OiBzdHJpbmdcbn1cblxuZXhwb3J0IHR5cGUgRGVsZXRlQ2hhdFBhcmFtcyA9IHtcbiAgY2hhdElkOiBzdHJpbmdcbiAgdXNlcklkOiBzdHJpbmdcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7O0FBR0E7QUFDQSxPQUFPLElBQU1BLDJCQUEyQixHQUFHLENBQUM7O0FBRTVDO0FBQ0EsT0FBTyxJQUFNQyxpQ0FBaUMsR0FBRyxFQUFFOztBQUVuRCIsImlnbm9yZUxpc3QiOltdfQ==
|
|
@@ -8,58 +8,92 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
|
|
|
8
8
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
9
9
|
import { create } from 'zustand';
|
|
10
10
|
import maia from '../services/maia';
|
|
11
|
-
|
|
11
|
+
import { flattenSessionsGroupedV2 } from '../services/maia/Chats/getSessionsGroupedV2';
|
|
12
|
+
import { SIDEBAR_SESSIONS_PAGE_LIMIT } from './chatsStore.types';
|
|
13
|
+
var DEFAULT_LIMIT = SIDEBAR_SESSIONS_PAGE_LIMIT;
|
|
14
|
+
|
|
15
|
+
/** `has_more` por grupo en la última respuesta de `GET /v2/sessions` (para “Ver más” con page size 3). */
|
|
16
|
+
|
|
17
|
+
var emptySessionsGroupHasMore = function emptySessionsGroupHasMore() {
|
|
18
|
+
return {
|
|
19
|
+
clients: false,
|
|
20
|
+
projects: false,
|
|
21
|
+
agentsByCompany: false
|
|
22
|
+
};
|
|
23
|
+
};
|
|
24
|
+
function mapGroupedHasMoreToSidebar(groups) {
|
|
25
|
+
var next = emptySessionsGroupHasMore();
|
|
26
|
+
groups.forEach(function (g) {
|
|
27
|
+
if (g.group === 'custom_agents') {
|
|
28
|
+
next.agentsByCompany = g.hasMore;
|
|
29
|
+
} else {
|
|
30
|
+
next[g.group] = g.hasMore;
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
return next;
|
|
34
|
+
}
|
|
12
35
|
var initialState = {
|
|
13
36
|
chats: [],
|
|
14
37
|
loadingChats: true,
|
|
15
38
|
isLoadingMoreChats: false,
|
|
16
39
|
nextOffset: null,
|
|
17
40
|
limit: DEFAULT_LIMIT,
|
|
18
|
-
offset: 0
|
|
41
|
+
offset: 0,
|
|
42
|
+
sessionsGroupHasMore: emptySessionsGroupHasMore()
|
|
19
43
|
};
|
|
20
44
|
export var useChatsStore = create(function (set, get) {
|
|
21
45
|
return _objectSpread(_objectSpread({}, initialState), {}, {
|
|
22
46
|
fetchChats: function () {
|
|
23
|
-
var _fetchChats = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(
|
|
24
|
-
var agent,
|
|
47
|
+
var _fetchChats = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(params) {
|
|
48
|
+
var agent, _params$limit, limit, _params$offset, offset, onError, lang, _params$showGlobalLoa, showGlobalLoader, _groups$find$nextOffs, _groups$find, _yield$maia$Chats$get, groups, items, hasMore, nextOffset, _t;
|
|
25
49
|
return _regeneratorRuntime.wrap(function (_context) {
|
|
26
50
|
while (1) switch (_context.prev = _context.next) {
|
|
27
51
|
case 0:
|
|
28
|
-
agent =
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
52
|
+
agent = params.agent, _params$limit = params.limit, limit = _params$limit === void 0 ? DEFAULT_LIMIT : _params$limit, _params$offset = params.offset, offset = _params$offset === void 0 ? 0 : _params$offset, onError = params.onError, lang = params.lang, _params$showGlobalLoa = params.showGlobalLoader, showGlobalLoader = _params$showGlobalLoa === void 0 ? true : _params$showGlobalLoa;
|
|
53
|
+
if (showGlobalLoader) {
|
|
54
|
+
set({
|
|
55
|
+
loadingChats: true
|
|
56
|
+
});
|
|
57
|
+
}
|
|
32
58
|
_context.prev = 1;
|
|
33
59
|
_context.next = 2;
|
|
34
|
-
return maia.Chats.
|
|
60
|
+
return maia.Chats.getSessionsGroupedV2({
|
|
35
61
|
agent: agent,
|
|
36
|
-
section: section,
|
|
37
62
|
limit: limit,
|
|
38
63
|
offset: offset,
|
|
39
64
|
lang: lang
|
|
40
65
|
});
|
|
41
66
|
case 2:
|
|
42
67
|
_yield$maia$Chats$get = _context.sent;
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
hasMore =
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
68
|
+
groups = _yield$maia$Chats$get.groups;
|
|
69
|
+
items = flattenSessionsGroupedV2(groups);
|
|
70
|
+
hasMore = groups.some(function (g) {
|
|
71
|
+
return g.hasMore;
|
|
72
|
+
});
|
|
73
|
+
nextOffset = hasMore ? (_groups$find$nextOffs = (_groups$find = groups.find(function (g) {
|
|
74
|
+
return g.hasMore;
|
|
75
|
+
})) === null || _groups$find === void 0 ? void 0 : _groups$find.nextOffset) !== null && _groups$find$nextOffs !== void 0 ? _groups$find$nextOffs : null : null;
|
|
76
|
+
set(_objectSpread(_objectSpread({
|
|
77
|
+
chats: items
|
|
78
|
+
}, showGlobalLoader ? {
|
|
79
|
+
loadingChats: false
|
|
80
|
+
} : {}), {}, {
|
|
50
81
|
nextOffset: nextOffset,
|
|
51
82
|
limit: limit,
|
|
52
|
-
offset: nextOffset !== null && nextOffset !== void 0 ? nextOffset : 0
|
|
53
|
-
|
|
83
|
+
offset: nextOffset !== null && nextOffset !== void 0 ? nextOffset : 0,
|
|
84
|
+
sessionsGroupHasMore: mapGroupedHasMoreToSidebar(groups)
|
|
85
|
+
}));
|
|
54
86
|
_context.next = 4;
|
|
55
87
|
break;
|
|
56
88
|
case 3:
|
|
57
89
|
_context.prev = 3;
|
|
58
90
|
_t = _context["catch"](1);
|
|
59
91
|
console.error('Error fetching chats:', _t);
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
92
|
+
if (showGlobalLoader) {
|
|
93
|
+
set({
|
|
94
|
+
loadingChats: false
|
|
95
|
+
});
|
|
96
|
+
}
|
|
63
97
|
onError === null || onError === void 0 || onError();
|
|
64
98
|
case 4:
|
|
65
99
|
case "end":
|
|
@@ -73,12 +107,12 @@ export var useChatsStore = create(function (set, get) {
|
|
|
73
107
|
return fetchChats;
|
|
74
108
|
}(),
|
|
75
109
|
loadMoreChats: function () {
|
|
76
|
-
var _loadMoreChats = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(
|
|
77
|
-
var agent,
|
|
110
|
+
var _loadMoreChats = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(params) {
|
|
111
|
+
var agent, onError, lang, _get, nextOffset, limit, isLoadingMoreChats, _groups$find$nextOffs2, _groups$find2, _yield$maia$Chats$get2, groups, items, hasMore, newNextOffset, _t2;
|
|
78
112
|
return _regeneratorRuntime.wrap(function (_context2) {
|
|
79
113
|
while (1) switch (_context2.prev = _context2.next) {
|
|
80
114
|
case 0:
|
|
81
|
-
agent =
|
|
115
|
+
agent = params.agent, onError = params.onError, lang = params.lang;
|
|
82
116
|
_get = get(), nextOffset = _get.nextOffset, limit = _get.limit, isLoadingMoreChats = _get.isLoadingMoreChats;
|
|
83
117
|
if (!(nextOffset === null || isLoadingMoreChats)) {
|
|
84
118
|
_context2.next = 1;
|
|
@@ -91,25 +125,29 @@ export var useChatsStore = create(function (set, get) {
|
|
|
91
125
|
});
|
|
92
126
|
_context2.prev = 2;
|
|
93
127
|
_context2.next = 3;
|
|
94
|
-
return maia.Chats.
|
|
128
|
+
return maia.Chats.getSessionsGroupedV2({
|
|
95
129
|
agent: agent,
|
|
96
|
-
section: section,
|
|
97
130
|
limit: limit,
|
|
98
131
|
offset: nextOffset,
|
|
99
132
|
lang: lang
|
|
100
133
|
});
|
|
101
134
|
case 3:
|
|
102
135
|
_yield$maia$Chats$get2 = _context2.sent;
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
hasMore =
|
|
106
|
-
|
|
136
|
+
groups = _yield$maia$Chats$get2.groups;
|
|
137
|
+
items = flattenSessionsGroupedV2(groups);
|
|
138
|
+
hasMore = groups.some(function (g) {
|
|
139
|
+
return g.hasMore;
|
|
140
|
+
});
|
|
141
|
+
newNextOffset = hasMore ? (_groups$find$nextOffs2 = (_groups$find2 = groups.find(function (g) {
|
|
142
|
+
return g.hasMore;
|
|
143
|
+
})) === null || _groups$find2 === void 0 ? void 0 : _groups$find2.nextOffset) !== null && _groups$find$nextOffs2 !== void 0 ? _groups$find$nextOffs2 : null : null;
|
|
107
144
|
set(function (state) {
|
|
108
145
|
return {
|
|
109
146
|
chats: [].concat(_toConsumableArray(state.chats), _toConsumableArray(items)),
|
|
110
147
|
isLoadingMoreChats: false,
|
|
111
148
|
nextOffset: newNextOffset,
|
|
112
|
-
offset: newNextOffset !== null && newNextOffset !== void 0 ? newNextOffset : 0
|
|
149
|
+
offset: newNextOffset !== null && newNextOffset !== void 0 ? newNextOffset : 0,
|
|
150
|
+
sessionsGroupHasMore: mapGroupedHasMoreToSidebar(groups)
|
|
113
151
|
};
|
|
114
152
|
});
|
|
115
153
|
_context2.next = 5;
|
|
@@ -134,12 +172,12 @@ export var useChatsStore = create(function (set, get) {
|
|
|
134
172
|
return loadMoreChats;
|
|
135
173
|
}(),
|
|
136
174
|
deleteChat: function () {
|
|
137
|
-
var _deleteChat = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3(
|
|
175
|
+
var _deleteChat = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3(_ref) {
|
|
138
176
|
var chatId, userId, _t3;
|
|
139
177
|
return _regeneratorRuntime.wrap(function (_context3) {
|
|
140
178
|
while (1) switch (_context3.prev = _context3.next) {
|
|
141
179
|
case 0:
|
|
142
|
-
chatId =
|
|
180
|
+
chatId = _ref.chatId, userId = _ref.userId;
|
|
143
181
|
_context3.prev = 1;
|
|
144
182
|
_context3.next = 2;
|
|
145
183
|
return maia.Chats.deleteChat({
|
|
@@ -173,7 +211,7 @@ export var useChatsStore = create(function (set, get) {
|
|
|
173
211
|
}(),
|
|
174
212
|
updateChat: function () {
|
|
175
213
|
var _updateChat = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee4(chat) {
|
|
176
|
-
var
|
|
214
|
+
var _ref2, _current$title, current, lastQuestion, _t4;
|
|
177
215
|
return _regeneratorRuntime.wrap(function (_context4) {
|
|
178
216
|
while (1) switch (_context4.prev = _context4.next) {
|
|
179
217
|
case 0:
|
|
@@ -181,7 +219,7 @@ export var useChatsStore = create(function (set, get) {
|
|
|
181
219
|
current = get().chats.find(function (c) {
|
|
182
220
|
return c.id === chat.id;
|
|
183
221
|
});
|
|
184
|
-
lastQuestion = (
|
|
222
|
+
lastQuestion = (_ref2 = (_current$title = current === null || current === void 0 ? void 0 : current.title) !== null && _current$title !== void 0 ? _current$title : chat.title) !== null && _ref2 !== void 0 ? _ref2 : '';
|
|
185
223
|
_context4.next = 1;
|
|
186
224
|
return maia.Chats.patchChat(_objectSpread({
|
|
187
225
|
chatId: chat.sessionExternalId,
|
|
@@ -224,4 +262,4 @@ export var useChatsStore = create(function (set, get) {
|
|
|
224
262
|
export var getChatsStoreState = function getChatsStoreState() {
|
|
225
263
|
return useChatsStore.getState();
|
|
226
264
|
};
|
|
227
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjcmVhdGUiLCJtYWlhIiwiREVGQVVMVF9MSU1JVCIsImluaXRpYWxTdGF0ZSIsImNoYXRzIiwibG9hZGluZ0NoYXRzIiwiaXNMb2FkaW5nTW9yZUNoYXRzIiwibmV4dE9mZnNldCIsImxpbWl0Iiwib2Zmc2V0IiwidXNlQ2hhdHNTdG9yZSIsInNldCIsImdldCIsIl9vYmplY3RTcHJlYWQiLCJmZXRjaENoYXRzIiwiX2ZldGNoQ2hhdHMiLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJtYXJrIiwiX2NhbGxlZSIsIl9yZWYiLCJhZ2VudCIsInNlY3Rpb24iLCJfcmVmJGxpbWl0IiwiX3JlZiRvZmZzZXQiLCJvbkVycm9yIiwibGFuZyIsIl95aWVsZCRtYWlhJENoYXRzJGdldCIsIml0ZW1zIiwibmV4dEl0ZW0iLCJoYXNNb3JlIiwiX3QiLCJ3cmFwIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsIkNoYXRzIiwiZ2V0Q2hhdHNCeVVzZXJJZCIsInNlbnQiLCJOdW1iZXIiLCJjb25zb2xlIiwiZXJyb3IiLCJzdG9wIiwiX3giLCJhcHBseSIsImFyZ3VtZW50cyIsImxvYWRNb3JlQ2hhdHMiLCJfbG9hZE1vcmVDaGF0cyIsIl9jYWxsZWUyIiwiX3JlZjIiLCJfZ2V0IiwiX3lpZWxkJG1haWEkQ2hhdHMkZ2V0MiIsIm5ld05leHRPZmZzZXQiLCJfdDIiLCJfY29udGV4dDIiLCJhYnJ1cHQiLCJzdGF0ZSIsImNvbmNhdCIsIl90b0NvbnN1bWFibGVBcnJheSIsIl94MiIsImRlbGV0ZUNoYXQiLCJfZGVsZXRlQ2hhdCIsIl9jYWxsZWUzIiwiX3JlZjMiLCJjaGF0SWQiLCJ1c2VySWQiLCJfdDMiLCJfY29udGV4dDMiLCJmaWx0ZXIiLCJjaGF0Iiwic2Vzc2lvbkV4dGVybmFsSWQiLCJfeDMiLCJ1cGRhdGVDaGF0IiwiX3VwZGF0ZUNoYXQiLCJfY2FsbGVlNCIsIl9yZWY0IiwiX2N1cnJlbnQkdGl0bGUiLCJjdXJyZW50IiwibGFzdFF1ZXN0aW9uIiwiX3Q0IiwiX2NvbnRleHQ0IiwiZmluZCIsImMiLCJpZCIsInRpdGxlIiwicGF0Y2hDaGF0IiwibWFwIiwiX3g0IiwicmVzZXQiLCJnZXRDaGF0c1N0b3JlU3RhdGUiLCJnZXRTdGF0ZSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zdG9yZS91c2VDaGF0c1N0b3JlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llcyAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuaW1wb3J0IHsgY3JlYXRlIH0gZnJvbSAnenVzdGFuZCdcbmltcG9ydCBtYWlhIGZyb20gJy4uL3NlcnZpY2VzL21haWEnXG5pbXBvcnQgdHlwZSB7IENoYXRMaXN0SXRlbSwgRmV0Y2hDaGF0c1BhcmFtcywgTG9hZE1vcmVDaGF0c1BhcmFtcywgRGVsZXRlQ2hhdFBhcmFtcyB9IGZyb20gJy4vY2hhdHNTdG9yZS50eXBlcydcblxuY29uc3QgREVGQVVMVF9MSU1JVCA9IDIwXG5cbnR5cGUgQ2hhdHNTdGF0ZSA9IHtcbiAgY2hhdHM6IENoYXRMaXN0SXRlbVtdXG4gIGxvYWRpbmdDaGF0czogYm9vbGVhblxuICBpc0xvYWRpbmdNb3JlQ2hhdHM6IGJvb2xlYW5cbiAgbmV4dE9mZnNldDogbnVtYmVyIHwgbnVsbFxuICBsaW1pdDogbnVtYmVyXG4gIG9mZnNldDogbnVtYmVyXG59XG5cbnR5cGUgQ2hhdHNBY3Rpb25zID0ge1xuICBmZXRjaENoYXRzOiAocGFyYW1zOiBGZXRjaENoYXRzUGFyYW1zKSA9PiBQcm9taXNlPHZvaWQ+XG4gIGxvYWRNb3JlQ2hhdHM6IChwYXJhbXM6IExvYWRNb3JlQ2hhdHNQYXJhbXMpID0+IFByb21pc2U8dm9pZD5cbiAgZGVsZXRlQ2hhdDogKHBhcmFtczogRGVsZXRlQ2hhdFBhcmFtcykgPT4gUHJvbWlzZTxib29sZWFuPlxuICB1cGRhdGVDaGF0OiAoY2hhdDogUGFydGlhbDxDaGF0TGlzdEl0ZW0+ICYgeyBzZXNzaW9uRXh0ZXJuYWxJZDogc3RyaW5nOyBpZDogc3RyaW5nIH0pID0+IFByb21pc2U8Ym9vbGVhbj5cbiAgcmVzZXQ6ICgpID0+IHZvaWRcbn1cblxuY29uc3QgaW5pdGlhbFN0YXRlOiBDaGF0c1N0YXRlID0ge1xuICBjaGF0czogW10sXG4gIGxvYWRpbmdDaGF0czogdHJ1ZSxcbiAgaXNMb2FkaW5nTW9yZUNoYXRzOiBmYWxzZSxcbiAgbmV4dE9mZnNldDogbnVsbCxcbiAgbGltaXQ6IERFRkFVTFRfTElNSVQsXG4gIG9mZnNldDogMCxcbn1cblxuZXhwb3J0IGNvbnN0IHVzZUNoYXRzU3RvcmUgPSBjcmVhdGU8Q2hhdHNTdGF0ZSAmIENoYXRzQWN0aW9ucz4oKHNldCwgZ2V0KSA9PiAoe1xuICAuLi5pbml0aWFsU3RhdGUsXG5cbiAgZmV0Y2hDaGF0czogYXN5bmMgKHsgYWdlbnQsIHNlY3Rpb24sIGxpbWl0ID0gREVGQVVMVF9MSU1JVCwgb2Zmc2V0ID0gMCwgb25FcnJvciwgbGFuZyB9KSA9PiB7XG4gICAgc2V0KHsgbG9hZGluZ0NoYXRzOiB0cnVlIH0pXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgaXRlbXMsIG5leHRJdGVtLCBoYXNNb3JlIH0gPSBhd2FpdCBtYWlhLkNoYXRzLmdldENoYXRzQnlVc2VySWQoe1xuICAgICAgICBhZ2VudCxcbiAgICAgICAgc2VjdGlvbixcbiAgICAgICAgbGltaXQsXG4gICAgICAgIG9mZnNldCxcbiAgICAgICAgbGFuZyxcbiAgICAgIH0pXG4gICAgICBjb25zdCBuZXh0T2Zmc2V0ID0gaGFzTW9yZSAmJiBuZXh0SXRlbSA/IE51bWJlcihuZXh0SXRlbSkgOiBudWxsXG4gICAgICBzZXQoe1xuICAgICAgICBjaGF0czogaXRlbXMgYXMgQ2hhdExpc3RJdGVtW10sXG4gICAgICAgIGxvYWRpbmdDaGF0czogZmFsc2UsXG4gICAgICAgIG5leHRPZmZzZXQsXG4gICAgICAgIGxpbWl0LFxuICAgICAgICBvZmZzZXQ6IG5leHRPZmZzZXQgPz8gMCxcbiAgICAgIH0pXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIGNoYXRzOicsIGVycm9yKVxuICAgICAgc2V0KHsgbG9hZGluZ0NoYXRzOiBmYWxzZSB9KVxuICAgICAgb25FcnJvcj8uKClcbiAgICB9XG4gIH0sXG5cbiAgbG9hZE1vcmVDaGF0czogYXN5bmMgKHsgYWdlbnQsIHNlY3Rpb24sIG9uRXJyb3IsIGxhbmcgfSkgPT4ge1xuICAgIGNvbnN0IHsgbmV4dE9mZnNldCwgbGltaXQsIGlzTG9hZGluZ01vcmVDaGF0cyB9ID0gZ2V0KClcbiAgICBpZiAobmV4dE9mZnNldCA9PT0gbnVsbCB8fCBpc0xvYWRpbmdNb3JlQ2hhdHMpIHJldHVyblxuICAgIHNldCh7IGlzTG9hZGluZ01vcmVDaGF0czogdHJ1ZSB9KVxuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IGl0ZW1zLCBuZXh0SXRlbSwgaGFzTW9yZSB9ID0gYXdhaXQgbWFpYS5DaGF0cy5nZXRDaGF0c0J5VXNlcklkKHtcbiAgICAgICAgYWdlbnQsXG4gICAgICAgIHNlY3Rpb24sXG4gICAgICAgIGxpbWl0LFxuICAgICAgICBvZmZzZXQ6IG5leHRPZmZzZXQsXG4gICAgICAgIGxhbmcsXG4gICAgICB9KVxuICAgICAgY29uc3QgbmV3TmV4dE9mZnNldCA9IGhhc01vcmUgJiYgbmV4dEl0ZW0gPyBOdW1iZXIobmV4dEl0ZW0pIDogbnVsbFxuICAgICAgc2V0KHN0YXRlID0+ICh7XG4gICAgICAgIGNoYXRzOiBbLi4uc3RhdGUuY2hhdHMsIC4uLihpdGVtcyBhcyBDaGF0TGlzdEl0ZW1bXSldLFxuICAgICAgICBpc0xvYWRpbmdNb3JlQ2hhdHM6IGZhbHNlLFxuICAgICAgICBuZXh0T2Zmc2V0OiBuZXdOZXh0T2Zmc2V0LFxuICAgICAgICBvZmZzZXQ6IG5ld05leHRPZmZzZXQgPz8gMCxcbiAgICAgIH0pKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBsb2FkaW5nIG1vcmUgY2hhdHM6JywgZXJyb3IpXG4gICAgICBzZXQoeyBpc0xvYWRpbmdNb3JlQ2hhdHM6IGZhbHNlIH0pXG4gICAgICBvbkVycm9yPy4oKVxuICAgIH1cbiAgfSxcblxuICBkZWxldGVDaGF0OiBhc3luYyAoeyBjaGF0SWQsIHVzZXJJZCB9KSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IG1haWEuQ2hhdHMuZGVsZXRlQ2hhdCh7IGNoYXRJZCwgdXNlcklkIH0pXG4gICAgICBzZXQoc3RhdGUgPT4gKHtcbiAgICAgICAgY2hhdHM6IHN0YXRlLmNoYXRzLmZpbHRlcihjaGF0ID0+IGNoYXQuc2Vzc2lvbkV4dGVybmFsSWQgIT09IGNoYXRJZCksXG4gICAgICB9KSlcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGRlbGV0aW5nIGNoYXQ6JywgZXJyb3IpXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgdXBkYXRlQ2hhdDogYXN5bmMgY2hhdCA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGN1cnJlbnQgPSBnZXQoKS5jaGF0cy5maW5kKGMgPT4gYy5pZCA9PT0gY2hhdC5pZClcbiAgICAgIGNvbnN0IGxhc3RRdWVzdGlvbiA9IGN1cnJlbnQ/LnRpdGxlID8/IGNoYXQudGl0bGUgPz8gJydcbiAgICAgIGF3YWl0IG1haWEuQ2hhdHMucGF0Y2hDaGF0KHtcbiAgICAgICAgY2hhdElkOiBjaGF0LnNlc3Npb25FeHRlcm5hbElkLFxuICAgICAgICBsYXN0UXVlc3Rpb24sXG4gICAgICAgIC4uLihjaGF0LnRpdGxlICE9IG51bGwgJiYgeyB0aXRsZTogY2hhdC50aXRsZSB9KSxcbiAgICAgIH0pXG4gICAgICBzZXQoc3RhdGUgPT4gKHtcbiAgICAgICAgY2hhdHM6IHN0YXRlLmNoYXRzLm1hcChjID0+IChjLmlkID09PSBjaGF0LmlkID8geyAuLi5jLCAuLi5jaGF0IH0gOiBjKSksXG4gICAgICB9KSlcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHVwZGF0aW5nIGNoYXQ6JywgZXJyb3IpXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgcmVzZXQ6ICgpID0+IHNldCh7IC4uLmluaXRpYWxTdGF0ZSwgbG9hZGluZ0NoYXRzOiBmYWxzZSB9KSxcbn0pKVxuXG5leHBvcnQgY29uc3QgZ2V0Q2hhdHNTdG9yZVN0YXRlID0gKCkgPT4gdXNlQ2hhdHNTdG9yZS5nZXRTdGF0ZSgpXG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBO0FBQ0E7QUFDQSxTQUFTQSxNQUFNLFFBQVEsU0FBUztBQUNoQyxPQUFPQyxJQUFJLE1BQU0sa0JBQWtCO0FBR25DLElBQU1DLGFBQWEsR0FBRyxFQUFFO0FBbUJ4QixJQUFNQyxZQUF3QixHQUFHO0VBQy9CQyxLQUFLLEVBQUUsRUFBRTtFQUNUQyxZQUFZLEVBQUUsSUFBSTtFQUNsQkMsa0JBQWtCLEVBQUUsS0FBSztFQUN6QkMsVUFBVSxFQUFFLElBQUk7RUFDaEJDLEtBQUssRUFBRU4sYUFBYTtFQUNwQk8sTUFBTSxFQUFFO0FBQ1YsQ0FBQztBQUVELE9BQU8sSUFBTUMsYUFBYSxHQUFHVixNQUFNLENBQTRCLFVBQUNXLEdBQUcsRUFBRUMsR0FBRztFQUFBLE9BQUFDLGFBQUEsQ0FBQUEsYUFBQSxLQUNuRVYsWUFBWTtJQUVmVyxVQUFVO01BQUEsSUFBQUMsV0FBQSxHQUFBQyxpQkFBQSxjQUFBQyxtQkFBQSxDQUFBQyxJQUFBLENBQUUsU0FBQUMsUUFBQUMsSUFBQTtRQUFBLElBQUFDLEtBQUEsRUFBQUMsT0FBQSxFQUFBQyxVQUFBLEVBQUFmLEtBQUEsRUFBQWdCLFdBQUEsRUFBQWYsTUFBQSxFQUFBZ0IsT0FBQSxFQUFBQyxJQUFBLEVBQUFDLHFCQUFBLEVBQUFDLEtBQUEsRUFBQUMsUUFBQSxFQUFBQyxPQUFBLEVBQUF2QixVQUFBLEVBQUF3QixFQUFBO1FBQUEsT0FBQWQsbUJBQUEsQ0FBQWUsSUFBQSxXQUFBQyxRQUFBO1VBQUEsa0JBQUFBLFFBQUEsQ0FBQUMsSUFBQSxHQUFBRCxRQUFBLENBQUFFLElBQUE7WUFBQTtjQUFTZCxLQUFLLEdBQUFELElBQUEsQ0FBTEMsS0FBSyxFQUFFQyxPQUFPLEdBQUFGLElBQUEsQ0FBUEUsT0FBTyxFQUFBQyxVQUFBLEdBQUFILElBQUEsQ0FBRVosS0FBSyxFQUFMQSxLQUFLLEdBQUFlLFVBQUEsY0FBR3JCLGFBQWEsR0FBQXFCLFVBQUEsRUFBQUMsV0FBQSxHQUFBSixJQUFBLENBQUVYLE1BQU0sRUFBTkEsTUFBTSxHQUFBZSxXQUFBLGNBQUcsQ0FBQyxHQUFBQSxXQUFBLEVBQUVDLE9BQU8sR0FBQUwsSUFBQSxDQUFQSyxPQUFPLEVBQUVDLElBQUksR0FBQU4sSUFBQSxDQUFKTSxJQUFJO2NBQ25GZixHQUFHLENBQUM7Z0JBQUVOLFlBQVksRUFBRTtjQUFLLENBQUMsQ0FBQztjQUFBNEIsUUFBQSxDQUFBQyxJQUFBO2NBQUFELFFBQUEsQ0FBQUUsSUFBQTtjQUFBLE9BRWtCbEMsSUFBSSxDQUFDbUMsS0FBSyxDQUFDQyxnQkFBZ0IsQ0FBQztnQkFDckVoQixLQUFLLEVBQUxBLEtBQUs7Z0JBQ0xDLE9BQU8sRUFBUEEsT0FBTztnQkFDUGQsS0FBSyxFQUFMQSxLQUFLO2dCQUNMQyxNQUFNLEVBQU5BLE1BQU07Z0JBQ05pQixJQUFJLEVBQUpBO2NBQ0YsQ0FBQyxDQUFDO1lBQUE7Y0FBQUMscUJBQUEsR0FBQU0sUUFBQSxDQUFBSyxJQUFBO2NBTk1WLEtBQUssR0FBQUQscUJBQUEsQ0FBTEMsS0FBSztjQUFFQyxRQUFRLEdBQUFGLHFCQUFBLENBQVJFLFFBQVE7Y0FBRUMsT0FBTyxHQUFBSCxxQkFBQSxDQUFQRyxPQUFPO2NBTzFCdkIsVUFBVSxHQUFHdUIsT0FBTyxJQUFJRCxRQUFRLEdBQUdVLE1BQU0sQ0FBQ1YsUUFBUSxDQUFDLEdBQUcsSUFBSTtjQUNoRWxCLEdBQUcsQ0FBQztnQkFDRlAsS0FBSyxFQUFFd0IsS0FBdUI7Z0JBQzlCdkIsWUFBWSxFQUFFLEtBQUs7Z0JBQ25CRSxVQUFVLEVBQVZBLFVBQVU7Z0JBQ1ZDLEtBQUssRUFBTEEsS0FBSztnQkFDTEMsTUFBTSxFQUFFRixVQUFVLGFBQVZBLFVBQVUsY0FBVkEsVUFBVSxHQUFJO2NBQ3hCLENBQUMsQ0FBQztjQUFBMEIsUUFBQSxDQUFBRSxJQUFBO2NBQUE7WUFBQTtjQUFBRixRQUFBLENBQUFDLElBQUE7Y0FBQUgsRUFBQSxHQUFBRSxRQUFBO2NBRUZPLE9BQU8sQ0FBQ0MsS0FBSyxDQUFDLHVCQUF1QixFQUFBVixFQUFPLENBQUM7Y0FDN0NwQixHQUFHLENBQUM7Z0JBQUVOLFlBQVksRUFBRTtjQUFNLENBQUMsQ0FBQztjQUM1Qm9CLE9BQU8sYUFBUEEsT0FBTyxlQUFQQSxPQUFPLENBQUcsQ0FBQztZQUFBO1lBQUE7Y0FBQSxPQUFBUSxRQUFBLENBQUFTLElBQUE7VUFBQTtRQUFBLEdBQUF2QixPQUFBO01BQUEsQ0FFZDtNQUFBLFNBdkJETCxVQUFVQSxDQUFBNkIsRUFBQTtRQUFBLE9BQUE1QixXQUFBLENBQUE2QixLQUFBLE9BQUFDLFNBQUE7TUFBQTtNQUFBLE9BQVYvQixVQUFVO0lBQUEsR0F1QlQ7SUFFRGdDLGFBQWE7TUFBQSxJQUFBQyxjQUFBLEdBQUEvQixpQkFBQSxjQUFBQyxtQkFBQSxDQUFBQyxJQUFBLENBQUUsU0FBQThCLFNBQUFDLEtBQUE7UUFBQSxJQUFBNUIsS0FBQSxFQUFBQyxPQUFBLEVBQUFHLE9BQUEsRUFBQUMsSUFBQSxFQUFBd0IsSUFBQSxFQUFBM0MsVUFBQSxFQUFBQyxLQUFBLEVBQUFGLGtCQUFBLEVBQUE2QyxzQkFBQSxFQUFBdkIsS0FBQSxFQUFBQyxRQUFBLEVBQUFDLE9BQUEsRUFBQXNCLGFBQUEsRUFBQUMsR0FBQTtRQUFBLE9BQUFwQyxtQkFBQSxDQUFBZSxJQUFBLFdBQUFzQixTQUFBO1VBQUEsa0JBQUFBLFNBQUEsQ0FBQXBCLElBQUEsR0FBQW9CLFNBQUEsQ0FBQW5CLElBQUE7WUFBQTtjQUFTZCxLQUFLLEdBQUE0QixLQUFBLENBQUw1QixLQUFLLEVBQUVDLE9BQU8sR0FBQTJCLEtBQUEsQ0FBUDNCLE9BQU8sRUFBRUcsT0FBTyxHQUFBd0IsS0FBQSxDQUFQeEIsT0FBTyxFQUFFQyxJQUFJLEdBQUF1QixLQUFBLENBQUp2QixJQUFJO2NBQUF3QixJQUFBLEdBQ0R0QyxHQUFHLENBQUMsQ0FBQyxFQUEvQ0wsVUFBVSxHQUFBMkMsSUFBQSxDQUFWM0MsVUFBVSxFQUFFQyxLQUFLLEdBQUEwQyxJQUFBLENBQUwxQyxLQUFLLEVBQUVGLGtCQUFrQixHQUFBNEMsSUFBQSxDQUFsQjVDLGtCQUFrQjtjQUFBLE1BQ3pDQyxVQUFVLEtBQUssSUFBSSxJQUFJRCxrQkFBa0I7Z0JBQUFnRCxTQUFBLENBQUFuQixJQUFBO2dCQUFBO2NBQUE7Y0FBQSxPQUFBbUIsU0FBQSxDQUFBQyxNQUFBO1lBQUE7Y0FDN0M1QyxHQUFHLENBQUM7Z0JBQUVMLGtCQUFrQixFQUFFO2NBQUssQ0FBQyxDQUFDO2NBQUFnRCxTQUFBLENBQUFwQixJQUFBO2NBQUFvQixTQUFBLENBQUFuQixJQUFBO2NBQUEsT0FFWWxDLElBQUksQ0FBQ21DLEtBQUssQ0FBQ0MsZ0JBQWdCLENBQUM7Z0JBQ3JFaEIsS0FBSyxFQUFMQSxLQUFLO2dCQUNMQyxPQUFPLEVBQVBBLE9BQU87Z0JBQ1BkLEtBQUssRUFBTEEsS0FBSztnQkFDTEMsTUFBTSxFQUFFRixVQUFVO2dCQUNsQm1CLElBQUksRUFBSkE7Y0FDRixDQUFDLENBQUM7WUFBQTtjQUFBeUIsc0JBQUEsR0FBQUcsU0FBQSxDQUFBaEIsSUFBQTtjQU5NVixLQUFLLEdBQUF1QixzQkFBQSxDQUFMdkIsS0FBSztjQUFFQyxRQUFRLEdBQUFzQixzQkFBQSxDQUFSdEIsUUFBUTtjQUFFQyxPQUFPLEdBQUFxQixzQkFBQSxDQUFQckIsT0FBTztjQU8xQnNCLGFBQWEsR0FBR3RCLE9BQU8sSUFBSUQsUUFBUSxHQUFHVSxNQUFNLENBQUNWLFFBQVEsQ0FBQyxHQUFHLElBQUk7Y0FDbkVsQixHQUFHLENBQUMsVUFBQTZDLEtBQUs7Z0JBQUEsT0FBSztrQkFDWnBELEtBQUssS0FBQXFELE1BQUEsQ0FBQUMsa0JBQUEsQ0FBTUYsS0FBSyxDQUFDcEQsS0FBSyxHQUFBc0Qsa0JBQUEsQ0FBTTlCLEtBQUssRUFBb0I7a0JBQ3JEdEIsa0JBQWtCLEVBQUUsS0FBSztrQkFDekJDLFVBQVUsRUFBRTZDLGFBQWE7a0JBQ3pCM0MsTUFBTSxFQUFFMkMsYUFBYSxhQUFiQSxhQUFhLGNBQWJBLGFBQWEsR0FBSTtnQkFDM0IsQ0FBQztjQUFBLENBQUMsQ0FBQztjQUFBRSxTQUFBLENBQUFuQixJQUFBO2NBQUE7WUFBQTtjQUFBbUIsU0FBQSxDQUFBcEIsSUFBQTtjQUFBbUIsR0FBQSxHQUFBQyxTQUFBO2NBRUhkLE9BQU8sQ0FBQ0MsS0FBSyxDQUFDLDJCQUEyQixFQUFBWSxHQUFPLENBQUM7Y0FDakQxQyxHQUFHLENBQUM7Z0JBQUVMLGtCQUFrQixFQUFFO2NBQU0sQ0FBQyxDQUFDO2NBQ2xDbUIsT0FBTyxhQUFQQSxPQUFPLGVBQVBBLE9BQU8sQ0FBRyxDQUFDO1lBQUE7WUFBQTtjQUFBLE9BQUE2QixTQUFBLENBQUFaLElBQUE7VUFBQTtRQUFBLEdBQUFNLFFBQUE7TUFBQSxDQUVkO01BQUEsU0F4QkRGLGFBQWFBLENBQUFhLEdBQUE7UUFBQSxPQUFBWixjQUFBLENBQUFILEtBQUEsT0FBQUMsU0FBQTtNQUFBO01BQUEsT0FBYkMsYUFBYTtJQUFBLEdBd0JaO0lBRURjLFVBQVU7TUFBQSxJQUFBQyxXQUFBLEdBQUE3QyxpQkFBQSxjQUFBQyxtQkFBQSxDQUFBQyxJQUFBLENBQUUsU0FBQTRDLFNBQUFDLEtBQUE7UUFBQSxJQUFBQyxNQUFBLEVBQUFDLE1BQUEsRUFBQUMsR0FBQTtRQUFBLE9BQUFqRCxtQkFBQSxDQUFBZSxJQUFBLFdBQUFtQyxTQUFBO1VBQUEsa0JBQUFBLFNBQUEsQ0FBQWpDLElBQUEsR0FBQWlDLFNBQUEsQ0FBQWhDLElBQUE7WUFBQTtjQUFTNkIsTUFBTSxHQUFBRCxLQUFBLENBQU5DLE1BQU0sRUFBRUMsTUFBTSxHQUFBRixLQUFBLENBQU5FLE1BQU07Y0FBQUUsU0FBQSxDQUFBakMsSUFBQTtjQUFBaUMsU0FBQSxDQUFBaEMsSUFBQTtjQUFBLE9BRXpCbEMsSUFBSSxDQUFDbUMsS0FBSyxDQUFDd0IsVUFBVSxDQUFDO2dCQUFFSSxNQUFNLEVBQU5BLE1BQU07Z0JBQUVDLE1BQU0sRUFBTkE7Y0FBTyxDQUFDLENBQUM7WUFBQTtjQUMvQ3RELEdBQUcsQ0FBQyxVQUFBNkMsS0FBSztnQkFBQSxPQUFLO2tCQUNacEQsS0FBSyxFQUFFb0QsS0FBSyxDQUFDcEQsS0FBSyxDQUFDZ0UsTUFBTSxDQUFDLFVBQUFDLElBQUk7b0JBQUEsT0FBSUEsSUFBSSxDQUFDQyxpQkFBaUIsS0FBS04sTUFBTTtrQkFBQTtnQkFDckUsQ0FBQztjQUFBLENBQUMsQ0FBQztjQUFBLE9BQUFHLFNBQUEsQ0FBQVosTUFBQSxXQUNJLElBQUk7WUFBQTtjQUFBWSxTQUFBLENBQUFqQyxJQUFBO2NBQUFnQyxHQUFBLEdBQUFDLFNBQUE7Y0FFWDNCLE9BQU8sQ0FBQ0MsS0FBSyxDQUFDLHNCQUFzQixFQUFBeUIsR0FBTyxDQUFDO2NBQUEsT0FBQUMsU0FBQSxDQUFBWixNQUFBLFdBQ3JDLEtBQUs7WUFBQTtZQUFBO2NBQUEsT0FBQVksU0FBQSxDQUFBekIsSUFBQTtVQUFBO1FBQUEsR0FBQW9CLFFBQUE7TUFBQSxDQUVmO01BQUEsU0FYREYsVUFBVUEsQ0FBQVcsR0FBQTtRQUFBLE9BQUFWLFdBQUEsQ0FBQWpCLEtBQUEsT0FBQUMsU0FBQTtNQUFBO01BQUEsT0FBVmUsVUFBVTtJQUFBLEdBV1Q7SUFFRFksVUFBVTtNQUFBLElBQUFDLFdBQUEsR0FBQXpELGlCQUFBLGNBQUFDLG1CQUFBLENBQUFDLElBQUEsQ0FBRSxTQUFBd0QsU0FBTUwsSUFBSTtRQUFBLElBQUFNLEtBQUEsRUFBQUMsY0FBQSxFQUFBQyxPQUFBLEVBQUFDLFlBQUEsRUFBQUMsR0FBQTtRQUFBLE9BQUE5RCxtQkFBQSxDQUFBZSxJQUFBLFdBQUFnRCxTQUFBO1VBQUEsa0JBQUFBLFNBQUEsQ0FBQTlDLElBQUEsR0FBQThDLFNBQUEsQ0FBQTdDLElBQUE7WUFBQTtjQUFBNkMsU0FBQSxDQUFBOUMsSUFBQTtjQUVaMkMsT0FBTyxHQUFHakUsR0FBRyxDQUFDLENBQUMsQ0FBQ1IsS0FBSyxDQUFDNkUsSUFBSSxDQUFDLFVBQUFDLENBQUM7Z0JBQUEsT0FBSUEsQ0FBQyxDQUFDQyxFQUFFLEtBQUtkLElBQUksQ0FBQ2MsRUFBRTtjQUFBLEVBQUM7Y0FDakRMLFlBQVksSUFBQUgsS0FBQSxJQUFBQyxjQUFBLEdBQUdDLE9BQU8sYUFBUEEsT0FBTyx1QkFBUEEsT0FBTyxDQUFFTyxLQUFLLGNBQUFSLGNBQUEsY0FBQUEsY0FBQSxHQUFJUCxJQUFJLENBQUNlLEtBQUssY0FBQVQsS0FBQSxjQUFBQSxLQUFBLEdBQUksRUFBRTtjQUFBSyxTQUFBLENBQUE3QyxJQUFBO2NBQUEsT0FDakRsQyxJQUFJLENBQUNtQyxLQUFLLENBQUNpRCxTQUFTLENBQUF4RSxhQUFBO2dCQUN4Qm1ELE1BQU0sRUFBRUssSUFBSSxDQUFDQyxpQkFBaUI7Z0JBQzlCUSxZQUFZLEVBQVpBO2NBQVksR0FDUlQsSUFBSSxDQUFDZSxLQUFLLElBQUksSUFBSSxJQUFJO2dCQUFFQSxLQUFLLEVBQUVmLElBQUksQ0FBQ2U7Y0FBTSxDQUFDLENBQ2hELENBQUM7WUFBQTtjQUNGekUsR0FBRyxDQUFDLFVBQUE2QyxLQUFLO2dCQUFBLE9BQUs7a0JBQ1pwRCxLQUFLLEVBQUVvRCxLQUFLLENBQUNwRCxLQUFLLENBQUNrRixHQUFHLENBQUMsVUFBQUosQ0FBQztvQkFBQSxPQUFLQSxDQUFDLENBQUNDLEVBQUUsS0FBS2QsSUFBSSxDQUFDYyxFQUFFLEdBQUF0RSxhQUFBLENBQUFBLGFBQUEsS0FBUXFFLENBQUMsR0FBS2IsSUFBSSxJQUFLYSxDQUFDO2tCQUFBLENBQUM7Z0JBQ3hFLENBQUM7Y0FBQSxDQUFDLENBQUM7Y0FBQSxPQUFBRixTQUFBLENBQUF6QixNQUFBLFdBQ0ksSUFBSTtZQUFBO2NBQUF5QixTQUFBLENBQUE5QyxJQUFBO2NBQUE2QyxHQUFBLEdBQUFDLFNBQUE7Y0FFWHhDLE9BQU8sQ0FBQ0MsS0FBSyxDQUFDLHNCQUFzQixFQUFBc0MsR0FBTyxDQUFDO2NBQUEsT0FBQUMsU0FBQSxDQUFBekIsTUFBQSxXQUNyQyxLQUFLO1lBQUE7WUFBQTtjQUFBLE9BQUF5QixTQUFBLENBQUF0QyxJQUFBO1VBQUE7UUFBQSxHQUFBZ0MsUUFBQTtNQUFBLENBRWY7TUFBQSxTQWpCREYsVUFBVUEsQ0FBQWUsR0FBQTtRQUFBLE9BQUFkLFdBQUEsQ0FBQTdCLEtBQUEsT0FBQUMsU0FBQTtNQUFBO01BQUEsT0FBVjJCLFVBQVU7SUFBQSxHQWlCVDtJQUVEZ0IsS0FBSyxFQUFFLFNBQVBBLEtBQUtBLENBQUE7TUFBQSxPQUFRN0UsR0FBRyxDQUFBRSxhQUFBLENBQUFBLGFBQUEsS0FBTVYsWUFBWTtRQUFFRSxZQUFZLEVBQUU7TUFBSyxFQUFFLENBQUM7SUFBQTtFQUFBO0FBQUEsQ0FDMUQsQ0FBQztBQUVILE9BQU8sSUFBTW9GLGtCQUFrQixHQUFHLFNBQXJCQSxrQkFBa0JBLENBQUE7RUFBQSxPQUFTL0UsYUFBYSxDQUFDZ0YsUUFBUSxDQUFDLENBQUM7QUFBQSIsImlnbm9yZUxpc3QiOltdfQ==
|
|
265
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjcmVhdGUiLCJtYWlhIiwiZmxhdHRlblNlc3Npb25zR3JvdXBlZFYyIiwiU0lERUJBUl9TRVNTSU9OU19QQUdFX0xJTUlUIiwiREVGQVVMVF9MSU1JVCIsImVtcHR5U2Vzc2lvbnNHcm91cEhhc01vcmUiLCJjbGllbnRzIiwicHJvamVjdHMiLCJhZ2VudHNCeUNvbXBhbnkiLCJtYXBHcm91cGVkSGFzTW9yZVRvU2lkZWJhciIsImdyb3VwcyIsIm5leHQiLCJmb3JFYWNoIiwiZyIsImdyb3VwIiwiaGFzTW9yZSIsImluaXRpYWxTdGF0ZSIsImNoYXRzIiwibG9hZGluZ0NoYXRzIiwiaXNMb2FkaW5nTW9yZUNoYXRzIiwibmV4dE9mZnNldCIsImxpbWl0Iiwib2Zmc2V0Iiwic2Vzc2lvbnNHcm91cEhhc01vcmUiLCJ1c2VDaGF0c1N0b3JlIiwic2V0IiwiZ2V0IiwiX29iamVjdFNwcmVhZCIsImZldGNoQ2hhdHMiLCJfZmV0Y2hDaGF0cyIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlIiwicGFyYW1zIiwiYWdlbnQiLCJfcGFyYW1zJGxpbWl0IiwiX3BhcmFtcyRvZmZzZXQiLCJvbkVycm9yIiwibGFuZyIsIl9wYXJhbXMkc2hvd0dsb2JhbExvYSIsInNob3dHbG9iYWxMb2FkZXIiLCJfZ3JvdXBzJGZpbmQkbmV4dE9mZnMiLCJfZ3JvdXBzJGZpbmQiLCJfeWllbGQkbWFpYSRDaGF0cyRnZXQiLCJpdGVtcyIsIl90Iiwid3JhcCIsIl9jb250ZXh0IiwicHJldiIsIkNoYXRzIiwiZ2V0U2Vzc2lvbnNHcm91cGVkVjIiLCJzZW50Iiwic29tZSIsImZpbmQiLCJjb25zb2xlIiwiZXJyb3IiLCJzdG9wIiwiX3giLCJhcHBseSIsImFyZ3VtZW50cyIsImxvYWRNb3JlQ2hhdHMiLCJfbG9hZE1vcmVDaGF0cyIsIl9jYWxsZWUyIiwiX2dldCIsIl9ncm91cHMkZmluZCRuZXh0T2ZmczIiLCJfZ3JvdXBzJGZpbmQyIiwiX3lpZWxkJG1haWEkQ2hhdHMkZ2V0MiIsIm5ld05leHRPZmZzZXQiLCJfdDIiLCJfY29udGV4dDIiLCJhYnJ1cHQiLCJzdGF0ZSIsImNvbmNhdCIsIl90b0NvbnN1bWFibGVBcnJheSIsIl94MiIsImRlbGV0ZUNoYXQiLCJfZGVsZXRlQ2hhdCIsIl9jYWxsZWUzIiwiX3JlZiIsImNoYXRJZCIsInVzZXJJZCIsIl90MyIsIl9jb250ZXh0MyIsImZpbHRlciIsImNoYXQiLCJzZXNzaW9uRXh0ZXJuYWxJZCIsIl94MyIsInVwZGF0ZUNoYXQiLCJfdXBkYXRlQ2hhdCIsIl9jYWxsZWU0IiwiX3JlZjIiLCJfY3VycmVudCR0aXRsZSIsImN1cnJlbnQiLCJsYXN0UXVlc3Rpb24iLCJfdDQiLCJfY29udGV4dDQiLCJjIiwiaWQiLCJ0aXRsZSIsInBhdGNoQ2hhdCIsIm1hcCIsIl94NCIsInJlc2V0IiwiZ2V0Q2hhdHNTdG9yZVN0YXRlIiwiZ2V0U3RhdGUiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc3RvcmUvdXNlQ2hhdHNTdG9yZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXMgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7IGNyZWF0ZSB9IGZyb20gJ3p1c3RhbmQnXG5pbXBvcnQgbWFpYSBmcm9tICcuLi9zZXJ2aWNlcy9tYWlhJ1xuaW1wb3J0IHsgZmxhdHRlblNlc3Npb25zR3JvdXBlZFYyIH0gZnJvbSAnLi4vc2VydmljZXMvbWFpYS9DaGF0cy9nZXRTZXNzaW9uc0dyb3VwZWRWMidcbmltcG9ydCB7XG4gIHR5cGUgQ2hhdExpc3RJdGVtLFxuICB0eXBlIEZldGNoQ2hhdHNQYXJhbXMsXG4gIHR5cGUgTG9hZE1vcmVDaGF0c1BhcmFtcyxcbiAgdHlwZSBEZWxldGVDaGF0UGFyYW1zLFxuICBTSURFQkFSX1NFU1NJT05TX1BBR0VfTElNSVQsXG59IGZyb20gJy4vY2hhdHNTdG9yZS50eXBlcydcblxuY29uc3QgREVGQVVMVF9MSU1JVCA9IFNJREVCQVJfU0VTU0lPTlNfUEFHRV9MSU1JVFxuXG4vKiogYGhhc19tb3JlYCBwb3IgZ3J1cG8gZW4gbGEgw7psdGltYSByZXNwdWVzdGEgZGUgYEdFVCAvdjIvc2Vzc2lvbnNgIChwYXJhIOKAnFZlciBtw6Fz4oCdIGNvbiBwYWdlIHNpemUgMykuICovXG5leHBvcnQgdHlwZSBTZXNzaW9uc0dyb3VwSGFzTW9yZVN0YXRlID0ge1xuICBjbGllbnRzOiBib29sZWFuXG4gIHByb2plY3RzOiBib29sZWFuXG4gIGFnZW50c0J5Q29tcGFueTogYm9vbGVhblxufVxuXG5jb25zdCBlbXB0eVNlc3Npb25zR3JvdXBIYXNNb3JlID0gKCk6IFNlc3Npb25zR3JvdXBIYXNNb3JlU3RhdGUgPT4gKHtcbiAgY2xpZW50czogZmFsc2UsXG4gIHByb2plY3RzOiBmYWxzZSxcbiAgYWdlbnRzQnlDb21wYW55OiBmYWxzZSxcbn0pXG5cbmZ1bmN0aW9uIG1hcEdyb3VwZWRIYXNNb3JlVG9TaWRlYmFyKFxuICBncm91cHM6IHsgZ3JvdXA6ICdjbGllbnRzJyB8ICdwcm9qZWN0cycgfCAnY3VzdG9tX2FnZW50cyc7IGhhc01vcmU6IGJvb2xlYW4gfVtdXG4pOiBTZXNzaW9uc0dyb3VwSGFzTW9yZVN0YXRlIHtcbiAgY29uc3QgbmV4dCA9IGVtcHR5U2Vzc2lvbnNHcm91cEhhc01vcmUoKVxuICBncm91cHMuZm9yRWFjaChnID0+IHtcbiAgICBpZiAoZy5ncm91cCA9PT0gJ2N1c3RvbV9hZ2VudHMnKSB7XG4gICAgICBuZXh0LmFnZW50c0J5Q29tcGFueSA9IGcuaGFzTW9yZVxuICAgIH0gZWxzZSB7XG4gICAgICBuZXh0W2cuZ3JvdXBdID0gZy5oYXNNb3JlXG4gICAgfVxuICB9KVxuICByZXR1cm4gbmV4dFxufVxuXG50eXBlIENoYXRzU3RhdGUgPSB7XG4gIGNoYXRzOiBDaGF0TGlzdEl0ZW1bXVxuICBsb2FkaW5nQ2hhdHM6IGJvb2xlYW5cbiAgaXNMb2FkaW5nTW9yZUNoYXRzOiBib29sZWFuXG4gIG5leHRPZmZzZXQ6IG51bWJlciB8IG51bGxcbiAgbGltaXQ6IG51bWJlclxuICBvZmZzZXQ6IG51bWJlclxuICBzZXNzaW9uc0dyb3VwSGFzTW9yZTogU2Vzc2lvbnNHcm91cEhhc01vcmVTdGF0ZVxufVxuXG50eXBlIENoYXRzQWN0aW9ucyA9IHtcbiAgZmV0Y2hDaGF0czogKHBhcmFtczogRmV0Y2hDaGF0c1BhcmFtcykgPT4gUHJvbWlzZTx2b2lkPlxuICBsb2FkTW9yZUNoYXRzOiAocGFyYW1zOiBMb2FkTW9yZUNoYXRzUGFyYW1zKSA9PiBQcm9taXNlPHZvaWQ+XG4gIGRlbGV0ZUNoYXQ6IChwYXJhbXM6IERlbGV0ZUNoYXRQYXJhbXMpID0+IFByb21pc2U8Ym9vbGVhbj5cbiAgdXBkYXRlQ2hhdDogKGNoYXQ6IFBhcnRpYWw8Q2hhdExpc3RJdGVtPiAmIHsgc2Vzc2lvbkV4dGVybmFsSWQ6IHN0cmluZzsgaWQ6IHN0cmluZyB9KSA9PiBQcm9taXNlPGJvb2xlYW4+XG4gIHJlc2V0OiAoKSA9PiB2b2lkXG59XG5cbmNvbnN0IGluaXRpYWxTdGF0ZTogQ2hhdHNTdGF0ZSA9IHtcbiAgY2hhdHM6IFtdLFxuICBsb2FkaW5nQ2hhdHM6IHRydWUsXG4gIGlzTG9hZGluZ01vcmVDaGF0czogZmFsc2UsXG4gIG5leHRPZmZzZXQ6IG51bGwsXG4gIGxpbWl0OiBERUZBVUxUX0xJTUlULFxuICBvZmZzZXQ6IDAsXG4gIHNlc3Npb25zR3JvdXBIYXNNb3JlOiBlbXB0eVNlc3Npb25zR3JvdXBIYXNNb3JlKCksXG59XG5cbmV4cG9ydCBjb25zdCB1c2VDaGF0c1N0b3JlID0gY3JlYXRlPENoYXRzU3RhdGUgJiBDaGF0c0FjdGlvbnM+KChzZXQsIGdldCkgPT4gKHtcbiAgLi4uaW5pdGlhbFN0YXRlLFxuXG4gIGZldGNoQ2hhdHM6IGFzeW5jIHBhcmFtcyA9PiB7XG4gICAgY29uc3QgeyBhZ2VudCwgbGltaXQgPSBERUZBVUxUX0xJTUlULCBvZmZzZXQgPSAwLCBvbkVycm9yLCBsYW5nLCBzaG93R2xvYmFsTG9hZGVyID0gdHJ1ZSB9ID0gcGFyYW1zXG4gICAgaWYgKHNob3dHbG9iYWxMb2FkZXIpIHtcbiAgICAgIHNldCh7IGxvYWRpbmdDaGF0czogdHJ1ZSB9KVxuICAgIH1cbiAgICB0cnkge1xuICAgICAgY29uc3QgeyBncm91cHMgfSA9IGF3YWl0IG1haWEuQ2hhdHMuZ2V0U2Vzc2lvbnNHcm91cGVkVjIoe1xuICAgICAgICBhZ2VudCxcbiAgICAgICAgbGltaXQsXG4gICAgICAgIG9mZnNldCxcbiAgICAgICAgbGFuZyxcbiAgICAgIH0pXG4gICAgICBjb25zdCBpdGVtcyA9IGZsYXR0ZW5TZXNzaW9uc0dyb3VwZWRWMihncm91cHMpIGFzIENoYXRMaXN0SXRlbVtdXG4gICAgICBjb25zdCBoYXNNb3JlID0gZ3JvdXBzLnNvbWUoZyA9PiBnLmhhc01vcmUpXG4gICAgICBjb25zdCBuZXh0T2Zmc2V0ID0gaGFzTW9yZSA/IChncm91cHMuZmluZChnID0+IGcuaGFzTW9yZSk/Lm5leHRPZmZzZXQgPz8gbnVsbCkgOiBudWxsXG4gICAgICBzZXQoe1xuICAgICAgICBjaGF0czogaXRlbXMsXG4gICAgICAgIC4uLihzaG93R2xvYmFsTG9hZGVyID8geyBsb2FkaW5nQ2hhdHM6IGZhbHNlIH0gOiB7fSksXG4gICAgICAgIG5leHRPZmZzZXQsXG4gICAgICAgIGxpbWl0LFxuICAgICAgICBvZmZzZXQ6IG5leHRPZmZzZXQgPz8gMCxcbiAgICAgICAgc2Vzc2lvbnNHcm91cEhhc01vcmU6IG1hcEdyb3VwZWRIYXNNb3JlVG9TaWRlYmFyKGdyb3VwcyksXG4gICAgICB9KVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBjaGF0czonLCBlcnJvcilcbiAgICAgIGlmIChzaG93R2xvYmFsTG9hZGVyKSB7XG4gICAgICAgIHNldCh7IGxvYWRpbmdDaGF0czogZmFsc2UgfSlcbiAgICAgIH1cbiAgICAgIG9uRXJyb3I/LigpXG4gICAgfVxuICB9LFxuXG4gIGxvYWRNb3JlQ2hhdHM6IGFzeW5jIHBhcmFtcyA9PiB7XG4gICAgY29uc3QgeyBhZ2VudCwgb25FcnJvciwgbGFuZyB9ID0gcGFyYW1zXG4gICAgY29uc3QgeyBuZXh0T2Zmc2V0LCBsaW1pdCwgaXNMb2FkaW5nTW9yZUNoYXRzIH0gPSBnZXQoKVxuICAgIGlmIChuZXh0T2Zmc2V0ID09PSBudWxsIHx8IGlzTG9hZGluZ01vcmVDaGF0cykgcmV0dXJuXG4gICAgc2V0KHsgaXNMb2FkaW5nTW9yZUNoYXRzOiB0cnVlIH0pXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgZ3JvdXBzIH0gPSBhd2FpdCBtYWlhLkNoYXRzLmdldFNlc3Npb25zR3JvdXBlZFYyKHtcbiAgICAgICAgYWdlbnQsXG4gICAgICAgIGxpbWl0LFxuICAgICAgICBvZmZzZXQ6IG5leHRPZmZzZXQsXG4gICAgICAgIGxhbmcsXG4gICAgICB9KVxuICAgICAgY29uc3QgaXRlbXMgPSBmbGF0dGVuU2Vzc2lvbnNHcm91cGVkVjIoZ3JvdXBzKSBhcyBDaGF0TGlzdEl0ZW1bXVxuICAgICAgY29uc3QgaGFzTW9yZSA9IGdyb3Vwcy5zb21lKGcgPT4gZy5oYXNNb3JlKVxuICAgICAgY29uc3QgbmV3TmV4dE9mZnNldCA9IGhhc01vcmUgPyAoZ3JvdXBzLmZpbmQoZyA9PiBnLmhhc01vcmUpPy5uZXh0T2Zmc2V0ID8/IG51bGwpIDogbnVsbFxuICAgICAgc2V0KHN0YXRlID0+ICh7XG4gICAgICAgIGNoYXRzOiBbLi4uc3RhdGUuY2hhdHMsIC4uLml0ZW1zXSxcbiAgICAgICAgaXNMb2FkaW5nTW9yZUNoYXRzOiBmYWxzZSxcbiAgICAgICAgbmV4dE9mZnNldDogbmV3TmV4dE9mZnNldCxcbiAgICAgICAgb2Zmc2V0OiBuZXdOZXh0T2Zmc2V0ID8/IDAsXG4gICAgICAgIHNlc3Npb25zR3JvdXBIYXNNb3JlOiBtYXBHcm91cGVkSGFzTW9yZVRvU2lkZWJhcihncm91cHMpLFxuICAgICAgfSkpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGxvYWRpbmcgbW9yZSBjaGF0czonLCBlcnJvcilcbiAgICAgIHNldCh7IGlzTG9hZGluZ01vcmVDaGF0czogZmFsc2UgfSlcbiAgICAgIG9uRXJyb3I/LigpXG4gICAgfVxuICB9LFxuXG4gIGRlbGV0ZUNoYXQ6IGFzeW5jICh7IGNoYXRJZCwgdXNlcklkIH0pID0+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgbWFpYS5DaGF0cy5kZWxldGVDaGF0KHsgY2hhdElkLCB1c2VySWQgfSlcbiAgICAgIHNldChzdGF0ZSA9PiAoe1xuICAgICAgICBjaGF0czogc3RhdGUuY2hhdHMuZmlsdGVyKGNoYXQgPT4gY2hhdC5zZXNzaW9uRXh0ZXJuYWxJZCAhPT0gY2hhdElkKSxcbiAgICAgIH0pKVxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZGVsZXRpbmcgY2hhdDonLCBlcnJvcilcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICB1cGRhdGVDaGF0OiBhc3luYyBjaGF0ID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY3VycmVudCA9IGdldCgpLmNoYXRzLmZpbmQoYyA9PiBjLmlkID09PSBjaGF0LmlkKVxuICAgICAgY29uc3QgbGFzdFF1ZXN0aW9uID0gY3VycmVudD8udGl0bGUgPz8gY2hhdC50aXRsZSA/PyAnJ1xuICAgICAgYXdhaXQgbWFpYS5DaGF0cy5wYXRjaENoYXQoe1xuICAgICAgICBjaGF0SWQ6IGNoYXQuc2Vzc2lvbkV4dGVybmFsSWQsXG4gICAgICAgIGxhc3RRdWVzdGlvbixcbiAgICAgICAgLi4uKGNoYXQudGl0bGUgIT0gbnVsbCAmJiB7IHRpdGxlOiBjaGF0LnRpdGxlIH0pLFxuICAgICAgfSlcbiAgICAgIHNldChzdGF0ZSA9PiAoe1xuICAgICAgICBjaGF0czogc3RhdGUuY2hhdHMubWFwKGMgPT4gKGMuaWQgPT09IGNoYXQuaWQgPyB7IC4uLmMsIC4uLmNoYXQgfSA6IGMpKSxcbiAgICAgIH0pKVxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgdXBkYXRpbmcgY2hhdDonLCBlcnJvcilcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICByZXNldDogKCkgPT4gc2V0KHsgLi4uaW5pdGlhbFN0YXRlLCBsb2FkaW5nQ2hhdHM6IGZhbHNlIH0pLFxufSkpXG5cbmV4cG9ydCBjb25zdCBnZXRDaGF0c1N0b3JlU3RhdGUgPSAoKSA9PiB1c2VDaGF0c1N0b3JlLmdldFN0YXRlKClcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7QUFDQTtBQUNBLFNBQVNBLE1BQU0sUUFBUSxTQUFTO0FBQ2hDLE9BQU9DLElBQUksTUFBTSxrQkFBa0I7QUFDbkMsU0FBU0Msd0JBQXdCLFFBQVEsNkNBQTZDO0FBQ3RGLFNBS0VDLDJCQUEyQixRQUN0QixvQkFBb0I7QUFFM0IsSUFBTUMsYUFBYSxHQUFHRCwyQkFBMkI7O0FBRWpEOztBQU9BLElBQU1FLHlCQUF5QixHQUFHLFNBQTVCQSx5QkFBeUJBLENBQUE7RUFBQSxPQUFxQztJQUNsRUMsT0FBTyxFQUFFLEtBQUs7SUFDZEMsUUFBUSxFQUFFLEtBQUs7SUFDZkMsZUFBZSxFQUFFO0VBQ25CLENBQUM7QUFBQSxDQUFDO0FBRUYsU0FBU0MsMEJBQTBCQSxDQUNqQ0MsTUFBK0UsRUFDcEQ7RUFDM0IsSUFBTUMsSUFBSSxHQUFHTix5QkFBeUIsQ0FBQyxDQUFDO0VBQ3hDSyxNQUFNLENBQUNFLE9BQU8sQ0FBQyxVQUFBQyxDQUFDLEVBQUk7SUFDbEIsSUFBSUEsQ0FBQyxDQUFDQyxLQUFLLEtBQUssZUFBZSxFQUFFO01BQy9CSCxJQUFJLENBQUNILGVBQWUsR0FBR0ssQ0FBQyxDQUFDRSxPQUFPO0lBQ2xDLENBQUMsTUFBTTtNQUNMSixJQUFJLENBQUNFLENBQUMsQ0FBQ0MsS0FBSyxDQUFDLEdBQUdELENBQUMsQ0FBQ0UsT0FBTztJQUMzQjtFQUNGLENBQUMsQ0FBQztFQUNGLE9BQU9KLElBQUk7QUFDYjtBQW9CQSxJQUFNSyxZQUF3QixHQUFHO0VBQy9CQyxLQUFLLEVBQUUsRUFBRTtFQUNUQyxZQUFZLEVBQUUsSUFBSTtFQUNsQkMsa0JBQWtCLEVBQUUsS0FBSztFQUN6QkMsVUFBVSxFQUFFLElBQUk7RUFDaEJDLEtBQUssRUFBRWpCLGFBQWE7RUFDcEJrQixNQUFNLEVBQUUsQ0FBQztFQUNUQyxvQkFBb0IsRUFBRWxCLHlCQUF5QixDQUFDO0FBQ2xELENBQUM7QUFFRCxPQUFPLElBQU1tQixhQUFhLEdBQUd4QixNQUFNLENBQTRCLFVBQUN5QixHQUFHLEVBQUVDLEdBQUc7RUFBQSxPQUFBQyxhQUFBLENBQUFBLGFBQUEsS0FDbkVYLFlBQVk7SUFFZlksVUFBVTtNQUFBLElBQUFDLFdBQUEsR0FBQUMsaUJBQUEsY0FBQUMsbUJBQUEsQ0FBQUMsSUFBQSxDQUFFLFNBQUFDLFFBQU1DLE1BQU07UUFBQSxJQUFBQyxLQUFBLEVBQUFDLGFBQUEsRUFBQWYsS0FBQSxFQUFBZ0IsY0FBQSxFQUFBZixNQUFBLEVBQUFnQixPQUFBLEVBQUFDLElBQUEsRUFBQUMscUJBQUEsRUFBQUMsZ0JBQUEsRUFBQUMscUJBQUEsRUFBQUMsWUFBQSxFQUFBQyxxQkFBQSxFQUFBbEMsTUFBQSxFQUFBbUMsS0FBQSxFQUFBOUIsT0FBQSxFQUFBSyxVQUFBLEVBQUEwQixFQUFBO1FBQUEsT0FBQWYsbUJBQUEsQ0FBQWdCLElBQUEsV0FBQUMsUUFBQTtVQUFBLGtCQUFBQSxRQUFBLENBQUFDLElBQUEsR0FBQUQsUUFBQSxDQUFBckMsSUFBQTtZQUFBO2NBQ2R3QixLQUFLLEdBQWdGRCxNQUFNLENBQTNGQyxLQUFLLEVBQUFDLGFBQUEsR0FBZ0ZGLE1BQU0sQ0FBcEZiLEtBQUssRUFBTEEsS0FBSyxHQUFBZSxhQUFBLGNBQUdoQyxhQUFhLEdBQUFnQyxhQUFBLEVBQUFDLGNBQUEsR0FBeURILE1BQU0sQ0FBN0RaLE1BQU0sRUFBTkEsTUFBTSxHQUFBZSxjQUFBLGNBQUcsQ0FBQyxHQUFBQSxjQUFBLEVBQUVDLE9BQU8sR0FBb0NKLE1BQU0sQ0FBakRJLE9BQU8sRUFBRUMsSUFBSSxHQUE4QkwsTUFBTSxDQUF4Q0ssSUFBSSxFQUFBQyxxQkFBQSxHQUE4Qk4sTUFBTSxDQUFsQ08sZ0JBQWdCLEVBQWhCQSxnQkFBZ0IsR0FBQUQscUJBQUEsY0FBRyxJQUFJLEdBQUFBLHFCQUFBO2NBQ3hGLElBQUlDLGdCQUFnQixFQUFFO2dCQUNwQmhCLEdBQUcsQ0FBQztrQkFBRVAsWUFBWSxFQUFFO2dCQUFLLENBQUMsQ0FBQztjQUM3QjtjQUFDOEIsUUFBQSxDQUFBQyxJQUFBO2NBQUFELFFBQUEsQ0FBQXJDLElBQUE7Y0FBQSxPQUUwQlYsSUFBSSxDQUFDaUQsS0FBSyxDQUFDQyxvQkFBb0IsQ0FBQztnQkFDdkRoQixLQUFLLEVBQUxBLEtBQUs7Z0JBQ0xkLEtBQUssRUFBTEEsS0FBSztnQkFDTEMsTUFBTSxFQUFOQSxNQUFNO2dCQUNOaUIsSUFBSSxFQUFKQTtjQUNGLENBQUMsQ0FBQztZQUFBO2NBQUFLLHFCQUFBLEdBQUFJLFFBQUEsQ0FBQUksSUFBQTtjQUxNMUMsTUFBTSxHQUFBa0MscUJBQUEsQ0FBTmxDLE1BQU07Y0FNUm1DLEtBQUssR0FBRzNDLHdCQUF3QixDQUFDUSxNQUFNLENBQUM7Y0FDeENLLE9BQU8sR0FBR0wsTUFBTSxDQUFDMkMsSUFBSSxDQUFDLFVBQUF4QyxDQUFDO2dCQUFBLE9BQUlBLENBQUMsQ0FBQ0UsT0FBTztjQUFBLEVBQUM7Y0FDckNLLFVBQVUsR0FBR0wsT0FBTyxJQUFBMkIscUJBQUEsSUFBQUMsWUFBQSxHQUFJakMsTUFBTSxDQUFDNEMsSUFBSSxDQUFDLFVBQUF6QyxDQUFDO2dCQUFBLE9BQUlBLENBQUMsQ0FBQ0UsT0FBTztjQUFBLEVBQUMsY0FBQTRCLFlBQUEsdUJBQTNCQSxZQUFBLENBQTZCdkIsVUFBVSxjQUFBc0IscUJBQUEsY0FBQUEscUJBQUEsR0FBSSxJQUFJLEdBQUksSUFBSTtjQUNyRmpCLEdBQUcsQ0FBQUUsYUFBQSxDQUFBQSxhQUFBO2dCQUNEVixLQUFLLEVBQUU0QjtjQUFLLEdBQ1JKLGdCQUFnQixHQUFHO2dCQUFFdkIsWUFBWSxFQUFFO2NBQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDbkRFLFVBQVUsRUFBVkEsVUFBVTtnQkFDVkMsS0FBSyxFQUFMQSxLQUFLO2dCQUNMQyxNQUFNLEVBQUVGLFVBQVUsYUFBVkEsVUFBVSxjQUFWQSxVQUFVLEdBQUksQ0FBQztnQkFDdkJHLG9CQUFvQixFQUFFZCwwQkFBMEIsQ0FBQ0MsTUFBTTtjQUFDLEVBQ3pELENBQUM7Y0FBQXNDLFFBQUEsQ0FBQXJDLElBQUE7Y0FBQTtZQUFBO2NBQUFxQyxRQUFBLENBQUFDLElBQUE7Y0FBQUgsRUFBQSxHQUFBRSxRQUFBO2NBRUZPLE9BQU8sQ0FBQ0MsS0FBSyxDQUFDLHVCQUF1QixFQUFBVixFQUFPLENBQUM7Y0FDN0MsSUFBSUwsZ0JBQWdCLEVBQUU7Z0JBQ3BCaEIsR0FBRyxDQUFDO2tCQUFFUCxZQUFZLEVBQUU7Z0JBQU0sQ0FBQyxDQUFDO2NBQzlCO2NBQ0FvQixPQUFPLGFBQVBBLE9BQU8sZUFBUEEsT0FBTyxDQUFHLENBQUM7WUFBQTtZQUFBO2NBQUEsT0FBQVUsUUFBQSxDQUFBUyxJQUFBO1VBQUE7UUFBQSxHQUFBeEIsT0FBQTtNQUFBLENBRWQ7TUFBQSxTQTlCREwsVUFBVUEsQ0FBQThCLEVBQUE7UUFBQSxPQUFBN0IsV0FBQSxDQUFBOEIsS0FBQSxPQUFBQyxTQUFBO01BQUE7TUFBQSxPQUFWaEMsVUFBVTtJQUFBLEdBOEJUO0lBRURpQyxhQUFhO01BQUEsSUFBQUMsY0FBQSxHQUFBaEMsaUJBQUEsY0FBQUMsbUJBQUEsQ0FBQUMsSUFBQSxDQUFFLFNBQUErQixTQUFNN0IsTUFBTTtRQUFBLElBQUFDLEtBQUEsRUFBQUcsT0FBQSxFQUFBQyxJQUFBLEVBQUF5QixJQUFBLEVBQUE1QyxVQUFBLEVBQUFDLEtBQUEsRUFBQUYsa0JBQUEsRUFBQThDLHNCQUFBLEVBQUFDLGFBQUEsRUFBQUMsc0JBQUEsRUFBQXpELE1BQUEsRUFBQW1DLEtBQUEsRUFBQTlCLE9BQUEsRUFBQXFELGFBQUEsRUFBQUMsR0FBQTtRQUFBLE9BQUF0QyxtQkFBQSxDQUFBZ0IsSUFBQSxXQUFBdUIsU0FBQTtVQUFBLGtCQUFBQSxTQUFBLENBQUFyQixJQUFBLEdBQUFxQixTQUFBLENBQUEzRCxJQUFBO1lBQUE7Y0FDakJ3QixLQUFLLEdBQW9CRCxNQUFNLENBQS9CQyxLQUFLLEVBQUVHLE9BQU8sR0FBV0osTUFBTSxDQUF4QkksT0FBTyxFQUFFQyxJQUFJLEdBQUtMLE1BQU0sQ0FBZkssSUFBSTtjQUFBeUIsSUFBQSxHQUNzQnRDLEdBQUcsQ0FBQyxDQUFDLEVBQS9DTixVQUFVLEdBQUE0QyxJQUFBLENBQVY1QyxVQUFVLEVBQUVDLEtBQUssR0FBQTJDLElBQUEsQ0FBTDNDLEtBQUssRUFBRUYsa0JBQWtCLEdBQUE2QyxJQUFBLENBQWxCN0Msa0JBQWtCO2NBQUEsTUFDekNDLFVBQVUsS0FBSyxJQUFJLElBQUlELGtCQUFrQjtnQkFBQW1ELFNBQUEsQ0FBQTNELElBQUE7Z0JBQUE7Y0FBQTtjQUFBLE9BQUEyRCxTQUFBLENBQUFDLE1BQUE7WUFBQTtjQUM3QzlDLEdBQUcsQ0FBQztnQkFBRU4sa0JBQWtCLEVBQUU7Y0FBSyxDQUFDLENBQUM7Y0FBQW1ELFNBQUEsQ0FBQXJCLElBQUE7Y0FBQXFCLFNBQUEsQ0FBQTNELElBQUE7Y0FBQSxPQUVOVixJQUFJLENBQUNpRCxLQUFLLENBQUNDLG9CQUFvQixDQUFDO2dCQUN2RGhCLEtBQUssRUFBTEEsS0FBSztnQkFDTGQsS0FBSyxFQUFMQSxLQUFLO2dCQUNMQyxNQUFNLEVBQUVGLFVBQVU7Z0JBQ2xCbUIsSUFBSSxFQUFKQTtjQUNGLENBQUMsQ0FBQztZQUFBO2NBQUE0QixzQkFBQSxHQUFBRyxTQUFBLENBQUFsQixJQUFBO2NBTE0xQyxNQUFNLEdBQUF5RCxzQkFBQSxDQUFOekQsTUFBTTtjQU1SbUMsS0FBSyxHQUFHM0Msd0JBQXdCLENBQUNRLE1BQU0sQ0FBQztjQUN4Q0ssT0FBTyxHQUFHTCxNQUFNLENBQUMyQyxJQUFJLENBQUMsVUFBQXhDLENBQUM7Z0JBQUEsT0FBSUEsQ0FBQyxDQUFDRSxPQUFPO2NBQUEsRUFBQztjQUNyQ3FELGFBQWEsR0FBR3JELE9BQU8sSUFBQWtELHNCQUFBLElBQUFDLGFBQUEsR0FBSXhELE1BQU0sQ0FBQzRDLElBQUksQ0FBQyxVQUFBekMsQ0FBQztnQkFBQSxPQUFJQSxDQUFDLENBQUNFLE9BQU87Y0FBQSxFQUFDLGNBQUFtRCxhQUFBLHVCQUEzQkEsYUFBQSxDQUE2QjlDLFVBQVUsY0FBQTZDLHNCQUFBLGNBQUFBLHNCQUFBLEdBQUksSUFBSSxHQUFJLElBQUk7Y0FDeEZ4QyxHQUFHLENBQUMsVUFBQStDLEtBQUs7Z0JBQUEsT0FBSztrQkFDWnZELEtBQUssS0FBQXdELE1BQUEsQ0FBQUMsa0JBQUEsQ0FBTUYsS0FBSyxDQUFDdkQsS0FBSyxHQUFBeUQsa0JBQUEsQ0FBSzdCLEtBQUssRUFBQztrQkFDakMxQixrQkFBa0IsRUFBRSxLQUFLO2tCQUN6QkMsVUFBVSxFQUFFZ0QsYUFBYTtrQkFDekI5QyxNQUFNLEVBQUU4QyxhQUFhLGFBQWJBLGFBQWEsY0FBYkEsYUFBYSxHQUFJLENBQUM7a0JBQzFCN0Msb0JBQW9CLEVBQUVkLDBCQUEwQixDQUFDQyxNQUFNO2dCQUN6RCxDQUFDO2NBQUEsQ0FBQyxDQUFDO2NBQUE0RCxTQUFBLENBQUEzRCxJQUFBO2NBQUE7WUFBQTtjQUFBMkQsU0FBQSxDQUFBckIsSUFBQTtjQUFBb0IsR0FBQSxHQUFBQyxTQUFBO2NBRUhmLE9BQU8sQ0FBQ0MsS0FBSyxDQUFDLDJCQUEyQixFQUFBYSxHQUFPLENBQUM7Y0FDakQ1QyxHQUFHLENBQUM7Z0JBQUVOLGtCQUFrQixFQUFFO2NBQU0sQ0FBQyxDQUFDO2NBQ2xDbUIsT0FBTyxhQUFQQSxPQUFPLGVBQVBBLE9BQU8sQ0FBRyxDQUFDO1lBQUE7WUFBQTtjQUFBLE9BQUFnQyxTQUFBLENBQUFiLElBQUE7VUFBQTtRQUFBLEdBQUFNLFFBQUE7TUFBQSxDQUVkO01BQUEsU0EzQkRGLGFBQWFBLENBQUFjLEdBQUE7UUFBQSxPQUFBYixjQUFBLENBQUFILEtBQUEsT0FBQUMsU0FBQTtNQUFBO01BQUEsT0FBYkMsYUFBYTtJQUFBLEdBMkJaO0lBRURlLFVBQVU7TUFBQSxJQUFBQyxXQUFBLEdBQUEvQyxpQkFBQSxjQUFBQyxtQkFBQSxDQUFBQyxJQUFBLENBQUUsU0FBQThDLFNBQUFDLElBQUE7UUFBQSxJQUFBQyxNQUFBLEVBQUFDLE1BQUEsRUFBQUMsR0FBQTtRQUFBLE9BQUFuRCxtQkFBQSxDQUFBZ0IsSUFBQSxXQUFBb0MsU0FBQTtVQUFBLGtCQUFBQSxTQUFBLENBQUFsQyxJQUFBLEdBQUFrQyxTQUFBLENBQUF4RSxJQUFBO1lBQUE7Y0FBU3FFLE1BQU0sR0FBQUQsSUFBQSxDQUFOQyxNQUFNLEVBQUVDLE1BQU0sR0FBQUYsSUFBQSxDQUFORSxNQUFNO2NBQUFFLFNBQUEsQ0FBQWxDLElBQUE7Y0FBQWtDLFNBQUEsQ0FBQXhFLElBQUE7Y0FBQSxPQUV6QlYsSUFBSSxDQUFDaUQsS0FBSyxDQUFDMEIsVUFBVSxDQUFDO2dCQUFFSSxNQUFNLEVBQU5BLE1BQU07Z0JBQUVDLE1BQU0sRUFBTkE7Y0FBTyxDQUFDLENBQUM7WUFBQTtjQUMvQ3hELEdBQUcsQ0FBQyxVQUFBK0MsS0FBSztnQkFBQSxPQUFLO2tCQUNadkQsS0FBSyxFQUFFdUQsS0FBSyxDQUFDdkQsS0FBSyxDQUFDbUUsTUFBTSxDQUFDLFVBQUFDLElBQUk7b0JBQUEsT0FBSUEsSUFBSSxDQUFDQyxpQkFBaUIsS0FBS04sTUFBTTtrQkFBQTtnQkFDckUsQ0FBQztjQUFBLENBQUMsQ0FBQztjQUFBLE9BQUFHLFNBQUEsQ0FBQVosTUFBQSxXQUNJLElBQUk7WUFBQTtjQUFBWSxTQUFBLENBQUFsQyxJQUFBO2NBQUFpQyxHQUFBLEdBQUFDLFNBQUE7Y0FFWDVCLE9BQU8sQ0FBQ0MsS0FBSyxDQUFDLHNCQUFzQixFQUFBMEIsR0FBTyxDQUFDO2NBQUEsT0FBQUMsU0FBQSxDQUFBWixNQUFBLFdBQ3JDLEtBQUs7WUFBQTtZQUFBO2NBQUEsT0FBQVksU0FBQSxDQUFBMUIsSUFBQTtVQUFBO1FBQUEsR0FBQXFCLFFBQUE7TUFBQSxDQUVmO01BQUEsU0FYREYsVUFBVUEsQ0FBQVcsR0FBQTtRQUFBLE9BQUFWLFdBQUEsQ0FBQWxCLEtBQUEsT0FBQUMsU0FBQTtNQUFBO01BQUEsT0FBVmdCLFVBQVU7SUFBQSxHQVdUO0lBRURZLFVBQVU7TUFBQSxJQUFBQyxXQUFBLEdBQUEzRCxpQkFBQSxjQUFBQyxtQkFBQSxDQUFBQyxJQUFBLENBQUUsU0FBQTBELFNBQU1MLElBQUk7UUFBQSxJQUFBTSxLQUFBLEVBQUFDLGNBQUEsRUFBQUMsT0FBQSxFQUFBQyxZQUFBLEVBQUFDLEdBQUE7UUFBQSxPQUFBaEUsbUJBQUEsQ0FBQWdCLElBQUEsV0FBQWlELFNBQUE7VUFBQSxrQkFBQUEsU0FBQSxDQUFBL0MsSUFBQSxHQUFBK0MsU0FBQSxDQUFBckYsSUFBQTtZQUFBO2NBQUFxRixTQUFBLENBQUEvQyxJQUFBO2NBRVo0QyxPQUFPLEdBQUduRSxHQUFHLENBQUMsQ0FBQyxDQUFDVCxLQUFLLENBQUNxQyxJQUFJLENBQUMsVUFBQTJDLENBQUM7Z0JBQUEsT0FBSUEsQ0FBQyxDQUFDQyxFQUFFLEtBQUtiLElBQUksQ0FBQ2EsRUFBRTtjQUFBLEVBQUM7Y0FDakRKLFlBQVksSUFBQUgsS0FBQSxJQUFBQyxjQUFBLEdBQUdDLE9BQU8sYUFBUEEsT0FBTyx1QkFBUEEsT0FBTyxDQUFFTSxLQUFLLGNBQUFQLGNBQUEsY0FBQUEsY0FBQSxHQUFJUCxJQUFJLENBQUNjLEtBQUssY0FBQVIsS0FBQSxjQUFBQSxLQUFBLEdBQUksRUFBRTtjQUFBSyxTQUFBLENBQUFyRixJQUFBO2NBQUEsT0FDakRWLElBQUksQ0FBQ2lELEtBQUssQ0FBQ2tELFNBQVMsQ0FBQXpFLGFBQUE7Z0JBQ3hCcUQsTUFBTSxFQUFFSyxJQUFJLENBQUNDLGlCQUFpQjtnQkFDOUJRLFlBQVksRUFBWkE7Y0FBWSxHQUNSVCxJQUFJLENBQUNjLEtBQUssSUFBSSxJQUFJLElBQUk7Z0JBQUVBLEtBQUssRUFBRWQsSUFBSSxDQUFDYztjQUFNLENBQUMsQ0FDaEQsQ0FBQztZQUFBO2NBQ0YxRSxHQUFHLENBQUMsVUFBQStDLEtBQUs7Z0JBQUEsT0FBSztrQkFDWnZELEtBQUssRUFBRXVELEtBQUssQ0FBQ3ZELEtBQUssQ0FBQ29GLEdBQUcsQ0FBQyxVQUFBSixDQUFDO29CQUFBLE9BQUtBLENBQUMsQ0FBQ0MsRUFBRSxLQUFLYixJQUFJLENBQUNhLEVBQUUsR0FBQXZFLGFBQUEsQ0FBQUEsYUFBQSxLQUFRc0UsQ0FBQyxHQUFLWixJQUFJLElBQUtZLENBQUM7a0JBQUEsQ0FBQztnQkFDeEUsQ0FBQztjQUFBLENBQUMsQ0FBQztjQUFBLE9BQUFELFNBQUEsQ0FBQXpCLE1BQUEsV0FDSSxJQUFJO1lBQUE7Y0FBQXlCLFNBQUEsQ0FBQS9DLElBQUE7Y0FBQThDLEdBQUEsR0FBQUMsU0FBQTtjQUVYekMsT0FBTyxDQUFDQyxLQUFLLENBQUMsc0JBQXNCLEVBQUF1QyxHQUFPLENBQUM7Y0FBQSxPQUFBQyxTQUFBLENBQUF6QixNQUFBLFdBQ3JDLEtBQUs7WUFBQTtZQUFBO2NBQUEsT0FBQXlCLFNBQUEsQ0FBQXZDLElBQUE7VUFBQTtRQUFBLEdBQUFpQyxRQUFBO01BQUEsQ0FFZjtNQUFBLFNBakJERixVQUFVQSxDQUFBYyxHQUFBO1FBQUEsT0FBQWIsV0FBQSxDQUFBOUIsS0FBQSxPQUFBQyxTQUFBO01BQUE7TUFBQSxPQUFWNEIsVUFBVTtJQUFBLEdBaUJUO0lBRURlLEtBQUssRUFBRSxTQUFQQSxLQUFLQSxDQUFBO01BQUEsT0FBUTlFLEdBQUcsQ0FBQUUsYUFBQSxDQUFBQSxhQUFBLEtBQU1YLFlBQVk7UUFBRUUsWUFBWSxFQUFFO01BQUssRUFBRSxDQUFDO0lBQUE7RUFBQTtBQUFBLENBQzFELENBQUM7QUFFSCxPQUFPLElBQU1zRixrQkFBa0IsR0FBRyxTQUFyQkEsa0JBQWtCQSxDQUFBO0VBQUEsT0FBU2hGLGFBQWEsQ0FBQ2lGLFFBQVEsQ0FBQyxDQUFDO0FBQUEiLCJpZ25vcmVMaXN0IjpbXX0=
|
package/lib/types/Chat.js
CHANGED
|
@@ -7,4 +7,6 @@ export var ChatHistoryRole = /*#__PURE__*/function (ChatHistoryRole) {
|
|
|
7
7
|
}({});
|
|
8
8
|
|
|
9
9
|
// Backend pending_approval format (before transformation)
|
|
10
|
-
|
|
10
|
+
|
|
11
|
+
/** Respuesta de `GET /v2/sessions` (listado agrupado). */
|
|
12
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDaGF0SGlzdG9yeVJvbGUiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMvQ2hhdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyBSZWFjdE5vZGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IFByb2plY3QgfSBmcm9tICcuL1Byb2plY3QnXG5pbXBvcnQgeyBBdHRhY2htZW50RmlsZSB9IGZyb20gJy4uL2NvbXBvbmVudHMvbW9sZWN1bGVzL0NoYXRGb290ZXIvQ2hhdEZvb3RlcidcblxuZXhwb3J0IHR5cGUgQ2hhdEl0ZW0gPSB7XG4gIGNoYXRfaWQ6IHN0cmluZ1xuICBjaGF0X3N0YXR1czogc3RyaW5nXG4gIGxhc3RfcXVlc3Rpb246IHN0cmluZ1xuICBsYXN0X3F1ZXN0aW9uX2RhdGU6IHN0cmluZ1xuICBtZXNzYWdlX2lkOiBzdHJpbmdcbiAgcV9hbnN3ZXJzOiBudW1iZXJcbiAgZ2VuZXJhbF9yYXRpbmc6IG51bWJlclxuICB1c2VyX2lkOiBzdHJpbmdcbn1cblxuZXhwb3J0IHR5cGUgQ2hhdFJlc3BvbnNlID0ge1xuICBpdGVtczogQ2hhdEl0ZW1bXVxuICBsYXN0X2V2YWx1YXRlZF9rZXk6IHN0cmluZ1xufVxuXG5leHBvcnQgdHlwZSBDaGF0ID0ge1xuICBpZDogc3RyaW5nXG4gIHRpdGxlOiBzdHJpbmdcbiAgZGF0ZTogRGF0ZVxuICBhZ2VudF90eXBlPzogc3RyaW5nXG59XG5cbmV4cG9ydCB0eXBlIENoYXRNZXNzYWdlVXNlciA9IHtcbiAgaWQ6IHN0cmluZ1xuICBuYW1lOiBzdHJpbmdcbiAgYXZhdGFyPzogc3RyaW5nXG4gIGF2YXRhckljb24/OiBSZWFjdE5vZGVcbn1cblxuZXhwb3J0IGVudW0gQ2hhdEhpc3RvcnlSb2xlIHtcbiAgVVNFUiA9ICd1c2VyJyxcbiAgQVNTSVNUQU5UID0gJ2Fzc2lzdGFudCcsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGVuZGluZ0FjdGlvbiB7XG4gIHRvb2xfbmFtZTogc3RyaW5nXG4gIHRvb2xfY2FsbF9pZDogc3RyaW5nXG4gIHRvb2xfYXJnczogUmVjb3JkPHN0cmluZywgYW55PiB8IGFueVtdXG4gIHRocmVhZF9pZDogc3RyaW5nIC8vIEVhY2ggYWN0aW9uIGhhcyBpdHMgb3duIHVuaXF1ZSB0aHJlYWRfaWRcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBcHByb3ZhbFJlcXVlc3Qge1xuICB0eXBlOiAnYXBwcm92YWxfcmVxdWlyZWQnXG4gIHBlbmRpbmdfYWN0aW9uczogUGVuZGluZ0FjdGlvbltdXG4gIHRvdGFsX2FjdGlvbnM6IG51bWJlclxuICBvcmlnaW5hbF90aHJlYWRfaWQ6IHN0cmluZyAvLyBPcmlnaW5hbCBjaGVja3BvaW50IHRocmVhZF9pZFxuICBzZXNzaW9uX2lkOiBzdHJpbmdcbiAgbWV0YWRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT5cbn1cblxuLy8gQmFja2VuZCBwZW5kaW5nX2FwcHJvdmFsIGZvcm1hdCAoYmVmb3JlIHRyYW5zZm9ybWF0aW9uKVxuZXhwb3J0IGludGVyZmFjZSBCYWNrZW5kUGVuZGluZ0FwcHJvdmFsIHtcbiAgdHlwZTogJ2FwcHJvdmFsX3JlcXVpcmVkJ1xuICB0b29sX2NhbGxfaWQ6IHN0cmluZ1xuICB0b29sX25hbWU/OiBzdHJpbmdcbiAgdG9vbF9hcmdzPzogUmVjb3JkPHN0cmluZywgYW55PiB8IGFueVtdXG4gIG9yaWdpbmFsX3RocmVhZF9pZDogc3RyaW5nXG4gIHNlc3Npb25faWQ6IHN0cmluZ1xuICBtZXRhZGF0YTogUmVjb3JkPHN0cmluZywgYW55PlxufVxuXG5leHBvcnQgdHlwZSBDaGF0TWVzc2FnZSA9IHtcbiAgaWQ6IHN0cmluZ1xuICBtZXNzYWdlOiBzdHJpbmdcbiAgZGF0ZTogRGF0ZVxuICBpc0Vycm9yPzogYm9vbGVhblxuICBpc19jYW5jZWxsZWQ/OiBib29sZWFuXG4gIGlzRnJvbnRlbmRDYW5jZWxsZWQ/OiBib29sZWFuXG4gIHVzZXI6IENoYXRNZXNzYWdlVXNlclxuICBwcm9qZWN0SWQ/OiBudW1iZXIgfCBzdHJpbmdcbiAgcHJvamVjdE5hbWU/OiBzdHJpbmdcbiAgY2xpZW50SWQ/OiBudW1iZXIgfCBzdHJpbmdcbiAgY2xpZW50TmFtZT86IHN0cmluZ1xuICBpc0NoYW5nZVByb2plY3Q/OiBib29sZWFuXG4gIHByb2plY3Q/OiBQcm9qZWN0XG4gIGFnZW50SWQ/OiBzdHJpbmdcbiAgb3B0aW9ucz86IHtcbiAgICBpZDogbnVtYmVyIHwgc3RyaW5nXG4gICAgbmFtZT86IHN0cmluZ1xuICB9W11cbiAgcm9sZT86IENoYXRIaXN0b3J5Um9sZVxuICBzb3VyY2VzPzogYW55XG4gIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXVxuICB3YXNIZWxwZnVsPzogYm9vbGVhbiB8IG51bGxcbiAgbWVtb3J5U2Vzc2lvbklkPzogc3RyaW5nXG4gIHN1Z2dlc3Rpb25zPzogc3RyaW5nW10gfCBudWxsXG4gIC8qKiBUcmFzIGFwcm9iYXIgY3JlYXRlX2FnZW50OiBhY2Npb25lcyByw6FwaWRhcyBlbiBlbCBtZW5zYWplIGZpbmFsOyByZXF1aWVyZSBhZ2VudElkIGRldGVjdGFkbyBlbiBlbCB0ZXh0byAqL1xuICBjcmVhdGVBZ2VudEZvbGxvd1VwPzogeyBhZ2VudElkOiBzdHJpbmcgfSB8IG51bGxcbiAgYXBwcm92YWw/OiBBcHByb3ZhbFJlcXVlc3RcbiAgYXBwcm92YWxTdGF0dXM/OiAncGVuZGluZycgfCAnYXBwcm92ZWQnIHwgJ3JlamVjdGVkJ1xuICBwcm9qZWN0TWV0YWRhdGE/OiB7XG4gICAgaXNfZGVsZXRlZD86IGJvb2xlYW4gfCBudWxsXG4gIH1cbn1cblxuZXhwb3J0IHR5cGUgQ2hhdE1lc3NhZ2VJdGVtID0ge1xuICBjaGF0SWQ6IHN0cmluZ1xuICBjaGF0U3RhdHVzOiBzdHJpbmdcbiAgbGFzdFF1ZXN0aW9uOiBzdHJpbmdcbiAgbGFzdFF1ZXN0aW9uRGF0ZTogc3RyaW5nXG4gIG1lc3NhZ2VJZDogc3RyaW5nXG4gIHFBbnN3ZXJzOiBudW1iZXJcbiAgZ2VuZXJhbFJhdGluZzogbnVtYmVyXG4gIHVzZXJJZDogc3RyaW5nXG59XG5cbmV4cG9ydCB0eXBlIENoYXRNZXNzYWdlSXRlbVJlc3BvbnNlID0ge1xuICBhZ2VudF9pZDogc3RyaW5nXG4gIHVzZXJfaWQ6IHN0cmluZ1xuICBhbnN3ZXI6IHN0cmluZ1xuICBkYXRlOiBzdHJpbmdcbiAgdGltZXN0YW1wOiBzdHJpbmdcbiAgcXVlc3Rpb246IHN0cmluZ1xuICB3YXNfaGVscGZ1bDogYm9vbGVhbiB8IG51bGxcbiAgbWVzc2FnZV9pZDogc3RyaW5nXG4gIG1lbW9yeV9zZXNzaW9uX2lkOiBzdHJpbmdcbiAgc3VnZ2VzdGlvbnM/OiBzdHJpbmdbXSB8IG51bGxcbiAgc3VnZ2VzdF9yZXBseT86IHN0cmluZ1tdIHwgbnVsbFxuICBpc19jYW5jZWxsZWQ/OiBib29sZWFuXG4gIHByb2plY3RfbWV0YWRhdGE/OiB7XG4gICAgaWQ6IG51bWJlciB8IHN0cmluZ1xuICAgIG5hbWU6IHN0cmluZ1xuICAgIGlzX2RlbGV0ZWQ/OiBib29sZWFuIHwgbnVsbFxuICB9XG4gIGNsaWVudF9tZXRhZGF0YT86IHtcbiAgICBpZDogbnVtYmVyIHwgc3RyaW5nXG4gICAgbmFtZTogc3RyaW5nXG4gIH1cbiAgcHJvamVjdF9pZD86IG51bWJlclxuICBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRGaWxlW11cbiAgc291cmNlcz86IHsgc291cmNlOiBzdHJpbmc7IHJlZmVyZW5jZTogc3RyaW5nIH1bXVxuICBzdGF0dXM/OiBzdHJpbmdcbiAgcGVuZGluZ19hcHByb3ZhbD86IEJhY2tlbmRQZW5kaW5nQXBwcm92YWxcbiAgdGhyZWFkX2lkPzogc3RyaW5nXG59XG5cbmV4cG9ydCB0eXBlIENoYXRNZXNzYWdlc1Jlc3BvbnNlU2NoZW1hID0ge1xuICBpdGVtczogQ2hhdE1lc3NhZ2VJdGVtUmVzcG9uc2VbXVxuICBsYXN0X2V2YWx1YXRlZF9rZXk6IHN0cmluZ1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENoYXRIaXN0b3J5IHtcbiAgY29udGVudDogc3RyaW5nXG4gIHJvbGU6IENoYXRIaXN0b3J5Um9sZVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIENoYXRJdGVtUmVzcG9uc2Uge1xuICBhZ2VudF9uYW1lOiBzdHJpbmdcbiAgYWdlbnRfaWQ6IG51bWJlclxuICBhZ2VudF90eXBlPzogc3RyaW5nXG4gIGFnZW50X2VudGl0eT86IHN0cmluZ1xuICBlbW9qaTogc3RyaW5nIHwgbnVsbFxuICBpZDogbnVtYmVyXG4gIGxhc3RfcXVlc3Rpb246IHN0cmluZ1xuICBsYXN0X3F1ZXN0aW9uX2RhdGU6IHN0cmluZ1xuICBzZXNzaW9uX2V4dGVybmFsX2lkOiBzdHJpbmdcbiAgdGl0bGU6IHN0cmluZyB8IG51bGxcbiAgYXR0YWNobWVudHM6IEF0dGFjaG1lbnRGaWxlW11cbiAgLyoqIFByZXNlbnRlIGVuIHJlc3B1ZXN0YXMgdjIgYWdydXBhZGFzIChgR0VUIC92Mi9zZXNzaW9uc2ApLiAqL1xuICBlbnRpdHlfaWQ/OiBzdHJpbmcgfCBudW1iZXIgfCBudWxsXG4gIHByb2plY3RfbWV0YWRhdGE/OiB7XG4gICAgaWQ6IG51bWJlciB8IHN0cmluZ1xuICAgIG5hbWU6IHN0cmluZ1xuICB9XG4gIGNsaWVudF9tZXRhZGF0YT86IHtcbiAgICBpZDogbnVtYmVyXG4gICAgbmFtZTogc3RyaW5nXG4gIH1cbn1cblxuLyoqIFJlc3B1ZXN0YSBkZSBgR0VUIC92Mi9zZXNzaW9uc2AgKGxpc3RhZG8gYWdydXBhZG8pLiAqL1xuZXhwb3J0IHR5cGUgU2Vzc2lvbnNHcm91cGVkVjJBcGlSZXNwb25zZSA9IHtcbiAgZ3JvdXA6ICdjbGllbnRzJyB8ICdwcm9qZWN0cycgfCAnY3VzdG9tX2FnZW50cydcbiAgZGF0YTogQ2hhdEl0ZW1SZXNwb25zZVtdXG4gIGhhc19tb3JlOiBib29sZWFuXG4gIG5leHRfb2Zmc2V0OiBudW1iZXIgfCBudWxsXG59W11cblxuZXhwb3J0IGludGVyZmFjZSBDaGF0c1Jlc3BvbnNlU2NoZW1hIHtcbiAgZGF0YTogQ2hhdEl0ZW1SZXNwb25zZVtdXG4gIGhhc19tb3JlOiBib29sZWFuXG4gIG5leHRfb2Zmc2V0OiBzdHJpbmcgfCBudWxsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGFza0luZm8ge1xuICBpZDogc3RyaW5nXG4gIHRpdGxlOiBzdHJpbmdcbiAgdXJsOiBzdHJpbmdcbiAgcHJvamVjdE5hbWU/OiBzdHJpbmdcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7O0FBbUNBLFdBQVlBLGVBQWUsMEJBQWZBLGVBQWU7RUFBZkEsZUFBZTtFQUFmQSxlQUFlO0VBQUEsT0FBZkEsZUFBZTtBQUFBOztBQXFCM0I7O0FBd0hBIiwiaWdub3JlTGlzdCI6W119
|
package/package.json
CHANGED
|
@@ -1,198 +0,0 @@
|
|
|
1
|
-
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
2
|
-
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
3
|
-
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
4
|
-
/* eslint-disable no-underscore-dangle -- flags globales window.__MAIA_STREAM_REVEAL_DEBUG__ */
|
|
5
|
-
|
|
6
|
-
/** Valores por defecto del reveal: typing suave sin quedarse demasiado atrás del SSE. */
|
|
7
|
-
export var STREAM_REVEAL_DEFAULTS = {
|
|
8
|
-
maxCharsPerFrame: 8,
|
|
9
|
-
minCharsPerFrame: 1,
|
|
10
|
-
backlogDivisor: 28
|
|
11
|
-
};
|
|
12
|
-
var REPORT_INTERVAL_MS = 1000;
|
|
13
|
-
function isRevealDebugEnabled() {
|
|
14
|
-
return typeof window !== 'undefined' && Boolean(window.__MAIA_STREAM_REVEAL_DEBUG__);
|
|
15
|
-
}
|
|
16
|
-
function isRevealDebugVerbose() {
|
|
17
|
-
return typeof window !== 'undefined' && Boolean(window.__MAIA_STREAM_REVEAL_DEBUG_VERBOSE__);
|
|
18
|
-
}
|
|
19
|
-
function emptyPeriod() {
|
|
20
|
-
return {
|
|
21
|
-
tickCount: 0,
|
|
22
|
-
charsRevealed: 0,
|
|
23
|
-
stepSum: 0,
|
|
24
|
-
maxBacklog: 0,
|
|
25
|
-
setTargetCount: 0,
|
|
26
|
-
sseCharsAppended: 0,
|
|
27
|
-
firstTickAt: 0,
|
|
28
|
-
lastTickAt: 0,
|
|
29
|
-
sumInterTickMs: 0,
|
|
30
|
-
interTickSamples: 0
|
|
31
|
-
};
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
/**
|
|
35
|
-
* Convierte ráfagas irregulares del SSE en actualizaciones de UI más frecuentes y
|
|
36
|
-
* acotadas por frame (estilo “persigue al objetivo”).
|
|
37
|
-
*/
|
|
38
|
-
export function createStreamRevealSmooth(onReveal) {
|
|
39
|
-
var _options$maxCharsPerF, _options$minCharsPerF, _options$backlogDivis;
|
|
40
|
-
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
41
|
-
var maxPF = (_options$maxCharsPerF = options.maxCharsPerFrame) !== null && _options$maxCharsPerF !== void 0 ? _options$maxCharsPerF : STREAM_REVEAL_DEFAULTS.maxCharsPerFrame;
|
|
42
|
-
var minPF = (_options$minCharsPerF = options.minCharsPerFrame) !== null && _options$minCharsPerF !== void 0 ? _options$minCharsPerF : STREAM_REVEAL_DEFAULTS.minCharsPerFrame;
|
|
43
|
-
var divisor = (_options$backlogDivis = options.backlogDivisor) !== null && _options$backlogDivis !== void 0 ? _options$backlogDivis : STREAM_REVEAL_DEFAULTS.backlogDivisor;
|
|
44
|
-
var target = '';
|
|
45
|
-
var display = '';
|
|
46
|
-
var raf = null;
|
|
47
|
-
var sessionId = 0;
|
|
48
|
-
var lastReportAt = 0;
|
|
49
|
-
var period = emptyPeriod();
|
|
50
|
-
var prevTargetLen = 0;
|
|
51
|
-
var lastTickPerf = 0;
|
|
52
|
-
var logConstantsOnce = function logConstantsOnce() {
|
|
53
|
-
if (!isRevealDebugEnabled()) return;
|
|
54
|
-
// eslint-disable-next-line no-console
|
|
55
|
-
console.log('[MAIA stream reveal] constantes activas', {
|
|
56
|
-
sessionId: sessionId,
|
|
57
|
-
maxCharsPerFrame: maxPF,
|
|
58
|
-
minCharsPerFrame: minPF,
|
|
59
|
-
backlogDivisor: divisor,
|
|
60
|
-
defaults: _objectSpread({}, STREAM_REVEAL_DEFAULTS),
|
|
61
|
-
hint: 'Ajustar en STREAM_REVEAL_DEFAULTS o vía options si staging/prod se siente lento o entrecortado'
|
|
62
|
-
});
|
|
63
|
-
};
|
|
64
|
-
var flushPeriodReport = function flushPeriodReport(reason) {
|
|
65
|
-
if (!isRevealDebugEnabled() || period.tickCount === 0 && period.setTargetCount === 0) {
|
|
66
|
-
period = emptyPeriod();
|
|
67
|
-
lastReportAt = performance.now();
|
|
68
|
-
return;
|
|
69
|
-
}
|
|
70
|
-
var now = performance.now();
|
|
71
|
-
var elapsed = Math.max(1, now - lastReportAt);
|
|
72
|
-
var wallMs = period.lastTickAt > 0 && period.firstTickAt > 0 ? period.lastTickAt - period.firstTickAt : 0;
|
|
73
|
-
var avgInterTickMs = period.interTickSamples > 0 ? period.sumInterTickMs / period.interTickSamples : null;
|
|
74
|
-
var revealCharsPerSec = elapsed > 0 ? period.charsRevealed / elapsed * 1000 : 0;
|
|
75
|
-
var avgStep = period.tickCount > 0 ? period.stepSum / period.tickCount : 0;
|
|
76
|
-
var avgSseChunk = period.setTargetCount > 0 ? period.sseCharsAppended / period.setTargetCount : 0;
|
|
77
|
-
|
|
78
|
-
// eslint-disable-next-line no-console
|
|
79
|
-
console.log("[MAIA stream reveal] ".concat(reason), {
|
|
80
|
-
sessionId: sessionId,
|
|
81
|
-
windowMs: Math.round(elapsed),
|
|
82
|
-
ticks: period.tickCount,
|
|
83
|
-
charsRevealedInWindow: period.charsRevealed,
|
|
84
|
-
revealCharsPerSec: Math.round(revealCharsPerSec * 10) / 10,
|
|
85
|
-
maxBacklogInWindow: period.maxBacklog,
|
|
86
|
-
avgStep: Math.round(avgStep * 10) / 10,
|
|
87
|
-
setTargetCalls: period.setTargetCount,
|
|
88
|
-
sseCharsAppendedInWindow: period.sseCharsAppended,
|
|
89
|
-
avgSseDeltaCharsPerSetTarget: Math.round(avgSseChunk * 10) / 10,
|
|
90
|
-
avgMsBetweenRevealTicks: avgInterTickMs != null ? Math.round(avgInterTickMs * 10) / 10 : null,
|
|
91
|
-
revealWallMs: wallMs > 0 ? Math.round(wallMs) : null,
|
|
92
|
-
currentLagChars: target.length - display.length
|
|
93
|
-
});
|
|
94
|
-
period = emptyPeriod();
|
|
95
|
-
lastReportAt = now;
|
|
96
|
-
};
|
|
97
|
-
var _tick = function tick() {
|
|
98
|
-
raf = null;
|
|
99
|
-
if (display.length >= target.length) {
|
|
100
|
-
return;
|
|
101
|
-
}
|
|
102
|
-
var now = performance.now();
|
|
103
|
-
var backlog = target.length - display.length;
|
|
104
|
-
var step = Math.min(maxPF, Math.max(minPF, Math.ceil(backlog / divisor)));
|
|
105
|
-
if (isRevealDebugEnabled()) {
|
|
106
|
-
if (period.tickCount === 0) {
|
|
107
|
-
period.firstTickAt = now;
|
|
108
|
-
} else if (lastTickPerf > 0) {
|
|
109
|
-
period.sumInterTickMs += now - lastTickPerf;
|
|
110
|
-
period.interTickSamples += 1;
|
|
111
|
-
}
|
|
112
|
-
lastTickPerf = now;
|
|
113
|
-
period.tickCount += 1;
|
|
114
|
-
period.charsRevealed += step;
|
|
115
|
-
period.stepSum += step;
|
|
116
|
-
period.maxBacklog = Math.max(period.maxBacklog, backlog);
|
|
117
|
-
period.lastTickAt = now;
|
|
118
|
-
if (isRevealDebugVerbose()) {
|
|
119
|
-
// eslint-disable-next-line no-console
|
|
120
|
-
console.log('[MAIA stream reveal] tick', {
|
|
121
|
-
sessionId: sessionId,
|
|
122
|
-
backlog: backlog,
|
|
123
|
-
step: step,
|
|
124
|
-
displayLen: display.length + step,
|
|
125
|
-
targetLen: target.length
|
|
126
|
-
});
|
|
127
|
-
}
|
|
128
|
-
if (lastReportAt === 0) lastReportAt = now;
|
|
129
|
-
if (now - lastReportAt >= REPORT_INTERVAL_MS) {
|
|
130
|
-
flushPeriodReport('periódico (~1s)');
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
display = target.slice(0, display.length + step);
|
|
134
|
-
onReveal(display);
|
|
135
|
-
if (display.length < target.length) {
|
|
136
|
-
raf = requestAnimationFrame(_tick);
|
|
137
|
-
} else if (isRevealDebugEnabled()) {
|
|
138
|
-
lastTickPerf = 0;
|
|
139
|
-
flushPeriodReport('alcanzó target (catch-up)');
|
|
140
|
-
}
|
|
141
|
-
};
|
|
142
|
-
return {
|
|
143
|
-
/** Sustituye el texto objetivo (contenido acumulado del servidor). */setTarget: function setTarget(nextFull) {
|
|
144
|
-
if (isRevealDebugEnabled()) {
|
|
145
|
-
var delta = nextFull.length - prevTargetLen;
|
|
146
|
-
prevTargetLen = nextFull.length;
|
|
147
|
-
period.setTargetCount += 1;
|
|
148
|
-
if (delta > 0) period.sseCharsAppended += delta;
|
|
149
|
-
var now = performance.now();
|
|
150
|
-
if (lastReportAt === 0) lastReportAt = now;
|
|
151
|
-
if (now - lastReportAt >= REPORT_INTERVAL_MS) {
|
|
152
|
-
flushPeriodReport('periódico (~1s, desde setTarget)');
|
|
153
|
-
}
|
|
154
|
-
if (isRevealDebugVerbose()) {
|
|
155
|
-
// eslint-disable-next-line no-console
|
|
156
|
-
console.log('[MAIA stream reveal] setTarget (SSE acumulado)', {
|
|
157
|
-
sessionId: sessionId,
|
|
158
|
-
targetLen: nextFull.length,
|
|
159
|
-
deltaCharsFromPrevTarget: delta,
|
|
160
|
-
displayLen: display.length,
|
|
161
|
-
lagCharsBefore: nextFull.length - display.length
|
|
162
|
-
});
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
target = nextFull;
|
|
166
|
-
if (display.length < target.length && raf == null) {
|
|
167
|
-
raf = requestAnimationFrame(_tick);
|
|
168
|
-
}
|
|
169
|
-
},
|
|
170
|
-
cancel: function cancel() {
|
|
171
|
-
if (isRevealDebugEnabled() && (period.tickCount > 0 || period.setTargetCount > 0)) {
|
|
172
|
-
flushPeriodReport('cancel');
|
|
173
|
-
}
|
|
174
|
-
if (raf != null) {
|
|
175
|
-
cancelAnimationFrame(raf);
|
|
176
|
-
raf = null;
|
|
177
|
-
}
|
|
178
|
-
},
|
|
179
|
-
/** Limpia estado para un nuevo stream. */reset: function reset() {
|
|
180
|
-
if (isRevealDebugEnabled() && (period.tickCount > 0 || period.setTargetCount > 0)) {
|
|
181
|
-
flushPeriodReport('reset (fin de sesión anterior)');
|
|
182
|
-
}
|
|
183
|
-
if (raf != null) {
|
|
184
|
-
cancelAnimationFrame(raf);
|
|
185
|
-
raf = null;
|
|
186
|
-
}
|
|
187
|
-
target = '';
|
|
188
|
-
display = '';
|
|
189
|
-
sessionId += 1;
|
|
190
|
-
prevTargetLen = 0;
|
|
191
|
-
lastTickPerf = 0;
|
|
192
|
-
period = emptyPeriod();
|
|
193
|
-
lastReportAt = 0;
|
|
194
|
-
logConstantsOnce();
|
|
195
|
-
}
|
|
196
|
-
};
|
|
197
|
-
}
|
|
198
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTVFJFQU1fUkVWRUFMX0RFRkFVTFRTIiwibWF4Q2hhcnNQZXJGcmFtZSIsIm1pbkNoYXJzUGVyRnJhbWUiLCJiYWNrbG9nRGl2aXNvciIsIlJFUE9SVF9JTlRFUlZBTF9NUyIsImlzUmV2ZWFsRGVidWdFbmFibGVkIiwid2luZG93IiwiQm9vbGVhbiIsIl9fTUFJQV9TVFJFQU1fUkVWRUFMX0RFQlVHX18iLCJpc1JldmVhbERlYnVnVmVyYm9zZSIsIl9fTUFJQV9TVFJFQU1fUkVWRUFMX0RFQlVHX1ZFUkJPU0VfXyIsImVtcHR5UGVyaW9kIiwidGlja0NvdW50IiwiY2hhcnNSZXZlYWxlZCIsInN0ZXBTdW0iLCJtYXhCYWNrbG9nIiwic2V0VGFyZ2V0Q291bnQiLCJzc2VDaGFyc0FwcGVuZGVkIiwiZmlyc3RUaWNrQXQiLCJsYXN0VGlja0F0Iiwic3VtSW50ZXJUaWNrTXMiLCJpbnRlclRpY2tTYW1wbGVzIiwiY3JlYXRlU3RyZWFtUmV2ZWFsU21vb3RoIiwib25SZXZlYWwiLCJfb3B0aW9ucyRtYXhDaGFyc1BlckYiLCJfb3B0aW9ucyRtaW5DaGFyc1BlckYiLCJfb3B0aW9ucyRiYWNrbG9nRGl2aXMiLCJvcHRpb25zIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwidW5kZWZpbmVkIiwibWF4UEYiLCJtaW5QRiIsImRpdmlzb3IiLCJ0YXJnZXQiLCJkaXNwbGF5IiwicmFmIiwic2Vzc2lvbklkIiwibGFzdFJlcG9ydEF0IiwicGVyaW9kIiwicHJldlRhcmdldExlbiIsImxhc3RUaWNrUGVyZiIsImxvZ0NvbnN0YW50c09uY2UiLCJjb25zb2xlIiwibG9nIiwiZGVmYXVsdHMiLCJfb2JqZWN0U3ByZWFkIiwiaGludCIsImZsdXNoUGVyaW9kUmVwb3J0IiwicmVhc29uIiwicGVyZm9ybWFuY2UiLCJub3ciLCJlbGFwc2VkIiwiTWF0aCIsIm1heCIsIndhbGxNcyIsImF2Z0ludGVyVGlja01zIiwicmV2ZWFsQ2hhcnNQZXJTZWMiLCJhdmdTdGVwIiwiYXZnU3NlQ2h1bmsiLCJjb25jYXQiLCJ3aW5kb3dNcyIsInJvdW5kIiwidGlja3MiLCJjaGFyc1JldmVhbGVkSW5XaW5kb3ciLCJtYXhCYWNrbG9nSW5XaW5kb3ciLCJzZXRUYXJnZXRDYWxscyIsInNzZUNoYXJzQXBwZW5kZWRJbldpbmRvdyIsImF2Z1NzZURlbHRhQ2hhcnNQZXJTZXRUYXJnZXQiLCJhdmdNc0JldHdlZW5SZXZlYWxUaWNrcyIsInJldmVhbFdhbGxNcyIsImN1cnJlbnRMYWdDaGFycyIsInRpY2siLCJiYWNrbG9nIiwic3RlcCIsIm1pbiIsImNlaWwiLCJkaXNwbGF5TGVuIiwidGFyZ2V0TGVuIiwic2xpY2UiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJzZXRUYXJnZXQiLCJuZXh0RnVsbCIsImRlbHRhIiwiZGVsdGFDaGFyc0Zyb21QcmV2VGFyZ2V0IiwibGFnQ2hhcnNCZWZvcmUiLCJjYW5jZWwiLCJjYW5jZWxBbmltYXRpb25GcmFtZSIsInJlc2V0Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2hvb2tzL3VzZU9yY2hlc3RyYXRvclN0cmVhbS9zdHJlYW1SZXZlYWxTbW9vdGgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tdW5kZXJzY29yZS1kYW5nbGUgLS0gZmxhZ3MgZ2xvYmFsZXMgd2luZG93Ll9fTUFJQV9TVFJFQU1fUkVWRUFMX0RFQlVHX18gKi9cbmV4cG9ydCB0eXBlIFN0cmVhbVJldmVhbFNtb290aE9wdGlvbnMgPSB7XG4gIC8qKiBUb3BlIGRlIGNhcmFjdGVyZXMgcmV2ZWxhZG9zIHBvciBmcmFtZSAofjYwZnBzKS4gTcOhcyBiYWpvID0gbcOhcyBzdWF2ZS4gKi9cbiAgbWF4Q2hhcnNQZXJGcmFtZT86IG51bWJlclxuICBtaW5DaGFyc1BlckZyYW1lPzogbnVtYmVyXG4gIC8qKlxuICAgKiBFbnRyZSBtw6FzIGFsdG8sIG3DoXMgcGVxdWXDsW9zIGxvcyBwYXNvcyBjdWFuZG8gaGF5IG11Y2hvIHRleHRvIHBlbmRpZW50ZVxuICAgKiAobcOhcyBmbHVpZGV6OyBtw6FzIGZyYW1lcyBoYXN0YSBhbGNhbnphciBlbCBvYmpldGl2byBzaSBlbCBzdHJlYW0gZXMgbXV5IGxhcmdvKS5cbiAgICovXG4gIGJhY2tsb2dEaXZpc29yPzogbnVtYmVyXG59XG5cbi8qKiBWYWxvcmVzIHBvciBkZWZlY3RvIGRlbCByZXZlYWw6IHR5cGluZyBzdWF2ZSBzaW4gcXVlZGFyc2UgZGVtYXNpYWRvIGF0csOhcyBkZWwgU1NFLiAqL1xuZXhwb3J0IGNvbnN0IFNUUkVBTV9SRVZFQUxfREVGQVVMVFMgPSB7XG4gIG1heENoYXJzUGVyRnJhbWU6IDgsXG4gIG1pbkNoYXJzUGVyRnJhbWU6IDEsXG4gIGJhY2tsb2dEaXZpc29yOiAyOCxcbn0gYXMgY29uc3Qgc2F0aXNmaWVzIFN0cmVhbVJldmVhbFNtb290aE9wdGlvbnNcblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgV2luZG93IHtcbiAgICAvKipcbiAgICAgKiBFbiBjb25zb2xhOiBgd2luZG93Ll9fTUFJQV9TVFJFQU1fUkVWRUFMX0RFQlVHX18gPSB0cnVlYFxuICAgICAqIExvZ3MgZGUgdmVsb2NpZGFkIGRlIHJldmVhbCwgYmFja2xvZyB2cyBTU0UgeSBjb25zdGFudGVzIGFjdGl2YXMgKGxvY2FsL3N0YWdpbmcvcHJvZCkuXG4gICAgICovXG4gICAgX19NQUlBX1NUUkVBTV9SRVZFQUxfREVCVUdfXz86IGJvb2xlYW5cbiAgICAvKiogU2kgYWRlbcOhcyBlc3TDoSBlbiB0cnVlLCB1biBsb2cgcG9yIGNhZGEgZnJhbWUgZGUgcmV2ZWFsIChtdXkgcnVpZG9zbykuICovXG4gICAgX19NQUlBX1NUUkVBTV9SRVZFQUxfREVCVUdfVkVSQk9TRV9fPzogYm9vbGVhblxuICB9XG59XG5cbmNvbnN0IFJFUE9SVF9JTlRFUlZBTF9NUyA9IDEwMDBcblxuZnVuY3Rpb24gaXNSZXZlYWxEZWJ1Z0VuYWJsZWQoKTogYm9vbGVhbiB7XG4gIHJldHVybiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiBCb29sZWFuKHdpbmRvdy5fX01BSUFfU1RSRUFNX1JFVkVBTF9ERUJVR19fKVxufVxuXG5mdW5jdGlvbiBpc1JldmVhbERlYnVnVmVyYm9zZSgpOiBib29sZWFuIHtcbiAgcmV0dXJuIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIEJvb2xlYW4od2luZG93Ll9fTUFJQV9TVFJFQU1fUkVWRUFMX0RFQlVHX1ZFUkJPU0VfXylcbn1cblxudHlwZSBQZXJpb2RTdGF0cyA9IHtcbiAgdGlja0NvdW50OiBudW1iZXJcbiAgY2hhcnNSZXZlYWxlZDogbnVtYmVyXG4gIHN0ZXBTdW06IG51bWJlclxuICBtYXhCYWNrbG9nOiBudW1iZXJcbiAgc2V0VGFyZ2V0Q291bnQ6IG51bWJlclxuICBzc2VDaGFyc0FwcGVuZGVkOiBudW1iZXJcbiAgZmlyc3RUaWNrQXQ6IG51bWJlclxuICBsYXN0VGlja0F0OiBudW1iZXJcbiAgc3VtSW50ZXJUaWNrTXM6IG51bWJlclxuICBpbnRlclRpY2tTYW1wbGVzOiBudW1iZXJcbn1cblxuZnVuY3Rpb24gZW1wdHlQZXJpb2QoKTogUGVyaW9kU3RhdHMge1xuICByZXR1cm4ge1xuICAgIHRpY2tDb3VudDogMCxcbiAgICBjaGFyc1JldmVhbGVkOiAwLFxuICAgIHN0ZXBTdW06IDAsXG4gICAgbWF4QmFja2xvZzogMCxcbiAgICBzZXRUYXJnZXRDb3VudDogMCxcbiAgICBzc2VDaGFyc0FwcGVuZGVkOiAwLFxuICAgIGZpcnN0VGlja0F0OiAwLFxuICAgIGxhc3RUaWNrQXQ6IDAsXG4gICAgc3VtSW50ZXJUaWNrTXM6IDAsXG4gICAgaW50ZXJUaWNrU2FtcGxlczogMCxcbiAgfVxufVxuXG4vKipcbiAqIENvbnZpZXJ0ZSByw6FmYWdhcyBpcnJlZ3VsYXJlcyBkZWwgU1NFIGVuIGFjdHVhbGl6YWNpb25lcyBkZSBVSSBtw6FzIGZyZWN1ZW50ZXMgeVxuICogYWNvdGFkYXMgcG9yIGZyYW1lIChlc3RpbG8g4oCccGVyc2lndWUgYWwgb2JqZXRpdm/igJ0pLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU3RyZWFtUmV2ZWFsU21vb3RoKFxuICBvblJldmVhbDogKGRpc3BsYXlUZXh0OiBzdHJpbmcpID0+IHZvaWQsXG4gIG9wdGlvbnM6IFN0cmVhbVJldmVhbFNtb290aE9wdGlvbnMgPSB7fVxuKSB7XG4gIGNvbnN0IG1heFBGID0gb3B0aW9ucy5tYXhDaGFyc1BlckZyYW1lID8/IFNUUkVBTV9SRVZFQUxfREVGQVVMVFMubWF4Q2hhcnNQZXJGcmFtZVxuICBjb25zdCBtaW5QRiA9IG9wdGlvbnMubWluQ2hhcnNQZXJGcmFtZSA/PyBTVFJFQU1fUkVWRUFMX0RFRkFVTFRTLm1pbkNoYXJzUGVyRnJhbWVcbiAgY29uc3QgZGl2aXNvciA9IG9wdGlvbnMuYmFja2xvZ0Rpdmlzb3IgPz8gU1RSRUFNX1JFVkVBTF9ERUZBVUxUUy5iYWNrbG9nRGl2aXNvclxuXG4gIGxldCB0YXJnZXQgPSAnJ1xuICBsZXQgZGlzcGxheSA9ICcnXG4gIGxldCByYWY6IG51bWJlciB8IG51bGwgPSBudWxsXG5cbiAgbGV0IHNlc3Npb25JZCA9IDBcbiAgbGV0IGxhc3RSZXBvcnRBdCA9IDBcbiAgbGV0IHBlcmlvZCA9IGVtcHR5UGVyaW9kKClcbiAgbGV0IHByZXZUYXJnZXRMZW4gPSAwXG4gIGxldCBsYXN0VGlja1BlcmYgPSAwXG5cbiAgY29uc3QgbG9nQ29uc3RhbnRzT25jZSA9ICgpID0+IHtcbiAgICBpZiAoIWlzUmV2ZWFsRGVidWdFbmFibGVkKCkpIHJldHVyblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgY29uc29sZS5sb2coJ1tNQUlBIHN0cmVhbSByZXZlYWxdIGNvbnN0YW50ZXMgYWN0aXZhcycsIHtcbiAgICAgIHNlc3Npb25JZCxcbiAgICAgIG1heENoYXJzUGVyRnJhbWU6IG1heFBGLFxuICAgICAgbWluQ2hhcnNQZXJGcmFtZTogbWluUEYsXG4gICAgICBiYWNrbG9nRGl2aXNvcjogZGl2aXNvcixcbiAgICAgIGRlZmF1bHRzOiB7IC4uLlNUUkVBTV9SRVZFQUxfREVGQVVMVFMgfSxcbiAgICAgIGhpbnQ6ICdBanVzdGFyIGVuIFNUUkVBTV9SRVZFQUxfREVGQVVMVFMgbyB2w61hIG9wdGlvbnMgc2kgc3RhZ2luZy9wcm9kIHNlIHNpZW50ZSBsZW50byBvIGVudHJlY29ydGFkbycsXG4gICAgfSlcbiAgfVxuXG4gIGNvbnN0IGZsdXNoUGVyaW9kUmVwb3J0ID0gKHJlYXNvbjogc3RyaW5nKSA9PiB7XG4gICAgaWYgKCFpc1JldmVhbERlYnVnRW5hYmxlZCgpIHx8IChwZXJpb2QudGlja0NvdW50ID09PSAwICYmIHBlcmlvZC5zZXRUYXJnZXRDb3VudCA9PT0gMCkpIHtcbiAgICAgIHBlcmlvZCA9IGVtcHR5UGVyaW9kKClcbiAgICAgIGxhc3RSZXBvcnRBdCA9IHBlcmZvcm1hbmNlLm5vdygpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgY29uc3Qgbm93ID0gcGVyZm9ybWFuY2Uubm93KClcbiAgICBjb25zdCBlbGFwc2VkID0gTWF0aC5tYXgoMSwgbm93IC0gbGFzdFJlcG9ydEF0KVxuICAgIGNvbnN0IHdhbGxNcyA9IHBlcmlvZC5sYXN0VGlja0F0ID4gMCAmJiBwZXJpb2QuZmlyc3RUaWNrQXQgPiAwID8gcGVyaW9kLmxhc3RUaWNrQXQgLSBwZXJpb2QuZmlyc3RUaWNrQXQgOiAwXG4gICAgY29uc3QgYXZnSW50ZXJUaWNrTXMgPSBwZXJpb2QuaW50ZXJUaWNrU2FtcGxlcyA+IDAgPyBwZXJpb2Quc3VtSW50ZXJUaWNrTXMgLyBwZXJpb2QuaW50ZXJUaWNrU2FtcGxlcyA6IG51bGxcbiAgICBjb25zdCByZXZlYWxDaGFyc1BlclNlYyA9IGVsYXBzZWQgPiAwID8gKHBlcmlvZC5jaGFyc1JldmVhbGVkIC8gZWxhcHNlZCkgKiAxMDAwIDogMFxuICAgIGNvbnN0IGF2Z1N0ZXAgPSBwZXJpb2QudGlja0NvdW50ID4gMCA/IHBlcmlvZC5zdGVwU3VtIC8gcGVyaW9kLnRpY2tDb3VudCA6IDBcbiAgICBjb25zdCBhdmdTc2VDaHVuayA9IHBlcmlvZC5zZXRUYXJnZXRDb3VudCA+IDAgPyBwZXJpb2Quc3NlQ2hhcnNBcHBlbmRlZCAvIHBlcmlvZC5zZXRUYXJnZXRDb3VudCA6IDBcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgY29uc29sZS5sb2coYFtNQUlBIHN0cmVhbSByZXZlYWxdICR7cmVhc29ufWAsIHtcbiAgICAgIHNlc3Npb25JZCxcbiAgICAgIHdpbmRvd01zOiBNYXRoLnJvdW5kKGVsYXBzZWQpLFxuICAgICAgdGlja3M6IHBlcmlvZC50aWNrQ291bnQsXG4gICAgICBjaGFyc1JldmVhbGVkSW5XaW5kb3c6IHBlcmlvZC5jaGFyc1JldmVhbGVkLFxuICAgICAgcmV2ZWFsQ2hhcnNQZXJTZWM6IE1hdGgucm91bmQocmV2ZWFsQ2hhcnNQZXJTZWMgKiAxMCkgLyAxMCxcbiAgICAgIG1heEJhY2tsb2dJbldpbmRvdzogcGVyaW9kLm1heEJhY2tsb2csXG4gICAgICBhdmdTdGVwOiBNYXRoLnJvdW5kKGF2Z1N0ZXAgKiAxMCkgLyAxMCxcbiAgICAgIHNldFRhcmdldENhbGxzOiBwZXJpb2Quc2V0VGFyZ2V0Q291bnQsXG4gICAgICBzc2VDaGFyc0FwcGVuZGVkSW5XaW5kb3c6IHBlcmlvZC5zc2VDaGFyc0FwcGVuZGVkLFxuICAgICAgYXZnU3NlRGVsdGFDaGFyc1BlclNldFRhcmdldDogTWF0aC5yb3VuZChhdmdTc2VDaHVuayAqIDEwKSAvIDEwLFxuICAgICAgYXZnTXNCZXR3ZWVuUmV2ZWFsVGlja3M6IGF2Z0ludGVyVGlja01zICE9IG51bGwgPyBNYXRoLnJvdW5kKGF2Z0ludGVyVGlja01zICogMTApIC8gMTAgOiBudWxsLFxuICAgICAgcmV2ZWFsV2FsbE1zOiB3YWxsTXMgPiAwID8gTWF0aC5yb3VuZCh3YWxsTXMpIDogbnVsbCxcbiAgICAgIGN1cnJlbnRMYWdDaGFyczogdGFyZ2V0Lmxlbmd0aCAtIGRpc3BsYXkubGVuZ3RoLFxuICAgIH0pXG5cbiAgICBwZXJpb2QgPSBlbXB0eVBlcmlvZCgpXG4gICAgbGFzdFJlcG9ydEF0ID0gbm93XG4gIH1cblxuICBjb25zdCB0aWNrID0gKCkgPT4ge1xuICAgIHJhZiA9IG51bGxcbiAgICBpZiAoZGlzcGxheS5sZW5ndGggPj0gdGFyZ2V0Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGNvbnN0IG5vdyA9IHBlcmZvcm1hbmNlLm5vdygpXG4gICAgY29uc3QgYmFja2xvZyA9IHRhcmdldC5sZW5ndGggLSBkaXNwbGF5Lmxlbmd0aFxuICAgIGNvbnN0IHN0ZXAgPSBNYXRoLm1pbihtYXhQRiwgTWF0aC5tYXgobWluUEYsIE1hdGguY2VpbChiYWNrbG9nIC8gZGl2aXNvcikpKVxuXG4gICAgaWYgKGlzUmV2ZWFsRGVidWdFbmFibGVkKCkpIHtcbiAgICAgIGlmIChwZXJpb2QudGlja0NvdW50ID09PSAwKSB7XG4gICAgICAgIHBlcmlvZC5maXJzdFRpY2tBdCA9IG5vd1xuICAgICAgfSBlbHNlIGlmIChsYXN0VGlja1BlcmYgPiAwKSB7XG4gICAgICAgIHBlcmlvZC5zdW1JbnRlclRpY2tNcyArPSBub3cgLSBsYXN0VGlja1BlcmZcbiAgICAgICAgcGVyaW9kLmludGVyVGlja1NhbXBsZXMgKz0gMVxuICAgICAgfVxuICAgICAgbGFzdFRpY2tQZXJmID0gbm93XG4gICAgICBwZXJpb2QudGlja0NvdW50ICs9IDFcbiAgICAgIHBlcmlvZC5jaGFyc1JldmVhbGVkICs9IHN0ZXBcbiAgICAgIHBlcmlvZC5zdGVwU3VtICs9IHN0ZXBcbiAgICAgIHBlcmlvZC5tYXhCYWNrbG9nID0gTWF0aC5tYXgocGVyaW9kLm1heEJhY2tsb2csIGJhY2tsb2cpXG4gICAgICBwZXJpb2QubGFzdFRpY2tBdCA9IG5vd1xuXG4gICAgICBpZiAoaXNSZXZlYWxEZWJ1Z1ZlcmJvc2UoKSkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICBjb25zb2xlLmxvZygnW01BSUEgc3RyZWFtIHJldmVhbF0gdGljaycsIHtcbiAgICAgICAgICBzZXNzaW9uSWQsXG4gICAgICAgICAgYmFja2xvZyxcbiAgICAgICAgICBzdGVwLFxuICAgICAgICAgIGRpc3BsYXlMZW46IGRpc3BsYXkubGVuZ3RoICsgc3RlcCxcbiAgICAgICAgICB0YXJnZXRMZW46IHRhcmdldC5sZW5ndGgsXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGlmIChsYXN0UmVwb3J0QXQgPT09IDApIGxhc3RSZXBvcnRBdCA9IG5vd1xuICAgICAgaWYgKG5vdyAtIGxhc3RSZXBvcnRBdCA+PSBSRVBPUlRfSU5URVJWQUxfTVMpIHtcbiAgICAgICAgZmx1c2hQZXJpb2RSZXBvcnQoJ3BlcmnDs2RpY28gKH4xcyknKVxuICAgICAgfVxuICAgIH1cblxuICAgIGRpc3BsYXkgPSB0YXJnZXQuc2xpY2UoMCwgZGlzcGxheS5sZW5ndGggKyBzdGVwKVxuICAgIG9uUmV2ZWFsKGRpc3BsYXkpXG4gICAgaWYgKGRpc3BsYXkubGVuZ3RoIDwgdGFyZ2V0Lmxlbmd0aCkge1xuICAgICAgcmFmID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpY2spXG4gICAgfSBlbHNlIGlmIChpc1JldmVhbERlYnVnRW5hYmxlZCgpKSB7XG4gICAgICBsYXN0VGlja1BlcmYgPSAwXG4gICAgICBmbHVzaFBlcmlvZFJlcG9ydCgnYWxjYW56w7MgdGFyZ2V0IChjYXRjaC11cCknKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLyoqIFN1c3RpdHV5ZSBlbCB0ZXh0byBvYmpldGl2byAoY29udGVuaWRvIGFjdW11bGFkbyBkZWwgc2Vydmlkb3IpLiAqL1xuICAgIHNldFRhcmdldChuZXh0RnVsbDogc3RyaW5nKSB7XG4gICAgICBpZiAoaXNSZXZlYWxEZWJ1Z0VuYWJsZWQoKSkge1xuICAgICAgICBjb25zdCBkZWx0YSA9IG5leHRGdWxsLmxlbmd0aCAtIHByZXZUYXJnZXRMZW5cbiAgICAgICAgcHJldlRhcmdldExlbiA9IG5leHRGdWxsLmxlbmd0aFxuICAgICAgICBwZXJpb2Quc2V0VGFyZ2V0Q291bnQgKz0gMVxuICAgICAgICBpZiAoZGVsdGEgPiAwKSBwZXJpb2Quc3NlQ2hhcnNBcHBlbmRlZCArPSBkZWx0YVxuXG4gICAgICAgIGNvbnN0IG5vdyA9IHBlcmZvcm1hbmNlLm5vdygpXG4gICAgICAgIGlmIChsYXN0UmVwb3J0QXQgPT09IDApIGxhc3RSZXBvcnRBdCA9IG5vd1xuICAgICAgICBpZiAobm93IC0gbGFzdFJlcG9ydEF0ID49IFJFUE9SVF9JTlRFUlZBTF9NUykge1xuICAgICAgICAgIGZsdXNoUGVyaW9kUmVwb3J0KCdwZXJpw7NkaWNvICh+MXMsIGRlc2RlIHNldFRhcmdldCknKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzUmV2ZWFsRGVidWdWZXJib3NlKCkpIHtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgIGNvbnNvbGUubG9nKCdbTUFJQSBzdHJlYW0gcmV2ZWFsXSBzZXRUYXJnZXQgKFNTRSBhY3VtdWxhZG8pJywge1xuICAgICAgICAgICAgc2Vzc2lvbklkLFxuICAgICAgICAgICAgdGFyZ2V0TGVuOiBuZXh0RnVsbC5sZW5ndGgsXG4gICAgICAgICAgICBkZWx0YUNoYXJzRnJvbVByZXZUYXJnZXQ6IGRlbHRhLFxuICAgICAgICAgICAgZGlzcGxheUxlbjogZGlzcGxheS5sZW5ndGgsXG4gICAgICAgICAgICBsYWdDaGFyc0JlZm9yZTogbmV4dEZ1bGwubGVuZ3RoIC0gZGlzcGxheS5sZW5ndGgsXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0YXJnZXQgPSBuZXh0RnVsbFxuICAgICAgaWYgKGRpc3BsYXkubGVuZ3RoIDwgdGFyZ2V0Lmxlbmd0aCAmJiByYWYgPT0gbnVsbCkge1xuICAgICAgICByYWYgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljaylcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY2FuY2VsKCkge1xuICAgICAgaWYgKGlzUmV2ZWFsRGVidWdFbmFibGVkKCkgJiYgKHBlcmlvZC50aWNrQ291bnQgPiAwIHx8IHBlcmlvZC5zZXRUYXJnZXRDb3VudCA+IDApKSB7XG4gICAgICAgIGZsdXNoUGVyaW9kUmVwb3J0KCdjYW5jZWwnKVxuICAgICAgfVxuICAgICAgaWYgKHJhZiAhPSBudWxsKSB7XG4gICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHJhZilcbiAgICAgICAgcmFmID0gbnVsbFxuICAgICAgfVxuICAgIH0sXG5cbiAgICAvKiogTGltcGlhIGVzdGFkbyBwYXJhIHVuIG51ZXZvIHN0cmVhbS4gKi9cbiAgICByZXNldCgpIHtcbiAgICAgIGlmIChpc1JldmVhbERlYnVnRW5hYmxlZCgpICYmIChwZXJpb2QudGlja0NvdW50ID4gMCB8fCBwZXJpb2Quc2V0VGFyZ2V0Q291bnQgPiAwKSkge1xuICAgICAgICBmbHVzaFBlcmlvZFJlcG9ydCgncmVzZXQgKGZpbiBkZSBzZXNpw7NuIGFudGVyaW9yKScpXG4gICAgICB9XG4gICAgICBpZiAocmFmICE9IG51bGwpIHtcbiAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUocmFmKVxuICAgICAgICByYWYgPSBudWxsXG4gICAgICB9XG4gICAgICB0YXJnZXQgPSAnJ1xuICAgICAgZGlzcGxheSA9ICcnXG4gICAgICBzZXNzaW9uSWQgKz0gMVxuICAgICAgcHJldlRhcmdldExlbiA9IDBcbiAgICAgIGxhc3RUaWNrUGVyZiA9IDBcbiAgICAgIHBlcmlvZCA9IGVtcHR5UGVyaW9kKClcbiAgICAgIGxhc3RSZXBvcnRBdCA9IDBcbiAgICAgIGxvZ0NvbnN0YW50c09uY2UoKVxuICAgIH0sXG4gIH1cbn1cblxuZXhwb3J0IHR5cGUgU3RyZWFtUmV2ZWFsU21vb3RoID0gUmV0dXJuVHlwZTx0eXBlb2YgY3JlYXRlU3RyZWFtUmV2ZWFsU21vb3RoPlxuIl0sIm1hcHBpbmdzIjoiOzs7QUFBQTs7QUFZQTtBQUNBLE9BQU8sSUFB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
|