@johnhenry/math-sample 0.0.1 → 0.1.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.
package/dist/ode.js ADDED
@@ -0,0 +1,466 @@
1
+ import { assertCount, assertRange, Meter, progress } from "./budget.js";
2
+ import { SampleCancelledError } from "./sample.js";
3
+ /** Evaluate the slope field of `dy/dx = f(x, y)` on a `columns` x `rows` grid including both edges. */
4
+ export function sampleSlopeField(f, xDomain, yDomain, options = {}) {
5
+ const columns = options.columns ?? 20;
6
+ const rows = options.rows ?? 20;
7
+ assertCount("columns", columns);
8
+ assertCount("rows", rows);
9
+ assertRange("x domain", xDomain);
10
+ assertRange("y domain", yDomain);
11
+ const meter = new Meter(options, options);
12
+ const n = columns * rows;
13
+ const x = new Float64Array(n);
14
+ const y = new Float64Array(n);
15
+ const slope = new Float64Array(n).fill(Number.NaN);
16
+ const dirX = new Float64Array(n).fill(Number.NaN);
17
+ const dirY = new Float64Array(n).fill(Number.NaN);
18
+ let done = 0;
19
+ let reason;
20
+ for (let j = 0; j < rows; j++) {
21
+ reason = meter.check(columns);
22
+ if (reason)
23
+ break;
24
+ const yy = j === rows - 1 ? yDomain.max : yDomain.min + ((yDomain.max - yDomain.min) * j) / (rows - 1);
25
+ for (let i = 0; i < columns; i++) {
26
+ const xx = i === columns - 1 ? xDomain.max : xDomain.min + ((xDomain.max - xDomain.min) * i) / (columns - 1);
27
+ const k = j * columns + i;
28
+ x[k] = xx;
29
+ y[k] = yy;
30
+ const m = f(xx, yy);
31
+ slope[k] = m;
32
+ if (Number.isNaN(m))
33
+ continue;
34
+ if (!Number.isFinite(m)) {
35
+ dirX[k] = 0;
36
+ dirY[k] = m > 0 ? 1 : -1;
37
+ }
38
+ else {
39
+ const len = Math.hypot(1, m);
40
+ dirX[k] = 1 / len;
41
+ dirY[k] = m / len;
42
+ }
43
+ }
44
+ meter.spend(columns);
45
+ done++;
46
+ }
47
+ const m = columns * done;
48
+ return {
49
+ columns,
50
+ rows: done,
51
+ x: x.slice(0, m),
52
+ y: y.slice(0, m),
53
+ slope: slope.slice(0, m),
54
+ dirX: dirX.slice(0, m),
55
+ dirY: dirY.slice(0, m),
56
+ progress: progress(done, rows, reason),
57
+ };
58
+ }
59
+ function bad(y, limit) {
60
+ for (const v of y)
61
+ if (!Number.isFinite(v) || Math.abs(v) > limit)
62
+ return true;
63
+ return false;
64
+ }
65
+ function collect(ts, ys, dim, reason) {
66
+ return { t: Float64Array.from(ts), y: Float64Array.from(ys), dim, steps: ts.length, reason };
67
+ }
68
+ function check(opts) {
69
+ if (opts.signal?.aborted || opts.isCancelled?.())
70
+ throw new SampleCancelledError();
71
+ }
72
+ /** One classical RK4 step. */
73
+ function rk4Step(f, t, y, h) {
74
+ const n = y.length;
75
+ const k1 = f(t, y);
76
+ const k2 = f(t + h / 2, y.map((v, i) => v + (h / 2) * k1[i]));
77
+ const k3 = f(t + h / 2, y.map((v, i) => v + (h / 2) * k2[i]));
78
+ const k4 = f(t + h, y.map((v, i) => v + h * k3[i]));
79
+ const out = new Array(n);
80
+ for (let i = 0; i < n; i++)
81
+ out[i] =
82
+ y[i] +
83
+ (h / 6) * (k1[i] + 2 * k2[i] + 2 * k3[i] + k4[i]);
84
+ return out;
85
+ }
86
+ /**
87
+ * Fixed-step classical Runge-Kutta (order 4) for a system `y' = f(t, y)` from `t0` to `tEnd` (which may be
88
+ * smaller than `t0`: integrates backward). Stops early, with a reason, on blow-up or `options.stop`.
89
+ */
90
+ export function integrateRk4(f, t0, y0, tEnd, options = {}) {
91
+ const steps = options.steps ?? 200;
92
+ assertCount("steps", steps, 1);
93
+ if (!Number.isFinite(t0) || !Number.isFinite(tEnd))
94
+ throw new RangeError("t0 and tEnd must be finite");
95
+ const limit = options.blowup ?? 1e12;
96
+ const maxSteps = Math.max(options.maxSteps ?? 100000, steps + 1); // never truncate a run the caller asked for
97
+ const dim = y0.length;
98
+ const h = (tEnd - t0) / steps;
99
+ const ts = [t0];
100
+ const ys = [...y0];
101
+ let y = y0;
102
+ let reason = "end";
103
+ for (let k = 0; k < steps; k++) {
104
+ if (ts.length >= maxSteps) {
105
+ reason = "maxSteps";
106
+ break;
107
+ }
108
+ if (k % 64 === 0)
109
+ check(options);
110
+ const t = t0 + k * h;
111
+ const next = rk4Step(f, t, y, h);
112
+ if (bad(next, limit)) {
113
+ reason = "blowup";
114
+ break;
115
+ }
116
+ y = next;
117
+ const tn = k === steps - 1 ? tEnd : t0 + (k + 1) * h;
118
+ ts.push(tn);
119
+ ys.push(...y);
120
+ if (options.stop?.(tn, y)) {
121
+ reason = "stopped";
122
+ break;
123
+ }
124
+ }
125
+ return collect(ts, ys, dim, reason);
126
+ }
127
+ // Dormand-Prince 5(4)
128
+ const C = [0, 1 / 5, 3 / 10, 4 / 5, 8 / 9, 1, 1];
129
+ const A = [
130
+ [],
131
+ [1 / 5],
132
+ [3 / 40, 9 / 40],
133
+ [44 / 45, -56 / 15, 32 / 9],
134
+ [19372 / 6561, -25360 / 2187, 64448 / 6561, -212 / 729],
135
+ [9017 / 3168, -355 / 33, 46732 / 5247, 49 / 176, -5103 / 18656],
136
+ [35 / 384, 0, 500 / 1113, 125 / 192, -2187 / 6784, 11 / 84],
137
+ ];
138
+ const B5 = [35 / 384, 0, 500 / 1113, 125 / 192, -2187 / 6784, 11 / 84, 0];
139
+ const B4 = [5179 / 57600, 0, 7571 / 16695, 393 / 640, -92097 / 339200, 187 / 2100, 1 / 40];
140
+ /**
141
+ * Adaptive Dormand-Prince (RK45) with error control, forward or backward in `t`. Stops with `"blowup"` near a
142
+ * finite-time singularity, or `"stepTooSmall"` when the step would fall below `hMin`.
143
+ */
144
+ export function integrateAdaptive(f, t0, y0, tEnd, options = {}) {
145
+ if (!Number.isFinite(t0) || !Number.isFinite(tEnd))
146
+ throw new RangeError("t0 and tEnd must be finite");
147
+ const span = Math.abs(tEnd - t0);
148
+ const dir = tEnd >= t0 ? 1 : -1;
149
+ const dim = y0.length;
150
+ const atol = options.atol ?? 1e-8;
151
+ const rtol = options.rtol ?? 1e-6;
152
+ const limit = options.blowup ?? 1e12;
153
+ const maxSteps = options.maxSteps ?? 100000;
154
+ const hMin = options.hMin ?? span * 1e-12;
155
+ const hMax = options.hMax ?? span;
156
+ let h = Math.min(options.h0 ?? span / 100, hMax);
157
+ const ts = [t0];
158
+ const ys = [...y0];
159
+ if (span === 0)
160
+ return collect(ts, ys, dim, "end");
161
+ let t = t0;
162
+ let y = y0;
163
+ let reason = "end";
164
+ let iterations = 0;
165
+ let badSteps = 0;
166
+ let sinceBad = Number.POSITIVE_INFINITY;
167
+ while (dir * (tEnd - t) > 0) {
168
+ if (ts.length >= maxSteps || iterations++ > maxSteps * 20) {
169
+ reason = "maxSteps";
170
+ break;
171
+ }
172
+ if (iterations % 64 === 0)
173
+ check(options);
174
+ if (h < hMin) {
175
+ reason = "stepTooSmall";
176
+ break;
177
+ }
178
+ const last = dir * (t + dir * h - tEnd) >= 0;
179
+ const hh = last ? Math.abs(tEnd - t) : h;
180
+ const step = dir * hh;
181
+ const k = [];
182
+ for (let s = 0; s < 7; s++) {
183
+ const arg = y.map((v, i) => {
184
+ let acc = 0;
185
+ for (let m = 0; m < s; m++)
186
+ acc += A[s]?.[m] * k[m][i];
187
+ return v + step * acc;
188
+ });
189
+ k.push(f(t + C[s] * step, arg));
190
+ }
191
+ const y5 = y.map((v, i) => v + step * B5.reduce((acc, b, s) => acc + b * k[s][i], 0));
192
+ const y4 = y.map((v, i) => v + step * B4.reduce((acc, b, s) => acc + b * k[s][i], 0));
193
+ if (bad(y5, limit)) {
194
+ // may be a bad step rather than a blow-up: try smaller before giving up
195
+ // bad steps count only while they recur within 10 accepted steps (a Zeno approach to the limit);
196
+ // isolated ones over a long run are forgiven
197
+ if (sinceBad > 10)
198
+ badSteps = 0;
199
+ sinceBad = 0;
200
+ if (++badSteps > 12 || hh <= hMin * 2) {
201
+ reason = "blowup";
202
+ break;
203
+ }
204
+ h = hh / 4;
205
+ continue;
206
+ }
207
+ let err = 0;
208
+ for (let i = 0; i < dim; i++) {
209
+ const sc = atol + rtol * Math.max(Math.abs(y[i]), Math.abs(y5[i]));
210
+ err = Math.max(err, Math.abs(y5[i] - y4[i]) / sc);
211
+ }
212
+ if (err <= 1 || hh <= hMin) {
213
+ t = last ? tEnd : t + step;
214
+ y = y5;
215
+ sinceBad++;
216
+ ts.push(t);
217
+ ys.push(...y);
218
+ if (options.stop?.(t, y)) {
219
+ reason = "stopped";
220
+ break;
221
+ }
222
+ }
223
+ const factor = err === 0 ? 5 : Math.min(5, Math.max(0.2, 0.9 * err ** -0.2));
224
+ h = Math.min(hMax, hh * factor);
225
+ }
226
+ return collect(ts, ys, dim, reason);
227
+ }
228
+ /**
229
+ * The solution curve of `dy/dx = f(x, y)` through `(x0, y0)`, extended both ways across `xDomain`, as
230
+ * `Samples` (x ascending). It ends where the solution blows up, so a vertical asymptote leaves a clean
231
+ * end, not a spike. `reasonBefore` / `reasonAfter` say why each side stopped.
232
+ */
233
+ export function sampleSolutionCurve(f, x0, y0, xDomain, options = {}) {
234
+ assertRange("x domain", xDomain);
235
+ const sys = (t, y) => [f(t, y[0])];
236
+ const limit = options.yLimit ?? 1e6;
237
+ const run = (end) => {
238
+ const o = { ...options, blowup: limit };
239
+ return options.method === "rk4"
240
+ ? integrateRk4(sys, x0, [y0], end, { ...o, steps: options.steps ?? 200 })
241
+ : integrateAdaptive(sys, x0, [y0], end, o);
242
+ };
243
+ const xs = [];
244
+ const ys = [];
245
+ let reasonBefore = "end";
246
+ let reasonAfter = "end";
247
+ // A start outside the window is first carried to the nearest edge, so the curve begins exactly at the edge.
248
+ if (x0 < xDomain.min || x0 > xDomain.max) {
249
+ const edge = x0 < xDomain.min ? xDomain.min : xDomain.max;
250
+ const toEdge = run(edge);
251
+ if (toEdge.reason !== "end") {
252
+ const r = toEdge.reason;
253
+ return { x: new Float64Array(0), y: new Float64Array(0), reasonBefore: r, reasonAfter: r };
254
+ }
255
+ x0 = edge;
256
+ y0 = toEdge.y[toEdge.steps - 1];
257
+ }
258
+ if (x0 > xDomain.min) {
259
+ const back = run(xDomain.min);
260
+ reasonBefore = back.reason;
261
+ for (let k = back.steps - 1; k >= 1; k--) {
262
+ xs.push(back.t[k]);
263
+ ys.push(back.y[k]);
264
+ }
265
+ }
266
+ xs.push(x0);
267
+ ys.push(y0);
268
+ if (x0 < xDomain.max) {
269
+ const fwd = run(xDomain.max);
270
+ reasonAfter = fwd.reason;
271
+ for (let k = 1; k < fwd.steps; k++) {
272
+ xs.push(fwd.t[k]);
273
+ ys.push(fwd.y[k]);
274
+ }
275
+ }
276
+ return { x: Float64Array.from(xs), y: Float64Array.from(ys), reasonBefore, reasonAfter };
277
+ }
278
+ /** Numerical Jacobian of a planar field at a point, by central differences. */
279
+ export function jacobian2(F, x, y) {
280
+ const h = 1e-6 * Math.max(1, Math.abs(x), Math.abs(y));
281
+ const xp = F(x + h, y);
282
+ const xm = F(x - h, y);
283
+ const yp = F(x, y + h);
284
+ const ym = F(x, y - h);
285
+ return [
286
+ [(xp[0] - xm[0]) / (2 * h), (yp[0] - ym[0]) / (2 * h)],
287
+ [(xp[1] - xm[1]) / (2 * h), (yp[1] - ym[1]) / (2 * h)],
288
+ ];
289
+ }
290
+ /** Classify an equilibrium from its 2x2 Jacobian (linearisation; `tolerance` is the zero threshold, default 1e-7). */
291
+ export function classifyFixedPoint(J, tolerance = 1e-7) {
292
+ const tr = J[0][0] + J[1][1];
293
+ const det = J[0][0] * J[1][1] - J[0][1] * J[1][0];
294
+ const disc = tr * tr - 4 * det;
295
+ const scale = Math.max(1, Math.abs(tr), Math.abs(det));
296
+ let eigenvalues;
297
+ if (disc >= 0) {
298
+ const s = Math.sqrt(disc);
299
+ eigenvalues = [
300
+ [(tr + s) / 2, 0],
301
+ [(tr - s) / 2, 0],
302
+ ];
303
+ }
304
+ else {
305
+ const s = Math.sqrt(-disc) / 2;
306
+ eigenvalues = [
307
+ [tr / 2, s],
308
+ [tr / 2, -s],
309
+ ];
310
+ }
311
+ let type;
312
+ if (Math.abs(det) <= tolerance * scale)
313
+ type = "non-hyperbolic";
314
+ else if (det < 0)
315
+ type = "saddle";
316
+ else if (Math.abs(tr) <= tolerance * scale)
317
+ type = "center";
318
+ else if (disc > tolerance * scale * scale)
319
+ type = tr < 0 ? "stable node" : "unstable node";
320
+ else if (disc >= -tolerance * scale * scale)
321
+ type = tr < 0 ? "stable star or degenerate node" : "unstable star or degenerate node";
322
+ else
323
+ type = tr < 0 ? "stable spiral" : "unstable spiral";
324
+ return { trace: tr, determinant: det, eigenvalues, type };
325
+ }
326
+ /**
327
+ * Phase portrait of an autonomous planar system: the vector field on a grid, trajectories from seed points
328
+ * (forward and backward, cut at the window's margin or at blow-up), and fixed points classified from the Jacobian.
329
+ * With a budget, `progress.rows` counts field rows and the trajectories and fixed points are only computed
330
+ * when the field finished.
331
+ */
332
+ export function samplePhasePortrait(F, xDomain, yDomain, options = {}) {
333
+ assertRange("x domain", xDomain);
334
+ assertRange("y domain", yDomain);
335
+ const g = options.grid ?? 15;
336
+ const [columns, rows] = typeof g === "number" ? [g, g] : g;
337
+ assertCount("columns", columns);
338
+ assertCount("rows", rows);
339
+ const meter = new Meter(options, options);
340
+ const n = columns * rows;
341
+ const fx = new Float64Array(n);
342
+ const fy = new Float64Array(n);
343
+ const u = new Float64Array(n).fill(Number.NaN);
344
+ const v = new Float64Array(n).fill(Number.NaN);
345
+ const mag = new Float64Array(n).fill(Number.NaN);
346
+ let done = 0;
347
+ let reason;
348
+ for (let j = 0; j < rows; j++) {
349
+ reason = meter.check(columns);
350
+ if (reason)
351
+ break;
352
+ const y = j === rows - 1 ? yDomain.max : yDomain.min + ((yDomain.max - yDomain.min) * j) / (rows - 1);
353
+ for (let i = 0; i < columns; i++) {
354
+ const x = i === columns - 1 ? xDomain.max : xDomain.min + ((xDomain.max - xDomain.min) * i) / (columns - 1);
355
+ const k = j * columns + i;
356
+ fx[k] = x;
357
+ fy[k] = y;
358
+ const w = F(x, y);
359
+ if (Number.isFinite(w[0]) && Number.isFinite(w[1])) {
360
+ u[k] = w[0];
361
+ v[k] = w[1];
362
+ mag[k] = Math.hypot(w[0], w[1]);
363
+ }
364
+ }
365
+ meter.spend(columns);
366
+ done++;
367
+ }
368
+ const m = columns * done;
369
+ const out = {
370
+ field: {
371
+ columns,
372
+ rows: done,
373
+ x: fx.slice(0, m),
374
+ y: fy.slice(0, m),
375
+ u: u.slice(0, m),
376
+ v: v.slice(0, m),
377
+ magnitude: mag.slice(0, m),
378
+ },
379
+ trajectories: [],
380
+ fixedPoints: [],
381
+ progress: progress(done, rows, reason),
382
+ };
383
+ if (reason)
384
+ return out;
385
+ const w = xDomain.max - xDomain.min;
386
+ const hgt = yDomain.max - yDomain.min;
387
+ const mar = options.margin ?? 0.5;
388
+ const inside = (x, y) => x >= xDomain.min - mar * w &&
389
+ x <= xDomain.max + mar * w &&
390
+ y >= yDomain.min - mar * hgt &&
391
+ y <= yDomain.max + mar * hgt;
392
+ const sys = (_t, s) => {
393
+ const r = F(s[0], s[1]);
394
+ return [r[0], r[1]];
395
+ };
396
+ const tMax = options.tMax ?? 10;
397
+ const seeds = options.seeds ??
398
+ Array.from({ length: 25 }, (_, q) => [
399
+ xDomain.min + (w * ((q % 5) + 0.5)) / 5,
400
+ yDomain.min + (hgt * (Math.floor(q / 5) + 0.5)) / 5,
401
+ ]);
402
+ for (const seed of seeds) {
403
+ const o = {
404
+ ...options,
405
+ stop: (_t, s) => !inside(s[0], s[1]),
406
+ hMax: tMax / 20,
407
+ };
408
+ const fwd = integrateAdaptive(sys, 0, seed, tMax, o);
409
+ const bwd = integrateAdaptive(sys, 0, seed, -tMax, o);
410
+ const xs = [];
411
+ const ys = [];
412
+ for (let k = bwd.steps - 1; k >= 1; k--) {
413
+ xs.push(bwd.y[2 * k]);
414
+ ys.push(bwd.y[2 * k + 1]);
415
+ }
416
+ for (let k = 0; k < fwd.steps; k++) {
417
+ xs.push(fwd.y[2 * k]);
418
+ ys.push(fwd.y[2 * k + 1]);
419
+ }
420
+ out.trajectories.push({
421
+ seed,
422
+ x: Float64Array.from(xs),
423
+ y: Float64Array.from(ys),
424
+ reasonBefore: bwd.reason,
425
+ reasonAfter: fwd.reason,
426
+ });
427
+ }
428
+ const starts = options.fixedPointStarts ?? 8;
429
+ const eps = 1e-8 * Math.max(w, hgt);
430
+ for (let a = 0; a < starts && starts > 0; a++) {
431
+ for (let b = 0; b < starts; b++) {
432
+ let x = xDomain.min + (w * (a + 0.5)) / starts;
433
+ let y = yDomain.min + (hgt * (b + 0.5)) / starts;
434
+ let ok = false;
435
+ for (let it = 0; it < 50; it++) {
436
+ const r = F(x, y);
437
+ if (!Number.isFinite(r[0]) || !Number.isFinite(r[1]))
438
+ break;
439
+ const J = jacobian2(F, x, y);
440
+ const det = J[0][0] * J[1][1] - J[0][1] * J[1][0];
441
+ if (!Number.isFinite(det) || Math.abs(det) < 1e-14)
442
+ break;
443
+ const dx = (J[1][1] * r[0] - J[0][1] * r[1]) / det;
444
+ const dy = (-J[1][0] * r[0] + J[0][0] * r[1]) / det;
445
+ x -= dx;
446
+ y -= dy;
447
+ if (Math.hypot(dx, dy) < eps) {
448
+ ok = true;
449
+ break;
450
+ }
451
+ }
452
+ if (!ok || !inside(x, y) || x < xDomain.min || x > xDomain.max || y < yDomain.min || y > yDomain.max)
453
+ continue;
454
+ const r = F(x, y);
455
+ if (Math.hypot(r[0], r[1]) > 1e-6)
456
+ continue;
457
+ if (out.fixedPoints.some((p) => Math.hypot(p.x - x, p.y - y) < 1e-5 * Math.max(w, hgt)))
458
+ continue;
459
+ const J = jacobian2(F, x, y);
460
+ out.fixedPoints.push({ x, y, jacobian: J, ...classifyFixedPoint(J) });
461
+ }
462
+ }
463
+ out.fixedPoints.sort((p, q) => p.x - q.x || p.y - q.y);
464
+ return out;
465
+ }
466
+ //# sourceMappingURL=ode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ode.js","sourceRoot":"","sources":["../src/ode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,WAAW,EAAiC,KAAK,EAAiB,QAAQ,EAAE,MAAM,aAAa,CAAC;AACtH,OAAO,EAAe,oBAAoB,EAAgB,MAAM,aAAa,CAAC;AA8B9E,uGAAuG;AACvG,MAAM,UAAU,gBAAgB,CAC9B,CAAQ,EACR,OAAe,EACf,OAAe,EACf,UAA6B,EAAE;IAE/B,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;IACtC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC;IAChC,WAAW,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAChC,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC1B,WAAW,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACjC,WAAW,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACjC,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC1C,MAAM,CAAC,GAAG,OAAO,GAAG,IAAI,CAAC;IACzB,MAAM,CAAC,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;IAC9B,MAAM,CAAC,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;IAC9B,MAAM,KAAK,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACnD,MAAM,IAAI,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAClD,MAAM,IAAI,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAClD,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,IAAI,MAAoC,CAAC;IACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;QAC9B,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC9B,IAAI,MAAM;YAAE,MAAM;QAClB,MAAM,EAAE,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;QACvG,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC;YACjC,MAAM,EAAE,GAAG,CAAC,KAAK,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;YAC7G,MAAM,CAAC,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,CAAC;YAC1B,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;YACV,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;YACV,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpB,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACb,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;gBAAE,SAAS;YAC9B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;gBACxB,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;gBACZ,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3B,CAAC;iBAAM,CAAC;gBACN,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC7B,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;gBAClB,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;YACpB,CAAC;QACH,CAAC;QACD,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACrB,IAAI,EAAE,CAAC;IACT,CAAC;IACD,MAAM,CAAC,GAAG,OAAO,GAAG,IAAI,CAAC;IACzB,OAAO;QACL,OAAO;QACP,IAAI,EAAE,IAAI;QACV,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;QAChB,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;QAChB,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;QACxB,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;QACtB,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;QACtB,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC;KACvC,CAAC;AACJ,CAAC;AAyCD,SAAS,GAAG,CAAC,CAAoB,EAAE,KAAa;IAC9C,KAAK,MAAM,CAAC,IAAI,CAAC;QAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK;YAAE,OAAO,IAAI,CAAC;IAC/E,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,OAAO,CAAC,EAAY,EAAE,EAAY,EAAE,GAAW,EAAE,MAAkB;IAC1E,OAAO,EAAE,CAAC,EAAE,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;AAC/F,CAAC;AAED,SAAS,KAAK,CAAC,IAAgB;IAC7B,IAAI,IAAI,CAAC,MAAM,EAAE,OAAO,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE;QAAE,MAAM,IAAI,oBAAoB,EAAE,CAAC;AACrF,CAAC;AAED,8BAA8B;AAC9B,SAAS,OAAO,CAAC,CAAS,EAAE,CAAS,EAAE,CAAoB,EAAE,CAAS;IACpE,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;IACnB,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACnB,MAAM,EAAE,GAAG,CAAC,CACV,CAAC,GAAG,CAAC,GAAG,CAAC,EACT,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAI,EAAE,CAAC,CAAC,CAAY,CAAC,CACjD,CAAC;IACF,MAAM,EAAE,GAAG,CAAC,CACV,CAAC,GAAG,CAAC,GAAG,CAAC,EACT,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAI,EAAE,CAAC,CAAC,CAAY,CAAC,CACjD,CAAC;IACF,MAAM,EAAE,GAAG,CAAC,CACV,CAAC,GAAG,CAAC,EACL,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,GAAI,EAAE,CAAC,CAAC,CAAY,CAAC,CAC3C,CAAC;IACF,MAAM,GAAG,GAAG,IAAI,KAAK,CAAS,CAAC,CAAC,CAAC;IACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;QACxB,GAAG,CAAC,CAAC,CAAC;YACH,CAAC,CAAC,CAAC,CAAY;gBAChB,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAE,EAAE,CAAC,CAAC,CAAY,GAAG,CAAC,GAAI,EAAE,CAAC,CAAC,CAAY,GAAG,CAAC,GAAI,EAAE,CAAC,CAAC,CAAY,GAAI,EAAE,CAAC,CAAC,CAAY,CAAC,CAAC;IACtG,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAC1B,CAAS,EACT,EAAU,EACV,EAAqB,EACrB,IAAY,EACZ,UAAsB,EAAE;IAExB,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,GAAG,CAAC;IACnC,WAAW,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IAC/B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,MAAM,IAAI,UAAU,CAAC,4BAA4B,CAAC,CAAC;IACvG,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC;IACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,IAAI,MAAM,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,4CAA4C;IAC9G,MAAM,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC;IACtB,MAAM,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,KAAK,CAAC;IAC9B,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,MAAM,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;IACnB,IAAI,CAAC,GAAsB,EAAE,CAAC;IAC9B,IAAI,MAAM,GAAe,KAAK,CAAC;IAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/B,IAAI,EAAE,CAAC,MAAM,IAAI,QAAQ,EAAE,CAAC;YAC1B,MAAM,GAAG,UAAU,CAAC;YACpB,MAAM;QACR,CAAC;QACD,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC;YAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QACjC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;QACrB,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACjC,IAAI,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC;YACrB,MAAM,GAAG,QAAQ,CAAC;YAClB,MAAM;QACR,CAAC;QACD,CAAC,GAAG,IAAI,CAAC;QACT,MAAM,EAAE,GAAG,CAAC,KAAK,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QACrD,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACZ,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACd,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC;YAC1B,MAAM,GAAG,SAAS,CAAC;YACnB,MAAM;QACR,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;AACtC,CAAC;AAED,sBAAsB;AACtB,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACjD,MAAM,CAAC,GAAe;IACpB,EAAE;IACF,CAAC,CAAC,GAAG,CAAC,CAAC;IACP,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;IAC3B,CAAC,KAAK,GAAG,IAAI,EAAE,CAAC,KAAK,GAAG,IAAI,EAAE,KAAK,GAAG,IAAI,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC;IACvD,CAAC,IAAI,GAAG,IAAI,EAAE,CAAC,GAAG,GAAG,EAAE,EAAE,KAAK,GAAG,IAAI,EAAE,EAAE,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,KAAK,CAAC;IAC/D,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC,EAAE,GAAG,GAAG,IAAI,EAAE,GAAG,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,IAAI,EAAE,EAAE,GAAG,EAAE,CAAC;CAC5D,CAAC;AACF,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC,EAAE,GAAG,GAAG,IAAI,EAAE,GAAG,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;AAC1E,MAAM,EAAE,GAAG,CAAC,IAAI,GAAG,KAAK,EAAE,CAAC,EAAE,IAAI,GAAG,KAAK,EAAE,GAAG,GAAG,GAAG,EAAE,CAAC,KAAK,GAAG,MAAM,EAAE,GAAG,GAAG,IAAI,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAE3F;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAC/B,CAAS,EACT,EAAU,EACV,EAAqB,EACrB,IAAY,EACZ,UAA8B,EAAE;IAEhC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,MAAM,IAAI,UAAU,CAAC,4BAA4B,CAAC,CAAC;IACvG,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;IACjC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAChC,MAAM,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC;IACtB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC;IAClC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC;IAClC,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC;IACrC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,MAAM,CAAC;IAC5C,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,IAAI,GAAG,KAAK,CAAC;IAC1C,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC;IAClC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,IAAI,IAAI,GAAG,GAAG,EAAE,IAAI,CAAC,CAAC;IACjD,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,MAAM,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;IACnB,IAAI,IAAI,KAAK,CAAC;QAAE,OAAO,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;IACnD,IAAI,CAAC,GAAG,EAAE,CAAC;IACX,IAAI,CAAC,GAAsB,EAAE,CAAC;IAC9B,IAAI,MAAM,GAAe,KAAK,CAAC;IAC/B,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,IAAI,QAAQ,GAAG,MAAM,CAAC,iBAAiB,CAAC;IACxC,OAAO,GAAG,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5B,IAAI,EAAE,CAAC,MAAM,IAAI,QAAQ,IAAI,UAAU,EAAE,GAAG,QAAQ,GAAG,EAAE,EAAE,CAAC;YAC1D,MAAM,GAAG,UAAU,CAAC;YACpB,MAAM;QACR,CAAC;QACD,IAAI,UAAU,GAAG,EAAE,KAAK,CAAC;YAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QAC1C,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC;YACb,MAAM,GAAG,cAAc,CAAC;YACxB,MAAM;QACR,CAAC;QACD,MAAM,IAAI,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7C,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACzC,MAAM,IAAI,GAAG,GAAG,GAAG,EAAE,CAAC;QACtB,MAAM,CAAC,GAA6B,EAAE,CAAC;QACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;gBACzB,IAAI,GAAG,GAAG,CAAC,CAAC;gBACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;oBAAE,GAAG,IAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAY,GAAK,CAAC,CAAC,CAAC,CAAuB,CAAC,CAAC,CAAY,CAAC;gBACtG,OAAO,CAAC,GAAG,IAAI,GAAG,GAAG,CAAC;YACxB,CAAC,CAAC,CAAC;YACH,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAI,CAAC,CAAC,CAAC,CAAY,GAAG,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;QAC9C,CAAC;QACD,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CACd,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,GAAK,CAAC,CAAC,CAAC,CAAuB,CAAC,CAAC,CAAY,EAAE,CAAC,CAAC,CACvG,CAAC;QACF,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CACd,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,GAAK,CAAC,CAAC,CAAC,CAAuB,CAAC,CAAC,CAAY,EAAE,CAAC,CAAC,CACvG,CAAC;QACF,IAAI,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,CAAC;YACnB,wEAAwE;YACxE,iGAAiG;YACjG,6CAA6C;YAC7C,IAAI,QAAQ,GAAG,EAAE;gBAAE,QAAQ,GAAG,CAAC,CAAC;YAChC,QAAQ,GAAG,CAAC,CAAC;YACb,IAAI,EAAE,QAAQ,GAAG,EAAE,IAAI,EAAE,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;gBACtC,MAAM,GAAG,QAAQ,CAAC;gBAClB,MAAM;YACR,CAAC;YACD,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACX,SAAS;QACX,CAAC;QACD,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7B,MAAM,EAAE,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAW,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAW,CAAC,CAAC,CAAC;YACvF,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAE,EAAE,CAAC,CAAC,CAAY,GAAI,EAAE,CAAC,CAAC,CAAY,CAAC,GAAG,EAAE,CAAC,CAAC;QAC5E,CAAC;QACD,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC;YAC3B,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;YAC3B,CAAC,GAAG,EAAE,CAAC;YACP,QAAQ,EAAE,CAAC;YACX,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACX,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YACd,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;gBACzB,MAAM,GAAG,SAAS,CAAC;gBACnB,MAAM;YACR,CAAC;QACH,CAAC;QACD,MAAM,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAC7E,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,GAAG,MAAM,CAAC,CAAC;IAClC,CAAC;IACD,OAAO,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;AACtC,CAAC;AAUD;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CACjC,CAAQ,EACR,EAAU,EACV,EAAU,EACV,OAAe,EACf,UAAgC,EAAE;IAElC,WAAW,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACjC,MAAM,GAAG,GAAW,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAW,CAAC,CAAC,CAAC;IACrD,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,IAAI,GAAG,CAAC;IACpC,MAAM,GAAG,GAAG,CAAC,GAAW,EAAE,EAAE;QAC1B,MAAM,CAAC,GAAG,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;QACxC,OAAO,OAAO,CAAC,MAAM,KAAK,KAAK;YAC7B,CAAC,CAAC,YAAY,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,GAAG,EAAE,CAAC;YACzE,CAAC,CAAC,iBAAiB,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;IAC/C,CAAC,CAAC;IACF,MAAM,EAAE,GAAa,EAAE,CAAC;IACxB,MAAM,EAAE,GAAa,EAAE,CAAC;IACxB,IAAI,YAAY,GAAe,KAAK,CAAC;IACrC,IAAI,WAAW,GAAe,KAAK,CAAC;IACpC,4GAA4G;IAC5G,IAAI,EAAE,GAAG,OAAO,CAAC,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QACzC,MAAM,IAAI,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;QAC1D,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;QACzB,IAAI,MAAM,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;YAC5B,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;YACxB,OAAO,EAAE,CAAC,EAAE,IAAI,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC;QAC7F,CAAC;QACD,EAAE,GAAG,IAAI,CAAC;QACV,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAW,CAAC;IAC5C,CAAC;IACD,IAAI,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QACrB,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC9B,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACzC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAW,CAAC,CAAC;YAC7B,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAW,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IACD,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACZ,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACZ,IAAI,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QACrB,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC7B,WAAW,GAAG,GAAG,CAAC,MAAM,CAAC;QACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;YACnC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAW,CAAC,CAAC;YAC5B,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAW,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IACD,OAAO,EAAE,CAAC,EAAE,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,YAAY,EAAE,WAAW,EAAE,CAAC;AAC3F,CAAC;AAyBD,+EAA+E;AAC/E,MAAM,UAAU,SAAS,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS;IACvD,MAAM,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACvD,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IACvB,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IACvB,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,OAAO;QACL,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACtD,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;KACvD,CAAC;AACJ,CAAC;AAED,sHAAsH;AACtH,MAAM,UAAU,kBAAkB,CAChC,CAAuC,EACvC,SAAS,GAAG,IAAI;IAEhB,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7B,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAClD,MAAM,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC;IAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IACvD,IAAI,WAAiD,CAAC;IACtD,IAAI,IAAI,IAAI,CAAC,EAAE,CAAC;QACd,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1B,WAAW,GAAG;YACZ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACjB,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;SAClB,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC/B,WAAW,GAAG;YACZ,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;YACX,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;SACb,CAAC;IACJ,CAAC;IACD,IAAI,IAAoB,CAAC;IACzB,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,SAAS,GAAG,KAAK;QAAE,IAAI,GAAG,gBAAgB,CAAC;SAC3D,IAAI,GAAG,GAAG,CAAC;QAAE,IAAI,GAAG,QAAQ,CAAC;SAC7B,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,SAAS,GAAG,KAAK;QAAE,IAAI,GAAG,QAAQ,CAAC;SACvD,IAAI,IAAI,GAAG,SAAS,GAAG,KAAK,GAAG,KAAK;QAAE,IAAI,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,eAAe,CAAC;SACtF,IAAI,IAAI,IAAI,CAAC,SAAS,GAAG,KAAK,GAAG,KAAK;QACzC,IAAI,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,gCAAgC,CAAC,CAAC,CAAC,kCAAkC,CAAC;;QACnF,IAAI,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,iBAAiB,CAAC;IACzD,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,WAAW,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;AAC5D,CAAC;AAsCD;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CACjC,CAAS,EACT,OAAe,EACf,OAAe,EACf,UAAgC,EAAE;IAElC,WAAW,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACjC,WAAW,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACjC,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC;IAC7B,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3D,WAAW,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAChC,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC1B,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC1C,MAAM,CAAC,GAAG,OAAO,GAAG,IAAI,CAAC;IACzB,MAAM,EAAE,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;IAC/B,MAAM,EAAE,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;IAC/B,MAAM,CAAC,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC/C,MAAM,CAAC,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC/C,MAAM,GAAG,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACjD,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,IAAI,MAAoC,CAAC;IACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;QAC9B,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC9B,IAAI,MAAM;YAAE,MAAM;QAClB,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;QACtG,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC;YACjC,MAAM,CAAC,GAAG,CAAC,KAAK,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;YAC5G,MAAM,CAAC,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,CAAC;YAC1B,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACV,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACV,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAClB,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACnD,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBACZ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBACZ,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;QACD,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACrB,IAAI,EAAE,CAAC;IACT,CAAC;IACD,MAAM,CAAC,GAAG,OAAO,GAAG,IAAI,CAAC;IACzB,MAAM,GAAG,GAAkB;QACzB,KAAK,EAAE;YACL,OAAO;YACP,IAAI,EAAE,IAAI;YACV,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;YACjB,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;YACjB,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;YAChB,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;YAChB,SAAS,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;SAC3B;QACD,YAAY,EAAE,EAAE;QAChB,WAAW,EAAE,EAAE;QACf,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC;KACvC,CAAC;IACF,IAAI,MAAM;QAAE,OAAO,GAAG,CAAC;IAEvB,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IACpC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IACtC,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,IAAI,GAAG,CAAC;IAClC,MAAM,MAAM,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,EAAE,CACtC,CAAC,IAAI,OAAO,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC;QAC1B,CAAC,IAAI,OAAO,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC;QAC1B,CAAC,IAAI,OAAO,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG;QAC5B,CAAC,IAAI,OAAO,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IAC/B,MAAM,GAAG,GAAW,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE;QAC5B,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAW,EAAE,CAAC,CAAC,CAAC,CAAW,CAAC,CAAC;QAC5C,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACtB,CAAC,CAAC;IACF,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC;IAChC,MAAM,KAAK,GACT,OAAO,CAAC,KAAK;QACb,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAoB,EAAE,CAAC;YACrD,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC;YACvC,OAAO,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC;SACpD,CAAC,CAAC;IACL,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,CAAC,GAAuB;YAC5B,GAAG,OAAO;YACV,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAW,EAAE,CAAC,CAAC,CAAC,CAAW,CAAC;YACxD,IAAI,EAAE,IAAI,GAAG,EAAE;SAChB,CAAC;QACF,MAAM,GAAG,GAAG,iBAAiB,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACrD,MAAM,GAAG,GAAG,iBAAiB,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACtD,MAAM,EAAE,GAAa,EAAE,CAAC;QACxB,MAAM,EAAE,GAAa,EAAE,CAAC;QACxB,KAAK,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACxC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAW,CAAC,CAAC;YAChC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAW,CAAC,CAAC;QACtC,CAAC;QACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;YACnC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAW,CAAC,CAAC;YAChC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAW,CAAC,CAAC;QACtC,CAAC;QACD,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC;YACpB,IAAI;YACJ,CAAC,EAAE,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,CAAC,EAAE,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,YAAY,EAAE,GAAG,CAAC,MAAM;YACxB,WAAW,EAAE,GAAG,CAAC,MAAM;SACxB,CAAC,CAAC;IACL,CAAC;IAED,MAAM,MAAM,GAAG,OAAO,CAAC,gBAAgB,IAAI,CAAC,CAAC;IAC7C,MAAM,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC9C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAChC,IAAI,CAAC,GAAG,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC;YAC/C,IAAI,CAAC,GAAG,OAAO,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC;YACjD,IAAI,EAAE,GAAG,KAAK,CAAC;YACf,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;gBAC/B,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBAClB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAAE,MAAM;gBAC5D,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC7B,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAClD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK;oBAAE,MAAM;gBAC1D,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;gBACnD,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;gBACpD,CAAC,IAAI,EAAE,CAAC;gBACR,CAAC,IAAI,EAAE,CAAC;gBACR,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC;oBAC7B,EAAE,GAAG,IAAI,CAAC;oBACV,MAAM;gBACR,CAAC;YACH,CAAC;YACD,IAAI,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC,GAAG;gBAAE,SAAS;YAC/G,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAClB,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI;gBAAE,SAAS;YAC5C,IAAI,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;gBAAE,SAAS;YAClG,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAC7B,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACxE,CAAC;IACH,CAAC;IACD,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACvD,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,53 @@
1
+ import type { Domain, Samples } from "./sample.ts";
2
+ /** Evaluate `sum a_k (x - x0)^k` for `k <= order` by Horner's rule. */
3
+ export declare function evaluateTaylor(coefficients: ArrayLike<number>, x0: number, x: number, order?: number): number;
4
+ export interface PartialSumCurves {
5
+ /** The orders requested, ascending as given. */
6
+ orders: number[];
7
+ /** One `Samples` per order; `y` is `NaN` where the partial sum is not finite (gap rules as in 1D). */
8
+ curves: Samples[];
9
+ }
10
+ /**
11
+ * Taylor partial sums of the given coefficients (`a_k = f^(k)(x0) / k!`) about `x0`, one curve per requested
12
+ * order, over a uniform grid. With `@johnhenry/math`, `taylorCoefficients` in `@johnhenry/math-sample/expr`
13
+ * produces the coefficients from an expression.
14
+ */
15
+ export declare function sampleTaylorPartialSums(coefficients: ArrayLike<number>, x0: number, domain: Domain, orders: number[], samples?: number): PartialSumCurves;
16
+ /**
17
+ * Partial sums of a function series `sum_{k=from}^{n} term(k, x)`, one curve per order `n`, computed
18
+ * in a single pass over `k` so each term is evaluated once per sample.
19
+ */
20
+ export declare function sampleSeriesPartialSums(term: (k: number, x: number) => number, from: number, domain: Domain, orders: number[], samples?: number): PartialSumCurves;
21
+ export interface NumericSeries {
22
+ /** `partial[n - from]` is the sum of terms `from..n`. */
23
+ partial: Float64Array;
24
+ from: number;
25
+ /** Aitken delta-squared extrapolation of the last three partial sums; `NaN` when it cannot be formed. A hint, not a proof of convergence. */
26
+ limitEstimate: number;
27
+ }
28
+ /** Partial sums of the numeric series `sum_{k=from}^{to} term(k)`, with an Aitken limit estimate. */
29
+ export declare function partialSums(term: (k: number) => number, from: number, to: number): NumericSeries;
30
+ export interface FourierCoefficients {
31
+ /** Half-period `L`: the function has period `2L`. */
32
+ halfPeriod: number;
33
+ /** The centre of the period interval used `[center - L, center + L]`. */
34
+ center: number;
35
+ /** Constant term `a0 / 2` is `a0 / 2`; `a0` is `(1/L) * integral f`. */
36
+ a0: number;
37
+ /** `a[k - 1]` multiplies `cos(k pi (x - center) / L)`. */
38
+ a: Float64Array;
39
+ /** `b[k - 1]` multiplies `sin(k pi (x - center) / L)`. */
40
+ b: Float64Array;
41
+ }
42
+ /**
43
+ * Fourier coefficients of `f` on `[a, b]` taken as one period, by the midpoint rule on `samples` points
44
+ * (exact for trig polynomials below the Nyquist order, being a full-period rule; for a function with jumps the coefficients carry
45
+ * ordinary O(1/samples) quadrature error). `terms` is the highest harmonic. Trig form:
46
+ * `a0/2 + sum a_k cos(k w x) + b_k sin(k w x)` about the interval centre.
47
+ */
48
+ export declare function fourierCoefficients(f: (x: number) => number, period: Domain, terms: number, samples?: number): FourierCoefficients;
49
+ /** Value of the Fourier partial sum with harmonics up to `n` at `x`. */
50
+ export declare function evaluateFourier(c: FourierCoefficients, x: number, n?: number): number;
51
+ /** One curve per harmonic count in `orders` (0 = just the constant term). */
52
+ export declare function sampleFourierPartialSums(c: FourierCoefficients, domain: Domain, orders: number[], samples?: number): PartialSumCurves;
53
+ //# sourceMappingURL=series.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"series.d.ts","sourceRoot":"","sources":["../src/series.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEnD,uEAAuE;AACvE,wBAAgB,cAAc,CAC5B,YAAY,EAAE,SAAS,CAAC,MAAM,CAAC,EAC/B,EAAE,EAAE,MAAM,EACV,CAAC,EAAE,MAAM,EACT,KAAK,SAA0B,GAC9B,MAAM,CAKR;AAED,MAAM,WAAW,gBAAgB;IAC/B,gDAAgD;IAChD,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,sGAAsG;IACtG,MAAM,EAAE,OAAO,EAAE,CAAC;CACnB;AA+BD;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,YAAY,EAAE,SAAS,CAAC,MAAM,CAAC,EAC/B,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EAAE,EAChB,OAAO,SAAM,GACZ,gBAAgB,CAUlB;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,KAAK,MAAM,EACtC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EAAE,EAChB,OAAO,SAAM,GACZ,gBAAgB,CAclB;AAED,MAAM,WAAW,aAAa;IAC5B,yDAAyD;IACzD,OAAO,EAAE,YAAY,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,6IAA6I;IAC7I,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,qGAAqG;AACrG,wBAAgB,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,aAAa,CAkBhG;AAED,MAAM,WAAW,mBAAmB;IAClC,qDAAqD;IACrD,UAAU,EAAE,MAAM,CAAC;IACnB,yEAAyE;IACzE,MAAM,EAAE,MAAM,CAAC;IACf,wEAAwE;IACxE,EAAE,EAAE,MAAM,CAAC;IACX,0DAA0D;IAC1D,CAAC,EAAE,YAAY,CAAC;IAChB,0DAA0D;IAC1D,CAAC,EAAE,YAAY,CAAC;CACjB;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,EACxB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,OAAO,SAAO,GACb,mBAAmB,CAyBrB;AAED,wEAAwE;AACxE,wBAAgB,eAAe,CAAC,CAAC,EAAE,mBAAmB,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,SAAa,GAAG,MAAM,CASzF;AAED,6EAA6E;AAC7E,wBAAgB,wBAAwB,CACtC,CAAC,EAAE,mBAAmB,EACtB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EAAE,EAChB,OAAO,SAAM,GACZ,gBAAgB,CASlB"}