Showing preview only (1,035K chars total). Download the full file or copy to clipboard to get everything.
Repository: w0rm/elm-physics
Branch: main
Commit: 8f1d0a30812c
Files: 105
Total size: 991.5 KB
Directory structure:
gitextract_5f8dznnk/
├── .github/
│ ├── FUNDING.yml
│ └── workflows/
│ ├── gh-pages.yml
│ ├── publish.yml
│ └── test.yml
├── .gitignore
├── LICENSE
├── README.md
├── benchmarks/
│ ├── README.md
│ ├── elm.json
│ └── src/
│ ├── AssignIds.elm
│ ├── Convex.elm
│ ├── ConvexConvex.elm
│ ├── EigenDecomposition.elm
│ └── SphereConvex.elm
├── docs.json
├── elm.json
├── examples/
│ ├── elm.json
│ ├── review/
│ │ ├── elm.json
│ │ └── src/
│ │ └── ReviewConfig.elm
│ └── src/
│ ├── Duckling.elm
│ ├── Duckling.obj.txt
│ ├── Jeep.obj.txt
│ ├── Lack.elm
│ ├── Raycast.elm
│ ├── RaycastCar/
│ │ ├── Car.elm
│ │ └── Jeep.elm
│ └── RaycastCar.elm
├── flake.nix
├── review/
│ ├── elm.json
│ └── src/
│ └── ReviewConfig.elm
├── sandbox/
│ ├── elm.json
│ ├── review/
│ │ ├── elm.json
│ │ └── src/
│ │ └── ReviewConfig.elm
│ ├── src/
│ │ ├── Boxes.elm
│ │ ├── Car.elm
│ │ ├── Character.elm
│ │ ├── Character2D.elm
│ │ ├── Cloth.elm
│ │ ├── Common/
│ │ │ ├── Camera.elm
│ │ │ ├── Fps.elm
│ │ │ ├── Math.elm
│ │ │ ├── Meshes.elm
│ │ │ ├── Scene.elm
│ │ │ ├── Settings.elm
│ │ │ └── Shaders.elm
│ │ ├── CompoundVsLock.elm
│ │ ├── Dominoes.elm
│ │ ├── Kinematic.elm
│ │ ├── Randomize.elm
│ │ ├── Stability/
│ │ │ ├── Metrics.elm
│ │ │ └── Scenarios.elm
│ │ ├── StabilityScenes.elm
│ │ └── UnsafeConvex.elm
│ └── tests/
│ └── StabilityTest.elm
├── scripts/
│ ├── elm-publish.sh
│ └── gh-pages.sh
├── src/
│ ├── Collision/
│ │ ├── ConvexConvex.elm
│ │ ├── ParticleConvex.elm
│ │ ├── PlaneConvex.elm
│ │ ├── PlaneParticle.elm
│ │ ├── PlaneSphere.elm
│ │ ├── SphereConvex.elm
│ │ ├── SphereParticle.elm
│ │ └── SphereSphere.elm
│ ├── Internal/
│ │ ├── AssignIds.elm
│ │ ├── Body.elm
│ │ ├── BroadPhase.elm
│ │ ├── Const.elm
│ │ ├── Constraint.elm
│ │ ├── Contact.elm
│ │ ├── Coordinates.elm
│ │ ├── Equation.elm
│ │ ├── Lock.elm
│ │ ├── Material.elm
│ │ ├── Matrix3.elm
│ │ ├── NarrowPhase.elm
│ │ ├── Shape.elm
│ │ ├── Solver.elm
│ │ ├── SolverBody.elm
│ │ ├── Transform3d.elm
│ │ └── Vector3.elm
│ ├── Physics/
│ │ ├── Constraint.elm
│ │ ├── Lock.elm
│ │ ├── Material.elm
│ │ ├── Shape.elm
│ │ └── Types.elm
│ ├── Physics.elm
│ └── Shapes/
│ ├── Convex.elm
│ ├── Plane.elm
│ └── Sphere.elm
└── tests/
├── BodyTest.elm
├── Collision/
│ ├── ConvexConvexTest.elm
│ ├── PlaneSphereTest.elm
│ └── SphereConvexTest.elm
├── EigenDecompositionTest.elm
├── Extra/
│ └── Expect.elm
├── Fixtures/
│ ├── Convex.elm
│ └── NarrowPhase.elm
├── KinematicTest.elm
├── Matrix3Test.elm
├── PlaceInTest.elm
├── Shapes/
│ └── ConvexTest.elm
├── SimulateTest.elm
├── Transform3dFromFrame3dTest.elm
└── Transform3dTest.elm
================================================
FILE CONTENTS
================================================
================================================
FILE: .github/FUNDING.yml
================================================
github: w0rm
================================================
FILE: .github/workflows/gh-pages.yml
================================================
name: GitHub Pages
on:
push:
branches: [main]
jobs:
test:
uses: ./.github/workflows/test.yml
secrets: inherit
gh-pages:
needs: test
runs-on: ubuntu-latest
steps:
- run: git config --global user.name "Andrey Kuzmin"
- run: git config --global user.email "hi@unsoundscapes.com"
- uses: actions/checkout@v4
- uses: cachix/install-nix-action@v29
with:
github_access_token: ${{ secrets.GITHUB_TOKEN }}
- uses: actions/checkout@v4
with:
path: gh-pages
ref: gh-pages
- run: nix develop --command ./scripts/gh-pages.sh
================================================
FILE: .github/workflows/publish.yml
================================================
name: Publish
on:
workflow_dispatch:
inputs:
version:
description: "Confirm the new version"
required: true
branches: [main]
jobs:
test:
uses: ./.github/workflows/test.yml
secrets: inherit
publish:
needs: test
runs-on: ubuntu-latest
steps:
- run: git config --global user.name "Andrey Kuzmin"
- run: git config --global user.email "hi@unsoundscapes.com"
- uses: actions/checkout@v4
- uses: cachix/install-nix-action@v29
with:
github_access_token: ${{ secrets.GITHUB_TOKEN }}
- run: nix develop --command ./scripts/elm-publish.sh ${{ github.event.inputs.version }}
- uses: actions/checkout@v4
with:
path: gh-pages
ref: gh-pages
- run: nix develop --command ./scripts/gh-pages.sh ${{ github.event.inputs.version }}
================================================
FILE: .github/workflows/test.yml
================================================
name: Test
on:
pull_request:
branches: [main]
workflow_call:
jobs:
elm-test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: cachix/install-nix-action@v29
with:
github_access_token: ${{ secrets.GITHUB_TOKEN }}
- run: nix develop --command elm-format --validate .
- run: nix develop --command elm-review
- run: nix develop --command elm-test
- run: cd sandbox && nix develop --command elm-test
- run: nix develop --command elm make --docs docs.json
- run: git diff --exit-code docs.json
================================================
FILE: .gitignore
================================================
release
gh-pages
elm-stuff
.DS_Store
.idea
================================================
FILE: LICENSE
================================================
Copyright (c) 2018-2026, Andrey Kuzmin
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following
disclaimer in the documentation and/or other materials provided
with the distribution.
* Neither the name of the copyright holder nor the names of its
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
================================================
FILE: README.md
================================================
# 3D Physics Engine

```elm
type Id = Ball | Floor
bodies : List ( Id, Body )
bodies =
[ ( Ball
, Physics.sphere
(Sphere3d.atOrigin (Length.meters 0.5))
Material.rubber
|> Physics.moveTo (Point3d.meters 0 0 5)
)
, ( Floor, Physics.plane Plane3d.xy Material.wood )
]
step model =
let
( newBodies, newContacts ) =
Physics.simulate
{ onEarth | contacts = model.contacts }
model.bodies
in
{ model | bodies = newBodies, contacts = newContacts }
```
# Features
- **Pure** — `simulate` is a function, not a stateful world; deterministic, replayable, time-travel friendly.
- **Your list is the world** — bodies live in `List ( id, Body )`; add with `(::)`, remove with `List.filter`.
- **Type-safe coordinates and units** — built on [elm-geometry](https://package.elm-lang.org/packages/ianmackenzie/elm-geometry/latest/) and [elm-units](https://package.elm-lang.org/packages/ianmackenzie/elm-units/latest/); phantom types keep `WorldCoordinates` and `BodyCoordinates` apart, and forces, masses, velocities, and durations all carry units.
- **Compound bodies** — combine shapes with `Shape.plus` / `minus` / `sum` and per-shape densities; mass, center of mass, and the full inertia tensor are derived for you.
- **Declarative constraints and collisions** — pass `constrain` and `collide` as functions to `simulate`; the engine asks per body-pair what applies, so there's no constraint registry and no filter-group API.
- **Warm-started solver** — feed last frame's contacts back into `simulate` for stable stacks.
# Examples
- Lack ([source](https://github.com/w0rm/elm-physics/tree/main/examples/src/Lack.elm), [demo](https://unsoundscapes.com/elm-physics/examples/lack/))
- Duckling ([source](https://github.com/w0rm/elm-physics/tree/main/examples/src/Duckling.elm), [demo](https://unsoundscapes.com/elm-physics/examples/duckling/))
- Raycast ([source](https://github.com/w0rm/elm-physics/tree/main/examples/src/Raycast.elm), [demo](https://unsoundscapes.com/elm-physics/examples/raycast/))
- RaycastCar ([source](https://github.com/w0rm/elm-physics/tree/main/examples/src/RaycastCar.elm), [demo](https://unsoundscapes.com/elm-physics/examples/raycast-car/))
# Prior Work
Inspired by [Cannon.js](https://github.com/schteppe/cannon.js) and [Bullet](https://github.com/bulletphysics/bullet3) — this project is an experiment in what a purely functional 3D physics engine can look like.
================================================
FILE: benchmarks/README.md
================================================
# Elm Performance Rules
When writing or reviewing Elm code in this repo, apply these performance rules to avoid slow JavaScript output, and then check if the tests pass:
1. **Tail-optimized recursion over List.*** — Replace `List.map`, `List.foldl`, `List.filter`, etc. with explicit tail-recursive helper functions. They compile to `while` loops in JS; higher-order List functions do not. Unpack any intermediate records used for recursion state into separate arguments to reduce object allocation. But keep in mind that mutual recursion is not optimised and must be avoided.
2. **Compare to zero instead of comparing two bindings** — Prefer `a - b == 0` over `a == b` when both sides are bindings. Direct equality between two bindings calls the Elm structural equality function; subtracting and comparing to 0 uses JS `===` on a number. Comparing against a numeric literal (e.g. `a == -1`, `idx > -1`) is fine as-is — the compiler already emits a direct JS comparison for literals.
3. **Unroll tuple pattern matches into nested case expressions** — Replace `case (a, b) of` with nested `case a of` / `case b of`. Tuple patterns allocate a temporary object at runtime; nested matches do not.
4. **Use sentinel values instead of Maybe for Int** — Avoid wrapping Int results in `Just`/`Nothing` when a sentinel like `-1` can represent the absent case. This eliminates allocation and unwrapping overhead. A similar technique: use an impossible filler element in a List or Array to avoid `Maybe` at boundaries.
5. **Pattern match Result/Maybe directly instead of using map/andThen** — Replace `Maybe.map f x` and `Result.andThen f x` with explicit `case` expressions. This avoids lambda allocation and indirect calls.
6. **Accumulate in reverse order when safe** — When making multiple recursive passes over a list, intermediate passes may produce a reversed list as long as the final output is correct. Avoid unnecessary `List.reverse` calls between passes. It is OK to use `List.reverse` when you must fix element order without modifying the elements themselves.
7. **Never use record update syntax** — `{ r | field = value }` generates slow JavaScript. Always spell out all record fields explicitly when constructing an updated record, even if most values are unchanged.
8. **Never use List.length** — `List.length` traverses the entire list and is O(n). Track counts explicitly as a separate argument rather than computing them from list lengths.
9. **Prefer `Set.fromList` over repeated `Set.insert`** — When building a `Set` from multiple elements, accumulate them into a list first and call `Set.fromList` at the end. Repeatedly calling `Set.insert` is slower than a single `Set.fromList` call.
10. **Avoid `|>` on the hot path** — Do not use the pipe operator in tight loops or recursive functions that process faces or vertices. It introduces lambda wrapping and indirect calls. `|>` is fine outside the hot path (e.g. at the decoder level or in one-time setup code).
11. **Prefer `Dict.get` + `Dict.insert` over `Dict.update`** — `Dict.update` accepts a lambda, which introduces indirect calls and closure allocation. Use `Dict.get` + a `case` expression + `Dict.insert` instead when conditionally inserting or modifying a value in a `Dict`.
12. **Minimize `Just wrappers`** use `(Just value) as passThroug ->` in and then return `passThrough` from the case of, instead of returning `(Just value)`.
================================================
FILE: benchmarks/elm.json
================================================
{
"type": "application",
"source-directories": [
"src",
"../src",
"../tests"
],
"elm-version": "0.19.1",
"dependencies": {
"direct": {
"elm/core": "1.0.5",
"elm/html": "1.0.1",
"elm/json": "1.1.4",
"elm/random": "1.0.0",
"elm-explorations/benchmark": "1.0.2",
"ianmackenzie/elm-geometry": "4.0.0",
"ianmackenzie/elm-units": "2.10.0"
},
"indirect": {
"BrianHicks/elm-trend": "2.1.3",
"elm/browser": "1.0.2",
"elm/regex": "1.0.0",
"elm/time": "1.0.0",
"elm/url": "1.0.0",
"elm/virtual-dom": "1.0.5",
"ianmackenzie/elm-1d-parameter": "1.0.1",
"ianmackenzie/elm-float-extra": "1.1.0",
"ianmackenzie/elm-interval": "3.1.0",
"ianmackenzie/elm-triangular-mesh": "1.1.0",
"ianmackenzie/elm-units-interval": "3.2.0",
"mdgriffith/style-elements": "5.0.2",
"robinheghan/murmur3": "1.0.0"
}
},
"test-dependencies": {
"direct": {},
"indirect": {}
}
}
================================================
FILE: benchmarks/src/AssignIds.elm
================================================
module AssignIds exposing (main)
{-| Benchmarks for the ID-assignment pass in Physics.simulate.
Both candidates use the same four-phase structure:
- Collect: scan bodies once, prepend existing IDs (O(1) each), count id=-1.
- Sort: List.sort once (native JS sort, O(n log n)).
- Analyse: single scan of sorted IDs to find duplicate IDs and free IDs.
- Assign: scan bodies, hand out pre-computed free IDs to id=-1 and duplicates.
twoPassOld — assign phase tracks claimed dups with two lists:
dupIds (fixed) + claimedDups (grows). Two List.member calls in the dup branch.
twoPass — assign phase uses findAndRemove on a single remainingDups list:
one pass checks membership and removes in one go; allDupIds (fixed, tiny)
only consulted for the rare second-occurrence case.
Three scenarios:
- stable — all bodies already have IDs (the common per-frame case)
- allNew — all bodies have id = -1 (first frame / full restart)
- withGaps — new bodies prepended (::) before stable even-ID bodies
-}
import Benchmark exposing (Benchmark, describe)
import Benchmark.Runner exposing (BenchmarkProgram, program)
import Internal.Body as InternalBody
import Internal.Material as Material
import Internal.Matrix3 as Mat3
import Internal.Transform3d as Transform3d
import Internal.Vector3 as Vec3
main : BenchmarkProgram
main =
program <|
describe "AssignIds"
[ Benchmark.compare "stable"
"twoPass"
(\_ -> assignIdsTwoPass stableInput)
"twoPassFast"
(\_ -> assignIdsTwoPassFast stableInput)
, Benchmark.compare "allNew"
"twoPass"
(\_ -> assignIdsTwoPass allNewInput)
"twoPassFast"
(\_ -> assignIdsTwoPassFast allNewInput)
, Benchmark.compare "withGaps"
"twoPass"
(\_ -> assignIdsTwoPass withGapsInput)
"twoPassFast"
(\_ -> assignIdsTwoPassFast withGapsInput)
, Benchmark.compare "withDups"
"twoPass"
(\_ -> assignIdsTwoPass withDupsInput)
"twoPassFast"
(\_ -> assignIdsTwoPassFast withDupsInput)
, Benchmark.compare "withDupsAndNew"
"twoPass"
(\_ -> assignIdsTwoPass withDupsAndNewInput)
"twoPassFast"
(\_ -> assignIdsTwoPassFast withDupsAndNewInput)
]
-- ── Test data ────────────────────────────────────────────────────────────────
emptyBody : Int -> InternalBody.Body
emptyBody id =
{ id = id
, material = Material.default
, transform3d = Transform3d.atOrigin
, centerOfMassTransform3d = Transform3d.atOrigin
, velocity = Vec3.zero
, angularVelocity = Vec3.zero
, mass = 0
, volume = 0
, shapes = []
, worldShapes = []
, force = Vec3.zero
, torque = Vec3.zero
, boundingSphereRadius = 0
, linearDamping = 0
, angularDamping = 0
, invMass = 0
, invInertia = Mat3.zero
, invInertiaWorld = Mat3.zero
}
{-| 125 bodies, all with IDs 0–124 — the steady-state per-frame case.
-}
stableInput : List ( Int, InternalBody.Protected )
stableInput =
List.map (\i -> ( i, InternalBody.Protected (emptyBody i) )) (List.range 0 124)
{-| 125 bodies, all with id = -1 — first frame or full restart.
-}
allNewInput : List ( Int, InternalBody.Protected )
allNewInput =
List.map (\i -> ( i, InternalBody.Protected (emptyBody -1) )) (List.range 0 124)
{-| 62 new bodies (id = -1) prepended to 63 stable bodies with IDs 0, 2, 4, …, 124.
Reflects the realistic usage pattern: new bodies are added with (::) to the front.
-}
withGapsInput : List ( Int, InternalBody.Protected )
withGapsInput =
List.map (\i -> ( 200 + i, InternalBody.Protected (emptyBody -1) )) (List.range 0 61)
++ List.map (\i -> ( 2 * i, InternalBody.Protected (emptyBody (2 * i)) )) (List.range 0 62)
{-| 20 extra bodies with duplicate IDs 0–19 appended to 105 stable bodies with IDs 0–104.
Models a scenario where some bodies are re-added without clearing their old IDs.
-}
withDupsInput : List ( Int, InternalBody.Protected )
withDupsInput =
List.map (\i -> ( i, InternalBody.Protected (emptyBody i) )) (List.range 0 104)
++ List.map (\i -> ( 200 + i, InternalBody.Protected (emptyBody i) )) (List.range 0 19)
{-| 20 duplicates of IDs 0–19, 20 new bodies (id = -1), and 85 stable bodies with IDs 0–84.
Exercises the assign phase with all three body kinds at once.
-}
withDupsAndNewInput : List ( Int, InternalBody.Protected )
withDupsAndNewInput =
List.map (\i -> ( 300 + i, InternalBody.Protected (emptyBody i) )) (List.range 0 19)
++ List.map (\i -> ( 200 + i, InternalBody.Protected (emptyBody -1) )) (List.range 0 19)
++ List.map (\i -> ( i, InternalBody.Protected (emptyBody i) )) (List.range 0 84)
-- ── twoPassOld ───────────────────────────────────────────────────────────────
-- Same as twoPass but uses two lists in the assign phase:
-- dupIds (all dup IDs, fixed) + claimedDups (grows as first occurrences are seen).
assignIdsTwoPassOld :
List ( id, InternalBody.Protected )
-> ( List ( id, InternalBody.Body ), Int )
assignIdsTwoPassOld bodies =
let
( existingIds, newCount, mx ) =
tpCollect bodies [] 0 -1
sorted =
List.sort existingIds
( dupIds, dupCount ) =
tpFindDups sorted -2 [] 0
freeIds =
tpFreeIds 0 sorted (newCount + dupCount) []
in
tpAssignOld bodies freeIds dupIds [] mx []
tpAssignOld :
List ( id, InternalBody.Protected )
-> List Int
-> List Int
-> List Int
-> Int
-> List ( id, InternalBody.Body )
-> ( List ( id, InternalBody.Body ), Int )
tpAssignOld bodies freeIds dupIds claimedDups mx acc =
case bodies of
[] ->
( acc, mx )
( extId, InternalBody.Protected body ) :: rest ->
if body.id == -1 then
case freeIds of
freshId :: remainingFree ->
tpAssignOld rest
remainingFree
dupIds
claimedDups
(max mx freshId)
(( extId, withId freshId body ) :: acc)
[] ->
tpAssignOld rest freeIds dupIds claimedDups mx acc
else if not (List.member body.id dupIds) then
tpAssignOld rest freeIds dupIds claimedDups mx (( extId, body ) :: acc)
else if List.member body.id claimedDups then
case freeIds of
freshId :: remainingFree ->
tpAssignOld rest
remainingFree
dupIds
claimedDups
(max mx freshId)
(( extId, withId freshId body ) :: acc)
[] ->
tpAssignOld rest freeIds dupIds claimedDups mx acc
else
tpAssignOld rest
freeIds
dupIds
(body.id :: claimedDups)
mx
(( extId, body ) :: acc)
-- ── twoPass ──────────────────────────────────────────────────────────────────
--
-- Phase 1 — tpCollect: one scan, O(1) per body.
-- Builds existingIds (unsorted, prepend only) and counts id=-1 bodies.
--
-- Sort — List.sort: native JS sort, O(n log n).
--
-- Phase 2a — tpFindDups: one scan of sorted, O(1) per element.
-- Detects duplicate IDs using a prev/prevAdded flag — no inner lookups.
--
-- Phase 2b — tpFreeIds: one scan of sorted, O(1) per element.
-- Finds the first (newCount + dupCount) gaps by merging counter with sorted.
--
-- Phase 3 — tpAssign: one scan of bodies, O(|dupIds|) per body.
-- dupIds is a multiset (one slot per replacement needed).
-- List.member finds the slot; removeFirst removes it in the same pass.
-- dupIds is empty for stable, so the common case has zero membership tests.
assignIdsTwoPass :
List ( id, InternalBody.Protected )
-> ( List ( id, InternalBody.Body ), Int )
assignIdsTwoPass bodies =
let
( existingIds, newCount, mx ) =
tpCollect bodies [] 0 -1
sorted =
List.sort existingIds
( dupIds, dupCount ) =
tpFindDups sorted -2 [] 0
freeIds =
tpFreeIds 0 sorted (newCount + dupCount) []
in
tpAssign bodies freeIds dupIds -1 mx []
{-| Pass 1: collect existing (non -1) IDs, count new bodies, track max id.
-}
tpCollect :
List ( id, InternalBody.Protected )
-> List Int
-> Int
-> Int
-> ( List Int, Int, Int )
tpCollect bodies existingIds newCount mx =
case bodies of
[] ->
( existingIds, newCount, mx )
( _, InternalBody.Protected body ) :: rest ->
if body.id == -1 then
tpCollect rest existingIds (newCount + 1) mx
else
tpCollect rest (body.id :: existingIds) newCount (max mx body.id)
{-| Scan sorted IDs, adding one entry per extra occurrence of each ID.
Duplicate → one entry. Triplicate → two entries. And so on.
Result is sorted descending — a natural consequence of prepending during an
ascending scan. Called with prev=-2 (impossible value) as initial sentinel.
-}
tpFindDups : List Int -> Int -> List Int -> Int -> ( List Int, Int )
tpFindDups sorted prev acc count =
case sorted of
[] ->
( acc, count )
x :: rest ->
if x - prev == 0 then
tpFindDups rest x (x :: acc) (count + 1)
else
tpFindDups rest x acc count
{-| Collect the first `needed` integers not present in sortedIds, starting from n.
Advances n past each taken slot; skips elements of sortedIds below n.
Returns results in ascending order via reversed accumulator.
-}
tpFreeIds : Int -> List Int -> Int -> List Int -> List Int
tpFreeIds n sorted needed revAcc =
if needed == 0 then
List.reverse revAcc
else
case sorted of
[] ->
tpFillFrom n needed revAcc
x :: rest ->
if x > n then
-- n is free
tpFreeIds (n + 1) sorted (needed - 1) (n :: revAcc)
else if x == n then
-- n is taken
tpFreeIds (n + 1) rest needed revAcc
else
-- x < n, stale entry — skip
tpFreeIds n rest needed revAcc
tpFillFrom : Int -> Int -> List Int -> List Int
tpFillFrom n needed revAcc =
if needed == 0 then
List.reverse revAcc
else
tpFillFrom (n + 1) (needed - 1) (n :: revAcc)
{-| Pass 3: assign free IDs to bodies that need them.
dupIds is a sorted multiset (descending initially, flipping on each removal).
memberSorted does an early-exit scan; removeFirstReversing removes the first
occurrence in one TCO pass that naturally reverses the list as a byproduct.
isAscending tracks the current direction so memberSorted exits the right way.
When dupIds is empty (the common stable case) both calls are skipped entirely.
-}
tpAssign :
List ( id, InternalBody.Protected )
-> List Int
-> List Int
-> Int
-> Int
-> List ( id, InternalBody.Body )
-> ( List ( id, InternalBody.Body ), Int )
tpAssign bodies freeIds dupIds dir mx acc =
case bodies of
[] ->
( acc, mx )
( extId, InternalBody.Protected body ) :: rest ->
if body.id == -1 then
case freeIds of
freshId :: remainingFree ->
tpAssign rest
remainingFree
dupIds
dir
(max mx freshId)
(( extId, withId freshId body ) :: acc)
[] ->
tpAssign rest freeIds dupIds dir mx acc
else
case dupIds of
[] ->
tpAssign rest freeIds [] dir mx (( extId, body ) :: acc)
_ ->
if memberSorted dir body.id dupIds then
case freeIds of
freshId :: remainingFree ->
tpAssign rest
remainingFree
(removeFirstReversing body.id [] dupIds)
(negate dir)
(max mx freshId)
(( extId, withId freshId body ) :: acc)
[] ->
tpAssign rest
freeIds
(removeFirstReversing body.id [] dupIds)
(negate dir)
mx
acc
else
tpAssign rest freeIds dupIds dir mx (( extId, body ) :: acc)
withId : Int -> InternalBody.Body -> InternalBody.Body
withId freshId body =
{ id = freshId, material = body.material, transform3d = body.transform3d, centerOfMassTransform3d = body.centerOfMassTransform3d, velocity = body.velocity, angularVelocity = body.angularVelocity, mass = body.mass, volume = body.volume, shapes = body.shapes, worldShapes = body.worldShapes, force = body.force, torque = body.torque, boundingSphereRadius = body.boundingSphereRadius, linearDamping = body.linearDamping, angularDamping = body.angularDamping, invMass = body.invMass, invInertia = body.invInertia, invInertiaWorld = body.invInertiaWorld }
memberSorted : Int -> Int -> List Int -> Bool
memberSorted dir x list =
case list of
[] ->
False
y :: rest ->
if y - x == 0 then
True
else if dir * (y - x) > 0 then
False
else
memberSorted dir x rest
{-| Remove the first occurrence of x and reverse the list in one TCO pass.
When x is found, skip it and accumulate the rest into acc — no prependReversed needed.
-}
removeFirstReversing : Int -> List Int -> List Int -> List Int
removeFirstReversing x acc remaining =
case remaining of
[] ->
acc
y :: rest ->
if y == x then
accumulate acc rest
else
removeFirstReversing x (y :: acc) rest
accumulate : List Int -> List Int -> List Int
accumulate acc remaining =
case remaining of
[] ->
acc
y :: rest ->
accumulate (y :: acc) rest
-- ── twoPassFast ───────────────────────────────────────────────────────────────
-- Same as twoPass but switches to tpAssignNoDups once dupIds is exhausted,
-- eliminating the case dupIds and dir checks for all remaining bodies.
assignIdsTwoPassFast :
List ( id, InternalBody.Protected )
-> ( List ( id, InternalBody.Body ), Int )
assignIdsTwoPassFast bodies =
let
( existingIds, newCount, mx ) =
tpCollect bodies [] 0 -1
sorted =
List.sort existingIds
( dupIds, dupCount ) =
tpFindDups sorted -2 [] 0
freeIds =
tpFreeIds 0 sorted (newCount + dupCount) []
in
case freeIds of
[] ->
tpAssignStable bodies mx []
_ ->
tpAssignFast bodies freeIds dupIds -1 mx []
tpAssignFast :
List ( id, InternalBody.Protected )
-> List Int
-> List Int
-> Int
-> Int
-> List ( id, InternalBody.Body )
-> ( List ( id, InternalBody.Body ), Int )
tpAssignFast bodies freeIds dupIds dir mx acc =
case freeIds of
[] ->
tpAssignStable bodies mx acc
freshId :: remainingFree ->
case bodies of
[] ->
( acc, mx )
( extId, InternalBody.Protected body ) :: rest ->
if body.id == -1 then
tpAssignFast rest
remainingFree
dupIds
dir
(max mx freshId)
(( extId, withId freshId body ) :: acc)
else if memberSorted dir body.id dupIds then
case removeFirstReversing body.id [] dupIds of
[] ->
tpAssignFast rest
remainingFree
[]
dir
(max mx freshId)
(( extId, withId freshId body ) :: acc)
newDupIds ->
tpAssignFast rest
remainingFree
newDupIds
(negate dir)
(max mx freshId)
(( extId, withId freshId body ) :: acc)
else
tpAssignFast rest freeIds dupIds dir mx (( extId, body ) :: acc)
tpAssignStable :
List ( id, InternalBody.Protected )
-> Int
-> List ( id, InternalBody.Body )
-> ( List ( id, InternalBody.Body ), Int )
tpAssignStable bodies mx acc =
case bodies of
[] ->
( acc, mx )
( extId, InternalBody.Protected body ) :: rest ->
tpAssignStable rest mx (( extId, body ) :: acc)
================================================
FILE: benchmarks/src/Convex.elm
================================================
module Convex exposing (main)
import Benchmark exposing (Benchmark, describe)
import Benchmark.Runner exposing (BenchmarkProgram, program)
import Internal.Transform3d as Transform3d
import Internal.Vector3 as Vec3
import Shapes.Convex as Convex
main : BenchmarkProgram
main =
program <|
describe "Convex"
[ placeIn
]
placeIn : Benchmark
placeIn =
let
sampleHull =
Convex.fromBlock 2 2 2
transform =
Transform3d.atPoint { x = 0, y = 0, z = 2.5 }
|> Transform3d.rotateAroundOwn Vec3.yAxis (pi / 4)
|> Transform3d.rotateAroundOwn Vec3.xAxis (pi / 20)
in
Benchmark.compare "placeIn"
"baseline"
(\_ ->
{- Convex.placeInOld -}
Convex.placeIn transform sampleHull
)
"latest code"
(\_ ->
Convex.placeIn transform sampleHull
)
================================================
FILE: benchmarks/src/ConvexConvex.elm
================================================
module ConvexConvex exposing (main)
import Benchmark exposing (Benchmark, describe)
import Benchmark.Runner exposing (BenchmarkProgram, program)
import Collision.ConvexConvex
import Internal.Transform3d as Transform3d
import Internal.Vector3 as Vec3
import Shapes.Convex as Convex exposing (Convex)
main : BenchmarkProgram
main =
program <|
describe "ConvexConvex.getContacts"
[ colliding
, separated
]
colliding : Benchmark
colliding =
let
-- Move the box 0.9 units up and rotate 45 around the y.
-- only 0.1 units of the box will be overlapping
-- we expect 4 collision points
transform3d =
Transform3d.atPoint { x = 0, y = 0, z = 0.9 }
|> Transform3d.rotateAroundOwn Vec3.yAxis (pi / 4)
|> Transform3d.rotateAroundOwn Vec3.xAxis (pi / 20)
firstConvex =
Convex.placeIn transform3d box
secondConvex =
Convex.placeIn Transform3d.atOrigin box
in
Benchmark.compare "colliding"
"baseline"
(\_ ->
{- Collision.ConvexConvex.oldAddContacts -}
Collision.ConvexConvex.addContacts firstConvex secondConvex []
)
"latest code"
(\_ ->
Collision.ConvexConvex.addContacts firstConvex secondConvex []
)
separated : Benchmark
separated =
let
-- Move the box 2.5 units up
-- so that boxes don’t overlap
transform3d =
Transform3d.atPoint { x = 0, y = 0, z = 2.5 }
|> Transform3d.rotateAroundOwn Vec3.yAxis (pi / 4)
|> Transform3d.rotateAroundOwn Vec3.xAxis (pi / 20)
firstConvex =
Convex.placeIn transform3d box
secondConvex =
Convex.placeIn Transform3d.atOrigin box
in
Benchmark.compare "separated"
"baseline"
(\_ ->
{- Collision.ConvexConvex.oldAddContacts -}
Collision.ConvexConvex.addContacts firstConvex secondConvex []
)
"latest code"
(\_ ->
Collision.ConvexConvex.addContacts firstConvex secondConvex []
)
box : Convex
box =
Convex.fromBlock 2 2 2
================================================
FILE: benchmarks/src/EigenDecomposition.elm
================================================
module EigenDecomposition exposing (main)
import Benchmark exposing (Benchmark, describe)
import Benchmark.Runner exposing (BenchmarkProgram, program)
import Internal.Matrix3 as Mat3 exposing (Mat3)
import Internal.Transform3d as Transform3d
import Internal.Vector3 as Vec3 exposing (Vec3)
main : BenchmarkProgram
main =
program <|
describe "EigenDecomposition"
[ sphere
, rotatedCylinder
]
sphere : Benchmark
sphere =
let
m =
Mat3.sphereInertia 5.0 2.0
in
Benchmark.compare "sphere"
"analytical"
(\_ -> analyticalEigenDecomposition m)
"jacobi"
(\_ -> Mat3.eigenDecomposition m)
rotatedCylinder : Benchmark
rotatedCylinder =
let
rotation =
Transform3d.rotateAroundOwn
(Vec3.normalize { x = 1, y = 1, z = 0 })
(pi / 3)
Transform3d.atOrigin
m =
Transform3d.inertiaRotateIn rotation (Mat3.cylinderInertia 5.0 1.0 3.0)
in
Benchmark.compare "rotated cylinder"
"analytical"
(\_ -> analyticalEigenDecomposition m)
"jacobi"
(\_ -> Mat3.eigenDecomposition m)
analyticalEigenDecomposition : Mat3 -> { eigenvalues : Vec3, v1 : Vec3, v2 : Vec3, v3 : Vec3 }
analyticalEigenDecomposition m =
let
p1 =
m.m12 * m.m12 + m.m13 * m.m13 + m.m23 * m.m23
in
if p1 == 0 then
{ eigenvalues = { x = m.m11, y = m.m22, z = m.m33 }
, v1 = Vec3.xAxis
, v2 = Vec3.yAxis
, v3 = Vec3.zAxis
}
else
nonDiagonalEigen m p1
nonDiagonalEigen : Mat3 -> Float -> { eigenvalues : Vec3, v1 : Vec3, v2 : Vec3, v3 : Vec3 }
nonDiagonalEigen m p1 =
let
q =
(m.m11 + m.m22 + m.m33) / 3
p2 =
(m.m11 - q) * (m.m11 - q) + (m.m22 - q) * (m.m22 - q) + (m.m33 - q) * (m.m33 - q) + 2 * p1
p =
sqrt (p2 / 6)
invP =
1 / p
b11 =
(m.m11 - q) * invP
b22 =
(m.m22 - q) * invP
b33 =
(m.m33 - q) * invP
b12 =
m.m12 * invP
b13 =
m.m13 * invP
b23 =
m.m23 * invP
detB =
b11 * (b22 * b33 - b23 * b23) - b12 * (b12 * b33 - b23 * b13) + b13 * (b12 * b23 - b22 * b13)
r =
clamp -1 1 (detB / 2)
phi =
acos r / 3
eig1 =
q + 2 * p * cos phi
eig3 =
q + 2 * p * cos (phi + 2 * pi / 3)
eig2 =
3 * q - eig1 - eig3
gap1 =
eig1 - eig2
gap2 =
eig2 - eig3
eigenvalues =
{ x = eig1, y = eig2, z = eig3 }
result ev1 ev2 ev3 =
{ eigenvalues = eigenvalues, v1 = ev1, v2 = ev2, v3 = ev3 }
in
if gap1 < 1.0e-10 && gap2 < 1.0e-10 then
result Vec3.xAxis Vec3.yAxis Vec3.zAxis
else if gap1 < 1.0e-10 then
let
u3 =
eigenvectorForEigenvalue m eig3
( t1, t2 ) =
Vec3.tangents u3
in
result t1 t2 u3
else if gap2 < 1.0e-10 then
let
u1 =
eigenvectorForEigenvalue m eig1
( t2, t3 ) =
Vec3.tangents u1
in
result u1 t2 t3
else
let
u1 =
eigenvectorForEigenvalue m eig1
u3 =
eigenvectorForEigenvalue m eig3
u2 =
Vec3.cross u3 u1
in
result u1 u2 u3
eigenvectorForEigenvalue : Mat3 -> Float -> Vec3
eigenvectorForEigenvalue m eigenvalue =
let
a11 =
m.m11 - eigenvalue
a22 =
m.m22 - eigenvalue
a33 =
m.m33 - eigenvalue
row0 =
{ x = a11, y = m.m12, z = m.m13 }
row1 =
{ x = m.m12, y = a22, z = m.m23 }
row2 =
{ x = m.m13, y = m.m23, z = a33 }
r0xr1 =
Vec3.cross row0 row1
r0xr2 =
Vec3.cross row0 row2
r1xr2 =
Vec3.cross row1 row2
d0 =
Vec3.lengthSquared r0xr1
d1 =
Vec3.lengthSquared r0xr2
d2 =
Vec3.lengthSquared r1xr2
in
if d0 >= d1 && d0 >= d2 then
Vec3.scale (1 / sqrt d0) r0xr1
else if d1 >= d2 then
Vec3.scale (1 / sqrt d1) r0xr2
else
Vec3.scale (1 / sqrt d2) r1xr2
================================================
FILE: benchmarks/src/SphereConvex.elm
================================================
module SphereConvex exposing (main)
import Benchmark exposing (Benchmark, describe)
import Benchmark.Runner exposing (BenchmarkProgram, program)
import Collision.SphereConvex
import Fixtures.Convex
import Fixtures.NarrowPhase
import Internal.Transform3d as Transform3d
import Shapes.Convex as Convex
import Shapes.Sphere as Sphere
main : BenchmarkProgram
main =
program suite
suite : Benchmark
suite =
let
center =
{ x = 0, y = 0, z = 7 }
radius =
5
boxSize =
2
boxHalfExtent =
boxSize / 2
boxHull =
Convex.fromBlock boxSize boxSize boxSize
boxPositions =
Fixtures.NarrowPhase.sphereContactBoxPositions center radius boxHalfExtent
|> List.map Tuple.first
boxFarPositions =
Fixtures.NarrowPhase.sphereContactBoxPositions center (radius * 2) boxHalfExtent
|> List.map Tuple.first
octoHalfExtent =
3
octoHull =
Fixtures.Convex.octoHull octoHalfExtent
octoPositions =
Fixtures.NarrowPhase.sphereContactOctohedronPositions center radius octoHalfExtent
|> List.map Tuple.first
octoFarPositions =
Fixtures.NarrowPhase.sphereContactOctohedronPositions center (radius * 2) octoHalfExtent
|> List.map Tuple.first
in
describe "SphereConvex"
[ Benchmark.compare "box colliding"
"baseline"
(\_ ->
boxPositions
|> List.map
(\position ->
{- Collision.SphereConvex.oldAddContacts -}
Collision.SphereConvex.addContacts
identity
(Sphere.atOrigin radius)
(Convex.placeIn (Transform3d.atPoint position) boxHull)
[]
)
)
"latest code"
(\_ ->
boxPositions
|> List.map
(\position ->
Collision.SphereConvex.addContacts
identity
(Sphere.placeIn (Transform3d.atPoint center) (Sphere.atOrigin radius))
(Convex.placeIn (Transform3d.atPoint position) boxHull)
[]
)
)
, Benchmark.compare "box separated"
"baseline"
(\_ ->
boxFarPositions
|> List.map
(\position ->
{- Collision.SphereConvex.oldAddContacts -}
Collision.SphereConvex.addContacts
identity
(Sphere.placeIn (Transform3d.atPoint center) (Sphere.atOrigin radius))
(Convex.placeIn (Transform3d.atPoint position) boxHull)
[]
)
)
"latest code"
(\_ ->
boxFarPositions
|> List.map
(\position ->
Collision.SphereConvex.addContacts
identity
(Sphere.placeIn (Transform3d.atPoint center) (Sphere.atOrigin radius))
(Convex.placeIn (Transform3d.atPoint position) boxHull)
[]
)
)
, Benchmark.compare "octahedron colliding"
"baseline"
(\_ ->
octoPositions
|> List.map
(\position ->
{- Collision.SphereConvex.oldAddContacts -}
Collision.SphereConvex.addContacts
identity
(Sphere.placeIn (Transform3d.atPoint center) (Sphere.atOrigin radius))
(Convex.placeIn (Transform3d.atPoint position) octoHull)
[]
)
)
"latest code"
(\_ ->
octoPositions
|> List.map
(\position ->
Collision.SphereConvex.addContacts
identity
(Sphere.placeIn (Transform3d.atPoint center) (Sphere.atOrigin radius))
(Convex.placeIn (Transform3d.atPoint position) octoHull)
[]
)
)
, Benchmark.compare "octahedron failing"
"baseline"
(\_ ->
octoFarPositions
|> List.map
(\position ->
{- Collision.SphereConvex.oldAddContacts -}
Collision.SphereConvex.addContacts
identity
(Sphere.placeIn (Transform3d.atPoint center) (Sphere.atOrigin radius))
(Convex.placeIn (Transform3d.atPoint position) octoHull)
[]
)
)
"latest code"
(\_ ->
octoFarPositions
|> List.map
(\position ->
Collision.SphereConvex.addContacts
identity
(Sphere.placeIn (Transform3d.atPoint center) (Sphere.atOrigin radius))
(Convex.placeIn (Transform3d.atPoint position) octoHull)
[]
)
)
]
================================================
FILE: docs.json
================================================
[{"name":"Physics","comment":"\n\n\n# Bodies\n\n@docs Body, BodyCoordinates, WorldCoordinates\n\n@docs block, plane, sphere, cylinder, pointMass\n\n\n# Positioning\n\n@docs moveTo, translateBy, rotateAround, place\n\n\n# Simulation\n\n@docs simulate, onEarth, Config\n\n@docs Contacts, emptyContacts, contactPoints\n\n\n# Properties\n\n@docs frame, originPoint, velocity, angularVelocity, velocityAt\n\n@docs centerOfMass, mass\n\n\n# Interaction\n\n@docs raycast, applyForce, applyImpulse, applyTorque, applyAngularImpulse\n\n\n# Composite bodies\n\n@docs dynamic, static, kinematic\n\n\n# Overrides\n\nChange body state directly, bypassing the simulation.\n\n@docs setVelocityTo, setAngularVelocityTo, scaleMassTo\n\n\n# Advanced\n\n@docs damp, lock, applyInverseInertia, angularAccelerationFromTorque, angularVelocityDeltaFromAngularImpulse\n\n","unions":[],"aliases":[{"name":"Body","comment":" A body is anything the simulation moves or collides — a ball, a box, a wall, a moving platform.\nIt is defined in [BodyCoordinates](#BodyCoordinates) and positioned in [WorldCoordinates](#WorldCoordinates).\nBodies start out centered on the origin; use [moveTo](#moveTo) to set the position.\n\nThere are three kinds of bodies:\n\n - **dynamic** — moved by the engine in response to forces, gravity, and contacts.\n The default for [block](#block), [sphere](#sphere), [cylinder](#cylinder), and\n [pointMass](#pointMass); use [dynamic](#dynamic) to combine several\n [shapes](Physics-Shape#Shape) into one body.\n\n - **static** — never moves. Used for floors, walls, and other immovable scenery.\n The default for [plane](#plane); use [static](#static) to combine several\n [shapes](Physics-Shape#Shape) into one body.\n\n - **kinematic** — moves at the velocity you set via [setVelocityTo](#setVelocityTo)\n and [setAngularVelocityTo](#setAngularVelocityTo); ignores forces, gravity, and\n contacts, but other dynamic bodies feel its motion through friction. Used for\n moving platforms, elevators, and turntables. Construct with [kinematic](#kinematic).\n\n","args":[],"type":"Physics.Types.Body"},{"name":"BodyCoordinates","comment":" ","args":[],"type":"Internal.Coordinates.BodyCoordinates"},{"name":"Config","comment":" Configures a simulation.\n\n onEarth =\n { gravity = Vector3d.gees 0 0 -1\n , duration = Duration.seconds (1 / 60)\n , solverIterations = 20\n , contacts = emptyContacts\n , constrain = \\_ -> Nothing\n , collide = \\_ _ -> True\n }\n\n - `gravity` — set the gravity vector, or `Vector3d.zero` for no gravity\n\n - `duration` — set to `Duration.seconds (1 / 60)` for 60 fps\n\n - `solverIterations` — balance between precision and performance, 20 is a sweet spot\n\n - `contacts` — pass [Contacts](#Contacts) from the previous frame for warm starting, or leave as default for cold start\n\n - `constrain` — limit body movement relative to each other, see [Constraint](Physics-Constraint#Constraint)\n\n - `collide` — decide which bodies can collide with each other\n\n","args":["id"],"type":"{ gravity : Vector3d.Vector3d Acceleration.MetersPerSecondSquared Physics.WorldCoordinates, duration : Duration.Duration, solverIterations : Basics.Int, contacts : Physics.Contacts id, constrain : id -> Maybe.Maybe (id -> List.List Physics.Constraint.Constraint), collide : id -> id -> Basics.Bool }"},{"name":"Contacts","comment":" Contacts from the most recent simulation frame. Contains contact points\nand solver state for warm starting.\n","args":["id"],"type":"Physics.Types.Contacts id"},{"name":"WorldCoordinates","comment":" ","args":[],"type":"Internal.Coordinates.WorldCoordinates"}],"values":[{"name":"angularAccelerationFromTorque","comment":" Compute angular acceleration from torque: α = I⁻¹τ\n\nHow fast will this torque make the body spin up?\n\n","type":"Physics.Body -> Vector3d.Vector3d Torque.NewtonMeters Physics.WorldCoordinates -> Vector3d.Vector3d AngularAcceleration.RadiansPerSecondSquared Physics.WorldCoordinates"},{"name":"angularVelocity","comment":" Get the current angular velocity of a body.\n","type":"Physics.Body -> Vector3d.Vector3d AngularSpeed.RadiansPerSecond Physics.WorldCoordinates"},{"name":"angularVelocityDeltaFromAngularImpulse","comment":" Compute angular velocity change from an angular impulse: Δω = I⁻¹L\n\nHow much does this impulse add to my current spin?\n\n","type":"Physics.Body -> Vector3d.Vector3d (Quantity.Product Torque.NewtonMeters Duration.Seconds) Physics.WorldCoordinates -> Vector3d.Vector3d AngularSpeed.RadiansPerSecond Physics.WorldCoordinates"},{"name":"applyAngularImpulse","comment":" Apply an angular impulse to a body, adding to its angular velocity.\n\n angularImpulse =\n Vector3d.withLength\n (Quantity.times (Duration.seconds 0.005)\n (Torque.newtonMeters 50)\n )\n Direction3d.positiveZ\n\n spunUp =\n body\n |> applyAngularImpulse angularImpulse\n\n","type":"Vector3d.Vector3d (Quantity.Product Torque.NewtonMeters Duration.Seconds) Physics.WorldCoordinates -> Physics.Body -> Physics.Body"},{"name":"applyForce","comment":" Apply a force at a point on a body.\n\nKeep applying the force every simulation step to accelerate.\n\n force =\n Vector3d.withLength (Force.newtons 50)\n Direction3d.positiveY\n\n pushedBox =\n box\n |> applyForce force pointOnBox\n\n","type":"Vector3d.Vector3d Force.Newtons Physics.WorldCoordinates -> Point3d.Point3d Length.Meters Physics.WorldCoordinates -> Physics.Body -> Physics.Body"},{"name":"applyImpulse","comment":" Apply an impulse at a point on a body, adding to its velocity and angular velocity.\n\n impulse =\n Vector3d.withLength\n (Quantity.times (Duration.seconds 0.005)\n (Force.newtons 50)\n )\n Direction3d.positiveY\n\n hitCueBall =\n cueBall\n |> applyImpulse impulse hitPoint\n\n","type":"Vector3d.Vector3d (Quantity.Product Force.Newtons Duration.Seconds) Physics.WorldCoordinates -> Point3d.Point3d Length.Meters Physics.WorldCoordinates -> Physics.Body -> Physics.Body"},{"name":"applyInverseInertia","comment":" Apply the inverse inertia tensor of a body to a vector.\nReturns Vector3d.zero for static and kinematic bodies.\nFor common cases, see [angularAccelerationFromTorque](#angularAccelerationFromTorque)\nand [angularVelocityDeltaFromAngularImpulse](#angularVelocityDeltaFromAngularImpulse).\n","type":"Physics.Body -> Vector3d.Vector3d units Physics.WorldCoordinates -> Vector3d.Vector3d (Quantity.Rate units (Quantity.Product Mass.Kilograms Area.SquareMeters)) Physics.WorldCoordinates"},{"name":"applyTorque","comment":" Apply a pure torque to a body — spin without translation.\n\nKeep applying the torque every simulation step to spin up.\n\n torque =\n Vector3d.withLength (Torque.newtonMeters 5)\n Direction3d.positiveZ\n\n spinningTop =\n top\n |> applyTorque torque\n\n","type":"Vector3d.Vector3d Torque.NewtonMeters Physics.WorldCoordinates -> Physics.Body -> Physics.Body"},{"name":"block","comment":" ","type":"Block3d.Block3d Length.Meters Physics.BodyCoordinates -> Physics.Material.Material Physics.Material.Dense -> Physics.Body"},{"name":"centerOfMass","comment":" Get the center of mass of a body. Returns Nothing for static and\nkinematic bodies (which have infinite mass).\n","type":"Physics.Body -> Maybe.Maybe (Point3d.Point3d Length.Meters Physics.WorldCoordinates)"},{"name":"contactPoints","comment":" Get contact points from the most recent simulation frame, filtered by a predicate.\nEach entry is a pair of body ids and a list of contact points between them.\n\n crash =\n Physics.contactPoints\n (\\a b -> a == \"jeep\" && b == \"wall\")\n contacts\n\n","type":"(id -> id -> Basics.Bool) -> Physics.Contacts id -> List.List ( id, id, List.List (Point3d.Point3d Length.Meters Physics.WorldCoordinates) )"},{"name":"cylinder","comment":" Create a cylinder, approximated with 12 side faces.\nFor more subdivisions, use [dynamic](#dynamic) with [Shape.cylinder](Physics-Shape#cylinder).\n","type":"Cylinder3d.Cylinder3d Length.Meters Physics.BodyCoordinates -> Physics.Material.Material Physics.Material.Dense -> Physics.Body"},{"name":"damp","comment":" Set linear and angular damping, in order to decrease velocity over time.\nThese parameters specify the proportion of velocity lost per second.\nValues are clamped to [0, 1]. Default: 0.01 for both.\n","type":"{ linear : Basics.Float, angular : Basics.Float } -> Physics.Body -> Physics.Body"},{"name":"dynamic","comment":" Create a dynamic body from shapes and materials. Mass and center of mass\nare derived from geometry and density.\n","type":"List.List ( Physics.Shape.Shape, Physics.Material.Material Physics.Material.Dense ) -> Physics.Body"},{"name":"emptyContacts","comment":" Empty contacts for the first simulation frame (no warm starting).\n","type":"Physics.Contacts id"},{"name":"frame","comment":" Get the position and orientation of the body as Frame3d.\nUseful to transform points and directions between world and body coordinates,\ne.g. for rendering.\n","type":"Physics.Body -> Frame3d.Frame3d Length.Meters Physics.WorldCoordinates { defines : Physics.BodyCoordinates }"},{"name":"kinematic","comment":" Create a kinematic body from shapes and materials. Kinematic bodies\nhave infinite mass like static bodies — forces, gravity, and contacts don’t\npush them — but they’re moved by the engine according to their velocity, set\nvia [setVelocityTo](#setVelocityTo) and [setAngularVelocityTo](#setAngularVelocityTo).\n\nUseful for moving platforms, elevators, conveyor belts, and turntables.\nDynamic bodies see the kinematic’s velocity at the contact, so a box rests\non a moving elevator without sliding off, and a conveyor carries crates\nalong its surface.\n\n elevator =\n Physics.kinematic [ ( Shape.block platform, Material.steel ) ]\n |> Physics.setVelocityTo (Vector3d.metersPerSecond 0 0 0.5)\n\n turntable =\n Physics.kinematic [ ( Shape.cylinder 16 disc, Material.plastic ) ]\n |> Physics.setAngularVelocityTo\n (Vector3d.withLength (AngularSpeed.radiansPerSecond 1)\n Direction3d.positiveZ\n )\n\n","type":"List.List ( Physics.Shape.Shape, Physics.Material.Material any ) -> Physics.Body"},{"name":"lock","comment":" Restrict a body’s degrees of freedom along world axes. The list fully\ndescribes the lock state — calling `lock` again replaces the previous\nmasks. An empty list clears all locks.\n\n -- 2D-in-3D gameplay on the XY plane\n body |> lock [ Lock.translateZ, Lock.rotateX, Lock.rotateY ]\n\n -- character controller: slides freely, never tips\n body |> lock Lock.allRotation\n\nSee [Physics.Lock](Physics-Lock) for the available tokens. Has no effect on\nstatic or kinematic bodies.\n\n","type":"List.List Physics.Lock.Lock -> Physics.Body -> Physics.Body"},{"name":"mass","comment":" Get the mass of a body. Returns Nothing for static and kinematic\nbodies (which have infinite mass).\n","type":"Physics.Body -> Maybe.Maybe Mass.Mass"},{"name":"moveTo","comment":" Set the position of the body, e.g. to raise a body 5 meters above the origin:\n\n movedBody =\n body\n |> moveTo (Point3d.meters 0 0 5)\n\n","type":"Point3d.Point3d Length.Meters Physics.WorldCoordinates -> Physics.Body -> Physics.Body"},{"name":"onEarth","comment":" A ready-to-use simulation config with Earth gravity pointing down (-Z)\nat 60 fps. Customize it by updating individual fields,\nsee [Config](#Config) for available options.\n","type":"Physics.Config id"},{"name":"originPoint","comment":" Get the origin point of a body.\n","type":"Physics.Body -> Point3d.Point3d Length.Meters Physics.WorldCoordinates"},{"name":"place","comment":" Set the position and orientation of a body. Like [moveTo](#moveTo)\nbut also sets the orientation.\n\n placedBody =\n body\n |> place\n (Frame3d.atPoint (Point3d.meters 2 0 1)\n |> Frame3d.rotateAround Axis3d.z\n (Angle.degrees 45)\n )\n\nLeft-handed frames are not supported — Z is recomputed from X and Y.\n\n","type":"Frame3d.Frame3d Length.Meters Physics.WorldCoordinates { defines : Physics.BodyCoordinates } -> Physics.Body -> Physics.Body"},{"name":"plane","comment":" Create a static plane, collidable only from the direction of the normal,\ne.g. for +Z:\n\n floor =\n Physics.plane Plane3d.xy Material.wood\n\n","type":"Plane3d.Plane3d Length.Meters Physics.BodyCoordinates -> Physics.Material.Material any -> Physics.Body"},{"name":"pointMass","comment":" Create a point mass — a body with mass but no extent. Two point masses\npass through each other; with all other bodies they collide normally.\n","type":"Point3d.Point3d Length.Meters Physics.WorldCoordinates -> Mass.Mass -> Physics.Material.Material any -> Physics.Body"},{"name":"raycast","comment":" Find the closest intersection of a ray against a list of bodies.\n\n - point masses are always excluded because they are infinitely small\n - a plane only intersects when the ray is facing the plane’s normal\n\n","type":"Axis3d.Axis3d Length.Meters Physics.WorldCoordinates -> List.List ( id, Physics.Body ) -> Maybe.Maybe ( id, Physics.Body, { point : Point3d.Point3d Length.Meters Physics.WorldCoordinates, normal : Direction3d.Direction3d Physics.WorldCoordinates } )"},{"name":"rotateAround","comment":" Rotate the body around an axis in the world,\ne.g. to rotate a body 45 degrees around the Z axis:\n\n rotatedBody =\n body\n |> rotateAround Axis3d.z (Angle.degrees 45)\n\n","type":"Axis3d.Axis3d Length.Meters Physics.WorldCoordinates -> Angle.Angle -> Physics.Body -> Physics.Body"},{"name":"scaleMassTo","comment":" Scale a body to the given mass. The volume and center of mass\nare preserved. Has no effect on static or kinematic bodies.\n","type":"Mass.Mass -> Physics.Body -> Physics.Body"},{"name":"setAngularVelocityTo","comment":" Replace the angular velocity of a body. See [setVelocityTo](#setVelocityTo)\nfor guidance. Has no effect on static bodies.\n","type":"Vector3d.Vector3d AngularSpeed.RadiansPerSecond Physics.WorldCoordinates -> Physics.Body -> Physics.Body"},{"name":"setVelocityTo","comment":" Replace the linear velocity of a body. Works on both [dynamic](#dynamic)\nand [kinematic](#kinematic) bodies.\n\nFor dynamic bodies, prefer [applyImpulse](#applyImpulse) — using `setVelocityTo`\nafter `applyImpulse` silently discards the impulse:\n\n body\n |> applyImpulse impulse point\n -- erased by the next line\n |> setVelocityTo newVelocity\n\nFor kinematic bodies, this is the primary way to drive motion — the engine\nintegrates the position from the velocity each frame.\n\nHas no effect on static bodies.\n\n","type":"Vector3d.Vector3d Speed.MetersPerSecond Physics.WorldCoordinates -> Physics.Body -> Physics.Body"},{"name":"simulate","comment":" Simulates one frame. Returns updated bodies and contacts.\nCall this on a message from the `onAnimationFrame` subscription\nwith [onEarth](#onEarth) to simulate 1/60th of a second in Earth gravity:\n\n ( simulated, contacts ) =\n simulate onEarth model.bodies\n\nTo improve solver stability for stacked objects, pass contacts\nfrom the previous frame back via the config’s `contacts` field:\n\n ( simulated, contacts ) =\n simulate { onEarth | contacts = model.contacts }\n model.bodies\n\n","type":"Physics.Config id -> List.List ( id, Physics.Body ) -> ( List.List ( id, Physics.Body ), Physics.Contacts id )"},{"name":"sphere","comment":" ","type":"Sphere3d.Sphere3d Length.Meters Physics.BodyCoordinates -> Physics.Material.Material Physics.Material.Dense -> Physics.Body"},{"name":"static","comment":" Create a static body from shapes and materials.\nStatic bodies only collide with dynamic bodies, not other static bodies.\n","type":"List.List ( Physics.Shape.Shape, Physics.Material.Material any ) -> Physics.Body"},{"name":"translateBy","comment":" Move the body relative to its current position,\ne.g. to translate a body down by 5 meters:\n\n translatedBody =\n body\n |> translateBy (Vector3d.meters 0 0 -5)\n\n","type":"Vector3d.Vector3d Length.Meters Physics.WorldCoordinates -> Physics.Body -> Physics.Body"},{"name":"velocity","comment":" Get the current linear velocity of a body.\n","type":"Physics.Body -> Vector3d.Vector3d Speed.MetersPerSecond Physics.WorldCoordinates"},{"name":"velocityAt","comment":" Get the linear velocity of a point on a body.\nTakes into account both linear and angular velocities.\n","type":"Point3d.Point3d Length.Meters Physics.WorldCoordinates -> Physics.Body -> Vector3d.Vector3d Speed.MetersPerSecond Physics.WorldCoordinates"}],"binops":[]},{"name":"Physics.Constraint","comment":"\n\n@docs Constraint\n\n@docs pointToPoint, hinge, distance, lock\n\n","unions":[],"aliases":[{"name":"Constraint","comment":" Limit the freedom of movement of two bodies relative to each other.\n\nPass a `constrain` function in the [simulation config](Physics#Config). For example, to drag\na body with the mouse, connect a mouse to a point on the box with\n[pointToPoint](#pointToPoint):\n\n constrain id =\n if id == \"mouse\" then\n Just\n (\\otherId ->\n if otherId == \"box\" then\n [ pointToPoint Point3d.origin pointOnBox ]\n\n else\n []\n )\n\n else\n Nothing\n\nConstraints are skipped unless at least one body is [dynamic](Physics-Body#dynamic).\n\n","args":[],"type":"Physics.Types.Constraint"}],"values":[{"name":"distance","comment":" Keep the centers of mass of two bodies at the constant distance\nfrom each other.\n","type":"Length.Length -> Physics.Constraint.Constraint"},{"name":"hinge","comment":" Keep two bodies connected with each other and limit the freedom of rotation.\nUseful for e.g. connecting a window to a window frame, or to connect a wheel to a car.\n","type":"Axis3d.Axis3d Length.Meters Internal.Coordinates.BodyCoordinates -> Axis3d.Axis3d Length.Meters Internal.Coordinates.BodyCoordinates -> Physics.Constraint.Constraint"},{"name":"lock","comment":" Keep two bodies connected with each other and remove all degrees of freedom between bodies.\n","type":"Frame3d.Frame3d Length.Meters Internal.Coordinates.BodyCoordinates {} -> Frame3d.Frame3d Length.Meters Internal.Coordinates.BodyCoordinates {} -> Physics.Constraint.Constraint"},{"name":"pointToPoint","comment":" Connect a point on the first body with a point on the second body.\nThis doesn’t limit the freedom of rotation of two bodies.\n","type":"Point3d.Point3d Length.Meters Internal.Coordinates.BodyCoordinates -> Point3d.Point3d Length.Meters Internal.Coordinates.BodyCoordinates -> Physics.Constraint.Constraint"}],"binops":[]},{"name":"Physics.Lock","comment":" Restrict a body’s degrees of freedom along world axes.\n\nPass a list of `Lock` tokens to [Physics.lock](Physics#lock). Each entry\nremoves one degree of freedom from the body. The list fully describes the\nbody’s lock state — calling `lock` again with a different list replaces the\nprevious one. An empty list clears all locks.\n\n@docs Lock\n\n\n# Translation\n\n@docs translateX, translateY, translateZ\n\n\n# Rotation\n\n@docs rotateX, rotateY, rotateZ\n\n\n# Presets\n\n@docs allTranslation, allRotation\n\n","unions":[],"aliases":[{"name":"Lock","comment":" A single degree of freedom to lock.\n","args":[],"type":"Physics.Types.Lock"}],"values":[{"name":"allRotation","comment":" All three rotation axes locked. The body cannot tip or spin.\nUseful for character capsules whose orientation is driven outside\nof physics.\n","type":"List.List Physics.Lock.Lock"},{"name":"allTranslation","comment":" All three translation axes locked. The body cannot move.\n","type":"List.List Physics.Lock.Lock"},{"name":"rotateX","comment":" Lock rotation about the world X axis.\n","type":"Physics.Lock.Lock"},{"name":"rotateY","comment":" Lock rotation about the world Y axis.\n","type":"Physics.Lock.Lock"},{"name":"rotateZ","comment":" Lock rotation about the world Z axis.\n","type":"Physics.Lock.Lock"},{"name":"translateX","comment":" Lock translation along the world X axis.\n","type":"Physics.Lock.Lock"},{"name":"translateY","comment":" Lock translation along the world Y axis.\n","type":"Physics.Lock.Lock"},{"name":"translateZ","comment":" Lock translation along the world Z axis.\n","type":"Physics.Lock.Lock"}],"binops":[]},{"name":"Physics.Material","comment":"\n\n@docs Material\n\n@docs wood, rubber, steel, ice, plastic\n\n\n# Custom materials\n\n@docs Dense, dense, Surface, surface\n\n","unions":[{"name":"Dense","comment":" Material with density, required for dynamic bodies\nwhere mass is computed from geometry.\n","args":[],"cases":[]},{"name":"Surface","comment":" Material with surface properties only — friction and bounciness,\nno density. Used for static bodies and point masses.\n","args":[],"cases":[]}],"aliases":[{"name":"Material","comment":" Material encodes friction, bounciness, and optionally density.\n\nThe type parameter tracks capabilities:\n\n - `Material Dense` — carries density (required for volumetric bodies)\n - `Material Surface` — surface properties only (for static bodies and point masses)\n\n**Friction** controls how much a body resists sliding against another.\n0 means frictionless (like ice), 1 means maximum grip (like rubber).\n\n**Bounciness** (coefficient of restitution) controls how much kinetic energy\nis preserved after a collision. 0 means no bounce (the body absorbs the impact),\n1 means a perfectly elastic bounce.\n\nWhen two shapes collide, their friction values are combined using the geometric\nmean √(f1 · f2), so a slippery surface dominates. Bounciness uses the\nmaximum of the two values, so the bouncier surface wins.\n\n","args":["kind"],"type":"Physics.Types.Material kind"}],"values":[{"name":"dense","comment":" Create a dense material.\n\nDensity is clamped to at least 1 kg/m³. Friction and bounciness are clamped to [0, 1].\n\n","type":"{ density : Density.Density, friction : Basics.Float, bounciness : Basics.Float } -> Physics.Material.Material Physics.Material.Dense"},{"name":"ice","comment":" Density 900 kg/m³, friction 0.03, bounciness 0.1.\n","type":"Physics.Material.Material any"},{"name":"plastic","comment":" Density 1050 kg/m³, friction 0.35, bounciness 0.45.\n","type":"Physics.Material.Material any"},{"name":"rubber","comment":" Density 1100 kg/m³, friction 0.8, bounciness 0.7.\n","type":"Physics.Material.Material any"},{"name":"steel","comment":" Density 7800 kg/m³, friction 0.3, bounciness 0.2.\n","type":"Physics.Material.Material any"},{"name":"surface","comment":" Create a surface material.\n\nFriction and bounciness are clamped to [0, 1].\n\n","type":"{ friction : Basics.Float, bounciness : Basics.Float } -> Physics.Material.Material Physics.Material.Surface"},{"name":"wood","comment":" Density 700 kg/m³, friction 0.4, bounciness 0.3.\n","type":"Physics.Material.Material any"}],"binops":[]},{"name":"Physics.Shape","comment":"\n\n@docs Shape, block, sphere, cylinder\n\n\n# Complex shapes\n\n@docs minus, plus, sum, unsafeConvex\n\n","unions":[],"aliases":[{"name":"Shape","comment":" Shapes are needed for creating compound [dynamic](Physics#dynamic)\nand [static](Physics#static) bodies.\n\nThe supported primitive shapes are [block](#block), [sphere](#sphere),\nand [cylinder](#cylinder). For complex geometry use [unsafeConvex](#unsafeConvex).\n\nShapes within a body **should not overlap** — composing shapes only affects physical\nproperties like mass, inertia, and center of mass. Use [plus](#plus) and\n[minus](#minus) to combine shapes, for example to create hollow bodies.\n\n","args":[],"type":"Physics.Types.Shape"}],"values":[{"name":"block","comment":" ","type":"Block3d.Block3d Length.Meters Internal.Coordinates.BodyCoordinates -> Physics.Shape.Shape"},{"name":"cylinder","comment":" Create a cylinder shape with the given number of side faces, clamped to at least 3.\nEven numbers are more efficient, because collision performance depends\non the number of unique non-parallel faces and edges.\n","type":"Basics.Int -> Cylinder3d.Cylinder3d Length.Meters Internal.Coordinates.BodyCoordinates -> Physics.Shape.Shape"},{"name":"minus","comment":" Subtract the first shape from the second. The subtracted shape must be\nfully contained within the other. It reduces volume, mass, and inertia,\nand is excluded from collision detection.\n\nUseful for hollow bodies.\n\n crate =\n Shape.block outer\n |> Shape.minus (Shape.block inner)\n\n","type":"Physics.Shape.Shape -> Physics.Shape.Shape -> Physics.Shape.Shape"},{"name":"plus","comment":" Add a shape to another.\n\n snowman =\n Shape.sphere bottom\n |> Shape.plus (Shape.sphere top)\n\n","type":"Physics.Shape.Shape -> Physics.Shape.Shape -> Physics.Shape.Shape"},{"name":"sphere","comment":" ","type":"Sphere3d.Sphere3d Length.Meters Internal.Coordinates.BodyCoordinates -> Physics.Shape.Shape"},{"name":"sum","comment":" Combine a list of shapes.\n\n dumbbell =\n Shape.sum\n [ Shape.cylinder 12 leftWeight\n , Shape.cylinder 12 bar\n , Shape.cylinder 12 rightWeight\n ]\n\n","type":"List.List Physics.Shape.Shape -> Physics.Shape.Shape"},{"name":"unsafeConvex","comment":" Create a shape from a triangular mesh. This is useful if you want\nto import from Blender using [elm-obj-file](https://package.elm-lang.org/packages/w0rm/elm-obj-file/latest).\n\n**Note:** this may cause unexpected behavior, unless you make sure that:\n\n - the mesh is a [convex polyhedron](https://en.wikipedia.org/wiki/Convex_polytope);\n - the mesh is watertight, consisting of one closed surface;\n - all faces have counterclockwise [winding order](https://cmichel.io/understanding-front-faces-winding-order-and-normals).\n\n","type":"TriangularMesh.TriangularMesh (Point3d.Point3d Length.Meters Internal.Coordinates.BodyCoordinates) -> Physics.Shape.Shape"}],"binops":[]}]
================================================
FILE: elm.json
================================================
{
"type": "package",
"name": "w0rm/elm-physics",
"summary": "3D physics engine",
"license": "BSD-3-Clause",
"version": "6.0.1",
"exposed-modules": [
"Physics",
"Physics.Material",
"Physics.Constraint",
"Physics.Lock",
"Physics.Shape"
],
"elm-version": "0.19.0 <= v < 0.20.0",
"dependencies": {
"elm/core": "1.0.0 <= v < 2.0.0",
"ianmackenzie/elm-geometry": "4.0.0 <= v < 5.0.0",
"ianmackenzie/elm-triangular-mesh": "1.1.0 <= v < 2.0.0",
"ianmackenzie/elm-units": "2.7.0 <= v < 3.0.0"
},
"test-dependencies": {
"elm-explorations/test": "2.2.0 <= v < 3.0.0"
}
}
================================================
FILE: examples/elm.json
================================================
{
"type": "application",
"source-directories": [
"src",
"../src"
],
"elm-version": "0.19.1",
"dependencies": {
"direct": {
"avh4/elm-color": "1.0.0",
"elm/browser": "1.0.2",
"elm/core": "1.0.5",
"elm/html": "1.0.1",
"elm/http": "2.0.0",
"elm/json": "1.1.4",
"elm-explorations/webgl": "1.1.3",
"ianmackenzie/elm-3d-camera": "4.0.1",
"ianmackenzie/elm-3d-scene": "1.1.0",
"ianmackenzie/elm-geometry": "4.0.0",
"ianmackenzie/elm-triangular-mesh": "1.1.0",
"ianmackenzie/elm-units": "2.10.0",
"w0rm/elm-obj-file": "1.4.0"
},
"indirect": {
"elm/bytes": "1.0.8",
"elm/file": "1.0.5",
"elm/random": "1.0.0",
"elm/time": "1.0.0",
"elm/url": "1.0.0",
"elm/virtual-dom": "1.0.5",
"elm-explorations/linear-algebra": "1.0.3",
"ianmackenzie/elm-1d-parameter": "1.0.1",
"ianmackenzie/elm-float-extra": "1.1.0",
"ianmackenzie/elm-geometry-linear-algebra-interop": "2.0.3",
"ianmackenzie/elm-interval": "3.1.0",
"ianmackenzie/elm-units-interval": "3.2.0"
}
},
"test-dependencies": {
"direct": {},
"indirect": {}
}
}
================================================
FILE: examples/review/elm.json
================================================
{
"type": "application",
"source-directories": [
"src"
],
"elm-version": "0.19.1",
"dependencies": {
"direct": {
"elm/core": "1.0.5",
"elm/json": "1.1.4",
"elm/project-metadata-utils": "1.0.2",
"jfmengels/elm-review": "2.16.6",
"jfmengels/elm-review-performance": "1.0.2",
"jfmengels/elm-review-simplify": "2.1.15",
"jfmengels/elm-review-unused": "1.2.6",
"stil4m/elm-syntax": "7.3.9"
},
"indirect": {
"elm/bytes": "1.0.8",
"elm/html": "1.0.1",
"elm/parser": "1.1.0",
"elm/random": "1.0.0",
"elm/regex": "1.0.0",
"elm/time": "1.0.0",
"elm/virtual-dom": "1.0.5",
"elm-explorations/test": "2.2.1",
"pzp1997/assoc-list": "1.0.0",
"rtfeldman/elm-hex": "1.0.0",
"stil4m/structured-writer": "1.0.3"
}
},
"test-dependencies": {
"direct": {
"elm-explorations/test": "2.2.1"
},
"indirect": {}
}
}
================================================
FILE: examples/review/src/ReviewConfig.elm
================================================
module ReviewConfig exposing (config)
{-| Do not rename the ReviewConfig module or the config function, because
`elm-review` will look for these.
To add packages that contain rules, add them to this review project using
`elm install author/packagename`
when inside the directory containing this file.
-}
import NoUnoptimizedRecursion
import NoUnused.CustomTypeConstructorArgs
import NoUnused.CustomTypeConstructors
import NoUnused.Dependencies
import NoUnused.Exports
import NoUnused.Modules
import NoUnused.Parameters
import NoUnused.Patterns
import NoUnused.Variables
import Review.Rule exposing (Rule)
import Simplify
config : List Rule
config =
List.map (Review.Rule.ignoreErrorsForDirectories [ "../tests" ])
[ NoUnused.CustomTypeConstructors.rule []
, NoUnused.CustomTypeConstructorArgs.rule
, NoUnused.Dependencies.rule
, NoUnused.Exports.rule |> Review.Rule.ignoreErrorsForDirectories [ "../src" ]
, NoUnused.Modules.rule
, NoUnused.Parameters.rule
, NoUnused.Patterns.rule
, NoUnused.Variables.rule
, Simplify.rule (Simplify.expectNaN Simplify.defaults)
, NoUnoptimizedRecursion.rule (NoUnoptimizedRecursion.optOutWithComment "IGNORE TCO")
]
================================================
FILE: examples/src/Duckling.elm
================================================
module Duckling exposing (main)
{-| This demo loads a convex shape and a mesh from the same OBJ file.
- elm-physics is used for simulation
- elm-3d-scene is used for rendering
- elm-obj-file is used for loading OBJ file
It is important to keep the convex shape as small as possible, because
this affects the simulation performance.
-}
import Angle
import Axis3d
import Block3d
import Browser
import Browser.Dom
import Browser.Events
import Camera3d
import Color exposing (Color)
import Direction3d
import Frame3d
import Html exposing (Html)
import Http
import Length
import Obj.Decode exposing (Decoder)
import Physics exposing (Body, BodyCoordinates, onEarth)
import Physics.Material
import Physics.Shape exposing (Shape)
import Pixels exposing (Pixels)
import Plane3d
import Point3d
import Quantity exposing (Quantity)
import Scene3d
import Scene3d.Material exposing (Texture)
import Scene3d.Mesh exposing (Shadow, Textured)
import Task
import WebGL.Texture
type Id
= Duckling
| Floor
type alias Model =
{ material : Maybe (Scene3d.Material.Textured BodyCoordinates)
, meshData : Maybe { mesh : Textured BodyCoordinates, shadow : Shadow BodyCoordinates }
, bodies : List ( Id, Body )
, contacts : Physics.Contacts Id
, dimensions : ( Quantity Int Pixels, Quantity Int Pixels )
}
type Msg
= LoadedTexture (Result WebGL.Texture.Error (Texture Color))
| LoadedMeshes (Result Http.Error ( Textured BodyCoordinates, Shape ))
| Resize Int Int
| Tick
main : Program () Model Msg
main =
Browser.element
{ init = init
, update = \msg model -> ( update msg model, Cmd.none )
, view = view
, subscriptions = subscriptions
}
init : () -> ( Model, Cmd Msg )
init () =
( { material = Nothing
, meshData = Nothing
, bodies = []
, contacts = Physics.emptyContacts
, dimensions = ( Pixels.int 0, Pixels.int 0 )
}
, Cmd.batch
[ Scene3d.Material.load "Duckling.png"
|> Task.attempt LoadedTexture
, Http.get
{ url = "Duckling.obj.txt" -- .txt is required to work with `elm reactor`
, expect = Obj.Decode.expectObj LoadedMeshes Length.meters meshAndCollider
}
, Task.perform
(\{ viewport } -> Resize (round viewport.width) (round viewport.height))
Browser.Dom.getViewport
]
)
{-| Decode a render mesh and physics collider pair from the OBJ file.
-}
meshAndCollider : Decoder ( Textured BodyCoordinates, Shape )
meshAndCollider =
Obj.Decode.map2
(\mesh collider ->
( Scene3d.Mesh.texturedFaces mesh
, Physics.Shape.unsafeConvex collider
)
)
(Obj.Decode.object "mesh" (Obj.Decode.texturedFacesIn Frame3d.atOrigin))
(Obj.Decode.object "convex" (Obj.Decode.trianglesIn Frame3d.atOrigin))
update : Msg -> Model -> Model
update msg model =
case msg of
LoadedTexture (Ok texture) ->
{ model | material = Just (Scene3d.Material.texturedMatte texture) }
LoadedTexture (Err _) ->
model
LoadedMeshes (Ok ( mesh, shape )) ->
{ model
| meshData = Just { mesh = mesh, shadow = Scene3d.Mesh.shadow mesh }
, bodies =
let
ducklingAt ( axis, degrees, position ) =
( Duckling
, Physics.dynamic [ ( shape, Physics.Material.rubber ) ]
|> Physics.rotateAround axis degrees
|> Physics.moveTo position
)
in
List.foldl (\location bodies -> ducklingAt location :: bodies)
[ ( Floor
, Physics.plane Plane3d.xy Physics.Material.wood
|> Physics.moveTo (Point3d.meters 0 0 -3)
)
]
[ ( Axis3d.x, Angle.degrees 45, Point3d.meters 0 0 6 )
, ( Axis3d.y, Angle.degrees -35, Point3d.meters 0.1 -0.5 4 )
, ( Axis3d.y, Angle.degrees 35, Point3d.meters 0 0.5 8 )
, ( Axis3d.x, Angle.degrees -45, Point3d.meters 0 0 10 )
]
}
LoadedMeshes (Err _) ->
model
Tick ->
let
( simulated, newContacts ) =
Physics.simulate { onEarth | contacts = model.contacts } model.bodies
in
{ model | bodies = simulated, contacts = newContacts }
Resize width height ->
{ model | dimensions = ( Pixels.int width, Pixels.int height ) }
view : Model -> Html Msg
view model =
let
camera =
Camera3d.orbitZ
{ focalPoint = Point3d.meters 0 0 0
, azimuth = Angle.degrees 45
, elevation = Angle.degrees 25
, distance = Length.meters 25
, projection = Camera3d.Perspective
, fov = Camera3d.angle (Angle.degrees 30)
}
in
case ( model.material, model.meshData ) of
( Just material, Just { mesh, shadow } ) ->
Scene3d.sunny
{ upDirection = Direction3d.positiveZ
, sunlightDirection = Direction3d.negativeZ
, shadows = True
, camera = camera
, dimensions = model.dimensions
, background = Scene3d.transparentBackground
, clipDepth = Length.meters 0.1
, entities =
List.map
(\( data, body ) ->
Scene3d.placeIn (Physics.frame body) <|
case data of
Duckling ->
Scene3d.meshWithShadow material mesh shadow
Floor ->
( Length.meters 25, Length.meters 25, Length.millimeters 10 )
|> Block3d.centeredOn Frame3d.atOrigin
|> Scene3d.block (Scene3d.Material.matte Color.darkCharcoal)
)
model.bodies
}
_ ->
Html.text "Loading texture and meshes…"
subscriptions : Model -> Sub Msg
subscriptions _ =
Sub.batch
[ Browser.Events.onResize Resize
, Browser.Events.onAnimationFrame (\_ -> Tick)
]
================================================
FILE: examples/src/Duckling.obj.txt
================================================
# Blender v2.83.3 OBJ File: 'duckling.blend'
# www.blender.org
o convex
v 0.539748 -0.217039 0.099674
v -0.466622 -0.250595 0.180423
v 0.770754 -0.163748 0.219660
v 0.622595 -0.417535 0.335006
v -0.631297 0.136631 0.856073
v -0.603059 -0.292105 0.600769
v -0.031727 -0.384307 0.117068
v -0.277162 -0.488889 0.397387
v 0.226935 -0.541566 0.379049
v 0.748814 0.186307 0.170598
v -0.217868 0.429769 0.097289
v -0.311506 0.504301 0.227875
v 0.599979 0.507101 0.428845
v -0.503824 0.482696 0.507469
v -0.702860 0.079971 0.424965
v 0.268738 0.599490 0.321229
v 0.151210 -0.204527 1.538399
v 0.123199 0.096572 1.610852
v 0.408792 -0.321258 1.471410
v 0.373507 -0.031451 1.635867
v 0.981508 0.197007 1.360425
v 0.305546 0.365010 1.527507
vn -0.1093 -0.8962 -0.4300
vn 0.1958 0.5286 -0.8260
vn -0.7454 0.4660 -0.4767
vn -0.0785 -0.0422 -0.9960
vn -0.2209 -0.2475 0.9434
vn -0.5241 0.6925 0.4958
vn -0.1569 0.9871 -0.0316
vn 0.2094 0.9610 0.1804
vn 0.2821 0.9389 0.1970
vn 0.8636 -0.5042 -0.0001
vn 0.3102 -0.9406 0.1381
vn 0.6788 -0.7099 0.1879
vn -0.5660 0.5695 0.5960
vn -0.1011 0.9760 0.1928
vn -0.9677 -0.1729 0.1834
vn 0.1049 0.1192 -0.9873
vn 0.4966 -0.3819 0.7795
vn 0.2983 0.2989 0.9065
vn -0.6951 -0.4011 0.5966
vn -0.6945 -0.2288 0.6821
vn -0.6768 0.3152 -0.6652
vn -0.9000 0.4257 0.0935
vn 0.8356 0.5230 -0.1681
vn -0.0550 0.8497 -0.5244
vn -0.3168 -0.7638 -0.5623
vn -0.0939 -0.9728 0.2118
vn -0.3199 -0.8835 0.3422
vn -0.3148 -0.8876 0.3362
vn 0.0420 0.2701 0.9619
vn 0.0027 -0.4933 0.8699
vn 0.4757 -0.0928 -0.8747
vn -0.6183 0.1314 -0.7749
vn 0.3911 0.6804 -0.6198
vn 0.4770 -0.5790 -0.6612
vn 0.1884 -0.7138 -0.6745
vn 0.1694 -0.7622 -0.6248
vn -0.6164 -0.7386 -0.2730
vn -0.8667 -0.3833 -0.3192
vn 0.9808 0.0345 -0.1921
s off
f 7//1 9//1 8//1
f 16//2 10//2 11//2
f 15//3 14//3 12//3
f 7//4 2//4 11//4 1//4
f 18//5 17//5 20//5
f 5//6 22//6 14//6
f 14//7 16//7 12//7
f 22//8 13//8 16//8
f 22//9 21//9 13//9
f 21//10 4//10 3//10
f 19//11 9//11 4//11
f 21//12 19//12 4//12
f 22//13 5//13 18//13
f 22//14 16//14 14//14
f 5//15 15//15 6//15
f 10//16 1//16 11//16
f 20//17 19//17 21//17
f 22//18 20//18 21//18
f 17//19 5//19 6//19
f 17//20 18//20 5//20
f 15//21 12//21 11//21
f 15//22 5//22 14//22
f 21//23 10//23 13//23
f 12//24 16//24 11//24
f 8//25 2//25 7//25
f 9//26 19//26 8//26
f 19//27 6//27 8//27
f 19//28 17//28 6//28
f 20//29 22//29 18//29
f 20//30 17//30 19//30
f 10//31 3//31 1//31
f 15//32 11//32 2//32
f 13//33 10//33 16//33
f 4//34 1//34 3//34
f 4//35 7//35 1//35
f 4//36 9//36 7//36
f 8//37 6//37 2//37
f 6//38 15//38 2//38
f 21//39 3//39 10//39
o mesh
v -0.115390 -0.199241 0.101510
v -0.159268 -0.163800 0.101577
v 0.125907 0.038053 0.101733
v -0.193300 -0.116357 0.101651
v -0.225381 -0.044015 0.101681
v 0.465807 -0.008041 0.101555
v 0.444157 -0.075697 0.101281
v -0.251531 0.022068 0.101622
v -0.227316 0.087988 0.101651
v -0.216462 0.142928 0.101607
v -0.239364 -0.306125 0.115353
v -0.187264 -0.266814 0.101080
v -0.156992 -0.342321 0.114278
v -0.114590 -0.298243 0.100413
v -0.245326 -0.222069 0.101147
v -0.305196 -0.251326 0.116272
v -0.351528 -0.177191 0.116836
v -0.285504 -0.157995 0.101785
v -0.311142 -0.063849 0.101703
v -0.379272 -0.069973 0.117800
v 0.477677 -0.336212 0.141162
v 0.615472 -0.252082 0.142726
v 0.518411 -0.365602 0.177055
v 0.657206 -0.270862 0.183720
v 0.560117 -0.226963 0.114345
v 0.436854 -0.300164 0.114300
v -0.286467 -0.339793 0.144120
v -0.194590 -0.379267 0.143090
v -0.360670 -0.276816 0.145054
v -0.329292 -0.367248 0.185574
v -0.409218 -0.296382 0.186322
v -0.232343 -0.410429 0.181488
v -0.409463 -0.192219 0.146426
v -0.441714 -0.072783 0.146552
v -0.461733 -0.205246 0.186604
v -0.502675 -0.073635 0.183890
v 0.686182 -0.140757 0.142022
v 0.624487 -0.129806 0.113989
v 0.733418 -0.149194 0.183468
v 0.557803 -0.385465 0.224988
v 0.688732 -0.284208 0.234107
v 0.602326 -0.395949 0.281944
v 0.712984 -0.293335 0.290359
v -0.369819 -0.385844 0.237436
v -0.270171 -0.430366 0.234671
v -0.452302 -0.309246 0.236628
v -0.410731 -0.394763 0.293325
v -0.489500 -0.314102 0.289358
v -0.329737 -0.434770 0.296914
v 0.769844 -0.155749 0.234678
v 0.794615 -0.160672 0.291894
v 0.728865 -0.298369 0.351223
v 0.632406 -0.398307 0.345574
v 0.652513 -0.398840 0.413955
v 0.738118 -0.298584 0.417425
v 0.809318 -0.164090 0.353877
v 0.818608 -0.167292 0.421140
v 0.646263 -0.382648 0.554849
v 0.660817 -0.392449 0.485555
v 0.726597 -0.292468 0.550030
v 0.739987 -0.296857 0.485347
v 0.815894 -0.169628 0.488387
v 0.801688 -0.169480 0.551853
v 0.555179 -0.357358 0.677340
v 0.611927 -0.372950 0.620057
v 0.665829 -0.279218 0.664165
v 0.701700 -0.286395 0.610152
v 0.777874 -0.167611 0.610196
v 0.748647 -0.166010 0.663268
v 0.434971 -0.318699 0.756992
v 0.485084 -0.339029 0.721529
v 0.569340 -0.257495 0.750037
v 0.617637 -0.268557 0.710370
v 0.716321 -0.166670 0.711772
v 0.671835 -0.166366 0.754493
v -0.121248 -0.289191 0.739991
v 0.019364 -0.338763 0.728387
v -0.074004 -0.263759 0.761581
v 0.036476 -0.305480 0.759142
v -0.033796 -0.231953 0.780576
v 0.053181 -0.269639 0.784269
v 0.148335 -0.320471 0.763145
v 0.147016 -0.288886 0.788465
v 0.147601 -0.351574 0.738701
v -0.147042 -0.197209 0.766096
v -0.192017 -0.073361 0.778115
v -0.209470 -0.213995 0.750059
v -0.247824 -0.076512 0.782304
v -0.132799 -0.067808 0.782816
v -0.093096 -0.176635 0.780917
v 0.023331 -0.107014 0.812658
v 0.006560 -0.039938 0.810723
v 0.049422 -0.158195 0.814267
v -0.553055 -0.201865 0.814823
v -0.495150 -0.207678 0.838778
v -0.547257 -0.088449 0.899761
v -0.485489 -0.090651 0.922656
v -0.424217 -0.090221 0.915301
v -0.441025 -0.210800 0.828784
v -0.483998 -0.269595 0.772606
v -0.441714 -0.261268 0.778938
v -0.536566 -0.269735 0.747375
v -0.638341 -0.177050 0.698359
v -0.603339 -0.190618 0.763635
v -0.647587 -0.071530 0.738997
v -0.601596 -0.082814 0.844057
v -0.582579 -0.264175 0.706396
v -0.615691 -0.252253 0.656958
v -0.581459 -0.315845 0.604109
v -0.545522 -0.329243 0.648765
v -0.501918 -0.330970 0.687831
v -0.429296 -0.394496 0.612502
v -0.463972 -0.403341 0.555620
v -0.489596 -0.398218 0.492561
v -0.535557 -0.349928 0.461592
v -0.608158 -0.285728 0.559957
v -0.583698 -0.280360 0.439468
v -0.630690 -0.240553 0.527290
v -0.649663 -0.217398 0.572673
v -0.636495 -0.233658 0.607883
v -0.506442 -0.212438 0.234975
v -0.557570 -0.077306 0.230430
v -0.544261 -0.216382 0.285392
v -0.601092 -0.079278 0.282359
v -0.046697 -0.522177 0.357333
v -0.051828 -0.528687 0.393551
v -0.103735 -0.518336 0.363160
v -0.124228 -0.519419 0.392454
v -0.059546 -0.531660 0.433855
v -0.142645 -0.518892 0.434767
v -0.451383 -0.390803 0.351824
v -0.521766 -0.309987 0.341006
v -0.393582 -0.428245 0.371753
v -0.577470 -0.215100 0.335446
v -0.632047 -0.077735 0.333562
v -0.624832 -0.196053 0.427738
v -0.662519 -0.075912 0.423750
v -0.063446 -0.530926 0.475345
v -0.062067 -0.524750 0.514293
v -0.149689 -0.515712 0.480973
v -0.145047 -0.510455 0.522745
v -0.241626 -0.396298 0.668013
v -0.210960 -0.417131 0.645792
v -0.132184 -0.385488 0.681588
v -0.106093 -0.412676 0.655757
v -0.292013 -0.080857 0.796561
v -0.275531 -0.228942 0.736877
v -0.208410 -0.315875 0.719312
v -0.317993 -0.334366 0.708398
v -0.340814 -0.231685 0.736573
v -0.331153 -0.086247 0.823349
v 0.341225 -0.266473 0.805718
v 0.390864 -0.294959 0.776536
v 0.482452 -0.223270 0.810789
v 0.522860 -0.242985 0.782905
v 0.286752 -0.347400 0.750467
v 0.266207 -0.319144 0.769559
v 0.245284 -0.290977 0.794248
v 0.625867 -0.161198 0.788584
v 0.582456 -0.149372 0.816454
v 0.087642 -0.202429 0.815601
v 0.155527 -0.244230 0.813807
v -0.400580 -0.290169 0.733058
v -0.393930 -0.222647 0.779086
v -0.371064 -0.089146 0.881752
v -0.655928 -0.172594 0.516658
v -0.680046 -0.071537 0.515783
v -0.662542 -0.160138 0.577677
v -0.679758 -0.069980 0.585114
v -0.448336 -0.321213 0.713336
v -0.380814 -0.376368 0.666122
v -0.655690 -0.165565 0.635509
v -0.669147 -0.070774 0.656180
v 0.551672 -0.132216 0.837325
v 0.461403 -0.200590 0.832928
v 0.533737 -0.123674 0.855572
v 0.448651 -0.187578 0.851990
v 0.253055 -0.237810 0.831594
v 0.175457 -0.216568 0.832299
v 0.243957 -0.264145 0.812413
v 0.190500 -0.204734 0.850093
v 0.260550 -0.223278 0.849410
v 0.351961 -0.235111 0.830430
v 0.352584 -0.220089 0.849759
v 0.121192 -0.180750 0.832358
v 0.086500 -0.137124 0.831534
v 0.102211 -0.131445 0.849641
v 0.138638 -0.172846 0.850248
v 0.392717 -0.259897 0.100042
v 0.497414 -0.197068 0.099968
v 0.146156 -0.317958 0.100124
v 0.259631 -0.300393 0.100257
v 0.151798 -0.364164 0.114100
v 0.282119 -0.345791 0.114278
v -0.006794 -0.318299 0.100168
v -0.026968 -0.364653 0.113425
v 0.551790 -0.114214 0.100309
v 0.305288 -0.382233 0.140969
v 0.161259 -0.402177 0.139798
v 0.172973 -0.432976 0.173674
v 0.330793 -0.413765 0.177336
v -0.052198 -0.402548 0.140791
v -0.083205 -0.433717 0.178723
v 0.189195 -0.525892 0.362041
v 0.184628 -0.532994 0.399920
v 0.112191 -0.525988 0.356243
v 0.106044 -0.534314 0.396524
v 0.182523 -0.537955 0.443116
v 0.101522 -0.539252 0.438267
v 0.259535 -0.527745 0.399994
v 0.270248 -0.528835 0.445585
v 0.245685 -0.524691 0.369247
v 0.176910 -0.538221 0.489863
v 0.097355 -0.538815 0.480914
v 0.093544 -0.535056 0.521796
v 0.169236 -0.532898 0.536009
v 0.254374 -0.520724 0.550852
v 0.268721 -0.526952 0.498693
v 0.161429 -0.523171 0.576002
v 0.091260 -0.527181 0.558675
v 0.092313 -0.512115 0.592580
v 0.159783 -0.508542 0.608706
v 0.212751 -0.503945 0.616417
v 0.232428 -0.511997 0.592083
v 0.322615 -0.379727 0.714100
v 0.152006 -0.384909 0.709348
v 0.438649 -0.398677 0.677941
v 0.514408 -0.414618 0.626760
v 0.559835 -0.427808 0.561625
v 0.576406 -0.438433 0.489151
v 0.564187 -0.444371 0.417648
v 0.529177 -0.445773 0.350586
v 0.469566 -0.442399 0.290085
v 0.362170 -0.439056 0.231483
v 0.180410 -0.454158 0.213370
v -0.130679 -0.456457 0.235531
v -0.242634 -0.464694 0.297596
v -0.317681 -0.457769 0.366178
v -0.371346 -0.444312 0.446474
v -0.378300 -0.436927 0.515724
v -0.358668 -0.427333 0.578953
v -0.314745 -0.412950 0.632943
v -0.057351 -0.518166 0.546841
v -0.129337 -0.506592 0.554359
v -0.055476 -0.506459 0.574675
v -0.110645 -0.503033 0.573325
v 0.013848 -0.385873 0.692606
v -0.279498 -0.466355 0.364747
v -0.320076 -0.457562 0.433195
v -0.238534 -0.487626 0.366519
v -0.272981 -0.480687 0.428866
v -0.259576 -0.472776 0.365644
v -0.298093 -0.465354 0.429681
v -0.164436 -0.493054 0.322248
v -0.186612 -0.478255 0.311764
v -0.206037 -0.470640 0.306107
v -0.333289 -0.448568 0.501288
v -0.321367 -0.438329 0.564888
v -0.287520 -0.472864 0.492710
v -0.278897 -0.465161 0.550430
v -0.312662 -0.456583 0.496491
v -0.302660 -0.447033 0.558423
v 0.299349 -0.465236 0.259004
v 0.164046 -0.470581 0.239305
v 0.136265 -0.499986 0.280639
v 0.149477 -0.483904 0.257121
v 0.239612 -0.499126 0.295453
v 0.267542 -0.481161 0.275116
v 0.323868 -0.498711 0.327171
v 0.362897 -0.480605 0.312217
v 0.401118 -0.465139 0.302660
v -0.098419 -0.471530 0.261273
v -0.071594 -0.497079 0.293978
v -0.084280 -0.482347 0.274619
v 0.468217 -0.465762 0.358170
v 0.381551 -0.497814 0.375127
v 0.426645 -0.480598 0.365214
v 0.413922 -0.494685 0.434352
v 0.465110 -0.477899 0.427776
v 0.507757 -0.463478 0.422756
v 0.520569 -0.457651 0.493051
v 0.422701 -0.488776 0.499123
v 0.477344 -0.471827 0.496380
v 0.404699 -0.480345 0.563449
v 0.456636 -0.462574 0.564673
v 0.501277 -0.447582 0.563990
v 0.264851 -0.412994 0.692584
v 0.371171 -0.423456 0.669377
v 0.205055 -0.459037 0.662430
v 0.289733 -0.463945 0.650389
v 0.232102 -0.435534 0.678126
v 0.328524 -0.442955 0.661703
v 0.110523 -0.456909 0.656624
v 0.123579 -0.432175 0.672602
v 0.137088 -0.411082 0.687742
v 0.450638 -0.435645 0.625551
v 0.358278 -0.471419 0.616884
v 0.405551 -0.452372 0.622549
v -0.282701 -0.426785 0.615994
v -0.185848 -0.455990 0.623861
v -0.201774 -0.425992 0.638423
v -0.246964 -0.458889 0.595316
v -0.267479 -0.436698 0.607542
v -0.089566 -0.455834 0.632617
v -0.098115 -0.425347 0.645785
v 0.013225 -0.456605 0.641537
v 0.015627 -0.430262 0.654519
v -0.223883 -0.498488 0.433299
v -0.191490 -0.504005 0.381518
v -0.133437 -0.507719 0.344469
v -0.228339 -0.486047 0.538174
v -0.236628 -0.492194 0.488825
v 0.211045 -0.514785 0.327401
v 0.123031 -0.514681 0.316369
v 0.282000 -0.514911 0.349703
v -0.057025 -0.511085 0.324450
v 0.324268 -0.514600 0.389651
v 0.349314 -0.512583 0.441559
v 0.352465 -0.507771 0.500413
v 0.337281 -0.500475 0.558993
v 0.248495 -0.486114 0.633700
v 0.179201 -0.484371 0.637837
v 0.099616 -0.484038 0.628873
v 0.300180 -0.492453 0.605970
v -0.204236 -0.481257 0.576424
v -0.150193 -0.480109 0.597488
v -0.071135 -0.482081 0.605511
v 0.015220 -0.483586 0.615001
v 0.017674 -0.510099 0.580161
v 0.017029 -0.524802 0.548295
v 0.016376 -0.533032 0.513863
v 0.017577 -0.537873 0.475190
v 0.021136 -0.538266 0.434389
v 0.026133 -0.533009 0.394033
v 0.030300 -0.524675 0.354574
v 0.031101 -0.513265 0.316361
v 0.030752 -0.499356 0.282293
v 0.030945 -0.484757 0.258960
v 0.031234 -0.472805 0.240639
v 0.030293 -0.458963 0.214474
v 0.040821 -0.439419 0.173859
v 0.044817 -0.409628 0.139220
v 0.046308 -0.370599 0.113477
v 0.049555 -0.323904 0.099983
v 0.706407 -0.029283 0.143913
v 0.758256 -0.029395 0.183928
v 0.642756 -0.026599 0.116576
v 0.799353 -0.029395 0.234130
v 0.828128 -0.029395 0.291368
v 0.845803 -0.029395 0.353544
v 0.858726 -0.029395 0.421384
v 0.859631 -0.032575 0.488595
v 0.849147 -0.032575 0.552091
v 0.828254 -0.032583 0.610226
v 0.799360 -0.032575 0.662007
v 0.767546 -0.032553 0.713433
v 0.729207 -0.031167 0.756569
v 0.690133 -0.030099 0.791475
v 0.649644 -0.028920 0.821214
v 0.615583 -0.025176 0.842063
v 0.591501 -0.021172 0.858263
v 0.570756 -0.022855 0.101525
v 0.066400 -0.086410 0.830734
v 0.056606 -0.029728 0.830193
v 0.079197 -0.081836 0.847475
v 0.067334 -0.028379 0.845266
v 0.103479 -0.139949 0.874003
v 0.076706 -0.086381 0.867590
v 0.061663 -0.033376 0.863527
v 0.043305 -0.045773 0.887008
v 0.059928 -0.101098 0.895698
v 0.092291 -0.171037 0.915427
v 0.195238 -0.206484 0.870994
v 0.143983 -0.178748 0.872706
v 0.145318 -0.205795 0.904728
v 0.195676 -0.224879 0.897173
v 0.262100 -0.221654 0.869437
v 0.258400 -0.235593 0.893162
v 0.350226 -0.233732 0.893874
v 0.350308 -0.219178 0.869496
v 0.450571 -0.198240 0.894178
v 0.444291 -0.186599 0.871742
v 0.528472 -0.123304 0.875160
v 0.541484 -0.131393 0.901992
v 0.585778 -0.022336 0.875953
v 0.591034 -0.033769 0.900324
v 0.015805 -0.412357 0.668139
v -0.318022 0.019710 0.100858
v -0.388006 0.019443 0.116880
v -0.452458 0.019814 0.145410
v -0.515643 0.021067 0.182037
v 0.707816 0.105137 0.142259
v 0.759308 0.106190 0.182734
v 0.643713 0.101319 0.115264
v 0.799368 0.106420 0.233648
v 0.826956 0.107480 0.291294
v 0.843683 0.110661 0.353670
v 0.856139 0.115317 0.421370
v 0.858037 0.120255 0.489262
v 0.847924 0.124133 0.553455
v 0.827112 0.126921 0.612146
v 0.796343 0.129219 0.663979
v 0.716684 0.127061 0.756332
v 0.760168 0.133949 0.714278
v -0.197310 0.019443 0.779019
v -0.202604 0.112248 0.779924
v -0.250219 0.018220 0.786923
v -0.252621 0.112952 0.791542
v -0.138211 0.018998 0.783245
v -0.143624 0.105812 0.783676
v 0.005996 0.011139 0.810967
v 0.005433 0.062216 0.811205
v -0.554464 0.033871 0.924777
v -0.489670 0.034331 0.943801
v -0.493845 0.153182 0.929811
v -0.431913 0.149719 0.920224
v -0.427435 0.032448 0.927505
v -0.663149 0.021186 0.754782
v -0.616254 0.029586 0.866775
v -0.568395 0.020429 0.229229
v -0.610434 0.113123 0.280454
v -0.613273 0.020007 0.281670
v -0.643531 0.111677 0.342467
v -0.646830 0.019280 0.341592
v -0.291664 0.016796 0.803716
v -0.291309 0.114450 0.810871
v -0.328632 0.019525 0.835116
v -0.326111 0.125304 0.846875
v 0.675801 0.122650 0.791089
v 0.634852 0.115406 0.820057
v -0.371383 0.029771 0.889529
v -0.373177 0.145323 0.893021
v -0.677244 0.018895 0.426760
v -0.692985 0.019836 0.520358
v -0.690782 0.019858 0.590674
v -0.680128 0.019636 0.665870
v 0.599983 0.107406 0.840135
v 0.577629 0.103506 0.856098
v 0.056880 0.007276 0.830274
v 0.057155 0.044281 0.830356
v 0.065095 0.009671 0.844391
v 0.063553 0.037215 0.843783
v 0.570919 0.095929 0.100917
v 0.057251 0.003317 0.862104
v 0.054597 0.032603 0.861214
v 0.037381 -0.011089 0.885303
v 0.032473 0.027243 0.885844
v 0.569280 0.105352 0.897848
v 0.564936 0.100800 0.874619
v -0.243405 0.383603 0.114359
v -0.161893 0.418242 0.114130
v -0.191772 0.345627 0.099701
v -0.120514 0.374698 0.099939
v -0.311060 0.329686 0.114775
v -0.251190 0.301860 0.099294
v -0.354745 0.256774 0.116324
v -0.290093 0.239684 0.100524
v -0.378441 0.179362 0.117199
v -0.309667 0.169998 0.101577
v 0.654167 0.346672 0.183720
v 0.610000 0.326913 0.143030
v 0.511145 0.437764 0.178270
v 0.469722 0.407944 0.142133
v 0.555386 0.302365 0.114663
v 0.429826 0.374209 0.115093
v -0.195197 0.453897 0.143549
v -0.289966 0.416404 0.143787
v -0.364880 0.353605 0.144595
v -0.412258 0.372200 0.186322
v -0.331887 0.442309 0.185722
v -0.227101 0.481723 0.183816
v -0.414341 0.271351 0.144313
v -0.441233 0.186976 0.144447
v -0.499064 0.194546 0.181281
v -0.466619 0.282843 0.183928
v 0.620944 0.205393 0.114196
v 0.682653 0.216559 0.142141
v 0.730378 0.225011 0.183468
v 0.709277 0.368544 0.290352
v 0.685692 0.360025 0.234107
v 0.593140 0.465397 0.284606
v 0.548395 0.457182 0.227093
v -0.268814 0.501401 0.236917
v -0.371724 0.458917 0.237510
v -0.455350 0.385063 0.236628
v -0.493615 0.390246 0.288780
v -0.413718 0.467703 0.293444
v -0.331991 0.507109 0.298730
v 0.766804 0.231566 0.234678
v 0.791575 0.236481 0.291894
v 0.725633 0.373883 0.351268
v 0.625170 0.466606 0.348109
v 0.734812 0.373453 0.417559
v 0.646226 0.465931 0.415905
v 0.806278 0.239899 0.353877
v 0.815568 0.243110 0.421140
v 0.639264 0.455736 0.552231
v 0.729066 0.370309 0.550971
v 0.652083 0.461149 0.485511
v 0.738400 0.373000 0.485629
v 0.816740 0.246283 0.488988
v 0.806871 0.248070 0.553477
v 0.558026 0.441694 0.667664
v 0.673080 0.361160 0.664328
v 0.607961 0.450316 0.614452
v 0.707794 0.367907 0.611190
v 0.786126 0.248040 0.612650
v 0.755475 0.246246 0.665218
v 0.439561 0.398150 0.746649
v 0.578297 0.341393 0.752380
v 0.491935 0.423484 0.709503
v 0.629885 0.351951 0.710490
v 0.714756 0.244489 0.712009
v 0.668647 0.244251 0.754648
v -0.122174 0.364385 0.738819
v -0.068569 0.332993 0.761307
v 0.022026 0.412252 0.728765
v 0.040999 0.374454 0.758378
v -0.020421 0.294750 0.784120
v 0.061870 0.334350 0.785203
v 0.153978 0.355147 0.787998
v 0.153904 0.389186 0.761240
v 0.155401 0.425115 0.731894
v -0.247876 0.197267 0.765792
v -0.186590 0.189697 0.771776
v -0.206749 0.288188 0.749933
v -0.145648 0.270075 0.766133
v -0.125340 0.176678 0.782897
v -0.083190 0.242702 0.783549
v 0.019646 0.183514 0.812562
v 0.007279 0.124148 0.811872
v 0.043446 0.241642 0.811227
v -0.558430 0.285504 0.813140
v -0.558163 0.220756 0.872424
v -0.498916 0.289872 0.836109
v -0.496254 0.224648 0.893466
v -0.437036 0.223158 0.883494
v -0.444451 0.289686 0.826048
v -0.444888 0.336648 0.778752
v -0.486808 0.345316 0.772324
v -0.541303 0.346324 0.747924
v -0.643131 0.258984 0.696573
v -0.655053 0.185049 0.725896
v -0.611227 0.272671 0.761114
v -0.617107 0.209783 0.818990
v -0.587835 0.341097 0.707123
v -0.619613 0.329553 0.657536
v -0.584469 0.391736 0.603879
v -0.550601 0.405186 0.650337
v -0.505077 0.406817 0.687809
v -0.434634 0.474894 0.604480
v -0.467190 0.480974 0.553544
v -0.492087 0.473723 0.491998
v -0.541830 0.422824 0.459931
v -0.589689 0.355858 0.437199
v -0.613029 0.362984 0.558348
v -0.638549 0.320063 0.525711
v -0.651954 0.295143 0.570723
v -0.639335 0.311655 0.607290
v -0.512017 0.290783 0.231727
v -0.549570 0.199766 0.228131
v -0.592654 0.202361 0.279119
v -0.551520 0.295499 0.282115
v -0.039639 0.595080 0.360409
v -0.093266 0.590505 0.366667
v -0.043791 0.598409 0.395768
v -0.112032 0.590290 0.394137
v -0.130864 0.588481 0.433447
v -0.052221 0.598809 0.434715
v -0.458464 0.463143 0.354359
v -0.530760 0.385249 0.342815
v -0.397533 0.501979 0.373377
v -0.586945 0.294149 0.336906
v -0.631283 0.201464 0.334630
v -0.663446 0.194391 0.421948
v -0.631328 0.278513 0.425522
v -0.142200 0.580496 0.519030
v -0.060065 0.590490 0.513551
v -0.142141 0.584915 0.477244
v -0.058419 0.595984 0.475145
v -0.111349 0.486957 0.654890
v -0.217418 0.492903 0.640098
v -0.139368 0.459206 0.678282
v -0.250582 0.472878 0.659138
v -0.300695 0.205683 0.773155
v -0.273062 0.303291 0.738878
v -0.215757 0.393886 0.712928
v -0.331287 0.414713 0.693852
v -0.342579 0.308400 0.739026
v -0.344892 0.215618 0.800254
v 0.342382 0.342498 0.805703
v 0.486990 0.308689 0.811865
v 0.392161 0.370836 0.776454
v 0.527939 0.328685 0.784766
v 0.297051 0.420511 0.737336
v 0.271279 0.388845 0.767275
v 0.252180 0.358083 0.793136
v 0.623879 0.242442 0.789177
v 0.579394 0.232211 0.817173
v 0.095242 0.287966 0.810708
v 0.165759 0.318950 0.811153
v -0.403947 0.365831 0.733170
v -0.396428 0.298339 0.780687
v -0.386256 0.221512 0.846334
v -0.661326 0.258257 0.513373
v -0.680395 0.183870 0.512550
v -0.680180 0.178183 0.582133
v -0.666864 0.246884 0.575891
v -0.451368 0.396934 0.712869
v -0.391943 0.457138 0.648054
v -0.658464 0.250094 0.634174
v -0.670838 0.179110 0.651042
v 0.544673 0.215529 0.836613
v 0.460958 0.286417 0.832499
v 0.441941 0.267866 0.851190
v 0.521903 0.204029 0.853592
v 0.179216 0.290153 0.832039
v 0.252513 0.333601 0.810708
v 0.258474 0.308770 0.831357
v 0.190219 0.274843 0.850345
v 0.261633 0.293275 0.850641
v 0.347653 0.294209 0.850426
v 0.350315 0.312656 0.830667
v 0.121451 0.255855 0.832039
v 0.083757 0.211125 0.831824
v 0.099409 0.200693 0.849232
v 0.137244 0.242465 0.849789
v 0.493922 0.273241 0.100272
v 0.387965 0.336129 0.100502
v 0.141870 0.395629 0.099360
v 0.147802 0.440174 0.113848
v 0.254849 0.379992 0.099383
v 0.277425 0.421534 0.114278
v -0.032588 0.439714 0.113870
v -0.009262 0.395747 0.099627
v 0.550359 0.190023 0.100176
v 0.156372 0.478631 0.139546
v 0.300780 0.457664 0.141043
v 0.169221 0.508066 0.174452
v 0.327953 0.488099 0.177996
v -0.059761 0.475917 0.142111
v -0.090641 0.505723 0.181577
v 0.188513 0.605645 0.362745
v 0.113896 0.602776 0.357436
v 0.184480 0.612347 0.400625
v 0.108610 0.608997 0.397903
v 0.104495 0.610858 0.439097
v 0.183879 0.613282 0.443219
v 0.265918 0.610071 0.446467
v 0.255709 0.609249 0.401514
v 0.242460 0.605519 0.370634
v 0.179876 0.610605 0.487616
v 0.099846 0.607803 0.480417
v 0.094560 0.600277 0.519980
v 0.171720 0.601664 0.530256
v 0.254626 0.595273 0.544929
v 0.267053 0.606231 0.497018
v 0.162348 0.588674 0.567727
v 0.090245 0.588755 0.556280
v 0.090067 0.572808 0.589948
v 0.159709 0.573289 0.599690
v 0.213366 0.572059 0.605555
v 0.232776 0.582090 0.582326
v 0.155861 0.460785 0.700443
v 0.329162 0.455996 0.700487
v 0.441377 0.474420 0.664765
v 0.512480 0.487462 0.616595
v 0.555401 0.497715 0.555242
v 0.570734 0.505693 0.488091
v 0.560065 0.512803 0.419561
v 0.525663 0.516029 0.353329
v 0.465132 0.515050 0.292250
v 0.175056 0.531414 0.214015
v 0.357529 0.514249 0.232580
v -0.135854 0.526112 0.239342
v -0.248654 0.528774 0.303579
v -0.323879 0.526379 0.370560
v -0.375950 0.517631 0.446801
v -0.363175 0.506094 0.565451
v -0.380947 0.514190 0.508613
v -0.322767 0.492051 0.620154
v -0.130315 0.575699 0.552283
v -0.057574 0.582557 0.547064
v -0.056580 0.570761 0.575512
v -0.111972 0.569708 0.572725
v 0.013818 0.459569 0.689774
v -0.322894 0.531362 0.431438
v -0.278334 0.538620 0.368602
v -0.216936 0.562842 0.374949
v -0.248684 0.548511 0.370434
v -0.262193 0.556006 0.426871
v -0.295994 0.540504 0.427331
v -0.150875 0.567928 0.333422
v -0.177196 0.553997 0.321054
v -0.203917 0.542831 0.312343
v -0.328298 0.514331 0.553737
v -0.337448 0.523954 0.492984
v -0.285177 0.547769 0.485533
v -0.315250 0.531740 0.488313
v -0.285919 0.538865 0.544558
v -0.310452 0.521567 0.549518
v 0.295034 0.540829 0.260458
v 0.158893 0.547310 0.239164
v 0.133618 0.577174 0.277844
v 0.237499 0.576722 0.294563
v 0.144814 0.559766 0.256447
v 0.264258 0.556637 0.275071
v 0.318122 0.576826 0.331212
v 0.356595 0.556473 0.316265
v 0.396795 0.538806 0.305618
v -0.100503 0.545085 0.265855
v -0.068028 0.572111 0.301029
v -0.083361 0.557549 0.281588
v 0.462530 0.537901 0.362100
v 0.370326 0.577227 0.381125
v 0.416947 0.556696 0.370493
v 0.398055 0.575439 0.439520
v 0.450786 0.554835 0.432372
v 0.500128 0.535439 0.425536
v 0.511390 0.529597 0.492547
v 0.406137 0.570286 0.501599
v 0.461069 0.549594 0.497648
v 0.389151 0.560878 0.561492
v 0.442682 0.540718 0.561306
v 0.493210 0.520848 0.558341
v 0.371431 0.498316 0.657944
v 0.267320 0.487847 0.680261
v 0.204387 0.531414 0.657863
v 0.232554 0.508845 0.670170
v 0.285307 0.538731 0.643375
v 0.326130 0.518098 0.653459
v 0.108825 0.528604 0.652576
v 0.122638 0.503239 0.666664
v 0.136339 0.486371 0.678667
v 0.446241 0.510127 0.616202
v 0.348580 0.549200 0.611842
v 0.396610 0.529449 0.615616
v -0.292399 0.502557 0.607943
v -0.188250 0.528915 0.619909
v -0.254638 0.531910 0.591765
v -0.204769 0.503046 0.631994
v -0.276280 0.511217 0.601306
v -0.091835 0.528225 0.631068
v -0.101563 0.500444 0.644547
v 0.010964 0.528700 0.639090
v 0.014789 0.502728 0.650285
v -0.203457 0.573067 0.430689
v -0.168788 0.577812 0.385536
v -0.121122 0.581689 0.350371
v -0.222438 0.560203 0.531256
v -0.222779 0.566920 0.481633
v 0.209614 0.593975 0.327638
v 0.122904 0.591973 0.317184
v 0.277581 0.594961 0.352002
v -0.051561 0.585686 0.328988
v 0.317892 0.596303 0.392914
v 0.338971 0.595273 0.444969
v 0.342463 0.589927 0.501711
v 0.327486 0.579969 0.555991
v 0.245692 0.558246 0.625262
v 0.177651 0.554049 0.631379
v 0.096903 0.552589 0.623164
v 0.293959 0.567944 0.599275
v -0.199928 0.554805 0.570804
v -0.149222 0.552218 0.593774
v -0.072388 0.552040 0.603598
v 0.012461 0.552299 0.612169
v 0.015449 0.571999 0.581214
v 0.016428 0.586553 0.549177
v 0.018074 0.596459 0.514352
v 0.021514 0.602798 0.476250
v 0.026356 0.605215 0.436332
v 0.031420 0.604303 0.396169
v 0.034549 0.599047 0.356754
v 0.033214 0.589081 0.318267
v 0.028180 0.560077 0.259316
v 0.030196 0.575284 0.283271
v 0.025518 0.533934 0.216054
v 0.027290 0.548289 0.241781
v 0.036239 0.512515 0.175846
v 0.042793 0.483510 0.140176
v 0.045662 0.445415 0.114122
v 0.045989 0.400908 0.099768
v -0.387872 0.103899 0.117814
v -0.317926 0.099777 0.101666
v -0.452866 0.108326 0.145017
v -0.513804 0.111306 0.182081
v -0.554174 0.151558 0.911379
v -0.655402 0.111558 0.747902
v -0.608729 0.142238 0.856046
v -0.564851 0.112211 0.228762
v -0.672833 0.109141 0.424839
v -0.690093 0.106220 0.516317
v -0.688802 0.104374 0.586841
v -0.676547 0.104878 0.661837
v 0.051772 0.104967 0.830067
v 0.063101 0.095907 0.846215
v 0.060372 0.161330 0.830742
v 0.074630 0.151358 0.848157
v 0.055308 0.092444 0.866678
v 0.023931 0.098568 0.903705
v 0.099194 0.199543 0.869399
v 0.071205 0.150149 0.868962
v 0.052550 0.162020 0.898204
v 0.086752 0.209938 0.895668
v 0.191716 0.271848 0.869829
v 0.138867 0.240596 0.869385
v 0.129607 0.249078 0.894230
v 0.183501 0.279721 0.894171
v 0.259809 0.289590 0.870964
v 0.250482 0.299540 0.895646
v 0.327991 0.304233 0.897151
v 0.340372 0.290287 0.871164
v 0.413633 0.287054 0.901718
v 0.428321 0.265835 0.872394
v 0.509529 0.206038 0.873143
v 0.508728 0.236459 0.906708
v -0.112981 -0.096968 1.226920
v -0.104921 -0.104464 1.277670
v -0.116043 -0.086848 1.227810
v -0.111023 -0.084156 1.279440
v -0.109770 -0.106888 1.223660
v -0.098597 -0.124230 1.271220
v -0.106656 -0.115860 1.218200
v -0.092465 -0.142114 1.260370
v -0.103765 -0.123445 1.210780
v -0.086808 -0.157276 1.245610
v -0.101237 -0.129302 1.201750
v -0.081863 -0.168946 1.227640
v -0.099183 -0.133142 1.191560
v -0.077896 -0.176635 1.207330
v -0.097722 -0.134803 1.180670
v -0.074931 -0.179719 1.185630
v -0.096877 -0.134188 1.169600
v -0.073344 -0.178451 1.163630
v -0.096706 -0.131341 1.158870
v -0.073085 -0.172735 1.142330
v -0.097233 -0.126358 1.148990
v -0.074182 -0.162733 1.122730
v -0.098582 -0.118907 1.140210
v -0.076999 -0.147860 1.105340
v -0.101429 -0.107089 1.132540
v -0.082775 -0.124727 1.090330
v -0.107227 -0.087189 1.129140
v -0.093578 -0.085424 1.080800
v -0.104380 -0.096753 1.130060
v -0.088499 -0.104182 1.083950
v -0.090493 -0.109810 1.327370
v -0.099561 -0.079626 1.329980
v -0.081114 -0.139103 1.317810
v -0.072032 -0.165602 1.301730
v -0.063661 -0.188075 1.279880
v -0.056402 -0.205468 1.253280
v -0.050582 -0.216961 1.223180
v -0.046482 -0.222025 1.190990
v -0.044228 -0.220238 1.158240
v -0.043976 -0.211845 1.126500
v -0.045629 -0.196875 1.097460
v -0.049707 -0.173891 1.072110
v -0.058308 -0.140223 1.049900
v -0.067205 -0.109765 1.038920
v -0.070141 -0.112983 1.375370
v -0.082048 -0.073369 1.378790
v -0.057855 -0.151374 1.362840
v -0.045956 -0.186110 1.341760
v -0.034983 -0.215559 1.313130
v -0.025463 -0.238351 1.278270
v -0.017841 -0.253417 1.238830
v -0.012465 -0.260060 1.196640
v -0.009589 -0.257954 1.153670
v -0.009322 -0.247018 1.112020
v -0.011568 -0.226977 1.074110
v -0.017196 -0.196809 1.040940
v -0.028562 -0.153198 1.011430
v -0.040121 -0.113213 0.996658
v -0.058745 -0.065480 1.425160
v -0.044176 -0.113954 1.420980
v -0.029162 -0.160879 1.405660
v -0.014608 -0.203341 1.379890
v -0.001196 -0.239337 1.344890
v 0.010437 -0.267200 1.302290
v 0.019757 -0.285617 1.254070
v 0.026326 -0.293728 1.202490
v 0.029840 -0.291163 1.149980
v 0.030130 -0.278025 1.098970
v 0.027223 -0.253810 1.052480
v 0.020039 -0.214907 1.013150
v 0.006908 -0.163207 0.979167
v -0.008061 -0.113643 0.958341
v -0.029985 -0.056071 1.468400
v -0.012969 -0.112694 1.463530
v 0.004558 -0.167478 1.445640
v 0.021544 -0.217035 1.415560
v 0.037203 -0.259059 1.374700
v 0.050786 -0.291585 1.324970
v 0.061663 -0.313079 1.268690
v 0.069336 -0.322555 1.208480
v 0.073429 -0.319552 1.147180
v 0.073770 -0.304219 1.087640
v 0.070256 -0.275927 1.033350
v 0.061596 -0.229217 0.988146
v 0.046730 -0.169057 0.948688
v 0.027386 -0.109750 0.925778
v 0.003809 -0.045284 1.507890
v 0.023019 -0.109231 1.502390
v 0.042808 -0.171066 1.482200
v 0.061981 -0.227007 1.448250
v 0.079650 -0.274444 1.402130
v 0.094982 -0.311152 1.346000
v 0.107268 -0.335419 1.282460
v 0.115920 -0.346110 1.214500
v 0.120547 -0.342722 1.145310
v 0.120932 -0.325417 1.078100
v 0.116995 -0.294492 1.016280
v 0.107461 -0.241724 0.964739
v 0.042141 -0.033265 1.543050
v 0.063271 -0.103604 1.537000
v 0.085032 -0.171593 1.514810
v 0.106111 -0.233102 1.477490
v 0.125537 -0.285254 1.426770
v 0.142397 -0.325617 1.365050
v 0.155905 -0.352301 1.295190
v 0.165418 -0.364053 1.220480
v 0.170504 -0.360331 1.144390
v 0.170919 -0.341306 1.070500
v 0.166589 -0.307400 1.002580
v 0.157233 -0.257910 0.947279
v 0.084454 -0.020208 1.573380
v 0.107201 -0.095908 1.566870
v 0.130608 -0.169057 1.542990
v 0.153288 -0.235229 1.502830
v 0.174189 -0.291348 1.448270
v 0.192332 -0.334774 1.381860
v 0.206856 -0.363481 1.306700
v 0.217103 -0.376123 1.226310
v 0.222575 -0.372119 1.144450
v 0.223019 -0.351648 1.064950
v 0.218259 -0.314888 0.992209
v 0.208250 -0.265962 0.933985
v 0.130133 -0.006284 1.598420
v 0.154163 -0.086247 1.591540
v 0.178875 -0.163489 1.566330
v 0.202830 -0.233369 1.523920
v 0.224903 -0.292623 1.466310
v 0.244054 -0.338481 1.396180
v 0.259394 -0.368790 1.316820
v 0.270211 -0.382151 1.231930
v 0.275987 -0.377917 1.145490
v 0.276461 -0.356297 1.061530
v 0.271561 -0.318069 0.984202
v 0.262026 -0.267949 0.923353
v 0.178512 0.008292 1.617810
v 0.203468 -0.074755 1.610670
v 0.229136 -0.154970 1.584490
v 0.254011 -0.227534 1.540450
v 0.276929 -0.289072 1.480630
v 0.296814 -0.336686 1.407800
v 0.312747 -0.368168 1.325390
v 0.323972 -0.382032 1.237240
v 0.330378 -0.377776 1.147320
v 0.331394 -0.355511 1.060040
v 0.325863 -0.315919 0.979694
v 0.319650 -0.262299 0.913737
v 0.254700 0.030935 1.634940
v 0.280317 -0.054322 1.627610
v 0.306652 -0.136627 1.600740
v 0.332180 -0.211096 1.555560
v 0.355698 -0.274236 1.494160
v 0.376109 -0.323103 1.419430
v 0.392458 -0.355408 1.334870
v 0.403779 -0.368931 1.244400
v 0.410778 -0.363645 1.151820
v 0.413685 -0.343441 1.062510
v 0.405714 -0.300964 0.980124
v 0.394830 -0.245869 0.908428
v 0.332647 0.053801 1.639700
v 0.358181 -0.031167 1.632410
v 0.384420 -0.113176 1.605640
v 0.409852 -0.187370 1.560620
v 0.455605 -0.241539 1.501640
v 0.469596 -0.285313 1.435120
v 0.487731 -0.309839 1.361430
v 0.481273 -0.341698 1.251120
v 0.495294 -0.342469 1.162890
v 0.499179 -0.324260 1.071130
v 0.486893 -0.278254 0.988206
v 0.472243 -0.221780 0.916280
v 0.384532 0.068822 1.634550
v 0.409503 -0.014292 1.627420
v 0.435171 -0.094507 1.601230
v 0.477967 -0.173906 1.551730
v 0.531913 -0.304605 1.293920
v 0.574434 -0.303530 1.201870
v 0.577555 -0.291971 1.088810
v 0.565010 -0.248901 1.003490
v 0.544406 -0.186510 0.934897
v 0.435401 0.083413 1.623220
v 0.459453 0.003354 1.616360
v 0.504154 -0.099519 1.581240
v 0.484521 0.097345 1.605890
v 0.507305 0.021512 1.599390
v 0.543182 -0.062314 1.576140
v 0.639101 -0.247226 1.100600
v 0.638033 -0.253861 1.195650
v 0.629010 -0.209027 1.022190
v 0.607679 -0.147059 0.960876
v 0.531171 0.110416 1.582800
v 0.552347 0.039921 1.576750
v 0.581900 -0.028075 1.558720
v 0.672969 -0.210355 1.195730
v 0.677537 -0.200049 1.112500
v 0.673733 -0.171459 1.039200
v 0.650430 -0.115222 0.981407
v 0.574671 0.122450 1.554290
v 0.593940 0.058316 1.548790
v 0.621915 -0.001035 1.529820
v 0.708076 -0.156490 1.122690
v 0.696977 -0.165973 1.198480
v 0.704413 -0.128968 1.060390
v 0.685447 -0.081991 1.007250
v 0.614382 0.133260 1.520770
v 0.631457 0.076422 1.515900
v 0.657800 0.020437 1.494270
v 0.728213 -0.109157 1.199410
v 0.729933 -0.101899 1.135600
v 0.726093 -0.072301 1.091230
v 0.716506 -0.006840 1.049860
v 0.663361 -0.001532 0.952358
v 0.714208 0.059369 1.026920
v 0.643527 0.125052 0.948043
v 0.600369 0.110824 0.914033
v 0.623057 -0.029313 0.925874
v 0.661158 0.145560 1.463140
v 0.676306 0.088737 1.456560
v 0.689370 0.047313 1.446410
v 0.679679 0.150231 1.431890
v 0.698430 0.093082 1.418360
v 0.699913 0.155436 1.401690
v 0.718760 0.096907 1.387490
v -0.113759 -0.087782 1.176340
v 0.617689 -0.169517 1.387380
v 0.634504 -0.152998 1.401090
v 0.607657 -0.166648 1.404450
v 0.623546 -0.151878 1.414470
v 0.596128 -0.175893 1.397500
v 0.605626 -0.180038 1.375760
v 0.601192 -0.159826 1.420660
v 0.591790 -0.165439 1.418150
v 0.614471 -0.149150 1.425870
v 0.641066 -0.164201 1.356200
v 0.655909 -0.149847 1.372420
v 0.629418 -0.168738 1.371000
v 0.645685 -0.152167 1.386720
v 0.617458 -0.178214 1.355830
v 0.630381 -0.171452 1.339840
v 0.659460 -0.147222 1.333900
v 0.667994 -0.141328 1.346350
v 0.651157 -0.156497 1.343610
v 0.663464 -0.145969 1.358610
v 0.643364 -0.161250 1.328660
v 0.654233 -0.149091 1.320970
v 0.673889 -0.131986 1.336510
v 0.669492 -0.138169 1.337140
v 0.672903 -0.128657 1.329390
v 0.666044 -0.138036 1.328320
v 0.663694 -0.136738 1.317910
v 0.672154 -0.124453 1.320190
v 0.679657 -0.113154 1.328940
v 0.685151 -0.103248 1.343060
v 0.679094 -0.120538 1.337280
v 0.682793 -0.114955 1.350090
v 0.677907 -0.127419 1.342830
v 0.677410 -0.128723 1.352820
v 0.668854 -0.129695 1.381870
v 0.674912 -0.129257 1.366730
v 0.677633 -0.107993 1.383550
v 0.682460 -0.110736 1.366220
v 0.686738 -0.095144 1.360940
v 0.682882 -0.089658 1.380590
v 0.648184 -0.131519 1.411260
v 0.659438 -0.130347 1.396930
v 0.656517 -0.109157 1.416850
v 0.668721 -0.107355 1.400780
v 0.673615 -0.087849 1.400390
v 0.660150 -0.090614 1.418920
v 0.625229 -0.132497 1.433430
v 0.636091 -0.132305 1.423650
v 0.628610 -0.117343 1.439670
v 0.642593 -0.112634 1.430150
v 0.644194 -0.096968 1.433740
v 0.627831 -0.105976 1.443630
v 0.610674 -0.138533 1.439460
v 0.617844 -0.131407 1.440050
v 0.606115 -0.136175 1.441970
v 0.616205 -0.124393 1.444010
v 0.613218 -0.117684 1.447720
v 0.601096 -0.133409 1.444640
v 0.600361 -0.149402 1.433450
v 0.608028 -0.146881 1.433410
v 0.593318 -0.150788 1.434570
v 0.599546 -0.212023 1.375790
v 0.615272 -0.206551 1.345310
v 0.604639 -0.200420 1.374640
v 0.618763 -0.195882 1.348310
v 0.635846 -0.177798 1.334490
v 0.622167 -0.185205 1.351300
v 0.634845 -0.187674 1.328570
v 0.605959 -0.145628 1.487290
v 0.595052 -0.173142 1.473310
v 0.607479 -0.141165 1.470300
v 0.597648 -0.165098 1.457920
v 0.596002 -0.173936 1.423930
v 0.600235 -0.157061 1.442530
v 0.591931 -0.184382 1.435850
v 0.587861 -0.194836 1.447770
v 0.588328 -0.208056 1.412040
v 0.594081 -0.196623 1.405660
v 0.609733 -0.188824 1.373500
v 0.599835 -0.185190 1.399270
v 0.653699 -0.186303 1.307060
v 0.651653 -0.176961 1.315030
v 0.633644 -0.197795 1.322440
v 0.661373 -0.154970 1.315230
v 0.649258 -0.167923 1.322800
v 0.665740 -0.161776 1.306540
v 0.670122 -0.168798 1.297640
v 0.683045 -0.147556 1.293870
v 0.677426 -0.143856 1.303220
v 0.671776 -0.140179 1.312360
v 0.680977 -0.124801 1.314720
v 0.687983 -0.125261 1.305810
v 0.689044 -0.109928 1.323350
v 0.698230 -0.106896 1.317360
v 0.695345 -0.096486 1.338850
v 0.706207 -0.089984 1.336360
v 0.707571 -0.103129 1.310990
v 0.695049 -0.125735 1.297050
v 0.714393 -0.066659 1.360840
v 0.706489 -0.077083 1.359760
v 0.715801 -0.082043 1.333930
v 0.697696 -0.085068 1.359520
v 0.694233 -0.077617 1.382730
v 0.700306 -0.068787 1.385290
v 0.691838 -0.056301 1.417040
v 0.687916 -0.066273 1.411090
v 0.706155 -0.058347 1.388550
v 0.683794 -0.075586 1.405730
v 0.668358 -0.079953 1.426310
v 0.670790 -0.071374 1.435100
v 0.652209 -0.076386 1.467150
v 0.651046 -0.082837 1.454640
v 0.673192 -0.062766 1.443950
v 0.649874 -0.089287 1.442120
v 0.633399 -0.101906 1.452410
v 0.634081 -0.098429 1.468120
v 0.619527 -0.118158 1.490980
v 0.619742 -0.117839 1.473540
v 0.634756 -0.094952 1.483830
v 0.619957 -0.117513 1.456110
v 0.608999 -0.136701 1.453300
v 0.641940 -0.163667 1.320520
v 0.653848 -0.150306 1.313230
v 0.628195 -0.174640 1.331840
v 0.592072 -0.180623 1.394850
v 0.601659 -0.184575 1.370600
v 0.588061 -0.168434 1.417700
v 0.614122 -0.181943 1.348870
v 0.664087 -0.136130 1.310470
v 0.673103 -0.121873 1.313110
v 0.590411 -0.151678 1.435720
v 0.598997 -0.132097 1.446270
v 0.686945 -0.096301 1.336970
v 0.680821 -0.108290 1.321890
v 0.611490 -0.114258 1.449740
v 0.626779 -0.100134 1.445730
v 0.685944 -0.079419 1.377830
v 0.689548 -0.086166 1.356240
v 0.643898 -0.088650 1.435340
v 0.661373 -0.080323 1.419720
v 0.675801 -0.077291 1.399480
v 0.717477 -0.095671 1.300250
v 0.725233 -0.067081 1.329830
v 0.703049 -0.127300 1.281940
v 0.721177 -0.047730 1.363200
v 0.708876 -0.038848 1.397010
v 0.623546 -0.227541 1.311570
v 0.592932 -0.238217 1.342010
v 0.573232 -0.244749 1.381680
v 0.650801 -0.059719 1.493590
v 0.626852 -0.081636 1.515750
v 0.673926 -0.044134 1.462790
v 0.560087 -0.216990 1.473270
v 0.569459 -0.185398 1.504090
v 0.585355 -0.147897 1.521520
v 0.561303 -0.237928 1.429470
v 0.674163 -0.185732 1.282030
v 0.652135 -0.209902 1.292830
v 0.689562 -0.157988 1.277830
v 0.692988 -0.036957 1.429880
v 0.605470 -0.111863 1.526100
v 0.726026 -0.084757 1.275660
v 0.729533 -0.043348 1.316260
v 0.713592 -0.126099 1.253400
v 0.723965 -0.017050 1.360970
v 0.708958 -0.008005 1.402880
v 0.565247 -0.276949 1.326140
v 0.604142 -0.253476 1.284850
v 0.533566 -0.280990 1.373680
v 0.636929 -0.030878 1.516850
v 0.601785 -0.056561 1.544540
v 0.668521 -0.015463 1.481520
v 0.520220 -0.189305 1.530090
v 0.504599 -0.234570 1.493210
v 0.544777 -0.140957 1.551900
v 0.511249 -0.268356 1.442260
v 0.639865 -0.225154 1.265080
v 0.668083 -0.196379 1.256100
v 0.692202 -0.165350 1.252380
v 0.690541 -0.006929 1.443170
v 0.572187 -0.095612 1.556610
v 0.739550 -0.009562 1.298720
v 0.738222 -0.068876 1.240510
v 0.729303 0.032537 1.354320
v 0.711249 0.038720 1.402380
v 0.759205 0.094261 1.175270
v 0.761644 0.088314 1.165720
v 0.749633 0.097389 1.165530
v 0.759716 0.099236 1.160370
v 0.750849 0.090413 1.163660
v 0.746763 0.133023 1.172260
v 0.754185 0.138516 1.158820
v 0.740417 0.161597 1.171570
v 0.748654 0.163999 1.158130
v 0.757054 0.117089 1.158950
v 0.747512 0.112522 1.169600
v 0.760488 0.126624 1.194380
v 0.757440 0.108711 1.187320
v 0.778207 0.173927 1.215290
v 0.787980 0.136567 1.215280
v 0.750456 0.164370 1.191620
v 0.781707 0.044585 1.271100
v 0.766107 0.038134 1.274950
v 0.769644 -0.029432 1.222050
v 0.756269 -0.036572 1.218570
v 0.749870 -0.062003 1.208080
v 0.752258 0.027554 1.283800
v 0.725032 0.020948 1.082230
v 0.730430 0.103143 1.068750
v 0.758359 0.044555 1.081570
v 0.758715 0.109986 1.073380
v 0.752065 0.162769 1.065250
v 0.723201 0.152641 1.059690
v 0.756543 0.074183 1.314570
v 0.742945 0.068385 1.317870
v 0.741744 0.119588 1.347690
v 0.730089 0.116266 1.347230
v 0.759894 0.124407 1.341760
v 0.776673 0.079721 1.309200
v 0.817666 0.059139 1.276210
v 0.799509 0.051265 1.273830
v 0.815976 -0.008286 1.228730
v 0.795957 -0.019964 1.227830
v 0.764239 -0.074970 1.173640
v 0.794986 -0.067296 1.176560
v 0.766345 -0.060772 1.202050
v 0.796098 -0.048864 1.203600
v 0.821877 -0.046662 1.171110
v 0.823917 -0.032813 1.199360
v 0.795468 -0.059066 1.143050
v 0.766804 -0.071975 1.140450
v 0.783479 0.058005 1.084710
v 0.790322 -0.016598 1.100080
v 0.764373 -0.033851 1.098760
v 0.814612 0.002969 1.109020
v 0.807256 0.071291 1.087850
v 0.780128 0.120211 1.076350
v 0.801169 0.136233 1.081170
v 0.773477 0.169108 1.069010
v 0.798634 0.176552 1.073080
v 0.778467 0.129456 1.335640
v 0.795268 0.084778 1.307580
v 0.801251 0.135803 1.328420
v 0.813351 0.090620 1.306110
v 0.835075 -0.024687 1.176850
v 0.834830 -0.026288 1.161490
v 0.830011 -0.035037 1.140260
v 0.903783 0.091577 1.106340
v 0.917610 0.141260 1.086720
v 0.911709 0.101186 1.122570
v 0.924261 0.148022 1.110420
v 0.892610 0.127825 1.078960
v 0.888584 0.092718 1.091040
v 0.921266 0.180081 1.098890
v 0.913177 0.176789 1.072670
v 0.913867 0.211013 1.094570
v 0.904702 0.207351 1.070670
v 0.883001 0.200804 1.061640
v 0.889763 0.167455 1.066660
v 0.943976 0.171755 1.383990
v 0.943523 0.113701 1.358040
v 0.960984 0.174832 1.367890
v 0.961799 0.114887 1.340370
v 0.938845 0.074546 1.316450
v 0.954037 0.075814 1.294020
v 0.791990 0.077482 1.163970
v 0.789833 0.093363 1.186590
v 0.819698 0.065760 1.177060
v 0.823405 0.092659 1.195790
v 0.823865 0.033997 1.157920
v 0.816235 0.053727 1.160260
v 0.782737 0.097916 1.157730
v 0.808413 0.096537 1.153690
v 0.798693 0.148934 1.144930
v 0.774160 0.143959 1.150640
v 0.803171 0.124815 1.148150
v 0.778096 0.120804 1.152650
v 0.768324 0.169597 1.149440
v 0.792991 0.176596 1.142950
v 0.831835 0.005660 1.233750
v 0.835372 0.067851 1.280100
v 0.848272 0.074805 1.292100
v 0.852625 0.018108 1.245870
v 0.835372 0.030972 1.168960
v 0.841318 0.063610 1.185710
v 0.857451 0.035258 1.178060
v 0.862686 0.066583 1.193130
v 0.847701 0.093734 1.204770
v 0.868232 0.095276 1.214140
v 0.833881 0.003228 1.170340
v 0.857155 0.010983 1.178140
v 0.828751 0.005445 1.156580
v 0.828336 0.002435 1.160650
v 0.840376 -0.012490 1.183100
v 0.859097 -0.003252 1.188860
v 0.850712 0.118706 1.232250
v 0.824806 0.115955 1.220500
v 0.871182 0.120018 1.244050
v 0.846456 0.151551 1.240170
v 0.864413 0.156051 1.249100
v 0.824754 0.145108 1.230100
v 0.888191 0.045667 1.282750
v 0.901959 0.064655 1.307080
v 0.871990 0.091606 1.317760
v 0.880999 0.102009 1.332290
v 0.887516 0.111099 1.344160
v 0.911968 0.090101 1.334190
v 0.922897 0.072025 1.238180
v 0.918070 0.090338 1.243320
v 0.942515 0.096262 1.269910
v 0.934241 0.108934 1.268200
v 0.915661 0.110513 1.253000
v 0.927753 0.118772 1.268380
v 0.899564 0.102795 1.236240
v 0.899394 0.079002 1.222500
v 0.901003 0.057886 1.213410
v 0.904806 0.040559 1.214590
v 0.929703 0.055906 1.240470
v 0.908128 0.029371 1.225360
v 0.934426 0.045556 1.253580
v 0.950537 0.084207 1.278610
v 0.866067 0.115288 1.335980
v 0.875542 0.123095 1.347820
v 0.859460 0.153694 1.340220
v 0.868728 0.158513 1.351080
v 0.885707 0.129256 1.358520
v 0.880213 0.164059 1.363270
v 0.913940 0.132948 1.278080
v 0.898207 0.126372 1.264650
v 0.929117 0.139117 1.288170
v 0.909752 0.168885 1.284780
v 0.928436 0.175358 1.300180
v 0.892928 0.163569 1.269740
v 0.915424 0.122591 1.365450
v 0.913103 0.169330 1.385820
v 0.940891 0.138324 1.294640
v 0.943716 0.179443 1.312540
v 0.950404 0.132941 1.303440
v 0.953962 0.178798 1.327640
v 0.829299 0.083621 1.090110
v 0.836906 0.020748 1.110700
v 0.857392 0.036363 1.107230
v 0.848317 0.096381 1.088560
v 0.836929 -0.000968 1.139090
v 0.856702 0.020926 1.133760
v 0.839642 0.007343 1.149270
v 0.860135 0.027673 1.147460
v 0.836402 0.062298 1.155860
v 0.832265 0.103417 1.151220
v 0.851809 0.135766 1.141350
v 0.827372 0.130324 1.146180
v 0.855323 0.107629 1.146830
v 0.822292 0.140185 1.081450
v 0.841511 0.146242 1.079940
v 0.818660 0.182320 1.069770
v 0.835950 0.187273 1.070640
v 0.822626 0.153812 1.141080
v 0.818267 0.183173 1.137090
v 0.846693 0.160203 1.138300
v 0.841132 0.189875 1.134610
v 0.865792 0.110609 1.081620
v 0.875631 0.063758 1.100720
v 0.881600 0.052066 1.123140
v 0.886597 0.056433 1.139500
v 0.885351 0.143610 1.139060
v 0.882163 0.112463 1.140840
v 0.853967 0.192404 1.064880
v 0.859475 0.153597 1.074390
v 0.882578 0.171125 1.134560
v 0.875994 0.200641 1.131720
v 0.831168 0.098160 1.306140
v 0.844929 0.102884 1.314250
v 0.820565 0.141586 1.323880
v 0.839442 0.146398 1.324850
v 0.878886 0.159581 1.258170
v 0.885233 0.122287 1.253320
v 0.884714 0.097908 1.224120
v 0.907371 0.025367 1.250970
v 0.885596 0.009901 1.227180
v 0.884424 0.010650 1.201480
v 0.859995 -0.005602 1.213230
v 0.872109 0.030335 1.262270
v 0.861099 0.082605 1.304340
v 0.878345 0.044251 1.188720
v 0.881236 0.071432 1.205680
v 0.924098 0.044659 1.280850
v 0.837426 -0.017754 1.206250
v 0.743672 -0.078803 1.172950
v 0.801607 -0.041465 1.123040
v 0.716609 0.159358 1.361110
v 0.728517 0.164526 1.364630
v 0.743568 0.167173 1.358830
v 0.766211 0.173616 1.351680
v 0.789611 0.180244 1.343050
v 0.810749 0.186235 1.335600
v 0.829529 0.191618 1.331260
v 0.851416 0.149897 1.331140
v 0.841259 0.195125 1.334780
v 0.849244 0.197638 1.342480
v 0.857941 0.200404 1.352220
v 0.869900 0.204237 1.366830
v 0.904947 0.215114 1.394330
v 0.937133 0.224507 1.394470
v 0.960880 0.176366 1.347210
v 0.955972 0.229201 1.360050
v 0.954994 0.229393 1.380230
v 0.949967 0.226969 1.339680
v 0.937963 0.223054 1.322090
v 0.920955 0.217701 1.305360
v 0.901255 0.211495 1.286040
v 0.883638 0.205942 1.268320
v 0.870197 0.201745 1.256940
v 0.856599 0.197608 1.249600
v 0.837714 0.191907 1.241690
v 0.814537 0.184885 1.230620
v 0.916357 0.179377 1.115800
v 0.918960 0.149156 1.124860
v 0.909181 0.210087 1.111960
v 0.842971 0.025011 1.155190
v 0.829974 -0.017673 1.152770
v 0.862805 0.045000 1.151880
v 0.857510 0.073130 1.151290
v 0.885833 0.069719 1.144510
v 0.876284 0.084474 1.146160
v 0.880828 0.022616 1.189760
v 0.909233 0.108133 1.131980
v 0.958359 0.124400 1.319120
v 0.785266 0.113783 1.204520
v 0.857325 0.107807 1.324790
v 0.713295 0.158765 1.377320
v 0.729748 0.106843 1.362880
v 0.741581 0.052763 1.331030
v 0.752109 0.014001 1.288250
v 0.750730 -0.062114 1.221230
v 0.742901 -0.088383 1.186160
v 0.740083 -0.079930 1.141330
v 0.734597 -0.049183 1.103470
v 0.739950 -0.069995 1.142900
v 0.731142 -0.035630 1.108500
v 0.713963 0.151099 1.041770
v 0.727842 0.072581 1.053820
v 0.694560 0.144700 1.007270
v 0.728198 0.009679 1.069300
v 0.824554 -0.021817 1.132900
v 0.795720 -0.032642 1.115210
v -0.116777 -0.063856 1.276720
v -0.118920 -0.076727 1.226450
v -0.121989 -0.044090 1.269340
v -0.121529 -0.066800 1.222740
v -0.126304 -0.026199 1.257650
v -0.123643 -0.057806 1.216850
v -0.129514 -0.011030 1.242190
v -0.125340 -0.050184 1.209090
v -0.131465 0.000715 1.223690
v -0.126260 -0.044290 1.199780
v -0.132072 0.008485 1.203010
v -0.126460 -0.040405 1.189380
v -0.131242 0.011881 1.181130
v -0.125956 -0.038714 1.178400
v -0.128996 0.010739 1.159100
v -0.124777 -0.039285 1.167340
v -0.122953 -0.042080 1.156740
v -0.125437 0.005119 1.137980
v -0.120595 -0.047003 1.147070
v -0.120803 -0.004683 1.118760
v -0.115131 -0.019067 1.102010
v -0.117659 -0.054336 1.138620
v -0.107279 -0.043556 1.086840
v -0.113552 -0.066333 1.131330
v -0.101652 -0.062158 1.082620
v -0.110734 -0.075763 1.129650
v -0.108109 -0.049450 1.325960
v -0.115843 -0.020157 1.315020
v -0.122226 0.006350 1.297690
v -0.126979 0.028830 1.274790
v -0.129870 0.046231 1.247380
v -0.130768 0.057745 1.216740
v -0.129633 0.062824 1.184310
v -0.126504 0.061237 1.151600
v -0.121492 0.053008 1.120180
v -0.114627 0.038394 1.091680
v -0.106360 0.017434 1.066940
v -0.094504 -0.019541 1.044010
v -0.086200 -0.047389 1.037050
v -0.093274 -0.033762 1.373520
v -0.103401 0.004629 1.359190
v -0.111772 0.039373 1.336480
v -0.118000 0.068830 1.306460
v -0.121796 0.091636 1.270540
v -0.122968 0.106717 1.230390
v -0.121477 0.113375 1.187890
v -0.117385 0.111299 1.145020
v -0.110883 0.100578 1.103790
v -0.101881 0.081286 1.066490
v -0.091138 0.053949 1.034150
v -0.075605 0.006275 1.004920
v -0.064513 -0.029506 0.994990
v -0.072476 -0.017013 1.418710
v -0.084858 0.029919 1.401190
v -0.095090 0.072381 1.373440
v -0.102704 0.108392 1.336740
v -0.107339 0.136270 1.292830
v -0.108777 0.154702 1.243750
v -0.106953 0.162843 1.191790
v -0.101948 0.160300 1.139400
v -0.093800 0.146924 1.089160
v -0.082404 0.122576 1.044100
v -0.068117 0.086587 1.005500
v -0.050686 0.034694 0.972087
v -0.037318 -0.009858 0.956969
v -0.046030 0.000544 1.460870
v -0.060480 0.055328 1.440420
v -0.072432 0.104893 1.408020
v -0.081314 0.146932 1.365190
v -0.086727 0.179473 1.313930
v -0.088402 0.200997 1.256640
v -0.086274 0.210494 1.195990
v -0.080432 0.207529 1.134820
v -0.070860 0.191759 1.076250
v -0.057796 0.163577 1.023530
v -0.041270 0.122769 0.978226
v -0.018849 0.063855 0.939531
v -0.004814 0.005030 0.918178
v -0.014311 0.018657 1.499390
v -0.030623 0.080492 1.476310
v -0.044109 0.136441 1.439740
v -0.054141 0.183892 1.391390
v -0.060250 0.220622 1.333530
v -0.062141 0.244919 1.268860
v -0.059739 0.255640 1.200400
v -0.053140 0.252289 1.131360
v -0.042538 0.234776 1.065090
v -0.028147 0.203577 1.005140
v -0.008573 0.159247 0.953878
v 0.004424 -0.028201 0.915093
v 0.022211 0.037059 1.533710
v 0.004276 0.105049 1.508320
v -0.010552 0.166565 1.468120
v -0.021585 0.218739 1.414960
v -0.028295 0.259124 1.351340
v -0.030378 0.285838 1.280240
v -0.027731 0.297627 1.204970
v -0.020488 0.293942 1.129060
v -0.008973 0.274954 1.056060
v 0.006582 0.241115 0.989955
v 0.026697 0.197623 0.937269
v 0.063004 0.055484 1.563320
v 0.043705 0.128633 1.536020
v 0.027750 0.194821 1.492750
v 0.015887 0.250954 1.435560
v 0.008665 0.294409 1.367110
v 0.006426 0.323147 1.290610
v 0.009266 0.335833 1.209630
v 0.017066 0.331866 1.127960
v 0.029455 0.311440 1.049410
v 0.046434 0.274910 0.979398
v 0.066934 0.234650 0.928958
v 0.107483 0.073664 1.587800
v 0.087101 0.150906 1.558960
v 0.070256 0.220800 1.513280
v 0.057718 0.280077 1.452890
v 0.050096 0.325957 1.380610
v 0.047731 0.356311 1.299830
v 0.050734 0.369701 1.214310
v 0.058971 0.365512 1.128070
v 0.072050 0.343944 1.045130
v 0.090549 0.305560 0.972925
v 0.112406 0.269734 0.925807
v 0.154979 0.091332 1.606780
v 0.133818 0.171547 1.576840
v 0.116321 0.244125 1.529400
v 0.103309 0.305671 1.466690
v 0.095390 0.353323 1.391630
v 0.092936 0.384834 1.307750
v 0.096057 0.398743 1.218950
v 0.104606 0.394398 1.129390
v 0.118189 0.372000 1.043260
v 0.140588 0.333467 0.969514
v 0.166434 0.299718 0.924725
v 0.230545 0.116177 1.623620
v 0.208829 0.198483 1.592890
v 0.190871 0.272967 1.544210
v 0.177525 0.336129 1.479860
v 0.169392 0.385019 1.402840
v 0.166871 0.417360 1.316750
v 0.170074 0.431632 1.225630
v 0.178853 0.427169 1.133730
v 0.192791 0.404185 1.045350
v 0.212106 0.362628 0.970107
v 0.234200 0.324103 0.927149
v 0.308573 0.138754 1.628430
v 0.286938 0.220763 1.597810
v 0.269055 0.294973 1.549310
v 0.279242 0.362635 1.487490
v 0.268335 0.404148 1.418960
v 0.271308 0.431558 1.344030
v 0.248332 0.453060 1.231900
v 0.257073 0.448611 1.140330
v 0.270960 0.425709 1.052270
v 0.289770 0.383173 0.977766
v 0.310100 0.337501 0.931798
v 0.360984 0.151936 1.623520
v 0.339816 0.232144 1.593580
v 0.333826 0.319877 1.540150
v 0.312043 0.451888 1.277970
v 0.341114 0.467154 1.180810
v 0.352740 0.447195 1.069580
v 0.368836 0.394702 0.993018
v 0.389366 0.337738 0.942630
v 0.412721 0.163458 1.612610
v 0.395527 0.272589 1.572520
v 0.463034 0.173163 1.595830
v 0.448502 0.262038 1.568540
v 0.429789 0.452964 1.085910
v 0.425748 0.466924 1.175210
v 0.445010 0.406187 1.009510
v 0.472910 0.334268 0.948665
v 0.511197 0.180904 1.573450
v 0.499772 0.253275 1.552130
v 0.487168 0.440908 1.099610
v 0.482059 0.457612 1.177080
v 0.503568 0.400270 1.025090
v 0.534827 0.329174 0.967468
v 0.556498 0.186568 1.545780
v 0.548409 0.250769 1.523920
v 0.536228 0.412941 1.113510
v 0.527864 0.432581 1.182090
v 0.552413 0.380407 1.046560
v 0.587364 0.318202 0.994700
v 0.598286 0.190083 1.513230
v 0.590656 0.250487 1.488880
v 0.586371 0.372162 1.126470
v 0.583546 0.382809 1.187430
v 0.600213 0.343455 1.083580
v 0.636573 0.296181 1.031640
v 0.619223 0.233508 0.966682
v 0.667364 0.232055 1.012150
v 0.568080 0.233279 0.933547
v 0.643461 0.201264 1.453930
v 0.632939 0.242324 1.441710
v 0.664762 0.208641 1.416040
v 0.684454 0.215291 1.382920
v 0.456050 0.384211 1.374390
v 0.448917 0.377145 1.391710
v 0.478930 0.379940 1.388610
v 0.470130 0.373683 1.402150
v 0.434311 0.378428 1.384510
v 0.440339 0.386168 1.362490
v 0.446923 0.368618 1.408280
v 0.436017 0.368188 1.405640
v 0.463798 0.366995 1.413770
v 0.478930 0.391277 1.343160
v 0.466541 0.389245 1.357910
v 0.499030 0.387555 1.359830
v 0.488984 0.384633 1.374140
v 0.451446 0.390580 1.342460
v 0.466052 0.391566 1.326560
v 0.503776 0.386198 1.321340
v 0.491683 0.389875 1.330760
v 0.514089 0.385931 1.333980
v 0.507646 0.387822 1.346090
v 0.482504 0.389341 1.315670
v 0.498356 0.384441 1.308460
v 0.514356 0.381690 1.316090
v 0.517129 0.383810 1.324880
v 0.525225 0.377278 1.317500
v 0.524194 0.380845 1.324470
v 0.513088 0.378872 1.305730
v 0.526931 0.373023 1.308510
v 0.540743 0.371666 1.338690
v 0.549106 0.362776 1.332140
v 0.534767 0.373890 1.325690
v 0.539312 0.367632 1.317670
v 0.529993 0.379288 1.330950
v 0.528762 0.380496 1.340880
v 0.542530 0.368633 1.354980
v 0.526196 0.380192 1.354790
v 0.539713 0.364482 1.372480
v 0.520658 0.377961 1.369970
v 0.554037 0.351736 1.370250
v 0.554586 0.357586 1.350330
v 0.532321 0.359892 1.389830
v 0.512183 0.374098 1.385110
v 0.520865 0.355540 1.405960
v 0.501892 0.369649 1.399520
v 0.533870 0.341972 1.408780
v 0.546942 0.346087 1.390210
v 0.507090 0.351558 1.419260
v 0.491112 0.364341 1.412010
v 0.492647 0.348407 1.428750
v 0.481733 0.359091 1.421900
v 0.498059 0.338591 1.433210
v 0.516817 0.339384 1.423510
v 0.478345 0.347866 1.432940
v 0.476009 0.354487 1.428670
v 0.463531 0.352278 1.430520
v 0.466141 0.356607 1.427850
v 0.460758 0.347362 1.433370
v 0.479390 0.340771 1.436980
v 0.451675 0.359951 1.421520
v 0.459490 0.361946 1.421480
v 0.444980 0.357379 1.422670
v 0.417955 0.410087 1.361190
v 0.428521 0.402939 1.360480
v 0.434222 0.413875 1.330630
v 0.442964 0.406498 1.334080
v 0.467260 0.399847 1.320910
v 0.460899 0.407647 1.314510
v 0.451713 0.399113 1.337540
v 0.457748 0.362109 1.475390
v 0.461640 0.358431 1.458590
v 0.433933 0.378806 1.460370
v 0.440636 0.372763 1.445310
v 0.434927 0.377857 1.410990
v 0.425725 0.384974 1.422500
v 0.447331 0.366728 1.430250
v 0.416524 0.392100 1.434010
v 0.410259 0.401938 1.397750
v 0.421344 0.395132 1.391790
v 0.439086 0.395785 1.359780
v 0.432421 0.388326 1.385830
v 0.477811 0.415937 1.293120
v 0.454530 0.415454 1.308090
v 0.480895 0.407032 1.301390
v 0.501181 0.393182 1.302450
v 0.501107 0.401160 1.293390
v 0.483979 0.398120 1.309670
v 0.501010 0.409145 1.284330
v 0.523542 0.397631 1.281200
v 0.520814 0.391855 1.290650
v 0.518085 0.386079 1.300090
v 0.534219 0.377879 1.302910
v 0.539920 0.381720 1.293840
v 0.548980 0.369842 1.312140
v 0.561362 0.362509 1.328070
v 0.558478 0.371918 1.306200
v 0.572832 0.362405 1.326390
v 0.568747 0.373653 1.300030
v 0.545637 0.385583 1.284860
v 0.592710 0.348148 1.351220
v 0.585718 0.360552 1.323820
v 0.580113 0.352811 1.350020
v 0.569414 0.355317 1.349260
v 0.570422 0.348170 1.372900
v 0.579772 0.343714 1.375690
v 0.579468 0.330391 1.407520
v 0.590129 0.337931 1.379570
v 0.570771 0.335929 1.401720
v 0.562052 0.341460 1.395950
v 0.546430 0.337723 1.416530
v 0.552984 0.332185 1.425650
v 0.534219 0.327803 1.457680
v 0.559539 0.326654 1.434770
v 0.529926 0.332066 1.444920
v 0.525633 0.336329 1.432140
v 0.504828 0.338546 1.442080
v 0.507075 0.336656 1.457920
v 0.483905 0.346435 1.480090
v 0.509314 0.334765 1.473760
v 0.484484 0.345523 1.462680
v 0.485055 0.344611 1.445280
v 0.465533 0.354761 1.441790
v 0.497303 0.384737 1.300610
v 0.479983 0.390142 1.307600
v 0.462433 0.392708 1.318540
v 0.434601 0.387740 1.357180
v 0.428387 0.380111 1.381700
v 0.431271 0.368678 1.405110
v 0.446634 0.391929 1.335350
v 0.529147 0.370872 1.301380
v 0.513763 0.378198 1.298450
v 0.442029 0.356615 1.423820
v 0.459668 0.345197 1.435090
v 0.554430 0.357653 1.326360
v 0.542990 0.363859 1.310780
v 0.479753 0.337041 1.439170
v 0.500284 0.333201 1.435570
v 0.562208 0.344582 1.367840
v 0.561837 0.351328 1.345990
v 0.521021 0.332281 1.425470
v 0.540432 0.334001 1.410010
v 0.554482 0.338331 1.389730
v 0.600643 0.352485 1.318070
v 0.582159 0.373334 1.289070
v 0.550842 0.390439 1.269610
v 0.603282 0.324200 1.388730
v 0.608235 0.335811 1.353050
v 0.429500 0.436504 1.296200
v 0.398159 0.428845 1.326270
v 0.378104 0.423736 1.365990
v 0.509410 0.320693 1.506320
v 0.541663 0.314153 1.484830
v 0.570126 0.312322 1.454490
v 0.380876 0.396926 1.458890
v 0.405373 0.376693 1.490920
v 0.438723 0.354420 1.509750
v 0.371201 0.413319 1.414210
v 0.495108 0.426850 1.268020
v 0.463145 0.436823 1.278040
v 0.523171 0.409857 1.264770
v 0.591168 0.315495 1.421330
v 0.474993 0.335084 1.515620
v 0.619319 0.335996 1.302800
v 0.594660 0.368574 1.261010
v 0.559843 0.398068 1.242140
v 0.627690 0.311499 1.349180
v 0.619357 0.298517 1.395120
v 0.400547 0.448752 1.271590
v 0.353370 0.447544 1.309170
v 0.325262 0.432641 1.356930
v 0.545184 0.283414 1.509490
v 0.501396 0.287343 1.536480
v 0.580699 0.286001 1.474570
v 0.361436 0.354628 1.517340
v 0.324395 0.382750 1.478740
v 0.407865 0.328062 1.540900
v 0.312473 0.412578 1.426300
v 0.485485 0.442502 1.238910
v 0.444825 0.450680 1.247500
v 0.522230 0.420800 1.237670
v 0.603461 0.290309 1.437350
v 0.455294 0.304826 1.547230
v 0.648265 0.310498 1.281370
v 0.614092 0.360211 1.213440
v 0.646093 0.258976 1.395630
v 0.660209 0.272240 1.342400
v 0.726559 0.236348 1.163660
v 0.722444 0.223254 1.164420
v 0.720220 0.229037 1.162410
v 0.728888 0.226383 1.158840
v 0.733892 0.190068 1.171410
v 0.740565 0.188756 1.157380
v 0.727523 0.209560 1.168610
v 0.735880 0.210027 1.158370
v 0.743546 0.203332 1.193710
v 0.734137 0.218902 1.185810
v 0.766708 0.211288 1.214560
v 0.647835 0.337531 1.205210
v 0.697533 0.281175 1.258950
v 0.662834 0.339154 1.209580
v 0.713889 0.283703 1.257950
v 0.679487 0.285074 1.268330
v 0.626749 0.357438 1.196160
v 0.729185 0.211147 1.071010
v 0.701714 0.201493 1.066450
v 0.693603 0.266398 1.076370
v 0.654323 0.269171 1.075280
v 0.706786 0.249797 1.302520
v 0.691965 0.248144 1.304840
v 0.705081 0.202732 1.343190
v 0.716743 0.207640 1.343560
v 0.734782 0.211310 1.338840
v 0.726997 0.254795 1.298970
v 0.689993 0.345597 1.215980
v 0.731742 0.288100 1.262940
v 0.712569 0.347844 1.219890
v 0.750515 0.292103 1.267570
v 0.631531 0.373542 1.163580
v 0.642148 0.364696 1.192060
v 0.663234 0.384240 1.165590
v 0.673688 0.370517 1.193590
v 0.705985 0.371681 1.189580
v 0.697229 0.380771 1.160440
v 0.667935 0.375877 1.132860
v 0.635342 0.369642 1.131200
v 0.721970 0.268719 1.079770
v 0.687427 0.335877 1.091820
v 0.655901 0.335959 1.090290
v 0.749121 0.270453 1.083190
v 0.718315 0.332852 1.101290
v 0.752695 0.214172 1.074150
v 0.778994 0.212215 1.079390
v 0.753384 0.216337 1.332980
v 0.776228 0.222276 1.324640
v 0.745162 0.260103 1.299230
v 0.763201 0.264826 1.298800
v 0.719998 0.369872 1.167420
v 0.719026 0.370598 1.152250
v 0.710463 0.374483 1.130660
v 0.888094 0.269527 1.105780
v 0.879791 0.270824 1.083690
v 0.852891 0.301957 1.116530
v 0.841169 0.306072 1.101310
v 0.851586 0.268363 1.075670
v 0.829166 0.296277 1.086270
v 0.903568 0.241197 1.097870
v 0.895331 0.237920 1.071240
v 0.870649 0.232930 1.065130
v 0.914667 0.272159 1.381630
v 0.930867 0.278016 1.365470
v 0.883401 0.319677 1.353200
v 0.899668 0.327744 1.335380
v 0.872695 0.354465 1.287490
v 0.858919 0.348340 1.310030
v 0.775760 0.266205 1.189130
v 0.742589 0.248974 1.182730
v 0.753807 0.286335 1.172610
v 0.741388 0.260645 1.159500
v 0.726589 0.230980 1.172780
v 0.747186 0.292771 1.152010
v 0.741796 0.314161 1.150130
v 0.745081 0.239173 1.155550
v 0.762215 0.253972 1.149810
v 0.773173 0.226413 1.146690
v 0.752124 0.217041 1.151610
v 0.782730 0.202702 1.144140
v 0.759612 0.194391 1.149480
v 0.733188 0.345204 1.226300
v 0.769377 0.295447 1.273370
v 0.756780 0.346450 1.238170
v 0.783012 0.298368 1.286860
v 0.749877 0.323036 1.161900
v 0.770845 0.331740 1.170970
v 0.771416 0.300044 1.181140
v 0.792280 0.308741 1.186100
v 0.812906 0.288656 1.208220
v 0.797455 0.277520 1.195900
v 0.757618 0.351966 1.170150
v 0.733922 0.345642 1.162310
v 0.730971 0.340422 1.148720
v 0.728947 0.342906 1.152680
v 0.730867 0.362917 1.174450
v 0.751464 0.365460 1.180210
v 0.788617 0.251110 1.221500
v 0.809955 0.261556 1.231210
v 0.827305 0.270743 1.240790
v 0.840844 0.236771 1.247210
v 0.823397 0.230520 1.238330
v 0.801888 0.223988 1.228340
v 0.824725 0.294795 1.327770
v 0.822626 0.336418 1.300710
v 0.811720 0.298079 1.312930
v 0.801110 0.343959 1.275760
v 0.844402 0.321553 1.328770
v 0.834949 0.291154 1.339940
v 0.845114 0.338509 1.231930
v 0.874282 0.330020 1.264440
v 0.850815 0.320715 1.237930
v 0.874141 0.314821 1.263380
v 0.873956 0.303062 1.264050
v 0.859520 0.302847 1.248490
v 0.842007 0.299962 1.231620
v 0.829247 0.319314 1.216870
v 0.819364 0.337567 1.206850
v 0.813232 0.354257 1.207240
v 0.809881 0.365927 1.217470
v 0.842148 0.355836 1.233440
v 0.840399 0.367655 1.246030
v 0.874445 0.344856 1.272500
v 0.819223 0.275740 1.332220
v 0.834260 0.240033 1.338200
v 0.831264 0.274776 1.344270
v 0.844528 0.241434 1.349140
v 0.857036 0.243458 1.361410
v 0.843016 0.275510 1.355090
v 0.853181 0.280604 1.261040
v 0.869811 0.284118 1.274540
v 0.885803 0.287521 1.284690
v 0.904562 0.257152 1.298270
v 0.885515 0.251888 1.282830
v 0.868669 0.246669 1.267800
v 0.864391 0.297404 1.361350
v 0.887308 0.257679 1.383750
v 0.927583 0.269171 1.325520
v 0.919487 0.262461 1.310590
v 0.900231 0.304819 1.299410
v 0.895220 0.294795 1.290980
v 0.774300 0.272025 1.085700
v 0.746652 0.329938 1.103460
v 0.797217 0.271440 1.084460
v 0.772358 0.327655 1.100400
v 0.768458 0.337746 1.137370
v 0.763149 0.341430 1.126250
v 0.741210 0.344307 1.141130
v 0.734634 0.349460 1.130870
v 0.768228 0.295521 1.148880
v 0.785236 0.260741 1.147520
v 0.796802 0.233746 1.143580
v 0.809021 0.267177 1.146380
v 0.820676 0.240982 1.140190
v 0.798915 0.220252 1.079560
v 0.818400 0.225419 1.078090
v 0.806122 0.210487 1.140730
v 0.828432 0.217471 1.134770
v 0.819683 0.268548 1.077920
v 0.802549 0.314116 1.094850
v 0.801006 0.328137 1.116670
v 0.806945 0.327484 1.131980
v 0.833651 0.276845 1.136980
v 0.851483 0.252630 1.133120
v 0.837573 0.228645 1.072620
v 0.864999 0.228837 1.131950
v 0.813655 0.234746 1.322770
v 0.795016 0.273879 1.310240
v 0.795527 0.227740 1.320540
v 0.781729 0.268719 1.300270
v 0.854827 0.241983 1.256240
v 0.840191 0.276585 1.249700
v 0.827149 0.295647 1.219010
v 0.806767 0.369998 1.242890
v 0.780395 0.370279 1.218740
v 0.780128 0.367914 1.193110
v 0.750649 0.368974 1.204450
v 0.779572 0.347339 1.254840
v 0.797863 0.299221 1.299260
v 0.793229 0.335803 1.181870
v 0.809955 0.315310 1.199530
v 0.830864 0.364037 1.273360
v 0.725418 0.366595 1.197120
v 0.611201 0.364563 1.162880
v 0.683445 0.363747 1.113310
v 0.825547 0.238513 1.329060
v 0.931861 0.275777 1.344880
v 0.898690 0.239848 1.114570
v 0.884224 0.266420 1.119800
v 0.719612 0.360381 1.143910
v 0.752791 0.331310 1.144710
v 0.792235 0.297308 1.148610
v 0.780365 0.324652 1.142570
v 0.813907 0.315584 1.138760
v 0.814167 0.297768 1.144450
v 0.783679 0.355399 1.181960
v 0.854308 0.295180 1.125410
v 0.902145 0.316971 1.314600
v 0.752428 0.232937 1.208610
v 0.807976 0.276852 1.320830
v 0.699438 0.211621 1.358910
v 0.682393 0.262038 1.316700
v 0.674378 0.295202 1.271360
v 0.628091 0.359907 1.206870
v 0.605767 0.373935 1.176530
v 0.626030 0.318602 1.100790
v 0.620921 0.331525 1.095560
v 0.612017 0.352759 1.134640
v 0.607761 0.361998 1.132470
v 0.684684 0.225375 1.048050
v 0.652417 0.281842 1.059350
v 0.713073 0.360092 1.123940
v 0.683164 0.352945 1.106170
v 0.015383 0.487276 0.662289
v -0.109333 -0.080279 1.129310
v -0.097982 -0.072242 1.081280
v -0.080350 -0.063404 1.034650
v -0.056677 -0.052742 0.991208
v -0.028213 -0.040472 0.951602
v 0.013106 -0.059222 0.915316
v -0.074249 -0.082177 1.033830
v -0.049099 -0.077476 0.990215
v -0.019034 -0.070885 0.951527
v 0.591887 -0.089524 0.918044
v -0.054986 -0.218177 0.101436
v 0.402660 -0.136679 0.101244
v 0.327190 -0.185309 0.101303
v 0.227994 -0.217028 0.101333
v 0.142263 -0.230462 0.101377
v 0.027016 -0.231159 0.101370
v 0.068209 -0.236438 0.101370
v 0.465392 0.083562 0.101481
v -0.125993 0.282717 0.101510
v -0.065737 0.300845 0.101422
v -0.184966 0.256115 0.101644
v -0.216988 0.205282 0.101659
v 0.406619 0.219510 0.101362
v 0.329614 0.271618 0.101496
v 0.229625 0.318320 0.101599
v 0.138408 0.336470 0.101637
v 0.021166 0.324430 0.101488
v 0.447679 0.155147 0.101347
v 0.060432 0.325260 0.101488
vt 0.877975 0.397658
vt 0.873951 0.397664
vt 0.900103 0.397679
vt 0.870831 0.397671
vt 0.867889 0.397674
vt 0.931273 0.397662
vt 0.929288 0.397637
vt 0.865490 0.397668
vt 0.867711 0.397671
vt 0.868707 0.397667
vt 0.866606 0.398924
vt 0.871384 0.397619
vt 0.874160 0.398826
vt 0.878048 0.397558
vt 0.866060 0.397625
vt 0.860570 0.399008
vt 0.856321 0.399060
vt 0.862375 0.397683
vt 0.860024 0.397676
vt 0.853776 0.399148
vt 0.932361 0.401286
vt 0.944998 0.401429
vt 0.936097 0.404570
vt 0.948825 0.405179
vt 0.939922 0.398832
vt 0.928618 0.398828
vt 0.862287 0.401557
vt 0.870712 0.401462
vt 0.855482 0.401642
vt 0.858360 0.405349
vt 0.851030 0.405417
vt 0.867250 0.404976
vt 0.851008 0.401767
vt 0.848050 0.401779
vt 0.846214 0.405443
vt 0.842460 0.405195
vt 0.951482 0.401365
vt 0.945825 0.398800
vt 0.955814 0.405156
vt 0.939709 0.408955
vt 0.951716 0.409790
vt 0.943792 0.414167
vt 0.953940 0.414936
vt 0.854643 0.410095
vt 0.863781 0.409841
vt 0.847079 0.410021
vt 0.850892 0.415208
vt 0.843668 0.414845
vt 0.858319 0.415536
vt 0.959154 0.409842
vt 0.961426 0.415077
vt 0.955396 0.420505
vt 0.946551 0.419988
vt 0.948394 0.426244
vt 0.956245 0.426562
vt 0.962774 0.420748
vt 0.963626 0.426902
vt 0.947821 0.439136
vt 0.949156 0.432796
vt 0.955188 0.438695
vt 0.956416 0.432776
vt 0.963377 0.433055
vt 0.962074 0.438861
vt 0.939469 0.450342
vt 0.944673 0.445101
vt 0.949616 0.449137
vt 0.952905 0.444195
vt 0.959891 0.444199
vt 0.957210 0.449055
vt 0.928445 0.457630
vt 0.933041 0.454385
vt 0.940767 0.456994
vt 0.945196 0.453364
vt 0.954246 0.453493
vt 0.950166 0.457401
vt 0.877438 0.456074
vt 0.890333 0.455013
vt 0.881771 0.458050
vt 0.891902 0.457826
vt 0.885457 0.459788
vt 0.893433 0.460126
vt 0.902160 0.458193
vt 0.902038 0.460510
vt 0.902093 0.455956
vt 0.875073 0.458463
vt 0.870949 0.459563
vt 0.869348 0.456995
vt 0.865831 0.459946
vt 0.876379 0.459992
vt 0.880020 0.459819
vt 0.890696 0.462723
vt 0.889158 0.462546
vt 0.893089 0.462870
vt 0.245158 0.423975
vt 0.250110 0.468112
vt 0.148569 0.498875
vt 0.150442 0.543685
vt 0.595914 0.442419
vt 0.701364 0.364720
vt 0.595493 0.387203
vt 0.704143 0.312403
vt 0.757075 0.288915
vt 0.749567 0.262372
vt 0.302841 0.416173
vt 0.302959 0.373132
vt 0.224027 0.289653
vt 0.235580 0.359702
vt 0.134156 0.320572
vt 0.143764 0.429085
vt 0.298228 0.319321
vt 0.288073 0.263566
vt 0.342229 0.232442
vt 0.353643 0.285267
vt 0.355112 0.336459
vt 0.409212 0.301844
vt 0.416748 0.239090
vt 0.412385 0.174765
vt 0.371257 0.129527
vt 0.316583 0.183819
vt 0.312010 0.090946
vt 0.278107 0.146712
vt 0.258385 0.177707
vt 0.272238 0.213152
vt 0.842115 0.409869
vt 0.837426 0.409453
vt 0.838646 0.414482
vt 0.833434 0.414204
vt 0.345064 0.636086
vt 0.339502 0.673242
vt 0.283208 0.642063
vt 0.260986 0.672117
vt 0.331126 0.714598
vt 0.241009 0.715530
vt 0.847163 0.420560
vt 0.840709 0.419570
vt 0.839445 0.430603
vt 0.835030 0.428579
vt 0.843659 0.433436
vt 0.852464 0.422383
vt 0.835601 0.419062
vt 0.830596 0.418889
vt 0.831257 0.427506
vt 0.827802 0.427141
vt 0.326898 0.757163
vt 0.328393 0.797118
vt 0.233372 0.762934
vt 0.238410 0.805793
vt 0.866399 0.449489
vt 0.869211 0.447456
vt 0.876435 0.450731
vt 0.878828 0.448367
vt 0.861778 0.461251
vt 0.863290 0.455790
vt 0.869445 0.454182
vt 0.798670 0.019963
vt 0.720188 0.090411
vt 0.815355 0.094326
vt 0.722678 0.141004
vt 0.586596 0.164171
vt 0.591566 0.221736
vt 0.919848 0.462088
vt 0.924400 0.459418
vt 0.932799 0.462552
vt 0.936505 0.460001
vt 0.914853 0.457033
vt 0.912969 0.458780
vt 0.911051 0.461039
vt 0.945951 0.460521
vt 0.941970 0.463070
vt 0.896594 0.462992
vt 0.902819 0.462828
vt 0.775513 0.183818
vt 0.714664 0.225413
vt 0.594393 0.311859
vt 0.240207 0.064107
vt 0.220228 0.127313
vt 0.137886 0.045291
vt 0.134162 0.116701
vt 0.209620 0.176711
vt 0.132836 0.176022
vt 0.803506 0.201004
vt 0.853165 0.100422
vt 0.393776 0.367451
vt 0.346805 0.380154
vt 0.214240 0.228892
vt 0.133514 0.241035
vt 0.939147 0.464980
vt 0.930869 0.464578
vt 0.937502 0.466649
vt 0.929700 0.466322
vt 0.911763 0.464455
vt 0.904647 0.464520
vt 0.910929 0.462701
vt 0.906026 0.466148
vt 0.912450 0.466086
vt 0.920833 0.464349
vt 0.920890 0.466118
vt 0.899670 0.464526
vt 0.896490 0.464450
vt 0.897930 0.466107
vt 0.901270 0.466162
vt 0.924570 0.397524
vt 0.934172 0.397517
vt 0.901960 0.397532
vt 0.912366 0.397543
vt 0.902477 0.398810
vt 0.914428 0.398827
vt 0.887934 0.397535
vt 0.886084 0.398748
vt 0.939158 0.397548
vt 0.916553 0.401268
vt 0.903345 0.401161
vt 0.904419 0.404260
vt 0.918892 0.404595
vt 0.883770 0.401252
vt 0.880927 0.404722
vt 0.600870 0.640918
vt 0.595916 0.679782
vt 0.517366 0.634965
vt 0.510699 0.676291
vt 0.593633 0.724091
vt 0.505796 0.719121
vt 0.905488 0.424961
vt 0.912357 0.424967
vt 0.905294 0.428912
vt 0.913340 0.429138
vt 0.911087 0.422154
vt 0.905906 0.421495
vt 0.587548 0.772055
vt 0.501279 0.762876
vt 0.497144 0.804816
vt 0.579229 0.819401
vt 0.904076 0.437412
vt 0.904780 0.433190
vt 0.911884 0.438770
vt 0.913199 0.433998
vt 0.570764 0.860428
vt 0.494669 0.842655
vt 0.495808 0.877438
vt 0.568980 0.893979
vt 0.903210 0.444063
vt 0.903361 0.441071
vt 0.908067 0.444769
vt 0.909872 0.442542
vt 0.918142 0.453706
vt 0.902496 0.453271
vt 0.928783 0.450398
vt 0.935730 0.445715
vt 0.939896 0.439756
vt 0.941415 0.433124
vt 0.940295 0.426582
vt 0.937084 0.420446
vt 0.931618 0.414911
vt 0.921769 0.409549
vt 0.905101 0.407893
vt 0.876573 0.409920
vt 0.866307 0.415598
vt 0.859425 0.421874
vt 0.854503 0.429219
vt 0.853866 0.435555
vt 0.855666 0.441340
vt 0.846009 0.439206
vt 0.849189 0.444410
vt 0.859693 0.446280
vt 0.853635 0.449316
vt 0.859396 0.453185
vt 0.333511 0.830512
vt 0.255441 0.838224
vt 0.335539 0.859065
vt 0.275714 0.857682
vt 0.889827 0.451740
vt 0.862926 0.421743
vt 0.859205 0.428005
vt 0.137030 0.645509
vt 0.099669 0.709478
vt 0.114209 0.644610
vt 0.072436 0.710311
vt 0.217381 0.600094
vt 0.193334 0.589335
vt 0.869662 0.416377
vt 0.857993 0.434235
vt 0.859086 0.440054
vt 0.083907 0.774978
vt 0.093256 0.834193
vt 0.056643 0.778851
vt 0.067488 0.842396
vt 0.916008 0.412068
vt 0.903601 0.410265
vt 0.543475 0.557405
vt 0.557800 0.533271
vt 0.655545 0.572596
vt 0.685834 0.551732
vt 0.910530 0.415402
vt 0.913091 0.413541
vt 0.918257 0.418305
vt 0.921836 0.416936
vt 0.925340 0.416062
vt 0.879532 0.412275
vt 0.318062 0.571086
vt 0.304302 0.551225
vt 0.931494 0.421140
vt 0.923547 0.422692
vt 0.927682 0.421785
vt 0.926515 0.428111
vt 0.931209 0.427509
vt 0.935120 0.427050
vt 0.936295 0.433481
vt 0.927320 0.434037
vt 0.932331 0.433786
vt 0.925669 0.439922
vt 0.930432 0.440034
vt 0.934525 0.439972
vt 0.912845 0.451737
vt 0.922595 0.449614
vt 0.907361 0.448978
vt 0.915126 0.447877
vt 0.909842 0.450414
vt 0.918684 0.448912
vt 0.515560 0.943140
vt 0.618068 0.949096
vt 0.529717 0.959537
vt 0.647404 0.965201
vt 0.901128 0.451294
vt 0.929882 0.445604
vt 0.921412 0.444811
vt 0.925747 0.445329
vt 0.862632 0.444730
vt 0.194162 0.909528
vt 0.176891 0.924466
vt 0.127886 0.880246
vt 0.105635 0.892789
vt 0.298575 0.918513
vt 0.289302 0.932026
vt 0.410040 0.927663
vt 0.412647 0.940987
vt 0.152917 0.714025
vt 0.188039 0.660899
vt 0.251002 0.622891
vt 0.148083 0.821618
vt 0.139091 0.770988
vt 0.624566 0.605374
vt 0.529124 0.594060
vt 0.907910 0.418325
vt 0.914417 0.420366
vt 0.333860 0.602351
vt 0.918293 0.424021
vt 0.920590 0.428770
vt 0.920879 0.434155
vt 0.919487 0.439514
vt 0.911345 0.446349
vt 0.904990 0.446728
vt 0.503730 0.914675
vt 0.590033 0.923870
vt 0.916084 0.443813
vt 0.174218 0.860862
vt 0.232830 0.882474
vt 0.318561 0.890705
vt 0.412205 0.900441
vt 0.414872 0.864697
vt 0.414169 0.832004
vt 0.413463 0.796679
vt 0.414763 0.757000
vt 0.418623 0.715141
vt 0.424042 0.673740
vt 0.428561 0.633258
vt 0.429426 0.594048
vt 0.429051 0.559095
vt 0.429259 0.535162
vt 0.891421 0.410387
vt 0.891335 0.407994
vt 0.892300 0.404278
vt 0.892667 0.401108
vt 0.892803 0.398753
vt 0.893101 0.397518
vt 0.953337 0.401538
vt 0.958091 0.405199
vt 0.947500 0.399036
vt 0.961860 0.409791
vt 0.964499 0.415028
vt 0.966120 0.420717
vt 0.967305 0.426924
vt 0.967388 0.433074
vt 0.966427 0.438883
vt 0.964510 0.444202
vt 0.961861 0.448940
vt 0.958944 0.453645
vt 0.955428 0.457592
vt 0.951844 0.460785
vt 0.948132 0.463506
vt 0.945008 0.465414
vt 0.942800 0.466896
vt 0.940897 0.397660
vt 0.894646 0.464377
vt 0.893748 0.464327
vt 0.895819 0.465909
vt 0.894732 0.465707
vt 0.898046 0.468336
vt 0.895591 0.467749
vt 0.894211 0.467377
vt 0.892528 0.469525
vt 0.894053 0.470321
vt 0.897020 0.472125
vt 0.906461 0.468060
vt 0.901761 0.468217
vt 0.901883 0.471147
vt 0.906501 0.470456
vt 0.912592 0.467918
vt 0.912253 0.470089
vt 0.920674 0.470154
vt 0.920682 0.467923
vt 0.929876 0.470181
vt 0.929300 0.468129
vt 0.937020 0.468441
vt 0.938213 0.470896
vt 0.942275 0.468514
vt 0.942757 0.470744
vt 0.890006 0.449500
vt 0.859393 0.397599
vt 0.852976 0.399065
vt 0.847065 0.401675
vt 0.841270 0.405026
vt 0.953466 0.401386
vt 0.958188 0.405089
vt 0.947588 0.398916
vt 0.961862 0.409747
vt 0.964391 0.415022
vt 0.965926 0.420729
vt 0.967068 0.426923
vt 0.967242 0.433135
vt 0.966314 0.439008
vt 0.964406 0.444378
vt 0.961584 0.449120
vt 0.954279 0.457569
vt 0.958267 0.453722
vt 0.870463 0.459645
vt 0.869977 0.459728
vt 0.865611 0.460368
vt 0.865391 0.460791
vt 0.875883 0.460032
vt 0.875386 0.460071
vt 0.889107 0.462568
vt 0.889055 0.462590
vt 0.044392 0.517280
vt 0.043999 0.560029
vt 0.579657 0.457140
vt 0.472222 0.467543
vt 0.576570 0.399149
vt 0.470583 0.402538
vt 0.055194 0.327681
vt 0.048040 0.442488
vt 0.836433 0.409343
vt 0.832578 0.414030
vt 0.832317 0.414141
vt 0.829542 0.419704
vt 0.829240 0.419624
vt 0.456894 0.171519
vt 0.545104 0.178866
vt 0.459246 0.232082
vt 0.554780 0.242428
vt 0.861810 0.461905
vt 0.861843 0.462560
vt 0.950530 0.460750
vt 0.946775 0.463400
vt 0.468306 0.320445
vt 0.572701 0.325840
vt 0.057144 0.041836
vt 0.056343 0.115320
vt 0.056323 0.176259
vt 0.056512 0.244825
vt 0.943577 0.465237
vt 0.941527 0.466697
vt 0.893773 0.464335
vt 0.893798 0.464342
vt 0.894526 0.465626
vt 0.894385 0.465571
vt 0.940912 0.397604
vt 0.893807 0.467247
vt 0.893563 0.467166
vt 0.891985 0.469369
vt 0.891535 0.469419
vt 0.940762 0.470517
vt 0.940364 0.468392
vt 0.866236 0.398834
vt 0.873711 0.398813
vt 0.870971 0.397493
vt 0.877506 0.397514
vt 0.860032 0.398872
vt 0.865522 0.397455
vt 0.856026 0.399014
vt 0.861954 0.397568
vt 0.853853 0.399094
vt 0.860159 0.397664
vt 0.948546 0.405179
vt 0.944496 0.401457
vt 0.935431 0.404681
vt 0.931632 0.401375
vt 0.939488 0.398861
vt 0.927974 0.398901
vt 0.870657 0.401504
vt 0.861966 0.401526
vt 0.855096 0.401600
vt 0.850751 0.405417
vt 0.858121 0.405363
vt 0.867731 0.405188
vt 0.850561 0.401575
vt 0.848094 0.401586
vt 0.842791 0.404957
vt 0.845766 0.405198
vt 0.945500 0.398818
vt 0.951158 0.401375
vt 0.955535 0.405156
vt 0.953600 0.414936
vt 0.951437 0.409790
vt 0.942950 0.414410
vt 0.938847 0.409148
vt 0.863906 0.410047
vt 0.854469 0.410101
vt 0.846800 0.410021
vt 0.843291 0.414792
vt 0.850618 0.415218
vt 0.858112 0.415702
vt 0.958875 0.409842
vt 0.961147 0.415077
vt 0.955100 0.420509
vt 0.945887 0.420220
vt 0.955942 0.426574
vt 0.947818 0.426423
vt 0.962495 0.420748
vt 0.963347 0.426902
vt 0.947179 0.438896
vt 0.955415 0.438781
vt 0.948355 0.432791
vt 0.956270 0.432802
vt 0.963455 0.433109
vt 0.962550 0.439010
vt 0.939730 0.449457
vt 0.950281 0.449152
vt 0.944309 0.444589
vt 0.953464 0.444290
vt 0.960647 0.444424
vt 0.957836 0.449233
vt 0.928866 0.456683
vt 0.941589 0.457208
vt 0.933669 0.453285
vt 0.946319 0.453375
vt 0.954103 0.453514
vt 0.949874 0.457416
vt 0.877353 0.455968
vt 0.882269 0.458025
vt 0.890577 0.455047
vt 0.892317 0.457757
vt 0.886684 0.460112
vt 0.894230 0.460211
vt 0.902677 0.460467
vt 0.902670 0.458019
vt 0.902808 0.455334
vt 0.865825 0.458435
vt 0.871446 0.458982
vt 0.869597 0.456984
vt 0.875200 0.458466
vt 0.877063 0.460000
vt 0.880928 0.460060
vt 0.890358 0.462714
vt 0.889224 0.462652
vt 0.892541 0.462593
vt 0.253473 0.420340
vt 0.198325 0.471074
vt 0.257191 0.464291
vt 0.201641 0.514357
vt 0.644363 0.422582
vt 0.643061 0.366324
vt 0.703499 0.366966
vt 0.703370 0.314326
vt 0.745969 0.267070
vt 0.753820 0.293297
vt 0.305266 0.371658
vt 0.304409 0.414784
vt 0.230885 0.286168
vt 0.167912 0.306331
vt 0.242536 0.354324
vt 0.188981 0.401339
vt 0.300813 0.317790
vt 0.290984 0.262458
vt 0.343946 0.231017
vt 0.355397 0.284532
vt 0.356783 0.335152
vt 0.414764 0.292810
vt 0.419941 0.236001
vt 0.413771 0.173263
vt 0.370421 0.125545
vt 0.313385 0.086563
vt 0.319456 0.180460
vt 0.282902 0.142155
vt 0.261679 0.175104
vt 0.275739 0.211488
vt 0.841603 0.409572
vt 0.838159 0.409243
vt 0.834209 0.413908
vt 0.837981 0.414182
vt 0.352720 0.639241
vt 0.294558 0.645659
vt 0.348213 0.675519
vt 0.274212 0.673847
vt 0.253789 0.714174
vt 0.339072 0.715472
vt 0.846514 0.420792
vt 0.839885 0.419736
vt 0.834481 0.428371
vt 0.838869 0.430451
vt 0.843430 0.433385
vt 0.852102 0.422532
vt 0.834732 0.419195
vt 0.830666 0.418987
vt 0.827717 0.426976
vt 0.830662 0.427303
vt 0.241492 0.801977
vt 0.330569 0.796358
vt 0.241562 0.759109
vt 0.332348 0.756954
vt 0.878346 0.448288
vt 0.868619 0.446935
vt 0.875777 0.450429
vt 0.865577 0.448677
vt 0.860982 0.459109
vt 0.863516 0.455972
vt 0.868771 0.453598
vt 0.797949 0.022112
vt 0.816816 0.093012
vt 0.715991 0.092651
vt 0.720595 0.147032
vt 0.636546 0.210325
vt 0.627672 0.148444
vt 0.919955 0.462087
vt 0.933215 0.462650
vt 0.924520 0.459410
vt 0.936971 0.460171
vt 0.915797 0.455832
vt 0.913434 0.458571
vt 0.911682 0.460937
vt 0.945768 0.460575
vt 0.941689 0.463136
vt 0.897291 0.462545
vt 0.903757 0.462585
vt 0.772502 0.189202
vt 0.711355 0.231084
vt 0.641706 0.289174
vt 0.247515 0.059560
vt 0.175872 0.043369
vt 0.230266 0.122298
vt 0.166908 0.113803
vt 0.162066 0.173298
vt 0.220575 0.173418
vt 0.800674 0.205793
vt 0.855305 0.094200
vt 0.399643 0.347472
vt 0.348371 0.378515
vt 0.223314 0.226619
vt 0.162858 0.235961
vt 0.938505 0.464915
vt 0.930828 0.464538
vt 0.929084 0.466249
vt 0.936418 0.466469
vt 0.904992 0.464496
vt 0.911714 0.462545
vt 0.912260 0.464434
vt 0.906001 0.466171
vt 0.912549 0.466198
vt 0.920438 0.466178
vt 0.920682 0.464371
vt 0.899694 0.464496
vt 0.896238 0.464476
vt 0.897673 0.466070
vt 0.901142 0.466120
vt 0.933851 0.397545
vt 0.924135 0.397565
vt 0.901567 0.397461
vt 0.902111 0.398787
vt 0.911927 0.397463
vt 0.913998 0.398826
vt 0.885568 0.398789
vt 0.887707 0.397486
vt 0.939027 0.397536
vt 0.902897 0.401138
vt 0.916139 0.401275
vt 0.904075 0.404332
vt 0.918631 0.404656
vt 0.883077 0.401373
vt 0.880245 0.404983
vt 0.600135 0.641640
vt 0.519216 0.636196
vt 0.595756 0.680499
vt 0.513483 0.677706
vt 0.509018 0.719971
vt 0.595108 0.724198
vt 0.912942 0.429219
vt 0.912006 0.425106
vt 0.905419 0.428922
vt 0.905474 0.425025
vt 0.910791 0.422281
vt 0.905844 0.421559
vt 0.590769 0.769750
vt 0.503982 0.762367
vt 0.498249 0.802950
vt 0.581926 0.813498
vt 0.904305 0.436885
vt 0.911907 0.438227
vt 0.905052 0.432984
vt 0.913047 0.433844
vt 0.571758 0.851938
vt 0.493564 0.840197
vt 0.493370 0.874734
vt 0.568900 0.884732
vt 0.903203 0.443238
vt 0.908124 0.443775
vt 0.903445 0.440313
vt 0.909903 0.441649
vt 0.902850 0.452456
vt 0.918742 0.452460
vt 0.929033 0.449192
vt 0.935553 0.444785
vt 0.939489 0.439171
vt 0.940895 0.433027
vt 0.939916 0.426757
vt 0.936762 0.420698
vt 0.931211 0.415109
vt 0.904610 0.407951
vt 0.921344 0.409650
vt 0.876099 0.410269
vt 0.865754 0.416146
vt 0.858856 0.422274
vt 0.854080 0.429250
vt 0.848700 0.443676
vt 0.855252 0.440105
vt 0.845714 0.439016
vt 0.853622 0.434905
vt 0.852614 0.447663
vt 0.858958 0.445110
vt 0.858176 0.451853
vt 0.254385 0.836095
vt 0.333265 0.830744
vt 0.334347 0.859927
vt 0.274272 0.857068
vt 0.889824 0.451480
vt 0.858947 0.427844
vt 0.863033 0.422095
vt 0.160452 0.654158
vt 0.126019 0.649524
vt 0.111374 0.707428
vt 0.074711 0.707898
vt 0.232092 0.611555
vt 0.203545 0.598866
vt 0.869857 0.416948
vt 0.858451 0.439034
vt 0.857612 0.433475
vt 0.086444 0.767612
vt 0.053832 0.770468
vt 0.085639 0.828171
vt 0.059040 0.833261
vt 0.915613 0.412200
vt 0.903128 0.410252
vt 0.540600 0.554531
vt 0.653253 0.571690
vt 0.552741 0.532581
vt 0.682275 0.551691
vt 0.910336 0.415321
vt 0.917730 0.418674
vt 0.912790 0.413538
vt 0.921258 0.417307
vt 0.924944 0.416332
vt 0.879341 0.412694
vt 0.321928 0.578317
vt 0.305300 0.558373
vt 0.930972 0.421500
vt 0.922517 0.423241
vt 0.926792 0.422268
vt 0.925060 0.428584
vt 0.929895 0.427930
vt 0.934420 0.427304
vt 0.935453 0.433435
vt 0.925801 0.434263
vt 0.930838 0.433902
vt 0.924243 0.439743
vt 0.929152 0.439726
vt 0.933786 0.439455
vt 0.922618 0.448568
vt 0.913071 0.450609
vt 0.907300 0.448560
vt 0.909883 0.449686
vt 0.914720 0.447235
vt 0.918464 0.448158
vt 0.513713 0.938992
vt 0.528694 0.953445
vt 0.617347 0.944413
vt 0.647892 0.957038
vt 0.901060 0.450464
vt 0.929479 0.444749
vt 0.920523 0.444350
vt 0.924927 0.444695
vt 0.861743 0.443993
vt 0.191556 0.905473
vt 0.119561 0.876603
vt 0.173642 0.917872
vt 0.096090 0.886393
vt 0.296111 0.916924
vt 0.285563 0.930752
vt 0.407594 0.925155
vt 0.411737 0.936637
vt 0.175067 0.711347
vt 0.212659 0.665019
vt 0.264355 0.628942
vt 0.154483 0.814520
vt 0.154113 0.763611
vt 0.623018 0.605621
vt 0.528987 0.594894
vt 0.907779 0.418347
vt 0.914012 0.420577
vt 0.339791 0.607004
vt 0.917709 0.424320
vt 0.919641 0.429082
vt 0.919962 0.434273
vt 0.918588 0.439240
vt 0.911088 0.445577
vt 0.904848 0.446138
vt 0.588358 0.917245
vt 0.500784 0.908814
vt 0.915514 0.443200
vt 0.178893 0.855096
vt 0.233880 0.878659
vt 0.317203 0.888741
vt 0.409219 0.897533
vt 0.412456 0.865776
vt 0.413517 0.832907
vt 0.415303 0.797177
vt 0.419030 0.758087
vt 0.424284 0.717135
vt 0.429773 0.675932
vt 0.433166 0.635493
vt 0.431719 0.596003
vt 0.426262 0.535529
vt 0.428450 0.560105
vt 0.890897 0.408138
vt 0.891059 0.410492
vt 0.891880 0.404459
vt 0.892481 0.401195
vt 0.892744 0.398811
vt 0.892774 0.397499
vt 0.852987 0.399150
vt 0.859402 0.397672
vt 0.847027 0.401638
vt 0.841440 0.405030
vt 0.139391 0.505963
vt 0.140772 0.546375
vt 0.105327 0.324975
vt 0.131454 0.436403
vt 0.836758 0.409301
vt 0.826856 0.427241
vt 0.103269 0.042003
vt 0.100779 0.113050
vt 0.099208 0.173793
vt 0.099637 0.242841
vt 0.893304 0.464316
vt 0.894343 0.465793
vt 0.894093 0.464377
vt 0.895401 0.465971
vt 0.893628 0.467665
vt 0.890751 0.471053
vt 0.897653 0.467915
vt 0.895086 0.467874
vt 0.893376 0.470550
vt 0.896513 0.470318
vt 0.906138 0.467954
vt 0.901291 0.467913
vt 0.900442 0.470186
vt 0.905385 0.470181
vt 0.912382 0.468058
vt 0.911527 0.470316
vt 0.918635 0.470453
vt 0.919770 0.468076
vt 0.926488 0.470872
vt 0.927835 0.468189
vt 0.935282 0.468257
vt 0.935209 0.471328
vt 0.878197 0.500625
vt 0.878935 0.505269
vt 0.877915 0.500707
vt 0.878376 0.505430
vt 0.878490 0.500327
vt 0.879515 0.504678
vt 0.878776 0.499827
vt 0.880077 0.503685
vt 0.879041 0.499148
vt 0.880596 0.502336
vt 0.879273 0.498323
vt 0.881050 0.500691
vt 0.879461 0.497390
vt 0.881414 0.498833
vt 0.879595 0.496393
vt 0.881685 0.496848
vt 0.879673 0.495381
vt 0.881831 0.494834
vt 0.879688 0.494400
vt 0.881855 0.492886
vt 0.879641 0.493495
vt 0.881754 0.491093
vt 0.879517 0.492692
vt 0.881496 0.489502
vt 0.879256 0.491990
vt 0.880966 0.488128
vt 0.878724 0.491679
vt 0.879976 0.487255
vt 0.878985 0.491764
vt 0.880441 0.487544
vt 0.880259 0.509816
vt 0.879427 0.510054
vt 0.881118 0.508941
vt 0.881951 0.507469
vt 0.882719 0.505470
vt 0.883385 0.503037
vt 0.883918 0.500283
vt 0.884295 0.497337
vt 0.884501 0.494341
vt 0.884524 0.491438
vt 0.884373 0.488781
vt 0.883999 0.486461
vt 0.883210 0.484429
vt 0.882394 0.483424
vt 0.882124 0.514208
vt 0.881033 0.514520
vt 0.883251 0.513061
vt 0.884343 0.511133
vt 0.885349 0.508513
vt 0.886222 0.505324
vt 0.886921 0.501715
vt 0.887414 0.497854
vt 0.887677 0.493924
vt 0.887702 0.490113
vt 0.887496 0.486645
vt 0.886980 0.483610
vt 0.885938 0.480910
vt 0.884878 0.479558
vt 0.883170 0.518762
vt 0.884506 0.518380
vt 0.885883 0.516979
vt 0.887217 0.514621
vt 0.888447 0.511419
vt 0.889514 0.507521
vt 0.890369 0.503109
vt 0.890971 0.498390
vt 0.891293 0.493586
vt 0.891320 0.488919
vt 0.891054 0.484665
vt 0.890395 0.481066
vt 0.889190 0.477958
vt 0.887817 0.476052
vt 0.885807 0.522719
vt 0.887367 0.522273
vt 0.888975 0.520637
vt 0.890533 0.517885
vt 0.891968 0.514147
vt 0.893214 0.509596
vt 0.894212 0.504446
vt 0.894915 0.498938
vt 0.895291 0.493329
vt 0.895322 0.487882
vt 0.895000 0.482915
vt 0.894205 0.478779
vt 0.892842 0.475169
vt 0.891068 0.473073
vt 0.888906 0.526332
vt 0.890668 0.525829
vt 0.892483 0.523982
vt 0.894241 0.520876
vt 0.895861 0.516656
vt 0.897267 0.511520
vt 0.898394 0.505707
vt 0.899187 0.499489
vt 0.899612 0.493158
vt 0.899646 0.487009
vt 0.899286 0.481354
vt 0.898411 0.476638
vt 0.892421 0.529549
vt 0.894359 0.528996
vt 0.896354 0.526965
vt 0.898288 0.523550
vt 0.900069 0.518911
vt 0.901615 0.513263
vt 0.902854 0.506872
vt 0.903726 0.500036
vt 0.904193 0.493075
vt 0.904231 0.486314
vt 0.903834 0.480100
vt 0.902975 0.475040
vt 0.896302 0.532323
vt 0.898388 0.531728
vt 0.900534 0.529543
vt 0.902614 0.525869
vt 0.904531 0.520877
vt 0.906194 0.514801
vt 0.907527 0.507925
vt 0.908466 0.500570
vt 0.908967 0.493081
vt 0.909009 0.485806
vt 0.908572 0.479151
vt 0.907654 0.473824
vt 0.900491 0.534614
vt 0.902694 0.533986
vt 0.904960 0.531679
vt 0.907157 0.527799
vt 0.909181 0.522528
vt 0.910937 0.516111
vt 0.912345 0.508850
vt 0.913336 0.501084
vt 0.913866 0.493175
vt 0.913909 0.485494
vt 0.913460 0.478418
vt 0.912585 0.472851
vt 0.904927 0.536388
vt 0.907215 0.535736
vt 0.909569 0.533340
vt 0.911850 0.529311
vt 0.913952 0.523838
vt 0.915776 0.517175
vt 0.917237 0.509635
vt 0.918266 0.501570
vt 0.918854 0.493342
vt 0.918947 0.485357
vt 0.918440 0.478006
vt 0.917870 0.471971
vt 0.911914 0.537955
vt 0.914263 0.537286
vt 0.916678 0.534827
vt 0.919019 0.530693
vt 0.921175 0.525076
vt 0.923047 0.518239
vt 0.924546 0.510502
vt 0.925585 0.502224
vt 0.926227 0.493754
vt 0.926493 0.485583
vt 0.925762 0.478045
vt 0.924764 0.471485
vt 0.919062 0.538392
vt 0.921403 0.537724
vt 0.923810 0.535275
vt 0.926142 0.531156
vt 0.930338 0.525761
vt 0.931620 0.519674
vt 0.933283 0.512932
vt 0.932692 0.502839
vt 0.933977 0.494768
vt 0.934333 0.486371
vt 0.933206 0.478784
vt 0.931863 0.472204
vt 0.923820 0.537920
vt 0.926110 0.537268
vt 0.928464 0.534872
vt 0.932388 0.530343
vt 0.937335 0.506755
vt 0.941235 0.498334
vt 0.941521 0.487989
vt 0.940371 0.480184
vt 0.938481 0.473907
vt 0.928485 0.536884
vt 0.930691 0.536256
vt 0.934789 0.533043
vt 0.932989 0.535298
vt 0.935078 0.534703
vt 0.938368 0.532576
vt 0.947164 0.489068
vt 0.947066 0.497764
vt 0.946239 0.481893
vt 0.944283 0.476284
vt 0.937267 0.533185
vt 0.939209 0.532632
vt 0.941919 0.530982
vt 0.950271 0.497772
vt 0.950689 0.490156
vt 0.950340 0.483450
vt 0.948203 0.478162
vt 0.941256 0.530577
vt 0.943023 0.530074
vt 0.945589 0.528338
vt 0.953490 0.491089
vt 0.952472 0.498024
vt 0.953154 0.485389
vt 0.951415 0.480527
vt 0.944898 0.527510
vt 0.946464 0.527065
vt 0.948879 0.525086
vt 0.955336 0.498108
vt 0.955494 0.492270
vt 0.955142 0.488211
vt 0.954263 0.484425
vt 0.949389 0.475505
vt 0.954052 0.482326
vt 0.947570 0.475109
vt 0.943613 0.471998
vt 0.945693 0.473082
vt 0.949187 0.522238
vt 0.950577 0.521636
vt 0.951775 0.520708
vt 0.950886 0.519379
vt 0.952605 0.518141
vt 0.952742 0.516616
vt 0.954470 0.515316
vt 0.878125 0.495997
vt 0.699705 0.808301
vt 0.767751 0.813767
vt 0.710393 0.859091
vt 0.770203 0.857847
vt 0.670460 0.860010
vt 0.652167 0.800156
vt 0.732575 0.902022
vt 0.706983 0.910753
vt 0.776574 0.894725
vt 0.709069 0.706824
vt 0.772884 0.721001
vt 0.699610 0.756109
vt 0.769128 0.766819
vt 0.650715 0.739559
vt 0.665169 0.685443
vt 0.747389 0.629544
vt 0.781976 0.645207
vt 0.726035 0.663915
vt 0.777571 0.679447
vt 0.692510 0.641696
vt 0.725600 0.608173
vt 0.800844 0.613722
vt 0.782354 0.622030
vt 0.800842 0.598447
vt 0.770640 0.606739
vt 0.761516 0.586356
vt 0.801211 0.578120
vt 0.843418 0.585771
vt 0.884582 0.608278
vt 0.833474 0.606525
vt 0.861681 0.629270
vt 0.821482 0.621769
vt 0.826927 0.645008
vt 0.841154 0.721344
vt 0.835351 0.679466
vt 0.901508 0.709495
vt 0.885190 0.664947
vt 0.920582 0.644640
vt 0.946246 0.692573
vt 0.840491 0.814502
vt 0.842749 0.767471
vt 0.905321 0.811872
vt 0.908491 0.759591
vt 0.957769 0.748636
vt 0.953229 0.808266
vt 0.832824 0.894364
vt 0.836470 0.858222
vt 0.876480 0.901039
vt 0.893987 0.860506
vt 0.934495 0.863509
vt 0.904941 0.908789
vt 0.808557 0.928096
vt 0.833115 0.918674
vt 0.811165 0.939260
vt 0.850764 0.928355
vt 0.866017 0.939324
vt 0.815782 0.955298
vt 0.767445 0.930389
vt 0.781351 0.919619
vt 0.756778 0.947206
vt 0.943537 0.514246
vt 0.944979 0.511457
vt 0.944004 0.514141
vt 0.945299 0.511731
vt 0.946866 0.510467
vt 0.945612 0.512005
vt 0.946775 0.509925
vt 0.944125 0.524447
vt 0.943125 0.523168
vt 0.944265 0.522893
vt 0.943363 0.521760
vt 0.943213 0.518650
vt 0.943600 0.520352
vt 0.942839 0.519741
vt 0.942465 0.520831
vt 0.942508 0.517563
vt 0.943036 0.516979
vt 0.944472 0.514036
vt 0.943564 0.516394
vt 0.948503 0.507957
vt 0.948316 0.508687
vt 0.946664 0.509365
vt 0.949207 0.508705
vt 0.948096 0.509397
vt 0.949608 0.507910
vt 0.950009 0.507096
vt 0.951195 0.506751
vt 0.950679 0.507606
vt 0.950161 0.508443
vt 0.951005 0.508659
vt 0.951647 0.507843
vt 0.951744 0.509448
vt 0.952587 0.508900
vt 0.952323 0.510866
vt 0.953318 0.510638
vt 0.953444 0.508317
vt 0.952296 0.507042
vt 0.954069 0.512878
vt 0.953344 0.512779
vt 0.954198 0.510416
vt 0.952538 0.512757
vt 0.952220 0.514880
vt 0.952777 0.515115
vt 0.952001 0.518020
vt 0.951641 0.517475
vt 0.953314 0.515413
vt 0.951263 0.516984
vt 0.949848 0.518868
vt 0.950071 0.519673
vt 0.948367 0.522605
vt 0.948260 0.521460
vt 0.950291 0.520481
vt 0.948152 0.520315
vt 0.946642 0.521256
vt 0.946704 0.522693
vt 0.945370 0.524785
vt 0.945389 0.523190
vt 0.946766 0.524131
vt 0.945409 0.521595
vt 0.944404 0.521338
vt 0.678283 0.626368
vt 0.715348 0.591757
vt 0.648199 0.671421
vt 0.648584 0.866073
vt 0.628808 0.796368
vt 0.694447 0.921544
vt 0.627873 0.728326
vt 0.756739 0.569509
vt 0.801790 0.560389
vt 0.753465 0.960832
vt 0.819304 0.969461
vt 0.896919 0.591012
vt 0.849419 0.567507
vt 0.878442 0.952645
vt 0.925282 0.919811
vt 0.970524 0.680324
vt 0.939853 0.628765
vt 0.962143 0.870229
vt 0.978626 0.806509
vt 0.983346 0.741752
vt 0.947425 0.509189
vt 0.948517 0.508521
vt 0.946164 0.510225
vt 0.942852 0.515989
vt 0.943731 0.513771
vt 0.942484 0.518080
vt 0.944874 0.511783
vt 0.949456 0.508269
vt 0.950283 0.508511
vt 0.942699 0.519730
vt 0.943487 0.520694
vt 0.950990 0.509314
vt 0.951552 0.510694
vt 0.944633 0.521012
vt 0.946034 0.520645
vt 0.951791 0.512457
vt 0.951461 0.514432
vt 0.947604 0.519694
vt 0.949207 0.518265
vt 0.950530 0.516413
vt 0.954352 0.507334
vt 0.955064 0.510040
vt 0.953029 0.505660
vt 0.954691 0.513093
vt 0.953563 0.516187
vt 0.945738 0.508370
vt 0.942931 0.511155
vt 0.941124 0.514785
vt 0.948237 0.525023
vt 0.946042 0.527051
vt 0.950358 0.522206
vt 0.939919 0.523165
vt 0.940778 0.525984
vt 0.942236 0.527579
vt 0.940031 0.519157
vt 0.950380 0.505668
vt 0.948360 0.506655
vt 0.951792 0.505283
vt 0.952106 0.519194
vt 0.944080 0.527997
vt 0.955136 0.505085
vt 0.955458 0.508799
vt 0.953996 0.503048
vt 0.954947 0.512890
vt 0.953571 0.516724
vt 0.940392 0.509704
vt 0.943959 0.505926
vt 0.937487 0.514053
vt 0.946965 0.527152
vt 0.943743 0.529685
vt 0.949863 0.523920
vt 0.936263 0.528363
vt 0.934831 0.524989
vt 0.938515 0.530358
vt 0.935440 0.520327
vt 0.947235 0.504116
vt 0.949823 0.503295
vt 0.952034 0.502955
vt 0.951882 0.520410
vt 0.941028 0.530790
vt 0.956376 0.507194
vt 0.956255 0.501869
vt 0.955436 0.512282
vt 0.953780 0.516679
vt 0.874321 0.260529
vt 0.874570 0.258357
vt 0.870642 0.262514
vt 0.875205 0.262091
vt 0.870232 0.260129
vt 0.874180 0.274349
vt 0.878088 0.275377
vt 0.875282 0.284248
vt 0.879128 0.284194
vt 0.876451 0.268146
vt 0.871760 0.267630
vt 0.879196 0.270887
vt 0.875496 0.265391
vt 0.893101 0.284420
vt 0.892287 0.271326
vt 0.879947 0.284131
vt 0.877309 0.242158
vt 0.869772 0.241647
vt 0.862255 0.219399
vt 0.855575 0.218438
vt 0.849440 0.210845
vt 0.862432 0.239621
vt 0.849901 0.240235
vt 0.863194 0.266321
vt 0.867315 0.244511
vt 0.876212 0.265675
vt 0.880423 0.283451
vt 0.866718 0.283089
vt 0.870498 0.254293
vt 0.863904 0.253791
vt 0.870234 0.270504
vt 0.864805 0.270607
vt 0.878645 0.270230
vt 0.879852 0.254050
vt 0.894641 0.243235
vt 0.885819 0.242521
vt 0.884908 0.221559
vt 0.874780 0.219802
vt 0.853855 0.205189
vt 0.868038 0.204565
vt 0.856654 0.209577
vt 0.870975 0.210424
vt 0.882303 0.208527
vt 0.885027 0.212810
vt 0.869343 0.207181
vt 0.855354 0.205901
vt 0.879862 0.246326
vt 0.872817 0.221463
vt 0.859409 0.218500
vt 0.885826 0.225344
vt 0.891813 0.248223
vt 0.886742 0.266822
vt 0.897889 0.269881
vt 0.890434 0.283337
vt 0.902191 0.283202
vt 0.887267 0.269985
vt 0.888486 0.253806
vt 0.897865 0.269734
vt 0.897003 0.253871
vt 0.890889 0.214313
vt 0.890567 0.213820
vt 0.887336 0.211472
vt 0.935827 0.245027
vt 0.948386 0.259727
vt 0.940502 0.247339
vt 0.952135 0.261243
vt 0.935892 0.257903
vt 0.929477 0.246937
vt 0.955141 0.271935
vt 0.951237 0.271687
vt 0.956107 0.282705
vt 0.951697 0.282445
vt 0.941535 0.282520
vt 0.939971 0.271031
vt 0.963745 0.266939
vt 0.955791 0.248173
vt 0.971434 0.266214
vt 0.963770 0.246708
vt 0.948554 0.235961
vt 0.955224 0.234835
vt 0.886107 0.251776
vt 0.887306 0.257140
vt 0.896396 0.245174
vt 0.901578 0.253513
vt 0.893935 0.234459
vt 0.893306 0.241625
vt 0.884880 0.259333
vt 0.895682 0.256287
vt 0.898524 0.274248
vt 0.887363 0.275119
vt 0.897217 0.265981
vt 0.885952 0.267220
vt 0.888292 0.284017
vt 0.899782 0.283788
vt 0.893557 0.224473
vt 0.903384 0.244263
vt 0.909834 0.245212
vt 0.904117 0.226402
vt 0.898452 0.232315
vt 0.905360 0.242289
vt 0.908475 0.231470
vt 0.914901 0.241090
vt 0.912117 0.251402
vt 0.921110 0.249824
vt 0.894105 0.223477
vt 0.905103 0.223634
vt 0.892209 0.224715
vt 0.891627 0.223783
vt 0.894785 0.217728
vt 0.904032 0.218825
vt 0.916745 0.259188
vt 0.905292 0.260920
vt 0.925679 0.257542
vt 0.919312 0.270264
vt 0.927598 0.269904
vt 0.909165 0.270372
vt 0.923018 0.231732
vt 0.931448 0.236491
vt 0.922229 0.248254
vt 0.927474 0.250713
vt 0.931475 0.252998
vt 0.939132 0.243721
vt 0.941395 0.236759
vt 0.941774 0.243180
vt 0.953028 0.242625
vt 0.951181 0.247570
vt 0.943442 0.249961
vt 0.949719 0.251412
vt 0.935522 0.249090
vt 0.932269 0.241398
vt 0.930136 0.234395
vt 0.929446 0.228394
vt 0.942151 0.230847
vt 0.929372 0.224433
vt 0.942787 0.227016
vt 0.954848 0.237908
vt 0.922857 0.256527
vt 0.927955 0.258098
vt 0.925166 0.269641
vt 0.929776 0.270263
vt 0.933130 0.259066
vt 0.935431 0.270899
vt 0.945703 0.257403
vt 0.938091 0.256867
vt 0.953024 0.257866
vt 0.948714 0.269472
vt 0.957575 0.269677
vt 0.940805 0.269454
vt 0.944953 0.253898
vt 0.950208 0.269278
vt 0.957956 0.256418
vt 0.964661 0.269455
vt 0.961307 0.253711
vt 0.968960 0.268209
vt 0.902892 0.249987
vt 0.897745 0.228849
vt 0.908596 0.231834
vt 0.912735 0.252197
vt 0.894850 0.221810
vt 0.906240 0.226903
vt 0.897122 0.224227
vt 0.908607 0.228742
vt 0.903082 0.242361
vt 0.906809 0.256103
vt 0.919494 0.264606
vt 0.908311 0.265315
vt 0.917237 0.255133
vt 0.907454 0.269025
vt 0.916487 0.269043
vt 0.911531 0.283044
vt 0.919593 0.282900
vt 0.909419 0.273405
vt 0.911476 0.283360
vt 0.920571 0.273041
vt 0.922157 0.283218
vt 0.922114 0.255039
vt 0.920062 0.238863
vt 0.921052 0.234472
vt 0.923775 0.235380
vt 0.934895 0.263753
vt 0.929369 0.253983
vt 0.927988 0.282737
vt 0.925160 0.269608
vt 0.937386 0.272947
vt 0.938515 0.283177
vt 0.905634 0.254510
vt 0.912156 0.254648
vt 0.906903 0.269654
vt 0.915624 0.269303
vt 0.934262 0.269581
vt 0.931993 0.256855
vt 0.928513 0.249010
vt 0.928512 0.223212
vt 0.917128 0.220406
vt 0.916725 0.220767
vt 0.904100 0.217973
vt 0.914088 0.228391
vt 0.916363 0.246441
vt 0.918617 0.232270
vt 0.923487 0.240784
vt 0.938248 0.227770
vt 0.892821 0.216321
vt 0.844542 0.206031
vt 0.874322 0.212263
vt 0.864795 0.285932
vt 0.870581 0.286403
vt 0.877377 0.285736
vt 0.887924 0.285532
vt 0.898823 0.285311
vt 0.908672 0.285115
vt 0.917425 0.284957
vt 0.921216 0.269224
vt 0.922914 0.284906
vt 0.926665 0.284912
vt 0.930758 0.284928
vt 0.936388 0.284960
vt 0.952837 0.284936
vt 0.967867 0.284724
vt 0.971593 0.266723
vt 0.976556 0.284338
vt 0.976161 0.284497
vt 0.973686 0.284223
vt 0.968029 0.284169
vt 0.960033 0.284154
vt 0.950775 0.284138
vt 0.942494 0.284121
vt 0.936182 0.284123
vt 0.929809 0.284158
vt 0.920968 0.284223
vt 0.910111 0.284292
vt 0.952943 0.272204
vt 0.950019 0.262148
vt 0.953976 0.282879
vt 0.900909 0.229617
vt 0.889642 0.217102
vt 0.912068 0.234085
vt 0.913562 0.243735
vt 0.925227 0.239763
vt 0.923110 0.245509
vt 0.916786 0.225007
vt 0.940372 0.249840
vt 0.963568 0.250138
vt 0.888081 0.264217
vt 0.918118 0.254988
vt 0.953969 0.514386
vt 0.955477 0.513065
vt 0.954272 0.512902
vt 0.955509 0.511632
vt 0.956562 0.510151
vt 0.957528 0.506237
vt 0.957401 0.500104
vt 0.957541 0.505830
vt 0.957323 0.498901
vt 0.956684 0.496896
vt 0.956425 0.492794
vt 0.955922 0.489330
vt 0.956413 0.492938
vt 0.955605 0.489791
vt 0.954030 0.483685
vt 0.955302 0.484788
vt 0.952251 0.480529
vt 0.844126 0.209259
vt 0.844951 0.221286
vt 0.955335 0.486204
vt 0.955539 0.486154
vt 0.954877 0.485325
vt 0.956687 0.508947
vt 0.956754 0.495687
vt 0.955045 0.487387
vt 0.886769 0.216308
vt 0.872985 0.215718
vt 0.877848 0.505182
vt 0.877652 0.500582
vt 0.877370 0.504506
vt 0.877412 0.500243
vt 0.876974 0.503437
vt 0.877218 0.499703
vt 0.876680 0.502023
vt 0.877063 0.498994
vt 0.876501 0.500330
vt 0.876979 0.498142
vt 0.876446 0.498438
vt 0.876960 0.497191
vt 0.876522 0.496436
vt 0.877006 0.496186
vt 0.876728 0.494420
vt 0.877115 0.495174
vt 0.877281 0.494204
vt 0.877054 0.492488
vt 0.877498 0.493320
vt 0.877479 0.490730
vt 0.877999 0.489197
vt 0.877767 0.492546
vt 0.878719 0.487808
vt 0.878144 0.491879
vt 0.879235 0.487423
vt 0.878402 0.491725
vt 0.878643 0.509686
vt 0.877934 0.508686
vt 0.877348 0.507101
vt 0.876912 0.505005
vt 0.876647 0.502497
vt 0.876565 0.499694
vt 0.876669 0.496727
vt 0.876956 0.493734
vt 0.877416 0.490859
vt 0.878045 0.488251
vt 0.878803 0.485988
vt 0.879891 0.483890
vt 0.880652 0.483253
vt 0.880004 0.514038
vt 0.879075 0.512727
vt 0.878307 0.510649
vt 0.877736 0.507903
vt 0.877388 0.504616
vt 0.877280 0.500942
vt 0.877417 0.497054
vt 0.877793 0.493132
vt 0.878389 0.489360
vt 0.879214 0.485947
vt 0.880199 0.482989
vt 0.881623 0.480314
vt 0.882641 0.479405
vt 0.881911 0.518172
vt 0.880775 0.516569
vt 0.879836 0.514030
vt 0.879138 0.510673
vt 0.878713 0.506655
vt 0.878582 0.502165
vt 0.878749 0.497412
vt 0.879208 0.492618
vt 0.879955 0.488021
vt 0.881001 0.483899
vt 0.882310 0.480367
vt 0.883909 0.477310
vt 0.885135 0.475926
vt 0.884336 0.522030
vt 0.883011 0.520159
vt 0.881915 0.517195
vt 0.881100 0.513276
vt 0.880604 0.508586
vt 0.880450 0.503344
vt 0.880646 0.497795
vt 0.881181 0.492199
vt 0.882059 0.486840
vt 0.883257 0.482017
vt 0.884772 0.477872
vt 0.886828 0.474331
vt 0.888116 0.472377
vt 0.887245 0.525554
vt 0.885749 0.523442
vt 0.884512 0.520096
vt 0.883592 0.515673
vt 0.883032 0.510379
vt 0.882858 0.504462
vt 0.883079 0.498199
vt 0.883683 0.491882
vt 0.884656 0.485819
vt 0.885976 0.480334
vt 0.887771 0.475644
vt 0.888962 0.472096
vt 0.890594 0.528694
vt 0.888949 0.526372
vt 0.887589 0.522693
vt 0.886578 0.517830
vt 0.885962 0.512009
vt 0.885771 0.505504
vt 0.886014 0.498617
vt 0.886678 0.491672
vt 0.887734 0.484992
vt 0.889161 0.478945
vt 0.891005 0.474124
vt 0.894335 0.531403
vt 0.892565 0.528905
vt 0.891102 0.524947
vt 0.890014 0.519714
vt 0.889351 0.513452
vt 0.889146 0.506453
vt 0.889407 0.499043
vt 0.890122 0.491571
vt 0.891258 0.484384
vt 0.892815 0.477978
vt 0.894695 0.473363
vt 0.898413 0.533643
vt 0.896544 0.531004
vt 0.894999 0.526825
vt 0.893850 0.521300
vt 0.893151 0.514687
vt 0.892934 0.507295
vt 0.893209 0.499472
vt 0.893965 0.491581
vt 0.895164 0.483992
vt 0.896860 0.477387
vt 0.898865 0.473076
vt 0.902769 0.535380
vt 0.900829 0.532640
vt 0.899224 0.528300
vt 0.898031 0.522562
vt 0.897305 0.515695
vt 0.897079 0.508020
vt 0.897366 0.499895
vt 0.898150 0.491701
vt 0.899396 0.483821
vt 0.901449 0.477074
vt 0.903819 0.472976
vt 0.909699 0.536920
vt 0.907707 0.534109
vt 0.906061 0.529655
vt 0.904836 0.523767
vt 0.904091 0.516721
vt 0.903860 0.508844
vt 0.904153 0.500507
vt 0.904958 0.492099
vt 0.906237 0.484012
vt 0.908008 0.477129
vt 0.910034 0.473198
vt 0.916854 0.537360
vt 0.914870 0.534559
vt 0.913230 0.530122
vt 0.914164 0.524465
vt 0.913164 0.518196
vt 0.913437 0.511340
vt 0.911330 0.501080
vt 0.912131 0.492703
vt 0.913405 0.484646
vt 0.915130 0.477830
vt 0.916994 0.473623
vt 0.921660 0.536911
vt 0.919719 0.534172
vt 0.919170 0.529284
vt 0.917172 0.505296
vt 0.919838 0.496406
vt 0.920904 0.486229
vt 0.922380 0.479225
vt 0.924263 0.474614
vt 0.926405 0.535913
vt 0.924828 0.532245
vt 0.931019 0.534378
vt 0.929686 0.531880
vt 0.927970 0.487724
vt 0.927599 0.495894
vt 0.929366 0.480734
vt 0.931925 0.475167
vt 0.935435 0.532330
vt 0.934387 0.530379
vt 0.933232 0.488977
vt 0.932764 0.496065
vt 0.934736 0.482159
vt 0.937602 0.476887
vt 0.939590 0.529799
vt 0.938848 0.527798
vt 0.937731 0.490249
vt 0.936964 0.496523
vt 0.939215 0.484123
vt 0.942421 0.479379
vt 0.943421 0.526821
vt 0.942722 0.524593
vt 0.942329 0.491435
vt 0.942070 0.497013
vt 0.943599 0.487511
vt 0.946933 0.482758
vt 0.945342 0.476815
vt 0.949756 0.480976
vt 0.940652 0.473783
vt 0.947564 0.521395
vt 0.946600 0.520277
vt 0.949518 0.517928
vt 0.951324 0.514898
vt 0.699423 0.809253
vt 0.710111 0.860044
vt 0.767468 0.814720
vt 0.769921 0.858800
vt 0.669688 0.860514
vt 0.651885 0.801109
vt 0.732293 0.902975
vt 0.706453 0.911484
vt 0.776292 0.895678
vt 0.708787 0.707777
vt 0.699329 0.757062
vt 0.772602 0.721954
vt 0.768846 0.767772
vt 0.650433 0.740512
vt 0.664887 0.686395
vt 0.747107 0.630497
vt 0.725753 0.664868
vt 0.781693 0.646160
vt 0.777288 0.680400
vt 0.692228 0.642648
vt 0.725318 0.609127
vt 0.770358 0.607692
vt 0.782072 0.622983
vt 0.800560 0.599400
vt 0.800562 0.614675
vt 0.761234 0.587309
vt 0.800928 0.579073
vt 0.861399 0.630223
vt 0.884300 0.609231
vt 0.833192 0.607478
vt 0.843136 0.586725
vt 0.821200 0.622722
vt 0.826645 0.645961
vt 0.884907 0.665900
vt 0.835069 0.680418
vt 0.901226 0.710448
vt 0.840872 0.722297
vt 0.945964 0.693526
vt 0.920299 0.645594
vt 0.908209 0.760544
vt 0.842467 0.768423
vt 0.905039 0.812825
vt 0.840209 0.815454
vt 0.952947 0.809219
vt 0.957487 0.749588
vt 0.893705 0.861459
vt 0.836187 0.859175
vt 0.876198 0.901993
vt 0.832541 0.895317
vt 0.904659 0.909742
vt 0.934213 0.864462
vt 0.850482 0.929308
vt 0.832833 0.919627
vt 0.810883 0.940213
vt 0.808275 0.929049
vt 0.815494 0.955807
vt 0.865735 0.940277
vt 0.767163 0.931342
vt 0.781069 0.920572
vt 0.757688 0.947696
vt 0.926885 0.512910
vt 0.927854 0.512845
vt 0.928377 0.510114
vt 0.929178 0.510430
vt 0.931406 0.509225
vt 0.930823 0.508639
vt 0.929980 0.510746
vt 0.930534 0.523359
vt 0.930891 0.521821
vt 0.928350 0.521984
vt 0.928964 0.520607
vt 0.928441 0.517467
vt 0.927597 0.518520
vt 0.929579 0.519229
vt 0.926753 0.519573
vt 0.926179 0.516255
vt 0.927195 0.515710
vt 0.928823 0.512781
vt 0.928211 0.515165
vt 0.932374 0.506682
vt 0.930239 0.508053
vt 0.932657 0.507439
vt 0.934517 0.507536
vt 0.934510 0.506707
vt 0.932940 0.508196
vt 0.934502 0.505878
vt 0.936567 0.505592
vt 0.936317 0.506456
vt 0.936067 0.507320
vt 0.937546 0.507578
vt 0.938070 0.506748
vt 0.938901 0.508422
vt 0.940036 0.509880
vt 0.939772 0.507879
vt 0.941088 0.509726
vt 0.940713 0.507314
vt 0.938594 0.505926
vt 0.942911 0.511998
vt 0.942269 0.509491
vt 0.941755 0.511888
vt 0.940774 0.511818
vt 0.940867 0.513981
vt 0.941724 0.514237
vt 0.941696 0.517149
vt 0.942674 0.514592
vt 0.940898 0.516619
vt 0.940099 0.516090
vt 0.938667 0.517973
vt 0.939267 0.518807
vt 0.937547 0.521739
vt 0.939868 0.519641
vt 0.937153 0.520570
vt 0.936759 0.519402
vt 0.934851 0.520311
vt 0.935057 0.521760
vt 0.932933 0.523788
vt 0.935263 0.523209
vt 0.932985 0.522196
vt 0.933038 0.520604
vt 0.931248 0.520284
vt 0.715065 0.592710
vt 0.678001 0.627321
vt 0.647916 0.672373
vt 0.628526 0.797321
vt 0.648988 0.865355
vt 0.693916 0.922274
vt 0.627590 0.729278
vt 0.801508 0.561342
vt 0.756457 0.570463
vt 0.753635 0.961316
vt 0.820182 0.969676
vt 0.896636 0.591965
vt 0.849136 0.568460
vt 0.878160 0.953598
vt 0.925000 0.920764
vt 0.970242 0.681277
vt 0.939570 0.629718
vt 0.961861 0.871181
vt 0.978343 0.807461
vt 0.983064 0.742705
vt 0.932573 0.508007
vt 0.934161 0.507367
vt 0.930964 0.509008
vt 0.927841 0.514787
vt 0.928411 0.512543
vt 0.928106 0.516928
vt 0.929515 0.510546
vt 0.935671 0.507169
vt 0.937081 0.507438
vt 0.929093 0.518640
vt 0.930710 0.519671
vt 0.938351 0.508298
vt 0.939400 0.509723
vt 0.932552 0.520045
vt 0.934434 0.519715
vt 0.940079 0.511519
vt 0.940113 0.513519
vt 0.936336 0.518792
vt 0.938116 0.517377
vt 0.939405 0.515521
vt 0.943638 0.508965
vt 0.941943 0.506311
vt 0.939071 0.504531
vt 0.943880 0.515430
vt 0.944335 0.512165
vt 0.927944 0.506963
vt 0.925069 0.509715
vt 0.923231 0.513349
vt 0.935271 0.526189
vt 0.938229 0.524222
vt 0.940839 0.521447
vt 0.923484 0.521848
vt 0.925731 0.524779
vt 0.928789 0.526502
vt 0.922597 0.517761
vt 0.933960 0.504385
vt 0.931029 0.505302
vt 0.936534 0.504088
vt 0.942769 0.518413
vt 0.932116 0.527039
vt 0.945351 0.507568
vt 0.943089 0.503744
vt 0.939896 0.502018
vt 0.946118 0.511811
vt 0.945354 0.516015
vt 0.925289 0.504712
vt 0.920962 0.508150
vt 0.918385 0.512520
vt 0.938552 0.526478
vt 0.934537 0.528948
vt 0.941809 0.523283
vt 0.921702 0.527196
vt 0.918305 0.523665
vt 0.925959 0.529352
vt 0.917212 0.518867
vt 0.933078 0.501722
vt 0.929349 0.502508
vt 0.936447 0.501609
vt 0.943896 0.519878
vt 0.930309 0.529931
vt 0.948005 0.505607
vt 0.944871 0.499392
vt 0.947806 0.516062
vt 0.949100 0.511191
vt 0.879346 0.309871
vt 0.875833 0.306046
vt 0.875654 0.308144
vt 0.879007 0.306407
vt 0.876295 0.294136
vt 0.878977 0.293033
vt 0.876175 0.301094
vt 0.879812 0.300399
vt 0.882198 0.297454
vt 0.880254 0.303450
vt 0.893175 0.297687
vt 0.859181 0.350621
vt 0.872916 0.327332
vt 0.865817 0.349629
vt 0.880252 0.326495
vt 0.865713 0.330422
vt 0.852822 0.359205
vt 0.877097 0.301439
vt 0.864055 0.301093
vt 0.869257 0.322943
vt 0.852819 0.327816
vt 0.872679 0.316230
vt 0.866118 0.317194
vt 0.865658 0.301152
vt 0.871305 0.301562
vt 0.879516 0.300927
vt 0.881998 0.315802
vt 0.878301 0.348969
vt 0.888479 0.326114
vt 0.888262 0.347411
vt 0.897047 0.325511
vt 0.857019 0.363938
vt 0.860381 0.359999
vt 0.872015 0.364197
vt 0.874655 0.358691
vt 0.888629 0.355800
vt 0.886097 0.359632
vt 0.872907 0.361011
vt 0.858128 0.362290
vt 0.881706 0.320824
vt 0.875903 0.346079
vt 0.862423 0.349295
vt 0.893556 0.318638
vt 0.888714 0.341972
vt 0.887564 0.300041
vt 0.898554 0.296744
vt 0.888147 0.300674
vt 0.898715 0.300283
vt 0.890480 0.315686
vt 0.898830 0.315390
vt 0.894383 0.353795
vt 0.894065 0.354129
vt 0.890921 0.356254
vt 0.952900 0.304272
vt 0.949521 0.305533
vt 0.942171 0.318343
vt 0.937705 0.320863
vt 0.937122 0.307590
vt 0.931259 0.318903
vt 0.955735 0.293528
vt 0.951772 0.293299
vt 0.940544 0.294181
vt 0.964624 0.302435
vt 0.972337 0.302695
vt 0.957594 0.320997
vt 0.965634 0.321964
vt 0.957663 0.333351
vt 0.950951 0.332759
vt 0.904388 0.314564
vt 0.887892 0.312338
vt 0.897685 0.323309
vt 0.888936 0.316243
vt 0.878641 0.308129
vt 0.895710 0.326063
vt 0.896265 0.333541
vt 0.887647 0.308911
vt 0.896958 0.311973
vt 0.897963 0.301935
vt 0.887703 0.301029
vt 0.898883 0.293285
vt 0.887878 0.292930
vt 0.896731 0.344468
vt 0.905567 0.324686
vt 0.906991 0.342485
vt 0.911791 0.324251
vt 0.900908 0.335596
vt 0.911043 0.336295
vt 0.907054 0.325968
vt 0.917143 0.326675
vt 0.923285 0.318080
vt 0.915184 0.316034
vt 0.908088 0.344187
vt 0.897103 0.344536
vt 0.895142 0.343144
vt 0.894607 0.344154
vt 0.898106 0.350443
vt 0.907260 0.349181
vt 0.907871 0.308374
vt 0.918398 0.309598
vt 0.927049 0.310818
vt 0.928305 0.298442
vt 0.920004 0.298182
vt 0.909927 0.298243
vt 0.929162 0.318872
vt 0.933826 0.332572
vt 0.924036 0.321254
vt 0.925629 0.337191
vt 0.941158 0.325550
vt 0.933051 0.316658
vt 0.943727 0.330971
vt 0.955075 0.325269
vt 0.943791 0.324629
vt 0.952983 0.320359
vt 0.951332 0.316568
vt 0.945126 0.317960
vt 0.937248 0.318798
vt 0.934373 0.326359
vt 0.932584 0.333273
vt 0.932192 0.339300
vt 0.932318 0.343421
vt 0.944776 0.336887
vt 0.945607 0.340893
vt 0.957129 0.330060
vt 0.924262 0.313255
vt 0.925922 0.300164
vt 0.929283 0.311724
vt 0.930502 0.299579
vt 0.936126 0.298969
vt 0.934410 0.310774
vt 0.939442 0.311396
vt 0.947027 0.310849
vt 0.954323 0.310334
vt 0.958291 0.298597
vt 0.949440 0.298819
vt 0.941532 0.298832
vt 0.946483 0.315703
vt 0.950981 0.300512
vt 0.969751 0.300159
vt 0.965388 0.298807
vt 0.962811 0.314479
vt 0.959326 0.311738
vt 0.904541 0.316598
vt 0.900452 0.338160
vt 0.914268 0.314088
vt 0.911146 0.334819
vt 0.910827 0.338483
vt 0.909045 0.340214
vt 0.900043 0.343367
vt 0.897918 0.345703
vt 0.905082 0.324826
vt 0.907714 0.311836
vt 0.909052 0.301920
vt 0.918749 0.311513
vt 0.920236 0.301846
vt 0.908155 0.297332
vt 0.917180 0.297035
vt 0.909931 0.293440
vt 0.920410 0.293444
vt 0.923496 0.310879
vt 0.922253 0.327378
vt 0.923469 0.332076
vt 0.925923 0.331262
vt 0.930583 0.312153
vt 0.934974 0.302503
vt 0.925817 0.296140
vt 0.937580 0.293425
vt 0.916398 0.300537
vt 0.913653 0.315103
vt 0.907706 0.300101
vt 0.907277 0.314776
vt 0.934984 0.298714
vt 0.933344 0.311407
vt 0.930312 0.318902
vt 0.931529 0.345055
vt 0.920283 0.347817
vt 0.919853 0.347075
vt 0.907379 0.350402
vt 0.916863 0.340467
vt 0.918259 0.323025
vt 0.921166 0.335346
vt 0.925584 0.327014
vt 0.941044 0.340685
vt 0.896265 0.352186
vt 0.847118 0.363087
vt 0.877923 0.355511
vt 0.921992 0.300554
vt 0.972463 0.301867
vt 0.953466 0.293583
vt 0.950828 0.303658
vt 0.892951 0.350759
vt 0.903260 0.337983
vt 0.915596 0.322974
vt 0.914170 0.333036
vt 0.927312 0.326701
vt 0.925040 0.320904
vt 0.919699 0.342662
vt 0.941871 0.316003
vt 0.965254 0.318221
vt 0.889956 0.306147
vt 0.919598 0.314755
vt 0.953215 0.511264
vt 0.952698 0.512701
vt 0.951135 0.508840
vt 0.950868 0.504414
vt 0.946032 0.497811
vt 0.950400 0.504692
vt 0.946155 0.498790
vt 0.944108 0.496015
vt 0.945966 0.489086
vt 0.945497 0.488606
vt 0.944681 0.492183
vt 0.944291 0.491984
vt 0.951345 0.484260
vt 0.845891 0.359181
vt 0.847322 0.346695
vt 0.948386 0.485293
vt 0.952907 0.485943
vt 0.952013 0.507755
vt 0.944606 0.494766
vt 0.948560 0.486751
vt 0.890112 0.351330
vt 0.876360 0.352039
vt 0.889967 0.448966
vt 0.878531 0.491695
vt 0.879572 0.487300
vt 0.881189 0.483034
vt 0.883359 0.479059
vt 0.885970 0.475436
vt 0.826451 0.427416
vt 0.889758 0.472115
vt 0.881748 0.482959
vt 0.884054 0.478968
vt 0.886811 0.475429
vt 0.942835 0.472365
vt 0.883515 0.397651
vt 0.925482 0.397634
vt 0.918562 0.397639
vt 0.909465 0.397642
vt 0.901603 0.397646
vt 0.891034 0.397645
vt 0.894812 0.397645
vt 0.931235 0.397655
vt 0.877003 0.397658
vt 0.882529 0.397650
vt 0.871595 0.397671
vt 0.868659 0.397671
vt 0.925845 0.397644
vt 0.918784 0.397657
vt 0.909614 0.397666
vt 0.901249 0.397670
vt 0.890498 0.397656
vt 0.929610 0.397643
vt 0.894099 0.397656
vt 0.484696 0.402538
vt 0.483058 0.467543
vt 0.026409 0.041836
vt 0.027211 0.115320
vt 0.027231 0.176259
vt 0.027041 0.244825
vt 0.028360 0.327681
vt 0.035514 0.442488
vt 0.039161 0.517280
vt 0.039555 0.560029
vt 0.486973 0.320445
vt 0.496033 0.232082
vt 0.498386 0.171519
vt 0.166927 0.932027
vt 0.089131 0.901460
vt 0.412839 0.954955
vt 0.280654 0.942250
vt 0.172265 0.583534
vt 0.092604 0.643694
vt 0.048602 0.713913
vt 0.034269 0.783775
vt 0.288973 0.537530
vt 0.047197 0.849027
vt 0.429574 0.516361
vt 0.573602 0.514995
vt 0.720327 0.535205
vt 0.544365 0.975068
vt 0.682918 0.980037
vt 0.412382 0.948959
vt 0.274953 0.941360
vt 0.159929 0.926191
vt 0.078614 0.893197
vt 0.045546 0.712112
vt 0.029763 0.775258
vt 0.174568 0.589926
vt 0.093871 0.647648
vt 0.286715 0.542233
vt 0.039682 0.837587
vt 0.425296 0.517534
vt 0.568016 0.514851
vt 0.715649 0.536695
vt 0.543555 0.965760
vt 0.685594 0.967391
vn -0.0001 0.0035 -1.0000
vn 0.0003 0.0020 -1.0000
vn -0.0001 0.0005 -1.0000
vn -0.0003 0.0013 -1.0000
vn -0.0001 -0.0005 -1.0000
vn -0.0011 0.0030 -1.0000
vn -0.0023 0.0045 -1.0000
vn 0.0017 -0.0001 -1.0000
vn 0.0000 -0.0002 -1.0000
vn 0.0003 -0.0000 -1.0000
vn -0.1940 -0.3125 -0.9299
vn -0.0632 -0.1038 -0.9926
vn -0.1172 -0.3845 -0.9157
vn -0.0373 -0.1234 -0.9917
vn -0.0938 -0.0805 -0.9923
vn -0.2630 -0.2241 -0.9384
vn -0.3169 -0.1278 -0.9398
vn -0.1101 -0.0458 -0.9929
vn -0.1174 -0.0232 -0.9928
vn -0.3276 -0.0616 -0.9428
vn 0.2177 -0.5326 -0.8179
vn 0.4138 -0.4095 -0.8130
vn 0.2979 -0.6846 -0.6653
vn 0.5708 -0.5184 -0.6368
vn 0.2361 -0.2588 -0.9366
vn 0.1441 -0.3535 -0.9243
vn -0.3113 -0.4865 -0.8163
vn -0.1759 -0.5903 -0.7878
vn -0.4258 -0.3503 -0.8342
vn -0.4087 -0.6281 -0.6621
vn -0.5509 -0.4478 -0.7043
vn -0.2321 -0.7574 -0.6103
vn -0.4926 -0.1994 -0.8471
vn -0.4728 -0.1037 -0.8751
vn -0.6176 -0.2732 -0.7375
vn -0.5814 -0.1535 -0.7990
vn 0.5165 -0.1981 -0.8331
vn 0.2952 -0.1134 -0.9487
vn 0.6938 -0.2756 -0.6654
vn 0.3765 -0.7659 -0.5212
vn 0.6702 -0.5661 -0.4800
vn 0.4809 -0.7882 -0.3841
vn 0.7419 -0.5845 -0.3286
vn -0.4646 -0.7126 -0.5257
vn -0.2851 -0.8443 -0.4538
vn -0.6361 -0.5075 -0.5811
vn -0.5190 -0.7554 -0.3999
vn -0.6983 -0.5403 -0.4694
vn -0.3609 -0.8735 -0.3266
vn 0.8067 -0.3297 -0.4905
vn 0.8759 -0.3624 -0.3186
vn 0.7882 -0.5860 -0.1879
vn 0.5652 -0.7913 -0.2333
vn 0.6158 -0.7829 -0.0886
vn 0.8114 -0.5809 -0.0648
vn 0.9049 -0.3815 -0.1888
vn 0.9139 -0.4002 -0.0682
vn 0.5971 -0.7382 0.3140
vn 0.6378 -0.7621 0.1113
vn 0.7745 -0.5648 0.2848
vn 0.8115 -0.5760 0.0979
vn 0.9045 -0.4125 0.1079
vn 0.8678 -0.4132 0.2759
vn 0.3653 -0.6470 0.6693
vn 0.5016 -0.7048 0.5017
vn 0.5926 -0.5542 0.5845
vn 0.7076 -0.5546 0.4379
vn 0.8193 -0.4054 0.4054
vn 0.7766 -0.4059 0.4817
vn 0.1713 -0.6100 0.7737
vn 0.2607 -0.6403 0.7225
vn 0.3890 -0.5821 0.7141
vn 0.4691 -0.5660 0.6779
vn 0.6906 -0.4192 0.5894
vn 0.5689 -0.4282 0.7021
vn -0.1351 -0.4210 0.8969
vn -0.1220 -0.5957 0.7939
vn -0.1754 -0.3935 0.9025
vn -0.1624 -0.5624 0.8108
vn -0.1830 -0.2842 0.9411
vn -0.1723 -0.4250 0.8886
vn -0.0847 -0.6172 0.7823
vn -0.1254 -0.5445 0.8294
vn -0.0820 -0.6412 0.7629
vn -0.1845 -0.2175 0.9585
vn -0.0103 -0.0885 0.9960
vn -0.1352 -0.2584 0.9565
vn 0.1913 -0.1559 0.9691
vn -0.1423 -0.0561 0.9882
vn -0.1979 -0.1635 0.9665
vn -0.2794 -0.0947 0.9555
vn -0.2699 -0.0237 0.9626
vn -0.2915 -0.1850 0.9385
vn -0.5178 -0.5824 0.6267
vn -0.1359 -0.6531 0.7450
vn -0.5075 -0.3576 0.7839
vn -0.0878 -0.3679 0.9257
vn 0.3220 -0.3330 0.8862
vn 0.2951 -0.6388 0.7105
vn -0.1296 -0.7417 0.6581
vn 0.2285 -0.6781 0.6985
vn -0.4368 -0.7025 0.5619
vn -0.8957 -0.3220 0.3065
vn -0.7686 -0.4437 0.4608
vn -0.9280 -0.2060 0.3105
vn -0.7945 -0.2937 0.5315
vn -0.6527 -0.6203 0.4350
vn -0.8080 -0.5195 0.2779
vn -0.6957 -0.7024 0.1502
vn -0.5264 -0.7748 0.3500
vn -0.3081 -0.8025 0.5110
vn -0.2743 -0.8682 0.4135
vn -0.3976 -0.8941 0.2060
vn -0.5387 -0.8419 -0.0309
vn -0.7142 -0.6749 -0.1854
vn -0.8014 -0.5966 -0.0431
vn -0.8032 -0.5319 -0.2683
vn -0.8685 -0.4605 -0.1833
vn -0.9270 -0.3750 0.0008
vn -0.8782 -0.4497 0.1630
vn -0.7019 -0.3365 -0.6278
vn -0.6977 -0.1918 -0.6902
vn -0.7510 -0.3844 -0.5368
vn -0.7945 -0.2149 -0.5680
vn -0.0666 -0.9673 -0.2446
vn -0.0866 -0.9867 -0.1376
vn -0.1428 -0.9640 -0.2242
vn -0.1740 -0.9775 -0.1193
vn -0.1133 -0.9927 -0.0402
vn -0.1993 -0.9798 -0.0155
vn -0.5882 -0.7559 -0.2875
vn -0.7416 -0.5594 -0.3704
vn -0.4174 -0.8906 -0.1807
vn -0.8064 -0.4092 -0.4270
vn -0.8848 -0.2162 -0.4127
vn -0.8793 -0.3759 -0.2924
vn -0.9446 -0.2070 -0.2546
vn -0.1271 -0.9885 0.0820
vn -0.1261 -0.9750 0.1827
vn -0.2089 -0.9735 0.0926
vn -0.2032 -0.9617 0.1839
vn -0.0811 -0.6879 0.7213
vn -0.0916 -0.7408 0.6654
vn -0.0561 -0.6199 0.7827
vn -0.0550 -0.6763 0.7346
vn 0.4262 -0.2373 0.8729
vn -0.0378 -0.2945 0.9549
vn -0.0669 -0.4082 0.9104
vn -0.0334 -0.4956 0.8679
vn 0.2449 -0.3887 0.8882
vn 0.6882 -0.2965 0.6622
vn 0.0886 -0.6212 0.7787
vn 0.1115 -0.5615 0.8199
vn 0.2495 -0.5599 0.7901
vn 0.3050 -0.5587 0.7712
vn 0.0262 -0.6436 0.7649
vn 0.0107 -0.6074 0.7943
vn -0.0036 -0.6106 0.7920
vn 0.4658 -0.4189 0.7795
vn 0.3886 -0.4011 0.8295
vn -0.2610 -0.3057 0.9157
vn -0.1812 -0.4509 0.8740
vn 0.2056 -0.5642 0.7996
vn 0.5070 -0.5385 0.6730
vn 0.6562 -0.3046 0.6904
vn -0.9442 -0.2890 -0.1577
vn -
gitextract_5f8dznnk/
├── .github/
│ ├── FUNDING.yml
│ └── workflows/
│ ├── gh-pages.yml
│ ├── publish.yml
│ └── test.yml
├── .gitignore
├── LICENSE
├── README.md
├── benchmarks/
│ ├── README.md
│ ├── elm.json
│ └── src/
│ ├── AssignIds.elm
│ ├── Convex.elm
│ ├── ConvexConvex.elm
│ ├── EigenDecomposition.elm
│ └── SphereConvex.elm
├── docs.json
├── elm.json
├── examples/
│ ├── elm.json
│ ├── review/
│ │ ├── elm.json
│ │ └── src/
│ │ └── ReviewConfig.elm
│ └── src/
│ ├── Duckling.elm
│ ├── Duckling.obj.txt
│ ├── Jeep.obj.txt
│ ├── Lack.elm
│ ├── Raycast.elm
│ ├── RaycastCar/
│ │ ├── Car.elm
│ │ └── Jeep.elm
│ └── RaycastCar.elm
├── flake.nix
├── review/
│ ├── elm.json
│ └── src/
│ └── ReviewConfig.elm
├── sandbox/
│ ├── elm.json
│ ├── review/
│ │ ├── elm.json
│ │ └── src/
│ │ └── ReviewConfig.elm
│ ├── src/
│ │ ├── Boxes.elm
│ │ ├── Car.elm
│ │ ├── Character.elm
│ │ ├── Character2D.elm
│ │ ├── Cloth.elm
│ │ ├── Common/
│ │ │ ├── Camera.elm
│ │ │ ├── Fps.elm
│ │ │ ├── Math.elm
│ │ │ ├── Meshes.elm
│ │ │ ├── Scene.elm
│ │ │ ├── Settings.elm
│ │ │ └── Shaders.elm
│ │ ├── CompoundVsLock.elm
│ │ ├── Dominoes.elm
│ │ ├── Kinematic.elm
│ │ ├── Randomize.elm
│ │ ├── Stability/
│ │ │ ├── Metrics.elm
│ │ │ └── Scenarios.elm
│ │ ├── StabilityScenes.elm
│ │ └── UnsafeConvex.elm
│ └── tests/
│ └── StabilityTest.elm
├── scripts/
│ ├── elm-publish.sh
│ └── gh-pages.sh
├── src/
│ ├── Collision/
│ │ ├── ConvexConvex.elm
│ │ ├── ParticleConvex.elm
│ │ ├── PlaneConvex.elm
│ │ ├── PlaneParticle.elm
│ │ ├── PlaneSphere.elm
│ │ ├── SphereConvex.elm
│ │ ├── SphereParticle.elm
│ │ └── SphereSphere.elm
│ ├── Internal/
│ │ ├── AssignIds.elm
│ │ ├── Body.elm
│ │ ├── BroadPhase.elm
│ │ ├── Const.elm
│ │ ├── Constraint.elm
│ │ ├── Contact.elm
│ │ ├── Coordinates.elm
│ │ ├── Equation.elm
│ │ ├── Lock.elm
│ │ ├── Material.elm
│ │ ├── Matrix3.elm
│ │ ├── NarrowPhase.elm
│ │ ├── Shape.elm
│ │ ├── Solver.elm
│ │ ├── SolverBody.elm
│ │ ├── Transform3d.elm
│ │ └── Vector3.elm
│ ├── Physics/
│ │ ├── Constraint.elm
│ │ ├── Lock.elm
│ │ ├── Material.elm
│ │ ├── Shape.elm
│ │ └── Types.elm
│ ├── Physics.elm
│ └── Shapes/
│ ├── Convex.elm
│ ├── Plane.elm
│ └── Sphere.elm
└── tests/
├── BodyTest.elm
├── Collision/
│ ├── ConvexConvexTest.elm
│ ├── PlaneSphereTest.elm
│ └── SphereConvexTest.elm
├── EigenDecompositionTest.elm
├── Extra/
│ └── Expect.elm
├── Fixtures/
│ ├── Convex.elm
│ └── NarrowPhase.elm
├── KinematicTest.elm
├── Matrix3Test.elm
├── PlaceInTest.elm
├── Shapes/
│ └── ConvexTest.elm
├── SimulateTest.elm
├── Transform3dFromFrame3dTest.elm
└── Transform3dTest.elm
Condensed preview — 105 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,057K chars).
[
{
"path": ".github/FUNDING.yml",
"chars": 13,
"preview": "github: w0rm\n"
},
{
"path": ".github/workflows/gh-pages.yml",
"chars": 628,
"preview": "name: GitHub Pages\n\non:\n push:\n branches: [main]\n\njobs:\n test:\n uses: ./.github/workflows/test.yml\n secrets: "
},
{
"path": ".github/workflows/publish.yml",
"chars": 863,
"preview": "name: Publish\n\non:\n workflow_dispatch:\n inputs:\n version:\n description: \"Confirm the new version\"\n "
},
{
"path": ".github/workflows/test.yml",
"chars": 590,
"preview": "name: Test\n\non:\n pull_request:\n branches: [main]\n workflow_call:\n\njobs:\n elm-test:\n runs-on: ubuntu-latest\n "
},
{
"path": ".gitignore",
"chars": 43,
"preview": "release\ngh-pages\nelm-stuff\n.DS_Store\n.idea\n"
},
{
"path": "LICENSE",
"chars": 1534,
"preview": "Copyright (c) 2018-2026, Andrey Kuzmin\n\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or"
},
{
"path": "README.md",
"chars": 2590,
"preview": "# 3D Physics Engine\n\n\n\n```elm\ntype Id = Ba"
},
{
"path": "benchmarks/README.md",
"chars": 3420,
"preview": "# Elm Performance Rules\n\nWhen writing or reviewing Elm code in this repo, apply these performance rules to avoid slow Ja"
},
{
"path": "benchmarks/elm.json",
"chars": 1182,
"preview": "{\n \"type\": \"application\",\n \"source-directories\": [\n \"src\",\n \"../src\",\n \"../tests\"\n ],\n "
},
{
"path": "benchmarks/src/AssignIds.elm",
"chars": 17933,
"preview": "module AssignIds exposing (main)\n\n{-| Benchmarks for the ID-assignment pass in Physics.simulate.\n\nBoth candidates use th"
},
{
"path": "benchmarks/src/Convex.elm",
"chars": 928,
"preview": "module Convex exposing (main)\n\nimport Benchmark exposing (Benchmark, describe)\nimport Benchmark.Runner exposing (Benchma"
},
{
"path": "benchmarks/src/ConvexConvex.elm",
"chars": 2218,
"preview": "module ConvexConvex exposing (main)\n\nimport Benchmark exposing (Benchmark, describe)\nimport Benchmark.Runner exposing (B"
},
{
"path": "benchmarks/src/EigenDecomposition.elm",
"chars": 4534,
"preview": "module EigenDecomposition exposing (main)\n\nimport Benchmark exposing (Benchmark, describe)\nimport Benchmark.Runner expos"
},
{
"path": "benchmarks/src/SphereConvex.elm",
"chars": 6005,
"preview": "module SphereConvex exposing (main)\n\nimport Benchmark exposing (Benchmark, describe)\nimport Benchmark.Runner exposing (B"
},
{
"path": "docs.json",
"chars": 26422,
"preview": "[{\"name\":\"Physics\",\"comment\":\"\\n\\n\\n# Bodies\\n\\n@docs Body, BodyCoordinates, WorldCoordinates\\n\\n@docs block, plane, sph"
},
{
"path": "elm.json",
"chars": 688,
"preview": "{\n \"type\": \"package\",\n \"name\": \"w0rm/elm-physics\",\n \"summary\": \"3D physics engine\",\n \"license\": \"BSD-3-Claus"
},
{
"path": "examples/elm.json",
"chars": 1396,
"preview": "{\n \"type\": \"application\",\n \"source-directories\": [\n \"src\",\n \"../src\"\n ],\n \"elm-version\": \"0.19"
},
{
"path": "examples/review/elm.json",
"chars": 1124,
"preview": "{\n \"type\": \"application\",\n \"source-directories\": [\n \"src\"\n ],\n \"elm-version\": \"0.19.1\",\n \"dependen"
},
{
"path": "examples/review/src/ReviewConfig.elm",
"chars": 1255,
"preview": "module ReviewConfig exposing (config)\n\n{-| Do not rename the ReviewConfig module or the config function, because\n`elm-re"
},
{
"path": "examples/src/Duckling.elm",
"chars": 6689,
"preview": "module Duckling exposing (main)\n\n{-| This demo loads a convex shape and a mesh from the same OBJ file.\n\n - elm-physics "
},
{
"path": "examples/src/Duckling.obj.txt",
"chars": 345662,
"preview": "# Blender v2.83.3 OBJ File: 'duckling.blend'\n# www.blender.org\no convex\nv 0.539748 -0.217039 0.099674\nv -0.466622 -0.250"
},
{
"path": "examples/src/Jeep.obj.txt",
"chars": 64479,
"preview": "# Blender v2.92.0 OBJ File: 'jeep.blend'\n# www.blender.org\n# The Jeep model is courtesy of Kolja Wilcke <https://twitter"
},
{
"path": "examples/src/Lack.elm",
"chars": 9266,
"preview": "module Lack exposing (main)\n\n{-| This demo allows dragging the table with the mouse.\n\n1. Uses `Physics.raycast` on mous"
},
{
"path": "examples/src/Raycast.elm",
"chars": 7651,
"preview": "module Raycast exposing (main)\n\n{-| This demo shows how elm-physics could be used to determine,\nwhich object has been cl"
},
{
"path": "examples/src/RaycastCar/Car.elm",
"chars": 21587,
"preview": "module RaycastCar.Car exposing (CarSettings, Wheel, defaultWheel, simulate)\n\n{-| This is a complex example implementing "
},
{
"path": "examples/src/RaycastCar/Jeep.elm",
"chars": 6783,
"preview": "module RaycastCar.Jeep exposing (Jeep, load, settings, wheels)\n\n{-| elm-obj-file is used to decode various objects from "
},
{
"path": "examples/src/RaycastCar.elm",
"chars": 12356,
"preview": "module RaycastCar exposing (main)\n\n{-| This demo implements a smooth car simulation.\n\n - `RaycastCar.Car` — raycast veh"
},
{
"path": "flake.nix",
"chars": 640,
"preview": "{\n inputs.nixpkgs.url = \"github:nixos/nixpkgs/nixos-25.11\";\n\n outputs = { nixpkgs, ... }:\n let\n systems =\n "
},
{
"path": "review/elm.json",
"chars": 1124,
"preview": "{\n \"type\": \"application\",\n \"source-directories\": [\n \"src\"\n ],\n \"elm-version\": \"0.19.1\",\n \"dependen"
},
{
"path": "review/src/ReviewConfig.elm",
"chars": 1066,
"preview": "module ReviewConfig exposing (config)\n\n{-| Do not rename the ReviewConfig module or the config function, because\n`elm-re"
},
{
"path": "sandbox/elm.json",
"chars": 1310,
"preview": "{\n \"type\": \"application\",\n \"source-directories\": [\n \"src\",\n \"../src\"\n ],\n \"elm-version\": \"0.19"
},
{
"path": "sandbox/review/elm.json",
"chars": 1061,
"preview": "{\n \"type\": \"application\",\n \"source-directories\": [\n \"src\"\n ],\n \"elm-version\": \"0.19.1\",\n \"dependen"
},
{
"path": "sandbox/review/src/ReviewConfig.elm",
"chars": 1138,
"preview": "module ReviewConfig exposing (config)\n\n{-| Do not rename the ReviewConfig module or the config function, because\n`elm-re"
},
{
"path": "sandbox/src/Boxes.elm",
"chars": 6070,
"preview": "module Boxes exposing (main)\n\n{-| This demo is used to test performance. It drops 5×5×5 boxes.\nTry changing `boxesPerDim"
},
{
"path": "sandbox/src/Car.elm",
"chars": 12990,
"preview": "module Car exposing (main)\n\n{-| This shows how hinge constrains can be used to assemble a car.\nUse the arrow keys to ste"
},
{
"path": "sandbox/src/Character.elm",
"chars": 15371,
"preview": "module Character exposing (main)\n\n{-| Character controller demo, modelled directly on cannon-es's\nPointerLockControlsCan"
},
{
"path": "sandbox/src/Character2D.elm",
"chars": 14673,
"preview": "module Character2D exposing (main)\n\n{-| 2D character controller demo. Motion is locked to the world XZ\nplane: Y translat"
},
{
"path": "sandbox/src/Cloth.elm",
"chars": 8072,
"preview": "module Cloth exposing (main)\n\n{-| Cloth simulation built using many particle bodies,\nconnected with distance constraints"
},
{
"path": "sandbox/src/Common/Camera.elm",
"chars": 2605,
"preview": "module Common.Camera exposing\n ( Camera\n , camera\n , mouseDirection\n , resize\n )\n\nimport Math.Matrix4 as "
},
{
"path": "sandbox/src/Common/Fps.elm",
"chars": 1505,
"preview": "module Common.Fps exposing\n ( update\n , view\n )\n\n{-| This module is used to show the FPS meter.\nWe keep the las"
},
{
"path": "sandbox/src/Common/Math.elm",
"chars": 2045,
"preview": "module Common.Math exposing\n ( makeRotateKTo\n , makeShadow\n )\n\n{-| Some useful Math utilities.\n-}\n\nimport Math."
},
{
"path": "sandbox/src/Common/Meshes.elm",
"chars": 8060,
"preview": "module Common.Meshes exposing\n ( Attributes\n , block\n , contact\n , cylinder\n , fromTriangles\n , normal"
},
{
"path": "sandbox/src/Common/Scene.elm",
"chars": 9958,
"preview": "module Common.Scene exposing (view)\n\nimport Common.Camera exposing (Camera)\nimport Common.Math as Math\nimport Common.Mes"
},
{
"path": "sandbox/src/Common/Settings.elm",
"chars": 3722,
"preview": "module Common.Settings exposing\n ( Settings\n , SettingsMsg\n , settings\n , update\n , view\n )\n\n{-| This "
},
{
"path": "sandbox/src/Common/Shaders.elm",
"chars": 3251,
"preview": "module Common.Shaders exposing\n ( Uniforms\n , colorFragment\n , fragment\n , shadowFragment\n , vertex\n ,"
},
{
"path": "sandbox/src/CompoundVsLock.elm",
"chars": 9073,
"preview": "module CompoundVsLock exposing (main)\n\n{-| This demo shows two possible ways to create complex objects.\nOne way is throu"
},
{
"path": "sandbox/src/Dominoes.elm",
"chars": 6006,
"preview": "module Dominoes exposing (main)\n\n{-| This demo is used to show custom materials.\nWithout the slippy material, dominoes w"
},
{
"path": "sandbox/src/Kinematic.elm",
"chars": 7087,
"preview": "module Kinematic exposing (main)\n\n{-| This demo shows a kinematic platform sliding back and forth between\ntwo endpoints."
},
{
"path": "sandbox/src/Randomize.elm",
"chars": 9674,
"preview": "module Randomize exposing (main)\n\n{-| This demo drops random bodies.\nIt also shows how to make a compound body out of mu"
},
{
"path": "sandbox/src/Stability/Metrics.elm",
"chars": 1344,
"preview": "module Stability.Metrics exposing (Metrics, compute)\n\n{-| Stability metrics computed from a list of bodies after N simul"
},
{
"path": "sandbox/src/Stability/Scenarios.elm",
"chars": 1780,
"preview": "module Stability.Scenarios exposing\n ( Scenario\n , stackOf5\n , unitBlock\n )\n\n{-| Repeatable, deterministic t"
},
{
"path": "sandbox/src/StabilityScenes.elm",
"chars": 4947,
"preview": "module StabilityScenes exposing (main)\n\n{-| Interactive browser view for the stack-of-5 stability benchmark.\n\nThe curren"
},
{
"path": "sandbox/src/UnsafeConvex.elm",
"chars": 11599,
"preview": "module UnsafeConvex exposing (main)\n\n{-| This is used to demonstrate loading `unsafeConvex` shape from the OBJ file!\n-}\n"
},
{
"path": "sandbox/tests/StabilityTest.elm",
"chars": 2799,
"preview": "module StabilityTest exposing (stability)\n\n{-| Regression test for physics solver stability.\n\nstackOf5: 5 boxes at exact"
},
{
"path": "scripts/elm-publish.sh",
"chars": 1094,
"preview": "#!/bin/bash\nset -euxo pipefail\n\nversion=${1:-}\n\nif [ -z \"$version\" ]; then\n echo \"Please set the desired version\"\n exi"
},
{
"path": "scripts/gh-pages.sh",
"chars": 1093,
"preview": "#!/bin/bash\nset -euxo pipefail\n\nversion=${1:-}\n\nif [ -z \"$version\" ]; then\n version_path=\"\"\nelse\n version_path=\"/$vers"
},
{
"path": "src/Collision/ConvexConvex.elm",
"chars": 10303,
"preview": "module Collision.ConvexConvex exposing\n ( addContacts\n , findSeparatingAxis\n , project\n , testSeparatingAxis"
},
{
"path": "src/Collision/ParticleConvex.elm",
"chars": 2026,
"preview": "module Collision.ParticleConvex exposing (addContacts)\n\nimport Internal.Const as Const\nimport Internal.Contact exposing "
},
{
"path": "src/Collision/PlaneConvex.elm",
"chars": 2123,
"preview": "module Collision.PlaneConvex exposing (addContacts)\n\nimport Internal.Contact exposing (Contact)\nimport Internal.Vector3 "
},
{
"path": "src/Collision/PlaneParticle.elm",
"chars": 980,
"preview": "module Collision.PlaneParticle exposing (addContacts)\n\nimport Internal.Contact exposing (Contact)\nimport Internal.Vector"
},
{
"path": "src/Collision/PlaneSphere.elm",
"chars": 1123,
"preview": "module Collision.PlaneSphere exposing (addContacts)\n\nimport Internal.Contact exposing (Contact)\nimport Shapes.Plane expo"
},
{
"path": "src/Collision/SphereConvex.elm",
"chars": 11308,
"preview": "module Collision.SphereConvex exposing (addContacts)\n\nimport Internal.Contact exposing (Contact)\nimport Internal.Vector3"
},
{
"path": "src/Collision/SphereParticle.elm",
"chars": 810,
"preview": "module Collision.SphereParticle exposing (addContacts)\n\nimport Internal.Contact exposing (Contact)\nimport Internal.Vecto"
},
{
"path": "src/Collision/SphereSphere.elm",
"chars": 934,
"preview": "module Collision.SphereSphere exposing (addContacts)\n\nimport Internal.Contact exposing (Contact)\nimport Internal.Vector3"
},
{
"path": "src/Internal/AssignIds.elm",
"chars": 5826,
"preview": "module Internal.AssignIds exposing (assignIds)\n\nimport Internal.Body as InternalBody\nimport Physics.Types as Types\n\n\nass"
},
{
"path": "src/Internal/Body.elm",
"chars": 12683,
"preview": "module Internal.Body exposing\n ( Body\n , Kind(..)\n , applyAngularImpulse\n , applyForce\n , applyImpulse\n "
},
{
"path": "src/Internal/BroadPhase.elm",
"chars": 3017,
"preview": "module Internal.BroadPhase exposing (getContacts)\n\n{-| This is very naive implementation of BroadPhase,\nthat checks if t"
},
{
"path": "src/Internal/Const.elm",
"chars": 147,
"preview": "module Internal.Const exposing (maxNumber, precision)\n\n\nmaxNumber : Float\nmaxNumber =\n 3.40282347e38\n\n\nprecision : Fl"
},
{
"path": "src/Internal/Constraint.elm",
"chars": 4515,
"preview": "module Internal.Constraint exposing (Constraint(..), ConstraintGroup, getConstraints)\n\nimport Internal.Body as Body\nimpo"
},
{
"path": "src/Internal/Contact.elm",
"chars": 904,
"preview": "module Internal.Contact exposing (Contact, ContactGroup, SolverContact, flip)\n\nimport Internal.Body exposing (Body)\nimpo"
},
{
"path": "src/Internal/Coordinates.elm",
"chars": 177,
"preview": "module Internal.Coordinates exposing (BodyCoordinates, WorldCoordinates)\n\n\ntype WorldCoordinates\n = WorldCoordinates "
},
{
"path": "src/Internal/Equation.elm",
"chars": 17863,
"preview": "module Internal.Equation exposing\n ( Equation\n , EquationsGroup\n , SolverEquation\n , constraintEquationsGrou"
},
{
"path": "src/Internal/Lock.elm",
"chars": 1174,
"preview": "module Internal.Lock exposing (Lock(..), masks)\n\nimport Internal.Vector3 as Vec3 exposing (Vec3)\n\n\ntype Lock\n = Trans"
},
{
"path": "src/Internal/Material.elm",
"chars": 1058,
"preview": "module Internal.Material exposing\n ( Material\n , combineBounciness\n , combineFriction\n , ice\n , plastic\n "
},
{
"path": "src/Internal/Matrix3.elm",
"chars": 10076,
"preview": "module Internal.Matrix3 exposing\n ( Mat3\n , add\n , cylinderInertia\n , eigenDecomposition\n , inverse\n ,"
},
{
"path": "src/Internal/NarrowPhase.elm",
"chars": 6886,
"preview": "module Internal.NarrowPhase exposing (getContacts)\n\nimport Collision.ConvexConvex\nimport Collision.ParticleConvex\nimport"
},
{
"path": "src/Internal/Shape.elm",
"chars": 2968,
"preview": "module Internal.Shape exposing\n ( CenterOfMassCoordinates\n , Shape(..)\n , centerOfMass\n , expandBoundingSphe"
},
{
"path": "src/Internal/Solver.elm",
"chars": 18629,
"preview": "module Internal.Solver exposing (solve)\n\nimport Array exposing (Array)\nimport Dict exposing (Dict)\nimport Internal.Body "
},
{
"path": "src/Internal/SolverBody.elm",
"chars": 5960,
"preview": "module Internal.SolverBody exposing\n ( SolverBody\n , fromBody\n , toBody\n )\n\nimport Internal.Body as Body exp"
},
{
"path": "src/Internal/Transform3d.elm",
"chars": 11751,
"preview": "module Internal.Transform3d exposing\n ( Transform3d\n , atOrigin\n , atPoint\n , directionPlaceIn\n , directi"
},
{
"path": "src/Internal/Vector3.elm",
"chars": 4096,
"preview": "module Internal.Vector3 exposing\n ( Vec3\n , add\n , almostZero\n , basis\n , cross\n , direction\n , dis"
},
{
"path": "src/Physics/Constraint.elm",
"chars": 3576,
"preview": "module Physics.Constraint exposing\n ( Constraint\n , pointToPoint, hinge, distance, lock\n )\n\n{-|\n\n@docs Constrai"
},
{
"path": "src/Physics/Lock.elm",
"chars": 1759,
"preview": "module Physics.Lock exposing\n ( Lock\n , translateX, translateY, translateZ\n , rotateX, rotateY, rotateZ\n , a"
},
{
"path": "src/Physics/Material.elm",
"chars": 2852,
"preview": "module Physics.Material exposing\n ( Material\n , wood, rubber, steel, ice, plastic\n , Dense, dense, Surface, sur"
},
{
"path": "src/Physics/Shape.elm",
"chars": 5833,
"preview": "module Physics.Shape exposing\n ( Shape, block, sphere, cylinder\n , minus, plus, sum, unsafeConvex\n )\n\n{-|\n\n@doc"
},
{
"path": "src/Physics/Types.elm",
"chars": 1116,
"preview": "module Physics.Types exposing (Body(..), Constraint, Contacts(..), Lock, Material(..), Shape(..))\n\nimport Array exposing"
},
{
"path": "src/Physics.elm",
"chars": 34548,
"preview": "module Physics exposing\n ( Body, BodyCoordinates, WorldCoordinates\n , block, plane, sphere, cylinder, pointMass\n "
},
{
"path": "src/Shapes/Convex.elm",
"chars": 22139,
"preview": "module Shapes.Convex exposing\n ( Convex\n , Face\n , computeNormal\n , expandBoundingSphereRadius\n , extendC"
},
{
"path": "src/Shapes/Plane.elm",
"chars": 1297,
"preview": "module Shapes.Plane exposing (Plane, placeIn, raycast)\n\nimport Internal.Transform3d as Transform3d exposing (Transform3d"
},
{
"path": "src/Shapes/Sphere.elm",
"chars": 2295,
"preview": "module Shapes.Sphere exposing\n ( Sphere\n , atOrigin\n , expandBoundingSphereRadius\n , placeIn\n , raycast\n "
},
{
"path": "tests/BodyTest.elm",
"chars": 6088,
"preview": "module BodyTest exposing (boundingSphereRadius, updateMassProperties, volume)\n\nimport Expect\nimport Extra.Expect as Expe"
},
{
"path": "tests/Collision/ConvexConvexTest.elm",
"chars": 8351,
"preview": "module Collision.ConvexConvexTest exposing\n ( addContacts\n , findSeparatingAxis\n , project\n , testSeparating"
},
{
"path": "tests/Collision/PlaneSphereTest.elm",
"chars": 2036,
"preview": "module Collision.PlaneSphereTest exposing (addContacts)\n\nimport Collision.PlaneSphere\nimport Extra.Expect as Expect\nimpo"
},
{
"path": "tests/Collision/SphereConvexTest.elm",
"chars": 3596,
"preview": "module Collision.SphereConvexTest exposing (addContacts)\n\nimport Collision.SphereConvex\nimport Expect\nimport Extra.Expec"
},
{
"path": "tests/EigenDecompositionTest.elm",
"chars": 18408,
"preview": "module EigenDecompositionTest exposing (eigenDecomposition)\n\nimport Expect exposing (FloatingPointTolerance(..))\nimport "
},
{
"path": "tests/Extra/Expect.elm",
"chars": 2043,
"preview": "module Extra.Expect exposing\n ( contacts\n , frame3d\n , mat3\n , vec3\n )\n\nimport Direction3d\nimport Expect "
},
{
"path": "tests/Fixtures/Convex.elm",
"chars": 12405,
"preview": "module Fixtures.Convex exposing\n ( askewSquarePyramid\n , block\n , blockOfTetrahedrons\n , hugeConvex\n , no"
},
{
"path": "tests/Fixtures/NarrowPhase.elm",
"chars": 17821,
"preview": "module Fixtures.NarrowPhase exposing\n ( sphereContactBoxPositions\n , sphereContactOctohedronPositions\n )\n\nimpor"
},
{
"path": "tests/KinematicTest.elm",
"chars": 5416,
"preview": "module KinematicTest exposing (integration)\n\n{-| Tests that a kinematic body's transform advances by velocity × dt\neach "
},
{
"path": "tests/Matrix3Test.elm",
"chars": 1631,
"preview": "module Matrix3Test exposing (inverse)\n\nimport Extra.Expect as Expect\nimport Internal.Matrix3 as Mat3 exposing (Mat3)\nimp"
},
{
"path": "tests/PlaceInTest.elm",
"chars": 4251,
"preview": "module PlaceInTest exposing (placeTests)\n\nimport Angle\nimport Axis3d\nimport Block3d\nimport Extra.Expect as Expect\nimport"
},
{
"path": "tests/Shapes/ConvexTest.elm",
"chars": 8290,
"preview": "module Shapes.ConvexTest exposing\n ( centerOfMass\n , extendContour\n , faces\n , inertia\n , uniqeNormals\n "
},
{
"path": "tests/SimulateTest.elm",
"chars": 7137,
"preview": "module SimulateTest exposing (assignIds)\n\n{-| Tests for the ID assignment logic in Physics.simulate.\n\nBodies carry an in"
},
{
"path": "tests/Transform3dFromFrame3dTest.elm",
"chars": 2319,
"preview": "module Transform3dFromFrame3dTest exposing (conversion)\n\nimport Angle\nimport Axis3d\nimport Direction3d\nimport Extra.Expe"
},
{
"path": "tests/Transform3dTest.elm",
"chars": 3777,
"preview": "module Transform3dTest exposing (directionRelativeTo, inverse, pointRelativeTo, relativeTo)\n\nimport Extra.Expect as Expe"
}
]
About this extraction
This page contains the full source code of the w0rm/elm-physics GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 105 files (991.5 KB), approximately 391.7k tokens. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.