@triforge/fluid-core 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/FLIPSimulator.d.ts +98 -0
- package/dist/FLIPSimulator.d.ts.map +1 -0
- package/dist/FLIPSimulator.js +404 -0
- package/dist/FLIPSimulator.js.map +1 -0
- package/dist/FluidEmitter.d.ts +35 -0
- package/dist/FluidEmitter.d.ts.map +1 -0
- package/dist/FluidEmitter.js +35 -0
- package/dist/FluidEmitter.js.map +1 -0
- package/dist/MACGrid.d.ts +58 -0
- package/dist/MACGrid.d.ts.map +1 -0
- package/dist/MACGrid.js +154 -0
- package/dist/MACGrid.js.map +1 -0
- package/dist/MarchingCubes.d.ts +40 -0
- package/dist/MarchingCubes.d.ts.map +1 -0
- package/dist/MarchingCubes.js +416 -0
- package/dist/MarchingCubes.js.map +1 -0
- package/dist/SPHSimulator.d.ts +139 -0
- package/dist/SPHSimulator.d.ts.map +1 -0
- package/dist/SPHSimulator.js +393 -0
- package/dist/SPHSimulator.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1742 -0
- package/dist/index.js.map +1 -0
- package/package.json +51 -0
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MACGrid — Marker-And-Cell staggered velocity grid.
|
|
3
|
+
*
|
|
4
|
+
* Velocity components are stored at face centres (staggered):
|
|
5
|
+
* u[i][j][k] — X-velocity at face (i-½, j, k)
|
|
6
|
+
* v[i][j][k] — Y-velocity at face (i, j-½, k)
|
|
7
|
+
* w[i][j][k] — Z-velocity at face (i, j, k-½)
|
|
8
|
+
* Pressure p[i][j][k] is at cell centres.
|
|
9
|
+
*
|
|
10
|
+
* Grid cell (i,j,k) covers world-space region:
|
|
11
|
+
* [ox + i*h, ox + (i+1)*h] × [oy + j*h, ...] × [oz + k*h, ...]
|
|
12
|
+
*/
|
|
13
|
+
export declare class MACGrid {
|
|
14
|
+
readonly nx: number;
|
|
15
|
+
readonly ny: number;
|
|
16
|
+
readonly nz: number;
|
|
17
|
+
readonly h: number;
|
|
18
|
+
readonly ox: number;
|
|
19
|
+
readonly oy: number;
|
|
20
|
+
readonly oz: number;
|
|
21
|
+
u: Float64Array;
|
|
22
|
+
v: Float64Array;
|
|
23
|
+
w: Float64Array;
|
|
24
|
+
uOld: Float64Array;
|
|
25
|
+
vOld: Float64Array;
|
|
26
|
+
wOld: Float64Array;
|
|
27
|
+
uW: Float64Array;
|
|
28
|
+
vW: Float64Array;
|
|
29
|
+
wW: Float64Array;
|
|
30
|
+
pressure: Float64Array;
|
|
31
|
+
cellType: Uint8Array;
|
|
32
|
+
constructor(nx: number, ny: number, nz: number, h: number, ox?: number, oy?: number, oz?: number);
|
|
33
|
+
/** Flat index for cell (i,j,k). */
|
|
34
|
+
idx(i: number, j: number, k: number): number;
|
|
35
|
+
/** Flat index for u-face (i,j,k) — grid is (nx+1)*ny*nz. */
|
|
36
|
+
uIdx(i: number, j: number, k: number): number;
|
|
37
|
+
/** Flat index for v-face (i,j,k) — grid is nx*(ny+1)*nz. */
|
|
38
|
+
vIdx(i: number, j: number, k: number): number;
|
|
39
|
+
/** Flat index for w-face (i,j,k) — grid is nx*ny*(nz+1). */
|
|
40
|
+
wIdx(i: number, j: number, k: number): number;
|
|
41
|
+
/** Trilinear interpolation of u-velocity at world position (wx,wy,wz). */
|
|
42
|
+
interpU(wx: number, wy: number, wz: number): number;
|
|
43
|
+
/** Trilinear interpolation of v-velocity at world position. */
|
|
44
|
+
interpV(wx: number, wy: number, wz: number): number;
|
|
45
|
+
/** Trilinear interpolation of w-velocity at world position. */
|
|
46
|
+
interpW(wx: number, wy: number, wz: number): number;
|
|
47
|
+
private _interp;
|
|
48
|
+
clearVelocities(): void;
|
|
49
|
+
saveVelocities(): void;
|
|
50
|
+
normalizeWeights(): void;
|
|
51
|
+
/** Mark border cells as solid, fluid cells from a predicate. */
|
|
52
|
+
markCells(isFluid: (i: number, j: number, k: number) => boolean): void;
|
|
53
|
+
/** Enforce solid (no-through) boundary: zero normal velocity at solid faces. */
|
|
54
|
+
enforceBoundary(): void;
|
|
55
|
+
/** Apply gravity to grid v velocities over timestep dt. */
|
|
56
|
+
applyGravity(gx: number, gy: number, gz: number, dt: number): void;
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=MACGrid.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MACGrid.d.ts","sourceRoot":"","sources":["../src/MACGrid.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,qBAAa,OAAO;IAClB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,CAAC,EAAG,MAAM,CAAA;IACnB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IAGnB,CAAC,EAAE,YAAY,CAAA;IACf,CAAC,EAAE,YAAY,CAAA;IACf,CAAC,EAAE,YAAY,CAAA;IAGf,IAAI,EAAE,YAAY,CAAA;IAClB,IAAI,EAAE,YAAY,CAAA;IAClB,IAAI,EAAE,YAAY,CAAA;IAGlB,EAAE,EAAE,YAAY,CAAA;IAChB,EAAE,EAAE,YAAY,CAAA;IAChB,EAAE,EAAE,YAAY,CAAA;IAGhB,QAAQ,EAAE,YAAY,CAAA;IAGtB,QAAQ,EAAE,UAAU,CAAA;gBAER,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,SAAI,EAAE,EAAE,SAAI,EAAE,EAAE,SAAI;IAoBjF,mCAAmC;IACnC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM;IAI5C,4DAA4D;IAC5D,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM;IAI7C,4DAA4D;IAC5D,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM;IAI7C,4DAA4D;IAC5D,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM;IAM7C,0EAA0E;IAC1E,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM;IAKnD,+DAA+D;IAC/D,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM;IAKnD,+DAA+D;IAC/D,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM;IAKnD,OAAO,CAAC,OAAO;IAuBf,eAAe,IAAI,IAAI;IAKvB,cAAc,IAAI,IAAI;IAMtB,gBAAgB,IAAI,IAAI;IAMxB,gEAAgE;IAChE,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,KAAK,OAAO,GAAG,IAAI;IAUtE,gFAAgF;IAChF,eAAe,IAAI,IAAI;IAmBvB,2DAA2D;IAC3D,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI;CASnE"}
|
package/dist/MACGrid.js
ADDED
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MACGrid — Marker-And-Cell staggered velocity grid.
|
|
3
|
+
*
|
|
4
|
+
* Velocity components are stored at face centres (staggered):
|
|
5
|
+
* u[i][j][k] — X-velocity at face (i-½, j, k)
|
|
6
|
+
* v[i][j][k] — Y-velocity at face (i, j-½, k)
|
|
7
|
+
* w[i][j][k] — Z-velocity at face (i, j, k-½)
|
|
8
|
+
* Pressure p[i][j][k] is at cell centres.
|
|
9
|
+
*
|
|
10
|
+
* Grid cell (i,j,k) covers world-space region:
|
|
11
|
+
* [ox + i*h, ox + (i+1)*h] × [oy + j*h, ...] × [oz + k*h, ...]
|
|
12
|
+
*/
|
|
13
|
+
export class MACGrid {
|
|
14
|
+
constructor(nx, ny, nz, h, ox = 0, oy = 0, oz = 0) {
|
|
15
|
+
this.nx = nx;
|
|
16
|
+
this.ny = ny;
|
|
17
|
+
this.nz = nz;
|
|
18
|
+
this.h = h;
|
|
19
|
+
this.ox = ox;
|
|
20
|
+
this.oy = oy;
|
|
21
|
+
this.oz = oz;
|
|
22
|
+
this.u = new Float64Array((nx + 1) * ny * nz);
|
|
23
|
+
this.v = new Float64Array(nx * (ny + 1) * nz);
|
|
24
|
+
this.w = new Float64Array(nx * ny * (nz + 1));
|
|
25
|
+
this.uOld = new Float64Array(this.u.length);
|
|
26
|
+
this.vOld = new Float64Array(this.v.length);
|
|
27
|
+
this.wOld = new Float64Array(this.w.length);
|
|
28
|
+
this.uW = new Float64Array(this.u.length);
|
|
29
|
+
this.vW = new Float64Array(this.v.length);
|
|
30
|
+
this.wW = new Float64Array(this.w.length);
|
|
31
|
+
this.pressure = new Float64Array(nx * ny * nz);
|
|
32
|
+
this.cellType = new Uint8Array(nx * ny * nz);
|
|
33
|
+
}
|
|
34
|
+
// ── Index helpers ─────────────────────────────────────────────────────────
|
|
35
|
+
/** Flat index for cell (i,j,k). */
|
|
36
|
+
idx(i, j, k) {
|
|
37
|
+
return i + this.nx * (j + this.ny * k);
|
|
38
|
+
}
|
|
39
|
+
/** Flat index for u-face (i,j,k) — grid is (nx+1)*ny*nz. */
|
|
40
|
+
uIdx(i, j, k) {
|
|
41
|
+
return i + (this.nx + 1) * (j + this.ny * k);
|
|
42
|
+
}
|
|
43
|
+
/** Flat index for v-face (i,j,k) — grid is nx*(ny+1)*nz. */
|
|
44
|
+
vIdx(i, j, k) {
|
|
45
|
+
return i + this.nx * (j + (this.ny + 1) * k);
|
|
46
|
+
}
|
|
47
|
+
/** Flat index for w-face (i,j,k) — grid is nx*ny*(nz+1). */
|
|
48
|
+
wIdx(i, j, k) {
|
|
49
|
+
return i + this.nx * (j + this.ny * k);
|
|
50
|
+
}
|
|
51
|
+
// ── Interpolation ─────────────────────────────────────────────────────────
|
|
52
|
+
/** Trilinear interpolation of u-velocity at world position (wx,wy,wz). */
|
|
53
|
+
interpU(wx, wy, wz) {
|
|
54
|
+
return this._interp(this.u, wx - this.ox, wy - this.oy - 0.5 * this.h, wz - this.oz - 0.5 * this.h, this.nx + 1, this.ny, this.nz);
|
|
55
|
+
}
|
|
56
|
+
/** Trilinear interpolation of v-velocity at world position. */
|
|
57
|
+
interpV(wx, wy, wz) {
|
|
58
|
+
return this._interp(this.v, wx - this.ox - 0.5 * this.h, wy - this.oy, wz - this.oz - 0.5 * this.h, this.nx, this.ny + 1, this.nz);
|
|
59
|
+
}
|
|
60
|
+
/** Trilinear interpolation of w-velocity at world position. */
|
|
61
|
+
interpW(wx, wy, wz) {
|
|
62
|
+
return this._interp(this.w, wx - this.ox - 0.5 * this.h, wy - this.oy - 0.5 * this.h, wz - this.oz, this.nx, this.ny, this.nz + 1);
|
|
63
|
+
}
|
|
64
|
+
_interp(arr, lx, ly, lz, Nx, Ny, Nz) {
|
|
65
|
+
const h = this.h;
|
|
66
|
+
let fi = lx / h, fj = ly / h, fk = lz / h;
|
|
67
|
+
fi = Math.max(0, Math.min(Nx - 1.0001, fi));
|
|
68
|
+
fj = Math.max(0, Math.min(Ny - 1.0001, fj));
|
|
69
|
+
fk = Math.max(0, Math.min(Nz - 1.0001, fk));
|
|
70
|
+
const i0 = Math.floor(fi), i1 = i0 + 1;
|
|
71
|
+
const j0 = Math.floor(fj), j1 = j0 + 1;
|
|
72
|
+
const k0 = Math.floor(fk), k1 = k0 + 1;
|
|
73
|
+
const tx = fi - i0, ty = fj - j0, tz = fk - k0;
|
|
74
|
+
const idx = (i, j, k) => i + Nx * (j + Ny * k);
|
|
75
|
+
return (1 - tz) * ((1 - ty) * ((1 - tx) * arr[idx(i0, j0, k0)] + tx * arr[idx(i1, j0, k0)]) +
|
|
76
|
+
ty * ((1 - tx) * arr[idx(i0, j1, k0)] + tx * arr[idx(i1, j1, k0)])) +
|
|
77
|
+
tz * ((1 - ty) * ((1 - tx) * arr[idx(i0, j0, k1)] + tx * arr[idx(i1, j0, k1)]) +
|
|
78
|
+
ty * ((1 - tx) * arr[idx(i0, j1, k1)] + tx * arr[idx(i1, j1, k1)]));
|
|
79
|
+
}
|
|
80
|
+
// ── Utilities ─────────────────────────────────────────────────────────────
|
|
81
|
+
clearVelocities() {
|
|
82
|
+
this.u.fill(0);
|
|
83
|
+
this.v.fill(0);
|
|
84
|
+
this.w.fill(0);
|
|
85
|
+
this.uW.fill(0);
|
|
86
|
+
this.vW.fill(0);
|
|
87
|
+
this.wW.fill(0);
|
|
88
|
+
}
|
|
89
|
+
saveVelocities() {
|
|
90
|
+
this.uOld.set(this.u);
|
|
91
|
+
this.vOld.set(this.v);
|
|
92
|
+
this.wOld.set(this.w);
|
|
93
|
+
}
|
|
94
|
+
normalizeWeights() {
|
|
95
|
+
for (let i = 0; i < this.u.length; i++)
|
|
96
|
+
if (this.uW[i] > 0)
|
|
97
|
+
this.u[i] /= this.uW[i];
|
|
98
|
+
for (let i = 0; i < this.v.length; i++)
|
|
99
|
+
if (this.vW[i] > 0)
|
|
100
|
+
this.v[i] /= this.vW[i];
|
|
101
|
+
for (let i = 0; i < this.w.length; i++)
|
|
102
|
+
if (this.wW[i] > 0)
|
|
103
|
+
this.w[i] /= this.wW[i];
|
|
104
|
+
}
|
|
105
|
+
/** Mark border cells as solid, fluid cells from a predicate. */
|
|
106
|
+
markCells(isFluid) {
|
|
107
|
+
const { nx, ny, nz } = this;
|
|
108
|
+
for (let k = 0; k < nz; k++)
|
|
109
|
+
for (let j = 0; j < ny; j++)
|
|
110
|
+
for (let i = 0; i < nx; i++) {
|
|
111
|
+
const solid = i === 0 || i === nx - 1 || j === 0 || j === ny - 1 || k === 0 || k === nz - 1;
|
|
112
|
+
this.cellType[this.idx(i, j, k)] = solid ? 2 : (isFluid(i, j, k) ? 1 : 0);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
/** Enforce solid (no-through) boundary: zero normal velocity at solid faces. */
|
|
116
|
+
enforceBoundary() {
|
|
117
|
+
const { nx, ny, nz } = this;
|
|
118
|
+
// Left/right walls (i=0 and i=nx)
|
|
119
|
+
for (let k = 0; k < nz; k++)
|
|
120
|
+
for (let j = 0; j < ny; j++) {
|
|
121
|
+
this.u[this.uIdx(0, j, k)] = 0;
|
|
122
|
+
this.u[this.uIdx(nx, j, k)] = 0;
|
|
123
|
+
}
|
|
124
|
+
// Bottom/top walls
|
|
125
|
+
for (let k = 0; k < nz; k++)
|
|
126
|
+
for (let i = 0; i < nx; i++) {
|
|
127
|
+
this.v[this.vIdx(i, 0, k)] = 0;
|
|
128
|
+
this.v[this.vIdx(i, ny, k)] = 0;
|
|
129
|
+
}
|
|
130
|
+
// Front/back walls
|
|
131
|
+
for (let j = 0; j < ny; j++)
|
|
132
|
+
for (let i = 0; i < nx; i++) {
|
|
133
|
+
this.w[this.wIdx(i, j, 0)] = 0;
|
|
134
|
+
this.w[this.wIdx(i, j, nz)] = 0;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
/** Apply gravity to grid v velocities over timestep dt. */
|
|
138
|
+
applyGravity(gx, gy, gz, dt) {
|
|
139
|
+
const { nx, ny, nz } = this;
|
|
140
|
+
for (let k = 0; k < nz; k++)
|
|
141
|
+
for (let j = 0; j <= ny; j++)
|
|
142
|
+
for (let i = 0; i < nx; i++)
|
|
143
|
+
this.v[this.vIdx(i, j, k)] += gy * dt;
|
|
144
|
+
for (let k = 0; k < nz; k++)
|
|
145
|
+
for (let j = 0; j < ny; j++)
|
|
146
|
+
for (let i = 0; i <= nx; i++)
|
|
147
|
+
this.u[this.uIdx(i, j, k)] += gx * dt;
|
|
148
|
+
for (let k = 0; k <= nz; k++)
|
|
149
|
+
for (let j = 0; j < ny; j++)
|
|
150
|
+
for (let i = 0; i < nx; i++)
|
|
151
|
+
this.w[this.wIdx(i, j, k)] += gz * dt;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
//# sourceMappingURL=MACGrid.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MACGrid.js","sourceRoot":"","sources":["../src/MACGrid.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { BufferGeometry } from 'three';
|
|
2
|
+
export interface MarchingCubesOptions {
|
|
3
|
+
/** Grid resolution per side. Higher = more detail. Default 32. */
|
|
4
|
+
resolution?: number;
|
|
5
|
+
/** Iso-surface threshold. Default 0.5. */
|
|
6
|
+
isoLevel?: number;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* MarchingCubes — extracts an iso-surface from a scalar field.
|
|
10
|
+
* Used to turn SPH particle density fields into a mesh.
|
|
11
|
+
* Blender: Fluid > Surface.
|
|
12
|
+
*
|
|
13
|
+
* Usage:
|
|
14
|
+
* const mc = new MarchingCubes({ resolution: 32 })
|
|
15
|
+
* mc.setField(myDensityFn) // (x,y,z) => density
|
|
16
|
+
* const geo = mc.extract()
|
|
17
|
+
*/
|
|
18
|
+
export declare class MarchingCubes {
|
|
19
|
+
parameters: {
|
|
20
|
+
resolution: number;
|
|
21
|
+
isoLevel: number;
|
|
22
|
+
};
|
|
23
|
+
private _field;
|
|
24
|
+
private _boundsMin;
|
|
25
|
+
private _boundsMax;
|
|
26
|
+
constructor(opts?: MarchingCubesOptions);
|
|
27
|
+
/**
|
|
28
|
+
* Set the scalar field function: (x,y,z) → density.
|
|
29
|
+
* For SPH, use a metaball kernel summed over nearby particles.
|
|
30
|
+
*/
|
|
31
|
+
setField(fn: (x: number, y: number, z: number) => number): void;
|
|
32
|
+
/** Set world-space bounds of the sampling volume. */
|
|
33
|
+
setBounds(min: [number, number, number], max: [number, number, number]): void;
|
|
34
|
+
/**
|
|
35
|
+
* Sample the field and extract the iso-surface as a BufferGeometry.
|
|
36
|
+
* Returns null if no field is set.
|
|
37
|
+
*/
|
|
38
|
+
extract(): BufferGeometry | null;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=MarchingCubes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MarchingCubes.d.ts","sourceRoot":"","sources":["../src/MarchingCubes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAmB,MAAM,OAAO,CAAA;AAyTvD,MAAM,WAAW,oBAAoB;IACnC,kEAAkE;IAClE,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED;;;;;;;;;GASG;AACH,qBAAa,aAAa;IACxB,UAAU,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAA;IAEpD,OAAO,CAAC,MAAM,CAA6D;IAC3E,OAAO,CAAC,UAAU,CAAqC;IACvD,OAAO,CAAC,UAAU,CAAqC;gBAE3C,IAAI,GAAE,oBAAyB;IAO3C;;;OAGG;IACH,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI;IAI/D,qDAAqD;IACrD,SAAS,CAAC,GAAG,EAAE,CAAC,MAAM,EAAC,MAAM,EAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,MAAM,EAAC,MAAM,EAAC,MAAM,CAAC,GAAG,IAAI;IAKzE;;;OAGG;IACH,OAAO,IAAI,cAAc,GAAG,IAAI;CA8EjC"}
|