← Commit history
checkpoints/diode-thermal-saved/native-drc.jsonadded+262
@@ -0,0 +1,262 @@+{
+    "$schema": "https://schemas.kicad.org/drc.v1.json",
+    "coordinate_units": "mm",
+    "date": "2026-10-09T13:17:14",
+    "ignored_checks": [
+        {
+            "description": "Footprint has no courtyard defined",
+            "key": "missing_courtyard"
+        },
+        {
+            "description": "Track endpoint not centered on via",
+            "key": "track_not_centered_on_via"
+        },
+        {
+            "description": "Tuning profile track geometries",
+            "key": "tuning_profile_track_geometries"
+        },
+        {
+            "description": "Footprint doesn't match symbol's footprint filters",
+            "key": "footprint_filters_mismatch"
+        },
+        {
+            "description": "Footprint component type doesn't match footprint pads",
+            "key": "footprint_type_mismatch"
+        }
+    ],
+    "included_severities": [
+        "error",
+        "warning"
+    ],
+    "kicad_version": "10.0.5",
+    "schematic_parity": [],
+    "source": "adom-custom-electronic-load.kicad_pcb",
+    "unconnected_items": [],
+    "violations": [
+        {
+            "description": "The current configuration does not include the footprint library 'Molecule'",
+            "items": [
+                {
+                    "description": "Footprint MP2",
+                    "pos": {
+                        "x": 160.0,
+                        "y": 100.0
+                    },
+                    "uuid": "08489986-63c7-4cfe-ba45-67384ef79934"
+                }
+            ],
+            "severity": "warning",
+            "type": "lib_footprint_issues"
+        },
+        {
+            "description": "The current configuration does not include the footprint library 'Molecule'",
+            "items": [
+                {
+                    "description": "Footprint J6",
+                    "pos": {
+                        "x": 140.0,
+                        "y": 100.0
+                    },
+                    "uuid": "0f2f475f-8a1f-4250-9e5f-96a617ceb70b"
+                }
+            ],
+            "severity": "warning",
+            "type": "lib_footprint_issues"
+        },
+        {
+            "description": "The current configuration does not include the footprint library 'Molecule'",
+            "items": [
+                {
+                    "description": "Footprint MP3",
+                    "pos": {
+                        "x": 100.0,
+                        "y": 32.0
+                    },
+                    "uuid": "161d93fc-6ce8-463d-9fa1-016137c7ae90"
+                }
+            ],
+            "severity": "warning",
+            "type": "lib_footprint_issues"
+        },
+        {
+            "description": "The current configuration does not include the footprint library 'Load'",
+            "items": [
+                {
+                    "description": "Footprint RSH1",
+                    "pos": {
+                        "x": 138.0,
+                        "y": 85.0
+                    },
+                    "uuid": "1b28c787-9318-4dde-92f8-6e710aa3f214"
+                }
+            ],
+            "severity": "warning",
+            "type": "lib_footprint_issues"
+        },
+        {
+            "description": "The current configuration does not include the footprint library 'Molecule'",
+            "items": [
+                {
+                    "description": "Footprint MP1",
+                    "pos": {
+                        "x": 100.0,
+                        "y": 100.0
+                    },
+                    "uuid": "25251d59-4aaa-4d73-8a60-f16f3fee910a"
+                }
+            ],
+            "severity": "warning",
+            "type": "lib_footprint_issues"
+        },
+        {
+            "description": "The current configuration does not include the footprint library 'Molecule'",
+            "items": [
+                {
+                    "description": "Footprint J5",
+                    "pos": {
+                        "x": 136.0,
+                        "y": 100.0
+                    },
+                    "uuid": "2efeacb9-e84f-4884-8900-42f70fb8d64e"
+                }
+            ],
+            "severity": "warning",
+            "type": "lib_footprint_issues"
+        },
+        {
+            "description": "The current configuration does not include the footprint library 'Molecule'",
+            "items": [
+                {
+                    "description": "Footprint J2",
+                    "pos": {
+                        "x": 112.0,
+                        "y": 100.0
+                    },
+                    "uuid": "30ee7a6c-6b1c-4933-ba62-4f7a83e50956"
+                }
+            ],
+            "severity": "warning",
+            "type": "lib_footprint_issues"
+        },
+        {
+            "description": "The current configuration does not include the footprint library 'Molecule'",
+            "items": [
+                {
+                    "description": "Footprint J4",
+                    "pos": {
+                        "x": 124.0,
+                        "y": 100.0
+                    },
+                    "uuid": "3bb8b85a-c230-405c-9d0a-dfd2caaa5eb9"
+                }
+            ],
+            "severity": "warning",
+            "type": "lib_footprint_issues"
+        },
+        {
+            "description": "The current configuration does not include the footprint library 'Molecule'",
+            "items": [
+                {
+                    "description": "Footprint MP4",
+                    "pos": {
+                        "x": 160.0,
+                        "y": 32.0
+                    },
+                    "uuid": "515ee778-8175-412f-b3bf-3b8e5b10660b"
+                }
+            ],
+            "severity": "warning",
+            "type": "lib_footprint_issues"
+        },
+        {
+            "description": "The current configuration does not include the footprint library 'Load'",
+            "items": [
+                {
+                    "description": "Footprint U2",
+                    "pos": {
+                        "x": 118.0,
+                        "y": 66.0
+                    },
+                    "uuid": "6de86714-f970-4490-9f2b-5fb47eb0b141"
+                }
+            ],
+            "severity": "warning",
+            "type": "lib_footprint_issues"
+        },
+        {
+            "description": "The current configuration does not include the footprint library 'Molecule'",
+            "items": [
+                {
+                    "description": "Footprint J3",
+                    "pos": {
+                        "x": 120.0,
+                        "y": 100.0
+                    },
+                    "uuid": "8730c443-01a7-40e8-a338-20bb4d4719de"
+                }
+            ],
+            "severity": "warning",
+            "type": "lib_footprint_issues"
+        },
+        {
+            "description": "The current configuration does not include the footprint library 'Load'",
+            "items": [
+                {
+                    "description": "Footprint U4",
+                    "pos": {
+                        "x": 141.0,
+                        "y": 77.0
+                    },
+                    "uuid": "b585e065-e8ac-43c3-9bea-a846c5f7a747"
+                }
+            ],
+            "severity": "warning",
+            "type": "lib_footprint_issues"
+        },
+        {
+            "description": "The current configuration does not include the footprint library 'Molecule'",
+            "items": [
+                {
+                    "description": "Footprint J7",
+                    "pos": {
+                        "x": 144.0,
+                        "y": 100.0
+                    },
+                    "uuid": "e8f5ce02-a259-45e9-a4f1-ef182fb58bb6"
+                }
+            ],
+            "severity": "warning",
+            "type": "lib_footprint_issues"
+        },
+        {
+            "description": "The current configuration does not include the footprint library 'Load'",
+            "items": [
+                {
+                    "description": "Footprint L1",
+                    "pos": {
+                        "x": 144.0,
+                        "y": 95.6
+                    },
+                    "uuid": "f710bbae-8af4-4faf-8c03-b1959083aa62"
+                }
+            ],
+            "severity": "warning",
+            "type": "lib_footprint_issues"
+        },
+        {
+            "description": "The current configuration does not include the footprint library 'Molecule'",
+            "items": [
+                {
+                    "description": "Footprint J1",
+                    "pos": {
+                        "x": 108.0,
+                        "y": 100.0
+                    },
+                    "uuid": "fca7a827-0407-443b-9729-c18bb9614a8c"
+                }
+            ],
+            "severity": "warning",
+            "type": "lib_footprint_issues"
+        }
+    ]
+}
design/diode-thermal-live/rounding-review.jsonadded+84
@@ -0,0 +1,84 @@+{+  "status": "documented-native-rounding-only",+  "candidateSha256": "3094fcf70404fa4d2874b543c54b4826f8297cfafc9c17a8836e386a849644a3",+  "savedSha256": "8d6cd24149f7de061f125bf45a26b50ca5b70a6b01c62b96dc3cf92187a531f1",+  "exactEquality": false,+  "otherTrackViaMultisetDifferences": 0,+  "pairs": [+    {+      "candidateMm": [+        115.579711,+        89.677483+      ],+      "savedMm": [+        115.579712,+        89.677483+      ],+      "distanceNm": 0.9999999974752427+    },+    {+      "candidateMm": [+        115.199167,+        91.467801+      ],+      "savedMm": [+        115.199168,+        91.467801+      ],+      "distanceNm": 0.9999999974752427+    },+    {+      "candidateMm": [+        117.16481,+        93.237674+      ],+      "savedMm": [+        117.164811,+        93.237674+      ],+      "distanceNm": 0.9999999974752427+    },+    {+      "candidateMm": [+        116.275,+        89.051442+      ],+      "savedMm": [+        116.275,+        89.051443+      ],+      "distanceNm": 1.0000000116860974+    },+    {+      "candidateMm": [+        117.16481,+        88.762325+      ],+      "savedMm": [+        117.164811,+        88.762326+      ],+      "distanceNm": 1.414213558802549+    },+    {+      "candidateMm": [+        115.199167,+        90.532198+      ],+      "savedMm": [+        115.199168,+        90.532199+      ],+      "distanceNm": 1.4142135688511408+    }+  ],+  "zoneSymmetricDifferenceMm2": {+    "('GND', 'F.Cu')": 9.00763032259291e-08,+    "('LOAD_POS', 'F.Cu')": 0.0,+    "('SHUNT_P', 'F.Cu')": 0.0,+    "('SHUNT_P', 'B.Cu')": 0.0,+    "('GND', 'B.Cu')": 1.356057240303816e-07,+    "('LOAD_POS', 'B.Cu')": 0.0+  },+  "qualification": "Geometric audit only. Actual saved-board native DRC required; no thermal or hardware qualification."+}
design/diode-thermal-live/saved-comparison.jsonadded+174
@@ -0,0 +1,174 @@+{+  "candidateSha256": "3094fcf70404fa4d2874b543c54b4826f8297cfafc9c17a8836e386a849644a3",+  "savedSha256": "8d6cd24149f7de061f125bf45a26b50ca5b70a6b01c62b96dc3cf92187a531f1",+  "copperMultisetEqual": false,+  "missing": [+    [+      [+        "via",+        "LOAD_POS",+        [+          115.579711,+          89.677483+        ],+        0.6,+        0.3+      ],+      1+    ],+    [+      [+        "via",+        "LOAD_POS",+        [+          115.199167,+          91.467801+        ],+        0.6,+        0.3+      ],+      1+    ],+    [+      [+        "via",+        "LOAD_POS",+        [+          117.16481,+          93.237674+        ],+        0.6,+        0.3+      ],+      1+    ],+    [+      [+        "via",+        "LOAD_POS",+        [+          116.275,+          89.051442+        ],+        0.6,+        0.3+      ],+      1+    ],+    [+      [+        "via",+        "LOAD_POS",+        [+          117.16481,+          88.762325+        ],+        0.6,+        0.3+      ],+      1+    ],+    [+      [+        "via",+        "LOAD_POS",+        [+          115.199167,+          90.532198+        ],+        0.6,+        0.3+      ],+      1+    ]+  ],+  "extra": [+    [+      [+        "via",+        "LOAD_POS",+        [+          117.164811,+          88.762326+        ],+        0.6,+        0.3+      ],+      1+    ],+    [+      [+        "via",+        "LOAD_POS",+        [+          116.275,+          89.051443+        ],+        0.6,+        0.3+      ],+      1+    ],+    [+      [+        "via",+        "LOAD_POS",+        [+          115.199168,+          90.532199+        ],+        0.6,+        0.3+      ],+      1+    ],+    [+      [+        "via",+        "LOAD_POS",+        [+          115.199168,+          91.467801+        ],+        0.6,+        0.3+      ],+      1+    ],+    [+      [+        "via",+        "LOAD_POS",+        [+          117.164811,+          93.237674+        ],+        0.6,+        0.3+      ],+      1+    ],+    [+      [+        "via",+        "LOAD_POS",+        [+          115.579712,+          89.677483+        ],+        0.6,+        0.3+      ],+      1+    ]+  ],+  "zoneSymmetricDifferenceMm2": {+    "('GND', 'F.Cu')": 9.00763032259291e-08,+    "('LOAD_POS', 'F.Cu')": 0.0,+    "('SHUNT_P', 'F.Cu')": 0.0,+    "('SHUNT_P', 'B.Cu')": 0.0,+    "('GND', 'B.Cu')": 1.356057240303816e-07,+    "('LOAD_POS', 'B.Cu')": 0.0+  },+  "zoneKeysEqual": true+}
docs/build-clips.md+6
@@ -128,3 +128,9 @@ Two new raw recordings capture the actual ESD/link relocation and copper landing [Watch the labeled fan-state demonstration](../videos/fan-hero/window-5969372-20261009-163213.mp4). The actual canonical viewer shows a stopped rotor, smooth spin-up, steady rotation, smooth spin-down and rest. Wires and the added Adom connector stay still. This is simulated, deliberately slowed rotation, not hardware feedback. The Sunon factory variant has bare-ended wires; the Harwin termination is an added assembly.  The clip passed a full decode and contact-sheet review. The published wiki hero was separately checked through its full 20-second loop and animation-off mode. Native KiCad accepted the connector symbols and footprint. This does not establish physical mating, crimp strength, airflow or cooling qualification.++## Diode thermal vias, 9 October++<video width="100%" playsinline controls preload="metadata" poster="docs/clips/diode-thermal-landing-poster.jpg" src="docs/clips/diode-thermal-landing-2x.mp4"></video>++Nine preflighted vias appear around D1 in the native editor. Playback is 2x; the raw take is 22.77 seconds encoded. Full decode and contact-sheet review passed. Values clutter the view, so use a short action excerpt in the final film. Recorder sample-timeline warnings are retained, and encoded duration is not wall-clock proof. The saved board subsequently passed native DRC with zero errors and zero opens; this footage does not establish cooling performance.
docs/clips/diode-thermal-landing-2x.mp4added
⋯ 1 unchanged line ⋯
docs/clips/diode-thermal-landing-poster.jpgadded
⋯ 1 unchanged line ⋯
docs/completion-plan.md+1−1
@@ -8,7 +8,7 @@ Native-saved board 17 SHA-256 `653e54e711552eb2f16b6d01cd144fd82645a52c30ff11e39  ## Resume here -1. Inspect the live AdomLapper board and AIFlow run; current required step is thermal-vias. Preserve other threads and project rules. The shunt experiment is adopted and routing proof recorded. Declared pour regions now match board 17; nine proposed D1 vias are under isolated native DRC and electrical review.+1. Inspect the live AdomLapper board and AIFlow run; current required step is thermal-vias. Preserve other threads and project rules. The shunt experiment is adopted and routing proof recorded. Declared pour regions now match board 17; nine D1 vias are now landed, native-saved and adopted, with zero errors/opens. Read design/diode-thermal-live/rounding-review.json for the explicit nanometre coordinate differences. Rebuild downstream routing and Fields proofs against the new saved board. 2. Continue the compact 5 W prototype basis announced on 9 October. It follows the original size/cost priority and 5 V/1 A DUT. The prior 25 W assistant assumption is documented as a future option, not a blocker. Keep the 55 C trip and all validation requirements. 3. Solve the actual MOSFET case/interface/sink/fan assembly and probe clearance. The shunt-via candidate now passes only with the verified GND stitch at (133.018,77.818). Earlier candidates without that stitch disconnected ground; do not replay them. Via-count acknowledgements require actual engineering justification, not a desire to advance the timeline. 4. Complete and revalidate pours, outline, same-board current/thermal Fields screens, net tour, full fitted-model/silkscreen review, native 3D, finish and fabrication exports in the enforced sequence. Record significant real actions. Never mark these passed to bypass an unresolved gate.
docs/status.md+8
@@ -1,3 +1,11 @@+# Current checkpoint - 2026-10-09, 18:19 UTC++The nine reviewed D1 thermal vias are now landed, native-saved and adopted by AIFlow. The actual saved board has zero native DRC errors and zero opens, with 15 existing library warnings. Six via coordinates differ from the offline generator by at most one nanometre per axis; this is explicitly audited, not called exact equality. Other track/via geometry matches, and filled-zone differences are below 0.000001 mm2. Both native 2D and 3D views were inspected. Formal Fields/current/thermal and finish gates remain incomplete.++A new recording shows the vias appearing around D1. It decoded and its contact sheet was reviewed; a 2x edit is in the build-clips page. The inventory now contains 58 raw takes, including rejected/static takes, not 58 finished clips.++The 40 mm heatsink's four-hole arrangement does not fit the existing layout: even its smaller hardware envelope intersects routed signals at all four proposed drills. No holes were added. Q1 already includes a 3.5 mm mounting hole at (127.46, 65.34); a package-mounted cooling assembly is being investigated, with interface, support, fan duct, electrical isolation and physical qualification unresolved.+ # Current checkpoint - 2026-10-09, 16:59 UTC  Fan component 0.2.3 is published and installed with the gentle 20-second hero cycle, factory flying leads, explicit added Harwin harness, grid-aligned connector symbols, mating-header footprint and static complete STEP/GLB variants. Wiki Skill Pack 0.8.42 and Component Widgets 1.1.17 teach this authoring pattern. Native symbol/footprint and published animation/static checks passed; physical crimp and fit remain unverified. Three raw fan recordings were added, bringing the inventory to 57; the short take is not a complete state cycle.
kicad/adom-custom-electronic-load.kicad_pcb+205−124
@@ -36981,6 +36981,22 @@ 		(net "LOAD_POS")
 		(uuid "fda48dc9-b69d-4c67-bf60-d465e1fadcb2")
 	)
+	(via
+		(at 117.164811 88.762326)
+		(size 0.6)
+		(drill 0.3)
+		(layers "F.Cu" "B.Cu")
+		(net "LOAD_POS")
+		(uuid "20909ae5-92ca-4226-b82e-2a46526aad8c")
+	)
+	(via
+		(at 116.275 89.051443)
+		(size 0.6)
+		(drill 0.3)
+		(layers "F.Cu" "B.Cu")
+		(net "LOAD_POS")
+		(uuid "2106313a-4a69-47e0-94b5-92ea75cac3e4")
+	)
 	(via
 		(at 126.4 86.5)
 		(size 0.8)
@@ -36989,6 +37005,14 @@ 		(net "LOAD_POS")
 		(uuid "32514162-b870-4c7a-95a2-b85b8db79257")
 	)
+	(via
+		(at 119.65 91)
+		(size 0.6)
+		(drill 0.3)
+		(layers "F.Cu" "B.Cu")
+		(net "LOAD_POS")
+		(uuid "40dbef98-1193-4f74-a64f-9489f6ca8501")
+	)
 	(via
 		(at 119.8 88.4)
 		(size 0.8)
@@ -37013,6 +37037,22 @@ 		(net "LOAD_POS")
 		(uuid "788900ae-68bf-410e-bf82-62ac2c325c1d")
 	)
+	(via
+		(at 118.095288 93.139877)
+		(size 0.6)
+		(drill 0.3)
+		(layers "F.Cu" "B.Cu")
+		(net "LOAD_POS")
+		(uuid "7d2b58b2-ae2a-4901-ac7d-49ba8ea165f0")
+	)
+	(via
+		(at 115.199168 90.532199)
+		(size 0.6)
+		(drill 0.3)
+		(layers "F.Cu" "B.Cu")
+		(net "LOAD_POS")
+		(uuid "955101ab-fb0a-4b0a-b905-0fc99ab81274")
+	)
 	(via
 		(at 135.5 75)
 		(size 0.6)
@@ -37021,6 +37061,30 @@ 		(net "LOAD_POS")
 		(uuid "b0bfb6f7-46c3-4ab7-8f17-6db7570c9a70")
 	)
+	(via
+		(at 115.199168 91.467801)
+		(size 0.6)
+		(drill 0.3)
+		(layers "F.Cu" "B.Cu")
+		(net "LOAD_POS")
+		(uuid "c282c655-2b34-406e-84c8-ef925b61202d")
+	)
+	(via
+		(at 117.164811 93.237674)
+		(size 0.6)
+		(drill 0.3)
+		(layers "F.Cu" "B.Cu")
+		(net "LOAD_POS")
+		(uuid "cbaddf0b-79d5-486d-9143-d7b961c96c8c")
+	)
+	(via
+		(at 116.275 92.948557)
+		(size 0.6)
+		(drill 0.3)
+		(layers "F.Cu" "B.Cu")
+		(net "LOAD_POS")
+		(uuid "eaf9dad0-779e-4538-aebe-af57be3190f6")
+	)
 	(via
 		(at 108.2 82.7)
 		(size 0.8)
@@ -37029,6 +37093,14 @@ 		(net "LOAD_POS")
 		(uuid "f39375c8-90a0-49f5-a1dd-2407c7a84842")
 	)
+	(via
+		(at 115.579712 89.677483)
+		(size 0.6)
+		(drill 0.3)
+		(layers "F.Cu" "B.Cu")
+		(net "LOAD_POS")
+		(uuid "f8da576c-f342-4b75-b770-92ccebfa0cee")
+	)
 	(segment
 		(start 114.5 87.2)
 		(end 114.5 88.4)
@@ -37398,14 +37470,14 @@ 				(xy 150.780769 90.382126) (xy 149.372551 91.790343) (xy 149.346879 91.810044) (xy 149.277267 91.850242)
 				(xy 149.273167 91.853033) (xy 149.192686 91.899499) (xy 149.192677 91.899506) (xy 149.099506 91.992677)
 				(xy 149.099502 91.992682) (xy 149.099493 91.992696) (xy 149.03361 92.106806) (xy 149.033609 92.106808)
-				(xy 148.9995 92.234108) (xy 148.9995 92.36589) (xy 149.033608 92.493188) (xy 149.065711 92.54879)
-				(xy 149.066554 92.55025) (xy 149.0995 92.607314) (xy 149.099502 92.607316) (xy 149.167397 92.675211)
+				(xy 148.9995 92.234108) (xy 148.9995 92.36589) (xy 149.033608 92.493188) (xy 149.06339 92.544771)
+				(xy 149.063391 92.544772) (xy 149.099497 92.60731) (xy 149.099502 92.607316) (xy 149.167397 92.675211)
 				(xy 149.188546 92.703461) (xy 149.193967 92.713388) (xy 149.208821 92.781661) (xy 149.184407 92.847126)
 				(xy 149.128475 92.888999) (xy 149.128471 92.889001) (xy 149.121283 92.891682) (xy 149.077949 92.8995)
 				(xy 148.445726 92.8995) (xy 148.442959 92.899759) (xy 148.407726 92.898018) (xy 148.383826 92.893369)
 				(xy 148.334288 92.871727) (xy 148.333677 92.87128) (xy 148.319211 92.858884) (xy 146.480535 91.020208)
 				(xy 146.459384 90.991954) (xy 146.447099 90.969456) (xy 146.431997 90.905989) (xy 146.442359 90.588269)
-				(xy 146.448518 90.553522) (xy 146.452964 90.540026) (xy 146.45341 90.538672) (xy 146.493066 90.481172)
+				(xy 146.448518 90.553522) (xy 146.45236 90.541856) (xy 146.45341 90.538672) (xy 146.493066 90.481172)
 				(xy 146.495309 90.479352) (xy 146.549059 90.454072) (xy 146.550827 90.453717) (xy 146.554824 90.452917)
 				(xy 146.579187 90.4505) (xy 146.683262 90.4505) (xy 146.687803 90.449838) (xy 146.705971 90.447191)
 				(xy 146.751393 90.440573) (xy 146.856483 90.389198) (xy 146.939198 90.306483) (xy 146.990573 90.201393)
@@ -37451,8 +37523,8 @@ 				(xy 145.591741 88.5505) (xy 146.683261 88.5505) (xy 146.683262 88.5505) (xy 146.687803 88.549838)
 				(xy 146.705971 88.547191) (xy 146.751393 88.540573) (xy 146.856483 88.489198) (xy 146.891781 88.453899)
 				(xy 146.920025 88.432754) (xy 146.942502 88.420481) (xy 147.00616 88.405387) (xy 147.393916 88.418643)
-				(xy 147.428656 88.424858) (xy 147.454384 88.433378) (xy 147.503083 88.46341) (xy 147.725573 88.685899)
-				(xy 147.746723 88.714151) (xy 147.759331 88.73724) (xy 147.7745 88.796669) (xy 147.7745 90.097873)
+				(xy 147.428656 88.424858) (xy 147.454384 88.433378) (xy 147.503083 88.46341) (xy 147.725575 88.685902)
+				(xy 147.746726 88.714156) (xy 147.759332 88.737242) (xy 147.7745 88.796669) (xy 147.7745 90.097873)
 				(xy 147.774499 90.09845) (xy 147.774497 90.09888) (xy 147.774494 90.099328) (xy 147.774155 90.14024)
 				(xy 147.774216 90.140696) (xy 147.774278 90.141176) (xy 147.774334 90.141613) (xy 147.774424 90.142328)
 				(xy 147.774478 90.142773) (xy 147.78507 90.182302) (xy 147.785298 90.183167) (xy 147.785368 90.183436)
@@ -39824,26 +39896,25 @@ 				(xy 109.533742 92.849375) (xy 109.54573 92.8505) (xy 109.545734 92.8505) (xy 109.545739 92.8505)
 				(xy 111.65427 92.8505) (xy 111.654271 92.8505) (xy 111.67892 92.848188) (xy 111.682496 92.84802)
 				(xy 111.684696 92.847646) (xy 111.684699 92.847646) (xy 111.684701 92.847646) (xy 111.767039 92.818834)
-				(xy 111.812882 92.802793) (xy 111.92215 92.72215) (xy 112.002793 92.612882) (xy 112.013261 92.582962)
-				(xy 112.025218 92.548794) (xy 112.025219 92.54879) (xy 112.03323 92.525896) (xy 112.047646 92.484701)
-				(xy 112.047646 92.484699) (xy 112.04802 92.482499) (xy 112.048188 92.478919) (xy 112.0505 92.45427)
-				(xy 112.0505 89.545728) (xy 112.048188 89.521079) (xy 112.04802 89.517501) (xy 112.047645 89.515295)
-				(xy 112.00469 89.392538) (xy 112.002793 89.387118) (xy 111.92215 89.27785) (xy 111.812882 89.197207)
-				(xy 111.81288 89.197206) (xy 111.785217 89.187526) (xy 111.684704 89.152354) (xy 111.684702 89.152353)
-				(xy 111.6847 89.152353) (xy 111.65427 89.1495) (xy 111.654266 89.1495) (xy 111.654264 89.1495) (xy 111.54233 89.1495)
-				(xy 111.507389 89.144475) (xy 111.49239 89.14007) (xy 111.433644 89.102327) (xy 111.432457 89.100958)
-				(xy 111.404977 89.046083) (xy 111.403332 89.038521) (xy 111.4005 89.012168) (xy 111.4005 88.570973)
-				(xy 111.400065 88.568972) (xy 111.395732 88.547191) (xy 111.392365 88.530262) (xy 111.391455 88.525689)
-				(xy 111.381736 88.476827) (xy 111.369737 88.416503) (xy 111.366137 88.407812) (xy 111.309397 88.270827)
-				(xy 111.30939 88.270814) (xy 111.221789 88.139711) (xy 111.221786 88.139707) (xy 111.221781 88.139701)
-				(xy 111.110297 88.028217) (xy 111.110291 88.028212) (xy 111.11029 88.028211) (xy 110.979187 87.94061)
-				(xy 110.977921 87.939827) (xy 110.965368 87.930937) (xy 110.958618 87.925498) (xy 110.954562 87.922229)
-				(xy 110.914714 87.864838) (xy 110.912219 87.795012) (xy 110.947871 87.734923) (xy 111.003868 87.704997)
-				(xy 111.008863 87.703817) (xy 111.037353 87.7005) (xy 113.75482 87.7005) (xy 113.789754 87.705523)
-				(xy 113.802822 87.70936) (xy 113.8616 87.747134) (xy 113.890626 87.810689) (xy 113.883673 87.87272)
-				(xy 113.880718 87.880429) (xy 113.868035 87.904937) (xy 113.790612 88.020808) (xy 113.790609 88.020812)
-				(xy 113.790598 88.020833) (xy 113.730264 88.166496) (xy 113.730257 88.166527) (xy 113.6995 88.32115)
-				(xy 113.6995 88.321153) (xy 113.6995 88.478846) (xy 113.6995 88.478848) (xy 113.699499 88.478848)
+				(xy 111.812882 92.802793) (xy 111.92215 92.72215) (xy 112.002793 92.612882) (xy 112.026626 92.544772)
+				(xy 112.047646 92.484701) (xy 112.047646 92.484699) (xy 112.04802 92.482497) (xy 112.048188 92.478919)
+				(xy 112.0505 92.45427) (xy 112.0505 89.545728) (xy 112.048188 89.521079) (xy 112.04802 89.517501)
+				(xy 112.047645 89.515295) (xy 112.00469 89.392538) (xy 112.002793 89.387118) (xy 111.92215 89.27785)
+				(xy 111.812882 89.197207) (xy 111.81288 89.197206) (xy 111.785217 89.187526) (xy 111.684704 89.152354)
+				(xy 111.684702 89.152353) (xy 111.6847 89.152353) (xy 111.65427 89.1495) (xy 111.654266 89.1495)
+				(xy 111.654264 89.1495) (xy 111.54233 89.1495) (xy 111.507389 89.144475) (xy 111.49239 89.14007)
+				(xy 111.433644 89.102327) (xy 111.432457 89.100958) (xy 111.404977 89.046083) (xy 111.403332 89.038521)
+				(xy 111.4005 89.012168) (xy 111.4005 88.570973) (xy 111.400065 88.568972) (xy 111.391709 88.526965)
+				(xy 111.391709 88.526964) (xy 111.379067 88.46341) (xy 111.369737 88.416503) (xy 111.366137 88.407812)
+				(xy 111.309397 88.270827) (xy 111.30939 88.270814) (xy 111.221789 88.139711) (xy 111.221786 88.139707)
+				(xy 111.221781 88.139701) (xy 111.110297 88.028217) (xy 111.110291 88.028212) (xy 111.11029 88.028211)
+				(xy 110.979187 87.94061) (xy 110.977921 87.939827) (xy 110.965368 87.930937) (xy 110.958618 87.925498)
+				(xy 110.954562 87.922229) (xy 110.914714 87.864838) (xy 110.912219 87.795012) (xy 110.947871 87.734923)
+				(xy 111.003868 87.704997) (xy 111.008863 87.703817) (xy 111.037353 87.7005) (xy 113.75482 87.7005)
+				(xy 113.789754 87.705523) (xy 113.802822 87.70936) (xy 113.8616 87.747134) (xy 113.890626 87.810689)
+				(xy 113.883673 87.87272) (xy 113.880718 87.880429) (xy 113.868035 87.904937) (xy 113.790612 88.020808)
+				(xy 113.790609 88.020812) (xy 113.790598 88.020833) (xy 113.730264 88.166496) (xy 113.730257 88.166527)
+				(xy 113.6995 88.32115) (xy 113.6995 88.321153) (xy 113.6995 88.478846) (xy 113.6995 88.478848) (xy 113.699499 88.478848)
 				(xy 113.730257 88.633471) (xy 113.730263 88.633497) (xy 113.730263 88.6335) (xy 113.785061 88.765795)
 				(xy 113.7945 88.813247) (xy 113.7945 94.676007) (xy 113.799197 94.719686) (xy 113.810397 94.771174)
 				(xy 113.81289 94.781372) (xy 113.812891 94.781375) (xy 113.855899 94.862083) (xy 113.855901 94.862086)
@@ -39999,99 +40070,100 @@ 				(xy 142.312649 90.651088) (xy 142.325528 90.655298) (xy 142.359657 90.65133) (xy 142.373979 90.6505)
 				(xy 143.344205 90.6505) (xy 143.379137 90.655521) (xy 143.404381 90.662934) (xy 143.457127 90.69423)
 				(xy 144.223386 91.460489) (xy 144.326113 91.519799) (xy 144.34839 91.525766) (xy 144.352215 91.526858)
-				(xy 144.362883 91.530088) (xy 144.366092 91.530511) (xy 144.380432 91.534353) (xy 144.380447 91.534357)
-				(xy 144.440691 91.5505) (xy 144.844205 91.5505) (xy 144.879137 91.555521) (xy 144.904381 91.562934)
-				(xy 144.957127 91.59423) (xy 146.190342 92.827445) (xy 146.210047 92.853124) (xy 146.250215 92.922695)
-				(xy 146.253026 92.926819) (xy 146.255976 92.931929) (xy 146.2995 93.007314) (xy 146.392686 93.1005)
-				(xy 146.506814 93.166392) (xy 146.634108 93.2005) (xy 146.63411 93.2005) (xy 146.76589 93.2005)
-				(xy 146.765892 93.2005) (xy 146.893186 93.166392) (xy 147.007314 93.1005) (xy 147.1005 93.007314)
-				(xy 147.166392 92.893186) (xy 147.166393 92.893181) (xy 147.169637 92.887563) (xy 147.173345 92.880264)
-				(xy 147.183616 92.863412) (xy 147.235312 92.816415) (xy 147.304211 92.804825) (xy 147.305844 92.80502)
-				(xy 147.360605 92.825445) (xy 147.364761 92.828258) (xy 147.382943 92.84327) (xy 147.989884 93.450211)
-				(xy 148.011033 93.478461) (xy 148.016454 93.488388) (xy 148.031308 93.556661) (xy 148.006894 93.622126)
-				(xy 147.950962 93.663999) (xy 147.950958 93.664001) (xy 147.94377 93.666682) (xy 147.900436 93.6745)
-				(xy 147.802021 93.6745) (xy 147.801382 93.674498) (xy 147.8008 93.674495) (xy 147.800475 93.674493)
-				(xy 147.77391 93.674286) (xy 147.773821 93.674286) (xy 147.77362 93.674284) (xy 147.759597 93.674176)
-				(xy 147.758876 93.674271) (xy 147.75797 93.674387) (xy 147.757218 93.67448) (xy 147.717546 93.68511)
-				(xy 147.716621 93.685354) (xy 147.676638 93.695736) (xy 147.676064 93.695975) (xy 147.675139 93.696354)
-				(xy 147.674439 93.696637) (xy 147.638664 93.71729) (xy 147.637839 93.717762) (xy 147.602087 93.738037)
-				(xy 147.601492 93.738494) (xy 147.60069 93.739104) (xy 147.596822 93.742023) (xy 147.576986 93.7522)
-				(xy 147.577501 93.753143) (xy 147.569544 93.757486) (xy 147.564582 93.758564) (xy 147.558964 93.761447)
-				(xy 147.55493 93.762702) (xy 147.554335 93.760791) (xy 147.501269 93.772325) (xy 147.435818 93.747904)
-				(xy 147.426999 93.741301) (xy 147.398214 93.710928) (xy 147.394552 93.705448) (xy 147.394551 93.705446)
-				(xy 147.338378 93.667912) (xy 147.335084 93.665209) (xy 147.333913 93.664785) (xy 147.333118 93.663744)
-				(xy 147.32823 93.661132) (xy 147.328229 93.661131) (xy 147.269752 93.6495) (xy 147.26975 93.6495)
-				(xy 145.080249 93.6495) (xy 145.080247 93.6495) (xy 145.02177 93.661131) (xy 145.021769 93.661131)
-				(xy 145.021768 93.661132) (xy 145.016355 93.664024) (xy 145.011614 93.667916) (xy 144.955447 93.705446)
-				(xy 144.955446 93.705447) (xy 144.917916 93.761614) (xy 144.914024 93.766355) (xy 144.911132 93.771768)
-				(xy 144.911132 93.771769) (xy 144.911131 93.77177) (xy 144.8995 93.830247) (xy 144.8995 97.369752)
-				(xy 144.911131 97.428229) (xy 144.911132 97.42823) (xy 144.914024 97.433641) (xy 144.917917 97.438385)
-				(xy 144.955447 97.494552) (xy 145.00993 97.530956) (xy 145.011613 97.532081) (xy 145.016358 97.535975)
-				(xy 145.02177 97.538868) (xy 145.072612 97.548981) (xy 145.075337 97.549703) (xy 145.080249 97.5505)
-				(xy 147.26975 97.5505) (xy 147.273876 97.5505) (xy 147.281742 97.548114) (xy 147.284568 97.547552)
-				(xy 147.328229 97.538868) (xy 147.328229 97.538867) (xy 147.328231 97.538867) (xy 147.394552 97.494552)
-				(xy 147.438867 97.428231) (xy 147.438867 97.428229) (xy 147.438868 97.428229) (xy 147.450072 97.371896)
-				(xy 147.4505 97.369931) (xy 147.4505 94.870677) (xy 147.455522 94.835744) (xy 147.462887 94.810659)
-				(xy 147.494863 94.757241) (xy 147.825802 94.431393) (xy 147.854216 94.410465) (xy 147.864188 94.405121)
-				(xy 147.932574 94.390802) (xy 147.997846 94.415728) (xy 148.039278 94.471982) (xy 148.042014 94.479495)
-				(xy 148.0495 94.521926) (xy 148.0495 94.704269) (xy 148.051657 94.727275) (xy 148.051812 94.728929)
-				(xy 148.051978 94.732499) (xy 148.052352 94.734701) (xy 148.093695 94.852845) (xy 148.093696 94.852848)
-				(xy 148.097206 94.862881) (xy 148.097207 94.862882) (xy 148.17785 94.97215) (xy 148.287118 95.052793)
-				(xy 148.30574 95.059309) (xy 148.415299 95.097646) (xy 148.415303 95.097647) (xy 148.433742 95.099375)
-				(xy 148.44573 95.1005) (xy 148.445734 95.1005) (xy 148.445739 95.1005) (xy 150.55427 95.1005) (xy 150.554271 95.1005)
-				(xy 150.57892 95.098188) (xy 150.582498 95.09802) (xy 150.584699 95.097646) (xy 150.584701 95.097646)
-				(xy 150.64879 95.075219) (xy 150.712882 95.052793) (xy 150.82215 94.97215) (xy 150.822158 94.972138)
-				(xy 150.825029 94.969269) (xy 150.837724 94.95819) (xy 150.848937 94.949677) (xy 150.914231 94.924816)
-				(xy 150.982603 94.939202) (xy 151.032342 94.988266) (xy 151.033922 94.991113) (xy 151.0495 95.051284)
-				(xy 151.0495 95.059309) (xy 151.060622 95.100816) (xy 151.072469 95.145029) (xy 151.072469 95.145032)
-				(xy 151.080199 95.173883) (xy 151.0802 95.173886) (xy 151.114439 95.23319) (xy 151.139512 95.276616)
-				(xy 151.623386 95.760489) (xy 151.624078 95.760988) (xy 151.626611 95.762351) (xy 151.675647 95.790661)
-				(xy 151.675664 95.790672) (xy 151.722662 95.817807) (xy 151.725681 95.819682) (xy 151.726111 95.819797)
-				(xy 151.726114 95.819799) (xy 151.75555 95.827686) (xy 151.785452 95.840073) (xy 151.812764 95.855842)
-				(xy 151.838444 95.875547) (xy 153.500573 97.537676) (xy 153.521723 97.565928) (xy 153.534331 97.589017)
-				(xy 153.5495 97.648446) (xy 153.5495 98.869752) (xy 153.561131 98.928229) (xy 153.561132 98.92823)
-				(xy 153.564024 98.933641) (xy 153.567917 98.938385) (xy 153.605447 98.994552) (xy 153.628763 99.010131)
-				(xy 153.661613 99.032081) (xy 153.666358 99.035975) (xy 153.67177 99.038868) (xy 153.722612 99.048981)
-				(xy 153.725337 99.049703) (xy 153.730249 99.0505) (xy 155.46975 99.0505) (xy 155.473876 99.0505)
-				(xy 155.481742 99.048114) (xy 155.484568 99.047552) (xy 155.528229 99.038868) (xy 155.528229 99.038867)
-				(xy 155.528231 99.038867) (xy 155.594552 98.994552) (xy 155.638867 98.928231) (xy 155.638867 98.928229)
-				(xy 155.638868 98.928229) (xy 155.650072 98.871896) (xy 155.6505 98.869931) (xy 155.6505 97.130063)
-				(xy 155.650069 97.128081) (xy 155.638868 97.07177) (xy 155.635975 97.066358) (xy 155.632081 97.061613)
-				(xy 155.630956 97.05993) (xy 155.594552 97.005447) (xy 155.558146 96.981121) (xy 155.538385 96.967917)
-				(xy 155.533641 96.964024) (xy 155.52823 96.961132) (xy 155.528229 96.961131) (xy 155.469752 96.9495)
-				(xy 155.46975 96.9495) (xy 154.255795 96.9495) (xy 154.220859 96.944477) (xy 154.195617 96.937065)
-				(xy 154.142872 96.905769) (xy 152.561891 95.324788) (xy 152.540742 95.296538) (xy 152.53532 95.286608)
-				(xy 152.520467 95.218338) (xy 152.544881 95.152873) (xy 152.600811 95.111001) (xy 152.60469 95.109554)
-				(xy 152.608026 95.108311) (xy 152.65134 95.1005) (xy 154.554271 95.1005) (xy 154.57892 95.098188)
-				(xy 154.582498 95.09802) (xy 154.584699 95.097646) (xy 154.584701 95.097646) (xy 154.64879 95.075219)
-				(xy 154.712882 95.052793) (xy 154.82215 94.97215) (xy 154.902793 94.862882) (xy 154.931314 94.781375)
-				(xy 154.937222 94.764491) (xy 154.937222 94.76449) (xy 154.947646 94.734701) (xy 154.94802 94.732497)
-				(xy 154.948188 94.728919) (xy 154.9505 94.70427) (xy 154.9505 93.414372) (xy 154.955522 93.379439)
-				(xy 154.962934 93.354194) (xy 154.994228 93.301452) (xy 156.4703 91.825381) (xy 157.980469 90.315212)
-				(xy 157.985932 90.305749) (xy 158.024624 90.238735) (xy 158.026499 90.235716) (xy 158.026728 90.234864)
-				(xy 158.029767 90.223521) (xy 158.029868 90.223143) (xy 158.029877 90.223109) (xy 158.031275 90.217897)
-				(xy 158.038455 90.191099) (xy 158.038455 90.191097) (xy 158.045588 90.164474) (xy 158.0505 90.146144)
-				(xy 158.0505 87.817368) (xy 158.055523 87.782434) (xy 158.064217 87.752824) (xy 158.083424 87.714124)
-				(xy 158.102793 87.687882) (xy 158.118614 87.642668) (xy 158.132188 87.603877) (xy 158.132188 87.603875)
-				(xy 158.139634 87.582597) (xy 158.147646 87.559701) (xy 158.147646 87.559699) (xy 158.14802 87.557499)
-				(xy 158.148188 87.553919) (xy 158.1505 87.52927) (xy 158.1505 86.470728) (xy 158.148188 86.446079)
-				(xy 158.14802 86.442502) (xy 158.147646 86.4403) (xy 158.147646 86.440298) (xy 158.102793 86.312119)
-				(xy 158.102792 86.312117) (xy 158.097954 86.305562) (xy 158.097952 86.305559) (xy 158.097952 86.305558)
-				(xy 158.044593 86.23326) (xy 158.02215 86.20285) (xy 157.912882 86.122207) (xy 157.91288 86.122206)
-				(xy 157.8618 86.104332) (xy 157.784704 86.077354) (xy 157.784702 86.077353) (xy 157.7847 86.077353)
-				(xy 157.75427 86.0745) (xy 157.754266 86.0745) (xy 157.754264 86.0745) (xy 157.639374 86.0745) (xy 157.604438 86.069477)
-				(xy 157.579196 86.062065) (xy 157.526452 86.03077) (xy 157.415213 85.919531) (xy 157.415208 85.919527)
-				(xy 157.407033 85.914807) (xy 157.378598 85.884983) (xy 157.329448 85.871821) (xy 157.329434 85.871812)
-				(xy 157.329433 85.871817) (xy 157.280587 85.858729) (xy 157.280585 85.858728) (xy 157.246145 85.8495)
-				(xy 157.246144 85.8495) (xy 157.246143 85.8495) (xy 155.426506 85.8495) (xy 155.39157 85.844477)
-				(xy 155.366328 85.837065) (xy 155.313583 85.805769) (xy 155.307316 85.799502) (xy 155.307314 85.7995)
-				(xy 155.240705 85.761043) (xy 155.229655 85.754663) (xy 155.193188 85.733608) (xy 155.108542 85.710928)
-				(xy 155.09963 85.70854) (xy 155.065892 85.6995) (xy 155.065891 85.6995) (xy 154.934106 85.6995)
-				(xy 154.823813 85.729052) (xy 154.788772 85.733242) (xy 154.774898 85.732912) (xy 154.708346 85.711639)
-				(xy 154.66386 85.657762) (xy 154.663856 85.657754) (xy 154.660509 85.649937) (xy 154.6505 85.60113)
-				(xy 154.6505 77.403936) (xy 154.655522 77.369003) (xy 154.656289 77.366391) (xy 154.659433 77.355684)
-				(xy 154.697206 77.296907) (xy 154.760755 77.267882) (xy 154.769173 77.266672) (xy 154.818912 77.269633)
-				(xy 154.934108 77.3005) (xy 154.934111 77.3005) (xy 155.06589 77.3005) (xy 155.065892 77.3005) (xy 155.193186 77.266392)
+				(xy 144.36288 91.530087) (xy 144.366089 91.53051) (xy 144.377955 91.533689) (xy 144.377958 91.533691)
+				(xy 144.377959 91.533691) (xy 144.404472 91.540795) (xy 144.440691 91.5505) (xy 144.844205 91.5505)
+				(xy 144.879137 91.555521) (xy 144.904381 91.562934) (xy 144.957127 91.59423) (xy 146.190342 92.827445)
+				(xy 146.210047 92.853124) (xy 146.250215 92.922695) (xy 146.253026 92.926819) (xy 146.255976 92.931929)
+				(xy 146.2995 93.007314) (xy 146.392686 93.1005) (xy 146.506814 93.166392) (xy 146.634108 93.2005)
+				(xy 146.63411 93.2005) (xy 146.76589 93.2005) (xy 146.765892 93.2005) (xy 146.893186 93.166392)
+				(xy 147.007314 93.1005) (xy 147.1005 93.007314) (xy 147.166392 92.893186) (xy 147.166393 92.893181)
+				(xy 147.169637 92.887563) (xy 147.173345 92.880264) (xy 147.183616 92.863412) (xy 147.235312 92.816415)
+				(xy 147.304211 92.804825) (xy 147.305844 92.80502) (xy 147.360605 92.825445) (xy 147.364761 92.828258)
+				(xy 147.382943 92.84327) (xy 147.989884 93.450211) (xy 148.011033 93.478461) (xy 148.016454 93.488388)
+				(xy 148.031308 93.556661) (xy 148.006894 93.622126) (xy 147.950962 93.663999) (xy 147.950958 93.664001)
+				(xy 147.94377 93.666682) (xy 147.900436 93.6745) (xy 147.802021 93.6745) (xy 147.801382 93.674498)
+				(xy 147.8008 93.674495) (xy 147.800475 93.674493) (xy 147.77391 93.674286) (xy 147.773821 93.674286)
+				(xy 147.77362 93.674284) (xy 147.759597 93.674176) (xy 147.758876 93.674271) (xy 147.75797 93.674387)
+				(xy 147.757218 93.67448) (xy 147.717546 93.68511) (xy 147.716621 93.685354) (xy 147.676638 93.695736)
+				(xy 147.676064 93.695975) (xy 147.675139 93.696354) (xy 147.674439 93.696637) (xy 147.638664 93.71729)
+				(xy 147.637839 93.717762) (xy 147.602087 93.738037) (xy 147.601492 93.738494) (xy 147.60069 93.739104)
+				(xy 147.596822 93.742023) (xy 147.576986 93.7522) (xy 147.577501 93.753143) (xy 147.569544 93.757486)
+				(xy 147.564582 93.758564) (xy 147.558964 93.761447) (xy 147.55493 93.762702) (xy 147.554335 93.760791)
+				(xy 147.501269 93.772325) (xy 147.435818 93.747904) (xy 147.426999 93.741301) (xy 147.398214 93.710928)
+				(xy 147.394552 93.705448) (xy 147.394551 93.705446) (xy 147.338378 93.667912) (xy 147.335084 93.665209)
+				(xy 147.333913 93.664785) (xy 147.333118 93.663744) (xy 147.32823 93.661132) (xy 147.328229 93.661131)
+				(xy 147.269752 93.6495) (xy 147.26975 93.6495) (xy 145.080249 93.6495) (xy 145.080247 93.6495) (xy 145.02177 93.661131)
+				(xy 145.021769 93.661131) (xy 145.021768 93.661132) (xy 145.016355 93.664024) (xy 145.011614 93.667916)
+				(xy 144.955447 93.705446) (xy 144.955446 93.705447) (xy 144.917916 93.761614) (xy 144.914024 93.766355)
+				(xy 144.911132 93.771768) (xy 144.911132 93.771769) (xy 144.911131 93.77177) (xy 144.8995 93.830247)
+				(xy 144.8995 97.369752) (xy 144.911131 97.428229) (xy 144.911132 97.42823) (xy 144.914024 97.433641)
+				(xy 144.917917 97.438385) (xy 144.955447 97.494552) (xy 145.00993 97.530956) (xy 145.011613 97.532081)
+				(xy 145.016358 97.535975) (xy 145.02177 97.538868) (xy 145.072612 97.548981) (xy 145.075337 97.549703)
+				(xy 145.080249 97.5505) (xy 147.26975 97.5505) (xy 147.273876 97.5505) (xy 147.281742 97.548114)
+				(xy 147.284568 97.547552) (xy 147.328229 97.538868) (xy 147.328229 97.538867) (xy 147.328231 97.538867)
+				(xy 147.394552 97.494552) (xy 147.438867 97.428231) (xy 147.438867 97.428229) (xy 147.438868 97.428229)
+				(xy 147.450072 97.371896) (xy 147.4505 97.369931) (xy 147.4505 94.870677) (xy 147.455522 94.835744)
+				(xy 147.462887 94.810659) (xy 147.494863 94.757241) (xy 147.825802 94.431393) (xy 147.854216 94.410465)
+				(xy 147.864188 94.405121) (xy 147.932574 94.390802) (xy 147.997846 94.415728) (xy 148.039278 94.471982)
+				(xy 148.042014 94.479495) (xy 148.0495 94.521926) (xy 148.0495 94.704269) (xy 148.051657 94.727275)
+				(xy 148.051812 94.728929) (xy 148.051978 94.732499) (xy 148.052352 94.734701) (xy 148.093695 94.852845)
+				(xy 148.093696 94.852848) (xy 148.097206 94.862881) (xy 148.097207 94.862882) (xy 148.17785 94.97215)
+				(xy 148.287118 95.052793) (xy 148.30574 95.059309) (xy 148.415299 95.097646) (xy 148.415303 95.097647)
+				(xy 148.433742 95.099375) (xy 148.44573 95.1005) (xy 148.445734 95.1005) (xy 148.445739 95.1005)
+				(xy 150.55427 95.1005) (xy 150.554271 95.1005) (xy 150.57892 95.098188) (xy 150.582498 95.09802)
+				(xy 150.584699 95.097646) (xy 150.584701 95.097646) (xy 150.64879 95.075219) (xy 150.712882 95.052793)
+				(xy 150.82215 94.97215) (xy 150.822158 94.972138) (xy 150.825029 94.969269) (xy 150.837724 94.95819)
+				(xy 150.848937 94.949677) (xy 150.914231 94.924816) (xy 150.982603 94.939202) (xy 151.032342 94.988266)
+				(xy 151.033922 94.991113) (xy 151.0495 95.051284) (xy 151.0495 95.059309) (xy 151.060622 95.100816)
+				(xy 151.072469 95.145029) (xy 151.072469 95.145032) (xy 151.080199 95.173883) (xy 151.0802 95.173886)
+				(xy 151.114439 95.23319) (xy 151.139512 95.276616) (xy 151.623386 95.760489) (xy 151.624078 95.760988)
+				(xy 151.626611 95.762351) (xy 151.675647 95.790661) (xy 151.675664 95.790672) (xy 151.722662 95.817807)
+				(xy 151.725681 95.819682) (xy 151.726111 95.819797) (xy 151.726114 95.819799) (xy 151.75555 95.827686)
+				(xy 151.785452 95.840073) (xy 151.812764 95.855842) (xy 151.838444 95.875547) (xy 153.500573 97.537676)
+				(xy 153.521723 97.565928) (xy 153.534331 97.589017) (xy 153.5495 97.648446) (xy 153.5495 98.869752)
+				(xy 153.561131 98.928229) (xy 153.561132 98.92823) (xy 153.564024 98.933641) (xy 153.567917 98.938385)
+				(xy 153.605447 98.994552) (xy 153.628763 99.010131) (xy 153.661613 99.032081) (xy 153.666358 99.035975)
+				(xy 153.67177 99.038868) (xy 153.722612 99.048981) (xy 153.725337 99.049703) (xy 153.730249 99.0505)
+				(xy 155.46975 99.0505) (xy 155.473876 99.0505) (xy 155.481742 99.048114) (xy 155.484568 99.047552)
+				(xy 155.528229 99.038868) (xy 155.528229 99.038867) (xy 155.528231 99.038867) (xy 155.594552 98.994552)
+				(xy 155.638867 98.928231) (xy 155.638867 98.928229) (xy 155.638868 98.928229) (xy 155.650072 98.871896)
+				(xy 155.6505 98.869931) (xy 155.6505 97.130063) (xy 155.650069 97.128081) (xy 155.638868 97.07177)
+				(xy 155.635975 97.066358) (xy 155.632081 97.061613) (xy 155.630956 97.05993) (xy 155.594552 97.005447)
+				(xy 155.558146 96.981121) (xy 155.538385 96.967917) (xy 155.533641 96.964024) (xy 155.52823 96.961132)
+				(xy 155.528229 96.961131) (xy 155.469752 96.9495) (xy 155.46975 96.9495) (xy 154.255795 96.9495)
+				(xy 154.220859 96.944477) (xy 154.195617 96.937065) (xy 154.142872 96.905769) (xy 152.561891 95.324788)
+				(xy 152.540742 95.296538) (xy 152.53532 95.286608) (xy 152.520467 95.218338) (xy 152.544881 95.152873)
+				(xy 152.600811 95.111001) (xy 152.60469 95.109554) (xy 152.608026 95.108311) (xy 152.65134 95.1005)
+				(xy 154.554271 95.1005) (xy 154.57892 95.098188) (xy 154.582498 95.09802) (xy 154.584699 95.097646)
+				(xy 154.584701 95.097646) (xy 154.64879 95.075219) (xy 154.712882 95.052793) (xy 154.82215 94.97215)
+				(xy 154.902793 94.862882) (xy 154.931314 94.781375) (xy 154.937222 94.764491) (xy 154.937222 94.76449)
+				(xy 154.947646 94.734701) (xy 154.94802 94.732497) (xy 154.948188 94.728919) (xy 154.9505 94.70427)
+				(xy 154.9505 93.414372) (xy 154.955522 93.379439) (xy 154.962934 93.354194) (xy 154.994228 93.301452)
+				(xy 156.4703 91.825381) (xy 157.980469 90.315212) (xy 157.985932 90.305749) (xy 158.024624 90.238735)
+				(xy 158.026499 90.235716) (xy 158.026728 90.234864) (xy 158.029767 90.223521) (xy 158.029868 90.223143)
+				(xy 158.029877 90.223109) (xy 158.031275 90.217897) (xy 158.038455 90.191099) (xy 158.038455 90.191097)
+				(xy 158.045588 90.164474) (xy 158.0505 90.146144) (xy 158.0505 87.817368) (xy 158.055523 87.782434)
+				(xy 158.064217 87.752824) (xy 158.083424 87.714124) (xy 158.102793 87.687882) (xy 158.118614 87.642668)
+				(xy 158.132188 87.603877) (xy 158.132188 87.603875) (xy 158.139634 87.582597) (xy 158.147646 87.559701)
+				(xy 158.147646 87.559699) (xy 158.14802 87.557499) (xy 158.148188 87.553919) (xy 158.1505 87.52927)
+				(xy 158.1505 86.470728) (xy 158.148188 86.446079) (xy 158.14802 86.442502) (xy 158.147646 86.4403)
+				(xy 158.147646 86.440298) (xy 158.102793 86.312119) (xy 158.102792 86.312117) (xy 158.097954 86.305562)
+				(xy 158.097952 86.305559) (xy 158.097952 86.305558) (xy 158.044593 86.23326) (xy 158.02215 86.20285)
+				(xy 157.912882 86.122207) (xy 157.91288 86.122206) (xy 157.8618 86.104332) (xy 157.784704 86.077354)
+				(xy 157.784702 86.077353) (xy 157.7847 86.077353) (xy 157.75427 86.0745) (xy 157.754266 86.0745)
+				(xy 157.754264 86.0745) (xy 157.639374 86.0745) (xy 157.604438 86.069477) (xy 157.579196 86.062065)
+				(xy 157.526452 86.03077) (xy 157.415213 85.919531) (xy 157.415208 85.919527) (xy 157.407033 85.914807)
+				(xy 157.378598 85.884983) (xy 157.329448 85.871821) (xy 157.329434 85.871812) (xy 157.329433 85.871817)
+				(xy 157.280587 85.858729) (xy 157.280585 85.858728) (xy 157.246145 85.8495) (xy 157.246144 85.8495)
+				(xy 157.246143 85.8495) (xy 155.426506 85.8495) (xy 155.39157 85.844477) (xy 155.366328 85.837065)
+				(xy 155.313583 85.805769) (xy 155.307316 85.799502) (xy 155.307314 85.7995) (xy 155.240705 85.761043)
+				(xy 155.229655 85.754663) (xy 155.193188 85.733608) (xy 155.108542 85.710928) (xy 155.09963 85.70854)
+				(xy 155.065892 85.6995) (xy 155.065891 85.6995) (xy 154.934106 85.6995) (xy 154.823813 85.729052)
+				(xy 154.788772 85.733242) (xy 154.774898 85.732912) (xy 154.708346 85.711639) (xy 154.66386 85.657762)
+				(xy 154.663856 85.657754) (xy 154.660509 85.649937) (xy 154.6505 85.60113) (xy 154.6505 77.403936)
+				(xy 154.655522 77.369003) (xy 154.656289 77.366391) (xy 154.659433 77.355684) (xy 154.697206 77.296907)
+				(xy 154.760755 77.267882) (xy 154.769173 77.266672) (xy 154.818912 77.269633) (xy 154.934108 77.3005)
+				(xy 154.934111 77.3005) (xy 155.06589 77.3005) (xy 155.065892 77.3005) (xy 155.193186 77.266392)
 				(xy 155.307314 77.2005) (xy 155.4005 77.107314) (xy 155.466392 76.993186) (xy 155.5005 76.865892)
 				(xy 155.5005 76.734108) (xy 155.466392 76.606814) (xy 155.459127 76.594231) (xy 155.458233 76.592682)
 				(xy 155.441815 76.564246) (xy 155.439827 76.560802) (xy 155.408356 76.506293) (xy 155.39524 76.473531)
@@ -40698,7 +40770,7 @@ 				(xy 110.760041 89.332389) (xy 110.804328 89.32358) (xy 110.931811 89.270775) (xy 111.046542 89.194114)
 				(xy 111.144114 89.096542) (xy 111.220775 88.981811) (xy 111.27358 88.854328) (xy 111.28853 88.779172)
 				(xy 111.296424 88.739488) (xy 111.3005 88.718997) (xy 111.3005 88.531001) (xy 111.273341 88.39447)
-				(xy 111.271253 88.390054) (xy 111.269089 88.384829) (xy 111.269089 88.384828) (xy 111.220781 88.268201)
+				(xy 111.271254 88.390057) (xy 111.263478 88.371283) (xy 111.238467 88.3109) (xy 111.220781 88.268201)
 				(xy 111.220776 88.268192) (xy 111.220771 88.268182) (xy 111.144114 88.153458) (xy 111.144111 88.153454)
 				(xy 111.144106 88.153448) (xy 111.04655 88.055892) (xy 111.046544 88.055887) (xy 111.046543 88.055886)
 				(xy 110.931823 87.979232) (xy 110.931822 87.979231) (xy 110.931817 87.979228) (xy 110.931804 87.979221)
@@ -42462,11 +42534,11 @@ 				(xy 144.699861 95.260465) (xy 144.699862 95.260465) (xy 144.760465 95.199862) (xy 144.803318 95.125638)
 				(xy 144.813932 95.086027) (xy 144.825501 95.042852) (xy 144.825501 94.957147) (xy 144.825501 94.949552)
 				(xy 144.825501 94.947868) (xy 144.8255 94.947794) (xy 144.8255 92.634108) (xy 146.1995 92.634108)
-				(xy 146.1995 92.765891) (xy 146.208773 92.800499) (xy 146.233608 92.893188) (xy 146.266554 92.95025)
-				(xy 146.2995 93.007314) (xy 146.392686 93.1005) (xy 146.392687 93.100501) (xy 146.392689 93.100502)
-				(xy 146.479286 93.150499) (xy 146.491521 93.157563) (xy 146.501425 93.163281) (xy 146.50143 93.163284)
-				(xy 146.501429 93.163284) (xy 146.506805 93.166387) (xy 146.506814 93.166392) (xy 146.634108 93.2005)
-				(xy 146.63411 93.2005) (xy 146.76589 93.2005) (xy 146.765892 93.2005) (xy 146.855644 93.176451)
+				(xy 146.1995 92.765891) (xy 146.208773 92.800499) (xy 146.233608 92.893189) (xy 146.246836 92.916099)
+				(xy 146.24861 92.919171) (xy 146.2995 93.007314) (xy 146.392686 93.1005) (xy 146.392687 93.100501)
+				(xy 146.392689 93.100502) (xy 146.479286 93.150499) (xy 146.491521 93.157563) (xy 146.501425 93.163281)
+				(xy 146.50143 93.163284) (xy 146.501429 93.163284) (xy 146.506805 93.166387) (xy 146.506814 93.166392)
+				(xy 146.634108 93.2005) (xy 146.63411 93.2005) (xy 146.76589 93.2005) (xy 146.765892 93.2005) (xy 146.855644 93.176451)
 				(xy 146.856969 93.176482) (xy 146.901248 93.164617) (xy 146.901249 93.164618) (xy 146.938169 93.154724)
 				(xy 146.970263 93.1505) (xy 148.359308 93.1505) (xy 148.359309 93.1505) (xy 148.449673 93.126286)
 				(xy 148.473887 93.119799) (xy 148.576614 93.060489) (xy 148.837679 92.799423) (xy 148.865929 92.778275)
@@ -43067,6 +43139,15 @@ 				(xy 114 88) (xy 121.8 88) (xy 121.8 94.8) (xy 114 94.8)
 			)
 		)
+		(filled_polygon
+			(layer "B.Cu")
+			(pts
+				(xy 121.743039 92.570185) (xy 121.788794 92.622989) (xy 121.8 92.6745) (xy 121.8 94.676) (xy 121.780315 94.743039)
+				(xy 121.727511 94.788794) (xy 121.676 94.8) (xy 114.124 94.8) (xy 114.056961 94.780315) (xy 114.011206 94.727511)
+				(xy 114 94.676) (xy 114 92.6745) (xy 114.019685 92.607461) (xy 114.072489 92.561706) (xy 114.124 92.5505)
+				(xy 121.676 92.5505)
+			)
+		)
 		(filled_polygon
 			(layer "B.Cu")
 			(pts
mechanical/cooling-40mm-search.jsonadded+433
@@ -0,0 +1,433 @@+{+  "boardSha256": "653e54e711552eb2f16b6d01cd144fd82645a52c30ff11e39699b760402af51a",+  "mpn": "ATS-CPX040040020-115-C1-R0",+  "method": "0.5 mm XY grid, 1 mm nominal case-face margin, 2 mm probe radius, 3 mm hardware radius plus 0.25 mm body clearance",+  "survivingProbeClearCandidates": 942,+  "bestCandidates": [+    {+      "sinkXY": [+        110.0,+        37.5,+        150.0,+        77.5+      ],+      "holeCenters": [+        [+          113.5,+          41.0+        ],+        [+          146.5,+          41.0+        ],+        [+          113.5,+          74.0+        ],+        [+          146.5,+          74.0+        ]+      ],+      "minimumBodyClearanceMm": -1.5,+      "bodyConflicts": [+        {+          "hole": [+            146.5,+            41.0+          ],+          "ref": "U1",+          "clearanceMm": -1.5+        }+      ]+    },+    {+      "sinkXY": [+        121.0,+        54.5,+        161.0,+        94.5+      ],+      "holeCenters": [+        [+          124.5,+          58.0+        ],+        [+          157.5,+          58.0+        ],+        [+          124.5,+          91.0+        ],+        [+          157.5,+          91.0+        ]+      ],+      "minimumBodyClearanceMm": -1.505,+      "bodyConflicts": [+        {+          "hole": [+            157.5,+            58.0+          ],+          "ref": "J11",+          "clearanceMm": -1.505+        }+      ]+    },+    {+      "sinkXY": [+        121.0,+        55.0,+        161.0,+        95.0+      ],+      "holeCenters": [+        [+          124.5,+          58.5+        ],+        [+          157.5,+          58.5+        ],+        [+          124.5,+          91.5+        ],+        [+          157.5,+          91.5+        ]+      ],+      "minimumBodyClearanceMm": -1.55,+      "bodyConflicts": [+        {+          "hole": [+            157.5,+            58.5+          ],+          "ref": "J11",+          "clearanceMm": -1.55+        }+      ]+    },+    {+      "sinkXY": [+        120.5,+        54.5,+        160.5,+        94.5+      ],+      "holeCenters": [+        [+          124.0,+          58.0+        ],+        [+          157.0,+          58.0+        ],+        [+          124.0,+          91.0+        ],+        [+          157.0,+          91.0+        ]+      ],+      "minimumBodyClearanceMm": -1.982,+      "bodyConflicts": [+        {+          "hole": [+            157.0,+            58.0+          ],+          "ref": "J11",+          "clearanceMm": -1.982+        }+      ]+    },+    {+      "sinkXY": [+        117.5,+        49.0,+        157.5,+        89.0+      ],+      "holeCenters": [+        [+          121.0,+          52.5+        ],+        [+          154.0,+          52.5+        ],+        [+          121.0,+          85.5+        ],+        [+          154.0,+          85.5+        ]+      ],+      "minimumBodyClearanceMm": -1.25,+      "bodyConflicts": [+        {+          "hole": [+            121.0,+            85.5+          ],+          "ref": "Q2",+          "clearanceMm": -1.25+        },+        {+          "hole": [+            121.0,+            85.5+          ],+          "ref": "Q3",+          "clearanceMm": -0.5+        }+      ]+    },+    {+      "sinkXY": [+        117.5,+        49.5,+        157.5,+        89.5+      ],+      "holeCenters": [+        [+          121.0,+          53.0+        ],+        [+          154.0,+          53.0+        ],+        [+          121.0,+          86.0+        ],+        [+          154.0,+          86.0+        ]+      ],+      "minimumBodyClearanceMm": -1.25,+      "bodyConflicts": [+        {+          "hole": [+            121.0,+            86.0+          ],+          "ref": "Q2",+          "clearanceMm": -1.25+        },+        {+          "hole": [+            121.0,+            86.0+          ],+          "ref": "Q3",+          "clearanceMm": -0.0+        }+      ]+    },+    {+      "sinkXY": [+        121.0,+        54.0,+        161.0,+        94.0+      ],+      "holeCenters": [+        [+          124.5,+          57.5+        ],+        [+          157.5,+          57.5+        ],+        [+          124.5,+          90.5+        ],+        [+          157.5,+          90.5+        ]+      ],+      "minimumBodyClearanceMm": -1.312,+      "bodyConflicts": [+        {+          "hole": [+            157.5,+            57.5+          ],+          "ref": "J11",+          "clearanceMm": -1.312+        },+        {+          "hole": [+            157.5,+            90.5+          ],+          "ref": "C6",+          "clearanceMm": -0.125+        }+      ]+    },+    {+      "sinkXY": [+        121.0,+        55.5,+        161.0,+        95.5+      ],+      "holeCenters": [+        [+          124.5,+          59.0+        ],+        [+          157.5,+          59.0+        ],+        [+          124.5,+          92.0+        ],+        [+          157.5,+          92.0+        ]+      ],+      "minimumBodyClearanceMm": -1.55,+      "bodyConflicts": [+        {+          "hole": [+            124.5,+            59.0+          ],+          "ref": "R22",+          "clearanceMm": 0.096+        },+        {+          "hole": [+            157.5,+            59.0+          ],+          "ref": "J11",+          "clearanceMm": -1.55+        }+      ]+    },+    {+      "sinkXY": [+        120.5,+        54.0,+        160.5,+        94.0+      ],+      "holeCenters": [+        [+          124.0,+          57.5+        ],+        [+          157.0,+          57.5+        ],+        [+          124.0,+          90.5+        ],+        [+          157.0,+          90.5+        ]+      ],+      "minimumBodyClearanceMm": -1.715,+      "bodyConflicts": [+        {+          "hole": [+            157.0,+            57.5+          ],+          "ref": "J11",+          "clearanceMm": -1.715+        },+        {+          "hole": [+            157.0,+            90.5+          ],+          "ref": "C6",+          "clearanceMm": -0.097+        }+      ]+    },+    {+      "sinkXY": [+        118.5,+        50.0,+        158.5,+        90.0+      ],+      "holeCenters": [+        [+          122.0,+          53.5+        ],+        [+          155.0,+          53.5+        ],+        [+          122.0,+          86.5+        ],+        [+          155.0,+          86.5+        ]+      ],+      "minimumBodyClearanceMm": -2.25,+      "bodyConflicts": [+        {+          "hole": [+            122.0,+            86.5+          ],+          "ref": "Q2",+          "clearanceMm": -2.25+        },+        {+          "hole": [+            155.0,+            86.5+          ],+          "ref": "C6",+          "clearanceMm": -0.6+        }+      ]+    }+  ],+  "limitations": [+    "No PCB holes added",+    "Copper and drill clearance not yet checked",+    "Generic Q1 contact face, not exact manufacturer CAD",+    "Actual hardware and TIM unselected",+    "Mating plugs, airflow and physical qualification pending"+  ]+}
mechanical/cooling-drill-screen.jsonadded+263
@@ -0,0 +1,263 @@+{+  "boardSha256": "653e54e711552eb2f16b6d01cd144fd82645a52c30ff11e39699b760402af51a",+  "sinkXY": [+    116.5,+    49.5,+    156.5,+    89.5+  ],+  "assumedHardwareDiameterMm": 5,+  "assumedDrillDiameterMm": 2.7,+  "assumedCopperClearanceMm": 0.25,+  "status": "rejected",+  "holes": [+    {+      "centerMm": [+        120,+        53+      ],+      "conflicts": [+        {+          "kind": "track",+          "label": "3V3",+          "clearanceMm": -0.275+        },+        {+          "kind": "track",+          "label": "ARM_CLK",+          "clearanceMm": 0.0099+        },+        {+          "kind": "track",+          "label": "I_HARD_LIMIT",+          "clearanceMm": -1.3336+        },+        {+          "kind": "track",+          "label": "I_HARD_LIMIT",+          "clearanceMm": -0.8918+        },+        {+          "kind": "track",+          "label": "I_HARD_LIMIT",+          "clearanceMm": -0.3348+        },+        {+          "kind": "track",+          "label": "CLAMP_BASE",+          "clearanceMm": -0.9+        },+        {+          "kind": "track",+          "label": "CLAMP_BASE",+          "clearanceMm": -0.8929+        },+        {+          "kind": "track",+          "label": "CLAMP_BASE",+          "clearanceMm": -0.2657+        },+        {+          "kind": "track",+          "label": "DUT_ADC",+          "clearanceMm": -0.4851+        },+        {+          "kind": "track",+          "label": "DUT_ADC",+          "clearanceMm": -0.3348+        },+        {+          "kind": "track",+          "label": "DUT_ADC",+          "clearanceMm": -0.4454+        },+        {+          "kind": "via",+          "label": "CLAMP_BASE",+          "clearanceMm": -0.9884+        },+        {+          "kind": "via",+          "label": "DUT_ADC",+          "clearanceMm": -0.6204+        }+      ]+    },+    {+      "centerMm": [+        153,+        53+      ],+      "conflicts": [+        {+          "kind": "track",+          "label": "3V3",+          "clearanceMm": -0.075+        },+        {+          "kind": "track",+          "label": "3V3",+          "clearanceMm": 0.0118+        },+        {+          "kind": "track",+          "label": "USB_VBUS",+          "clearanceMm": -0.019+        },+        {+          "kind": "track",+          "label": "USB_VBUS",+          "clearanceMm": -0.1408+        },+        {+          "kind": "track",+          "label": "USB_VBUS",+          "clearanceMm": -0.4143+        },+        {+          "kind": "track",+          "label": "FAN_TACH",+          "clearanceMm": -1.35+        },+        {+          "kind": "track",+          "label": "FAN_TACH",+          "clearanceMm": -0.8918+        },+        {+          "kind": "track",+          "label": "SWDIO",+          "clearanceMm": -0.4851+        },+        {+          "kind": "via",+          "label": "GND",+          "clearanceMm": 0.1694+        },+        {+          "kind": "via",+          "label": "FAN_TACH",+          "clearanceMm": 0.1195+        },+        {+          "kind": "via",+          "label": "FAN_TACH",+          "clearanceMm": -1.0665+        }+      ]+    },+    {+      "centerMm": [+        120,+        86+      ],+      "conflicts": [+        {+          "kind": "track",+          "label": "3V3",+          "clearanceMm": 0.0482+        },+        {+          "kind": "track",+          "label": "3V3",+          "clearanceMm": -0.0432+        },+        {+          "kind": "track",+          "label": "3V3",+          "clearanceMm": -0.0432+        },+        {+          "kind": "track",+          "label": "SHUNT_P_SENSE",+          "clearanceMm": -0.694+        },+        {+          "kind": "track",+          "label": "SHUNT_P_SENSE",+          "clearanceMm": -0.6972+        },+        {+          "kind": "track",+          "label": "SHUNT_P_SENSE",+          "clearanceMm": -0.1596+        },+        {+          "kind": "track",+          "label": "I_SET",+          "clearanceMm": 0.0871+        },+        {+          "kind": "track",+          "label": "I_SET",+          "clearanceMm": -0.475+        },+        {+          "kind": "track",+          "label": "I_SET",+          "clearanceMm": -0.47+        },+        {+          "kind": "track",+          "label": "GATE",+          "clearanceMm": -0.85+        },+        {+          "kind": "track",+          "label": "GATE",+          "clearanceMm": -0.1292+        },+        {+          "kind": "track",+          "label": "LOAD_POS",+          "clearanceMm": -1.35+        },+        {+          "kind": "via",+          "label": "3V3",+          "clearanceMm": -0.1268+        },+        {+          "kind": "via",+          "label": "I_SET",+          "clearanceMm": -0.0879+        }+      ]+    },+    {+      "centerMm": [+        153,+        86+      ],+      "conflicts": [+        {+          "kind": "track",+          "label": "5V_AUX",+          "clearanceMm": -0.4+        },+        {+          "kind": "track",+          "label": "V_GATE",+          "clearanceMm": -1.3+        },+        {+          "kind": "track",+          "label": "V_GATE",+          "clearanceMm": -1.0527+        },+        {+          "kind": "via",+          "label": "V_GATE",+          "clearanceMm": -1.2025+        }+      ]+    }+  ],+  "limitations": [+    "Candidate hardware not selected",+    "Pad circles are conservative",+    "Pours, copper graphics, slots and arcs not included; native DRC still required",+    "No board geometry changed; no thermal or mechanical qualification"+  ]+}
mechanical/q1-nominal-contact-faces.jsonadded+37
@@ -0,0 +1,37 @@+{+  "boardRef": "Q1",+  "model": "KiCad generic TO-220-3 Horizontal TabUp, not exact manufacturer CAD",+  "faces": [+    {+      "areaMm2": 12.603250000000031,+      "zMm": 4.445000000000001,+      "boundsXY": [+        122.335,+        68.825,+        132.585,+        77.515+      ]+    },+    {+      "areaMm2": 53.49251890601886,+      "zMm": 3.1850000000000014,+      "boundsXY": [+        122.345,+        62.525,+        132.575,+        68.825+      ]+    },+    {+      "areaMm2": 129.96176890601888,+      "zMm": 4.455000000000001,+      "boundsXY": [+        122.345,+        62.525,+        132.575,+        76.3+      ]+    }+  ],+  "qualification": "Geometric candidates only; confirm exact metal tab face/dimensions from IXYS drawing"+}\ No newline at end of file
tools/review_diode_rounding.pyadded+32
@@ -0,0 +1,32 @@+"""Audit the exact six documented native nanometre rounding differences, not a general tolerance bypass."""+import json+import math+from pathlib import Path++root = Path(__file__).resolve().parents[1]+source = root / 'design/diode-thermal-live/saved-comparison.json'+report = json.loads(source.read_text())+assert not report['copperMultisetEqual']+assert len(report['missing']) == len(report['extra']) == 6+remaining = list(report['extra'])+pairs = []+for old, count in report['missing']:+    assert count == 1 and old[0:2] == ['via', 'LOAD_POS'] and old[3:] == [.6, .3]+    match = min(remaining, key=lambda row: math.dist(old[2], row[0][2]))+    new, new_count = match+    assert new_count == 1 and old[:2] == new[:2] and old[3:] == new[3:]+    delta = math.dist(old[2], new[2])+    assert delta <= 1.415e-6  # at most one native nanometre on each axis+    pairs.append({'candidateMm': old[2], 'savedMm': new[2], 'distanceNm': delta * 1e6})+    remaining.remove(match)+assert not remaining and report['zoneKeysEqual']+assert max(report['zoneSymmetricDifferenceMm2'].values()) < 1e-6+result = {+    'status': 'documented-native-rounding-only',+    'candidateSha256': report['candidateSha256'], 'savedSha256': report['savedSha256'],+    'exactEquality': False, 'otherTrackViaMultisetDifferences': 0, 'pairs': pairs,+    'zoneSymmetricDifferenceMm2': report['zoneSymmetricDifferenceMm2'],+    'qualification': 'Geometric audit only. Actual saved-board native DRC required; no thermal or hardware qualification.',+}+(source.parent / 'rounding-review.json').write_text(json.dumps(result, indent=2) + '\n')+print(json.dumps(result, indent=2))
tools/screen_cooling_drills.pyadded+57
@@ -0,0 +1,57 @@+"""Reject proposed mount drills against existing tracks/vias and conservative pad envelopes.++This read-only screen excludes pours (which require native refill) and is not DRC.+"""+import hashlib+import json+import math+from pathlib import Path++from shapely.geometry import LineString, Point+import sexp++root = Path(__file__).resolve().parents[1]+board = root / 'kicad/adom-custom-electronic-load.kicad_pcb'+tree = sexp.parse(board.read_text())+holes = [(120, 53), (153, 53), (120, 86), (153, 86)]+obstacles = []+for segment in sexp.find(tree, 'segment'):+    points = [tuple(map(float, sexp.first(segment, key)[1:3])) for key in ('start', 'end')]+    shape = LineString(points).buffer(float(sexp.first(segment, 'width')[1]) / 2)+    obstacles.append(('track', str(sexp.first(segment, 'net')[1]), shape))+for via in sexp.find(tree, 'via'):+    shape = Point(*map(float, sexp.first(via, 'at')[1:3])).buffer(float(sexp.first(via, 'size')[1]) / 2)+    obstacles.append(('via', str(sexp.first(via, 'net')[1]), shape))+for fp in sexp.find(tree, 'footprint'):+    ref = next(p[2] for p in sexp.find(fp, 'property') if p[1] == 'Reference')+    at = list(map(float, sexp.first(fp, 'at')[1:]))+    angle = math.radians(at[2] if len(at) > 2 else 0)+    for pad in sexp.find(fp, 'pad'):+        x, y = map(float, sexp.first(pad, 'at')[1:3])+        px = at[0] + x * math.cos(angle) + y * math.sin(angle)+        py = at[1] - x * math.sin(angle) + y * math.cos(angle)+        width, height = map(float, sexp.first(pad, 'size')[1:3])+        # Circumscribed circle deliberately over-rejects rectangular/oval pads.+        shape = Point(px, py).buffer(math.hypot(width, height) / 2)+        obstacles.append(('pad-envelope', f'{ref}.{pad[1]}', shape))+rows = []+for x, y in holes:+    conflicts = []+    for kind, label, shape in obstacles:+        clearance = Point(x, y).distance(shape) - 1.35+        if clearance < .25:+            conflicts.append({'kind': kind, 'label': label, 'clearanceMm': round(clearance, 4)})+    rows.append({'centerMm': [x, y], 'conflicts': conflicts})+report = {+    'boardSha256': hashlib.sha256(board.read_bytes()).hexdigest(),+    'sinkXY': [116.5, 49.5, 156.5, 89.5],+    'assumedHardwareDiameterMm': 5, 'assumedDrillDiameterMm': 2.7,+    'assumedCopperClearanceMm': .25,+    'status': 'rejected' if any(r['conflicts'] for r in rows) else 'requires-native-review',+    'holes': rows,+    'limitations': ['Candidate hardware not selected', 'Pad circles are conservative',+                    'Pours, copper graphics, slots and arcs not included; native DRC still required',+                    'No board geometry changed; no thermal or mechanical qualification'],+}+(root / 'mechanical/cooling-drill-screen.json').write_text(json.dumps(report, indent=2) + '\n')+print(json.dumps(report, indent=2))
tools/search_cooling_envelope.pyadded+23
@@ -0,0 +1,23 @@+"""Screen commercial 40 mm sink placement against nominal contact, bodies and probes."""+import json,math+from pathlib import Path+P=Path(__file__).resolve().parents[1];a=json.loads((P/'mechanical/cooling-body-audit.json').read_text());old=json.loads((P/'mechanical/cooling-mount-screen.json').read_text());bodies=[r for r in a['rows']if r.get('boundsMm') and r['boundsMm'][5]>=0];probes=old['probeChecks'];solutions=[]+def distance(pt,b):return math.hypot(max(b[0]-pt[0],0,pt[0]-b[2]),max(b[1]-pt[1],0,pt[1]-b[3]))+for i in range(47):+ x=98+i*.5+ for k in range(51):+  y=37+k*.5;box=[x,y,x+40,y+40]+  if not(x<=121.345 and x+40>=133.575 and y<=61.525 and y+40>=77.3):continue+  if y+40>102:continue+  conflicts=[r['ref']for r in probes if distance((r['x'],r['y']),box)<2]+  if conflicts:continue+  holes=[(x+3.5,y+3.5),(x+36.5,y+3.5),(x+3.5,y+36.5),(x+36.5,y+36.5)]+  collisions=[];minimum=1e9+  for pt in holes:+   for r in bodies:+    b=r['boundsMm'];d=distance(pt,[b[0],b[1],b[3],b[4]])-3+    minimum=min(minimum,d)+    if d<.25:collisions.append({'hole':pt,'ref':r['ref'],'clearanceMm':round(d,3)})+  solutions.append({'sinkXY':box,'holeCenters':holes,'minimumBodyClearanceMm':round(minimum,3),'bodyConflicts':collisions})+solutions.sort(key=lambda r:(len(r['bodyConflicts']),-r['minimumBodyClearanceMm']))+r={'boardSha256':a['boardSha256'],'mpn':'ATS-CPX040040020-115-C1-R0','method':'0.5 mm XY grid, 1 mm nominal case-face margin, 2 mm probe radius, 3 mm hardware radius plus 0.25 mm body clearance','survivingProbeClearCandidates':len(solutions),'bestCandidates':solutions[:10],'limitations':['No PCB holes added','Copper and drill clearance not yet checked','Generic Q1 contact face, not exact manufacturer CAD','Actual hardware and TIM unselected','Mating plugs, airflow and physical qualification pending']};(P/'mechanical/cooling-40mm-search.json').write_text(json.dumps(r,indent=2)+'\n');print(json.dumps({**r,'bestCandidates':solutions[:3]},indent=2))
videos/inventory.json+7−1
@@ -1,5 +1,5 @@ {-  "rawTakeCount": 57,+  "rawTakeCount": 58,   "reviewedExcerptCount": 16,   "countingRule": "Unique raw window recording filenames in this project; excludes derivative action/speed exports and reference projects. Raw count includes rejected takes.",   "takes": [@@ -344,6 +344,12 @@       "durationSeconds": 20.533333,       "topic": "Gentle fan state cycle and added Adom connector harness",       "review": "published wiki viewer recording; editorial review pending"+    },+    {+      "file": "videos/diode-thermal/window-4654168-20261009-181525.mp4",+      "durationSeconds": 22.766667,+      "topic": "Nine D1 thermal vias landed through native KiCad IPC",+      "review": "Full decode and contact sheet reviewed: vias visibly added around D1; 2x excerpt prepared. Native recorder sample-timeline warning retained; encoded duration is not an engineering stopwatch."     }   ] }