diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index dc24580..1f6e3a3 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -9,7 +9,7 @@ jobs: name: Test uses: swiftlang/github-workflows/.github/workflows/swift_package_test.yml@main with: - linux_build_command: "cd Guest && ./build.sh" + linux_build_command: "cd AudioWorkstation/Guest && ./build.sh" linux_exclude_swift_versions: '[{"swift_version": "5.9"}, {"swift_version": "5.10"}]' enable_windows_checks: false soundness: diff --git a/AudioWorkstation/Guest/.build/.gitkeep b/AudioWorkstation/Guest/.build/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/Guest/.sourcekit-lsp/config.json b/AudioWorkstation/Guest/.sourcekit-lsp/config.json similarity index 100% rename from Guest/.sourcekit-lsp/config.json rename to AudioWorkstation/Guest/.sourcekit-lsp/config.json diff --git a/Guest/Package.swift b/AudioWorkstation/Guest/Package.swift similarity index 100% rename from Guest/Package.swift rename to AudioWorkstation/Guest/Package.swift diff --git a/Guest/Sources/Bass/Shared b/AudioWorkstation/Guest/Sources/Bass/Shared similarity index 100% rename from Guest/Sources/Bass/Shared rename to AudioWorkstation/Guest/Sources/Bass/Shared diff --git a/Guest/Sources/Bass/main.swift b/AudioWorkstation/Guest/Sources/Bass/main.swift similarity index 100% rename from Guest/Sources/Bass/main.swift rename to AudioWorkstation/Guest/Sources/Bass/main.swift diff --git a/Guest/Sources/HiHat/Shared b/AudioWorkstation/Guest/Sources/HiHat/Shared similarity index 100% rename from Guest/Sources/HiHat/Shared rename to AudioWorkstation/Guest/Sources/HiHat/Shared diff --git a/Guest/Sources/HiHat/main.swift b/AudioWorkstation/Guest/Sources/HiHat/main.swift similarity index 100% rename from Guest/Sources/HiHat/main.swift rename to AudioWorkstation/Guest/Sources/HiHat/main.swift diff --git a/Guest/Sources/JavaScript/encoder.js b/AudioWorkstation/Guest/Sources/JavaScript/encoder.js similarity index 100% rename from Guest/Sources/JavaScript/encoder.js rename to AudioWorkstation/Guest/Sources/JavaScript/encoder.js diff --git a/Guest/Sources/JavaScript/index.js b/AudioWorkstation/Guest/Sources/JavaScript/index.js similarity index 100% rename from Guest/Sources/JavaScript/index.js rename to AudioWorkstation/Guest/Sources/JavaScript/index.js diff --git a/Guest/Sources/Kick/Shared b/AudioWorkstation/Guest/Sources/Kick/Shared similarity index 100% rename from Guest/Sources/Kick/Shared rename to AudioWorkstation/Guest/Sources/Kick/Shared diff --git a/Guest/Sources/Kick/main.swift b/AudioWorkstation/Guest/Sources/Kick/main.swift similarity index 100% rename from Guest/Sources/Kick/main.swift rename to AudioWorkstation/Guest/Sources/Kick/main.swift diff --git a/Guest/Sources/Mix/Shared b/AudioWorkstation/Guest/Sources/Mix/Shared similarity index 100% rename from Guest/Sources/Mix/Shared rename to AudioWorkstation/Guest/Sources/Mix/Shared diff --git a/Guest/Sources/Mix/main.swift b/AudioWorkstation/Guest/Sources/Mix/main.swift similarity index 100% rename from Guest/Sources/Mix/main.swift rename to AudioWorkstation/Guest/Sources/Mix/main.swift diff --git a/Guest/Sources/Plotter/Canvas.swift b/AudioWorkstation/Guest/Sources/Plotter/Canvas.swift similarity index 100% rename from Guest/Sources/Plotter/Canvas.swift rename to AudioWorkstation/Guest/Sources/Plotter/Canvas.swift diff --git a/Guest/Sources/Plotter/Plotter.swift b/AudioWorkstation/Guest/Sources/Plotter/Plotter.swift similarity index 100% rename from Guest/Sources/Plotter/Plotter.swift rename to AudioWorkstation/Guest/Sources/Plotter/Plotter.swift diff --git a/Guest/Sources/Plotter/main.swift b/AudioWorkstation/Guest/Sources/Plotter/main.swift similarity index 100% rename from Guest/Sources/Plotter/main.swift rename to AudioWorkstation/Guest/Sources/Plotter/main.swift diff --git a/Guest/Sources/Shared/AudioBuffer.swift b/AudioWorkstation/Guest/Sources/Shared/AudioBuffer.swift similarity index 100% rename from Guest/Sources/Shared/AudioBuffer.swift rename to AudioWorkstation/Guest/Sources/Shared/AudioBuffer.swift diff --git a/Guest/Sources/Shared/AudioEncode.swift b/AudioWorkstation/Guest/Sources/Shared/AudioEncode.swift similarity index 100% rename from Guest/Sources/Shared/AudioEncode.swift rename to AudioWorkstation/Guest/Sources/Shared/AudioEncode.swift diff --git a/Guest/Sources/Shared/DOMInterop.swift b/AudioWorkstation/Guest/Sources/Shared/DOMInterop.swift similarity index 100% rename from Guest/Sources/Shared/DOMInterop.swift rename to AudioWorkstation/Guest/Sources/Shared/DOMInterop.swift diff --git a/Guest/Sources/Shared/Effects/LadderFilter.swift b/AudioWorkstation/Guest/Sources/Shared/Effects/LadderFilter.swift similarity index 100% rename from Guest/Sources/Shared/Effects/LadderFilter.swift rename to AudioWorkstation/Guest/Sources/Shared/Effects/LadderFilter.swift diff --git a/Guest/Sources/Shared/Instruments/Bass.swift b/AudioWorkstation/Guest/Sources/Shared/Instruments/Bass.swift similarity index 100% rename from Guest/Sources/Shared/Instruments/Bass.swift rename to AudioWorkstation/Guest/Sources/Shared/Instruments/Bass.swift diff --git a/Guest/Sources/Shared/Instruments/Drums.swift b/AudioWorkstation/Guest/Sources/Shared/Instruments/Drums.swift similarity index 100% rename from Guest/Sources/Shared/Instruments/Drums.swift rename to AudioWorkstation/Guest/Sources/Shared/Instruments/Drums.swift diff --git a/Guest/Sources/Shared/Instruments/Sequencer.swift b/AudioWorkstation/Guest/Sources/Shared/Instruments/Sequencer.swift similarity index 100% rename from Guest/Sources/Shared/Instruments/Sequencer.swift rename to AudioWorkstation/Guest/Sources/Shared/Instruments/Sequencer.swift diff --git a/Guest/Sources/Shared/Mixer.swift b/AudioWorkstation/Guest/Sources/Shared/Mixer.swift similarity index 100% rename from Guest/Sources/Shared/Mixer.swift rename to AudioWorkstation/Guest/Sources/Shared/Mixer.swift diff --git a/Guest/Sources/Shared/MusicTheory/Pitch.swift b/AudioWorkstation/Guest/Sources/Shared/MusicTheory/Pitch.swift similarity index 100% rename from Guest/Sources/Shared/MusicTheory/Pitch.swift rename to AudioWorkstation/Guest/Sources/Shared/MusicTheory/Pitch.swift diff --git a/Guest/Sources/Shared/Utilities/AttackHoldRelease.swift b/AudioWorkstation/Guest/Sources/Shared/Utilities/AttackHoldRelease.swift similarity index 100% rename from Guest/Sources/Shared/Utilities/AttackHoldRelease.swift rename to AudioWorkstation/Guest/Sources/Shared/Utilities/AttackHoldRelease.swift diff --git a/Guest/Sources/Shared/Utilities/Modulator.swift b/AudioWorkstation/Guest/Sources/Shared/Utilities/Modulator.swift similarity index 100% rename from Guest/Sources/Shared/Utilities/Modulator.swift rename to AudioWorkstation/Guest/Sources/Shared/Utilities/Modulator.swift diff --git a/Guest/Sources/Shared/Waveforms/Saw.swift b/AudioWorkstation/Guest/Sources/Shared/Waveforms/Saw.swift similarity index 100% rename from Guest/Sources/Shared/Waveforms/Saw.swift rename to AudioWorkstation/Guest/Sources/Shared/Waveforms/Saw.swift diff --git a/Guest/Sources/Shared/Waveforms/Signal.swift b/AudioWorkstation/Guest/Sources/Shared/Waveforms/Signal.swift similarity index 100% rename from Guest/Sources/Shared/Waveforms/Signal.swift rename to AudioWorkstation/Guest/Sources/Shared/Waveforms/Signal.swift diff --git a/Guest/Sources/Shared/Waveforms/Square.swift b/AudioWorkstation/Guest/Sources/Shared/Waveforms/Square.swift similarity index 100% rename from Guest/Sources/Shared/Waveforms/Square.swift rename to AudioWorkstation/Guest/Sources/Shared/Waveforms/Square.swift diff --git a/Guest/Sources/Shared/Waveforms/Triangle.swift b/AudioWorkstation/Guest/Sources/Shared/Waveforms/Triangle.swift similarity index 100% rename from Guest/Sources/Shared/Waveforms/Triangle.swift rename to AudioWorkstation/Guest/Sources/Shared/Waveforms/Triangle.swift diff --git a/Guest/Sources/VultDSP/VultLibrary/phase.vult b/AudioWorkstation/Guest/Sources/VultDSP/VultLibrary/phase.vult similarity index 100% rename from Guest/Sources/VultDSP/VultLibrary/phase.vult rename to AudioWorkstation/Guest/Sources/VultDSP/VultLibrary/phase.vult diff --git a/Guest/Sources/VultDSP/VultLibrary/tables.vult b/AudioWorkstation/Guest/Sources/VultDSP/VultLibrary/tables.vult similarity index 100% rename from Guest/Sources/VultDSP/VultLibrary/tables.vult rename to AudioWorkstation/Guest/Sources/VultDSP/VultLibrary/tables.vult diff --git a/Guest/Sources/VultDSP/VultLibrary/util.vult b/AudioWorkstation/Guest/Sources/VultDSP/VultLibrary/util.vult similarity index 100% rename from Guest/Sources/VultDSP/VultLibrary/util.vult rename to AudioWorkstation/Guest/Sources/VultDSP/VultLibrary/util.vult diff --git a/Guest/Sources/VultDSP/ahr.vult b/AudioWorkstation/Guest/Sources/VultDSP/ahr.vult similarity index 100% rename from Guest/Sources/VultDSP/ahr.vult rename to AudioWorkstation/Guest/Sources/VultDSP/ahr.vult diff --git a/Guest/Sources/VultDSP/include/waveforms.h b/AudioWorkstation/Guest/Sources/VultDSP/include/waveforms.h similarity index 100% rename from Guest/Sources/VultDSP/include/waveforms.h rename to AudioWorkstation/Guest/Sources/VultDSP/include/waveforms.h diff --git a/Guest/Sources/VultDSP/kick.vult b/AudioWorkstation/Guest/Sources/VultDSP/kick.vult similarity index 100% rename from Guest/Sources/VultDSP/kick.vult rename to AudioWorkstation/Guest/Sources/VultDSP/kick.vult diff --git a/Guest/Sources/VultDSP/ladder.vult b/AudioWorkstation/Guest/Sources/VultDSP/ladder.vult similarity index 100% rename from Guest/Sources/VultDSP/ladder.vult rename to AudioWorkstation/Guest/Sources/VultDSP/ladder.vult diff --git a/Guest/Sources/VultDSP/noise.vult b/AudioWorkstation/Guest/Sources/VultDSP/noise.vult similarity index 100% rename from Guest/Sources/VultDSP/noise.vult rename to AudioWorkstation/Guest/Sources/VultDSP/noise.vult diff --git a/Guest/Sources/VultDSP/out.cpp b/AudioWorkstation/Guest/Sources/VultDSP/out.cpp similarity index 100% rename from Guest/Sources/VultDSP/out.cpp rename to AudioWorkstation/Guest/Sources/VultDSP/out.cpp diff --git a/Guest/Sources/VultDSP/out.h b/AudioWorkstation/Guest/Sources/VultDSP/out.h similarity index 100% rename from Guest/Sources/VultDSP/out.h rename to AudioWorkstation/Guest/Sources/VultDSP/out.h diff --git a/Guest/Sources/VultDSP/out.tables.h b/AudioWorkstation/Guest/Sources/VultDSP/out.tables.h similarity index 100% rename from Guest/Sources/VultDSP/out.tables.h rename to AudioWorkstation/Guest/Sources/VultDSP/out.tables.h diff --git a/Guest/Sources/VultDSP/saturate.vult b/AudioWorkstation/Guest/Sources/VultDSP/saturate.vult similarity index 100% rename from Guest/Sources/VultDSP/saturate.vult rename to AudioWorkstation/Guest/Sources/VultDSP/saturate.vult diff --git a/Guest/Sources/VultDSP/sine.vult b/AudioWorkstation/Guest/Sources/VultDSP/sine.vult similarity index 100% rename from Guest/Sources/VultDSP/sine.vult rename to AudioWorkstation/Guest/Sources/VultDSP/sine.vult diff --git a/Guest/Sources/VultDSP/swept.vult b/AudioWorkstation/Guest/Sources/VultDSP/swept.vult similarity index 100% rename from Guest/Sources/VultDSP/swept.vult rename to AudioWorkstation/Guest/Sources/VultDSP/swept.vult diff --git a/Guest/Sources/VultDSP/triangle.vult b/AudioWorkstation/Guest/Sources/VultDSP/triangle.vult similarity index 100% rename from Guest/Sources/VultDSP/triangle.vult rename to AudioWorkstation/Guest/Sources/VultDSP/triangle.vult diff --git a/Guest/Sources/VultDSP/vultin.cpp b/AudioWorkstation/Guest/Sources/VultDSP/vultin.cpp similarity index 100% rename from Guest/Sources/VultDSP/vultin.cpp rename to AudioWorkstation/Guest/Sources/VultDSP/vultin.cpp diff --git a/Guest/Sources/VultDSP/vultin.h b/AudioWorkstation/Guest/Sources/VultDSP/vultin.h similarity index 100% rename from Guest/Sources/VultDSP/vultin.h rename to AudioWorkstation/Guest/Sources/VultDSP/vultin.h diff --git a/Guest/Sources/dlmalloc/include/__macro_PAGESIZE.h b/AudioWorkstation/Guest/Sources/dlmalloc/include/__macro_PAGESIZE.h similarity index 100% rename from Guest/Sources/dlmalloc/include/__macro_PAGESIZE.h rename to AudioWorkstation/Guest/Sources/dlmalloc/include/__macro_PAGESIZE.h diff --git a/Guest/Sources/dlmalloc/include/endian.h b/AudioWorkstation/Guest/Sources/dlmalloc/include/endian.h similarity index 100% rename from Guest/Sources/dlmalloc/include/endian.h rename to AudioWorkstation/Guest/Sources/dlmalloc/include/endian.h diff --git a/Guest/Sources/dlmalloc/include/errno.h b/AudioWorkstation/Guest/Sources/dlmalloc/include/errno.h similarity index 100% rename from Guest/Sources/dlmalloc/include/errno.h rename to AudioWorkstation/Guest/Sources/dlmalloc/include/errno.h diff --git a/Guest/Sources/dlmalloc/include/features.h b/AudioWorkstation/Guest/Sources/dlmalloc/include/features.h similarity index 100% rename from Guest/Sources/dlmalloc/include/features.h rename to AudioWorkstation/Guest/Sources/dlmalloc/include/features.h diff --git a/Guest/Sources/dlmalloc/include/malloc.h b/AudioWorkstation/Guest/Sources/dlmalloc/include/malloc.h similarity index 100% rename from Guest/Sources/dlmalloc/include/malloc.h rename to AudioWorkstation/Guest/Sources/dlmalloc/include/malloc.h diff --git a/Guest/Sources/dlmalloc/include/string.h b/AudioWorkstation/Guest/Sources/dlmalloc/include/string.h similarity index 100% rename from Guest/Sources/dlmalloc/include/string.h rename to AudioWorkstation/Guest/Sources/dlmalloc/include/string.h diff --git a/Guest/Sources/dlmalloc/include/unistd.h b/AudioWorkstation/Guest/Sources/dlmalloc/include/unistd.h similarity index 100% rename from Guest/Sources/dlmalloc/include/unistd.h rename to AudioWorkstation/Guest/Sources/dlmalloc/include/unistd.h diff --git a/Guest/Sources/dlmalloc/include/wasi_api.h b/AudioWorkstation/Guest/Sources/dlmalloc/include/wasi_api.h similarity index 100% rename from Guest/Sources/dlmalloc/include/wasi_api.h rename to AudioWorkstation/Guest/Sources/dlmalloc/include/wasi_api.h diff --git a/Guest/Sources/dlmalloc/src/abort.c b/AudioWorkstation/Guest/Sources/dlmalloc/src/abort.c similarity index 100% rename from Guest/Sources/dlmalloc/src/abort.c rename to AudioWorkstation/Guest/Sources/dlmalloc/src/abort.c diff --git a/Guest/Sources/dlmalloc/src/dlmalloc.c b/AudioWorkstation/Guest/Sources/dlmalloc/src/dlmalloc.c similarity index 100% rename from Guest/Sources/dlmalloc/src/dlmalloc.c rename to AudioWorkstation/Guest/Sources/dlmalloc/src/dlmalloc.c diff --git a/Guest/Sources/dlmalloc/src/errno.c b/AudioWorkstation/Guest/Sources/dlmalloc/src/errno.c similarity index 100% rename from Guest/Sources/dlmalloc/src/errno.c rename to AudioWorkstation/Guest/Sources/dlmalloc/src/errno.c diff --git a/Guest/Sources/dlmalloc/src/memcpy.c b/AudioWorkstation/Guest/Sources/dlmalloc/src/memcpy.c similarity index 100% rename from Guest/Sources/dlmalloc/src/memcpy.c rename to AudioWorkstation/Guest/Sources/dlmalloc/src/memcpy.c diff --git a/Guest/Sources/dlmalloc/src/memset.c b/AudioWorkstation/Guest/Sources/dlmalloc/src/memset.c similarity index 100% rename from Guest/Sources/dlmalloc/src/memset.c rename to AudioWorkstation/Guest/Sources/dlmalloc/src/memset.c diff --git a/Guest/Sources/dlmalloc/src/sbrk.c b/AudioWorkstation/Guest/Sources/dlmalloc/src/sbrk.c similarity index 100% rename from Guest/Sources/dlmalloc/src/sbrk.c rename to AudioWorkstation/Guest/Sources/dlmalloc/src/sbrk.c diff --git a/Guest/Sources/dlmalloc/src/upstream_malloc.h b/AudioWorkstation/Guest/Sources/dlmalloc/src/upstream_malloc.h similarity index 100% rename from Guest/Sources/dlmalloc/src/upstream_malloc.h rename to AudioWorkstation/Guest/Sources/dlmalloc/src/upstream_malloc.h diff --git a/Guest/build.sh b/AudioWorkstation/Guest/build.sh similarity index 100% rename from Guest/build.sh rename to AudioWorkstation/Guest/build.sh diff --git a/Guest/index.html b/AudioWorkstation/Guest/index.html similarity index 100% rename from Guest/index.html rename to AudioWorkstation/Guest/index.html diff --git a/LICENSE-vendored.md b/AudioWorkstation/LICENSE-vendored.md similarity index 100% rename from LICENSE-vendored.md rename to AudioWorkstation/LICENSE-vendored.md diff --git a/LICENSE.txt b/AudioWorkstation/LICENSE.txt similarity index 100% rename from LICENSE.txt rename to AudioWorkstation/LICENSE.txt diff --git a/AudioWorkstation/README.md b/AudioWorkstation/README.md new file mode 100644 index 0000000..57fd125 --- /dev/null +++ b/AudioWorkstation/README.md @@ -0,0 +1,106 @@ +# Swift Audio Workstation + +This example demonstrates support for WebAssembly in latest development snapshots of the Swift toolchain, in combination +with the [Embedded Swift mode](https://github.com/apple/swift/blob/main/docs/EmbeddedSwift/UserManual.md). +With foundational building blocks written in Swift, it utilizes C++ interop for calling into a +[DSP](https://en.wikipedia.org/wiki/Digital_signal_processing) library for synthesizing simple musical sequences. It is +written with a multi-platform approach, which makes it easy to integrate into Wasm-based serverless environment or +native applications and libraries. + +It is split into three packages: `Guest` with Wasm modules built with Embedded Swift, `ServerHost` that embeds these modules, and `WATExample` that demonstrates compilation of WebAssembly Text Format to binary Wasm modules using Swift. + +## Requirements + +WebAssembly support in Swift is available for preview in latest Trunk Development (main) snapshots at +[swift.org/download](https://www.swift.org/download). + +### macOS + +1. Install [Xcode](https://apps.apple.com/us/app/xcode/id497799835?mt=12). +2. Verify selected Xcode path by running `xcode-select -p` in the terminal. If the incorrect Xcode is selected, follow +the steps provided in ["How do I select the default version of Xcode"](https://developer.apple.com/library/archive/technotes/tn2339/_index.html#//apple_ref/doc/uid/DTS40014588-CH1-HOW_DO_I_SELECT_THE_DEFAULT_VERSION_OF_XCODE_TO_USE_FOR_MY_COMMAND_LINE_TOOLS_) section of +["Building from the Command Line with Xcode FAQ"](https://developer.apple.com/library/archive/technotes/tn2339/_index.html). +3. Download latest `main` development snapshot, you can use [`DEVELOPMENT-SNAPSHOT-2024-04-01-a`](https://download.swift.org/development/xcode/swift-DEVELOPMENT-SNAPSHOT-2024-04-01-a/swift-DEVELOPMENT-SNAPSHOT-2024-04-01-a-osx.pkg) or a later version. +4. Run the downloaded installer. Select "Install for me only" option during installation. +5. Select the newly installed snapshot in terminal: + +```sh +export TOOLCHAINS=$(plutil -extract CFBundleIdentifier raw \ + ~/Library/Developer/Toolchains/swift-latest.xctoolchain/Info.plist) +``` + +### Linux + +Follow Linux-specific instructions provided on [swift.org/install](https://www.swift.org/install/#linux) to install the +latest development toolchain for your specific distribution. + +### Docker + +1. Start a docker container in a clone of this repository using the nightly swiftlang Ubuntu image, with a `/root/build` +mount to the current directory: + +```sh +docker run --rm -it -v $(pwd):/root/build swiftlang/swift:nightly-jammy /bin/bash +``` + +2. Navigate to the package directory within the container: + +```sh +cd /root/build +``` + +## How to Build and Run + +Assuming you're within the cloned repository and have the latest development snapshots selected per the instructions +above, first build the package: + +```sh +swift build --triple wasm32-unknown-none-wasm -c release --product swift-audio +``` + +Then start the HTTP server: + +```sh +python3 -m http.server +``` + +Open http://localhost:8000 in your browser to see the project running. + +## License + +Copyright 2024 Apple Inc. and the Swift project authors. Licensed under Apache License v2.0 with Runtime Library Exception. + +See [https://swift.org/LICENSE.txt](https://swift.org/LICENSE.txt) for license information. + +See [https://swift.org/CONTRIBUTORS.txt](https://swift.org/CONTRIBUTORS.txt) for Swift project authors. + +See [`LICENSE-vendored.md`](https://github.com/swiftlang/swift-for-wasm-examples/blob/main/AudioWorkstation/LICENSE-vendored.md) for exact licenses of code vendored in this repository. Specifically: + +* Code in `Guest/Sources/dlmalloc` directory is derived from wasi-libc: https://github.com/WebAssembly/wasi-libc + +> wasi-libc as a whole is multi-licensed under the Apache License v2.0 with LLVM Exceptions, the Apache License v2.0, and the MIT License. See the LICENSE-APACHE-LLVM, LICENSE-APACHE and LICENSE-MIT files, respectively, for details. +> +> Portions of this software are derived from third-party works covered by their own licenses: +> +> dlmalloc/ - CC0; see the notice in malloc.c for details emmalloc/ - MIT; see the notice in emmalloc.c for details libc-bottom-half/cloudlibc/ - BSD-2-Clause; see the LICENSE file for details libc-top-half/musl/ - MIT; see the COPYRIGHT file for details +> +> wasi-libc's changes to these files are multi-licensed under the Apache License v2.0 with LLVM Exceptions, the Apache License v2.0, the MIT License, and the original licenses of the third-party works. + +* .wav format encoding implementation is derived from WavAudioEncoder.js library https://github.com/higuma/wav-audio-encoder-js and is licensed as following: + +> The MIT License (MIT) +> +> Copyright (c) 2015 Yuji Miyane + +* Code in `Guest/Sources/VultDSP` directory is derived from https://github.com/vult-dsp/vult and is licensed as following: + +> MIT License +> +> Copyright (c) 2017 Leonardo Laguna Ruiz + +* Web server starter template code is derived from [the Hummingbird template package](https://github.com/hummingbird-project/template) and is licensed as following: + +> Copyright (c) 2024 Adam Fowler. +> Licensed under Apache License v2.0. +> +> See https://github.com/hummingbird-project/template/blob/main/LICENSE for license information diff --git a/ServerHost/.gitignore b/AudioWorkstation/ServerHost/.gitignore similarity index 100% rename from ServerHost/.gitignore rename to AudioWorkstation/ServerHost/.gitignore diff --git a/ServerHost/Package.resolved b/AudioWorkstation/ServerHost/Package.resolved similarity index 100% rename from ServerHost/Package.resolved rename to AudioWorkstation/ServerHost/Package.resolved diff --git a/ServerHost/Package.swift b/AudioWorkstation/ServerHost/Package.swift similarity index 100% rename from ServerHost/Package.swift rename to AudioWorkstation/ServerHost/Package.swift diff --git a/ServerHost/Public/.build b/AudioWorkstation/ServerHost/Public/.build similarity index 100% rename from ServerHost/Public/.build rename to AudioWorkstation/ServerHost/Public/.build diff --git a/ServerHost/Public/Sources/JavaScript b/AudioWorkstation/ServerHost/Public/Sources/JavaScript similarity index 100% rename from ServerHost/Public/Sources/JavaScript rename to AudioWorkstation/ServerHost/Public/Sources/JavaScript diff --git a/ServerHost/Public/upload.html b/AudioWorkstation/ServerHost/Public/upload.html similarity index 100% rename from ServerHost/Public/upload.html rename to AudioWorkstation/ServerHost/Public/upload.html diff --git a/ServerHost/Sources/Server/App+Logger.swift b/AudioWorkstation/ServerHost/Sources/Server/App+Logger.swift similarity index 100% rename from ServerHost/Sources/Server/App+Logger.swift rename to AudioWorkstation/ServerHost/Sources/Server/App+Logger.swift diff --git a/ServerHost/Sources/Server/App+Router.swift b/AudioWorkstation/ServerHost/Sources/Server/App+Router.swift similarity index 100% rename from ServerHost/Sources/Server/App+Router.swift rename to AudioWorkstation/ServerHost/Sources/Server/App+Router.swift diff --git a/ServerHost/Sources/Server/App.swift b/AudioWorkstation/ServerHost/Sources/Server/App.swift similarity index 100% rename from ServerHost/Sources/Server/App.swift rename to AudioWorkstation/ServerHost/Sources/Server/App.swift diff --git a/ServerHost/Sources/Server/IndexPage.swift b/AudioWorkstation/ServerHost/Sources/Server/IndexPage.swift similarity index 100% rename from ServerHost/Sources/Server/IndexPage.swift rename to AudioWorkstation/ServerHost/Sources/Server/IndexPage.swift diff --git a/ServerHost/Sources/Server/MixedOutput.swift b/AudioWorkstation/ServerHost/Sources/Server/MixedOutput.swift similarity index 100% rename from ServerHost/Sources/Server/MixedOutput.swift rename to AudioWorkstation/ServerHost/Sources/Server/MixedOutput.swift diff --git a/ServerHost/Tests/ServerTests/ServerTests.swift b/AudioWorkstation/ServerHost/Tests/ServerTests/ServerTests.swift similarity index 100% rename from ServerHost/Tests/ServerTests/ServerTests.swift rename to AudioWorkstation/ServerHost/Tests/ServerTests/ServerTests.swift diff --git a/WATExample/Package.resolved b/AudioWorkstation/WATExample/Package.resolved similarity index 100% rename from WATExample/Package.resolved rename to AudioWorkstation/WATExample/Package.resolved diff --git a/WATExample/Package.swift b/AudioWorkstation/WATExample/Package.swift similarity index 100% rename from WATExample/Package.swift rename to AudioWorkstation/WATExample/Package.swift diff --git a/WATExample/Sources/WATExample/main.swift b/AudioWorkstation/WATExample/Sources/WATExample/main.swift similarity index 100% rename from WATExample/Sources/WATExample/main.swift rename to AudioWorkstation/WATExample/Sources/WATExample/main.swift diff --git a/WATExample/factorial-flat.wat b/AudioWorkstation/WATExample/factorial-flat.wat similarity index 100% rename from WATExample/factorial-flat.wat rename to AudioWorkstation/WATExample/factorial-flat.wat diff --git a/WATExample/factorial.wat b/AudioWorkstation/WATExample/factorial.wat similarity index 100% rename from WATExample/factorial.wat rename to AudioWorkstation/WATExample/factorial.wat diff --git a/Guest/.build/.gitkeep b/Guest/.build/.gitkeep deleted file mode 100644 index 8b13789..0000000 --- a/Guest/.build/.gitkeep +++ /dev/null @@ -1 +0,0 @@ - diff --git a/README.md b/README.md index 1fe8d66..750a9ef 100644 --- a/README.md +++ b/README.md @@ -1,89 +1,16 @@ -# Swift for WebAssembly Examples +# Swift for WebAssembly Example Projects -A repository with a "Swift Audio Workstation" example built with Swift for WebAssembly running in the browser. +A collection of example projects using Swift's WebAssembly support. To learn more, see: -This example demonstrates support for WebAssembly in latest development snapshots of the Swift toolchain, in combination -with the [Embedded Swift mode](https://github.com/apple/swift/blob/main/docs/EmbeddedSwift/UserManual.md). -With foundational building blocks written in Swift, it utilizes C++ interop for calling into a -[DSP](https://en.wikipedia.org/wiki/Digital_signal_processing) library for synthesizing simple musical sequences. It is -written with a multi-platform approach, which makes it easy to integrate into Wasm-based serverless environment or -native applications and libraries. +- [Getting Started with Swift SDKs for WebAssembly](https://www.swift.org/documentation/articles/wasm-getting-started.html) +- [WebAssembly Support in Swift Vision Document](https://github.com/swiftlang/swift-evolution/blob/main/visions/webassembly.md) -The repository is split into three packages: `Guest` with Wasm modules built with Embedded Swift, `ServerHost` that embeds these modules, and `WATExample` that demonstrates compilation of WebAssembly Text Format to binary Wasm modules using Swift. -## Requirements +## Contributing to this repository -WebAssembly support in Swift is available for preview in latest Trunk Development (main) snapshots at -[swift.org/download](https://www.swift.org/download). - -### macOS - -1. Install [Xcode](https://apps.apple.com/us/app/xcode/id497799835?mt=12). -2. Verify selected Xcode path by running `xcode-select -p` in the terminal. If the incorrect Xcode is selected, follow -the steps provided in ["How do I select the default version of Xcode"](https://developer.apple.com/library/archive/technotes/tn2339/_index.html#//apple_ref/doc/uid/DTS40014588-CH1-HOW_DO_I_SELECT_THE_DEFAULT_VERSION_OF_XCODE_TO_USE_FOR_MY_COMMAND_LINE_TOOLS_) section of -["Building from the Command Line with Xcode FAQ"](https://developer.apple.com/library/archive/technotes/tn2339/_index.html). -3. Download latest `main` development snapshot, you can use [`DEVELOPMENT-SNAPSHOT-2024-04-01-a`](https://download.swift.org/development/xcode/swift-DEVELOPMENT-SNAPSHOT-2024-04-01-a/swift-DEVELOPMENT-SNAPSHOT-2024-04-01-a-osx.pkg) or a later version. -4. Run the downloaded installer: - -```sh -installer -target CurrentUserHomeDirectory -pkg ~/Downloads/swift-DEVELOPMENT-SNAPSHOT-2024-04-01-a-osx.pkg -``` - -5. Select the newly installed snapshot: - -```sh -export TOOLCHAINS=$(plutil -extract CFBundleIdentifier raw \ - ~/Library/Developer/Toolchains/swift-latest.xctoolchain/Info.plist) -``` - -### Linux - -Follow Linux-specific instructions provided on [swift.org/install](https://www.swift.org/install/#linux) to install the -latest development toolchain for your specific distribution. - -### Docker - -1. Start a docker container in a clone of this repository using the nightly swiftlang Ubuntu image, with a `/root/build` -mount to the current directory: - -```sh -docker run --rm -it -v $(pwd):/root/build swiftlang/swift:nightly-jammy /bin/bash -``` - -2. Navigate to the package directory within the container: - -```sh -cd /root/build -``` - -## How to Build and Run - -Assuming you're within the cloned repository and have the latest development snapshots selected per the instructions -above, build modules from the `Guest` package (this will copy `.wasm` modules to the home directory of the current user): - -```sh -cd Guest; ./build.sh -``` - - -Then build and start the HTTP server: - -```sh -cd ../ServerHost; swift run Server -``` - -Open http://localhost:8080 in your browser to see the project running. Use the web interface to upload previously built -`Guest` modules from the home directory. - -## Contributing to this example Contributions to Swift are welcomed and encouraged! Please see the [Contributing to Swift guide](https://swift.org/contributing/). -Before submitting the pull request, please make sure you have [tested your - changes](https://github.com/apple/swift/blob/main/docs/ContinuousIntegration.md) - and that they follow the Swift project [guidelines for contributing - code](https://swift.org/contributing/#contributing-code). - To be a truly great community, [Swift.org](https://swift.org/) needs to welcome developers from all walks of life, with different backgrounds, and with a wide range of experience. A diverse and friendly community will have more great @@ -95,8 +22,9 @@ code of conduct defined by the Contributor Covenant. This document is used across many open source communities, and we think it articulates our values well. For more, see the [Code of Conduct](https://swift.org/code-of-conduct/). -## License -See [https://swift.org/LICENSE.txt](https://swift.org/LICENSE.txt) for license information. +## Code of Conduct -See [`LICENSE-vendored.md`](https://github.com/apple/swift-for-wasm-examples/blob/main/LICENSE-vendored.md) for exact licenses of code vendored in this repository. +Like all Swift.org projects, we would like these example projects to foster a diverse and friendly +community. We expect contributors to adhere to the [Swift.org Code of +Conduct](https://swift.org/code-of-conduct/). diff --git a/WebGPUDemo/.editorconfig b/WebGPUDemo/.editorconfig new file mode 100644 index 0000000..2a9df2d --- /dev/null +++ b/WebGPUDemo/.editorconfig @@ -0,0 +1,10 @@ +root = true + +[*] +charset = utf-8 +end_of_line = lf +indent_style = space +indent_size = 2 +trim_trailing_whitespace = true +insert_final_newline = true +xcode_trim_whitespace_on_empty_lines = true diff --git a/WebGPUDemo/.sourcekit-lsp/config.json b/WebGPUDemo/.sourcekit-lsp/config.json new file mode 100644 index 0000000..b789e87 --- /dev/null +++ b/WebGPUDemo/.sourcekit-lsp/config.json @@ -0,0 +1,5 @@ +{ + "swiftPM": { + "swiftSDK": "swift-DEVELOPMENT-SNAPSHOT-2025-06-03-a_wasm" + } +} diff --git a/WebGPUDemo/.swift-format b/WebGPUDemo/.swift-format new file mode 100644 index 0000000..41a022f --- /dev/null +++ b/WebGPUDemo/.swift-format @@ -0,0 +1,18 @@ +{ + "version": 1, + "lineLength": 120, + "indentation": { + "spaces": 2 + }, + "lineBreakBeforeEachArgument": true, + "indentConditionalCompilationBlocks": false, + "prioritizeKeepingFunctionOutputTogether": true, + "rules": { + "AlwaysUseLowerCamelCase": false, + "AmbiguousTrailingClosureOverload": false, + "NoBlockComments": false, + "OrderedImports": true, + "UseLetInEveryBoundCaseVariable": false, + "UseSynthesizedInitializer": false + } +} diff --git a/WebGPUDemo/Package.resolved b/WebGPUDemo/Package.resolved new file mode 100644 index 0000000..275b55a --- /dev/null +++ b/WebGPUDemo/Package.resolved @@ -0,0 +1,33 @@ +{ + "originHash" : "dcbd3e085935ccdf4178dc9a180a6938b0e73f641b50437486b67cc0f3d7c82b", + "pins" : [ + { + "identity" : "javascriptkit", + "kind" : "remoteSourceControl", + "location" : "https://github.com/swiftwasm/JavaScriptKit.git", + "state" : { + "branch" : "main", + "revision" : "7eb770ee75b3c1832eef6e7a8a1d46d996fc86ae" + } + }, + { + "identity" : "swift-syntax", + "kind" : "remoteSourceControl", + "location" : "https://github.com/swiftlang/swift-syntax", + "state" : { + "revision" : "0687f71944021d616d34d922343dcef086855920", + "version" : "600.0.1" + } + }, + { + "identity" : "webapikit", + "kind" : "remoteSourceControl", + "location" : "https://github.com/swiftwasm/WebAPIKit.git", + "state" : { + "branch" : "main", + "revision" : "2832a10fdfd8b4990591d2b72d35cfacf7c647f3" + } + } + ], + "version" : 3 +} diff --git a/WebGPUDemo/Package.swift b/WebGPUDemo/Package.swift new file mode 100644 index 0000000..a766efb --- /dev/null +++ b/WebGPUDemo/Package.swift @@ -0,0 +1,28 @@ +// swift-tools-version: 6.1 + +import PackageDescription + +let package = Package( + name: "WebGPUDemo", + dependencies: [ + .package( + url: "https://github.com/swiftwasm/WebAPIKit.git", + branch: "main", + ), + .package( + url: "https://github.com/swiftwasm/JavaScriptKit.git", + branch: "main", + ), + ], + targets: [ + .executableTarget( + name: "WebGPUDemo", + dependencies: [ + .product(name: "JavaScriptKit", package: "JavaScriptKit"), + .product(name: "JavaScriptEventLoop", package: "JavaScriptKit"), + .product(name: "DOM", package: "WebAPIKit"), + .product(name: "WebGPU", package: "WebAPIKit"), + ], + ) + ] +) diff --git a/WebGPUDemo/README.md b/WebGPUDemo/README.md new file mode 100644 index 0000000..ea91abd --- /dev/null +++ b/WebGPUDemo/README.md @@ -0,0 +1,17 @@ +# WebGPU Example + +Install a development snapshot and Swift SDK for Wasm by following +https://www.swift.org/documentation/articles/wasm-getting-started.html. + +Build with the installed SDK using JavaScriptKit's `PackageToJSPlugin` plugin. Make sure to update +the Swift SDK to the installed version. +``` +swift package --swift-sdk swift-DEVELOPMENT-SNAPSHOT-2025-06-03-a_wasm js --use-cdn +``` + +Start a HTTP server with eg. `python -m http.server` or `npx serve`. And then open +http://localhost:8000 to view the render of Swift using WebGPU. + +> [!NOTE] +> If using an editor with SourceKit-LSP, make sure to update `.sourcekit-lsp/config.json` with the +> Swift SDK used in your build command. diff --git a/WebGPUDemo/Resources/SwiftLogo/Swift3DLogo.mtl b/WebGPUDemo/Resources/SwiftLogo/Swift3DLogo.mtl new file mode 100644 index 0000000..f4e6054 --- /dev/null +++ b/WebGPUDemo/Resources/SwiftLogo/Swift3DLogo.mtl @@ -0,0 +1,7 @@ +newmtl Swift3DLogo:mat_swift3Dlogo +illum 4 +Kd 0.00 0.00 0.00 +Ka 0.00 0.00 0.00 +Tf 1.00 1.00 1.00 +Ni 0.00 +map_Ka T_M_swiftLogo_BaseColor.png diff --git a/WebGPUDemo/Resources/SwiftLogo/Swift3DLogo.obj b/WebGPUDemo/Resources/SwiftLogo/Swift3DLogo.obj new file mode 100644 index 0000000..9321fd6 --- /dev/null +++ b/WebGPUDemo/Resources/SwiftLogo/Swift3DLogo.obj @@ -0,0 +1,5655 @@ +# This file uses centimeters as units for non-parametric coordinates. + +mtllib Swift3DLogo.mtl +g default +v 1.998495 2.052428 0.828249 +v 1.833796 2.106304 0.828249 +v 1.620065 2.357883 0.828249 +v 1.582315 2.149747 0.828249 +v 0.102326 2.392485 0.828249 +v 0.100138 2.190161 0.828249 +v 0.097085 1.987180 0.828249 +v 0.096574 1.783799 0.828249 +v -1.801218 2.359129 0.828249 +v -1.764799 2.145301 0.828249 +v -1.971031 2.317390 0.828249 +v -1.929845 2.110319 0.828249 +v -2.118914 2.268042 0.828249 +v -2.271861 2.087579 0.828249 +v -2.090128 2.076698 0.828249 +v -2.310578 1.922491 0.828249 +v -2.087108 1.892218 0.828249 +v -1.902972 1.907234 0.828249 +v -1.734639 1.932628 0.828249 +v -2.340546 1.747527 0.828249 +v -2.099774 1.716151 0.828249 +v -1.895923 1.715313 0.828249 +v -1.716999 1.727684 0.828249 +v -2.355369 1.510296 0.828249 +v -2.114149 1.489471 0.828249 +v -1.900813 1.483116 0.828249 +v -1.711130 1.485968 0.828249 +v -1.739159 -0.109514 0.828249 +v -1.939600 -0.106643 0.828249 +v -2.146834 -0.103168 0.828249 +v -2.153241 -1.684106 0.828249 +v -2.135349 -1.887227 0.828249 +v -2.358201 -0.101523 0.828249 +v -2.353949 -1.720782 0.828249 +v -2.307433 -1.947412 0.828249 +v 2.275298 -2.088891 0.828249 +v 2.317370 -1.925981 0.828249 +v 2.353388 -1.699519 0.828249 +v 2.392963 -0.086623 0.828249 +v 2.380860 1.543947 0.828249 +v 2.355559 1.781098 0.828249 +v 2.306729 1.950904 0.828249 +v 2.217527 2.107231 0.828249 +v 2.073879 2.226819 0.828249 +v 1.891038 2.306131 0.828249 +v 0.120553 -1.716015 0.828249 +v 0.122910 -1.980036 0.828249 +v 0.124765 -2.190559 0.828249 +v 0.127064 -2.400877 0.828249 +v -1.777167 -1.691605 0.828249 +v -1.793485 -1.918762 0.828249 +v -1.830145 -2.107324 0.828249 +v -1.963433 -1.681229 0.828249 +v -1.968967 -1.892595 0.828249 +v -1.997069 -2.052758 0.828249 +v 0.099685 1.532310 0.828249 +v 1.497313 -0.075511 0.828249 +v 1.524980 1.526556 0.828249 +v 1.534852 1.762164 0.828249 +v 1.551466 1.949675 0.828249 +v 1.751857 -0.076517 0.828249 +v 1.773025 1.520699 0.828249 +v 1.780124 1.748441 0.828249 +v 1.796347 1.921739 0.828249 +v 1.903917 -1.665311 0.828249 +v 1.960857 -0.080596 0.828249 +v 1.966592 1.515925 0.828249 +v 1.964328 1.736947 0.828249 +v 1.969935 1.894866 0.828249 +v 2.091472 -1.895120 0.828249 +v 2.111301 -1.668748 0.828249 +v 2.177203 -0.085412 0.828249 +v 2.170886 1.520234 0.828249 +v 2.155737 1.740219 0.828249 +v 2.136345 1.889113 0.828249 +v -2.218170 -2.106676 0.828249 +v -2.071855 -2.228746 0.828249 +v -1.885143 -2.309875 0.828249 +v 0.110950 -0.085472 0.828249 +v 1.564956 -2.384309 0.828249 +v 1.537307 -2.165154 0.828249 +v 1.513226 -1.947823 0.828249 +v 1.496584 -1.685599 0.828249 +v 1.807597 -2.359134 0.828249 +v 1.767540 -2.142413 0.828249 +v 1.736642 -1.929134 0.828249 +v 1.722727 -1.674396 0.828249 +v 1.974705 -2.317660 0.828249 +v 1.930705 -2.108961 0.828249 +v 1.905153 -1.907206 0.828249 +v 2.121346 -2.268423 0.828249 +v 2.091274 -2.077258 0.828249 +v 2.244854 -2.230733 0.828249 +v -2.115680 -2.007815 0.828249 +v 2.116024 2.008174 0.828249 +v -2.241059 2.231075 0.828249 +v 1.998495 2.052428 -0.818536 +v 1.833796 2.106304 -0.818536 +v 1.796347 1.921739 -0.818536 +v 1.969935 1.894866 -0.818536 +v 2.073879 2.226819 -0.818536 +v 1.891038 2.306131 -0.818536 +v 2.116024 2.008174 -0.818536 +v 2.217527 2.107231 -0.818536 +v 2.136345 1.889113 -0.818536 +v 1.582315 2.149747 -0.818536 +v 1.551466 1.949675 -0.818536 +v 1.620065 2.357883 -0.818536 +v 0.102326 2.392486 -0.818536 +v 0.100138 2.190161 -0.818536 +v 0.097085 1.987180 -0.818536 +v 0.096574 1.783799 -0.818536 +v 0.099685 1.532310 -0.818536 +v 2.121346 -2.268423 -0.818536 +v 1.974705 -2.317660 -0.818536 +v 2.244854 -2.230733 -0.818536 +v 2.275298 -2.088891 -0.818536 +v 2.317370 -1.925981 -0.818536 +v 2.353388 -1.699519 -0.818536 +v -1.801218 2.359129 -0.818536 +v -1.764799 2.145301 -0.818536 +v -1.734639 1.932628 -0.818536 +v -1.716999 1.727684 -0.818536 +v -1.971031 2.317390 -0.818536 +v -1.929845 2.110319 -0.818536 +v -1.902971 1.907234 -0.818536 +v -2.118915 2.268042 -0.818536 +v -2.090128 2.076698 -0.818536 +v -2.087107 1.892219 -0.818536 +v -2.241059 2.231075 -0.818536 +v -2.271861 2.087579 -0.818536 +v -2.310578 1.922491 -0.818536 +v -2.340546 1.747527 -0.818536 +v -2.099774 1.716151 -0.818536 +v -1.895922 1.715312 -0.818536 +v -2.355369 1.510296 -0.818536 +v -2.114149 1.489471 -0.818536 +v -1.900813 1.483116 -0.818536 +v -1.711130 1.485968 -0.818536 +v -2.358201 -0.101523 -0.818536 +v -1.739159 -0.109514 -0.818536 +v -1.939600 -0.106643 -0.818536 +v -2.146834 -0.103168 -0.818536 +v -1.963433 -1.681229 -0.818536 +v -1.777167 -1.691605 -0.818536 +v -2.153241 -1.684106 -0.818536 +v -2.353949 -1.720782 -0.818536 +v -2.307433 -1.947412 -0.818536 +v -2.135349 -1.887227 -0.818536 +v -1.968968 -1.892595 -0.818536 +v -2.218170 -2.106676 -0.818536 +v -2.115679 -2.007815 -0.818536 +v -1.997069 -2.052758 -0.818536 +v -1.885143 -2.309875 -0.818536 +v -1.830145 -2.107324 -0.818536 +v 2.091472 -1.895120 -0.818536 +v 2.091274 -2.077258 -0.818536 +v 2.111301 -1.668748 -0.818536 +v 2.392963 -0.086623 -0.818536 +v 2.177203 -0.085412 -0.818536 +v 2.380860 1.543947 -0.818536 +v 2.170886 1.520234 -0.818536 +v 2.355559 1.781098 -0.818536 +v 2.155737 1.740219 -0.818536 +v 2.306729 1.950904 -0.818536 +v 1.564956 -2.384309 -0.818536 +v 0.120553 -1.716015 -0.818536 +v 0.122910 -1.980036 -0.818536 +v 0.124765 -2.190559 -0.818536 +v 0.127064 -2.400877 -0.818536 +v 0.110950 -0.085472 -0.818536 +v -1.793484 -1.918762 -0.818536 +v -2.071854 -2.228746 -0.818536 +v 1.497313 -0.075511 -0.818536 +v 1.524980 1.526556 -0.818536 +v 1.534853 1.762164 -0.818536 +v 1.751857 -0.076517 -0.818536 +v 1.773025 1.520699 -0.818536 +v 1.780124 1.748441 -0.818536 +v 1.722727 -1.674396 -0.818536 +v 1.903917 -1.665311 -0.818536 +v 1.496584 -1.685599 -0.818536 +v 1.960857 -0.080596 -0.818536 +v 1.966592 1.515925 -0.818536 +v 1.964328 1.736947 -0.818536 +v 1.905153 -1.907206 -0.818536 +v 1.736643 -1.929135 -0.818536 +v 1.930705 -2.108961 -0.818536 +v 1.537307 -2.165154 -0.818536 +v 1.513226 -1.947823 -0.818536 +v 1.807597 -2.359134 -0.818536 +v 1.767540 -2.142413 -0.818536 +v 1.780114 3.535250 0.811717 +v 2.238166 3.501044 0.811717 +v 0.098487 3.537705 0.811717 +v -3.537711 -0.105876 0.811712 +v 1.710558 -3.537223 0.811708 +v 2.061859 -3.527948 0.811716 +v 2.395122 -3.473499 0.811717 +v 2.731544 -3.330359 0.811717 +v 3.104244 -3.033381 0.811717 +v 3.375079 -2.641317 0.811717 +v 3.497656 -2.280303 0.811717 +v 3.533993 -1.889772 0.811715 +v 3.537706 -0.081744 0.811715 +v 3.537191 1.705519 0.811706 +v 3.524927 2.071687 0.811715 +v 3.438766 2.472678 0.811717 +v 3.177249 2.936256 0.811717 +v 2.705739 3.329458 0.811717 +v -2.008730 3.532113 0.811716 +v -2.337551 3.486445 0.811717 +v -2.673327 3.361994 0.811717 +v -3.032638 3.104393 0.811717 +v -3.342083 2.701401 0.811717 +v -3.486417 2.330748 0.811717 +v -3.532720 1.988632 0.811713 +v -3.537728 1.653046 0.811693 +v -3.526466 -1.990484 0.811714 +v -3.443143 -2.459280 0.811717 +v -3.182642 -2.928954 0.811717 +v -2.704217 -3.329309 0.811717 +v -2.229328 -3.502556 0.811717 +v 0.148587 -3.537705 0.811716 +v 1.780114 3.535250 -0.802004 +v 2.238166 3.501044 -0.802004 +v 0.098487 3.537705 -0.802004 +v -3.537710 -0.105876 -0.802000 +v 1.710558 -3.537223 -0.801995 +v 2.061859 -3.527948 -0.802003 +v 2.395122 -3.473499 -0.802004 +v 2.731544 -3.330359 -0.802004 +v 3.104244 -3.033381 -0.802004 +v 3.375079 -2.641317 -0.802004 +v 3.497656 -2.280303 -0.802004 +v 3.533993 -1.889772 -0.802003 +v 3.537706 -0.081744 -0.802003 +v 3.537190 1.705519 -0.801993 +v 3.524927 2.071686 -0.802002 +v 3.438766 2.472678 -0.802004 +v 3.177249 2.936257 -0.802004 +v 2.705739 3.329458 -0.802004 +v -2.008730 3.532113 -0.802004 +v -2.337551 3.486445 -0.802004 +v -2.673327 3.361994 -0.802004 +v -3.032638 3.104393 -0.802004 +v -3.342083 2.701401 -0.802004 +v -3.486417 2.330748 -0.802004 +v -3.532720 1.988632 -0.802000 +v -3.537728 1.653046 -0.801981 +v -3.526467 -1.990484 -0.802001 +v -3.443143 -2.459280 -0.802004 +v -3.182642 -2.928954 -0.802004 +v -2.704217 -3.329309 -0.802004 +v -2.229328 -3.502555 -0.802004 +v 0.148587 -3.537705 -0.802004 +v -2.474991 1.524001 0.828249 +v -2.350135 1.653316 0.828249 +v -2.233215 1.498394 0.828249 +v -2.106894 1.626108 0.828249 +v -2.003787 1.484700 0.828249 +v -1.897075 1.621237 0.828249 +v -1.803912 1.483758 0.828249 +v -1.712816 1.628182 0.828249 +v -1.620515 1.489090 0.828249 +v -2.355752 1.274589 0.828249 +v -2.121941 1.261803 0.828249 +v -1.907138 1.256072 0.828249 +v -1.711443 1.256389 0.828249 +v -2.463103 -0.101249 0.828249 +v -2.252432 -0.102118 0.828249 +v -2.042444 -0.104808 0.828249 +v -1.838642 -0.108276 0.828249 +v -1.640743 -0.110162 0.828249 +v -2.057187 -1.679457 0.828249 +v -1.870577 -1.685756 0.828249 +v -2.252997 -1.698843 0.828249 +v -2.334752 -1.862956 0.828249 +v -2.220581 -1.910499 0.828249 +v -2.144926 -1.814758 0.828249 +v -2.052285 -1.883984 0.828249 +v -1.964647 -1.814018 0.828249 +v -2.269389 -2.030067 0.828249 +v -2.157526 -2.047209 0.828249 +v -2.124174 -1.954274 0.828249 +v -2.065845 -2.025076 0.828249 +v -1.978408 -1.971284 0.828249 +v -2.453591 -1.747036 0.828249 +v -2.395353 -1.991577 0.828249 +v -2.288022 -2.170767 0.828249 +v 0.128624 -2.504869 0.828249 +v -1.780028 -2.339373 0.828249 +v -1.918925 -2.409768 0.828249 +v -1.734461 -2.130566 0.828249 +v -1.855498 -2.208020 0.828249 +v 2.202031 -1.904434 0.828249 +v 2.088662 -1.984770 0.828249 +v 2.180954 -2.074086 0.828249 +v 2.099754 -2.173033 0.828249 +v 2.230837 -1.681058 0.828249 +v 2.099259 -1.807860 0.828249 +v 2.285862 -0.086532 0.828249 +v 2.483510 1.560007 0.828249 +v 2.388238 1.302794 0.828249 +v 2.276000 1.530099 0.828249 +v 2.178145 1.289075 0.828249 +v 2.453995 1.810459 0.828249 +v 2.370395 1.688240 0.828249 +v 2.255401 1.756633 0.828249 +v 2.163612 1.655837 0.828249 +v 2.393838 1.996329 0.828249 +v 2.335065 1.867951 0.828249 +v 2.220867 1.912972 0.828249 +v 2.146673 1.817713 0.828249 +v 2.286972 2.171976 0.828249 +v 2.268367 2.032060 0.828249 +v 2.125113 2.314635 0.828249 +v 1.581269 -2.491695 0.828249 +v 1.550530 -2.275061 0.828249 +v 1.524602 -2.055789 0.828249 +v 0.121813 -1.874827 0.828249 +v 1.503988 -1.842112 0.828249 +v 0.123847 -2.085270 0.828249 +v 0.125808 -2.295934 0.828249 +v 0.102070 1.295136 0.828249 +v -1.681753 -1.697339 0.828249 +v -1.783581 -1.830864 0.828249 +v -1.699677 -1.932152 0.828249 +v -1.809240 -2.010910 0.828249 +v -1.882974 -1.904881 0.828249 +v -1.918092 -2.080781 0.828249 +v -2.029054 -2.139688 0.828249 +v -1.982773 -2.273688 0.828249 +v -2.151323 -2.172989 0.828249 +v 1.517980 1.295386 0.828249 +v 1.529952 1.667364 0.828249 +v 1.635478 -1.679696 0.828249 +v 1.649888 -0.075512 0.828249 +v 1.769549 1.291434 0.828249 +v 1.676476 1.523568 0.828249 +v 1.776135 1.658343 0.828249 +v 1.686006 1.754944 0.828249 +v 1.786233 1.835069 0.828249 +v 1.811330 -1.669132 0.828249 +v 1.855412 -0.078290 0.828249 +v 1.969601 1.287434 0.828249 +v 1.869087 1.517801 0.828249 +v 1.964771 1.651124 0.828249 +v 1.872170 1.741932 0.828249 +v 1.965450 1.817313 0.828249 +v 2.003117 -1.664342 0.828249 +v 1.901496 -1.811241 0.828249 +v 1.994050 -1.897792 0.828249 +v 1.727454 -1.826779 0.828249 +v 1.820172 -1.918118 0.828249 +v 2.068495 -0.083202 0.828249 +v 2.067470 1.516123 0.828249 +v 2.058781 1.735017 0.828249 +v 1.915421 -2.006655 0.828249 +v 2.009424 -2.090698 0.828249 +v -2.122963 -2.316607 0.828249 +v 1.833936 -2.464892 0.828249 +v 1.715915 -2.373950 0.828249 +v 1.786011 -2.251096 0.828249 +v 1.681030 -2.155199 0.828249 +v 1.750544 -2.034719 0.828249 +v 1.652103 -1.938857 0.828249 +v 1.893850 -2.340011 0.828249 +v 1.949409 -2.213497 0.828249 +v 1.850421 -2.126600 0.828249 +v 1.780497 3.544748 -0.787530 +v 1.779531 3.520790 -0.811512 +v -3.547215 -0.105823 -0.787521 +v -3.523241 -0.105957 -0.811510 +v 1.709636 -3.522768 -0.811508 +v 1.711163 -3.546718 -0.787512 +v 1.779531 3.520790 0.821225 +v 1.780497 3.544748 0.797242 +v 2.034425 3.527886 0.811717 +v 2.240096 3.510365 0.797243 +v 2.235227 3.486855 0.821225 +v 0.098629 3.523231 0.821225 +v 0.098394 3.547212 0.797242 +v -1.864061 3.537461 0.811714 +v -2.007571 3.517678 0.821225 +v -2.009491 3.541595 0.797241 +v -3.523241 -0.105957 0.821223 +v -3.547215 -0.105823 0.797234 +v -3.512072 -1.988819 0.821223 +v -3.535921 -1.991578 0.797236 +v 1.711163 -3.546718 0.797225 +v 1.709637 -3.522768 0.821221 +v 1.913100 -3.535711 0.811711 +v 2.060394 -3.513538 0.821224 +v 2.062822 -3.537414 0.797240 +v 2.225807 -3.508698 0.811717 +v 2.391211 -3.459553 0.821225 +v 2.397692 -3.482659 0.797243 +v 2.559983 -3.417886 0.811717 +v 2.724282 -3.317840 0.821225 +v 2.736313 -3.338583 0.797243 +v 2.920957 -3.199421 0.811717 +v 3.093658 -3.023487 0.821225 +v 3.111197 -3.039881 0.797243 +v 3.257426 -2.840549 0.811717 +v 3.362071 -2.634959 0.821225 +v 3.383624 -2.645494 0.797243 +v 3.451777 -2.456079 0.811717 +v 3.483489 -2.277297 0.821225 +v 3.506961 -2.282278 0.797243 +v 3.522851 -2.109457 0.811717 +v 3.519544 -1.888836 0.821224 +v 3.543483 -1.890387 0.797239 +v 3.523234 -0.081696 0.821224 +v 3.547213 -0.081776 0.797239 +v 3.537720 1.393784 0.811710 +v 3.522739 1.704521 0.821220 +v 3.546683 1.706174 0.797221 +v 3.535570 1.909040 0.811710 +v 3.510546 2.069919 0.821224 +v 3.534372 2.072847 0.797239 +v 3.497330 2.260798 0.811717 +v 3.425133 2.467786 0.821225 +v 3.447721 2.475891 0.797243 +v 3.335221 2.703626 0.811717 +v 3.166033 2.927068 0.821225 +v 3.184617 2.942292 0.797243 +v 2.955406 3.153179 0.811717 +v 2.698647 3.316822 0.821225 +v 2.710398 3.337758 0.797243 +v 2.464299 3.440157 0.811717 +v -2.169597 3.516569 0.811717 +v -2.334109 3.472378 0.821225 +v -2.339812 3.495684 0.797243 +v -2.503483 3.437356 0.811717 +v -2.666693 3.349133 0.821225 +v -2.677685 3.370442 0.797243 +v -2.853021 3.253051 0.811717 +v -3.022623 3.093923 0.821225 +v -3.039217 3.111271 0.797243 +v -3.202255 2.909890 0.811717 +v -3.329393 2.694423 0.821225 +v -3.350419 2.705985 0.797243 +v -3.432333 2.510789 0.811717 +v -3.472356 2.327285 0.821225 +v -3.495653 2.333023 0.797243 +v -3.517749 2.153971 0.811717 +v -3.518284 1.987443 0.821223 +v -3.542202 1.989413 0.797235 +v -3.537720 1.842905 0.811701 +v -3.523275 1.651962 0.821215 +v -3.547222 1.653757 0.797198 +v -3.537721 1.355312 0.811701 +v -3.500232 -2.244205 0.811717 +v -3.429467 -2.454508 0.821225 +v -3.452126 -2.462413 0.797243 +v -3.340822 -2.693166 0.811717 +v -3.171379 -2.919820 0.821225 +v -3.190040 -2.934954 0.797243 +v -2.957974 -3.149734 0.811717 +v -2.697126 -3.316671 0.821225 +v -2.708874 -3.337610 0.797243 +v -2.458766 -3.441483 0.811717 +v -2.226437 -3.488355 0.821225 +v -2.231227 -3.511883 0.797243 +v -2.023612 -3.528830 0.811717 +v 0.148416 -3.523231 0.821225 +v 0.148699 -3.547212 0.797241 +v 2.034425 3.527886 -0.802004 +v 2.235227 3.486855 -0.811512 +v 2.240096 3.510365 -0.787530 +v 0.098394 3.547212 -0.787529 +v 0.098629 3.523231 -0.811512 +v 1.913100 -3.535711 -0.801998 +v 2.062822 -3.537414 -0.787527 +v 2.060394 -3.513538 -0.811511 +v 2.225807 -3.508698 -0.802004 +v 2.397692 -3.482659 -0.787530 +v 2.391211 -3.459553 -0.811512 +v 2.559983 -3.417886 -0.802004 +v 2.736313 -3.338583 -0.787530 +v 2.724282 -3.317840 -0.811512 +v 2.920957 -3.199421 -0.802004 +v 3.111197 -3.039881 -0.787530 +v 3.093658 -3.023487 -0.811512 +v 3.257426 -2.840549 -0.802004 +v 3.383624 -2.645493 -0.787530 +v 3.362071 -2.634959 -0.811512 +v 3.451777 -2.456079 -0.802004 +v 3.506961 -2.282278 -0.787530 +v 3.483489 -2.277297 -0.811512 +v 3.522851 -2.109457 -0.802004 +v 3.543484 -1.890387 -0.787527 +v 3.519544 -1.888836 -0.811511 +v 3.547213 -0.081776 -0.787527 +v 3.523234 -0.081696 -0.811511 +v 3.537720 1.393784 -0.801997 +v 3.546683 1.706174 -0.787508 +v 3.522739 1.704521 -0.811507 +v 3.535570 1.909040 -0.801997 +v 3.534372 2.072847 -0.787526 +v 3.510546 2.069919 -0.811511 +v 3.497330 2.260798 -0.802004 +v 3.447721 2.475891 -0.787530 +v 3.425133 2.467786 -0.811512 +v 3.335221 2.703626 -0.802004 +v 3.184617 2.942292 -0.787530 +v 3.166033 2.927068 -0.811512 +v 2.955406 3.153179 -0.802004 +v 2.710399 3.337758 -0.787530 +v 2.698647 3.316822 -0.811512 +v 2.464299 3.440157 -0.802004 +v -1.864061 3.537461 -0.802001 +v -2.009491 3.541595 -0.787529 +v -2.007571 3.517678 -0.811512 +v -2.169597 3.516569 -0.802004 +v -2.339812 3.495684 -0.787530 +v -2.334109 3.472378 -0.811512 +v -2.503483 3.437356 -0.802004 +v -2.677685 3.370442 -0.787530 +v -2.666693 3.349133 -0.811512 +v -2.853020 3.253051 -0.802004 +v -3.039217 3.111271 -0.787530 +v -3.022622 3.093923 -0.811512 +v -3.202255 2.909890 -0.802004 +v -3.350419 2.705985 -0.787530 +v -3.329393 2.694423 -0.811512 +v -3.432333 2.510789 -0.802004 +v -3.495653 2.333023 -0.787530 +v -3.472356 2.327285 -0.811512 +v -3.517749 2.153971 -0.802004 +v -3.542202 1.989413 -0.787522 +v -3.518284 1.987443 -0.811510 +v -3.537720 1.842905 -0.801989 +v -3.547222 1.653757 -0.787485 +v -3.523275 1.651962 -0.811502 +v -3.537721 1.355312 -0.801988 +v -3.535922 -1.991578 -0.787523 +v -3.512072 -1.988819 -0.811511 +v -3.500232 -2.244205 -0.802004 +v -3.452126 -2.462413 -0.787530 +v -3.429467 -2.454508 -0.811512 +v -3.340822 -2.693166 -0.802004 +v -3.190040 -2.934954 -0.787530 +v -3.171379 -2.919820 -0.811512 +v -2.957975 -3.149734 -0.802004 +v -2.708874 -3.337610 -0.787530 +v -2.697126 -3.316671 -0.811512 +v -2.458766 -3.441483 -0.802004 +v -2.231227 -3.511883 -0.787530 +v -2.226437 -3.488355 -0.811512 +v -2.023612 -3.528830 -0.802004 +v 0.148699 -3.547212 -0.787529 +v 0.148415 -3.523231 -0.811512 +v 1.979578 1.972252 -0.818536 +v 1.884711 1.907502 -0.818536 +v 1.812352 2.011965 -0.818536 +v 1.920556 2.080101 -0.818536 +v 1.860226 2.205312 -0.818536 +v 1.986720 2.270772 -0.818536 +v 2.030801 2.138350 -0.818536 +v 2.151756 2.172228 -0.818536 +v 2.157391 2.047491 -0.818536 +v 2.066546 2.025064 -0.818536 +v 2.124676 1.955214 -0.818536 +v 2.053257 1.885907 -0.818536 +v 1.703607 1.935499 -0.818536 +v 1.565481 2.048142 -0.818536 +v 1.739280 2.129257 -0.818536 +v 1.600601 2.253524 -0.818536 +v 1.787590 2.334939 -0.818536 +v 1.640436 2.461236 -0.818536 +v 1.925627 2.405900 -0.818536 +v 0.103165 2.492734 -0.818536 +v 0.101361 2.291529 -0.818536 +v 0.098523 2.088676 -0.818536 +v 0.096392 1.885775 -0.818536 +v 0.097763 1.680588 -0.818536 +v 2.009764 -2.418848 -0.818536 +v 2.050195 -2.293159 -0.818536 +v 2.163296 -2.359756 -0.818536 +v 2.189188 -2.245366 -0.818536 +v 2.293317 -2.279763 -0.818536 +v 2.255083 -2.168344 -0.818536 +v 2.371141 -2.129383 -0.818536 +v 2.296554 -2.008325 -0.818536 +v 2.429127 -1.960009 -0.818536 +v 2.336261 -1.841195 -0.818536 +v 2.470615 -1.722379 -0.818536 +v -1.707879 2.373929 -0.818536 +v -1.824957 2.463184 -0.818536 +v -1.676844 2.158556 -0.818536 +v -1.781746 2.252704 -0.818536 +v -1.649533 1.943743 -0.818536 +v -1.748637 2.038314 -0.818536 +v -1.630381 1.734769 -0.818536 +v -1.724183 1.829125 -0.818536 +v -1.888954 2.339901 -0.818536 +v -2.003500 2.417236 -0.818536 +v -1.848837 2.128809 -0.818536 +v -1.947603 2.214332 -0.818536 +v -1.818322 1.919920 -0.818536 +v -1.914385 2.007610 -0.818536 +v -2.047395 2.292746 -0.818536 +v -2.158174 2.358894 -0.818536 +v -2.008710 2.091071 -0.818536 +v -2.098612 2.172822 -0.818536 +v -1.990980 1.896186 -0.818536 +v -2.086324 1.983134 -0.818536 +v -2.178796 2.072833 -0.818536 +v -2.252022 2.168061 -0.818536 +v -2.186456 2.245354 -0.818536 +v -2.287430 2.280971 -0.818536 +v -2.196114 1.900777 -0.818536 +v -2.291773 2.005902 -0.818536 +v -2.423074 1.957990 -0.818536 +v -2.366472 2.129041 -0.818536 +v -2.092384 1.804040 -0.818536 +v -2.217917 1.728191 -0.818536 +v -2.327098 1.836809 -0.818536 +v -2.460409 1.772744 -0.818536 +v -1.897353 1.810224 -0.818536 +v -1.993369 1.712822 -0.818536 +v -1.804656 1.720732 -0.818536 +v -2.350135 1.653316 -0.818536 +v -2.474991 1.524001 -0.818536 +v -2.106894 1.626108 -0.818536 +v -2.233216 1.498394 -0.818536 +v -1.897075 1.621237 -0.818536 +v -2.003787 1.484700 -0.818536 +v -1.712815 1.628182 -0.818536 +v -1.803912 1.483758 -0.818536 +v -1.620515 1.489090 -0.818536 +v -2.355752 1.274589 -0.818536 +v -2.121941 1.261803 -0.818536 +v -1.907139 1.256072 -0.818536 +v -1.711443 1.256389 -0.818536 +v -2.463103 -0.101249 -0.818536 +v -1.640743 -0.110162 -0.818536 +v -1.838642 -0.108276 -0.818536 +v -2.042444 -0.104808 -0.818536 +v -1.870577 -1.685756 -0.818536 +v -2.057187 -1.679457 -0.818536 +v -2.252432 -0.102118 -0.818536 +v -2.252997 -1.698843 -0.818536 +v -2.144926 -1.814758 -0.818536 +v -2.220581 -1.910499 -0.818536 +v -2.334752 -1.862956 -0.818536 +v -1.964647 -1.814018 -0.818536 +v -2.052285 -1.883985 -0.818536 +v -2.124174 -1.954274 -0.818536 +v -2.157526 -2.047209 -0.818536 +v -2.269390 -2.030067 -0.818536 +v -1.978408 -1.971284 -0.818536 +v -2.065845 -2.025076 -0.818536 +v -2.453591 -1.747036 -0.818536 +v -2.395353 -1.991577 -0.818536 +v -2.288022 -2.170767 -0.818536 +v -1.918925 -2.409768 -0.818536 +v -1.780028 -2.339373 -0.818536 +v -1.855498 -2.208019 -0.818536 +v -1.734461 -2.130566 -0.818536 +v 2.180954 -2.074086 -0.818536 +v 2.088662 -1.984770 -0.818536 +v 2.202031 -1.904434 -0.818536 +v 2.099754 -2.173033 -0.818536 +v 2.099259 -1.807860 -0.818536 +v 2.230837 -1.681058 -0.818536 +v 2.496995 -0.085747 -0.818536 +v 2.285863 -0.086532 -0.818536 +v 2.388238 1.302794 -0.818536 +v 2.483510 1.560007 -0.818536 +v 2.276000 1.530099 -0.818536 +v 2.178145 1.289075 -0.818536 +v 2.370395 1.688240 -0.818536 +v 2.453995 1.810459 -0.818536 +v 2.163612 1.655837 -0.818536 +v 2.255401 1.756633 -0.818536 +v 2.335065 1.867951 -0.818536 +v 2.393838 1.996329 -0.818536 +v 2.146673 1.817713 -0.818536 +v 2.220867 1.912972 -0.818536 +v 2.268367 2.032060 -0.818536 +v 2.286972 2.171976 -0.818536 +v 2.125113 2.314635 -0.818536 +v 1.581269 -2.491695 -0.818536 +v 0.121813 -1.874827 -0.818536 +v 0.123847 -2.085270 -0.818536 +v 0.125808 -2.295934 -0.818536 +v 0.128624 -2.504869 -0.818536 +v -1.681753 -1.697339 -0.818536 +v -1.699677 -1.932153 -0.818536 +v -1.783581 -1.830864 -0.818536 +v -1.809240 -2.010910 -0.818536 +v -1.882975 -1.904882 -0.818536 +v -1.918092 -2.080781 -0.818536 +v -1.982773 -2.273688 -0.818536 +v -2.029054 -2.139688 -0.818536 +v -2.151323 -2.172989 -0.818536 +v 0.102070 1.295136 -0.818536 +v 1.517980 1.295386 -0.818536 +v 1.529952 1.667364 -0.818536 +v 1.541641 1.855308 -0.818536 +v 1.649888 -0.075512 -0.818536 +v 1.676475 1.523568 -0.818536 +v 1.769549 1.291434 -0.818536 +v 1.686007 1.754944 -0.818536 +v 1.776136 1.658343 -0.818536 +v 1.786233 1.835069 -0.818536 +v 1.811330 -1.669132 -0.818536 +v 1.635478 -1.679696 -0.818536 +v 1.855412 -0.078290 -0.818536 +v 1.869087 1.517801 -0.818536 +v 1.969601 1.287434 -0.818536 +v 1.872170 1.741932 -0.818536 +v 1.964771 1.651124 -0.818536 +v 1.965450 1.817313 -0.818536 +v 2.003118 -1.664342 -0.818536 +v 1.994050 -1.897792 -0.818536 +v 1.901496 -1.811241 -0.818536 +v 1.820172 -1.918118 -0.818536 +v 1.727454 -1.826779 -0.818536 +v 2.068495 -0.083202 -0.818536 +v 2.067470 1.516123 -0.818536 +v 2.058781 1.735017 -0.818536 +v 2.009424 -2.090698 -0.818536 +v 1.915421 -2.006655 -0.818536 +v -2.122963 -2.316607 -0.818536 +v 1.550530 -2.275061 -0.818536 +v 1.524602 -2.055789 -0.818536 +v 1.503988 -1.842112 -0.818536 +v 1.715915 -2.373950 -0.818536 +v 1.833936 -2.464892 -0.818536 +v 1.681030 -2.155199 -0.818536 +v 1.786011 -2.251096 -0.818536 +v 1.652103 -1.938857 -0.818536 +v 1.750544 -2.034719 -0.818536 +v 1.893850 -2.340011 -0.818536 +v 1.850421 -2.126600 -0.818536 +v 1.949409 -2.213497 -0.818536 +v 1.920556 2.080101 0.828249 +v 1.812352 2.011965 0.828249 +v 1.884711 1.907502 0.828249 +v 1.979578 1.972252 0.828249 +v 2.030801 2.138350 0.828249 +v 1.986720 2.270772 0.828249 +v 1.860226 2.205312 0.828249 +v 2.066546 2.025065 0.828249 +v 2.157391 2.047491 0.828249 +v 2.151756 2.172228 0.828249 +v 2.053257 1.885907 0.828249 +v 2.124676 1.955214 0.828249 +v 1.739280 2.129257 0.828249 +v 1.565480 2.048142 0.828249 +v 1.703607 1.935499 0.828249 +v 1.787590 2.334939 0.828249 +v 1.600601 2.253524 0.828249 +v 1.640437 2.461236 0.828249 +v 1.925627 2.405900 0.828249 +v 1.541640 1.855308 0.828249 +v 0.103165 2.492734 0.828249 +v 0.101361 2.291529 0.828249 +v 0.098523 2.088676 0.828249 +v 0.096392 1.885775 0.828249 +v 0.097763 1.680588 0.828249 +v 2.163296 -2.359756 0.828249 +v 2.050195 -2.293159 0.828249 +v 2.009764 -2.418848 0.828249 +v 2.293317 -2.279763 0.828249 +v 2.189188 -2.245366 0.828249 +v 2.371141 -2.129383 0.828249 +v 2.255083 -2.168344 0.828249 +v 2.429127 -1.960009 0.828249 +v 2.296554 -2.008325 0.828249 +v 2.470615 -1.722379 0.828249 +v 2.336261 -1.841195 0.828249 +v 2.496995 -0.085747 0.828249 +v -1.824957 2.463184 0.828249 +v -1.707879 2.373929 0.828249 +v -1.781746 2.252704 0.828249 +v -1.676844 2.158556 0.828249 +v -1.748637 2.038314 0.828249 +v -1.649533 1.943743 0.828249 +v -1.724184 1.829125 0.828249 +v -1.630381 1.734769 0.828249 +v -2.003500 2.417236 0.828249 +v -1.888954 2.339901 0.828249 +v -1.947603 2.214332 0.828249 +v -1.848837 2.128809 0.828249 +v -1.914385 2.007610 0.828249 +v -1.818322 1.919920 0.828249 +v -2.158174 2.358894 0.828249 +v -2.047395 2.292746 0.828249 +v -2.098612 2.172822 0.828249 +v -2.008710 2.091071 0.828249 +v -2.086324 1.983134 0.828249 +v -1.990980 1.896186 0.828249 +v -2.186456 2.245354 0.828249 +v -2.252022 2.168061 0.828249 +v -2.178796 2.072833 0.828249 +v -2.287430 2.280971 0.828249 +v -2.291772 2.005902 0.828249 +v -2.196114 1.900777 0.828249 +v -2.366472 2.129041 0.828249 +v -2.423074 1.957990 0.828249 +v -2.327098 1.836809 0.828249 +v -2.217917 1.728191 0.828249 +v -2.092385 1.804040 0.828249 +v -2.460409 1.772744 0.828249 +v -1.993369 1.712822 0.828249 +v -1.897353 1.810223 0.828249 +v -1.804657 1.720732 0.828249 +v 1.899090 1.991802 -0.818536 +v 1.950120 2.174289 -0.818536 +v 2.101238 2.097431 -0.818536 +v 2.053785 1.955595 -0.818536 +v 1.719400 2.030460 -0.818536 +v 1.762149 2.231487 -0.818536 +v 1.815182 2.437405 -0.818536 +v 2.089022 -2.390736 -0.818536 +v 2.233393 -2.326101 -0.818536 +v 2.337072 -2.210738 -0.818536 +v 2.402007 -2.046054 -0.818536 +v 2.451957 -1.870505 -0.818536 +v -1.726910 2.478944 -0.818536 +v -1.691576 2.266718 -0.818536 +v -1.662527 2.050685 -0.818536 +v -1.638774 1.838365 -0.818536 +v -1.917218 2.442239 -0.818536 +v -1.866987 2.234854 -0.818536 +v -1.832025 2.023475 -0.818536 +v -2.083606 2.389305 -0.818536 +v -2.023901 2.192299 -0.818536 +v -1.997414 1.992163 -0.818536 +v -2.174474 2.159963 -0.818536 +v -2.227836 2.326449 -0.818536 +v -2.186327 1.986521 -0.818536 +v -2.397010 2.044856 -0.818536 +v -2.331794 2.211457 -0.818536 +v -2.207204 1.815352 -0.818536 +v -2.444331 1.867531 -0.818536 +v -1.990374 1.803748 -0.818536 +v -1.809500 1.819213 -0.818536 +v -2.470936 1.672891 -0.818536 +v -2.226574 1.637237 -0.818536 +v -1.997736 1.621381 -0.818536 +v -1.802890 1.623854 -0.818536 +v -1.624489 1.633170 -0.818536 +v -2.471652 1.282109 -0.818536 +v -2.237881 1.267568 -0.818536 +v -2.011834 1.258051 -0.818536 +v -1.807436 1.255624 -0.818536 +v -1.617879 1.258046 -0.818536 +v -2.239198 -1.833753 -0.818536 +v -2.054026 -1.809961 -0.818536 +v -2.195428 -1.983178 -0.818536 +v -2.052971 -1.954712 -0.818536 +v -2.429499 -1.898374 -0.818536 +v -2.348713 -2.083587 -0.818536 +v -1.806391 -2.441791 -0.818536 +v -1.756060 -2.234771 -0.818536 +v 2.190002 -1.988954 -0.818536 +v 2.176195 -2.160459 -0.818536 +v 2.215734 -1.819898 -0.818536 +v 2.490763 1.312141 -0.818536 +v 2.283613 1.294718 -0.818536 +v 2.471751 1.710792 -0.818536 +v 2.266917 1.669124 -0.818536 +v 2.428749 1.904969 -0.818536 +v 2.240490 1.837467 -0.818536 +v 2.347082 2.086544 -0.818536 +v 2.195218 1.984493 -0.818536 +v 2.211993 2.248991 -0.818536 +v 2.029298 2.365957 -0.818536 +v -1.689252 -1.840052 -0.818536 +v -1.715207 -2.029342 -0.818536 +v -1.874938 -1.821585 -0.818536 +v -1.897069 -1.990787 -0.818536 +v -1.946914 -2.176341 -0.818536 +v -2.100663 -2.098011 -0.818536 +v 1.670543 1.293519 -0.818536 +v 1.681064 1.662625 -0.818536 +v 1.692998 1.844781 -0.818536 +v 1.868828 1.289154 -0.818536 +v 1.869964 1.654078 -0.818536 +v 1.876412 1.825309 -0.818536 +v 1.995717 -1.806325 -0.818536 +v 1.812981 -1.818556 -0.818536 +v 2.073091 1.287028 -0.818536 +v 2.062775 1.650774 -0.818536 +v 2.055266 1.812888 -0.818536 +v 1.998846 -1.992604 -0.818536 +v -2.211720 -2.249479 -0.818536 +v -2.024907 -2.369039 -0.818536 +v 1.737470 -2.480836 -0.818536 +v 1.697472 -2.264936 -0.818536 +v 1.665477 -2.046145 -0.818536 +v 1.642197 -1.834420 -0.818536 +v 1.924719 -2.443898 -0.818536 +v 1.869851 -2.233570 -0.818536 +v 1.833256 -2.021124 -0.818536 +v 2.025101 -2.192015 -0.818536 +v 1.899090 1.991802 0.828249 +v 1.950120 2.174289 0.828249 +v 2.101238 2.097431 0.828249 +v 2.053785 1.955595 0.828249 +v 1.719400 2.030460 0.828249 +v 1.762149 2.231487 0.828249 +v 1.815182 2.437405 0.828249 +v 2.089022 -2.390736 0.828249 +v 2.233393 -2.326100 0.828249 +v 2.337072 -2.210738 0.828249 +v 2.402007 -2.046054 0.828249 +v 2.451957 -1.870505 0.828249 +v -1.726910 2.478944 0.828249 +v -1.691576 2.266718 0.828249 +v -1.662527 2.050685 0.828249 +v -1.638774 1.838366 0.828249 +v -1.917218 2.442239 0.828249 +v -1.866987 2.234854 0.828249 +v -1.832025 2.023475 0.828249 +v -2.083606 2.389305 0.828249 +v -2.023901 2.192299 0.828249 +v -1.997414 1.992163 0.828249 +v -2.174474 2.159963 0.828249 +v -2.227836 2.326449 0.828249 +v -2.186328 1.986521 0.828249 +v -2.397010 2.044856 0.828249 +v -2.331794 2.211457 0.828249 +v -2.207204 1.815353 0.828249 +v -2.444331 1.867531 0.828249 +v -1.990374 1.803748 0.828249 +v -1.809500 1.819213 0.828249 +v -2.470936 1.672890 0.828249 +v -2.226574 1.637237 0.828249 +v -1.997736 1.621381 0.828249 +v -1.802890 1.623854 0.828249 +v -1.624489 1.633170 0.828249 +v -2.471652 1.282109 0.828249 +v -2.237881 1.267568 0.828249 +v -2.011834 1.258051 0.828249 +v -1.807436 1.255624 0.828249 +v -1.617879 1.258046 0.828249 +v -2.239198 -1.833753 0.828249 +v -2.054026 -1.809961 0.828249 +v -2.195428 -1.983178 0.828249 +v -2.052972 -1.954711 0.828249 +v -2.429499 -1.898374 0.828249 +v -2.348713 -2.083587 0.828249 +v -1.806391 -2.441791 0.828249 +v -1.756060 -2.234771 0.828249 +v 2.190002 -1.988954 0.828249 +v 2.176195 -2.160459 0.828249 +v 2.215734 -1.819898 0.828249 +v 2.490763 1.312141 0.828249 +v 2.283613 1.294718 0.828249 +v 2.471751 1.710792 0.828249 +v 2.266917 1.669124 0.828249 +v 2.428750 1.904969 0.828249 +v 2.240490 1.837467 0.828249 +v 2.347083 2.086544 0.828249 +v 2.195218 1.984493 0.828249 +v 2.211993 2.248991 0.828249 +v 2.029298 2.365957 0.828249 +v -1.689252 -1.840052 0.828249 +v -1.715207 -2.029342 0.828249 +v -1.874938 -1.821585 0.828249 +v -1.897069 -1.990787 0.828249 +v -1.946914 -2.176341 0.828249 +v -2.100663 -2.098011 0.828249 +v 1.670543 1.293519 0.828249 +v 1.681064 1.662625 0.828249 +v 1.692998 1.844781 0.828249 +v 1.868828 1.289154 0.828249 +v 1.869964 1.654078 0.828249 +v 1.876411 1.825309 0.828249 +v 1.995717 -1.806325 0.828249 +v 1.812981 -1.818556 0.828249 +v 2.073091 1.287028 0.828249 +v 2.062775 1.650774 0.828249 +v 2.055266 1.812888 0.828249 +v 1.998846 -1.992604 0.828249 +v -2.211720 -2.249479 0.828249 +v -2.024907 -2.369038 0.828249 +v 1.737470 -2.480836 0.828249 +v 1.697472 -2.264936 0.828249 +v 1.665477 -2.046145 0.828249 +v 1.642197 -1.834420 0.828249 +v 1.924719 -2.443898 0.828249 +v 1.869851 -2.233570 0.828249 +v 1.833256 -2.021124 0.828249 +v 2.025101 -2.192015 0.828249 +v 2.035424 3.537355 0.797243 +v 2.032904 3.513470 0.821225 +v -1.863330 3.522991 0.821224 +v -1.864541 3.546966 0.797237 +v 1.912024 -3.521256 0.821222 +v 1.913807 -3.545207 0.797231 +v 2.223325 -3.494433 0.821225 +v 2.227438 -3.518069 0.797243 +v 2.554446 -3.404512 0.821225 +v 2.563621 -3.426670 0.797243 +v 2.911972 -3.188071 0.821225 +v 2.926858 -3.206877 0.797243 +v 3.245482 -2.832371 0.821225 +v 3.265271 -2.845921 0.797243 +v 3.438047 -2.451490 0.821225 +v 3.460796 -2.459094 0.797243 +v 3.508474 -2.107715 0.821225 +v 3.532295 -2.110601 0.797243 +v 3.523260 1.393216 0.821222 +v 3.547219 1.394158 0.797228 +v 3.521118 1.907802 0.821222 +v 3.545063 1.909853 0.797228 +v 3.483173 2.257736 0.821225 +v 3.506629 2.262810 0.797243 +v 3.322561 2.696601 0.821225 +v 3.343537 2.708241 0.797243 +v 2.946124 3.142072 0.821225 +v 2.961503 3.160474 0.797243 +v 2.467509 3.449110 0.797243 +v 2.459411 3.426527 0.821225 +v -2.167480 3.502245 0.821225 +v -2.170987 3.525977 0.797243 +v -2.498511 3.423762 0.821225 +v -2.506749 3.446285 0.797243 +v -2.844664 3.241229 0.821225 +v -2.858510 3.260816 0.797243 +v -3.190767 2.901086 0.821225 +v -3.209802 2.915673 0.797243 +v -3.418802 2.505641 0.821225 +v -3.441220 2.514171 0.797243 +v -3.503417 2.151901 0.821225 +v -3.527164 2.155330 0.797243 +v -3.523260 1.841861 0.821218 +v -3.547219 1.843590 0.797213 +v -3.523261 1.354553 0.821218 +v -3.547220 1.355811 0.797212 +v -3.486046 -2.241278 0.821225 +v -3.509550 -2.246127 0.797243 +v -3.328112 -2.686231 0.821225 +v -3.349171 -2.697721 0.797243 +v -2.948667 -3.138649 0.821225 +v -2.964088 -3.157015 0.797243 +v -2.453908 -3.427841 0.821225 +v -2.461956 -3.450443 0.797243 +v -2.022139 -3.514407 0.821225 +v -2.024580 -3.538303 0.797243 +v 2.032904 3.513470 -0.811512 +v 2.035424 3.537355 -0.787530 +v 1.913806 -3.545207 -0.787518 +v 1.912024 -3.521256 -0.811509 +v 2.227438 -3.518069 -0.787530 +v 2.223325 -3.494433 -0.811512 +v 2.563621 -3.426670 -0.787530 +v 2.554446 -3.404512 -0.811512 +v 2.926858 -3.206877 -0.787530 +v 2.911972 -3.188071 -0.811512 +v 3.265271 -2.845921 -0.787530 +v 3.245482 -2.832371 -0.811512 +v 3.460796 -2.459094 -0.787530 +v 3.438047 -2.451490 -0.811512 +v 3.532295 -2.110601 -0.787530 +v 3.508474 -2.107715 -0.811512 +v 3.547219 1.394158 -0.787516 +v 3.523260 1.393216 -0.811509 +v 3.545062 1.909853 -0.787516 +v 3.521118 1.907802 -0.811509 +v 3.506629 2.262810 -0.787530 +v 3.483173 2.257736 -0.811512 +v 3.343537 2.708241 -0.787530 +v 3.322561 2.696601 -0.811512 +v 2.961503 3.160475 -0.787530 +v 2.946124 3.142072 -0.811512 +v 2.459411 3.426527 -0.811512 +v 2.467509 3.449110 -0.787530 +v -1.864541 3.546966 -0.787524 +v -1.863330 3.522991 -0.811511 +v -2.170987 3.525977 -0.787530 +v -2.167480 3.502245 -0.811512 +v -2.506748 3.446285 -0.787530 +v -2.498511 3.423761 -0.811512 +v -2.858509 3.260816 -0.787530 +v -2.844664 3.241229 -0.811512 +v -3.209802 2.915673 -0.787530 +v -3.190766 2.901086 -0.811512 +v -3.441221 2.514171 -0.787530 +v -3.418802 2.505641 -0.811512 +v -3.527164 2.155330 -0.787530 +v -3.503417 2.151901 -0.811512 +v -3.547219 1.843590 -0.787500 +v -3.523260 1.841861 -0.811505 +v -3.547220 1.355812 -0.787499 +v -3.523261 1.354553 -0.811505 +v -3.509550 -2.246127 -0.787530 +v -3.486046 -2.241278 -0.811512 +v -3.349171 -2.697721 -0.787530 +v -3.328112 -2.686231 -0.811512 +v -2.964088 -3.157016 -0.787530 +v -2.948667 -3.138649 -0.811512 +v -2.461956 -3.450443 -0.787530 +v -2.453908 -3.427841 -0.811512 +v -2.024580 -3.538303 -0.787530 +v -2.022139 -3.514407 -0.811512 +vt 0.750890 0.214184 +vt 0.751471 0.351387 +vt 0.750262 0.351409 +vt 0.749681 0.214197 +vt 0.752679 0.351350 +vt 0.752099 0.214167 +vt 0.748960 0.096982 +vt 0.750169 0.096981 +vt 0.751377 0.096990 +vt 0.751780 0.675226 +vt 0.752989 0.675235 +vt 0.753132 0.807160 +vt 0.751925 0.807198 +vt 0.754198 0.675248 +vt 0.754337 0.807095 +vt 0.626840 0.341138 +vt 0.625632 0.341204 +vt 0.624615 0.232162 +vt 0.625823 0.232129 +vt 0.624423 0.341247 +vt 0.623406 0.232191 +vt 0.635912 0.097413 +vt 0.637120 0.097393 +vt 0.637568 0.214993 +vt 0.636359 0.214988 +vt 0.638329 0.097383 +vt 0.638777 0.214994 +vt 0.637221 0.079562 +vt 0.638429 0.079565 +vt 0.637261 0.065174 +vt 0.638468 0.065182 +vt 0.748546 0.064776 +vt 0.748706 0.079205 +vt 0.636013 0.079569 +vt 0.636054 0.065169 +vt 0.639586 0.351814 +vt 0.638377 0.351804 +vt 0.637168 0.351779 +vt 0.638454 0.361951 +vt 0.637246 0.361960 +vt 0.639663 0.361938 +vt 0.638450 0.675922 +vt 0.639658 0.675901 +vt 0.640337 0.807134 +vt 0.639132 0.807077 +vt 0.640867 0.675883 +vt 0.641544 0.807164 +vt 0.513609 0.342208 +vt 0.512399 0.342188 +vt 0.511257 0.233144 +vt 0.512466 0.233146 +vt 0.511191 0.342147 +vt 0.512600 0.356371 +vt 0.511391 0.356354 +vt 0.512744 0.366802 +vt 0.511536 0.366816 +vt 0.513809 0.356371 +vt 0.624493 0.355370 +vt 0.513953 0.366782 +vt 0.512909 0.378384 +vt 0.511702 0.378404 +vt 0.513090 0.390511 +vt 0.511883 0.390531 +vt 0.514117 0.378361 +vt 0.624547 0.365786 +vt 0.624602 0.377340 +vt 0.514297 0.390488 +vt 0.513246 0.402740 +vt 0.512037 0.402767 +vt 0.513355 0.416268 +vt 0.512149 0.416298 +vt 0.514454 0.402716 +vt 0.624652 0.389481 +vt 0.624726 0.401690 +vt 0.514563 0.416245 +vt 0.513503 0.432431 +vt 0.512299 0.432449 +vt 0.513714 0.449776 +vt 0.512506 0.449786 +vt 0.514709 0.432413 +vt 0.624873 0.415214 +vt 0.625030 0.431372 +vt 0.514921 0.449764 +vt 0.513840 0.467053 +vt 0.512636 0.467057 +vt 0.513990 0.483297 +vt 0.512784 0.483292 +vt 0.515048 0.467048 +vt 0.625140 0.448733 +vt 0.625327 0.466018 +vt 0.515198 0.483298 +vt 0.514109 0.497376 +vt 0.512900 0.497373 +vt 0.514181 0.510145 +vt 0.512974 0.510148 +vt 0.515317 0.497377 +vt 0.625469 0.482251 +vt 0.625603 0.496325 +vt 0.515389 0.510145 +vt 0.514252 0.522264 +vt 0.513045 0.522281 +vt 0.514307 0.537705 +vt 0.513100 0.537750 +vt 0.515459 0.522256 +vt 0.625763 0.509059 +vt 0.625914 0.521167 +vt 0.515515 0.537677 +vt 0.515262 0.663733 +vt 0.514053 0.663741 +vt 0.516471 0.663726 +vt 0.516082 0.766748 +vt 0.514873 0.766723 +vt 0.517291 0.766759 +vt 0.516283 0.788538 +vt 0.515075 0.788499 +vt 0.517493 0.788554 +vt 0.628140 0.765961 +vt 0.628278 0.787723 +vt 0.516503 0.802786 +vt 0.515294 0.802769 +vt 0.516668 0.814196 +vt 0.515459 0.814214 +vt 0.517712 0.802786 +vt 0.628283 0.801922 +vt 0.517876 0.814172 +vt 0.516881 0.827608 +vt 0.515675 0.827635 +vt 0.517083 0.843011 +vt 0.515877 0.843035 +vt 0.518088 0.827580 +vt 0.628299 0.813333 +vt 0.628298 0.826716 +vt 0.518289 0.842989 +vt 0.517243 0.860763 +vt 0.516038 0.860769 +vt 0.517239 0.880488 +vt 0.516034 0.880453 +vt 0.518448 0.860759 +vt 0.628334 0.842160 +vt 0.628438 0.859926 +vt 0.518443 0.880528 +vt 0.516584 0.902019 +vt 0.634995 0.009091 +vt 0.637042 0.030130 +vt 0.635839 0.030174 +vt 0.517797 0.902151 +vt 0.628725 0.879639 +vt 0.749109 0.008141 +vt 0.638244 0.030080 +vt 0.637251 0.048751 +vt 0.638457 0.048744 +vt 0.748477 0.029716 +vt 0.748423 0.048345 +vt 0.636044 0.048756 +vt 0.638550 0.373291 +vt 0.637342 0.373304 +vt 0.638659 0.385256 +vt 0.637452 0.385270 +vt 0.639758 0.373274 +vt 0.750278 0.361530 +vt 0.750286 0.372840 +vt 0.639867 0.385239 +vt 0.638748 0.397414 +vt 0.637539 0.397432 +vt 0.638810 0.410463 +vt 0.637606 0.410482 +vt 0.639955 0.397397 +vt 0.750284 0.384813 +vt 0.750300 0.396950 +vt 0.640017 0.410446 +vt 0.638900 0.425225 +vt 0.637694 0.425241 +vt 0.638983 0.441590 +vt 0.637775 0.441604 +vt 0.640107 0.425211 +vt 0.750348 0.410000 +vt 0.750376 0.424745 +vt 0.640192 0.441579 +vt 0.639008 0.459689 +vt 0.637804 0.459691 +vt 0.639123 0.477301 +vt 0.637917 0.477288 +vt 0.640215 0.459687 +vt 0.750423 0.441112 +vt 0.750553 0.459224 +vt 0.640331 0.477307 +vt 0.639192 0.492107 +vt 0.637983 0.492096 +vt 0.639189 0.505318 +vt 0.637982 0.505311 +vt 0.640400 0.492116 +vt 0.750592 0.476840 +vt 0.750654 0.491647 +vt 0.640396 0.505328 +vt 0.639171 0.517903 +vt 0.637963 0.517896 +vt 0.639156 0.529548 +vt 0.637947 0.529552 +vt 0.640379 0.517912 +vt 0.750775 0.504832 +vt 0.750905 0.517433 +vt 0.640365 0.529551 +vt 0.639152 0.539753 +vt 0.637943 0.539796 +vt 0.639149 0.553036 +vt 0.637941 0.553105 +vt 0.640361 0.539729 +vt 0.751023 0.529047 +vt 0.751117 0.539234 +vt 0.640359 0.552993 +vt 0.639235 0.573824 +vt 0.638027 0.573880 +vt 0.640444 0.573786 +vt 0.751238 0.552469 +vt 0.751336 0.573270 +vt 0.640507 0.825069 +vt 0.639301 0.825063 +vt 0.640559 0.840696 +vt 0.639353 0.840705 +vt 0.641713 0.825068 +vt 0.751831 0.825009 +vt 0.641766 0.840687 +vt 0.640600 0.858613 +vt 0.639395 0.858609 +vt 0.640471 0.878540 +vt 0.639266 0.878497 +vt 0.641805 0.858619 +vt 0.751833 0.840619 +vt 0.751847 0.858533 +vt 0.641674 0.878589 +vt 0.639658 0.900390 +vt 0.506930 0.010279 +vt 0.509189 0.031660 +vt 0.507987 0.031716 +vt 0.640870 0.900532 +vt 0.752022 0.878430 +vt 0.621211 0.008140 +vt 0.510391 0.031598 +vt 0.509568 0.050595 +vt 0.508361 0.050614 +vt 0.509737 0.067269 +vt 0.508530 0.067282 +vt 0.510775 0.050575 +vt 0.620756 0.030089 +vt 0.620870 0.048997 +vt 0.510944 0.067258 +vt 0.509874 0.081849 +vt 0.508668 0.081911 +vt 0.510048 0.233137 +vt 0.511080 0.081809 +vt 0.621127 0.065635 +vt 0.621357 0.080155 +vt 0.749914 0.079191 +vt 0.751121 0.079188 +vt 0.749753 0.064759 +vt 0.750960 0.064744 +vt 0.625702 0.355347 +vt 0.625756 0.365783 +vt 0.626911 0.355307 +vt 0.626964 0.365774 +vt 0.625810 0.377341 +vt 0.625859 0.389481 +vt 0.627018 0.377339 +vt 0.627066 0.389478 +vt 0.625934 0.401691 +vt 0.626081 0.415215 +vt 0.627143 0.401695 +vt 0.627287 0.415221 +vt 0.626236 0.431367 +vt 0.626348 0.448722 +vt 0.627440 0.431363 +vt 0.627556 0.448710 +vt 0.626534 0.466001 +vt 0.626676 0.482228 +vt 0.627738 0.465982 +vt 0.627882 0.482201 +vt 0.626810 0.496301 +vt 0.626971 0.509038 +vt 0.628019 0.496276 +vt 0.628178 0.509019 +vt 0.627121 0.521152 +vt 0.627345 0.536528 +vt 0.626137 0.536520 +vt 0.628329 0.521147 +vt 0.628553 0.536552 +vt 0.627334 0.662952 +vt 0.628543 0.662939 +vt 0.629752 0.662927 +vt 0.629349 0.765930 +vt 0.630557 0.765886 +vt 0.629487 0.787688 +vt 0.630695 0.787630 +vt 0.629492 0.801904 +vt 0.629508 0.813337 +vt 0.630701 0.801868 +vt 0.630716 0.813336 +vt 0.629506 0.826726 +vt 0.629543 0.842164 +vt 0.630713 0.826734 +vt 0.630751 0.842169 +vt 0.629643 0.859912 +vt 0.629927 0.879585 +vt 0.630848 0.859900 +vt 0.631129 0.879534 +vt 0.630886 0.901390 +vt 0.749681 0.029752 +vt 0.632087 0.901212 +vt 0.750886 0.029784 +vt 0.749629 0.048342 +vt 0.750834 0.048337 +vt 0.751487 0.361532 +vt 0.752696 0.361529 +vt 0.751494 0.372846 +vt 0.751492 0.384819 +vt 0.752702 0.372849 +vt 0.752699 0.384822 +vt 0.751509 0.396957 +vt 0.751556 0.410007 +vt 0.752719 0.396965 +vt 0.752763 0.410016 +vt 0.751583 0.424750 +vt 0.751630 0.441112 +vt 0.752789 0.424756 +vt 0.752836 0.441117 +vt 0.751759 0.459216 +vt 0.751799 0.476823 +vt 0.752964 0.459208 +vt 0.753005 0.476799 +vt 0.751862 0.491628 +vt 0.751982 0.504812 +vt 0.753070 0.491606 +vt 0.753189 0.504794 +vt 0.752113 0.517412 +vt 0.752232 0.529033 +vt 0.753321 0.517395 +vt 0.753440 0.529027 +vt 0.752327 0.539246 +vt 0.752448 0.552502 +vt 0.753536 0.539279 +vt 0.753657 0.552561 +vt 0.752546 0.573298 +vt 0.753754 0.573344 +vt 0.753037 0.825007 +vt 0.753042 0.840623 +vt 0.754243 0.824995 +vt 0.754248 0.840628 +vt 0.753053 0.858523 +vt 0.753225 0.878382 +vt 0.754259 0.858516 +vt 0.754427 0.878337 +vt 0.754077 0.900527 +vt 0.621961 0.030115 +vt 0.755279 0.900354 +vt 0.623166 0.030138 +vt 0.622076 0.048987 +vt 0.622335 0.065616 +vt 0.623281 0.048974 +vt 0.623542 0.065599 +vt 0.622564 0.080168 +vt 0.623770 0.080203 +vt 0.048278 0.967284 +vt 0.033004 0.951739 +vt 0.100573 0.905614 +vt 0.064581 0.978224 +vt 0.020578 0.934183 +vt 0.095079 0.900289 +vt 0.105045 0.900739 +vt 0.106657 0.909850 +vt 0.080755 0.985300 +vt 0.012817 0.917207 +vt 0.090394 0.894095 +vt 0.100417 0.896074 +vt 0.109196 0.896507 +vt 0.110392 0.904314 +vt 0.113078 0.913105 +vt 0.095637 0.989251 +vt 0.008591 0.901331 +vt 0.086735 0.887251 +vt 0.096526 0.890528 +vt 0.105650 0.892538 +vt 0.111945 0.893586 +vt 0.113664 0.899152 +vt 0.116160 0.906969 +vt 0.119583 0.915488 +vt 0.113258 0.991070 +vt 0.006770 0.887071 +vt 0.108832 0.111182 +vt 0.114427 0.112502 +vt 0.113063 0.118119 +vt 0.106900 0.116621 +vt 0.110742 0.106433 +vt 0.115590 0.107323 +vt 0.119828 0.113175 +vt 0.118946 0.119123 +vt 0.111655 0.124173 +vt 0.105071 0.122676 +vt 0.100327 0.114558 +vt 0.102835 0.108927 +vt 0.105691 0.104012 +vt 0.111920 0.102980 +vt 0.115617 0.102376 +vt 0.120453 0.107360 +vt 0.124682 0.119702 +vt 0.125241 0.113488 +vt 0.117952 0.125290 +vt 0.110364 0.130660 +vt 0.103469 0.129272 +vt 0.098161 0.120832 +vt 0.093593 0.112004 +vt 0.096661 0.105921 +vt 0.100471 0.100486 +vt 0.109176 0.100093 +vt 0.113573 0.097453 +vt 0.120230 0.101561 +vt 0.125549 0.107220 +vt 0.124001 0.125996 +vt 0.130501 0.119998 +vt 0.130849 0.113566 +vt 0.116992 0.131762 +vt 0.109130 0.141402 +vt 0.102038 0.140227 +vt 0.096334 0.127676 +vt 0.091125 0.118681 +vt 0.090532 0.102345 +vt 0.086950 0.109032 +vt 0.095114 0.096282 +vt 0.105007 0.095896 +vt 0.118565 0.095662 +vt 0.110254 0.092348 +vt 0.125213 0.100840 +vt 0.130984 0.106974 +vt 0.123323 0.132502 +vt 0.130047 0.126422 +vt 0.136633 0.120152 +vt 0.136839 0.113535 +vt 0.116002 0.142380 +vt 0.106298 0.243783 +vt 0.099215 0.243670 +vt 0.094796 0.138951 +vt 0.089114 0.125901 +vt 0.084163 0.116267 +vt 0.012910 0.078997 +vt 0.020569 0.062300 +vt 0.100489 0.091049 +vt 0.032766 0.045027 +vt 0.123834 0.094293 +vt 0.115917 0.089670 +vt 0.106451 0.086854 +vt 0.130621 0.100207 +vt 0.136864 0.106695 +vt 0.122588 0.143066 +vt 0.129593 0.132990 +vt 0.136335 0.126700 +vt 0.146144 0.120213 +vt 0.146275 0.113408 +vt 0.113382 0.243883 +vt 0.108952 0.366688 +vt 0.101423 0.367687 +vt 0.092140 0.243584 +vt 0.087512 0.137592 +vt 0.081963 0.123975 +vt 0.008697 0.094644 +vt 0.047773 0.029679 +vt 0.129476 0.093252 +vt 0.121707 0.087692 +vt 0.112747 0.083591 +vt 0.063859 0.018753 +vt 0.136510 0.099658 +vt 0.146261 0.106367 +vt 0.120459 0.243931 +vt 0.129089 0.143539 +vt 0.136036 0.133335 +vt 0.145941 0.126917 +vt 0.162101 0.120230 +vt 0.162221 0.113197 +vt 0.116416 0.365781 +vt 0.109815 0.372698 +vt 0.102349 0.373825 +vt 0.093875 0.368715 +vt 0.085094 0.243517 +vt 0.080299 0.136170 +vt 0.006837 0.108766 +vt 0.135583 0.092448 +vt 0.127768 0.086262 +vt 0.119123 0.081154 +vt 0.079829 0.011593 +vt 0.145974 0.099150 +vt 0.162250 0.105974 +vt 0.123770 0.365030 +vt 0.127577 0.243919 +vt 0.135705 0.143881 +vt 0.145741 0.133655 +vt 0.161942 0.127159 +vt 0.257537 0.121165 +vt 0.257698 0.113806 +vt 0.117192 0.371721 +vt 0.110851 0.378517 +vt 0.103500 0.379690 +vt 0.094853 0.375008 +vt 0.086392 0.369853 +vt 0.078097 0.243458 +vt 0.006323 0.126451 +vt 0.145285 0.091813 +vt 0.134249 0.085226 +vt 0.125719 0.079392 +vt 0.094489 0.007540 +vt 0.162107 0.098642 +vt 0.257880 0.106294 +vt 0.131000 0.364445 +vt 0.124415 0.370991 +vt 0.134780 0.243836 +vt 0.145532 0.144228 +vt 0.161796 0.134069 +vt 0.257413 0.128393 +vt 0.368564 0.124245 +vt 0.368297 0.117783 +vt 0.118079 0.377561 +vt 0.111959 0.384265 +vt 0.104791 0.385344 +vt 0.096099 0.380957 +vt 0.087425 0.376367 +vt 0.079063 0.371182 +vt 0.006142 0.243774 +vt 0.161713 0.091281 +vt 0.144319 0.084495 +vt 0.132675 0.078152 +vt 0.107598 0.005628 +vt 0.258034 0.098706 +vt 0.368229 0.110859 +vt 0.138091 0.364034 +vt 0.131495 0.370490 +vt 0.125107 0.376946 +vt 0.145129 0.243702 +vt 0.161666 0.144717 +vt 0.257343 0.135510 +vt 0.368931 0.130428 +vt 0.378481 0.117952 +vt 0.378992 0.124130 +vt 0.118964 0.383469 +vt 0.113037 0.390060 +vt 0.106134 0.390848 +vt 0.097531 0.386583 +vt 0.088768 0.382490 +vt 0.080163 0.378024 +vt 0.006169 0.380715 +vt 0.161149 0.083979 +vt 0.258112 0.091123 +vt 0.143198 0.077331 +vt 0.118913 0.004888 +vt 0.368537 0.103309 +vt 0.378138 0.111376 +vt 0.138439 0.370198 +vt 0.148147 0.363757 +vt 0.131980 0.376608 +vt 0.125735 0.383077 +vt 0.161682 0.243535 +vt 0.257343 0.146158 +vt 0.369301 0.136518 +vt 0.379566 0.130099 +vt 0.385179 0.117697 +vt 0.385941 0.123628 +vt 0.119735 0.389611 +vt 0.113667 0.396265 +vt 0.107137 0.396530 +vt 0.099069 0.391908 +vt 0.090339 0.388218 +vt 0.081626 0.384463 +vt 0.006542 0.390782 +vt 0.160497 0.076824 +vt 0.258119 0.083648 +vt 0.369396 0.094966 +vt 0.133102 0.004773 +vt 0.378245 0.104150 +vt 0.384522 0.111493 +vt 0.148365 0.370081 +vt 0.138741 0.376485 +vt 0.164272 0.363573 +vt 0.132359 0.382977 +vt 0.126187 0.389569 +vt 0.258038 0.242916 +vt 0.369713 0.146211 +vt 0.380100 0.136049 +vt 0.386710 0.129458 +vt 0.393129 0.122715 +vt 0.392119 0.116981 +vt 0.120012 0.396320 +vt 0.107407 0.402718 +vt 0.113431 0.403244 +vt 0.100429 0.397122 +vt 0.092059 0.393548 +vt 0.083371 0.390484 +vt 0.007621 0.401944 +vt 0.154830 0.004734 +vt 0.258057 0.076387 +vt 0.370685 0.086413 +vt 0.379085 0.096021 +vt 0.384335 0.104694 +vt 0.391139 0.111158 +vt 0.164387 0.370103 +vt 0.148519 0.376556 +vt 0.138924 0.383058 +vt 0.259761 0.365171 +vt 0.132532 0.389778 +vt 0.126166 0.396688 +vt 0.371838 0.242246 +vt 0.380637 0.145695 +vt 0.387388 0.135358 +vt 0.394078 0.128488 +vt 0.400491 0.121517 +vt 0.399259 0.115914 +vt 0.119415 0.403927 +vt 0.101326 0.402416 +vt 0.106378 0.409213 +vt 0.112078 0.410603 +vt 0.093783 0.398539 +vt 0.085320 0.396075 +vt 0.009707 0.413574 +vt 0.257775 0.004729 +vt 0.372280 0.078232 +vt 0.380572 0.087609 +vt 0.384985 0.096978 +vt 0.390592 0.104890 +vt 0.397985 0.110420 +vt 0.259715 0.372040 +vt 0.164441 0.376803 +vt 0.148564 0.383319 +vt 0.138914 0.390083 +vt 0.370532 0.368032 +vt 0.132300 0.397204 +vt 0.125377 0.404702 +vt 0.382922 0.242158 +vt 0.388014 0.145050 +vt 0.394876 0.134424 +vt 0.401594 0.127302 +vt 0.407956 0.120161 +vt 0.406555 0.114609 +vt 0.117899 0.411916 +vt 0.100761 0.407828 +vt 0.095367 0.403252 +vt 0.109359 0.417947 +vt 0.103484 0.415816 +vt 0.087443 0.401279 +vt 0.013102 0.425048 +vt 0.383910 0.004997 +vt 0.382618 0.079535 +vt 0.386489 0.088928 +vt 0.390884 0.097818 +vt 0.397046 0.104708 +vt 0.405055 0.109326 +vt 0.370132 0.374691 +vt 0.259629 0.378983 +vt 0.164409 0.383762 +vt 0.148453 0.390506 +vt 0.138584 0.397702 +vt 0.380492 0.368555 +vt 0.131460 0.405450 +vt 0.123879 0.413069 +vt 0.390265 0.242082 +vt 0.395550 0.144256 +vt 0.402487 0.133339 +vt 0.409180 0.126012 +vt 0.415385 0.118486 +vt 0.413824 0.112844 +vt 0.115422 0.419766 +vt 0.097733 0.413395 +vt 0.096364 0.407063 +vt 0.089708 0.406140 +vt 0.077185 0.489282 +vt 0.064009 0.483041 +vt 0.018312 0.436786 +vt 0.399187 0.005773 +vt 0.388864 0.081129 +vt 0.392236 0.090381 +vt 0.396825 0.098449 +vt 0.403731 0.104116 +vt 0.412114 0.107575 +vt 0.379851 0.375139 +vt 0.369724 0.381210 +vt 0.259515 0.386029 +vt 0.164271 0.391068 +vt 0.148120 0.398208 +vt 0.137807 0.406054 +vt 0.386920 0.369283 +vt 0.130110 0.414008 +vt 0.121735 0.421250 +vt 0.397609 0.242017 +vt 0.403182 0.143370 +vt 0.410146 0.132192 +vt 0.416720 0.124506 +vt 0.422635 0.116332 +vt 0.420886 0.110397 +vt 0.089633 0.493021 +vt 0.049585 0.473365 +vt 0.092882 0.410299 +vt 0.025844 0.449208 +vt 0.411023 0.007519 +vt 0.394869 0.083022 +vt 0.397858 0.091865 +vt 0.402853 0.098782 +vt 0.410388 0.102610 +vt 0.418924 0.104865 +vt 0.385985 0.375830 +vt 0.379203 0.381515 +vt 0.369408 0.387691 +vt 0.259387 0.393207 +vt 0.164009 0.398753 +vt 0.147497 0.406518 +vt 0.136685 0.414678 +vt 0.393703 0.370367 +vt 0.128350 0.422373 +vt 0.101874 0.495191 +vt 0.404958 0.241952 +vt 0.410853 0.142447 +vt 0.417754 0.130904 +vt 0.424100 0.122668 +vt 0.493542 0.083760 +vt 0.495978 0.095478 +vt 0.036126 0.461628 +vt 0.423181 0.010692 +vt 0.400684 0.085176 +vt 0.403403 0.093276 +vt 0.408778 0.097875 +vt 0.416762 0.099682 +vt 0.489699 0.072367 +vt 0.392416 0.376929 +vt 0.385017 0.382075 +vt 0.378675 0.387776 +vt 0.369284 0.394234 +vt 0.259272 0.400493 +vt 0.163607 0.406845 +vt 0.146666 0.415044 +vt 0.135319 0.423108 +vt 0.400768 0.371711 +vt 0.113353 0.496230 +vt 0.412312 0.241880 +vt 0.418478 0.141440 +vt 0.425214 0.129400 +vt 0.497313 0.106849 +vt 0.435986 0.015997 +vt 0.406362 0.087554 +vt 0.407757 0.093990 +vt 0.414413 0.094790 +vt 0.483649 0.060513 +vt 0.399145 0.378388 +vt 0.391012 0.383059 +vt 0.384159 0.388077 +vt 0.378392 0.394013 +vt 0.369608 0.400938 +vt 0.259199 0.407863 +vt 0.163116 0.415072 +vt 0.145710 0.423392 +vt 0.123514 0.496579 +vt 0.408040 0.373218 +vt 0.419637 0.241792 +vt 0.425972 0.140301 +vt 0.497854 0.117205 +vt 0.449765 0.024135 +vt 0.411179 0.090608 +vt 0.474591 0.047414 +vt 0.406173 0.380158 +vt 0.397293 0.384526 +vt 0.389651 0.388736 +vt 0.383558 0.393892 +vt 0.378727 0.400357 +vt 0.370637 0.407900 +vt 0.259158 0.415245 +vt 0.162591 0.423161 +vt 0.136768 0.496582 +vt 0.415341 0.374891 +vt 0.426895 0.241683 +vt 0.497962 0.131331 +vt 0.463104 0.034732 +vt 0.413282 0.382227 +vt 0.403962 0.386538 +vt 0.395337 0.390038 +vt 0.388494 0.393940 +vt 0.383784 0.399689 +vt 0.380052 0.406937 +vt 0.372168 0.414946 +vt 0.259138 0.422567 +vt 0.157527 0.496584 +vt 0.422488 0.376731 +vt 0.498003 0.240302 +vt 0.420253 0.384585 +vt 0.410756 0.389040 +vt 0.401404 0.392270 +vt 0.393405 0.394838 +vt 0.388463 0.398909 +vt 0.385408 0.405637 +vt 0.382090 0.413605 +vt 0.374000 0.421900 +vt 0.259467 0.496589 +vt 0.497375 0.391801 +vt 0.495554 0.406061 +vt 0.417410 0.391981 +vt 0.407619 0.395257 +vt 0.398495 0.397268 +vt 0.392200 0.398316 +vt 0.390481 0.403882 +vt 0.387984 0.411699 +vt 0.384562 0.420218 +vt 0.390887 0.495800 +vt 0.491328 0.421937 +vt 0.413751 0.398824 +vt 0.403727 0.400803 +vt 0.394949 0.401236 +vt 0.393753 0.409043 +vt 0.391067 0.417834 +vt 0.408508 0.493980 +vt 0.483567 0.438912 +vt 0.409066 0.405018 +vt 0.399099 0.405469 +vt 0.397488 0.414579 +vt 0.423390 0.490029 +vt 0.471140 0.456469 +vt 0.403572 0.410343 +vt 0.439563 0.482954 +vt 0.455867 0.472013 +vt 0.395314 0.606453 +vt 0.397245 0.611892 +vt 0.391083 0.613391 +vt 0.389718 0.607773 +vt 0.401310 0.604198 +vt 0.403819 0.609829 +vt 0.399074 0.617947 +vt 0.392490 0.619444 +vt 0.385200 0.614394 +vt 0.384318 0.608446 +vt 0.388556 0.602594 +vt 0.393404 0.601704 +vt 0.398454 0.599283 +vt 0.407485 0.601192 +vt 0.410552 0.607275 +vt 0.405984 0.616103 +vt 0.400677 0.624544 +vt 0.393781 0.625931 +vt 0.386193 0.620561 +vt 0.379463 0.614973 +vt 0.378905 0.608759 +vt 0.383692 0.602631 +vt 0.388529 0.597647 +vt 0.392225 0.598251 +vt 0.394969 0.595364 +vt 0.403674 0.595757 +vt 0.413613 0.597616 +vt 0.417195 0.604303 +vt 0.413020 0.613952 +vt 0.407811 0.622947 +vt 0.402107 0.635498 +vt 0.395016 0.636673 +vt 0.387154 0.627033 +vt 0.380145 0.621267 +vt 0.373644 0.615269 +vt 0.373296 0.608837 +vt 0.378596 0.602491 +vt 0.383916 0.596832 +vt 0.390572 0.592724 +vt 0.399138 0.591167 +vt 0.409032 0.591553 +vt 0.483577 0.557571 +vt 0.491236 0.574269 +vt 0.419983 0.611538 +vt 0.415031 0.621172 +vt 0.409350 0.634222 +vt 0.404930 0.738941 +vt 0.397847 0.739054 +vt 0.388144 0.637651 +vt 0.380822 0.627774 +vt 0.374099 0.621693 +vt 0.367513 0.615423 +vt 0.367307 0.608806 +vt 0.373161 0.602245 +vt 0.378933 0.596111 +vt 0.385581 0.590934 +vt 0.393892 0.587619 +vt 0.403657 0.586321 +vt 0.471379 0.540299 +vt 0.495448 0.589916 +vt 0.422182 0.619246 +vt 0.416633 0.632863 +vt 0.412005 0.738856 +vt 0.402722 0.862958 +vt 0.395193 0.861959 +vt 0.390763 0.739154 +vt 0.381558 0.638337 +vt 0.374553 0.628261 +vt 0.367811 0.621971 +vt 0.358002 0.615484 +vt 0.357871 0.608679 +vt 0.367282 0.601966 +vt 0.373524 0.595479 +vt 0.380311 0.589564 +vt 0.388228 0.584941 +vt 0.397694 0.582125 +vt 0.456372 0.524950 +vt 0.497308 0.604037 +vt 0.423847 0.631441 +vt 0.419051 0.738788 +vt 0.410270 0.863987 +vt 0.401796 0.869097 +vt 0.394329 0.867969 +vt 0.387729 0.861052 +vt 0.383686 0.739202 +vt 0.375057 0.638811 +vt 0.368110 0.628606 +vt 0.358204 0.622188 +vt 0.342044 0.615501 +vt 0.341924 0.608468 +vt 0.357885 0.601638 +vt 0.367635 0.594929 +vt 0.374670 0.588523 +vt 0.382439 0.582964 +vt 0.391398 0.578862 +vt 0.440287 0.514024 +vt 0.497823 0.621722 +vt 0.426048 0.738730 +vt 0.417753 0.865125 +vt 0.409292 0.870279 +vt 0.400645 0.874962 +vt 0.393294 0.873788 +vt 0.386953 0.866992 +vt 0.380375 0.860302 +vt 0.376569 0.739190 +vt 0.368441 0.639153 +vt 0.358405 0.628926 +vt 0.342204 0.622430 +vt 0.246609 0.616436 +vt 0.246448 0.609077 +vt 0.341896 0.601245 +vt 0.358172 0.594421 +vt 0.368563 0.587719 +vt 0.376377 0.581533 +vt 0.385022 0.576425 +vt 0.424317 0.506864 +vt 0.498003 0.739046 +vt 0.425082 0.866453 +vt 0.416720 0.871639 +vt 0.408046 0.876228 +vt 0.399354 0.880615 +vt 0.392186 0.879536 +vt 0.386066 0.872832 +vt 0.379730 0.866262 +vt 0.373145 0.859716 +vt 0.369365 0.739107 +vt 0.358613 0.639499 +vt 0.342349 0.629340 +vt 0.246732 0.623664 +vt 0.135582 0.619515 +vt 0.135849 0.613053 +vt 0.246266 0.601564 +vt 0.342039 0.593913 +vt 0.358860 0.587084 +vt 0.369897 0.580497 +vt 0.378427 0.574663 +vt 0.409657 0.502812 +vt 0.497976 0.875986 +vt 0.423982 0.873295 +vt 0.415377 0.877761 +vt 0.406613 0.881854 +vt 0.398011 0.886119 +vt 0.391108 0.885331 +vt 0.385181 0.878740 +vt 0.379038 0.872217 +vt 0.372650 0.865761 +vt 0.366054 0.859305 +vt 0.359016 0.738973 +vt 0.342479 0.639988 +vt 0.246802 0.630780 +vt 0.135214 0.625699 +vt 0.125153 0.619400 +vt 0.125664 0.613223 +vt 0.135916 0.606130 +vt 0.246112 0.593977 +vt 0.342433 0.586552 +vt 0.359827 0.579766 +vt 0.371471 0.573424 +vt 0.396548 0.500899 +vt 0.497603 0.886054 +vt 0.422519 0.879734 +vt 0.413806 0.883489 +vt 0.405075 0.887179 +vt 0.397007 0.891801 +vt 0.390478 0.891536 +vt 0.384410 0.884882 +vt 0.378410 0.878348 +vt 0.372165 0.871879 +vt 0.365706 0.865469 +vt 0.355998 0.859028 +vt 0.342463 0.738806 +vt 0.246802 0.641429 +vt 0.134844 0.631788 +vt 0.124579 0.625369 +vt 0.118205 0.618899 +vt 0.118967 0.612968 +vt 0.126007 0.606647 +vt 0.135609 0.598580 +vt 0.246033 0.586393 +vt 0.342997 0.579250 +vt 0.360948 0.572602 +vt 0.385233 0.500160 +vt 0.496524 0.897215 +vt 0.420774 0.885756 +vt 0.412086 0.888819 +vt 0.403716 0.892393 +vt 0.396738 0.897989 +vt 0.390714 0.898515 +vt 0.384133 0.891591 +vt 0.377958 0.884840 +vt 0.371786 0.878248 +vt 0.365403 0.871756 +vt 0.355780 0.865352 +vt 0.339873 0.858844 +vt 0.246107 0.738187 +vt 0.134432 0.641482 +vt 0.124046 0.631320 +vt 0.117436 0.624728 +vt 0.111016 0.617986 +vt 0.112026 0.612251 +vt 0.119624 0.606763 +vt 0.125900 0.599420 +vt 0.134750 0.590237 +vt 0.246027 0.578918 +vt 0.343649 0.572095 +vt 0.371044 0.500044 +vt 0.494438 0.908845 +vt 0.418824 0.891346 +vt 0.410361 0.893810 +vt 0.402818 0.897687 +vt 0.397767 0.904484 +vt 0.392067 0.905874 +vt 0.384730 0.899198 +vt 0.377979 0.891959 +vt 0.371612 0.885049 +vt 0.365221 0.878329 +vt 0.355626 0.871828 +vt 0.339758 0.865374 +vt 0.244384 0.860442 +vt 0.132307 0.737517 +vt 0.123509 0.640965 +vt 0.116757 0.630628 +vt 0.110067 0.623758 +vt 0.103655 0.616788 +vt 0.104886 0.611185 +vt 0.113007 0.606429 +vt 0.119810 0.599964 +vt 0.125060 0.591292 +vt 0.133461 0.581684 +vt 0.246088 0.571658 +vt 0.349316 0.500005 +vt 0.491043 0.920319 +vt 0.416702 0.896550 +vt 0.408778 0.898524 +vt 0.403383 0.903099 +vt 0.400660 0.911087 +vt 0.394785 0.913218 +vt 0.386245 0.907187 +vt 0.378768 0.899973 +vt 0.371845 0.892475 +vt 0.365231 0.885354 +vt 0.355581 0.878590 +vt 0.339704 0.872074 +vt 0.244429 0.867311 +vt 0.133613 0.863303 +vt 0.121223 0.737429 +vt 0.116131 0.640321 +vt 0.109269 0.629695 +vt 0.102551 0.622572 +vt 0.096189 0.615432 +vt 0.097591 0.609879 +vt 0.106161 0.605691 +vt 0.113554 0.600161 +vt 0.119160 0.592248 +vt 0.123574 0.582880 +vt 0.131865 0.573502 +vt 0.246370 0.500000 +vt 0.485833 0.932058 +vt 0.414437 0.901411 +vt 0.407781 0.902334 +vt 0.406412 0.908666 +vt 0.440135 0.978312 +vt 0.426959 0.984553 +vt 0.388723 0.915038 +vt 0.380266 0.908340 +vt 0.372685 0.900721 +vt 0.365561 0.892973 +vt 0.355692 0.885777 +vt 0.339736 0.879032 +vt 0.244516 0.874254 +vt 0.134013 0.869962 +vt 0.123653 0.863826 +vt 0.113880 0.737352 +vt 0.108596 0.639527 +vt 0.101658 0.628609 +vt 0.094966 0.621283 +vt 0.088761 0.613757 +vt 0.090321 0.608114 +vt 0.099090 0.604597 +vt 0.107099 0.599979 +vt 0.113262 0.593088 +vt 0.117657 0.584199 +vt 0.121528 0.574805 +vt 0.120236 0.500268 +vt 0.478301 0.944479 +vt 0.411263 0.905570 +vt 0.454559 0.968636 +vt 0.414511 0.988292 +vt 0.382410 0.916522 +vt 0.374035 0.909279 +vt 0.366337 0.901325 +vt 0.356025 0.893480 +vt 0.339874 0.886340 +vt 0.244630 0.881300 +vt 0.134421 0.876481 +vt 0.124294 0.870409 +vt 0.117225 0.864553 +vt 0.106536 0.737287 +vt 0.100963 0.638640 +vt 0.094000 0.627462 +vt 0.087426 0.619776 +vt 0.081511 0.611602 +vt 0.083259 0.605667 +vt 0.092031 0.602846 +vt 0.100415 0.599387 +vt 0.107321 0.593720 +vt 0.111910 0.585652 +vt 0.115282 0.576399 +vt 0.104959 0.501044 +vt 0.468019 0.956900 +vt 0.402270 0.990462 +vt 0.375795 0.917644 +vt 0.367460 0.909949 +vt 0.356648 0.901789 +vt 0.340136 0.894024 +vt 0.244758 0.888478 +vt 0.134737 0.882962 +vt 0.124942 0.876785 +vt 0.118159 0.871100 +vt 0.110442 0.865637 +vt 0.099187 0.737223 +vt 0.093292 0.637717 +vt 0.086392 0.626175 +vt 0.080045 0.617938 +vt 0.008168 0.590748 +vt 0.010604 0.579030 +vt 0.085222 0.600136 +vt 0.093758 0.597880 +vt 0.101293 0.594052 +vt 0.106287 0.587135 +vt 0.109277 0.578292 +vt 0.093122 0.502789 +vt 0.390792 0.991501 +vt 0.368826 0.918379 +vt 0.357478 0.910315 +vt 0.340538 0.902116 +vt 0.244872 0.895764 +vt 0.134861 0.889505 +vt 0.125470 0.883046 +vt 0.119128 0.877346 +vt 0.111728 0.872200 +vt 0.103377 0.866981 +vt 0.091833 0.737150 +vt 0.085668 0.636710 +vt 0.078932 0.624670 +vt 0.006832 0.602120 +vt 0.014447 0.567637 +vt 0.087384 0.594952 +vt 0.095367 0.593145 +vt 0.100742 0.588547 +vt 0.103461 0.580447 +vt 0.080965 0.505963 +vt 0.380631 0.991850 +vt 0.358435 0.918663 +vt 0.341028 0.910343 +vt 0.244946 0.903134 +vt 0.134536 0.896209 +vt 0.125753 0.889284 +vt 0.119986 0.883348 +vt 0.113133 0.878330 +vt 0.105000 0.873659 +vt 0.096105 0.868488 +vt 0.084508 0.737062 +vt 0.078173 0.635571 +vt 0.006292 0.612475 +vt 0.020497 0.555784 +vt 0.089733 0.590060 +vt 0.096388 0.589261 +vt 0.097784 0.582825 +vt 0.068159 0.511267 +vt 0.367376 0.991853 +vt 0.341553 0.918432 +vt 0.244987 0.910516 +vt 0.133508 0.903171 +vt 0.125418 0.895628 +vt 0.120587 0.889162 +vt 0.114494 0.884006 +vt 0.106852 0.879797 +vt 0.097972 0.875428 +vt 0.088804 0.870161 +vt 0.077250 0.736953 +vt 0.006184 0.626602 +vt 0.029555 0.542684 +vt 0.092967 0.585878 +vt 0.054381 0.519405 +vt 0.346618 0.991855 +vt 0.245006 0.917838 +vt 0.131977 0.910216 +vt 0.124093 0.902207 +vt 0.120361 0.894959 +vt 0.115651 0.889210 +vt 0.108808 0.885309 +vt 0.100183 0.881808 +vt 0.090863 0.877497 +vt 0.081656 0.872001 +vt 0.006142 0.735572 +vt 0.041042 0.530003 +vt 0.244678 0.991860 +vt 0.130144 0.917170 +vt 0.122055 0.908876 +vt 0.118737 0.900908 +vt 0.115681 0.894179 +vt 0.110740 0.890108 +vt 0.102741 0.887541 +vt 0.093389 0.884311 +vt 0.083892 0.879855 +vt 0.751525 0.008434 +vt 0.750321 0.008274 +vt 0.629675 0.901542 +vt 0.637408 0.008778 +vt 0.636197 0.008921 +vt 0.515381 0.901859 +vt 0.623629 0.008417 +vt 0.622424 0.008265 +vt 0.752866 0.900673 +vt 0.509339 0.009939 +vt 0.508130 0.010095 +vt 0.638455 0.900221 +vn 0.000000 0.000000 -1.000000 +vn 0.000001 0.000000 -1.000000 +vn 0.000000 -0.000000 -1.000000 +vn 0.000000 0.000000 -1.000000 +vn -0.000001 0.000000 -1.000000 +vn -0.000001 0.000001 -1.000000 +vn -0.000000 0.000000 -1.000000 +vn 0.000001 0.000000 -1.000000 +vn 0.000000 -0.000000 -1.000000 +vn -0.000001 -0.000000 -1.000000 +vn 0.000000 -0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn 0.000001 -0.000000 -1.000000 +vn 0.000000 0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.000001 -0.000000 -1.000000 +vn 0.000000 0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn 0.000000 -0.000000 -1.000000 +vn -0.000001 0.000000 -1.000000 +vn -0.000001 0.000000 -1.000000 +vn 0.000000 0.000001 -1.000000 +vn -0.000000 0.000001 -1.000000 +vn -0.000000 0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn 0.000000 0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.000000 0.000000 -1.000000 +vn 0.000000 0.000000 -1.000000 +vn 0.000000 0.000000 -1.000000 +vn 0.000000 -0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn 0.000000 -0.000000 -1.000000 +vn 0.000000 0.000000 -1.000000 +vn -0.000000 0.000000 -1.000000 +vn 0.000120 0.006181 -0.999981 +vn 0.001054 0.005883 -0.999982 +vn 0.001762 0.005557 -0.999983 +vn 0.000033 0.006227 -0.999981 +vn -0.000000 0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.000000 0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.000000 0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn 0.000000 -0.000000 -1.000000 +vn 0.000000 0.000000 -1.000000 +vn -0.000060 0.006244 -0.999981 +vn -0.000000 0.000000 -1.000000 +vn 0.000000 -0.000000 -1.000000 +vn 0.000000 0.000000 -1.000000 +vn 0.000000 -0.000000 -1.000000 +vn -0.000000 0.000000 -1.000000 +vn -0.000000 0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn 0.001445 -0.005762 -0.999982 +vn 0.001754 -0.005596 -0.999983 +vn 0.002524 -0.015344 -0.999879 +vn 0.004081 -0.014974 -0.999880 +vn 0.002072 -0.005445 -0.999983 +vn 0.002428 -0.005339 -0.999983 +vn 0.006118 -0.014380 -0.999878 +vn 0.008102 -0.013405 -0.999877 +vn 0.000001 0.000000 -1.000000 +vn 0.000000 -0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn 0.003191 -0.005091 -0.999982 +vn 0.000000 0.000000 -1.000000 +vn 0.004514 -0.004105 -0.999981 +vn 0.009796 -0.012310 -0.999876 +vn 0.011566 -0.010844 -0.999874 +vn 0.005298 -0.002795 -0.999982 +vn 0.000000 -0.000000 -1.000000 +vn 0.005438 -0.002156 -0.999983 +vn -0.000000 0.000000 -1.000000 +vn 0.013984 -0.007061 -0.999877 +vn 0.012958 -0.008936 -0.999876 +vn 0.005519 -0.001848 -0.999983 +vn -0.000000 -0.000000 -1.000000 +vn 0.005654 -0.001545 -0.999983 +vn -0.000000 0.000000 -1.000000 +vn 0.015212 -0.003134 -0.999879 +vn 0.014773 -0.005021 -0.999878 +vn 0.005899 -0.000963 -0.999982 +vn 0.000000 -0.000000 -1.000000 +vn 0.006183 -0.000091 -0.999981 +vn -0.000000 -0.000000 -1.000000 +vn 0.016582 -0.000127 -0.999863 +vn 0.015764 -0.001486 -0.999875 +vn 0.016244 -0.000041 -0.999868 +vn 0.006228 -0.000042 -0.999981 +vn 0.006258 0.000035 -0.999981 +vn 0.016258 0.000011 -0.999868 +vn 0.015882 0.000540 -0.999874 +vn 0.015972 0.000080 -0.999872 +vn 0.006085 0.000661 -0.999981 +vn 0.006196 0.000262 -0.999981 +vn 0.015099 0.003270 -0.999881 +vn 0.015424 0.001692 -0.999880 +vn 0.005647 0.001740 -0.999983 +vn 0.005872 0.001239 -0.999982 +vn 0.013286 0.007511 -0.999884 +vn 0.014417 0.005301 -0.999882 +vn 0.004957 0.002915 -0.999984 +vn 0.005343 0.002304 -0.999983 +vn 0.009677 0.011590 -0.999886 +vn 0.011707 0.009893 -0.999883 +vn 0.003793 0.004249 -0.999984 +vn 0.004432 0.003595 -0.999984 +vn 0.007638 0.013063 -0.999886 +vn 0.003047 0.004860 -0.999984 +vn 0.005259 0.014313 -0.999884 +vn 0.002306 0.005252 -0.999984 +vn 0.003075 0.014972 -0.999883 +vn 0.001189 0.015560 -0.999878 +vn -0.000000 0.000000 -1.000000 +vn -0.001099 0.005949 -0.999982 +vn -0.000047 0.016531 -0.999863 +vn -0.001082 0.015577 -0.999878 +vn 0.000000 -0.000000 -1.000000 +vn -0.000000 0.000000 -1.000000 +vn 0.000000 -0.000000 -1.000000 +vn -0.000000 0.000000 -1.000000 +vn -0.000000 0.000000 -1.000000 +vn -0.000000 0.000000 -1.000000 +vn -0.000000 0.000000 -1.000000 +vn -0.001427 0.005792 -0.999982 +vn 0.000000 0.000000 -1.000000 +vn -0.001727 0.005626 -0.999983 +vn -0.002149 0.015356 -0.999880 +vn -0.003579 0.015042 -0.999880 +vn -0.000000 -0.000000 -1.000000 +vn 0.000000 0.000000 -1.000000 +vn -0.000001 -0.000000 -1.000000 +vn 0.000000 0.000000 -1.000000 +vn 0.000000 -0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.000000 0.000000 -1.000000 +vn 0.000000 -0.000000 -1.000000 +vn 0.000000 0.000000 -1.000000 +vn -0.002028 0.005475 -0.999983 +vn -0.000000 0.000000 -1.000000 +vn -0.002344 0.005364 -0.999983 +vn -0.005393 0.014549 -0.999880 +vn -0.007241 0.013754 -0.999879 +vn -0.000000 0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn 0.000000 0.000000 -1.000000 +vn 0.000000 -0.000000 -1.000000 +vn -0.000000 0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn 0.000000 0.000000 -1.000000 +vn 0.000000 -0.000000 -1.000000 +vn -0.000001 -0.000000 -1.000000 +vn -0.000000 0.000000 -1.000000 +vn 0.000000 -0.000000 -1.000000 +vn 0.000000 0.000000 -1.000000 +vn 0.000000 -0.000000 -1.000000 +vn -0.000000 0.000000 -1.000000 +vn -0.003215 0.005097 -0.999982 +vn -0.004522 0.004078 -0.999982 +vn 0.000000 -0.000000 -1.000000 +vn 0.000000 -0.000000 -1.000000 +vn -0.000000 0.000000 -1.000000 +vn 0.000000 -0.000000 -1.000000 +vn -0.005503 0.001802 -0.999983 +vn -0.005430 0.002175 -0.999983 +vn -0.005625 0.001454 -0.999983 +vn -0.005291 0.002860 -0.999982 +vn 0.000000 0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.000000 0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.000000 0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.005760 0.001110 -0.999983 +vn -0.005882 0.000765 -0.999982 +vn -0.000000 0.000000 -1.000000 +vn 0.000000 0.000000 -1.000000 +vn 0.000000 -0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.000000 0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.015356 0.002093 -0.999880 +vn -0.015506 0.000993 -0.999879 +vn -0.006018 0.000322 -0.999982 +vn 0.000000 0.000000 -1.000000 +vn -0.006063 0.000013 -0.999982 +vn 0.000000 -0.000000 -1.000000 +vn -0.015814 0.000223 -0.999875 +vn -0.015856 0.000004 -0.999874 +vn 0.000000 0.000000 -1.000000 +vn -0.000000 0.000000 -1.000000 +vn 0.000000 0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.000000 0.000000 -1.000000 +vn 0.000000 0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn 0.000000 0.000000 -1.000000 +vn -0.000000 0.000000 -1.000000 +vn -0.000000 0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn 0.000000 -0.000000 -1.000000 +vn 0.000000 0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn 0.000000 -0.000000 -1.000000 +vn -0.006061 -0.000022 -0.999982 +vn 0.000000 -0.000000 -1.000000 +vn 0.000000 0.000000 -1.000000 +vn -0.000000 0.000000 -1.000000 +vn 0.000000 0.000000 -1.000000 +vn 0.000000 0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn 0.000000 -0.000000 -1.000000 +vn -0.006036 -0.000036 -0.999982 +vn 0.000001 0.000000 -1.000000 +vn -0.015986 -0.000062 -0.999872 +vn -0.016001 0.000002 -0.999872 +vn -0.000000 0.000000 -1.000000 +vn -0.000001 0.000000 -1.000000 +vn -0.000000 0.000000 -1.000000 +vn -0.000000 0.000000 -1.000000 +vn 0.000000 0.000000 -1.000000 +vn -0.000000 0.000000 -1.000000 +vn 0.000001 -0.000000 -1.000000 +vn 0.000001 -0.000000 -1.000000 +vn 0.000001 -0.000000 -1.000000 +vn 0.000001 -0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn 0.000000 0.000000 -1.000000 +vn -0.000001 -0.000000 -1.000000 +vn -0.000001 -0.000000 -1.000000 +vn 0.000000 -0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn 0.000000 0.000000 -1.000000 +vn -0.000000 0.000000 -1.000000 +vn 0.000000 -0.000000 -1.000000 +vn -0.000000 0.000000 -1.000000 +vn 0.000000 -0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.000000 0.000000 -1.000000 +vn 0.000000 0.000000 -1.000000 +vn 0.000000 -0.000000 -1.000000 +vn 0.000000 -0.000000 -1.000000 +vn -0.000000 0.000000 -1.000000 +vn -0.000000 0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.000001 -0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn 0.000000 0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.006206 -0.000099 -0.999981 +vn -0.005818 -0.001297 -0.999982 +vn -0.005373 -0.002245 -0.999983 +vn -0.004980 -0.002882 -0.999983 +vn -0.004448 -0.003582 -0.999984 +vn -0.016971 -0.000304 -0.999856 +vn -0.015538 -0.002789 -0.999875 +vn -0.014448 -0.005151 -0.999882 +vn -0.000095 -0.006285 -0.999980 +vn 0.000058 -0.006289 -0.999980 +vn -0.000092 -0.016430 -0.999865 +vn 0.000024 -0.016653 -0.999861 +vn -0.000000 -0.000000 -1.000000 +vn -0.000150 -0.006171 -0.999981 +vn 0.000000 -0.000000 -1.000000 +vn -0.001761 -0.005574 -0.999983 +vn -0.000000 0.000000 -1.000000 +vn 0.000000 -0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn 0.000000 -0.000000 -1.000000 +vn -0.000000 0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn 0.000000 0.000000 -1.000000 +vn 0.000000 -0.000000 -1.000000 +vn -0.000000 0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn 0.000000 0.000000 -1.000000 +vn 0.000000 0.000000 -1.000000 +vn 0.000000 -0.000000 -1.000000 +vn -0.000001 -0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn 0.000000 -0.000000 -1.000000 +vn 0.000000 -0.000000 -1.000000 +vn -0.000000 0.000000 -1.000000 +vn 0.000000 0.000000 -1.000000 +vn 0.000000 0.000000 -1.000000 +vn 0.000000 0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.000000 0.000000 -1.000000 +vn 0.000000 -0.000000 -1.000000 +vn -0.000000 0.000000 -1.000000 +vn 0.000000 0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.000000 0.000000 -1.000000 +vn 0.000000 0.000000 -1.000000 +vn 0.000000 -0.000000 -1.000000 +vn -0.000001 -0.000000 -1.000000 +vn 0.000000 0.000000 -1.000000 +vn 0.000000 -0.000000 -1.000000 +vn -0.000000 0.000000 -1.000000 +vn 0.000000 0.000000 -1.000000 +vn 0.000000 -0.000000 -1.000000 +vn 0.000000 0.000000 -1.000000 +vn 0.000000 0.000000 -1.000000 +vn 0.000090 0.016120 -0.999870 +vn -0.000000 -0.000000 -1.000000 +vn 0.000000 -0.000000 -1.000000 +vn -0.000000 0.000000 -1.000000 +vn 0.000000 0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn 0.000000 -0.000000 -1.000000 +vn -0.000000 0.000000 -1.000000 +vn 0.000000 0.000000 -1.000000 +vn 0.000000 -0.000000 -1.000000 +vn 0.000000 0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn 0.000000 -0.000000 -1.000000 +vn 0.000000 0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.000000 0.000000 -1.000000 +vn 0.000000 -0.000000 -1.000000 +vn -0.000000 0.000000 -1.000000 +vn 0.000000 -0.000000 -1.000000 +vn 0.000000 -0.000000 -1.000000 +vn -0.000000 0.000000 -1.000000 +vn -0.000000 0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn 0.000000 0.000000 -1.000000 +vn -0.000000 0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn 0.000000 0.000000 -1.000000 +vn 0.000000 -0.000000 -1.000000 +vn -0.000001 -0.000000 -1.000000 +vn -0.000000 0.000000 -1.000000 +vn -0.000000 0.000000 -1.000000 +vn -0.000001 -0.000000 -1.000000 +vn -0.009081 0.012672 -0.999879 +vn -0.011148 0.011343 -0.999874 +vn -0.012453 0.009551 -0.999877 +vn -0.013604 0.007834 -0.999877 +vn -0.014541 0.005667 -0.999878 +vn -0.015044 0.003616 -0.999880 +vn 0.000000 0.000000 -1.000000 +vn 0.000000 -0.000000 -1.000000 +vn 0.000000 -0.000000 -1.000000 +vn 0.000000 0.000000 -1.000000 +vn 0.000000 0.000000 -1.000000 +vn -0.000000 0.000000 -1.000000 +vn 0.000000 -0.000000 -1.000000 +vn 0.000000 0.000000 -1.000000 +vn 0.000000 -0.000000 -1.000000 +vn 0.000000 -0.000000 -1.000000 +vn -0.000000 0.000000 -1.000000 +vn 0.000000 0.000000 -1.000000 +vn -0.000000 0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn 0.000000 0.000000 -1.000000 +vn 0.000000 0.000000 -1.000000 +vn -0.000000 0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn 0.000000 0.000000 -1.000000 +vn -0.000001 -0.000000 -1.000000 +vn 0.000000 0.000000 -1.000000 +vn -0.000001 -0.000000 -1.000000 +vn -0.000000 0.000000 -1.000000 +vn 0.000000 -0.000000 -1.000000 +vn 0.000000 -0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn 0.000001 0.000000 -1.000000 +vn -0.000000 0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.000000 0.000000 -1.000000 +vn 0.000000 0.000000 -1.000000 +vn 0.000000 0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.000001 -0.000000 -1.000000 +vn 0.000000 0.000000 -1.000000 +vn 0.000001 -0.000000 -1.000000 +vn 0.000001 0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn 0.000000 -0.000000 -1.000000 +vn -0.000000 0.000000 -1.000000 +vn 0.000000 -0.000000 -1.000000 +vn 0.000000 -0.000000 -1.000000 +vn 0.000000 0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.000000 0.000000 -1.000000 +vn -0.000000 0.000000 -1.000000 +vn -0.000000 0.000000 -1.000000 +vn 0.000000 0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.003804 -0.004249 -0.999984 +vn -0.003050 -0.004868 -0.999983 +vn -0.002305 -0.005265 -0.999983 +vn -0.013400 -0.007444 -0.999883 +vn -0.011768 -0.009868 -0.999882 +vn -0.009714 -0.011593 -0.999886 +vn -0.007655 -0.013089 -0.999885 +vn -0.005246 -0.014358 -0.999883 +vn -0.003037 -0.015023 -0.999883 +vn -0.000255 -0.016672 -0.999861 +vn 0.000000 -0.000000 -1.000000 +vn 0.000600 -0.006120 -0.999981 +vn 0.000000 -0.000000 -1.000000 +vn 0.001116 -0.005924 -0.999982 +vn 0.000430 -0.016000 -0.999872 +vn 0.001361 -0.015596 -0.999878 +vn 0.000000 0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn 0.000000 -0.000000 -1.000000 +vn 0.000000 0.000000 -1.000000 +vn -0.000000 0.000000 -1.000000 +vn 0.000000 -0.000000 -1.000000 +vn -0.000000 0.000000 -1.000000 +vn -0.000000 0.000000 -1.000000 +vn 0.000000 -0.000000 -1.000000 +vn 0.000000 0.000000 -1.000000 +vn 0.000000 -0.000000 -1.000000 +vn -0.000000 0.000000 -1.000000 +vn -0.000000 0.000000 -1.000000 +vn 0.000000 -0.000000 -1.000000 +vn -0.000000 0.000000 1.000000 +vn 0.000000 -0.000000 1.000000 +vn -0.000000 -0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 -0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn -0.000000 -0.000000 1.000000 +vn -0.000001 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn -0.000000 0.000000 1.000000 +vn 0.000000 -0.000000 1.000000 +vn -0.000001 -0.000000 1.000000 +vn -0.000000 -0.000000 1.000000 +vn 0.000000 -0.000000 1.000000 +vn -0.000000 0.000000 1.000000 +vn -0.000002 0.000001 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 -0.000000 1.000000 +vn 0.000001 0.000001 1.000000 +vn 0.000000 -0.000000 1.000000 +vn -0.000000 0.000000 1.000000 +vn -0.000000 -0.000000 1.000000 +vn 0.000000 -0.000000 1.000000 +vn 0.000000 -0.000001 1.000000 +vn 0.000000 -0.000000 1.000000 +vn -0.000000 -0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn -0.000000 -0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn -0.000000 -0.000000 1.000000 +vn -0.000000 -0.000000 1.000000 +vn -0.000000 0.000000 1.000000 +vn -0.000000 -0.000000 1.000000 +vn -0.000000 -0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 -0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000120 0.006181 0.999981 +vn 0.000033 0.006227 0.999981 +vn 0.000027 0.016154 0.999870 +vn 0.000090 0.016120 0.999870 +vn 0.001054 0.005883 0.999982 +vn 0.001762 0.005557 0.999983 +vn 0.000000 -0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn -0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn -0.000000 0.000000 1.000000 +vn -0.000000 0.000000 1.000000 +vn -0.000060 0.006244 0.999981 +vn 0.000000 -0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn -0.000000 -0.000000 1.000000 +vn -0.000000 0.000000 1.000000 +vn -0.000000 -0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn -0.000000 -0.000000 1.000000 +vn 0.000000 -0.000000 1.000000 +vn 0.000000 -0.000000 1.000000 +vn -0.000000 0.000000 1.000000 +vn -0.000000 0.000000 1.000000 +vn -0.000000 -0.000000 1.000000 +vn -0.000047 0.016531 0.999863 +vn 0.002428 -0.005339 0.999983 +vn -0.000001 -0.000000 1.000000 +vn 0.002072 -0.005445 0.999983 +vn -0.000000 0.000000 1.000000 +vn 0.001753 -0.005596 0.999983 +vn 0.000000 -0.000000 1.000000 +vn 0.004513 -0.004105 0.999981 +vn 0.000000 0.000000 1.000000 +vn 0.003190 -0.005091 0.999982 +vn -0.000001 -0.000000 1.000000 +vn 0.005297 -0.002794 0.999982 +vn 0.005438 -0.002156 0.999983 +vn 0.000001 0.000001 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.005519 -0.001848 0.999983 +vn 0.005654 -0.001545 0.999983 +vn -0.000000 -0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.005898 -0.000963 0.999982 +vn 0.006183 -0.000091 0.999981 +vn -0.000000 -0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.006227 -0.000042 0.999981 +vn 0.016244 -0.000041 0.999868 +vn 0.016582 -0.000127 0.999863 +vn -0.000000 -0.000000 1.000000 +vn 0.006257 0.000035 0.999980 +vn 0.016258 0.000011 0.999868 +vn 0.015972 0.000080 0.999873 +vn 0.006195 0.000262 0.999981 +vn 0.006085 0.000661 0.999981 +vn 0.015883 0.000541 0.999874 +vn 0.005872 0.001239 0.999982 +vn 0.015424 0.001692 0.999880 +vn 0.005647 0.001740 0.999983 +vn 0.015100 0.003270 0.999881 +vn 0.005343 0.002303 0.999983 +vn 0.014378 0.005283 0.999883 +vn 0.004957 0.002915 0.999983 +vn 0.013286 0.007503 0.999884 +vn 0.004432 0.003595 0.999984 +vn 0.011740 0.009914 0.999882 +vn 0.003793 0.004249 0.999984 +vn 0.009677 0.011590 0.999886 +vn 0.007623 0.013030 0.999886 +vn 0.005277 0.014351 0.999883 +vn 0.003047 0.004860 0.999984 +vn 0.002307 0.005252 0.999984 +vn 0.003075 0.014972 0.999883 +vn 0.001189 0.015560 0.999878 +vn -0.001100 0.005948 0.999982 +vn 0.000001 0.000000 1.000000 +vn -0.000000 -0.000000 1.000000 +vn 0.000000 -0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 -0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn -0.000000 -0.000000 1.000000 +vn -0.001726 0.005626 0.999983 +vn 0.000000 0.000000 1.000000 +vn -0.001426 0.005791 0.999982 +vn 0.000000 -0.000000 1.000000 +vn -0.000000 -0.000000 1.000000 +vn -0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn -0.000000 -0.000000 1.000000 +vn -0.000000 -0.000000 1.000000 +vn 0.000000 -0.000000 1.000000 +vn -0.000000 0.000000 1.000000 +vn 0.000000 -0.000000 1.000000 +vn -0.002344 0.005364 0.999983 +vn 0.000000 0.000000 1.000000 +vn -0.002027 0.005475 0.999983 +vn -0.000000 -0.000000 1.000000 +vn -0.000000 -0.000000 1.000000 +vn 0.000001 -0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 -0.000000 1.000000 +vn -0.000000 -0.000000 1.000000 +vn -0.000000 0.000000 1.000000 +vn -0.000000 0.000000 1.000000 +vn 0.000001 0.000000 1.000000 +vn 0.000000 -0.000000 1.000000 +vn -0.000000 -0.000000 1.000000 +vn -0.000001 -0.000001 1.000000 +vn 0.000000 0.000000 1.000000 +vn -0.000000 0.000000 1.000000 +vn -0.003216 0.005097 0.999982 +vn -0.004523 0.004078 0.999981 +vn 0.000000 -0.000000 1.000000 +vn 0.000000 -0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn -0.005431 0.002175 0.999983 +vn -0.005503 0.001802 0.999983 +vn -0.005625 0.001454 0.999983 +vn -0.005292 0.002860 0.999982 +vn 0.000000 -0.000000 1.000000 +vn -0.000000 -0.000000 1.000000 +vn 0.000000 -0.000000 1.000000 +vn -0.000001 0.000000 1.000000 +vn 0.000000 -0.000000 1.000000 +vn 0.000000 -0.000000 1.000000 +vn -0.005760 0.001110 0.999983 +vn -0.005882 0.000765 0.999982 +vn -0.000000 -0.000000 1.000000 +vn -0.000000 0.000000 1.000000 +vn -0.000000 0.000000 1.000000 +vn 0.000000 -0.000000 1.000000 +vn -0.000000 -0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn -0.006018 0.000322 0.999982 +vn -0.006063 0.000013 0.999982 +vn -0.000000 0.000000 1.000000 +vn 0.000000 -0.000000 1.000000 +vn -0.000000 -0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn -0.000000 -0.000000 1.000000 +vn 0.000000 -0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 -0.000000 1.000000 +vn -0.000000 0.000000 1.000000 +vn 0.000000 -0.000000 1.000000 +vn -0.000000 0.000000 1.000000 +vn 0.000000 -0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn -0.006061 -0.000022 0.999982 +vn -0.000001 0.000000 1.000000 +vn -0.006036 -0.000036 0.999982 +vn 0.000001 0.000000 1.000000 +vn -0.016002 0.000002 0.999872 +vn -0.015856 0.000004 0.999874 +vn -0.000001 0.000000 1.000000 +vn -0.000001 0.000000 1.000000 +vn 0.000001 -0.000000 1.000000 +vn 0.000000 -0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn -0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn -0.000000 0.000000 1.000000 +vn 0.000001 0.000000 1.000000 +vn 0.000001 -0.000000 1.000000 +vn 0.000001 -0.000000 1.000000 +vn 0.000000 -0.000000 1.000000 +vn -0.000000 0.000000 1.000000 +vn -0.000000 0.000000 1.000000 +vn -0.000000 -0.000000 1.000000 +vn -0.015986 -0.000062 0.999872 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn -0.000001 -0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000001 0.000000 1.000000 +vn -0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn -0.000000 0.000000 1.000000 +vn -0.000000 -0.000000 1.000000 +vn -0.000001 -0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn -0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000001 -0.000000 1.000000 +vn -0.000000 -0.000000 1.000000 +vn -0.000000 0.000000 1.000000 +vn 0.000000 0.000001 1.000000 +vn -0.000000 0.000000 1.000000 +vn 0.000000 -0.000000 1.000000 +vn -0.000001 -0.000001 1.000000 +vn -0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000001 0.000000 1.000000 +vn 0.000002 -0.000001 1.000000 +vn 0.000000 -0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn -0.006206 -0.000099 0.999981 +vn -0.016971 -0.000304 0.999856 +vn -0.005818 -0.001297 0.999982 +vn -0.015539 -0.002789 0.999875 +vn -0.005373 -0.002245 0.999983 +vn -0.004981 -0.002882 0.999983 +vn -0.014448 -0.005150 0.999882 +vn -0.013364 -0.007420 0.999883 +vn -0.004448 -0.003582 0.999984 +vn 0.000000 0.000000 1.000000 +vn -0.000000 0.000000 1.000000 +vn -0.000095 -0.006285 0.999980 +vn -0.000150 -0.006171 0.999981 +vn -0.000000 -0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn -0.000000 -0.000000 1.000000 +vn -0.001762 -0.005574 0.999983 +vn -0.000255 -0.016672 0.999861 +vn -0.003036 -0.015023 0.999883 +vn -0.000000 0.000000 1.000000 +vn 0.000000 -0.000000 1.000000 +vn -0.000000 0.000000 1.000000 +vn 0.000058 -0.006289 0.999980 +vn 0.000024 -0.016653 0.999861 +vn 0.000600 -0.006120 0.999981 +vn 0.000431 -0.016000 0.999872 +vn 0.001116 -0.005924 0.999982 +vn 0.001360 -0.015596 0.999878 +vn 0.001445 -0.005762 0.999982 +vn 0.002524 -0.015344 0.999879 +vn 0.004081 -0.014974 0.999880 +vn 0.006119 -0.014380 0.999878 +vn 0.008102 -0.013405 0.999877 +vn 0.009796 -0.012310 0.999876 +vn 0.011567 -0.010843 0.999874 +vn 0.012958 -0.008936 0.999876 +vn 0.013985 -0.007061 0.999877 +vn 0.014774 -0.005021 0.999878 +vn 0.015212 -0.003134 0.999879 +vn 0.015764 -0.001486 0.999875 +vn -0.000001 0.000000 1.000000 +vn 0.000001 0.000000 1.000000 +vn 0.000000 -0.000000 1.000000 +vn 0.000000 -0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn -0.000001 0.000000 1.000000 +vn -0.000000 -0.000000 1.000000 +vn -0.000000 0.000000 1.000000 +vn 0.000000 -0.000000 1.000000 +vn -0.000000 -0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 -0.000000 1.000000 +vn 0.000000 -0.000000 1.000000 +vn -0.000000 0.000000 1.000000 +vn -0.000001 0.000000 1.000000 +vn -0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn -0.000000 0.000000 1.000000 +vn -0.000000 0.000000 1.000000 +vn -0.000000 -0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn -0.000000 0.000000 1.000000 +vn -0.000000 0.000000 1.000000 +vn -0.000000 -0.000000 1.000000 +vn -0.000000 0.000000 1.000000 +vn -0.000000 -0.000000 1.000000 +vn 0.000000 -0.000000 1.000000 +vn -0.000000 -0.000000 1.000000 +vn -0.000000 0.000000 1.000000 +vn -0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000001 -0.000000 1.000000 +vn -0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn -0.000000 0.000000 1.000000 +vn -0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn -0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn -0.000000 0.000000 1.000000 +vn -0.000000 -0.000000 1.000000 +vn -0.000000 0.000000 1.000000 +vn -0.000000 -0.000000 1.000000 +vn -0.000000 -0.000000 1.000000 +vn 0.000000 -0.000000 1.000000 +vn -0.000000 0.000000 1.000000 +vn 0.000000 -0.000000 1.000000 +vn -0.000000 -0.000000 1.000000 +vn 0.000000 -0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn -0.000000 -0.000000 1.000000 +vn -0.000000 0.000000 1.000000 +vn -0.000000 -0.000000 1.000000 +vn -0.000000 0.000000 1.000000 +vn -0.000000 0.000000 1.000000 +vn -0.000000 -0.000000 1.000000 +vn -0.000000 -0.000000 1.000000 +vn -0.001082 0.015577 0.999878 +vn -0.002150 0.015356 0.999880 +vn -0.003579 0.015042 0.999881 +vn -0.005393 0.014549 0.999880 +vn -0.007219 0.013716 0.999880 +vn -0.009075 0.012673 0.999879 +vn -0.011172 0.011373 0.999873 +vn -0.012453 0.009552 0.999877 +vn -0.013604 0.007834 0.999877 +vn -0.014541 0.005667 0.999878 +vn -0.015044 0.003616 0.999880 +vn -0.015356 0.002093 0.999880 +vn -0.015506 0.000993 0.999879 +vn -0.015814 0.000223 0.999875 +vn 0.000000 -0.000000 1.000000 +vn -0.000000 -0.000000 1.000000 +vn -0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn -0.000000 -0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn -0.000000 0.000000 1.000000 +vn -0.000000 0.000000 1.000000 +vn -0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn -0.000000 0.000000 1.000000 +vn -0.000000 -0.000000 1.000000 +vn 0.000001 -0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000001 0.000000 1.000000 +vn 0.000001 0.000000 1.000000 +vn -0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn -0.000000 0.000000 1.000000 +vn -0.000001 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn -0.000000 0.000000 1.000000 +vn -0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn -0.000000 0.000000 1.000000 +vn 0.000000 -0.000000 1.000000 +vn 0.000000 -0.000000 1.000000 +vn 0.000001 -0.000000 1.000000 +vn 0.000001 -0.000000 1.000000 +vn -0.000000 -0.000000 1.000000 +vn -0.000000 -0.000000 1.000000 +vn -0.000000 0.000000 1.000000 +vn 0.000000 -0.000000 1.000000 +vn -0.000000 -0.000000 1.000000 +vn -0.000000 -0.000000 1.000000 +vn -0.000000 -0.000000 1.000000 +vn -0.000000 -0.000000 1.000000 +vn -0.000001 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn -0.000000 0.000000 1.000000 +vn -0.000000 -0.000000 1.000000 +vn -0.000000 0.000000 1.000000 +vn -0.000000 0.000000 1.000000 +vn -0.000000 -0.000000 1.000000 +vn -0.000000 0.000000 1.000000 +vn -0.003804 -0.004249 0.999984 +vn -0.011800 -0.009890 0.999882 +vn -0.009715 -0.011593 0.999886 +vn -0.003050 -0.004868 0.999984 +vn -0.002305 -0.005265 0.999983 +vn -0.005263 -0.014396 0.999883 +vn -0.007640 -0.013056 0.999886 +vn -0.000000 -0.000000 1.000000 +vn 0.000000 -0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn -0.000000 0.000000 1.000000 +vn -0.000000 -0.000000 1.000000 +vn 0.000000 -0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000001 0.000000 1.000000 +vn -0.000000 -0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn -0.000001 0.000000 1.000000 +vn -0.000000 -0.000000 1.000000 +vn -0.000000 -0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000429 0.707135 -0.707079 +vn -0.001881 0.710240 -0.703958 +vn 0.000609 0.999982 -0.005943 +vn -0.002665 0.999979 -0.005848 +vn 0.000027 0.016154 -0.999870 +vn 0.005089 0.999970 -0.005872 +vn 0.003593 0.709561 -0.704635 +vn -0.999977 -0.003375 -0.005934 +vn -0.707686 -0.002378 -0.706524 +vn -0.999829 -0.017599 -0.005724 +vn -0.714547 -0.012499 -0.699476 +vn 0.000810 -0.710995 -0.703196 +vn -0.001587 -0.707490 -0.706722 +vn -0.002252 -0.999980 -0.005933 +vn 0.001137 -0.999982 -0.005835 +vn 0.003593 0.709568 0.704627 +vn 0.000429 0.707132 0.707081 +vn 0.000609 0.999982 0.005943 +vn 0.005089 0.999970 0.005871 +vn 0.052830 0.708586 0.703644 +vn 0.074603 0.997196 0.005829 +vn 0.142125 0.697081 0.702765 +vn 0.200095 0.979759 0.005800 +vn 0.074603 0.997196 -0.005829 +vn 0.200095 0.979759 -0.005800 +vn -0.002665 0.999979 0.005849 +vn -0.001881 0.710240 0.703957 +vn -0.048337 0.707491 0.705067 +vn -0.068331 0.997645 0.005876 +vn -0.707689 -0.002378 0.706520 +vn -0.714549 -0.012499 0.699474 +vn -0.999829 -0.017598 0.005724 +vn -0.999977 -0.003375 0.005934 +vn 0.001137 -0.999982 0.005835 +vn 0.000810 -0.710988 0.703204 +vn -0.002252 -0.999980 0.005933 +vn -0.001587 -0.707487 0.706725 +vn 0.018671 -0.708873 0.705089 +vn 0.060989 -0.706639 0.704941 +vn 0.026451 -0.999633 0.005883 +vn 0.026452 -0.999633 -0.005883 +vn 0.086206 -0.996260 0.005872 +vn 0.114439 -0.700978 0.703941 +vn 0.186399 -0.686472 0.702860 +vn 0.161365 -0.986878 0.005841 +vn 0.161365 -0.986878 -0.005841 +vn 0.086205 -0.996260 -0.005872 +vn 0.262344 -0.964957 0.005806 +vn 0.278875 -0.655435 0.701879 +vn 0.368863 -0.609154 0.702048 +vn 0.391505 -0.920158 0.005794 +vn 0.391505 -0.920158 -0.005794 +vn 0.262345 -0.964957 -0.005806 +vn 0.517689 -0.855550 0.005788 +vn 0.443678 -0.556788 0.702237 +vn 0.519507 -0.487211 0.701953 +vn 0.623151 -0.782080 0.005778 +vn 0.623151 -0.782081 -0.005778 +vn 0.517688 -0.855550 -0.005788 +vn 0.729507 -0.683949 0.005767 +vn 0.586085 -0.404972 0.701785 +vn 0.635489 -0.321440 0.702019 +vn 0.822773 -0.568340 0.005787 +vn 0.822776 -0.568337 -0.005787 +vn 0.729508 -0.683948 -0.005783 +vn 0.892456 -0.451099 0.005784 +vn 0.674115 -0.228900 0.702263 +vn 0.696461 -0.142690 0.703265 +vn 0.946881 -0.321533 0.005805 +vn 0.946882 -0.321531 -0.005787 +vn 0.892458 -0.451094 -0.005783 +vn 0.979579 -0.200978 0.005819 +vn 0.707598 -0.065770 0.703548 +vn 0.711165 -0.005203 0.703006 +vn 0.995668 -0.092795 0.005830 +vn 0.995668 -0.092795 -0.005830 +vn 0.979579 -0.200977 -0.005819 +vn 0.999956 -0.007354 0.005824 +vn 0.707277 -0.000800 0.706936 +vn 0.999982 -0.001137 0.005942 +vn 0.709305 0.000206 0.704901 +vn 0.999983 0.000296 0.005884 +vn 0.708950 0.002967 0.705253 +vn 0.999974 0.004181 0.005901 +vn 0.999974 0.004183 -0.005901 +vn 0.999983 0.000296 -0.005884 +vn 0.708975 0.023683 0.704836 +vn 0.705516 0.076630 0.704539 +vn 0.999419 0.033559 0.005873 +vn 0.999420 0.033561 -0.005873 +vn 0.994106 0.108253 0.005857 +vn 0.695504 0.149319 0.702836 +vn 0.668979 0.244708 0.701844 +vn 0.977644 0.210186 0.005805 +vn 0.977644 0.210185 -0.005805 +vn 0.994106 0.108251 -0.005857 +vn 0.939020 0.343814 0.005774 +vn 0.621292 0.350258 0.700940 +vn 0.545012 0.460435 0.700686 +vn 0.870961 0.491319 0.005749 +vn 0.870959 0.491322 -0.005751 +vn 0.939020 0.343815 -0.005792 +vn 0.763896 0.645314 0.005747 +vn 0.456564 0.547498 0.701281 +vn 0.360081 0.615774 0.700831 +vn 0.640446 0.767982 0.005749 +vn 0.640445 0.767983 -0.005749 +vn 0.763895 0.645315 -0.005731 +vn 0.504478 0.863405 0.005743 +vn 0.245582 0.669166 0.701360 +vn 0.344535 0.938756 0.005775 +vn 0.344534 0.938756 -0.005758 +vn 0.504475 0.863407 -0.005758 +vn -0.097599 0.703282 0.704180 +vn -0.164005 0.691828 0.703191 +vn -0.137662 0.990462 0.005849 +vn -0.137662 0.990462 -0.005849 +vn -0.068331 0.997645 -0.005876 +vn -0.230927 0.972954 0.005817 +vn -0.247207 0.667171 0.702689 +vn -0.332114 0.630034 0.701967 +vn -0.347561 0.937639 0.005794 +vn -0.347562 0.937639 -0.005811 +vn -0.230927 0.972954 -0.005818 +vn -0.466390 0.884560 0.005794 +vn -0.414912 0.579035 0.701831 +vn -0.499331 0.508204 0.701710 +vn -0.582616 0.812727 0.005777 +vn -0.582618 0.812726 -0.005779 +vn -0.466394 0.884558 -0.005796 +vn -0.700822 0.713313 0.005783 +vn -0.564566 0.433518 0.702373 +vn -0.617098 0.355960 0.701771 +vn -0.793137 0.609016 0.005783 +vn -0.793137 0.609016 -0.005784 +vn -0.700823 0.713312 -0.005767 +vn -0.866375 0.499361 0.005776 +vn -0.663804 0.258490 0.701817 +vn -0.691709 0.165449 0.702969 +vn -0.931826 0.362859 0.005791 +vn -0.931827 0.362857 -0.005791 +vn -0.866375 0.499361 -0.005776 +vn -0.972480 0.232912 0.005811 +vn -0.703688 0.095154 0.704109 +vn -0.707510 0.045357 0.705246 +vn -0.990931 0.134244 0.005846 +vn -0.990931 0.134245 -0.005846 +vn -0.972481 0.232910 -0.005811 +vn -0.997920 0.064202 0.005883 +vn -0.708975 0.010519 0.705156 +vn -0.709219 0.000016 0.704988 +vn -0.999871 0.014962 0.005893 +vn -0.999871 0.014956 -0.005893 +vn -0.997920 0.064202 -0.005883 +vn -0.999983 0.000005 0.005902 +vn -0.710069 -0.000001 0.704132 +vn -0.999983 -0.000004 0.005866 +vn -0.999983 -0.000004 -0.005866 +vn -0.999983 -0.000000 -0.005902 +vn -0.701575 -0.124583 0.701620 +vn -0.671360 -0.238189 0.701813 +vn -0.984513 -0.175220 0.005768 +vn -0.984512 -0.175223 -0.005768 +vn -0.942323 -0.334655 0.005773 +vn -0.623898 -0.345809 0.700833 +vn -0.546778 -0.458457 0.700608 +vn -0.874487 -0.485014 0.005746 +vn -0.874485 -0.485019 -0.005747 +vn -0.942322 -0.334657 -0.005791 +vn -0.766290 -0.642469 0.005745 +vn -0.457524 -0.546748 0.701240 +vn -0.360152 -0.615810 0.700763 +vn -0.641758 -0.766886 0.005748 +vn -0.641758 -0.766886 -0.005748 +vn -0.766288 -0.642472 -0.005728 +vn -0.504525 -0.863378 0.005741 +vn -0.244324 -0.669670 0.701318 +vn -0.139880 -0.697541 0.702759 +vn -0.342751 -0.939409 0.005773 +vn -0.342748 -0.939410 -0.005756 +vn -0.504522 -0.863380 -0.005756 +vn -0.196944 -0.980398 0.005799 +vn -0.010532 -0.713796 0.700274 +vn -0.000092 -0.016430 0.999865 +vn -0.014844 -0.999873 0.005742 +vn -0.014844 -0.999873 -0.005742 +vn -0.196943 -0.980398 -0.005799 +vn 0.052830 0.708583 -0.703647 +vn 0.142125 0.697078 -0.702768 +vn 0.018671 -0.708870 -0.705092 +vn 0.060989 -0.706641 -0.704939 +vn 0.114439 -0.700976 -0.703944 +vn 0.186401 -0.686476 -0.702856 +vn 0.278874 -0.655435 -0.701879 +vn 0.368865 -0.609156 -0.702045 +vn 0.443678 -0.556793 -0.702233 +vn 0.519726 -0.487270 -0.701750 +vn 0.586178 -0.404828 -0.701790 +vn 0.635559 -0.321270 -0.702033 +vn 0.673929 -0.228751 -0.702490 +vn 0.696468 -0.142690 -0.703258 +vn 0.707600 -0.065772 -0.703546 +vn 0.999956 -0.007354 -0.005823 +vn 0.711159 -0.005203 -0.703012 +vn 0.999982 -0.001137 -0.005942 +vn 0.707282 -0.000800 -0.706931 +vn 0.709300 0.000206 -0.704907 +vn 0.708950 0.002968 -0.705252 +vn 0.708974 0.023683 -0.704836 +vn 0.705519 0.076629 -0.704536 +vn 0.695499 0.149318 -0.702841 +vn 0.668795 0.244857 -0.701967 +vn 0.621085 0.350600 -0.700952 +vn 0.544927 0.460714 -0.700569 +vn 0.456561 0.547495 -0.701286 +vn 0.359821 0.615801 -0.700940 +vn 0.245444 0.669331 -0.701251 +vn -0.048337 0.707494 -0.705064 +vn -0.097598 0.703279 -0.704183 +vn -0.164006 0.691822 -0.703196 +vn -0.247365 0.667356 -0.702457 +vn -0.332173 0.629624 -0.702307 +vn -0.415197 0.578834 -0.701828 +vn -0.499566 0.508132 -0.701595 +vn -0.564560 0.433513 -0.702381 +vn -0.617097 0.355959 -0.701772 +vn -0.663804 0.258489 -0.701818 +vn -0.691712 0.165449 -0.702966 +vn -0.703687 0.095154 -0.704109 +vn -0.707508 0.045357 -0.705248 +vn -0.708970 0.010519 -0.705160 +vn -0.709221 0.000015 -0.704987 +vn -0.710068 -0.000001 -0.704133 +vn -0.701578 -0.124584 -0.701617 +vn -0.671545 -0.238367 -0.701576 +vn -0.623478 -0.345925 -0.701150 +vn -0.546694 -0.458744 -0.700486 +vn -0.457521 -0.546745 -0.701245 +vn -0.359890 -0.615838 -0.700873 +vn -0.244186 -0.669842 -0.701203 +vn -0.139880 -0.697539 -0.702761 +vn -0.010532 -0.713801 -0.700270 +s 1 +g Swift3DLogo:swift3DLogo_geometry Swift3DLogo:swift3DLogo Swift3DLogo:Swift3DLogo +usemtl Swift3DLogo:mat_swift3Dlogo +f 555/388/1 813/389/2 97/387/3 +f 97/387/3 813/389/2 558/390/4 +f 100/393/5 556/394/6 555/388/1 +f 555/388/1 556/394/6 813/389/2 +f 556/394/6 99/405/7 813/389/2 +f 813/389/2 99/405/7 557/395/8 +f 813/389/2 557/395/8 558/390/4 +f 558/390/4 557/395/8 98/396/9 +f 97/387/3 558/390/4 561/398/10 +f 561/398/10 558/390/4 814/397/11 +f 558/390/4 98/396/9 814/397/11 +f 814/397/11 98/396/9 559/408/12 +f 814/397/11 559/408/12 560/409/13 +f 560/409/13 559/408/12 102/423/14 +f 561/398/10 814/397/11 101/410/15 +f 101/410/15 814/397/11 560/409/13 +f 561/398/10 815/399/16 97/387/3 +f 97/387/3 815/399/16 564/391/17 +f 101/410/15 562/411/18 561/398/10 +f 561/398/10 562/411/18 815/399/16 +f 562/411/18 104/427/19 815/399/16 +f 815/399/16 104/427/19 563/412/20 +f 564/391/17 815/399/16 103/400/21 +f 103/400/21 815/399/16 563/412/20 +f 97/387/3 564/391/17 555/388/1 +f 555/388/1 564/391/17 816/392/22 +f 564/391/17 103/400/21 816/392/22 +f 816/392/22 103/400/21 565/401/23 +f 816/392/22 565/401/23 566/402/24 +f 566/402/24 565/401/23 105/414/25 +f 555/388/1 816/392/22 100/393/5 +f 100/393/5 816/392/22 566/402/24 +f 557/395/8 817/406/26 98/396/9 +f 98/396/9 817/406/26 569/407/27 +f 99/405/7 567/419/28 557/395/8 +f 557/395/8 567/419/28 817/406/26 +f 817/406/26 567/419/28 568/420/29 +f 568/420/29 567/419/28 107/436/30 +f 569/407/27 817/406/26 106/421/31 +f 106/421/31 817/406/26 568/420/29 +f 98/396/9 569/407/27 559/408/12 +f 559/408/12 569/407/27 818/422/32 +f 106/421/31 570/439/33 569/407/27 +f 569/407/27 570/439/33 818/422/32 +f 570/439/33 108/460/34 818/422/32 +f 818/422/32 108/460/34 571/440/35 +f 818/422/32 571/440/35 559/408/12 +f 559/408/12 571/440/35 102/423/14 +f 108/460/34 572/481/36 571/440/35 +f 571/440/35 572/481/36 819/461/37 +f 571/440/35 819/461/37 102/423/14 +f 102/423/14 819/461/37 573/441/38 +f 572/481/36 108/460/34 574/501/39 +f 574/501/39 108/460/34 109/480/40 +f 570/439/33 106/421/31 575/459/41 +f 575/459/41 106/421/31 110/438/42 +f 575/459/41 109/480/40 570/439/33 +f 570/439/33 109/480/40 108/460/34 +f 568/420/29 107/436/30 576/437/43 +f 576/437/43 107/436/30 111/456/44 +f 576/437/43 110/438/42 568/420/29 +f 568/420/29 110/438/42 106/421/31 +f 577/470/45 111/456/44 703/451/46 +f 703/451/46 111/456/44 107/436/30 +f 109/480/40 590/500/47 574/501/39 +f 574/501/39 590/500/47 825/522/48 +f 110/438/42 592/458/49 575/459/41 +f 575/459/41 592/458/49 826/479/50 +f 111/456/44 594/476/51 576/437/43 +f 576/437/43 594/476/51 827/457/52 +f 112/490/53 596/509/54 577/470/45 +f 577/470/45 596/509/54 828/489/55 +f 899/690/56 579/691/57 1054/717/58 +f 1054/717/58 579/691/57 479/716/59 +f 820/701/60 581/723/61 1056/724/62 +f 1056/724/62 581/723/61 482/743/63 +f 820/701/60 579/691/57 580/676/64 +f 580/676/64 579/691/57 115/663/65 +f 581/723/61 820/701/60 114/700/66 +f 114/700/66 820/701/60 580/676/64 +f 114/700/66 582/722/67 581/723/61 +f 581/723/61 582/722/67 821/742/68 +f 582/722/67 116/741/69 821/742/68 +f 821/742/68 116/741/69 583/758/70 +f 821/742/68 583/758/70 1058/759/71 +f 1058/759/71 583/758/70 485/772/72 +f 583/758/70 116/741/69 822/740/73 +f 822/740/73 116/741/69 584/721/74 +f 822/740/73 584/721/74 585/720/75 +f 585/720/75 584/721/74 117/698/76 +f 585/720/75 488/739/77 822/740/73 +f 822/740/73 488/739/77 1060/757/78 +f 585/720/75 117/698/76 823/697/79 +f 823/697/79 117/698/76 586/673/80 +f 823/697/79 586/673/80 587/672/81 +f 587/672/81 586/673/80 118/646/82 +f 587/672/81 491/696/83 823/697/79 +f 823/697/79 491/696/83 1062/719/84 +f 587/672/81 118/646/82 824/645/85 +f 824/645/85 118/646/82 588/620/86 +f 824/645/85 588/620/86 589/619/87 +f 589/619/87 588/620/86 119/595/88 +f 589/619/87 494/644/89 824/645/85 +f 824/645/85 494/644/89 1064/671/90 +f 494/644/89 589/619/87 496/618/91 +f 496/618/91 589/619/87 669/594/92 +f 669/594/92 865/569/93 496/618/91 +f 496/618/91 865/569/93 1066/593/94 +f 1068/549/95 499/572/96 867/526/97 +f 867/526/97 499/572/96 672/548/98 +f 1070/506/99 502/527/100 869/485/101 +f 869/485/101 502/527/100 676/505/102 +f 1072/467/103 505/486/104 871/448/105 +f 871/448/105 505/486/104 680/466/106 +f 1074/445/107 508/463/108 873/426/109 +f 873/426/109 508/463/108 684/444/110 +f 511/443/111 685/424/112 1075/442/113 +f 1075/442/113 685/424/112 874/425/114 +f 470/462/115 573/441/38 1049/482/116 +f 1049/482/116 573/441/38 819/461/37 +f 590/500/47 120/521/117 825/522/48 +f 825/522/48 120/521/117 591/544/118 +f 825/522/48 591/544/118 1078/545/119 +f 1078/545/119 591/544/118 515/568/120 +f 575/459/41 826/479/50 109/480/40 +f 109/480/40 826/479/50 590/500/47 +f 826/479/50 592/458/49 593/499/121 +f 593/499/121 592/458/49 121/478/122 +f 826/479/50 593/499/121 590/500/47 +f 590/500/47 593/499/121 120/521/117 +f 576/437/43 827/457/52 110/438/42 +f 110/438/42 827/457/52 592/458/49 +f 827/457/52 594/476/51 595/477/123 +f 595/477/123 594/476/51 122/496/124 +f 592/458/49 827/457/52 121/478/122 +f 121/478/122 827/457/52 595/477/123 +f 577/470/45 828/489/55 111/456/44 +f 111/456/44 828/489/55 594/476/51 +f 828/489/55 596/509/54 597/510/125 +f 597/510/125 596/509/54 123/531/126 +f 594/476/51 828/489/55 122/496/124 +f 122/496/124 828/489/55 597/510/125 +f 120/521/117 598/543/127 591/544/118 +f 591/544/118 598/543/127 829/567/128 +f 598/543/127 124/566/129 829/567/128 +f 829/567/128 124/566/129 599/591/130 +f 829/567/128 599/591/130 1080/592/131 +f 1080/592/131 599/591/130 518/617/132 +f 120/521/117 593/499/121 598/543/127 +f 598/543/127 593/499/121 830/520/133 +f 593/499/121 121/478/122 830/520/133 +f 830/520/133 121/478/122 600/498/134 +f 830/520/133 600/498/134 601/542/135 +f 601/542/135 600/498/134 125/519/136 +f 598/543/127 830/520/133 124/566/129 +f 124/566/129 830/520/133 601/542/135 +f 121/478/122 595/477/123 600/498/134 +f 600/498/134 595/477/123 831/497/137 +f 595/477/123 122/496/124 831/497/137 +f 831/497/137 122/496/124 602/517/138 +f 831/497/137 602/517/138 603/518/139 +f 603/518/139 602/517/138 126/539/140 +f 600/498/134 831/497/137 125/519/136 +f 125/519/136 831/497/137 603/518/139 +f 124/566/129 604/590/141 599/591/130 +f 599/591/130 604/590/141 832/616/142 +f 604/590/141 127/615/143 832/616/142 +f 832/616/142 127/615/143 605/642/144 +f 832/616/142 605/642/144 1082/643/145 +f 1082/643/145 605/642/144 521/670/146 +f 124/566/129 601/542/135 604/590/141 +f 604/590/141 601/542/135 833/565/147 +f 601/542/135 125/519/136 833/565/147 +f 833/565/147 125/519/136 606/541/148 +f 833/565/147 606/541/148 607/589/149 +f 607/589/149 606/541/148 128/564/150 +f 604/590/141 833/565/147 127/615/143 +f 127/615/143 833/565/147 607/589/149 +f 125/519/136 603/518/139 606/541/148 +f 606/541/148 603/518/139 834/540/151 +f 603/518/139 126/539/140 834/540/151 +f 834/540/151 126/539/140 608/562/152 +f 834/540/151 608/562/152 609/563/153 +f 609/563/153 608/562/152 129/586/154 +f 606/541/148 834/540/151 128/564/150 +f 128/564/150 834/540/151 609/563/153 +f 127/615/143 607/589/149 612/639/155 +f 612/639/155 607/589/149 835/612/156 +f 607/589/149 128/564/150 835/612/156 +f 835/612/156 128/564/150 610/587/157 +f 835/612/156 610/587/157 611/638/158 +f 611/638/158 610/587/157 131/613/159 +f 612/639/155 835/612/156 130/666/160 +f 130/666/160 835/612/156 611/638/158 +f 127/615/143 612/639/155 605/642/144 +f 605/642/144 612/639/155 836/667/161 +f 612/639/155 130/666/160 836/667/161 +f 836/667/161 130/666/160 613/694/162 +f 131/613/159 610/587/157 615/614/163 +f 615/614/163 610/587/157 837/588/164 +f 128/564/150 609/563/153 610/587/157 +f 610/587/157 609/563/153 837/588/164 +f 609/563/153 129/586/154 837/588/164 +f 837/588/164 129/586/154 614/611/165 +f 615/614/163 837/588/164 132/637/166 +f 132/637/166 837/588/164 614/611/165 +f 615/614/163 838/640/167 131/613/159 +f 131/613/159 838/640/167 617/641/168 +f 132/637/166 616/664/169 615/614/163 +f 615/614/163 616/664/169 838/640/167 +f 131/613/159 617/641/168 611/638/158 +f 611/638/158 617/641/168 839/665/170 +f 611/638/158 839/665/170 130/666/160 +f 130/666/160 839/665/170 613/694/162 +f 132/637/166 614/611/165 620/657/171 +f 620/657/171 614/611/165 840/630/172 +f 129/586/154 618/604/173 614/611/165 +f 614/611/165 618/604/173 840/630/172 +f 618/604/173 134/629/174 840/630/172 +f 840/630/172 134/629/174 619/656/175 +f 620/657/171 840/630/172 133/684/176 +f 133/684/176 840/630/172 619/656/175 +f 620/657/171 841/685/177 132/637/166 +f 132/637/166 841/685/177 616/664/169 +f 133/684/176 621/710/178 620/657/171 +f 620/657/171 621/710/178 841/685/177 +f 608/562/152 842/579/179 129/586/154 +f 129/586/154 842/579/179 618/604/173 +f 126/539/140 622/555/180 608/562/152 +f 608/562/152 622/555/180 842/579/179 +f 622/555/180 135/578/181 842/579/179 +f 842/579/179 135/578/181 623/603/182 +f 842/579/179 623/603/182 618/604/173 +f 618/604/173 623/603/182 134/629/174 +f 602/517/138 843/532/183 126/539/140 +f 126/539/140 843/532/183 622/555/180 +f 122/496/124 597/510/125 602/517/138 +f 602/517/138 597/510/125 843/532/183 +f 597/510/125 123/531/126 843/532/183 +f 843/532/183 123/531/126 624/554/184 +f 843/532/183 624/554/184 622/555/180 +f 622/555/180 624/554/184 135/578/181 +f 1090/711/185 841/685/177 533/734/186 +f 533/734/186 841/685/177 621/710/178 +f 621/710/178 133/684/176 844/732/187 +f 844/732/187 133/684/176 625/708/188 +f 844/732/187 625/708/188 626/751/189 +f 626/751/189 625/708/188 136/731/190 +f 1092/752/191 844/732/187 536/768/192 +f 536/768/192 844/732/187 626/751/189 +f 133/684/176 619/656/175 625/708/188 +f 625/708/188 619/656/175 845/682/193 +f 619/656/175 134/629/174 845/682/193 +f 845/682/193 134/629/174 627/654/194 +f 845/682/193 627/654/194 628/707/195 +f 628/707/195 627/654/194 137/681/196 +f 625/708/188 845/682/193 136/731/190 +f 136/731/190 845/682/193 628/707/195 +f 623/603/182 846/627/197 134/629/174 +f 134/629/174 846/627/197 627/654/194 +f 135/578/181 629/601/198 623/603/182 +f 623/603/182 629/601/198 846/627/197 +f 629/601/198 138/626/199 846/627/197 +f 846/627/197 138/626/199 630/653/200 +f 846/627/197 630/653/200 627/654/194 +f 627/654/194 630/653/200 137/681/196 +f 624/554/184 847/576/201 135/578/181 +f 135/578/181 847/576/201 629/601/198 +f 123/531/126 631/552/202 624/554/184 +f 624/554/184 631/552/202 847/576/201 +f 631/552/202 139/575/203 847/576/201 +f 847/576/201 139/575/203 632/600/204 +f 847/576/201 632/600/204 629/601/198 +f 629/601/198 632/600/204 138/626/199 +f 596/509/54 848/530/205 123/531/126 +f 123/531/126 848/530/205 631/552/202 +f 848/530/205 633/553/206 631/552/202 +f 631/552/202 633/553/206 139/575/203 +f 633/553/206 848/530/205 113/533/207 +f 113/533/207 848/530/205 578/511/208 +f 596/509/54 112/490/53 848/530/205 +f 848/530/205 112/490/53 578/511/208 +f 634/750/209 849/767/210 136/731/190 +f 136/731/190 849/767/210 626/751/189 +f 635/706/211 850/730/212 137/681/196 +f 137/681/196 850/730/212 628/707/195 +f 850/730/212 634/750/209 628/707/195 +f 628/707/195 634/750/209 136/731/190 +f 138/626/199 636/652/213 630/653/200 +f 630/653/200 636/652/213 851/680/214 +f 851/680/214 635/706/211 630/653/200 +f 630/653/200 635/706/211 137/681/196 +f 139/575/203 637/599/215 632/600/204 +f 632/600/204 637/599/215 852/625/216 +f 632/600/204 852/625/216 138/626/199 +f 138/626/199 852/625/216 636/652/213 +f 633/553/206 853/577/217 139/575/203 +f 139/575/203 853/577/217 637/599/215 +f 849/767/210 634/750/209 638/780/218 +f 638/780/218 634/750/209 140/766/219 +f 638/780/218 374/792/220 849/767/210 +f 849/767/210 374/792/220 1094/781/221 +f 853/577/217 639/602/222 637/599/215 +f 637/599/215 639/602/222 141/624/223 +f 637/599/215 141/624/223 852/625/216 +f 852/625/216 141/624/223 640/651/224 +f 852/625/216 640/651/224 636/652/213 +f 636/652/213 640/651/224 142/679/225 +f 636/652/213 142/679/225 851/680/214 +f 851/680/214 142/679/225 641/705/226 +f 641/705/226 143/729/227 851/680/214 +f 851/680/214 143/729/227 635/706/211 +f 641/705/226 142/679/225 643/728/228 +f 643/728/228 142/679/225 144/704/229 +f 145/650/230 642/678/231 141/624/223 +f 141/624/223 642/678/231 640/651/224 +f 642/678/231 144/704/229 640/651/224 +f 640/651/224 144/704/229 142/679/225 +f 641/705/226 643/728/228 143/729/227 +f 143/729/227 643/728/228 146/748/232 +f 850/730/212 635/706/211 644/749/233 +f 644/749/233 635/706/211 143/729/227 +f 644/749/233 140/766/219 850/730/212 +f 850/730/212 140/766/219 634/750/209 +f 143/729/227 146/748/232 644/749/233 +f 644/749/233 146/748/232 645/765/234 +f 644/749/233 645/765/234 140/766/219 +f 140/766/219 645/765/234 147/779/235 +f 146/748/232 646/764/236 645/765/234 +f 645/765/234 646/764/236 854/778/237 +f 646/764/236 149/777/238 854/778/237 +f 854/778/237 149/777/238 647/789/239 +f 854/778/237 647/789/239 648/790/240 +f 648/790/240 647/789/239 148/800/241 +f 645/765/234 854/778/237 147/779/235 +f 147/779/235 854/778/237 648/790/240 +f 643/728/228 855/747/242 146/748/232 +f 146/748/232 855/747/242 646/764/236 +f 643/728/228 144/704/229 855/747/242 +f 855/747/242 144/704/229 649/727/243 +f 855/747/242 649/727/243 650/763/244 +f 650/763/244 649/727/243 150/746/245 +f 646/764/236 855/747/242 149/777/238 +f 149/777/238 855/747/242 650/763/244 +f 149/777/238 651/788/246 647/789/239 +f 647/789/239 651/788/246 856/799/247 +f 651/788/246 152/798/248 856/799/247 +f 856/799/247 152/798/248 652/806/249 +f 856/799/247 652/806/249 653/807/250 +f 653/807/250 652/806/249 151/812/251 +f 647/789/239 856/799/247 148/800/241 +f 148/800/241 856/799/247 653/807/250 +f 149/777/238 650/763/244 651/788/246 +f 651/788/246 650/763/244 857/776/252 +f 650/763/244 150/746/245 857/776/252 +f 857/776/252 150/746/245 654/762/253 +f 857/776/252 654/762/253 655/787/254 +f 655/787/254 654/762/253 153/775/255 +f 651/788/246 857/776/252 152/798/248 +f 152/798/248 857/776/252 655/787/254 +f 140/766/219 147/779/235 638/780/218 +f 638/780/218 147/779/235 656/791/256 +f 147/779/235 648/790/240 656/791/256 +f 656/791/256 648/790/240 858/801/257 +f 648/790/240 148/800/241 858/801/257 +f 858/801/257 148/800/241 657/808/258 +f 148/800/241 653/807/250 657/808/258 +f 657/808/258 653/807/250 859/813/259 +f 653/807/250 151/812/251 859/813/259 +f 859/813/259 151/812/251 658/816/260 +f 638/780/218 656/791/256 374/792/220 +f 374/792/220 656/791/256 539/802/261 +f 656/791/256 858/801/257 539/802/261 +f 539/802/261 858/801/257 1096/809/262 +f 858/801/257 657/808/258 1096/809/262 +f 1096/809/262 657/808/258 542/814/263 +f 690/770/264 686/755/265 554/783/266 +f 554/783/266 686/755/265 375/771/267 +f 660/769/268 860/782/269 154/773/270 +f 154/773/270 860/782/269 659/784/271 +f 660/769/268 154/773/270 861/753/272 +f 861/753/272 154/773/270 661/760/273 +f 861/753/272 661/760/273 662/733/274 +f 662/733/274 661/760/273 155/744/275 +f 861/753/272 662/733/274 689/735/276 +f 689/735/276 662/733/274 169/712/277 +f 663/674/278 862/647/279 117/698/76 +f 117/698/76 862/647/279 586/673/80 +f 157/648/280 664/622/281 663/674/278 +f 663/674/278 664/622/281 862/647/279 +f 664/622/281 156/597/282 862/647/279 +f 862/647/279 156/597/282 665/621/283 +f 862/647/279 665/621/283 586/673/80 +f 586/673/80 665/621/283 118/646/82 +f 117/698/76 584/721/74 663/674/278 +f 663/674/278 584/721/74 863/699/284 +f 584/721/74 116/741/69 863/699/284 +f 863/699/284 116/741/69 582/722/67 +f 863/699/284 582/722/67 666/675/285 +f 666/675/285 582/722/67 114/700/66 +f 663/674/278 863/699/284 157/648/280 +f 157/648/280 863/699/284 666/675/285 +f 665/621/283 864/596/286 118/646/82 +f 118/646/82 864/596/286 588/620/86 +f 156/597/282 667/573/287 665/621/283 +f 665/621/283 667/573/287 864/596/286 +f 864/596/286 667/573/287 668/571/288 +f 668/571/288 667/573/287 158/550/289 +f 588/620/86 864/596/286 119/595/88 +f 119/595/88 864/596/286 668/571/288 +f 589/619/87 119/595/88 669/594/92 +f 669/594/92 119/595/88 159/570/290 +f 160/528/291 670/547/292 158/550/289 +f 158/550/289 670/547/292 668/571/288 +f 670/547/292 159/570/290 668/571/288 +f 668/571/288 159/570/290 119/595/88 +f 159/570/290 671/546/293 669/594/92 +f 669/594/92 671/546/293 865/569/93 +f 671/546/293 161/525/294 865/569/93 +f 865/569/93 161/525/294 672/548/98 +f 865/569/93 672/548/98 1066/593/94 +f 1066/593/94 672/548/98 499/572/96 +f 673/503/295 866/524/296 162/487/297 +f 162/487/297 866/524/296 674/507/298 +f 161/525/294 671/546/293 673/503/295 +f 673/503/295 671/546/293 866/524/296 +f 671/546/293 159/570/290 866/524/296 +f 866/524/296 159/570/290 670/547/292 +f 866/524/296 670/547/292 674/507/298 +f 674/507/298 670/547/292 160/528/291 +f 161/525/294 675/504/299 672/548/98 +f 672/548/98 675/504/299 867/526/97 +f 675/504/299 163/484/300 867/526/97 +f 867/526/97 163/484/300 676/505/102 +f 867/526/97 676/505/102 1068/549/95 +f 1068/549/95 676/505/102 502/527/100 +f 673/503/295 868/483/301 161/525/294 +f 161/525/294 868/483/301 675/504/299 +f 162/487/297 677/468/302 673/503/295 +f 673/503/295 677/468/302 868/483/301 +f 677/468/302 164/449/303 868/483/301 +f 868/483/301 164/449/303 678/464/304 +f 868/483/301 678/464/304 675/504/299 +f 675/504/299 678/464/304 163/484/300 +f 163/484/300 679/465/305 676/505/102 +f 676/505/102 679/465/305 869/485/101 +f 679/465/305 165/447/306 869/485/101 +f 869/485/101 165/447/306 680/466/106 +f 869/485/101 680/466/106 1070/506/99 +f 1070/506/99 680/466/106 505/486/104 +f 678/464/304 870/446/307 163/484/300 +f 163/484/300 870/446/307 679/465/305 +f 164/449/303 681/430/308 678/464/304 +f 678/464/304 681/430/308 870/446/307 +f 681/430/308 105/414/25 870/446/307 +f 870/446/307 105/414/25 682/428/309 +f 870/446/307 682/428/309 679/465/305 +f 679/465/305 682/428/309 165/447/306 +f 165/447/306 683/429/310 680/466/106 +f 680/466/106 683/429/310 871/448/105 +f 683/429/310 104/427/19 871/448/105 +f 871/448/105 104/427/19 684/444/110 +f 871/448/105 684/444/110 1072/467/103 +f 1072/467/103 684/444/110 508/463/108 +f 682/428/309 872/413/311 165/447/306 +f 165/447/306 872/413/311 683/429/310 +f 105/414/25 565/401/23 682/428/309 +f 682/428/309 565/401/23 872/413/311 +f 565/401/23 103/400/21 872/413/311 +f 872/413/311 103/400/21 563/412/20 +f 872/413/311 563/412/20 683/429/310 +f 683/429/310 563/412/20 104/427/19 +f 104/427/19 562/411/18 684/444/110 +f 684/444/110 562/411/18 873/426/109 +f 562/411/18 101/410/15 873/426/109 +f 873/426/109 101/410/15 685/424/112 +f 873/426/109 685/424/112 1074/445/107 +f 1074/445/107 685/424/112 511/443/111 +f 101/410/15 560/409/13 685/424/112 +f 685/424/112 560/409/13 874/425/114 +f 874/425/114 560/409/13 573/441/38 +f 573/441/38 560/409/13 102/423/14 +f 1075/442/113 874/425/114 470/462/115 +f 470/462/115 874/425/114 573/441/38 +f 1049/482/116 819/461/37 372/502/312 +f 372/502/312 819/461/37 572/481/36 +f 167/605/313 182/581/314 687/631/315 +f 687/631/315 182/581/314 731/606/316 +f 168/658/317 190/632/318 688/686/319 +f 688/686/319 190/632/318 730/659/320 +f 169/712/277 189/687/321 689/735/276 +f 689/735/276 189/687/321 729/713/322 +f 170/754/323 166/736/324 690/770/264 +f 690/770/264 166/736/324 686/755/265 +f 170/754/323 690/770/264 660/769/268 +f 660/769/268 690/770/264 860/782/269 +f 687/631/315 168/658/317 875/655/325 +f 875/655/325 168/658/317 692/683/326 +f 689/735/276 170/754/323 861/753/272 +f 861/753/272 170/754/323 660/769/268 +f 853/577/217 633/553/206 700/556/327 +f 700/556/327 633/553/206 113/533/207 +f 691/628/328 639/602/222 167/605/313 +f 167/605/313 639/602/222 171/580/329 +f 691/628/328 145/650/230 639/602/222 +f 639/602/222 145/650/230 141/624/223 +f 875/655/325 691/628/328 687/631/315 +f 687/631/315 691/628/328 167/605/313 +f 692/683/326 172/702/330 875/655/325 +f 875/655/325 172/702/330 693/677/331 +f 875/655/325 693/677/331 691/628/328 +f 691/628/328 693/677/331 145/650/230 +f 876/709/332 692/683/326 688/686/319 +f 688/686/319 692/683/326 168/658/317 +f 662/733/274 876/709/332 169/712/277 +f 169/712/277 876/709/332 688/686/319 +f 662/733/274 155/744/275 876/709/332 +f 876/709/332 155/744/275 694/725/333 +f 876/709/332 694/725/333 692/683/326 +f 692/683/326 694/725/333 172/702/330 +f 693/677/331 877/703/334 145/650/230 +f 145/650/230 877/703/334 642/678/231 +f 172/702/330 695/726/335 693/677/331 +f 693/677/331 695/726/335 877/703/334 +f 695/726/335 150/746/245 877/703/334 +f 877/703/334 150/746/245 649/727/243 +f 877/703/334 649/727/243 642/678/231 +f 642/678/231 649/727/243 144/704/229 +f 694/725/333 878/745/336 172/702/330 +f 172/702/330 878/745/336 695/726/335 +f 155/744/275 696/761/337 694/725/333 +f 694/725/333 696/761/337 878/745/336 +f 696/761/337 153/775/255 878/745/336 +f 878/745/336 153/775/255 654/762/253 +f 878/745/336 654/762/253 695/726/335 +f 695/726/335 654/762/253 150/746/245 +f 661/760/273 879/774/338 155/744/275 +f 155/744/275 879/774/338 696/761/337 +f 154/773/270 697/785/339 661/760/273 +f 661/760/273 697/785/339 879/774/338 +f 697/785/339 173/796/340 879/774/338 +f 879/774/338 173/796/340 698/786/341 +f 879/774/338 698/786/341 696/761/337 +f 696/761/337 698/786/341 153/775/255 +f 698/786/341 880/797/342 153/775/255 +f 153/775/255 880/797/342 655/787/254 +f 173/796/340 699/805/343 698/786/341 +f 698/786/341 699/805/343 880/797/342 +f 699/805/343 151/812/251 880/797/342 +f 880/797/342 151/812/251 652/806/249 +f 655/787/254 880/797/342 152/798/248 +f 152/798/248 880/797/342 652/806/249 +f 1084/695/344 836/667/161 524/718/345 +f 524/718/345 836/667/161 613/694/162 +f 1086/693/346 839/665/170 527/669/347 +f 527/669/347 839/665/170 617/641/168 +f 1088/668/348 838/640/167 530/692/349 +f 530/692/349 838/640/167 616/664/169 +f 536/768/192 626/751/189 1094/781/221 +f 1094/781/221 626/751/189 849/767/210 +f 700/556/327 171/580/329 853/577/217 +f 853/577/217 171/580/329 639/602/222 +f 700/556/327 113/533/207 701/534/350 +f 701/534/350 113/533/207 175/512/351 +f 578/511/208 112/490/53 702/491/352 +f 702/491/352 112/490/53 176/471/353 +f 701/534/350 174/557/354 700/556/327 +f 700/556/327 174/557/354 171/580/329 +f 702/491/352 175/512/351 578/511/208 +f 578/511/208 175/512/351 113/533/207 +f 703/451/46 176/471/353 577/470/45 +f 577/470/45 176/471/353 112/490/53 +f 177/514/355 180/536/356 704/535/357 +f 704/535/357 180/536/356 711/558/358 +f 174/557/354 701/534/350 704/535/357 +f 704/535/357 701/534/350 881/513/359 +f 701/534/350 175/512/351 881/513/359 +f 881/513/359 175/512/351 705/492/360 +f 705/492/360 178/473/361 881/513/359 +f 881/513/359 178/473/361 706/493/362 +f 704/535/357 881/513/359 177/514/355 +f 177/514/355 881/513/359 706/493/362 +f 175/512/351 702/491/352 705/492/360 +f 705/492/360 702/491/352 882/472/363 +f 702/491/352 176/471/353 882/472/363 +f 882/472/363 176/471/353 707/452/364 +f 707/452/364 179/433/365 882/472/363 +f 882/472/363 179/433/365 708/453/366 +f 882/472/363 708/453/366 705/492/360 +f 705/492/360 708/453/366 178/473/361 +f 176/471/353 703/451/46 707/452/364 +f 707/452/364 703/451/46 883/432/367 +f 703/451/46 107/436/30 883/432/367 +f 883/432/367 107/436/30 567/419/28 +f 567/419/28 99/405/7 883/432/367 +f 883/432/367 99/405/7 709/416/368 +f 883/432/367 709/416/368 707/452/364 +f 707/452/364 709/416/368 179/433/365 +f 180/536/356 177/514/355 710/515/369 +f 710/515/369 177/514/355 712/494/370 +f 704/535/357 711/558/358 174/557/354 +f 174/557/354 711/558/358 182/581/314 +f 710/515/369 712/494/370 181/516/371 +f 181/516/371 712/494/370 183/495/372 +f 712/494/370 177/514/355 884/474/373 +f 884/474/373 177/514/355 706/493/362 +f 178/473/361 713/454/374 706/493/362 +f 706/493/362 713/454/374 884/474/373 +f 713/454/374 184/455/375 884/474/373 +f 884/474/373 184/455/375 714/475/376 +f 884/474/373 714/475/376 712/494/370 +f 712/494/370 714/475/376 183/495/372 +f 708/453/366 885/434/377 178/473/361 +f 178/473/361 885/434/377 713/454/374 +f 179/433/365 715/417/378 708/453/366 +f 708/453/366 715/417/378 885/434/377 +f 715/417/378 185/418/379 885/434/377 +f 885/434/377 185/418/379 716/435/380 +f 885/434/377 716/435/380 713/454/374 +f 713/454/374 716/435/380 184/455/375 +f 709/416/368 886/403/381 179/433/365 +f 179/433/365 886/403/381 715/417/378 +f 99/405/7 556/394/6 709/416/368 +f 709/416/368 556/394/6 886/403/381 +f 556/394/6 100/393/5 886/403/381 +f 886/403/381 100/393/5 717/404/382 +f 886/403/381 717/404/382 715/417/378 +f 715/417/378 717/404/382 185/418/379 +f 718/529/383 887/551/384 181/516/371 +f 181/516/371 887/551/384 720/537/385 +f 158/550/289 667/573/287 718/529/383 +f 718/529/383 667/573/287 887/551/384 +f 667/573/287 156/597/282 887/551/384 +f 887/551/384 156/597/282 719/574/386 +f 887/551/384 719/574/386 720/537/385 +f 720/537/385 719/574/386 186/560/387 +f 181/516/371 720/537/385 710/515/369 +f 710/515/369 720/537/385 888/538/388 +f 720/537/385 186/560/387 888/538/388 +f 888/538/388 186/560/387 721/561/389 +f 888/538/388 721/561/389 722/559/390 +f 722/559/390 721/561/389 187/583/391 +f 710/515/369 888/538/388 180/536/356 +f 180/536/356 888/538/388 722/559/390 +f 181/516/371 183/495/372 718/529/383 +f 718/529/383 183/495/372 723/508/392 +f 718/529/383 723/508/392 158/550/289 +f 158/550/289 723/508/392 160/528/291 +f 723/508/392 183/495/372 889/488/393 +f 889/488/393 183/495/372 714/475/376 +f 184/455/375 724/469/394 714/475/376 +f 714/475/376 724/469/394 889/488/393 +f 889/488/393 724/469/394 674/507/298 +f 674/507/298 724/469/394 162/487/297 +f 723/508/392 889/488/393 160/528/291 +f 160/528/291 889/488/393 674/507/298 +f 716/435/380 890/450/395 184/455/375 +f 184/455/375 890/450/395 724/469/394 +f 185/418/379 725/431/396 716/435/380 +f 716/435/380 725/431/396 890/450/395 +f 725/431/396 164/449/303 890/450/395 +f 890/450/395 164/449/303 677/468/302 +f 724/469/394 890/450/395 162/487/297 +f 162/487/297 890/450/395 677/468/302 +f 717/404/382 891/415/397 185/418/379 +f 185/418/379 891/415/397 725/431/396 +f 100/393/5 566/402/24 717/404/382 +f 717/404/382 566/402/24 891/415/397 +f 566/402/24 105/414/25 891/415/397 +f 891/415/397 105/414/25 681/430/308 +f 891/415/397 681/430/308 725/431/396 +f 725/431/396 681/430/308 164/449/303 +f 156/597/282 664/622/281 719/574/386 +f 719/574/386 664/622/281 892/598/398 +f 664/622/281 157/648/280 892/598/398 +f 892/598/398 157/648/280 726/623/399 +f 892/598/398 726/623/399 727/585/400 +f 727/585/400 726/623/399 188/610/401 +f 719/574/386 892/598/398 186/560/387 +f 186/560/387 892/598/398 727/585/400 +f 151/812/251 699/805/343 658/816/260 +f 658/816/260 699/805/343 893/811/402 +f 699/805/343 173/796/340 893/811/402 +f 893/811/402 173/796/340 728/804/403 +f 173/796/340 697/785/339 728/804/403 +f 728/804/403 697/785/339 894/795/404 +f 154/773/270 659/784/271 697/785/339 +f 697/785/339 659/784/271 894/795/404 +f 657/808/258 859/813/259 542/814/263 +f 542/814/263 859/813/259 1098/817/405 +f 859/813/259 658/816/260 1098/817/405 +f 1098/817/405 658/816/260 545/818/406 +f 658/816/260 893/811/402 545/818/406 +f 545/818/406 893/811/402 1100/815/407 +f 893/811/402 728/804/403 1100/815/407 +f 1100/815/407 728/804/403 548/810/408 +f 548/810/408 728/804/403 1102/803/409 +f 1102/803/409 728/804/403 894/795/404 +f 659/784/271 551/794/410 894/795/404 +f 894/795/404 551/794/410 1102/803/409 +f 551/794/410 659/784/271 1104/793/411 +f 1104/793/411 659/784/271 860/782/269 +f 1104/793/411 860/782/269 554/783/266 +f 554/783/266 860/782/269 690/770/264 +f 174/557/354 182/581/314 171/580/329 +f 171/580/329 182/581/314 167/605/313 +f 689/735/276 729/713/322 170/754/323 +f 170/754/323 729/713/322 166/736/324 +f 688/686/319 730/659/320 169/712/277 +f 169/712/277 730/659/320 189/687/321 +f 687/631/315 731/606/316 168/658/317 +f 168/658/317 731/606/316 190/632/318 +f 166/736/324 732/714/412 686/755/265 +f 686/755/265 732/714/412 895/737/413 +f 732/714/412 191/689/414 895/737/413 +f 895/737/413 191/689/414 733/715/415 +f 895/737/413 733/715/415 1052/756/416 +f 1052/756/416 733/715/415 476/738/417 +f 729/713/322 896/688/418 166/736/324 +f 166/736/324 896/688/418 732/714/412 +f 189/687/321 734/660/419 729/713/322 +f 729/713/322 734/660/419 896/688/418 +f 734/660/419 192/634/420 896/688/418 +f 896/688/418 192/634/420 735/661/421 +f 896/688/418 735/661/421 732/714/412 +f 732/714/412 735/661/421 191/689/414 +f 730/659/320 897/633/422 189/687/321 +f 189/687/321 897/633/422 734/660/419 +f 190/632/318 736/607/423 730/659/320 +f 730/659/320 736/607/423 897/633/422 +f 736/607/423 187/583/391 897/633/422 +f 897/633/422 187/583/391 737/608/424 +f 897/633/422 737/608/424 734/660/419 +f 734/660/419 737/608/424 192/634/420 +f 731/606/316 898/582/425 190/632/318 +f 190/632/318 898/582/425 736/607/423 +f 731/606/316 182/581/314 898/582/425 +f 898/582/425 182/581/314 711/558/358 +f 898/582/425 711/558/358 722/559/390 +f 722/559/390 711/558/358 180/536/356 +f 736/607/423 898/582/425 187/583/391 +f 187/583/391 898/582/425 722/559/390 +f 191/689/414 738/662/426 733/715/415 +f 733/715/415 738/662/426 899/690/56 +f 738/662/426 115/663/65 899/690/56 +f 899/690/56 115/663/65 579/691/57 +f 191/689/414 735/661/421 738/662/426 +f 738/662/426 735/661/421 900/635/427 +f 735/661/421 192/634/420 900/635/427 +f 900/635/427 192/634/420 739/609/428 +f 900/635/427 739/609/428 740/636/429 +f 740/636/429 739/609/428 188/610/401 +f 738/662/426 900/635/427 115/663/65 +f 115/663/65 900/635/427 740/636/429 +f 192/634/420 737/608/424 739/609/428 +f 739/609/428 737/608/424 901/584/430 +f 737/608/424 187/583/391 901/584/430 +f 901/584/430 187/583/391 721/561/389 +f 901/584/430 721/561/389 727/585/400 +f 727/585/400 721/561/389 186/560/387 +f 739/609/428 901/584/430 188/610/401 +f 188/610/401 901/584/430 727/585/400 +f 115/663/65 740/636/429 580/676/64 +f 580/676/64 740/636/429 902/649/431 +f 740/636/429 188/610/401 902/649/431 +f 902/649/431 188/610/401 726/623/399 +f 902/649/431 726/623/399 666/675/285 +f 666/675/285 726/623/399 157/648/280 +f 580/676/64 902/649/431 114/700/66 +f 114/700/66 902/649/431 666/675/285 +f 741/820/432 903/821/433 1/819/434 +f 1/819/434 903/821/433 744/822/435 +f 2/825/436 742/826/437 741/820/432 +f 741/820/432 742/826/437 903/821/433 +f 742/826/437 64/837/438 903/821/433 +f 903/821/433 64/837/438 743/827/439 +f 903/821/433 743/827/439 744/822/435 +f 744/822/435 743/827/439 69/828/440 +f 1/819/434 745/823/441 741/820/432 +f 741/820/432 745/823/441 904/824/442 +f 745/823/441 44/832/443 904/824/442 +f 904/824/442 44/832/443 746/833/444 +f 904/824/442 746/833/444 747/834/445 +f 747/834/445 746/833/444 45/847/446 +f 741/820/432 904/824/442 2/825/436 +f 2/825/436 904/824/442 747/834/445 +f 748/830/447 905/831/448 1/819/434 +f 1/819/434 905/831/448 745/823/441 +f 748/830/447 95/842/449 905/831/448 +f 905/831/448 95/842/449 749/843/450 +f 749/843/450 43/858/451 905/831/448 +f 905/831/448 43/858/451 750/844/452 +f 905/831/448 750/844/452 745/823/441 +f 745/823/441 750/844/452 44/832/443 +f 1/819/434 744/822/435 748/830/447 +f 748/830/447 744/822/435 906/829/453 +f 744/822/435 69/828/440 906/829/453 +f 906/829/453 69/828/440 751/840/454 +f 906/829/453 751/840/454 752/841/455 +f 752/841/455 751/840/454 75/856/456 +f 748/830/447 906/829/453 95/842/449 +f 95/842/449 906/829/453 752/841/455 +f 753/835/457 907/836/458 2/825/436 +f 2/825/436 907/836/458 742/826/437 +f 753/835/457 4/849/459 907/836/458 +f 907/836/458 4/849/459 754/850/460 +f 907/836/458 754/850/460 755/851/461 +f 755/851/461 754/850/460 60/867/462 +f 907/836/458 755/851/461 742/826/437 +f 742/826/437 755/851/461 64/837/438 +f 2/825/436 747/834/445 753/835/457 +f 753/835/457 747/834/445 908/848/463 +f 45/847/446 756/863/464 747/834/445 +f 747/834/445 756/863/464 908/848/463 +f 756/863/464 3/880/465 908/848/463 +f 908/848/463 3/880/465 757/864/466 +f 908/848/463 757/864/466 753/835/457 +f 753/835/457 757/864/466 4/849/459 +f 757/864/466 762/881/467 4/849/459 +f 4/849/459 762/881/467 6/865/468 +f 3/880/465 5/898/469 757/864/466 +f 757/864/466 5/898/469 762/881/467 +f 758/897/470 761/916/471 3/880/465 +f 3/880/465 761/916/471 5/898/469 +f 761/916/471 758/897/470 382/935/472 +f 382/935/472 758/897/470 377/915/473 +f 3/880/465 756/863/464 758/897/470 +f 758/897/470 756/863/464 909/879/474 +f 756/863/464 45/847/446 909/879/474 +f 909/879/474 45/847/446 759/862/475 +f 754/850/460 763/866/476 60/867/462 +f 60/867/462 763/866/476 7/884/477 +f 4/849/459 6/865/468 754/850/460 +f 754/850/460 6/865/468 763/866/476 +f 60/867/462 7/884/477 760/885/478 +f 760/885/478 7/884/477 764/903/479 +f 760/885/478 764/903/479 59/904/480 +f 59/904/480 764/903/479 8/923/481 +f 5/898/469 761/916/471 779/917/482 +f 779/917/482 761/916/471 915/936/483 +f 6/865/468 762/881/467 781/882/484 +f 781/882/484 762/881/467 916/899/485 +f 762/881/467 5/898/469 916/899/485 +f 916/899/485 5/898/469 779/917/482 +f 7/884/477 763/866/476 783/902/486 +f 783/902/486 763/866/476 917/883/487 +f 763/866/476 6/865/468 917/883/487 +f 917/883/487 6/865/468 781/882/484 +f 8/923/481 764/903/479 785/943/488 +f 785/943/488 764/903/479 918/922/489 +f 764/903/479 7/884/477 918/922/489 +f 918/922/489 7/884/477 783/902/486 +f 765/944/490 938/965/491 56/966/492 +f 56/966/492 938/965/491 265/988/493 +f 765/944/490 8/923/481 938/965/491 +f 938/965/491 8/923/481 785/943/488 +f 59/904/480 8/923/481 336/924/494 +f 336/924/494 8/923/481 765/944/490 +f 56/966/492 58/945/495 765/944/490 +f 765/944/490 58/945/495 336/924/494 +f 995/956/496 915/936/483 382/935/472 +f 382/935/472 915/936/483 761/916/471 +f 766/1166/497 91/1146/498 910/1145/499 +f 910/1145/499 91/1146/498 767/1122/500 +f 910/1145/499 767/1122/500 768/1121/501 +f 768/1121/501 767/1122/500 88/1096/502 +f 769/1202/503 93/1186/504 911/1185/505 +f 911/1185/505 93/1186/504 770/1167/506 +f 911/1185/505 770/1167/506 766/1166/497 +f 766/1166/497 770/1167/506 91/1146/498 +f 912/1187/507 771/1169/508 772/1168/509 +f 772/1168/509 771/1169/508 36/1148/510 +f 769/1202/503 912/1187/507 93/1186/504 +f 93/1186/504 912/1187/507 772/1168/509 +f 913/1149/511 773/1126/512 774/1125/513 +f 774/1125/513 773/1126/512 37/1100/514 +f 771/1169/508 913/1149/511 36/1148/510 +f 36/1148/510 913/1149/511 774/1125/513 +f 914/1101/515 775/1074/516 776/1073/517 +f 776/1073/517 775/1074/516 38/1047/518 +f 773/1126/512 914/1101/515 37/1100/514 +f 37/1100/514 914/1101/515 776/1073/517 +f 777/1048/519 775/1074/516 414/1075/520 +f 414/1075/520 775/1074/516 412/1102/521 +f 775/1074/516 777/1048/519 38/1047/518 +f 38/1047/518 777/1048/519 39/1022/522 +f 777/1048/519 414/1075/520 955/1023/523 +f 955/1023/523 414/1075/520 1011/1049/524 +f 417/1024/525 303/999/526 1011/1049/524 +f 1011/1049/524 303/999/526 955/1023/523 +f 303/999/526 417/1024/525 957/976/527 +f 957/976/527 417/1024/525 1013/1000/528 +f 307/954/529 420/977/530 959/933/531 +f 959/933/531 420/977/530 1015/955/532 +f 311/913/533 423/934/534 961/894/535 +f 961/894/535 423/934/534 1017/914/536 +f 315/876/537 426/895/538 963/859/539 +f 963/859/539 426/895/538 1019/877/540 +f 429/860/541 1022/861/542 317/845/543 +f 317/845/543 1022/861/542 964/846/544 +f 381/878/545 994/896/546 759/862/475 +f 759/862/475 994/896/546 909/879/474 +f 994/896/546 377/915/473 909/879/474 +f 909/879/474 377/915/473 758/897/470 +f 778/957/547 9/937/548 915/936/483 +f 915/936/483 9/937/548 779/917/482 +f 9/937/548 780/918/549 779/917/482 +f 779/917/482 780/918/549 916/899/485 +f 916/899/485 780/918/549 781/882/484 +f 781/882/484 780/918/549 10/900/550 +f 781/882/484 10/900/550 917/883/487 +f 917/883/487 10/900/550 782/901/551 +f 917/883/487 782/901/551 783/902/486 +f 783/902/486 782/901/551 19/921/552 +f 783/902/486 19/921/552 918/922/489 +f 918/922/489 19/921/552 784/942/553 +f 918/922/489 784/942/553 785/943/488 +f 785/943/488 784/942/553 23/964/554 +f 786/1002/555 11/980/556 919/979/557 +f 919/979/557 11/980/556 787/958/558 +f 919/979/557 787/958/558 778/957/547 +f 778/957/547 787/958/558 9/937/548 +f 9/937/548 787/958/558 780/918/549 +f 780/918/549 787/958/558 920/938/559 +f 787/958/558 11/980/556 920/938/559 +f 920/938/559 11/980/556 788/959/560 +f 920/938/559 788/959/560 789/919/561 +f 789/919/561 788/959/560 12/939/562 +f 780/918/549 920/938/559 10/900/550 +f 10/900/550 920/938/559 789/919/561 +f 10/900/550 789/919/561 782/901/551 +f 782/901/551 789/919/561 921/920/563 +f 789/919/561 12/939/562 921/920/563 +f 921/920/563 12/939/562 790/940/564 +f 921/920/563 790/940/564 791/941/565 +f 791/941/565 790/940/564 18/962/566 +f 782/901/551 921/920/563 19/921/552 +f 19/921/552 921/920/563 791/941/565 +f 792/1051/567 13/1027/568 922/1026/569 +f 922/1026/569 13/1027/568 793/1003/570 +f 922/1026/569 793/1003/570 786/1002/555 +f 786/1002/555 793/1003/570 11/980/556 +f 11/980/556 793/1003/570 788/959/560 +f 788/959/560 793/1003/570 923/981/571 +f 793/1003/570 13/1027/568 923/981/571 +f 923/981/571 13/1027/568 794/1004/572 +f 923/981/571 794/1004/572 795/960/573 +f 795/960/573 794/1004/572 15/982/574 +f 788/959/560 923/981/571 12/939/562 +f 12/939/562 923/981/571 795/960/573 +f 12/939/562 795/960/573 790/940/564 +f 790/940/564 795/960/573 924/961/575 +f 795/960/573 15/982/574 924/961/575 +f 924/961/575 15/982/574 796/983/576 +f 924/961/575 796/983/576 797/984/577 +f 797/984/577 796/983/576 17/1007/578 +f 790/940/564 924/961/575 18/962/566 +f 18/962/566 924/961/575 797/984/577 +f 13/1027/568 798/1052/579 794/1004/572 +f 794/1004/572 798/1052/579 925/1028/580 +f 798/1052/579 96/1078/581 925/1028/580 +f 925/1028/580 96/1078/581 799/1053/582 +f 925/1028/580 799/1053/582 800/1005/583 +f 800/1005/583 799/1053/582 14/1029/584 +f 794/1004/572 925/1028/580 15/982/574 +f 15/982/574 925/1028/580 800/1005/583 +f 13/1027/568 792/1051/567 798/1052/579 +f 798/1052/579 792/1051/567 926/1077/585 +f 798/1052/579 926/1077/585 96/1078/581 +f 96/1078/581 926/1077/585 801/1104/586 +f 14/1029/584 802/1030/587 800/1005/583 +f 800/1005/583 802/1030/587 927/1006/588 +f 802/1030/587 16/1056/589 927/1006/588 +f 927/1006/588 16/1056/589 803/1031/590 +f 803/1031/590 17/1007/578 927/1006/588 +f 927/1006/588 17/1007/578 796/983/576 +f 927/1006/588 796/983/576 800/1005/583 +f 800/1005/583 796/983/576 15/982/574 +f 804/1054/591 928/1055/592 14/1029/584 +f 14/1029/584 928/1055/592 802/1030/587 +f 928/1055/592 805/1082/593 802/1030/587 +f 802/1030/587 805/1082/593 16/1056/589 +f 14/1029/584 799/1053/582 804/1054/591 +f 804/1054/591 799/1053/582 929/1079/594 +f 799/1053/582 96/1078/581 929/1079/594 +f 929/1079/594 96/1078/581 801/1104/586 +f 16/1056/589 806/1083/595 803/1031/590 +f 803/1031/590 806/1083/595 930/1057/596 +f 806/1083/595 20/1108/597 930/1057/596 +f 930/1057/596 20/1108/597 807/1084/598 +f 807/1084/598 21/1058/599 930/1057/596 +f 930/1057/596 21/1058/599 808/1032/600 +f 930/1057/596 808/1032/600 803/1031/590 +f 803/1031/590 808/1032/600 17/1007/578 +f 805/1082/593 931/1107/601 16/1056/589 +f 16/1056/589 931/1107/601 806/1083/595 +f 931/1107/601 809/1130/602 806/1083/595 +f 806/1083/595 809/1130/602 20/1108/597 +f 808/1032/600 932/1008/603 17/1007/578 +f 17/1007/578 932/1008/603 797/984/577 +f 21/1058/599 810/1033/604 808/1032/600 +f 808/1032/600 810/1033/604 932/1008/603 +f 810/1033/604 22/1009/605 932/1008/603 +f 932/1008/603 22/1009/605 811/985/606 +f 932/1008/603 811/985/606 797/984/577 +f 797/984/577 811/985/606 18/962/566 +f 811/985/606 933/963/607 18/962/566 +f 18/962/566 933/963/607 791/941/565 +f 22/1009/605 812/986/608 811/985/606 +f 811/985/606 812/986/608 933/963/607 +f 812/986/608 23/964/554 933/963/607 +f 933/963/607 23/964/554 784/942/553 +f 933/963/607 784/942/553 791/941/565 +f 791/941/565 784/942/553 19/921/552 +f 934/1152/609 257/1172/610 258/1131/611 +f 258/1131/611 257/1172/610 24/1153/612 +f 809/1130/602 934/1152/609 20/1108/597 +f 20/1108/597 934/1152/609 258/1131/611 +f 20/1108/597 258/1131/611 807/1084/598 +f 807/1084/598 258/1131/611 935/1109/613 +f 258/1131/611 24/1153/612 935/1109/613 +f 935/1109/613 24/1153/612 259/1132/614 +f 935/1109/613 259/1132/614 260/1085/615 +f 260/1085/615 259/1132/614 25/1110/616 +f 807/1084/598 935/1109/613 21/1058/599 +f 21/1058/599 935/1109/613 260/1085/615 +f 260/1085/615 936/1059/617 21/1058/599 +f 21/1058/599 936/1059/617 810/1033/604 +f 25/1110/616 261/1086/618 260/1085/615 +f 260/1085/615 261/1086/618 936/1059/617 +f 261/1086/618 26/1060/619 936/1059/617 +f 936/1059/617 26/1060/619 262/1034/620 +f 936/1059/617 262/1034/620 810/1033/604 +f 810/1033/604 262/1034/620 22/1009/605 +f 262/1034/620 937/1010/621 22/1009/605 +f 22/1009/605 937/1010/621 812/986/608 +f 26/1060/619 263/1035/622 262/1034/620 +f 262/1034/620 263/1035/622 937/1010/621 +f 263/1035/622 27/1011/623 937/1010/621 +f 937/1010/621 27/1011/623 264/987/624 +f 937/1010/621 264/987/624 812/986/608 +f 812/986/608 264/987/624 23/964/554 +f 264/987/624 938/965/491 23/964/554 +f 23/964/554 938/965/491 785/943/488 +f 27/1011/623 265/988/493 264/987/624 +f 264/987/624 265/988/493 938/965/491 +f 257/1172/610 939/1190/625 24/1153/612 +f 24/1153/612 939/1190/625 266/1173/626 +f 939/1190/625 270/1205/627 266/1173/626 +f 266/1173/626 270/1205/627 33/1191/628 +f 939/1190/625 257/1172/610 1037/1204/629 +f 1037/1204/629 257/1172/610 451/1189/630 +f 259/1132/614 940/1154/631 25/1110/616 +f 25/1110/616 940/1154/631 267/1133/632 +f 24/1153/612 266/1173/626 259/1132/614 +f 259/1132/614 266/1173/626 940/1154/631 +f 266/1173/626 33/1191/628 940/1154/631 +f 940/1154/631 33/1191/628 271/1174/633 +f 940/1154/631 271/1174/633 267/1133/632 +f 267/1133/632 271/1174/633 30/1155/634 +f 26/1060/619 261/1086/618 268/1087/635 +f 268/1087/635 261/1086/618 941/1111/636 +f 25/1110/616 267/1133/632 261/1086/618 +f 261/1086/618 267/1133/632 941/1111/636 +f 267/1133/632 30/1155/634 941/1111/636 +f 941/1111/636 30/1155/634 272/1134/637 +f 268/1087/635 941/1111/636 29/1112/638 +f 29/1112/638 941/1111/636 272/1134/637 +f 27/1011/623 263/1035/622 269/1036/639 +f 269/1036/639 263/1035/622 942/1061/640 +f 263/1035/622 26/1060/619 942/1061/640 +f 942/1061/640 26/1060/619 268/1087/635 +f 942/1061/640 268/1087/635 273/1088/641 +f 273/1088/641 268/1087/635 29/1112/638 +f 265/988/493 27/1011/623 943/1012/642 +f 943/1012/642 27/1011/623 269/1036/639 +f 943/1012/642 269/1036/639 274/1037/643 +f 274/1037/643 269/1036/639 28/1062/644 +f 56/966/492 265/988/493 325/989/645 +f 325/989/645 265/988/493 943/1012/642 +f 273/1088/641 28/1062/644 942/1061/640 +f 942/1061/640 28/1062/644 269/1036/639 +f 270/1205/627 939/1190/625 387/1216/646 +f 387/1216/646 939/1190/625 1037/1204/629 +f 326/1063/647 274/1037/643 50/1089/648 +f 50/1089/648 274/1037/643 28/1062/644 +f 273/1088/641 276/1113/649 28/1062/644 +f 28/1062/644 276/1113/649 50/1089/648 +f 29/1112/638 53/1135/650 273/1088/641 +f 273/1088/641 53/1135/650 276/1113/649 +f 272/1134/637 275/1156/651 29/1112/638 +f 29/1112/638 275/1156/651 53/1135/650 +f 272/1134/637 30/1155/634 275/1156/651 +f 275/1156/651 30/1155/634 31/1175/652 +f 271/1174/633 33/1191/628 277/1192/653 +f 277/1192/653 33/1191/628 34/1206/654 +f 277/1192/653 31/1175/652 271/1174/633 +f 271/1174/633 31/1175/652 30/1155/634 +f 31/1175/652 277/1192/653 280/1193/655 +f 280/1193/655 277/1192/653 944/1207/656 +f 277/1192/653 34/1206/654 944/1207/656 +f 944/1207/656 34/1206/654 278/1218/657 +f 944/1207/656 278/1218/657 279/1219/658 +f 279/1219/658 278/1218/657 35/383/659 +f 280/1193/655 944/1207/656 32/1208/660 +f 32/1208/660 944/1207/656 279/1219/658 +f 280/1193/655 945/1176/661 31/1175/652 +f 31/1175/652 945/1176/661 275/1156/651 +f 280/1193/655 32/1208/660 945/1176/661 +f 945/1176/661 32/1208/660 281/1194/662 +f 945/1176/661 281/1194/662 282/1157/663 +f 282/1157/663 281/1194/662 54/1177/664 +f 275/1156/651 945/1176/661 53/1135/650 +f 53/1135/650 945/1176/661 282/1157/663 +f 32/1208/660 279/1219/658 285/1220/665 +f 285/1220/665 279/1219/658 946/382/666 +f 279/1219/658 35/383/659 946/382/666 +f 946/382/666 35/383/659 283/374/667 +f 946/382/666 283/374/667 284/373/668 +f 284/373/668 283/374/667 76/367/669 +f 285/1220/665 946/382/666 94/381/670 +f 94/381/670 946/382/666 284/373/668 +f 32/1208/660 285/1220/665 281/1194/662 +f 281/1194/662 285/1220/665 947/1209/671 +f 285/1220/665 94/381/670 947/1209/671 +f 947/1209/671 94/381/670 286/1221/672 +f 947/1209/671 286/1221/672 287/1195/673 +f 287/1195/673 286/1221/672 55/1210/674 +f 281/1194/662 947/1209/671 54/1177/664 +f 54/1177/664 947/1209/671 287/1195/673 +f 270/1205/627 387/1216/646 288/1217/675 +f 288/1217/675 387/1216/646 389/385/676 +f 288/1217/675 34/1206/654 270/1205/627 +f 270/1205/627 34/1206/654 33/1191/628 +f 34/1206/654 288/1217/675 278/1218/657 +f 278/1218/657 288/1217/675 948/384/677 +f 288/1217/675 389/385/676 948/384/677 +f 948/384/677 389/385/676 1039/376/678 +f 278/1218/657 948/384/677 35/383/659 +f 35/383/659 948/384/677 289/375/679 +f 35/383/659 289/375/679 283/374/667 +f 283/374/667 289/375/679 949/368/680 +f 289/375/679 455/369/681 949/368/680 +f 949/368/680 455/369/681 1041/364/682 +f 283/374/667 949/368/680 76/367/669 +f 76/367/669 949/368/680 290/363/683 +f 49/1181/684 292/1198/685 291/1199/686 +f 291/1199/686 292/1198/685 950/1213/687 +f 292/1198/685 49/1181/684 951/1180/688 +f 951/1180/688 49/1181/684 324/1161/689 +f 292/1198/685 78/1212/690 950/1213/687 +f 950/1213/687 78/1212/690 293/1224/691 +f 950/1213/687 293/1224/691 1047/386/692 +f 1047/386/692 293/1224/691 464/377/693 +f 951/1180/688 294/1160/694 295/1197/695 +f 295/1197/695 294/1160/694 52/1179/696 +f 292/1198/685 951/1180/688 78/1212/690 +f 78/1212/690 951/1180/688 295/1197/695 +f 318/1182/697 392/1200/698 985/1163/699 +f 985/1163/699 392/1200/698 997/1183/700 +f 362/1142/701 394/1164/702 989/1120/703 +f 989/1120/703 394/1164/702 999/1143/704 +f 768/1121/501 397/1144/705 910/1145/499 +f 910/1145/499 397/1144/705 1001/1165/706 +f 766/1166/497 400/1184/707 911/1185/505 +f 911/1185/505 400/1184/707 1003/1201/708 +f 403/1215/709 1005/1203/710 769/1202/503 +f 769/1202/503 1005/1203/710 912/1187/507 +f 406/1188/711 1007/1170/712 771/1169/508 +f 771/1169/508 1007/1170/712 913/1149/511 +f 409/1150/713 1009/1127/714 773/1126/512 +f 773/1126/512 1009/1127/714 914/1101/515 +f 774/1125/513 952/1099/715 36/1148/510 +f 36/1148/510 952/1099/715 298/1124/716 +f 37/1100/514 296/1072/717 774/1125/513 +f 774/1125/513 296/1072/717 952/1099/715 +f 296/1072/717 70/1045/718 952/1099/715 +f 952/1099/715 70/1045/718 297/1071/719 +f 952/1099/715 297/1071/719 298/1124/716 +f 298/1124/716 297/1071/719 92/1098/720 +f 36/1148/510 298/1124/716 772/1168/509 +f 772/1168/509 298/1124/716 953/1147/721 +f 298/1124/716 92/1098/720 953/1147/721 +f 953/1147/721 92/1098/720 299/1123/722 +f 953/1147/721 299/1123/722 770/1167/506 +f 770/1167/506 299/1123/722 91/1146/498 +f 772/1168/509 953/1147/721 93/1186/504 +f 93/1186/504 953/1147/721 770/1167/506 +f 776/1073/517 954/1046/723 37/1100/514 +f 37/1100/514 954/1046/723 296/1072/717 +f 776/1073/517 38/1047/518 954/1046/723 +f 954/1046/723 38/1047/518 300/1021/724 +f 954/1046/723 300/1021/724 301/1020/725 +f 301/1020/725 300/1021/724 71/996/726 +f 954/1046/723 301/1020/725 296/1072/717 +f 296/1072/717 301/1020/725 70/1045/718 +f 300/1021/724 302/997/727 71/996/726 +f 71/996/726 302/997/727 72/973/728 +f 38/1047/518 39/1022/522 300/1021/724 +f 300/1021/724 39/1022/522 302/997/727 +f 39/1022/522 777/1048/519 304/998/729 +f 304/998/729 777/1048/519 955/1023/523 +f 72/973/728 302/997/727 306/951/730 +f 306/951/730 302/997/727 956/974/731 +f 302/997/727 39/1022/522 956/974/731 +f 956/974/731 39/1022/522 304/998/729 +f 304/998/729 955/1023/523 40/975/732 +f 40/975/732 955/1023/523 303/999/526 +f 956/974/731 304/998/729 305/952/733 +f 305/952/733 304/998/729 40/975/732 +f 306/951/730 956/974/731 73/930/734 +f 73/930/734 956/974/731 305/952/733 +f 307/954/529 41/932/735 957/976/527 +f 957/976/527 41/932/735 308/953/736 +f 957/976/527 308/953/736 303/999/526 +f 303/999/526 308/953/736 40/975/732 +f 308/953/736 958/931/737 40/975/732 +f 40/975/732 958/931/737 305/952/733 +f 41/932/735 309/911/738 308/953/736 +f 308/953/736 309/911/738 958/931/737 +f 309/911/738 74/891/739 958/931/737 +f 958/931/737 74/891/739 310/910/740 +f 958/931/737 310/910/740 305/952/733 +f 305/952/733 310/910/740 73/930/734 +f 311/913/533 42/893/741 959/933/531 +f 959/933/531 42/893/741 312/912/742 +f 959/933/531 312/912/742 307/954/529 +f 307/954/529 312/912/742 41/932/735 +f 312/912/742 960/892/743 41/932/735 +f 41/932/735 960/892/743 309/911/738 +f 42/893/741 313/874/744 312/912/742 +f 312/912/742 313/874/744 960/892/743 +f 313/874/744 75/856/456 960/892/743 +f 960/892/743 75/856/456 314/873/745 +f 960/892/743 314/873/745 309/911/738 +f 309/911/738 314/873/745 74/891/739 +f 315/876/537 43/858/451 961/894/535 +f 961/894/535 43/858/451 316/875/746 +f 961/894/535 316/875/746 311/913/533 +f 311/913/533 316/875/746 42/893/741 +f 316/875/746 962/857/747 42/893/741 +f 42/893/741 962/857/747 313/874/744 +f 43/858/451 749/843/450 316/875/746 +f 316/875/746 749/843/450 962/857/747 +f 749/843/450 95/842/449 962/857/747 +f 962/857/747 95/842/449 752/841/455 +f 962/857/747 752/841/455 313/874/744 +f 313/874/744 752/841/455 75/856/456 +f 317/845/543 44/832/443 963/859/539 +f 963/859/539 44/832/443 750/844/452 +f 963/859/539 750/844/452 315/876/537 +f 315/876/537 750/844/452 43/858/451 +f 964/846/544 759/862/475 746/833/444 +f 746/833/444 759/862/475 45/847/446 +f 964/846/544 746/833/444 317/845/543 +f 317/845/543 746/833/444 44/832/443 +f 318/1182/697 80/1162/748 291/1199/686 +f 291/1199/686 80/1162/748 49/1181/684 +f 319/1140/749 81/1117/750 324/1161/689 +f 324/1161/689 81/1117/750 48/1139/751 +f 80/1162/748 319/1140/749 49/1181/684 +f 49/1181/684 319/1140/749 324/1161/689 +f 320/1092/752 82/1065/753 323/1116/754 +f 323/1116/754 82/1065/753 47/1091/755 +f 81/1117/750 320/1092/752 48/1139/751 +f 48/1139/751 320/1092/752 323/1116/754 +f 321/1064/756 47/1091/755 322/1039/757 +f 322/1039/757 47/1091/755 82/1065/753 +f 46/1038/758 321/1064/756 83/1014/759 +f 83/1014/759 321/1064/756 322/1039/757 +f 321/1064/756 965/1090/760 47/1091/755 +f 47/1091/755 965/1090/760 328/1115/761 +f 46/1038/758 326/1063/647 321/1064/756 +f 321/1064/756 326/1063/647 965/1090/760 +f 966/1138/762 323/1116/754 328/1115/761 +f 328/1115/761 323/1116/754 47/1091/755 +f 951/1180/688 324/1161/689 294/1160/694 +f 294/1160/694 324/1161/689 48/1139/751 +f 79/1013/763 274/1037/643 46/1038/758 +f 46/1038/758 274/1037/643 326/1063/647 +f 325/989/645 943/1012/642 79/1013/763 +f 79/1013/763 943/1012/642 274/1037/643 +f 294/1160/694 48/1139/751 966/1138/762 +f 966/1138/762 48/1139/751 323/1116/754 +f 50/1089/648 327/1114/764 326/1063/647 +f 326/1063/647 327/1114/764 965/1090/760 +f 327/1114/764 51/1137/765 965/1090/760 +f 965/1090/760 51/1137/765 328/1115/761 +f 51/1137/765 329/1159/766 328/1115/761 +f 328/1115/761 329/1159/766 966/1138/762 +f 329/1159/766 52/1179/696 966/1138/762 +f 966/1138/762 52/1179/696 294/1160/694 +f 276/1113/649 967/1136/767 50/1089/648 +f 50/1089/648 967/1136/767 327/1114/764 +f 53/1135/650 282/1157/663 276/1113/649 +f 276/1113/649 282/1157/663 967/1136/767 +f 282/1157/663 54/1177/664 967/1136/767 +f 967/1136/767 54/1177/664 330/1158/768 +f 967/1136/767 330/1158/768 327/1114/764 +f 327/1114/764 330/1158/768 51/1137/765 +f 330/1158/768 968/1178/769 51/1137/765 +f 51/1137/765 968/1178/769 329/1159/766 +f 54/1177/664 287/1195/673 330/1158/768 +f 330/1158/768 287/1195/673 968/1178/769 +f 287/1195/673 55/1210/674 968/1178/769 +f 968/1178/769 55/1210/674 331/1196/770 +f 968/1178/769 331/1196/770 329/1159/766 +f 329/1159/766 331/1196/770 52/1179/696 +f 331/1196/770 969/1211/771 52/1179/696 +f 52/1179/696 969/1211/771 295/1197/695 +f 55/1210/674 332/1222/772 331/1196/770 +f 331/1196/770 332/1222/772 969/1211/771 +f 332/1222/772 77/379/773 969/1211/771 +f 969/1211/771 77/379/773 333/1223/774 +f 969/1211/771 333/1223/774 295/1197/695 +f 295/1197/695 333/1223/774 78/1212/690 +f 286/1221/672 970/380/775 55/1210/674 +f 55/1210/674 970/380/775 332/1222/772 +f 286/1221/672 94/381/670 970/380/775 +f 970/380/775 94/381/670 284/373/668 +f 284/373/668 76/367/669 970/380/775 +f 970/380/775 76/367/669 334/372/776 +f 970/380/775 334/372/776 332/1222/772 +f 332/1222/772 334/372/776 77/379/773 +f 778/957/547 385/978/777 919/979/557 +f 919/979/557 385/978/777 1023/1001/778 +f 786/1002/555 433/1025/779 922/1026/569 +f 922/1026/569 433/1025/779 1025/1050/780 +f 792/1051/567 436/1076/781 926/1077/585 +f 926/1077/585 436/1076/781 1027/1103/782 +f 439/1128/783 1029/1105/784 801/1104/586 +f 801/1104/586 1029/1105/784 929/1079/594 +f 442/1080/785 1031/1081/786 804/1054/591 +f 804/1054/591 1031/1081/786 928/1055/592 +f 445/1106/787 1033/1129/788 805/1082/593 +f 805/1082/593 1033/1129/788 931/1107/601 +f 448/1151/789 1035/1171/790 809/1130/602 +f 809/1130/602 1035/1171/790 934/1152/609 +f 325/989/645 335/967/791 56/966/492 +f 56/966/492 335/967/791 58/945/495 +f 79/1013/763 57/990/792 325/989/645 +f 325/989/645 57/990/792 335/967/791 +f 337/991/793 87/969/794 338/968/795 +f 338/968/795 87/969/794 61/947/796 +f 46/1038/758 83/1014/759 79/1013/763 +f 79/1013/763 83/1014/759 57/990/792 +f 338/968/795 57/990/792 337/991/793 +f 337/991/793 57/990/792 83/1014/759 +f 971/946/797 335/967/791 338/968/795 +f 338/968/795 335/967/791 57/990/792 +f 971/946/797 338/968/795 339/926/798 +f 339/926/798 338/968/795 61/947/796 +f 335/967/791 971/946/797 58/945/495 +f 58/945/495 971/946/797 340/925/799 +f 340/925/799 971/946/797 62/906/800 +f 62/906/800 971/946/797 339/926/798 +f 58/945/495 340/925/799 336/924/494 +f 336/924/494 340/925/799 972/905/801 +f 62/906/800 341/887/802 340/925/799 +f 340/925/799 341/887/802 972/905/801 +f 341/887/802 63/869/803 972/905/801 +f 972/905/801 63/869/803 342/886/804 +f 336/924/494 972/905/801 59/904/480 +f 59/904/480 972/905/801 342/886/804 +f 59/904/480 342/886/804 760/885/478 +f 760/885/478 342/886/804 973/868/805 +f 63/869/803 343/852/806 342/886/804 +f 342/886/804 343/852/806 973/868/805 +f 343/852/806 64/837/438 973/868/805 +f 973/868/805 64/837/438 755/851/461 +f 760/885/478 973/868/805 60/867/462 +f 60/867/462 973/868/805 755/851/461 +f 344/948/807 65/949/808 345/927/809 +f 345/927/809 65/949/808 66/928/810 +f 345/927/809 61/947/796 344/948/807 +f 344/948/807 61/947/796 87/969/794 +f 339/926/798 61/947/796 974/907/811 +f 974/907/811 61/947/796 345/927/809 +f 974/907/811 345/927/809 346/908/812 +f 346/908/812 345/927/809 66/928/810 +f 62/906/800 339/926/798 347/888/813 +f 347/888/813 339/926/798 974/907/811 +f 347/888/813 974/907/811 67/889/814 +f 67/889/814 974/907/811 346/908/812 +f 347/888/813 975/870/815 62/906/800 +f 62/906/800 975/870/815 341/887/802 +f 67/889/814 348/871/816 347/888/813 +f 347/888/813 348/871/816 975/870/815 +f 348/871/816 68/854/817 975/870/815 +f 975/870/815 68/854/817 349/853/818 +f 975/870/815 349/853/818 341/887/802 +f 341/887/802 349/853/818 63/869/803 +f 349/853/818 976/838/819 63/869/803 +f 63/869/803 976/838/819 343/852/806 +f 68/854/817 350/839/820 349/853/818 +f 349/853/818 350/839/820 976/838/819 +f 350/839/820 69/828/440 976/838/819 +f 976/838/819 69/828/440 743/827/439 +f 976/838/819 743/827/439 343/852/806 +f 343/852/806 743/827/439 64/837/438 +f 351/972/821 71/996/726 356/950/822 +f 356/950/822 71/996/726 72/973/728 +f 352/971/823 977/995/824 65/949/808 +f 65/949/808 977/995/824 351/972/821 +f 90/994/825 353/1019/826 352/971/823 +f 352/971/823 353/1019/826 977/995/824 +f 353/1019/826 70/1045/718 977/995/824 +f 977/995/824 70/1045/718 301/1020/725 +f 977/995/824 301/1020/725 351/972/821 +f 351/972/821 301/1020/725 71/996/726 +f 65/949/808 344/948/807 352/971/823 +f 352/971/823 344/948/807 978/970/827 +f 344/948/807 87/969/794 978/970/827 +f 978/970/827 87/969/794 354/992/828 +f 978/970/827 354/992/828 355/993/829 +f 355/993/829 354/992/828 86/1016/830 +f 352/971/823 978/970/827 90/994/825 +f 90/994/825 978/970/827 355/993/829 +f 356/950/822 66/928/810 351/972/821 +f 351/972/821 66/928/810 65/949/808 +f 346/908/812 66/928/810 979/929/831 +f 979/929/831 66/928/810 356/950/822 +f 979/929/831 356/950/822 306/951/730 +f 306/951/730 356/950/822 72/973/728 +f 67/889/814 346/908/812 357/909/832 +f 357/909/832 346/908/812 979/929/831 +f 979/929/831 306/951/730 357/909/832 +f 357/909/832 306/951/730 73/930/734 +f 357/909/832 980/890/833 67/889/814 +f 67/889/814 980/890/833 348/871/816 +f 357/909/832 73/930/734 980/890/833 +f 980/890/833 73/930/734 310/910/740 +f 310/910/740 74/891/739 980/890/833 +f 980/890/833 74/891/739 358/872/834 +f 980/890/833 358/872/834 348/871/816 +f 348/871/816 358/872/834 68/854/817 +f 358/872/834 981/855/835 68/854/817 +f 68/854/817 981/855/835 350/839/820 +f 74/891/739 314/873/745 358/872/834 +f 358/872/834 314/873/745 981/855/835 +f 314/873/745 75/856/456 981/855/835 +f 981/855/835 75/856/456 751/840/454 +f 981/855/835 751/840/454 350/839/820 +f 350/839/820 751/840/454 69/828/440 +f 70/1045/718 353/1019/826 297/1071/719 +f 297/1071/719 353/1019/826 982/1044/836 +f 353/1019/826 90/994/825 982/1044/836 +f 982/1044/836 90/994/825 359/1018/837 +f 982/1044/836 359/1018/837 360/1070/838 +f 360/1070/838 359/1018/837 89/1043/839 +f 297/1071/719 982/1044/836 92/1098/720 +f 92/1098/720 982/1044/836 360/1070/838 +f 76/367/669 290/363/683 334/372/776 +f 334/372/776 290/363/683 983/366/840 +f 290/363/683 458/361/841 983/366/840 +f 983/366/840 458/361/841 1043/362/842 +f 334/372/776 983/366/840 77/379/773 +f 77/379/773 983/366/840 361/371/843 +f 77/379/773 361/371/843 333/1223/774 +f 333/1223/774 361/371/843 984/378/844 +f 984/378/844 361/371/843 1045/370/845 +f 1045/370/845 361/371/843 461/365/846 +f 984/378/844 293/1224/691 333/1223/774 +f 333/1223/774 293/1224/691 78/1212/690 +f 362/1142/701 84/1119/847 985/1163/699 +f 985/1163/699 84/1119/847 363/1141/848 +f 985/1163/699 363/1141/848 318/1182/697 +f 318/1182/697 363/1141/848 80/1162/748 +f 363/1141/848 986/1118/849 80/1162/748 +f 80/1162/748 986/1118/849 319/1140/749 +f 84/1119/847 364/1094/850 363/1141/848 +f 363/1141/848 364/1094/850 986/1118/849 +f 364/1094/850 85/1067/851 986/1118/849 +f 986/1118/849 85/1067/851 365/1093/852 +f 986/1118/849 365/1093/852 319/1140/749 +f 319/1140/749 365/1093/852 81/1117/750 +f 365/1093/852 987/1066/853 81/1117/750 +f 81/1117/750 987/1066/853 320/1092/752 +f 85/1067/851 366/1041/854 365/1093/852 +f 365/1093/852 366/1041/854 987/1066/853 +f 366/1041/854 86/1016/830 987/1066/853 +f 987/1066/853 86/1016/830 367/1040/855 +f 987/1066/853 367/1040/855 320/1092/752 +f 320/1092/752 367/1040/855 82/1065/753 +f 367/1040/855 988/1015/856 82/1065/753 +f 82/1065/753 988/1015/856 322/1039/757 +f 367/1040/855 86/1016/830 988/1015/856 +f 988/1015/856 86/1016/830 354/992/828 +f 988/1015/856 354/992/828 337/991/793 +f 337/991/793 354/992/828 87/969/794 +f 322/1039/757 988/1015/856 83/1014/759 +f 83/1014/759 988/1015/856 337/991/793 +f 768/1121/501 88/1096/502 989/1120/703 +f 989/1120/703 88/1096/502 368/1095/857 +f 989/1120/703 368/1095/857 362/1142/701 +f 362/1142/701 368/1095/857 84/1119/847 +f 84/1119/847 368/1095/857 364/1094/850 +f 364/1094/850 368/1095/857 990/1068/858 +f 368/1095/857 88/1096/502 990/1068/858 +f 990/1068/858 88/1096/502 369/1069/859 +f 990/1068/858 369/1069/859 370/1042/860 +f 370/1042/860 369/1069/859 89/1043/839 +f 364/1094/850 990/1068/858 85/1067/851 +f 85/1067/851 990/1068/858 370/1042/860 +f 85/1067/851 370/1042/860 366/1041/854 +f 366/1041/854 370/1042/860 991/1017/861 +f 370/1042/860 89/1043/839 991/1017/861 +f 991/1017/861 89/1043/839 359/1018/837 +f 991/1017/861 359/1018/837 355/993/829 +f 355/993/829 359/1018/837 90/994/825 +f 366/1041/854 991/1017/861 86/1016/830 +f 86/1016/830 991/1017/861 355/993/829 +f 88/1096/502 767/1122/500 369/1069/859 +f 369/1069/859 767/1122/500 992/1097/862 +f 767/1122/500 91/1146/498 992/1097/862 +f 992/1097/862 91/1146/498 299/1123/722 +f 992/1097/862 299/1123/722 360/1070/838 +f 360/1070/838 299/1123/722 92/1098/720 +f 369/1069/859 992/1097/862 89/1043/839 +f 89/1043/839 992/1097/862 360/1070/838 +f 227/1/863 513/2/864 472/4/865 +f 472/4/865 513/2/864 1077/3/866 +f 1078/5/119 513/2/864 473/6/867 +f 473/6/867 513/2/864 227/1/863 +f 371/7/868 225/8/869 472/4/865 +f 472/4/865 225/8/869 227/1/863 +f 227/1/863 225/8/869 473/6/867 +f 473/6/867 225/8/869 372/9/312 +f 372/502/312 572/481/36 473/523/867 +f 473/523/867 572/481/36 574/501/39 +f 373/10/870 228/11/871 538/13/872 +f 538/13/872 228/11/871 251/12/873 +f 251/12/873 228/11/871 539/15/261 +f 539/15/261 228/11/871 374/14/220 +f 229/17/874 256/18/875 375/16/267 +f 375/16/267 256/18/875 554/19/266 +f 256/18/875 229/17/874 553/21/876 +f 553/21/876 229/17/874 376/20/877 +f 1052/756/416 375/771/267 895/737/413 +f 895/737/413 375/771/267 686/755/265 +f 1054/717/58 476/738/417 899/690/56 +f 899/690/56 476/738/417 733/715/415 +f 1056/724/62 479/716/59 820/701/60 +f 820/701/60 479/716/59 579/691/57 +f 1058/759/71 482/743/63 821/742/68 +f 821/742/68 482/743/63 581/723/61 +f 822/740/73 1060/757/78 583/758/70 +f 583/758/70 1060/757/78 485/772/72 +f 823/697/79 1062/719/84 585/720/75 +f 585/720/75 1062/719/84 488/739/77 +f 824/645/85 1064/671/90 587/672/81 +f 587/672/81 1064/671/90 491/696/83 +f 574/501/39 825/522/48 473/523/867 +f 473/523/867 825/522/48 1078/545/119 +f 1080/592/131 515/568/120 829/567/128 +f 829/567/128 515/568/120 591/544/118 +f 1082/643/145 518/617/132 832/616/142 +f 832/616/142 518/617/132 599/591/130 +f 1084/695/344 521/670/146 836/667/161 +f 836/667/161 521/670/146 605/642/144 +f 524/718/345 613/694/162 1086/693/346 +f 1086/693/346 613/694/162 839/665/170 +f 527/669/347 617/641/168 1088/668/348 +f 1088/668/348 617/641/168 838/640/167 +f 530/692/349 616/664/169 1090/711/185 +f 1090/711/185 616/664/169 841/685/177 +f 533/734/186 621/710/178 1092/752/191 +f 1092/752/191 621/710/178 844/732/187 +f 377/22/473 193/23/878 382/25/472 +f 382/25/472 193/23/878 195/24/879 +f 195/24/879 193/23/878 383/27/880 +f 383/27/880 193/23/878 378/26/881 +f 378/26/881 371/7/868 383/27/880 +f 383/27/880 371/7/868 472/4/865 +f 193/23/878 379/28/882 378/26/881 +f 378/26/881 379/28/882 993/29/883 +f 379/28/882 194/30/884 993/29/883 +f 993/29/883 194/30/884 380/31/885 +f 993/29/883 380/31/885 1050/33/886 +f 1050/33/886 380/31/885 471/32/887 +f 377/22/473 994/34/546 193/23/878 +f 193/23/878 994/34/546 379/28/882 +f 994/34/546 381/35/545 379/28/882 +f 379/28/882 381/35/545 194/30/884 +f 996/36/888 384/37/889 383/27/880 +f 383/27/880 384/37/889 195/24/879 +f 195/24/879 384/37/889 382/25/472 +f 382/25/472 384/37/889 995/38/496 +f 995/38/496 384/37/889 385/40/777 +f 385/40/777 384/37/889 211/39/890 +f 915/936/483 995/956/496 778/957/547 +f 778/957/547 995/956/496 385/978/777 +f 384/37/889 996/36/888 211/39/890 +f 211/39/890 996/36/888 386/41/891 +f 387/42/646 196/43/892 389/45/676 +f 389/45/676 196/43/892 219/44/893 +f 219/44/893 196/43/892 390/47/894 +f 390/47/894 196/43/892 388/46/895 +f 388/46/895 373/10/870 390/47/894 +f 390/47/894 373/10/870 538/13/872 +f 391/48/896 197/49/897 468/51/898 +f 468/51/898 197/49/897 224/50/899 +f 376/20/877 391/48/896 553/21/876 +f 553/21/876 391/48/896 468/51/898 +f 392/52/698 197/49/897 997/54/700 +f 997/54/700 197/49/897 393/53/900 +f 997/54/700 393/53/900 394/56/702 +f 394/56/702 393/53/900 198/55/901 +f 985/1163/699 997/1183/700 362/1142/701 +f 362/1142/701 997/1183/700 394/1164/702 +f 197/49/897 391/48/896 393/53/900 +f 393/53/900 391/48/896 998/57/902 +f 998/57/902 391/48/896 1051/58/903 +f 1051/58/903 391/48/896 376/20/877 +f 393/53/900 998/57/902 198/55/901 +f 198/55/901 998/57/902 395/59/904 +f 394/56/702 198/55/901 999/61/704 +f 999/61/704 198/55/901 396/60/905 +f 999/61/704 396/60/905 397/63/705 +f 397/63/705 396/60/905 199/62/906 +f 989/1120/703 999/1143/704 768/1121/501 +f 768/1121/501 999/1143/704 397/1144/705 +f 198/55/901 395/59/904 396/60/905 +f 396/60/905 395/59/904 1000/64/907 +f 1000/64/907 395/59/904 1053/66/908 +f 1053/66/908 395/59/904 475/65/909 +f 396/60/905 1000/64/907 199/62/906 +f 199/62/906 1000/64/907 398/67/910 +f 397/63/705 199/62/906 1001/69/706 +f 1001/69/706 199/62/906 399/68/911 +f 399/68/911 200/70/912 1001/69/706 +f 1001/69/706 200/70/912 400/71/707 +f 910/1145/499 1001/1165/706 766/1166/497 +f 766/1166/497 1001/1165/706 400/1184/707 +f 199/62/906 398/67/910 399/68/911 +f 399/68/911 398/67/910 1002/72/913 +f 1002/72/913 398/67/910 1055/74/914 +f 1055/74/914 398/67/910 478/73/915 +f 1002/72/913 401/75/916 399/68/911 +f 399/68/911 401/75/916 200/70/912 +f 200/70/912 402/76/917 400/71/707 +f 400/71/707 402/76/917 1003/77/708 +f 1003/77/708 402/76/917 403/79/709 +f 403/79/709 402/76/917 201/78/918 +f 911/1185/505 1003/1201/708 769/1202/503 +f 769/1202/503 1003/1201/708 403/1215/709 +f 401/75/916 1004/80/919 200/70/912 +f 200/70/912 1004/80/919 402/76/917 +f 1004/80/919 401/75/916 1057/82/920 +f 1057/82/920 401/75/916 481/81/921 +f 402/76/917 1004/80/919 201/78/918 +f 201/78/918 1004/80/919 404/83/922 +f 201/78/918 405/84/923 403/79/709 +f 403/79/709 405/84/923 1005/85/710 +f 1005/85/710 405/84/923 406/87/711 +f 406/87/711 405/84/923 202/86/924 +f 1005/1203/710 406/1188/711 912/1187/507 +f 912/1187/507 406/1188/711 771/1169/508 +f 201/78/918 404/83/922 405/84/923 +f 405/84/923 404/83/922 1006/88/925 +f 1006/88/925 404/83/922 1059/90/926 +f 1059/90/926 404/83/922 484/89/927 +f 405/84/923 1006/88/925 202/86/924 +f 202/86/924 1006/88/925 407/91/928 +f 406/87/711 202/86/924 1007/93/712 +f 1007/93/712 202/86/924 408/92/929 +f 408/92/929 203/94/930 1007/93/712 +f 1007/93/712 203/94/930 409/95/713 +f 1007/1170/712 409/1150/713 913/1149/511 +f 913/1149/511 409/1150/713 773/1126/512 +f 202/86/924 407/91/928 408/92/929 +f 408/92/929 407/91/928 1008/96/931 +f 1008/96/931 407/91/928 1061/98/932 +f 1061/98/932 407/91/928 487/97/933 +f 1008/96/931 410/99/934 408/92/929 +f 408/92/929 410/99/934 203/94/930 +f 203/94/930 411/100/935 409/95/713 +f 409/95/713 411/100/935 1009/101/714 +f 411/100/935 204/102/936 1009/101/714 +f 1009/101/714 204/102/936 412/103/521 +f 1009/1127/714 412/1102/521 914/1101/515 +f 914/1101/515 412/1102/521 775/1074/516 +f 410/99/934 1010/104/937 203/94/930 +f 203/94/930 1010/104/937 411/100/935 +f 1010/104/937 410/99/934 1063/106/938 +f 1063/106/938 410/99/934 490/105/939 +f 1010/104/937 413/107/940 411/100/935 +f 411/100/935 413/107/940 204/102/936 +f 204/102/936 205/108/941 412/103/521 +f 412/103/521 205/108/941 414/109/520 +f 205/108/941 204/102/936 415/110/942 +f 415/110/942 204/102/936 413/107/940 +f 414/109/520 205/108/941 1011/112/524 +f 1011/112/524 205/108/941 416/111/943 +f 416/111/943 205/108/941 1012/113/944 +f 1012/113/944 205/108/941 415/110/942 +f 1011/112/524 416/111/943 417/115/525 +f 417/115/525 416/111/943 206/114/945 +f 418/116/946 1012/113/944 498/118/947 +f 498/118/947 1012/113/944 1065/117/948 +f 416/111/943 1012/113/944 206/114/945 +f 206/114/945 1012/113/944 418/116/946 +f 417/115/525 206/114/945 1013/120/528 +f 1013/120/528 206/114/945 419/119/949 +f 1013/120/528 419/119/949 420/122/530 +f 420/122/530 419/119/949 207/121/950 +f 420/977/530 307/954/529 1013/1000/528 +f 1013/1000/528 307/954/529 957/976/527 +f 206/114/945 418/116/946 419/119/949 +f 419/119/949 418/116/946 1014/123/951 +f 1014/123/951 418/116/946 1067/124/952 +f 1067/124/952 418/116/946 498/118/947 +f 419/119/949 1014/123/951 207/121/950 +f 207/121/950 1014/123/951 421/125/953 +f 420/122/530 207/121/950 1015/127/532 +f 1015/127/532 207/121/950 422/126/954 +f 1015/127/532 422/126/954 423/129/534 +f 423/129/534 422/126/954 208/128/955 +f 423/934/534 311/913/533 1015/955/532 +f 1015/955/532 311/913/533 959/933/531 +f 207/121/950 421/125/953 422/126/954 +f 422/126/954 421/125/953 1016/130/956 +f 1016/130/956 421/125/953 1069/132/957 +f 1069/132/957 421/125/953 501/131/958 +f 422/126/954 1016/130/956 208/128/955 +f 208/128/955 1016/130/956 424/133/959 +f 423/129/534 208/128/955 1017/135/536 +f 1017/135/536 208/128/955 425/134/960 +f 1017/135/536 425/134/960 426/137/538 +f 426/137/538 425/134/960 209/136/961 +f 426/895/538 315/876/537 1017/914/536 +f 1017/914/536 315/876/537 961/894/535 +f 208/128/955 424/133/959 425/134/960 +f 425/134/960 424/133/959 1018/138/962 +f 1018/138/962 424/133/959 1071/140/963 +f 1071/140/963 424/133/959 504/139/964 +f 425/134/960 1018/138/962 209/136/961 +f 209/136/961 1018/138/962 427/141/965 +f 209/136/961 428/142/966 426/137/538 +f 426/137/538 428/142/966 1019/1230/540 +f 1019/143/540 428/1229/966 429/145/541 +f 429/145/541 428/1229/966 210/144/967 +f 429/860/541 317/845/543 1019/877/540 +f 1019/877/540 317/845/543 963/859/539 +f 427/141/965 1020/146/968 209/136/961 +f 209/136/961 1020/146/968 428/142/966 +f 1020/146/968 427/141/965 1073/1227/969 +f 1073/1227/969 427/141/965 507/147/970 +f 428/1229/966 1020/1228/968 210/144/967 +f 210/144/967 1020/1228/968 430/149/971 +f 194/30/884 431/150/972 380/31/885 +f 380/31/885 431/150/972 1021/151/973 +f 1021/151/973 431/150/972 430/149/971 +f 430/149/971 431/150/972 210/144/967 +f 1021/151/973 430/149/971 1076/153/974 +f 1076/153/974 430/149/971 510/152/975 +f 381/35/545 1022/154/542 194/30/884 +f 194/30/884 1022/154/542 431/150/972 +f 1022/861/542 381/878/545 964/846/544 +f 964/846/544 381/878/545 759/862/475 +f 431/150/972 1022/154/542 210/144/967 +f 210/144/967 1022/154/542 429/145/541 +f 385/40/777 211/39/890 1023/156/778 +f 1023/156/778 211/39/890 432/155/976 +f 1023/156/778 432/155/976 433/158/779 +f 433/158/779 432/155/976 212/157/977 +f 919/979/557 1023/1001/778 786/1002/555 +f 786/1002/555 1023/1001/778 433/1025/779 +f 211/39/890 386/41/891 432/155/976 +f 432/155/976 386/41/891 1024/159/978 +f 1024/159/978 386/41/891 1079/161/979 +f 1079/161/979 386/41/891 514/160/980 +f 432/155/976 1024/159/978 212/157/977 +f 212/157/977 1024/159/978 434/162/981 +f 433/158/779 212/157/977 1025/164/780 +f 1025/164/780 212/157/977 435/163/982 +f 435/163/982 213/165/983 1025/164/780 +f 1025/164/780 213/165/983 436/166/781 +f 436/1076/781 792/1051/567 1025/1050/780 +f 1025/1050/780 792/1051/567 922/1026/569 +f 212/157/977 434/162/981 435/163/982 +f 435/163/982 434/162/981 1026/167/984 +f 1026/167/984 434/162/981 1081/169/985 +f 1081/169/985 434/162/981 517/168/986 +f 435/163/982 1026/167/984 213/165/983 +f 213/165/983 1026/167/984 437/170/987 +f 436/166/781 213/165/983 1027/172/782 +f 1027/172/782 213/165/983 438/171/988 +f 1027/172/782 438/171/988 439/174/783 +f 439/174/783 438/171/988 214/173/989 +f 1027/1103/782 439/1128/783 926/1077/585 +f 926/1077/585 439/1128/783 801/1104/586 +f 213/165/983 437/170/987 438/171/988 +f 438/171/988 437/170/987 1028/175/990 +f 1028/175/990 437/170/987 1083/177/991 +f 1083/177/991 437/170/987 520/176/992 +f 438/171/988 1028/175/990 214/173/989 +f 214/173/989 1028/175/990 440/178/993 +f 214/173/989 441/179/994 439/174/783 +f 439/174/783 441/179/994 1029/180/784 +f 1029/180/784 441/179/994 442/182/785 +f 442/182/785 441/179/994 215/181/995 +f 1029/1105/784 442/1080/785 929/1079/594 +f 929/1079/594 442/1080/785 804/1054/591 +f 440/178/993 1030/183/996 214/173/989 +f 214/173/989 1030/183/996 441/179/994 +f 1030/183/996 440/178/993 1085/185/997 +f 1085/185/997 440/178/993 523/184/998 +f 441/179/994 1030/183/996 215/181/995 +f 215/181/995 1030/183/996 443/186/999 +f 442/182/785 215/181/995 1031/188/786 +f 1031/188/786 215/181/995 444/187/1000 +f 444/187/1000 216/189/1001 1031/188/786 +f 1031/188/786 216/189/1001 445/190/787 +f 1031/1081/786 445/1106/787 928/1055/592 +f 928/1055/592 445/1106/787 805/1082/593 +f 215/181/995 443/186/999 444/187/1000 +f 444/187/1000 443/186/999 1032/191/1002 +f 1032/191/1002 443/186/999 1087/193/1003 +f 1087/193/1003 443/186/999 526/192/1004 +f 1032/191/1002 446/194/1005 444/187/1000 +f 444/187/1000 446/194/1005 216/189/1001 +f 216/189/1001 447/195/1006 445/190/787 +f 445/190/787 447/195/1006 1033/196/788 +f 447/195/1006 217/197/1007 1033/196/788 +f 1033/196/788 217/197/1007 448/198/789 +f 1033/1129/788 448/1151/789 931/1107/601 +f 931/1107/601 448/1151/789 809/1130/602 +f 446/194/1005 1034/199/1008 216/189/1001 +f 216/189/1001 1034/199/1008 447/195/1006 +f 1034/199/1008 446/194/1005 1089/201/1009 +f 1089/201/1009 446/194/1005 529/200/1010 +f 1034/199/1008 449/202/1011 447/195/1006 +f 447/195/1006 449/202/1011 217/197/1007 +f 217/197/1007 450/203/1012 448/198/789 +f 448/198/789 450/203/1012 1035/204/790 +f 450/203/1012 218/205/1013 1035/204/790 +f 1035/204/790 218/205/1013 451/206/630 +f 1035/1171/790 451/1189/630 934/1152/609 +f 934/1152/609 451/1189/630 257/1172/610 +f 449/202/1011 1036/207/1014 217/197/1007 +f 217/197/1007 1036/207/1014 450/203/1012 +f 1036/207/1014 449/202/1011 1091/209/1015 +f 1091/209/1015 449/202/1011 532/208/1016 +f 1036/207/1014 452/210/1017 450/203/1012 +f 450/203/1012 452/210/1017 218/205/1013 +f 218/205/1013 453/211/1018 451/206/630 +f 451/206/630 453/211/1018 1037/212/629 +f 452/210/1017 1038/213/1019 218/205/1013 +f 218/205/1013 1038/213/1019 453/211/1018 +f 1038/213/1019 452/210/1017 1093/215/1020 +f 1093/215/1020 452/210/1017 535/214/1021 +f 388/46/895 196/43/892 1038/213/1019 +f 1038/213/1019 196/43/892 453/211/1018 +f 453/211/1018 196/43/892 1037/212/629 +f 1037/212/629 196/43/892 387/42/646 +f 389/45/676 219/44/893 1039/217/678 +f 1039/217/678 219/44/893 454/216/1022 +f 1039/217/678 454/216/1022 455/219/681 +f 455/219/681 454/216/1022 220/218/1023 +f 948/384/677 1039/376/678 289/375/679 +f 289/375/679 1039/376/678 455/369/681 +f 219/44/893 390/47/894 454/216/1022 +f 454/216/1022 390/47/894 1040/220/1024 +f 1040/220/1024 390/47/894 1095/221/1025 +f 1095/221/1025 390/47/894 538/13/872 +f 454/216/1022 1040/220/1024 220/218/1023 +f 220/218/1023 1040/220/1024 456/222/1026 +f 455/219/681 220/218/1023 1041/224/682 +f 1041/224/682 220/218/1023 457/223/1027 +f 1041/224/682 457/223/1027 458/226/841 +f 458/226/841 457/223/1027 221/225/1028 +f 949/368/680 1041/364/682 290/363/683 +f 290/363/683 1041/364/682 458/361/841 +f 220/218/1023 456/222/1026 457/223/1027 +f 457/223/1027 456/222/1026 1042/227/1029 +f 1042/227/1029 456/222/1026 1097/229/1030 +f 1097/229/1030 456/222/1026 541/228/1031 +f 457/223/1027 1042/227/1029 221/225/1028 +f 221/225/1028 1042/227/1029 459/230/1032 +f 221/225/1028 460/231/1033 458/226/841 +f 458/226/841 460/231/1033 1043/1236/842 +f 1043/232/842 460/1235/1033 461/234/846 +f 461/234/846 460/1235/1033 222/233/1034 +f 983/366/840 1043/362/842 361/371/843 +f 361/371/843 1043/362/842 461/365/846 +f 459/230/1032 1044/235/1035 221/225/1028 +f 221/225/1028 1044/235/1035 460/231/1033 +f 1044/235/1035 459/230/1032 1099/1233/1036 +f 1099/1233/1036 459/230/1032 544/236/1037 +f 460/1235/1033 1044/1234/1035 222/233/1034 +f 222/233/1034 1044/1234/1035 462/238/1038 +f 461/234/846 222/233/1034 1045/240/845 +f 1045/240/845 222/233/1034 463/239/1039 +f 463/239/1039 223/241/1040 1045/240/845 +f 1045/240/845 223/241/1040 464/242/693 +f 1045/370/845 464/377/693 984/378/844 +f 984/378/844 464/377/693 293/1224/691 +f 222/233/1034 462/238/1038 463/239/1039 +f 463/239/1039 462/238/1038 1046/243/1041 +f 1046/243/1041 462/238/1038 1101/245/1042 +f 1101/245/1042 462/238/1038 547/244/1043 +f 1046/243/1041 465/246/1044 463/239/1039 +f 463/239/1039 465/246/1044 223/241/1040 +f 223/241/1040 466/247/1045 464/242/693 +f 464/242/693 466/247/1045 1047/248/692 +f 466/247/1045 224/50/899 1047/248/692 +f 1047/248/692 224/50/899 467/249/1046 +f 291/1199/686 950/1213/687 467/1214/1046 +f 467/1214/1046 950/1213/687 1047/386/692 +f 465/246/1044 1048/250/1047 223/241/1040 +f 223/241/1040 1048/250/1047 466/247/1045 +f 1048/250/1047 465/246/1044 1103/252/1048 +f 1103/252/1048 465/246/1044 550/251/1049 +f 224/50/899 466/247/1045 468/51/898 +f 468/51/898 466/247/1045 1048/250/1047 +f 197/49/897 392/52/698 224/50/899 +f 224/50/899 392/52/698 467/249/1046 +f 392/1200/698 318/1182/697 467/1214/1046 +f 467/1214/1046 318/1182/697 291/1199/686 +f 372/9/312 225/8/869 1049/254/116 +f 1049/254/116 225/8/869 469/253/1050 +f 1049/254/116 469/253/1050 470/256/115 +f 470/256/115 469/253/1050 226/255/1051 +f 225/8/869 371/7/868 469/253/1050 +f 469/253/1050 371/7/868 1050/33/886 +f 993/29/883 1050/33/886 378/26/881 +f 378/26/881 1050/33/886 371/7/868 +f 469/253/1050 1050/33/886 226/255/1051 +f 226/255/1051 1050/33/886 471/32/887 +f 1077/3/866 996/36/888 472/4/865 +f 472/4/865 996/36/888 383/27/880 +f 229/17/874 474/257/1052 376/20/877 +f 376/20/877 474/257/1052 1051/58/903 +f 474/257/1052 230/258/1053 1051/58/903 +f 1051/58/903 230/258/1053 475/65/909 +f 998/57/902 1051/58/903 395/59/904 +f 395/59/904 1051/58/903 475/65/909 +f 375/16/267 1052/259/416 229/17/874 +f 229/17/874 1052/259/416 474/257/1052 +f 1052/259/416 476/260/417 474/257/1052 +f 474/257/1052 476/260/417 230/258/1053 +f 230/258/1053 477/261/1054 475/65/909 +f 475/65/909 477/261/1054 1053/66/908 +f 477/261/1054 231/262/1055 1053/66/908 +f 1053/66/908 231/262/1055 478/73/915 +f 1000/64/907 1053/66/908 398/67/910 +f 398/67/910 1053/66/908 478/73/915 +f 476/260/417 1054/263/58 230/258/1053 +f 230/258/1053 1054/263/58 477/261/1054 +f 1054/263/58 479/264/59 477/261/1054 +f 477/261/1054 479/264/59 231/262/1055 +f 231/262/1055 480/265/1056 478/73/915 +f 478/73/915 480/265/1056 1055/74/914 +f 1055/74/914 480/265/1056 481/81/921 +f 481/81/921 480/265/1056 232/266/1057 +f 1002/72/913 1055/74/914 401/75/916 +f 401/75/916 1055/74/914 481/81/921 +f 479/264/59 1056/267/62 231/262/1055 +f 231/262/1055 1056/267/62 480/265/1056 +f 480/265/1056 1056/267/62 232/266/1057 +f 232/266/1057 1056/267/62 482/268/63 +f 481/81/921 232/266/1057 1057/82/920 +f 1057/82/920 232/266/1057 483/269/1058 +f 483/269/1058 233/270/1059 1057/82/920 +f 1057/82/920 233/270/1059 484/89/927 +f 1004/80/919 1057/82/920 404/83/922 +f 404/83/922 1057/82/920 484/89/927 +f 232/266/1057 482/268/63 483/269/1058 +f 483/269/1058 482/268/63 1058/271/71 +f 1058/271/71 485/272/72 483/269/1058 +f 483/269/1058 485/272/72 233/270/1059 +f 484/89/927 233/270/1059 1059/90/926 +f 1059/90/926 233/270/1059 486/273/1060 +f 1059/90/926 486/273/1060 487/97/933 +f 487/97/933 486/273/1060 234/274/1061 +f 1006/88/925 1059/90/926 407/91/928 +f 407/91/928 1059/90/926 487/97/933 +f 233/270/1059 485/272/72 486/273/1060 +f 486/273/1060 485/272/72 1060/275/78 +f 1060/275/78 488/276/77 486/273/1060 +f 486/273/1060 488/276/77 234/274/1061 +f 487/97/933 234/274/1061 1061/98/932 +f 1061/98/932 234/274/1061 489/277/1062 +f 1061/98/932 489/277/1062 490/105/939 +f 490/105/939 489/277/1062 235/278/1063 +f 1008/96/931 1061/98/932 410/99/934 +f 410/99/934 1061/98/932 490/105/939 +f 488/276/77 1062/279/84 234/274/1061 +f 234/274/1061 1062/279/84 489/277/1062 +f 489/277/1062 1062/279/84 235/278/1063 +f 235/278/1063 1062/279/84 491/280/83 +f 490/105/939 235/278/1063 1063/106/938 +f 1063/106/938 235/278/1063 492/281/1064 +f 1063/106/938 492/281/1064 493/283/1065 +f 493/283/1065 492/281/1064 236/282/1066 +f 1010/104/937 1063/106/938 413/107/940 +f 413/107/940 1063/106/938 493/283/1065 +f 235/278/1063 491/280/83 492/281/1064 +f 492/281/1064 491/280/83 1064/284/90 +f 492/281/1064 1064/284/90 236/282/1066 +f 236/282/1066 1064/284/90 494/285/89 +f 415/110/942 413/107/940 495/286/1067 +f 495/286/1067 413/107/940 493/283/1065 +f 493/283/1065 236/282/1066 495/286/1067 +f 495/286/1067 236/282/1066 237/287/1068 +f 236/282/1066 494/285/89 237/287/1068 +f 237/287/1068 494/285/89 496/288/91 +f 415/110/942 495/286/1067 1012/113/944 +f 1012/113/944 495/286/1067 1065/117/948 +f 495/286/1067 237/287/1068 1065/117/948 +f 1065/117/948 237/287/1068 497/289/1069 +f 497/289/1069 237/287/1068 1066/290/94 +f 1066/290/94 237/287/1068 496/288/91 +f 497/289/1069 238/291/1070 1065/117/948 +f 1065/117/948 238/291/1070 498/118/947 +f 1066/290/94 499/292/96 497/289/1069 +f 497/289/1069 499/292/96 238/291/1070 +f 238/291/1070 500/293/1071 498/118/947 +f 498/118/947 500/293/1071 1067/124/952 +f 500/293/1071 239/294/1072 1067/124/952 +f 1067/124/952 239/294/1072 501/131/958 +f 1014/123/951 1067/124/952 421/125/953 +f 421/125/953 1067/124/952 501/131/958 +f 499/292/96 1068/295/95 238/291/1070 +f 238/291/1070 1068/295/95 500/293/1071 +f 1068/295/95 502/296/100 500/293/1071 +f 500/293/1071 502/296/100 239/294/1072 +f 239/294/1072 503/297/1073 501/131/958 +f 501/131/958 503/297/1073 1069/132/957 +f 503/297/1073 240/298/1074 1069/132/957 +f 1069/132/957 240/298/1074 504/139/964 +f 1016/130/956 1069/132/957 424/133/959 +f 424/133/959 1069/132/957 504/139/964 +f 502/296/100 1070/299/99 239/294/1072 +f 239/294/1072 1070/299/99 503/297/1073 +f 1070/299/99 505/300/104 503/297/1073 +f 503/297/1073 505/300/104 240/298/1074 +f 504/139/964 240/298/1074 1071/140/963 +f 1071/140/963 240/298/1074 506/301/1075 +f 1071/140/963 506/301/1075 507/147/970 +f 507/147/970 506/301/1075 241/302/1076 +f 1018/138/962 1071/140/963 427/141/965 +f 427/141/965 1071/140/963 507/147/970 +f 240/298/1074 505/300/104 506/301/1075 +f 506/301/1075 505/300/104 1072/303/103 +f 506/301/1075 1072/303/103 241/302/1076 +f 241/302/1076 1072/303/103 508/304/108 +f 507/147/970 241/302/1076 1073/1227/969 +f 1073/1227/969 241/302/1076 509/305/1077 +f 509/1226/1077 242/306/1078 1073/148/969 +f 1073/148/969 242/306/1078 510/152/975 +f 1020/1228/968 1073/148/969 430/149/971 +f 430/149/971 1073/148/969 510/152/975 +f 241/302/1076 508/304/108 509/305/1077 +f 509/305/1077 508/304/108 1074/307/107 +f 1074/1225/107 511/308/111 509/1226/1077 +f 509/1226/1077 511/308/111 242/306/1078 +f 470/256/115 226/255/1051 1075/310/113 +f 1075/310/113 226/255/1051 512/309/1079 +f 1075/310/113 512/309/1079 511/308/111 +f 511/308/111 512/309/1079 242/306/1078 +f 226/255/1051 471/32/887 512/309/1079 +f 512/309/1079 471/32/887 1076/153/974 +f 1021/151/973 1076/153/974 380/31/885 +f 380/31/885 1076/153/974 471/32/887 +f 512/309/1079 1076/153/974 242/306/1078 +f 242/306/1078 1076/153/974 510/152/975 +f 513/2/864 243/311/1080 1077/3/866 +f 1077/3/866 243/311/1080 514/160/980 +f 996/36/888 1077/3/866 386/41/891 +f 386/41/891 1077/3/866 514/160/980 +f 1078/5/119 515/312/120 513/2/864 +f 513/2/864 515/312/120 243/311/1080 +f 243/311/1080 516/313/1081 514/160/980 +f 514/160/980 516/313/1081 1079/161/979 +f 516/313/1081 244/314/1082 1079/161/979 +f 1079/161/979 244/314/1082 517/168/986 +f 1024/159/978 1079/161/979 434/162/981 +f 434/162/981 1079/161/979 517/168/986 +f 515/312/120 1080/315/131 243/311/1080 +f 243/311/1080 1080/315/131 516/313/1081 +f 1080/315/131 518/316/132 516/313/1081 +f 516/313/1081 518/316/132 244/314/1082 +f 244/314/1082 519/317/1083 517/168/986 +f 517/168/986 519/317/1083 1081/169/985 +f 1081/169/985 519/317/1083 520/176/992 +f 520/176/992 519/317/1083 245/318/1084 +f 1026/167/984 1081/169/985 437/170/987 +f 437/170/987 1081/169/985 520/176/992 +f 518/316/132 1082/319/145 244/314/1082 +f 244/314/1082 1082/319/145 519/317/1083 +f 519/317/1083 1082/319/145 245/318/1084 +f 245/318/1084 1082/319/145 521/320/146 +f 520/176/992 245/318/1084 1083/177/991 +f 1083/177/991 245/318/1084 522/321/1085 +f 1083/177/991 522/321/1085 523/184/998 +f 523/184/998 522/321/1085 246/322/1086 +f 1028/175/990 1083/177/991 440/178/993 +f 440/178/993 1083/177/991 523/184/998 +f 245/318/1084 521/320/146 522/321/1085 +f 522/321/1085 521/320/146 1084/323/344 +f 522/321/1085 1084/323/344 246/322/1086 +f 246/322/1086 1084/323/344 524/324/345 +f 523/184/998 246/322/1086 1085/185/997 +f 1085/185/997 246/322/1086 525/325/1087 +f 525/325/1087 247/326/1088 1085/185/997 +f 1085/185/997 247/326/1088 526/192/1004 +f 1030/183/996 1085/185/997 443/186/999 +f 443/186/999 1085/185/997 526/192/1004 +f 246/322/1086 524/324/345 525/325/1087 +f 525/325/1087 524/324/345 1086/327/346 +f 1086/327/346 527/328/347 525/325/1087 +f 525/325/1087 527/328/347 247/326/1088 +f 247/326/1088 528/329/1089 526/192/1004 +f 526/192/1004 528/329/1089 1087/193/1003 +f 1087/193/1003 528/329/1089 529/200/1010 +f 529/200/1010 528/329/1089 248/330/1090 +f 1032/191/1002 1087/193/1003 446/194/1005 +f 446/194/1005 1087/193/1003 529/200/1010 +f 527/328/347 1088/331/348 247/326/1088 +f 247/326/1088 1088/331/348 528/329/1089 +f 528/329/1089 1088/331/348 248/330/1090 +f 248/330/1090 1088/331/348 530/332/349 +f 529/200/1010 248/330/1090 1089/201/1009 +f 1089/201/1009 248/330/1090 531/333/1091 +f 1089/201/1009 531/333/1091 532/208/1016 +f 532/208/1016 531/333/1091 249/334/1092 +f 1034/199/1008 1089/201/1009 449/202/1011 +f 449/202/1011 1089/201/1009 532/208/1016 +f 248/330/1090 530/332/349 531/333/1091 +f 531/333/1091 530/332/349 1090/335/185 +f 531/333/1091 1090/335/185 249/334/1092 +f 249/334/1092 1090/335/185 533/336/186 +f 532/208/1016 249/334/1092 1091/209/1015 +f 1091/209/1015 249/334/1092 534/337/1093 +f 1091/209/1015 534/337/1093 535/214/1021 +f 535/214/1021 534/337/1093 250/338/1094 +f 1036/207/1014 1091/209/1015 452/210/1017 +f 452/210/1017 1091/209/1015 535/214/1021 +f 249/334/1092 533/336/186 534/337/1093 +f 534/337/1093 533/336/186 1092/339/191 +f 534/337/1093 1092/339/191 250/338/1094 +f 250/338/1094 1092/339/191 536/340/192 +f 535/214/1021 250/338/1094 1093/215/1020 +f 1093/215/1020 250/338/1094 537/341/1095 +f 250/338/1094 536/340/192 537/341/1095 +f 537/341/1095 536/340/192 1094/342/221 +f 374/14/220 228/11/871 1094/342/221 +f 1094/342/221 228/11/871 537/341/1095 +f 537/341/1095 228/11/871 1093/215/1020 +f 1093/215/1020 228/11/871 373/10/870 +f 373/10/870 388/46/895 1093/215/1020 +f 1093/215/1020 388/46/895 1038/213/1019 +f 251/12/873 540/343/1096 538/13/872 +f 538/13/872 540/343/1096 1095/221/1025 +f 540/343/1096 252/344/1097 1095/221/1025 +f 1095/221/1025 252/344/1097 541/228/1031 +f 1040/220/1024 1095/221/1025 456/222/1026 +f 456/222/1026 1095/221/1025 541/228/1031 +f 539/15/261 1096/345/262 251/12/873 +f 251/12/873 1096/345/262 540/343/1096 +f 1096/345/262 542/346/263 540/343/1096 +f 540/343/1096 542/346/263 252/344/1097 +f 541/228/1031 252/344/1097 1097/229/1030 +f 1097/229/1030 252/344/1097 543/347/1098 +f 1097/229/1030 543/347/1098 544/236/1037 +f 544/236/1037 543/347/1098 253/348/1099 +f 1042/227/1029 1097/229/1030 459/230/1032 +f 459/230/1032 1097/229/1030 544/236/1037 +f 542/346/263 1098/349/405 252/344/1097 +f 252/344/1097 1098/349/405 543/347/1098 +f 543/347/1098 1098/349/405 253/348/1099 +f 253/348/1099 1098/349/405 545/350/406 +f 544/236/1037 253/348/1099 1099/1233/1036 +f 1099/1233/1036 253/348/1099 546/351/1100 +f 546/1232/1100 254/352/1101 1099/237/1036 +f 1099/237/1036 254/352/1101 547/244/1043 +f 1044/1234/1035 1099/237/1036 462/238/1038 +f 462/238/1038 1099/237/1036 547/244/1043 +f 253/348/1099 545/350/406 546/351/1100 +f 546/351/1100 545/350/406 1100/353/407 +f 1100/1231/407 548/354/408 546/1232/1100 +f 546/1232/1100 548/354/408 254/352/1101 +f 547/244/1043 254/352/1101 1101/245/1042 +f 1101/245/1042 254/352/1101 549/355/1102 +f 1101/245/1042 549/355/1102 550/251/1049 +f 550/251/1049 549/355/1102 255/356/1103 +f 1046/243/1041 1101/245/1042 465/246/1044 +f 465/246/1044 1101/245/1042 550/251/1049 +f 254/352/1101 548/354/408 549/355/1102 +f 549/355/1102 548/354/408 1102/357/409 +f 549/355/1102 1102/357/409 255/356/1103 +f 255/356/1103 1102/357/409 551/358/410 +f 550/251/1049 255/356/1103 1103/252/1048 +f 1103/252/1048 255/356/1103 552/359/1104 +f 1103/252/1048 552/359/1104 553/21/876 +f 553/21/876 552/359/1104 256/18/875 +f 468/51/898 1048/250/1047 553/21/876 +f 553/21/876 1048/250/1047 1103/252/1048 +f 255/356/1103 551/358/410 552/359/1104 +f 552/359/1104 551/358/410 1104/360/411 +f 552/359/1104 1104/360/411 256/18/875 +f 256/18/875 1104/360/411 554/19/266 diff --git a/WebGPUDemo/Resources/SwiftLogo/T_M_swiftLogo_BaseColor.png b/WebGPUDemo/Resources/SwiftLogo/T_M_swiftLogo_BaseColor.png new file mode 100644 index 0000000..95d737d Binary files /dev/null and b/WebGPUDemo/Resources/SwiftLogo/T_M_swiftLogo_BaseColor.png differ diff --git a/WebGPUDemo/Resources/SwiftLogo/T_M_swiftLogo_MetalRoughness.png b/WebGPUDemo/Resources/SwiftLogo/T_M_swiftLogo_MetalRoughness.png new file mode 100644 index 0000000..4e63c84 Binary files /dev/null and b/WebGPUDemo/Resources/SwiftLogo/T_M_swiftLogo_MetalRoughness.png differ diff --git a/WebGPUDemo/Resources/SwiftLogo/T_M_swiftLogo_Normal.png b/WebGPUDemo/Resources/SwiftLogo/T_M_swiftLogo_Normal.png new file mode 100644 index 0000000..26cd403 Binary files /dev/null and b/WebGPUDemo/Resources/SwiftLogo/T_M_swiftLogo_Normal.png differ diff --git a/WebGPUDemo/Resources/shaders.wgsl b/WebGPUDemo/Resources/shaders.wgsl new file mode 100644 index 0000000..8b1e898 --- /dev/null +++ b/WebGPUDemo/Resources/shaders.wgsl @@ -0,0 +1,166 @@ + +@group(0) @binding(0) var vertices: array; +@group(0) @binding(1) var indices: array; +@group(0) @binding(2) var uvs: array; +@group(0) @binding(3) var normals: array; +@group(0) @binding(4) var albedoTexture: texture_2d; +@group(0) @binding(5) var normalTexture: texture_2d; +@group(0) @binding(6) var metallicRoughnessTexture: texture_2d; +@group(0) @binding(7) var modelMatrix: mat4x4f; +@group(0) @binding(8) var texSampler: sampler; +@group(0) @binding(9) var viewProjectionMatrix: mat4x4f; + +struct VSOut { + @builtin(position) pos: vec4f, + @location(0) worldPos: vec4f, + @location(1) texCoord: vec2f, + @location(2) normal: vec3f, + @location(3) tangent: vec3f, +}; + +fn hash(_a: u32) -> u32 { + var a = _a; + a = (a+0x7ed55d16) + (a<<12); + a = (a^0xc761c23c) ^ (a>>19); + a = (a+0x165667b1) + (a<<5); + a = (a+0xd3a2646c) ^ (a<<9); + a = (a+0xfd7046c5) + (a<<3); + a = (a^0xb55a4f09) ^ (a>>16); + return a; +} + +fn getRow(row: u32, m: mat4x4f) -> vec4f { + return vec4(m[0][row], m[1][row], m[2][row], m[3][row]); +} + +fn mat3x3f_make_row_first(a: vec3, b: vec3, c: vec3) -> mat3x3f { + return mat3x3f(vec3(a.x, b.x, c.x), + vec3(a.y, b.y, c.y), + vec3(a.z, b.z, c.z)); +} + +fn adjoint(m: mat4x4f) -> mat3x3f { + return mat3x3f_make_row_first( + cross(getRow(1, m).xyz, getRow(2, m).xyz) * -1.0, + cross(getRow(2, m).xyz, getRow(0, m).xyz) * -1.0, + cross(getRow(0, m).xyz, getRow(1, m).xyz) * -1.0 + ); +} + +@vertex fn vs( + @builtin(vertex_index) vertexIndex : u32 +) -> VSOut { + var out = VSOut(); + let index = vertexIndex; + out.worldPos = modelMatrix * vertices[index]; + out.pos = viewProjectionMatrix * out.worldPos; + out.texCoord = uvs[index]; + out.normal = normalize(adjoint(modelMatrix) * normals[index].xyz); + + var up = vec3(1.0, 0.0, 0.0); + if (out.normal.y < 0.999) { + up = vec3(0.0, 1.0, 0.0); + } + out.tangent = normalize(cross(up, out.normal)); + + return out; +} + +fn sqr(x: f32) -> f32 { + return x * x; +} + +fn schlickFresnel(VdotH: f32, F0: vec3f, F90: f32) -> vec3f { + return (F0 + (1.0 - F0) * pow(1.0f - VdotH, 5)); +} + +fn ggxDistribution(NoH: f32, roughness: f32, h: vec3f) -> f32 { + let oneMinusNoHSquared = 1 - NoH * NoH; + let a = NoH * roughness; + let k = roughness / (oneMinusNoHSquared + a * a); + let d = k * k * (1.0 / 3.1415); + + return min(d, 65504.0); +} + +fn V_SmithGGXCorrelated(alpha2: f32, NoV: f32, NoL: f32) -> f32 { + let lambdaV = NoL * sqrt((NoV - alpha2 * NoV) * NoV + alpha2); + let lambdaL = NoV * sqrt((NoL - alpha2 * NoL) * NoL + alpha2); + let v = 0.5 / (lambdaV + lambdaL); + return min(v, 65504.0); +} + +fn BRDF_diffuse(F: vec3f, NoL: f32, metallic: f32) -> vec3f { + let diffuse = (1.0 - F) * (1.0 - metallic); + + return diffuse * NoL; +} + +fn BRDF_specular(roughness: f32, F: vec3f, H: vec3f, NoH: f32, NoV: f32, NoL: f32) -> vec3f { + let D = ggxDistribution(NoH, roughness, H); + let Vis = V_SmithGGXCorrelated(sqr(roughness), NoV, NoL); + let specular = D * Vis * F; + + return specular * NoL; +} + +struct Lighting { + diffuse: vec3f, + specular: vec3f, +}; + +fn sunLight(V: vec3f, N: vec3f, F0: vec3f, roughness: f32, metallic: f32) -> Lighting { + let L = normalize(vec3f(0.5, -0.5, -0.5)); + let H = normalize(L + V); + + let NoH = saturate(dot(N, H)); + let NoV = saturate(dot(N, V)); + let NoL = saturate(dot(N, L)); + let VoH = saturate(dot(V, H)); + + let F90 = saturate(dot(F0, vec3(0.33))); + let F = schlickFresnel(VoH, F0, F90); + + let lightColor = vec3(1.0, 1.0, 0.984) * 2.5; + + let diffuse = lightColor * BRDF_diffuse(F, NoL, metallic); + let specular = lightColor * BRDF_specular(roughness, F, H, NoH, NoV, NoL); + + return Lighting(diffuse, specular); +} + +fn ACESToneMapping(color: vec3f) -> vec3f { + let a = 2.51f; + let b = 0.03f; + let c = 2.43f; + let d = 0.59f; + let e = 0.14f; + return saturate((color*(a*color+b))/(color*(c*color+d)+e)); +} + +@fragment fn fs(input: VSOut) -> @location(0) vec4f { + let vertPos = input.pos; + + let N = normalize(input.normal); + var T = normalize(input.tangent); + var B = normalize(cross(N, T)); + + var normalMap = textureSample(normalTexture, texSampler, input.texCoord).xyz * 2.0 - 1.0; + normalMap = vec3f(normalMap.xy * 2.0, normalMap.z); + normalMap = normalize(normalMap); + let TBN = mat3x3(T.x, B.x, N.x, T.y, B.y, N.y, T.z, B.z, N.z); + + var worldNormal = normalize(TBN * normalMap); + worldNormal.y *= -1; + let albedo = textureSample(albedoTexture, texSampler, input.texCoord); + let metalRoughness = textureSample(metallicRoughnessTexture, texSampler, input.texCoord); + + let V = normalize(input.worldPos).xyz; + let F0 = mix(vec3f(0.04), albedo.rgb, metalRoughness.b); + let roughness = max(0.08, metalRoughness.g); + + let lighting = sunLight(V, worldNormal, F0, roughness, metalRoughness.b); + + return vec4f(ACESToneMapping(albedo.rgb * max(lighting.diffuse, vec3(0.2, 0.2, 0.2)) + lighting.specular), 1.0); +} + diff --git a/WebGPUDemo/Sources/Drawable.swift b/WebGPUDemo/Sources/Drawable.swift new file mode 100644 index 0000000..5ff1233 --- /dev/null +++ b/WebGPUDemo/Sources/Drawable.swift @@ -0,0 +1,258 @@ +//===----------------------------------------------------------------------===// +// +// This source file is part of the Swift.org open source project +// +// Copyright (c) 2025 Apple Inc. and the Swift project authors +// Licensed under Apache License v2.0 with Runtime Library Exception +// +// See https://swift.org/LICENSE.txt for license information +// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors +// +//===----------------------------------------------------------------------===// + +import DOM +import WebGPU + +public struct Drawable { + let indexBuffer: GPUBuffer + let vertexBuffer: GPUBuffer + let uvBuffer: GPUBuffer + let normalBuffer: GPUBuffer + let matrixBuffer: GPUBuffer + let viewProjectionMatrixBuffer: GPUBuffer + let bindGroup: GPUBindGroup + let indexCount: Int + + let albedoTexture: GPUTexture + let normalTexture: GPUTexture + let metalRoughnessTexture: GPUTexture + + var position: Vector4 + var scale: Vector4 + var rotation: Quaternion + + init( + device: GPUDevice, + bindGroupLayout: GPUBindGroupLayout, + mesh: Mesh, + position: Vector4, + scale: Vector4, + rotation: Quaternion = .identity, + assets: Renderer.Assets, + ) { + func createTextureFromImage(_ image: ImageBitmap, label: String) -> GPUTexture { + let texture = device.createTexture( + descriptor: .init( + label: label, + size: .init([image.width, image.height]), + format: .rgba8unorm, + usage: (GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST + | GPUTextureUsage.RENDER_ATTACHMENT), + ) + ) + + device.queue.copyExternalImageToTexture( + source: .init(source: .init(image), flipY: true), + destination: .init(texture: texture), + copySize: .init(.init(width: image.width, height: image.height)), + ) + + return texture + } + + self.indexCount = mesh.indices.count + self.scale = scale + self.position = position + self.rotation = rotation + let vertices = Float32Array(length: mesh.vertices.count * 4) + for (i, v) in mesh.vertices.enumerated() { + let index = i * 4 + vertices[index] = v.x + vertices[index + 1] = v.y + vertices[index + 2] = v.z + vertices[index + 3] = v.w + } + + self.vertexBuffer = device.createBuffer( + descriptor: .init( + label: "Vertices", + size: .init(vertices.lengthInBytes), + usage: GPUBufferUsage.STORAGE | GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST, + ) + ) + device.queue.writeBuffer( + buffer: vertexBuffer, + bufferOffset: 0, + data: .init(vertices.arrayBuffer), + dataOffset: 0 + ) + + let indices = Uint32Array(length: mesh.indices.count) + for (i, v) in mesh.indices.enumerated() { + indices[i] = v + } + + indexBuffer = device.createBuffer( + descriptor: .init( + label: "Indices", + size: .init(indices.lengthInBytes), + usage: + GPUBufferUsage.STORAGE | GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST + ) + ) + device.queue.writeBuffer( + buffer: indexBuffer, + bufferOffset: 0, + data: .init(indices.arrayBuffer), + dataOffset: 0 + ) + + let uvs = Float32Array(length: mesh.uvs.count * 4) + for (i, v) in mesh.uvs.enumerated() { + let index = i * 2 + uvs[index] = v.x + uvs[index + 1] = v.y + } + uvBuffer = device.createBuffer( + descriptor: .init( + label: "UVs", + size: .init(uvs.lengthInBytes), + usage: + GPUBufferUsage.STORAGE | GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST + ), + ) + device.queue.writeBuffer( + buffer: uvBuffer, + bufferOffset: 0, + data: .init(uvs.arrayBuffer), + dataOffset: 0 + ) + + let normals = Float32Array(length: mesh.normals.count * 4) + for (i, v) in mesh.normals.enumerated() { + let index = i * 4 + normals[index] = v.x + normals[index + 1] = v.y + normals[index + 2] = v.z + normals[index + 3] = v.w + } + normalBuffer = device.createBuffer( + descriptor: .init( + label: "Normals", + size: .init(normals.lengthInBytes), + usage: GPUBufferUsage.STORAGE | GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST + ), + ) + device.queue.writeBuffer( + buffer: normalBuffer, + bufferOffset: 0, + data: .init(normals.arrayBuffer), + dataOffset: 0 + ) + + matrixBuffer = device.createBuffer( + descriptor: .init( + label: "Model Matrix", + size: .init(MemoryLayout.stride * 16), + usage: + GPUBufferUsage.STORAGE | GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST + ) + ) + + viewProjectionMatrixBuffer = device.createBuffer( + descriptor: .init( + label: "View Projection Matrix", + size: .init(MemoryLayout.stride * 16), + usage: GPUBufferUsage.STORAGE | GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST + ), + ) + albedoTexture = createTextureFromImage(assets.albedo, label: "Albedo") + normalTexture = createTextureFromImage(assets.normal, label: "Normal") + metalRoughnessTexture = createTextureFromImage(assets.metalRoughness, label: "MetalRoughness") + + let sampler = device.createSampler( + descriptor: .init( + addressModeU: .repeat, + addressModeV: .repeat, + magFilter: .linear, + ) + ) + + bindGroup = device.createBindGroup( + descriptor: .init( + label: "bind group", + layout: bindGroupLayout, + entries: [ + .init(binding: 0, resource: GPUBindingResource(.init(buffer: vertexBuffer))), + .init(binding: 1, resource: GPUBindingResource(.init(buffer: indexBuffer))), + .init(binding: 2, resource: GPUBindingResource(.init(buffer: uvBuffer))), + .init(binding: 3, resource: GPUBindingResource(.init(buffer: normalBuffer))), + .init( + binding: 4, + resource: GPUBindingResource.gpuTextureView(albedoTexture.createView()) + ), + .init(binding: 5, resource: GPUBindingResource(normalTexture.createView())), + .init(binding: 6, resource: GPUBindingResource(metalRoughnessTexture.createView())), + .init(binding: 7, resource: GPUBindingResource(.init(buffer: matrixBuffer))), + .init(binding: 8, resource: GPUBindingResource(sampler)), + .init( + binding: 9, + resource: GPUBindingResource(.init(buffer: viewProjectionMatrixBuffer)) + ), + ] + ) + ) + } + + var matrix: Matrix4x4 { + let scaleM = Matrix4x4( + axisX: scale.xVec, + axisY: scale.yVec, + axisZ: scale.zVec, + translation: position + ) + let transRotM = Matrix4x4(translation: position, rotation: rotation) + + return scaleM * transRotM + } + + func updateMatrixBuffer(queue: GPUQueue, viewProjection: Matrix4x4) { + func writeMatrix(_ m: Matrix4x4, buffer: GPUBuffer) { + let matrixArray = Float32Array(length: 16) + matrixArray[0] = m.axisX.x + matrixArray[1] = m.axisX.y + matrixArray[2] = m.axisX.z + matrixArray[3] = m.axisX.w + + matrixArray[4] = m.axisY.x + matrixArray[5] = m.axisY.y + matrixArray[6] = m.axisY.z + matrixArray[7] = m.axisY.w + + matrixArray[8] = m.axisZ.x + matrixArray[9] = m.axisZ.y + matrixArray[10] = m.axisZ.z + matrixArray[11] = m.axisZ.w + + matrixArray[12] = m.translation.x + matrixArray[13] = m.translation.y + matrixArray[14] = m.translation.z + matrixArray[15] = m.translation.w + + queue.writeBuffer( + buffer: buffer, + bufferOffset: 0, + data: .init(matrixArray.arrayBuffer), + dataOffset: 0 + ) + } + + writeMatrix(self.matrix, buffer: matrixBuffer) + writeMatrix(viewProjection, buffer: viewProjectionMatrixBuffer) + } + + public func draw(pass: GPURenderPassEncoder) { + pass.setBindGroup(index: 0, bindGroup: bindGroup) + pass.draw(vertexCount: .init(indexCount)) + } +} diff --git a/WebGPUDemo/Sources/Entrypoint.swift b/WebGPUDemo/Sources/Entrypoint.swift new file mode 100644 index 0000000..4cf2a38 --- /dev/null +++ b/WebGPUDemo/Sources/Entrypoint.swift @@ -0,0 +1,61 @@ +//===----------------------------------------------------------------------===// +// +// This source file is part of the Swift.org open source project +// +// Copyright (c) 2025 Apple Inc. and the Swift project authors +// Licensed under Apache License v2.0 with Runtime Library Exception +// +// See https://swift.org/LICENSE.txt for license information +// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors +// +//===----------------------------------------------------------------------===// + +import _Concurrency +import DOM +import JavaScriptEventLoop +import JavaScriptKit +import WebAPIBase +import WebGPU + +func fetchString(url: String) async throws(JSException) -> String { + let result = try await Window.global.fetch(input: .init(url)) + return try await result.text() +} + +func fetchImageBitmap(url: String) async throws(JSException) -> ImageBitmap { + let blob = try await Window.global.fetch(input: .init(url)).blob() + return try await Window.global.createImageBitmap( + image: .blob(blob), + options: .init(colorSpaceConversion: ColorSpaceConversion.none) + ) +} + +@main +struct Entrypoint { + static func main() { + JavaScriptEventLoop.installGlobalExecutor() + let gpu = Window.global.navigator.gpu + Task { + do throws(JSException) { + let adapter = try await gpu.requestAdapter()! + let device = try await adapter.requestDevice() + + let renderer = try await Renderer( + device: device, + gpu: gpu, + assets: .init( + shaders: fetchString(url: "Resources/shaders.wgsl"), + model: fetchString(url: "Resources/SwiftLogo/Swift3DLogo.obj"), + albedo: fetchImageBitmap(url: "Resources/SwiftLogo/T_M_swiftLogo_BaseColor.png"), + normal: fetchImageBitmap(url: "Resources/SwiftLogo/T_M_swiftLogo_Normal.png"), + metalRoughness: fetchImageBitmap(url: "Resources/SwiftLogo/T_M_swiftLogo_MetalRoughness.png"), + ), + ) + + draw(renderer: renderer) + } catch { + console.error(data: error.thrownValue) + } + } + } +} diff --git a/WebGPUDemo/Sources/Math.swift b/WebGPUDemo/Sources/Math.swift new file mode 100644 index 0000000..034572b --- /dev/null +++ b/WebGPUDemo/Sources/Math.swift @@ -0,0 +1,220 @@ +//===----------------------------------------------------------------------===// +// +// This source file is part of the Swift.org open source project +// +// Copyright (c) 2025 Apple Inc. and the Swift project authors +// Licensed under Apache License v2.0 with Runtime Library Exception +// +// See https://swift.org/LICENSE.txt for license information +// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors +// +//===----------------------------------------------------------------------===// + +import JavaScriptKit + +public func sin(_ x: T) -> T { + T(JSObject.global.Math.sin.function!(Float(x).jsValue).number!) +} + +public func cos(_ x: T) -> T { + T(JSObject.global.Math.cos.function!(Float(x).jsValue).number!) +} + +public func tan(_ x: T) -> T { + T(JSObject.global.Math.tan.function!(Float(x).jsValue).number!) +} + +public func square(_ x: Float) -> Float { + x * x +} + +extension BinaryFloatingPoint { + public func lerp(_ b: Self, _ s: Self) -> Self { + self + (b - self) * s + } +} + +public typealias Vector2 = SIMD2 +public typealias Vector4 = SIMD4 + +public extension SIMD4 where Scalar: BinaryFloatingPoint { + var xVec: Self { + .init(x: x, y: 0, z: 0, w: 0) + } + + var yVec: Self { + .init(x: 0, y: y, z: 0, w: 0) + } + + var zVec: Self { + .init(x: 0, y: 0, z: z, w: 0) + } + + var wVec: Self { + .init(x: 0, y: 0, z: 0, w: w) + } + + static var oneX: Self { + .init(x: 1, y: 0, z: 0, w: 0) + } + + static var oneY: Self { + .init(x: 0, y: 1, z: 0, w: 0) + } + + static var oneZ: Self { + .init(x: 0, y: 0, z: 1, w: 0) + } + + static var oneW: Self { + .init(x: 0, y: 0, z: 0, w: 1) + } + + var length: Scalar { + dot(self).squareRoot() + } + + var normalized: Self { + self / self.length + } + + func dot(_ b: Self) -> Scalar { + let xx = x * b.x + let yy = y * b.y + let zz = z * b.z + let ww = w * b.w + + return xx + yy + zz + ww + } +} + +public struct Matrix4x4 { + public var axisX: SIMD4 + public var axisY: SIMD4 + public var axisZ: SIMD4 + public var translation: SIMD4 + + init() { + self.init(axisX: .zero, axisY: .zero, axisZ: .zero, translation: .zero) + } + + init(axisX: SIMD4, axisY: SIMD4, axisZ: SIMD4, translation: SIMD4) { + self.axisX = axisX + self.axisY = axisY + self.axisZ = axisZ + self.translation = translation + } + + init(rotation: Quaternion) { + self.init(translation: .oneW, rotation: rotation) + } + + init(translation: SIMD4, rotation: Quaternion) { + let xq = rotation.a * rotation.components * 2 + let yq = rotation.b * rotation.components * 2 + let zq = rotation.c * rotation.components * 2 + + self.axisX = .init(x: 1 - yq.y - zq.z, y: xq.y + zq.w, z: xq.z - yq.w, w: 0) + self.axisY = .init(x: xq.y - zq.w, y: 1 - xq.x - zq.z, z: yq.z + xq.w, w: 0) + self.axisZ = .init(x: xq.z + yq.w, y: yq.z - xq.w, z: 1 - xq.x - yq.y, w: 0) + self.translation = translation + } + + public static func * (a: Self, b: SIMD4) -> SIMD4 { + let x = a.axisX.x * b.x + a.axisY.x * b.y + a.axisZ.x * b.z + a.translation.x * b.w + let y = a.axisX.y * b.x + a.axisY.y * b.y + a.axisZ.y * b.z + a.translation.y * b.w + let z = a.axisX.z * b.x + a.axisY.z * b.y + a.axisZ.z * b.z + a.translation.z * b.w + let w = a.axisX.w * b.x + a.axisY.w * b.y + a.axisZ.w * b.z + a.translation.w * b.w + + return .init(x: x, y: y, z: z, w: w) + } + + public static func * (a: Self, b: Self) -> Self { + let axisX = a * b.axisX + let axisY = a * b.axisY + let axisZ = a * b.axisZ + let translation = a * b.translation + + return Matrix4x4(axisX: axisX, axisY: axisY, axisZ: axisZ, translation: translation) + } + + public static func *= (a: inout Self, b: Self) { + a = a * b + } + + public var transposed: Self { + return Matrix4x4( + axisX: .init(x: axisX.x, y: axisY.x, z: axisZ.x, w: translation.x), + axisY: .init(x: axisX.y, y: axisY.y, z: axisZ.y, w: translation.y), + axisZ: .init(x: axisX.z, y: axisY.z, z: axisZ.z, w: translation.z), + translation: .init(x: axisX.w, y: axisY.w, z: axisZ.w, w: translation.w) + ) + } + + public static var identity: Self { + .init(axisX: .oneX, axisY: .oneY, axisZ: .oneZ, translation: .oneW) + } +} + +public struct Quaternion { + var components: SIMD4 + + public init(components: SIMD4) { + self.components = components + } + + public init(a: Scalar, b: Scalar, c: Scalar, d: Scalar) { + components = .init(x: a, y: b, z: c, w: d) + } + + public init(axis: SIMD4, radians: Scalar) { + let radHalf = radians * 0.5 + let sinR = sin(radHalf) + let cosR = cos(radHalf) + + components = axis * sinR + components.w = cosR + + components = components.normalized + } + + public var a: Scalar { + components.x + } + + public var b: Scalar { + components.y + } + + public var c: Scalar { + components.z + } + + public var d: Scalar { + components.w + } + + public static func * (a: Self, b: Self) -> Self { + let _a = a.a * b.d + a.b * b.c - a.c * b.b + a.d * b.a + let _b = a.b * b.d - a.a * b.c + a.c * b.a + a.d * b.b + let _c = a.c * b.d + a.a * b.b - a.b * b.a + a.d * b.c + let _d = a.d * b.d - a.a * b.a - a.b * b.b - a.c * b.c + return .init(a: _a, b: _b, c: _c, d: _d) + } + + public static func * (a: Self, b: Scalar) -> Self { + return .init(components: a.components * b) + } + + public static func *= (a: inout Self, b: Self) { + a = a * b + } + + public func dot(_ b: Self) -> Scalar { + return components.dot(b.components) + } + + public static var identity: Self { + .init(a: 0, b: 0, c: 0, d: 1) + } +} diff --git a/WebGPUDemo/Sources/Renderer.swift b/WebGPUDemo/Sources/Renderer.swift new file mode 100644 index 0000000..a8b884e --- /dev/null +++ b/WebGPUDemo/Sources/Renderer.swift @@ -0,0 +1,261 @@ +//===----------------------------------------------------------------------===// +// +// This source file is part of the Swift.org open source project +// +// Copyright (c) 2025 Apple Inc. and the Swift project authors +// Licensed under Apache License v2.0 with Runtime Library Exception +// +// See https://swift.org/LICENSE.txt for license information +// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors +// +//===----------------------------------------------------------------------===// + +import DOM +import WebGPU + +func draw(renderer: Renderer) { + _ = Window.global.requestAnimationFrame { + renderer.render(timestamp: $0) + draw(renderer: renderer) + } +} + +final class Renderer { + struct Assets { + let shaders: String + let model: String + let albedo: ImageBitmap + let normal: ImageBitmap + let metalRoughness: ImageBitmap + } + + let device: GPUDevice + let context: GPUCanvasContext + let pipeline: GPURenderPipeline + var lastTick: Double + let rotation: Quaternion + let passDescriptor: GPURenderPassDescriptor + let depthTexture: GPUTexture + let projectionMatrix: Matrix4x4 + var time: Double = 0.0 + var drawable: Drawable + let multisampleTexture: GPUTexture + + init(device: GPUDevice, gpu: GPU, assets: Assets) { + let window = Window.global + let document = window.document + + let canvas = HTMLCanvasElement(unsafelyWrapping: document.createElement(localName: "canvas").jsObject) + canvas.width = UInt32(window.innerWidth) + canvas.height = UInt32(window.innerHeight) + _ = document.body!.appendChild(node: canvas) + + context = canvas.getContext(GPUCanvasContext.self)! + + let format = gpu.getPreferredCanvasFormat() + context.configure( + configuration: .init( + device: device, + format: format, + ) + ) + + depthTexture = + device.createTexture( + descriptor: .init( + size: .init([canvas.width, canvas.height]), + sampleCount: 4, + format: .depth24plus, + usage: GPUTextureUsage.RENDER_ATTACHMENT, + ) + ) + + let canvasTexture = context.getCurrentTexture() + multisampleTexture = device.createTexture( + descriptor: .init( + size: .init([canvasTexture.width, canvasTexture.height]), + sampleCount: 4, + format: canvasTexture.format, + usage: GPUTextureUsage.RENDER_ATTACHMENT, + ) + ) + + passDescriptor = .init( + label: "triangle render pass", + colorAttachments: [ + .init( + view: multisampleTexture.createView(), + clearValue: .init([0.2, 0.2, 0.2, 1.0]), + loadOp: .clear, + storeOp: .store, + ) + ], + depthStencilAttachment: + .init( + view: depthTexture.createView(), + depthClearValue: 1.0, + depthLoadOp: .clear, + depthStoreOp: .store, + ) + ) + + let module = device.createShaderModule( + descriptor: .init( + label: "shaders", + code: assets.shaders, + ) + ) + let bindGroupLayout = device.createBindGroupLayout( + descriptor: .init( + label: "bind group layout", + entries: [ + .init( + binding: 0, + visibility: GPUShaderStage.VERTEX, + buffer: .init(type: .readOnlyStorage) + ), + .init( + binding: 1, + visibility: GPUShaderStage.VERTEX, + buffer: .init(type: .readOnlyStorage) + ), + .init( + binding: 2, + visibility: GPUShaderStage.VERTEX, + buffer: .init(type: .readOnlyStorage) + ), + .init( + binding: 3, + visibility: GPUShaderStage.VERTEX, + buffer: .init(type: .readOnlyStorage) + ), + .init( + binding: 4, + visibility: GPUShaderStage.FRAGMENT, + texture: .init() + ), + .init( + binding: 5, + visibility: GPUShaderStage.FRAGMENT, + texture: .init() + ), + .init( + binding: 6, + visibility: GPUShaderStage.FRAGMENT, + texture: .init() + ), + .init( + binding: 7, + visibility: GPUShaderStage.VERTEX | GPUShaderStage.FRAGMENT, + buffer: .init(type: .readOnlyStorage) + ), + .init( + binding: 8, + visibility: GPUShaderStage.FRAGMENT, + sampler: .init() + ), + .init( + binding: 9, + visibility: GPUShaderStage.VERTEX | GPUShaderStage.FRAGMENT, + buffer: .init(type: .readOnlyStorage) + ), + ] + ) + ) + + let pipelineLayout = device.createPipelineLayout( + descriptor: .init(bindGroupLayouts: [ + bindGroupLayout // @group(0) + ]) + ) + + pipeline = device.createRenderPipeline( + descriptor: .init( + // label: "pipeline", + layout: .init(pipelineLayout), + vertex: .init( + module: module, + entryPoint: "vs", + ), + primitive: .init( + topology: .triangleList, + frontFace: .ccw, + cullMode: .back, + ), + depthStencil: .init( + format: .depth24plus, + depthWriteEnabled: true, + depthCompare: .less, + ), + multisample: .init(count: 4), + fragment: .init( + module: module, + entryPoint: "fs", + targets: [.init(format: format)] + ), + ) + ) + self.device = device + + lastTick = Window.global.performance.timeOrigin + rotation = Quaternion(axis: Vector4(x: 1.0, y: 1.0, z: 1.0, w: 0.0), radians: 3.14) + + let nearZ: Float = 0.001 + let farZ: Float = 1000.0 + let fov: Float = Float.pi / 3 + let aspect = Float(canvas.width) / Float(canvas.height) + let va_tan = Float(1.0) / tan(fov * 0.5) + let ys = va_tan + let xs = ys / aspect + let zs = -(farZ + nearZ) / (farZ - nearZ) + let zss = -(2.0 * farZ * nearZ) / (farZ - nearZ) + self.projectionMatrix = Matrix4x4( + axisX: Vector4(x: xs, y: 0.0, z: 0.0, w: 0.0), + axisY: Vector4(x: 0.0, y: ys, z: 0.0, w: 0.0), + axisZ: Vector4(x: 0.0, y: 0.0, z: zs, w: -1.0), + translation: Vector4(x: 0.0, y: 0.0, z: zss, w: 0.0) + ) + + let model = ObjParser().parse(text: assets.model) + drawable = Drawable( + device: device, + bindGroupLayout: bindGroupLayout, + mesh: model.meshes[0], + position: Vector4(x: 0.0, y: 0.0, z: -1.5, w: 1.0), + scale: Vector4(x: 0.1, y: 0.1, z: 0.1, w: 1.0), + assets: assets, + ) + let initialRad = 1.57079633 * (500 / 1000.0) + let rotation = Quaternion(axis: .oneY, radians: Float(initialRad)) + drawable.rotation *= rotation + } + + let pi: Double = 3.1415926 + + func update(delta: Double) { + let rad = 1.57079633 * (delta / 1000.0) + let rotation = Quaternion(axis: .oneY, radians: Float(rad)) + drawable.rotation *= rotation + drawable.updateMatrixBuffer(queue: device.queue, viewProjection: projectionMatrix) + } + + func render(timestamp: Double) { + let delta = max(0.0, timestamp - lastTick) + lastTick = timestamp + time += delta + self.update(delta: delta) + + passDescriptor.colorAttachments[0]?.view = multisampleTexture.createView() + passDescriptor.colorAttachments[0]?.resolveTarget = context.getCurrentTexture().createView() + + let encoder = device.createCommandEncoder(descriptor: .init(label: "command encoder")) + + let pass = encoder.beginRenderPass(descriptor: passDescriptor) + pass.setPipeline(pipeline: pipeline) + drawable.draw(pass: pass) + pass.end() + + let commandBuffer = encoder.finish() + device.queue.submit(commandBuffers: [commandBuffer]) + } +} diff --git a/WebGPUDemo/Sources/Wavefront.swift b/WebGPUDemo/Sources/Wavefront.swift new file mode 100644 index 0000000..a25b7a4 --- /dev/null +++ b/WebGPUDemo/Sources/Wavefront.swift @@ -0,0 +1,168 @@ +//===----------------------------------------------------------------------===// +// +// This source file is part of the Swift.org open source project +// +// Copyright (c) 2025 Apple Inc. and the Swift project authors +// Licensed under Apache License v2.0 with Runtime Library Exception +// +// See https://swift.org/LICENSE.txt for license information +// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors +// +//===----------------------------------------------------------------------===// + +import JavaScriptKit + +extension UInt8 { + static let newline = UInt8(ascii: "\n") + static let space = UInt8(ascii: " ") + static let forwardSlash = UInt8(ascii: "/") +} + +public struct ObjParser { + init() {} + + func parse(text: String) -> Model { + var lines = text.utf8.lazy.split(separator: .newline).makeIterator() + var meshes = [Mesh]() + var builder = MeshBuilder() + + while let line = lines.next() { + let parts = line.split(separator: .space) + if parts.isEmpty { + continue + } + + switch parts[0] { + case "o": + if !builder.isEmpty { + meshes.append(builder.mesh) + builder = MeshBuilder() + } + + case "v": + if parts.count == 4 { + builder.vertices.append(Vector4(x: Float(parts[1])!, y: Float(parts[2])!, z: Float(parts[3])!, w: 1.0)) + } else { + builder.vertices.append( + Vector4(x: Float(parts[1])!, y: Float(parts[2])!, z: Float(parts[3])!, w: Float(parts[4])!) + ) + } + + case "vt": + builder.uvs.append(Vector2(x: Float(parts[1])!, y: Float(parts[2])!)) + + case "vn": + builder.normals.append(Vector4(x: Float(parts[1])!, y: Float(parts[2])!, z: Float(parts[3])!, w: 1.0)) + + case "f": + guard parts.count == 4 else { + fatalError("Can only support triangles") + } + func parseIndices(_ text: some Sequence) { + let parts = text.split(separator: .forwardSlash, omittingEmptySubsequences: false) + if parts.count >= 1 { + builder.vertexIndices.append(UInt32(parts[0])! - 1) + } + if parts.count >= 2 && !parts[1].isEmpty { + builder.uvIndices.append(UInt32(parts[1])! - 1) + } + if parts.count >= 3 { + builder.normalIndices.append(UInt32(parts[2])! - 1) + } + } + parseIndices(parts[1]) + parseIndices(parts[2]) + parseIndices(parts[3]) + + default: + continue + } + } + + if !builder.isEmpty { + meshes.append(builder.mesh) + } + return Model(meshes: meshes) + } +} + +public struct Model { + let meshes: [Mesh] +} + +struct MeshBuilder { + var vertices: [Vector4] = [] + var vertexIndices: [UInt32] = [] + var normals: [Vector4] = [] + var normalIndices: [UInt32] = [] + var uvs: [Vector2] = [] + var uvIndices: [UInt32] = [] + + var isEmpty: Bool { + vertices.isEmpty && vertexIndices.isEmpty && normals.isEmpty && normalIndices.isEmpty && uvs.isEmpty + && uvIndices.isEmpty + } + + var mesh: Mesh { + var remappedVertices: [Vector4] = Array(repeating: .zero, count: vertexIndices.count) + var remappedNormals: [Vector4] = Array(repeating: .zero, count: vertexIndices.count) + var remappedUVs: [Vector2] = Array(repeating: .zero, count: vertexIndices.count) + for (n, index) in normalIndices.enumerated() { + remappedNormals[n] = normals[Int(index)] + } + + for (n, index) in uvIndices.enumerated() { + remappedUVs[n] = uvs[Int(index)] + } + + for (n, index) in vertexIndices.enumerated() { + remappedVertices[n] = vertices[Int(index)] + } + + return Mesh( + vertices: remappedVertices, + indices: vertexIndices, + normals: remappedNormals, + uvs: remappedUVs + ) + } +} + +public struct Mesh { + public let vertices: [Vector4] + public let indices: [UInt32] + public let normals: [Vector4] + public let uvs: [Vector2] +} + +extension Float { + init?(_ text: some Collection) { + let text = String(decoding: text, as: UTF8.self) + guard let parsed = JSObject.global.parseFloat!(text).number else { + return nil + } + self.init(parsed) + } +} + +extension UInt32 { + init?(_ text: some Collection) { + let text = String(decoding: text, as: UTF8.self) + self.init(text) + } +} + +extension String { + static func ~= (lhs: Self, rhs: some Collection) -> Bool { + let lhs = lhs.utf8 + guard lhs.count == rhs.count else { return false } + var lhsIndex = lhs.startIndex + var rhsIndex = rhs.startIndex + while lhsIndex < lhs.endIndex { + guard lhs[lhsIndex] == rhs[rhsIndex] else { return false } + lhs.formIndex(after: &lhsIndex) + rhs.formIndex(after: &rhsIndex) + } + return true + } +} diff --git a/WebGPUDemo/index.html b/WebGPUDemo/index.html new file mode 100644 index 0000000..568373d --- /dev/null +++ b/WebGPUDemo/index.html @@ -0,0 +1,36 @@ + + + + + + Swift WebGPU Demo + + + + + +