@relaymessenger/livekit 0.1.0-staging.1 → 0.1.0-staging.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +28 -4
- package/dist/engine-werift.d.ts +2 -0
- package/dist/engine-werift.d.ts.map +1 -1
- package/dist/engine-werift.js +109 -7
- package/dist/engine-werift.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/livekit.d.ts +11 -1
- package/dist/livekit.d.ts.map +1 -1
- package/dist/livekit.js +56 -25
- package/dist/livekit.js.map +1 -1
- package/dist/transport.d.ts +64 -3
- package/dist/transport.d.ts.map +1 -1
- package/dist/transport.js +197 -14
- package/dist/transport.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -40,9 +40,19 @@ async function answerCall(callId: string, session: AgentSession) {
|
|
|
40
40
|
|
|
41
41
|
`RelayLiveKitCall.connect()` does not resolve until the WebRTC media peer has
|
|
42
42
|
reached `connected`. `RelayAudioInput` converts the remote participant's PCM16
|
|
43
|
-
audio to LiveKit frames.
|
|
44
|
-
|
|
45
|
-
|
|
43
|
+
audio to LiveKit frames.
|
|
44
|
+
|
|
45
|
+
`RelayAudioOutput` has the shape of LiveKit's own `ParticipantAudioOutput`:
|
|
46
|
+
`captureFrame()` hands the frame to the transport and returns at once, so the
|
|
47
|
+
AgentSession may push a whole reply faster than real time; the engine's 20 ms
|
|
48
|
+
pump paces the wire. `flush()` closes the segment and reports
|
|
49
|
+
`playbackFinished` only after the transport has drained. `clearBuffer()` drops
|
|
50
|
+
audio that has not reached the wire and reports the segment as interrupted at
|
|
51
|
+
the position that actually played.
|
|
52
|
+
|
|
53
|
+
On the transport, `writeAudio()` resolves once its 10 ms slices are queued,
|
|
54
|
+
`queuedAudioMs()` is what has not left yet, and `waitForPlayout()` resolves when
|
|
55
|
+
the queue is empty and the pump is idle (early on `clearAudio()`).
|
|
46
56
|
|
|
47
57
|
Use `setMuted(true)` to publish participant mute state, `end()` to end the Relay
|
|
48
58
|
Call, and `close()` for local cleanup. If the signaling connection is replaced,
|
|
@@ -70,6 +80,7 @@ await transport.writeAudio({
|
|
|
70
80
|
sampleRate: 48_000,
|
|
71
81
|
channelCount: 1,
|
|
72
82
|
});
|
|
83
|
+
await transport.waitForPlayout();
|
|
73
84
|
```
|
|
74
85
|
|
|
75
86
|
## ICE servers, TURN, and diagnostics
|
|
@@ -108,7 +119,20 @@ The same facts are available at any time from `call.diagnostics()` or
|
|
|
108
119
|
`transport.diagnostics()`: local candidate counts by type, the remote
|
|
109
120
|
candidates' transport and port (never their address), the ICE gathering, ICE
|
|
110
121
|
connection and peer connection state changes with their offsets from
|
|
111
|
-
`connect()`,
|
|
122
|
+
`connect()`, packet counts in both directions (`inbound`: RTP received, Opus
|
|
123
|
+
decode failures, PCM frames delivered, first and last packet offsets, packets
|
|
124
|
+
in the last 5 s; `outbound`: PCM frames accepted, Opus packets, RTP written,
|
|
125
|
+
first and last packet offsets, packets in the last 5 s, paced queue size,
|
|
126
|
+
pacer state), the room frames seen (`roomState` count, pull `offer` count,
|
|
127
|
+
`ended` reason, `error` messages), and the one-line `summary`, for example
|
|
128
|
+
`…; in: 1234 rtp, 0 bad, 1234 frames, first 0.9s last 41.2s, 250/5s; out: 2050 frames, 2050 opus, 2050 rtp, first 1.1s last 41.0s, 250/5s, queue 0, pacer alive; room: 3 roomState, 1 offer`.
|
|
129
|
+
Packet counts come from the `werift` engine; `wrtc` reports zero packets and
|
|
130
|
+
`pacer n/a`.
|
|
131
|
+
|
|
132
|
+
`onWarning` is called once per call, with the summary, when outbound audio is
|
|
133
|
+
queued but no RTP packet has been written for 2 s while media is connected.
|
|
134
|
+
Nothing is restarted; the callback exists so the failing direction is named in
|
|
135
|
+
the agent's logs.
|
|
112
136
|
|
|
113
137
|
`RelayCallTransport` consumes the SDK's `CallRoom`; it does not duplicate the
|
|
114
138
|
room protocol. The default engine is `werift` (pure TypeScript WebRTC) with
|
package/dist/engine-werift.d.ts
CHANGED
|
@@ -6,6 +6,8 @@ export declare const WERIFT_CHANNEL_COUNT = 2;
|
|
|
6
6
|
/** One RTP packet carries 20 ms: 960 frames at 48 kHz, timestamp advances by 960. */
|
|
7
7
|
export declare const WERIFT_PACKET_MS = 20;
|
|
8
8
|
export type WeriftAudioSourceData = Parameters<RelayAudioSourceLike["onData"]>[0];
|
|
9
|
+
/** Packets counted for `diagnostics()`; the recent window is the last 5 s. */
|
|
10
|
+
export declare const STATS_WINDOW_MS = 5000;
|
|
9
11
|
/** Convert any PCM16 frame to interleaved 48 kHz stereo by linear interpolation. */
|
|
10
12
|
export declare const toWireFormat: (data: {
|
|
11
13
|
samples: Int16Array;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine-werift.d.ts","sourceRoot":"","sources":["../src/engine-werift.ts"],"names":[],"mappings":"AAiCA,OAAO,EAGL,iBAAiB,EAIlB,MAAM,QAAQ,CAAC;AAChB,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"engine-werift.d.ts","sourceRoot":"","sources":["../src/engine-werift.ts"],"names":[],"mappings":"AAiCA,OAAO,EAGL,iBAAiB,EAIlB,MAAM,QAAQ,CAAC;AAChB,OAAO,KAAK,EAGV,oBAAoB,EAGpB,yBAAyB,EAEzB,kBAAkB,EACnB,MAAM,gBAAgB,CAAC;AAExB,sGAAsG;AACtG,eAAO,MAAM,kBAAkB,QAAS,CAAC;AACzC,eAAO,MAAM,oBAAoB,IAAI,CAAC;AACtC,qFAAqF;AACrF,eAAO,MAAM,gBAAgB,KAAK,CAAC;AAMnC,MAAM,MAAM,qBAAqB,GAAG,UAAU,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAElF,8EAA8E;AAC9E,eAAO,MAAM,eAAe,OAAQ,CAAC;AA8BrC,oFAAoF;AACpF,eAAO,MAAM,YAAY,GAAI,MAAM;IACjC,OAAO,EAAE,UAAU,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACtB,KAAG,UAwBH,CAAC;AA0MF,eAAO,MAAM,0BAA0B,GACrC,SAAQ,yBAAyE,KAChF,iBAcC,CAAC;AAEL,eAAO,MAAM,yBAAyB,QAAO,kBAI3C,CAAC"}
|
package/dist/engine-werift.js
CHANGED
|
@@ -41,6 +41,34 @@ const PACKET_FRAMES = (WERIFT_SAMPLE_RATE * WERIFT_PACKET_MS) / 1000;
|
|
|
41
41
|
const PACKET_SAMPLES = PACKET_FRAMES * WERIFT_CHANNEL_COUNT;
|
|
42
42
|
/** Dynamic payload type; werift's sender replaces it with the negotiated one. */
|
|
43
43
|
const LOCAL_PAYLOAD_TYPE = 111;
|
|
44
|
+
/** Packets counted for `diagnostics()`; the recent window is the last 5 s. */
|
|
45
|
+
export const STATS_WINDOW_MS = 5_000;
|
|
46
|
+
/** Monotone packet counter with first/last epoch timestamps and a 5 s window. */
|
|
47
|
+
class PacketClock {
|
|
48
|
+
count = 0;
|
|
49
|
+
firstAt;
|
|
50
|
+
lastAt;
|
|
51
|
+
#recent = [];
|
|
52
|
+
mark(now = Date.now()) {
|
|
53
|
+
this.count += 1;
|
|
54
|
+
this.firstAt ??= now;
|
|
55
|
+
this.lastAt = now;
|
|
56
|
+
this.#recent.push(now);
|
|
57
|
+
this.#prune(now);
|
|
58
|
+
}
|
|
59
|
+
recent(now = Date.now()) {
|
|
60
|
+
this.#prune(now);
|
|
61
|
+
return this.#recent.length;
|
|
62
|
+
}
|
|
63
|
+
#prune(now) {
|
|
64
|
+
const floor = now - STATS_WINDOW_MS;
|
|
65
|
+
let drop = 0;
|
|
66
|
+
while (drop < this.#recent.length && this.#recent[drop] < floor)
|
|
67
|
+
drop += 1;
|
|
68
|
+
if (drop)
|
|
69
|
+
this.#recent.splice(0, drop);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
44
72
|
/** Convert any PCM16 frame to interleaved 48 kHz stereo by linear interpolation. */
|
|
45
73
|
export const toWireFormat = (data) => {
|
|
46
74
|
const { samples, sampleRate, channelCount } = data;
|
|
@@ -70,7 +98,10 @@ export const toWireFormat = (data) => {
|
|
|
70
98
|
/**
|
|
71
99
|
* PCM16 in, paced 20 ms Opus RTP out. Frames are accumulated into whole
|
|
72
100
|
* packets; a timer drains one packet every 20 ms so the wire sees a steady
|
|
73
|
-
* cadence regardless of how the adapter chunks its writes.
|
|
101
|
+
* cadence regardless of how the adapter chunks its writes. Adapters may push
|
|
102
|
+
* far ahead of real time: `queuedMs()` is what has not left yet and
|
|
103
|
+
* `waitForDrain()` resolves once the queue is empty and the pump has stopped
|
|
104
|
+
* (LiveKit's `AudioSource.queuedDuration` / `waitForPlayout` shape).
|
|
74
105
|
*/
|
|
75
106
|
class WeriftAudioSource {
|
|
76
107
|
#encoder = new Encoder({
|
|
@@ -80,24 +111,52 @@ class WeriftAudioSource {
|
|
|
80
111
|
});
|
|
81
112
|
#track = new MediaStreamTrack({ kind: "audio", id: "microphone", streamId: "relay-call" });
|
|
82
113
|
#packets = [];
|
|
114
|
+
#rtp = new PacketClock();
|
|
115
|
+
#opusPackets = 0;
|
|
83
116
|
#pending = new Int16Array(0);
|
|
84
117
|
#sequenceNumber = 1;
|
|
85
118
|
#timestamp = 0;
|
|
86
119
|
#first = true;
|
|
87
120
|
#pump;
|
|
88
121
|
#stopped = false;
|
|
122
|
+
#drainWaiters = new Set();
|
|
123
|
+
stats() {
|
|
124
|
+
return {
|
|
125
|
+
opusPackets: this.#opusPackets,
|
|
126
|
+
rtpPackets: this.#rtp.count,
|
|
127
|
+
firstRtpAt: this.#rtp.firstAt,
|
|
128
|
+
lastRtpAt: this.#rtp.lastAt,
|
|
129
|
+
recentRtpPackets: this.#rtp.recent(),
|
|
130
|
+
queued: this.#packets.length,
|
|
131
|
+
pacerAlive: this.#pump !== undefined,
|
|
132
|
+
};
|
|
133
|
+
}
|
|
89
134
|
createTrack() {
|
|
90
135
|
const track = this.#track;
|
|
91
136
|
const stop = track.stop;
|
|
92
137
|
track.stop = () => {
|
|
93
138
|
this.#stopped = true;
|
|
94
|
-
this
|
|
95
|
-
this.#pending = new Int16Array(0);
|
|
96
|
-
this.#stopPump();
|
|
139
|
+
this.clear();
|
|
97
140
|
stop();
|
|
98
141
|
};
|
|
99
142
|
return track;
|
|
100
143
|
}
|
|
144
|
+
queuedMs() {
|
|
145
|
+
return this.#packets.length * WERIFT_PACKET_MS
|
|
146
|
+
+ (this.#pending.length / WERIFT_CHANNEL_COUNT / WERIFT_SAMPLE_RATE) * 1_000;
|
|
147
|
+
}
|
|
148
|
+
waitForDrain() {
|
|
149
|
+
this.#flushPending();
|
|
150
|
+
if (this.#drained())
|
|
151
|
+
return Promise.resolve();
|
|
152
|
+
return new Promise((resolve) => this.#drainWaiters.add(resolve));
|
|
153
|
+
}
|
|
154
|
+
clear() {
|
|
155
|
+
this.#packets.length = 0;
|
|
156
|
+
this.#pending = new Int16Array(0);
|
|
157
|
+
this.#stopPump();
|
|
158
|
+
this.#notifyDrained();
|
|
159
|
+
}
|
|
101
160
|
onData(data) {
|
|
102
161
|
if (this.#stopped)
|
|
103
162
|
return;
|
|
@@ -109,21 +168,50 @@ class WeriftAudioSource {
|
|
|
109
168
|
while (merged.length - offset >= PACKET_SAMPLES) {
|
|
110
169
|
const frame = merged.subarray(offset, offset + PACKET_SAMPLES);
|
|
111
170
|
this.#packets.push(Buffer.from(this.#encoder.encode(frame)));
|
|
171
|
+
this.#opusPackets += 1;
|
|
112
172
|
offset += PACKET_SAMPLES;
|
|
113
173
|
}
|
|
114
174
|
this.#pending = merged.slice(offset);
|
|
115
175
|
this.#startPump();
|
|
116
176
|
}
|
|
177
|
+
/** Pad a sub-packet remainder with silence so the tail of a segment reaches the wire. */
|
|
178
|
+
#flushPending() {
|
|
179
|
+
if (this.#stopped || this.#pending.length === 0)
|
|
180
|
+
return;
|
|
181
|
+
const padded = new Int16Array(PACKET_SAMPLES);
|
|
182
|
+
padded.set(this.#pending);
|
|
183
|
+
this.#pending = new Int16Array(0);
|
|
184
|
+
this.#packets.push(Buffer.from(this.#encoder.encode(padded)));
|
|
185
|
+
this.#opusPackets += 1;
|
|
186
|
+
this.#startPump();
|
|
187
|
+
}
|
|
188
|
+
#drained() {
|
|
189
|
+
return this.#packets.length === 0 && this.#pending.length === 0 && this.#pump === undefined;
|
|
190
|
+
}
|
|
191
|
+
#notifyDrained() {
|
|
192
|
+
if (!this.#drained())
|
|
193
|
+
return;
|
|
194
|
+
for (const resolve of [...this.#drainWaiters]) {
|
|
195
|
+
this.#drainWaiters.delete(resolve);
|
|
196
|
+
resolve();
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* The first packet of a run leaves at once; every later one waits for the
|
|
201
|
+
* 20 ms tick, so a burst pushed faster than real time reaches the wire at
|
|
202
|
+
* packet cadence. The interval stops one tick after the queue empties, which
|
|
203
|
+
* is when the last packet has played.
|
|
204
|
+
*/
|
|
117
205
|
#startPump() {
|
|
118
206
|
if (this.#pump || this.#packets.length === 0)
|
|
119
207
|
return;
|
|
120
208
|
this.#sendNext();
|
|
121
|
-
if (this.#packets.length === 0)
|
|
122
|
-
return;
|
|
123
209
|
this.#pump = setInterval(() => {
|
|
124
210
|
this.#sendNext();
|
|
125
|
-
if (this.#packets.length === 0)
|
|
211
|
+
if (this.#packets.length === 0) {
|
|
126
212
|
this.#stopPump();
|
|
213
|
+
this.#notifyDrained();
|
|
214
|
+
}
|
|
127
215
|
}, WERIFT_PACKET_MS);
|
|
128
216
|
this.#pump.unref?.();
|
|
129
217
|
}
|
|
@@ -148,15 +236,28 @@ class WeriftAudioSource {
|
|
|
148
236
|
this.#sequenceNumber = (this.#sequenceNumber + 1) & 0xffff;
|
|
149
237
|
this.#timestamp = (this.#timestamp + PACKET_FRAMES) >>> 0;
|
|
150
238
|
this.#track.writeRtp(new RtpPacket(header, payload));
|
|
239
|
+
this.#rtp.mark();
|
|
151
240
|
}
|
|
152
241
|
}
|
|
153
242
|
/** Opus RTP in, PCM16 (48 kHz stereo) out, one `ondata` per packet. */
|
|
154
243
|
class WeriftAudioSink {
|
|
155
244
|
ondata = null;
|
|
156
245
|
#decoder = new Decoder({ channels: WERIFT_CHANNEL_COUNT, sample_rate: WERIFT_SAMPLE_RATE });
|
|
246
|
+
#rtp = new PacketClock();
|
|
247
|
+
#decodeFailures = 0;
|
|
157
248
|
#unsubscribe;
|
|
249
|
+
stats() {
|
|
250
|
+
return {
|
|
251
|
+
rtpPackets: this.#rtp.count,
|
|
252
|
+
decodeFailures: this.#decodeFailures,
|
|
253
|
+
firstRtpAt: this.#rtp.firstAt,
|
|
254
|
+
lastRtpAt: this.#rtp.lastAt,
|
|
255
|
+
recentRtpPackets: this.#rtp.recent(),
|
|
256
|
+
};
|
|
257
|
+
}
|
|
158
258
|
constructor(track) {
|
|
159
259
|
const { unSubscribe } = track.onReceiveRtp.subscribe((rtp) => {
|
|
260
|
+
this.#rtp.mark();
|
|
160
261
|
const handler = this.ondata;
|
|
161
262
|
if (!handler || !rtp.payload?.length)
|
|
162
263
|
return;
|
|
@@ -166,6 +267,7 @@ class WeriftAudioSink {
|
|
|
166
267
|
bytes = this.#decoder.decode(packet.payload);
|
|
167
268
|
}
|
|
168
269
|
catch {
|
|
270
|
+
this.#decodeFailures += 1;
|
|
169
271
|
return;
|
|
170
272
|
}
|
|
171
273
|
const samples = new Int16Array(bytes.byteLength >> 1);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine-werift.js","sourceRoot":"","sources":["../src/engine-werift.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,iBAAiB,EACjB,qBAAqB,EACrB,SAAS,EACT,SAAS,GACV,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"engine-werift.js","sourceRoot":"","sources":["../src/engine-werift.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export { RelayAudioInput, RelayAudioOutput, RelayLiveKitCall, createRelayLiveKitAudio, type RelayLiveKitAudio, type RelayLiveKitAudioOptions, type RelayLiveKitConnectOptions, } from "./livekit.js";
|
|
2
|
-
export { RelayCallTransport, RelayCallTransportError, type RelayAudioFrame, type RelayCallEngine, type RelayCallIceDiagnostics, type RelayCallTransportCloseEvent, type RelayCallTransportOptions, type RelayIceServer, type RelayIceTransportPolicy, } from "./transport.js";
|
|
2
|
+
export { RelayCallTransport, RelayCallTransportError, type RelayAudioFrame, type RelayCallEngine, type RelayCallIceDiagnostics, type RelayCallInboundDiagnostics, type RelayCallOutboundDiagnostics, type RelayCallRoomDiagnostics, type RelayCallTransportCloseEvent, type RelayCallTransportOptions, type RelayIceServer, type RelayIceTransportPolicy, } from "./transport.js";
|
|
3
3
|
export { createWeriftWebRTCFactory } from "./engine-werift.js";
|
|
4
4
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EAChB,uBAAuB,EACvB,KAAK,iBAAiB,EACtB,KAAK,wBAAwB,EAC7B,KAAK,0BAA0B,GAChC,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,kBAAkB,EAClB,uBAAuB,EACvB,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,uBAAuB,EAC5B,KAAK,4BAA4B,EACjC,KAAK,yBAAyB,EAC9B,KAAK,cAAc,EACnB,KAAK,uBAAuB,GAC7B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EAChB,uBAAuB,EACvB,KAAK,iBAAiB,EACtB,KAAK,wBAAwB,EAC7B,KAAK,0BAA0B,GAChC,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,kBAAkB,EAClB,uBAAuB,EACvB,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,uBAAuB,EAC5B,KAAK,2BAA2B,EAChC,KAAK,4BAA4B,EACjC,KAAK,wBAAwB,EAC7B,KAAK,4BAA4B,EACjC,KAAK,yBAAyB,EAC9B,KAAK,cAAc,EACnB,KAAK,uBAAuB,GAC7B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC"}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EAChB,uBAAuB,GAIxB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,kBAAkB,EAClB,uBAAuB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EAChB,uBAAuB,GAIxB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,kBAAkB,EAClB,uBAAuB,GAWxB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC"}
|
package/dist/livekit.d.ts
CHANGED
|
@@ -10,11 +10,21 @@ export declare class RelayAudioInput extends AudioInput {
|
|
|
10
10
|
setAttached(attached: boolean): void;
|
|
11
11
|
close(): Promise<void>;
|
|
12
12
|
}
|
|
13
|
-
/**
|
|
13
|
+
/**
|
|
14
|
+
* LiveKit Agents output that publishes TTS PCM to the Relay participant.
|
|
15
|
+
*
|
|
16
|
+
* Shape copied from `@livekit/agents` `ParticipantAudioOutput`
|
|
17
|
+
* (dist/voice/room_io/_output.js): `captureFrame` hands the frame to the
|
|
18
|
+
* transport and returns without waiting for playout, `flush()` starts a playout
|
|
19
|
+
* task that reports `onPlaybackFinished` only once the transport has drained,
|
|
20
|
+
* and `clearBuffer()` resolves the interruption future so that task reports
|
|
21
|
+
* `interrupted: true` with the position actually played.
|
|
22
|
+
*/
|
|
14
23
|
export declare class RelayAudioOutput extends AudioOutput {
|
|
15
24
|
#private;
|
|
16
25
|
constructor(transport: RelayCallTransport, sampleRate?: number);
|
|
17
26
|
captureFrame(frame: AudioFrame): Promise<void>;
|
|
27
|
+
/** Mark the segment complete; `onPlaybackFinished` fires once the transport has drained. */
|
|
18
28
|
flush(): void;
|
|
19
29
|
clearBuffer(): void;
|
|
20
30
|
close(): void;
|
package/dist/livekit.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"livekit.d.ts","sourceRoot":"","sources":["../src/livekit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,
|
|
1
|
+
{"version":3,"file":"livekit.d.ts","sourceRoot":"","sources":["../src/livekit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAU,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACrF,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,OAAO,KAAK,KAAK,MAAM,qBAAqB,CAAC;AAC7C,OAAO,KAAK,EAAY,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACrE,OAAO,EACL,kBAAkB,EAElB,KAAK,uBAAuB,EAE5B,KAAK,cAAc,EACnB,KAAK,uBAAuB,EAE7B,MAAM,gBAAgB,CAAC;AAExB,kFAAkF;AAClF,qBAAa,eAAgB,SAAQ,UAAU;;gBAOjC,SAAS,EAAE,kBAAkB;IAmBhC,WAAW,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI;IAI9B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAOtC;AAED;;;;;;;;;GASG;AACH,qBAAa,gBAAiB,SAAQ,WAAW;;gBAWnC,SAAS,EAAE,kBAAkB,EAAE,UAAU,SAAS;IAK/C,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAoB7D,4FAA4F;IACnF,KAAK,IAAI,IAAI;IAWb,WAAW,IAAI,IAAI;IAS5B,KAAK,IAAI,IAAI;CAmBd;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,eAAe,CAAC;IACvB,MAAM,EAAE,gBAAgB,CAAC;CAC1B;AAED,MAAM,WAAW,wBAAwB;IACvC,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,iFAAiF;AACjF,eAAO,MAAM,uBAAuB,GAClC,WAAW,kBAAkB,EAC7B,UAAS,wBAA6B,KACrC,iBAGD,CAAC;AAEH,MAAM,WAAW,0BAA2B,SAAQ,wBAAwB;IAC1E,KAAK,EAAE,KAAK,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,eAAe,CAAC;IAKvB,2EAA2E;IAC3E,UAAU,CAAC,EAAE,cAAc,EAAE,CAAC;IAC9B,kDAAkD;IAClD,kBAAkB,CAAC,EAAE,uBAAuB,CAAC;IAG7C,wEAAwE;IACxE,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,+CAA+C;IAC/C,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,KAAK,uBAAuB,GAAG,IAAI,CAAC,YAAY,EAAE,OAAO,GAAG,QAAQ,CAAC,CAAC;AAEtE;;;;GAIG;AACH,qBAAa,gBAAgB;;IAC3B,QAAQ,CAAC,SAAS,EAAE,kBAAkB,CAAC;IACvC,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;IAIlC,OAAO;WAMM,OAAO,CAAC,OAAO,EAAE,0BAA0B,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAwBpF,MAAM,CAAC,OAAO,EAAE,uBAAuB,GAAG,IAAI;IAQ9C,MAAM,IAAI,IAAI;IAOd,4FAA4F;IAC5F,WAAW,IAAI,uBAAuB;IAItC,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAI9B,GAAG,IAAI,IAAI;IAIL,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAQ7B"}
|
package/dist/livekit.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AudioInput, AudioOutput } from "@livekit/agents";
|
|
1
|
+
import { AudioInput, AudioOutput, Future } from "@livekit/agents";
|
|
2
2
|
import { AudioFrame } from "@livekit/rtc-node";
|
|
3
3
|
import { TransformStream } from "node:stream/web";
|
|
4
4
|
import { RelayCallTransport, } from "./transport.js";
|
|
@@ -35,12 +35,25 @@ export class RelayAudioInput extends AudioInput {
|
|
|
35
35
|
await super.close();
|
|
36
36
|
}
|
|
37
37
|
}
|
|
38
|
-
/**
|
|
38
|
+
/**
|
|
39
|
+
* LiveKit Agents output that publishes TTS PCM to the Relay participant.
|
|
40
|
+
*
|
|
41
|
+
* Shape copied from `@livekit/agents` `ParticipantAudioOutput`
|
|
42
|
+
* (dist/voice/room_io/_output.js): `captureFrame` hands the frame to the
|
|
43
|
+
* transport and returns without waiting for playout, `flush()` starts a playout
|
|
44
|
+
* task that reports `onPlaybackFinished` only once the transport has drained,
|
|
45
|
+
* and `clearBuffer()` resolves the interruption future so that task reports
|
|
46
|
+
* `interrupted: true` with the position actually played.
|
|
47
|
+
*/
|
|
39
48
|
export class RelayAudioOutput extends AudioOutput {
|
|
40
49
|
#transport;
|
|
41
|
-
|
|
42
|
-
#
|
|
43
|
-
#
|
|
50
|
+
/** Seconds pushed to the transport in the open segment. */
|
|
51
|
+
#pushedDuration = 0;
|
|
52
|
+
#firstFrameEmitted = false;
|
|
53
|
+
#flushTask;
|
|
54
|
+
#flushDone = true;
|
|
55
|
+
/** Resolved by `clearBuffer()` with the milliseconds still queued at that moment. */
|
|
56
|
+
#interruptedFuture = new Future();
|
|
44
57
|
#closed = false;
|
|
45
58
|
constructor(transport, sampleRate = 48_000) {
|
|
46
59
|
super(sampleRate, undefined, { pause: false });
|
|
@@ -49,38 +62,47 @@ export class RelayAudioOutput extends AudioOutput {
|
|
|
49
62
|
async captureFrame(frame) {
|
|
50
63
|
if (this.#closed)
|
|
51
64
|
throw new Error("Relay LiveKit audio output is closed.");
|
|
65
|
+
if (this.#flushTask && !this.#flushDone) {
|
|
66
|
+
this.logger.error("captureFrame called while flush is in progress");
|
|
67
|
+
await this.#flushTask;
|
|
68
|
+
}
|
|
52
69
|
await super.captureFrame(frame);
|
|
53
|
-
if (!this.#
|
|
54
|
-
this.#
|
|
55
|
-
this
|
|
56
|
-
this.onPlaybackStarted(this.#segmentStartedAt);
|
|
70
|
+
if (!this.#firstFrameEmitted) {
|
|
71
|
+
this.#firstFrameEmitted = true;
|
|
72
|
+
this.onPlaybackStarted(Date.now());
|
|
57
73
|
}
|
|
58
|
-
this.#
|
|
74
|
+
this.#pushedDuration += frame.samplesPerChannel / frame.sampleRate;
|
|
75
|
+
// Resolves once the slices are queued; the engine's pump paces the wire.
|
|
59
76
|
await this.#transport.writeAudio({
|
|
60
77
|
samples: frame.data,
|
|
61
78
|
sampleRate: frame.sampleRate,
|
|
62
79
|
channelCount: frame.channels,
|
|
63
80
|
});
|
|
64
81
|
}
|
|
82
|
+
/** Mark the segment complete; `onPlaybackFinished` fires once the transport has drained. */
|
|
65
83
|
flush() {
|
|
66
84
|
super.flush();
|
|
67
|
-
if (!this.#
|
|
85
|
+
if (!this.#pushedDuration)
|
|
86
|
+
return;
|
|
87
|
+
if (this.#flushTask && !this.#flushDone)
|
|
68
88
|
return;
|
|
69
|
-
this
|
|
70
|
-
|
|
71
|
-
|
|
89
|
+
this.#flushDone = false;
|
|
90
|
+
this.#flushTask = this.#waitForPlayoutTask().finally(() => {
|
|
91
|
+
this.#flushDone = true;
|
|
72
92
|
});
|
|
73
|
-
this.#
|
|
93
|
+
void this.#flushTask.catch(() => undefined);
|
|
74
94
|
}
|
|
75
95
|
clearBuffer() {
|
|
96
|
+
const queuedMs = this.#transport.queuedAudioMs();
|
|
76
97
|
this.#transport.clearAudio();
|
|
77
|
-
if (
|
|
98
|
+
if (this.#interruptedFuture.done)
|
|
78
99
|
return;
|
|
79
|
-
this.
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
this.#
|
|
100
|
+
if (this.#pushedDuration === 0 && this.pendingPlayoutSegments === 0)
|
|
101
|
+
return;
|
|
102
|
+
if (!this.#flushTask || this.#flushDone)
|
|
103
|
+
this.flush();
|
|
104
|
+
if (!this.#interruptedFuture.done)
|
|
105
|
+
this.#interruptedFuture.resolve(queuedMs);
|
|
84
106
|
}
|
|
85
107
|
close() {
|
|
86
108
|
if (this.#closed)
|
|
@@ -88,10 +110,19 @@ export class RelayAudioOutput extends AudioOutput {
|
|
|
88
110
|
this.#closed = true;
|
|
89
111
|
this.clearBuffer();
|
|
90
112
|
}
|
|
91
|
-
#
|
|
92
|
-
|
|
93
|
-
this.#
|
|
94
|
-
|
|
113
|
+
async #waitForPlayoutTask() {
|
|
114
|
+
const interruptedFuture = this.#interruptedFuture;
|
|
115
|
+
await Promise.race([this.#transport.waitForPlayout(), interruptedFuture.await]);
|
|
116
|
+
const interrupted = interruptedFuture.done;
|
|
117
|
+
let playbackPosition = this.#pushedDuration;
|
|
118
|
+
if (interrupted) {
|
|
119
|
+
playbackPosition = Math.max(0, playbackPosition - interruptedFuture.result / 1_000);
|
|
120
|
+
}
|
|
121
|
+
this.#pushedDuration = 0;
|
|
122
|
+
this.#firstFrameEmitted = false;
|
|
123
|
+
if (this.#interruptedFuture === interruptedFuture)
|
|
124
|
+
this.#interruptedFuture = new Future();
|
|
125
|
+
this.onPlaybackFinished({ playbackPosition, interrupted });
|
|
95
126
|
}
|
|
96
127
|
}
|
|
97
128
|
/** Build LiveKit Agents audio IO around an already-connected Relay transport. */
|
package/dist/livekit.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"livekit.js","sourceRoot":"","sources":["../src/livekit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAqB,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"livekit.js","sourceRoot":"","sources":["../src/livekit.ts"],"names":[],"mappings":"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"}
|
package/dist/transport.d.ts
CHANGED
|
@@ -34,6 +34,50 @@ export interface RelayCallTransportOptions {
|
|
|
34
34
|
mediaConnectTimeoutMs?: number;
|
|
35
35
|
/** @deprecated Use `mediaConnectTimeoutMs`. */
|
|
36
36
|
connectionTimeoutMs?: number;
|
|
37
|
+
/**
|
|
38
|
+
* Called once per call when outbound audio is queued but no RTP packet has
|
|
39
|
+
* been written for 2 s while media is connected. Receives the diagnostics
|
|
40
|
+
* summary. Defaults to a no-op; nothing is restarted.
|
|
41
|
+
*/
|
|
42
|
+
onWarning?: (message: string) => void;
|
|
43
|
+
}
|
|
44
|
+
/** Packet counts for the other participant's track, as seen by this participant. */
|
|
45
|
+
export interface RelayCallInboundDiagnostics {
|
|
46
|
+
/** RTP packets received on the subscribed track. */
|
|
47
|
+
rtpPackets: number;
|
|
48
|
+
/** Opus packets the decoder rejected. */
|
|
49
|
+
decodeFailures: number;
|
|
50
|
+
/** PCM frames handed to the `audio` listeners. */
|
|
51
|
+
frames: number;
|
|
52
|
+
/** ms since `connect()` for the first and last RTP packet; undefined until one arrives. */
|
|
53
|
+
firstPacketAtMs: number | undefined;
|
|
54
|
+
lastPacketAtMs: number | undefined;
|
|
55
|
+
/** RTP packets received in the 5 s before `diagnostics()` was called. */
|
|
56
|
+
recentRtpPackets: number;
|
|
57
|
+
}
|
|
58
|
+
/** Packet counts for this participant's published track. */
|
|
59
|
+
export interface RelayCallOutboundDiagnostics {
|
|
60
|
+
/** PCM slices accepted from the caller and handed to the engine source. */
|
|
61
|
+
frames: number;
|
|
62
|
+
opusPackets: number;
|
|
63
|
+
rtpPackets: number;
|
|
64
|
+
firstPacketAtMs: number | undefined;
|
|
65
|
+
lastPacketAtMs: number | undefined;
|
|
66
|
+
/** RTP packets written in the 5 s before `diagnostics()` was called. */
|
|
67
|
+
recentRtpPackets: number;
|
|
68
|
+
/** Encoded packets waiting for the 20 ms pacer. */
|
|
69
|
+
queued: number;
|
|
70
|
+
/** `undefined` when the engine does not expose its pacer (`wrtc`). */
|
|
71
|
+
pacerAlive: boolean | undefined;
|
|
72
|
+
}
|
|
73
|
+
/** Room signaling frames counted since `connect()`. */
|
|
74
|
+
export interface RelayCallRoomDiagnostics {
|
|
75
|
+
roomStates: number;
|
|
76
|
+
/** Subscription (pull) offers received from the room. */
|
|
77
|
+
offers: number;
|
|
78
|
+
endedReason: string | undefined;
|
|
79
|
+
/** `error` frame messages, in order. */
|
|
80
|
+
errors: string[];
|
|
37
81
|
}
|
|
38
82
|
/** ICE facts recorded for one call, for logs and for the connect timeout error. */
|
|
39
83
|
export interface RelayCallIceDiagnostics {
|
|
@@ -56,6 +100,9 @@ export interface RelayCallIceDiagnostics {
|
|
|
56
100
|
atMs: number;
|
|
57
101
|
}>;
|
|
58
102
|
connected: boolean;
|
|
103
|
+
inbound: RelayCallInboundDiagnostics;
|
|
104
|
+
outbound: RelayCallOutboundDiagnostics;
|
|
105
|
+
room: RelayCallRoomDiagnostics;
|
|
59
106
|
/** One-line rendering of the fields above. */
|
|
60
107
|
summary: string;
|
|
61
108
|
}
|
|
@@ -92,14 +139,28 @@ export declare class RelayCallTransport {
|
|
|
92
139
|
connect(): Promise<void>;
|
|
93
140
|
/** Replace only the room signaling socket and replay the identical publication. */
|
|
94
141
|
reconnect(): Promise<void>;
|
|
95
|
-
/**
|
|
142
|
+
/**
|
|
143
|
+
* ICE candidates, state transitions, packet counts in both directions and
|
|
144
|
+
* room frame counts recorded for this call, with a one-line summary.
|
|
145
|
+
*/
|
|
96
146
|
diagnostics(): RelayCallIceDiagnostics;
|
|
97
147
|
/**
|
|
98
148
|
* Feed interleaved PCM16 audio into Relay. Frames are split into 10 ms WebRTC
|
|
99
|
-
* source slices and
|
|
149
|
+
* source slices and handed to the engine at once; the engine's 20 ms pump
|
|
150
|
+
* paces the wire, so adapters may push faster than real time (LiveKit's
|
|
151
|
+
* `AudioSource.captureFrame` shape). Resolves once the slices are queued;
|
|
152
|
+
* `waitForPlayout()` tells when they have left.
|
|
100
153
|
*/
|
|
101
154
|
writeAudio(frame: RelayAudioFrame): Promise<void>;
|
|
102
|
-
/**
|
|
155
|
+
/** Milliseconds of audio accepted by `writeAudio` but not yet written to RTP. */
|
|
156
|
+
queuedAudioMs(): number;
|
|
157
|
+
/**
|
|
158
|
+
* Resolves when every accepted slice has been written to RTP and the engine's
|
|
159
|
+
* pump is idle; immediately when nothing is queued; early on `clearAudio()`
|
|
160
|
+
* or `close()` (the caller reads `queuedAudioMs()` to learn what was dropped).
|
|
161
|
+
*/
|
|
162
|
+
waitForPlayout(): Promise<void>;
|
|
163
|
+
/** Drop outgoing PCM that has not reached RTP and release `waitForPlayout()` callers. */
|
|
103
164
|
clearAudio(): void;
|
|
104
165
|
setMuted(muted: boolean): void;
|
|
105
166
|
end(): void;
|
package/dist/transport.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,kBAAkB,EAElB,eAAe,EAGf,kBAAkB,EAElB,KAAK,EACN,MAAM,qBAAqB,CAAC;AAE7B,MAAM,WAAW,eAAe;IAC9B,wCAAwC;IACxC,OAAO,EAAE,UAAU,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACtB;
|
|
1
|
+
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"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"}
|
package/dist/transport.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
const DEFAULT_ICE_GATHERING_TIMEOUT_MS = 10_000;
|
|
2
2
|
const DEFAULT_CONNECTION_TIMEOUT_MS = 15_000;
|
|
3
3
|
const AUDIO_SLICE_MS = 10;
|
|
4
|
+
const STALL_CHECK_MS = 500;
|
|
5
|
+
const STALL_AFTER_MS = 2_000;
|
|
4
6
|
export class RelayCallTransportError extends Error {
|
|
5
7
|
code;
|
|
6
8
|
constructor(message, code) {
|
|
@@ -23,7 +25,7 @@ const loadWebRTCFactory = async (engine) => {
|
|
|
23
25
|
iceServers: config.iceServers,
|
|
24
26
|
iceTransportPolicy: config.iceTransportPolicy,
|
|
25
27
|
}),
|
|
26
|
-
createAudioSource: () => new wrtc.nonstandard.RTCAudioSource(),
|
|
28
|
+
createAudioSource: () => new WrtcAudioSource(new wrtc.nonstandard.RTCAudioSource()),
|
|
27
29
|
createAudioSink: (track) => new wrtc.nonstandard.RTCAudioSink(track),
|
|
28
30
|
};
|
|
29
31
|
};
|
|
@@ -60,11 +62,67 @@ const summarizeIce = (diagnostics) => {
|
|
|
60
62
|
states.push("no connected");
|
|
61
63
|
return `${localPart}; ${remotePart}; states: ${states.join(", ")}`;
|
|
62
64
|
};
|
|
65
|
+
const span = (first, last) => first === undefined || last === undefined ? "no packets" : `first ${seconds(first)} last ${seconds(last)}`;
|
|
66
|
+
const summarizeInbound = (inbound) => `in: ${inbound.rtpPackets} rtp, ${inbound.decodeFailures} bad, ${inbound.frames} frames, `
|
|
67
|
+
+ `${span(inbound.firstPacketAtMs, inbound.lastPacketAtMs)}, ${inbound.recentRtpPackets}/5s`;
|
|
68
|
+
const summarizeOutbound = (outbound) => `out: ${outbound.frames} frames, ${outbound.opusPackets} opus, ${outbound.rtpPackets} rtp, `
|
|
69
|
+
+ `${span(outbound.firstPacketAtMs, outbound.lastPacketAtMs)}, ${outbound.recentRtpPackets}/5s, `
|
|
70
|
+
+ `queue ${outbound.queued}, pacer ${outbound.pacerAlive === undefined ? "n/a" : outbound.pacerAlive ? "alive" : "idle"}`;
|
|
71
|
+
const summarizeRoom = (room) => {
|
|
72
|
+
const parts = [`${room.roomStates} roomState`, `${room.offers} offer`];
|
|
73
|
+
if (room.endedReason !== undefined)
|
|
74
|
+
parts.push(`ended ${room.endedReason}`);
|
|
75
|
+
if (room.errors.length)
|
|
76
|
+
parts.push(`error ${room.errors.map((text) => JSON.stringify(text)).join(", ")}`);
|
|
77
|
+
return `room: ${parts.join(", ")}`;
|
|
78
|
+
};
|
|
79
|
+
const summarize = (diagnostics) => `${summarizeIce(diagnostics)}; ${summarizeInbound(diagnostics.inbound)}; `
|
|
80
|
+
+ `${summarizeOutbound(diagnostics.outbound)}; ${summarizeRoom(diagnostics.room)}`;
|
|
63
81
|
const cloneSamples = (samples) => {
|
|
64
82
|
const copy = new Int16Array(samples.length);
|
|
65
83
|
copy.set(samples);
|
|
66
84
|
return copy;
|
|
67
85
|
};
|
|
86
|
+
/**
|
|
87
|
+
* `@roamhq/wrtc`'s `RTCAudioSource` plays each 10 ms slice through libwebrtc's
|
|
88
|
+
* own clock and exposes no queue, so this wrapper estimates it from wall time:
|
|
89
|
+
* queued = accepted since the run started minus the time elapsed. Best effort;
|
|
90
|
+
* the werift engine (the default) reports its real queue.
|
|
91
|
+
*/
|
|
92
|
+
class WrtcAudioSource {
|
|
93
|
+
#inner;
|
|
94
|
+
#runStartedAt = 0;
|
|
95
|
+
#runAcceptedMs = 0;
|
|
96
|
+
constructor(inner) {
|
|
97
|
+
this.#inner = inner;
|
|
98
|
+
}
|
|
99
|
+
createTrack() {
|
|
100
|
+
return this.#inner.createTrack();
|
|
101
|
+
}
|
|
102
|
+
onData(data) {
|
|
103
|
+
const now = Date.now();
|
|
104
|
+
if (this.queuedMs() === 0) {
|
|
105
|
+
this.#runStartedAt = now;
|
|
106
|
+
this.#runAcceptedMs = 0;
|
|
107
|
+
}
|
|
108
|
+
this.#runAcceptedMs += (data.numberOfFrames / data.sampleRate) * 1_000;
|
|
109
|
+
this.#inner.onData(data);
|
|
110
|
+
}
|
|
111
|
+
queuedMs() {
|
|
112
|
+
if (this.#runAcceptedMs === 0)
|
|
113
|
+
return 0;
|
|
114
|
+
return Math.max(0, this.#runAcceptedMs - (Date.now() - this.#runStartedAt));
|
|
115
|
+
}
|
|
116
|
+
async waitForDrain() {
|
|
117
|
+
const remaining = this.queuedMs();
|
|
118
|
+
if (remaining > 0)
|
|
119
|
+
await delay(remaining);
|
|
120
|
+
}
|
|
121
|
+
clear() {
|
|
122
|
+
// libwebrtc keeps slices already handed over; only the estimate can be reset.
|
|
123
|
+
this.#runAcceptedMs = 0;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
68
126
|
const delay = (milliseconds) => new Promise((resolve) => {
|
|
69
127
|
const timer = setTimeout(resolve, milliseconds);
|
|
70
128
|
timer.unref?.();
|
|
@@ -82,7 +140,20 @@ export class RelayCallTransport {
|
|
|
82
140
|
#iceGatheringTimeoutMs;
|
|
83
141
|
#connectionTimeoutMs;
|
|
84
142
|
#peerConfig;
|
|
143
|
+
#onWarning;
|
|
85
144
|
#connectStartedAt = 0;
|
|
145
|
+
#inboundFrames = 0;
|
|
146
|
+
#outboundFrames = 0;
|
|
147
|
+
#roomStates = 0;
|
|
148
|
+
#roomOffers = 0;
|
|
149
|
+
#endedReason;
|
|
150
|
+
#roomErrors = [];
|
|
151
|
+
/** Engine stats frozen when media shuts down, so diagnostics survive the call's end. */
|
|
152
|
+
#finalSinkStats;
|
|
153
|
+
#finalSourceStats;
|
|
154
|
+
#stallTimer;
|
|
155
|
+
#stallSince;
|
|
156
|
+
#stallWarned = false;
|
|
86
157
|
#iceLocal = { host: 0, srflx: 0, relay: 0, other: 0 };
|
|
87
158
|
#iceRemote = [];
|
|
88
159
|
#iceTransitions = [];
|
|
@@ -96,8 +167,9 @@ export class RelayCallTransport {
|
|
|
96
167
|
#publishFrame;
|
|
97
168
|
#initialAnswerSdp;
|
|
98
169
|
#negotiationTail = Promise.resolve();
|
|
99
|
-
#outputTail = Promise.resolve();
|
|
100
170
|
#audioGeneration = 0;
|
|
171
|
+
/** `waitForPlayout()` callers released early by `clearAudio()` or `close()`. */
|
|
172
|
+
#playoutWaiters = new Set();
|
|
101
173
|
#reportedConnected = false;
|
|
102
174
|
#readySettled = false;
|
|
103
175
|
#readyResolve;
|
|
@@ -111,6 +183,7 @@ export class RelayCallTransport {
|
|
|
111
183
|
this.#room = options.roomClient ?? options.relay.calls.room(options.callId, options.room);
|
|
112
184
|
this.#providedFactory = options.webRTC;
|
|
113
185
|
this.#engine = options.engine ?? "werift";
|
|
186
|
+
this.#onWarning = options.onWarning ?? (() => undefined);
|
|
114
187
|
if (this.#engine !== "werift" && this.#engine !== "wrtc") {
|
|
115
188
|
throw new Error('engine must be "werift" or "wrtc".');
|
|
116
189
|
}
|
|
@@ -198,19 +271,92 @@ export class RelayCallTransport {
|
|
|
198
271
|
await this.#room.reconnect();
|
|
199
272
|
this.#room.send(this.#publishFrame);
|
|
200
273
|
}
|
|
201
|
-
/**
|
|
274
|
+
/**
|
|
275
|
+
* ICE candidates, state transitions, packet counts in both directions and
|
|
276
|
+
* room frame counts recorded for this call, with a one-line summary.
|
|
277
|
+
*/
|
|
202
278
|
diagnostics() {
|
|
203
279
|
const snapshot = {
|
|
204
280
|
local: { ...this.#iceLocal },
|
|
205
281
|
remote: this.#iceRemote.map((candidate) => ({ ...candidate })),
|
|
206
282
|
transitions: this.#iceTransitions.map((transition) => ({ ...transition })),
|
|
207
283
|
connected: this.#reportedConnected,
|
|
284
|
+
inbound: this.#inboundDiagnostics(),
|
|
285
|
+
outbound: this.#outboundDiagnostics(),
|
|
286
|
+
room: {
|
|
287
|
+
roomStates: this.#roomStates,
|
|
288
|
+
offers: this.#roomOffers,
|
|
289
|
+
endedReason: this.#endedReason,
|
|
290
|
+
errors: [...this.#roomErrors],
|
|
291
|
+
},
|
|
292
|
+
};
|
|
293
|
+
return { ...snapshot, summary: summarize(snapshot) };
|
|
294
|
+
}
|
|
295
|
+
#sinceConnect(epochMs) {
|
|
296
|
+
return epochMs === undefined ? undefined : epochMs - this.#connectStartedAt;
|
|
297
|
+
}
|
|
298
|
+
#inboundDiagnostics() {
|
|
299
|
+
const stats = this.#remoteSink?.stats?.() ?? this.#finalSinkStats;
|
|
300
|
+
return {
|
|
301
|
+
rtpPackets: stats?.rtpPackets ?? 0,
|
|
302
|
+
decodeFailures: stats?.decodeFailures ?? 0,
|
|
303
|
+
frames: this.#inboundFrames,
|
|
304
|
+
firstPacketAtMs: this.#sinceConnect(stats?.firstRtpAt),
|
|
305
|
+
lastPacketAtMs: this.#sinceConnect(stats?.lastRtpAt),
|
|
306
|
+
recentRtpPackets: stats?.recentRtpPackets ?? 0,
|
|
307
|
+
};
|
|
308
|
+
}
|
|
309
|
+
#outboundDiagnostics() {
|
|
310
|
+
const stats = this.#audioSource?.stats?.() ?? this.#finalSourceStats;
|
|
311
|
+
return {
|
|
312
|
+
frames: this.#outboundFrames,
|
|
313
|
+
opusPackets: stats?.opusPackets ?? 0,
|
|
314
|
+
rtpPackets: stats?.rtpPackets ?? 0,
|
|
315
|
+
firstPacketAtMs: this.#sinceConnect(stats?.firstRtpAt),
|
|
316
|
+
lastPacketAtMs: this.#sinceConnect(stats?.lastRtpAt),
|
|
317
|
+
recentRtpPackets: stats?.recentRtpPackets ?? 0,
|
|
318
|
+
queued: stats?.queued ?? 0,
|
|
319
|
+
pacerAlive: stats?.pacerAlive,
|
|
208
320
|
};
|
|
209
|
-
|
|
321
|
+
}
|
|
322
|
+
/**
|
|
323
|
+
* Outbound stall guard: audio is queued for the pacer but no RTP packet has
|
|
324
|
+
* left for 2 s while connected. Warns once with the summary; restarts nothing.
|
|
325
|
+
*/
|
|
326
|
+
#checkStall() {
|
|
327
|
+
if (this.#stallWarned || !this.#reportedConnected)
|
|
328
|
+
return;
|
|
329
|
+
const stats = this.#audioSource?.stats?.();
|
|
330
|
+
if (!stats || stats.queued === 0) {
|
|
331
|
+
this.#stallSince = undefined;
|
|
332
|
+
return;
|
|
333
|
+
}
|
|
334
|
+
const now = Date.now();
|
|
335
|
+
const idleSince = stats.lastRtpAt ?? (this.#stallSince ??= now);
|
|
336
|
+
if (now - idleSince < STALL_AFTER_MS)
|
|
337
|
+
return;
|
|
338
|
+
this.#stallWarned = true;
|
|
339
|
+
this.#stopStallGuard();
|
|
340
|
+
this.#onWarning(`Relay outbound audio stalled (${this.diagnostics().summary})`);
|
|
341
|
+
}
|
|
342
|
+
#startStallGuard() {
|
|
343
|
+
if (this.#stallTimer)
|
|
344
|
+
return;
|
|
345
|
+
this.#stallTimer = setInterval(() => this.#checkStall(), STALL_CHECK_MS);
|
|
346
|
+
this.#stallTimer.unref?.();
|
|
347
|
+
}
|
|
348
|
+
#stopStallGuard() {
|
|
349
|
+
if (!this.#stallTimer)
|
|
350
|
+
return;
|
|
351
|
+
clearInterval(this.#stallTimer);
|
|
352
|
+
this.#stallTimer = undefined;
|
|
210
353
|
}
|
|
211
354
|
/**
|
|
212
355
|
* Feed interleaved PCM16 audio into Relay. Frames are split into 10 ms WebRTC
|
|
213
|
-
* source slices and
|
|
356
|
+
* source slices and handed to the engine at once; the engine's 20 ms pump
|
|
357
|
+
* paces the wire, so adapters may push faster than real time (LiveKit's
|
|
358
|
+
* `AudioSource.captureFrame` shape). Resolves once the slices are queued;
|
|
359
|
+
* `waitForPlayout()` tells when they have left.
|
|
214
360
|
*/
|
|
215
361
|
writeAudio(frame) {
|
|
216
362
|
if (this.#closed)
|
|
@@ -231,14 +377,37 @@ export class RelayCallTransport {
|
|
|
231
377
|
sampleRate: frame.sampleRate,
|
|
232
378
|
channelCount: frame.channelCount,
|
|
233
379
|
};
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
this.#outputTail = queued.catch(() => undefined);
|
|
237
|
-
return queued;
|
|
380
|
+
this.#writeAudio(captured, this.#audioGeneration);
|
|
381
|
+
return Promise.resolve();
|
|
238
382
|
}
|
|
239
|
-
/**
|
|
383
|
+
/** Milliseconds of audio accepted by `writeAudio` but not yet written to RTP. */
|
|
384
|
+
queuedAudioMs() {
|
|
385
|
+
return this.#audioSource?.queuedMs?.() ?? 0;
|
|
386
|
+
}
|
|
387
|
+
/**
|
|
388
|
+
* Resolves when every accepted slice has been written to RTP and the engine's
|
|
389
|
+
* pump is idle; immediately when nothing is queued; early on `clearAudio()`
|
|
390
|
+
* or `close()` (the caller reads `queuedAudioMs()` to learn what was dropped).
|
|
391
|
+
*/
|
|
392
|
+
waitForPlayout() {
|
|
393
|
+
const source = this.#audioSource;
|
|
394
|
+
if (!source || this.#closed || this.queuedAudioMs() === 0)
|
|
395
|
+
return Promise.resolve();
|
|
396
|
+
return new Promise((resolve) => {
|
|
397
|
+
const release = () => {
|
|
398
|
+
this.#playoutWaiters.delete(release);
|
|
399
|
+
resolve();
|
|
400
|
+
};
|
|
401
|
+
this.#playoutWaiters.add(release);
|
|
402
|
+
const drained = source.waitForDrain?.() ?? Promise.resolve();
|
|
403
|
+
drained.then(release, release);
|
|
404
|
+
});
|
|
405
|
+
}
|
|
406
|
+
/** Drop outgoing PCM that has not reached RTP and release `waitForPlayout()` callers. */
|
|
240
407
|
clearAudio() {
|
|
241
408
|
this.#audioGeneration += 1;
|
|
409
|
+
this.#audioSource?.clear?.();
|
|
410
|
+
this.#releasePlayoutWaiters();
|
|
242
411
|
}
|
|
243
412
|
setMuted(muted) {
|
|
244
413
|
this.#room.userUpdate({ muted });
|
|
@@ -251,8 +420,9 @@ export class RelayCallTransport {
|
|
|
251
420
|
return;
|
|
252
421
|
this.#closed = true;
|
|
253
422
|
this.#rejectReady(new RelayCallTransportError("Relay Call transport closed before media connected."));
|
|
254
|
-
this
|
|
423
|
+
this.#audioGeneration += 1;
|
|
255
424
|
this.#shutdownMedia();
|
|
425
|
+
this.#releasePlayoutWaiters();
|
|
256
426
|
this.#room.close();
|
|
257
427
|
}
|
|
258
428
|
async #publishLocalAudio() {
|
|
@@ -279,9 +449,11 @@ export class RelayCallTransport {
|
|
|
279
449
|
this.#queueNegotiation(() => this.#serverAnswer(frame));
|
|
280
450
|
});
|
|
281
451
|
this.#room.on("offer", (frame) => {
|
|
452
|
+
this.#roomOffers += 1;
|
|
282
453
|
this.#queueNegotiation(() => this.#serverOffer(frame));
|
|
283
454
|
});
|
|
284
455
|
this.#room.on("roomState", (frame) => {
|
|
456
|
+
this.#roomStates += 1;
|
|
285
457
|
this.#emit("roomState", frame);
|
|
286
458
|
});
|
|
287
459
|
this.#room.on("error", (error) => {
|
|
@@ -293,6 +465,7 @@ export class RelayCallTransport {
|
|
|
293
465
|
this.#serverError(error);
|
|
294
466
|
});
|
|
295
467
|
this.#room.on("ended", (frame) => {
|
|
468
|
+
this.#endedReason = frame.reason;
|
|
296
469
|
this.#rejectReady(new RelayCallTransportError(`Relay Call ended before media connected (${frame.reason}).`));
|
|
297
470
|
this.clearAudio();
|
|
298
471
|
this.#shutdownMedia();
|
|
@@ -335,6 +508,7 @@ export class RelayCallTransport {
|
|
|
335
508
|
this.#room.send({ type: "answer", session_description: this.#localDescription("answer") });
|
|
336
509
|
}
|
|
337
510
|
#serverError(frame) {
|
|
511
|
+
this.#roomErrors.push(frame.message);
|
|
338
512
|
const error = new RelayCallTransportError(frame.message, frame.code);
|
|
339
513
|
this.#rejectReady(error);
|
|
340
514
|
this.#emit("error", error);
|
|
@@ -346,6 +520,7 @@ export class RelayCallTransport {
|
|
|
346
520
|
try {
|
|
347
521
|
this.#room.connected();
|
|
348
522
|
this.#resolveReady();
|
|
523
|
+
this.#startStallGuard();
|
|
349
524
|
this.#emit("connected");
|
|
350
525
|
}
|
|
351
526
|
catch (error) {
|
|
@@ -374,6 +549,7 @@ export class RelayCallTransport {
|
|
|
374
549
|
this.#emit("error", new RelayCallTransportError(`Relay WebRTC delivered unsupported ${data.bitsPerSample}-bit audio.`));
|
|
375
550
|
return;
|
|
376
551
|
}
|
|
552
|
+
this.#inboundFrames += 1;
|
|
377
553
|
this.#emit("audio", {
|
|
378
554
|
samples: cloneSamples(data.samples),
|
|
379
555
|
sampleRate: data.sampleRate,
|
|
@@ -381,11 +557,11 @@ export class RelayCallTransport {
|
|
|
381
557
|
});
|
|
382
558
|
};
|
|
383
559
|
}
|
|
384
|
-
|
|
560
|
+
#writeAudio(frame, generation) {
|
|
385
561
|
const source = this.#audioSource;
|
|
386
562
|
if (!source || generation !== this.#audioGeneration)
|
|
387
563
|
return;
|
|
388
|
-
const samplesPerChannel = frame.sampleRate /
|
|
564
|
+
const samplesPerChannel = (frame.sampleRate * AUDIO_SLICE_MS) / 1000;
|
|
389
565
|
const sliceSamples = samplesPerChannel * frame.channelCount;
|
|
390
566
|
for (let offset = 0; offset < frame.samples.length; offset += sliceSamples) {
|
|
391
567
|
if (this.#closed || generation !== this.#audioGeneration)
|
|
@@ -400,9 +576,13 @@ export class RelayCallTransport {
|
|
|
400
576
|
channelCount: frame.channelCount,
|
|
401
577
|
numberOfFrames: samplesPerChannel,
|
|
402
578
|
});
|
|
403
|
-
|
|
579
|
+
this.#outboundFrames += 1;
|
|
404
580
|
}
|
|
405
581
|
}
|
|
582
|
+
#releasePlayoutWaiters() {
|
|
583
|
+
for (const release of [...this.#playoutWaiters])
|
|
584
|
+
release();
|
|
585
|
+
}
|
|
406
586
|
async #waitForIceGathering(peer) {
|
|
407
587
|
if (peer.iceGatheringState === "complete")
|
|
408
588
|
return;
|
|
@@ -502,6 +682,9 @@ export class RelayCallTransport {
|
|
|
502
682
|
return this.#peer;
|
|
503
683
|
}
|
|
504
684
|
#shutdownMedia() {
|
|
685
|
+
this.#stopStallGuard();
|
|
686
|
+
this.#finalSinkStats ??= this.#remoteSink?.stats?.();
|
|
687
|
+
this.#finalSourceStats ??= this.#audioSource?.stats?.();
|
|
505
688
|
this.#remoteSink?.stop();
|
|
506
689
|
this.#remoteSink = undefined;
|
|
507
690
|
this.#localTrack?.stop();
|
package/dist/transport.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transport.js","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"transport.js","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"AA0PA,MAAM,gCAAgC,GAAG,MAAM,CAAC;AAChD,MAAM,6BAA6B,GAAG,MAAM,CAAC;AAC7C,MAAM,cAAc,GAAG,EAAE,CAAC;AAC1B,MAAM,cAAc,GAAG,GAAG,CAAC;AAC3B,MAAM,cAAc,GAAG,KAAK,CAAC;AAE7B,MAAM,OAAO,uBAAwB,SAAQ,KAAK;IACvC,IAAI,CAAU;IAEvB,YAAY,OAAe,EAAE,IAAa;QACxC,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,yBAAyB,CAAC;QACtC,IAAI,IAAI,KAAK,SAAS;YAAE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IAC3C,CAAC;CACF;AAED,MAAM,mBAAmB,GAA8B,EAAE,UAAU,EAAE,EAAE,EAAE,kBAAkB,EAAE,KAAK,EAAE,CAAC;AAErG,MAAM,iBAAiB,GAAG,KAAK,EAAE,MAAuB,EAA+B,EAAE;IACvF,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QACxB,MAAM,EAAE,yBAAyB,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;QACzE,OAAO,yBAAyB,EAAE,CAAC;IACrC,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC;IAC1C,OAAO;QACL,oBAAoB,EAAE,CAAC,MAAM,GAAG,mBAAmB,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,iBAAiB,CAAC;YACjF,YAAY,EAAE,YAAY;YAC1B,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,kBAAkB,EAAE,MAAM,CAAC,kBAAkB;SAC9C,CAAuC;QACxC,iBAAiB,EAAE,GAAG,EAAE,CAAC,IAAI,eAAe,CAC1C,IAAI,IAAI,CAAC,WAAW,CAAC,cAAc,EAAqC,CACzE;QACD,eAAe,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,YAAY,CAC3D,KAAoC,CACJ;KACnC,CAAC;AACJ,CAAC,CAAC;AAEF,oHAAoH;AACpH,MAAM,cAAc,GAAG,CAAC,IAAY,EAAiE,EAAE;IACrG,MAAM,KAAK,GAAG,gEAAgE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1F,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7B,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,CAAE,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAE,CAAC,WAAW,EAAE,EAAE,CAAC;AACvG,CAAC,CAAC;AAEF,MAAM,OAAO,GAAG,CAAC,YAAoB,EAAU,EAAE,CAAC,GAAG,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;AAEzF,MAAM,YAAY,GAAG,CAAC,WAAqD,EAAU,EAAE;IACrF,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,GAAG,WAAW,CAAC;IAC9D,MAAM,SAAS,GAAG,eAAe,KAAK,CAAC,IAAI,WAAW,KAAK,CAAC,KAAK,WAAW,KAAK,CAAC,KAAK,EAAE;UACrF,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,WAAW,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAClD,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM;QAC9B,CAAC,CAAC,WAAW,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,GAAG,SAAS,CAAC,SAAS,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;QAC/F,CAAC,CAAC,cAAc,CAAC;IACnB,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,aAAa,GAAG,KAAK,CAAC;IAC1B,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACrC,IAAI,UAAU,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YACpC,MAAM,CAAC,IAAI,CAAC,GAAG,aAAa,SAAS,UAAU,CAAC,KAAK,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACrF,aAAa,GAAG,UAAU,CAAC,KAAK,CAAC;QACnC,CAAC;aAAM,IAAI,UAAU,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;YACrC,MAAM,CAAC,IAAI,CAAC,OAAO,UAAU,CAAC,KAAK,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACrE,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,KAAK,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;IACD,IAAI,CAAC,SAAS;QAAE,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC5C,OAAO,GAAG,SAAS,KAAK,UAAU,aAAa,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AACrE,CAAC,CAAC;AAEF,MAAM,IAAI,GAAG,CAAC,KAAyB,EAAE,IAAwB,EAAU,EAAE,CAC3E,KAAK,KAAK,SAAS,IAAI,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,OAAO,CAAC,KAAK,CAAC,SAAS,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;AAE7G,MAAM,gBAAgB,GAAG,CAAC,OAAoC,EAAU,EAAE,CACxE,OAAO,OAAO,CAAC,UAAU,SAAS,OAAO,CAAC,cAAc,SAAS,OAAO,CAAC,MAAM,WAAW;MACxF,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,OAAO,CAAC,cAAc,CAAC,KAAK,OAAO,CAAC,gBAAgB,KAAK,CAAC;AAE/F,MAAM,iBAAiB,GAAG,CAAC,QAAsC,EAAU,EAAE,CAC3E,QAAQ,QAAQ,CAAC,MAAM,YAAY,QAAQ,CAAC,WAAW,UAAU,QAAQ,CAAC,UAAU,QAAQ;MAC1F,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,QAAQ,CAAC,cAAc,CAAC,KAAK,QAAQ,CAAC,gBAAgB,OAAO;MAC/F,SAAS,QAAQ,CAAC,MAAM,WACxB,QAAQ,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAC9E,EAAE,CAAC;AAEL,MAAM,aAAa,GAAG,CAAC,IAA8B,EAAU,EAAE;IAC/D,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,UAAU,YAAY,EAAE,GAAG,IAAI,CAAC,MAAM,QAAQ,CAAC,CAAC;IACvE,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS;QAAE,KAAK,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;IAC5E,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM;QAAE,KAAK,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC1G,OAAO,SAAS,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AACrC,CAAC,CAAC;AAEF,MAAM,SAAS,GAAG,CAAC,WAAqD,EAAU,EAAE,CAClF,GAAG,YAAY,CAAC,WAAW,CAAC,KAAK,gBAAgB,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI;MACxE,GAAG,iBAAiB,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;AAErF,MAAM,YAAY,GAAG,CAAC,OAAmB,EAAc,EAAE;IACvD,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5C,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAClB,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,eAAe;IACV,MAAM,CAAuB;IACtC,aAAa,GAAG,CAAC,CAAC;IAClB,cAAc,GAAG,CAAC,CAAC;IAEnB,YAAY,KAA2B;QACrC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IACtB,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;IACnC,CAAC;IAED,MAAM,CAAC,IAAmD;QACxD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC;YAC1B,IAAI,CAAC,aAAa,GAAG,GAAG,CAAC;YACzB,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;QAC1B,CAAC;QACD,IAAI,CAAC,cAAc,IAAI,CAAC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,KAAK,CAAC;QACvE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IAED,QAAQ;QACN,IAAI,IAAI,CAAC,cAAc,KAAK,CAAC;YAAE,OAAO,CAAC,CAAC;QACxC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,cAAc,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;IAC9E,CAAC;IAED,KAAK,CAAC,YAAY;QAChB,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClC,IAAI,SAAS,GAAG,CAAC;YAAE,MAAM,KAAK,CAAC,SAAS,CAAC,CAAC;IAC5C,CAAC;IAED,KAAK;QACH,8EAA8E;QAC9E,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;IAC1B,CAAC;CACF;AAED,MAAM,KAAK,GAAG,CAAC,YAAoB,EAAiB,EAAE,CACpD,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;IACtB,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IAChD,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;AAClB,CAAC,CAAC,CAAC;AAEL;;;;;GAKG;AACH,MAAM,OAAO,kBAAkB;IACpB,KAAK,CAAW;IAChB,gBAAgB,CAAiC;IACjD,OAAO,CAAkB;IACzB,sBAAsB,CAAS;IAC/B,oBAAoB,CAAS;IAC7B,WAAW,CAA4B;IACvC,UAAU,CAA4B;IAC/C,iBAAiB,GAAG,CAAC,CAAC;IACtB,cAAc,GAAG,CAAC,CAAC;IACnB,eAAe,GAAG,CAAC,CAAC;IACpB,WAAW,GAAG,CAAC,CAAC;IAChB,WAAW,GAAG,CAAC,CAAC;IAChB,YAAY,CAAqB;IACxB,WAAW,GAAa,EAAE,CAAC;IACpC,wFAAwF;IACxF,eAAe,CAAkC;IACjD,iBAAiB,CAAoC;IACrD,WAAW,CAA6B;IACxC,WAAW,CAAqB;IAChC,YAAY,GAAG,KAAK,CAAC;IACrB,SAAS,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;IACtD,UAAU,GAA+C,EAAE,CAAC;IAC5D,eAAe,GAA2C,EAAE,CAAC;IACpD,UAAU,GAAG,IAAI,GAAG,EAAiD,CAAC;IAC/E,QAAQ,CAAiC;IACzC,KAAK,CAAsC;IAC3C,YAAY,CAAmC;IAC/C,WAAW,CAAwC;IACnD,WAAW,CAAiC;IAC5C,mBAAmB,CAAsC;IACzD,aAAa,CAAwC;IACrD,iBAAiB,CAAqB;IACtC,gBAAgB,GAAkB,OAAO,CAAC,OAAO,EAAE,CAAC;IACpD,gBAAgB,GAAG,CAAC,CAAC;IACrB,gFAAgF;IACvE,eAAe,GAAG,IAAI,GAAG,EAAc,CAAC;IACjD,kBAAkB,GAAG,KAAK,CAAC;IAC3B,aAAa,GAAG,KAAK,CAAC;IACtB,aAAa,CAA2B;IACxC,YAAY,CAAuC;IAC1C,MAAM,CAAgB;IAC/B,iBAAiB,GAAG,KAAK,CAAC;IAC1B,OAAO,GAAG,KAAK,CAAC;IAEhB,YAAY,OAAkC;QAC5C,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;QACnE,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAC1F,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC;QACvC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,MAAM,IAAI,QAAQ,CAAC;QAC1C,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,SAAS,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QACzD,IAAI,IAAI,CAAC,OAAO,KAAK,QAAQ,IAAI,IAAI,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC;YACzD,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACxD,CAAC;QACD,IAAI,CAAC,sBAAsB,GAAG,OAAO,CAAC,qBAAqB,IAAI,gCAAgC,CAAC;QAChG,IAAI,CAAC,oBAAoB,GAAG,OAAO,CAAC,qBAAqB;eACpD,OAAO,CAAC,mBAAmB;eAC3B,6BAA6B,CAAC;QACnC,MAAM,MAAM,GAAG,OAAO,CAAC,kBAAkB,IAAI,KAAK,CAAC;QACnD,IAAI,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;YAC3C,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAClE,CAAC;QACD,IAAI,CAAC,WAAW,GAAG;YACjB,UAAU,EAAE,CAAC,OAAO,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;gBACtD,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI;gBACjE,GAAG,CAAC,MAAM,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACvE,GAAG,CAAC,MAAM,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC;aAC9E,CAAC,CAAC;YACH,kBAAkB,EAAE,MAAM;SAC3B,CAAC;QACF,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,sBAAsB,CAAC,IAAI,IAAI,CAAC,sBAAsB,IAAI,CAAC,EAAE,CAAC;YACtF,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;QACtE,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,IAAI,CAAC,oBAAoB,IAAI,CAAC,EAAE,CAAC;YAClF,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;QACtE,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAClD,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC;YAC7B,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC;QAC7B,CAAC,CAAC,CAAC;QACH,KAAK,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IAC1C,CAAC;IAED,EAAE,CAA2B,KAAQ,EAAE,QAA8B;QACnE,IAAI,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC3C,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,SAAS,GAAG,IAAI,GAAG,EAAE,CAAC;YACtB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QACxC,CAAC;QACD,SAAS,CAAC,GAAG,CAAC,QAAoC,CAAC,CAAC;QACpD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,GAAG,CAA2B,KAAQ,EAAE,QAA8B;QACpE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,QAAoC,CAAC,CAAC;QACzE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,OAAO;QACX,IAAI,IAAI,CAAC,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;QACrE,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC3B,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QAC3B,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAChC,OAAO;QACT,CAAC;QACD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,gBAAgB,IAAI,MAAM,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC/E,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE,CAAC;QACtD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;QACnD,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YACtC,MAAM,IAAI,uBAAuB,CAAC,qDAAqD,CAAC,CAAC;QAC3F,CAAC;QACD,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACpC,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAClE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,CAAC;QAC5F,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACvB,IAAI,CAAC,uBAAuB,GAAG,GAAG,EAAE;YAClC,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;YAC3D,IAAI,CAAC,uBAAuB,EAAE,CAAC;QACjC,CAAC,CAAC;QACF,IAAI,CAAC,OAAO,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACzD,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAChC,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAClC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,KAAK,EAAE,CAAC;YACb,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,mFAAmF;IACnF,KAAK,CAAC,SAAS;QACb,IAAI,IAAI,CAAC,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;QACrE,IAAI,CAAC,IAAI,CAAC,aAAa;YAAE,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;QACnF,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;QAC7B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IACtC,CAAC;IAED;;;OAGG;IACH,WAAW;QACT,MAAM,QAAQ,GAAG;YACf,KAAK,EAAE,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE;YAC5B,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,SAAS,EAAE,CAAC,CAAC;YAC9D,WAAW,EAAE,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,UAAU,EAAE,CAAC,CAAC;YAC1E,SAAS,EAAE,IAAI,CAAC,kBAAkB;YAClC,OAAO,EAAE,IAAI,CAAC,mBAAmB,EAAE;YACnC,QAAQ,EAAE,IAAI,CAAC,oBAAoB,EAAE;YACrC,IAAI,EAAE;gBACJ,UAAU,EAAE,IAAI,CAAC,WAAW;gBAC5B,MAAM,EAAE,IAAI,CAAC,WAAW;gBACxB,WAAW,EAAE,IAAI,CAAC,YAAY;gBAC9B,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC;aAC9B;SACF,CAAC;QACF,OAAO,EAAE,GAAG,QAAQ,EAAE,OAAO,EAAE,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC;IACvD,CAAC;IAED,aAAa,CAAC,OAA2B;QACvC,OAAO,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC;IAC9E,CAAC;IAED,mBAAmB;QACjB,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,EAAE,IAAI,IAAI,CAAC,eAAe,CAAC;QAClE,OAAO;YACL,UAAU,EAAE,KAAK,EAAE,UAAU,IAAI,CAAC;YAClC,cAAc,EAAE,KAAK,EAAE,cAAc,IAAI,CAAC;YAC1C,MAAM,EAAE,IAAI,CAAC,cAAc;YAC3B,eAAe,EAAE,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,UAAU,CAAC;YACtD,cAAc,EAAE,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,SAAS,CAAC;YACpD,gBAAgB,EAAE,KAAK,EAAE,gBAAgB,IAAI,CAAC;SAC/C,CAAC;IACJ,CAAC;IAED,oBAAoB;QAClB,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,KAAK,EAAE,EAAE,IAAI,IAAI,CAAC,iBAAiB,CAAC;QACrE,OAAO;YACL,MAAM,EAAE,IAAI,CAAC,eAAe;YAC5B,WAAW,EAAE,KAAK,EAAE,WAAW,IAAI,CAAC;YACpC,UAAU,EAAE,KAAK,EAAE,UAAU,IAAI,CAAC;YAClC,eAAe,EAAE,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,UAAU,CAAC;YACtD,cAAc,EAAE,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,SAAS,CAAC;YACpD,gBAAgB,EAAE,KAAK,EAAE,gBAAgB,IAAI,CAAC;YAC9C,MAAM,EAAE,KAAK,EAAE,MAAM,IAAI,CAAC;YAC1B,UAAU,EAAE,KAAK,EAAE,UAAU;SAC9B,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,WAAW;QACT,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,kBAAkB;YAAE,OAAO;QAC1D,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,KAAK,EAAE,EAAE,CAAC;QAC3C,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACjC,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;YAC7B,OAAO;QACT,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,WAAW,KAAK,GAAG,CAAC,CAAC;QAChE,IAAI,GAAG,GAAG,SAAS,GAAG,cAAc;YAAE,OAAO;QAC7C,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,UAAU,CAAC,iCAAiC,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,GAAG,CAAC,CAAC;IAClF,CAAC;IAED,gBAAgB;QACd,IAAI,IAAI,CAAC,WAAW;YAAE,OAAO;QAC7B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,cAAc,CAAC,CAAC;QACzE,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,EAAE,CAAC;IAC7B,CAAC;IAED,eAAe;QACb,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE,OAAO;QAC9B,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAChC,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;IAC/B,CAAC;IAED;;;;;;OAMG;IACH,UAAU,CAAC,KAAsB;QAC/B,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC,CAAC;QACtF,IAAI,CAAC,IAAI,CAAC,YAAY;YAAE,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC,CAAC;QACnG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,UAAU,IAAI,CAAC,IAAI,KAAK,CAAC,UAAU,GAAG,GAAG,KAAK,CAAC,EAAE,CAAC;YACjG,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC,CAAC;QACjG,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,KAAK,CAAC,YAAY,IAAI,CAAC,EAAE,CAAC;YACrE,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC,CAAC;QAC3F,CAAC;QACD,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC,YAAY,KAAK,CAAC,EAAE,CAAC;YACpD,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC,CAAC;QACpG,CAAC;QACD,MAAM,QAAQ,GAAoB;YAChC,OAAO,EAAE,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC;YACpC,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,YAAY,EAAE,KAAK,CAAC,YAAY;SACjC,CAAC;QACF,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAClD,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IAED,iFAAiF;IACjF,aAAa;QACX,OAAO,IAAI,CAAC,YAAY,EAAE,QAAQ,EAAE,EAAE,IAAI,CAAC,CAAC;IAC9C,CAAC;IAED;;;;OAIG;IACH,cAAc;QACZ,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC;QACjC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC;YAAE,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;QACpF,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YACnC,MAAM,OAAO,GAAG,GAAS,EAAE;gBACzB,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBACrC,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC;YACF,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAClC,MAAM,OAAO,GAAG,MAAM,CAAC,YAAY,EAAE,EAAE,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YAC7D,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,yFAAyF;IACzF,UAAU;QACR,IAAI,CAAC,gBAAgB,IAAI,CAAC,CAAC;QAC3B,IAAI,CAAC,YAAY,EAAE,KAAK,EAAE,EAAE,CAAC;QAC7B,IAAI,CAAC,sBAAsB,EAAE,CAAC;IAChC,CAAC;IAED,QAAQ,CAAC,KAAc;QACrB,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IACnC,CAAC;IAED,GAAG;QACD,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;IACnB,CAAC;IAED,KAAK;QACH,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO;QACzB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,YAAY,CAAC,IAAI,uBAAuB,CAAC,qDAAqD,CAAC,CAAC,CAAC;QACtG,IAAI,CAAC,gBAAgB,IAAI,CAAC,CAAC;QAC3B,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAC9B,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,kBAAkB;QACtB,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QACjC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QACvC,MAAM,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;QACtC,MAAM,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;QACtC,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QACpD,MAAM,GAAG,GAAG,IAAI,CAAC,mBAAmB,EAAE,GAAG,CAAC;QAC1C,IAAI,CAAC,GAAG;YAAE,MAAM,IAAI,uBAAuB,CAAC,4CAA4C,CAAC,CAAC;QAC1F,IAAI,CAAC,aAAa,GAAG;YACnB,IAAI,EAAE,OAAO;YACb,mBAAmB,EAAE,WAAW;YAChC,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;SACjC,CAAC;QACF,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IACtC,CAAC;IAED,mBAAmB;QACjB,IAAI,IAAI,CAAC,iBAAiB;YAAE,OAAO;QACnC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAC9B,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAgC,EAAE,EAAE;YAC3D,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAqC,EAAE,EAAE;YAC/D,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC;YACtB,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,KAAyB,EAAE,EAAE;YACvD,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC;YACtB,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAiC,EAAE,EAAE;YAC3D,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;gBAC3B,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;gBACzB,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YAC7B,CAAC;;gBAAM,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAyB,EAAE,EAAE;YACnD,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC;YACjC,IAAI,CAAC,YAAY,CAAC,IAAI,uBAAuB,CAAC,4CAA4C,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;YAC7G,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAyB,EAAE,EAAE;YACnD,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBAC7B,IAAI,CAAC,YAAY,CAAC,IAAI,uBAAuB,CAC3C,kDAAkD,KAAK,CAAC,IAAI,IAAI,CACjE,CAAC,CAAC;YACL,CAAC;YACD,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;IACL,CAAC;IAED,iBAAiB,CAAC,IAAyB;QACzC,MAAM,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,CAAC,gBAAgB,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;YACnD,MAAM,MAAM,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YACzE,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;YAC1B,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,KAAgC;QAClD,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QACjC,MAAM,GAAG,GAAG,KAAK,CAAC,mBAAmB,CAAC,GAAG,CAAC;QAC1C,2EAA2E;QAC3E,2EAA2E;QAC3E,gEAAgE;QAChE,IAAI,IAAI,CAAC,cAAc,KAAK,QAAQ,IAAI,IAAI,CAAC,iBAAiB,KAAK,GAAG;YAAE,OAAO;QAC/E,IAAI,IAAI,CAAC,iBAAiB,KAAK,SAAS;YAAE,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,CAAC;QAC5E,MAAM,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;QAC3D,IAAI,CAAC,iBAAiB,KAAK,GAAG,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,KAAqC;QACtD,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QACjC,MAAM,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;QAC3D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QACzC,MAAM,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;QACvC,MAAM,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;QACtC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,mBAAmB,EAAE,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC7F,CAAC;IAED,YAAY,CAAC,KAAyB;QACpC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACrC,MAAM,KAAK,GAAG,IAAI,uBAAuB,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACrE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QACzB,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,uBAAuB;QACrB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,eAAe,CAAC;QAC1C,IAAI,KAAK,KAAK,WAAW,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACtD,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;YAC/B,IAAI,CAAC;gBACH,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;gBACvB,IAAI,CAAC,aAAa,EAAE,CAAC;gBACrB,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACxB,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YAC1B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,MAAM,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;gBACzE,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;gBAC1B,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC;aAAM,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,MAAM,KAAK,GAAG,IAAI,uBAAuB,CAAC,iCAAiC,CAAC,CAAC;YAC7E,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YACzB,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;IAED,YAAY,CAAC,KAAgC;QAC3C,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,OAAO;QACrD,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAClD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,EAAE;YACrB,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI;gBAAE,OAAO;YACtD,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC;YAC5C,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS,IAAI,IAAI,CAAC,aAAa,KAAK,EAAE,EAAE,CAAC;gBAClE,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,uBAAuB,CAC7C,sCAAsC,IAAI,CAAC,aAAa,aAAa,CACtE,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;YACD,IAAI,CAAC,cAAc,IAAI,CAAC,CAAC;YACzB,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;gBAClB,OAAO,EAAE,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC;gBACnC,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,YAAY;aACb,CAAC,CAAC;QACL,CAAC,CAAC;IACJ,CAAC;IAED,WAAW,CAAC,KAAsB,EAAE,UAAkB;QACpD,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC;QACjC,IAAI,CAAC,MAAM,IAAI,UAAU,KAAK,IAAI,CAAC,gBAAgB;YAAE,OAAO;QAC5D,MAAM,iBAAiB,GAAG,CAAC,KAAK,CAAC,UAAU,GAAG,cAAc,CAAC,GAAG,IAAI,CAAC;QACrE,MAAM,YAAY,GAAG,iBAAiB,GAAG,KAAK,CAAC,YAAY,CAAC;QAC5D,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,IAAI,YAAY,EAAE,CAAC;YAC3E,IAAI,IAAI,CAAC,OAAO,IAAI,UAAU,KAAK,IAAI,CAAC,gBAAgB;gBAAE,OAAO;YACjE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;YACxE,MAAM,OAAO,GAAG,IAAI,UAAU,CAAC,YAAY,CAAC,CAAC;YAC7C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;YAChE,MAAM,CAAC,MAAM,CAAC;gBACZ,OAAO;gBACP,UAAU,EAAE,KAAK,CAAC,UAAU;gBAC5B,aAAa,EAAE,EAAE;gBACjB,YAAY,EAAE,KAAK,CAAC,YAAY;gBAChC,cAAc,EAAE,iBAAiB;aAClC,CAAC,CAAC;YACH,IAAI,CAAC,eAAe,IAAI,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,sBAAsB;QACpB,KAAK,MAAM,OAAO,IAAI,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC;YAAE,OAAO,EAAE,CAAC;IAC7D,CAAC;IAED,KAAK,CAAC,oBAAoB,CAAC,IAA6B;QACtD,IAAI,IAAI,CAAC,iBAAiB,KAAK,UAAU;YAAE,OAAO;QAClD,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC1C,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC9B,OAAO,EAAE,CAAC;gBACV,MAAM,CAAC,IAAI,uBAAuB,CAAC,kDAAkD,CAAC,CAAC,CAAC;YAC1F,CAAC,EAAE,IAAI,CAAC,sBAAsB,CAAC,CAAC;YAChC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;YAClB,MAAM,OAAO,GAAG,GAAS,EAAE;gBACzB,IAAI,IAAI,CAAC,iBAAiB,KAAK,UAAU;oBAAE,OAAO;gBAClD,OAAO,EAAE,CAAC;gBACV,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC;YACF,MAAM,OAAO,GAAG,GAAS,EAAE;gBACzB,YAAY,CAAC,OAAO,CAAC,CAAC;gBACtB,IAAI,CAAC,mBAAmB,CAAC,yBAAyB,EAAE,OAAO,CAAC,CAAC;YAC/D,CAAC,CAAC;YACF,IAAI,CAAC,gBAAgB,CAAC,yBAAyB,EAAE,OAAO,CAAC,CAAC;YAC1D,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,kBAAkB;QACtB,IAAI,IAAI,CAAC,kBAAkB;YAAE,OAAO;QACpC,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC1C,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC9B,MAAM,CAAC,IAAI,uBAAuB,CAChC,4CAA4C,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,GAAG,CAC1E,CAAC,CAAC;YACL,CAAC,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;YAC9B,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;YAClB,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,GAAG,EAAE;gBACH,YAAY,CAAC,OAAO,CAAC,CAAC;gBACtB,OAAO,EAAE,CAAC;YACZ,CAAC,EACD,CAAC,KAAc,EAAE,EAAE;gBACjB,YAAY,CAAC,OAAO,CAAC,CAAC;gBACtB,MAAM,CAAC,KAAK,CAAC,CAAC;YAChB,CAAC,CACF,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;;OAIG;IACH,WAAW,CAAC,IAA6B;QACvC,IAAI,CAAC,cAAc,GAAG,CAAC,KAAK,EAAE,EAAE;YAC9B,MAAM,IAAI,GAAG,KAAK,EAAE,SAAS,EAAE,SAAS,CAAC;YACzC,IAAI,CAAC,IAAI;gBAAE,OAAO;YAClB,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC;YACxC,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,OAAO;gBAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;gBAClF,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC,CAAC;QACjC,CAAC,CAAC;QACF,IAAI,CAAC,yBAAyB,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;QACnG,IAAI,CAAC,0BAA0B,GAAG,GAAG,EAAE;YACrC,IAAI,IAAI,CAAC,kBAAkB,KAAK,SAAS;gBAAE,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;QACpG,CAAC,CAAC;IACJ,CAAC;IAED,iBAAiB,CAAC,IAA4D,EAAE,KAAa;QAC3F,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC;IACxF,CAAC;IAED,uBAAuB,CAAC,GAAW;QACjC,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;YACtC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC;gBAAE,SAAS;YAC/C,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;YACpC,IAAI,MAAM;gBAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QACvF,CAAC;IACH,CAAC;IAED,aAAa;QACX,IAAI,IAAI,CAAC,aAAa;YAAE,OAAO;QAC/B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC1B,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC;IACzB,CAAC;IAED,YAAY,CAAC,KAAY;QACvB,IAAI,IAAI,CAAC,aAAa;YAAE,OAAO;QAC/B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC1B,IAAI,CAAC,YAAY,EAAE,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,iBAAiB,CAA+B,IAAO;QACrD,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,gBAAgB,CAAC;QACnD,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;YAChD,MAAM,IAAI,uBAAuB,CAAC,2CAA2C,IAAI,OAAO,CAAC,CAAC;QAC5F,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC;IAClC,CAAC;IAED,YAAY;QACV,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;QAC3E,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,cAAc;QACZ,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,eAAe,KAAK,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,EAAE,CAAC;QACrD,IAAI,CAAC,iBAAiB,KAAK,IAAI,CAAC,YAAY,EAAE,KAAK,EAAE,EAAE,CAAC;QACxD,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC;QACzB,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;QAC7B,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC;QACzB,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;QAC7B,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC;QACpB,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;QACvB,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;IAChC,CAAC;IAED,KAAK,CAA2B,KAAQ,EAAE,GAAG,IAA0B;QACrE,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;YACxD,IAAI,CAAC;gBAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,oCAAoC,CAAC,CAAC;QAC3E,CAAC;IACH,CAAC;CACF"}
|
package/package.json
CHANGED