helixmind 0.2.25 → 0.2.26
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template.d.ts","sourceRoot":"","sources":["../../../src/cli/brain/template.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"template.d.ts","sourceRoot":"","sources":["../../../src/cli/brain/template.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CA6gE3D"}
|
|
@@ -593,16 +593,17 @@ const EDGE_COLORS = {
|
|
|
593
593
|
belongs_to: '#ff6600', part_of: '#ff6600', supersedes: '#ff4444',
|
|
594
594
|
default: '#334466',
|
|
595
595
|
};
|
|
596
|
-
//
|
|
597
|
-
//
|
|
598
|
-
//
|
|
596
|
+
// V5: OG Chandelier Brain — iconic shape + modern rendering + 3D spiral spread
|
|
597
|
+
// Shape: small/dim at top (deep archive) → large/bright at bottom (focus)
|
|
598
|
+
// Activity BOOSTS brightness (active = brighter, not dimmer)
|
|
599
|
+
// cx/cz: spiral center offsets for 3D depth
|
|
599
600
|
const SPATIAL = {
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
3: { iR:
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
6: { iR:
|
|
601
|
+
5: { iR: 8, oR: 110, yBase: 420, yS: 70, size: 18, pulse: 0.3, activity: 0.3, cx: 0, cz: 0 },
|
|
602
|
+
4: { iR: 12, oR: 180, yBase: 250, yS: 80, size: 24, pulse: 0.6, activity: 0.5, cx: 30, cz: 20 },
|
|
603
|
+
3: { iR: 18, oR: 260, yBase: 60, yS: 90, size: 30, pulse: 1.0, activity: 0.7, cx: -25, cz: 40 },
|
|
604
|
+
2: { iR: 25, oR: 340, yBase: -140, yS: 100, size: 34, pulse: 1.5, activity: 0.85, cx: -45, cz: -15 },
|
|
605
|
+
1: { iR: 35, oR: 430, yBase: -360, yS: 110, size: 40, pulse: 2.2, activity: 1.0, cx: -15, cz: -40 },
|
|
606
|
+
6: { iR: 40, oR: 470, yBase: -560, yS: 110, size: 34, pulse: 0.8, activity: 0.75, cx: 40, cz: -30 },
|
|
606
607
|
};
|
|
607
608
|
const MAX_RENDERED_EDGES = 8000; // cap for performance + clarity
|
|
608
609
|
|
|
@@ -617,10 +618,10 @@ document.body.prepend(renderer.domElement);
|
|
|
617
618
|
|
|
618
619
|
const scene = new THREE.Scene();
|
|
619
620
|
scene.background = new THREE.Color('#030308');
|
|
620
|
-
scene.fog = new THREE.FogExp2('#030308', 0.
|
|
621
|
+
scene.fog = new THREE.FogExp2('#030308', 0.00015);
|
|
621
622
|
|
|
622
623
|
const camera = new THREE.PerspectiveCamera(50, window.innerWidth / window.innerHeight, 1, 12000);
|
|
623
|
-
camera.position.set(
|
|
624
|
+
camera.position.set(500, 300, 750);
|
|
624
625
|
|
|
625
626
|
const controls = new OrbitControls(camera, renderer.domElement);
|
|
626
627
|
controls.target.set(0, 0, 0);
|
|
@@ -673,12 +674,11 @@ const nodeMat = new THREE.ShaderMaterial({
|
|
|
673
674
|
void main(){
|
|
674
675
|
vColor = aColor;
|
|
675
676
|
vActivity = aActivity;
|
|
676
|
-
float breath = 1.0 + sin(uTime * aPulse + position.x * .008 + position.z * .006) * (.
|
|
677
|
+
float breath = 1.0 + sin(uTime * aPulse + position.x * .008 + position.z * .006) * (.06 + aActivity * .10);
|
|
677
678
|
vec3 pos = position;
|
|
678
|
-
|
|
679
|
-
pos.
|
|
680
|
-
pos.
|
|
681
|
-
pos.z += cos(uTime * .08 + position.x * .004) * aActivity * 3.0;
|
|
679
|
+
pos.y += sin(uTime * (.3 + aActivity * .2) + position.x * .01 + position.z * .015) * (2.0 + aActivity * 3.0);
|
|
680
|
+
pos.x += sin(uTime * .08 + position.z * .003) * aActivity * 2.0;
|
|
681
|
+
pos.z += cos(uTime * .06 + position.x * .003) * aActivity * 2.0;
|
|
682
682
|
vAlpha = aHighlight;
|
|
683
683
|
vec4 mv = modelViewMatrix * vec4(pos, 1.0);
|
|
684
684
|
gl_PointSize = aSize * breath * aHighlight * (500.0 / -mv.z);
|
|
@@ -693,13 +693,13 @@ const nodeMat = new THREE.ShaderMaterial({
|
|
|
693
693
|
vec2 c = gl_PointCoord - vec2(.5);
|
|
694
694
|
float d = length(c);
|
|
695
695
|
if(d > .5) discard;
|
|
696
|
-
float act = 0.
|
|
697
|
-
float core = exp(-d*d*
|
|
698
|
-
float g1 = exp(-d*d*
|
|
699
|
-
float g2 = exp(-d*d*
|
|
700
|
-
float g3 = exp(-d*d*
|
|
696
|
+
float act = 0.5 + vActivity * 0.5;
|
|
697
|
+
float core = exp(-d*d*120.0) * (0.6 + act * 0.4);
|
|
698
|
+
float g1 = exp(-d*d*20.0) * .4 * act;
|
|
699
|
+
float g2 = exp(-d*d*5.0) * .15 * act;
|
|
700
|
+
float g3 = exp(-d*d*1.5) * .05;
|
|
701
701
|
float i = core + g1 + g2 + g3;
|
|
702
|
-
gl_FragColor = vec4(vColor * (1.0 + core * .
|
|
702
|
+
gl_FragColor = vec4(vColor * (1.0 + core * .4), i * vAlpha);
|
|
703
703
|
}
|
|
704
704
|
\`,
|
|
705
705
|
transparent: true, depthWrite: false, blending: THREE.AdditiveBlending,
|
|
@@ -733,38 +733,6 @@ const particleMat = new THREE.PointsMaterial({
|
|
|
733
733
|
blending: THREE.AdditiveBlending, depthWrite: false, sizeAttenuation: true
|
|
734
734
|
});
|
|
735
735
|
|
|
736
|
-
// Fog nebula material — very soft, large, dim particles for volumetric clouds
|
|
737
|
-
const fogMat = new THREE.ShaderMaterial({
|
|
738
|
-
uniforms: { uTime: { value: 0 } },
|
|
739
|
-
vertexShader: \`
|
|
740
|
-
attribute float aSize;
|
|
741
|
-
attribute vec3 aColor;
|
|
742
|
-
varying vec3 vColor;
|
|
743
|
-
uniform float uTime;
|
|
744
|
-
void main(){
|
|
745
|
-
vColor = aColor;
|
|
746
|
-
vec3 pos = position;
|
|
747
|
-
pos.x += sin(uTime * 0.05 + position.y * 0.003 + position.z * 0.002) * 12.0;
|
|
748
|
-
pos.z += cos(uTime * 0.04 + position.y * 0.004 + position.x * 0.002) * 12.0;
|
|
749
|
-
pos.y += sin(uTime * 0.06 + position.x * 0.002) * 6.0;
|
|
750
|
-
vec4 mv = modelViewMatrix * vec4(pos, 1.0);
|
|
751
|
-
gl_PointSize = aSize * (400.0 / -mv.z);
|
|
752
|
-
gl_Position = projectionMatrix * mv;
|
|
753
|
-
}
|
|
754
|
-
\`,
|
|
755
|
-
fragmentShader: \`
|
|
756
|
-
varying vec3 vColor;
|
|
757
|
-
void main(){
|
|
758
|
-
vec2 c = gl_PointCoord - vec2(.5);
|
|
759
|
-
float d = length(c);
|
|
760
|
-
if(d > .5) discard;
|
|
761
|
-
float glow = exp(-d*d*2.0) * .35 + exp(-d*d*0.5) * .18;
|
|
762
|
-
gl_FragColor = vec4(vColor, glow);
|
|
763
|
-
}
|
|
764
|
-
\`,
|
|
765
|
-
transparent: true, depthWrite: false, blending: THREE.AdditiveBlending,
|
|
766
|
-
});
|
|
767
|
-
|
|
768
736
|
// =========== SCENE OBJECTS (rebuilt by rebuildScene) ===========
|
|
769
737
|
let nodePoints = null;
|
|
770
738
|
let nodeGeo = null;
|
|
@@ -772,8 +740,6 @@ let edgeLines = null;
|
|
|
772
740
|
let edgeGeo = null;
|
|
773
741
|
let particlePoints = null;
|
|
774
742
|
let particleGeo = null;
|
|
775
|
-
let fogPoints = null;
|
|
776
|
-
let fogGeo = null;
|
|
777
743
|
|
|
778
744
|
// Data arrays rebuilt per scene
|
|
779
745
|
let nodes = [];
|
|
@@ -798,7 +764,6 @@ function rebuildScene() {
|
|
|
798
764
|
if (nodeGeo) { nodeGeo.dispose(); scene.remove(nodePoints); }
|
|
799
765
|
if (edgeGeo) { edgeGeo.dispose(); scene.remove(edgeLines); }
|
|
800
766
|
if (particleGeo) { particleGeo.dispose(); scene.remove(particlePoints); }
|
|
801
|
-
if (fogGeo) { fogGeo.dispose(); scene.remove(fogPoints); }
|
|
802
767
|
orbitRings.forEach(r => { r.geometry.dispose(); r.material.dispose(); scene.remove(r); });
|
|
803
768
|
orbitRings = [];
|
|
804
769
|
|
|
@@ -823,9 +788,9 @@ function rebuildScene() {
|
|
|
823
788
|
const r = s.iR + srand(ni * 7) * (s.oR - s.iR);
|
|
824
789
|
const spiral = angle + r * 0.005 + srand(ni * 23) * 0.8;
|
|
825
790
|
const y = (s.yBase || 0) + (srand(ni * 11) - 0.5) * s.yS;
|
|
826
|
-
//
|
|
827
|
-
const jitterX = (srand(ni * 29) - 0.5) * r * 0.
|
|
828
|
-
const jitterZ = (srand(ni * 37) - 0.5) * r * 0.
|
|
791
|
+
// Organic jitter for 3D spread
|
|
792
|
+
const jitterX = (srand(ni * 29) - 0.5) * r * 0.2;
|
|
793
|
+
const jitterZ = (srand(ni * 37) - 0.5) * r * 0.2;
|
|
829
794
|
positions[ni] = new THREE.Vector3(
|
|
830
795
|
Math.cos(spiral) * r + jitterX + (s.cx || 0),
|
|
831
796
|
y,
|
|
@@ -901,45 +866,6 @@ function rebuildScene() {
|
|
|
901
866
|
orbitRings.push(ring);
|
|
902
867
|
}
|
|
903
868
|
|
|
904
|
-
// ---- FOG NEBULA PARTICLES (volumetric cloud around each layer) ----
|
|
905
|
-
const FOG_PER_LAYER = 80;
|
|
906
|
-
const fogArr = [];
|
|
907
|
-
const ftc = new THREE.Color();
|
|
908
|
-
for (let lv = 1; lv <= 6; lv++) {
|
|
909
|
-
const s = SPATIAL[lv];
|
|
910
|
-
if (!s || !(byLevel[lv] || []).length) continue;
|
|
911
|
-
ftc.set(LEVEL_COLORS_HEX[lv] || 0x00FFFF);
|
|
912
|
-
const act = s.activity || 0.5;
|
|
913
|
-
for (let j = 0; j < FOG_PER_LAYER; j++) {
|
|
914
|
-
const seed = lv * 1000 + j;
|
|
915
|
-
const angle = srand(seed * 67) * Math.PI * 2;
|
|
916
|
-
const r = srand(seed * 73) * s.oR * 1.3;
|
|
917
|
-
fogArr.push({
|
|
918
|
-
x: Math.cos(angle) * r + (s.cx || 0),
|
|
919
|
-
y: s.yBase + (srand(seed * 79) - 0.5) * s.yS * 2.0,
|
|
920
|
-
z: Math.sin(angle) * r + (s.cz || 0),
|
|
921
|
-
cr: ftc.r * (0.15 + act * 0.15), cg: ftc.g * (0.15 + act * 0.15), cb: ftc.b * (0.15 + act * 0.15),
|
|
922
|
-
size: 50 + srand(seed * 83) * 100,
|
|
923
|
-
});
|
|
924
|
-
}
|
|
925
|
-
}
|
|
926
|
-
const fTotal = fogArr.length;
|
|
927
|
-
fogGeo = new THREE.BufferGeometry();
|
|
928
|
-
const fPos = new Float32Array(fTotal * 3);
|
|
929
|
-
const fCol = new Float32Array(fTotal * 3);
|
|
930
|
-
const fSz = new Float32Array(fTotal);
|
|
931
|
-
for (let i = 0; i < fTotal; i++) {
|
|
932
|
-
const f = fogArr[i];
|
|
933
|
-
fPos[i * 3] = f.x; fPos[i * 3 + 1] = f.y; fPos[i * 3 + 2] = f.z;
|
|
934
|
-
fCol[i * 3] = f.cr; fCol[i * 3 + 1] = f.cg; fCol[i * 3 + 2] = f.cb;
|
|
935
|
-
fSz[i] = f.size;
|
|
936
|
-
}
|
|
937
|
-
fogGeo.setAttribute('position', new THREE.BufferAttribute(fPos, 3));
|
|
938
|
-
fogGeo.setAttribute('aColor', new THREE.BufferAttribute(fCol, 3));
|
|
939
|
-
fogGeo.setAttribute('aSize', new THREE.BufferAttribute(fSz, 1));
|
|
940
|
-
fogPoints = new THREE.Points(fogGeo, fogMat);
|
|
941
|
-
scene.add(fogPoints);
|
|
942
|
-
|
|
943
869
|
// ---- EDGES (LineSegments) ----
|
|
944
870
|
// Prioritize cross-level edges (vertical) over intra-level (horizontal)
|
|
945
871
|
const allEdges = [];
|
|
@@ -1241,7 +1167,7 @@ function closeSidebar(evt) {
|
|
|
1241
1167
|
controls.autoRotate = true;
|
|
1242
1168
|
camTween = {
|
|
1243
1169
|
startPos: camera.position.clone(), startLookAt: controls.target.clone(),
|
|
1244
|
-
targetPos: new THREE.Vector3(
|
|
1170
|
+
targetPos: new THREE.Vector3(500, 300, 750), targetLookAt: new THREE.Vector3(0, -50, 0),
|
|
1245
1171
|
progress: 0
|
|
1246
1172
|
};
|
|
1247
1173
|
}
|
|
@@ -1341,7 +1267,6 @@ function animate() {
|
|
|
1341
1267
|
// Update shader uniforms
|
|
1342
1268
|
nodeMat.uniforms.uTime.value = t;
|
|
1343
1269
|
edgeMat.uniforms.uTime.value = t;
|
|
1344
|
-
fogMat.uniforms.uTime.value = t;
|
|
1345
1270
|
|
|
1346
1271
|
// Camera tween
|
|
1347
1272
|
if (camTween) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template.js","sourceRoot":"","sources":["../../../src/cli/brain/template.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,iBAAiB,CAAC,IAAiB;IACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAEtC,OAAO;;;;;;0CAMiC,IAAI,CAAC,IAAI,CAAC,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uCA2ZxB,IAAI,CAAC,IAAI,CAAC,UAAU,iBAAiB,IAAI,CAAC,IAAI,CAAC,UAAU,eAAe,IAAI,CAAC,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,iBAAiB,MAAM,CAAC,CAAC,CAAC,EAAE,WAAW,IAAI,CAAC,IAAI,CAAC,WAAW;;wCAE3L,IAAI,CAAC,IAAI,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE;uCACpD,IAAI,CAAC,IAAI,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAkKvE,QAAQ
|
|
1
|
+
{"version":3,"file":"template.js","sourceRoot":"","sources":["../../../src/cli/brain/template.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,iBAAiB,CAAC,IAAiB;IACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAEtC,OAAO;;;;;;0CAMiC,IAAI,CAAC,IAAI,CAAC,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uCA2ZxB,IAAI,CAAC,IAAI,CAAC,UAAU,iBAAiB,IAAI,CAAC,IAAI,CAAC,UAAU,eAAe,IAAI,CAAC,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,iBAAiB,MAAM,CAAC,CAAC,CAAC,EAAE,WAAW,IAAI,CAAC,IAAI,CAAC,WAAW;;wCAE3L,IAAI,CAAC,IAAI,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE;uCACpD,IAAI,CAAC,IAAI,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAkKvE,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sBA43BL,IAAI,CAAC,IAAI,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAukBvE,CAAC;AACT,CAAC"}
|