@tangle-network/sandbox 0.2.1 → 0.4.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.
@@ -1,667 +1 @@
1
- //#region src/session-gateway/types.ts
2
- /**
3
- * Default connection metrics.
4
- */
5
- const INITIAL_METRICS = {
6
- lastPingLatencyMs: null,
7
- avgPingLatencyMs: null,
8
- missedPongCount: 0,
9
- reconnectCount: 0,
10
- lastPongAt: null,
11
- lastReconnectAt: null,
12
- quality: "disconnected"
13
- };
14
- /**
15
- * Calculate connection quality from metrics.
16
- */
17
- function calculateConnectionQuality(metrics, isConnected) {
18
- if (!isConnected) return "disconnected";
19
- const { avgPingLatencyMs, missedPongCount, reconnectCount, lastReconnectAt } = metrics;
20
- const recentReconnect = lastReconnectAt && Date.now() - lastReconnectAt < 300 * 1e3;
21
- if (missedPongCount >= 2 || recentReconnect && reconnectCount > 1) return "poor";
22
- if (missedPongCount >= 1 || avgPingLatencyMs !== null && avgPingLatencyMs > 1e3 || recentReconnect) return "degraded";
23
- if (avgPingLatencyMs !== null && avgPingLatencyMs < 100 && reconnectCount === 0) return "excellent";
24
- if (avgPingLatencyMs !== null && avgPingLatencyMs <= 300) return "good";
25
- return "good";
26
- }
27
- //#endregion
28
- //#region src/session-gateway/client.ts
29
- /**
30
- * SessionGatewayClient
31
- *
32
- * WebSocket client for Sandbox API session streaming.
33
- * Browser-safe: no Node.js APIs.
34
- */
35
- const DEFAULT_CONFIG = {
36
- transport: "websocket",
37
- channels: ["*"],
38
- autoReconnect: true,
39
- maxReconnectAttempts: 10,
40
- initialReconnectDelayMs: 1e3,
41
- maxReconnectDelayMs: 3e4,
42
- pingIntervalMs: 3e4,
43
- pongTimeoutMs: 1e4,
44
- maxMissedPongs: 2,
45
- enableDeduplication: true,
46
- maxDeduplicationSize: 1e3,
47
- enableReplayPersistence: false,
48
- replayStorageKeyPrefix: "session_gateway_",
49
- latencyHistorySize: 10
50
- };
51
- const STORAGE_KEYS = {
52
- lastEventId: "last_event_id",
53
- executionId: "execution_id",
54
- sessionId: "session_id"
55
- };
56
- /**
57
- * Legacy wire-protocol message type map. The current server emits the
58
- * `sidecar.*` message types; the SDK surfaces the canonical `runtime.*`
59
- * names. Kept at module scope so it isn't re-allocated per inbound
60
- * WebSocket message.
61
- */
62
- const WIRE_TYPE_MAP = {
63
- "sidecar.connected": "runtime.connected",
64
- "sidecar.disconnected": "runtime.disconnected",
65
- "sidecar.not_found": "runtime.not_found",
66
- "sidecar.ready": "runtime.ready"
67
- };
68
- /**
69
- * Memory-based storage fallback when localStorage is not available.
70
- */
71
- var MemoryStorage = class {
72
- store = /* @__PURE__ */ new Map();
73
- getItem(key) {
74
- return this.store.get(key) ?? null;
75
- }
76
- setItem(key, value) {
77
- this.store.set(key, value);
78
- }
79
- removeItem(key) {
80
- this.store.delete(key);
81
- }
82
- };
83
- var SessionGatewayClient = class {
84
- ws = null;
85
- config;
86
- handlers;
87
- currentToken;
88
- isRefreshingToken = false;
89
- state = "disconnected";
90
- connectedAt = null;
91
- hasConnectedBefore = false;
92
- lastPingAt = null;
93
- lastPongAt = null;
94
- lastPingSentAt = null;
95
- missedPongCount = 0;
96
- reconnectAttempts = 0;
97
- messagesReceived = 0;
98
- messagesSent = 0;
99
- eventsReceived = 0;
100
- duplicatesSkipped = 0;
101
- reconnectTimer = null;
102
- pingInterval = null;
103
- pongTimeout = null;
104
- pendingCallbacks = /* @__PURE__ */ new Map();
105
- messageIdCounter = 0;
106
- processedEventIds = /* @__PURE__ */ new Set();
107
- pingLatencyHistory = [];
108
- connectionMetrics = { ...INITIAL_METRICS };
109
- lastEventId = null;
110
- currentExecutionId = null;
111
- currentSessionId = null;
112
- isReplaying = false;
113
- replayProgress = {
114
- total: 0,
115
- received: 0
116
- };
117
- constructor(config) {
118
- let storage;
119
- if (config.replayStorage) storage = config.replayStorage;
120
- else if (typeof globalThis !== "undefined" && "localStorage" in globalThis) try {
121
- const testKey = "__test__";
122
- localStorage.setItem(testKey, testKey);
123
- localStorage.removeItem(testKey);
124
- storage = localStorage;
125
- } catch {
126
- storage = new MemoryStorage();
127
- }
128
- else storage = new MemoryStorage();
129
- this.config = {
130
- url: config.url,
131
- sessionId: config.sessionId,
132
- token: config.token,
133
- onTokenRefresh: config.onTokenRefresh,
134
- transport: config.transport ?? DEFAULT_CONFIG.transport,
135
- channels: config.channels ?? DEFAULT_CONFIG.channels,
136
- autoReconnect: config.autoReconnect ?? DEFAULT_CONFIG.autoReconnect,
137
- maxReconnectAttempts: config.maxReconnectAttempts ?? DEFAULT_CONFIG.maxReconnectAttempts,
138
- initialReconnectDelayMs: config.initialReconnectDelayMs ?? DEFAULT_CONFIG.initialReconnectDelayMs,
139
- maxReconnectDelayMs: config.maxReconnectDelayMs ?? DEFAULT_CONFIG.maxReconnectDelayMs,
140
- pingIntervalMs: config.pingIntervalMs ?? DEFAULT_CONFIG.pingIntervalMs,
141
- pongTimeoutMs: config.pongTimeoutMs ?? DEFAULT_CONFIG.pongTimeoutMs,
142
- maxMissedPongs: config.maxMissedPongs ?? DEFAULT_CONFIG.maxMissedPongs,
143
- enableDeduplication: config.enableDeduplication ?? DEFAULT_CONFIG.enableDeduplication,
144
- maxDeduplicationSize: config.maxDeduplicationSize ?? DEFAULT_CONFIG.maxDeduplicationSize,
145
- enableReplayPersistence: config.enableReplayPersistence ?? DEFAULT_CONFIG.enableReplayPersistence,
146
- replayStorage: storage,
147
- replayStorageKeyPrefix: config.replayStorageKeyPrefix ?? DEFAULT_CONFIG.replayStorageKeyPrefix,
148
- latencyHistorySize: config.latencyHistorySize ?? DEFAULT_CONFIG.latencyHistorySize
149
- };
150
- this.handlers = config.handlers ?? {};
151
- this.currentToken = config.token;
152
- if (this.config.enableReplayPersistence) this.loadReplayState();
153
- }
154
- /**
155
- * Connect to the session gateway.
156
- */
157
- connect() {
158
- if (this.state === "connected" || this.state === "connecting") return;
159
- const isReconnect = this.hasConnectedBefore;
160
- this.setState(isReconnect ? "reconnecting" : "connecting");
161
- this.connectWebSocket();
162
- }
163
- connectWebSocket() {
164
- const url = new URL(this.config.url);
165
- url.searchParams.set("token", this.currentToken);
166
- this.ws = new WebSocket(url.toString());
167
- this.ws.onopen = () => this.handleOpen();
168
- this.ws.onclose = (event) => this.handleClose(event.code, event.reason);
169
- this.ws.onerror = (_event) => {};
170
- this.ws.onmessage = (event) => this.handleMessage(event.data);
171
- }
172
- /**
173
- * Disconnect from the session gateway.
174
- */
175
- disconnect() {
176
- this.cleanup();
177
- if (this.ws) {
178
- this.ws.close(1e3, "Client disconnect");
179
- this.ws = null;
180
- }
181
- this.setState("disconnected");
182
- }
183
- /**
184
- * Subscribe to additional channels.
185
- */
186
- async subscribe(channels) {
187
- return (await this.sendWithResponse({
188
- type: "subscribe",
189
- channels
190
- })).channels;
191
- }
192
- /**
193
- * Unsubscribe from channels.
194
- */
195
- async unsubscribe(channels) {
196
- return (await this.sendWithResponse({
197
- type: "unsubscribe",
198
- channels
199
- })).channels;
200
- }
201
- /**
202
- * Send a ping and wait for pong.
203
- */
204
- async ping() {
205
- const start = Date.now();
206
- await this.sendWithResponse({ type: "ping" });
207
- return Date.now() - start;
208
- }
209
- /**
210
- * Request replay of events since a timestamp.
211
- */
212
- replay(since) {
213
- this.send({
214
- type: "replay",
215
- since
216
- });
217
- }
218
- /**
219
- * Send terminal input via WebSocket.
220
- */
221
- sendTerminalInput(terminalId, input) {
222
- if (!this.isConnected()) return false;
223
- this.send({
224
- type: "terminal.input",
225
- data: {
226
- terminalId,
227
- input
228
- }
229
- });
230
- return true;
231
- }
232
- /**
233
- * Set the current session/execution context for event tracking.
234
- */
235
- setSessionContext(sessionId, executionId) {
236
- this.currentSessionId = sessionId;
237
- if (executionId) this.currentExecutionId = executionId;
238
- this.saveReplayState();
239
- }
240
- /**
241
- * Clear replay state (call when session ends).
242
- */
243
- clearReplayState() {
244
- this.lastEventId = null;
245
- this.currentExecutionId = null;
246
- this.currentSessionId = null;
247
- this.isReplaying = false;
248
- this.replayProgress = {
249
- total: 0,
250
- received: 0
251
- };
252
- this.processedEventIds.clear();
253
- this.duplicatesSkipped = 0;
254
- if (this.config.enableReplayPersistence) {
255
- const prefix = this.config.replayStorageKeyPrefix;
256
- try {
257
- this.config.replayStorage.removeItem(prefix + STORAGE_KEYS.lastEventId);
258
- this.config.replayStorage.removeItem(prefix + STORAGE_KEYS.executionId);
259
- this.config.replayStorage.removeItem(prefix + STORAGE_KEYS.sessionId);
260
- } catch {}
261
- }
262
- }
263
- /**
264
- * Get current replay state for UI indicators.
265
- */
266
- getReplayState() {
267
- return {
268
- isReplaying: this.isReplaying,
269
- progress: { ...this.replayProgress }
270
- };
271
- }
272
- /**
273
- * Get connection statistics.
274
- */
275
- getStats() {
276
- return {
277
- state: this.state,
278
- connectedAt: this.connectedAt,
279
- lastPingAt: this.lastPingAt,
280
- lastPongAt: this.lastPongAt,
281
- reconnectAttempts: this.reconnectAttempts,
282
- messagesReceived: this.messagesReceived,
283
- messagesSent: this.messagesSent,
284
- eventsReceived: this.eventsReceived,
285
- duplicatesSkipped: this.duplicatesSkipped,
286
- metrics: { ...this.connectionMetrics },
287
- replay: this.getReplayState()
288
- };
289
- }
290
- getState() {
291
- return this.state;
292
- }
293
- isConnected() {
294
- return this.state === "connected";
295
- }
296
- getConnectionQuality() {
297
- return this.connectionMetrics.quality;
298
- }
299
- getConnectionMetrics() {
300
- return { ...this.connectionMetrics };
301
- }
302
- resetMetrics() {
303
- this.pingLatencyHistory = [];
304
- this.connectionMetrics = { ...INITIAL_METRICS };
305
- this.handlers.onMetricsChange?.(this.connectionMetrics);
306
- }
307
- /**
308
- * Update the auth token and reconnect with the new token.
309
- */
310
- updateToken(token) {
311
- this.currentToken = token;
312
- if (this.state === "connected" && this.ws) this.ws.close(1e3, "Token refreshed");
313
- }
314
- /**
315
- * Get the current auth token.
316
- */
317
- getToken() {
318
- return this.currentToken;
319
- }
320
- setState(state) {
321
- if (this.state !== state) {
322
- this.state = state;
323
- this.updateConnectionQuality();
324
- this.handlers.onStateChange?.(state);
325
- }
326
- }
327
- handleOpen() {
328
- const isReconnect = this.hasConnectedBefore;
329
- this.hasConnectedBefore = true;
330
- this.setState("connected");
331
- this.connectedAt = Date.now();
332
- this.reconnectAttempts = 0;
333
- this.missedPongCount = 0;
334
- this.startPingInterval();
335
- this.restoreSubscriptions();
336
- if (isReconnect) {
337
- this.trackReconnection();
338
- this.handlers.onReconnect?.();
339
- }
340
- }
341
- handleClose(code, reason) {
342
- this.cleanup();
343
- this.handlers.onDisconnect?.(code, reason);
344
- if (this.config.autoReconnect && this.reconnectAttempts < this.config.maxReconnectAttempts) {
345
- this.setState("reconnecting");
346
- this.scheduleReconnect();
347
- } else this.setState("disconnected");
348
- }
349
- handleMessage(data) {
350
- this.messagesReceived++;
351
- try {
352
- const raw = JSON.parse(data);
353
- if (!raw.type && raw.messageType) raw.type = raw.messageType;
354
- if (typeof raw.type === "string" && WIRE_TYPE_MAP[raw.type] !== void 0) raw.type = WIRE_TYPE_MAP[raw.type];
355
- if (raw.data && typeof raw.data === "object") {
356
- const d = raw.data;
357
- if (d.sidecarId !== void 0 && d.sandboxId === void 0) d.sandboxId = d.sidecarId;
358
- }
359
- if (raw.type === "agent.event" && !raw.data && raw.channel) {
360
- const { type, messageType, channel, id, sequenceId, timestamp, ...rest } = raw;
361
- raw.data = rest;
362
- }
363
- const message = raw;
364
- if (message.type === "pong") {
365
- this.handlePong(message.timestamp);
366
- this.dispatchMessage(message);
367
- return;
368
- }
369
- if ("id" in message && message.id && this.config.enableDeduplication) {
370
- const eventId = message.id;
371
- if (this.processedEventIds.has(eventId)) {
372
- this.duplicatesSkipped++;
373
- return;
374
- }
375
- this.processedEventIds.add(eventId);
376
- if (this.processedEventIds.size > this.config.maxDeduplicationSize) {
377
- const entriesToRemove = Math.floor(this.config.maxDeduplicationSize * .1);
378
- let removed = 0;
379
- for (const oldId of this.processedEventIds) {
380
- if (removed >= entriesToRemove) break;
381
- this.processedEventIds.delete(oldId);
382
- removed++;
383
- }
384
- }
385
- this.lastEventId = eventId;
386
- this.saveReplayState();
387
- }
388
- this.dispatchMessage(message);
389
- } catch {}
390
- }
391
- handlePong(timestamp) {
392
- const now = Date.now();
393
- this.lastPongAt = timestamp;
394
- this.missedPongCount = 0;
395
- this.clearPongTimeout();
396
- if (this.lastPingSentAt) {
397
- const latency = now - this.lastPingSentAt;
398
- this.pingLatencyHistory.push(latency);
399
- if (this.pingLatencyHistory.length > this.config.latencyHistorySize) this.pingLatencyHistory.shift();
400
- this.updateConnectionMetrics(latency, now);
401
- }
402
- }
403
- dispatchMessage(message) {
404
- if ("id" in message && message.id) {
405
- const callback = this.pendingCallbacks.get(message.id);
406
- if (callback) {
407
- this.pendingCallbacks.delete(message.id);
408
- if (message.type === "error") callback.reject(new Error(message.message));
409
- else callback.resolve("data" in message ? message.data : void 0);
410
- return;
411
- }
412
- }
413
- switch (message.type) {
414
- case "connection.established":
415
- this.handlers.onConnect?.(message.data.sessionId);
416
- break;
417
- case "runtime.connected":
418
- this.handlers.onRuntimeConnected?.(message.data.sandboxId, message.data.baseUrl);
419
- break;
420
- case "runtime.disconnected":
421
- this.handlers.onRuntimeDisconnected?.(message.data.sandboxId, message.data.error);
422
- break;
423
- case "runtime.not_found":
424
- this.handlers.onRuntimeNotFound?.(message.data.sessionId, message.data.containerId, message.data.reason);
425
- break;
426
- case "container.ready": {
427
- const data = message.data;
428
- const id = data.sandboxId ?? data.sidecarId;
429
- if (id) this.handlers.onContainerReady?.(id);
430
- else this.handlers.onError?.("container.ready event received without sandboxId", "invalid_payload");
431
- break;
432
- }
433
- case "runtime.ready":
434
- this.handlers.onRuntimeReady?.(message.data);
435
- break;
436
- case "port.opened":
437
- this.handlers.onPortOpened?.(message.data.port, message.data.protocol, message.data.processName);
438
- break;
439
- case "port.closed":
440
- this.handlers.onPortClosed?.(message.data.port);
441
- break;
442
- case "agent.event":
443
- this.eventsReceived++;
444
- this.trackExecutionContext(message.data);
445
- this.handlers.onAgentEvent?.(message.channel, message.data, message.sequenceId);
446
- break;
447
- case "replay.start":
448
- this.isReplaying = true;
449
- this.replayProgress = {
450
- total: message.total,
451
- received: 0
452
- };
453
- this.handlers.onReplayStart?.(message.total);
454
- break;
455
- case "replay.progress":
456
- this.replayProgress.received = message.received;
457
- this.handlers.onReplayProgress?.(message.received, this.replayProgress.total);
458
- break;
459
- case "replay.complete":
460
- this.isReplaying = false;
461
- this.handlers.onReplayComplete?.(message.total);
462
- break;
463
- case "error":
464
- this.handlers.onError?.(message.message, message.code);
465
- break;
466
- case "token.expiring":
467
- this.handlers.onTokenExpiring?.(message.data.secondsRemaining);
468
- this.handleTokenExpiring();
469
- break;
470
- case "token.expired":
471
- this.handlers.onTokenExpired?.();
472
- break;
473
- case "backpressure.warning":
474
- this.handlers.onBackpressureWarning?.(message.data.droppedCount, message.data.since, message.data.totalDropped);
475
- break;
476
- }
477
- }
478
- trackExecutionContext(data) {
479
- if (typeof data !== "object" || data === null) return;
480
- const eventData = data;
481
- if (eventData.executionId) {
482
- this.currentExecutionId = eventData.executionId;
483
- this.saveReplayState();
484
- }
485
- if (eventData.type === "execution.started" && eventData.sessionId) {
486
- this.currentSessionId = eventData.sessionId;
487
- this.saveReplayState();
488
- }
489
- }
490
- async handleTokenExpiring() {
491
- if (!this.config.onTokenRefresh || this.isRefreshingToken) return;
492
- this.isRefreshingToken = true;
493
- try {
494
- const result = await this.config.onTokenRefresh();
495
- this.updateToken(result.token);
496
- } catch (error) {
497
- this.handlers.onError?.(`Token refresh failed: ${error instanceof Error ? error.message : String(error)}`, "TOKEN_REFRESH_FAILED");
498
- } finally {
499
- this.isRefreshingToken = false;
500
- }
501
- }
502
- send(message) {
503
- if (this.ws?.readyState === WebSocket.OPEN) {
504
- this.ws.send(JSON.stringify(message));
505
- this.messagesSent++;
506
- }
507
- }
508
- sendWithResponse(message) {
509
- return new Promise((resolve, reject) => {
510
- const id = `msg_${++this.messageIdCounter}`;
511
- this.pendingCallbacks.set(id, {
512
- resolve,
513
- reject
514
- });
515
- setTimeout(() => {
516
- if (this.pendingCallbacks.has(id)) {
517
- this.pendingCallbacks.delete(id);
518
- reject(/* @__PURE__ */ new Error("Request timeout"));
519
- }
520
- }, 1e4);
521
- this.send({
522
- ...message,
523
- id
524
- });
525
- });
526
- }
527
- restoreSubscriptions() {
528
- const channels = this.config.channels;
529
- const replayOptions = {};
530
- if (this.lastEventId) replayOptions.lastEventId = this.lastEventId;
531
- if (this.currentExecutionId) replayOptions.executionId = this.currentExecutionId;
532
- if (this.currentSessionId) replayOptions.sessionId = this.currentSessionId;
533
- const hasReplayState = Object.keys(replayOptions).length > 0;
534
- if (hasReplayState) {
535
- this.isReplaying = true;
536
- this.replayProgress = {
537
- total: 0,
538
- received: 0
539
- };
540
- }
541
- this.send({
542
- type: "subscribe",
543
- channels,
544
- ...hasReplayState ? { replayOptions } : {}
545
- });
546
- }
547
- startPingInterval() {
548
- this.stopPingInterval();
549
- this.pingInterval = setInterval(() => {
550
- this.sendPing();
551
- }, this.config.pingIntervalMs);
552
- }
553
- stopPingInterval() {
554
- if (this.pingInterval) {
555
- clearInterval(this.pingInterval);
556
- this.pingInterval = null;
557
- }
558
- }
559
- sendPing() {
560
- if (this.ws?.readyState !== WebSocket.OPEN) return;
561
- const timeSinceLastPong = this.lastPongAt ? Date.now() - this.lastPongAt : 0;
562
- if (this.lastPongAt && timeSinceLastPong > this.config.pongTimeoutMs) {
563
- this.missedPongCount++;
564
- this.connectionMetrics = {
565
- ...this.connectionMetrics,
566
- missedPongCount: this.missedPongCount
567
- };
568
- this.updateConnectionQuality();
569
- if (this.missedPongCount >= this.config.maxMissedPongs) {
570
- this.ws?.close(4e3, "Pong timeout - connection unresponsive");
571
- return;
572
- }
573
- }
574
- this.lastPingAt = Date.now();
575
- this.lastPingSentAt = Date.now();
576
- this.send({ type: "ping" });
577
- this.pongTimeout = setTimeout(() => {
578
- this.missedPongCount++;
579
- this.connectionMetrics = {
580
- ...this.connectionMetrics,
581
- missedPongCount: this.missedPongCount
582
- };
583
- this.updateConnectionQuality();
584
- if (this.missedPongCount >= this.config.maxMissedPongs) this.ws?.close(4e3, "Pong timeout - connection unresponsive");
585
- }, this.config.pongTimeoutMs);
586
- }
587
- clearPongTimeout() {
588
- if (this.pongTimeout) {
589
- clearTimeout(this.pongTimeout);
590
- this.pongTimeout = null;
591
- }
592
- }
593
- scheduleReconnect() {
594
- if (this.reconnectTimer) return;
595
- this.reconnectAttempts++;
596
- const delay = Math.min(this.config.initialReconnectDelayMs * 2 ** (this.reconnectAttempts - 1), this.config.maxReconnectDelayMs);
597
- const jitter = delay * .3 * (Math.random() * 2 - 1);
598
- this.reconnectTimer = setTimeout(() => {
599
- this.reconnectTimer = null;
600
- this.connect();
601
- }, delay + jitter);
602
- }
603
- cleanup() {
604
- this.stopPingInterval();
605
- this.clearPongTimeout();
606
- if (this.reconnectTimer) {
607
- clearTimeout(this.reconnectTimer);
608
- this.reconnectTimer = null;
609
- }
610
- for (const [id, callback] of this.pendingCallbacks) {
611
- callback.reject(/* @__PURE__ */ new Error("Connection closed"));
612
- this.pendingCallbacks.delete(id);
613
- }
614
- }
615
- updateConnectionMetrics(latency, pongTime) {
616
- const avgLatency = this.pingLatencyHistory.length > 0 ? this.pingLatencyHistory.reduce((a, b) => a + b, 0) / this.pingLatencyHistory.length : null;
617
- this.connectionMetrics = {
618
- ...this.connectionMetrics,
619
- lastPingLatencyMs: latency,
620
- avgPingLatencyMs: avgLatency,
621
- missedPongCount: this.missedPongCount,
622
- lastPongAt: pongTime
623
- };
624
- this.updateConnectionQuality();
625
- }
626
- updateConnectionQuality() {
627
- const isConnected = this.state === "connected";
628
- const quality = calculateConnectionQuality(this.connectionMetrics, isConnected);
629
- if (this.connectionMetrics.quality !== quality) {
630
- this.connectionMetrics = {
631
- ...this.connectionMetrics,
632
- quality
633
- };
634
- this.handlers.onMetricsChange?.(this.connectionMetrics);
635
- }
636
- }
637
- trackReconnection() {
638
- const now = Date.now();
639
- this.connectionMetrics = {
640
- ...this.connectionMetrics,
641
- reconnectCount: this.connectionMetrics.reconnectCount + 1,
642
- lastReconnectAt: now
643
- };
644
- this.pingLatencyHistory = [];
645
- this.updateConnectionQuality();
646
- }
647
- loadReplayState() {
648
- if (!this.config.enableReplayPersistence) return;
649
- const prefix = this.config.replayStorageKeyPrefix;
650
- try {
651
- this.lastEventId = this.config.replayStorage.getItem(prefix + STORAGE_KEYS.lastEventId);
652
- this.currentExecutionId = this.config.replayStorage.getItem(prefix + STORAGE_KEYS.executionId);
653
- this.currentSessionId = this.config.replayStorage.getItem(prefix + STORAGE_KEYS.sessionId);
654
- } catch {}
655
- }
656
- saveReplayState() {
657
- if (!this.config.enableReplayPersistence) return;
658
- const prefix = this.config.replayStorageKeyPrefix;
659
- try {
660
- if (this.lastEventId) this.config.replayStorage.setItem(prefix + STORAGE_KEYS.lastEventId, this.lastEventId);
661
- if (this.currentExecutionId) this.config.replayStorage.setItem(prefix + STORAGE_KEYS.executionId, this.currentExecutionId);
662
- if (this.currentSessionId) this.config.replayStorage.setItem(prefix + STORAGE_KEYS.sessionId, this.currentSessionId);
663
- } catch {}
664
- }
665
- };
666
- //#endregion
667
- export { INITIAL_METRICS, SessionGatewayClient, calculateConnectionQuality };
1
+ const a0_0x4ca84e=a0_0x57eb;(function(_0x5bfe99,_0x5b2d12){const _0x56573a=a0_0x57eb,_0x396ce1=_0x5bfe99();while(!![]){try{const _0x98b250=-parseInt(_0x56573a(0x226))/0x1*(parseInt(_0x56573a(0x189))/0x2)+parseInt(_0x56573a(0x1ac))/0x3+-parseInt(_0x56573a(0x243))/0x4+-parseInt(_0x56573a(0x20e))/0x5*(parseInt(_0x56573a(0x1a4))/0x6)+-parseInt(_0x56573a(0x23a))/0x7*(parseInt(_0x56573a(0x1f7))/0x8)+parseInt(_0x56573a(0x229))/0x9*(parseInt(_0x56573a(0x167))/0xa)+parseInt(_0x56573a(0x198))/0xb;if(_0x98b250===_0x5b2d12)break;else _0x396ce1['push'](_0x396ce1['shift']());}catch(_0x2dd156){_0x396ce1['push'](_0x396ce1['shift']());}}}(a0_0x9f72,0x5020a));function a0_0x57eb(_0x4106e3,_0x37a189){_0x4106e3=_0x4106e3-0x160;const _0x9f729c=a0_0x9f72();let _0x57ebe8=_0x9f729c[_0x4106e3];if(a0_0x57eb['\x78\x4e\x78\x51\x74\x59']===undefined){var _0x491ddc=function(_0x1b9904){const _0x5446ad='\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x2b\x2f\x3d';let _0x63bfd0='',_0x44d140='';for(let _0x182a3e=0x0,_0x270a59,_0x2b20e2,_0x141843=0x0;_0x2b20e2=_0x1b9904['\x63\x68\x61\x72\x41\x74'](_0x141843++);~_0x2b20e2&&(_0x270a59=_0x182a3e%0x4?_0x270a59*0x40+_0x2b20e2:_0x2b20e2,_0x182a3e++%0x4)?_0x63bfd0+=String['\x66\x72\x6f\x6d\x43\x68\x61\x72\x43\x6f\x64\x65'](0xff&_0x270a59>>(-0x2*_0x182a3e&0x6)):0x0){_0x2b20e2=_0x5446ad['\x69\x6e\x64\x65\x78\x4f\x66'](_0x2b20e2);}for(let _0x273a48=0x0,_0x52afe9=_0x63bfd0['\x6c\x65\x6e\x67\x74\x68'];_0x273a48<_0x52afe9;_0x273a48++){_0x44d140+='\x25'+('\x30\x30'+_0x63bfd0['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0x273a48)['\x74\x6f\x53\x74\x72\x69\x6e\x67'](0x10))['\x73\x6c\x69\x63\x65'](-0x2);}return decodeURIComponent(_0x44d140);};a0_0x57eb['\x66\x74\x6b\x72\x61\x53']=_0x491ddc,a0_0x57eb['\x66\x59\x45\x71\x54\x44']={},a0_0x57eb['\x78\x4e\x78\x51\x74\x59']=!![];}const _0x160043=_0x9f729c[0x0],_0x1a33d4=_0x4106e3+_0x160043,_0x106899=a0_0x57eb['\x66\x59\x45\x71\x54\x44'][_0x1a33d4];return!_0x106899?(_0x57ebe8=a0_0x57eb['\x66\x74\x6b\x72\x61\x53'](_0x57ebe8),a0_0x57eb['\x66\x59\x45\x71\x54\x44'][_0x1a33d4]=_0x57ebe8):_0x57ebe8=_0x106899,_0x57ebe8;}function a0_0x9f72(){const _0x44eded=['\x43\x4d\x76\x57\x42\x67\x66\x35\x6c\x4e\x62\x59\x42\x32\x44\x59\x7a\x78\x6e\x5a','\x7a\x32\x76\x30\x71\x32\x39\x55\x42\x4d\x76\x4a\x44\x67\x4c\x56\x42\x4c\x66\x31\x79\x77\x58\x50\x44\x68\x4b','\x7a\x78\x48\x4a\x7a\x77\x58\x53\x7a\x77\x35\x30','\x41\x67\x66\x55\x7a\x67\x58\x4c\x74\x33\x62\x4c\x42\x47','\x42\x77\x76\x5a\x43\x32\x66\x4e\x7a\x78\x6e\x73\x7a\x77\x6e\x4c\x41\x78\x7a\x4c\x7a\x61','\x44\x75\x44\x30\x79\x32\x69','\x43\x32\x76\x30\x73\x78\x72\x4c\x42\x71','\x6e\x32\x48\x72\x71\x4e\x48\x6b\x44\x61','\x42\x75\x35\x32\x76\x4c\x61','\x41\x78\x6e\x64\x42\x32\x35\x55\x7a\x77\x6e\x30\x7a\x77\x71','\x6e\x5a\x6a\x49\x73\x4c\x48\x57\x75\x4c\x79','\x43\x78\x76\x48\x42\x67\x4c\x30\x45\x71','\x43\x67\x4c\x55\x7a\x30\x4c\x55\x44\x67\x76\x59\x44\x4d\x66\x53','\x43\x4d\x76\x48\x7a\x68\x4c\x74\x44\x67\x66\x30\x7a\x71','\x43\x32\x76\x55\x7a\x66\x62\x50\x42\x4d\x43','\x42\x32\x35\x63\x79\x77\x6e\x52\x43\x68\x6a\x4c\x43\x33\x6e\x31\x43\x4d\x76\x78\x79\x78\x6a\x55\x41\x77\x35\x4e','\x42\x32\x35\x56\x43\x67\x76\x55','\x79\x32\x39\x55\x42\x4d\x76\x4a\x44\x67\x76\x4b\x71\x78\x71','\x43\x4e\x76\x55\x44\x67\x4c\x54\x7a\x73\x35\x59\x7a\x77\x66\x4b\x45\x71','\x43\x32\x4c\x4b\x7a\x77\x6e\x48\x43\x4b\x4c\x4b','\x73\x65\x7a\x4f\x74\x30\x47','\x7a\x68\x76\x57\x42\x67\x4c\x4a\x79\x78\x72\x4c\x43\x31\x6e\x52\x41\x78\x62\x57\x7a\x77\x71','\x43\x32\x76\x55\x7a\x66\x72\x4c\x43\x4d\x31\x50\x42\x4d\x66\x53\x73\x77\x35\x57\x44\x78\x71','\x44\x67\x39\x52\x7a\x77\x34\x55\x7a\x78\x48\x57\x41\x78\x6a\x4c\x7a\x61','\x43\x32\x76\x30','\x42\x77\x76\x5a\x43\x32\x66\x4e\x7a\x71','\x43\x4d\x76\x5a\x44\x67\x39\x59\x7a\x76\x6e\x31\x79\x4e\x6e\x4a\x43\x4d\x4c\x57\x44\x67\x4c\x56\x42\x4e\x6d','\x6f\x74\x75\x59\x6e\x30\x35\x6d\x44\x4c\x72\x49\x42\x71','\x43\x32\x76\x55\x7a\x61','\x43\x4d\x76\x4a\x42\x32\x35\x55\x7a\x77\x6e\x30\x71\x78\x72\x30\x7a\x77\x31\x57\x44\x68\x6d','\x71\x32\x39\x55\x42\x4d\x76\x4a\x44\x67\x4c\x56\x42\x49\x62\x4a\x42\x67\x39\x5a\x7a\x77\x71','\x41\x76\x48\x73\x79\x4d\x57','\x7a\x77\x35\x48\x79\x4d\x58\x4c\x72\x67\x76\x4b\x44\x78\x62\x53\x41\x77\x6e\x48\x44\x67\x4c\x56\x42\x47','\x77\x77\x72\x48\x41\x77\x71','\x7a\x78\x48\x4c\x79\x33\x76\x30\x41\x77\x39\x55\x73\x77\x71','\x43\x4d\x76\x5a\x42\x32\x58\x32\x7a\x71','\x6d\x74\x75\x33\x6e\x4a\x43\x31\x6e\x4b\x4c\x4e\x75\x4b\x7a\x5a\x71\x47','\x45\x78\x76\x7a\x41\x4b\x34','\x43\x4d\x76\x57\x42\x67\x66\x35\x75\x68\x6a\x56\x7a\x33\x6a\x4c\x43\x33\x6d','\x43\x68\x6a\x56\x44\x67\x39\x4a\x42\x32\x57','\x7a\x67\x4c\x5a\x79\x32\x39\x55\x42\x4d\x76\x4a\x44\x61','\x76\x66\x4c\x70\x43\x77\x6d','\x41\x67\x66\x5a','\x43\x33\x72\x56\x43\x4d\x75','\x43\x4d\x76\x54\x42\x33\x7a\x4c\x73\x78\x72\x4c\x42\x71','\x44\x78\x62\x4b\x79\x78\x72\x4c\x71\x32\x39\x55\x42\x4d\x76\x4a\x44\x67\x4c\x56\x42\x4b\x31\x4c\x44\x68\x6a\x50\x79\x33\x6d','\x79\x76\x44\x75\x45\x65\x6d','\x43\x32\x4c\x55\x79\x32\x75','\x42\x67\x66\x5a\x44\x66\x62\x56\x42\x4d\x44\x62\x44\x61','\x6e\x4a\x69\x33\x6e\x74\x71\x57\x41\x30\x39\x56\x41\x32\x35\x7a','\x41\x67\x66\x55\x7a\x67\x58\x4c\x74\x77\x76\x5a\x43\x32\x66\x4e\x7a\x71','\x76\x67\x39\x52\x7a\x77\x34\x47\x43\x4d\x76\x4d\x43\x4d\x76\x5a\x41\x67\x76\x4b','\x79\x32\x39\x55\x44\x67\x66\x50\x42\x4d\x76\x59\x6c\x4e\x6a\x4c\x79\x77\x72\x35','\x7a\x32\x76\x30\x75\x33\x72\x48\x44\x67\x75','\x43\x4d\x76\x57\x42\x67\x66\x35','\x74\x32\x31\x35\x76\x77\x69','\x79\x32\x58\x56\x43\x32\x75','\x42\x32\x35\x73\x7a\x78\x62\x53\x79\x78\x4c\x64\x42\x32\x31\x57\x42\x67\x76\x30\x7a\x71','\x43\x32\x76\x5a\x43\x32\x4c\x56\x42\x4b\x4c\x4b','\x42\x67\x66\x5a\x44\x66\x62\x50\x42\x4d\x44\x62\x44\x61','\x44\x75\x35\x71\x74\x33\x47','\x43\x33\x72\x48\x43\x4e\x72\x71\x41\x77\x35\x4e\x73\x77\x35\x30\x7a\x78\x6a\x32\x79\x77\x57','\x41\x67\x66\x55\x7a\x67\x58\x4c\x43\x4e\x6d','\x73\x4d\x7a\x62\x77\x68\x65','\x43\x67\x39\x59\x44\x63\x35\x4a\x42\x67\x39\x5a\x7a\x77\x71','\x7a\x32\x76\x30','\x42\x77\x66\x34\x75\x4d\x76\x4a\x42\x32\x35\x55\x7a\x77\x6e\x30\x72\x67\x76\x53\x79\x78\x4c\x6e\x43\x57','\x43\x4e\x76\x55\x44\x67\x4c\x54\x7a\x73\x35\x55\x42\x33\x72\x46\x7a\x4d\x39\x31\x42\x4d\x71','\x42\x77\x66\x34\x72\x67\x76\x4b\x44\x78\x62\x53\x41\x77\x6e\x48\x44\x67\x4c\x56\x42\x4c\x6e\x50\x45\x4d\x75','\x42\x67\x76\x55\x7a\x33\x72\x4f','\x42\x32\x35\x65\x41\x78\x6e\x4a\x42\x32\x35\x55\x7a\x77\x6e\x30','\x73\x77\x6a\x55\x43\x77\x71','\x41\x32\x76\x35\x43\x57','\x7a\x78\x7a\x4c\x42\x4e\x72\x5a\x75\x4d\x76\x4a\x7a\x77\x4c\x32\x7a\x77\x71','\x41\x78\x6e\x73\x7a\x77\x7a\x59\x7a\x78\x6e\x4f\x41\x77\x35\x4e\x76\x67\x39\x52\x7a\x77\x34','\x43\x67\x39\x55\x7a\x57','\x44\x33\x62\x31\x77\x76\x47','\x79\x32\x58\x4c\x79\x78\x69','\x76\x30\x31\x55\x42\x68\x43','\x41\x30\x6e\x4d\x75\x32\x79','\x44\x68\x6a\x48\x79\x32\x54\x66\x45\x67\x76\x4a\x44\x78\x72\x50\x42\x32\x35\x64\x42\x32\x35\x30\x7a\x78\x48\x30','\x43\x4d\x76\x57\x42\x67\x66\x35\x75\x33\x72\x56\x43\x4d\x66\x4e\x7a\x71','\x42\x67\x66\x5a\x44\x66\x39\x4c\x44\x4d\x76\x55\x44\x66\x39\x50\x7a\x61','\x6d\x74\x43\x32\x6e\x5a\x4b\x30\x44\x76\x6a\x62\x79\x76\x6e\x6a','\x44\x67\x39\x74\x44\x68\x6a\x50\x42\x4d\x43','\x43\x33\x72\x48\x44\x67\x75','\x43\x32\x66\x55\x7a\x67\x6a\x56\x45\x65\x4c\x4b','\x43\x4d\x76\x4b\x44\x77\x6e\x4c','\x42\x32\x35\x73\x7a\x78\x62\x53\x79\x78\x4c\x71\x43\x4d\x39\x4e\x43\x4d\x76\x5a\x43\x57','\x42\x67\x39\x4a\x79\x77\x58\x74\x44\x67\x39\x59\x79\x77\x44\x4c','\x42\x77\x4c\x5a\x43\x32\x76\x4b\x75\x67\x39\x55\x7a\x30\x6e\x56\x44\x77\x35\x30','\x7a\x32\x76\x30\x76\x67\x39\x52\x7a\x77\x34','\x7a\x78\x48\x4c\x79\x33\x76\x30\x41\x77\x39\x55\x6c\x4e\x6e\x30\x79\x78\x6a\x30\x7a\x77\x71','\x41\x32\x48\x72\x41\x77\x65','\x43\x4e\x76\x55\x44\x67\x4c\x54\x7a\x73\x35\x4a\x42\x32\x35\x55\x7a\x77\x6e\x30\x7a\x77\x71','\x75\x67\x39\x55\x7a\x59\x62\x30\x41\x77\x31\x4c\x42\x33\x76\x30\x69\x63\x30\x47\x79\x32\x39\x55\x42\x4d\x76\x4a\x44\x67\x4c\x56\x42\x49\x62\x31\x42\x4e\x6a\x4c\x43\x33\x62\x56\x42\x4e\x6e\x50\x44\x4d\x75','\x42\x32\x35\x64\x42\x32\x35\x30\x79\x77\x4c\x55\x7a\x78\x6a\x73\x7a\x77\x66\x4b\x45\x71','\x79\x32\x48\x48\x42\x4d\x35\x4c\x42\x68\x6d','\x6d\x74\x43\x59\x6d\x74\x4b\x58\x6e\x74\x48\x4a\x76\x75\x6e\x6f\x74\x31\x71','\x79\x32\x39\x55\x42\x4d\x76\x4a\x44\x67\x76\x4b','\x79\x32\x58\x4c\x79\x78\x6a\x71\x42\x32\x35\x4e\x76\x67\x4c\x54\x7a\x77\x39\x31\x44\x61','\x44\x67\x39\x30\x79\x77\x57','\x42\x67\x66\x30\x7a\x77\x35\x4a\x45\x75\x48\x50\x43\x33\x72\x56\x43\x4e\x4c\x74\x41\x78\x50\x4c','\x43\x67\x4c\x55\x7a\x30\x4c\x55\x44\x67\x76\x59\x44\x4d\x66\x53\x74\x78\x6d','\x43\x32\x76\x48\x43\x4d\x6e\x4f\x75\x67\x66\x59\x79\x77\x31\x5a','\x76\x65\x39\x6c\x72\x75\x35\x46\x75\x4b\x76\x67\x75\x4b\x76\x74\x73\x66\x39\x67\x71\x75\x4c\x6d\x72\x75\x71','\x7a\x67\x4c\x5a\x43\x67\x66\x30\x79\x32\x48\x6e\x7a\x78\x6e\x5a\x79\x77\x44\x4c','\x41\x77\x35\x32\x79\x77\x58\x50\x7a\x66\x39\x57\x79\x78\x4c\x53\x42\x32\x66\x4b','\x43\x67\x39\x55\x7a\x31\x72\x50\x42\x77\x76\x56\x44\x78\x72\x6e\x43\x57','\x79\x32\x39\x55\x42\x4d\x76\x4a\x44\x61','\x6d\x74\x65\x30\x44\x77\x54\x56\x72\x77\x4c\x55','\x78\x31\x39\x30\x7a\x78\x6e\x30\x78\x31\x38','\x44\x78\x62\x4b\x79\x78\x72\x4c\x76\x67\x39\x52\x7a\x77\x34','\x71\x31\x72\x4a\x75\x76\x65','\x41\x67\x66\x55\x7a\x67\x58\x4c\x75\x67\x39\x55\x7a\x57','\x79\x77\x44\x4c\x42\x4e\x71\x55\x7a\x78\x7a\x4c\x42\x4e\x71','\x42\x32\x35\x71\x42\x33\x6a\x30\x74\x33\x62\x4c\x42\x4d\x76\x4b','\x41\x4c\x66\x4c\x74\x4d\x65','\x6e\x74\x61\x30\x6e\x4a\x71\x34\x74\x31\x6a\x5a\x75\x32\x4c\x62','\x43\x67\x76\x55\x7a\x67\x4c\x55\x7a\x30\x6e\x48\x42\x67\x58\x49\x79\x77\x6e\x52\x43\x57','\x75\x68\x4c\x4d\x76\x31\x43','\x42\x77\x66\x34\x74\x77\x4c\x5a\x43\x32\x76\x4b\x75\x67\x39\x55\x7a\x33\x6d','\x79\x32\x58\x4c\x79\x77\x35\x31\x43\x61','\x79\x4d\x66\x4a\x41\x33\x62\x59\x7a\x78\x6e\x5a\x44\x78\x6a\x4c\x6c\x4e\x44\x48\x43\x4d\x35\x50\x42\x4d\x43','\x43\x4d\x76\x5a\x7a\x78\x72\x6e\x7a\x78\x72\x59\x41\x77\x6e\x5a','\x42\x32\x35\x73\x44\x77\x35\x30\x41\x77\x31\x4c\x74\x4d\x39\x30\x72\x4d\x39\x31\x42\x4d\x71','\x42\x77\x66\x34\x75\x4d\x76\x4a\x42\x32\x35\x55\x7a\x77\x6e\x30\x71\x78\x72\x30\x7a\x77\x31\x57\x44\x68\x6d','\x42\x67\x66\x5a\x44\x66\x62\x50\x42\x4d\x44\x74\x7a\x77\x35\x30\x71\x78\x71','\x79\x32\x39\x4b\x7a\x71','\x7a\x32\x76\x30\x73\x78\x72\x4c\x42\x71','\x42\x32\x35\x73\x44\x77\x35\x30\x41\x77\x31\x4c\x75\x4d\x76\x48\x7a\x68\x4b','\x44\x67\x39\x52\x7a\x77\x34','\x41\x4c\x76\x6b\x79\x76\x69','\x43\x32\x66\x32\x7a\x76\x6a\x4c\x43\x67\x58\x48\x45\x76\x6e\x30\x79\x78\x72\x4c','\x42\x4d\x39\x33','\x41\x77\x35\x50\x44\x67\x4c\x48\x42\x66\x6a\x4c\x79\x32\x39\x55\x42\x4d\x76\x4a\x44\x65\x72\x4c\x42\x67\x66\x35\x74\x78\x6d','\x44\x78\x62\x4b\x79\x78\x72\x4c\x71\x32\x39\x55\x42\x4d\x76\x4a\x44\x67\x4c\x56\x42\x4c\x66\x31\x79\x77\x58\x50\x44\x68\x4b','\x43\x67\x35\x4a\x76\x4e\x43','\x43\x4d\x76\x51\x7a\x77\x6e\x30','\x43\x32\x76\x5a\x43\x32\x4c\x56\x42\x4c\x39\x4e\x79\x78\x72\x4c\x44\x32\x66\x35\x78\x57','\x42\x32\x35\x75\x42\x32\x54\x4c\x42\x4c\x6a\x4c\x7a\x4e\x6a\x4c\x43\x32\x47','\x42\x32\x35\x75\x42\x32\x54\x4c\x42\x4b\x76\x34\x43\x67\x4c\x59\x7a\x77\x71','\x44\x67\x39\x52\x7a\x77\x34\x55\x7a\x78\x48\x57\x41\x78\x6a\x50\x42\x4d\x43','\x44\x67\x76\x59\x42\x77\x4c\x55\x79\x77\x57\x55\x41\x77\x35\x57\x44\x78\x71','\x43\x4e\x76\x55\x44\x67\x4c\x54\x7a\x73\x35\x4b\x41\x78\x6e\x4a\x42\x32\x35\x55\x7a\x77\x6e\x30\x7a\x77\x71','\x79\x33\x76\x59\x43\x4d\x76\x55\x44\x65\x76\x34\x7a\x77\x6e\x31\x44\x67\x4c\x56\x42\x4b\x4c\x4b','\x45\x68\x4c\x4d\x45\x67\x43','\x7a\x4b\x66\x69\x77\x67\x79','\x43\x67\x39\x56\x43\x47','\x43\x32\x76\x30\x75\x32\x76\x5a\x43\x32\x4c\x56\x42\x4b\x6e\x56\x42\x4e\x72\x4c\x45\x68\x71','\x44\x68\x6a\x48\x79\x32\x54\x73\x7a\x77\x6e\x56\x42\x4d\x35\x4c\x79\x33\x72\x50\x42\x32\x34','\x41\x67\x66\x55\x7a\x67\x58\x4c\x71\x32\x58\x56\x43\x32\x75','\x79\x77\x72\x4b','\x43\x32\x76\x55\x7a\x66\x44\x50\x44\x67\x48\x73\x7a\x78\x6e\x57\x42\x32\x35\x5a\x7a\x71','\x43\x67\x39\x59\x44\x61','\x43\x32\x76\x30\x75\x33\x72\x48\x44\x67\x75','\x43\x33\x76\x49\x43\x32\x6e\x59\x41\x77\x6a\x4c','\x44\x4b\x35\x4a\x72\x65\x65','\x44\x77\x35\x4b\x7a\x77\x7a\x50\x42\x4d\x76\x4b','\x79\x32\x48\x48\x42\x4d\x35\x4c\x42\x61','\x79\x33\x76\x59\x43\x4d\x76\x55\x44\x66\x72\x56\x41\x32\x76\x55','\x7a\x68\x6a\x56\x43\x68\x62\x4c\x7a\x65\x6e\x56\x44\x77\x35\x30','\x43\x32\x4c\x36\x7a\x71','\x42\x32\x35\x71\x42\x33\x6a\x30\x71\x32\x58\x56\x43\x32\x76\x4b','\x79\x33\x76\x59\x43\x4d\x76\x55\x44\x66\x6e\x4c\x43\x33\x6e\x50\x42\x32\x35\x6a\x7a\x61','\x42\x78\x6e\x4e\x78\x57','\x7a\x32\x39\x56\x7a\x61','\x79\x32\x39\x55\x42\x4d\x76\x4a\x44\x66\x44\x4c\x79\x4c\x6e\x56\x79\x32\x54\x4c\x44\x61','\x43\x32\x48\x50\x7a\x4e\x71','\x43\x4d\x76\x4a\x42\x32\x35\x55\x7a\x77\x6e\x30\x76\x67\x4c\x54\x7a\x78\x69','\x44\x66\x44\x72\x72\x77\x4b','\x73\x30\x44\x4f\x76\x66\x69','\x79\x32\x39\x55\x42\x4d\x76\x4a\x44\x67\x4c\x55\x7a\x57','\x42\x32\x35\x73\x7a\x77\x6e\x56\x42\x4d\x35\x4c\x79\x33\x71','\x42\x77\x76\x5a\x43\x32\x66\x4e\x7a\x76\x72\x35\x43\x67\x75','\x44\x68\x6a\x48\x42\x4e\x6e\x57\x42\x33\x6a\x30','\x42\x77\x76\x5a\x43\x32\x66\x4e\x7a\x75\x4c\x4b\x71\x32\x39\x31\x42\x4e\x72\x4c\x43\x47','\x43\x65\x44\x54\x73\x4d\x47','\x42\x32\x6a\x51\x7a\x77\x6e\x30','\x43\x67\x4c\x55\x7a\x30\x58\x48\x44\x67\x76\x55\x79\x33\x4c\x69\x41\x78\x6e\x30\x42\x33\x6a\x35','\x7a\x77\x35\x48\x79\x4d\x58\x4c\x75\x4d\x76\x57\x42\x67\x66\x35\x75\x67\x76\x59\x43\x32\x4c\x5a\x44\x67\x76\x55\x79\x32\x75','\x42\x67\x66\x5a\x44\x65\x76\x32\x7a\x77\x35\x30\x73\x77\x71','\x42\x67\x39\x48\x7a\x66\x6a\x4c\x43\x67\x58\x48\x45\x76\x6e\x30\x79\x78\x72\x4c','\x7a\x67\x4c\x5a\x79\x32\x39\x55\x42\x4d\x76\x4a\x44\x67\x76\x4b','\x44\x78\x6a\x53','\x79\x78\x76\x30\x42\x31\x6a\x4c\x79\x32\x39\x55\x42\x4d\x76\x4a\x44\x61','\x44\x68\x4c\x57\x7a\x71','\x43\x68\x6a\x56\x79\x32\x76\x5a\x43\x32\x76\x4b\x72\x78\x7a\x4c\x42\x4e\x72\x6a\x7a\x68\x6d','\x43\x4d\x76\x57\x42\x67\x66\x35\x75\x33\x72\x56\x43\x4d\x66\x4e\x7a\x75\x54\x4c\x45\x76\x62\x59\x7a\x77\x7a\x50\x45\x61','\x43\x4d\x76\x4a\x7a\x77\x4c\x32\x7a\x77\x71','\x77\x68\x6a\x59\x71\x4b\x75','\x79\x32\x58\x4c\x79\x78\x6a\x73\x7a\x78\x62\x53\x79\x78\x4c\x74\x44\x67\x66\x30\x7a\x71','\x42\x32\x35\x62\x7a\x32\x76\x55\x44\x65\x76\x32\x7a\x77\x35\x30','\x6d\x5a\x79\x31\x6e\x4e\x66\x33\x72\x65\x31\x67\x75\x71','\x77\x75\x44\x78\x44\x65\x53','\x74\x31\x62\x66\x74\x47','\x7a\x4b\x31\x51\x44\x30\x38','\x42\x32\x35\x73\x44\x77\x35\x30\x41\x77\x31\x4c\x72\x67\x4c\x5a\x79\x32\x39\x55\x42\x4d\x76\x4a\x44\x67\x76\x4b','\x7a\x67\x76\x53\x7a\x78\x72\x4c','\x43\x67\x39\x55\x7a\x31\x72\x50\x42\x77\x76\x56\x44\x78\x71','\x41\x67\x66\x5a\x71\x32\x39\x55\x42\x4d\x76\x4a\x44\x67\x76\x4b\x71\x4d\x76\x4d\x42\x33\x6a\x4c','\x7a\x32\x76\x30\x75\x33\x72\x48\x44\x68\x6d','\x43\x33\x72\x59\x41\x77\x35\x4e\x41\x77\x7a\x35','\x42\x77\x76\x5a\x43\x32\x66\x4e\x7a\x78\x6e\x74\x7a\x77\x35\x30','\x76\x78\x62\x50\x76\x76\x47','\x42\x32\x35\x66\x43\x4e\x6a\x56\x43\x47','\x42\x32\x35\x73\x7a\x78\x62\x53\x79\x78\x4c\x74\x44\x67\x66\x59\x44\x61','\x7a\x78\x6a\x59\x42\x33\x69','\x42\x32\x35\x64\x42\x32\x35\x55\x7a\x77\x6e\x30','\x42\x32\x35\x6e\x7a\x78\x72\x59\x41\x77\x6e\x5a\x71\x32\x48\x48\x42\x4d\x44\x4c','\x79\x4c\x6a\x69\x43\x4b\x4b','\x42\x32\x54\x55\x41\x31\x65','\x42\x32\x35\x73\x44\x77\x35\x30\x41\x77\x31\x4c\x71\x32\x39\x55\x42\x4d\x76\x4a\x44\x67\x76\x4b','\x44\x67\x4c\x54\x7a\x78\x6e\x30\x79\x77\x31\x57','\x79\x32\x39\x55\x42\x4d\x76\x4a\x44\x67\x4c\x56\x42\x4b\x31\x4c\x44\x68\x6a\x50\x79\x33\x6d','\x79\x32\x39\x55\x42\x4d\x76\x4a\x44\x67\x4c\x56\x42\x49\x35\x4c\x43\x33\x72\x48\x79\x4d\x58\x50\x43\x32\x48\x4c\x7a\x61','\x6e\x5a\x65\x33\x6d\x64\x76\x76\x42\x31\x44\x41\x73\x4c\x6d','\x79\x32\x39\x55\x7a\x4d\x4c\x4e','\x41\x78\x6e\x73\x7a\x78\x62\x53\x79\x78\x4c\x50\x42\x4d\x43','\x41\x31\x7a\x7a\x45\x4d\x79','\x7a\x67\x66\x30\x79\x71','\x44\x65\x76\x33\x77\x75\x34','\x7a\x32\x76\x30\x75\x4d\x76\x57\x42\x67\x66\x35\x75\x33\x72\x48\x44\x67\x75','\x42\x32\x35\x4a\x42\x67\x39\x5a\x7a\x71','\x41\x67\x66\x55\x7a\x67\x58\x4c\x76\x67\x39\x52\x7a\x77\x35\x66\x45\x68\x62\x50\x43\x4d\x4c\x55\x7a\x57','\x43\x33\x72\x56\x43\x66\x62\x50\x42\x4d\x44\x6a\x42\x4e\x72\x4c\x43\x4e\x7a\x48\x42\x61','\x79\x32\x39\x55\x44\x67\x66\x50\x42\x4d\x76\x59\x6c\x4e\x6a\x4c\x79\x77\x72\x35\x69\x67\x76\x32\x7a\x77\x35\x30\x69\x68\x6a\x4c\x79\x32\x76\x50\x44\x4d\x76\x4b\x69\x68\x44\x50\x44\x67\x48\x56\x44\x78\x71\x47\x43\x32\x66\x55\x7a\x67\x6a\x56\x45\x65\x4c\x4b','\x75\x77\x6e\x34\x76\x65\x4b','\x44\x32\x76\x49\x43\x32\x39\x4a\x41\x32\x76\x30','\x43\x67\x4c\x55\x7a\x57','\x44\x77\x35\x5a\x44\x77\x6a\x5a\x79\x33\x6a\x50\x79\x4d\x75','\x42\x32\x35\x54\x7a\x78\x6e\x5a\x79\x77\x44\x4c','\x43\x4d\x76\x4a\x42\x32\x35\x55\x7a\x77\x6e\x30\x71\x32\x39\x31\x42\x4e\x71'];a0_0x9f72=function(){return _0x44eded;};return a0_0x9f72();}const INITIAL_METRICS={'\x6c\x61\x73\x74\x50\x69\x6e\x67\x4c\x61\x74\x65\x6e\x63\x79\x4d\x73':null,'\x61\x76\x67\x50\x69\x6e\x67\x4c\x61\x74\x65\x6e\x63\x79\x4d\x73':null,'\x6d\x69\x73\x73\x65\x64\x50\x6f\x6e\x67\x43\x6f\x75\x6e\x74':0x0,'\x72\x65\x63\x6f\x6e\x6e\x65\x63\x74\x43\x6f\x75\x6e\x74':0x0,'\x6c\x61\x73\x74\x50\x6f\x6e\x67\x41\x74':null,'\x6c\x61\x73\x74\x52\x65\x63\x6f\x6e\x6e\x65\x63\x74\x41\x74':null,'\x71\x75\x61\x6c\x69\x74\x79':a0_0x4ca84e(0x1ed)};function calculateConnectionQuality(_0x28f4dd,_0x295df0){const _0x4126f6=a0_0x4ca84e,_0x1984c4={'\x75\x47\x74\x63\x62':function(_0x277177,_0x4e6a8c){return _0x277177<_0x4e6a8c;},'\x67\x54\x78\x69\x68':function(_0x143226,_0x5806af){return _0x143226*_0x5806af;},'\x76\x57\x74\x72\x66':function(_0x2ef1ff,_0x245774){return _0x2ef1ff>=_0x245774;},'\x54\x59\x4f\x71\x63':_0x4126f6(0x1ca),'\x66\x4d\x6a\x77\x4f':function(_0x5af14d,_0x542d27){return _0x5af14d!==_0x542d27;},'\x61\x57\x54\x78\x43':function(_0x1b08d2,_0x240175){return _0x1b08d2>_0x240175;},'\x51\x63\x78\x54\x49':function(_0x1b0d8e,_0x264f4a){return _0x1b0d8e===_0x264f4a;},'\x43\x54\x63\x51\x51':function(_0x5c1490,_0x2b0c6f){return _0x5c1490!==_0x2b0c6f;},'\x62\x52\x48\x72\x49':_0x4126f6(0x1dc)};if(!_0x295df0)return _0x4126f6(0x1ed);const {avgPingLatencyMs:_0x5f1233,missedPongCount:_0x17da42,reconnectCount:_0x33700b,lastReconnectAt:_0x56cf25}=_0x28f4dd,_0x208484=_0x56cf25&&_0x1984c4[_0x4126f6(0x224)](Date['\x6e\x6f\x77']()-_0x56cf25,_0x1984c4['\x67\x54\x78\x69\x68'](0x12c,0x3e8));if(_0x1984c4['\x76\x57\x74\x72\x66'](_0x17da42,0x2)||_0x208484&&_0x33700b>0x1)return _0x1984c4[_0x4126f6(0x248)];if(_0x17da42>=0x1||_0x1984c4[_0x4126f6(0x1fa)](_0x5f1233,null)&&_0x1984c4[_0x4126f6(0x164)](_0x5f1233,0x3e8)||_0x208484)return'\x64\x65\x67\x72\x61\x64\x65\x64';if(_0x1984c4[_0x4126f6(0x1fa)](_0x5f1233,null)&&_0x5f1233<0x64&&_0x1984c4[_0x4126f6(0x219)](_0x33700b,0x0))return _0x4126f6(0x221);if(_0x1984c4[_0x4126f6(0x1a7)](_0x5f1233,null)&&_0x5f1233<=0x12c)return _0x4126f6(0x1dc);return _0x1984c4[_0x4126f6(0x208)];}const DEFAULT_CONFIG={'\x74\x72\x61\x6e\x73\x70\x6f\x72\x74':a0_0x4ca84e(0x21a),'\x63\x68\x61\x6e\x6e\x65\x6c\x73':['\x2a'],'\x61\x75\x74\x6f\x52\x65\x63\x6f\x6e\x6e\x65\x63\x74':!![],'\x6d\x61\x78\x52\x65\x63\x6f\x6e\x6e\x65\x63\x74\x41\x74\x74\x65\x6d\x70\x74\x73':0xa,'\x69\x6e\x69\x74\x69\x61\x6c\x52\x65\x63\x6f\x6e\x6e\x65\x63\x74\x44\x65\x6c\x61\x79\x4d\x73':0x3e8,'\x6d\x61\x78\x52\x65\x63\x6f\x6e\x6e\x65\x63\x74\x44\x65\x6c\x61\x79\x4d\x73':0x7530,'\x70\x69\x6e\x67\x49\x6e\x74\x65\x72\x76\x61\x6c\x4d\x73':0x7530,'\x70\x6f\x6e\x67\x54\x69\x6d\x65\x6f\x75\x74\x4d\x73':0x2710,'\x6d\x61\x78\x4d\x69\x73\x73\x65\x64\x50\x6f\x6e\x67\x73':0x2,'\x65\x6e\x61\x62\x6c\x65\x44\x65\x64\x75\x70\x6c\x69\x63\x61\x74\x69\x6f\x6e':!![],'\x6d\x61\x78\x44\x65\x64\x75\x70\x6c\x69\x63\x61\x74\x69\x6f\x6e\x53\x69\x7a\x65':0x3e8,'\x65\x6e\x61\x62\x6c\x65\x52\x65\x70\x6c\x61\x79\x50\x65\x72\x73\x69\x73\x74\x65\x6e\x63\x65':![],'\x72\x65\x70\x6c\x61\x79\x53\x74\x6f\x72\x61\x67\x65\x4b\x65\x79\x50\x72\x65\x66\x69\x78':a0_0x4ca84e(0x1c1),'\x6c\x61\x74\x65\x6e\x63\x79\x48\x69\x73\x74\x6f\x72\x79\x53\x69\x7a\x65':0xa},STORAGE_KEYS={'\x6c\x61\x73\x74\x45\x76\x65\x6e\x74\x49\x64':a0_0x4ca84e(0x188),'\x65\x78\x65\x63\x75\x74\x69\x6f\x6e\x49\x64':'\x65\x78\x65\x63\x75\x74\x69\x6f\x6e\x5f\x69\x64','\x73\x65\x73\x73\x69\x6f\x6e\x49\x64':'\x73\x65\x73\x73\x69\x6f\x6e\x5f\x69\x64'},WIRE_TYPE_MAP={'\x73\x69\x64\x65\x63\x61\x72\x2e\x63\x6f\x6e\x6e\x65\x63\x74\x65\x64':a0_0x4ca84e(0x194),'\x73\x69\x64\x65\x63\x61\x72\x2e\x64\x69\x73\x63\x6f\x6e\x6e\x65\x63\x74\x65\x64':a0_0x4ca84e(0x1c6),'\x73\x69\x64\x65\x63\x61\x72\x2e\x6e\x6f\x74\x5f\x66\x6f\x75\x6e\x64':a0_0x4ca84e(0x179),'\x73\x69\x64\x65\x63\x61\x72\x2e\x72\x65\x61\x64\x79':a0_0x4ca84e(0x231)};var MemoryStorage=class{[a0_0x4ca84e(0x161)]=new Map();[a0_0x4ca84e(0x1b7)](_0x49fc7e){const _0x1e8bdd=a0_0x4ca84e;return this['\x73\x74\x6f\x72\x65'][_0x1e8bdd(0x177)](_0x49fc7e)??null;}['\x73\x65\x74\x49\x74\x65\x6d'](_0xc5202e,_0x4e1074){const _0x3d7098=a0_0x4ca84e;this[_0x3d7098(0x161)][_0x3d7098(0x237)](_0xc5202e,_0x4e1074);}[a0_0x4ca84e(0x162)](_0x29d9b3){const _0x21f1fa=a0_0x4ca84e;this[_0x21f1fa(0x161)][_0x21f1fa(0x1fc)](_0x29d9b3);}},SessionGatewayClient=class{['\x77\x73']=null;['\x63\x6f\x6e\x66\x69\x67'];['\x68\x61\x6e\x64\x6c\x65\x72\x73'];[a0_0x4ca84e(0x1d6)];[a0_0x4ca84e(0x180)]=![];[a0_0x4ca84e(0x18b)]=a0_0x4ca84e(0x1ed);['\x63\x6f\x6e\x6e\x65\x63\x74\x65\x64\x41\x74']=null;[a0_0x4ca84e(0x1fe)]=![];['\x6c\x61\x73\x74\x50\x69\x6e\x67\x41\x74']=null;[a0_0x4ca84e(0x166)]=null;[a0_0x4ca84e(0x1b5)]=null;[a0_0x4ca84e(0x190)]=0x0;[a0_0x4ca84e(0x23c)]=0x0;['\x6d\x65\x73\x73\x61\x67\x65\x73\x52\x65\x63\x65\x69\x76\x65\x64']=0x0;[a0_0x4ca84e(0x201)]=0x0;[a0_0x4ca84e(0x17f)]=0x0;[a0_0x4ca84e(0x234)]=0x0;[a0_0x4ca84e(0x1df)]=null;[a0_0x4ca84e(0x22b)]=null;[a0_0x4ca84e(0x1fd)]=null;[a0_0x4ca84e(0x1ad)]=new Map();[a0_0x4ca84e(0x1e6)]=0x0;['\x70\x72\x6f\x63\x65\x73\x73\x65\x64\x45\x76\x65\x6e\x74\x49\x64\x73']=new Set();[a0_0x4ca84e(0x1e9)]=[];[a0_0x4ca84e(0x20c)]={...INITIAL_METRICS};['\x6c\x61\x73\x74\x45\x76\x65\x6e\x74\x49\x64']=null;[a0_0x4ca84e(0x1c7)]=null;['\x63\x75\x72\x72\x65\x6e\x74\x53\x65\x73\x73\x69\x6f\x6e\x49\x64']=null;['\x69\x73\x52\x65\x70\x6c\x61\x79\x69\x6e\x67']=![];['\x72\x65\x70\x6c\x61\x79\x50\x72\x6f\x67\x72\x65\x73\x73']={'\x74\x6f\x74\x61\x6c':0x0,'\x72\x65\x63\x65\x69\x76\x65\x64':0x0};constructor(_0x42be03){const _0xfe8c4c=a0_0x4ca84e,_0x153b5a={'\x55\x70\x69\x55\x58':_0xfe8c4c(0x1d4)};let _0x13d328;if(_0x42be03[_0xfe8c4c(0x187)])_0x13d328=_0x42be03['\x72\x65\x70\x6c\x61\x79\x53\x74\x6f\x72\x61\x67\x65'];else{if(typeof globalThis!==_0x153b5a[_0xfe8c4c(0x202)]&&_0xfe8c4c(0x18f)in globalThis)try{const _0x733dcc=_0xfe8c4c(0x1a5);localStorage[_0xfe8c4c(0x225)](_0x733dcc,_0x733dcc),localStorage[_0xfe8c4c(0x162)](_0x733dcc),_0x13d328=localStorage;}catch{_0x13d328=new MemoryStorage();}else _0x13d328=new MemoryStorage();}this[_0xfe8c4c(0x20f)]={'\x75\x72\x6c':_0x42be03['\x75\x72\x6c'],'\x73\x65\x73\x73\x69\x6f\x6e\x49\x64':_0x42be03['\x73\x65\x73\x73\x69\x6f\x6e\x49\x64'],'\x74\x6f\x6b\x65\x6e':_0x42be03[_0xfe8c4c(0x1b9)],'\x6f\x6e\x54\x6f\x6b\x65\x6e\x52\x65\x66\x72\x65\x73\x68':_0x42be03[_0xfe8c4c(0x1c2)],'\x74\x72\x61\x6e\x73\x70\x6f\x72\x74':_0x42be03[_0xfe8c4c(0x1e5)]??DEFAULT_CONFIG['\x74\x72\x61\x6e\x73\x70\x6f\x72\x74'],'\x63\x68\x61\x6e\x6e\x65\x6c\x73':_0x42be03[_0xfe8c4c(0x197)]??DEFAULT_CONFIG[_0xfe8c4c(0x197)],'\x61\x75\x74\x6f\x52\x65\x63\x6f\x6e\x6e\x65\x63\x74':_0x42be03[_0xfe8c4c(0x1ef)]??DEFAULT_CONFIG[_0xfe8c4c(0x1ef)],'\x6d\x61\x78\x52\x65\x63\x6f\x6e\x6e\x65\x63\x74\x41\x74\x74\x65\x6d\x70\x74\x73':_0x42be03['\x6d\x61\x78\x52\x65\x63\x6f\x6e\x6e\x65\x63\x74\x41\x74\x74\x65\x6d\x70\x74\x73']??DEFAULT_CONFIG[_0xfe8c4c(0x1b4)],'\x69\x6e\x69\x74\x69\x61\x6c\x52\x65\x63\x6f\x6e\x6e\x65\x63\x74\x44\x65\x6c\x61\x79\x4d\x73':_0x42be03[_0xfe8c4c(0x1bd)]??DEFAULT_CONFIG[_0xfe8c4c(0x1bd)],'\x6d\x61\x78\x52\x65\x63\x6f\x6e\x6e\x65\x63\x74\x44\x65\x6c\x61\x79\x4d\x73':_0x42be03[_0xfe8c4c(0x178)]??DEFAULT_CONFIG[_0xfe8c4c(0x178)],'\x70\x69\x6e\x67\x49\x6e\x74\x65\x72\x76\x61\x6c\x4d\x73':_0x42be03[_0xfe8c4c(0x19d)]??DEFAULT_CONFIG[_0xfe8c4c(0x19d)],'\x70\x6f\x6e\x67\x54\x69\x6d\x65\x6f\x75\x74\x4d\x73':_0x42be03[_0xfe8c4c(0x1a2)]??DEFAULT_CONFIG[_0xfe8c4c(0x1a2)],'\x6d\x61\x78\x4d\x69\x73\x73\x65\x64\x50\x6f\x6e\x67\x73':_0x42be03[_0xfe8c4c(0x1af)]??DEFAULT_CONFIG[_0xfe8c4c(0x1af)],'\x65\x6e\x61\x62\x6c\x65\x44\x65\x64\x75\x70\x6c\x69\x63\x61\x74\x69\x6f\x6e':_0x42be03['\x65\x6e\x61\x62\x6c\x65\x44\x65\x64\x75\x70\x6c\x69\x63\x61\x74\x69\x6f\x6e']??DEFAULT_CONFIG[_0xfe8c4c(0x23f)],'\x6d\x61\x78\x44\x65\x64\x75\x70\x6c\x69\x63\x61\x74\x69\x6f\x6e\x53\x69\x7a\x65':_0x42be03[_0xfe8c4c(0x17a)]??DEFAULT_CONFIG['\x6d\x61\x78\x44\x65\x64\x75\x70\x6c\x69\x63\x61\x74\x69\x6f\x6e\x53\x69\x7a\x65'],'\x65\x6e\x61\x62\x6c\x65\x52\x65\x70\x6c\x61\x79\x50\x65\x72\x73\x69\x73\x74\x65\x6e\x63\x65':_0x42be03['\x65\x6e\x61\x62\x6c\x65\x52\x65\x70\x6c\x61\x79\x50\x65\x72\x73\x69\x73\x74\x65\x6e\x63\x65']??DEFAULT_CONFIG['\x65\x6e\x61\x62\x6c\x65\x52\x65\x70\x6c\x61\x79\x50\x65\x72\x73\x69\x73\x74\x65\x6e\x63\x65'],'\x72\x65\x70\x6c\x61\x79\x53\x74\x6f\x72\x61\x67\x65':_0x13d328,'\x72\x65\x70\x6c\x61\x79\x53\x74\x6f\x72\x61\x67\x65\x4b\x65\x79\x50\x72\x65\x66\x69\x78':_0x42be03[_0xfe8c4c(0x1f2)]??DEFAULT_CONFIG[_0xfe8c4c(0x1f2)],'\x6c\x61\x74\x65\x6e\x63\x79\x48\x69\x73\x74\x6f\x72\x79\x53\x69\x7a\x65':_0x42be03[_0xfe8c4c(0x19c)]??DEFAULT_CONFIG[_0xfe8c4c(0x19c)]},this[_0xfe8c4c(0x174)]=_0x42be03[_0xfe8c4c(0x174)]??{},this[_0xfe8c4c(0x1d6)]=_0x42be03[_0xfe8c4c(0x1b9)];if(this[_0xfe8c4c(0x20f)][_0xfe8c4c(0x1ea)])this[_0xfe8c4c(0x1ec)]();}['\x63\x6f\x6e\x6e\x65\x63\x74'](){const _0xeb4938=a0_0x4ca84e,_0x465233={'\x76\x4e\x63\x44\x41':_0xeb4938(0x1e2)};if(this[_0xeb4938(0x18b)]==='\x63\x6f\x6e\x6e\x65\x63\x74\x65\x64'||this[_0xeb4938(0x18b)]===_0xeb4938(0x1e2))return;const _0x38f155=this[_0xeb4938(0x1fe)];this[_0xeb4938(0x1d1)](_0x38f155?'\x72\x65\x63\x6f\x6e\x6e\x65\x63\x74\x69\x6e\x67':_0x465233[_0xeb4938(0x1d3)]),this[_0xeb4938(0x1dd)]();}[a0_0x4ca84e(0x1dd)](){const _0x2b75c1=a0_0x4ca84e,_0x3e0822=new URL(this[_0x2b75c1(0x20f)][_0x2b75c1(0x1ee)]);_0x3e0822[_0x2b75c1(0x19e)][_0x2b75c1(0x237)]('\x74\x6f\x6b\x65\x6e',this[_0x2b75c1(0x1d6)]),this['\x77\x73']=new WebSocket(_0x3e0822[_0x2b75c1(0x18a)]()),this['\x77\x73'][_0x2b75c1(0x22f)]=()=>this[_0x2b75c1(0x222)](),this['\x77\x73'][_0x2b75c1(0x215)]=_0x59cc3c=>this[_0x2b75c1(0x1cd)](_0x59cc3c['\x63\x6f\x64\x65'],_0x59cc3c['\x72\x65\x61\x73\x6f\x6e']),this['\x77\x73']['\x6f\x6e\x65\x72\x72\x6f\x72']=_0x57a1b1=>{},this['\x77\x73'][_0x2b75c1(0x21d)]=_0x35a3df=>this['\x68\x61\x6e\x64\x6c\x65\x4d\x65\x73\x73\x61\x67\x65'](_0x35a3df[_0x2b75c1(0x212)]);}[a0_0x4ca84e(0x247)](){const _0x4625fa=a0_0x4ca84e,_0x1acf60={'\x4e\x46\x50\x5a\x4a':'\x43\x6c\x69\x65\x6e\x74\x20\x64\x69\x73\x63\x6f\x6e\x6e\x65\x63\x74','\x6a\x51\x65\x4e\x61':_0x4625fa(0x1ed)};this[_0x4625fa(0x1b0)](),this['\x77\x73']&&(this['\x77\x73'][_0x4625fa(0x16e)](0x3e8,_0x1acf60['\x4e\x46\x50\x5a\x4a']),this['\x77\x73']=null),this[_0x4625fa(0x1d1)](_0x1acf60[_0x4625fa(0x1ab)]);}async[a0_0x4ca84e(0x1d2)](_0x90743b){const _0x136d35=a0_0x4ca84e;return(await this[_0x136d35(0x1cf)]({'\x74\x79\x70\x65':'\x73\x75\x62\x73\x63\x72\x69\x62\x65','\x63\x68\x61\x6e\x6e\x65\x6c\x73':_0x90743b}))[_0x136d35(0x197)];}async[a0_0x4ca84e(0x21c)](_0x44d3ab){const _0x5297a2=a0_0x4ca84e;return(await this[_0x5297a2(0x1cf)]({'\x74\x79\x70\x65':_0x5297a2(0x21c),'\x63\x68\x61\x6e\x6e\x65\x6c\x73':_0x44d3ab}))[_0x5297a2(0x197)];}async[a0_0x4ca84e(0x21b)](){const _0x1f8663=a0_0x4ca84e,_0xbbbfd7={'\x74\x57\x51\x45\x69':_0x1f8663(0x21b)},_0x4e50d9=Date[_0x1f8663(0x1bc)]();return await this[_0x1f8663(0x1cf)]({'\x74\x79\x70\x65':_0xbbbfd7[_0x1f8663(0x1e0)]}),Date['\x6e\x6f\x77']()-_0x4e50d9;}[a0_0x4ca84e(0x16c)](_0x4f8c6b){const _0x32a58b=a0_0x4ca84e;this[_0x32a58b(0x23b)]({'\x74\x79\x70\x65':_0x32a58b(0x16c),'\x73\x69\x6e\x63\x65':_0x4f8c6b});}[a0_0x4ca84e(0x235)](_0x3b1cc0,_0x51e9d0){const _0x2f8a69=a0_0x4ca84e;if(!this[_0x2f8a69(0x228)]())return![];return this['\x73\x65\x6e\x64']({'\x74\x79\x70\x65':_0x2f8a69(0x1c5),'\x64\x61\x74\x61':{'\x74\x65\x72\x6d\x69\x6e\x61\x6c\x49\x64':_0x3b1cc0,'\x69\x6e\x70\x75\x74':_0x51e9d0}}),!![];}[a0_0x4ca84e(0x1cb)](_0x5a1b90,_0x463fdf){const _0x1dd6c2=a0_0x4ca84e;this['\x63\x75\x72\x72\x65\x6e\x74\x53\x65\x73\x73\x69\x6f\x6e\x49\x64']=_0x5a1b90;if(_0x463fdf)this[_0x1dd6c2(0x1c7)]=_0x463fdf;this[_0x1dd6c2(0x1bb)]();}[a0_0x4ca84e(0x1f5)](){const _0x5a50f3=a0_0x4ca84e,_0x30bd29={'\x6b\x68\x51\x69\x61':function(_0x570cbe,_0x31f53e){return _0x570cbe+_0x31f53e;},'\x6f\x6b\x6e\x6b\x51':function(_0x2a2157,_0x2b8b97){return _0x2a2157+_0x2b8b97;}};this[_0x5a50f3(0x1eb)]=null,this['\x63\x75\x72\x72\x65\x6e\x74\x45\x78\x65\x63\x75\x74\x69\x6f\x6e\x49\x64']=null,this['\x63\x75\x72\x72\x65\x6e\x74\x53\x65\x73\x73\x69\x6f\x6e\x49\x64']=null,this[_0x5a50f3(0x210)]=![],this['\x72\x65\x70\x6c\x61\x79\x50\x72\x6f\x67\x72\x65\x73\x73']={'\x74\x6f\x74\x61\x6c':0x0,'\x72\x65\x63\x65\x69\x76\x65\x64':0x0},this[_0x5a50f3(0x1f1)][_0x5a50f3(0x183)](),this['\x64\x75\x70\x6c\x69\x63\x61\x74\x65\x73\x53\x6b\x69\x70\x70\x65\x64']=0x0;if(this[_0x5a50f3(0x20f)][_0x5a50f3(0x1ea)]){const _0x4f7462=this[_0x5a50f3(0x20f)][_0x5a50f3(0x1f2)];try{this['\x63\x6f\x6e\x66\x69\x67']['\x72\x65\x70\x6c\x61\x79\x53\x74\x6f\x72\x61\x67\x65']['\x72\x65\x6d\x6f\x76\x65\x49\x74\x65\x6d'](_0x4f7462+STORAGE_KEYS[_0x5a50f3(0x1eb)]),this[_0x5a50f3(0x20f)][_0x5a50f3(0x187)]['\x72\x65\x6d\x6f\x76\x65\x49\x74\x65\x6d'](_0x30bd29[_0x5a50f3(0x193)](_0x4f7462,STORAGE_KEYS[_0x5a50f3(0x241)])),this[_0x5a50f3(0x20f)][_0x5a50f3(0x187)][_0x5a50f3(0x162)](_0x30bd29[_0x5a50f3(0x209)](_0x4f7462,STORAGE_KEYS[_0x5a50f3(0x170)]));}catch{}}}['\x67\x65\x74\x52\x65\x70\x6c\x61\x79\x53\x74\x61\x74\x65'](){const _0x51510f=a0_0x4ca84e;return{'\x69\x73\x52\x65\x70\x6c\x61\x79\x69\x6e\x67':this['\x69\x73\x52\x65\x70\x6c\x61\x79\x69\x6e\x67'],'\x70\x72\x6f\x67\x72\x65\x73\x73':{...this[_0x51510f(0x245)]}};}[a0_0x4ca84e(0x1ff)](){const _0x1978f1=a0_0x4ca84e;return{'\x73\x74\x61\x74\x65':this[_0x1978f1(0x18b)],'\x63\x6f\x6e\x6e\x65\x63\x74\x65\x64\x41\x74':this[_0x1978f1(0x230)],'\x6c\x61\x73\x74\x50\x69\x6e\x67\x41\x74':this[_0x1978f1(0x171)],'\x6c\x61\x73\x74\x50\x6f\x6e\x67\x41\x74':this[_0x1978f1(0x166)],'\x72\x65\x63\x6f\x6e\x6e\x65\x63\x74\x41\x74\x74\x65\x6d\x70\x74\x73':this[_0x1978f1(0x23c)],'\x6d\x65\x73\x73\x61\x67\x65\x73\x52\x65\x63\x65\x69\x76\x65\x64':this[_0x1978f1(0x223)],'\x6d\x65\x73\x73\x61\x67\x65\x73\x53\x65\x6e\x74':this['\x6d\x65\x73\x73\x61\x67\x65\x73\x53\x65\x6e\x74'],'\x65\x76\x65\x6e\x74\x73\x52\x65\x63\x65\x69\x76\x65\x64':this[_0x1978f1(0x17f)],'\x64\x75\x70\x6c\x69\x63\x61\x74\x65\x73\x53\x6b\x69\x70\x70\x65\x64':this[_0x1978f1(0x234)],'\x6d\x65\x74\x72\x69\x63\x73':{...this[_0x1978f1(0x20c)]},'\x72\x65\x70\x6c\x61\x79':this[_0x1978f1(0x214)]()};}[a0_0x4ca84e(0x16b)](){const _0x336920=a0_0x4ca84e;return this[_0x336920(0x18b)];}[a0_0x4ca84e(0x228)](){const _0x5bc3f7=a0_0x4ca84e;return this[_0x5bc3f7(0x18b)]==='\x63\x6f\x6e\x6e\x65\x63\x74\x65\x64';}[a0_0x4ca84e(0x220)](){const _0xbd5614=a0_0x4ca84e;return this[_0xbd5614(0x20c)][_0xbd5614(0x22a)];}['\x67\x65\x74\x43\x6f\x6e\x6e\x65\x63\x74\x69\x6f\x6e\x4d\x65\x74\x72\x69\x63\x73'](){const _0x3bf033=a0_0x4ca84e;return{...this[_0x3bf033(0x20c)]};}[a0_0x4ca84e(0x1b2)](){const _0x45949c=a0_0x4ca84e;this['\x70\x69\x6e\x67\x4c\x61\x74\x65\x6e\x63\x79\x48\x69\x73\x74\x6f\x72\x79']=[],this['\x63\x6f\x6e\x6e\x65\x63\x74\x69\x6f\x6e\x4d\x65\x74\x72\x69\x63\x73']={...INITIAL_METRICS},this[_0x45949c(0x174)][_0x45949c(0x207)]?.(this['\x63\x6f\x6e\x6e\x65\x63\x74\x69\x6f\x6e\x4d\x65\x74\x72\x69\x63\x73']);}[a0_0x4ca84e(0x1a6)](_0x123b46){const _0x616141=a0_0x4ca84e,_0x39b0cf={'\x6b\x56\x59\x7a\x66':_0x616141(0x169)};this[_0x616141(0x1d6)]=_0x123b46;if(this['\x73\x74\x61\x74\x65']===_0x616141(0x199)&&this['\x77\x73'])this['\x77\x73'][_0x616141(0x16e)](0x3e8,_0x39b0cf[_0x616141(0x211)]);}[a0_0x4ca84e(0x191)](){const _0x3fb863=a0_0x4ca84e;return this[_0x3fb863(0x1d6)];}[a0_0x4ca84e(0x1d1)](_0x5321ff){const _0x2073ce=a0_0x4ca84e,_0x45cc28={'\x4f\x6d\x79\x55\x62':function(_0x549125,_0x43a679){return _0x549125!==_0x43a679;}};_0x45cc28[_0x2073ce(0x16d)](this[_0x2073ce(0x18b)],_0x5321ff)&&(this['\x73\x74\x61\x74\x65']=_0x5321ff,this['\x75\x70\x64\x61\x74\x65\x43\x6f\x6e\x6e\x65\x63\x74\x69\x6f\x6e\x51\x75\x61\x6c\x69\x74\x79'](),this[_0x2073ce(0x174)]['\x6f\x6e\x53\x74\x61\x74\x65\x43\x68\x61\x6e\x67\x65']?.(_0x5321ff));}['\x68\x61\x6e\x64\x6c\x65\x4f\x70\x65\x6e'](){const _0x1cb113=a0_0x4ca84e,_0x2d39a1={'\x79\x75\x59\x6a\x4e':_0x1cb113(0x199)},_0x16ddf9=this[_0x1cb113(0x1fe)];this[_0x1cb113(0x1fe)]=!![],this[_0x1cb113(0x1d1)](_0x2d39a1[_0x1cb113(0x244)]),this['\x63\x6f\x6e\x6e\x65\x63\x74\x65\x64\x41\x74']=Date['\x6e\x6f\x77'](),this['\x72\x65\x63\x6f\x6e\x6e\x65\x63\x74\x41\x74\x74\x65\x6d\x70\x74\x73']=0x0,this['\x6d\x69\x73\x73\x65\x64\x50\x6f\x6e\x67\x43\x6f\x75\x6e\x74']=0x0,this[_0x1cb113(0x173)](),this[_0x1cb113(0x239)](),_0x16ddf9&&(this[_0x1cb113(0x1cc)](),this[_0x1cb113(0x174)][_0x1cb113(0x1e3)]?.());}[a0_0x4ca84e(0x1cd)](_0x3a3044,_0x265e54){const _0x436542=a0_0x4ca84e,_0x457dfd={'\x59\x47\x57\x74\x4b':function(_0x28a912,_0x5f5565){return _0x28a912<_0x5f5565;}};this[_0x436542(0x1b0)](),this[_0x436542(0x174)][_0x436542(0x17c)]?.(_0x3a3044,_0x265e54);if(this[_0x436542(0x20f)][_0x436542(0x1ef)]&&_0x457dfd[_0x436542(0x1f8)](this[_0x436542(0x23c)],this[_0x436542(0x20f)][_0x436542(0x1b4)]))this[_0x436542(0x1d1)]('\x72\x65\x63\x6f\x6e\x6e\x65\x63\x74\x69\x6e\x67'),this['\x73\x63\x68\x65\x64\x75\x6c\x65\x52\x65\x63\x6f\x6e\x6e\x65\x63\x74']();else this[_0x436542(0x1d1)](_0x436542(0x1ed));}[a0_0x4ca84e(0x168)](_0x61edda){const _0x425b68=a0_0x4ca84e,_0x5cb9ba={'\x50\x79\x66\x57\x57':function(_0x5498e8,_0x41a468){return _0x5498e8!==_0x41a468;},'\x6a\x55\x4a\x61\x52':function(_0x2aabcc,_0x5a7aa7){return _0x2aabcc===_0x5a7aa7;},'\x54\x70\x70\x56\x68':function(_0x174bea,_0x49efb4){return _0x174bea in _0x49efb4;},'\x58\x72\x72\x42\x45':function(_0x2c6b72,_0x354625){return _0x2c6b72>_0x354625;},'\x6c\x6e\x77\x64\x47':function(_0x4dab82,_0x3c0b3f){return _0x4dab82*_0x3c0b3f;}};this[_0x425b68(0x223)]++;try{const _0x42a787=JSON['\x70\x61\x72\x73\x65'](_0x61edda);if(!_0x42a787['\x74\x79\x70\x65']&&_0x42a787[_0x425b68(0x1e4)])_0x42a787[_0x425b68(0x1f0)]=_0x42a787[_0x425b68(0x1e4)];if(typeof _0x42a787['\x74\x79\x70\x65']==='\x73\x74\x72\x69\x6e\x67'&&WIRE_TYPE_MAP[_0x42a787[_0x425b68(0x1f0)]]!==void 0x0)_0x42a787[_0x425b68(0x1f0)]=WIRE_TYPE_MAP[_0x42a787[_0x425b68(0x1f0)]];if(_0x42a787[_0x425b68(0x212)]&&typeof _0x42a787[_0x425b68(0x212)]===_0x425b68(0x1e8)){const _0x4ff368=_0x42a787[_0x425b68(0x212)];if(_0x5cb9ba[_0x425b68(0x1ae)](_0x4ff368[_0x425b68(0x232)],void 0x0)&&_0x4ff368[_0x425b68(0x18c)]===void 0x0)_0x4ff368[_0x425b68(0x18c)]=_0x4ff368['\x73\x69\x64\x65\x63\x61\x72\x49\x64'];}if(_0x42a787[_0x425b68(0x1f0)]===_0x425b68(0x1a9)&&!_0x42a787[_0x425b68(0x212)]&&_0x42a787[_0x425b68(0x1d5)]){const {type:_0x31eca3,messageType:_0x6bbae5,channel:_0x2fd4bb,id:_0x68162d,sequenceId:_0x4122fe,timestamp:_0x5646fe,..._0x66c838}=_0x42a787;_0x42a787[_0x425b68(0x212)]=_0x66c838;}const _0x4c11b3=_0x42a787;if(_0x5cb9ba[_0x425b68(0x1ba)](_0x4c11b3[_0x425b68(0x1f0)],_0x425b68(0x181))){this[_0x425b68(0x1a8)](_0x4c11b3[_0x425b68(0x20b)]),this[_0x425b68(0x1a0)](_0x4c11b3);return;}if(_0x5cb9ba['\x54\x70\x70\x56\x68']('\x69\x64',_0x4c11b3)&&_0x4c11b3['\x69\x64']&&this[_0x425b68(0x20f)][_0x425b68(0x23f)]){const _0xf09a0e=_0x4c11b3['\x69\x64'];if(this[_0x425b68(0x1f1)][_0x425b68(0x160)](_0xf09a0e)){this[_0x425b68(0x234)]++;return;}this[_0x425b68(0x1f1)][_0x425b68(0x1ce)](_0xf09a0e);if(_0x5cb9ba[_0x425b68(0x1f4)](this['\x70\x72\x6f\x63\x65\x73\x73\x65\x64\x45\x76\x65\x6e\x74\x49\x64\x73'][_0x425b68(0x1d8)],this[_0x425b68(0x20f)][_0x425b68(0x17a)])){const _0x95f7d8=Math['\x66\x6c\x6f\x6f\x72'](_0x5cb9ba['\x6c\x6e\x77\x64\x47'](this[_0x425b68(0x20f)][_0x425b68(0x17a)],0.1));let _0x5b0906=0x0;for(const _0x3d1672 of this[_0x425b68(0x1f1)]){if(_0x5b0906>=_0x95f7d8)break;this[_0x425b68(0x1f1)][_0x425b68(0x1fc)](_0x3d1672),_0x5b0906++;}}this[_0x425b68(0x1eb)]=_0xf09a0e,this[_0x425b68(0x1bb)]();}this[_0x425b68(0x1a0)](_0x4c11b3);}catch{}}[a0_0x4ca84e(0x1a8)](_0x147fd2){const _0x152b3a=a0_0x4ca84e,_0x557667={'\x49\x78\x67\x62\x4a':function(_0x5a8b03,_0x1eaa78){return _0x5a8b03-_0x1eaa78;},'\x59\x64\x61\x69\x64':function(_0x50ffe3,_0x496801){return _0x50ffe3>_0x496801;}},_0xc83010=Date[_0x152b3a(0x1bc)]();this[_0x152b3a(0x166)]=_0x147fd2,this[_0x152b3a(0x190)]=0x0,this[_0x152b3a(0x19a)]();if(this[_0x152b3a(0x1b5)]){const _0x12e0ec=_0x557667['\x49\x78\x67\x62\x4a'](_0xc83010,this[_0x152b3a(0x1b5)]);this[_0x152b3a(0x1e9)]['\x70\x75\x73\x68'](_0x12e0ec);if(_0x557667[_0x152b3a(0x240)](this[_0x152b3a(0x1e9)][_0x152b3a(0x17b)],this[_0x152b3a(0x20f)][_0x152b3a(0x19c)]))this[_0x152b3a(0x1e9)][_0x152b3a(0x1de)]();this['\x75\x70\x64\x61\x74\x65\x43\x6f\x6e\x6e\x65\x63\x74\x69\x6f\x6e\x4d\x65\x74\x72\x69\x63\x73'](_0x12e0ec,_0xc83010);}}[a0_0x4ca84e(0x1a0)](_0x4c015c){const _0xce591d=a0_0x4ca84e,_0xae24b2={'\x66\x4b\x69\x76\x4b':function(_0x54a067,_0x263cf3){return _0x54a067===_0x263cf3;},'\x57\x4d\x6e\x6c\x77':'\x64\x61\x74\x61','\x6b\x73\x6d\x49\x73':_0xce591d(0x20d),'\x70\x6e\x63\x56\x77':_0xce591d(0x1c6),'\x75\x4e\x50\x4f\x78':_0xce591d(0x176),'\x6d\x4e\x76\x56\x50':'\x72\x65\x70\x6c\x61\x79\x2e\x63\x6f\x6d\x70\x6c\x65\x74\x65'};if('\x69\x64'in _0x4c015c&&_0x4c015c['\x69\x64']){const _0x36d0ac=this[_0xce591d(0x1ad)][_0xce591d(0x177)](_0x4c015c['\x69\x64']);if(_0x36d0ac){this[_0xce591d(0x1ad)]['\x64\x65\x6c\x65\x74\x65'](_0x4c015c['\x69\x64']);if(_0xae24b2['\x66\x4b\x69\x76\x4b'](_0x4c015c['\x74\x79\x70\x65'],_0xce591d(0x205)))_0x36d0ac['\x72\x65\x6a\x65\x63\x74'](new Error(_0x4c015c[_0xce591d(0x238)]));else _0x36d0ac[_0xce591d(0x242)](_0xae24b2[_0xce591d(0x184)]in _0x4c015c?_0x4c015c[_0xce591d(0x212)]:void 0x0);return;}}switch(_0x4c015c[_0xce591d(0x1f0)]){case _0xae24b2['\x6b\x73\x6d\x49\x73']:this[_0xce591d(0x174)][_0xce591d(0x206)]?.(_0x4c015c[_0xce591d(0x212)][_0xce591d(0x170)]);break;case _0xce591d(0x194):this[_0xce591d(0x174)][_0xce591d(0x20a)]?.(_0x4c015c[_0xce591d(0x212)][_0xce591d(0x18c)],_0x4c015c[_0xce591d(0x212)]['\x62\x61\x73\x65\x55\x72\x6c']);break;case _0xae24b2[_0xce591d(0x1bf)]:this[_0xce591d(0x174)][_0xce591d(0x1fb)]?.(_0x4c015c[_0xce591d(0x212)][_0xce591d(0x18c)],_0x4c015c[_0xce591d(0x212)][_0xce591d(0x205)]);break;case _0xce591d(0x179):this[_0xce591d(0x174)][_0xce591d(0x1b3)]?.(_0x4c015c[_0xce591d(0x212)][_0xce591d(0x170)],_0x4c015c[_0xce591d(0x212)]['\x63\x6f\x6e\x74\x61\x69\x6e\x65\x72\x49\x64'],_0x4c015c['\x64\x61\x74\x61']['\x72\x65\x61\x73\x6f\x6e']);break;case _0xce591d(0x16a):{const _0x1ef60c=_0x4c015c[_0xce591d(0x212)],_0x4b152f=_0x1ef60c[_0xce591d(0x18c)]??_0x1ef60c[_0xce591d(0x232)];if(_0x4b152f)this[_0xce591d(0x174)][_0xce591d(0x196)]?.(_0x4b152f);else this[_0xce591d(0x174)][_0xce591d(0x203)]?.(_0xce591d(0x218),_0xce591d(0x1a1));break;}case _0xce591d(0x231):this[_0xce591d(0x174)][_0xce591d(0x1b8)]?.(_0x4c015c[_0xce591d(0x212)]);break;case'\x70\x6f\x72\x74\x2e\x6f\x70\x65\x6e\x65\x64':this[_0xce591d(0x174)][_0xce591d(0x1aa)]?.(_0x4c015c[_0xce591d(0x212)][_0xce591d(0x1d0)],_0x4c015c[_0xce591d(0x212)][_0xce591d(0x246)],_0x4c015c[_0xce591d(0x212)]['\x70\x72\x6f\x63\x65\x73\x73\x4e\x61\x6d\x65']);break;case _0xae24b2[_0xce591d(0x172)]:this['\x68\x61\x6e\x64\x6c\x65\x72\x73'][_0xce591d(0x1d9)]?.(_0x4c015c['\x64\x61\x74\x61']['\x70\x6f\x72\x74']);break;case _0xce591d(0x1a9):this[_0xce591d(0x17f)]++,this[_0xce591d(0x186)](_0x4c015c[_0xce591d(0x212)]),this[_0xce591d(0x174)][_0xce591d(0x1f6)]?.(_0x4c015c[_0xce591d(0x1d5)],_0x4c015c[_0xce591d(0x212)],_0x4c015c['\x73\x65\x71\x75\x65\x6e\x63\x65\x49\x64']);break;case'\x72\x65\x70\x6c\x61\x79\x2e\x73\x74\x61\x72\x74':this[_0xce591d(0x210)]=!![],this[_0xce591d(0x245)]={'\x74\x6f\x74\x61\x6c':_0x4c015c[_0xce591d(0x19b)],'\x72\x65\x63\x65\x69\x76\x65\x64':0x0},this[_0xce591d(0x174)][_0xce591d(0x204)]?.(_0x4c015c['\x74\x6f\x74\x61\x6c']);break;case _0xce591d(0x21f):this[_0xce591d(0x245)][_0xce591d(0x1f3)]=_0x4c015c[_0xce591d(0x1f3)],this['\x68\x61\x6e\x64\x6c\x65\x72\x73'][_0xce591d(0x18e)]?.(_0x4c015c['\x72\x65\x63\x65\x69\x76\x65\x64'],this[_0xce591d(0x245)][_0xce591d(0x19b)]);break;case _0xae24b2[_0xce591d(0x227)]:this['\x69\x73\x52\x65\x70\x6c\x61\x79\x69\x6e\x67']=![],this[_0xce591d(0x174)][_0xce591d(0x16f)]?.(_0x4c015c['\x74\x6f\x74\x61\x6c']);break;case _0xce591d(0x205):this[_0xce591d(0x174)]['\x6f\x6e\x45\x72\x72\x6f\x72']?.(_0x4c015c[_0xce591d(0x238)],_0x4c015c[_0xce591d(0x1b6)]);break;case _0xce591d(0x1c4):this['\x68\x61\x6e\x64\x6c\x65\x72\x73']['\x6f\x6e\x54\x6f\x6b\x65\x6e\x45\x78\x70\x69\x72\x69\x6e\x67']?.(_0x4c015c[_0xce591d(0x212)]['\x73\x65\x63\x6f\x6e\x64\x73\x52\x65\x6d\x61\x69\x6e\x69\x6e\x67']),this[_0xce591d(0x216)]();break;case _0xce591d(0x236):this['\x68\x61\x6e\x64\x6c\x65\x72\x73'][_0xce591d(0x1c3)]?.();break;case _0xce591d(0x1b1):this[_0xce591d(0x174)][_0xce591d(0x22e)]?.(_0x4c015c[_0xce591d(0x212)][_0xce591d(0x1d7)],_0x4c015c['\x64\x61\x74\x61'][_0xce591d(0x165)],_0x4c015c['\x64\x61\x74\x61']['\x74\x6f\x74\x61\x6c\x44\x72\x6f\x70\x70\x65\x64']);break;}}['\x74\x72\x61\x63\x6b\x45\x78\x65\x63\x75\x74\x69\x6f\x6e\x43\x6f\x6e\x74\x65\x78\x74'](_0x27979c){const _0x1e898b=a0_0x4ca84e,_0x3c0afc={'\x78\x79\x66\x78\x67':_0x1e898b(0x1e8),'\x4a\x66\x41\x58\x71':function(_0x3ac7d0,_0x4e4690){return _0x3ac7d0===_0x4e4690;},'\x48\x46\x68\x4f\x48':_0x1e898b(0x192)};if(typeof _0x27979c!==_0x3c0afc[_0x1e898b(0x1c8)]||_0x3c0afc[_0x1e898b(0x175)](_0x27979c,null))return;const _0x31ef82=_0x27979c;_0x31ef82[_0x1e898b(0x241)]&&(this['\x63\x75\x72\x72\x65\x6e\x74\x45\x78\x65\x63\x75\x74\x69\x6f\x6e\x49\x64']=_0x31ef82['\x65\x78\x65\x63\x75\x74\x69\x6f\x6e\x49\x64'],this['\x73\x61\x76\x65\x52\x65\x70\x6c\x61\x79\x53\x74\x61\x74\x65']()),_0x31ef82[_0x1e898b(0x1f0)]===_0x3c0afc[_0x1e898b(0x233)]&&_0x31ef82[_0x1e898b(0x170)]&&(this[_0x1e898b(0x1da)]=_0x31ef82[_0x1e898b(0x170)],this[_0x1e898b(0x1bb)]());}async[a0_0x4ca84e(0x216)](){const _0x19d1f9=a0_0x4ca84e,_0x382502={'\x70\x47\x6d\x4a\x68':function(_0xebb9b6,_0x3944c8){return _0xebb9b6 instanceof _0x3944c8;}};if(!this[_0x19d1f9(0x20f)]['\x6f\x6e\x54\x6f\x6b\x65\x6e\x52\x65\x66\x72\x65\x73\x68']||this[_0x19d1f9(0x180)])return;this[_0x19d1f9(0x180)]=!![];try{const _0x5af867=await this[_0x19d1f9(0x20f)][_0x19d1f9(0x1c2)]();this[_0x19d1f9(0x1a6)](_0x5af867[_0x19d1f9(0x1b9)]);}catch(_0x36ad35){this[_0x19d1f9(0x174)][_0x19d1f9(0x203)]?.('\x54\x6f\x6b\x65\x6e\x20\x72\x65\x66\x72\x65\x73\x68\x20\x66\x61\x69\x6c\x65\x64\x3a\x20'+(_0x382502[_0x19d1f9(0x1e7)](_0x36ad35,Error)?_0x36ad35[_0x19d1f9(0x238)]:String(_0x36ad35)),_0x19d1f9(0x19f));}finally{this[_0x19d1f9(0x180)]=![];}}[a0_0x4ca84e(0x23b)](_0x4b985a){const _0x345e70=a0_0x4ca84e,_0x4df41b={'\x49\x62\x6e\x71\x64':function(_0x47ee89,_0x5a25ec){return _0x47ee89===_0x5a25ec;}};_0x4df41b[_0x345e70(0x17d)](this['\x77\x73']?.['\x72\x65\x61\x64\x79\x53\x74\x61\x74\x65'],WebSocket[_0x345e70(0x1f9)])&&(this['\x77\x73'][_0x345e70(0x23b)](JSON[_0x345e70(0x200)](_0x4b985a)),this[_0x345e70(0x201)]++);}[a0_0x4ca84e(0x1cf)](_0x3acb91){const _0x3ec855={'\x74\x45\x77\x59\x4e':function(_0xb6c532,_0x12b92d){return _0xb6c532(_0x12b92d);},'\x6e\x47\x63\x43\x61':'\x52\x65\x71\x75\x65\x73\x74\x20\x74\x69\x6d\x65\x6f\x75\x74','\x4e\x71\x62\x4a\x66':function(_0x399e68,_0x5a3c1c,_0x4886db){return _0x399e68(_0x5a3c1c,_0x4886db);}};return new Promise((_0x3f411c,_0x1a8143)=>{const _0x1f942b=a0_0x57eb,_0x3a8619=_0x1f942b(0x1db)+ ++this[_0x1f942b(0x1e6)];this['\x70\x65\x6e\x64\x69\x6e\x67\x43\x61\x6c\x6c\x62\x61\x63\x6b\x73']['\x73\x65\x74'](_0x3a8619,{'\x72\x65\x73\x6f\x6c\x76\x65':_0x3f411c,'\x72\x65\x6a\x65\x63\x74':_0x1a8143}),_0x3ec855['\x4e\x71\x62\x4a\x66'](setTimeout,()=>{const _0x20e6dc=_0x1f942b;this[_0x20e6dc(0x1ad)][_0x20e6dc(0x160)](_0x3a8619)&&(this['\x70\x65\x6e\x64\x69\x6e\x67\x43\x61\x6c\x6c\x62\x61\x63\x6b\x73']['\x64\x65\x6c\x65\x74\x65'](_0x3a8619),_0x3ec855[_0x20e6dc(0x213)](_0x1a8143,new Error(_0x3ec855['\x6e\x47\x63\x43\x61'])));},0x2710),this[_0x1f942b(0x23b)]({..._0x3acb91,'\x69\x64':_0x3a8619});});}['\x72\x65\x73\x74\x6f\x72\x65\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6f\x6e\x73'](){const _0x343ea9=a0_0x4ca84e,_0x5f328a={'\x6b\x43\x66\x53\x66':function(_0x49e158,_0x456ddc){return _0x49e158>_0x456ddc;}},_0x225f8c=this['\x63\x6f\x6e\x66\x69\x67'][_0x343ea9(0x197)],_0x1024be={};if(this[_0x343ea9(0x1eb)])_0x1024be[_0x343ea9(0x1eb)]=this['\x6c\x61\x73\x74\x45\x76\x65\x6e\x74\x49\x64'];if(this[_0x343ea9(0x1c7)])_0x1024be[_0x343ea9(0x241)]=this[_0x343ea9(0x1c7)];if(this[_0x343ea9(0x1da)])_0x1024be[_0x343ea9(0x170)]=this[_0x343ea9(0x1da)];const _0x4ec61e=_0x5f328a[_0x343ea9(0x185)](Object[_0x343ea9(0x17e)](_0x1024be)[_0x343ea9(0x17b)],0x0);_0x4ec61e&&(this[_0x343ea9(0x210)]=!![],this[_0x343ea9(0x245)]={'\x74\x6f\x74\x61\x6c':0x0,'\x72\x65\x63\x65\x69\x76\x65\x64':0x0}),this[_0x343ea9(0x23b)]({'\x74\x79\x70\x65':'\x73\x75\x62\x73\x63\x72\x69\x62\x65','\x63\x68\x61\x6e\x6e\x65\x6c\x73':_0x225f8c,..._0x4ec61e?{'\x72\x65\x70\x6c\x61\x79\x4f\x70\x74\x69\x6f\x6e\x73':_0x1024be}:{}});}['\x73\x74\x61\x72\x74\x50\x69\x6e\x67\x49\x6e\x74\x65\x72\x76\x61\x6c'](){const _0x2290a0=a0_0x4ca84e;this['\x73\x74\x6f\x70\x50\x69\x6e\x67\x49\x6e\x74\x65\x72\x76\x61\x6c'](),this[_0x2290a0(0x22b)]=setInterval(()=>{this['\x73\x65\x6e\x64\x50\x69\x6e\x67']();},this[_0x2290a0(0x20f)][_0x2290a0(0x19d)]);}[a0_0x4ca84e(0x217)](){const _0x5cc6c9=a0_0x4ca84e;this[_0x5cc6c9(0x22b)]&&(clearInterval(this[_0x5cc6c9(0x22b)]),this[_0x5cc6c9(0x22b)]=null);}[a0_0x4ca84e(0x22d)](){const _0x51aec8=a0_0x4ca84e,_0x45b770={'\x69\x58\x52\x62\x6c':function(_0xa8a153,_0x476314){return _0xa8a153>=_0x476314;},'\x66\x41\x48\x58\x66':'\x50\x6f\x6e\x67\x20\x74\x69\x6d\x65\x6f\x75\x74\x20\x2d\x20\x63\x6f\x6e\x6e\x65\x63\x74\x69\x6f\x6e\x20\x75\x6e\x72\x65\x73\x70\x6f\x6e\x73\x69\x76\x65','\x66\x70\x49\x52\x51':function(_0x2efc3b,_0x367a24,_0x3ba01b){return _0x2efc3b(_0x367a24,_0x3ba01b);}};if(this['\x77\x73']?.[_0x51aec8(0x22c)]!==WebSocket[_0x51aec8(0x1f9)])return;const _0x50a57e=this[_0x51aec8(0x166)]?Date[_0x51aec8(0x1bc)]()-this[_0x51aec8(0x166)]:0x0;if(this[_0x51aec8(0x166)]&&_0x50a57e>this[_0x51aec8(0x20f)][_0x51aec8(0x1a2)]){this[_0x51aec8(0x190)]++,this[_0x51aec8(0x20c)]={...this['\x63\x6f\x6e\x6e\x65\x63\x74\x69\x6f\x6e\x4d\x65\x74\x72\x69\x63\x73'],'\x6d\x69\x73\x73\x65\x64\x50\x6f\x6e\x67\x43\x6f\x75\x6e\x74':this['\x6d\x69\x73\x73\x65\x64\x50\x6f\x6e\x67\x43\x6f\x75\x6e\x74']},this[_0x51aec8(0x1be)]();if(this[_0x51aec8(0x190)]>=this[_0x51aec8(0x20f)][_0x51aec8(0x1af)]){this['\x77\x73']?.[_0x51aec8(0x16e)](0xfa0,_0x45b770[_0x51aec8(0x1c9)]);return;}}this[_0x51aec8(0x171)]=Date[_0x51aec8(0x1bc)](),this[_0x51aec8(0x1b5)]=Date[_0x51aec8(0x1bc)](),this[_0x51aec8(0x23b)]({'\x74\x79\x70\x65':_0x51aec8(0x21b)}),this[_0x51aec8(0x1fd)]=_0x45b770['\x66\x70\x49\x52\x51'](setTimeout,()=>{const _0x40d750=_0x51aec8;this[_0x40d750(0x190)]++,this[_0x40d750(0x20c)]={...this[_0x40d750(0x20c)],'\x6d\x69\x73\x73\x65\x64\x50\x6f\x6e\x67\x43\x6f\x75\x6e\x74':this[_0x40d750(0x190)]},this[_0x40d750(0x1be)]();if(_0x45b770[_0x40d750(0x23e)](this[_0x40d750(0x190)],this[_0x40d750(0x20f)][_0x40d750(0x1af)]))this['\x77\x73']?.['\x63\x6c\x6f\x73\x65'](0xfa0,_0x40d750(0x195));},this[_0x51aec8(0x20f)][_0x51aec8(0x1a2)]);}[a0_0x4ca84e(0x19a)](){const _0x1420a3=a0_0x4ca84e;this[_0x1420a3(0x1fd)]&&(clearTimeout(this['\x70\x6f\x6e\x67\x54\x69\x6d\x65\x6f\x75\x74']),this[_0x1420a3(0x1fd)]=null);}['\x73\x63\x68\x65\x64\x75\x6c\x65\x52\x65\x63\x6f\x6e\x6e\x65\x63\x74'](){const _0x4f65bd=a0_0x4ca84e,_0x6d35d5={'\x49\x78\x65\x73\x44':function(_0x4bb8ca,_0x5d86a6){return _0x4bb8ca*_0x5d86a6;},'\x77\x70\x75\x59\x58':function(_0x518dcb,_0x4dc466){return _0x518dcb*_0x4dc466;}};if(this[_0x4f65bd(0x1df)])return;this[_0x4f65bd(0x23c)]++;const _0x258aa1=Math['\x6d\x69\x6e'](_0x6d35d5['\x49\x78\x65\x73\x44'](this[_0x4f65bd(0x20f)][_0x4f65bd(0x1bd)],0x2**(this[_0x4f65bd(0x23c)]-0x1)),this[_0x4f65bd(0x20f)][_0x4f65bd(0x178)]),_0x1c7297=_0x6d35d5[_0x4f65bd(0x182)](_0x6d35d5[_0x4f65bd(0x182)](_0x258aa1,0.3),Math['\x72\x61\x6e\x64\x6f\x6d']()*0x2-0x1);this['\x72\x65\x63\x6f\x6e\x6e\x65\x63\x74\x54\x69\x6d\x65\x72']=setTimeout(()=>{const _0x345c14=_0x4f65bd;this['\x72\x65\x63\x6f\x6e\x6e\x65\x63\x74\x54\x69\x6d\x65\x72']=null,this[_0x345c14(0x1a3)]();},_0x258aa1+_0x1c7297);}[a0_0x4ca84e(0x1b0)](){const _0x360d3e=a0_0x4ca84e;this[_0x360d3e(0x217)](),this[_0x360d3e(0x19a)]();this['\x72\x65\x63\x6f\x6e\x6e\x65\x63\x74\x54\x69\x6d\x65\x72']&&(clearTimeout(this[_0x360d3e(0x1df)]),this[_0x360d3e(0x1df)]=null);for(const [_0x397d9d,_0x3b7d95]of this['\x70\x65\x6e\x64\x69\x6e\x67\x43\x61\x6c\x6c\x62\x61\x63\x6b\x73']){_0x3b7d95[_0x360d3e(0x1c0)](new Error(_0x360d3e(0x23d))),this['\x70\x65\x6e\x64\x69\x6e\x67\x43\x61\x6c\x6c\x62\x61\x63\x6b\x73'][_0x360d3e(0x1fc)](_0x397d9d);}}[a0_0x4ca84e(0x163)](_0x5d1bae,_0x1de6dd){const _0x2f1ea8=a0_0x4ca84e,_0x23d1cf=this['\x70\x69\x6e\x67\x4c\x61\x74\x65\x6e\x63\x79\x48\x69\x73\x74\x6f\x72\x79'][_0x2f1ea8(0x17b)]>0x0?this[_0x2f1ea8(0x1e9)][_0x2f1ea8(0x18d)]((_0xfdb0c0,_0x43a604)=>_0xfdb0c0+_0x43a604,0x0)/this[_0x2f1ea8(0x1e9)][_0x2f1ea8(0x17b)]:null;this['\x63\x6f\x6e\x6e\x65\x63\x74\x69\x6f\x6e\x4d\x65\x74\x72\x69\x63\x73']={...this[_0x2f1ea8(0x20c)],'\x6c\x61\x73\x74\x50\x69\x6e\x67\x4c\x61\x74\x65\x6e\x63\x79\x4d\x73':_0x5d1bae,'\x61\x76\x67\x50\x69\x6e\x67\x4c\x61\x74\x65\x6e\x63\x79\x4d\x73':_0x23d1cf,'\x6d\x69\x73\x73\x65\x64\x50\x6f\x6e\x67\x43\x6f\x75\x6e\x74':this[_0x2f1ea8(0x190)],'\x6c\x61\x73\x74\x50\x6f\x6e\x67\x41\x74':_0x1de6dd},this[_0x2f1ea8(0x1be)]();}[a0_0x4ca84e(0x1be)](){const _0x438d5b=a0_0x4ca84e,_0x398204={'\x65\x4b\x45\x79\x74':function(_0x4ef894,_0x17b6d8){return _0x4ef894===_0x17b6d8;},'\x4b\x47\x68\x54\x52':function(_0x3198d3,_0x1f9b17,_0x1af68f){return _0x3198d3(_0x1f9b17,_0x1af68f);}},_0x1dee90=_0x398204['\x65\x4b\x45\x79\x74'](this[_0x438d5b(0x18b)],'\x63\x6f\x6e\x6e\x65\x63\x74\x65\x64'),_0x222d36=_0x398204[_0x438d5b(0x1e1)](calculateConnectionQuality,this['\x63\x6f\x6e\x6e\x65\x63\x74\x69\x6f\x6e\x4d\x65\x74\x72\x69\x63\x73'],_0x1dee90);this[_0x438d5b(0x20c)][_0x438d5b(0x22a)]!==_0x222d36&&(this[_0x438d5b(0x20c)]={...this[_0x438d5b(0x20c)],'\x71\x75\x61\x6c\x69\x74\x79':_0x222d36},this[_0x438d5b(0x174)]['\x6f\x6e\x4d\x65\x74\x72\x69\x63\x73\x43\x68\x61\x6e\x67\x65']?.(this[_0x438d5b(0x20c)]));}['\x74\x72\x61\x63\x6b\x52\x65\x63\x6f\x6e\x6e\x65\x63\x74\x69\x6f\x6e'](){const _0xb3b36a=a0_0x4ca84e,_0x20cf38=Date[_0xb3b36a(0x1bc)]();this[_0xb3b36a(0x20c)]={...this[_0xb3b36a(0x20c)],'\x72\x65\x63\x6f\x6e\x6e\x65\x63\x74\x43\x6f\x75\x6e\x74':this[_0xb3b36a(0x20c)][_0xb3b36a(0x21e)]+0x1,'\x6c\x61\x73\x74\x52\x65\x63\x6f\x6e\x6e\x65\x63\x74\x41\x74':_0x20cf38},this[_0xb3b36a(0x1e9)]=[],this[_0xb3b36a(0x1be)]();}['\x6c\x6f\x61\x64\x52\x65\x70\x6c\x61\x79\x53\x74\x61\x74\x65'](){const _0x250c21=a0_0x4ca84e;if(!this[_0x250c21(0x20f)][_0x250c21(0x1ea)])return;const _0x56ac9c=this[_0x250c21(0x20f)]['\x72\x65\x70\x6c\x61\x79\x53\x74\x6f\x72\x61\x67\x65\x4b\x65\x79\x50\x72\x65\x66\x69\x78'];try{this[_0x250c21(0x1eb)]=this['\x63\x6f\x6e\x66\x69\x67'][_0x250c21(0x187)][_0x250c21(0x1b7)](_0x56ac9c+STORAGE_KEYS[_0x250c21(0x1eb)]),this['\x63\x75\x72\x72\x65\x6e\x74\x45\x78\x65\x63\x75\x74\x69\x6f\x6e\x49\x64']=this[_0x250c21(0x20f)][_0x250c21(0x187)]['\x67\x65\x74\x49\x74\x65\x6d'](_0x56ac9c+STORAGE_KEYS[_0x250c21(0x241)]),this[_0x250c21(0x1da)]=this[_0x250c21(0x20f)][_0x250c21(0x187)][_0x250c21(0x1b7)](_0x56ac9c+STORAGE_KEYS[_0x250c21(0x170)]);}catch{}}[a0_0x4ca84e(0x1bb)](){const _0x439228=a0_0x4ca84e,_0x410717={'\x54\x68\x6f\x41\x6f':function(_0x542dae,_0x1a8d13){return _0x542dae+_0x1a8d13;}};if(!this[_0x439228(0x20f)][_0x439228(0x1ea)])return;const _0x1202cd=this['\x63\x6f\x6e\x66\x69\x67'][_0x439228(0x1f2)];try{if(this[_0x439228(0x1eb)])this[_0x439228(0x20f)][_0x439228(0x187)][_0x439228(0x225)](_0x1202cd+STORAGE_KEYS['\x6c\x61\x73\x74\x45\x76\x65\x6e\x74\x49\x64'],this[_0x439228(0x1eb)]);if(this[_0x439228(0x1c7)])this[_0x439228(0x20f)][_0x439228(0x187)]['\x73\x65\x74\x49\x74\x65\x6d'](_0x1202cd+STORAGE_KEYS['\x65\x78\x65\x63\x75\x74\x69\x6f\x6e\x49\x64'],this[_0x439228(0x1c7)]);if(this[_0x439228(0x1da)])this[_0x439228(0x20f)]['\x72\x65\x70\x6c\x61\x79\x53\x74\x6f\x72\x61\x67\x65'][_0x439228(0x225)](_0x410717['\x54\x68\x6f\x41\x6f'](_0x1202cd,STORAGE_KEYS[_0x439228(0x170)]),this['\x63\x75\x72\x72\x65\x6e\x74\x53\x65\x73\x73\x69\x6f\x6e\x49\x64']);}catch{}}};export{INITIAL_METRICS,SessionGatewayClient,calculateConnectionQuality};