@waku/core 0.0.33-09028e7.0 → 0.0.33-252ec59.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.
@@ -80,110 +80,115 @@ function filterPeersByDiscovery(peers, numPeers, maxBootstrapPeers) {
80
80
  return selectedPeers;
81
81
  }
82
82
 
83
- function selectConnection(connections) {
84
- if (!connections.length)
85
- return;
86
- if (connections.length === 1)
87
- return connections[0];
88
- let latestConnection;
89
- connections.forEach((connection) => {
90
- if (connection.status === "open") {
91
- if (!latestConnection) {
92
- latestConnection = connection;
93
- }
94
- else if (connection.timeline.open > latestConnection.timeline.open) {
95
- latestConnection = connection;
96
- }
97
- }
98
- });
99
- return latestConnection;
83
+ function selectOpenConnection(connections) {
84
+ return connections
85
+ .filter((c) => c.status === "open")
86
+ .sort((left, right) => right.timeline.open - left.timeline.open)
87
+ .at(0);
100
88
  }
101
89
 
102
- const CONNECTION_TIMEOUT = 5_000;
103
- const RETRY_BACKOFF_BASE = 1_000;
104
- const MAX_RETRIES = 3;
105
90
  class StreamManager {
106
91
  multicodec;
107
92
  getConnections;
108
93
  addEventListener;
109
- streamPool;
110
94
  log;
95
+ ongoingCreation = new Set();
96
+ streamPool = new Map();
111
97
  constructor(multicodec, getConnections, addEventListener) {
112
98
  this.multicodec = multicodec;
113
99
  this.getConnections = getConnections;
114
100
  this.addEventListener = addEventListener;
115
101
  this.log = new Logger(`stream-manager:${multicodec}`);
116
- this.streamPool = new Map();
117
102
  this.addEventListener("peer:update", this.handlePeerUpdateStreamPool);
118
103
  }
119
104
  async getStream(peer) {
120
- const peerIdStr = peer.id.toString();
121
- const streamPromise = this.streamPool.get(peerIdStr);
122
- if (!streamPromise) {
123
- return this.createStream(peer);
105
+ const peerId = peer.id.toString();
106
+ const scheduledStream = this.streamPool.get(peerId);
107
+ if (scheduledStream) {
108
+ this.streamPool.delete(peerId);
109
+ await scheduledStream;
124
110
  }
125
- this.streamPool.delete(peerIdStr);
126
- this.prepareStream(peer);
127
- try {
128
- const stream = await streamPromise;
129
- if (stream && stream.status !== "closed") {
130
- return stream;
131
- }
132
- }
133
- catch (error) {
134
- this.log.warn(`Failed to get stream for ${peerIdStr} -- `, error);
135
- this.log.warn("Attempting to create a new stream for the peer");
111
+ const stream = this.getOpenStreamForCodec(peer.id);
112
+ if (stream) {
113
+ this.log.info(`Found existing stream peerId=${peer.id.toString()} multicodec=${this.multicodec}`);
114
+ return stream;
136
115
  }
137
116
  return this.createStream(peer);
138
117
  }
139
118
  async createStream(peer, retries = 0) {
140
119
  const connections = this.getConnections(peer.id);
141
- const connection = selectConnection(connections);
120
+ const connection = selectOpenConnection(connections);
142
121
  if (!connection) {
143
- throw new Error("Failed to get a connection to the peer");
122
+ throw new Error(`Failed to get a connection to the peer peerId=${peer.id.toString()} multicodec=${this.multicodec}`);
123
+ }
124
+ let lastError;
125
+ let stream;
126
+ for (let i = 0; i < retries + 1; i++) {
127
+ try {
128
+ this.log.info(`Attempting to create a stream for peerId=${peer.id.toString()} multicodec=${this.multicodec}`);
129
+ stream = await connection.newStream(this.multicodec);
130
+ this.log.info(`Created stream for peerId=${peer.id.toString()} multicodec=${this.multicodec}`);
131
+ break;
132
+ }
133
+ catch (error) {
134
+ lastError = error;
135
+ }
136
+ }
137
+ if (!stream) {
138
+ throw new Error(`Failed to create a new stream for ${peer.id.toString()} -- ` +
139
+ lastError);
140
+ }
141
+ return stream;
142
+ }
143
+ async createStreamWithLock(peer) {
144
+ const peerId = peer.id.toString();
145
+ if (this.ongoingCreation.has(peerId)) {
146
+ this.log.info(`Skipping creation of a stream due to lock for peerId=${peerId} multicodec=${this.multicodec}`);
147
+ return;
144
148
  }
145
149
  try {
146
- return await connection.newStream(this.multicodec);
150
+ this.ongoingCreation.add(peerId);
151
+ await this.createStream(peer);
147
152
  }
148
153
  catch (error) {
149
- if (retries < MAX_RETRIES) {
150
- const backoff = RETRY_BACKOFF_BASE * Math.pow(2, retries);
151
- await new Promise((resolve) => setTimeout(resolve, backoff));
152
- return this.createStream(peer, retries + 1);
153
- }
154
- throw new Error(`Failed to create a new stream for ${peer.id.toString()} -- ` + error);
154
+ this.log.error(`Failed to createStreamWithLock:`, error);
155
155
  }
156
- }
157
- prepareStream(peer) {
158
- const timeoutPromise = new Promise((resolve) => setTimeout(resolve, CONNECTION_TIMEOUT));
159
- const streamPromise = Promise.race([
160
- this.createStream(peer),
161
- timeoutPromise.then(() => {
162
- throw new Error("Connection timeout");
163
- })
164
- ]).catch((error) => {
165
- this.log.error(`Failed to prepare a new stream for ${peer.id.toString()} -- `, error);
166
- });
167
- this.streamPool.set(peer.id.toString(), streamPromise);
156
+ finally {
157
+ this.ongoingCreation.delete(peerId);
158
+ }
159
+ return;
168
160
  }
169
161
  handlePeerUpdateStreamPool = (evt) => {
170
162
  const { peer } = evt.detail;
171
- if (peer.protocols.includes(this.multicodec)) {
172
- const isConnected = this.isConnectedTo(peer.id);
173
- if (isConnected) {
174
- this.log.info(`Preemptively opening a stream to ${peer.id.toString()}`);
175
- this.prepareStream(peer);
176
- }
177
- else {
178
- const peerIdStr = peer.id.toString();
179
- this.streamPool.delete(peerIdStr);
180
- this.log.info(`Removed pending stream for disconnected peer ${peerIdStr}`);
181
- }
163
+ if (!peer.protocols.includes(this.multicodec)) {
164
+ return;
182
165
  }
166
+ const stream = this.getOpenStreamForCodec(peer.id);
167
+ if (stream) {
168
+ return;
169
+ }
170
+ this.scheduleNewStream(peer);
183
171
  };
184
- isConnectedTo(peerId) {
172
+ scheduleNewStream(peer) {
173
+ this.log.info(`Scheduling creation of a stream for peerId=${peer.id.toString()} multicodec=${this.multicodec}`);
174
+ // abandon previous attempt
175
+ if (this.streamPool.has(peer.id.toString())) {
176
+ this.streamPool.delete(peer.id.toString());
177
+ }
178
+ this.streamPool.set(peer.id.toString(), this.createStreamWithLock(peer));
179
+ }
180
+ getOpenStreamForCodec(peerId) {
185
181
  const connections = this.getConnections(peerId);
186
- return connections.some((connection) => connection.status === "open");
182
+ const connection = selectOpenConnection(connections);
183
+ if (!connection) {
184
+ return;
185
+ }
186
+ const stream = connection.streams.find((s) => s.protocol === this.multicodec);
187
+ const isStreamUnusable = ["done", "closed", "closing"].includes(stream?.writeStatus || "");
188
+ if (isStreamUnusable) {
189
+ return;
190
+ }
191
+ return stream;
187
192
  }
188
193
  }
189
194
 
@@ -211,7 +216,6 @@ class BaseProtocol {
211
216
  async getStream(peer) {
212
217
  return this.streamManager.getStream(peer);
213
218
  }
214
- //TODO: move to SDK
215
219
  /**
216
220
  * Returns known peers from the address book (`libp2p.peerStore`) that support
217
221
  * the class protocol. Waku may or may not be currently connected to these
@@ -220,13 +224,10 @@ class BaseProtocol {
220
224
  async allPeers() {
221
225
  return getPeersForProtocol(this.components.peerStore, [this.multicodec]);
222
226
  }
223
- async connectedPeers(withOpenStreams = false) {
227
+ async connectedPeers() {
224
228
  const peers = await this.allPeers();
225
229
  return peers.filter((peer) => {
226
230
  const connections = this.components.connectionManager.getConnections(peer.id);
227
- if (withOpenStreams) {
228
- return connections.some((c) => c.streams.some((s) => s.protocol === this.multicodec));
229
- }
230
231
  return connections.length > 0;
231
232
  });
232
233
  }
package/bundle/index.js CHANGED
@@ -1,8 +1,8 @@
1
1
  import { v as version_0, e as encodingLength, a as encode$1, d as decode$1, M as MessagePush, F as FilterSubscribeRequest, b as FilterSubscribeResponse$1, P as PushRpc$1, c as PushResponse, S as StoreQueryRequest$1, f as StoreQueryResponse$1, g as createEncoder, p as pubsubTopicToSingleShardInfo, s as shardInfoToPubsubTopics, W as WakuMetadataRequest, h as pubsubTopicsToShardInfo, i as WakuMetadataResponse } from './version_0-C5ObpJ_0.js';
2
2
  export { j as createDecoder } from './version_0-C5ObpJ_0.js';
3
3
  import { a as allocUnsafe, b as alloc, L as Logger, P as ProtocolError, c as Protocols, u as utf8ToBytes, T as Tags, E as EPeersByDiscoveryEvents, d as EConnectionStateEvents, H as HealthStatus } from './index-BVysxsMu.js';
4
- import { B as BaseProtocol } from './base_protocol-CS0EDeEY.js';
5
- export { S as StreamManager } from './base_protocol-CS0EDeEY.js';
4
+ import { B as BaseProtocol } from './base_protocol-j2HBmvmX.js';
5
+ export { S as StreamManager } from './base_protocol-j2HBmvmX.js';
6
6
 
7
7
  const MB = 1024 ** 2;
8
8
  const SIZE_CAP_IN_MB = 1;
@@ -1,2 +1,2 @@
1
- export { B as BaseProtocol } from '../base_protocol-CS0EDeEY.js';
1
+ export { B as BaseProtocol } from '../base_protocol-j2HBmvmX.js';
2
2
  import '../index-BVysxsMu.js';
package/dist/.tsbuildinfo CHANGED
@@ -1 +1 @@
1
- {"program":{"fileNames":["../../../node_modules/typescript/lib/lib.es5.d.ts","../../../node_modules/typescript/lib/lib.es2015.d.ts","../../../node_modules/typescript/lib/lib.es2016.d.ts","../../../node_modules/typescript/lib/lib.es2017.d.ts","../../../node_modules/typescript/lib/lib.es2018.d.ts","../../../node_modules/typescript/lib/lib.es2019.d.ts","../../../node_modules/typescript/lib/lib.es2020.d.ts","../../../node_modules/typescript/lib/lib.es2021.d.ts","../../../node_modules/typescript/lib/lib.es2022.d.ts","../../../node_modules/typescript/lib/lib.dom.d.ts","../../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../node_modules/typescript/lib/lib.es2016.intl.d.ts","../../../node_modules/typescript/lib/lib.es2017.date.d.ts","../../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../node_modules/typescript/lib/lib.es2020.date.d.ts","../../../node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.es2020.string.d.ts","../../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../node_modules/typescript/lib/lib.es2020.number.d.ts","../../../node_modules/typescript/lib/lib.es2021.promise.d.ts","../../../node_modules/typescript/lib/lib.es2021.string.d.ts","../../../node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../../node_modules/typescript/lib/lib.es2021.intl.d.ts","../../../node_modules/typescript/lib/lib.es2022.array.d.ts","../../../node_modules/typescript/lib/lib.es2022.error.d.ts","../../../node_modules/typescript/lib/lib.es2022.intl.d.ts","../../../node_modules/typescript/lib/lib.es2022.object.d.ts","../../../node_modules/typescript/lib/lib.es2022.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.es2022.string.d.ts","../../../node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../../node_modules/typescript/lib/lib.esnext.intl.d.ts","../../../node_modules/typescript/lib/lib.decorators.d.ts","../../../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../../node_modules/uint8arraylist/dist/src/index.d.ts","../../../node_modules/@libp2p/interface/dist/src/keys/index.d.ts","../../../node_modules/multiformats/dist/src/bases/interface.d.ts","../../../node_modules/multiformats/dist/src/block/interface.d.ts","../../../node_modules/multiformats/dist/src/hashes/interface.d.ts","../../../node_modules/multiformats/dist/src/link/interface.d.ts","../../../node_modules/multiformats/dist/src/cid.d.ts","../../../node_modules/@libp2p/interface/dist/src/peer-id/index.d.ts","../../../node_modules/@multiformats/multiaddr/dist/src/protocols-table.d.ts","../../../node_modules/@multiformats/dns/dist/src/resolvers/dns-over-https.d.ts","../../../node_modules/@multiformats/dns/dist/src/resolvers/dns-json-over-https.d.ts","../../../node_modules/@multiformats/dns/dist/src/resolvers/index.d.ts","../../../node_modules/progress-events/dist/src/index.d.ts","../../../node_modules/@multiformats/dns/dist/src/index.d.ts","../../../node_modules/@multiformats/multiaddr/dist/src/resolvers/dnsaddr.d.ts","../../../node_modules/@multiformats/multiaddr/dist/src/resolvers/index.d.ts","../../../node_modules/@multiformats/multiaddr/dist/src/filter/multiaddr-filter.d.ts","../../../node_modules/@multiformats/multiaddr/dist/src/index.d.ts","../../../node_modules/it-stream-types/dist/src/index.d.ts","../../../node_modules/@libp2p/interface/dist/src/connection/index.d.ts","../../../node_modules/@libp2p/interface/dist/src/peer-info/index.d.ts","../../../node_modules/@libp2p/interface/dist/src/content-routing/index.d.ts","../../../node_modules/@libp2p/interface/dist/src/event-target.d.ts","../../../node_modules/@libp2p/interface/dist/src/metrics/index.d.ts","../../../node_modules/@libp2p/interface/dist/src/peer-routing/index.d.ts","../../../node_modules/@libp2p/interface/dist/src/peer-store/index.d.ts","../../../node_modules/@libp2p/interface/dist/src/startable.d.ts","../../../node_modules/@libp2p/interface/dist/src/stream-handler/index.d.ts","../../../node_modules/@libp2p/interface/dist/src/topology/index.d.ts","../../../node_modules/@libp2p/interface/dist/src/stream-muxer/index.d.ts","../../../node_modules/@libp2p/interface/dist/src/transport/index.d.ts","../../../node_modules/@libp2p/interface/dist/src/connection-encrypter/index.d.ts","../../../node_modules/@libp2p/interface/dist/src/connection-gater/index.d.ts","../../../node_modules/@libp2p/interface/dist/src/peer-discovery/index.d.ts","../../../node_modules/@libp2p/interface/dist/src/peer-store/tags.d.ts","../../../node_modules/it-pushable/dist/src/index.d.ts","../../../node_modules/@libp2p/interface/dist/src/pubsub/index.d.ts","../../../node_modules/@libp2p/interface/dist/src/record/index.d.ts","../../../node_modules/@libp2p/interface/dist/src/errors.d.ts","../../../node_modules/@types/node/assert.d.ts","../../../node_modules/@types/node/assert/strict.d.ts","../../../node_modules/buffer/index.d.ts","../../../node_modules/undici-types/header.d.ts","../../../node_modules/undici-types/readable.d.ts","../../../node_modules/undici-types/file.d.ts","../../../node_modules/undici-types/fetch.d.ts","../../../node_modules/undici-types/formdata.d.ts","../../../node_modules/undici-types/connector.d.ts","../../../node_modules/undici-types/client.d.ts","../../../node_modules/undici-types/errors.d.ts","../../../node_modules/undici-types/dispatcher.d.ts","../../../node_modules/undici-types/global-dispatcher.d.ts","../../../node_modules/undici-types/global-origin.d.ts","../../../node_modules/undici-types/pool-stats.d.ts","../../../node_modules/undici-types/pool.d.ts","../../../node_modules/undici-types/handlers.d.ts","../../../node_modules/undici-types/balanced-pool.d.ts","../../../node_modules/undici-types/agent.d.ts","../../../node_modules/undici-types/mock-interceptor.d.ts","../../../node_modules/undici-types/mock-agent.d.ts","../../../node_modules/undici-types/mock-client.d.ts","../../../node_modules/undici-types/mock-pool.d.ts","../../../node_modules/undici-types/mock-errors.d.ts","../../../node_modules/undici-types/proxy-agent.d.ts","../../../node_modules/undici-types/retry-handler.d.ts","../../../node_modules/undici-types/retry-agent.d.ts","../../../node_modules/undici-types/api.d.ts","../../../node_modules/undici-types/util.d.ts","../../../node_modules/undici-types/cookies.d.ts","../../../node_modules/undici-types/patch.d.ts","../../../node_modules/undici-types/websocket.d.ts","../../../node_modules/undici-types/eventsource.d.ts","../../../node_modules/undici-types/filereader.d.ts","../../../node_modules/undici-types/diagnostics-channel.d.ts","../../../node_modules/undici-types/content-type.d.ts","../../../node_modules/undici-types/cache.d.ts","../../../node_modules/undici-types/interceptors.d.ts","../../../node_modules/undici-types/index.d.ts","../../../node_modules/@types/node/globals.d.ts","../../../node_modules/@types/node/async_hooks.d.ts","../../../node_modules/@types/node/buffer.d.ts","../../../node_modules/@types/node/child_process.d.ts","../../../node_modules/@types/node/cluster.d.ts","../../../node_modules/@types/node/console.d.ts","../../../node_modules/@types/node/constants.d.ts","../../../node_modules/@types/node/crypto.d.ts","../../../node_modules/@types/node/dgram.d.ts","../../../node_modules/@types/node/diagnostics_channel.d.ts","../../../node_modules/@types/node/dns.d.ts","../../../node_modules/@types/node/dns/promises.d.ts","../../../node_modules/@types/node/domain.d.ts","../../../node_modules/@types/node/dom-events.d.ts","../../../node_modules/@types/node/events.d.ts","../../../node_modules/@types/node/fs.d.ts","../../../node_modules/@types/node/fs/promises.d.ts","../../../node_modules/@types/node/http.d.ts","../../../node_modules/@types/node/http2.d.ts","../../../node_modules/@types/node/https.d.ts","../../../node_modules/@types/node/inspector.d.ts","../../../node_modules/@types/node/module.d.ts","../../../node_modules/@types/node/net.d.ts","../../../node_modules/@types/node/os.d.ts","../../../node_modules/@types/node/path.d.ts","../../../node_modules/@types/node/perf_hooks.d.ts","../../../node_modules/@types/node/process.d.ts","../../../node_modules/@types/node/punycode.d.ts","../../../node_modules/@types/node/querystring.d.ts","../../../node_modules/@types/node/readline.d.ts","../../../node_modules/@types/node/readline/promises.d.ts","../../../node_modules/@types/node/repl.d.ts","../../../node_modules/@types/node/sea.d.ts","../../../node_modules/@types/node/stream.d.ts","../../../node_modules/@types/node/stream/promises.d.ts","../../../node_modules/@types/node/stream/consumers.d.ts","../../../node_modules/@types/node/stream/web.d.ts","../../../node_modules/@types/node/string_decoder.d.ts","../../../node_modules/@types/node/test.d.ts","../../../node_modules/@types/node/timers.d.ts","../../../node_modules/@types/node/timers/promises.d.ts","../../../node_modules/@types/node/tls.d.ts","../../../node_modules/@types/node/trace_events.d.ts","../../../node_modules/@types/node/tty.d.ts","../../../node_modules/@types/node/url.d.ts","../../../node_modules/@types/node/util.d.ts","../../../node_modules/@types/node/v8.d.ts","../../../node_modules/@types/node/vm.d.ts","../../../node_modules/@types/node/wasi.d.ts","../../../node_modules/@types/node/worker_threads.d.ts","../../../node_modules/@types/node/zlib.d.ts","../../../node_modules/@types/node/globals.global.d.ts","../../../node_modules/@types/node/index.d.ts","../../../node_modules/@libp2p/interface/dist/src/events.d.ts","../../../node_modules/@libp2p/interface/dist/src/index.d.ts","../../interfaces/dist/sharding.d.ts","../../interfaces/dist/enr.d.ts","../../../node_modules/@chainsafe/libp2p-gossipsub/dist/src/message/decodeRpc.d.ts","../../../node_modules/@chainsafe/libp2p-gossipsub/node_modules/protons-runtime/dist/src/codec.d.ts","../../../node_modules/@chainsafe/libp2p-gossipsub/node_modules/protons-runtime/dist/src/decode.d.ts","../../../node_modules/@chainsafe/libp2p-gossipsub/node_modules/protons-runtime/dist/src/encode.d.ts","../../../node_modules/@chainsafe/libp2p-gossipsub/node_modules/protons-runtime/dist/src/codecs/enum.d.ts","../../../node_modules/@chainsafe/libp2p-gossipsub/node_modules/protons-runtime/dist/src/codecs/message.d.ts","../../../node_modules/@chainsafe/libp2p-gossipsub/node_modules/protons-runtime/dist/src/utils/reader.d.ts","../../../node_modules/@chainsafe/libp2p-gossipsub/node_modules/protons-runtime/dist/src/utils/writer.d.ts","../../../node_modules/@chainsafe/libp2p-gossipsub/node_modules/protons-runtime/dist/src/index.d.ts","../../../node_modules/@chainsafe/libp2p-gossipsub/dist/src/message/rpc.d.ts","../../../node_modules/@chainsafe/libp2p-gossipsub/dist/src/types.d.ts","../../../node_modules/@chainsafe/libp2p-gossipsub/dist/src/message-cache.d.ts","../../../node_modules/@chainsafe/libp2p-gossipsub/dist/src/score/peer-score-thresholds.d.ts","../../../node_modules/@chainsafe/libp2p-gossipsub/dist/src/metrics.d.ts","../../../node_modules/@chainsafe/libp2p-gossipsub/dist/src/score/peer-score-params.d.ts","../../../node_modules/@chainsafe/libp2p-gossipsub/dist/src/utils/set.d.ts","../../../node_modules/@chainsafe/libp2p-gossipsub/dist/src/score/peer-stats.d.ts","../../../node_modules/@chainsafe/libp2p-gossipsub/dist/src/score/compute-score.d.ts","../../../node_modules/denque/index.d.ts","../../../node_modules/@chainsafe/libp2p-gossipsub/dist/src/score/message-deliveries.d.ts","../../../node_modules/@chainsafe/libp2p-gossipsub/dist/src/score/peer-score.d.ts","../../../node_modules/@chainsafe/libp2p-gossipsub/dist/src/score/index.d.ts","../../../node_modules/@chainsafe/libp2p-gossipsub/dist/src/stream.d.ts","../../../node_modules/@chainsafe/libp2p-gossipsub/dist/src/tracer.d.ts","../../../node_modules/@chainsafe/libp2p-gossipsub/dist/src/config.d.ts","../../../node_modules/@libp2p/interface-internal/dist/src/address-manager/index.d.ts","../../../node_modules/@libp2p/peer-collections/dist/src/map.d.ts","../../../node_modules/@libp2p/peer-collections/dist/src/set.d.ts","../../../node_modules/@libp2p/peer-collections/dist/src/list.d.ts","../../../node_modules/@libp2p/peer-collections/dist/src/filter.d.ts","../../../node_modules/@libp2p/peer-collections/dist/src/tracked-map.d.ts","../../../node_modules/@libp2p/peer-collections/dist/src/tracked-set.d.ts","../../../node_modules/@libp2p/peer-collections/dist/src/tracked-list.d.ts","../../../node_modules/@libp2p/peer-collections/dist/src/index.d.ts","../../../node_modules/@libp2p/interface-internal/dist/src/connection-manager/index.d.ts","../../../node_modules/@libp2p/interface-internal/dist/src/random-walk/index.d.ts","../../../node_modules/@libp2p/interface-internal/dist/src/record/index.d.ts","../../../node_modules/@libp2p/interface-internal/dist/src/registrar/index.d.ts","../../../node_modules/@libp2p/interface-internal/dist/src/transport-manager/index.d.ts","../../../node_modules/@libp2p/interface-internal/dist/src/index.d.ts","../../../node_modules/@chainsafe/libp2p-gossipsub/dist/src/index.d.ts","../../../node_modules/@libp2p/identify/dist/src/index.d.ts","../../../node_modules/@libp2p/ping/dist/src/constants.d.ts","../../../node_modules/@libp2p/ping/dist/src/index.d.ts","../../../node_modules/libp2p/dist/src/address-manager/index.d.ts","../../../node_modules/multiformats/dist/src/codecs/interface.d.ts","../../../node_modules/multiformats/dist/src/codecs/json.d.ts","../../../node_modules/multiformats/dist/src/codecs/raw.d.ts","../../../node_modules/multiformats/dist/src/bytes.d.ts","../../../node_modules/multiformats/dist/src/hashes/digest.d.ts","../../../node_modules/multiformats/dist/src/hashes/hasher.d.ts","../../../node_modules/multiformats/dist/src/varint.d.ts","../../../node_modules/multiformats/dist/src/interface.d.ts","../../../node_modules/multiformats/dist/src/index.d.ts","../../../node_modules/multiformats/dist/src/bases/base.d.ts","../../../node_modules/multiformats/dist/src/basics.d.ts","../../../node_modules/uint8arrays/dist/src/util/bases.d.ts","../../../node_modules/uint8arrays/dist/src/to-string.d.ts","../../../node_modules/interface-datastore/dist/src/key.d.ts","../../../node_modules/interface-store/dist/src/errors.d.ts","../../../node_modules/interface-store/dist/src/index.d.ts","../../../node_modules/interface-datastore/dist/src/index.d.ts","../../../node_modules/libp2p/dist/src/components.d.ts","../../../node_modules/libp2p/dist/src/connection-manager/auto-dial.d.ts","../../../node_modules/libp2p/dist/src/connection-manager/connection-pruner.d.ts","../../../node_modules/p-defer/index.d.ts","../../../node_modules/@libp2p/utils/dist/src/queue/recipient.d.ts","../../../node_modules/@libp2p/utils/dist/src/queue/job.d.ts","../../../node_modules/@libp2p/utils/dist/src/queue/index.d.ts","../../../node_modules/@libp2p/utils/dist/src/priority-queue.d.ts","../../../node_modules/libp2p/dist/src/connection-manager/dial-queue.d.ts","../../../node_modules/libp2p/dist/src/connection-manager/index.d.ts","../../../node_modules/libp2p/dist/src/transport-manager.d.ts","../../../node_modules/@libp2p/peer-store/dist/src/index.d.ts","../../../node_modules/libp2p/dist/src/index.d.ts","../../interfaces/dist/metadata.d.ts","../../interfaces/dist/libp2p.d.ts","../../interfaces/dist/protocols.d.ts","../../interfaces/dist/misc.d.ts","../../interfaces/dist/message.d.ts","../../interfaces/dist/receiver.d.ts","../../interfaces/dist/filter.d.ts","../../interfaces/dist/sender.d.ts","../../interfaces/dist/light_push.d.ts","../../interfaces/dist/peer_exchange.d.ts","../../interfaces/dist/relay.d.ts","../../interfaces/dist/store.d.ts","../../interfaces/dist/connection_manager.d.ts","../../interfaces/dist/health_manager.d.ts","../../interfaces/dist/waku.d.ts","../../interfaces/dist/keep_alive_manager.d.ts","../../interfaces/dist/dns_discovery.d.ts","../../interfaces/dist/constants.d.ts","../../interfaces/dist/local_storage.d.ts","../../interfaces/dist/index.d.ts","../../../node_modules/protons-runtime/dist/src/codec.d.ts","../../../node_modules/protons-runtime/dist/src/decode.d.ts","../../../node_modules/protons-runtime/dist/src/encode.d.ts","../../../node_modules/protons-runtime/dist/src/codecs/enum.d.ts","../../../node_modules/protons-runtime/dist/src/codecs/message.d.ts","../../../node_modules/protons-runtime/dist/src/utils/reader.d.ts","../../../node_modules/protons-runtime/dist/src/utils/writer.d.ts","../../../node_modules/protons-runtime/dist/src/index.d.ts","../../proto/dist/generated/message.d.ts","../../proto/dist/generated/filter.d.ts","../../proto/dist/generated/topic_only_message.d.ts","../../proto/dist/generated/filter_v2.d.ts","../../proto/dist/generated/light_push.d.ts","../../proto/dist/generated/store_v3.d.ts","../../proto/dist/generated/peer_exchange.d.ts","../../proto/dist/generated/metadata.d.ts","../../proto/dist/index.d.ts","../../utils/dist/common/is_defined.d.ts","../../utils/dist/common/random_subset.d.ts","../../utils/dist/common/group_by.d.ts","../../utils/dist/common/to_async_iterator.d.ts","../../utils/dist/common/is_size_valid.d.ts","../../utils/dist/common/sharding/type_guards.d.ts","../../utils/dist/common/sharding/index.d.ts","../../utils/dist/common/push_or_init_map.d.ts","../../utils/dist/common/relay_shard_codec.d.ts","../../utils/dist/common/delay.d.ts","../../utils/dist/common/index.d.ts","../../../node_modules/@types/ms/index.d.ts","../../../node_modules/@types/debug/index.d.ts","../../utils/dist/logger/index.d.ts","../../utils/dist/index.d.ts","../src/lib/message/version_0.ts","../src/lib/message/index.ts","../../../node_modules/it-all/dist/src/index.d.ts","../../../node_modules/it-length-prefixed/dist/src/encode.d.ts","../../../node_modules/it-reader/dist/src/index.d.ts","../../../node_modules/it-length-prefixed/dist/src/decode.d.ts","../../../node_modules/it-length-prefixed/dist/src/index.d.ts","../../../node_modules/it-pipe/dist/src/index.d.ts","../../utils/dist/libp2p/index.d.ts","../src/lib/filterPeers.ts","../src/lib/stream_manager/utils.ts","../src/lib/stream_manager/stream_manager.ts","../src/lib/stream_manager/index.ts","../src/lib/base_protocol.ts","../../../node_modules/@types/uuid/index.d.ts","../../../node_modules/@types/uuid/index.d.mts","../src/lib/filter/filter_rpc.ts","../src/lib/filter/index.ts","../src/lib/light_push/push_rpc.ts","../src/lib/light_push/utils.ts","../src/lib/light_push/index.ts","../src/lib/to_proto_message.ts","../src/lib/store/rpc.ts","../src/lib/store/index.ts","../../../node_modules/p-timeout/index.d.ts","../../../node_modules/p-event/index.d.ts","../src/lib/wait_for_remote_peer.ts","../../utils/dist/bytes/index.d.ts","../src/lib/keep_alive_manager.ts","../src/lib/connection_manager.ts","../src/lib/health_manager.ts","../src/lib/metadata/index.ts","../src/index.ts","../../../node_modules/@types/mocha/index.d.ts"],"fileInfos":[{"version":"824cb491a40f7e8fdeb56f1df5edf91b23f3e3ee6b4cde84d4a99be32338faee","affectsGlobalScope":true},"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","9a68c0c07ae2fa71b44384a839b7b8d81662a236d4b9ac30916718f7510b1b2d","5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","5514e54f17d6d74ecefedc73c504eadffdeda79c7ea205cf9febead32d45c4bc",{"version":"87d693a4920d794a73384b3c779cadcb8548ac6945aa7a925832fe2418c9527a","affectsGlobalScope":true},{"version":"138fb588d26538783b78d1e3b2c2cc12d55840b97bf5e08bca7f7a174fbe2f17","affectsGlobalScope":true},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true},{"version":"4443e68b35f3332f753eacc66a04ac1d2053b8b035a0e0ac1d455392b5e243b3","affectsGlobalScope":true},{"version":"bc47685641087c015972a3f072480889f0d6c65515f12bd85222f49a98952ed7","affectsGlobalScope":true},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true},{"version":"93495ff27b8746f55d19fcbcdbaccc99fd95f19d057aed1bd2c0cafe1335fbf0","affectsGlobalScope":true},{"version":"6fc23bb8c3965964be8c597310a2878b53a0306edb71d4b5a4dfe760186bcc01","affectsGlobalScope":true},{"version":"ea011c76963fb15ef1cdd7ce6a6808b46322c527de2077b6cfdf23ae6f5f9ec7","affectsGlobalScope":true},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true},{"version":"bb42a7797d996412ecdc5b2787720de477103a0b2e53058569069a0e2bae6c7e","affectsGlobalScope":true},{"version":"4738f2420687fd85629c9efb470793bb753709c2379e5f85bc1815d875ceadcd","affectsGlobalScope":true},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true},{"version":"9fc46429fbe091ac5ad2608c657201eb68b6f1b8341bd6d670047d32ed0a88fa","affectsGlobalScope":true},{"version":"61c37c1de663cf4171e1192466e52c7a382afa58da01b1dc75058f032ddf0839","affectsGlobalScope":true},{"version":"b541a838a13f9234aba650a825393ffc2292dc0fc87681a5d81ef0c96d281e7a","affectsGlobalScope":true},{"version":"b20fe0eca9a4e405f1a5ae24a2b3290b37cf7f21eba6cbe4fc3fab979237d4f3","affectsGlobalScope":true},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true},{"version":"49ed889be54031e1044af0ad2c603d627b8bda8b50c1a68435fe85583901d072","affectsGlobalScope":true},{"version":"e93d098658ce4f0c8a0779e6cab91d0259efb88a318137f686ad76f8410ca270","affectsGlobalScope":true},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true},{"version":"bf14a426dbbf1022d11bd08d6b8e709a2e9d246f0c6c1032f3b2edb9a902adbe","affectsGlobalScope":true},{"version":"5e07ed3809d48205d5b985642a59f2eba47c402374a7cf8006b686f79efadcbd","affectsGlobalScope":true},{"version":"2b72d528b2e2fe3c57889ca7baef5e13a56c957b946906d03767c642f386bbc3","affectsGlobalScope":true},{"version":"8073890e29d2f46fdbc19b8d6d2eb9ea58db9a2052f8640af20baff9afbc8640","affectsGlobalScope":true},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true},{"version":"51e547984877a62227042850456de71a5c45e7fe86b7c975c6e68896c86fa23b","affectsGlobalScope":true},{"version":"956d27abdea9652e8368ce029bb1e0b9174e9678a273529f426df4b3d90abd60","affectsGlobalScope":true},{"version":"4fa6ed14e98aa80b91f61b9805c653ee82af3502dc21c9da5268d3857772ca05","affectsGlobalScope":true},{"version":"e6633e05da3ff36e6da2ec170d0d03ccf33de50ca4dc6f5aeecb572cedd162fb","affectsGlobalScope":true},{"version":"d8670852241d4c6e03f2b89d67497a4bbefe29ecaa5a444e2c11a9b05e6fccc6","affectsGlobalScope":true},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true},{"version":"caccc56c72713969e1cfe5c3d44e5bab151544d9d2b373d7dbe5a1e4166652be","affectsGlobalScope":true},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true},{"version":"50d53ccd31f6667aff66e3d62adf948879a3a16f05d89882d1188084ee415bbc","affectsGlobalScope":true},{"version":"13f6e6380c78e15e140243dc4be2fa546c287c6d61f4729bc2dd7cf449605471","affectsGlobalScope":true},{"version":"33358442698bb565130f52ba79bfd3d4d484ac85fe33f3cb1759c54d18201393","affectsGlobalScope":true},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true},"d35b5db21a04a45ae6323c4d4b25acc983dfe2870fc670fd05249eb19d839a5e","e6877d43c2eb116aeafde2c81bec47e68dbb7d964804d65beaf9c7cdf81b5fa6","4a3605bef1a5ef29fd5a1696dd95b0b4e2259e2d07a4d88fac79f3a9765c44a2","370079895f1acdd4bb5194a403c85bf60cfbb2654bced9430a6c7210e7246be8","90240231e730deed31569f6c686766a538e4a024bbc33ea1738fe924f477ba61","552223520e823223ee13c5764e9b69b1819c985818a8bcda435d8d1dbd909bee","49b7c3ddd683c09aa437dd92681699387441f522524b14d2331ce494a9bf2f27","3292bd23ca5d9b8d02492b49099f6917f9715e0fd48b7b5fbb1edbf8c2021c5f","5212dd78d1d63ab33332c8846a0ea5ce248159e74033cde16de48373036b4704","954b3c04ee9f94ca1e262f3e5a6e833b0da0066514b3d4b97b92b7f0c85f8700","a2fc9ce1ae5bed7068d701d8aeebf13321de0f42c217dc2e10f1622dcaa53a7f","8e81f220cb935d551e88cff11541d5e89d3a3494a52fe6247e98016a9dbd4c2d","6b2576a04253626ba41b7dc7ec5977bec07f3b6952b16249d9fa8a3a0d79901c","9de17491f2bfbccea92500e174079d53bdedae34dbebe5d4a12a06ab09814710","e88481085a8576fa52efc913e631c1a833d16179486469b8538d8c4fab2f7381","aec68502c8f4ffaecb4440b37363473582fec0bfee4fb8668a87daa7f700f708","d71577e78c7a4257074aaf82f595724175210c89e8b467ef82f949a6cbd891bc","cf548af8b03cbbc79fdc4f357b5560f618c6d2f68c8688e6eb759c3c11d962c3","c84146dbc9d2e5f43d2cbf15485a4eabf90219dbb66c0d481f20f12d3851bffc","6f27a01e3be326f1f7cd42c1a67f9912f2d58c80f864b263a848a2142212bc0c","99c24f331c9f4e75a779b9a988e942442db3cf29923ceb820d3bdd4ed1edfef2","25b1f20d5868ef9ef18132f7dd76b40b7038688ff7c56c58930537a8dff9f231","0699e4b82c89b8b4da3c56de9457ce959ee8e7ac346af75785bc59a91f688d3f","9bba18dcac8cc9bdce65a4e34122d90474617cdf857feddeeba1e7a3638097d4","8c92080253bac0506d82b83d555a029582595f0944abb349954ea732322baa5c","9196da290a76cf32b70a8cfdbeb165f75bee9a094d70662cee6383fa09a73e43","230eb449f719119cab1728252f20ecdd36d7a20cef659e4a51ada1a232a8aaad","85786f052b5dcd0b36564b657a9aea3e80f1fd0e76e4606a4400ec21928892c1","3ac9cfb334b17c90aae03c3d17d978f829488b22d48b7a00b019dc16f62db77d","1bf687d978bdd6d5aff10b9eb0ff0695179f8594d4446946fd0182d6d25fa433","a01d0d5afa693508187608b13a4b6ccf6105cd896b7ee950954364ac71670580","f5337c3ea7b8702ffe2718f56a24325a67d517c0d552ef71b8d578d9f33a99d3","2113d72680c7ddad6d3b6f70a29432a35c074c94ec6823a7c16ccd69847d965c","c8ffd61bf2db2e7bccb996dd70c9499805cb338f1b1c781987e38ba99dd5b296","55e5a976b594dc02f054860fb59a5299872a5b3c8c90e96733a5c9c9d4ed1fb8","fac83d4c6898d5bf90c508cc84409ded40fdc14611cf42d7fb750fb2c7847979","8a1cce1f66006707d7219898543512bbdce3eb744b7e730606965b2c9680f5f7","cdebdc5861de7a07ddfbd6740a7ad3415068522e19a82bc652ae313c76e4f83d","9c7aa50c1eaa6e0fb07d478ef1b047e9bedb89efd626bfe342f57c8dec15536c","e142fda89ed689ea53d6f2c93693898464c7d29a0ae71c6dc8cdfe5a1d76c775","7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","4967529644e391115ca5592184d4b63980569adf60ee685f968fd59ab1557188","5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","24bd580b5743dc56402c440dc7f9a4f5d592ad7a419f25414d37a7bfe11e342b","25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","34b4f256dd3c591cb7c9e96a763d79d54b69d417709b9015dcec3ac5583eec73","3e4825171442666d31c845aeb47fcd34b62e14041bb353ae2b874285d78482aa","c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","e9775e97ac4877aebf963a0289c81abe76d1ec9a2a7778dbe637e5151f25c5f3","57386628c539248e4f428d5308a69f98f4a6a3cd42a053f017d9dd3fd5a43bc5","cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","3a84b7cb891141824bd00ef8a50b6a44596aded4075da937f180c90e362fe5f6","13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","8b9bf58d580d9b36ab2f23178c88757ce7cc6830ccbdd09e8a76f4cb1bc0fcf7","0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","7782678102bd835ef2c54330ee16c31388e51dfd9ca535b47f6fd8f3d6e07993","89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","e53a3c2a9f624d90f24bf4588aacd223e7bec1b9d0d479b68d2f4a9e6011147f","24b8685c62562f5d98615c5a0c1d05f297cf5065f15246edfe99e81ec4c0e011","1a42891defae8cec268a4f8903140dbf0d214c0cf9ed8fdc1eb6c25e5b3e9a5c","339dc5265ee5ed92e536a93a04c4ebbc2128f45eeec6ed29f379e0085283542c","4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","d32275be3546f252e3ad33976caf8c5e842c09cb87d468cb40d5f4cf092d1acc","37e97c64b890352421ccb29cd8ede863774df8f03763416f6a572093f6058284",{"version":"6f73fc82f51bcdf0487fc982f062eeadae02e0251dd2e4c444043edb247a7d3b","affectsGlobalScope":true},"db3ec8993b7596a4ef47f309c7b25ee2505b519c13050424d9c34701e5973315",{"version":"e7f13a977b01cc54adb4408a9265cda9ddf11db878d70f4f3cac64bef00062e6","affectsGlobalScope":true},"af49b066a76ce26673fe49d1885cc6b44153f1071ed2d952f2a90fccba1095c9","f22fd1dc2df53eaf5ce0ff9e0a3326fc66f880d6a652210d50563ae72625455f",{"version":"3ddbdb519e87a7827c4f0c4007013f3628ca0ebb9e2b018cf31e5b2f61c593f1","affectsGlobalScope":true},"a40826e8476694e90da94aa008283a7de50d1dafd37beada623863f1901cb7fb",{"version":"6d498d4fd8036ea02a4edcae10375854a0eb1df0496cf0b9d692577d3c0fd603","affectsGlobalScope":true},"24642567d3729bcc545bacb65ee7c0db423400c7f1ef757cab25d05650064f98","fd09b892597ab93e7f79745ce725a3aaf6dd005e8db20f0c63a5d10984cba328","a3be878ff1e1964ab2dc8e0a3b67087cf838731c7f3d8f603337e7b712fdd558","5433f7f77cd1fd53f45bd82445a4e437b2f6a72a32070e907530a4fea56c30c8","9be74296ee565af0c12d7071541fdd23260f53c3da7731fb6361f61150a791f6",{"version":"ee1ee365d88c4c6c0c0a5a5701d66ebc27ccd0bcfcfaa482c6e2e7fe7b98edf7","affectsGlobalScope":true},{"version":"f501a53b94ba382d9ba396a5c486969a3abc68309828fa67f916035f5d37fe2b","affectsGlobalScope":true},"aa658b5d765f630c312ac9202d110bbaf2b82d180376457f0a9d57b42629714a","312ac7cbd070107766a9886fd27f9faad997ef57d93fdfb4095df2c618ac8162","bcfcff784a59db3f323c25cea5ae99a903ca9292c060f2c7e470ea73aaf71b44","672ad3045f329e94002256f8ed460cfd06173a50c92cde41edaadfacffd16808","64da4965d1e0559e134d9c1621ae400279a216f87ed00c4cce4f2c7c78021712","ddbf3aac94f85dbb8e4d0360782e60020da75a0becfc0d3c69e437c645feb30f",{"version":"0166fce1204d520fdfd6b5febb3cda3deee438bcbf8ce9ffeb2b1bcde7155346","affectsGlobalScope":true},"d8b13eab85b532285031b06a971fa051bf0175d8fff68065a24a6da9c1c986cf","50c382ba1827988c59aa9cc9d046e386d55d70f762e9e352e95ee8cb7337cdb8","2178ab4b68402d1de2dda199d3e4a55f7200e3334f5a9727fbd9d16975cdf75f",{"version":"21d7e87f271e72d02f8d167edc902f90b04525edc7918f00f01dd0bd00599f7e","affectsGlobalScope":true},{"version":"9e523e73ee7dd119d99072fd855404efc33938c168063771528bd1deb6df56d2","affectsGlobalScope":true},"a215554477f7629e3dcbc8cde104bec036b78673650272f5ffdc5a2cee399a0a","c3497fc242aabfedcd430b5932412f94f157b5906568e737f6a18cc77b36a954","cdc1de3b672f9ef03ff15c443aa1b631edca35b6ae6970a7da6400647ff74d95","139ad1dc93a503da85b7a0d5f615bddbae61ad796bc68fedd049150db67a1e26","bf01fdd3b93cf633b3f7420718457af19c57ab8cbfea49268df60bae2e84d627","15c5e91b5f08be34a78e3d976179bf5b7a9cc28dc0ef1ffebffeb3c7812a2dca","65b39cc6b610a4a4aecc321f6efb436f10c0509d686124795b4c36a5e915b89e","269929a24b2816343a178008ac9ae9248304d92a8ba8e233055e0ed6dbe6ef71","93452d394fdd1dc551ec62f5042366f011a00d342d36d50793b3529bfc9bd633","3c1f19c7abcda6b3a4cf9438a15c7307a080bd3b51dfd56b198d9f86baf19447","d3edb86744e2c19f2c1503849ac7594a5e06024f2451bacae032390f2e20314a",{"version":"97a1d365f71c72ebc3256b0fb8ada716f70c7482309535b7a56c78e651f18b33","affectsGlobalScope":true},{"version":"8a3e61347b8f80aa5af532094498bceb0c0b257b25a6aa8ab4880fd6ed57c95a","affectsGlobalScope":true},"98e00f3613402504bc2a2c9a621800ab48e0a463d1eed062208a4ae98ad8f84c","4301becc26a79eb5f4552f7bee356c2534466d3b5cd68b71523e1929d543de89","5475df7cfc493a08483c9d7aa61cc04791aecba9d0a2efc213f23c4006d4d3cd","000720870b275764c65e9f28ac97cc9e4d9e4a36942d4750ca8603e416e9c57c",{"version":"54412c70bacb9ed547ed6caae8836f712a83ccf58d94466f3387447ec4e82dc3","affectsGlobalScope":true},{"version":"1d274b8bb8ca011148f87e128392bfcd17a12713b6a4e843f0fa9f3f6b45e2b1","affectsGlobalScope":true},"4c48e931a72f6971b5add7fdb1136be1d617f124594e94595f7114af749395e0","478eb5c32250678a906d91e0529c70243fc4d75477a08f3da408e2615396f558","e686a88c9ee004c8ba12ffc9d674ca3192a4c50ed0ca6bd5b2825c289e2b2bfe",{"version":"98d547613610452ac9323fb9ec4eafc89acab77644d6e23105b3c94913f712b3","affectsGlobalScope":true},"4423fb3d6abe6eefb8d7f79eb2df9510824a216ec1c6feee46718c9b18e6d89f",{"version":"ab9b9a36e5284fd8d3bf2f7d5fcbc60052f25f27e4d20954782099282c60d23e","affectsGlobalScope":true},"a42be67ed1ddaec743582f41fc219db96a1b69719fccac6d1464321178d610fc","c663a7e4ee2cb54d99cf095479a5bcf1dd18d762ffdfa038aa1b2d79b070b0d7","d26127118c28d9ea66bdeeaa25e25ee02c6ece837741a3b0c80e507a683db8af","7ed48493953e1f10eb2da6f35b5e04941d3ac8bb618a9d1888da77f7ee43422c","b35182ba2344e5b4a1387b193fa7a1d3f2321f2bbeadab6ddf5c2571d0b67e44","7ad3e0aaeb840047fa4711306188cac803514091f251b6baecb9b2aacf15b976","6d268309f0e15dd820b2df9806234166554cb4e2fe00d11737adcb4e5489f700","58cf96187feb10cc8ad3bb080871cd30888ef63bc5db131f11458850ef8f6245","9102986ff52326a2016e8cddc1cf3092f0808ac916dcc8dc2d2c7195cd181987","fa82b7b22d9df87323e31e9e2ad75911028f3e544647fd212424b3c4452fee3f","01f20dac9dc14f0d306e5d1215c5c1c3b4d1805905e60ae92fabac4031eae7da","9ceec2a882368c0160a8a3879aa0efce0fb985751fc23ff6191006030969cfa4","cad5d6451789234434c28dd2d6a8267b0d64c479b1ad267321faa31ba90d570b","d5197053be441d40f4d074185a40d461137c8fa8db9e00cceedf2d9ca6583157","3cd33c37432c2de7bdd9f1d48b3ea4fd03afad4969cfc5ba88d81e6ed03f432c","6db29cf7af1d68c8194d98f1c444cea3b30a2c65deda3428452efaa05717b81d","561ef05d7e369040c28800d878d7e6461af62e459460263e911d508f319c8d5d","a1b60bd2328318dcbec30bdf529dad31a13315ff2df60c8bd71630c58a575b06","a399dd9b73e4bbfbed2ad1c1259d707f5f147f40dc5e3eeb541bf0bf2da42b25","8cc6a35806cd10d448b0f2ab01fe0b6194ca57fdaced2d71781b68e83c55bd88","8f364fec0ef20506aa9cf00b5cd8b620c1c0389687b11a3a32b0b5d4716ad894","5d11703e2c5d4dbe00bbe79f3bc864d178cf8d6ebccc2d1448ea29e93654f029","f4e82c91aac3b61f3ad04f11a44c5b79f724ff8a09281d0afa24a6624633ff25","ed849d616865076f44a41c87f27698f7cdf230290c44bafc71d7c2bc6919b202","7b8b9017156ef8bf3bbe42785fac8956e5c9869f4a494536d7f548a7c1c7d98a","07c34d1f83dfc5746de4229e01f0cb4d388a9f128eab6beadb4ae1621ebb87c6","763bb8df872cbb8783e29e19bd7a1dea0f88f7fd7398343af38be8509a65df82","372b3681eb9618821c0e0e10bcc775b838e45b51912b8998bc5ba035100dc9e5","c286b410193495d067668bcdbd13ea3f3a39001edff02edee248babf2652e563","ba1405da509cc84896a588978efc45400d4f9844ee738d750b59868b1ad1618a","af89ab13b40dd28cd91818fc6329914d2b9663591831f032ff0f0cb4a028d4a5","63007f1618ada5041fb3b47630b64a9987d268bf740dd72334c38b5d23f5239b","3395f90467d2bb9db039a5c22ed6659ca2ff6f0b4f7ee5f223b0f77288f54ea7","20df2907d398e369d49e8906d6e0f096c465501e9ceff9d61293bf0f4e9020f1","302aa8248dab7c689c103162e542224aa7f3b0db46e29d0fb468fac721cf1c41","ea0a3bb69845621165c21e80ebb0d2b28dad22cd9920564516ce8e927a828f79","6a81475a67505af60be3242841c65ce4bf6d0b624d8b3fada646ba459a3eaad8","6834dd6cc060648604278cdb920a9316fa916e9116134b17dfad90e42800ca47","19fba62f1aab90f0110738261ed8bc1da82c89433fc43265f14870d4380d10b8","fbb2df54f4778b4d691bbc7c0a6e1e241dfffaca19f443cc9f230f450458bf89","da98d8109f379be48d459a6821ebd7cc728af62557e1c44f864e04360686af93","ef6e6d838cc600162626a53167046484f38e9a4bab9454e72350bed76c497228","8adf9a02b0c2508f81516b561a6c8080ea2169126f166e39767bcb5389b9cfbc","c8b50ecedc9ff1b0e83c96f0a334d022874199f7c2d00d182ca6672176b0ea9d","b66ede73039e8751e06e3cab843e5a4265c1124a3285c3d854092c37a966b1f5","a4e6ff57edb9f48421f1084bb264878caba6d632f25e32767b68472727bc856b","fa301b2933323df25f8e033bfb6dc16223751b9d01a3ee1c085004bce8f9ad9f","ea9b8f7426fe0e92b4e7d3cdffa9c2d0bf994abddf3a4bb469beda7b45be34e2","135d2c5bb3919efdd655f2a868533582504827b2d1c10188e1bc3ba80ee015cc","25578b2e19ab0fd92fdc00543abc195d65bdfcb0b800243d5c001129c93907b5","1447d46bff9e7c5c77da14515a7456ea5e919ce6e28f5e6746edf99818e4be47","ba3f6f0ee47f46cdce55620aec5726de80e92a930982634afe9918c114c38f0b","6f38045547cdfd54ec19abcd943cace72c775fde739c5e0e1d917cf3030c16b5","929fc31f7523aaa1d19735b77e637af06e58d76007648ec088ecfbec1521cbfe","8510595d2ca2660e6407be65d8bf95f0c53877dbb812e269cdd980fc34de5f78","a6eb23f2a83113ce0ab7203bfda2be0888720f8d694a20abaef83b9f62832061","363dca5004ac5a3d9c2bba12812b97a64461911762f0b8f9320a8856ec53bcad","557b8c7481296f4b7ed362320f3bbb40bb87404edf880c81224f365a8d1e17f3","283ed3d075bf7d3e8793f63b2a52f475ed84d95b7b6351c5d5bcc6c49d4b845b","6544dab49004fecb69a4ef775e9ad2773a6148b1f9bfd9b75508e3afa11f5d35","bd4c741820ec3574b7ed3b782c8d78034d6e4631d11997e701e6b955b86a87c1","e2dd36a524ea5b13de1ed104ede9cea79696588175c1df1940d6a29113a4aee0","a878d4c7237a7af50e96534295fcf723134d70cbb1e9bfd8365266b912aee6ec","a1f708ddf34053065f8f53682123421af299cee37ae110a86ba07851adf940da","395e6fa1fc8f46f827a5f7d3b7dabc836627ae57e41338f93c221b88d4978f15","749effab6d7e72df8d126868c82b8166cdde84d48453e44f65cbad42ad900b06","11705a4aad6e2e724b82ffee6c4fa271d798f0fb68806ace4b1c425c266f8d98","3630ed70bc81eb54659965fcac105c0d420e667b1d0eaf96ab243de4e81ecd68","a6cb689a6c97d8cffb0a4bd649711838d37d2e574eeb8d40402d4a47c645dbd3","3c783303d3de2fac94bbe484a276e4d87a37ae9a7868318a5127c3cb0720a2bd","68f02ba57c531227ef5804dd57f2e940b10c544c96dadd3c0ef958ba4b6fdbc1","d84174912accc090e9b061b36101f8401add7f486ee532f45d298fb8e550dcb8","f0e9c96fe0af329a25c943d4a19fc3f6d2430914f49a83d1666cbaace3e41a7a","e4515754fbef20229cb3479d25ff0fc858f71d494cf1adeda1bcfa7ad02851f7","3780b990e935be00e1d77afaaf9e80ec9b7d79ea4d1f230206c054eb6717c9d5","89d55270e34359d2c38b432aaa551c2998ecaf94d5ec402ef485f9db9f755605","979ae534126f0425943594de327c5816427a27ad57bb3c8ad7ca9ef9c89928f5","357f2ba403c4f78a11b64df1e9ffb56e241924d6cc768a38c05c7dc7cfe70ff0","d68afd5ea85e35c4c4e8995e55f10d6861439ea9dc2666293c0cf4124bf56f32","f085107c3ee4181e6ea03092b1056060b75e965c0d70bc65c3bb6e4678f06f7e","5bfbc7923d86040aeed60f6729ef2f580099d8ba383399f254fc1852c773e7e4","9ab35348dfa05a141dfa8c1e2454a74b3fba256f0726142b958cf16af93b43bf","c2d923941bba3cc811a51262106aeade1beff9d51a0612dae78bedcacaf6c1f2","5dbd990df344a7628e5c585def6171b1acf2a98c55347ac9b9079f7be0acbc3c","0240ed08a314c20bc76b99cf07ed283b0c238dfda466c064cfa9b86dae9e2108","ac2df65093d53e2be927e46c0dd60e087110c5864f937179cf9d56cdce7b2c69","36e9104b426c5a69de8b1e9b55023167e37628be07040a4057f5182ccc29b0ca","c32e702bf03ae9e5234690829a53c95851a70f93ae745fa51ed26e94232c2952","01d29d12c4745439a4258b260a695c277f9ac339c84444ca7fd13aaf37019a08","a775a05e0b9dcc2e65e9837f3e2a198e2d8c5e64cd9167670efaeb6157f77d8c","a9c9cc04b5d804c36666f17778d804741224480f6841bc9d8fa5d530a91a0acf","a2d43b98c12e855908d640f277836191f0e46f53a5e2f82f5f60c4cec6345b16","aa2ec2fce1f7f7023395a9a42124b5eb18ee7d63680624e5b26bbf4c66de3245","e375db5d6e39e62142a53c6c7545179eb2f784ef11dbb6ba4b0dc56b9b23161b","0e311fda2854da7a33915b771f214251600b7dc0018e8989e7d97eaaae689de9","09ac11dc22366cb89d815665ca03e3388fe437b270592bce1c1ca7fe3ddaec5d","7fdb4fef9d733572da36bab73f1dddfb68936673528a301398124457b07493c7","0d41406b8c120d55a3930fbb2c98536ac5feeda78d13dc6a0a785716ee8ba825","1e9e07cdc0218f4a3fccc43ce59199cd45cc5217d7f2f5c2f3cba948905c57df","5f80210f554e793c24ece8a4890b590878a5fcd3b748296a57316252719d4116","6d268309f0e15dd820b2df9806234166554cb4e2fe00d11737adcb4e5489f700","58cf96187feb10cc8ad3bb080871cd30888ef63bc5db131f11458850ef8f6245","9102986ff52326a2016e8cddc1cf3092f0808ac916dcc8dc2d2c7195cd181987","fa82b7b22d9df87323e31e9e2ad75911028f3e544647fd212424b3c4452fee3f","01f20dac9dc14f0d306e5d1215c5c1c3b4d1805905e60ae92fabac4031eae7da","9ceec2a882368c0160a8a3879aa0efce0fb985751fc23ff6191006030969cfa4","cad5d6451789234434c28dd2d6a8267b0d64c479b1ad267321faa31ba90d570b","6516fc98fa10b0cb22c7e332bacea4a7ea80257e113f6cdddd924d03bfde218e","13122c2f3f51d08b986460444b9860d00fd38fee39e862ad6d61bf873525ae0a","88c836190daddad5257c0963159a2cd9ced899f7a3262271583703034caba890","ba7c356f3fa418d4486b3b4e405c01c6d529c274e1e877b98166c46dd7cc0f0d","433b9953d8e0864997b5aaf7cc102f80c98304758244731c3fd0a5d6d645033c","366563a75f042b1a7c61d504a90a8a79810c694e445f038310303f232b6dc89a","f9facf2db5c46c5524f53472e03169f3e13e4f83ee14b98d46248c76146fca14","2945b371f6e04c29e3f96b611ecbf7ed75e172f8aeb603aee5e50510b4bc68a7","1ddbb5149b9d13b2c0441835f41a1b20561339264b05c6902966fc698d7d2863","9c40af09cc72d20c24366ee58bf3783753de9b0b1dbbae79f02a0f80dd3e8fa4","d84450725701131933730844923a4974de4cfe0f6e1fe8d3a74e132e292b44c7","433a8fabb08be4997b99eee7863a2362b52c0aca1fcb54330fbf6567a2c92ab0","a4ae79da4d1bb7fb6196294897f1f78a70c8213d2683f750246deab0527511d2","0bbcaafb46edeaf8a72ba969c070fbe9d98459b7b3a17b8c99f79cab49121032","d713b07550ea416686316c24e88dc6245c0f0c12ef78603cae4c9a9791557fb8","7dbb21add04613e1638c36eacc28b9713f65d62080d3611fc82a546641ae4233","603c6d6d5d61f7100a198de05ab675b21fa85b7e9d4776350f1165f7a9055a5e","e8423fe31351f1ce358798b0e0d64e7b0b3396f9f8ef2cfb5713fa3b7d9020f2","4b54f90cffb36f4bc8175ed414995b6432279d6fe9c9dccb704b8472bd7d88b4","95f8beace3ed894e3e5e3ebaae46c855dfc133e2c63d37663a760c801750f7d4","74d53dbd8fe0d1124911539b879ea9b3461e93ab82bab16497945bf8d73541da","68cc8d6fcc2f270d7108f02f3ebc59480a54615be3e09a47e14527f349e9d53e","3eb11dbf3489064a47a2e1cf9d261b1f100ef0b3b50ffca6c44dd99d6dd81ac1","f7358ae08d4d675cfb7eb7f1a62f70195c3691441e4ceb89669206a895de0417","3762f27827fd30d8372c355e7b8739fb4bfc830c6ce33c241f236416d34924a1",{"version":"48d06f8613c93f16f91d97bcc05c4f295a5d0e7d3a61096966525d2dc0da5c0b","signature":"56d57bdc28871e254ff5b58de3a75e0fa9ab23aba8876b096adb0d401840afbd"},"910a668294831d3c13f52af7c41574e6ce7a0aa5c5b1b74e74741004d5eac010","5ccc3c7f73ef48c223635cd4506f21133560de7abc4c09c623327bb1b54386dc","f30cfcfff28ee8f87563225b47239bb07b9b11edd09dda0ea6499b18cca1a30e","0edb8a97ead1fefd337458449050857e80740e31a3f76cffa656262f4e651a50","6d2d14bb016a70a5ee1afb1cc7718d4369fb645979c725454c688f791ac7218f","8d7622e53b676dfd20828ba435649c217a5d9dee9cdc3713ee808fa2140513da","56558ae167446acf230ea2cc072a835309a37ae63d286b484308afd8c504c2d6","519e39e38704ef342fcee7532bc4a64698a2afb180f7948d9b29d22a2d7fdcfd",{"version":"ea8b54ed1d9eeae99e7f21ce80868866cee8b32346f992d81b923cb9b28abf8b","signature":"0fa23aaf95d2ee607956e442942c8719b5a66825ca0e1bf4e56a8a14090d1f03"},{"version":"f6060717c67ac71b6990f5e5950557c4f92da1c8ee641d2479c0e87f9a2456b7","signature":"aa433f32adad85cb5e53f9a9d07cd983ffe5030d8feeba6003393d40e508892d"},{"version":"4c2eb5b5a39368723d2c0d8e399dae35532bdb5fd5442eaecc5483c2c41204c2","signature":"130500beffb13cd483e51b51596ae44a59a23c8b2d620c34f579d1416510af59"},"cce27d843905b32a33fae001b535c938c52368882c71cda19c78c4d4bb8cb3b2",{"version":"0c59332442a77292daf7138e65902b7ff3e1b9ff2e0235c754f63f1a3d075fa9","signature":"c8a061d17d119a97e377c961f620967d02060c84893f17c25834fe7d26a712f7"},"7d2b7fe4adb76d8253f20e4dbdce044f1cdfab4902ec33c3604585f553883f7d","cabc03949aa3e7981d8643a236d8041c18c49c9b89010202b2a547ef66dc154b",{"version":"190eb48195061f93bf0b0cecc26c3b24b391d0850049be82898ae69f472f27e3","signature":"8262c5b27126522fba11441adf15cf857a28a91e26c2062ac418d40783834a9b"},{"version":"9d0d9f330313f425f67e670454133b941e9c96f58df72d82c2b7758296b37ec3","signature":"2bf38dec579e5636b6c2c2dcec23754eb7c56c80c95b6b2807e709355b72d806"},{"version":"37523ecdb1e5a484bc12b132e8d496d6d8120e90949010a0ae45ca04f5c6b54c","signature":"66d8a86ea8328e01704b4e9095c2cfeb57635bf4efd7be9f6ab9113251f6c1d2"},{"version":"05eb5ae500bda235e1065c25dd59fe738ea662f7752496f2d330ec07a2a0fe68","signature":"cf9deba01f16ca17a255e31aaa5cf927550382392a863f4bba66cd7d89b21976"},{"version":"b15256f68a44cc13e07bbaad38a4227b4eb8e2359271495e8b2d8fd1164a6781","signature":"1a323f9ed8072f628e8c663a77c3becd764a47e5d299db572c59bc0fd6ef88b0"},{"version":"38b263f589769c2da0595b3b098e0d05807a2e6a9bbba2cff3ca2fe695361afa","signature":"f6a794cabca4fa5c3ad3e8d2b18d2dc8fe941539f3780f151ba4650223af894c"},{"version":"19099ba884fa4e31cbbc0892f025e4aff3cd8c3c5acb9ec4132f18aa2772d5a8","signature":"d1ce8d738924731c39ac3ec61da2a501e216997fba7d091714af8193ea2f7ffb"},{"version":"86f0931f606a1ccafd5a80571e21cc0612706705b11cfa86a9dafda05650c07e","signature":"ea0da8be593b96b744cfe6bc711a15688ee11dce3a72ad49b0f0a87f05f6e3c6"},"91764b36fe5e1c5d688f5f90eeea47703a059ab9a81bf80f7bbc9b04507b7bd3","115327b8e1f68c03004d841b83e332ed16b8f48af59ac00f38313887d7ec2920",{"version":"8819ab7f4cff4eb1b3b4f856cb7c010013cb4e47ac9f117caf7be340de2ea9fe","signature":"a076e8d62a9ab205f4ccf90952ef33e74dc9277b55aaf0edf4704dbff1f84d2a"},"b3221b2c362171434c0452fd73c27c8a40d42e7d854f1fc85a493c3ed157bbfd",{"version":"6ada24308c79f7dd8d84c0b9ec1026dd391e38498bb847cdab17e6f153164088","signature":"cf062002e4a259badafeeeaf1e9caf86d1c84efc88df1a8e89f584b73acd257f"},{"version":"21962a9cae155fce7af544fbeca27e707b12e460bc26b9c18045fe3666d66f88","signature":"74f14e5c916b006899c580ca6da8befd6a0bfb72d3b923f474c10eda4e561d55"},{"version":"5683a05567a3b0e165e5e19cf790fecd66f269719740e5a0223d5273a0baa08c","signature":"e64401ec776d3a3fc614c5046551a540d6d343ed039bd7780135ab21917d4bd6"},{"version":"9db7b14d3167fe4bfac00f13e3c7dc48f85955b455a3f4a638285cd04e5c5a66","signature":"b1b4fc21fb4c0873a3467a12584e4ffd658a4e7dca77ac81b0ef6f86e26699bd"},{"version":"eac2b71ce050ca33ef3b1d82ac9aaa1d1a0ddf9fd90693d6da463fbbc96982a3","signature":"7211b7d13a6763a8418e8d6c3820ea91ef7e0e21ff56cb75cac4bcc863da1411"},{"version":"90ebf5865e27d8966ef44b073e6e83b0ddd45058bab1d58b1e4b5a47d36396c4","affectsGlobalScope":true}],"root":[322,323,[331,335],[338,345],348,[350,354]],"options":{"alwaysStrict":true,"declaration":true,"esModuleInterop":true,"module":7,"noFallthroughCasesInSwitch":true,"noImplicitAny":true,"noImplicitReturns":true,"noImplicitThis":true,"noUnusedLocals":true,"noUnusedParameters":true,"outDir":"./","rootDir":"../src","skipLibCheck":true,"sourceMap":true,"strict":true,"strictFunctionTypes":true,"strictNullChecks":true,"strictPropertyInitialization":true,"target":9,"tsBuildInfoFile":"./.tsbuildinfo"},"fileIdsList":[[192,195,204,205,206,208,216,217,218,219,234],[204,205],[60,203],[192,204,205,207],[209,211],[207,209,215],[213],[192,205,208,209,210,211,212,214],[205],[60,192],[205,208],[77,192,204],[203],[196],[60,196],[196,197,198,199,200,201,202],[192,234],[77],[72,77,192,228],[220,229,230,231,232,233],[192],[72,77,192],[60,67,78,79],[67,77,79],[60,67,77,78,192],[66,80,192],[152,190],[61,67,72,77,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,96,97,98,191],[60],[79],[80,82],[61,64,66],[67,77],[67,80,192],[60,67,79,82,95],[60,67],[60,78,79,192],[67,79],[72,77,79,82,89,192],[221,222,223,224,225,226,227],[192,223],[192,221],[192,222],[77,192,256],[77,192,234,237],[192,263],[192,262],[192,261,263],[260],[71,72],[71],[69,70,73],[68,73,75,76],[73,75,77],[74,77],[318],[99],[139],[140,145,174],[141,146,152,153,160,171,182],[141,142,152,160],[143,183],[144,145,153,161],[145,171,179],[146,148,152,160],[139,147],[148,149],[152],[150,152],[139,152],[152,153,154,171,182],[152,153,154,167,171,174],[137,140,187],[148,152,155,160,171,182],[152,153,155,156,160,171,179,182],[155,157,171,179,182],[99,100,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189],[152,158],[159,182,187],[148,152,160,171],[161],[162],[139,163],[160,161,164,181,187],[165],[166],[152,167,168],[167,169,183,185],[140,152,171,172,173,174],[140,171,173],[171,172],[174],[175],[99,171],[152,177,178],[177,178],[145,160,171,179],[180],[160,181],[140,155,166,182],[145,183],[171,184],[159,185],[186],[140,145,152,154,163,171,182,185,187],[171,188],[336],[253,255],[252],[254],[60,78,326,328],[60,78,328],[60,325,327],[78],[60,78],[77,192,234],[73,192,234,256],[77,192,228,234],[72,73,77,192,228,234,264],[77,192,228,234,258,259,265],[73,192,239,256,257,266,267,268],[62],[241,242,248,249],[65,66],[65],[63],[240],[64],[64,244],[66,243,244,245,246,247],[62,63,64,65,240],[62,63,64],[346],[297],[290],[60,290],[290,291,292,293,294,295,296],[60,297],[251],[248,250],[110,114,182],[110,171,182],[105],[107,110,179,182],[160,179],[190],[105,190],[107,110,160,182],[102,103,106,109,140,152,171,182],[102,108],[129,130],[106,110,140,174,182,190],[140,190],[129,140,190],[104,105,190],[110],[104,105,106,107,108,109,110,111,112,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,130,131,132,133,134,135,136],[110,117,118],[108,110,118,119],[109],[102,105,110],[110,114,118,119],[114],[108,110,113,182],[102,107,110,117],[140,171],[102,107,110,117,124],[105,110,129,140,187,190],[322,323,334,339,342,345,348,350,351,352,353],[192,289,321,330,331,334],[192,289,321,350],[306,337],[60,192,234,289,306,321,324,328,329,335,338],[192,289],[289],[192,289,321,322,349],[60,192,289,306,321,324,328,329,335,340,341],[60,306,337],[322],[289,306,321],[60,192,289,306,321,324,328,329,335],[60,192,289,321,324,328,329,335,343,344],[60,289,306,337],[333],[192,289,321,332],[289,306],[192,289,321,347],[192,273],[193],[77,192,193],[192,272,273,274,275],[272],[193,194,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288],[192,235,236,238,269,270],[272,277],[273],[192,193,272,273],[272,274],[192,194,234,272,273],[192,193,271,273,274],[272,273,274],[205,235,273,275,277],[77,192,271,272,276,278,280,281,282,283],[298,299,300,301,302,303,304,305],[77,307,308,309,310,311,313,314,315,316],[289,312],[317,320],[319],[192,289,321,334],[306],[192,289,306,335],[60,306],[192,289,335],[60,289,306]],"referencedMap":[[235,1],[206,2],[204,3],[208,4],[212,5],[216,6],[214,7],[215,8],[211,9],[217,10],[218,11],[205,12],[196,13],[199,14],[200,14],[197,15],[198,14],[203,16],[201,3],[202,13],[236,17],[220,18],[229,19],[234,20],[230,21],[231,10],[232,21],[233,22],[91,23],[92,24],[79,25],[81,26],[191,27],[192,28],[61,29],[83,30],[93,31],[67,32],[80,33],[84,34],[85,33],[96,35],[97,36],[87,30],[89,37],[88,38],[90,39],[224,21],[228,40],[223,21],[221,21],[222,21],[227,41],[225,42],[226,43],[268,44],[238,45],[264,46],[263,47],[262,48],[261,49],[73,50],[70,51],[69,51],[71,52],[76,18],[77,53],[68,18],[74,54],[75,55],[319,56],[99,57],[100,57],[139,58],[140,59],[141,60],[142,61],[143,62],[144,63],[145,64],[146,65],[147,66],[148,67],[149,67],[151,68],[150,69],[152,70],[153,71],[154,72],[138,73],[155,74],[156,75],[157,76],[190,77],[158,78],[159,79],[160,80],[161,81],[162,82],[163,83],[164,84],[165,85],[166,86],[167,87],[168,87],[169,88],[171,89],[173,90],[172,91],[174,92],[175,93],[176,94],[177,95],[178,96],[179,97],[180,98],[181,99],[182,100],[183,101],[184,102],[185,103],[186,104],[187,105],[188,106],[337,107],[256,108],[253,109],[255,110],[327,111],[325,112],[328,113],[329,114],[326,115],[239,116],[257,117],[258,17],[259,118],[265,119],[266,120],[269,121],[267,116],[249,122],[250,123],[63,124],[66,125],[240,126],[241,127],[242,127],[244,128],[245,129],[248,130],[247,131],[65,132],[347,133],[290,134],[293,135],[294,135],[291,136],[292,135],[297,137],[295,138],[296,134],[252,139],[251,140],[117,141],[126,142],[116,141],[135,143],[108,144],[107,145],[134,146],[128,147],[133,148],[110,149],[109,150],[131,151],[105,152],[104,153],[132,154],[106,155],[111,156],[115,156],[137,157],[136,156],[119,158],[120,159],[122,160],[118,161],[121,162],[129,146],[113,163],[114,164],[123,165],[103,166],[125,167],[124,156],[130,168],[354,169],[335,170],[351,171],[338,172],[339,173],[331,174],[352,175],[350,176],[342,177],[340,178],[341,175],[323,179],[322,180],[353,181],[345,182],[344,183],[334,184],[333,185],[332,21],[343,186],[348,187],[282,188],[287,189],[286,21],[194,190],[276,191],[283,192],[289,193],[271,194],[278,195],[274,196],[270,197],[273,198],[279,199],[272,200],[275,201],[280,202],[277,198],[281,198],[284,203],[299,138],[301,138],[302,138],[298,138],[305,138],[304,138],[303,138],[300,138],[306,204],[317,205],[311,175],[315,175],[313,206],[312,175],[310,175],[321,207],[330,21],[320,208]],"exportedModulesMap":[[235,1],[206,2],[204,3],[208,4],[212,5],[216,6],[214,7],[215,8],[211,9],[217,10],[218,11],[205,12],[196,13],[199,14],[200,14],[197,15],[198,14],[203,16],[201,3],[202,13],[236,17],[220,18],[229,19],[234,20],[230,21],[231,10],[232,21],[233,22],[91,23],[92,24],[79,25],[81,26],[191,27],[192,28],[61,29],[83,30],[93,31],[67,32],[80,33],[84,34],[85,33],[96,35],[97,36],[87,30],[89,37],[88,38],[90,39],[224,21],[228,40],[223,21],[221,21],[222,21],[227,41],[225,42],[226,43],[268,44],[238,45],[264,46],[263,47],[262,48],[261,49],[73,50],[70,51],[69,51],[71,52],[76,18],[77,53],[68,18],[74,54],[75,55],[319,56],[99,57],[100,57],[139,58],[140,59],[141,60],[142,61],[143,62],[144,63],[145,64],[146,65],[147,66],[148,67],[149,67],[151,68],[150,69],[152,70],[153,71],[154,72],[138,73],[155,74],[156,75],[157,76],[190,77],[158,78],[159,79],[160,80],[161,81],[162,82],[163,83],[164,84],[165,85],[166,86],[167,87],[168,87],[169,88],[171,89],[173,90],[172,91],[174,92],[175,93],[176,94],[177,95],[178,96],[179,97],[180,98],[181,99],[182,100],[183,101],[184,102],[185,103],[186,104],[187,105],[188,106],[337,107],[256,108],[253,109],[255,110],[327,111],[325,112],[328,113],[329,114],[326,115],[239,116],[257,117],[258,17],[259,118],[265,119],[266,120],[269,121],[267,116],[249,122],[250,123],[63,124],[66,125],[240,126],[241,127],[242,127],[244,128],[245,129],[248,130],[247,131],[65,132],[347,133],[290,134],[293,135],[294,135],[291,136],[292,135],[297,137],[295,138],[296,134],[252,139],[251,140],[117,141],[126,142],[116,141],[135,143],[108,144],[107,145],[134,146],[128,147],[133,148],[110,149],[109,150],[131,151],[105,152],[104,153],[132,154],[106,155],[111,156],[115,156],[137,157],[136,156],[119,158],[120,159],[122,160],[118,161],[121,162],[129,146],[113,163],[114,164],[123,165],[103,166],[125,167],[124,156],[130,168],[354,169],[335,209],[351,174],[338,210],[339,211],[331,21],[352,175],[350,174],[342,211],[340,212],[341,175],[323,179],[322,186],[353,175],[345,213],[344,214],[334,184],[333,174],[332,21],[343,186],[348,175],[282,188],[287,189],[286,21],[194,190],[276,191],[283,192],[289,193],[271,194],[278,195],[274,196],[270,197],[273,198],[279,199],[272,200],[275,201],[280,202],[277,198],[281,198],[284,203],[299,138],[301,138],[302,138],[298,138],[305,138],[304,138],[303,138],[300,138],[306,204],[317,205],[311,175],[315,175],[313,206],[312,175],[310,175],[321,207],[330,21],[320,208]],"semanticDiagnosticsPerFile":[219,235,206,195,204,208,212,216,214,209,207,215,211,217,218,205,210,196,199,200,197,198,203,201,202,236,220,229,234,230,231,232,233,91,92,79,81,98,82,191,192,61,83,93,67,80,84,85,94,96,97,86,87,89,88,90,224,228,223,221,222,227,225,226,268,237,238,264,263,262,261,73,70,69,71,76,77,68,74,75,319,355,318,99,100,139,140,141,142,143,144,145,146,147,148,149,151,150,152,153,154,138,189,155,156,157,190,158,159,160,161,162,163,164,165,166,167,168,169,170,171,173,172,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,337,336,101,213,256,253,254,255,324,327,325,328,329,95,326,78,239,257,258,259,265,266,269,267,249,62,250,63,243,66,240,241,242,244,245,64,248,247,65,246,260,347,346,72,290,293,294,291,292,297,295,296,58,59,10,12,11,2,13,14,15,16,17,18,19,20,3,21,4,22,26,23,24,25,27,28,29,5,30,31,32,33,6,37,34,35,36,38,7,39,44,45,40,41,42,43,8,49,46,47,48,50,9,51,52,53,56,54,55,1,57,60,252,251,117,126,116,135,108,107,134,128,133,110,109,131,105,104,132,106,111,112,115,102,137,136,119,120,122,118,121,129,113,114,123,103,125,124,127,130,354,335,351,338,339,331,352,350,342,340,341,323,322,353,345,344,334,333,332,343,348,282,287,286,194,276,283,289,285,271,278,288,274,270,273,279,272,275,280,277,193,281,284,299,301,302,298,305,304,303,300,306,349,316,309,317,307,311,314,308,315,313,312,310,321,330,320]},"version":"5.4.5"}
1
+ {"program":{"fileNames":["../../../node_modules/typescript/lib/lib.es5.d.ts","../../../node_modules/typescript/lib/lib.es2015.d.ts","../../../node_modules/typescript/lib/lib.es2016.d.ts","../../../node_modules/typescript/lib/lib.es2017.d.ts","../../../node_modules/typescript/lib/lib.es2018.d.ts","../../../node_modules/typescript/lib/lib.es2019.d.ts","../../../node_modules/typescript/lib/lib.es2020.d.ts","../../../node_modules/typescript/lib/lib.es2021.d.ts","../../../node_modules/typescript/lib/lib.es2022.d.ts","../../../node_modules/typescript/lib/lib.dom.d.ts","../../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../node_modules/typescript/lib/lib.es2016.intl.d.ts","../../../node_modules/typescript/lib/lib.es2017.date.d.ts","../../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../node_modules/typescript/lib/lib.es2020.date.d.ts","../../../node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.es2020.string.d.ts","../../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../node_modules/typescript/lib/lib.es2020.number.d.ts","../../../node_modules/typescript/lib/lib.es2021.promise.d.ts","../../../node_modules/typescript/lib/lib.es2021.string.d.ts","../../../node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../../node_modules/typescript/lib/lib.es2021.intl.d.ts","../../../node_modules/typescript/lib/lib.es2022.array.d.ts","../../../node_modules/typescript/lib/lib.es2022.error.d.ts","../../../node_modules/typescript/lib/lib.es2022.intl.d.ts","../../../node_modules/typescript/lib/lib.es2022.object.d.ts","../../../node_modules/typescript/lib/lib.es2022.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.es2022.string.d.ts","../../../node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../../node_modules/typescript/lib/lib.esnext.intl.d.ts","../../../node_modules/typescript/lib/lib.decorators.d.ts","../../../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../../node_modules/uint8arraylist/dist/src/index.d.ts","../../../node_modules/@libp2p/interface/dist/src/keys/index.d.ts","../../../node_modules/multiformats/dist/src/bases/interface.d.ts","../../../node_modules/multiformats/dist/src/block/interface.d.ts","../../../node_modules/multiformats/dist/src/hashes/interface.d.ts","../../../node_modules/multiformats/dist/src/link/interface.d.ts","../../../node_modules/multiformats/dist/src/cid.d.ts","../../../node_modules/@libp2p/interface/dist/src/peer-id/index.d.ts","../../../node_modules/@multiformats/multiaddr/dist/src/protocols-table.d.ts","../../../node_modules/@multiformats/dns/dist/src/resolvers/dns-over-https.d.ts","../../../node_modules/@multiformats/dns/dist/src/resolvers/dns-json-over-https.d.ts","../../../node_modules/@multiformats/dns/dist/src/resolvers/index.d.ts","../../../node_modules/progress-events/dist/src/index.d.ts","../../../node_modules/@multiformats/dns/dist/src/index.d.ts","../../../node_modules/@multiformats/multiaddr/dist/src/resolvers/dnsaddr.d.ts","../../../node_modules/@multiformats/multiaddr/dist/src/resolvers/index.d.ts","../../../node_modules/@multiformats/multiaddr/dist/src/filter/multiaddr-filter.d.ts","../../../node_modules/@multiformats/multiaddr/dist/src/index.d.ts","../../../node_modules/it-stream-types/dist/src/index.d.ts","../../../node_modules/@libp2p/interface/dist/src/connection/index.d.ts","../../../node_modules/@libp2p/interface/dist/src/peer-info/index.d.ts","../../../node_modules/@libp2p/interface/dist/src/content-routing/index.d.ts","../../../node_modules/@libp2p/interface/dist/src/event-target.d.ts","../../../node_modules/@libp2p/interface/dist/src/metrics/index.d.ts","../../../node_modules/@libp2p/interface/dist/src/peer-routing/index.d.ts","../../../node_modules/@libp2p/interface/dist/src/peer-store/index.d.ts","../../../node_modules/@libp2p/interface/dist/src/startable.d.ts","../../../node_modules/@libp2p/interface/dist/src/stream-handler/index.d.ts","../../../node_modules/@libp2p/interface/dist/src/topology/index.d.ts","../../../node_modules/@libp2p/interface/dist/src/stream-muxer/index.d.ts","../../../node_modules/@libp2p/interface/dist/src/transport/index.d.ts","../../../node_modules/@libp2p/interface/dist/src/connection-encrypter/index.d.ts","../../../node_modules/@libp2p/interface/dist/src/connection-gater/index.d.ts","../../../node_modules/@libp2p/interface/dist/src/peer-discovery/index.d.ts","../../../node_modules/@libp2p/interface/dist/src/peer-store/tags.d.ts","../../../node_modules/it-pushable/dist/src/index.d.ts","../../../node_modules/@libp2p/interface/dist/src/pubsub/index.d.ts","../../../node_modules/@libp2p/interface/dist/src/record/index.d.ts","../../../node_modules/@libp2p/interface/dist/src/errors.d.ts","../../../node_modules/@types/node/assert.d.ts","../../../node_modules/@types/node/assert/strict.d.ts","../../../node_modules/buffer/index.d.ts","../../../node_modules/undici-types/header.d.ts","../../../node_modules/undici-types/readable.d.ts","../../../node_modules/undici-types/file.d.ts","../../../node_modules/undici-types/fetch.d.ts","../../../node_modules/undici-types/formdata.d.ts","../../../node_modules/undici-types/connector.d.ts","../../../node_modules/undici-types/client.d.ts","../../../node_modules/undici-types/errors.d.ts","../../../node_modules/undici-types/dispatcher.d.ts","../../../node_modules/undici-types/global-dispatcher.d.ts","../../../node_modules/undici-types/global-origin.d.ts","../../../node_modules/undici-types/pool-stats.d.ts","../../../node_modules/undici-types/pool.d.ts","../../../node_modules/undici-types/handlers.d.ts","../../../node_modules/undici-types/balanced-pool.d.ts","../../../node_modules/undici-types/agent.d.ts","../../../node_modules/undici-types/mock-interceptor.d.ts","../../../node_modules/undici-types/mock-agent.d.ts","../../../node_modules/undici-types/mock-client.d.ts","../../../node_modules/undici-types/mock-pool.d.ts","../../../node_modules/undici-types/mock-errors.d.ts","../../../node_modules/undici-types/proxy-agent.d.ts","../../../node_modules/undici-types/retry-handler.d.ts","../../../node_modules/undici-types/retry-agent.d.ts","../../../node_modules/undici-types/api.d.ts","../../../node_modules/undici-types/util.d.ts","../../../node_modules/undici-types/cookies.d.ts","../../../node_modules/undici-types/patch.d.ts","../../../node_modules/undici-types/websocket.d.ts","../../../node_modules/undici-types/eventsource.d.ts","../../../node_modules/undici-types/filereader.d.ts","../../../node_modules/undici-types/diagnostics-channel.d.ts","../../../node_modules/undici-types/content-type.d.ts","../../../node_modules/undici-types/cache.d.ts","../../../node_modules/undici-types/interceptors.d.ts","../../../node_modules/undici-types/index.d.ts","../../../node_modules/@types/node/globals.d.ts","../../../node_modules/@types/node/async_hooks.d.ts","../../../node_modules/@types/node/buffer.d.ts","../../../node_modules/@types/node/child_process.d.ts","../../../node_modules/@types/node/cluster.d.ts","../../../node_modules/@types/node/console.d.ts","../../../node_modules/@types/node/constants.d.ts","../../../node_modules/@types/node/crypto.d.ts","../../../node_modules/@types/node/dgram.d.ts","../../../node_modules/@types/node/diagnostics_channel.d.ts","../../../node_modules/@types/node/dns.d.ts","../../../node_modules/@types/node/dns/promises.d.ts","../../../node_modules/@types/node/domain.d.ts","../../../node_modules/@types/node/dom-events.d.ts","../../../node_modules/@types/node/events.d.ts","../../../node_modules/@types/node/fs.d.ts","../../../node_modules/@types/node/fs/promises.d.ts","../../../node_modules/@types/node/http.d.ts","../../../node_modules/@types/node/http2.d.ts","../../../node_modules/@types/node/https.d.ts","../../../node_modules/@types/node/inspector.d.ts","../../../node_modules/@types/node/module.d.ts","../../../node_modules/@types/node/net.d.ts","../../../node_modules/@types/node/os.d.ts","../../../node_modules/@types/node/path.d.ts","../../../node_modules/@types/node/perf_hooks.d.ts","../../../node_modules/@types/node/process.d.ts","../../../node_modules/@types/node/punycode.d.ts","../../../node_modules/@types/node/querystring.d.ts","../../../node_modules/@types/node/readline.d.ts","../../../node_modules/@types/node/readline/promises.d.ts","../../../node_modules/@types/node/repl.d.ts","../../../node_modules/@types/node/sea.d.ts","../../../node_modules/@types/node/stream.d.ts","../../../node_modules/@types/node/stream/promises.d.ts","../../../node_modules/@types/node/stream/consumers.d.ts","../../../node_modules/@types/node/stream/web.d.ts","../../../node_modules/@types/node/string_decoder.d.ts","../../../node_modules/@types/node/test.d.ts","../../../node_modules/@types/node/timers.d.ts","../../../node_modules/@types/node/timers/promises.d.ts","../../../node_modules/@types/node/tls.d.ts","../../../node_modules/@types/node/trace_events.d.ts","../../../node_modules/@types/node/tty.d.ts","../../../node_modules/@types/node/url.d.ts","../../../node_modules/@types/node/util.d.ts","../../../node_modules/@types/node/v8.d.ts","../../../node_modules/@types/node/vm.d.ts","../../../node_modules/@types/node/wasi.d.ts","../../../node_modules/@types/node/worker_threads.d.ts","../../../node_modules/@types/node/zlib.d.ts","../../../node_modules/@types/node/globals.global.d.ts","../../../node_modules/@types/node/index.d.ts","../../../node_modules/@libp2p/interface/dist/src/events.d.ts","../../../node_modules/@libp2p/interface/dist/src/index.d.ts","../../interfaces/dist/sharding.d.ts","../../interfaces/dist/enr.d.ts","../../../node_modules/@chainsafe/libp2p-gossipsub/dist/src/message/decodeRpc.d.ts","../../../node_modules/@chainsafe/libp2p-gossipsub/node_modules/protons-runtime/dist/src/codec.d.ts","../../../node_modules/@chainsafe/libp2p-gossipsub/node_modules/protons-runtime/dist/src/decode.d.ts","../../../node_modules/@chainsafe/libp2p-gossipsub/node_modules/protons-runtime/dist/src/encode.d.ts","../../../node_modules/@chainsafe/libp2p-gossipsub/node_modules/protons-runtime/dist/src/codecs/enum.d.ts","../../../node_modules/@chainsafe/libp2p-gossipsub/node_modules/protons-runtime/dist/src/codecs/message.d.ts","../../../node_modules/@chainsafe/libp2p-gossipsub/node_modules/protons-runtime/dist/src/utils/reader.d.ts","../../../node_modules/@chainsafe/libp2p-gossipsub/node_modules/protons-runtime/dist/src/utils/writer.d.ts","../../../node_modules/@chainsafe/libp2p-gossipsub/node_modules/protons-runtime/dist/src/index.d.ts","../../../node_modules/@chainsafe/libp2p-gossipsub/dist/src/message/rpc.d.ts","../../../node_modules/@chainsafe/libp2p-gossipsub/dist/src/types.d.ts","../../../node_modules/@chainsafe/libp2p-gossipsub/dist/src/message-cache.d.ts","../../../node_modules/@chainsafe/libp2p-gossipsub/dist/src/score/peer-score-thresholds.d.ts","../../../node_modules/@chainsafe/libp2p-gossipsub/dist/src/metrics.d.ts","../../../node_modules/@chainsafe/libp2p-gossipsub/dist/src/score/peer-score-params.d.ts","../../../node_modules/@chainsafe/libp2p-gossipsub/dist/src/utils/set.d.ts","../../../node_modules/@chainsafe/libp2p-gossipsub/dist/src/score/peer-stats.d.ts","../../../node_modules/@chainsafe/libp2p-gossipsub/dist/src/score/compute-score.d.ts","../../../node_modules/denque/index.d.ts","../../../node_modules/@chainsafe/libp2p-gossipsub/dist/src/score/message-deliveries.d.ts","../../../node_modules/@chainsafe/libp2p-gossipsub/dist/src/score/peer-score.d.ts","../../../node_modules/@chainsafe/libp2p-gossipsub/dist/src/score/index.d.ts","../../../node_modules/@chainsafe/libp2p-gossipsub/dist/src/stream.d.ts","../../../node_modules/@chainsafe/libp2p-gossipsub/dist/src/tracer.d.ts","../../../node_modules/@chainsafe/libp2p-gossipsub/dist/src/config.d.ts","../../../node_modules/@libp2p/interface-internal/dist/src/address-manager/index.d.ts","../../../node_modules/@libp2p/peer-collections/dist/src/map.d.ts","../../../node_modules/@libp2p/peer-collections/dist/src/set.d.ts","../../../node_modules/@libp2p/peer-collections/dist/src/list.d.ts","../../../node_modules/@libp2p/peer-collections/dist/src/filter.d.ts","../../../node_modules/@libp2p/peer-collections/dist/src/tracked-map.d.ts","../../../node_modules/@libp2p/peer-collections/dist/src/tracked-set.d.ts","../../../node_modules/@libp2p/peer-collections/dist/src/tracked-list.d.ts","../../../node_modules/@libp2p/peer-collections/dist/src/index.d.ts","../../../node_modules/@libp2p/interface-internal/dist/src/connection-manager/index.d.ts","../../../node_modules/@libp2p/interface-internal/dist/src/random-walk/index.d.ts","../../../node_modules/@libp2p/interface-internal/dist/src/record/index.d.ts","../../../node_modules/@libp2p/interface-internal/dist/src/registrar/index.d.ts","../../../node_modules/@libp2p/interface-internal/dist/src/transport-manager/index.d.ts","../../../node_modules/@libp2p/interface-internal/dist/src/index.d.ts","../../../node_modules/@chainsafe/libp2p-gossipsub/dist/src/index.d.ts","../../../node_modules/@libp2p/identify/dist/src/index.d.ts","../../../node_modules/@libp2p/ping/dist/src/constants.d.ts","../../../node_modules/@libp2p/ping/dist/src/index.d.ts","../../../node_modules/libp2p/dist/src/address-manager/index.d.ts","../../../node_modules/multiformats/dist/src/codecs/interface.d.ts","../../../node_modules/multiformats/dist/src/codecs/json.d.ts","../../../node_modules/multiformats/dist/src/codecs/raw.d.ts","../../../node_modules/multiformats/dist/src/bytes.d.ts","../../../node_modules/multiformats/dist/src/hashes/digest.d.ts","../../../node_modules/multiformats/dist/src/hashes/hasher.d.ts","../../../node_modules/multiformats/dist/src/varint.d.ts","../../../node_modules/multiformats/dist/src/interface.d.ts","../../../node_modules/multiformats/dist/src/index.d.ts","../../../node_modules/multiformats/dist/src/bases/base.d.ts","../../../node_modules/multiformats/dist/src/basics.d.ts","../../../node_modules/uint8arrays/dist/src/util/bases.d.ts","../../../node_modules/uint8arrays/dist/src/to-string.d.ts","../../../node_modules/interface-datastore/dist/src/key.d.ts","../../../node_modules/interface-store/dist/src/errors.d.ts","../../../node_modules/interface-store/dist/src/index.d.ts","../../../node_modules/interface-datastore/dist/src/index.d.ts","../../../node_modules/libp2p/dist/src/components.d.ts","../../../node_modules/libp2p/dist/src/connection-manager/auto-dial.d.ts","../../../node_modules/libp2p/dist/src/connection-manager/connection-pruner.d.ts","../../../node_modules/p-defer/index.d.ts","../../../node_modules/@libp2p/utils/dist/src/queue/recipient.d.ts","../../../node_modules/@libp2p/utils/dist/src/queue/job.d.ts","../../../node_modules/@libp2p/utils/dist/src/queue/index.d.ts","../../../node_modules/@libp2p/utils/dist/src/priority-queue.d.ts","../../../node_modules/libp2p/dist/src/connection-manager/dial-queue.d.ts","../../../node_modules/libp2p/dist/src/connection-manager/index.d.ts","../../../node_modules/libp2p/dist/src/transport-manager.d.ts","../../../node_modules/@libp2p/peer-store/dist/src/index.d.ts","../../../node_modules/libp2p/dist/src/index.d.ts","../../interfaces/dist/metadata.d.ts","../../interfaces/dist/libp2p.d.ts","../../interfaces/dist/protocols.d.ts","../../interfaces/dist/misc.d.ts","../../interfaces/dist/message.d.ts","../../interfaces/dist/receiver.d.ts","../../interfaces/dist/filter.d.ts","../../interfaces/dist/sender.d.ts","../../interfaces/dist/light_push.d.ts","../../interfaces/dist/peer_exchange.d.ts","../../interfaces/dist/relay.d.ts","../../interfaces/dist/store.d.ts","../../interfaces/dist/connection_manager.d.ts","../../interfaces/dist/health_manager.d.ts","../../interfaces/dist/waku.d.ts","../../interfaces/dist/keep_alive_manager.d.ts","../../interfaces/dist/dns_discovery.d.ts","../../interfaces/dist/constants.d.ts","../../interfaces/dist/local_storage.d.ts","../../interfaces/dist/index.d.ts","../../../node_modules/protons-runtime/dist/src/codec.d.ts","../../../node_modules/protons-runtime/dist/src/decode.d.ts","../../../node_modules/protons-runtime/dist/src/encode.d.ts","../../../node_modules/protons-runtime/dist/src/codecs/enum.d.ts","../../../node_modules/protons-runtime/dist/src/codecs/message.d.ts","../../../node_modules/protons-runtime/dist/src/utils/reader.d.ts","../../../node_modules/protons-runtime/dist/src/utils/writer.d.ts","../../../node_modules/protons-runtime/dist/src/index.d.ts","../../proto/dist/generated/message.d.ts","../../proto/dist/generated/filter.d.ts","../../proto/dist/generated/topic_only_message.d.ts","../../proto/dist/generated/filter_v2.d.ts","../../proto/dist/generated/light_push.d.ts","../../proto/dist/generated/store_v3.d.ts","../../proto/dist/generated/peer_exchange.d.ts","../../proto/dist/generated/metadata.d.ts","../../proto/dist/index.d.ts","../../utils/dist/common/is_defined.d.ts","../../utils/dist/common/random_subset.d.ts","../../utils/dist/common/group_by.d.ts","../../utils/dist/common/to_async_iterator.d.ts","../../utils/dist/common/is_size_valid.d.ts","../../utils/dist/common/sharding/type_guards.d.ts","../../utils/dist/common/sharding/index.d.ts","../../utils/dist/common/push_or_init_map.d.ts","../../utils/dist/common/relay_shard_codec.d.ts","../../utils/dist/common/delay.d.ts","../../utils/dist/common/index.d.ts","../../../node_modules/@types/ms/index.d.ts","../../../node_modules/@types/debug/index.d.ts","../../utils/dist/logger/index.d.ts","../../utils/dist/index.d.ts","../src/lib/message/version_0.ts","../src/lib/message/index.ts","../../../node_modules/it-all/dist/src/index.d.ts","../../../node_modules/it-length-prefixed/dist/src/encode.d.ts","../../../node_modules/it-reader/dist/src/index.d.ts","../../../node_modules/it-length-prefixed/dist/src/decode.d.ts","../../../node_modules/it-length-prefixed/dist/src/index.d.ts","../../../node_modules/it-pipe/dist/src/index.d.ts","../../utils/dist/libp2p/index.d.ts","../src/lib/filterPeers.ts","../src/lib/stream_manager/utils.ts","../src/lib/stream_manager/stream_manager.ts","../src/lib/stream_manager/index.ts","../src/lib/base_protocol.ts","../../../node_modules/@types/uuid/index.d.ts","../../../node_modules/@types/uuid/index.d.mts","../src/lib/filter/filter_rpc.ts","../src/lib/filter/index.ts","../src/lib/light_push/push_rpc.ts","../src/lib/light_push/utils.ts","../src/lib/light_push/index.ts","../src/lib/to_proto_message.ts","../src/lib/store/rpc.ts","../src/lib/store/index.ts","../../../node_modules/p-timeout/index.d.ts","../../../node_modules/p-event/index.d.ts","../src/lib/wait_for_remote_peer.ts","../../utils/dist/bytes/index.d.ts","../src/lib/keep_alive_manager.ts","../src/lib/connection_manager.ts","../src/lib/health_manager.ts","../src/lib/metadata/index.ts","../src/index.ts","../../../node_modules/@types/mocha/index.d.ts"],"fileInfos":[{"version":"824cb491a40f7e8fdeb56f1df5edf91b23f3e3ee6b4cde84d4a99be32338faee","affectsGlobalScope":true},"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","9a68c0c07ae2fa71b44384a839b7b8d81662a236d4b9ac30916718f7510b1b2d","5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","5514e54f17d6d74ecefedc73c504eadffdeda79c7ea205cf9febead32d45c4bc",{"version":"87d693a4920d794a73384b3c779cadcb8548ac6945aa7a925832fe2418c9527a","affectsGlobalScope":true},{"version":"138fb588d26538783b78d1e3b2c2cc12d55840b97bf5e08bca7f7a174fbe2f17","affectsGlobalScope":true},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true},{"version":"4443e68b35f3332f753eacc66a04ac1d2053b8b035a0e0ac1d455392b5e243b3","affectsGlobalScope":true},{"version":"bc47685641087c015972a3f072480889f0d6c65515f12bd85222f49a98952ed7","affectsGlobalScope":true},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true},{"version":"93495ff27b8746f55d19fcbcdbaccc99fd95f19d057aed1bd2c0cafe1335fbf0","affectsGlobalScope":true},{"version":"6fc23bb8c3965964be8c597310a2878b53a0306edb71d4b5a4dfe760186bcc01","affectsGlobalScope":true},{"version":"ea011c76963fb15ef1cdd7ce6a6808b46322c527de2077b6cfdf23ae6f5f9ec7","affectsGlobalScope":true},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true},{"version":"bb42a7797d996412ecdc5b2787720de477103a0b2e53058569069a0e2bae6c7e","affectsGlobalScope":true},{"version":"4738f2420687fd85629c9efb470793bb753709c2379e5f85bc1815d875ceadcd","affectsGlobalScope":true},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true},{"version":"9fc46429fbe091ac5ad2608c657201eb68b6f1b8341bd6d670047d32ed0a88fa","affectsGlobalScope":true},{"version":"61c37c1de663cf4171e1192466e52c7a382afa58da01b1dc75058f032ddf0839","affectsGlobalScope":true},{"version":"b541a838a13f9234aba650a825393ffc2292dc0fc87681a5d81ef0c96d281e7a","affectsGlobalScope":true},{"version":"b20fe0eca9a4e405f1a5ae24a2b3290b37cf7f21eba6cbe4fc3fab979237d4f3","affectsGlobalScope":true},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true},{"version":"49ed889be54031e1044af0ad2c603d627b8bda8b50c1a68435fe85583901d072","affectsGlobalScope":true},{"version":"e93d098658ce4f0c8a0779e6cab91d0259efb88a318137f686ad76f8410ca270","affectsGlobalScope":true},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true},{"version":"bf14a426dbbf1022d11bd08d6b8e709a2e9d246f0c6c1032f3b2edb9a902adbe","affectsGlobalScope":true},{"version":"5e07ed3809d48205d5b985642a59f2eba47c402374a7cf8006b686f79efadcbd","affectsGlobalScope":true},{"version":"2b72d528b2e2fe3c57889ca7baef5e13a56c957b946906d03767c642f386bbc3","affectsGlobalScope":true},{"version":"8073890e29d2f46fdbc19b8d6d2eb9ea58db9a2052f8640af20baff9afbc8640","affectsGlobalScope":true},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true},{"version":"51e547984877a62227042850456de71a5c45e7fe86b7c975c6e68896c86fa23b","affectsGlobalScope":true},{"version":"956d27abdea9652e8368ce029bb1e0b9174e9678a273529f426df4b3d90abd60","affectsGlobalScope":true},{"version":"4fa6ed14e98aa80b91f61b9805c653ee82af3502dc21c9da5268d3857772ca05","affectsGlobalScope":true},{"version":"e6633e05da3ff36e6da2ec170d0d03ccf33de50ca4dc6f5aeecb572cedd162fb","affectsGlobalScope":true},{"version":"d8670852241d4c6e03f2b89d67497a4bbefe29ecaa5a444e2c11a9b05e6fccc6","affectsGlobalScope":true},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true},{"version":"caccc56c72713969e1cfe5c3d44e5bab151544d9d2b373d7dbe5a1e4166652be","affectsGlobalScope":true},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true},{"version":"50d53ccd31f6667aff66e3d62adf948879a3a16f05d89882d1188084ee415bbc","affectsGlobalScope":true},{"version":"13f6e6380c78e15e140243dc4be2fa546c287c6d61f4729bc2dd7cf449605471","affectsGlobalScope":true},{"version":"33358442698bb565130f52ba79bfd3d4d484ac85fe33f3cb1759c54d18201393","affectsGlobalScope":true},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true},"d35b5db21a04a45ae6323c4d4b25acc983dfe2870fc670fd05249eb19d839a5e","e6877d43c2eb116aeafde2c81bec47e68dbb7d964804d65beaf9c7cdf81b5fa6","4a3605bef1a5ef29fd5a1696dd95b0b4e2259e2d07a4d88fac79f3a9765c44a2","370079895f1acdd4bb5194a403c85bf60cfbb2654bced9430a6c7210e7246be8","90240231e730deed31569f6c686766a538e4a024bbc33ea1738fe924f477ba61","552223520e823223ee13c5764e9b69b1819c985818a8bcda435d8d1dbd909bee","49b7c3ddd683c09aa437dd92681699387441f522524b14d2331ce494a9bf2f27","3292bd23ca5d9b8d02492b49099f6917f9715e0fd48b7b5fbb1edbf8c2021c5f","5212dd78d1d63ab33332c8846a0ea5ce248159e74033cde16de48373036b4704","954b3c04ee9f94ca1e262f3e5a6e833b0da0066514b3d4b97b92b7f0c85f8700","a2fc9ce1ae5bed7068d701d8aeebf13321de0f42c217dc2e10f1622dcaa53a7f","8e81f220cb935d551e88cff11541d5e89d3a3494a52fe6247e98016a9dbd4c2d","6b2576a04253626ba41b7dc7ec5977bec07f3b6952b16249d9fa8a3a0d79901c","9de17491f2bfbccea92500e174079d53bdedae34dbebe5d4a12a06ab09814710","e88481085a8576fa52efc913e631c1a833d16179486469b8538d8c4fab2f7381","aec68502c8f4ffaecb4440b37363473582fec0bfee4fb8668a87daa7f700f708","d71577e78c7a4257074aaf82f595724175210c89e8b467ef82f949a6cbd891bc","cf548af8b03cbbc79fdc4f357b5560f618c6d2f68c8688e6eb759c3c11d962c3","c84146dbc9d2e5f43d2cbf15485a4eabf90219dbb66c0d481f20f12d3851bffc","6f27a01e3be326f1f7cd42c1a67f9912f2d58c80f864b263a848a2142212bc0c","99c24f331c9f4e75a779b9a988e942442db3cf29923ceb820d3bdd4ed1edfef2","25b1f20d5868ef9ef18132f7dd76b40b7038688ff7c56c58930537a8dff9f231","0699e4b82c89b8b4da3c56de9457ce959ee8e7ac346af75785bc59a91f688d3f","9bba18dcac8cc9bdce65a4e34122d90474617cdf857feddeeba1e7a3638097d4","8c92080253bac0506d82b83d555a029582595f0944abb349954ea732322baa5c","9196da290a76cf32b70a8cfdbeb165f75bee9a094d70662cee6383fa09a73e43","230eb449f719119cab1728252f20ecdd36d7a20cef659e4a51ada1a232a8aaad","85786f052b5dcd0b36564b657a9aea3e80f1fd0e76e4606a4400ec21928892c1","3ac9cfb334b17c90aae03c3d17d978f829488b22d48b7a00b019dc16f62db77d","1bf687d978bdd6d5aff10b9eb0ff0695179f8594d4446946fd0182d6d25fa433","a01d0d5afa693508187608b13a4b6ccf6105cd896b7ee950954364ac71670580","f5337c3ea7b8702ffe2718f56a24325a67d517c0d552ef71b8d578d9f33a99d3","2113d72680c7ddad6d3b6f70a29432a35c074c94ec6823a7c16ccd69847d965c","c8ffd61bf2db2e7bccb996dd70c9499805cb338f1b1c781987e38ba99dd5b296","55e5a976b594dc02f054860fb59a5299872a5b3c8c90e96733a5c9c9d4ed1fb8","fac83d4c6898d5bf90c508cc84409ded40fdc14611cf42d7fb750fb2c7847979","8a1cce1f66006707d7219898543512bbdce3eb744b7e730606965b2c9680f5f7","cdebdc5861de7a07ddfbd6740a7ad3415068522e19a82bc652ae313c76e4f83d","9c7aa50c1eaa6e0fb07d478ef1b047e9bedb89efd626bfe342f57c8dec15536c","e142fda89ed689ea53d6f2c93693898464c7d29a0ae71c6dc8cdfe5a1d76c775","7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","4967529644e391115ca5592184d4b63980569adf60ee685f968fd59ab1557188","5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","24bd580b5743dc56402c440dc7f9a4f5d592ad7a419f25414d37a7bfe11e342b","25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","34b4f256dd3c591cb7c9e96a763d79d54b69d417709b9015dcec3ac5583eec73","3e4825171442666d31c845aeb47fcd34b62e14041bb353ae2b874285d78482aa","c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","e9775e97ac4877aebf963a0289c81abe76d1ec9a2a7778dbe637e5151f25c5f3","57386628c539248e4f428d5308a69f98f4a6a3cd42a053f017d9dd3fd5a43bc5","cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","3a84b7cb891141824bd00ef8a50b6a44596aded4075da937f180c90e362fe5f6","13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","8b9bf58d580d9b36ab2f23178c88757ce7cc6830ccbdd09e8a76f4cb1bc0fcf7","0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","7782678102bd835ef2c54330ee16c31388e51dfd9ca535b47f6fd8f3d6e07993","89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","e53a3c2a9f624d90f24bf4588aacd223e7bec1b9d0d479b68d2f4a9e6011147f","24b8685c62562f5d98615c5a0c1d05f297cf5065f15246edfe99e81ec4c0e011","1a42891defae8cec268a4f8903140dbf0d214c0cf9ed8fdc1eb6c25e5b3e9a5c","339dc5265ee5ed92e536a93a04c4ebbc2128f45eeec6ed29f379e0085283542c","4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","d32275be3546f252e3ad33976caf8c5e842c09cb87d468cb40d5f4cf092d1acc","37e97c64b890352421ccb29cd8ede863774df8f03763416f6a572093f6058284",{"version":"6f73fc82f51bcdf0487fc982f062eeadae02e0251dd2e4c444043edb247a7d3b","affectsGlobalScope":true},"db3ec8993b7596a4ef47f309c7b25ee2505b519c13050424d9c34701e5973315",{"version":"e7f13a977b01cc54adb4408a9265cda9ddf11db878d70f4f3cac64bef00062e6","affectsGlobalScope":true},"af49b066a76ce26673fe49d1885cc6b44153f1071ed2d952f2a90fccba1095c9","f22fd1dc2df53eaf5ce0ff9e0a3326fc66f880d6a652210d50563ae72625455f",{"version":"3ddbdb519e87a7827c4f0c4007013f3628ca0ebb9e2b018cf31e5b2f61c593f1","affectsGlobalScope":true},"a40826e8476694e90da94aa008283a7de50d1dafd37beada623863f1901cb7fb",{"version":"6d498d4fd8036ea02a4edcae10375854a0eb1df0496cf0b9d692577d3c0fd603","affectsGlobalScope":true},"24642567d3729bcc545bacb65ee7c0db423400c7f1ef757cab25d05650064f98","fd09b892597ab93e7f79745ce725a3aaf6dd005e8db20f0c63a5d10984cba328","a3be878ff1e1964ab2dc8e0a3b67087cf838731c7f3d8f603337e7b712fdd558","5433f7f77cd1fd53f45bd82445a4e437b2f6a72a32070e907530a4fea56c30c8","9be74296ee565af0c12d7071541fdd23260f53c3da7731fb6361f61150a791f6",{"version":"ee1ee365d88c4c6c0c0a5a5701d66ebc27ccd0bcfcfaa482c6e2e7fe7b98edf7","affectsGlobalScope":true},{"version":"f501a53b94ba382d9ba396a5c486969a3abc68309828fa67f916035f5d37fe2b","affectsGlobalScope":true},"aa658b5d765f630c312ac9202d110bbaf2b82d180376457f0a9d57b42629714a","312ac7cbd070107766a9886fd27f9faad997ef57d93fdfb4095df2c618ac8162","bcfcff784a59db3f323c25cea5ae99a903ca9292c060f2c7e470ea73aaf71b44","672ad3045f329e94002256f8ed460cfd06173a50c92cde41edaadfacffd16808","64da4965d1e0559e134d9c1621ae400279a216f87ed00c4cce4f2c7c78021712","ddbf3aac94f85dbb8e4d0360782e60020da75a0becfc0d3c69e437c645feb30f",{"version":"0166fce1204d520fdfd6b5febb3cda3deee438bcbf8ce9ffeb2b1bcde7155346","affectsGlobalScope":true},"d8b13eab85b532285031b06a971fa051bf0175d8fff68065a24a6da9c1c986cf","50c382ba1827988c59aa9cc9d046e386d55d70f762e9e352e95ee8cb7337cdb8","2178ab4b68402d1de2dda199d3e4a55f7200e3334f5a9727fbd9d16975cdf75f",{"version":"21d7e87f271e72d02f8d167edc902f90b04525edc7918f00f01dd0bd00599f7e","affectsGlobalScope":true},{"version":"9e523e73ee7dd119d99072fd855404efc33938c168063771528bd1deb6df56d2","affectsGlobalScope":true},"a215554477f7629e3dcbc8cde104bec036b78673650272f5ffdc5a2cee399a0a","c3497fc242aabfedcd430b5932412f94f157b5906568e737f6a18cc77b36a954","cdc1de3b672f9ef03ff15c443aa1b631edca35b6ae6970a7da6400647ff74d95","139ad1dc93a503da85b7a0d5f615bddbae61ad796bc68fedd049150db67a1e26","bf01fdd3b93cf633b3f7420718457af19c57ab8cbfea49268df60bae2e84d627","15c5e91b5f08be34a78e3d976179bf5b7a9cc28dc0ef1ffebffeb3c7812a2dca","65b39cc6b610a4a4aecc321f6efb436f10c0509d686124795b4c36a5e915b89e","269929a24b2816343a178008ac9ae9248304d92a8ba8e233055e0ed6dbe6ef71","93452d394fdd1dc551ec62f5042366f011a00d342d36d50793b3529bfc9bd633","3c1f19c7abcda6b3a4cf9438a15c7307a080bd3b51dfd56b198d9f86baf19447","d3edb86744e2c19f2c1503849ac7594a5e06024f2451bacae032390f2e20314a",{"version":"97a1d365f71c72ebc3256b0fb8ada716f70c7482309535b7a56c78e651f18b33","affectsGlobalScope":true},{"version":"8a3e61347b8f80aa5af532094498bceb0c0b257b25a6aa8ab4880fd6ed57c95a","affectsGlobalScope":true},"98e00f3613402504bc2a2c9a621800ab48e0a463d1eed062208a4ae98ad8f84c","4301becc26a79eb5f4552f7bee356c2534466d3b5cd68b71523e1929d543de89","5475df7cfc493a08483c9d7aa61cc04791aecba9d0a2efc213f23c4006d4d3cd","000720870b275764c65e9f28ac97cc9e4d9e4a36942d4750ca8603e416e9c57c",{"version":"54412c70bacb9ed547ed6caae8836f712a83ccf58d94466f3387447ec4e82dc3","affectsGlobalScope":true},{"version":"1d274b8bb8ca011148f87e128392bfcd17a12713b6a4e843f0fa9f3f6b45e2b1","affectsGlobalScope":true},"4c48e931a72f6971b5add7fdb1136be1d617f124594e94595f7114af749395e0","478eb5c32250678a906d91e0529c70243fc4d75477a08f3da408e2615396f558","e686a88c9ee004c8ba12ffc9d674ca3192a4c50ed0ca6bd5b2825c289e2b2bfe",{"version":"98d547613610452ac9323fb9ec4eafc89acab77644d6e23105b3c94913f712b3","affectsGlobalScope":true},"4423fb3d6abe6eefb8d7f79eb2df9510824a216ec1c6feee46718c9b18e6d89f",{"version":"ab9b9a36e5284fd8d3bf2f7d5fcbc60052f25f27e4d20954782099282c60d23e","affectsGlobalScope":true},"a42be67ed1ddaec743582f41fc219db96a1b69719fccac6d1464321178d610fc","c663a7e4ee2cb54d99cf095479a5bcf1dd18d762ffdfa038aa1b2d79b070b0d7","d26127118c28d9ea66bdeeaa25e25ee02c6ece837741a3b0c80e507a683db8af","7ed48493953e1f10eb2da6f35b5e04941d3ac8bb618a9d1888da77f7ee43422c","b35182ba2344e5b4a1387b193fa7a1d3f2321f2bbeadab6ddf5c2571d0b67e44","7ad3e0aaeb840047fa4711306188cac803514091f251b6baecb9b2aacf15b976","6d268309f0e15dd820b2df9806234166554cb4e2fe00d11737adcb4e5489f700","58cf96187feb10cc8ad3bb080871cd30888ef63bc5db131f11458850ef8f6245","9102986ff52326a2016e8cddc1cf3092f0808ac916dcc8dc2d2c7195cd181987","fa82b7b22d9df87323e31e9e2ad75911028f3e544647fd212424b3c4452fee3f","01f20dac9dc14f0d306e5d1215c5c1c3b4d1805905e60ae92fabac4031eae7da","9ceec2a882368c0160a8a3879aa0efce0fb985751fc23ff6191006030969cfa4","cad5d6451789234434c28dd2d6a8267b0d64c479b1ad267321faa31ba90d570b","d5197053be441d40f4d074185a40d461137c8fa8db9e00cceedf2d9ca6583157","3cd33c37432c2de7bdd9f1d48b3ea4fd03afad4969cfc5ba88d81e6ed03f432c","6db29cf7af1d68c8194d98f1c444cea3b30a2c65deda3428452efaa05717b81d","561ef05d7e369040c28800d878d7e6461af62e459460263e911d508f319c8d5d","a1b60bd2328318dcbec30bdf529dad31a13315ff2df60c8bd71630c58a575b06","a399dd9b73e4bbfbed2ad1c1259d707f5f147f40dc5e3eeb541bf0bf2da42b25","8cc6a35806cd10d448b0f2ab01fe0b6194ca57fdaced2d71781b68e83c55bd88","8f364fec0ef20506aa9cf00b5cd8b620c1c0389687b11a3a32b0b5d4716ad894","5d11703e2c5d4dbe00bbe79f3bc864d178cf8d6ebccc2d1448ea29e93654f029","f4e82c91aac3b61f3ad04f11a44c5b79f724ff8a09281d0afa24a6624633ff25","ed849d616865076f44a41c87f27698f7cdf230290c44bafc71d7c2bc6919b202","7b8b9017156ef8bf3bbe42785fac8956e5c9869f4a494536d7f548a7c1c7d98a","07c34d1f83dfc5746de4229e01f0cb4d388a9f128eab6beadb4ae1621ebb87c6","763bb8df872cbb8783e29e19bd7a1dea0f88f7fd7398343af38be8509a65df82","372b3681eb9618821c0e0e10bcc775b838e45b51912b8998bc5ba035100dc9e5","c286b410193495d067668bcdbd13ea3f3a39001edff02edee248babf2652e563","ba1405da509cc84896a588978efc45400d4f9844ee738d750b59868b1ad1618a","af89ab13b40dd28cd91818fc6329914d2b9663591831f032ff0f0cb4a028d4a5","63007f1618ada5041fb3b47630b64a9987d268bf740dd72334c38b5d23f5239b","3395f90467d2bb9db039a5c22ed6659ca2ff6f0b4f7ee5f223b0f77288f54ea7","20df2907d398e369d49e8906d6e0f096c465501e9ceff9d61293bf0f4e9020f1","302aa8248dab7c689c103162e542224aa7f3b0db46e29d0fb468fac721cf1c41","ea0a3bb69845621165c21e80ebb0d2b28dad22cd9920564516ce8e927a828f79","6a81475a67505af60be3242841c65ce4bf6d0b624d8b3fada646ba459a3eaad8","6834dd6cc060648604278cdb920a9316fa916e9116134b17dfad90e42800ca47","19fba62f1aab90f0110738261ed8bc1da82c89433fc43265f14870d4380d10b8","fbb2df54f4778b4d691bbc7c0a6e1e241dfffaca19f443cc9f230f450458bf89","da98d8109f379be48d459a6821ebd7cc728af62557e1c44f864e04360686af93","ef6e6d838cc600162626a53167046484f38e9a4bab9454e72350bed76c497228","8adf9a02b0c2508f81516b561a6c8080ea2169126f166e39767bcb5389b9cfbc","c8b50ecedc9ff1b0e83c96f0a334d022874199f7c2d00d182ca6672176b0ea9d","b66ede73039e8751e06e3cab843e5a4265c1124a3285c3d854092c37a966b1f5","a4e6ff57edb9f48421f1084bb264878caba6d632f25e32767b68472727bc856b","fa301b2933323df25f8e033bfb6dc16223751b9d01a3ee1c085004bce8f9ad9f","ea9b8f7426fe0e92b4e7d3cdffa9c2d0bf994abddf3a4bb469beda7b45be34e2","135d2c5bb3919efdd655f2a868533582504827b2d1c10188e1bc3ba80ee015cc","25578b2e19ab0fd92fdc00543abc195d65bdfcb0b800243d5c001129c93907b5","1447d46bff9e7c5c77da14515a7456ea5e919ce6e28f5e6746edf99818e4be47","ba3f6f0ee47f46cdce55620aec5726de80e92a930982634afe9918c114c38f0b","6f38045547cdfd54ec19abcd943cace72c775fde739c5e0e1d917cf3030c16b5","929fc31f7523aaa1d19735b77e637af06e58d76007648ec088ecfbec1521cbfe","8510595d2ca2660e6407be65d8bf95f0c53877dbb812e269cdd980fc34de5f78","a6eb23f2a83113ce0ab7203bfda2be0888720f8d694a20abaef83b9f62832061","363dca5004ac5a3d9c2bba12812b97a64461911762f0b8f9320a8856ec53bcad","557b8c7481296f4b7ed362320f3bbb40bb87404edf880c81224f365a8d1e17f3","283ed3d075bf7d3e8793f63b2a52f475ed84d95b7b6351c5d5bcc6c49d4b845b","6544dab49004fecb69a4ef775e9ad2773a6148b1f9bfd9b75508e3afa11f5d35","bd4c741820ec3574b7ed3b782c8d78034d6e4631d11997e701e6b955b86a87c1","e2dd36a524ea5b13de1ed104ede9cea79696588175c1df1940d6a29113a4aee0","a878d4c7237a7af50e96534295fcf723134d70cbb1e9bfd8365266b912aee6ec","a1f708ddf34053065f8f53682123421af299cee37ae110a86ba07851adf940da","395e6fa1fc8f46f827a5f7d3b7dabc836627ae57e41338f93c221b88d4978f15","749effab6d7e72df8d126868c82b8166cdde84d48453e44f65cbad42ad900b06","11705a4aad6e2e724b82ffee6c4fa271d798f0fb68806ace4b1c425c266f8d98","3630ed70bc81eb54659965fcac105c0d420e667b1d0eaf96ab243de4e81ecd68","a6cb689a6c97d8cffb0a4bd649711838d37d2e574eeb8d40402d4a47c645dbd3","3c783303d3de2fac94bbe484a276e4d87a37ae9a7868318a5127c3cb0720a2bd","68f02ba57c531227ef5804dd57f2e940b10c544c96dadd3c0ef958ba4b6fdbc1","d84174912accc090e9b061b36101f8401add7f486ee532f45d298fb8e550dcb8","f0e9c96fe0af329a25c943d4a19fc3f6d2430914f49a83d1666cbaace3e41a7a","e4515754fbef20229cb3479d25ff0fc858f71d494cf1adeda1bcfa7ad02851f7","3780b990e935be00e1d77afaaf9e80ec9b7d79ea4d1f230206c054eb6717c9d5","89d55270e34359d2c38b432aaa551c2998ecaf94d5ec402ef485f9db9f755605","979ae534126f0425943594de327c5816427a27ad57bb3c8ad7ca9ef9c89928f5","357f2ba403c4f78a11b64df1e9ffb56e241924d6cc768a38c05c7dc7cfe70ff0","d68afd5ea85e35c4c4e8995e55f10d6861439ea9dc2666293c0cf4124bf56f32","f085107c3ee4181e6ea03092b1056060b75e965c0d70bc65c3bb6e4678f06f7e","5bfbc7923d86040aeed60f6729ef2f580099d8ba383399f254fc1852c773e7e4","9ab35348dfa05a141dfa8c1e2454a74b3fba256f0726142b958cf16af93b43bf","c2d923941bba3cc811a51262106aeade1beff9d51a0612dae78bedcacaf6c1f2","5dbd990df344a7628e5c585def6171b1acf2a98c55347ac9b9079f7be0acbc3c","0240ed08a314c20bc76b99cf07ed283b0c238dfda466c064cfa9b86dae9e2108","ac2df65093d53e2be927e46c0dd60e087110c5864f937179cf9d56cdce7b2c69","36e9104b426c5a69de8b1e9b55023167e37628be07040a4057f5182ccc29b0ca","c32e702bf03ae9e5234690829a53c95851a70f93ae745fa51ed26e94232c2952","01d29d12c4745439a4258b260a695c277f9ac339c84444ca7fd13aaf37019a08","a775a05e0b9dcc2e65e9837f3e2a198e2d8c5e64cd9167670efaeb6157f77d8c","a9c9cc04b5d804c36666f17778d804741224480f6841bc9d8fa5d530a91a0acf","a2d43b98c12e855908d640f277836191f0e46f53a5e2f82f5f60c4cec6345b16","aa2ec2fce1f7f7023395a9a42124b5eb18ee7d63680624e5b26bbf4c66de3245","e375db5d6e39e62142a53c6c7545179eb2f784ef11dbb6ba4b0dc56b9b23161b","0e311fda2854da7a33915b771f214251600b7dc0018e8989e7d97eaaae689de9","09ac11dc22366cb89d815665ca03e3388fe437b270592bce1c1ca7fe3ddaec5d","7fdb4fef9d733572da36bab73f1dddfb68936673528a301398124457b07493c7","0d41406b8c120d55a3930fbb2c98536ac5feeda78d13dc6a0a785716ee8ba825","1e9e07cdc0218f4a3fccc43ce59199cd45cc5217d7f2f5c2f3cba948905c57df","5f80210f554e793c24ece8a4890b590878a5fcd3b748296a57316252719d4116","6d268309f0e15dd820b2df9806234166554cb4e2fe00d11737adcb4e5489f700","58cf96187feb10cc8ad3bb080871cd30888ef63bc5db131f11458850ef8f6245","9102986ff52326a2016e8cddc1cf3092f0808ac916dcc8dc2d2c7195cd181987","fa82b7b22d9df87323e31e9e2ad75911028f3e544647fd212424b3c4452fee3f","01f20dac9dc14f0d306e5d1215c5c1c3b4d1805905e60ae92fabac4031eae7da","9ceec2a882368c0160a8a3879aa0efce0fb985751fc23ff6191006030969cfa4","cad5d6451789234434c28dd2d6a8267b0d64c479b1ad267321faa31ba90d570b","6516fc98fa10b0cb22c7e332bacea4a7ea80257e113f6cdddd924d03bfde218e","13122c2f3f51d08b986460444b9860d00fd38fee39e862ad6d61bf873525ae0a","88c836190daddad5257c0963159a2cd9ced899f7a3262271583703034caba890","ba7c356f3fa418d4486b3b4e405c01c6d529c274e1e877b98166c46dd7cc0f0d","433b9953d8e0864997b5aaf7cc102f80c98304758244731c3fd0a5d6d645033c","366563a75f042b1a7c61d504a90a8a79810c694e445f038310303f232b6dc89a","f9facf2db5c46c5524f53472e03169f3e13e4f83ee14b98d46248c76146fca14","2945b371f6e04c29e3f96b611ecbf7ed75e172f8aeb603aee5e50510b4bc68a7","1ddbb5149b9d13b2c0441835f41a1b20561339264b05c6902966fc698d7d2863","9c40af09cc72d20c24366ee58bf3783753de9b0b1dbbae79f02a0f80dd3e8fa4","d84450725701131933730844923a4974de4cfe0f6e1fe8d3a74e132e292b44c7","433a8fabb08be4997b99eee7863a2362b52c0aca1fcb54330fbf6567a2c92ab0","a4ae79da4d1bb7fb6196294897f1f78a70c8213d2683f750246deab0527511d2","0bbcaafb46edeaf8a72ba969c070fbe9d98459b7b3a17b8c99f79cab49121032","d713b07550ea416686316c24e88dc6245c0f0c12ef78603cae4c9a9791557fb8","7dbb21add04613e1638c36eacc28b9713f65d62080d3611fc82a546641ae4233","603c6d6d5d61f7100a198de05ab675b21fa85b7e9d4776350f1165f7a9055a5e","e8423fe31351f1ce358798b0e0d64e7b0b3396f9f8ef2cfb5713fa3b7d9020f2","4b54f90cffb36f4bc8175ed414995b6432279d6fe9c9dccb704b8472bd7d88b4","95f8beace3ed894e3e5e3ebaae46c855dfc133e2c63d37663a760c801750f7d4","74d53dbd8fe0d1124911539b879ea9b3461e93ab82bab16497945bf8d73541da","68cc8d6fcc2f270d7108f02f3ebc59480a54615be3e09a47e14527f349e9d53e","3eb11dbf3489064a47a2e1cf9d261b1f100ef0b3b50ffca6c44dd99d6dd81ac1","f7358ae08d4d675cfb7eb7f1a62f70195c3691441e4ceb89669206a895de0417","3762f27827fd30d8372c355e7b8739fb4bfc830c6ce33c241f236416d34924a1",{"version":"48d06f8613c93f16f91d97bcc05c4f295a5d0e7d3a61096966525d2dc0da5c0b","signature":"56d57bdc28871e254ff5b58de3a75e0fa9ab23aba8876b096adb0d401840afbd"},"910a668294831d3c13f52af7c41574e6ce7a0aa5c5b1b74e74741004d5eac010","5ccc3c7f73ef48c223635cd4506f21133560de7abc4c09c623327bb1b54386dc","f30cfcfff28ee8f87563225b47239bb07b9b11edd09dda0ea6499b18cca1a30e","0edb8a97ead1fefd337458449050857e80740e31a3f76cffa656262f4e651a50","6d2d14bb016a70a5ee1afb1cc7718d4369fb645979c725454c688f791ac7218f","8d7622e53b676dfd20828ba435649c217a5d9dee9cdc3713ee808fa2140513da","56558ae167446acf230ea2cc072a835309a37ae63d286b484308afd8c504c2d6","519e39e38704ef342fcee7532bc4a64698a2afb180f7948d9b29d22a2d7fdcfd",{"version":"ea8b54ed1d9eeae99e7f21ce80868866cee8b32346f992d81b923cb9b28abf8b","signature":"0fa23aaf95d2ee607956e442942c8719b5a66825ca0e1bf4e56a8a14090d1f03"},{"version":"b17fae18db717bc23b68f23d3eb9e643a9957cb2696b8060290051f78093a3f3","signature":"2404eb3fc76864f968f8292438cbfacea943279b62255b27cca9107e9db5afed"},{"version":"e5bf842be255f4205817bd75f269c728f766ceee15cd6ed608d39d86a0fe45cb","signature":"98dfbca0bea6192b34b85ab333ed489f3c3c01da5b4c4f00115bf9eb8e5543d9"},"cce27d843905b32a33fae001b535c938c52368882c71cda19c78c4d4bb8cb3b2",{"version":"6049bc5072f429e628a8f66f0a01cdc8abe1cd8201862a293c8cace9855b5b18","signature":"26cc89cc1a0cf3467afe780e480f92bebb7f89fadec0f1a0a6c77b7e9298e87e"},"7d2b7fe4adb76d8253f20e4dbdce044f1cdfab4902ec33c3604585f553883f7d","cabc03949aa3e7981d8643a236d8041c18c49c9b89010202b2a547ef66dc154b",{"version":"190eb48195061f93bf0b0cecc26c3b24b391d0850049be82898ae69f472f27e3","signature":"8262c5b27126522fba11441adf15cf857a28a91e26c2062ac418d40783834a9b"},{"version":"9d0d9f330313f425f67e670454133b941e9c96f58df72d82c2b7758296b37ec3","signature":"2bf38dec579e5636b6c2c2dcec23754eb7c56c80c95b6b2807e709355b72d806"},{"version":"37523ecdb1e5a484bc12b132e8d496d6d8120e90949010a0ae45ca04f5c6b54c","signature":"66d8a86ea8328e01704b4e9095c2cfeb57635bf4efd7be9f6ab9113251f6c1d2"},{"version":"05eb5ae500bda235e1065c25dd59fe738ea662f7752496f2d330ec07a2a0fe68","signature":"cf9deba01f16ca17a255e31aaa5cf927550382392a863f4bba66cd7d89b21976"},{"version":"b15256f68a44cc13e07bbaad38a4227b4eb8e2359271495e8b2d8fd1164a6781","signature":"1a323f9ed8072f628e8c663a77c3becd764a47e5d299db572c59bc0fd6ef88b0"},{"version":"38b263f589769c2da0595b3b098e0d05807a2e6a9bbba2cff3ca2fe695361afa","signature":"f6a794cabca4fa5c3ad3e8d2b18d2dc8fe941539f3780f151ba4650223af894c"},{"version":"19099ba884fa4e31cbbc0892f025e4aff3cd8c3c5acb9ec4132f18aa2772d5a8","signature":"d1ce8d738924731c39ac3ec61da2a501e216997fba7d091714af8193ea2f7ffb"},{"version":"86f0931f606a1ccafd5a80571e21cc0612706705b11cfa86a9dafda05650c07e","signature":"ea0da8be593b96b744cfe6bc711a15688ee11dce3a72ad49b0f0a87f05f6e3c6"},"91764b36fe5e1c5d688f5f90eeea47703a059ab9a81bf80f7bbc9b04507b7bd3","115327b8e1f68c03004d841b83e332ed16b8f48af59ac00f38313887d7ec2920",{"version":"8819ab7f4cff4eb1b3b4f856cb7c010013cb4e47ac9f117caf7be340de2ea9fe","signature":"a076e8d62a9ab205f4ccf90952ef33e74dc9277b55aaf0edf4704dbff1f84d2a"},"b3221b2c362171434c0452fd73c27c8a40d42e7d854f1fc85a493c3ed157bbfd",{"version":"6ada24308c79f7dd8d84c0b9ec1026dd391e38498bb847cdab17e6f153164088","signature":"cf062002e4a259badafeeeaf1e9caf86d1c84efc88df1a8e89f584b73acd257f"},{"version":"21962a9cae155fce7af544fbeca27e707b12e460bc26b9c18045fe3666d66f88","signature":"74f14e5c916b006899c580ca6da8befd6a0bfb72d3b923f474c10eda4e561d55"},{"version":"5683a05567a3b0e165e5e19cf790fecd66f269719740e5a0223d5273a0baa08c","signature":"e64401ec776d3a3fc614c5046551a540d6d343ed039bd7780135ab21917d4bd6"},{"version":"9db7b14d3167fe4bfac00f13e3c7dc48f85955b455a3f4a638285cd04e5c5a66","signature":"b1b4fc21fb4c0873a3467a12584e4ffd658a4e7dca77ac81b0ef6f86e26699bd"},{"version":"eac2b71ce050ca33ef3b1d82ac9aaa1d1a0ddf9fd90693d6da463fbbc96982a3","signature":"7211b7d13a6763a8418e8d6c3820ea91ef7e0e21ff56cb75cac4bcc863da1411"},{"version":"90ebf5865e27d8966ef44b073e6e83b0ddd45058bab1d58b1e4b5a47d36396c4","affectsGlobalScope":true}],"root":[322,323,[331,335],[338,345],348,[350,354]],"options":{"alwaysStrict":true,"declaration":true,"esModuleInterop":true,"module":7,"noFallthroughCasesInSwitch":true,"noImplicitAny":true,"noImplicitReturns":true,"noImplicitThis":true,"noUnusedLocals":true,"noUnusedParameters":true,"outDir":"./","rootDir":"../src","skipLibCheck":true,"sourceMap":true,"strict":true,"strictFunctionTypes":true,"strictNullChecks":true,"strictPropertyInitialization":true,"target":9,"tsBuildInfoFile":"./.tsbuildinfo"},"fileIdsList":[[192,195,204,205,206,208,216,217,218,219,234],[204,205],[60,203],[192,204,205,207],[209,211],[207,209,215],[213],[192,205,208,209,210,211,212,214],[205],[60,192],[205,208],[77,192,204],[203],[196],[60,196],[196,197,198,199,200,201,202],[192,234],[77],[72,77,192,228],[220,229,230,231,232,233],[192],[72,77,192],[60,67,78,79],[67,77,79],[60,67,77,78,192],[66,80,192],[152,190],[61,67,72,77,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,96,97,98,191],[60],[79],[80,82],[61,64,66],[67,77],[67,80,192],[60,67,79,82,95],[60,67],[60,78,79,192],[67,79],[72,77,79,82,89,192],[221,222,223,224,225,226,227],[192,223],[192,221],[192,222],[77,192,256],[77,192,234,237],[192,263],[192,262],[192,261,263],[260],[71,72],[71],[69,70,73],[68,73,75,76],[73,75,77],[74,77],[318],[99],[139],[140,145,174],[141,146,152,153,160,171,182],[141,142,152,160],[143,183],[144,145,153,161],[145,171,179],[146,148,152,160],[139,147],[148,149],[152],[150,152],[139,152],[152,153,154,171,182],[152,153,154,167,171,174],[137,140,187],[148,152,155,160,171,182],[152,153,155,156,160,171,179,182],[155,157,171,179,182],[99,100,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189],[152,158],[159,182,187],[148,152,160,171],[161],[162],[139,163],[160,161,164,181,187],[165],[166],[152,167,168],[167,169,183,185],[140,152,171,172,173,174],[140,171,173],[171,172],[174],[175],[99,171],[152,177,178],[177,178],[145,160,171,179],[180],[160,181],[140,155,166,182],[145,183],[171,184],[159,185],[186],[140,145,152,154,163,171,182,185,187],[171,188],[336],[253,255],[252],[254],[60,78,326,328],[60,78,328],[60,325,327],[78],[60,78],[77,192,234],[73,192,234,256],[77,192,228,234],[72,73,77,192,228,234,264],[77,192,228,234,258,259,265],[73,192,239,256,257,266,267,268],[62],[241,242,248,249],[65,66],[65],[63],[240],[64],[64,244],[66,243,244,245,246,247],[62,63,64,65,240],[62,63,64],[346],[297],[290],[60,290],[290,291,292,293,294,295,296],[60,297],[251],[248,250],[110,114,182],[110,171,182],[105],[107,110,179,182],[160,179],[190],[105,190],[107,110,160,182],[102,103,106,109,140,152,171,182],[102,108],[129,130],[106,110,140,174,182,190],[140,190],[129,140,190],[104,105,190],[110],[104,105,106,107,108,109,110,111,112,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,130,131,132,133,134,135,136],[110,117,118],[108,110,118,119],[109],[102,105,110],[110,114,118,119],[114],[108,110,113,182],[102,107,110,117],[140,171],[102,107,110,117,124],[105,110,129,140,187,190],[322,323,334,339,342,345,348,350,351,352,353],[192,289,321,330,331,334],[192,289,321,350],[306,337],[60,192,234,289,306,321,324,328,329,335,338],[192,289],[289],[192,289,321,322,349],[60,192,289,306,321,324,328,329,335,340,341],[60,306,337],[322],[289,306,321],[60,192,289,306,321,324,328,329,335],[60,192,289,321,324,328,329,335,343,344],[60,289,306,337],[333],[192,289,321,332],[289,306],[192,289,321,347],[192,273],[193],[77,192,193],[192,272,273,274,275],[272],[193,194,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288],[192,235,236,238,269,270],[272,277],[273],[192,193,272,273],[272,274],[192,194,234,272,273],[192,193,271,273,274],[272,273,274],[205,235,273,275,277],[77,192,271,272,276,278,280,281,282,283],[298,299,300,301,302,303,304,305],[77,307,308,309,310,311,313,314,315,316],[289,312],[317,320],[319],[192,289,321,334],[306],[192,289,306,335],[60,306],[192,289,335],[60,289,306]],"referencedMap":[[235,1],[206,2],[204,3],[208,4],[212,5],[216,6],[214,7],[215,8],[211,9],[217,10],[218,11],[205,12],[196,13],[199,14],[200,14],[197,15],[198,14],[203,16],[201,3],[202,13],[236,17],[220,18],[229,19],[234,20],[230,21],[231,10],[232,21],[233,22],[91,23],[92,24],[79,25],[81,26],[191,27],[192,28],[61,29],[83,30],[93,31],[67,32],[80,33],[84,34],[85,33],[96,35],[97,36],[87,30],[89,37],[88,38],[90,39],[224,21],[228,40],[223,21],[221,21],[222,21],[227,41],[225,42],[226,43],[268,44],[238,45],[264,46],[263,47],[262,48],[261,49],[73,50],[70,51],[69,51],[71,52],[76,18],[77,53],[68,18],[74,54],[75,55],[319,56],[99,57],[100,57],[139,58],[140,59],[141,60],[142,61],[143,62],[144,63],[145,64],[146,65],[147,66],[148,67],[149,67],[151,68],[150,69],[152,70],[153,71],[154,72],[138,73],[155,74],[156,75],[157,76],[190,77],[158,78],[159,79],[160,80],[161,81],[162,82],[163,83],[164,84],[165,85],[166,86],[167,87],[168,87],[169,88],[171,89],[173,90],[172,91],[174,92],[175,93],[176,94],[177,95],[178,96],[179,97],[180,98],[181,99],[182,100],[183,101],[184,102],[185,103],[186,104],[187,105],[188,106],[337,107],[256,108],[253,109],[255,110],[327,111],[325,112],[328,113],[329,114],[326,115],[239,116],[257,117],[258,17],[259,118],[265,119],[266,120],[269,121],[267,116],[249,122],[250,123],[63,124],[66,125],[240,126],[241,127],[242,127],[244,128],[245,129],[248,130],[247,131],[65,132],[347,133],[290,134],[293,135],[294,135],[291,136],[292,135],[297,137],[295,138],[296,134],[252,139],[251,140],[117,141],[126,142],[116,141],[135,143],[108,144],[107,145],[134,146],[128,147],[133,148],[110,149],[109,150],[131,151],[105,152],[104,153],[132,154],[106,155],[111,156],[115,156],[137,157],[136,156],[119,158],[120,159],[122,160],[118,161],[121,162],[129,146],[113,163],[114,164],[123,165],[103,166],[125,167],[124,156],[130,168],[354,169],[335,170],[351,171],[338,172],[339,173],[331,174],[352,175],[350,176],[342,177],[340,178],[341,175],[323,179],[322,180],[353,181],[345,182],[344,183],[334,184],[333,185],[332,21],[343,186],[348,187],[282,188],[287,189],[286,21],[194,190],[276,191],[283,192],[289,193],[271,194],[278,195],[274,196],[270,197],[273,198],[279,199],[272,200],[275,201],[280,202],[277,198],[281,198],[284,203],[299,138],[301,138],[302,138],[298,138],[305,138],[304,138],[303,138],[300,138],[306,204],[317,205],[311,175],[315,175],[313,206],[312,175],[310,175],[321,207],[330,21],[320,208]],"exportedModulesMap":[[235,1],[206,2],[204,3],[208,4],[212,5],[216,6],[214,7],[215,8],[211,9],[217,10],[218,11],[205,12],[196,13],[199,14],[200,14],[197,15],[198,14],[203,16],[201,3],[202,13],[236,17],[220,18],[229,19],[234,20],[230,21],[231,10],[232,21],[233,22],[91,23],[92,24],[79,25],[81,26],[191,27],[192,28],[61,29],[83,30],[93,31],[67,32],[80,33],[84,34],[85,33],[96,35],[97,36],[87,30],[89,37],[88,38],[90,39],[224,21],[228,40],[223,21],[221,21],[222,21],[227,41],[225,42],[226,43],[268,44],[238,45],[264,46],[263,47],[262,48],[261,49],[73,50],[70,51],[69,51],[71,52],[76,18],[77,53],[68,18],[74,54],[75,55],[319,56],[99,57],[100,57],[139,58],[140,59],[141,60],[142,61],[143,62],[144,63],[145,64],[146,65],[147,66],[148,67],[149,67],[151,68],[150,69],[152,70],[153,71],[154,72],[138,73],[155,74],[156,75],[157,76],[190,77],[158,78],[159,79],[160,80],[161,81],[162,82],[163,83],[164,84],[165,85],[166,86],[167,87],[168,87],[169,88],[171,89],[173,90],[172,91],[174,92],[175,93],[176,94],[177,95],[178,96],[179,97],[180,98],[181,99],[182,100],[183,101],[184,102],[185,103],[186,104],[187,105],[188,106],[337,107],[256,108],[253,109],[255,110],[327,111],[325,112],[328,113],[329,114],[326,115],[239,116],[257,117],[258,17],[259,118],[265,119],[266,120],[269,121],[267,116],[249,122],[250,123],[63,124],[66,125],[240,126],[241,127],[242,127],[244,128],[245,129],[248,130],[247,131],[65,132],[347,133],[290,134],[293,135],[294,135],[291,136],[292,135],[297,137],[295,138],[296,134],[252,139],[251,140],[117,141],[126,142],[116,141],[135,143],[108,144],[107,145],[134,146],[128,147],[133,148],[110,149],[109,150],[131,151],[105,152],[104,153],[132,154],[106,155],[111,156],[115,156],[137,157],[136,156],[119,158],[120,159],[122,160],[118,161],[121,162],[129,146],[113,163],[114,164],[123,165],[103,166],[125,167],[124,156],[130,168],[354,169],[335,209],[351,174],[338,210],[339,211],[331,21],[352,175],[350,174],[342,211],[340,212],[341,175],[323,179],[322,186],[353,175],[345,213],[344,214],[334,184],[333,174],[332,21],[343,186],[348,175],[282,188],[287,189],[286,21],[194,190],[276,191],[283,192],[289,193],[271,194],[278,195],[274,196],[270,197],[273,198],[279,199],[272,200],[275,201],[280,202],[277,198],[281,198],[284,203],[299,138],[301,138],[302,138],[298,138],[305,138],[304,138],[303,138],[300,138],[306,204],[317,205],[311,175],[315,175],[313,206],[312,175],[310,175],[321,207],[330,21],[320,208]],"semanticDiagnosticsPerFile":[219,235,206,195,204,208,212,216,214,209,207,215,211,217,218,205,210,196,199,200,197,198,203,201,202,236,220,229,234,230,231,232,233,91,92,79,81,98,82,191,192,61,83,93,67,80,84,85,94,96,97,86,87,89,88,90,224,228,223,221,222,227,225,226,268,237,238,264,263,262,261,73,70,69,71,76,77,68,74,75,319,355,318,99,100,139,140,141,142,143,144,145,146,147,148,149,151,150,152,153,154,138,189,155,156,157,190,158,159,160,161,162,163,164,165,166,167,168,169,170,171,173,172,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,337,336,101,213,256,253,254,255,324,327,325,328,329,95,326,78,239,257,258,259,265,266,269,267,249,62,250,63,243,66,240,241,242,244,245,64,248,247,65,246,260,347,346,72,290,293,294,291,292,297,295,296,58,59,10,12,11,2,13,14,15,16,17,18,19,20,3,21,4,22,26,23,24,25,27,28,29,5,30,31,32,33,6,37,34,35,36,38,7,39,44,45,40,41,42,43,8,49,46,47,48,50,9,51,52,53,56,54,55,1,57,60,252,251,117,126,116,135,108,107,134,128,133,110,109,131,105,104,132,106,111,112,115,102,137,136,119,120,122,118,121,129,113,114,123,103,125,124,127,130,354,335,351,338,339,331,352,350,342,340,341,323,322,353,345,344,334,333,332,343,348,282,287,286,194,276,283,289,285,271,278,288,274,270,273,279,272,275,280,277,193,281,284,299,301,302,298,305,304,303,300,306,349,316,309,317,307,311,314,308,315,313,312,310,321,330,320]},"version":"5.4.5"}
@@ -23,7 +23,7 @@ export declare class BaseProtocol implements IBaseProtocolCore {
23
23
  * peers.
24
24
  */
25
25
  allPeers(): Promise<Peer[]>;
26
- connectedPeers(withOpenStreams?: boolean): Promise<Peer[]>;
26
+ connectedPeers(): Promise<Peer[]>;
27
27
  /**
28
28
  * Retrieves a list of connected peers that support the protocol. The list is sorted by latency.
29
29
  *
@@ -25,7 +25,6 @@ export class BaseProtocol {
25
25
  async getStream(peer) {
26
26
  return this.streamManager.getStream(peer);
27
27
  }
28
- //TODO: move to SDK
29
28
  /**
30
29
  * Returns known peers from the address book (`libp2p.peerStore`) that support
31
30
  * the class protocol. Waku may or may not be currently connected to these
@@ -34,13 +33,10 @@ export class BaseProtocol {
34
33
  async allPeers() {
35
34
  return getPeersForProtocol(this.components.peerStore, [this.multicodec]);
36
35
  }
37
- async connectedPeers(withOpenStreams = false) {
36
+ async connectedPeers() {
38
37
  const peers = await this.allPeers();
39
38
  return peers.filter((peer) => {
40
39
  const connections = this.components.connectionManager.getConnections(peer.id);
41
- if (withOpenStreams) {
42
- return connections.some((c) => c.streams.some((s) => s.protocol === this.multicodec));
43
- }
44
40
  return connections.length > 0;
45
41
  });
46
42
  }
@@ -1 +1 @@
1
- {"version":3,"file":"base_protocol.js","sourceRoot":"","sources":["../../src/lib/base_protocol.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"base_protocol.js","sourceRoot":"","sources":["../../src/lib/base_protocol.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAE7E,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE1D;;;GAGG;AACH,MAAM,OAAO,YAAY;IAMd;IACG;IACF;IACQ;IARF,sBAAsB,CAA6B;IACnD,yBAAyB,CAAgC;IAC/D,aAAa,CAAgB;IAEvC,YACS,UAAkB,EACf,UAA4B,EAC9B,GAAW,EACH,YAA2B;QAHpC,eAAU,GAAV,UAAU,CAAQ;QACf,eAAU,GAAV,UAAU,CAAkB;QAC9B,QAAG,GAAH,GAAG,CAAQ;QACH,iBAAY,GAAZ,YAAY,CAAe;QAE3C,IAAI,CAAC,sBAAsB,GAAG,UAAU,CAAC,MAAM,CAAC,gBAAgB,CAAC,IAAI,CACnE,UAAU,CAAC,MAAM,CAClB,CAAC;QACF,IAAI,CAAC,yBAAyB,GAAG,UAAU,CAAC,MAAM,CAAC,mBAAmB,CAAC,IAAI,CACzE,UAAU,CAAC,MAAM,CAClB,CAAC;QAEF,IAAI,CAAC,aAAa,GAAG,IAAI,aAAa,CACpC,UAAU,EACV,UAAU,CAAC,iBAAiB,CAAC,cAAc,CAAC,IAAI,CAC9C,UAAU,CAAC,iBAAiB,CAC7B,EACD,IAAI,CAAC,sBAAsB,CAC5B,CAAC;IACJ,CAAC;IAES,KAAK,CAAC,SAAS,CAAC,IAAU;QAClC,OAAO,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,QAAQ;QACnB,OAAO,mBAAmB,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;IAC3E,CAAC;IAEM,KAAK,CAAC,cAAc;QACzB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QACpC,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;YAC3B,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,cAAc,CAClE,IAAI,CAAC,EAAE,CACR,CAAC;YACF,OAAO,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;;;;OAMG;IACI,KAAK,CAAC,QAAQ,CACnB,EACE,QAAQ,EACR,iBAAiB,KAIf;QACF,iBAAiB,EAAE,CAAC;QACpB,QAAQ,EAAE,CAAC;KACZ;QAED,iFAAiF;QACjF,MAAM,0BAA0B,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAE/D,kEAAkE;QAClE,MAAM,aAAa,GAAG,sBAAsB,CAC1C,0BAA0B,EAC1B,QAAQ,EACR,iBAAiB,CAClB,CAAC;QAEF,4BAA4B;QAC5B,MAAM,mBAAmB,GAAG,MAAM,kBAAkB,CAClD,IAAI,CAAC,UAAU,CAAC,SAAS,EACzB,aAAa,CACd,CAAC;QAEF,IAAI,mBAAmB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrC,IAAI,CAAC,GAAG,CAAC,IAAI,CACX,8DAA8D,CAC/D,CAAC;QACJ,CAAC;QAED,IAAI,mBAAmB,CAAC,MAAM,GAAG,QAAQ,EAAE,CAAC;YAC1C,IAAI,CAAC,GAAG,CAAC,IAAI,CACX,QAAQ,mBAAmB,CAAC,MAAM,2BAA2B,QAAQ,GAAG,CACzE,CAAC;QACJ,CAAC;QAED,OAAO,mBAAmB,CAAC;IAC7B,CAAC;CACF"}
@@ -1,16 +1,17 @@
1
- import type { Stream } from "@libp2p/interface";
2
- import type { Peer } from "@libp2p/interface";
3
- import { Libp2p } from "@waku/interfaces";
1
+ import type { Peer, Stream } from "@libp2p/interface";
2
+ import type { Libp2p } from "@waku/interfaces";
4
3
  export declare class StreamManager {
5
- multicodec: string;
6
- getConnections: Libp2p["getConnections"];
7
- addEventListener: Libp2p["addEventListener"];
8
- private readonly streamPool;
4
+ private multicodec;
5
+ private getConnections;
6
+ private addEventListener;
9
7
  private readonly log;
8
+ private ongoingCreation;
9
+ private streamPool;
10
10
  constructor(multicodec: string, getConnections: Libp2p["getConnections"], addEventListener: Libp2p["addEventListener"]);
11
11
  getStream(peer: Peer): Promise<Stream>;
12
12
  private createStream;
13
- private prepareStream;
13
+ private createStreamWithLock;
14
14
  private handlePeerUpdateStreamPool;
15
- private isConnectedTo;
15
+ private scheduleNewStream;
16
+ private getOpenStreamForCodec;
16
17
  }
@@ -1,90 +1,107 @@
1
1
  import { Logger } from "@waku/utils";
2
- import { selectConnection } from "./utils.js";
3
- const CONNECTION_TIMEOUT = 5_000;
4
- const RETRY_BACKOFF_BASE = 1_000;
5
- const MAX_RETRIES = 3;
2
+ import { selectOpenConnection } from "./utils.js";
6
3
  export class StreamManager {
7
4
  multicodec;
8
5
  getConnections;
9
6
  addEventListener;
10
- streamPool;
11
7
  log;
8
+ ongoingCreation = new Set();
9
+ streamPool = new Map();
12
10
  constructor(multicodec, getConnections, addEventListener) {
13
11
  this.multicodec = multicodec;
14
12
  this.getConnections = getConnections;
15
13
  this.addEventListener = addEventListener;
16
14
  this.log = new Logger(`stream-manager:${multicodec}`);
17
- this.streamPool = new Map();
18
15
  this.addEventListener("peer:update", this.handlePeerUpdateStreamPool);
19
16
  }
20
17
  async getStream(peer) {
21
- const peerIdStr = peer.id.toString();
22
- const streamPromise = this.streamPool.get(peerIdStr);
23
- if (!streamPromise) {
24
- return this.createStream(peer);
18
+ const peerId = peer.id.toString();
19
+ const scheduledStream = this.streamPool.get(peerId);
20
+ if (scheduledStream) {
21
+ this.streamPool.delete(peerId);
22
+ await scheduledStream;
25
23
  }
26
- this.streamPool.delete(peerIdStr);
27
- this.prepareStream(peer);
28
- try {
29
- const stream = await streamPromise;
30
- if (stream && stream.status !== "closed") {
31
- return stream;
32
- }
33
- }
34
- catch (error) {
35
- this.log.warn(`Failed to get stream for ${peerIdStr} -- `, error);
36
- this.log.warn("Attempting to create a new stream for the peer");
24
+ const stream = this.getOpenStreamForCodec(peer.id);
25
+ if (stream) {
26
+ this.log.info(`Found existing stream peerId=${peer.id.toString()} multicodec=${this.multicodec}`);
27
+ return stream;
37
28
  }
38
29
  return this.createStream(peer);
39
30
  }
40
31
  async createStream(peer, retries = 0) {
41
32
  const connections = this.getConnections(peer.id);
42
- const connection = selectConnection(connections);
33
+ const connection = selectOpenConnection(connections);
43
34
  if (!connection) {
44
- throw new Error("Failed to get a connection to the peer");
35
+ throw new Error(`Failed to get a connection to the peer peerId=${peer.id.toString()} multicodec=${this.multicodec}`);
36
+ }
37
+ let lastError;
38
+ let stream;
39
+ for (let i = 0; i < retries + 1; i++) {
40
+ try {
41
+ this.log.info(`Attempting to create a stream for peerId=${peer.id.toString()} multicodec=${this.multicodec}`);
42
+ stream = await connection.newStream(this.multicodec);
43
+ this.log.info(`Created stream for peerId=${peer.id.toString()} multicodec=${this.multicodec}`);
44
+ break;
45
+ }
46
+ catch (error) {
47
+ lastError = error;
48
+ }
49
+ }
50
+ if (!stream) {
51
+ throw new Error(`Failed to create a new stream for ${peer.id.toString()} -- ` +
52
+ lastError);
53
+ }
54
+ return stream;
55
+ }
56
+ async createStreamWithLock(peer) {
57
+ const peerId = peer.id.toString();
58
+ if (this.ongoingCreation.has(peerId)) {
59
+ this.log.info(`Skipping creation of a stream due to lock for peerId=${peerId} multicodec=${this.multicodec}`);
60
+ return;
45
61
  }
46
62
  try {
47
- return await connection.newStream(this.multicodec);
63
+ this.ongoingCreation.add(peerId);
64
+ await this.createStream(peer);
48
65
  }
49
66
  catch (error) {
50
- if (retries < MAX_RETRIES) {
51
- const backoff = RETRY_BACKOFF_BASE * Math.pow(2, retries);
52
- await new Promise((resolve) => setTimeout(resolve, backoff));
53
- return this.createStream(peer, retries + 1);
54
- }
55
- throw new Error(`Failed to create a new stream for ${peer.id.toString()} -- ` + error);
67
+ this.log.error(`Failed to createStreamWithLock:`, error);
56
68
  }
57
- }
58
- prepareStream(peer) {
59
- const timeoutPromise = new Promise((resolve) => setTimeout(resolve, CONNECTION_TIMEOUT));
60
- const streamPromise = Promise.race([
61
- this.createStream(peer),
62
- timeoutPromise.then(() => {
63
- throw new Error("Connection timeout");
64
- })
65
- ]).catch((error) => {
66
- this.log.error(`Failed to prepare a new stream for ${peer.id.toString()} -- `, error);
67
- });
68
- this.streamPool.set(peer.id.toString(), streamPromise);
69
+ finally {
70
+ this.ongoingCreation.delete(peerId);
71
+ }
72
+ return;
69
73
  }
70
74
  handlePeerUpdateStreamPool = (evt) => {
71
75
  const { peer } = evt.detail;
72
- if (peer.protocols.includes(this.multicodec)) {
73
- const isConnected = this.isConnectedTo(peer.id);
74
- if (isConnected) {
75
- this.log.info(`Preemptively opening a stream to ${peer.id.toString()}`);
76
- this.prepareStream(peer);
77
- }
78
- else {
79
- const peerIdStr = peer.id.toString();
80
- this.streamPool.delete(peerIdStr);
81
- this.log.info(`Removed pending stream for disconnected peer ${peerIdStr}`);
82
- }
76
+ if (!peer.protocols.includes(this.multicodec)) {
77
+ return;
78
+ }
79
+ const stream = this.getOpenStreamForCodec(peer.id);
80
+ if (stream) {
81
+ return;
83
82
  }
83
+ this.scheduleNewStream(peer);
84
84
  };
85
- isConnectedTo(peerId) {
85
+ scheduleNewStream(peer) {
86
+ this.log.info(`Scheduling creation of a stream for peerId=${peer.id.toString()} multicodec=${this.multicodec}`);
87
+ // abandon previous attempt
88
+ if (this.streamPool.has(peer.id.toString())) {
89
+ this.streamPool.delete(peer.id.toString());
90
+ }
91
+ this.streamPool.set(peer.id.toString(), this.createStreamWithLock(peer));
92
+ }
93
+ getOpenStreamForCodec(peerId) {
86
94
  const connections = this.getConnections(peerId);
87
- return connections.some((connection) => connection.status === "open");
95
+ const connection = selectOpenConnection(connections);
96
+ if (!connection) {
97
+ return;
98
+ }
99
+ const stream = connection.streams.find((s) => s.protocol === this.multicodec);
100
+ const isStreamUnusable = ["done", "closed", "closing"].includes(stream?.writeStatus || "");
101
+ if (isStreamUnusable) {
102
+ return;
103
+ }
104
+ return stream;
88
105
  }
89
106
  }
90
107
  //# sourceMappingURL=stream_manager.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"stream_manager.js","sourceRoot":"","sources":["../../../src/lib/stream_manager/stream_manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stream_manager.js","sourceRoot":"","sources":["../../../src/lib/stream_manager/stream_manager.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,2 @@
1
1
  import type { Connection } from "@libp2p/interface";
2
- export declare function selectConnection(connections: Connection[]): Connection | undefined;
2
+ export declare function selectOpenConnection(connections: Connection[]): Connection | undefined;
@@ -1,19 +1,7 @@
1
- export function selectConnection(connections) {
2
- if (!connections.length)
3
- return;
4
- if (connections.length === 1)
5
- return connections[0];
6
- let latestConnection;
7
- connections.forEach((connection) => {
8
- if (connection.status === "open") {
9
- if (!latestConnection) {
10
- latestConnection = connection;
11
- }
12
- else if (connection.timeline.open > latestConnection.timeline.open) {
13
- latestConnection = connection;
14
- }
15
- }
16
- });
17
- return latestConnection;
1
+ export function selectOpenConnection(connections) {
2
+ return connections
3
+ .filter((c) => c.status === "open")
4
+ .sort((left, right) => right.timeline.open - left.timeline.open)
5
+ .at(0);
18
6
  }
19
7
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/lib/stream_manager/utils.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,gBAAgB,CAC9B,WAAyB;IAEzB,IAAI,CAAC,WAAW,CAAC,MAAM;QAAE,OAAO;IAChC,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC;IAEpD,IAAI,gBAAwC,CAAC;IAE7C,WAAW,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE;QACjC,IAAI,UAAU,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YACjC,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACtB,gBAAgB,GAAG,UAAU,CAAC;YAChC,CAAC;iBAAM,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,GAAG,gBAAgB,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACrE,gBAAgB,GAAG,UAAU,CAAC;YAChC,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,gBAAgB,CAAC;AAC1B,CAAC"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/lib/stream_manager/utils.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,oBAAoB,CAClC,WAAyB;IAEzB,OAAO,WAAW;SACf,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC;SAClC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;SAC/D,EAAE,CAAC,CAAC,CAAC,CAAC;AACX,CAAC"}
package/package.json CHANGED
@@ -1 +1 @@
1
- {"name":"@waku/core","version":"0.0.33-09028e7.0","description":"TypeScript implementation of the Waku v2 protocol","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./lib/message/version_0":{"types":"./dist/lib/message/version_0.d.ts","import":"./dist/lib/message/version_0.js"},"./lib/base_protocol":{"types":"./dist/lib/base_protocol.d.ts","import":"./dist/lib/base_protocol.js"}},"typesVersions":{"*":{"lib/*":["dist/lib/*"],"constants/*":["dist/constants/*"]}},"type":"module","homepage":"https://github.com/waku-org/js-waku/tree/master/packages/core#readme","repository":{"type":"git","url":"https://github.com/waku-org/js-waku.git"},"bugs":{"url":"https://github.com/waku-org/js-waku/issues"},"license":"MIT OR Apache-2.0","keywords":["waku","decentralised","communication","web3","ethereum","dapps"],"scripts":{"build":"run-s build:**","build:esm":"tsc","build:bundle":"rollup --config rollup.config.js","fix":"run-s fix:*","fix:lint":"eslint src *.js --fix","check":"run-s check:*","check:tsc":"tsc -p tsconfig.dev.json","check:lint":"eslint src *.js","check:spelling":"cspell \"{README.md,src/**/*.ts}\"","test":"NODE_ENV=test run-s test:*","test:node":"NODE_ENV=test TS_NODE_PROJECT=./tsconfig.dev.json mocha","test:browser":"NODE_ENV=test karma start karma.conf.cjs","watch:build":"tsc -p tsconfig.json -w","watch:test":"mocha --watch","prepublish":"npm run build","reset-hard":"git clean -dfx -e .idea && git reset --hard && npm i && npm run build"},"engines":{"node":">=20"},"dependencies":{"@libp2p/ping":"^1.1.2","@waku/enr":"0.0.27-09028e7.0","@waku/interfaces":"0.0.28-09028e7.0","@waku/proto":"0.0.9-09028e7.0","@waku/utils":"0.0.21-09028e7.0","debug":"^4.3.4","it-all":"^3.0.4","it-length-prefixed":"^9.0.4","it-pipe":"^3.0.1","p-event":"^6.0.1","uint8arraylist":"^2.4.3","uuid":"^9.0.0"},"devDependencies":{"@multiformats/multiaddr":"^12.0.0","@rollup/plugin-commonjs":"^25.0.7","@rollup/plugin-json":"^6.0.0","@rollup/plugin-node-resolve":"^15.2.3","@types/chai":"^4.3.11","@types/debug":"^4.1.12","@types/mocha":"^10.0.6","@types/uuid":"^9.0.8","@waku/build-utils":"*","chai":"^4.3.10","cspell":"^8.6.1","fast-check":"^3.19.0","ignore-loader":"^0.1.2","isomorphic-fetch":"^3.0.0","mocha":"^10.3.0","npm-run-all":"^4.1.5","process":"^0.11.10","rollup":"^4.12.0"},"peerDependencies":{"@multiformats/multiaddr":"^12.0.0","libp2p":"^1.8.1"},"peerDependenciesMeta":{"@multiformats/multiaddr":{"optional":true},"libp2p":{"optional":true}},"files":["dist","bundle","src/**/*.ts","!**/*.spec.*","!**/*.json","CHANGELOG.md","LICENSE","README.md"]}
1
+ {"name":"@waku/core","version":"0.0.33-252ec59.0","description":"TypeScript implementation of the Waku v2 protocol","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./lib/message/version_0":{"types":"./dist/lib/message/version_0.d.ts","import":"./dist/lib/message/version_0.js"},"./lib/base_protocol":{"types":"./dist/lib/base_protocol.d.ts","import":"./dist/lib/base_protocol.js"}},"typesVersions":{"*":{"lib/*":["dist/lib/*"],"constants/*":["dist/constants/*"]}},"type":"module","homepage":"https://github.com/waku-org/js-waku/tree/master/packages/core#readme","repository":{"type":"git","url":"https://github.com/waku-org/js-waku.git"},"bugs":{"url":"https://github.com/waku-org/js-waku/issues"},"license":"MIT OR Apache-2.0","keywords":["waku","decentralised","communication","web3","ethereum","dapps"],"scripts":{"build":"run-s build:**","build:esm":"tsc","build:bundle":"rollup --config rollup.config.js","fix":"run-s fix:*","fix:lint":"eslint src *.js --fix","check":"run-s check:*","check:tsc":"tsc -p tsconfig.dev.json","check:lint":"eslint src *.js","check:spelling":"cspell \"{README.md,src/**/*.ts}\"","test":"NODE_ENV=test run-s test:*","test:node":"NODE_ENV=test TS_NODE_PROJECT=./tsconfig.dev.json mocha","test:browser":"NODE_ENV=test karma start karma.conf.cjs","watch:build":"tsc -p tsconfig.json -w","watch:test":"mocha --watch","prepublish":"npm run build","reset-hard":"git clean -dfx -e .idea && git reset --hard && npm i && npm run build"},"engines":{"node":">=20"},"dependencies":{"@libp2p/ping":"^1.1.2","@waku/enr":"0.0.27-252ec59.0","@waku/interfaces":"0.0.28-252ec59.0","@waku/proto":"0.0.9-252ec59.0","@waku/utils":"0.0.21-252ec59.0","debug":"^4.3.4","it-all":"^3.0.4","it-length-prefixed":"^9.0.4","it-pipe":"^3.0.1","p-event":"^6.0.1","uint8arraylist":"^2.4.3","uuid":"^9.0.0"},"devDependencies":{"@multiformats/multiaddr":"^12.0.0","@rollup/plugin-commonjs":"^25.0.7","@rollup/plugin-json":"^6.0.0","@rollup/plugin-node-resolve":"^15.2.3","@types/chai":"^4.3.11","@types/debug":"^4.1.12","@types/mocha":"^10.0.6","@types/uuid":"^9.0.8","@waku/build-utils":"*","chai":"^4.3.10","sinon":"^18.0.0","cspell":"^8.6.1","fast-check":"^3.19.0","ignore-loader":"^0.1.2","isomorphic-fetch":"^3.0.0","mocha":"^10.3.0","npm-run-all":"^4.1.5","process":"^0.11.10","rollup":"^4.12.0"},"peerDependencies":{"@multiformats/multiaddr":"^12.0.0","libp2p":"^1.8.1"},"peerDependenciesMeta":{"@multiformats/multiaddr":{"optional":true},"libp2p":{"optional":true}},"files":["dist","bundle","src/**/*.ts","!**/*.spec.*","!**/*.json","CHANGELOG.md","LICENSE","README.md"]}
@@ -46,7 +46,6 @@ export class BaseProtocol implements IBaseProtocolCore {
46
46
  return this.streamManager.getStream(peer);
47
47
  }
48
48
 
49
- //TODO: move to SDK
50
49
  /**
51
50
  * Returns known peers from the address book (`libp2p.peerStore`) that support
52
51
  * the class protocol. Waku may or may not be currently connected to these
@@ -56,17 +55,12 @@ export class BaseProtocol implements IBaseProtocolCore {
56
55
  return getPeersForProtocol(this.components.peerStore, [this.multicodec]);
57
56
  }
58
57
 
59
- public async connectedPeers(withOpenStreams = false): Promise<Peer[]> {
58
+ public async connectedPeers(): Promise<Peer[]> {
60
59
  const peers = await this.allPeers();
61
60
  return peers.filter((peer) => {
62
61
  const connections = this.components.connectionManager.getConnections(
63
62
  peer.id
64
63
  );
65
- if (withOpenStreams) {
66
- return connections.some((c) =>
67
- c.streams.some((s) => s.protocol === this.multicodec)
68
- );
69
- }
70
64
  return connections.length > 0;
71
65
  });
72
66
  }
@@ -1,47 +1,41 @@
1
- import type { PeerUpdate, Stream } from "@libp2p/interface";
2
- import type { Peer, PeerId } from "@libp2p/interface";
3
- import { Libp2p } from "@waku/interfaces";
1
+ import type { Peer, PeerId, PeerUpdate, Stream } from "@libp2p/interface";
2
+ import type { Libp2p } from "@waku/interfaces";
4
3
  import { Logger } from "@waku/utils";
5
4
 
6
- import { selectConnection } from "./utils.js";
7
-
8
- const CONNECTION_TIMEOUT = 5_000;
9
- const RETRY_BACKOFF_BASE = 1_000;
10
- const MAX_RETRIES = 3;
5
+ import { selectOpenConnection } from "./utils.js";
11
6
 
12
7
  export class StreamManager {
13
- private readonly streamPool: Map<string, Promise<Stream | void>>;
14
8
  private readonly log: Logger;
15
9
 
10
+ private ongoingCreation: Set<string> = new Set();
11
+ private streamPool: Map<string, Promise<void>> = new Map();
12
+
16
13
  public constructor(
17
- public multicodec: string,
18
- public getConnections: Libp2p["getConnections"],
19
- public addEventListener: Libp2p["addEventListener"]
14
+ private multicodec: string,
15
+ private getConnections: Libp2p["getConnections"],
16
+ private addEventListener: Libp2p["addEventListener"]
20
17
  ) {
21
18
  this.log = new Logger(`stream-manager:${multicodec}`);
22
- this.streamPool = new Map();
23
19
  this.addEventListener("peer:update", this.handlePeerUpdateStreamPool);
24
20
  }
25
21
 
26
22
  public async getStream(peer: Peer): Promise<Stream> {
27
- const peerIdStr = peer.id.toString();
28
- const streamPromise = this.streamPool.get(peerIdStr);
23
+ const peerId = peer.id.toString();
24
+
25
+ const scheduledStream = this.streamPool.get(peerId);
29
26
 
30
- if (!streamPromise) {
31
- return this.createStream(peer);
27
+ if (scheduledStream) {
28
+ this.streamPool.delete(peerId);
29
+ await scheduledStream;
32
30
  }
33
31
 
34
- this.streamPool.delete(peerIdStr);
35
- this.prepareStream(peer);
32
+ const stream = this.getOpenStreamForCodec(peer.id);
36
33
 
37
- try {
38
- const stream = await streamPromise;
39
- if (stream && stream.status !== "closed") {
40
- return stream;
41
- }
42
- } catch (error) {
43
- this.log.warn(`Failed to get stream for ${peerIdStr} -- `, error);
44
- this.log.warn("Attempting to create a new stream for the peer");
34
+ if (stream) {
35
+ this.log.info(
36
+ `Found existing stream peerId=${peer.id.toString()} multicodec=${this.multicodec}`
37
+ );
38
+ return stream;
45
39
  }
46
40
 
47
41
  return this.createStream(peer);
@@ -49,67 +43,112 @@ export class StreamManager {
49
43
 
50
44
  private async createStream(peer: Peer, retries = 0): Promise<Stream> {
51
45
  const connections = this.getConnections(peer.id);
52
- const connection = selectConnection(connections);
46
+ const connection = selectOpenConnection(connections);
53
47
 
54
48
  if (!connection) {
55
- throw new Error("Failed to get a connection to the peer");
49
+ throw new Error(
50
+ `Failed to get a connection to the peer peerId=${peer.id.toString()} multicodec=${this.multicodec}`
51
+ );
56
52
  }
57
53
 
58
- try {
59
- return await connection.newStream(this.multicodec);
60
- } catch (error) {
61
- if (retries < MAX_RETRIES) {
62
- const backoff = RETRY_BACKOFF_BASE * Math.pow(2, retries);
63
- await new Promise((resolve) => setTimeout(resolve, backoff));
64
- return this.createStream(peer, retries + 1);
54
+ let lastError: unknown;
55
+ let stream: Stream | undefined;
56
+
57
+ for (let i = 0; i < retries + 1; i++) {
58
+ try {
59
+ this.log.info(
60
+ `Attempting to create a stream for peerId=${peer.id.toString()} multicodec=${this.multicodec}`
61
+ );
62
+ stream = await connection.newStream(this.multicodec);
63
+ this.log.info(
64
+ `Created stream for peerId=${peer.id.toString()} multicodec=${this.multicodec}`
65
+ );
66
+ break;
67
+ } catch (error) {
68
+ lastError = error;
65
69
  }
70
+ }
71
+
72
+ if (!stream) {
66
73
  throw new Error(
67
- `Failed to create a new stream for ${peer.id.toString()} -- ` + error
74
+ `Failed to create a new stream for ${peer.id.toString()} -- ` +
75
+ lastError
68
76
  );
69
77
  }
78
+
79
+ return stream;
70
80
  }
71
81
 
72
- private prepareStream(peer: Peer): void {
73
- const timeoutPromise = new Promise<void>((resolve) =>
74
- setTimeout(resolve, CONNECTION_TIMEOUT)
75
- );
82
+ private async createStreamWithLock(peer: Peer): Promise<void> {
83
+ const peerId = peer.id.toString();
76
84
 
77
- const streamPromise = Promise.race([
78
- this.createStream(peer),
79
- timeoutPromise.then(() => {
80
- throw new Error("Connection timeout");
81
- })
82
- ]).catch((error) => {
83
- this.log.error(
84
- `Failed to prepare a new stream for ${peer.id.toString()} -- `,
85
- error
85
+ if (this.ongoingCreation.has(peerId)) {
86
+ this.log.info(
87
+ `Skipping creation of a stream due to lock for peerId=${peerId} multicodec=${this.multicodec}`
86
88
  );
87
- });
89
+ return;
90
+ }
91
+
92
+ try {
93
+ this.ongoingCreation.add(peerId);
94
+ await this.createStream(peer);
95
+ } catch (error) {
96
+ this.log.error(`Failed to createStreamWithLock:`, error);
97
+ } finally {
98
+ this.ongoingCreation.delete(peerId);
99
+ }
88
100
 
89
- this.streamPool.set(peer.id.toString(), streamPromise);
101
+ return;
90
102
  }
91
103
 
92
104
  private handlePeerUpdateStreamPool = (evt: CustomEvent<PeerUpdate>): void => {
93
105
  const { peer } = evt.detail;
94
106
 
95
- if (peer.protocols.includes(this.multicodec)) {
96
- const isConnected = this.isConnectedTo(peer.id);
107
+ if (!peer.protocols.includes(this.multicodec)) {
108
+ return;
109
+ }
97
110
 
98
- if (isConnected) {
99
- this.log.info(`Preemptively opening a stream to ${peer.id.toString()}`);
100
- this.prepareStream(peer);
101
- } else {
102
- const peerIdStr = peer.id.toString();
103
- this.streamPool.delete(peerIdStr);
104
- this.log.info(
105
- `Removed pending stream for disconnected peer ${peerIdStr}`
106
- );
107
- }
111
+ const stream = this.getOpenStreamForCodec(peer.id);
112
+
113
+ if (stream) {
114
+ return;
108
115
  }
116
+
117
+ this.scheduleNewStream(peer);
109
118
  };
110
119
 
111
- private isConnectedTo(peerId: PeerId): boolean {
120
+ private scheduleNewStream(peer: Peer): void {
121
+ this.log.info(
122
+ `Scheduling creation of a stream for peerId=${peer.id.toString()} multicodec=${this.multicodec}`
123
+ );
124
+
125
+ // abandon previous attempt
126
+ if (this.streamPool.has(peer.id.toString())) {
127
+ this.streamPool.delete(peer.id.toString());
128
+ }
129
+
130
+ this.streamPool.set(peer.id.toString(), this.createStreamWithLock(peer));
131
+ }
132
+
133
+ private getOpenStreamForCodec(peerId: PeerId): Stream | undefined {
112
134
  const connections = this.getConnections(peerId);
113
- return connections.some((connection) => connection.status === "open");
135
+ const connection = selectOpenConnection(connections);
136
+
137
+ if (!connection) {
138
+ return;
139
+ }
140
+
141
+ const stream = connection.streams.find(
142
+ (s) => s.protocol === this.multicodec
143
+ );
144
+
145
+ const isStreamUnusable = ["done", "closed", "closing"].includes(
146
+ stream?.writeStatus || ""
147
+ );
148
+ if (isStreamUnusable) {
149
+ return;
150
+ }
151
+
152
+ return stream;
114
153
  }
115
154
  }
@@ -1,22 +1,10 @@
1
1
  import type { Connection } from "@libp2p/interface";
2
2
 
3
- export function selectConnection(
3
+ export function selectOpenConnection(
4
4
  connections: Connection[]
5
5
  ): Connection | undefined {
6
- if (!connections.length) return;
7
- if (connections.length === 1) return connections[0];
8
-
9
- let latestConnection: Connection | undefined;
10
-
11
- connections.forEach((connection) => {
12
- if (connection.status === "open") {
13
- if (!latestConnection) {
14
- latestConnection = connection;
15
- } else if (connection.timeline.open > latestConnection.timeline.open) {
16
- latestConnection = connection;
17
- }
18
- }
19
- });
20
-
21
- return latestConnection;
6
+ return connections
7
+ .filter((c) => c.status === "open")
8
+ .sort((left, right) => right.timeline.open - left.timeline.open)
9
+ .at(0);
22
10
  }