@pascal-app/viewer 0.8.0 → 0.9.1
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/components/renderers/node-renderer.d.ts +1 -1
- package/dist/components/renderers/node-renderer.d.ts.map +1 -1
- package/dist/components/renderers/node-renderer.js +38 -22
- package/dist/components/renderers/parametric-node-renderer.d.ts +5 -0
- package/dist/components/renderers/parametric-node-renderer.d.ts.map +1 -0
- package/dist/components/renderers/parametric-node-renderer.js +34 -0
- package/dist/components/renderers/scene-renderer.d.ts +1 -1
- package/dist/components/renderers/scene-renderer.d.ts.map +1 -1
- package/dist/components/viewer/ground-occluder.d.ts +1 -1
- package/dist/components/viewer/ground-occluder.d.ts.map +1 -1
- package/dist/components/viewer/ground-occluder.js +12 -24
- package/dist/components/viewer/index.d.ts +37 -1
- package/dist/components/viewer/index.d.ts.map +1 -1
- package/dist/components/viewer/index.js +186 -63
- package/dist/components/viewer/lights.d.ts +1 -1
- package/dist/components/viewer/lights.d.ts.map +1 -1
- package/dist/components/viewer/lights.js +170 -43
- package/dist/components/viewer/perf-monitor.d.ts +1 -1
- package/dist/components/viewer/perf-monitor.d.ts.map +1 -1
- package/dist/components/viewer/perf-monitor.js +99 -11
- package/dist/components/viewer/post-processing.d.ts.map +1 -1
- package/dist/components/viewer/post-processing.js +231 -54
- package/dist/components/viewer/registered-systems.d.ts +12 -0
- package/dist/components/viewer/registered-systems.d.ts.map +1 -0
- package/dist/components/viewer/registered-systems.js +47 -0
- package/dist/components/viewer/scene-bvh.d.ts +17 -0
- package/dist/components/viewer/scene-bvh.d.ts.map +1 -0
- package/dist/components/viewer/scene-bvh.js +94 -0
- package/dist/components/viewer/selection-manager.d.ts +1 -1
- package/dist/components/viewer/selection-manager.d.ts.map +1 -1
- package/dist/components/viewer/selection-manager.js +20 -5
- package/dist/components/viewer/viewer-camera.d.ts +1 -1
- package/dist/components/viewer/viewer-camera.d.ts.map +1 -1
- package/dist/components/viewer/walkthrough-controls.d.ts +1 -1
- package/dist/components/viewer/walkthrough-controls.d.ts.map +1 -1
- package/dist/hooks/use-gltf-ktx2.d.ts.map +1 -1
- package/dist/hooks/use-node-events.d.ts +5 -73
- package/dist/hooks/use-node-events.d.ts.map +1 -1
- package/dist/hooks/use-node-events.js +19 -7
- package/dist/index.d.ts +36 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +67 -3
- package/dist/lib/csg-utils.d.ts +16 -0
- package/dist/lib/csg-utils.d.ts.map +1 -0
- package/dist/lib/csg-utils.js +33 -0
- package/dist/lib/drawable-geometry.d.ts +21 -0
- package/dist/lib/drawable-geometry.d.ts.map +1 -0
- package/dist/lib/drawable-geometry.js +22 -0
- package/dist/lib/edge-style.d.ts +3 -0
- package/dist/lib/edge-style.d.ts.map +1 -0
- package/dist/lib/edge-style.js +11 -0
- package/dist/lib/gpu-perf.d.ts +4 -0
- package/dist/lib/gpu-perf.d.ts.map +1 -0
- package/dist/lib/gpu-perf.js +23 -0
- package/dist/lib/ink-edges.d.ts +9 -0
- package/dist/lib/ink-edges.d.ts.map +1 -0
- package/dist/lib/ink-edges.js +43 -0
- package/dist/lib/isolation.d.ts +39 -0
- package/dist/lib/isolation.d.ts.map +1 -0
- package/dist/lib/isolation.js +103 -0
- package/dist/lib/layers.d.ts +18 -0
- package/dist/lib/layers.d.ts.map +1 -1
- package/dist/lib/layers.js +18 -0
- package/dist/lib/materials.d.ts +25 -15
- package/dist/lib/materials.d.ts.map +1 -1
- package/dist/lib/materials.js +277 -62
- package/dist/lib/merged-outline-node.d.ts.map +1 -1
- package/dist/lib/merged-outline-node.js +7 -0
- package/dist/lib/polygon-union.d.ts +4 -0
- package/dist/lib/polygon-union.d.ts.map +1 -0
- package/dist/lib/polygon-union.js +289 -0
- package/dist/lib/polygon-union.test.d.ts +2 -0
- package/dist/lib/polygon-union.test.d.ts.map +1 -0
- package/dist/lib/polygon-union.test.js +105 -0
- package/dist/lib/scene-themes.d.ts +29 -0
- package/dist/lib/scene-themes.d.ts.map +1 -0
- package/dist/lib/scene-themes.js +193 -0
- package/dist/store/use-viewer.d.ts +42 -4
- package/dist/store/use-viewer.d.ts.map +1 -1
- package/dist/store/use-viewer.js +26 -3
- package/dist/systems/ceiling/ceiling-system.d.ts +6 -2
- package/dist/systems/ceiling/ceiling-system.d.ts.map +1 -1
- package/dist/systems/ceiling/ceiling-system.js +62 -12
- package/dist/systems/door/door-system.d.ts.map +1 -1
- package/dist/systems/door/door-system.js +373 -22
- package/dist/systems/elevator/elevator-interaction-system.d.ts +2 -0
- package/dist/systems/elevator/elevator-interaction-system.d.ts.map +1 -0
- package/dist/systems/elevator/elevator-interaction-system.js +62 -0
- package/dist/systems/fence/fence-system.d.ts +3 -0
- package/dist/systems/fence/fence-system.d.ts.map +1 -1
- package/dist/systems/fence/fence-system.js +9 -5
- package/dist/systems/floor-elevation/floor-elevation-system.d.ts +20 -0
- package/dist/systems/floor-elevation/floor-elevation-system.d.ts.map +1 -0
- package/dist/systems/floor-elevation/floor-elevation-system.js +78 -0
- package/dist/systems/geometry/geometry-system.d.ts +34 -0
- package/dist/systems/geometry/geometry-system.d.ts.map +1 -0
- package/dist/systems/geometry/geometry-system.js +279 -0
- package/dist/systems/interactive/interactive-system.d.ts +1 -1
- package/dist/systems/interactive/interactive-system.d.ts.map +1 -1
- package/dist/systems/item/item-system.d.ts +7 -0
- package/dist/systems/item/item-system.d.ts.map +1 -1
- package/dist/systems/item/item-system.js +8 -11
- package/dist/systems/item-light/item-light-system.d.ts +1 -1
- package/dist/systems/item-light/item-light-system.d.ts.map +1 -1
- package/dist/systems/item-light/item-light-system.js +18 -5
- package/dist/systems/roof/roof-materials.d.ts +3 -2
- package/dist/systems/roof/roof-materials.d.ts.map +1 -1
- package/dist/systems/roof/roof-materials.js +38 -14
- package/dist/systems/roof/roof-system.d.ts +27 -0
- package/dist/systems/roof/roof-system.d.ts.map +1 -1
- package/dist/systems/roof/roof-system.js +396 -59
- package/dist/systems/slab/slab-system.d.ts.map +1 -1
- package/dist/systems/slab/slab-system.js +167 -49
- package/dist/systems/slab/slab-system.test.d.ts +2 -0
- package/dist/systems/slab/slab-system.test.d.ts.map +1 -0
- package/dist/systems/slab/slab-system.test.js +62 -0
- package/dist/systems/stair/stair-materials.d.ts +4 -3
- package/dist/systems/stair/stair-materials.d.ts.map +1 -1
- package/dist/systems/stair/stair-materials.js +30 -15
- package/dist/systems/stair/stair-system.d.ts.map +1 -1
- package/dist/systems/stair/stair-system.js +50 -61
- package/dist/systems/surface-hole-geometry.d.ts +3 -0
- package/dist/systems/surface-hole-geometry.d.ts.map +1 -0
- package/dist/systems/surface-hole-geometry.js +4 -0
- package/dist/systems/wall/wall-cutout.d.ts.map +1 -1
- package/dist/systems/wall/wall-cutout.js +18 -2
- package/dist/systems/wall/wall-materials.d.ts +4 -3
- package/dist/systems/wall/wall-materials.d.ts.map +1 -1
- package/dist/systems/wall/wall-materials.js +52 -28
- package/dist/systems/wall/wall-system.d.ts.map +1 -1
- package/dist/systems/wall/wall-system.js +171 -26
- package/dist/systems/window/window-system.d.ts.map +1 -1
- package/dist/systems/window/window-system.js +71 -7
- package/package.json +3 -4
- package/dist/components/renderers/building/building-renderer.d.ts +0 -5
- package/dist/components/renderers/building/building-renderer.d.ts.map +0 -1
- package/dist/components/renderers/building/building-renderer.js +0 -11
- package/dist/components/renderers/ceiling/ceiling-renderer.d.ts +0 -5
- package/dist/components/renderers/ceiling/ceiling-renderer.d.ts.map +0 -1
- package/dist/components/renderers/ceiling/ceiling-renderer.js +0 -58
- package/dist/components/renderers/column/column-renderer.d.ts +0 -5
- package/dist/components/renderers/column/column-renderer.d.ts.map +0 -1
- package/dist/components/renderers/column/column-renderer.js +0 -597
- package/dist/components/renderers/door/door-renderer.d.ts +0 -5
- package/dist/components/renderers/door/door-renderer.d.ts.map +0 -1
- package/dist/components/renderers/door/door-renderer.js +0 -16
- package/dist/components/renderers/fence/fence-renderer.d.ts +0 -5
- package/dist/components/renderers/fence/fence-renderer.d.ts.map +0 -1
- package/dist/components/renderers/fence/fence-renderer.js +0 -15
- package/dist/components/renderers/guide/guide-renderer.d.ts +0 -5
- package/dist/components/renderers/guide/guide-renderer.d.ts.map +0 -1
- package/dist/components/renderers/guide/guide-renderer.js +0 -38
- package/dist/components/renderers/item/item-renderer.d.ts +0 -5
- package/dist/components/renderers/item/item-renderer.d.ts.map +0 -1
- package/dist/components/renderers/item/item-renderer.js +0 -172
- package/dist/components/renderers/level/level-renderer.d.ts +0 -5
- package/dist/components/renderers/level/level-renderer.d.ts.map +0 -1
- package/dist/components/renderers/level/level-renderer.js +0 -11
- package/dist/components/renderers/roof/roof-materials.d.ts +0 -4
- package/dist/components/renderers/roof/roof-materials.d.ts.map +0 -1
- package/dist/components/renderers/roof/roof-materials.js +0 -16
- package/dist/components/renderers/roof/roof-renderer.d.ts +0 -5
- package/dist/components/renderers/roof/roof-renderer.d.ts.map +0 -1
- package/dist/components/renderers/roof/roof-renderer.js +0 -32
- package/dist/components/renderers/roof-segment/roof-segment-renderer.d.ts +0 -5
- package/dist/components/renderers/roof-segment/roof-segment-renderer.d.ts.map +0 -1
- package/dist/components/renderers/roof-segment/roof-segment-renderer.js +0 -40
- package/dist/components/renderers/scan/scan-renderer.d.ts +0 -5
- package/dist/components/renderers/scan/scan-renderer.d.ts.map +0 -1
- package/dist/components/renderers/scan/scan-renderer.js +0 -54
- package/dist/components/renderers/site/site-renderer.d.ts +0 -5
- package/dist/components/renderers/site/site-renderer.d.ts.map +0 -1
- package/dist/components/renderers/site/site-renderer.js +0 -106
- package/dist/components/renderers/slab/slab-renderer.d.ts +0 -5
- package/dist/components/renderers/slab/slab-renderer.d.ts.map +0 -1
- package/dist/components/renderers/slab/slab-renderer.js +0 -58
- package/dist/components/renderers/spawn/spawn-renderer.d.ts +0 -5
- package/dist/components/renderers/spawn/spawn-renderer.d.ts.map +0 -1
- package/dist/components/renderers/spawn/spawn-renderer.js +0 -32
- package/dist/components/renderers/stair/stair-renderer.d.ts +0 -5
- package/dist/components/renderers/stair/stair-renderer.d.ts.map +0 -1
- package/dist/components/renderers/stair/stair-renderer.js +0 -603
- package/dist/components/renderers/stair-segment/stair-segment-renderer.d.ts +0 -5
- package/dist/components/renderers/stair-segment/stair-segment-renderer.d.ts.map +0 -1
- package/dist/components/renderers/stair-segment/stair-segment-renderer.js +0 -51
- package/dist/components/renderers/wall/wall-renderer.d.ts +0 -5
- package/dist/components/renderers/wall/wall-renderer.d.ts.map +0 -1
- package/dist/components/renderers/wall/wall-renderer.js +0 -16
- package/dist/components/renderers/window/window-renderer.d.ts +0 -5
- package/dist/components/renderers/window/window-renderer.d.ts.map +0 -1
- package/dist/components/renderers/window/window-renderer.js +0 -21
- package/dist/components/renderers/zone/zone-renderer.d.ts +0 -5
- package/dist/components/renderers/zone/zone-renderer.d.ts.map +0 -1
- package/dist/components/renderers/zone/zone-renderer.js +0 -181
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { getEffectiveRoofSurfaceMaterial, } from '@pascal-app/core';
|
|
2
|
-
import
|
|
3
|
-
import { createMaterial, createMaterialFromPresetRef } from '../../lib/materials';
|
|
2
|
+
import { createMaterial, createMaterialFromPresetRef, createSurfaceRoleMaterial, } from '../../lib/materials';
|
|
4
3
|
const roofMaterialArrayCache = new Map();
|
|
5
4
|
function getSurfaceMaterialSignature(spec) {
|
|
6
5
|
return JSON.stringify({
|
|
@@ -8,20 +7,24 @@ function getSurfaceMaterialSignature(spec) {
|
|
|
8
7
|
materialPreset: spec.materialPreset ?? null,
|
|
9
8
|
});
|
|
10
9
|
}
|
|
11
|
-
function createResolvedMaterial(material, materialPreset) {
|
|
10
|
+
function createResolvedMaterial(material, materialPreset, shading) {
|
|
12
11
|
if (materialPreset) {
|
|
13
|
-
return createMaterialFromPresetRef(materialPreset);
|
|
12
|
+
return createMaterialFromPresetRef(materialPreset, shading);
|
|
14
13
|
}
|
|
15
14
|
if (material) {
|
|
16
|
-
return createMaterial(material);
|
|
15
|
+
return createMaterial(material, shading);
|
|
17
16
|
}
|
|
18
17
|
return null;
|
|
19
18
|
}
|
|
20
|
-
export function getRoofMaterialArray(node) {
|
|
19
|
+
export function getRoofMaterialArray(node, shading = 'rendered', textures = true, colorPreset = 'clay', sceneTheme) {
|
|
21
20
|
const top = getEffectiveRoofSurfaceMaterial(node, 'top');
|
|
22
21
|
const edge = getEffectiveRoofSurfaceMaterial(node, 'edge');
|
|
23
22
|
const wall = getEffectiveRoofSurfaceMaterial(node, 'wall');
|
|
24
23
|
const cacheKey = JSON.stringify({
|
|
24
|
+
shading,
|
|
25
|
+
textures,
|
|
26
|
+
colorPreset,
|
|
27
|
+
sceneTheme,
|
|
25
28
|
top: getSurfaceMaterialSignature(top),
|
|
26
29
|
edge: getSurfaceMaterialSignature(edge),
|
|
27
30
|
wall: getSurfaceMaterialSignature(wall),
|
|
@@ -29,17 +32,38 @@ export function getRoofMaterialArray(node) {
|
|
|
29
32
|
const cached = roofMaterialArrayCache.get(cacheKey);
|
|
30
33
|
if (cached)
|
|
31
34
|
return cached;
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
+
// Themed role colours: roof top/edge use the 'roof' role, the soffit/underside
|
|
36
|
+
// uses 'ceiling'. These also fill any untextured slot so an untextured roof is
|
|
37
|
+
// theme-coloured regardless of the textures toggle (no more white default).
|
|
38
|
+
const roofMaterial = createSurfaceRoleMaterial('roof', colorPreset, undefined, sceneTheme);
|
|
39
|
+
const ceilingMaterial = createSurfaceRoleMaterial('ceiling', colorPreset, undefined, sceneTheme);
|
|
40
|
+
const roleArray = [
|
|
41
|
+
roofMaterial,
|
|
42
|
+
ceilingMaterial,
|
|
43
|
+
ceilingMaterial,
|
|
44
|
+
roofMaterial,
|
|
45
|
+
];
|
|
46
|
+
if (!textures) {
|
|
47
|
+
roofMaterialArrayCache.set(cacheKey, roleArray);
|
|
48
|
+
return roleArray;
|
|
49
|
+
}
|
|
50
|
+
const topMaterial = createResolvedMaterial(top.material, top.materialPreset, shading);
|
|
51
|
+
const edgeMaterial = createResolvedMaterial(edge.material, edge.materialPreset, shading);
|
|
52
|
+
const wallMaterial = createResolvedMaterial(wall.material, wall.materialPreset, shading);
|
|
35
53
|
if (!(topMaterial || edgeMaterial || wallMaterial)) {
|
|
36
|
-
|
|
54
|
+
roofMaterialArrayCache.set(cacheKey, roleArray);
|
|
55
|
+
return roleArray;
|
|
37
56
|
}
|
|
57
|
+
// Each slot resolves to its own role only, then the themed default — never
|
|
58
|
+
// another role. Cross-role fallback here used to splatter a single painted
|
|
59
|
+
// surface (e.g. the edge) across the shingle and soffit slots. The legacy
|
|
60
|
+
// catch-all still fills every role because `getEffectiveRoofSurfaceMaterial`
|
|
61
|
+
// returns it for top/edge/wall alike.
|
|
38
62
|
const materialArray = [
|
|
39
|
-
edgeMaterial ??
|
|
40
|
-
wallMaterial ??
|
|
41
|
-
wallMaterial ??
|
|
42
|
-
topMaterial ??
|
|
63
|
+
edgeMaterial ?? roofMaterial,
|
|
64
|
+
wallMaterial ?? ceilingMaterial,
|
|
65
|
+
wallMaterial ?? ceilingMaterial,
|
|
66
|
+
topMaterial ?? roofMaterial,
|
|
43
67
|
];
|
|
44
68
|
roofMaterialArrayCache.set(cacheKey, materialArray);
|
|
45
69
|
return materialArray;
|
|
@@ -2,6 +2,22 @@ import { type RoofSegmentNode } from '@pascal-app/core';
|
|
|
2
2
|
import * as THREE from 'three';
|
|
3
3
|
import { Brush } from 'three-bvh-csg';
|
|
4
4
|
export declare const RoofSystem: () => null;
|
|
5
|
+
/**
|
|
6
|
+
* Four dummy materials used as identity placeholders during CSG. Shared
|
|
7
|
+
* across every input brush so three-bvh-csg can preserve reference
|
|
8
|
+
* equality on the result and `mapRoofGroupMaterialIndex` can map result
|
|
9
|
+
* groups back to slots 0..3. Exposed so kinds that compose additional
|
|
10
|
+
* CSG ops on top of `getRoofSegmentBrushes` (e.g. dormer) use the same
|
|
11
|
+
* identity refs.
|
|
12
|
+
*/
|
|
13
|
+
export declare const roofCsgDummyMats: [
|
|
14
|
+
THREE.MeshBasicMaterial,
|
|
15
|
+
THREE.MeshBasicMaterial,
|
|
16
|
+
THREE.MeshBasicMaterial,
|
|
17
|
+
THREE.MeshBasicMaterial
|
|
18
|
+
];
|
|
19
|
+
export declare const ROOF_MATERIAL_SLOT_COUNT = 4;
|
|
20
|
+
export declare function mapRoofGroupMaterialIndex(groupMaterialIndex: number | undefined, csgMaterials: THREE.Material[], matToIndex: Map<THREE.Material, number>): number;
|
|
5
21
|
/**
|
|
6
22
|
* Generate complete hollow-shell geometry for a roof segment.
|
|
7
23
|
* Ports the prototype's CSG approach using three-bvh-csg.
|
|
@@ -13,4 +29,15 @@ export declare function getRoofSegmentBrushes(node: RoofSegmentNode): {
|
|
|
13
29
|
innerBrush: Brush;
|
|
14
30
|
} | null;
|
|
15
31
|
export declare function generateRoofSegmentGeometry(node: RoofSegmentNode): THREE.BufferGeometry;
|
|
32
|
+
export declare function remapRoofShellFaces(geometry: THREE.BufferGeometry, node: RoofSegmentNode): void;
|
|
33
|
+
export type SurfaceFrame = {
|
|
34
|
+
point: THREE.Vector3;
|
|
35
|
+
normal: THREE.Vector3;
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* Returns the outer roof surface frame (point + normal) at a given segment-local XZ.
|
|
39
|
+
* This is used for skylight placement + cut direction so cutouts remain perpendicular
|
|
40
|
+
* to the true roof surface even on multi-slope roofs (gambrel/mansard/dutch).
|
|
41
|
+
*/
|
|
42
|
+
export declare function getRoofOuterSurfaceFrameAtPoint(segment: RoofSegmentNode, lx: number, lz: number): SurfaceFrame;
|
|
16
43
|
//# sourceMappingURL=roof-system.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"roof-system.d.ts","sourceRoot":"","sources":["../../../src/systems/roof/roof-system.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"roof-system.d.ts","sourceRoot":"","sources":["../../../src/systems/roof/roof-system.tsx"],"names":[],"mappings":"AAAA,OAAO,EAQL,KAAK,eAAe,EAKrB,MAAM,kBAAkB,CAAA;AAEzB,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,EAAY,KAAK,EAA0B,MAAM,eAAe,CAAA;AA0DvE,eAAO,MAAM,UAAU,YAmItB,CAAA;AA8PD;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB,EAAE;IAC7B,KAAK,CAAC,iBAAiB;IACvB,KAAK,CAAC,iBAAiB;IACvB,KAAK,CAAC,iBAAiB;IACvB,KAAK,CAAC,iBAAiB;CAMxB,CAAA;AAID,eAAO,MAAM,wBAAwB,IAAI,CAAA;AAEzC,wBAAgB,yBAAyB,CACvC,kBAAkB,EAAE,MAAM,GAAG,SAAS,EACtC,YAAY,EAAE,KAAK,CAAC,QAAQ,EAAE,EAC9B,UAAU,EAAE,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,GACtC,MAAM,CAuBR;AAaD;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,eAAe,GACpB;IAAE,QAAQ,EAAE,KAAK,CAAC;IAAC,QAAQ,EAAE,KAAK,CAAC;IAAC,SAAS,EAAE,KAAK,CAAC;IAAC,UAAU,EAAE,KAAK,CAAA;CAAE,GAAG,IAAI,CAmQlF;AAED,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,eAAe,GAAG,KAAK,CAAC,cAAc,CAmDvF;AAcD,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,KAAK,CAAC,cAAc,EAAE,IAAI,EAAE,eAAe,QAyExF;AAwWD,MAAM,MAAM,YAAY,GAAG;IACzB,KAAK,EAAE,KAAK,CAAC,OAAO,CAAA;IACpB,MAAM,EAAE,KAAK,CAAC,OAAO,CAAA;CACtB,CAAA;AAED;;;;GAIG;AACH,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,eAAe,EACxB,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,GACT,YAAY,CA6Kd"}
|