@convai/web-sdk 1.5.0-beta.0 → 1.6.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +191 -0
- package/README.md +85 -19
- package/dist/core/BlendshapeQueue.d.ts +75 -4
- package/dist/core/BlendshapeQueue.d.ts.map +1 -1
- package/dist/core/BlendshapeQueue.js +400 -24
- package/dist/core/BlendshapeQueue.js.map +1 -1
- package/dist/core/ConvaiClient.d.ts +10 -2
- package/dist/core/ConvaiClient.d.ts.map +1 -1
- package/dist/core/ConvaiClient.js +208 -57
- package/dist/core/ConvaiClient.js.map +1 -1
- package/dist/core/MessageHandler.d.ts +8 -0
- package/dist/core/MessageHandler.d.ts.map +1 -1
- package/dist/core/MessageHandler.js +63 -12
- package/dist/core/MessageHandler.js.map +1 -1
- package/dist/core/VideoManager.d.ts +40 -5
- package/dist/core/VideoManager.d.ts.map +1 -1
- package/dist/core/VideoManager.js +579 -30
- package/dist/core/VideoManager.js.map +1 -1
- package/dist/core/connectRequest.d.ts +23 -0
- package/dist/core/connectRequest.d.ts.map +1 -0
- package/dist/core/connectRequest.js +31 -0
- package/dist/core/connectRequest.js.map +1 -0
- package/dist/core/contextUpdateRequest.d.ts +4 -0
- package/dist/core/contextUpdateRequest.d.ts.map +1 -0
- package/dist/core/contextUpdateRequest.js +10 -0
- package/dist/core/contextUpdateRequest.js.map +1 -0
- package/dist/core/index.d.ts +1 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/types.d.ts +172 -3
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/videoSourceState.d.ts +4 -0
- package/dist/core/videoSourceState.d.ts.map +1 -0
- package/dist/core/videoSourceState.js +9 -0
- package/dist/core/videoSourceState.js.map +1 -0
- package/dist/core/visionRequest.d.ts +4 -0
- package/dist/core/visionRequest.d.ts.map +1 -0
- package/dist/core/visionRequest.js +42 -0
- package/dist/core/visionRequest.js.map +1 -0
- package/dist/react/hooks/useConvaiClient.d.ts.map +1 -1
- package/dist/react/hooks/useConvaiClient.js +3 -0
- package/dist/react/hooks/useConvaiClient.js.map +1 -1
- package/dist/vanilla/types.d.ts +6 -0
- package/dist/vanilla/types.d.ts.map +1 -1
- package/package.json +6 -3
|
@@ -25,8 +25,12 @@ export class BlendshapeQueue {
|
|
|
25
25
|
* Create a new BlendshapeQueue
|
|
26
26
|
* @param mapper - Optional function to map/transform blendshape data as it's added
|
|
27
27
|
*/
|
|
28
|
-
constructor(mapper) {
|
|
28
|
+
constructor(mapper, now = () => Date.now()) {
|
|
29
29
|
this.queue = [];
|
|
30
|
+
this.pendingTimelineFrames = new Map();
|
|
31
|
+
this.activeTimelineAliases = new Set();
|
|
32
|
+
this.retiredTimelineAliases = new Set();
|
|
33
|
+
this.retiredOwnerlessTimelineAliases = new Set();
|
|
30
34
|
this.conversationActive = false; // Queue is accepting frames (starts when user sends message)
|
|
31
35
|
this.botSpeaking = false; // Bot is actually speaking (starts when bot-started-speaking)
|
|
32
36
|
this.conversationEnded = false;
|
|
@@ -36,13 +40,21 @@ export class BlendshapeQueue {
|
|
|
36
40
|
this.interruptedAtFrame = 0; // Frame number when interrupted
|
|
37
41
|
this.needsNormalization = false; // One-shot signal for lipsync player to lerp morphs back to 0
|
|
38
42
|
this._awaitingBotSpeak = false; // Set by startConversation(), cleared by startBotSpeaking(); guards against stale blendshape-turn-stats
|
|
43
|
+
this.playbackFps = 60;
|
|
44
|
+
this.ownerReplacementStoppedSpeaking = false;
|
|
45
|
+
this.missingExpectedFramesSinceMs = null;
|
|
39
46
|
this.mapper = mapper;
|
|
47
|
+
this.now = now;
|
|
40
48
|
}
|
|
41
49
|
/**
|
|
42
50
|
* Add a chunk of blendshapes to the queue
|
|
43
51
|
* @param blendshapes - Array of blendshape frames (each frame is an array of numbers)
|
|
52
|
+
* @param metadata - Optional timeline metadata for ahead-delivered chunks
|
|
44
53
|
*/
|
|
45
|
-
addChunk(blendshapes) {
|
|
54
|
+
addChunk(blendshapes, metadata = {}) {
|
|
55
|
+
if (blendshapes.length === 0) {
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
46
58
|
// Accept frames when:
|
|
47
59
|
// a) conversation is active (user sent message, server hasn't sent turn-stats yet), OR
|
|
48
60
|
// b) bot is currently speaking (bot-started-speaking received), OR
|
|
@@ -50,22 +62,293 @@ export class BlendshapeQueue {
|
|
|
50
62
|
// this covers the race where bot-stopped-speaking and blendshape-turn-stats both reach
|
|
51
63
|
// the client before the last in-flight blendshape chunks do. Without this guard those
|
|
52
64
|
// trailing chunks would be silently dropped because both flags above are already false.
|
|
53
|
-
const framesReceivedSoFar = this.framesConsumed + this.queue.length;
|
|
65
|
+
const framesReceivedSoFar = this.framesConsumed + this.queue.length + this.pendingTimelineFrames.size;
|
|
54
66
|
const stillExpectingFrames = this.conversationEnded &&
|
|
55
67
|
this.turnStats !== null &&
|
|
56
68
|
framesReceivedSoFar < this.turnStats.total_blendshapes;
|
|
57
69
|
const shouldAcceptFrames = this.conversationActive || this.botSpeaking || stillExpectingFrames;
|
|
58
|
-
|
|
70
|
+
const ownerAliases = this.timelineAliases(metadata);
|
|
71
|
+
if (ownerAliases.length > 0) {
|
|
72
|
+
if (this.isRetiredTimelineOwner(metadata)) {
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
if (!this.hasActiveTimelineOwner()) {
|
|
76
|
+
if (!shouldAcceptFrames) {
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
this.adoptTimelineOwner(ownerAliases, this.botSpeaking);
|
|
80
|
+
}
|
|
81
|
+
else if (this.matchesActiveTimelineChunkOwner(metadata)) {
|
|
82
|
+
this.mergeActiveTimelineAliases(ownerAliases);
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
// A different response owner means the server has moved to a new bot
|
|
86
|
+
// turn. Ahead-delivered chunks can race ahead of the explicit cancel
|
|
87
|
+
// event, so adopt the newer owner instead of dropping its first frames.
|
|
88
|
+
const replacedSpeakingOwner = this.botSpeaking;
|
|
89
|
+
this.rememberRetiredTimelineAliases(this.activeTimelineAliases, ownerAliases);
|
|
90
|
+
this.adoptTimelineOwner(ownerAliases);
|
|
91
|
+
if (replacedSpeakingOwner) {
|
|
92
|
+
this.ownerReplacementStoppedSpeaking = true;
|
|
93
|
+
this.needsNormalization = true;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
else if (!shouldAcceptFrames) {
|
|
59
98
|
return;
|
|
60
99
|
}
|
|
100
|
+
const hasIndexedTimeline = Number.isInteger(metadata.startFrameIndex);
|
|
101
|
+
if (hasIndexedTimeline &&
|
|
102
|
+
Number.isFinite(metadata.fps) &&
|
|
103
|
+
metadata.fps > 0) {
|
|
104
|
+
this.playbackFps = metadata.fps;
|
|
105
|
+
}
|
|
106
|
+
this.missingExpectedFramesSinceMs = null;
|
|
107
|
+
if (hasIndexedTimeline) {
|
|
108
|
+
this.addTimelineChunk(blendshapes, metadata.startFrameIndex);
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
for (let i = 0; i < blendshapes.length; i++) {
|
|
112
|
+
this.queue.push(this.mapFrame(blendshapes[i]));
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
mapFrame(input) {
|
|
116
|
+
return this.mapper ? this.mapper(input) : new Float32Array(input);
|
|
117
|
+
}
|
|
118
|
+
addTimelineChunk(blendshapes, startFrameIndex) {
|
|
119
|
+
const queuedStart = this.framesConsumed;
|
|
120
|
+
const queuedEnd = this.framesConsumed + this.queue.length;
|
|
61
121
|
for (let i = 0; i < blendshapes.length; i++) {
|
|
62
|
-
const
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
122
|
+
const absoluteIndex = startFrameIndex + i;
|
|
123
|
+
if (absoluteIndex < queuedStart ||
|
|
124
|
+
absoluteIndex < queuedEnd ||
|
|
125
|
+
this.pendingTimelineFrames.has(absoluteIndex)) {
|
|
126
|
+
continue;
|
|
127
|
+
}
|
|
128
|
+
this.pendingTimelineFrames.set(absoluteIndex, this.mapFrame(blendshapes[i]));
|
|
129
|
+
}
|
|
130
|
+
this.flushContiguousTimelineFrames();
|
|
131
|
+
}
|
|
132
|
+
flushContiguousTimelineFrames() {
|
|
133
|
+
let nextFrameIndex = this.framesConsumed + this.queue.length;
|
|
134
|
+
while (this.pendingTimelineFrames.has(nextFrameIndex)) {
|
|
135
|
+
const frame = this.pendingTimelineFrames.get(nextFrameIndex);
|
|
136
|
+
if (!frame) {
|
|
137
|
+
break;
|
|
138
|
+
}
|
|
139
|
+
this.pendingTimelineFrames.delete(nextFrameIndex);
|
|
140
|
+
this.queue.push(frame);
|
|
141
|
+
nextFrameIndex += 1;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
timelineAliases(metadata = {}) {
|
|
145
|
+
const aliases = [];
|
|
146
|
+
if (metadata.responseId) {
|
|
147
|
+
aliases.push(`r:${metadata.responseId}`);
|
|
148
|
+
}
|
|
149
|
+
if (Number.isInteger(metadata.neurosyncTurnId)) {
|
|
150
|
+
aliases.push(`t:${metadata.neurosyncTurnId}`);
|
|
151
|
+
if (Number.isInteger(metadata.epoch)) {
|
|
152
|
+
aliases.push(`t:${metadata.neurosyncTurnId}|e:${metadata.epoch}`);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
return Array.from(new Set(aliases));
|
|
156
|
+
}
|
|
157
|
+
hasActiveTimelineOwner() {
|
|
158
|
+
return this.activeTimelineAliases.size > 0;
|
|
159
|
+
}
|
|
160
|
+
responseAlias(metadata = {}) {
|
|
161
|
+
return metadata.responseId ? `r:${metadata.responseId}` : undefined;
|
|
162
|
+
}
|
|
163
|
+
turnEpochAlias(metadata = {}) {
|
|
164
|
+
return Number.isInteger(metadata.neurosyncTurnId) &&
|
|
165
|
+
Number.isInteger(metadata.epoch)
|
|
166
|
+
? `t:${metadata.neurosyncTurnId}|e:${metadata.epoch}`
|
|
167
|
+
: undefined;
|
|
168
|
+
}
|
|
169
|
+
turnAlias(metadata = {}) {
|
|
170
|
+
return Number.isInteger(metadata.neurosyncTurnId)
|
|
171
|
+
? `t:${metadata.neurosyncTurnId}`
|
|
172
|
+
: undefined;
|
|
173
|
+
}
|
|
174
|
+
activeHasResponseAlias() {
|
|
175
|
+
return Array.from(this.activeTimelineAliases).some((alias) => alias.startsWith("r:"));
|
|
176
|
+
}
|
|
177
|
+
activeHasTurnEpochAlias() {
|
|
178
|
+
return Array.from(this.activeTimelineAliases).some((alias) => alias.includes("|e:"));
|
|
179
|
+
}
|
|
180
|
+
matchesActiveTimelineOwner(metadata = {}) {
|
|
181
|
+
const aliases = this.timelineAliases(metadata);
|
|
182
|
+
if (aliases.length === 0 || !this.hasActiveTimelineOwner()) {
|
|
183
|
+
return false;
|
|
184
|
+
}
|
|
185
|
+
const responseAlias = this.responseAlias(metadata);
|
|
186
|
+
if (responseAlias && this.activeHasResponseAlias()) {
|
|
187
|
+
return this.activeTimelineAliases.has(responseAlias);
|
|
188
|
+
}
|
|
189
|
+
const turnEpochAlias = this.turnEpochAlias(metadata);
|
|
190
|
+
if (turnEpochAlias && this.activeHasTurnEpochAlias()) {
|
|
191
|
+
return this.activeTimelineAliases.has(turnEpochAlias);
|
|
192
|
+
}
|
|
193
|
+
return aliases.some((alias) => this.activeTimelineAliases.has(alias));
|
|
194
|
+
}
|
|
195
|
+
matchesActiveTimelineChunkOwner(metadata = {}) {
|
|
196
|
+
if (!this.hasActiveTimelineOwner()) {
|
|
197
|
+
return false;
|
|
198
|
+
}
|
|
199
|
+
const responseAlias = this.responseAlias(metadata);
|
|
200
|
+
const activeHasResponseAlias = this.activeHasResponseAlias();
|
|
201
|
+
if (activeHasResponseAlias && responseAlias) {
|
|
202
|
+
return this.activeTimelineAliases.has(responseAlias);
|
|
203
|
+
}
|
|
204
|
+
const turnEpochAlias = this.turnEpochAlias(metadata);
|
|
205
|
+
const activeHasTurnEpochAlias = this.activeHasTurnEpochAlias();
|
|
206
|
+
if (turnEpochAlias || activeHasTurnEpochAlias) {
|
|
207
|
+
return (turnEpochAlias !== undefined &&
|
|
208
|
+
this.activeTimelineAliases.has(turnEpochAlias));
|
|
209
|
+
}
|
|
210
|
+
const turnAlias = this.turnAlias(metadata);
|
|
211
|
+
return turnAlias !== undefined && this.activeTimelineAliases.has(turnAlias);
|
|
212
|
+
}
|
|
213
|
+
mergeActiveTimelineAliases(aliases) {
|
|
214
|
+
aliases.forEach((alias) => this.activeTimelineAliases.add(alias));
|
|
215
|
+
}
|
|
216
|
+
isRetiredTimelineOwner(metadata = {}) {
|
|
217
|
+
const aliases = this.timelineAliases(metadata);
|
|
218
|
+
if (aliases.length === 0) {
|
|
219
|
+
return false;
|
|
220
|
+
}
|
|
221
|
+
const responseAlias = this.responseAlias(metadata);
|
|
222
|
+
if (responseAlias) {
|
|
223
|
+
if (this.retiredTimelineAliases.has(responseAlias)) {
|
|
224
|
+
return true;
|
|
225
|
+
}
|
|
226
|
+
if (this.activeTimelineAliases.has(responseAlias)) {
|
|
227
|
+
return false;
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
const turnEpochAlias = this.turnEpochAlias(metadata);
|
|
231
|
+
if (turnEpochAlias !== undefined &&
|
|
232
|
+
this.retiredTimelineAliases.has(turnEpochAlias)) {
|
|
233
|
+
return true;
|
|
234
|
+
}
|
|
235
|
+
if (responseAlias === undefined &&
|
|
236
|
+
turnEpochAlias !== undefined &&
|
|
237
|
+
this.retiredOwnerlessTimelineAliases.has(turnEpochAlias)) {
|
|
238
|
+
return true;
|
|
239
|
+
}
|
|
240
|
+
const turnAlias = this.turnAlias(metadata);
|
|
241
|
+
return (turnAlias !== undefined &&
|
|
242
|
+
(this.retiredTimelineAliases.has(turnAlias) ||
|
|
243
|
+
(responseAlias === undefined &&
|
|
244
|
+
this.retiredOwnerlessTimelineAliases.has(turnAlias))));
|
|
245
|
+
}
|
|
246
|
+
rememberRetiredTimelineAliases(aliases, keepAliases = []) {
|
|
247
|
+
this.rememberBoundedAliases(this.retiredTimelineAliases, aliases, keepAliases);
|
|
248
|
+
}
|
|
249
|
+
rememberRetiredOwnerlessTimelineAliases(aliases, keepAliases = []) {
|
|
250
|
+
this.rememberBoundedAliases(this.retiredOwnerlessTimelineAliases, aliases, keepAliases);
|
|
251
|
+
}
|
|
252
|
+
rememberBoundedAliases(target, aliases, keepAliases = []) {
|
|
253
|
+
const aliasesToKeep = new Set(keepAliases);
|
|
254
|
+
const aliasesToRetire = Array.from(aliases).filter((alias) => !aliasesToKeep.has(alias));
|
|
255
|
+
if (aliasesToRetire.length === 0) {
|
|
256
|
+
return;
|
|
257
|
+
}
|
|
258
|
+
aliasesToRetire.forEach((alias) => target.add(alias));
|
|
259
|
+
while (target.size >
|
|
260
|
+
BlendshapeQueue.MAX_RETIRED_TIMELINE_ALIASES) {
|
|
261
|
+
const oldestKey = target.values().next().value;
|
|
262
|
+
if (!oldestKey) {
|
|
263
|
+
break;
|
|
264
|
+
}
|
|
265
|
+
target.delete(oldestKey);
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
adoptTimelineOwner(ownerAliases, preserveBotSpeaking = false) {
|
|
269
|
+
const botSpeaking = preserveBotSpeaking && this.botSpeaking;
|
|
270
|
+
this.activeTimelineAliases = new Set(ownerAliases);
|
|
271
|
+
this.queue = [];
|
|
272
|
+
this.pendingTimelineFrames.clear();
|
|
273
|
+
this.framesConsumed = 0;
|
|
274
|
+
this.turnStats = null;
|
|
275
|
+
this.missingExpectedFramesSinceMs = null;
|
|
276
|
+
this.conversationActive = true;
|
|
277
|
+
this.conversationEnded = false;
|
|
278
|
+
this.interrupted = false;
|
|
279
|
+
this.botSpeaking = botSpeaking;
|
|
280
|
+
this._awaitingBotSpeak = !botSpeaking;
|
|
281
|
+
this.playbackFps = BlendshapeQueue.TARGET_FPS;
|
|
282
|
+
if (!botSpeaking) {
|
|
283
|
+
this.ownerReplacementStoppedSpeaking = false;
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
clearTimelineOwner() {
|
|
287
|
+
this.activeTimelineAliases.clear();
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* True when a lifecycle event belongs to an owner that has already been
|
|
291
|
+
* interrupted/cancelled or does not match the active indexed timeline.
|
|
292
|
+
* Ownerless events are treated as current for backward compatibility.
|
|
293
|
+
*/
|
|
294
|
+
isStaleOwner(metadata = {}) {
|
|
295
|
+
const ownerAliases = this.timelineAliases(metadata);
|
|
296
|
+
if (ownerAliases.length === 0) {
|
|
297
|
+
return false;
|
|
298
|
+
}
|
|
299
|
+
if (this.isRetiredOwner(metadata)) {
|
|
300
|
+
return true;
|
|
68
301
|
}
|
|
302
|
+
return (this.hasActiveTimelineOwner() &&
|
|
303
|
+
!this.matchesActiveTimelineOwner(metadata));
|
|
304
|
+
}
|
|
305
|
+
/**
|
|
306
|
+
* True when an owner was explicitly interrupted/cancelled/completed.
|
|
307
|
+
* Chunk messages use this narrower predicate so a newer owner can still
|
|
308
|
+
* reach addChunk() and atomically replace the active owner there.
|
|
309
|
+
*/
|
|
310
|
+
isRetiredOwner(metadata = {}) {
|
|
311
|
+
return this.isRetiredTimelineOwner(metadata);
|
|
312
|
+
}
|
|
313
|
+
/**
|
|
314
|
+
* Drop buffered ahead-delivered frames for a server-cancelled owner.
|
|
315
|
+
* Returns true when the active owner was flushed.
|
|
316
|
+
*/
|
|
317
|
+
cancelOwner(metadata = {}) {
|
|
318
|
+
const ownerAliases = this.timelineAliases(metadata);
|
|
319
|
+
if (ownerAliases.length === 0) {
|
|
320
|
+
return false;
|
|
321
|
+
}
|
|
322
|
+
const matchesActiveOwner = this.matchesActiveTimelineOwner(metadata);
|
|
323
|
+
const activeOwnerAliases = Array.from(this.activeTimelineAliases);
|
|
324
|
+
const isResponseScopedActiveCancel = matchesActiveOwner &&
|
|
325
|
+
this.responseAlias(metadata) !== undefined &&
|
|
326
|
+
this.turnAlias(metadata) === undefined;
|
|
327
|
+
if (isResponseScopedActiveCancel) {
|
|
328
|
+
this.rememberRetiredTimelineAliases(ownerAliases);
|
|
329
|
+
this.rememberRetiredOwnerlessTimelineAliases(activeOwnerAliases, ownerAliases);
|
|
330
|
+
}
|
|
331
|
+
else {
|
|
332
|
+
this.rememberRetiredTimelineAliases(matchesActiveOwner
|
|
333
|
+
? [...ownerAliases, ...activeOwnerAliases]
|
|
334
|
+
: ownerAliases, matchesActiveOwner ? [] : activeOwnerAliases);
|
|
335
|
+
}
|
|
336
|
+
if (!matchesActiveOwner) {
|
|
337
|
+
return false;
|
|
338
|
+
}
|
|
339
|
+
this.queue = [];
|
|
340
|
+
this.pendingTimelineFrames.clear();
|
|
341
|
+
this.framesConsumed = 0;
|
|
342
|
+
this.missingExpectedFramesSinceMs = null;
|
|
343
|
+
this.botSpeaking = false;
|
|
344
|
+
this.conversationActive = false;
|
|
345
|
+
this.conversationEnded = true;
|
|
346
|
+
this.needsNormalization = true;
|
|
347
|
+
this.clearTimelineOwner();
|
|
348
|
+
return true;
|
|
349
|
+
}
|
|
350
|
+
hasBufferedFrames() {
|
|
351
|
+
return this.queue.length > 0 || this.pendingTimelineFrames.size > 0;
|
|
69
352
|
}
|
|
70
353
|
/**
|
|
71
354
|
* Set or update the mapper function
|
|
@@ -160,6 +443,7 @@ export class BlendshapeQueue {
|
|
|
160
443
|
const actualConsumed = Math.min(count, this.queue.length);
|
|
161
444
|
this.queue.splice(0, actualConsumed);
|
|
162
445
|
this.framesConsumed += actualConsumed;
|
|
446
|
+
this.flushContiguousTimelineFrames();
|
|
163
447
|
}
|
|
164
448
|
/**
|
|
165
449
|
* Get the number of frames currently in the queue
|
|
@@ -206,24 +490,57 @@ export class BlendshapeQueue {
|
|
|
206
490
|
// Check completion - EITHER:
|
|
207
491
|
// A) All expected frames consumed based on server stats
|
|
208
492
|
const allFramesConsumed = this.isAllFramesConsumed();
|
|
209
|
-
// B) OR stats received
|
|
210
|
-
|
|
211
|
-
|
|
493
|
+
// B) OR stats received and there are no playable frames. For indexed owners,
|
|
494
|
+
// defer the first empty check while expected frames are missing so late
|
|
495
|
+
// chunks can arrive; allow a later empty check to complete so dropped chunks
|
|
496
|
+
// or unfillable pending gaps do not hang the player forever.
|
|
497
|
+
const waitingForExpectedFrames = this.hasUnconsumedExpectedFrames();
|
|
498
|
+
const noPlayableFramesAfterStats = !this.hasFrames();
|
|
499
|
+
if (!noPlayableFramesAfterStats || !waitingForExpectedFrames) {
|
|
500
|
+
this.missingExpectedFramesSinceMs = null;
|
|
501
|
+
}
|
|
502
|
+
else if (this.hasActiveTimelineOwner()) {
|
|
503
|
+
if (this.missingExpectedFramesSinceMs === null) {
|
|
504
|
+
this.missingExpectedFramesSinceMs = this.now();
|
|
505
|
+
return false;
|
|
506
|
+
}
|
|
507
|
+
if (this.now() - this.missingExpectedFramesSinceMs <
|
|
508
|
+
BlendshapeQueue.MISSING_INDEXED_FRAME_GRACE_MS) {
|
|
509
|
+
return false;
|
|
510
|
+
}
|
|
511
|
+
}
|
|
512
|
+
return allFramesConsumed || noPlayableFramesAfterStats;
|
|
212
513
|
}
|
|
213
514
|
/**
|
|
214
|
-
* Check if server
|
|
515
|
+
* Check if the server end signal is safe to expose to playback consumers.
|
|
516
|
+
*
|
|
517
|
+
* Ahead-delivery can deliver blendshape-turn-stats before bot-started-speaking.
|
|
518
|
+
* Keep those early stats internally for expected-frame accounting, but do not
|
|
519
|
+
* expose a public drain signal until audio playback has actually started.
|
|
215
520
|
* This does NOT check if all frames have been consumed - use isConversationEnded() for that.
|
|
216
521
|
*/
|
|
217
522
|
hasReceivedEndSignal() {
|
|
218
|
-
return this.conversationEnded;
|
|
523
|
+
return this.conversationEnded && !this._awaitingBotSpeak;
|
|
219
524
|
}
|
|
220
525
|
/**
|
|
221
526
|
* Mark conversation start (called when user sends a message)
|
|
222
527
|
* Clears any remaining frames from previous conversation and activates the queue
|
|
223
528
|
*/
|
|
224
529
|
startConversation() {
|
|
530
|
+
if (this.hasActiveTimelineOwner() &&
|
|
531
|
+
(this.hasBufferedFrames() || this.hasUnconsumedExpectedFrames())) {
|
|
532
|
+
this.conversationActive = !this.conversationEnded;
|
|
533
|
+
this.botSpeaking = false;
|
|
534
|
+
this.interrupted = false;
|
|
535
|
+
this._awaitingBotSpeak = true;
|
|
536
|
+
this.ownerReplacementStoppedSpeaking = false;
|
|
537
|
+
return;
|
|
538
|
+
}
|
|
225
539
|
// Clear any leftover frames from previous conversation
|
|
226
540
|
this.queue = [];
|
|
541
|
+
this.pendingTimelineFrames.clear();
|
|
542
|
+
this.rememberRetiredTimelineAliases(this.activeTimelineAliases);
|
|
543
|
+
this.clearTimelineOwner();
|
|
227
544
|
this.conversationActive = true;
|
|
228
545
|
this.botSpeaking = false; // Bot hasn't started speaking yet
|
|
229
546
|
this.conversationEnded = false;
|
|
@@ -232,6 +549,9 @@ export class BlendshapeQueue {
|
|
|
232
549
|
this.interrupted = false; // Reset interruption flag
|
|
233
550
|
this.interruptedAtFrame = 0;
|
|
234
551
|
this._awaitingBotSpeak = true; // Guard: ignore stale blendshape-turn-stats until new bot-started-speaking
|
|
552
|
+
this.playbackFps = BlendshapeQueue.TARGET_FPS;
|
|
553
|
+
this.ownerReplacementStoppedSpeaking = false;
|
|
554
|
+
this.missingExpectedFramesSinceMs = null;
|
|
235
555
|
}
|
|
236
556
|
/**
|
|
237
557
|
* Mark bot as started speaking (called when bot-started-speaking event received)
|
|
@@ -241,7 +561,11 @@ export class BlendshapeQueue {
|
|
|
241
561
|
// Reject stale bot-started-speaking that arrives after the current turn has already
|
|
242
562
|
// ended (conversationEnded=true). This happens when an interrupted conversation's
|
|
243
563
|
// delayed bot-started-speaking arrives after a later conversation has fully completed.
|
|
244
|
-
|
|
564
|
+
const hasEarlyAheadStats = this.conversationEnded &&
|
|
565
|
+
this._awaitingBotSpeak &&
|
|
566
|
+
this.hasActiveTimelineOwner() &&
|
|
567
|
+
this.hasBufferedFrames();
|
|
568
|
+
if (this.conversationEnded && !hasEarlyAheadStats) {
|
|
245
569
|
return false;
|
|
246
570
|
}
|
|
247
571
|
this.botSpeaking = true;
|
|
@@ -261,21 +585,47 @@ export class BlendshapeQueue {
|
|
|
261
585
|
isBotSpeaking() {
|
|
262
586
|
return this.botSpeaking;
|
|
263
587
|
}
|
|
588
|
+
/**
|
|
589
|
+
* Consume the signal that a newer ahead-delivered owner replaced an active
|
|
590
|
+
* speaking owner before the old bot-stopped-speaking event arrived.
|
|
591
|
+
*/
|
|
592
|
+
consumeOwnerReplacementStoppedSpeaking() {
|
|
593
|
+
const val = this.ownerReplacementStoppedSpeaking;
|
|
594
|
+
this.ownerReplacementStoppedSpeaking = false;
|
|
595
|
+
return val;
|
|
596
|
+
}
|
|
264
597
|
/**
|
|
265
598
|
* Mark conversation end with turn stats
|
|
266
599
|
* Called when blendshape-turn-stats received
|
|
267
600
|
* Stops accepting new frames and marks conversation as ended
|
|
268
601
|
*/
|
|
269
|
-
endConversation(stats) {
|
|
602
|
+
endConversation(stats, metadata = {}) {
|
|
603
|
+
const ownerAliases = this.timelineAliases(metadata);
|
|
604
|
+
if (ownerAliases.length > 0) {
|
|
605
|
+
if (this.isRetiredTimelineOwner(metadata)) {
|
|
606
|
+
return;
|
|
607
|
+
}
|
|
608
|
+
if (this.hasActiveTimelineOwner() &&
|
|
609
|
+
!this.matchesActiveTimelineOwner(metadata)) {
|
|
610
|
+
return;
|
|
611
|
+
}
|
|
612
|
+
if (this.hasActiveTimelineOwner() || !this._awaitingBotSpeak) {
|
|
613
|
+
this.mergeActiveTimelineAliases(ownerAliases);
|
|
614
|
+
}
|
|
615
|
+
}
|
|
270
616
|
// Ignore stale blendshape-turn-stats that arrive after startConversation()
|
|
271
617
|
// but before the new turn's bot-started-speaking. These are in-flight leftovers
|
|
272
618
|
// from the interrupted turn and would corrupt conversationEnded/botSpeaking state.
|
|
273
|
-
|
|
619
|
+
const belongsToActiveAheadOwner = ownerAliases.length > 0 &&
|
|
620
|
+
this.hasActiveTimelineOwner() &&
|
|
621
|
+
this.matchesActiveTimelineOwner(metadata);
|
|
622
|
+
if (this._awaitingBotSpeak && !belongsToActiveAheadOwner) {
|
|
274
623
|
return;
|
|
275
624
|
}
|
|
276
625
|
// Stop accepting new frames when conversation ends
|
|
277
626
|
this.conversationActive = false;
|
|
278
627
|
this.conversationEnded = true;
|
|
628
|
+
this.missingExpectedFramesSinceMs = null;
|
|
279
629
|
if (stats) {
|
|
280
630
|
this.turnStats = stats;
|
|
281
631
|
}
|
|
@@ -285,16 +635,20 @@ export class BlendshapeQueue {
|
|
|
285
635
|
* Keeps last 10 frames in queue and fades them out
|
|
286
636
|
*/
|
|
287
637
|
interrupt() {
|
|
638
|
+
this.rememberRetiredTimelineAliases(this.activeTimelineAliases);
|
|
639
|
+
this.clearTimelineOwner();
|
|
288
640
|
this.interrupted = true;
|
|
289
641
|
this.interruptedAtFrame = this.framesConsumed + this.queue.length;
|
|
290
642
|
this.conversationActive = false; // Stop accepting new frames
|
|
291
643
|
this.botSpeaking = false; // Bot is no longer speaking due to interruption
|
|
292
644
|
this.conversationEnded = true; // Mark conversation as ended so the player can drain fade-out frames and fire onConversationEnded
|
|
293
645
|
this.needsNormalization = true; // Signal lipsync player to lerp morphs back to 0
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
646
|
+
this.ownerReplacementStoppedSpeaking = false;
|
|
647
|
+
this.pendingTimelineFrames.clear();
|
|
648
|
+
this.missingExpectedFramesSinceMs = null;
|
|
649
|
+
// Ahead-delivered turns may have many seconds of future frames buffered.
|
|
650
|
+
// On interrupt, audio stops immediately, so visuals must hard-stop too.
|
|
651
|
+
this.queue = [];
|
|
298
652
|
}
|
|
299
653
|
/**
|
|
300
654
|
* Consume the normalization signal (one-shot).
|
|
@@ -319,6 +673,12 @@ export class BlendshapeQueue {
|
|
|
319
673
|
getFramesConsumed() {
|
|
320
674
|
return this.framesConsumed;
|
|
321
675
|
}
|
|
676
|
+
/**
|
|
677
|
+
* Get playback FPS from chunk metadata, falling back to 60fps.
|
|
678
|
+
*/
|
|
679
|
+
getPlaybackFps() {
|
|
680
|
+
return this.playbackFps || BlendshapeQueue.TARGET_FPS;
|
|
681
|
+
}
|
|
322
682
|
/**
|
|
323
683
|
* Calculate time left in milliseconds based on turn stats
|
|
324
684
|
* Returns null if stats not available
|
|
@@ -343,12 +703,21 @@ export class BlendshapeQueue {
|
|
|
343
703
|
return false;
|
|
344
704
|
return this.framesConsumed >= this.turnStats.total_blendshapes;
|
|
345
705
|
}
|
|
706
|
+
hasUnconsumedExpectedFrames() {
|
|
707
|
+
if (!this.turnStats)
|
|
708
|
+
return false;
|
|
709
|
+
const receivedOrConsumedFrames = this.framesConsumed + this.queue.length + this.pendingTimelineFrames.size;
|
|
710
|
+
return receivedOrConsumedFrames < this.turnStats.total_blendshapes;
|
|
711
|
+
}
|
|
346
712
|
/**
|
|
347
713
|
* Reset queue for new conversation
|
|
348
714
|
* Should be called after all frames have been consumed
|
|
349
715
|
*/
|
|
350
716
|
reset() {
|
|
351
717
|
this.queue = [];
|
|
718
|
+
this.pendingTimelineFrames.clear();
|
|
719
|
+
this.rememberRetiredTimelineAliases(this.activeTimelineAliases);
|
|
720
|
+
this.clearTimelineOwner();
|
|
352
721
|
this.conversationActive = false;
|
|
353
722
|
this.botSpeaking = false;
|
|
354
723
|
this.conversationEnded = false;
|
|
@@ -356,6 +725,9 @@ export class BlendshapeQueue {
|
|
|
356
725
|
this.framesConsumed = 0;
|
|
357
726
|
this.needsNormalization = false;
|
|
358
727
|
this._awaitingBotSpeak = false;
|
|
728
|
+
this.playbackFps = BlendshapeQueue.TARGET_FPS;
|
|
729
|
+
this.ownerReplacementStoppedSpeaking = false;
|
|
730
|
+
this.missingExpectedFramesSinceMs = null;
|
|
359
731
|
}
|
|
360
732
|
/**
|
|
361
733
|
* Get frame at specified time
|
|
@@ -366,8 +738,8 @@ export class BlendshapeQueue {
|
|
|
366
738
|
if (this.queue.length === 0) {
|
|
367
739
|
return null;
|
|
368
740
|
}
|
|
369
|
-
// Calculate frame index based on elapsed time and
|
|
370
|
-
const frameIndex = Math.floor(elapsedTime *
|
|
741
|
+
// Calculate frame index based on elapsed time and current playback FPS
|
|
742
|
+
const frameIndex = Math.floor(elapsedTime * this.getPlaybackFps());
|
|
371
743
|
// Clamp to valid range
|
|
372
744
|
const clampedIndex = Math.min(frameIndex, this.queue.length - 1);
|
|
373
745
|
return {
|
|
@@ -389,9 +761,13 @@ export class BlendshapeQueue {
|
|
|
389
761
|
framesConsumed: this.framesConsumed,
|
|
390
762
|
turnStats: this.turnStats,
|
|
391
763
|
timeLeftMs: this.getTimeLeftMs(),
|
|
764
|
+
pendingTimelineFrames: this.pendingTimelineFrames.size,
|
|
765
|
+
playbackFps: this.getPlaybackFps(),
|
|
392
766
|
};
|
|
393
767
|
}
|
|
394
768
|
}
|
|
395
769
|
// Constants
|
|
396
770
|
BlendshapeQueue.TARGET_FPS = 60;
|
|
771
|
+
BlendshapeQueue.MAX_RETIRED_TIMELINE_ALIASES = 48;
|
|
772
|
+
BlendshapeQueue.MISSING_INDEXED_FRAME_GRACE_MS = (24 / BlendshapeQueue.TARGET_FPS) * 1000;
|
|
397
773
|
//# sourceMappingURL=BlendshapeQueue.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BlendshapeQueue.js","sourceRoot":"","sources":["../../src/core/BlendshapeQueue.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"BlendshapeQueue.js","sourceRoot":"","sources":["../../src/core/BlendshapeQueue.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAkBH,MAAM,OAAO,eAAe;IA2B1B;;;OAGG;IACH,YACE,MAAyD,EACzD,MAAoB,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;QAhC9B,UAAK,GAAmB,EAAE,CAAC;QAC3B,0BAAqB,GAAG,IAAI,GAAG,EAAwB,CAAC;QACxD,0BAAqB,GAAG,IAAI,GAAG,EAAU,CAAC;QAC1C,2BAAsB,GAAG,IAAI,GAAG,EAAU,CAAC;QAC3C,oCAA+B,GAAG,IAAI,GAAG,EAAU,CAAC;QACpD,uBAAkB,GAAY,KAAK,CAAC,CAAC,6DAA6D;QAClG,gBAAW,GAAY,KAAK,CAAC,CAAC,8DAA8D;QAC5F,sBAAiB,GAAY,KAAK,CAAC;QAEnC,cAAS,GAAqB,IAAI,CAAC;QACnC,mBAAc,GAAW,CAAC,CAAC;QAC3B,gBAAW,GAAY,KAAK,CAAC,CAAC,wCAAwC;QACtE,uBAAkB,GAAW,CAAC,CAAC,CAAC,gCAAgC;QAChE,uBAAkB,GAAY,KAAK,CAAC,CAAC,8DAA8D;QACnG,sBAAiB,GAAY,KAAK,CAAC,CAAC,wGAAwG;QAC5I,gBAAW,GAAW,EAAE,CAAC;QACzB,oCAA+B,GAAY,KAAK,CAAC;QACjD,iCAA4B,GAAkB,IAAI,CAAC;QAiBzD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACjB,CAAC;IAED;;;;OAIG;IACH,QAAQ,CACN,WAAuB,EACvB,WAAoC,EAAE;QAEtC,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7B,OAAO;QACT,CAAC;QAED,sBAAsB;QACtB,wFAAwF;QACxF,oEAAoE;QACpE,0FAA0F;QAC1F,2FAA2F;QAC3F,0FAA0F;QAC1F,4FAA4F;QAC5F,MAAM,mBAAmB,GACvB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC;QAC5E,MAAM,oBAAoB,GACxB,IAAI,CAAC,iBAAiB;YACtB,IAAI,CAAC,SAAS,KAAK,IAAI;YACvB,mBAAmB,GAAG,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC;QAEzD,MAAM,kBAAkB,GACtB,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,WAAW,IAAI,oBAAoB,CAAC;QAEtE,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;QACpD,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,IAAI,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC1C,OAAO;YACT,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE,EAAE,CAAC;gBACnC,IAAI,CAAC,kBAAkB,EAAE,CAAC;oBACxB,OAAO;gBACT,CAAC;gBACD,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;YAC1D,CAAC;iBAAM,IAAI,IAAI,CAAC,+BAA+B,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC1D,IAAI,CAAC,0BAA0B,CAAC,YAAY,CAAC,CAAC;YAChD,CAAC;iBAAM,CAAC;gBACN,qEAAqE;gBACrE,qEAAqE;gBACrE,wEAAwE;gBACxE,MAAM,qBAAqB,GAAG,IAAI,CAAC,WAAW,CAAC;gBAC/C,IAAI,CAAC,8BAA8B,CACjC,IAAI,CAAC,qBAAqB,EAC1B,YAAY,CACb,CAAC;gBACF,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC;gBACtC,IAAI,qBAAqB,EAAE,CAAC;oBAC1B,IAAI,CAAC,+BAA+B,GAAG,IAAI,CAAC;oBAC5C,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;gBACjC,CAAC;YACH,CAAC;QACH,CAAC;aAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC/B,OAAO;QACT,CAAC;QAED,MAAM,kBAAkB,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;QAEtE,IACE,kBAAkB;YAClB,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC;YAC7B,QAAQ,CAAC,GAAI,GAAG,CAAC,EACjB,CAAC;YACD,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC,GAAI,CAAC;QACnC,CAAC;QAED,IAAI,CAAC,4BAA4B,GAAG,IAAI,CAAC;QAEzC,IAAI,kBAAkB,EAAE,CAAC;YACvB,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,QAAQ,CAAC,eAAgB,CAAC,CAAC;YAC9D,OAAO;QACT,CAAC;QAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5C,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IAEO,QAAQ,CAAC,KAA8B;QAC7C,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC;IACpE,CAAC;IAEO,gBAAgB,CACtB,WAAuB,EACvB,eAAuB;QAEvB,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC;QACxC,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;QAE1D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5C,MAAM,aAAa,GAAG,eAAe,GAAG,CAAC,CAAC;YAC1C,IACE,aAAa,GAAG,WAAW;gBAC3B,aAAa,GAAG,SAAS;gBACzB,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,aAAa,CAAC,EAC7C,CAAC;gBACD,SAAS;YACX,CAAC;YACD,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAC5B,aAAa,EACb,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAC9B,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,6BAA6B,EAAE,CAAC;IACvC,CAAC;IAEO,6BAA6B;QACnC,IAAI,cAAc,GAAG,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;QAC7D,OAAO,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC;YACtD,MAAM,KAAK,GAAG,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;YAC7D,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,MAAM;YACR,CAAC;YACD,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YAClD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACvB,cAAc,IAAI,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;IAEO,eAAe,CAAC,WAAoC,EAAE;QAC5D,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC;YACxB,OAAO,CAAC,IAAI,CAAC,KAAK,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;QAC3C,CAAC;QAED,IAAI,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;YAC/C,OAAO,CAAC,IAAI,CAAC,KAAK,QAAQ,CAAC,eAAe,EAAE,CAAC,CAAC;YAC9C,IAAI,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBACrC,OAAO,CAAC,IAAI,CAAC,KAAK,QAAQ,CAAC,eAAe,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;YACpE,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;IACtC,CAAC;IAEO,sBAAsB;QAC5B,OAAO,IAAI,CAAC,qBAAqB,CAAC,IAAI,GAAG,CAAC,CAAC;IAC7C,CAAC;IAEO,aAAa,CACnB,WAAoC,EAAE;QAEtC,OAAO,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IACtE,CAAC;IAEO,cAAc,CACpB,WAAoC,EAAE;QAEtC,OAAO,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,eAAe,CAAC;YAC/C,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC;YAChC,CAAC,CAAC,KAAK,QAAQ,CAAC,eAAe,MAAM,QAAQ,CAAC,KAAK,EAAE;YACrD,CAAC,CAAC,SAAS,CAAC;IAChB,CAAC;IAEO,SAAS,CAAC,WAAoC,EAAE;QACtD,OAAO,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,eAAe,CAAC;YAC/C,CAAC,CAAC,KAAK,QAAQ,CAAC,eAAe,EAAE;YACjC,CAAC,CAAC,SAAS,CAAC;IAChB,CAAC;IAEO,sBAAsB;QAC5B,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAC3D,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CACvB,CAAC;IACJ,CAAC;IAEO,uBAAuB;QAC7B,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAC3D,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CACtB,CAAC;IACJ,CAAC;IAEO,0BAA0B,CAChC,WAAoC,EAAE;QAEtC,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;QAC/C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE,EAAE,CAAC;YAC3D,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QACnD,IAAI,aAAa,IAAI,IAAI,CAAC,sBAAsB,EAAE,EAAE,CAAC;YACnD,OAAO,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QACvD,CAAC;QAED,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QACrD,IAAI,cAAc,IAAI,IAAI,CAAC,uBAAuB,EAAE,EAAE,CAAC;YACrD,OAAO,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QACxD,CAAC;QAED,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;IACxE,CAAC;IAEO,+BAA+B,CACrC,WAAoC,EAAE;QAEtC,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE,EAAE,CAAC;YACnC,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QACnD,MAAM,sBAAsB,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAC7D,IAAI,sBAAsB,IAAI,aAAa,EAAE,CAAC;YAC5C,OAAO,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QACvD,CAAC;QAED,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QACrD,MAAM,uBAAuB,GAAG,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAC/D,IAAI,cAAc,IAAI,uBAAuB,EAAE,CAAC;YAC9C,OAAO,CACL,cAAc,KAAK,SAAS;gBAC5B,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,cAAc,CAAC,CAC/C,CAAC;QACJ,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAC3C,OAAO,SAAS,KAAK,SAAS,IAAI,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC9E,CAAC;IAEO,0BAA0B,CAAC,OAAiB;QAClD,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;IACpE,CAAC;IAEO,sBAAsB,CAC5B,WAAoC,EAAE;QAEtC,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;QAC/C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QACnD,IAAI,aAAa,EAAE,CAAC;YAClB,IAAI,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC;gBACnD,OAAO,IAAI,CAAC;YACd,CAAC;YACD,IAAI,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC;gBAClD,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;QAED,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QACrD,IACE,cAAc,KAAK,SAAS;YAC5B,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,cAAc,CAAC,EAC/C,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IACE,aAAa,KAAK,SAAS;YAC3B,cAAc,KAAK,SAAS;YAC5B,IAAI,CAAC,+BAA+B,CAAC,GAAG,CAAC,cAAc,CAAC,EACxD,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAC3C,OAAO,CACL,SAAS,KAAK,SAAS;YACvB,CAAC,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,SAAS,CAAC;gBACzC,CAAC,aAAa,KAAK,SAAS;oBAC1B,IAAI,CAAC,+BAA+B,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAC1D,CAAC;IACJ,CAAC;IAEO,8BAA8B,CACpC,OAAyB,EACzB,cAAgC,EAAE;QAElC,IAAI,CAAC,sBAAsB,CACzB,IAAI,CAAC,sBAAsB,EAC3B,OAAO,EACP,WAAW,CACZ,CAAC;IACJ,CAAC;IAEO,uCAAuC,CAC7C,OAAyB,EACzB,cAAgC,EAAE;QAElC,IAAI,CAAC,sBAAsB,CACzB,IAAI,CAAC,+BAA+B,EACpC,OAAO,EACP,WAAW,CACZ,CAAC;IACJ,CAAC;IAEO,sBAAsB,CAC5B,MAAmB,EACnB,OAAyB,EACzB,cAAgC,EAAE;QAElC,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC;QAC3C,MAAM,eAAe,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CAChD,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,CACrC,CAAC;QACF,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACjC,OAAO;QACT,CAAC;QACD,eAAe,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;QACtD,OACE,MAAM,CAAC,IAAI;YACX,eAAe,CAAC,4BAA4B,EAC5C,CAAC;YACD,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;YAC/C,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,MAAM;YACR,CAAC;YACD,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IAEO,kBAAkB,CACxB,YAAsB,EACtB,mBAAmB,GAAG,KAAK;QAE3B,MAAM,WAAW,GAAG,mBAAmB,IAAI,IAAI,CAAC,WAAW,CAAC;QAC5D,IAAI,CAAC,qBAAqB,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC;QACnD,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;QAChB,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,CAAC;QACnC,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;QACxB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,4BAA4B,GAAG,IAAI,CAAC;QACzC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;QAC/B,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;QAC/B,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QACzB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,iBAAiB,GAAG,CAAC,WAAW,CAAC;QACtC,IAAI,CAAC,WAAW,GAAG,eAAe,CAAC,UAAU,CAAC;QAC9C,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,IAAI,CAAC,+BAA+B,GAAG,KAAK,CAAC;QAC/C,CAAC;IACH,CAAC;IAEO,kBAAkB;QACxB,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,CAAC;IACrC,CAAC;IAED;;;;OAIG;IACH,YAAY,CAAC,WAAoC,EAAE;QACjD,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;QACpD,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9B,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC;YAClC,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,CACL,IAAI,CAAC,sBAAsB,EAAE;YAC7B,CAAC,IAAI,CAAC,0BAA0B,CAAC,QAAQ,CAAC,CAC3C,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACH,cAAc,CAAC,WAAoC,EAAE;QACnD,OAAO,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC;IAC/C,CAAC;IAED;;;OAGG;IACH,WAAW,CAAC,WAAoC,EAAE;QAChD,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;QACpD,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9B,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,kBAAkB,GAAG,IAAI,CAAC,0BAA0B,CAAC,QAAQ,CAAC,CAAC;QACrE,MAAM,kBAAkB,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QAClE,MAAM,4BAA4B,GAChC,kBAAkB;YAClB,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,SAAS;YAC1C,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,SAAS,CAAC;QAEzC,IAAI,4BAA4B,EAAE,CAAC;YACjC,IAAI,CAAC,8BAA8B,CAAC,YAAY,CAAC,CAAC;YAClD,IAAI,CAAC,uCAAuC,CAC1C,kBAAkB,EAClB,YAAY,CACb,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,8BAA8B,CACjC,kBAAkB;gBAChB,CAAC,CAAC,CAAC,GAAG,YAAY,EAAE,GAAG,kBAAkB,CAAC;gBAC1C,CAAC,CAAC,YAAY,EAChB,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,kBAAkB,CAC7C,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACxB,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;QAChB,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,CAAC;QACnC,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;QACxB,IAAI,CAAC,4BAA4B,GAAG,IAAI,CAAC;QACzC,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QACzB,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;QAChC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAC9B,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;QAC/B,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,iBAAiB;QACf,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,qBAAqB,CAAC,IAAI,GAAG,CAAC,CAAC;IACtE,CAAC;IAED;;;OAGG;IACH,SAAS,CAAC,MAAwD;QAChE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,WAAW;QACT,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC;IACnC,CAAC;IAED;;;OAGG;IACH,SAAS;QACP,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED;;;;OAIG;IACH,QAAQ,CAAC,KAAa;QACpB,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YAC5C,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC;IAED;;;;;;OAMG;IACH,iBAAiB,CAAC,KAAa;QAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACnC,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QAExB,IAAI,KAAK,GAAG,GAAG,CAAC;QAEhB,6EAA6E;QAC7E,MAAM,mBAAmB,GAAG,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;QAExD,uEAAuE;QACvE,IAAI,mBAAmB,GAAG,EAAE,EAAE,CAAC;YAC7B,KAAK,GAAG,mBAAmB,GAAG,EAAE,CAAC;QACnC,CAAC;QAED,gEAAgE;QAChE,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;YAC1C,MAAM,iBAAiB,GAAG,KAAK,CAAC;YAEhC,4CAA4C;YAC5C,IAAI,iBAAiB,IAAI,eAAe,GAAG,EAAE,EAAE,CAAC;gBAC9C,MAAM,aAAa,GAAG,eAAe,GAAG,iBAAiB,CAAC;gBAC1D,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,aAAa,GAAG,EAAE,CAAC,CAAC;YAC9C,CAAC;QACH,CAAC;QACD,8DAA8D;aACzD,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACxB,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC;YACrD,MAAM,aAAa,GAAG,WAAW,GAAG,mBAAmB,CAAC;YAExD,IAAI,aAAa,IAAI,EAAE,EAAE,CAAC;gBACxB,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,aAAa,GAAG,EAAE,CAAC,CAAC;YAC9C,CAAC;QACH,CAAC;QAED,kCAAkC;QAClC,IAAI,KAAK,GAAG,GAAG,EAAE,CAAC;YAChB,MAAM,UAAU,GAAG,IAAI,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAClD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACtC,UAAU,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;YACnC,CAAC;YACD,OAAO,UAAU,CAAC;QACpB,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;OAGG;IACH,aAAa,CAAC,KAAa;QACzB,IAAI,KAAK,IAAI,CAAC;YAAE,OAAO;QACvB,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC1D,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC;QACrC,IAAI,CAAC,cAAc,IAAI,cAAc,CAAC;QACtC,IAAI,CAAC,6BAA6B,EAAE,CAAC;IACvC,CAAC;IAED;;OAEG;IACH,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,SAAS;QACP,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,oBAAoB;QAClB,OAAO,IAAI,CAAC,kBAAkB,CAAC;IACjC,CAAC;IAED;;;;;;;;;;OAUG;IACH,mBAAmB;QACjB,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC5B,OAAO,KAAK,CAAC;QACf,CAAC;QAED,2EAA2E;QAC3E,0EAA0E;QAC1E,yEAAyE;QACzE,0EAA0E;QAC1E,2EAA2E;QAC3E,wCAAwC;QACxC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,OAAO,KAAK,CAAC;QACf,CAAC;QAED,6BAA6B;QAC7B,wDAAwD;QACxD,MAAM,iBAAiB,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAErD,6EAA6E;QAC7E,wEAAwE;QACxE,6EAA6E;QAC7E,6DAA6D;QAC7D,MAAM,wBAAwB,GAAG,IAAI,CAAC,2BAA2B,EAAE,CAAC;QACpE,MAAM,0BAA0B,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QAErD,IAAI,CAAC,0BAA0B,IAAI,CAAC,wBAAwB,EAAE,CAAC;YAC7D,IAAI,CAAC,4BAA4B,GAAG,IAAI,CAAC;QAC3C,CAAC;aAAM,IAAI,IAAI,CAAC,sBAAsB,EAAE,EAAE,CAAC;YACzC,IAAI,IAAI,CAAC,4BAA4B,KAAK,IAAI,EAAE,CAAC;gBAC/C,IAAI,CAAC,4BAA4B,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBAC/C,OAAO,KAAK,CAAC;YACf,CAAC;YACD,IACE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,4BAA4B;gBAC9C,eAAe,CAAC,8BAA8B,EAC9C,CAAC;gBACD,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;QAED,OAAO,iBAAiB,IAAI,0BAA0B,CAAC;IACzD,CAAC;IAED;;;;;;;OAOG;IACH,oBAAoB;QAClB,OAAO,IAAI,CAAC,iBAAiB,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC;IAC3D,CAAC;IAED;;;OAGG;IACH,iBAAiB;QACf,IACE,IAAI,CAAC,sBAAsB,EAAE;YAC7B,CAAC,IAAI,CAAC,iBAAiB,EAAE,IAAI,IAAI,CAAC,2BAA2B,EAAE,CAAC,EAChE,CAAC;YACD,IAAI,CAAC,kBAAkB,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC;YAClD,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;YACzB,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;YACzB,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;YAC9B,IAAI,CAAC,+BAA+B,GAAG,KAAK,CAAC;YAC7C,OAAO;QACT,CAAC;QAED,uDAAuD;QACvD,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;QAChB,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,CAAC;QACnC,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QAChE,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;QAC/B,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,CAAC,kCAAkC;QAC5D,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;QAC/B,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,2CAA2C;QACpE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,kBAAkB;QACzC,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,CAAC,0BAA0B;QACpD,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC;QAC5B,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAC,2EAA2E;QAC1G,IAAI,CAAC,WAAW,GAAG,eAAe,CAAC,UAAU,CAAC;QAC9C,IAAI,CAAC,+BAA+B,GAAG,KAAK,CAAC;QAC7C,IAAI,CAAC,4BAA4B,GAAG,IAAI,CAAC;IAC3C,CAAC;IAED;;;OAGG;IACH,gBAAgB;QACd,oFAAoF;QACpF,kFAAkF;QAClF,uFAAuF;QACvF,MAAM,kBAAkB,GACtB,IAAI,CAAC,iBAAiB;YACtB,IAAI,CAAC,iBAAiB;YACtB,IAAI,CAAC,sBAAsB,EAAE;YAC7B,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC3B,IAAI,IAAI,CAAC,iBAAiB,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAClD,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC,CAAC,sDAAsD;QACtF,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,eAAe;QACb,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;IAC3B,CAAC;IAED;;;OAGG;IACH,aAAa;QACX,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED;;;OAGG;IACH,sCAAsC;QACpC,MAAM,GAAG,GAAG,IAAI,CAAC,+BAA+B,CAAC;QACjD,IAAI,CAAC,+BAA+B,GAAG,KAAK,CAAC;QAC7C,OAAO,GAAG,CAAC;IACb,CAAC;IAED;;;;OAIG;IACH,eAAe,CACb,KAAiB,EACjB,WAAoC,EAAE;QAEtC,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;QACpD,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,IAAI,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC1C,OAAO;YACT,CAAC;YACD,IACE,IAAI,CAAC,sBAAsB,EAAE;gBAC7B,CAAC,IAAI,CAAC,0BAA0B,CAAC,QAAQ,CAAC,EAC1C,CAAC;gBACD,OAAO;YACT,CAAC;YACD,IAAI,IAAI,CAAC,sBAAsB,EAAE,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBAC7D,IAAI,CAAC,0BAA0B,CAAC,YAAY,CAAC,CAAC;YAChD,CAAC;QACH,CAAC;QAED,2EAA2E;QAC3E,gFAAgF;QAChF,mFAAmF;QACnF,MAAM,yBAAyB,GAC7B,YAAY,CAAC,MAAM,GAAG,CAAC;YACvB,IAAI,CAAC,sBAAsB,EAAE;YAC7B,IAAI,CAAC,0BAA0B,CAAC,QAAQ,CAAC,CAAC;QAC5C,IAAI,IAAI,CAAC,iBAAiB,IAAI,CAAC,yBAAyB,EAAE,CAAC;YACzD,OAAO;QACT,CAAC;QACD,mDAAmD;QACnD,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;QAChC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAC9B,IAAI,CAAC,4BAA4B,GAAG,IAAI,CAAC;QACzC,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACzB,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,SAAS;QACP,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QAChE,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;QAClE,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC,CAAC,4BAA4B;QAC7D,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,CAAC,gDAAgD;QAC1E,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAC,kGAAkG;QACjI,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAC,iDAAiD;QACjF,IAAI,CAAC,+BAA+B,GAAG,KAAK,CAAC;QAC7C,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,CAAC;QACnC,IAAI,CAAC,4BAA4B,GAAG,IAAI,CAAC;QAEzC,yEAAyE;QACzE,wEAAwE;QACxE,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;IAClB,CAAC;IAED;;;;;OAKG;IACH,0BAA0B;QACxB,MAAM,GAAG,GAAG,IAAI,CAAC,kBAAkB,CAAC;QACpC,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;QAChC,OAAO,GAAG,CAAC;IACb,CAAC;IAED;;OAEG;IACH,YAAY;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED;;OAEG;IACH,iBAAiB;QACf,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,cAAc;QACZ,OAAO,IAAI,CAAC,WAAW,IAAI,eAAe,CAAC,UAAU,CAAC;IACxD,CAAC;IAED;;;OAGG;IACH,aAAa;QACX,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE,OAAO,IAAI,CAAC;QAEjC,MAAM,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC;QAEtE,2BAA2B;QAC3B,MAAM,UAAU,GAAG,uBAAuB,GAAG,iBAAiB,CAAC;QAE/D,6BAA6B;QAC7B,MAAM,eAAe,GAAG,iBAAiB,GAAG,IAAI,CAAC,cAAc,CAAC;QAEhE,sBAAsB;QACtB,MAAM,UAAU,GAAG,eAAe,GAAG,UAAU,CAAC;QAEhD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,mBAAmB;QACjB,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE,OAAO,KAAK,CAAC;QAClC,OAAO,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC;IACjE,CAAC;IAEO,2BAA2B;QACjC,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE,OAAO,KAAK,CAAC;QAClC,MAAM,wBAAwB,GAC5B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC;QAC5E,OAAO,wBAAwB,GAAG,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC;IACrE,CAAC;IAED;;;OAGG;IACH,KAAK;QACH,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;QAChB,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,CAAC;QACnC,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QAChE,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;QAChC,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QACzB,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;QAC/B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;QACxB,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;QAChC,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;QAC/B,IAAI,CAAC,WAAW,GAAG,eAAe,CAAC,UAAU,CAAC;QAC9C,IAAI,CAAC,+BAA+B,GAAG,KAAK,CAAC;QAC7C,IAAI,CAAC,4BAA4B,GAAG,IAAI,CAAC;IAC3C,CAAC;IAED;;;;OAIG;IACH,cAAc,CAAC,WAAmB;QAIhC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,uEAAuE;QACvE,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;QAEnE,uBAAuB;QACvB,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAEjE,OAAO;YACL,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC;YAC/B,UAAU,EAAE,YAAY;SACzB,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,YAAY;QAaV,OAAO;YACL,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM;YAC7B,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;YAC3C,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;YACzC,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,gBAAgB,EAAE,IAAI,CAAC,iBAAiB;YACxC,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,UAAU,EAAE,IAAI,CAAC,aAAa,EAAE;YAChC,qBAAqB,EAAE,IAAI,CAAC,qBAAqB,CAAC,IAAI;YACtD,WAAW,EAAE,IAAI,CAAC,cAAc,EAAE;SACnC,CAAC;IACJ,CAAC;;AA95BD,YAAY;AACY,0BAAU,GAAG,EAAE,AAAL,CAAM;AAChB,4CAA4B,GAAG,EAAE,AAAL,CAAM;AAClC,8CAA8B,GACpD,CAAC,EAAE,GAAG,eAAe,CAAC,UAAU,CAAC,GAAG,IAAI,AADY,CACX"}
|