nlcurl 0.1.0 → 0.2.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.
Files changed (197) hide show
  1. package/README.md +5 -13
  2. package/dist/cli/args.d.ts +37 -5
  3. package/dist/cli/args.d.ts.map +1 -1
  4. package/dist/cli/args.js +6 -17
  5. package/dist/cli/args.js.map +1 -1
  6. package/dist/cli/index.d.ts +3 -3
  7. package/dist/cli/index.js +25 -10
  8. package/dist/cli/index.js.map +1 -1
  9. package/dist/cli/output.d.ts +24 -7
  10. package/dist/cli/output.d.ts.map +1 -1
  11. package/dist/cli/output.js +24 -12
  12. package/dist/cli/output.js.map +1 -1
  13. package/dist/cookies/jar.d.ts +45 -13
  14. package/dist/cookies/jar.d.ts.map +1 -1
  15. package/dist/cookies/jar.js +88 -29
  16. package/dist/cookies/jar.js.map +1 -1
  17. package/dist/cookies/parser.d.ts +25 -3
  18. package/dist/cookies/parser.d.ts.map +1 -1
  19. package/dist/cookies/parser.js +12 -7
  20. package/dist/cookies/parser.js.map +1 -1
  21. package/dist/core/client.d.ts +49 -33
  22. package/dist/core/client.d.ts.map +1 -1
  23. package/dist/core/client.js +64 -38
  24. package/dist/core/client.js.map +1 -1
  25. package/dist/core/errors.d.ts +94 -6
  26. package/dist/core/errors.d.ts.map +1 -1
  27. package/dist/core/errors.js +95 -6
  28. package/dist/core/errors.js.map +1 -1
  29. package/dist/core/request.d.ts +96 -30
  30. package/dist/core/request.d.ts.map +1 -1
  31. package/dist/core/request.js +0 -3
  32. package/dist/core/request.js.map +1 -1
  33. package/dist/core/response.d.ts +92 -8
  34. package/dist/core/response.d.ts.map +1 -1
  35. package/dist/core/response.js +92 -7
  36. package/dist/core/response.js.map +1 -1
  37. package/dist/core/session.d.ts +109 -14
  38. package/dist/core/session.d.ts.map +1 -1
  39. package/dist/core/session.js +124 -46
  40. package/dist/core/session.js.map +1 -1
  41. package/dist/fingerprints/akamai.d.ts +11 -11
  42. package/dist/fingerprints/akamai.d.ts.map +1 -1
  43. package/dist/fingerprints/akamai.js +10 -14
  44. package/dist/fingerprints/akamai.js.map +1 -1
  45. package/dist/fingerprints/database.d.ts +14 -15
  46. package/dist/fingerprints/database.d.ts.map +1 -1
  47. package/dist/fingerprints/database.js +14 -19
  48. package/dist/fingerprints/database.js.map +1 -1
  49. package/dist/fingerprints/extensions.d.ts +121 -27
  50. package/dist/fingerprints/extensions.d.ts.map +1 -1
  51. package/dist/fingerprints/extensions.js +132 -49
  52. package/dist/fingerprints/extensions.js.map +1 -1
  53. package/dist/fingerprints/ja3.d.ts +34 -18
  54. package/dist/fingerprints/ja3.d.ts.map +1 -1
  55. package/dist/fingerprints/ja3.js +34 -18
  56. package/dist/fingerprints/ja3.js.map +1 -1
  57. package/dist/fingerprints/profiles/chrome.d.ts +21 -10
  58. package/dist/fingerprints/profiles/chrome.d.ts.map +1 -1
  59. package/dist/fingerprints/profiles/chrome.js +25 -22
  60. package/dist/fingerprints/profiles/chrome.js.map +1 -1
  61. package/dist/fingerprints/profiles/edge.d.ts +10 -7
  62. package/dist/fingerprints/profiles/edge.d.ts.map +1 -1
  63. package/dist/fingerprints/profiles/edge.js +10 -10
  64. package/dist/fingerprints/profiles/edge.js.map +1 -1
  65. package/dist/fingerprints/profiles/firefox.d.ts +11 -3
  66. package/dist/fingerprints/profiles/firefox.d.ts.map +1 -1
  67. package/dist/fingerprints/profiles/firefox.js +15 -14
  68. package/dist/fingerprints/profiles/firefox.js.map +1 -1
  69. package/dist/fingerprints/profiles/safari.d.ts +14 -3
  70. package/dist/fingerprints/profiles/safari.d.ts.map +1 -1
  71. package/dist/fingerprints/profiles/safari.js +16 -13
  72. package/dist/fingerprints/profiles/safari.js.map +1 -1
  73. package/dist/fingerprints/profiles/tor.d.ts +8 -7
  74. package/dist/fingerprints/profiles/tor.d.ts.map +1 -1
  75. package/dist/fingerprints/profiles/tor.js +8 -14
  76. package/dist/fingerprints/profiles/tor.js.map +1 -1
  77. package/dist/fingerprints/types.d.ts +70 -47
  78. package/dist/fingerprints/types.d.ts.map +1 -1
  79. package/dist/fingerprints/types.js +0 -7
  80. package/dist/fingerprints/types.js.map +1 -1
  81. package/dist/http/h1/client.d.ts +30 -9
  82. package/dist/http/h1/client.d.ts.map +1 -1
  83. package/dist/http/h1/client.js +152 -15
  84. package/dist/http/h1/client.js.map +1 -1
  85. package/dist/http/h1/encoder.d.ts +9 -6
  86. package/dist/http/h1/encoder.d.ts.map +1 -1
  87. package/dist/http/h1/encoder.js +8 -12
  88. package/dist/http/h1/encoder.js.map +1 -1
  89. package/dist/http/h1/parser.d.ts +68 -14
  90. package/dist/http/h1/parser.d.ts.map +1 -1
  91. package/dist/http/h1/parser.js +92 -37
  92. package/dist/http/h1/parser.js.map +1 -1
  93. package/dist/http/h2/client.d.ts +81 -14
  94. package/dist/http/h2/client.d.ts.map +1 -1
  95. package/dist/http/h2/client.js +465 -63
  96. package/dist/http/h2/client.js.map +1 -1
  97. package/dist/http/h2/frames.d.ts +103 -6
  98. package/dist/http/h2/frames.d.ts.map +1 -1
  99. package/dist/http/h2/frames.js +96 -17
  100. package/dist/http/h2/frames.js.map +1 -1
  101. package/dist/http/h2/hpack.d.ts +30 -5
  102. package/dist/http/h2/hpack.d.ts.map +1 -1
  103. package/dist/http/h2/hpack.js +39 -35
  104. package/dist/http/h2/hpack.js.map +1 -1
  105. package/dist/http/negotiator.d.ts +35 -12
  106. package/dist/http/negotiator.d.ts.map +1 -1
  107. package/dist/http/negotiator.js +89 -24
  108. package/dist/http/negotiator.js.map +1 -1
  109. package/dist/http/pool.d.ts +66 -17
  110. package/dist/http/pool.d.ts.map +1 -1
  111. package/dist/http/pool.js +47 -20
  112. package/dist/http/pool.js.map +1 -1
  113. package/dist/index.d.ts +2 -3
  114. package/dist/index.d.ts.map +1 -1
  115. package/dist/index.js +0 -13
  116. package/dist/index.js.map +1 -1
  117. package/dist/middleware/interceptor.d.ts +40 -8
  118. package/dist/middleware/interceptor.d.ts.map +1 -1
  119. package/dist/middleware/interceptor.js +28 -6
  120. package/dist/middleware/interceptor.js.map +1 -1
  121. package/dist/middleware/rate-limiter.d.ts +18 -5
  122. package/dist/middleware/rate-limiter.d.ts.map +1 -1
  123. package/dist/middleware/rate-limiter.js +12 -7
  124. package/dist/middleware/rate-limiter.js.map +1 -1
  125. package/dist/middleware/retry.d.ts +17 -5
  126. package/dist/middleware/retry.d.ts.map +1 -1
  127. package/dist/middleware/retry.js +13 -11
  128. package/dist/middleware/retry.js.map +1 -1
  129. package/dist/proxy/http-proxy.d.ts +17 -9
  130. package/dist/proxy/http-proxy.d.ts.map +1 -1
  131. package/dist/proxy/http-proxy.js +9 -13
  132. package/dist/proxy/http-proxy.js.map +1 -1
  133. package/dist/proxy/socks.d.ts +20 -9
  134. package/dist/proxy/socks.d.ts.map +1 -1
  135. package/dist/proxy/socks.js +20 -31
  136. package/dist/proxy/socks.js.map +1 -1
  137. package/dist/tls/constants.d.ts +74 -4
  138. package/dist/tls/constants.d.ts.map +1 -1
  139. package/dist/tls/constants.js +75 -21
  140. package/dist/tls/constants.js.map +1 -1
  141. package/dist/tls/node-engine.d.ts +17 -16
  142. package/dist/tls/node-engine.d.ts.map +1 -1
  143. package/dist/tls/node-engine.js +20 -27
  144. package/dist/tls/node-engine.js.map +1 -1
  145. package/dist/tls/stealth/client-hello.d.ts +32 -16
  146. package/dist/tls/stealth/client-hello.d.ts.map +1 -1
  147. package/dist/tls/stealth/client-hello.js +13 -37
  148. package/dist/tls/stealth/client-hello.js.map +1 -1
  149. package/dist/tls/stealth/engine.d.ts +18 -10
  150. package/dist/tls/stealth/engine.d.ts.map +1 -1
  151. package/dist/tls/stealth/engine.js +18 -24
  152. package/dist/tls/stealth/engine.js.map +1 -1
  153. package/dist/tls/stealth/handshake.d.ts +31 -17
  154. package/dist/tls/stealth/handshake.d.ts.map +1 -1
  155. package/dist/tls/stealth/handshake.js +173 -74
  156. package/dist/tls/stealth/handshake.js.map +1 -1
  157. package/dist/tls/stealth/key-schedule.d.ts +89 -32
  158. package/dist/tls/stealth/key-schedule.d.ts.map +1 -1
  159. package/dist/tls/stealth/key-schedule.js +62 -42
  160. package/dist/tls/stealth/key-schedule.js.map +1 -1
  161. package/dist/tls/stealth/record-layer.d.ts +76 -25
  162. package/dist/tls/stealth/record-layer.d.ts.map +1 -1
  163. package/dist/tls/stealth/record-layer.js +66 -36
  164. package/dist/tls/stealth/record-layer.js.map +1 -1
  165. package/dist/tls/types.d.ts +33 -25
  166. package/dist/tls/types.d.ts.map +1 -1
  167. package/dist/tls/types.js +0 -4
  168. package/dist/tls/types.js.map +1 -1
  169. package/dist/utils/buffer-reader.d.ts +99 -7
  170. package/dist/utils/buffer-reader.d.ts.map +1 -1
  171. package/dist/utils/buffer-reader.js +99 -7
  172. package/dist/utils/buffer-reader.js.map +1 -1
  173. package/dist/utils/buffer-writer.d.ts +99 -10
  174. package/dist/utils/buffer-writer.d.ts.map +1 -1
  175. package/dist/utils/buffer-writer.js +101 -12
  176. package/dist/utils/buffer-writer.js.map +1 -1
  177. package/dist/utils/encoding.d.ts +33 -8
  178. package/dist/utils/encoding.d.ts.map +1 -1
  179. package/dist/utils/encoding.js +58 -13
  180. package/dist/utils/encoding.js.map +1 -1
  181. package/dist/utils/logger.d.ts +61 -2
  182. package/dist/utils/logger.d.ts.map +1 -1
  183. package/dist/utils/logger.js +52 -4
  184. package/dist/utils/logger.js.map +1 -1
  185. package/dist/utils/url.d.ts +47 -7
  186. package/dist/utils/url.d.ts.map +1 -1
  187. package/dist/utils/url.js +47 -7
  188. package/dist/utils/url.js.map +1 -1
  189. package/dist/ws/client.d.ts +59 -15
  190. package/dist/ws/client.d.ts.map +1 -1
  191. package/dist/ws/client.js +34 -27
  192. package/dist/ws/client.js.map +1 -1
  193. package/dist/ws/frame.d.ts +43 -9
  194. package/dist/ws/frame.d.ts.map +1 -1
  195. package/dist/ws/frame.js +35 -19
  196. package/dist/ws/frame.js.map +1 -1
  197. package/package.json +2 -2
@@ -1,14 +1,16 @@
1
- /**
2
- * HTTP/2 client.
3
- *
4
- * Multiplexed HTTP/2 client that runs over a TLS Duplex stream.
5
- * Sends the connection preface with browser-profile-matched SETTINGS
6
- * and WINDOW_UPDATE for Akamai HTTP/2 fingerprint control.
7
- */
8
1
  import type { Duplex } from 'node:stream';
9
2
  import type { NLcURLRequest, RequestTimings } from '../../core/request.js';
10
3
  import { NLcURLResponse } from '../../core/response.js';
11
4
  import type { H2Profile } from '../../fingerprints/types.js';
5
+ /**
6
+ * Multiplexed HTTP/2 client that operates over an existing duplex stream.
7
+ * Handles all aspects of the HTTP/2 connection lifecycle: connection preface,
8
+ * settings negotiation, flow control (both stream-level and connection-level),
9
+ * HPACK header compression, and stream multiplexing.
10
+ *
11
+ * Create one `H2Client` per underlying TCP/TLS connection; each call to
12
+ * {@link H2Client.request} or {@link H2Client.streamRequest} opens a new HTTP/2 stream.
13
+ */
12
14
  export declare class H2Client {
13
15
  private readonly stream;
14
16
  private readonly encoder;
@@ -19,30 +21,95 @@ export declare class H2Client {
19
21
  private streams;
20
22
  private readBuffer;
21
23
  private prefaceSent;
22
- private closed;
24
+ private _closed;
25
+ private connectionRecvWindow;
26
+ private initialStreamRecvWindow;
27
+ private streamRecvWindows;
28
+ private serverMaxConcurrentStreams;
29
+ private serverMaxFrameSize;
30
+ private connectionSendWindow;
31
+ private initialStreamSendWindow;
32
+ private streamSendWindows;
33
+ private pendingSendData;
34
+ private pendingHeaderStreamId;
35
+ private pendingHeaderBlock;
36
+ private pendingHeaderFlags;
37
+ /**
38
+ * Optional callback invoked when the underlying connection closes, regardless
39
+ * of the reason (graceful GOAWAY, remote reset, or network error).
40
+ *
41
+ * @type {(() => void) | undefined}
42
+ */
43
+ onClose?: () => void;
44
+ /**
45
+ * Creates a new H2Client and begins listening for frames on `stream`.
46
+ *
47
+ * @param {Duplex} stream - Connected transport stream (TLS or plain TCP).
48
+ * @param {H2Profile} [h2Profile] - Browser HTTP/2 fingerprint settings (SETTINGS frame values,
49
+ * window update sizes, and priority frames). Defaults to Chrome-like settings when omitted.
50
+ * @param {Array<[string, string]>} [defaultHeaders=[]] - Profile-level request headers prepended to every request.
51
+ */
23
52
  constructor(stream: Duplex, h2Profile?: H2Profile, defaultHeaders?: Array<[string, string]>);
24
53
  /**
25
- * Send the HTTP/2 connection preface.
54
+ * Returns `true` if the connection has been closed or destroyed and is no
55
+ * longer usable.
26
56
  *
27
- * Must be called before sending any requests.
57
+ * @returns {boolean} Whether the connection is closed.
58
+ */
59
+ get isClosed(): boolean;
60
+ /**
61
+ * Sends the HTTP/2 client connection preface (magic PRI bytes) and the
62
+ * initial SETTINGS frame derived from the browser profile. Idempotent —
63
+ * calling more than once has no effect.
28
64
  */
29
65
  sendPreface(): void;
30
66
  /**
31
- * Send an HTTP/2 request and return the response.
67
+ * Sends an HTTP/2 request and buffers the entire response body before
68
+ * resolving. This is the standard (non-streaming) request path.
69
+ *
70
+ * @param {NLcURLRequest} req - Request descriptor.
71
+ * @param {Partial<RequestTimings>} [timings={}] - Partial timings object populated with `firstByte`.
72
+ * @returns {Promise<NLcURLResponse>} Resolves with the fully received, decompressed response.
73
+ * @throws {ProtocolError} If the connection is already closed or stream IDs are exhausted.
74
+ * @throws {TimeoutError} If the per-request timeout elapses before a response is received.
32
75
  */
33
76
  request(req: NLcURLRequest, timings?: Partial<RequestTimings>): Promise<NLcURLResponse>;
34
77
  /**
35
- * Gracefully close the HTTP/2 connection.
78
+ * Sends an HTTP/2 request and returns a streaming response. The returned
79
+ * `NLcURLResponse` resolves once the status and headers are received;
80
+ * the response body is exposed as a `PassThrough` readable stream via
81
+ * `response.body`.
82
+ *
83
+ * @param {NLcURLRequest} req - Request descriptor.
84
+ * @param {Partial<RequestTimings>} [timings={}] - Partial timings object populated with `firstByte`.
85
+ * @returns {Promise<NLcURLResponse>} Resolves once headers are received; body is streamed via `response.body`.
86
+ * @throws {ProtocolError} If the connection is already closed or stream IDs are exhausted.
87
+ * @throws {TimeoutError} If the per-request timeout elapses before the stream begins.
88
+ */
89
+ streamRequest(req: NLcURLRequest, timings?: Partial<RequestTimings>): Promise<NLcURLResponse>;
90
+ /**
91
+ * Initiates a graceful shutdown by sending a GOAWAY frame and ending the
92
+ * underlying stream. In-flight requests will fail with `ProtocolError`.
36
93
  */
37
94
  close(): void;
95
+ /**
96
+ * Immediately destroys the underlying transport stream, aborting all
97
+ * pending requests with a `ProtocolError`.
98
+ */
38
99
  destroy(): void;
39
100
  private buildRequestHeaders;
40
101
  private write;
41
102
  private onData;
42
103
  private processFrames;
43
104
  private handleFrame;
105
+ private processDecodedHeaders;
106
+ private resolveStreamingResponse;
44
107
  private finalizeStream;
45
- private onError;
46
- private onClose;
108
+ private applyServerSettings;
109
+ private consumeRecvWindow;
110
+ private handleError;
111
+ private handleClose;
112
+ private sendDataWithFlowControl;
113
+ private flushPendingSendData;
47
114
  }
48
115
  //# sourceMappingURL=client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/http/h2/client.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAGxD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAmC7D,qBAAa,QAAQ;IACnB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAe;IACvC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAe;IACvC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAwB;IAClD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA0B;IAEzD,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,OAAO,CAA+B;IAC9C,OAAO,CAAC,UAAU,CAAmB;IACrC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,MAAM,CAAS;gBAGrB,MAAM,EAAE,MAAM,EACd,SAAS,CAAC,EAAE,SAAS,EACrB,cAAc,GAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAM;IAa9C;;;;OAIG;IACH,WAAW,IAAI,IAAI;IA4CnB;;OAEG;IACG,OAAO,CACX,GAAG,EAAE,aAAa,EAClB,OAAO,GAAE,OAAO,CAAC,cAAc,CAAM,GACpC,OAAO,CAAC,cAAc,CAAC;IA8D1B;;OAEG;IACH,KAAK,IAAI,IAAI;IAOb,OAAO,IAAI,IAAI;IAYf,OAAO,CAAC,mBAAmB;IAsD3B,OAAO,CAAC,KAAK;IAMb,OAAO,CAAC,MAAM;IAKd,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,WAAW;YAiFL,cAAc;IA8C5B,OAAO,CAAC,OAAO;IASf,OAAO,CAAC,OAAO;CAQhB"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/http/h2/client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAGxD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAqC7D;;;;;;;;GAQG;AACH,qBAAa,QAAQ;IACnB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAe;IACvC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAe;IACvC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAwB;IAClD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA0B;IAEzD,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,OAAO,CAA+B;IAC9C,OAAO,CAAC,UAAU,CAAmB;IACrC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,OAAO,CAAS;IAExB,OAAO,CAAC,oBAAoB,CAA+B;IAC3D,OAAO,CAAC,uBAAuB,CAA+B;IAC9D,OAAO,CAAC,iBAAiB,CAA6B;IAEtD,OAAO,CAAC,0BAA0B,CAAY;IAC9C,OAAO,CAAC,kBAAkB,CAAS;IAEnC,OAAO,CAAC,oBAAoB,CAA+B;IAC3D,OAAO,CAAC,uBAAuB,CAA+B;IAC9D,OAAO,CAAC,iBAAiB,CAA6B;IACtD,OAAO,CAAC,eAAe,CAAkF;IAEzG,OAAO,CAAC,qBAAqB,CAAuB;IACpD,OAAO,CAAC,kBAAkB,CAAuB;IACjD,OAAO,CAAC,kBAAkB,CAAa;IAEvC;;;;;OAKG;IACH,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IAErB;;;;;;;OAOG;gBAED,MAAM,EAAE,MAAM,EACd,SAAS,CAAC,EAAE,SAAS,EACrB,cAAc,GAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAM;IAa9C;;;;;OAKG;IACH,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED;;;;OAIG;IACH,WAAW,IAAI,IAAI;IA8CnB;;;;;;;;;OASG;IACG,OAAO,CACX,GAAG,EAAE,aAAa,EAClB,OAAO,GAAE,OAAO,CAAC,cAAc,CAAM,GACpC,OAAO,CAAC,cAAc,CAAC;IA4D1B;;;;;;;;;;;OAWG;IACG,aAAa,CACjB,GAAG,EAAE,aAAa,EAClB,OAAO,GAAE,OAAO,CAAC,cAAc,CAAM,GACpC,OAAO,CAAC,cAAc,CAAC;IAoE1B;;;OAGG;IACH,KAAK,IAAI,IAAI;IAQb;;;OAGG;IACH,OAAO,IAAI,IAAI;IAcf,OAAO,CAAC,mBAAmB;IAkD3B,OAAO,CAAC,KAAK;IAMb,OAAO,CAAC,MAAM;IAKd,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,WAAW;IA4LnB,OAAO,CAAC,qBAAqB;IAuB7B,OAAO,CAAC,wBAAwB;YAuClB,cAAc;IAoD5B,OAAO,CAAC,mBAAmB;IA6B3B,OAAO,CAAC,iBAAiB;IA0BzB,OAAO,CAAC,WAAW;IAanB,OAAO,CAAC,WAAW;IAanB,OAAO,CAAC,uBAAuB;IA0B/B,OAAO,CAAC,oBAAoB;CAuC7B"}