@pingops/otel 0.1.0 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +1018 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +342 -0
- package/dist/index.d.cts.map +1 -0
- package/dist/index.d.mts +342 -0
- package/dist/index.d.mts.map +1 -0
- package/dist/index.mjs +981 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +23 -11
- package/dist/config.d.ts +0 -75
- package/dist/config.d.ts.map +0 -1
- package/dist/config.js +0 -5
- package/dist/config.js.map +0 -1
- package/dist/index.d.ts +0 -10
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -9
- package/dist/index.js.map +0 -1
- package/dist/instrumentations/body-extractor.d.ts +0 -48
- package/dist/instrumentations/body-extractor.d.ts.map +0 -1
- package/dist/instrumentations/body-extractor.js +0 -361
- package/dist/instrumentations/body-extractor.js.map +0 -1
- package/dist/instrumentations/http.d.ts +0 -12
- package/dist/instrumentations/http.d.ts.map +0 -1
- package/dist/instrumentations/http.js +0 -38
- package/dist/instrumentations/http.js.map +0 -1
- package/dist/instrumentations/index.d.ts +0 -17
- package/dist/instrumentations/index.d.ts.map +0 -1
- package/dist/instrumentations/index.js +0 -32
- package/dist/instrumentations/index.js.map +0 -1
- package/dist/instrumentations/undici.d.ts +0 -12
- package/dist/instrumentations/undici.d.ts.map +0 -1
- package/dist/instrumentations/undici.js +0 -38
- package/dist/instrumentations/undici.js.map +0 -1
- package/dist/processor.d.ts +0 -82
- package/dist/processor.d.ts.map +0 -1
- package/dist/processor.js +0 -264
- package/dist/processor.js.map +0 -1
- package/dist/span-processor.d.ts +0 -78
- package/dist/span-processor.d.ts.map +0 -1
- package/dist/span-processor.js +0 -272
- package/dist/span-processor.js.map +0 -1
- package/dist/span-wrapper.d.ts +0 -60
- package/dist/span-wrapper.d.ts.map +0 -1
- package/dist/span-wrapper.js +0 -118
- package/dist/span-wrapper.js.map +0 -1
- package/dist/tracer-provider.d.ts +0 -57
- package/dist/tracer-provider.d.ts.map +0 -1
- package/dist/tracer-provider.js +0 -182
- package/dist/tracer-provider.js.map +0 -1
package/dist/index.d.mts
ADDED
|
@@ -0,0 +1,342 @@
|
|
|
1
|
+
import { ReadableSpan, Span, SpanProcessor } from "@opentelemetry/sdk-trace-base";
|
|
2
|
+
import { DomainRule, HeaderRedactionConfig } from "@pingops/core";
|
|
3
|
+
import { Attributes, Context, Span as Span$1, TracerProvider } from "@opentelemetry/api";
|
|
4
|
+
import "@opentelemetry/sdk-trace-node";
|
|
5
|
+
import { HttpInstrumentation, HttpInstrumentationConfig } from "@opentelemetry/instrumentation-http";
|
|
6
|
+
import { Instrumentation, InstrumentationBase, InstrumentationConfig } from "@opentelemetry/instrumentation";
|
|
7
|
+
|
|
8
|
+
//#region src/config.d.ts
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Span export mode to use.
|
|
12
|
+
*
|
|
13
|
+
* - **batched**: Recommended for production environments with long-running processes.
|
|
14
|
+
* Spans are batched and exported in groups for optimal performance.
|
|
15
|
+
* - **immediate**: Recommended for short-lived environments such as serverless functions.
|
|
16
|
+
* Spans are exported immediately to prevent data loss when the process terminates / is frozen.
|
|
17
|
+
*
|
|
18
|
+
* @defaultValue "batched"
|
|
19
|
+
*/
|
|
20
|
+
type PingopsExportMode = "immediate" | "batched";
|
|
21
|
+
/**
|
|
22
|
+
* Configuration parameters for the PingopsSpanProcessor.
|
|
23
|
+
*/
|
|
24
|
+
interface PingopsProcessorConfig {
|
|
25
|
+
/**
|
|
26
|
+
* API key for authentication. Can also be set via PINGOPS_API_KEY environment variable.
|
|
27
|
+
*/
|
|
28
|
+
apiKey?: string;
|
|
29
|
+
/**
|
|
30
|
+
* PingOps backend base URL (required).
|
|
31
|
+
*/
|
|
32
|
+
baseUrl: string;
|
|
33
|
+
/**
|
|
34
|
+
* Enable debug logging.
|
|
35
|
+
* @defaultValue false
|
|
36
|
+
*/
|
|
37
|
+
debug?: boolean;
|
|
38
|
+
/**
|
|
39
|
+
* Service name for resource identification (required).
|
|
40
|
+
*/
|
|
41
|
+
serviceName: string;
|
|
42
|
+
/**
|
|
43
|
+
* List of headers to include (case-insensitive).
|
|
44
|
+
*/
|
|
45
|
+
headersAllowList?: string[];
|
|
46
|
+
/**
|
|
47
|
+
* List of headers to exclude (case-insensitive, takes precedence over allow list).
|
|
48
|
+
*/
|
|
49
|
+
headersDenyList?: string[];
|
|
50
|
+
/**
|
|
51
|
+
* Capture request body.
|
|
52
|
+
*/
|
|
53
|
+
captureRequestBody?: boolean;
|
|
54
|
+
/**
|
|
55
|
+
* Capture response body.
|
|
56
|
+
*/
|
|
57
|
+
captureResponseBody?: boolean;
|
|
58
|
+
/**
|
|
59
|
+
* Domain allow list rules.
|
|
60
|
+
*/
|
|
61
|
+
domainAllowList?: DomainRule[];
|
|
62
|
+
/**
|
|
63
|
+
* Domain deny list rules.
|
|
64
|
+
*/
|
|
65
|
+
domainDenyList?: DomainRule[];
|
|
66
|
+
/**
|
|
67
|
+
* Configuration for header value redaction.
|
|
68
|
+
* If not provided, default redaction is enabled for sensitive headers.
|
|
69
|
+
*/
|
|
70
|
+
headerRedaction?: HeaderRedactionConfig;
|
|
71
|
+
/**
|
|
72
|
+
* Number of spans to batch before flushing (only used in batched mode).
|
|
73
|
+
* @defaultValue 50
|
|
74
|
+
*/
|
|
75
|
+
batchSize?: number;
|
|
76
|
+
/**
|
|
77
|
+
* Flush interval in milliseconds (only used in batched mode).
|
|
78
|
+
* @defaultValue 5000
|
|
79
|
+
*/
|
|
80
|
+
batchTimeout?: number;
|
|
81
|
+
/**
|
|
82
|
+
* Span export mode to use.
|
|
83
|
+
*
|
|
84
|
+
* - **batched**: Recommended for production environments with long-running processes.
|
|
85
|
+
* Spans are batched and exported in groups for optimal performance.
|
|
86
|
+
* - **immediate**: Recommended for short-lived environments such as serverless functions.
|
|
87
|
+
* Spans are exported immediately to prevent data loss when the process terminates / is frozen.
|
|
88
|
+
*
|
|
89
|
+
* @defaultValue "batched"
|
|
90
|
+
*/
|
|
91
|
+
exportMode?: PingopsExportMode;
|
|
92
|
+
}
|
|
93
|
+
//#endregion
|
|
94
|
+
//#region src/span-processor.d.ts
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* OpenTelemetry span processor for sending spans to PingOps backend.
|
|
98
|
+
*
|
|
99
|
+
* This processor wraps OpenTelemetry's built-in processors (BatchSpanProcessor or SimpleSpanProcessor)
|
|
100
|
+
* and applies filtering before passing spans to the OTLP exporter.
|
|
101
|
+
*/
|
|
102
|
+
declare class PingopsSpanProcessor implements SpanProcessor {
|
|
103
|
+
private processor;
|
|
104
|
+
private config;
|
|
105
|
+
/**
|
|
106
|
+
* Creates a new PingopsSpanProcessor instance.
|
|
107
|
+
*
|
|
108
|
+
* @param config - Configuration parameters for the processor
|
|
109
|
+
*/
|
|
110
|
+
constructor(config: PingopsProcessorConfig);
|
|
111
|
+
/**
|
|
112
|
+
* Called when a span starts - extracts parent attributes from context and adds them to the span
|
|
113
|
+
*/
|
|
114
|
+
onStart(span: Span, parentContext: Context): void;
|
|
115
|
+
/**
|
|
116
|
+
* Called when a span ends. Filters the span and passes it to the underlying processor if eligible.
|
|
117
|
+
*
|
|
118
|
+
* This method:
|
|
119
|
+
* 1. Checks if the span is eligible (CLIENT + HTTP/GenAI attributes)
|
|
120
|
+
* 2. Applies domain filtering (determines if span should be exported)
|
|
121
|
+
* 3. Applies header filtering via FilteredSpan wrapper (domain-specific and global rules)
|
|
122
|
+
* 4. If eligible, passes filtered span to underlying OTLP processor for export
|
|
123
|
+
*/
|
|
124
|
+
onEnd(span: ReadableSpan): void;
|
|
125
|
+
/**
|
|
126
|
+
* Forces an immediate flush of all pending spans.
|
|
127
|
+
*
|
|
128
|
+
* @returns Promise that resolves when all pending operations are complete
|
|
129
|
+
*/
|
|
130
|
+
forceFlush(): Promise<void>;
|
|
131
|
+
/**
|
|
132
|
+
* Gracefully shuts down the processor, ensuring all pending operations are completed.
|
|
133
|
+
*
|
|
134
|
+
* @returns Promise that resolves when shutdown is complete
|
|
135
|
+
*/
|
|
136
|
+
shutdown(): Promise<void>;
|
|
137
|
+
}
|
|
138
|
+
//#endregion
|
|
139
|
+
//#region src/tracer-provider.d.ts
|
|
140
|
+
/**
|
|
141
|
+
* Sets an isolated TracerProvider for PingOps tracing operations.
|
|
142
|
+
*
|
|
143
|
+
* This allows PingOps to use its own TracerProvider instance, separate from
|
|
144
|
+
* the global OpenTelemetry TracerProvider. This is useful for avoiding conflicts
|
|
145
|
+
* with other OpenTelemetry instrumentation in the application.
|
|
146
|
+
*
|
|
147
|
+
* @param provider - The TracerProvider instance to use, or null to clear the isolated provider
|
|
148
|
+
* @public
|
|
149
|
+
*/
|
|
150
|
+
declare function setPingopsTracerProvider(provider: TracerProvider | null): void;
|
|
151
|
+
/**
|
|
152
|
+
* Gets the TracerProvider for PingOps tracing operations.
|
|
153
|
+
*
|
|
154
|
+
* Returns the isolated TracerProvider if one has been set via setPingopsTracerProvider(),
|
|
155
|
+
* otherwise falls back to the global OpenTelemetry TracerProvider.
|
|
156
|
+
*
|
|
157
|
+
* @returns The TracerProvider instance to use for PingOps tracing
|
|
158
|
+
* @public
|
|
159
|
+
*/
|
|
160
|
+
declare function getPingopsTracerProvider(): TracerProvider;
|
|
161
|
+
/**
|
|
162
|
+
* Shuts down the TracerProvider and flushes remaining spans
|
|
163
|
+
*/
|
|
164
|
+
declare function shutdownTracerProvider(): Promise<void>;
|
|
165
|
+
//#endregion
|
|
166
|
+
//#region src/instrumentations/index.d.ts
|
|
167
|
+
/**
|
|
168
|
+
* Registers instrumentations for Node.js environment.
|
|
169
|
+
* This function is idempotent and can be called multiple times safely.
|
|
170
|
+
*
|
|
171
|
+
* Instrumentation behavior:
|
|
172
|
+
* - If global instrumentation is enabled: all HTTP requests are instrumented
|
|
173
|
+
* - If global instrumentation is NOT enabled: only requests within wrapHttp blocks are instrumented
|
|
174
|
+
*
|
|
175
|
+
* @param isGlobalInstrumentationEnabled - Function that checks if global instrumentation is enabled
|
|
176
|
+
* @returns Array of Instrumentation instances
|
|
177
|
+
*/
|
|
178
|
+
declare function getInstrumentations(isGlobalInstrumentationEnabled: () => boolean): Instrumentation[];
|
|
179
|
+
//#endregion
|
|
180
|
+
//#region src/instrumentations/http/pingops-http.d.ts
|
|
181
|
+
declare const PingopsSemanticAttributes: {
|
|
182
|
+
HTTP_REQUEST_BODY: string;
|
|
183
|
+
HTTP_RESPONSE_BODY: string;
|
|
184
|
+
NETWORK_DNS_LOOKUP_DURATION: string;
|
|
185
|
+
NETWORK_TCP_CONNECT_DURATION: string;
|
|
186
|
+
NETWORK_TLS_HANDSHAKE_DURATION: string;
|
|
187
|
+
NETWORK_TTFB_DURATION: string;
|
|
188
|
+
NETWORK_CONTENT_TRANSFER_DURATION: string;
|
|
189
|
+
};
|
|
190
|
+
type NetworkTimings = {
|
|
191
|
+
startAt?: number;
|
|
192
|
+
dnsLookupAt?: number;
|
|
193
|
+
tcpConnectionAt?: number;
|
|
194
|
+
tlsHandshakeAt?: number;
|
|
195
|
+
firstByteAt?: number;
|
|
196
|
+
endAt?: number;
|
|
197
|
+
};
|
|
198
|
+
interface PingopsInstrumentationConfig {
|
|
199
|
+
/**
|
|
200
|
+
* Maximum size of request body to capture in bytes
|
|
201
|
+
* @defaultValue 4096 (4 KB)
|
|
202
|
+
*/
|
|
203
|
+
maxRequestBodySize?: number;
|
|
204
|
+
/**
|
|
205
|
+
* Maximum size of response body to capture in bytes
|
|
206
|
+
* @defaultValue 4096 (4 KB)
|
|
207
|
+
*/
|
|
208
|
+
maxResponseBodySize?: number;
|
|
209
|
+
}
|
|
210
|
+
declare const PingopsHttpSemanticAttributes: {
|
|
211
|
+
HTTP_REQUEST_BODY: string;
|
|
212
|
+
HTTP_RESPONSE_BODY: string;
|
|
213
|
+
NETWORK_DNS_LOOKUP_DURATION: string;
|
|
214
|
+
NETWORK_TCP_CONNECT_DURATION: string;
|
|
215
|
+
NETWORK_TLS_HANDSHAKE_DURATION: string;
|
|
216
|
+
NETWORK_TTFB_DURATION: string;
|
|
217
|
+
NETWORK_CONTENT_TRANSFER_DURATION: string;
|
|
218
|
+
};
|
|
219
|
+
interface PingopsHttpInstrumentationConfig extends HttpInstrumentationConfig, PingopsInstrumentationConfig {}
|
|
220
|
+
declare class PingopsHttpInstrumentation extends HttpInstrumentation {
|
|
221
|
+
constructor(config?: PingopsHttpInstrumentationConfig);
|
|
222
|
+
private _createConfig;
|
|
223
|
+
private _createRequestHook;
|
|
224
|
+
private _createResponseHook;
|
|
225
|
+
}
|
|
226
|
+
//#endregion
|
|
227
|
+
//#region src/instrumentations/http/http.d.ts
|
|
228
|
+
/**
|
|
229
|
+
* Creates an HTTP instrumentation instance
|
|
230
|
+
*
|
|
231
|
+
* @param isGlobalInstrumentationEnabled - Function that checks if global instrumentation is enabled
|
|
232
|
+
* @param config - Optional configuration for the instrumentation
|
|
233
|
+
* @returns PingopsHttpInstrumentation instance
|
|
234
|
+
*/
|
|
235
|
+
declare function createHttpInstrumentation(isGlobalInstrumentationEnabled: () => boolean, config?: Partial<PingopsHttpInstrumentationConfig>): PingopsHttpInstrumentation;
|
|
236
|
+
//#endregion
|
|
237
|
+
//#region src/instrumentations/undici/types.d.ts
|
|
238
|
+
interface UndiciRequest {
|
|
239
|
+
origin: string;
|
|
240
|
+
method: string;
|
|
241
|
+
path: string;
|
|
242
|
+
/**
|
|
243
|
+
* Serialized string of headers in the form `name: value\r\n` for v5
|
|
244
|
+
* Array of strings `[key1, value1, key2, value2]`, where values are
|
|
245
|
+
* `string | string[]` for v6
|
|
246
|
+
*/
|
|
247
|
+
headers: string | (string | string[])[];
|
|
248
|
+
/**
|
|
249
|
+
* Helper method to add headers (from v6)
|
|
250
|
+
*/
|
|
251
|
+
addHeader: (name: string, value: string) => void;
|
|
252
|
+
throwOnError: boolean;
|
|
253
|
+
completed: boolean;
|
|
254
|
+
aborted: boolean;
|
|
255
|
+
idempotent: boolean;
|
|
256
|
+
contentLength: number | null;
|
|
257
|
+
contentType: string | null;
|
|
258
|
+
body: any;
|
|
259
|
+
}
|
|
260
|
+
interface UndiciResponse {
|
|
261
|
+
headers: Buffer[];
|
|
262
|
+
statusCode: number;
|
|
263
|
+
statusText: string;
|
|
264
|
+
}
|
|
265
|
+
interface IgnoreRequestFunction<T = UndiciRequest> {
|
|
266
|
+
(request: T): boolean;
|
|
267
|
+
}
|
|
268
|
+
interface RequestHookFunction<T = UndiciRequest> {
|
|
269
|
+
(span: Span$1, request: T): void;
|
|
270
|
+
}
|
|
271
|
+
interface ResponseHookFunction<RequestType = UndiciRequest, ResponseType = UndiciResponse> {
|
|
272
|
+
(span: Span$1, info: {
|
|
273
|
+
request: RequestType;
|
|
274
|
+
response: ResponseType;
|
|
275
|
+
}): void;
|
|
276
|
+
}
|
|
277
|
+
interface StartSpanHookFunction<T = UndiciRequest> {
|
|
278
|
+
(request: T): Attributes;
|
|
279
|
+
}
|
|
280
|
+
interface UndiciInstrumentationConfig<RequestType = UndiciRequest, ResponseType = UndiciResponse> extends InstrumentationConfig {
|
|
281
|
+
/** Not trace all outgoing requests that matched with custom function */
|
|
282
|
+
ignoreRequestHook?: IgnoreRequestFunction<RequestType>;
|
|
283
|
+
/** Function for adding custom attributes before request is handled */
|
|
284
|
+
requestHook?: RequestHookFunction<RequestType>;
|
|
285
|
+
/** Function called once response headers have been received */
|
|
286
|
+
responseHook?: ResponseHookFunction<RequestType, ResponseType>;
|
|
287
|
+
/** Function for adding custom attributes before a span is started */
|
|
288
|
+
startSpanHook?: StartSpanHookFunction<RequestType>;
|
|
289
|
+
/** Require parent to create span for outgoing requests */
|
|
290
|
+
requireParentforSpans?: boolean;
|
|
291
|
+
/** Map the following HTTP headers to span attributes. */
|
|
292
|
+
headersToSpanAttributes?: {
|
|
293
|
+
requestHeaders?: string[];
|
|
294
|
+
responseHeaders?: string[];
|
|
295
|
+
};
|
|
296
|
+
/**
|
|
297
|
+
* Maximum size of request body to capture in bytes
|
|
298
|
+
* @defaultValue 4096 (4 KB)
|
|
299
|
+
*/
|
|
300
|
+
maxRequestBodySize?: number;
|
|
301
|
+
/**
|
|
302
|
+
* Maximum size of response body to capture in bytes
|
|
303
|
+
* @defaultValue 4096 (4 KB)
|
|
304
|
+
*/
|
|
305
|
+
maxResponseBodySize?: number;
|
|
306
|
+
}
|
|
307
|
+
//#endregion
|
|
308
|
+
//#region src/instrumentations/undici/pingops-undici.d.ts
|
|
309
|
+
declare class UndiciInstrumentation extends InstrumentationBase<UndiciInstrumentationConfig> {
|
|
310
|
+
private _channelSubs;
|
|
311
|
+
private _recordFromReq;
|
|
312
|
+
private _httpClientDurationHistogram;
|
|
313
|
+
constructor(config?: UndiciInstrumentationConfig);
|
|
314
|
+
protected init(): undefined;
|
|
315
|
+
disable(): void;
|
|
316
|
+
enable(): void;
|
|
317
|
+
protected _updateMetricInstruments(): void;
|
|
318
|
+
private subscribeToChannel;
|
|
319
|
+
private parseRequestHeaders;
|
|
320
|
+
private onRequestCreated;
|
|
321
|
+
private onRequestHeaders;
|
|
322
|
+
private onResponseHeaders;
|
|
323
|
+
private onDone;
|
|
324
|
+
private onError;
|
|
325
|
+
private onBodyChunkSent;
|
|
326
|
+
private onBodySent;
|
|
327
|
+
private onBodyChunkReceived;
|
|
328
|
+
private recordRequestDuration;
|
|
329
|
+
private getRequestMethod;
|
|
330
|
+
}
|
|
331
|
+
//#endregion
|
|
332
|
+
//#region src/instrumentations/undici/undici.d.ts
|
|
333
|
+
/**
|
|
334
|
+
* Creates an Undici instrumentation instance
|
|
335
|
+
*
|
|
336
|
+
* @param isGlobalInstrumentationEnabled - Function that checks if global instrumentation is enabled
|
|
337
|
+
* @returns UndiciInstrumentation instance
|
|
338
|
+
*/
|
|
339
|
+
declare function createUndiciInstrumentation(isGlobalInstrumentationEnabled: () => boolean): UndiciInstrumentation;
|
|
340
|
+
//#endregion
|
|
341
|
+
export { type NetworkTimings, PingopsHttpInstrumentation, type PingopsHttpInstrumentationConfig, PingopsHttpSemanticAttributes, type PingopsInstrumentationConfig, type PingopsProcessorConfig, PingopsSemanticAttributes, PingopsSpanProcessor, createHttpInstrumentation, createUndiciInstrumentation, getInstrumentations, getPingopsTracerProvider, setPingopsTracerProvider, shutdownTracerProvider };
|
|
342
|
+
//# sourceMappingURL=index.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/config.ts","../src/span-processor.ts","../src/tracer-provider.ts","../src/instrumentations/index.ts","../src/instrumentations/http/pingops-http.ts","../src/instrumentations/http/http.ts","../src/instrumentations/undici/types.ts","../src/instrumentations/undici/pingops-undici.ts","../src/instrumentations/undici/undici.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;;;;AAgBA;AAKA;;;;;AAgFgC,KArFpB,iBAAA,GAqFoB,WAAA,GAAA,SAAA;;;;ACsBnB,UDtGI,sBAAA,CCsGiB;EAkBZ;;;EAkGR,MAAA,CAAA,EAAA,MAAA;EAiGe;;;EArN6B,OAAA,EAAA,MAAA;;;;ACxB1D;EA6BgB,KAAA,CAAA,EAAA,OAAA;EA2EM;;;;ECtLN;;;;ECMH;AAWb;AASA;EAmVa,eAAA,CAAA,EAAA,MAAA,EAAA;EAEI;AAGjB;;;;ACrXA;;EAEW,mBAAA,CAAA,EAAA,OAAA;EACR;;;oBL6CiB;;AM/DpB;AAuBA;EAMiB,cAAA,CAAA,ENuCE,UMvCmB,EAAA;EAIrB;;;;EACQ,eAAA,CAAA,ENwCL,qBMxCK;EAGR;;;;EAIe,SAAA,CAAA,EAAA,MAAA;EAAuB;;AAGvD;;EACY,YAAA,CAAA,EAAA,MAAA;EAAI;;AAKhB;;;;;;;;EASmD,UAAA,CAAA,ENuCpC,iBMvCoC;;;;;;AHzCnD;;;;ACMA;AAWY,cHqFC,oBAAA,YAAgC,aGrFnB,CAAA;EAST,QAAA,SAAA;EAmVJ,QAAA,MAAA;EAEI;AAGjB;;;;ECrXgB,WAAA,CAAA,MAAA,EJ2HM,sBI3HmB;EAEtB;;;EACU,OAAA,CAAA,IAAA,EJuLb,IIvLa,EAAA,aAAA,EJuLQ,OIvLR,CAAA,EAAA,IAAA;;;;AClB7B;AAuBA;AAMA;AAIA;;;EACwB,KAAA,CAAA,IAAA,EL0MV,YK1MU,CAAA,EAAA,IAAA;EAAC;AAGzB;;;;EAIgC,UAAA,CAAA,CAAA,ELoSH,OKpSG,CAAA,IAAA,CAAA;EAAuB;;AAGvD;;;EACgB,QAAA,CAAA,CAAA,ELkTW,OKlTX,CAAA,IAAA,CAAA;;;;;;;;;;AL2EhB;;;;AAoHc,iBC5IE,wBAAA,CD4IF,QAAA,EC3IF,cD2IE,GAAA,IAAA,CAAA,EAAA,IAAA;;;;;;;;AC5Id;AA6BA;AA2EsB,iBA3EN,wBAAA,CAAA,CA2EuC,EA3EX,cA2EW;;;;iBAAjC,sBAAA,CAAA,GAA0B;;;;;;;AF3LhD;AAKA;;;;;;iBGAgB,mBAAA,iDAEb;;;cCIU;;;EJXD,2BAAiB,EAAA,MAAA;EAKZ,4BAAsB,EAAA,MAAA;EA6CnB,8BAAA,EAAA,MAAA;EAKD,qBAAA,EAAA,MAAA;EAMC,iCAAA,EAAA,MAAA;CAwBL;AAAiB,KI/DpB,cAAA,GJ+DoB;;;;ECsBnB,cAAA,CAAA,EAAA,MAAqB;EAkBZ,WAAA,CAAA,EAAA,MAAA;EA+DN,KAAA,CAAA,EAAA,MAAA;CAAqB;AAmCvB,UGhMG,4BAAA,CHgMH;EAiGe;;;;;;;AC7O7B;AA6BA;EA2EsB,mBAAA,CAAA,EAAA,MAAsB;;cEuL/B;;ED7WG,kBAAA,EAAA,MAAmB;;;;ECMtB,qBAAA,EAAA,MAQZ;EAGW,iCAAc,EAAA,MAAA;AAS1B,CAAA;AAmVa,UAEI,gCAAA,SACP,yBAH4D,EAGjC,4BAHiC,CAAA,CAEtE;AAGa,cAAA,0BAAA,SAAmC,mBAAA,CACzB;uBAAA;;;ECtXP,QAAA,mBAAA;;;;;;;;ALFhB;AAKA;;AAkDmB,iBKrDH,yBAAA,CLqDG,8BAAA,EAAA,GAAA,GAAA,OAAA,EAAA,MAAA,CAAA,EKnDR,OLmDQ,CKnDA,gCLmDA,CAAA,CAAA,EKlDhB,0BLkDgB;;;UMpEF,aAAA;;;;;;ANajB;AAKA;;EAkDmB,OAAA,EAAA,MAAA,GAAA,CAAA,MAAA,GAAA,MAAA,EAAA,CAAA,EAAA;EAMC;;;;;;EC8CP,OAAA,EAAA,OAAA;EAkBS,UAAA,EAAA,OAAA;EA+DN,aAAA,EAAA,MAAA,GAAA,IAAA;EAAqB,WAAA,EAAA,MAAA,GAAA,IAAA;EAmCvB,IAAA,EAAA,GAAA;;AAmHa,UKxUV,cAAA,CLwUU;EAvOkB,OAAA,EKhGlC,MLgGkC,EAAA;EAAa,UAAA,EAAA,MAAA;;;UK3FzC,0BAA0B;EJmE3B,CAAA,OAAA,EIlEJ,CJkEI,CAAA,EAAA,OAAA;AA6BhB;AA2EsB,UIvKL,mBJuK2B,CAAA,IIvKH,aJuKc,CAAA,CAAA;SItK9C,iBAAe;;UAGP,mCACD,8BACC;EHrBD,CAAA,IAAA,EGuBP,MHvBO,EAAA,IAAA,EAAA;aGuBgB;cAAuB;;AFjBvD;AAWY,UESK,qBFTS,CAAA,IESiB,aFTjB,CAAA,CAAA;EAST,CAAA,OAAA,EECL,CFDK,CAAA,EECD,UFDC;AAmVjB;AAEiB,UE/UA,2BFgVf,CAAA,cE/Uc,aF+UN,EAAA,eE9UO,cF8UoB,CAAA,SE7U3B,qBF6UuD,CAAA;EAEpD;sBE7US,sBAAsB;;gBAE5B,oBAAoB;ED1CpB;EAEG,YAAA,CAAA,EC0CF,oBD1CE,CC0CmB,WD1CnB,EC0CgC,YD1ChC,CAAA;EAAR;EACR,aAAA,CAAA,EC2Ce,qBD3Cf,CC2CqC,WD3CrC,CAAA;EAA0B;;;;IClBZ,cAAa,CAAA,EAAA,MAAA,EAAA;IAuBb,eAAc,CAAA,EAAA,MAAA,EACpB;EAKM,CAAA;EAIA;;;;EACQ,kBAAA,CAAA,EAAA,MAAA;EAGR;;;;EAIe,mBAAA,CAAA,EAAA,MAAA;;;;cC6InB,qBAAA,SAA8B,oBAAoB;;;;uBAMzC;;EP/KV,OAAA,CAAA,CAAA,EAAA,IAAA;EAKK,MAAA,CAAA,CAAA,EAAA,IAAA;EA6CG,UAAA,wBAAA,CAAA,CAAA,EAAA,IAAA;EAKD,QAAA,kBAAA;EAMC,QAAA,mBAAA;EAwBL,QAAA,gBAAA;EAAiB,QAAA,gBAAA;;;;ECsBnB,QAAA,eAAqB;EAkBZ,QAAA,UAAA;EA+DN,QAAA,mBAAA;EAAqB,QAAA,qBAAA;EAmCvB,QAAA,gBAAA;;;;;;;;AD/Nd;AAKA;AA6CoB,iBQpDJ,2BAAA,CRoDI,8BAAA,EAAA,GAAA,GAAA,OAAA,CAAA,EQlDjB,qBRkDiB"}
|